2020-04-30 21:25:04 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
isolate terminal setup/restore code
diff --git a/isv.c b/isv.c index 4d9ddf4..9118305 100644 --- a/isv.c +++ b/isv.c @@ -50,6 +50,25 @@ read_beu64(unsigned char *buf) } void +setup_terminal(struct termios *term_prev) +{ + struct termios term_raw; + + tcgetattr(0, term_prev); + term_raw = *term_prev; + term_raw.c_lflag &= ~(ECHO | ICANON); + term_raw.c_cc[VMIN] = 0x00; + term_raw.c_cc[VTIME] = 0x01; /* in deciseconds */ + tcsetattr(0, TCSAFLUSH, &term_raw); +} + +void +restore_terminal(struct termios *term_prev) +{ + tcsetattr(0, TCSAFLUSH, term_prev); +} + +void load_services(const char *base_dir, int nservices) { int i, fd; @@ -142,7 +161,7 @@ main(int argc, char *argv[]) int nservices; int name_size; struct winsize term_size; - struct termios term_prev, term_raw; + struct termios term_prev; char byte; if (!isatty(1)) @@ -180,12 +199,7 @@ main(int argc, char *argv[]) fprintf(stderr, "sorry, terminal too small\n"); return 1; } - tcgetattr(0, &term_prev); - term_raw = term_prev; - term_raw.c_lflag &= ~(ECHO | ICANON); - term_raw.c_cc[VMIN] = 0x00; - term_raw.c_cc[VTIME] = 0x01; /* in deciseconds */ - tcsetattr(0, TCSAFLUSH, &term_raw); + setup_terminal(&term_prev); load_services(base_dir, nservices); show_services(nservices); while (1) { @@ -194,6 +208,6 @@ main(int argc, char *argv[]) break; } } - tcsetattr(0, TCSAFLUSH, &term_prev); + restore_terminal(&term_prev); return 0; }