🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #13912

Re: Leer teclas de una en una

#13912
From: Carlos B. Ruiz
Date: Sat, 30 Dec 2000 13:09
67 lines
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!nobody
References: <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