1 #ifndef WIN32
2 
3 #include <unistd.h>
4 
5 #include <stdlib.h>
6 #include <stdio.h>
7 
8 #include <termios.h>
9 #include <string.h>
10 
11 #include <sys/ioctl.h> /* non posix */
12 
13 /* from: http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_4.html#SEC48 */
14 
15 static struct termios stored_settings;
16 
17 void
terminal_acquire(void)18 terminal_acquire(void){
19     struct termios new_settings;
20     tcgetattr(0,&stored_settings);
21     new_settings = stored_settings;
22     new_settings.c_lflag &= (~ECHO); /* no echo */
23     new_settings.c_lflag &= (~ICANON); /* no lined input */
24     new_settings.c_lflag &= (~ISIG); /* no signal generation */
25     new_settings.c_cc[VTIME] = 0;
26     new_settings.c_cc[VMIN] = 1;
27     tcsetattr(0,TCSANOW,&new_settings);
28     return;
29 }
30 
31 void
terminal_release(void)32 terminal_release(void){
33     tcsetattr(0,TCSANOW,&stored_settings);
34     return;
35 }
36 
37 int
terminal_getsize(void)38 terminal_getsize(void){
39     struct winsize winsz;
40     ioctl(1, TIOCGWINSZ, &winsz);
41     return winsz.ws_col;
42 }
43 
44 int
terminal_isatty(int fd)45 terminal_isatty(int fd){
46     return isatty(fd);
47 }
48 #endif /* ifndef WIN32 */
49