diff --git a/tecs/sys_select.c b/tecs/sys_select.c index 0d60d92..dae71b9 100644 --- a/tecs/sys_select.c +++ b/tecs/sys_select.c @@ -34,6 +34,18 @@ void sys_keys_off(void) { } } +static int getChar(void) { + unsigned char c; + int rt; + + rt = read(STDIN_FILENO, &c, 1); + if (rt<=0) { + return EOF; + } else { + return c; + } +} + int sys_select_or_key(fd_set *mask, int msecTmo, int *key) { int fd, iret, fd1, chr; struct timeval tmo, tmo0={0,0}; @@ -47,8 +59,9 @@ int sys_select_or_key(fd_set *mask, int msecTmo, int *key) { perror("error in select"); } fd1=STDIN_FILENO; - chr=fgetc(stdin); - if (chr==EOF && iret==0) { + /* chr=fgetc(stdin); */ + chr = getChar(); + if (chr == EOF && iret==0) { /* */ rmask=*mask; FD_SET(STDIN_FILENO, &rmask); if (msecTmo>=0) { @@ -68,7 +81,8 @@ int sys_select_or_key(fd_set *mask, int msecTmo, int *key) { perror("error in select"); } if (FD_ISSET(STDIN_FILENO, &rmask)) { - chr=fgetc(stdin); + chr = getChar(); + /* chr=fgetc(stdin); */ } FD_CLR(STDIN_FILENO, &rmask); }