SMOLNET PORTAL home about changes
iiomenu.c, Makefile: style change and making it work on OpenBSD - 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 84dbca0112c08a49515d4bd94a37a6c859e19a7f	/scm/iomenu/commit/84dbca0112c08a49515d4bd94a37a6c859e19a7f.gph	bitreich.org	70
1parent 376d9cfc1451c3e416065b0fdd958c491b9b4a93	/scm/iomenu/commit/376d9cfc1451c3e416065b0fdd958c491b9b4a93.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Mon, 23 Oct 2017 01:21:34 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iiomenu.c, Makefile: style change and making it work on OpenBSD	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M Makefile                            |       5 ++++-	Err	bitreich.org	70
i  M iomenu.c                            |     103 +++++++++++--------------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i2 files changed, 41 insertions(+), 67 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/Makefile b/Makefile	/scm/iomenu/file/Makefile.gph	bitreich.org	70
i@@ -1,8 +1,11 @@	Err	bitreich.org	70
i CFLAGS = -std=c89 -Wpedantic -Wall -Wextra -g -D_POSIX_C_SOURCE=200809L	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+OBJ = iomenu.o utf8.o	Err	bitreich.org	70
i+	Err	bitreich.org	70
i all: iomenu	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-iomenu: iomenu.o utf8.o	Err	bitreich.org	70
i+iomenu: $(OBJ)	Err	bitreich.org	70
i+        $(CC) $(LDFLAGS) $(OBJ) -o $@	Err	bitreich.org	70
i 	Err	bitreich.org	70
i clean:	Err	bitreich.org	70
i         rm -f *.o iomenu	Err	bitreich.org	70
1diff --git a/iomenu.c b/iomenu.c	/scm/iomenu/file/iomenu.c.gph	bitreich.org	70
i@@ -13,8 +13,11 @@	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #include "utf8.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#define CONTINUE  2   /* as opposed to EXIT_SUCCESS and EXIT_FAILURE */	Err	bitreich.org	70
i-#define MARGIN    30  /* space for the input before the horizontal list */	Err	bitreich.org	70
i+#ifndef SIGWINCH	Err	bitreich.org	70
i+#define SIGWINCH 28	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
i+#define CONTINUE 2   /* as opposed to EXIT_SUCCESS and EXIT_FAILURE */	Err	bitreich.org	70
i+#define MARGIN   30  /* space for the input before the horizontal list */	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #define  CTL(char) (char ^ 0x40)	Err	bitreich.org	70
i #define  ALT(char) (char + 0x80)	Err	bitreich.org	70
i@@ -180,8 +183,10 @@ move(signed int sign)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i move_page(signed int sign)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        int i;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         if (opt['l'] <= 0) {	Err	bitreich.org	70
i-                if        (sign > 0) {	Err	bitreich.org	70
i+                if (sign > 0) {	Err	bitreich.org	70
i                         offset = current = next;	Err	bitreich.org	70
i                         next   = next_page(next);	Err	bitreich.org	70
i                 } else if (sign < 0) {	Err	bitreich.org	70
i@@ -189,11 +194,9 @@ move_page(signed int sign)	Err	bitreich.org	70
i                         offset = current = prev_page(offset);	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i         } else {	Err	bitreich.org	70
i-                int i = current - current % rows + rows * sign;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i+                i = current - current % rows + rows * sign;	Err	bitreich.org	70
i                 if (!(0 < i && i < matchc))	Err	bitreich.org	70
i                         return;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 current = i - 1;	Err	bitreich.org	70
i                 move(+1);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i@@ -214,13 +217,11 @@ format(char *str, int cols)	Err	bitreich.org	70
i                                 col++;	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i                         str++;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 } else if (utf8_to_rune(&rune, str) && rune_is_print(rune)) {	Err	bitreich.org	70
i                         int i = utf8_len(str);	Err	bitreich.org	70
i                         while (i--)	Err	bitreich.org	70
i                                 *fmt++ = *str++;	Err	bitreich.org	70
i                         col++;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 } else {	Err	bitreich.org	70
i                         *fmt++ = '?';	Err	bitreich.org	70
i                         col++;	Err	bitreich.org	70
i@@ -247,10 +248,8 @@ print_lines(void)	Err	bitreich.org	70
i                         format(matchv[i], ws.ws_col - 1)	Err	bitreich.org	70
i                 );	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         while (printed++ < rows)	Err	bitreich.org	70
i                 fputs("\n\033[K", stderr);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fprintf(stderr, "\033[%dA\r\033[K", rows);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -262,27 +261,21 @@ print_segments(void)	Err	bitreich.org	70
i         if (current < offset) {	Err	bitreich.org	70
i                 next   = offset;	Err	bitreich.org	70
i                 offset = prev_page(offset);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         } else if (current >= next) {	Err	bitreich.org	70
i                 offset = next;	Err	bitreich.org	70
i                 next   = next_page(offset);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fprintf(stderr, "\r\033[K\033[%dC", MARGIN);	Err	bitreich.org	70
i         fputs(offset > 0 ? "< " : "  ", stderr);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         for (i = offset; i < next && i < matchc; i++) {	Err	bitreich.org	70
i                 fprintf(stderr,	Err	bitreich.org	70
i                         opt['#'] && matchv[i][0] == '#' ? "\033[1m %s \033[m" :	Err	bitreich.org	70
i-                        i == current                        ? "\033[7m %s \033[m" :	Err	bitreich.org	70
i-                                                          " %s ",	Err	bitreich.org	70
i+                        i == current ? "\033[7m %s \033[m" : " %s ",	Err	bitreich.org	70
i                         format(matchv[i], ws.ws_col - 1)	Err	bitreich.org	70
i                 );	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         if (next < matchc)	Err	bitreich.org	70
i                 fprintf(stderr, "\033[%dC\b>", ws.ws_col - MARGIN);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fputc('\r', stderr);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -291,21 +284,17 @@ print_screen(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         int cols = ws.ws_col - 1;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (opt['l'] > 0) {	Err	bitreich.org	70
i+        if (opt['l'] > 0)	Err	bitreich.org	70
i                 print_lines();	Err	bitreich.org	70
i-        } else {	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i                 print_segments();	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         if (*prompt) {	Err	bitreich.org	70
i                 format(prompt, cols - 2);	Err	bitreich.org	70
i                 fprintf(stderr, "\033[30;47m %s \033[m", formatted);	Err	bitreich.org	70
i                 cols -= strlen(formatted) + 2;	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fputc(' ', stderr);	Err	bitreich.org	70
i         fputs(format(input, cols), stderr);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fflush(stderr);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -314,7 +303,6 @@ match_line(char *line, char **tokv, int tokc)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         if (opt['#'] && line[0] == '#')	Err	bitreich.org	70
i                 return 2;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         while (tokc-- > 0)	Err	bitreich.org	70
i                 if (strstr(line, tokv[tokc]) == NULL)	Err	bitreich.org	70
i                         return 0;	Err	bitreich.org	70
i@@ -325,32 +313,28 @@ match_line(char *line, char **tokv, int tokc)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i filter(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        char **tokv = NULL, *s, buffer[sizeof (input)];	Err	bitreich.org	70
i-        int       tokc = 0, n = 0, i;	Err	bitreich.org	70
i+        int tokc = 0;	Err	bitreich.org	70
i+        int n    = 0;	Err	bitreich.org	70
i+        int i;	Err	bitreich.org	70
i+        char **tokv = NULL;	Err	bitreich.org	70
i+        char *s;	Err	bitreich.org	70
i+        char buffer[sizeof (input)];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         current = offset = next = 0;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         strcpy(buffer, input);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         for (s = strtok(buffer, " "); s; s = strtok(NULL, " "), tokc++) {	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 if (tokc >= n) {	Err	bitreich.org	70
i                         tokv = realloc(tokv, ++n * sizeof (*tokv));	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                         if (tokv == NULL)	Err	bitreich.org	70
i                                 die("realloc");	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 tokv[tokc] = s;	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         matchc = 0;	Err	bitreich.org	70
i         for (i = 0; i < linec; i++)	Err	bitreich.org	70
i                 if (match_line(linev[i], tokv, tokc))	Err	bitreich.org	70
i                         matchv[matchc++] = linev[i];	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         free(tokv);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         if (opt['#'] && matchv[current][0] == '#')	Err	bitreich.org	70
i                 move(+1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i@@ -358,53 +342,50 @@ filter(void)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i remove_word()	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        int len = strlen(input) - 1, i;	Err	bitreich.org	70
i+        int len;	Err	bitreich.org	70
i+        int i;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        len = strlen(input) - 1;	Err	bitreich.org	70
i         for (i = len; i >= 0 && isspace(input[i]); i--)	Err	bitreich.org	70
i                 input[i] = '\0';	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         len = strlen(input) - 1;	Err	bitreich.org	70
i         for (i = len; i >= 0 && !isspace(input[i]); i--)	Err	bitreich.org	70
i                 input[i] = '\0';	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         filter();	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i add_char(char key)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        int len = strlen(input);	Err	bitreich.org	70
i+        int len;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        len = strlen(input);	Err	bitreich.org	70
i         if (isprint(key)) {	Err	bitreich.org	70
i                 input[len]     = key;	Err	bitreich.org	70
i                 input[len + 1] = '\0';	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         filter();	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i print_selection(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        if (opt['#']) {	Err	bitreich.org	70
i-                char **match = matchv + current;	Err	bitreich.org	70
i+        char **match;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        if (opt['#']) {	Err	bitreich.org	70
i+                match = matchv + current;	Err	bitreich.org	70
i                 while (--match >= matchv) {	Err	bitreich.org	70
i                         if ((*match)[0] == '#') {	Err	bitreich.org	70
i-                                fputs(*match, stdout);	Err	bitreich.org	70
i+                                fputs(*match + 1, stdout);	Err	bitreich.org	70
i                                 break;	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 putchar('\t');	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (matchc == 0 || (opt['#'] && matchv[current][0] == '#')) {	Err	bitreich.org	70
i+        if (matchc == 0 || (opt['#'] && matchv[current][0] == '#'))	Err	bitreich.org	70
i                 puts(input);	Err	bitreich.org	70
i-        } else {	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i                 puts(matchv[current]);	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         fputs("\r\033[K", stderr);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -446,6 +427,7 @@ top:	Err	bitreich.org	70
i                 if (fgetc(stdin) != '~')	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i                 /* fallthrough */	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         case ALT('v'):	Err	bitreich.org	70
i                 move_page(-1);	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i@@ -454,12 +436,14 @@ top:	Err	bitreich.org	70
i                 if (fgetc(stdin) != '~')	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i                 /* fallthrough */	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         case CTL('V'):	Err	bitreich.org	70
i                 move_page(+1);	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         case CTL('I'):  /* tab */	Err	bitreich.org	70
i-                if (linec > 0) strcpy(input, matchv[current]);	Err	bitreich.org	70
i+                if (linec > 0)	Err	bitreich.org	70
i+                        strcpy(input, matchv[current]);	Err	bitreich.org	70
i                 filter();	Err	bitreich.org	70
i                 break;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -488,10 +472,8 @@ sigwinch()	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         if (ioctl(ttyfd, TIOCGWINSZ, &ws) < 0)	Err	bitreich.org	70
i                 die("ioctl");	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         rows = MIN(opt['l'], ws.ws_row - 1);	Err	bitreich.org	70
i         print_screen();	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         signal(SIGWINCH, sigwinch);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -506,35 +488,28 @@ static void	Err	bitreich.org	70
i parse_opt(int argc, char *argv[])	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         memset(opt, 0, 128 * sizeof (int));	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         opt['l'] = 255;	Err	bitreich.org	70
i         for (argv++, argc--; argc > 0; argv++, argc--) {	Err	bitreich.org	70
i                 if (argv[0][0] != '-')	Err	bitreich.org	70
i                         usage();	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 switch ((*argv)[1]) {	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 case 'l':	Err	bitreich.org	70
i                         if (!--argc || sscanf(*++argv, "%d", &opt['l']) <= 0)	Err	bitreich.org	70
i                                 usage();	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 case 'p':	Err	bitreich.org	70
i                         if (!--argc)	Err	bitreich.org	70
i                                 usage();	Err	bitreich.org	70
i                         prompt = *++argv;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 case '#':	Err	bitreich.org	70
i                         opt['#'] = 1;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 case 's':	Err	bitreich.org	70
i                         if (!--argc)	Err	bitreich.org	70
i                                 usage();	Err	bitreich.org	70
i                         opt['s'] = (int) **++argv;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i                 default:	Err	bitreich.org	70
i                         usage();	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i@@ -547,23 +522,19 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         int exit_code;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         parse_opt(argc, argv);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         read_stdin();	Err	bitreich.org	70
i         filter();	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (!freopen("/dev/tty", "r", stdin))  die("freopen /dev/tty");	Err	bitreich.org	70
i-        if (!freopen("/dev/tty", "w", stderr)) die("freopen /dev/tty");	Err	bitreich.org	70
i-	Err	bitreich.org	70
i+        if (!freopen("/dev/tty", "r", stdin))	Err	bitreich.org	70
i+                die("freopen /dev/tty");	Err	bitreich.org	70
i+        if (!freopen("/dev/tty", "w", stderr))	Err	bitreich.org	70
i+                die("freopen /dev/tty");	Err	bitreich.org	70
i         ttyfd =  open("/dev/tty", O_RDWR);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         set_terminal();	Err	bitreich.org	70
i         sigwinch();	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         input[0] = '\0';	Err	bitreich.org	70
i         while ((exit_code = key(fgetc(stdin))) == CONTINUE)	Err	bitreich.org	70
i                 print_screen();	Err	bitreich.org	70
i         print_screen();	Err	bitreich.org	70
i-	Err	bitreich.org	70
i         reset_terminal();	Err	bitreich.org	70
i         close(ttyfd);	Err	bitreich.org	70
i         free_lines();	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/iomenu/commit/84dbca0112c08a4...
Content-Typetext/plain; charset=utf-8