SMOLNET PORTAL home about changes
iswitch to arg.h - 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 bdefd3e959d83d05d65b5df6ce45e6d30b771984	/scm/iomenu/commit/bdefd3e959d83d05d65b5df6ce45e6d30b771984.gph	bitreich.org	70
1parent d6c740ae9f36ae68149a9c438664213aaff06e97	/scm/iomenu/commit/d6c740ae9f36ae68149a9c438664213aaff06e97.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Sat, 17 Mar 2018 16:38:00 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
iswitch to arg.h	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  A arg.h                               |      27 +++++++++++++++++++++++++++	Err	bitreich.org	70
i  M iomenu.c                            |      43 ++++++++++++-------------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i2 files changed, 43 insertions(+), 27 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/arg.h b/arg.h	/scm/iomenu/file/arg.h.gph	bitreich.org	70
i@@ -0,0 +1,27 @@	Err	bitreich.org	70
i+#ifndef ARG_H	Err	bitreich.org	70
i+#define ARG_H	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+extern char *argv0;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define ARGBEGIN(argc, argv)                                                \	Err	bitreich.org	70
i+        for (argv0 = *argv, argv++, argc--;                                \	Err	bitreich.org	70
i+            argv[0] != NULL && argv[0][0] == '-' && argv[0][1] != '\0';        \	Err	bitreich.org	70
i+            argc--, argv++) {                                                \	Err	bitreich.org	70
i+                char **_argv, *_a;                                        \	Err	bitreich.org	70
i+                if (argv[0][1] == '-' && argv[0][2] == '\0') {                \	Err	bitreich.org	70
i+                        argv++, argc--;                                        \	Err	bitreich.org	70
i+                        break;                                                \	Err	bitreich.org	70
i+                }                                                        \	Err	bitreich.org	70
i+                for (_argv = argv, _a = *argv + 1; *_a != '\0'; _a++) {        \	Err	bitreich.org	70
i+                        switch (*_a)	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#define ARGEND                                                                \	Err	bitreich.org	70
i+                        if (_argv != argv)                                \	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+#define        EARGF(x)                                                        \	Err	bitreich.org	70
i+        ((argv[1] == NULL) ? ((x), (char *)0) : (argc--, argv++, argv[0]))	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#endif	Err	bitreich.org	70
1diff --git a/iomenu.c b/iomenu.c	/scm/iomenu/file/iomenu.c.gph	bitreich.org	70
i@@ -10,10 +10,10 @@	Err	bitreich.org	70
i #include <string.h>	Err	bitreich.org	70
i #include <termios.h>	Err	bitreich.org	70
i #include <unistd.h>	Err	bitreich.org	70
i-#include <getopt.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #include "utf8.h"	Err	bitreich.org	70
i #include "str.h"	Err	bitreich.org	70
i+#include "arg.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #ifndef SIGWINCH	Err	bitreich.org	70
i #define SIGWINCH        28	Err	bitreich.org	70
i@@ -27,12 +27,11 @@	Err	bitreich.org	70
i static struct termios        termios;	Err	bitreich.org	70
i struct winsize                ws;	Err	bitreich.org	70
i static int                ttyfd;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i static int                linec = 0, matchc = 0, cur = 0;	Err	bitreich.org	70
i static char                **linev = NULL, **matchv = NULL;	Err	bitreich.org	70
i static char                input[LINE_MAX], formatted[LINE_MAX * 8];	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-static int                flag_hs = 0;	Err	bitreich.org	70
i+static int                hsflag = 0;	Err	bitreich.org	70
i+char                        *argv0;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i ** Keep the line if it match every token (in no particular order, and allowed to	Err	bitreich.org	70
i@@ -41,7 +40,7 @@ static int                flag_hs = 0;	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i match_line(char *line, char **tokv)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        if (flag_hs && line[0] == '#')	Err	bitreich.org	70
i+        if (hsflag && line[0] == '#')	Err	bitreich.org	70
i                 return 2;	Err	bitreich.org	70
i         for (; *tokv != NULL; tokv++)	Err	bitreich.org	70
i                 if (strcasestr(line, *tokv) == NULL)	Err	bitreich.org	70
i@@ -122,7 +121,7 @@ move(int direction)	Err	bitreich.org	70
i         int        i;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         for (i = cur + direction; 0 <= i && i < matchc; i += direction) {	Err	bitreich.org	70
i-                if (!flag_hs || matchv[i][0] != '#') {	Err	bitreich.org	70
i+                if (!hsflag || matchv[i][0] != '#') {	Err	bitreich.org	70
i                         cur = i;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i@@ -162,7 +161,7 @@ filter(int searchc, char **searchv)	Err	bitreich.org	70
i         for (n = 0; n < searchc; n++)	Err	bitreich.org	70
i                 if (match_line(searchv[n], tokv))	Err	bitreich.org	70
i                         matchv[matchc++] = searchv[n];	Err	bitreich.org	70
i-        if (flag_hs && matchv[cur][0] == '#')	Err	bitreich.org	70
i+        if (hsflag && matchv[cur][0] == '#')	Err	bitreich.org	70
i                 move(+1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -221,7 +220,7 @@ print_selection(void)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         char        **match;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (flag_hs) {	Err	bitreich.org	70
i+        if (hsflag) {	Err	bitreich.org	70
i                 match = matchv + cur;	Err	bitreich.org	70
i                 while (--match >= matchv) {	Err	bitreich.org	70
i                         if ((*match)[0] == '#') {	Err	bitreich.org	70
i@@ -231,7 +230,7 @@ print_selection(void)	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i                 putchar('\t');	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-        if (matchc == 0 || (flag_hs && matchv[cur][0] == '#'))	Err	bitreich.org	70
i+        if (matchc == 0 || (hsflag && matchv[cur][0] == '#'))	Err	bitreich.org	70
i                 puts(input);	Err	bitreich.org	70
i         else	Err	bitreich.org	70
i                 puts(matchv[cur]);	Err	bitreich.org	70
i@@ -314,7 +313,7 @@ print_line(char *line, int highlight)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         extern        struct        winsize ws;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (flag_hs && line[0] == '#')	Err	bitreich.org	70
i+        if (hsflag && line[0] == '#')	Err	bitreich.org	70
i                 fprintf(stderr, "\n\x1b[1m\r%.*s\x1b[m",	Err	bitreich.org	70
i                     utf8_col(line + 1, ws.ws_col, 0), line + 1);	Err	bitreich.org	70
i         else if (highlight)	Err	bitreich.org	70
i@@ -399,22 +398,6 @@ usage(void)	Err	bitreich.org	70
i         exit(EXIT_FAILURE);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-parse_opt(int argc, char *argv[])	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        int        c;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        while ((c = getopt(argc, argv, "#")) != -1) {	Err	bitreich.org	70
i-                switch (c) {	Err	bitreich.org	70
i-                case '#':	Err	bitreich.org	70
i-                        flag_hs = 1;	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                default:	Err	bitreich.org	70
i-                        usage();	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i void	Err	bitreich.org	70
i init(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i@@ -445,7 +428,13 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i {	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+        ARGBEGIN(argc, argv) {	Err	bitreich.org	70
i+        case '#':	Err	bitreich.org	70
i+                hsflag = 1;	Err	bitreich.org	70
i+                break;	Err	bitreich.org	70
i+        default:	Err	bitreich.org	70
i+                usage();	Err	bitreich.org	70
i+        } ARGEND	Err	bitreich.org	70
i         init();	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #ifdef __OpenBSD__	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/iomenu/commit/bdefd3e959d83d0...
Content-Typetext/plain; charset=utf-8