imore descriptive names - 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 5ac10691e817e4bfb903449a99614a1184d03a7e /scm/iomenu/commit/5ac10691e817e4bfb903449a99614a1184d03a7e.gph bitreich.org 70
1parent 8614ad4e2b6c08fcf82366637ee1cdf7662434f4 /scm/iomenu/commit/8614ad4e2b6c08fcf82366637ee1cdf7662434f4.gph bitreich.org 70
hAuthor: Josuah Demangeon <josuah.demangeon@gandi.net> URL:mailto:josuah.demangeon@gandi.net bitreich.org 70
iDate: Sun, 3 Sep 2017 12:04:49 +0200 Err bitreich.org 70
i Err bitreich.org 70
imore descriptive names Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M iomenu.c | 125 +++++++++++++++++-------------- Err bitreich.org 70
i M utf8.c | 20 ++++++++++---------- Err bitreich.org 70
i M utf8.h | 12 ++++++------ Err bitreich.org 70
i Err bitreich.org 70
i3 files changed, 86 insertions(+), 71 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70
i@@ -31,7 +31,7 @@ static int opt[128], rows = 0; Err bitreich.org 70
i static char *prompt = ""; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-freelines(void) Err bitreich.org 70
i+free_lines(void) Err bitreich.org 70
i { Err bitreich.org 70
i if (linev) { Err bitreich.org 70
i for (; linec > 0; linec--) Err bitreich.org 70
i@@ -47,13 +47,13 @@ die(const char *s) Err bitreich.org 70
i { Err bitreich.org 70
i tcsetattr(ttyfd, TCSANOW, &termios); Err bitreich.org 70
i close(ttyfd); Err bitreich.org 70
i- freelines(); Err bitreich.org 70
i+ free_lines(); Err bitreich.org 70
i perror(s); 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-setterminal(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 Err bitreich.org 70
i@@ -72,7 +72,7 @@ setterminal(void) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-resetterminal(void) Err bitreich.org 70
i+reset_terminal(void) Err bitreich.org 70
i { Err bitreich.org 70
i int i; Err bitreich.org 70
i Err bitreich.org 70
i@@ -88,7 +88,7 @@ resetterminal(void) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-readlines(void) Err bitreich.org 70
i+read_lines(void) Err bitreich.org 70
i { Err bitreich.org 70
i int size = 0; Err bitreich.org 70
i size_t len; Err bitreich.org 70
i@@ -115,41 +115,53 @@ readlines(void) Err bitreich.org 70
i } while (++linec, ++matchc); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i+static size_t Err bitreich.org 70
i+string_width(char *s) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int width = 0; Err bitreich.org 70
i+ Err bitreich.org 70
i+ while (*s) Err bitreich.org 70
i+ if (*s++ == '\t') Err bitreich.org 70
i+ width += (width + 7) % 8; Err bitreich.org 70
i+ Err bitreich.org 70
i+ return width; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i static char * Err bitreich.org 70
i-format(char *s, int cols) Err bitreich.org 70
i+format(char *str, int cols) Err bitreich.org 70
i { Err bitreich.org 70
i- int i = 0; Err bitreich.org 70
i- long r = 0; Err bitreich.org 70
i- char *f = formatted; Err bitreich.org 70
i- Err bitreich.org 70
i- while (*s && i < cols) { Err bitreich.org 70
i- if (*s == '\t') { Err bitreich.org 70
i- int t = 8 - i % 8; Err bitreich.org 70
i- while (t-- && i < cols) { Err bitreich.org 70
i- *f++ = ' '; Err bitreich.org 70
i- 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+ Err bitreich.org 70
i+ while (*str && col < cols) { Err bitreich.org 70
i+ if (*str == '\t') { Err bitreich.org 70
i+ int t = 8 - col % 8; Err bitreich.org 70
i+ while (t-- && col < cols) { Err bitreich.org 70
i+ *fmt++ = ' '; Err bitreich.org 70
i+ col++; Err bitreich.org 70
i } Err bitreich.org 70
i- s++; Err bitreich.org 70
i- Err bitreich.org 70
i- } else if (utf8torune(&r, s) && utf8isprint(r)) { Err bitreich.org 70
i- int j = utf8len(s); Err bitreich.org 70
i- while (j--) Err bitreich.org 70
i- *f++ = *s++; Err bitreich.org 70
i- i++; Err bitreich.org 70
i- Err bitreich.org 70
i- } else { Err bitreich.org 70
i- *f++ = '?'; Err bitreich.org 70
i- i++; Err bitreich.org 70
i- s++; 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+ str++; Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i- *f = '\0'; Err bitreich.org 70
i+ *fmt = '\0'; Err bitreich.org 70
i Err bitreich.org 70
i return formatted; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-printlines(void) Err bitreich.org 70
i+print_lines(void) Err bitreich.org 70
i { Err bitreich.org 70
i int printed = 0, i = current - current % rows; Err bitreich.org 70
i Err bitreich.org 70
i@@ -172,13 +184,13 @@ printlines(void) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-printscreen(void) Err bitreich.org 70
i+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 fputs("\r\033[K", stderr); Err bitreich.org 70
i Err bitreich.org 70
i- printlines(); Err bitreich.org 70
i+ print_lines(); Err bitreich.org 70
i fprintf(stderr, "\033[%dA\r", rows); Err bitreich.org 70
i Err bitreich.org 70
i if (*prompt) { Err bitreich.org 70
i@@ -194,7 +206,7 @@ printscreen(void) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-matchline(char *line, char **tokv, int tokc) Err bitreich.org 70
i+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@@ -220,10 +232,13 @@ move(signed int sign) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-movepg(signed int sign) Err bitreich.org 70
i+move_page(signed int sign) Err bitreich.org 70
i { Err bitreich.org 70
i int i = current - current % rows + rows * sign; Err bitreich.org 70
i Err bitreich.org 70
i+ if (!opt['l']) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ 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@@ -255,7 +270,7 @@ filter(void) 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 (matchline(linev[i], tokv, tokc)) 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@@ -265,7 +280,7 @@ filter(void) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-removeword() 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 Err bitreich.org 70
i@@ -280,7 +295,7 @@ removeword() Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-addchar(char key) 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 Err bitreich.org 70
i@@ -293,7 +308,7 @@ addchar(char key) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-printselection(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@@ -334,7 +349,7 @@ top: Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i case CTL('W'): Err bitreich.org 70
i- removeword(); Err bitreich.org 70
i+ remove_word(); Err bitreich.org 70
i break; Err bitreich.org 70
i Err bitreich.org 70
i case 127: Err bitreich.org 70
i@@ -357,14 +372,14 @@ top: Err bitreich.org 70
i if (fgetc(stdin) != '~') break; Err bitreich.org 70
i /* FALLTHROUGH */ Err bitreich.org 70
i case ALT('v'): Err bitreich.org 70
i- movepg(-1); 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 CSI('6'): /* page down */ Err bitreich.org 70
i if (fgetc(stdin) != '~') break; Err bitreich.org 70
i /* FALLTHROUGH */ Err bitreich.org 70
i case CTL('V'): Err bitreich.org 70
i- movepg(+1); 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@@ -375,7 +390,7 @@ top: Err bitreich.org 70
i Err bitreich.org 70
i case CTL('J'): /* enter */ Err bitreich.org 70
i case CTL('M'): Err bitreich.org 70
i- printselection(); Err bitreich.org 70
i+ print_selection(); Err bitreich.org 70
i return EXIT_SUCCESS; Err bitreich.org 70
i Err bitreich.org 70
i case ALT('['): Err bitreich.org 70
i@@ -387,7 +402,7 @@ top: Err bitreich.org 70
i goto top; Err bitreich.org 70
i Err bitreich.org 70
i default: Err bitreich.org 70
i- addchar((char) key); Err bitreich.org 70
i+ add_char((char) key); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i return CONTINUE; Err bitreich.org 70
i@@ -400,7 +415,7 @@ sigwinch() 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- printscreen(); 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@@ -413,7 +428,7 @@ usage(void) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-parseopt(int argc, char *argv[]) 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@@ -454,11 +469,11 @@ parseopt(int argc, char *argv[]) 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 exitcode; Err bitreich.org 70
i+ int exit_code; Err bitreich.org 70
i Err bitreich.org 70
i- parseopt(argc, argv); Err bitreich.org 70
i+ parse_opt(argc, argv); Err bitreich.org 70
i Err bitreich.org 70
i- readlines(); Err bitreich.org 70
i+ read_lines(); Err bitreich.org 70
i filter(); Err bitreich.org 70
i Err bitreich.org 70
i if (!freopen("/dev/tty", "r", stdin) || Err bitreich.org 70
i@@ -466,17 +481,17 @@ main(int argc, char *argv[]) Err bitreich.org 70
i die("freopen"); Err bitreich.org 70
i ttyfd = open("/dev/tty", O_RDWR); Err bitreich.org 70
i Err bitreich.org 70
i- setterminal(); 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 ((exitcode = key()) == CONTINUE) Err bitreich.org 70
i- printscreen(); Err bitreich.org 70
i- printscreen(); Err bitreich.org 70
i+ while ((exit_code = key()) == 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- resetterminal(); Err bitreich.org 70
i+ reset_terminal(); Err bitreich.org 70
i close(ttyfd); Err bitreich.org 70
i- freelines(); Err bitreich.org 70
i+ free_lines(); Err bitreich.org 70
i Err bitreich.org 70
i- return exitcode; Err bitreich.org 70
i+ return exit_code; Err bitreich.org 70
i } Err bitreich.org 70
1diff --git a/utf8.c b/utf8.c /scm/iomenu/file/utf8.c.gph bitreich.org 70
i@@ -34,7 +34,7 @@ Err bitreich.org 70
i * or 0 if ti is misencoded. Err bitreich.org 70
i */ Err bitreich.org 70
i size_t Err bitreich.org 70
i-utf8len(char *s) Err bitreich.org 70
i+utf8_len(char *s) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char *sp = (unsigned char *) s; Err bitreich.org 70
i int i, len = (*sp < 0x80) ? 1 : /* 0xxxxxxx < 10000000 */ Err bitreich.org 70
i@@ -62,7 +62,7 @@ utf8len(char *s) Err bitreich.org 70
i * 0 if rune is too long. Err bitreich.org 70
i */ Err bitreich.org 70
i size_t Err bitreich.org 70
i-utf8runelen(long r) Err bitreich.org 70
i+rune_len(long r) Err bitreich.org 70
i { Err bitreich.org 70
i return (r <= 0x0000007f) ? 1 : (r <= 0x000007ff) ? 2 : Err bitreich.org 70
i (r <= 0x0000ffff) ? 3 : (r <= 0x001fffff) ? 4 : Err bitreich.org 70
i@@ -76,10 +76,10 @@ utf8runelen(long r) Err bitreich.org 70
i * Return the number of bytes read or 0 if the string is misencoded. Err bitreich.org 70
i */ Err bitreich.org 70
i size_t Err bitreich.org 70
i-utf8torune(long *r, char *s) Err bitreich.org 70
i+utf8_to_rune(long *r, char *s) Err bitreich.org 70
i { Err bitreich.org 70
i char mask[] = { 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; Err bitreich.org 70
i- size_t i, len = utf8len(s); Err bitreich.org 70
i+ size_t i, len = utf8_len(s); Err bitreich.org 70
i Err bitreich.org 70
i if (len == 0 || len > 6 || (size_t) len > strlen(s)) Err bitreich.org 70
i return 0; Err bitreich.org 70
i@@ -92,7 +92,7 @@ utf8torune(long *r, char *s) Err bitreich.org 70
i *r = (*r << 6) | (*s++ & 0x3f); /* 10xxxxxx */ Err bitreich.org 70
i Err bitreich.org 70
i /* overlong sequences */ Err bitreich.org 70
i- if (utf8runelen(*r) != len) Err bitreich.org 70
i+ if (rune_len(*r) != len) Err bitreich.org 70
i return 0; Err bitreich.org 70
i Err bitreich.org 70
i return len; Err bitreich.org 70
i@@ -103,7 +103,7 @@ utf8torune(long *r, char *s) Err bitreich.org 70
i * Returns 1 if the rune is a valid unicode code point and 0 if not. Err bitreich.org 70
i */ Err bitreich.org 70
i int Err bitreich.org 70
i-utf8runeisunicode(long r) Err bitreich.org 70
i+rune_is_unicode(long r) Err bitreich.org 70
i { Err bitreich.org 70
i return !( Err bitreich.org 70
i (r > 0x10ffff) || /* outside range */ Err bitreich.org 70
i@@ -125,14 +125,14 @@ utf8runeisunicode(long r) Err bitreich.org 70
i * code points. Err bitreich.org 70
i */ Err bitreich.org 70
i int Err bitreich.org 70
i-utf8check(char *s) Err bitreich.org 70
i+utf8_check(char *s) Err bitreich.org 70
i { Err bitreich.org 70
i size_t shift, len = strlen(s); Err bitreich.org 70
i long r = 0; Err bitreich.org 70
i Err bitreich.org 70
i while (len > 0) { Err bitreich.org 70
i- shift = utf8torune(&r, s); Err bitreich.org 70
i- if (!shift || !utf8runeisunicode(r)) Err bitreich.org 70
i+ shift = utf8_to_rune(&r, s); Err bitreich.org 70
i+ if (!shift || !rune_is_unicode(r)) Err bitreich.org 70
i return 0; Err bitreich.org 70
i Err bitreich.org 70
i s += shift; Err bitreich.org 70
i@@ -146,7 +146,7 @@ utf8check(char *s) Err bitreich.org 70
i * Return 1 if the rune is a printable character, and 0 otherwise. Err bitreich.org 70
i */ Err bitreich.org 70
i int Err bitreich.org 70
i-utf8isprint(long r) Err bitreich.org 70
i+rune_is_print(long r) Err bitreich.org 70
i { Err bitreich.org 70
i return (0x1f < r && r != 0x7f && r < 0x80) || 0x9f < r; 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 utf8len(char *); Err bitreich.org 70
i-size_t utf8runelen(long); Err bitreich.org 70
i-size_t utf8torune(long *, char *); Err bitreich.org 70
i-int utf8isunicode(long); Err bitreich.org 70
i-int utf8check(char *); Err bitreich.org 70
i-int utf8isprint(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 rune_is_print(long); Err bitreich.org 70
.
Response:
text/plain