diff --git a/chap/curses.tex b/chap/curses.tex index 34a6343..5154532 100644 --- a/chap/curses.tex +++ b/chap/curses.tex @@ -7,17 +7,23 @@ En fait, nous allons plutôt parler de \textbf{ncurses} qui est l'implémentation actuelle de l'ancêtre \texttt{curses}. Voic ce -qu'en dit une page de man : +qu'en dit une page de man~: \begin{quote} -The ncurses library routines give the user a terminal-independent -method of updating character screens with reasonable optimization. -This implementation is ``new curses'' (ncurses) and is the approved -replacement for 4.4BSD classic curses, which has been discontinued. +The ncurses library routines give the user a terminal-independent +method of updating character screens with reasonable optimization. +This implementation is ``new curses'' (ncurses) and is the approved +replacement for 4.4BSD classic curses, which ha been discontinued. \end{quote} +Plus concrètement, Curses est un moyen optimisé de gestion des +écrans textes (Rappellez-vous notre ami le \textsc{Minitel}) afin +de créer des interfaces 'full-screen'. Vous pouvez adresser +chaque cellule de votre écran (la case où l'on peut mettre +un caractère) pour y écrire quelque chose, en gérant des +attributs tels que gras ou souligné. -\section{premier exemple} +\section{Premier exemple} Bien entendu, nous commencerons par l'ECM traditionnel de rigueur. @@ -28,12 +34,35 @@ interne de ncurses, et à régler l'interaction clavier/écran. Ensuite, avec \texttt{mvaddstr}, nous écrivons le texte passé en paramètre à une position fixée ligne,colonne -dans un écran virtuel -qui sera ensuite transféré dans l'écran réel +dans un écran virtuel (qui n'existe qu'en mémoire) +qui sera ensuite transféré dans l'écran réel (celui qui est affiché) par le \texttt{refresh()}. +Dans ma grande mansuétude, je n'aurais pas l'audace de vous montrer +une capture d'écran, puisque je me permet de supposer que vous +avez pris le temps de compiler l'exemple, et de voir par vous même +ce que ça donne. -\section{astuces} +\section{Bell and whistles} + +Voici comment centrer sur la ligne du haut +un texte écrit en \textbf{gras} grace à l'attribut +\texttt{A\_BOLD} : + +\begin{verbatim} +attron(A_BOLD); +mvaddstr(0, (COLS / 2) - (strlen(text) / 2), text); +attroff(A_BOLD); +\end{verbatim} + +Il existe tout un tas d'autres attributs: +\texttt{A\_UNDERLINE} pour le soulignement ou +\texttt{A\_BLINK} pour clignoter, par exemple. +La liste complète est dans le man~: \texttt{attr(3NCURSES)}, +avec plein +de fonctions spécialisées dans le traitement des attributs. + +\section{Astuces} Dans une boucle interactive, on va utiliser \texttt{getch()}, qui va bloquer tant qu'on n'a pas tapé sur une touche. Mais que faire si