%
%  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]{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)}




