Article View: es.comp.os.linux.programacion
Article #13912Re: Leer teclas de una en una
From: Carlos B. Ruiz
Date: Sat, 30 Dec 2000 13:09
Date: Sat, 30 Dec 2000 13:09
67 lines
2893 bytes
2893 bytes
>>>>> "Reinoso" == Reinoso G <rein oso.bao@wana doo.es> writes:
Reinoso> Hola, estoy haciendo mil pruebas para conseguir que cada
Reinoso> vez que puso una tecla, se ejecute la funci�n que sea y
Reinoso> vuelva a ler otra tecla, y as�.
Esta es la manera mas portable de como lo puedes hacer:
-8<---
#include <stdio.h> // printf() y demas
#include <stdlib.h> // atexit()
#include <sys/time.h> // select()
#include <sys/types.h> // select()
#include <unistd.h> // select()
#include <termios.h> // tcsetattr() tcgetattr()
void RestauraTerm( void );
struct termios AttrOld, AttrNew;
int main(void){
fd_set lista_desc;
int fd,ok,ret;
tcgetattr( STDIN_FILENO, &AttrOld );
tcgetattr( STDIN_FILENO, &AttrNew );
AttrNew.c_iflag &= ~(INLCR|ICRNL|IUCLC|ISTRIP|IXON|BRKINT);
AttrNew.c_oflag &= ~OPOST;
AttrNew.c_lflag &= ~(ICANON|ISIG|ECHO);
tcsetattr( STDIN_FILENO, TCSANOW, &AttrNew);
atexit( RestauraTerm );
fd=STDIN_FILENO;
ok=0;
while(!ok){
FD_ZERO( &lista_desc );
FD_SET( fd, &lista_desc );
select( fd+1, &lista_desc, NULL, NULL, NULL );
if( FD_ISSET( fd, &lista_desc) ){ // Evidentemente 'true' XDDDDD
printf("Ha pulsado la tecla: %c", fgetc(stdin) ); // debug
// <Ponga su codigo aqui> ;-)
ret=0;
ok=1;
}
else // Condicion de error aqui
ok=1;
ret=1;
}
exit(ret);
}
void RestauraTerm( void ){
tcsetattr( STDIN_FILENO, TCSANOW, &AttrOld);
printf("\n");
}
-8<---
Saludos.
--
#define QUESTION ( (to_be) || (!to_be) ) // W. Shakespeare
Carlos B. Ruiz (AKA iLogik) <ilogik@cryogen.com>
Linux reg. user #99885 Clave GPG via email con asunto [PGPKEY]
Grupo de usuarios de Linux y programadores de software libre de Palencia
Technical Details
Message-ID:
<87k88ixdh9.fsf@chaos.rpm.org>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!europa.netcrusader.net!208.184.7.66!newsfeed.skycache.com!Cidera!newsfeed.comtenidos.com!m2newsfeeder01!192.168.0.1!nobodyReferences:
<ri2i29.mk1.ln@EA4BAO.PLLANO.ESP.EU>Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII X-Google-Thread: f86c8,26a7060763e1bfa8 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2000-12-30 09:52:05 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!europa.netcrusader.net!208.184.7.66!newsfeed.skycache.com!Cidera!newsfeed.comtenidos.com!m2newsfeeder01!192.168.0.1!nobody From: ilogik@mail.en.firma (Carlos B. Ruiz) Newsgroups: es.comp.os.linux.programacion Subject: Re: Leer teclas de una en una Date: 30 Dec 2000 14:09:22 +0100 Organization: P.L.U.G. Lines: 67 Sender: ilogik@chaos.rpm.org Message-ID: <87k88ixdh9.fsf@chaos.rpm.org> References: <ri2i29.mk1.ln@EA4BAO.PLLANO.ESP.EU> NNTP-Posting-Host: usuario1-36-155-122.dialup.uni2.es Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: m2newsreader01.wanadoo.es 978196551 12797 62.36.155.122 (30 Dec 2000 17:15:51 GMT) X-Complaints-To: usenet@m2newsreader01.wanadoo.es NNTP-Posting-Date: Sat, 30 Dec 2000 17:15:51 +0000 (UTC) User-Agent: Gnus/5.0807 (Gnus v5.8.7) Emacs/20.7