From 083b0b53e450f317ca6e99cc1d077b10a5ac7d4d Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Mon, 28 Oct 2024 02:18:06 +0100 Subject: Add a new article on termios --- src/blog/termios/enable-xoff-xon.diff | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/blog/termios/enable-xoff-xon.diff (limited to 'src/blog/termios/enable-xoff-xon.diff') diff --git a/src/blog/termios/enable-xoff-xon.diff b/src/blog/termios/enable-xoff-xon.diff new file mode 100644 index 0000000..64841d2 --- /dev/null +++ b/src/blog/termios/enable-xoff-xon.diff @@ -0,0 +1,47 @@ + #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); ++} -- cgit v1.2.3