Précédent Index Suivant

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 veut­J
On peut taper ce que l'on veut­J
mais il faut attendre la fin de ligne­J
mais il faut attendre la fin de ligne­J
­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 -cbreak­J 
est un bon moyen pour ce faire, mais
 ­Jreset; tset­J 
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.
Précédent Index Suivant