iii managed the btty file with less open/close. - iomenu - interactive terminal-based selection menu Err bitreich.org 70 hgit clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu URL:git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu bitreich.org 70 1Log /scm/iomenu/log.gph bitreich.org 70 1Files /scm/iomenu/files.gph bitreich.org 70 1Refs /scm/iomenu/refs.gph bitreich.org 70 1Tags /scm/iomenu/tag bitreich.org 70 1README /scm/iomenu/file/README.gph bitreich.org 70 1LICENSE /scm/iomenu/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 601965c26a8164917e4b817273a5af3c901bc98f /scm/iomenu/commit/601965c26a8164917e4b817273a5af3c901bc98f.gph bitreich.org 70 1parent 70864688887921021de8ce2b803fdd4206214cda /scm/iomenu/commit/70864688887921021de8ce2b803fdd4206214cda.gph bitreich.org 70 hAuthor: Josuah Demangeonā  ā µ URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sun, 19 Mar 2017 17:19:49 +0100 Err bitreich.org 70 i Err bitreich.org 70 iii Err bitreich.org 70 imanaged the btty file with less open/close. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 67 ++++++++++++++++++------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 39 insertions(+), 28 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70 i@@ -19,6 +19,8 @@ Err bitreich.org 70 i Err bitreich.org 70 i static struct winsize winsize; Err bitreich.org 70 i static struct termios termios; Err bitreich.org 70 i+FILE *tty_fp = NULL; Err bitreich.org 70 i+int tty_fd; Err bitreich.org 70 i Err bitreich.org 70 i static char input[BUFSIZ]; Err bitreich.org 70 i static int current = 0, offset = 0, prev = 0, next = 0; Err bitreich.org 70 i@@ -29,35 +31,43 @@ static int opt_lines = 0; Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-free_v(char **v, int c) Err bitreich.org 70 i+free_all(void) Err bitreich.org 70 i { Err bitreich.org 70 i- for (; c > 0; c--) Err bitreich.org 70 i- free(v[c - 1]); Err bitreich.org 70 i- Err bitreich.org 70 i- free(v); Err bitreich.org 70 i+ if (linev) { Err bitreich.org 70 i+ for (; linec > 0; linec--) Err bitreich.org 70 i+ free(linev[linec - 1]); Err bitreich.org 70 i+ free(linev); Err bitreich.org 70 i+ } Err bitreich.org 70 i+ if (matchv) Err bitreich.org 70 i+ free(matchv); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i die(const char *s) Err bitreich.org 70 i { Err bitreich.org 70 i- /* tcsetattr(STDIN_FILENO, TCSANOW, &termio_old); */ Err bitreich.org 70 i- fprintf(stderr, "%s\n", s); Err bitreich.org 70 i+ tcsetattr(tty_fd, TCSANOW, &termios); Err bitreich.org 70 i+ fclose(tty_fp); Err bitreich.org 70 i+ close(tty_fd); Err bitreich.org 70 i+ free_all(); Err bitreich.org 70 i+ perror(s); Err bitreich.org 70 i exit(EXIT_FAILURE); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-set_terminal(int tty_fd) Err bitreich.org 70 i+set_terminal(void) Err bitreich.org 70 i { Err bitreich.org 70 i- if (tcgetattr(tty_fd, &termios) < 0) { Err bitreich.org 70 i+ struct termios new; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (tcgetattr(tty_fd, &termios) < 0 || tcgetattr(tty_fd, &new) < 0) { Err bitreich.org 70 i perror("tcgetattr"); Err bitreich.org 70 i exit(EXIT_FAILURE); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- termios.c_lflag &= ~(ICANON | ECHO | IGNBRK); Err bitreich.org 70 i+ new.c_lflag &= ~(ICANON | ECHO | IGNBRK); Err bitreich.org 70 i Err bitreich.org 70 i- tcsetattr(tty_fd, TCSANOW, &termios); Err bitreich.org 70 i+ tcsetattr(tty_fd, TCSANOW, &new); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i@@ -178,7 +188,7 @@ print_columns(void) Err bitreich.org 70 i Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i-print_screen(int tty_fd) Err bitreich.org 70 i+print_screen(void) Err bitreich.org 70 i { Err bitreich.org 70 i int count; Err bitreich.org 70 i Err bitreich.org 70 i@@ -292,7 +302,7 @@ print_selection(void) Err bitreich.org 70 i * Perform action associated with key Err bitreich.org 70 i */ Err bitreich.org 70 i static int Err bitreich.org 70 i-input_key(FILE *tty_fp) Err bitreich.org 70 i+input_key(void) Err bitreich.org 70 i { Err bitreich.org 70 i char key = fgetc(tty_fp); Err bitreich.org 70 i Err bitreich.org 70 i@@ -348,21 +358,18 @@ input_key(FILE *tty_fp) Err bitreich.org 70 i * Listen for the user input and call the appropriate functions. Err bitreich.org 70 i */ Err bitreich.org 70 i static int Err bitreich.org 70 i-input_get(int tty_fd) Err bitreich.org 70 i+input_get(void) Err bitreich.org 70 i { Err bitreich.org 70 i- FILE *tty_fp = fopen("/dev/tty", "r"); Err bitreich.org 70 i int exit_code; Err bitreich.org 70 i Err bitreich.org 70 i input[0] = '\0'; Err bitreich.org 70 i Err bitreich.org 70 i- set_terminal(tty_fd); Err bitreich.org 70 i+ set_terminal(); Err bitreich.org 70 i Err bitreich.org 70 i- while ((exit_code = input_key(tty_fp)) == CONTINUE) Err bitreich.org 70 i- print_screen(tty_fd); Err bitreich.org 70 i+ while ((exit_code = input_key()) == CONTINUE) Err bitreich.org 70 i+ print_screen(); Err bitreich.org 70 i Err bitreich.org 70 i- set_terminal(tty_fd); Err bitreich.org 70 i- Err bitreich.org 70 i- fclose(tty_fp); Err bitreich.org 70 i+ tcsetattr(tty_fd, TCSANOW, &termios); Err bitreich.org 70 i Err bitreich.org 70 i return exit_code; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -380,9 +387,9 @@ usage(void) Err bitreich.org 70 i int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i- int i, exit_code, tty_fd = open("/dev/tty", O_RDWR); Err bitreich.org 70 i+ int exit_code; Err bitreich.org 70 i Err bitreich.org 70 i- for (i = 1; i < argc; i++) { Err bitreich.org 70 i+ for (int i = 1; i < argc; i++) { Err bitreich.org 70 i if (argv[i][0] != '-' || strlen(argv[i]) != 2) Err bitreich.org 70 i usage(); Err bitreich.org 70 i Err bitreich.org 70 i@@ -403,13 +410,17 @@ main(int argc, char *argv[]) Err bitreich.org 70 i Err bitreich.org 70 i read_lines(); Err bitreich.org 70 i Err bitreich.org 70 i- print_screen(tty_fd); Err bitreich.org 70 i- exit_code = input_get(tty_fd); Err bitreich.org 70 i+ tty_fp = fopen("/dev/tty", "r"); Err bitreich.org 70 i+ tty_fd = open("/dev/tty", O_RDWR); Err bitreich.org 70 i Err bitreich.org 70 i+ print_screen(); Err bitreich.org 70 i+ exit_code = input_get(); Err bitreich.org 70 i+ Err bitreich.org 70 i+ tcsetattr(tty_fd, TCSANOW, &termios); Err bitreich.org 70 i print_clear(opt_lines); Err bitreich.org 70 i- close(tty_fd); Err bitreich.org 70 i- free_v(linev, linec); Err bitreich.org 70 i- free(matchv); Err bitreich.org 70 i+ fclose(tty_fp); Err bitreich.org 70 i+ close(tty_fd); Err bitreich.org 70 i+ free_all(); Err bitreich.org 70 i Err bitreich.org 70 i return exit_code; Err bitreich.org 70 i } Err bitreich.org 70 .