1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| // Same signature as Windows' one...
int _kbhit ( void ) {
struct timeval tv = { 0, 0 };
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(STDIN_FILENO, &readfds);
int k = select(STDIN_FILENO+1, &readfds, NULL, NULL, &tv) ;
return (k==1) ;
}
static struct termios cooked ; // Cooked mode parameters.
static bool raw_active = false ; // Current terminal mode.
void set_raw ( void ) {
struct termios raw;
if (raw_active)
return ;
tcgetattr(STDIN_FILENO,&cooked);
raw = cooked;
cfmakeraw(&raw);
tcsetattr(STDIN_FILENO,TCSANOW,&raw);
raw_active = true ;
}
void set_cooked ( void ) {
if (!raw_active)
return ;
tcsetattr(STDIN_FILENO,TCSANOW,&cooked);
raw_active = false ;
} |
Partager