5.8 Au coup par coup
Un éditeur pleine page, un programme comme
more sollicitent puis utilisent un à un les caractères frappés.
Il n'y a plus de notion de ligne courante éditable, il n'y a plus qu'une
lecture directe caractère par caractère.
Ce mode est possible grâce à
stty cbreak
On revient au mode natif par
stty -cbreak
On peut, en C ou en d'autres langages, utiliser la fonction
getchar qui retourne le caractère suivant du flux.
l'usage de cette fonction est indépendant de la programmation de l'interface
et si cette dernière est en mode
-cbreak c'est-à-dire en mode ligne, le premier appel à
getchar
bloque le programme jusqu'à ce que l'utilisatrice/teur frappe, entre
autres caractères un NL.
Le programme sera alors redémarré et consommera tous les caractères
frappés d'avance.
Par exemple,
#include <stdio.h>
main () { char c; /* Le caractère courant */
while ( (c=getchar()) != EOF ) putchar(c);
exit(0); }
le programme-miroir précédent (en C) fait écho de chaque caractère qu'il
lit.
Ainsi obtiendra-t'on le comportement suivant (les sorties d'UNIX
sont en gras).
$ stty -cbreak echo
$ miroir
On peut taper ce que l'on veutJ
On peut taper ce que l'on veutJ
mais il faut attendre la fin de ligneJ
mais il faut attendre la fin de ligneJ
D
$ stty cbreak echo ; miroir ; stty -cbreak
eecchhoo!!
\
Interrupt ...
$
Il n'y a qu'une seule interface pour votre couple écran-clavier.
Toute programmation spécifique de l'interface est donc partagée par
toutes les tâches qui y accédent.
La remise en état de l'interface est souvent nécessaire après meurtre
impromptu.
Jstty nl echo -cbreakJ
est un bon moyen pour ce faire, mais
Jreset; tsetJ
est encore meilleur.
reset est, comme son nom l'indique, un programme qui remet une interface en
mode natif;
tset (pour Terminal SET) réinitialise physiquement un terminal en lui émettant
ce qu'il faut pour qu'il se sente en aussi bonne forme qu'après un
arrêt-marche.