make the code a bit cleaner - iomenu - interactive terminal-based selection menu HTML git clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit dc5363e17ca9699906f7789d6175dc09aa6418ec DIR parent e72aa011e805f26becc50b68673bad057a743c39 HTML Author: Josuah Demangeon <mail@josuah.net> Date: Sat, 9 Jun 2018 19:03:51 +0200 make the code a bit cleaner Remove the "extern ..." everywhere and remove unused / rename functions Diffstat: M iomenu.c | 132 ++++++++++--------------------- 1 file changed, 42 insertions(+), 90 deletions(-) --- DIR diff --git a/iomenu.c b/iomenu.c @@ -78,9 +78,6 @@ getkey(void) static void split_lines(char *buf) { - extern char **linev, **matchv; - extern int linec; - char *b, **lv, **mv; linec = 1; @@ -104,8 +101,8 @@ split_lines(char *buf) static void read_stdin(void) { - size_t size, len, off; - char *buf; + size_t size, len, off; + char *buf; size = BUFSIZ; off = 0; @@ -126,10 +123,7 @@ read_stdin(void) static void move(int sign) { - extern char **matchv; - extern int matchc; - - int i; + int i; for (i = cur + sign; 0 <= i && i < matchc; i += sign) { if (hsflag == 0 || matchv[i][0] != '#') { @@ -157,12 +151,9 @@ tokenize(char **tokv, char *str) static void filter(int searchc, char **searchv) { - extern char **matchv; - extern int matchc, cur; - - int n; - char *tokv[sizeof(input) * sizeof(char *) + sizeof(NULL)]; - char buf[sizeof(input)]; + int n; + char *tokv[sizeof(input) * sizeof(char *) + sizeof(NULL)]; + char buf[sizeof(input)]; strncpy(buf, input, sizeof(input)); buf[sizeof(input) - 1] = '\0'; @@ -179,10 +170,7 @@ filter(int searchc, char **searchv) static void move_page(signed int sign) { - extern struct winsize ws; - extern int matchc, cur; - - int i, rows; + int i, rows; rows = ws.ws_row - 1; i = cur - cur % rows + rows * sign; @@ -195,9 +183,6 @@ move_page(signed int sign) static void move_header(signed int sign) { - extern char **matchv; - extern int matchc, cur; - move(sign); if (hsflag == 0) return; @@ -215,9 +200,7 @@ move_header(signed int sign) static void remove_word() { - extern char input[LINE_MAX]; - - int len, i; + int len, i; len = strlen(input) - 1; for (i = len; i >= 0 && isspace(input[i]); i--) @@ -231,9 +214,7 @@ remove_word() static void add_char(char c) { - extern char input[LINE_MAX]; - - int len; + int len; len = strlen(input); if (isprint(c)) { @@ -246,10 +227,7 @@ add_char(char c) static void print_selection(void) { - extern char **matchv, input[LINE_MAX]; - extern int matchc; - - char **match; + char **match; if (hsflag) { match = matchv + cur; @@ -268,17 +246,16 @@ print_selection(void) } /* -** Big case table, that calls itself back for with ALT (aka Esc), CSI -** (aka Esc + [). These last two have values above the range of ASCII. -*/ + * Big case table, that calls itself back for with ALT (aka Esc), CSI + * (aka Esc + [). These last two have values above the range of ASCII. + */ int -key(int k) +key(void) { - extern char **matchv, input[LINE_MAX]; - extern int linec; + int k; top: - switch (k) { + switch ((k = getkey())) { case CTL('C'): return -1; case CTL('U'): @@ -348,8 +325,6 @@ top: static void print_line(char *line, int highlight) { - extern struct winsize ws; - if (hsflag && line[0] == '#') fprintf(stderr, "\n\x1b[1m\r%.*s\x1b[m", utf8_col(line + 1, ws.ws_col, 0), line + 1); @@ -364,15 +339,11 @@ print_line(char *line, int highlight) static void print_screen(void) { - extern struct winsize ws; - extern char **matchv, input[LINE_MAX]; - extern int matchc; - - char **m; - int p, i, c, cols, rows; + char **m; + int p, i, c, cols, rows; cols = ws.ws_col; - rows = ws.ws_row - 1; /* keep one line for user input */ + rows = ws.ws_row - 1; /* -1 to keep one line for user input */ p = c = 0; i = cur - cur % rows; m = matchv + i; @@ -387,12 +358,12 @@ print_screen(void) } /* -** Set terminal in raw mode. -*/ + * Set terminal to raw mode. + */ static void -set_terminal(void) +term_set(void) { - struct termios new; + struct termios new; fputs("\x1b[s\x1b[?1049h\x1b[H", stderr); if (tcgetattr(STDERR_FILENO, &termios) == -1 || @@ -404,10 +375,10 @@ set_terminal(void) } /* -** Take terminal out of raw mode. -*/ + * Take terminal out of raw mode. + */ static void -reset_terminal(void) +term_reset(void) { fputs("\x1b[2J\x1b[u\033[?1049l", stderr); if (tcsetattr(STDERR_FILENO, TCSANOW, &termios)) @@ -415,18 +386,12 @@ reset_terminal(void) } static void -sighandle(int sig) +sigwinch(int sig) { - extern struct winsize ws; - - switch (sig) { - case SIGWINCH: - if (ioctl(STDERR_FILENO, TIOCGWINSZ, &ws) == -1) - die("ioctl"); - print_screen(); - break; - } - signal(sig, sighandle); + if (ioctl(STDERR_FILENO, TIOCGWINSZ, &ws) == -1) + die("ioctl"); + print_screen(); + signal(sig, sigwinch); } static void @@ -436,22 +401,6 @@ usage(void) exit(EXIT_FAILURE); } -void -init(void) -{ - extern char input[LINE_MAX]; - - input[0] = '\0'; - read_stdin(); - filter(linec, linev); - - if (freopen("/dev/tty", "r", stdin) == NULL) - die("reopening /dev/tty as stdin"); - - set_terminal(); - sighandle(SIGWINCH); -} - /* ** Read stdin in a buffer, filling a table of lines, then re-open stdin to ** /dev/tty for an interactive (raw) session to let the user filter and select @@ -460,8 +409,6 @@ init(void) int main(int argc, char *argv[]) { - int exit_code; - ARGBEGIN { case '#': hsflag = 1; @@ -469,17 +416,22 @@ main(int argc, char *argv[]) default: usage(); } ARGEND - init(); + + input[0] = '\0'; + read_stdin(); + filter(linec, linev); + if (freopen("/dev/tty", "r", stdin) == NULL) + die("reopening /dev/tty as stdin"); + term_set(); + sigwinch(SIGWINCH); #ifdef __OpenBSD__ pledge("stdio tty", NULL); #endif - while ((exit_code = key(getkey())) > 0) + while (key() > 0) print_screen(); + term_reset(); - print_screen(); - reset_terminal(); - - return exit_code; + return 0; }