diff -urN cui106/key.c cui107/key.c --- cui106/key.c Thu Mar 27 22:10:00 2014 +++ cui107/key.c Sat Apr 12 22:00:00 2014 @@ -4,6 +4,7 @@ #include #include #include +#include #include #define KEY_FD 0 @@ -30,11 +31,25 @@ tcsetattr(KEY_FD, TCSANOW, &bak); } +static int +readable_chk(int fd) +{ + fd_set rfs; + struct timeval tm; + + FD_ZERO(&rfs); + FD_SET(fd, &rfs); + tm.tv_sec = 0; + tm.tv_usec = 100*1000; + return select(fd+1, &rfs, NULL, NULL, &tm) > 0; +} + int cui_key_get(void) { unsigned char uc; + if(!readable_chk(KEY_FD)) return 0; if(read(KEY_FD, &uc, 1) != 1) return 0; return uc; }