#include #include +#include #include #include #include +static void restore_tcattrs(void); + +struct termios old_attrs; + int main(void) { struct termios tp; tcgetattr(STDIN_FILENO, &tp); + old_attrs = tp; tp.c_iflag &= ~(IXANY | IXON | IXOFF); tcsetattr(STDIN_FILENO, TCSANOW, &tp); + atexit(restore_tcattrs); initscr(); /* Init screen */ noecho(); /* Don’t echo keypresses */ @@ -25,19 +18,10 @@ for (;;) { /* Read char and encode it as a string */ char buf[5]; + int ch = getch(); + if (ch == '\x11') /* ^Q */ + break; + vis(buf, ch, VIS_WHITE, 0); - vis(buf, getch(), VIS_WHITE, 0); clear(); /* Clear screen */ printw("%s\n", buf); /* Write char to screen */ refresh(); /* Refresh display */ } - /* unreachable */ + endwin(); /* Destroy screen */ + return EXIT_SUCCESS; } + +void +restore_tcattrs(void) +{ + tcsetattr(STDIN_FILENO, TCSANOW, &old_attrs); +}