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