Mephisto Posté(e) le 9 janvier 2007 Partager Posté(e) le 9 janvier 2007 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 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 ). merci! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 9 janvier 2007 Auteur Partager Posté(e) le 9 janvier 2007 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 merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 9 janvier 2007 Partager Posté(e) le 9 janvier 2007 Mephisto : penses aux balises . Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 9 janvier 2007 Partager Posté(e) le 9 janvier 2007 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()Une bonne lecture : "programmation système en C sous linux" de C. Blaess Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 11 janvier 2007 Auteur Partager Posté(e) le 11 janvier 2007 ok, je vais regarder ca dsl, je connaissais pas la alise code merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.