% % nouveau 20 juillet 2014 ave StExupery % \chapter{curses} \label{curses} \index{curses} 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 : \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. \end{quote} \section{premier exemple} Bien entendu, nous commencerons par l'ECM traditionnel de rigueur. \lstinputlisting[language=C]{code/ex_curses.c} La première étape consiste à initialiser et configurer le moteur 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 par le \texttt{refresh()}. \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 on veut utiliser, en plus du clavier, un autre périphérique de saisie, genre un Joystick\index{joystick} ? Bien entendu, on peut utiliser \texttt{select(2)}, mais cela nécessite de connaitre le \textit{file descriptor} auquel est attaché le clavier. Dans le contexte classique, on peut assumer que ce sera le \texttt{fd} associé à \textit{stdin}, mais il est imprudent de compter là-dessus. ---> voir \texttt{newterm(3)}