diff -urN cui81/cui.c cui82/cui.c --- cui81/cui.c Thu Mar 27 22:00:00 2014 +++ cui82/cui.c Thu Mar 27 22:10:00 2014 @@ -12,6 +12,8 @@ #include #include #include +#include +#include typedef struct cui_main_stack *cui_main_stack; @@ -405,6 +407,47 @@ cui_running_set(FALSE); } +#define KEY_FD 0 + +static fd_set sel_rfs, res_rfs; + +static void +cui_select_init(void) +{ + FD_ZERO(&sel_rfs); +} + +static void +cui_select_add(int fd) +{ + FD_SET(fd, &sel_rfs); +} + +static void +cui_select_del(int fd) +{ + FD_CLR(fd, &sel_rfs); +} + +static int +cui_select(void) +{ + int nfds = 1, fd; + struct timeval tm; + + res_rfs = sel_rfs; + for(fd=0; fd #include #include -#include #include #define KEY_FD 0 @@ -34,17 +33,7 @@ int cui_key_get(void) { - fd_set rfs; - struct timeval tm; - int ret; unsigned char uc; - - FD_ZERO(&rfs); - FD_SET(KEY_FD, &rfs); - tm.tv_sec = 0; - tm.tv_usec = 100*1000; - ret = select(KEY_FD+1, &rfs, NULL, NULL, &tm); - if(ret <= 0) return 0; if(read(KEY_FD, &uc, 1) != 1) return 0; return uc;