Jump to content
Nous sommes au courant pour les messages privés des jolies demoiselles. L'équipe de modération s'en est occupé. Merci de ne plus signaler les messages. ×

Archived

This topic is now archived and is closed to further replies.

Mephisto

termcap

Recommended Posts

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!

Share this post


Link to post
Share on other sites

bon, je viens de retourner sur un unix, ca tourne parfaitement

reste alors la question de la compatibilite linux, juste pour le fun

comment inhiber la bufferisation et comment faire mes define ?

rien de presse, linux, c'est juste pour me faire plaisir :eeek2:

merci !

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

×
×
  • Create New...