Aller au contenu

termcap


Mephisto

Messages recommandés

bonjour !

comme le laisse entendre le titre du post, j'ai un petit soucis avec les termcap

dans un while, je fais un read (0, buf, 42); et je voudrais renvoyer mon buffer a chaque fois qu'on appuie sur une touche

une partie de mon code:

  int			   n;
 char			  buf[42];
 struct termios	oldln;
 struct termios	nwln;

 ioctl(0, TIOCGETA, &oldln);
 ioctl(0, TIOCGETA, &nwln);
 nwln.c_lflag &= ~(ICANON|ECHO|ISIG);
 ioctl(0, TIOCSETA, &nwln);
 refresh(args, x);
 while (42)
{
  if ((n = read(1, buf, SB)) < 0) /* on recupere sur le clavier */
	{
	  ioctl (0, TIOCSETA, &oldln);
	  error(4);
	}
  act(buf, n, args); /* on envoie dans la fonction ki bidouille a partir du buffer (je met le n pour 
						les touches comme up, down, ... ki sont une composition de plusieurs ascii) */
  refresh(args, x);  /* on raffiche notre bordel avec les modifications */
}

mon probleme, c'est que ca bufferise pas :\

je dois quand meme appuyer sur entre pour envoyer mon buffer dans la fonction suivante ...

je ne vois pas d'ou vient le prob :\

bon, et question subsidiaire a deux carambars:

je taffe actuellement a la maison, sous linux, mais d'habitude, je suis sous unix.

en compilant, j'ai releve un petit pepin: sous unix, ioctl utilise TIOCSETA/TIOCGETA/... par contre, sous linux, c'est TCSETA/TCGETA/... (bon, je vais pas recopier le man ioctl_list...)

bref, pour le fun, n'y aurait-il pas un define qui me permettrait de savoir sous quel archi je suis et faire un #define TIOCSETA TCSETA par exemple ?

merci pour votre aide :p

edit pour les codeurs du site:

virer tous les espaces superflus, c'est pas mal, mais dans le cas d'une partie de code, c'est perturbant

pour la pochaine version du site, on pourrait pas rajouter un petit truc juste pour poster une partie de code, pas des trucs de barbares, mais juste quelques lignes, qui soient correctement presente (bon, d'accord, ca servira presque jamais, et ca ne servira qu'aux puristes qui se sentent agresse par un espace manquant, mais, pour l'amour de l'esthetique du code, ce serait un beau geste :p).

merci!

Lien vers le commentaire
Partager sur d’autres sites

tu peux mettre ton code entre balise

 ce sera plus lisible.

Sous linux, tu as une fonction cfmakeraw(struct termios * conf) qui te fous un mode brut dans ta structure de controle de terminal, comme ça, tu n'as plus qu'a seter cette avec tcsetattr()

:transpi:

Une bonne lecture : "programmation système en C sous linux" de C. Blaess

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...