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 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 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 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 Err bitreich.org 70 i+#include Err bitreich.org 70 i #include Err bitreich.org 70 i #include 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 .