SMOLNET PORTAL home about changes
ilinux kernel coding style -> BSD - 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 b69d6f5982f4c2b96f8dee1369c48180ed31b035	/scm/iomenu/commit/b69d6f5982f4c2b96f8dee1369c48180ed31b035.gph	bitreich.org	70
1parent afbe8d1e4630f1e1ca5f55d8f2a61ef63956494c	/scm/iomenu/commit/afbe8d1e4630f1e1ca5f55d8f2a61ef63956494c.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Thu,  2 Nov 2017 01:09:48 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
ilinux kernel coding style -> BSD	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M LICENSE                             |      12 +++++-------	Err	bitreich.org	70
i  M buffer.c                            |      65 ++++++++++++++++++++++---------	Err	bitreich.org	70
i  M buffer.h                            |       6 +++---	Err	bitreich.org	70
i  M control.c                           |      35 ++++++++++++++++++++++++-------	Err	bitreich.org	70
i  M control.h                           |       8 ++++----	Err	bitreich.org	70
i  M display.c                           |      26 +++++++++++++++++++++-----	Err	bitreich.org	70
i  M display.h                           |       4 ++--	Err	bitreich.org	70
i  M iomenu.h                            |      28 ++++++++++++++--------------	Err	bitreich.org	70
i  M main.c                              |      58 ++++++++++++++++++++++---------	Err	bitreich.org	70
i  M main.h                              |       2 +-	Err	bitreich.org	70
i  M utf8.c                              |       5 +----	Err	bitreich.org	70
i  M utf8.h                              |      12 ++++++------	Err	bitreich.org	70
i	Err	bitreich.org	70
i12 files changed, 173 insertions(+), 88 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/LICENSE b/LICENSE	/scm/iomenu/file/LICENSE.gph	bitreich.org	70
i@@ -1,15 +1,13 @@	Err	bitreich.org	70
i-ISC Licence	Err	bitreich.org	70
i+Copyright (c) 2017 Josuah Demangeon <mail@josuah.net>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-Copyright (c) 2017 by Josuah Demangeon	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-Permission to use, copy, modify, and/or distribute this software for any	Err	bitreich.org	70
i+Permission to use, copy, modify, and distribute this software for any	Err	bitreich.org	70
i purpose with or without fee is hereby granted, provided that the above	Err	bitreich.org	70
i copyright notice and this permission notice appear in all copies.	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-THE SOFTWARE IS PROVIDED “AS IS” AND ISC DISCLAIMS ALL WARRANTIES	Err	bitreich.org	70
i+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES	Err	bitreich.org	70
i WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF	Err	bitreich.org	70
i-MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY	Err	bitreich.org	70
i-SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES	Err	bitreich.org	70
i+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR	Err	bitreich.org	70
i+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES	Err	bitreich.org	70
i WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN	Err	bitreich.org	70
i ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF	Err	bitreich.org	70
i OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.	Err	bitreich.org	70
1diff --git a/buffer.c b/buffer.c	/scm/iomenu/file/buffer.c.gph	bitreich.org	70
i@@ -11,6 +11,10 @@	Err	bitreich.org	70
i #include "main.h"	Err	bitreich.org	70
i #include "control.h"	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+ * be overlapping).	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i static int	Err	bitreich.org	70
i match_line(char *line, char **tokv, int tokc)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i@@ -22,10 +26,15 @@ match_line(char *line, char **tokv, int tokc)	Err	bitreich.org	70
i         return 1;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * As we use a single buffer for the whole stdin, we only need to free it once	Err	bitreich.org	70
i+ * and it will free all the lines.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i void	Err	bitreich.org	70
i free_lines(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        extern char **linev;	Err	bitreich.org	70
i+        extern        char        **linev;	Err	bitreich.org	70
i+        extern        char        **matchv;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         if (linev) {	Err	bitreich.org	70
i                 free(linev[0]);	Err	bitreich.org	70
i@@ -35,14 +44,20 @@ free_lines(void)	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+ * Split a buffer into an array of lines, without allocating memory for every	Err	bitreich.org	70
i+ * line, but using the input buffer and replacing characters.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i void	Err	bitreich.org	70
i split_lines(char *buf)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        extern char **linev;	Err	bitreich.org	70
i-        extern int linec;	Err	bitreich.org	70
i-        char *b;	Err	bitreich.org	70
i-        char **lv;	Err	bitreich.org	70
i-        char **mv;	Err	bitreich.org	70
i+        extern        char        **linev;	Err	bitreich.org	70
i+        extern        char        **matchv;	Err	bitreich.org	70
i+        extern        int          linec;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        char         *b;	Err	bitreich.org	70
i+        char        **lv;	Err	bitreich.org	70
i+        char        **mv;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         linec = 0;	Err	bitreich.org	70
i         b = buf;	Err	bitreich.org	70
i@@ -64,15 +79,20 @@ split_lines(char *buf)	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+ * Read stdin in a single malloc-ed buffer, realloc-ed to twice its size every	Err	bitreich.org	70
i+ * time the previous buffer is filled.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i void	Err	bitreich.org	70
i read_stdin(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        size_t size = BUFSIZ;	Err	bitreich.org	70
i-        size_t len;	Err	bitreich.org	70
i-        size_t off;	Err	bitreich.org	70
i-        char *buf;	Err	bitreich.org	70
i-        char *b;	Err	bitreich.org	70
i+        size_t         size;	Err	bitreich.org	70
i+        size_t         len;	Err	bitreich.org	70
i+        size_t         off;	Err	bitreich.org	70
i+        char        *buf;	Err	bitreich.org	70
i+        char        *b;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        size = BUFSIZ;	Err	bitreich.org	70
i         off = 0;	Err	bitreich.org	70
i         buf = malloc(size);	Err	bitreich.org	70
i         while ((len = read(STDIN_FILENO, buf + off, size - off)) > 0) {	Err	bitreich.org	70
i@@ -90,17 +110,26 @@ read_stdin(void)	Err	bitreich.org	70
i         split_lines(buf);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * First split input into token, then match every token independently against	Err	bitreich.org	70
i+ * every line.  The matching lines fills matchv.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i void	Err	bitreich.org	70
i filter(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        extern char **linev;	Err	bitreich.org	70
i-        extern int    current;	Err	bitreich.org	70
i-        int           tokc;	Err	bitreich.org	70
i-        int           n;	Err	bitreich.org	70
i-        char        **tokv = NULL;	Err	bitreich.org	70
i-        char         *s;	Err	bitreich.org	70
i-        char          buf[sizeof (input)];	Err	bitreich.org	70
i+        extern        char        **linev;	Err	bitreich.org	70
i+        extern        char        **matchv;	Err	bitreich.org	70
i+        extern        int          linec;	Err	bitreich.org	70
i+        extern        int          matchc;	Err	bitreich.org	70
i+        extern        int          current;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        int          tokc;	Err	bitreich.org	70
i+        int          n;	Err	bitreich.org	70
i+        char        **tokv;	Err	bitreich.org	70
i+        char         *s;	Err	bitreich.org	70
i+        char          buf[sizeof (input)];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        tokv = NULL;	Err	bitreich.org	70
i         current = 0;	Err	bitreich.org	70
i         strcpy(buf, input);	Err	bitreich.org	70
i         tokc = 0;	Err	bitreich.org	70
1diff --git a/buffer.h b/buffer.h	/scm/iomenu/file/buffer.h.gph	bitreich.org	70
i@@ -1,3 +1,3 @@	Err	bitreich.org	70
i-void free_lines (void);	Err	bitreich.org	70
i-void read_stdin (void);	Err	bitreich.org	70
i-void filter(void);	Err	bitreich.org	70
i+void        free_lines(void);	Err	bitreich.org	70
i+void        read_stdin(void);	Err	bitreich.org	70
i+void        filter(void);	Err	bitreich.org	70
1diff --git a/control.c b/control.c	/scm/iomenu/file/control.c.gph	bitreich.org	70
i@@ -11,14 +11,17 @@	Err	bitreich.org	70
i #include "control.h"	Err	bitreich.org	70
i #include "display.h"	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-#define CSI(char) ((char) + 0x80 + 0x80)	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+#define CSI(char)        ((char) + 0x80 + 0x80)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i move(signed int sign)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        int i;	Err	bitreich.org	70
i+        extern        char        **matchv;	Err	bitreich.org	70
i+        extern        int          matchc;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        int        i;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         for (i = current + sign; 0 <= i && i < matchc; i += sign) {	Err	bitreich.org	70
i                 if (!opt['#'] || matchv[i][0] != '#') {	Err	bitreich.org	70
i@@ -31,9 +34,13 @@ 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-        int rows = ws.ws_row - 1;	Err	bitreich.org	70
i+        extern        struct        winsize ws;	Err	bitreich.org	70
i+        extern        int        matchc;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        int        i;	Err	bitreich.org	70
i+        int        rows;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        rows = ws.ws_row - 1;	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@@ -44,6 +51,8 @@ move_page(signed int sign)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i remove_word()	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        extern        char        input[LINE_MAX];	Err	bitreich.org	70
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@@ -59,6 +68,8 @@ remove_word()	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i add_char(char c)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        extern        char        input[LINE_MAX];	Err	bitreich.org	70
i+	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@@ -69,9 +80,17 @@ add_char(char c)	Err	bitreich.org	70
i         filter();	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Big case table, that calls itself back for with ALT (aka ESC), CSI	Err	bitreich.org	70
i+ * (aka ESC + [).  These last two have values above the range of ASCII.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i int	Err	bitreich.org	70
i key(int k)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        extern        char        **matchv;	Err	bitreich.org	70
i+        extern        char          input[LINE_MAX];	Err	bitreich.org	70
i+        extern        int          linec;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i top:	Err	bitreich.org	70
i         switch (k) {	Err	bitreich.org	70
i         case CTL('C'):	Err	bitreich.org	70
i@@ -99,14 +118,14 @@ top:	Err	bitreich.org	70
i         case CSI('5'):  /* page up */	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+                /* FALLTHROUGH */	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         case CSI('6'):  /* page down */	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+                /* FALLTHROUGH */	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
1diff --git a/control.h b/control.h	/scm/iomenu/file/control.h.gph	bitreich.org	70
i@@ -1,4 +1,4 @@	Err	bitreich.org	70
i-int  prev_page (int);	Err	bitreich.org	70
i-int  next_page (int);	Err	bitreich.org	70
i-void move      (signed int);	Err	bitreich.org	70
i-int  key       (int);	Err	bitreich.org	70
i+int        prev_page(int);	Err	bitreich.org	70
i+int        next_page(int);	Err	bitreich.org	70
i+void        move(signed int);	Err	bitreich.org	70
i+int        key(int);	Err	bitreich.org	70
1diff --git a/display.c b/display.c	/scm/iomenu/file/display.c.gph	bitreich.org	70
i@@ -11,6 +11,8 @@	Err	bitreich.org	70
i static char *	Err	bitreich.org	70
i format(char *str, int cols)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        extern        struct        winsize ws;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         int   col = 0;	Err	bitreich.org	70
i         long  rune = 0;	Err	bitreich.org	70
i         char *fmt = formatted;	Err	bitreich.org	70
i@@ -42,6 +44,8 @@ format(char *str, int cols)	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i print_line(char *line, int cur)	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 (opt['#'] && line[0] == '#') {	Err	bitreich.org	70
i                 format(line + 1, ws.ws_col - 1);	Err	bitreich.org	70
i                 fprintf(stderr, "\n\x1b[1m %s\x1b[m", formatted);	Err	bitreich.org	70
i@@ -57,12 +61,20 @@ print_line(char *line, int cur)	Err	bitreich.org	70
i void	Err	bitreich.org	70
i print_screen(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        char **m;	Err	bitreich.org	70
i-        int p;	Err	bitreich.org	70
i-        int i;	Err	bitreich.org	70
i-        int cols = ws.ws_col - 1;	Err	bitreich.org	70
i-        int rows = ws.ws_row - 1;	Err	bitreich.org	70
i+        extern        struct        winsize ws;	Err	bitreich.org	70
i+        extern        char        **matchv;	Err	bitreich.org	70
i+        extern        char         *prompt;	Err	bitreich.org	70
i+        extern        char          input[LINE_MAX];	Err	bitreich.org	70
i+        extern        int          matchc;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        char        **m;	Err	bitreich.org	70
i+        int          p;	Err	bitreich.org	70
i+        int          i;	Err	bitreich.org	70
i+        int          cols;	Err	bitreich.org	70
i+        int          rows;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        cols = ws.ws_col - 1;	Err	bitreich.org	70
i+        rows = ws.ws_row - 1;	Err	bitreich.org	70
i         p = 0;	Err	bitreich.org	70
i         i = current - current % rows;	Err	bitreich.org	70
i         m = matchv + i;	Err	bitreich.org	70
i@@ -85,6 +97,10 @@ print_screen(void)	Err	bitreich.org	70
i void	Err	bitreich.org	70
i print_selection(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        extern        char        **matchv;	Err	bitreich.org	70
i+        extern        char          input[LINE_MAX];	Err	bitreich.org	70
i+        extern        int          matchc;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         char **match;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         if (opt['#']) {	Err	bitreich.org	70
1diff --git a/display.h b/display.h	/scm/iomenu/file/display.h.gph	bitreich.org	70
i@@ -1,2 +1,2 @@	Err	bitreich.org	70
i-void print_screen    (void);	Err	bitreich.org	70
i-void print_selection (void);	Err	bitreich.org	70
i+void        print_screen(void);	Err	bitreich.org	70
i+void        print_selection(void);	Err	bitreich.org	70
1diff --git a/iomenu.h b/iomenu.h	/scm/iomenu/file/iomenu.h.gph	bitreich.org	70
i@@ -1,18 +1,18 @@	Err	bitreich.org	70
i-#ifndef SIGWINCH	Err	bitreich.org	70
i-#define SIGWINCH 28	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 	Err	bitreich.org	70
i-#define MARGIN   30	Err	bitreich.org	70
i+#define        MARGIN        30	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))	Err	bitreich.org	70
i+#define        MIN(X, Y)        (((X) < (Y)) ? (X) : (Y))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-extern struct winsize   ws;	Err	bitreich.org	70
i-extern char           **linev;	Err	bitreich.org	70
i-extern int              linec;	Err	bitreich.org	70
i-extern char           **matchv;	Err	bitreich.org	70
i-extern int              matchc;	Err	bitreich.org	70
i-extern char            *prompt;	Err	bitreich.org	70
i-extern char             input[LINE_MAX];	Err	bitreich.org	70
i-extern char             formatted[LINE_MAX * 8];	Err	bitreich.org	70
i-extern int              current;	Err	bitreich.org	70
i-extern int              opt[128];	Err	bitreich.org	70
i+extern        struct          winsize ws;	Err	bitreich.org	70
i+extern        char        **linev;	Err	bitreich.org	70
i+extern        int          linec;	Err	bitreich.org	70
i+extern        char        **matchv;	Err	bitreich.org	70
i+extern        int          matchc;	Err	bitreich.org	70
i+extern        char         *prompt;	Err	bitreich.org	70
i+extern        char          input[LINE_MAX];	Err	bitreich.org	70
i+extern        char          formatted[LINE_MAX * 8];	Err	bitreich.org	70
i+extern        int          current;	Err	bitreich.org	70
i+extern        int          opt[128];	Err	bitreich.org	70
1diff --git a/main.c b/main.c	/scm/iomenu/file/main.c.gph	bitreich.org	70
i@@ -15,20 +15,23 @@	Err	bitreich.org	70
i #include "control.h"	Err	bitreich.org	70
i #include "display.h"	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-static struct termios termios;	Err	bitreich.org	70
i-static int            ttyfd;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-struct winsize   ws;	Err	bitreich.org	70
i-char           **linev = NULL;	Err	bitreich.org	70
i-int              linec = 0;	Err	bitreich.org	70
i-char           **matchv = NULL;	Err	bitreich.org	70
i-int              matchc = 0;	Err	bitreich.org	70
i-char            *prompt = "";	Err	bitreich.org	70
i-char             input[LINE_MAX];	Err	bitreich.org	70
i-char             formatted[LINE_MAX * 8];	Err	bitreich.org	70
i-int              current = 0;	Err	bitreich.org	70
i-int              opt[128];	Err	bitreich.org	70
i+static        struct        termios termios;	Err	bitreich.org	70
i+static        int        ttyfd;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+struct        winsize ws;	Err	bitreich.org	70
i+char        **linev = NULL;	Err	bitreich.org	70
i+int          linec = 0;	Err	bitreich.org	70
i+char        **matchv = NULL;	Err	bitreich.org	70
i+int          matchc = 0;	Err	bitreich.org	70
i+char         *prompt = "";	Err	bitreich.org	70
i+char          input[LINE_MAX];	Err	bitreich.org	70
i+char          formatted[LINE_MAX * 8];	Err	bitreich.org	70
i+int          current = 0;	Err	bitreich.org	70
i+int          opt[128];	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Free the structures, reset the terminal state and exit with an error message.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i void	Err	bitreich.org	70
i die(const char *s)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i@@ -39,10 +42,13 @@ die(const char *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+ * Set terminal in raw mode.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i set_terminal(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        struct termios new;	Err	bitreich.org	70
i+        struct        termios new;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         fputs("\x1b[s\x1b[?1049h\x1b[H", stderr);	Err	bitreich.org	70
i         if (tcgetattr(ttyfd, &termios) < 0 || tcgetattr(ttyfd, &new) < 0) {	Err	bitreich.org	70
i@@ -53,6 +59,9 @@ set_terminal(void)	Err	bitreich.org	70
i         tcsetattr(ttyfd, TCSANOW, &new);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Take terminal out of raw mode.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i reset_terminal(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i@@ -60,9 +69,14 @@ reset_terminal(void)	Err	bitreich.org	70
i         tcsetattr(ttyfd, TCSANOW, &termios);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Redraw the whole screen on window resize.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i sigwinch()	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 (ioctl(ttyfd, TIOCGWINSZ, &ws) < 0)	Err	bitreich.org	70
i                 die("ioctl");	Err	bitreich.org	70
i         print_screen();	Err	bitreich.org	70
i@@ -72,13 +86,18 @@ sigwinch()	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i usage(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        fputs("iomenu [-#] [-p prompt]\n", stderr);	Err	bitreich.org	70
i+        fputs("usage: iomenu [-#] [-p prompt]\n", stderr);	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+ * XXX: switch to getopt.	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+        extern        char        *prompt;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         memset(opt, 0, 128 * sizeof (int));	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@@ -98,10 +117,17 @@ parse_opt(int argc, char *argv[])	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+ * Read stdin in a buffer, filling a table of lines, then re-open stdin to	Err	bitreich.org	70
i+ * /dev/tty for an interactive (raw) session to let the user filter and select	Err	bitreich.org	70
i+ * one line by searching words within stdin.  This was inspired from dmenu.	Err	bitreich.org	70
i+ */	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 exit_code;	Err	bitreich.org	70
i+        extern        char        input[LINE_MAX];	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         read_stdin();	Err	bitreich.org	70
1diff --git a/main.h b/main.h	/scm/iomenu/file/main.h.gph	bitreich.org	70
i@@ -1 +1 @@	Err	bitreich.org	70
i-void die (const char *);	Err	bitreich.org	70
i+void        die(const char *);	Err	bitreich.org	70
1diff --git a/utf8.c b/utf8.c	/scm/iomenu/file/utf8.c.gph	bitreich.org	70
i@@ -1,7 +1,3 @@	Err	bitreich.org	70
i-#include <stddef.h>	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-#include "utf8.h"	Err	bitreich.org	70
i-	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i  * ASCII all have a leading '0' byte:	Err	bitreich.org	70
i  *	Err	bitreich.org	70
i@@ -27,6 +23,7 @@	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #include <ctype.h>	Err	bitreich.org	70
i+#include <stddef.h>	Err	bitreich.org	70
i #include <stdlib.h>	Err	bitreich.org	70
i #include <string.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/utf8.h b/utf8.h	/scm/iomenu/file/utf8.h.gph	bitreich.org	70
i@@ -1,6 +1,6 @@	Err	bitreich.org	70
i-size_t utf8_len        (char *);	Err	bitreich.org	70
i-size_t rune_len        (long);	Err	bitreich.org	70
i-size_t utf8_to_rune    (long *, char *);	Err	bitreich.org	70
i-int    utf8_is_unicode (long);	Err	bitreich.org	70
i-int    utf8_check      (char *);	Err	bitreich.org	70
i-int    utf8_is_print   (long);	Err	bitreich.org	70
i+size_t        utf8_len(char *);	Err	bitreich.org	70
i+size_t        rune_len(long);	Err	bitreich.org	70
i+size_t        utf8_to_rune(long *, char *);	Err	bitreich.org	70
i+int        utf8_is_unicode(long);	Err	bitreich.org	70
i+int        utf8_check(char *);	Err	bitreich.org	70
i+int        utf8_is_print(long);	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/iomenu/commit/b69d6f5982f4c2b...
Content-Typetext/plain; charset=utf-8