ifixed CTL macro causing buggy input - 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 9747f2c9e90a2160e5578b80aa3b91101d338120 /scm/iomenu/commit/9747f2c9e90a2160e5578b80aa3b91101d338120.gph bitreich.org 70 1parent c1fc5b0c3cfd8ce193fd60d8a4586995b1af7758 /scm/iomenu/commit/c1fc5b0c3cfd8ce193fd60d8a4586995b1af7758.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sat, 3 Mar 2018 00:05:42 +0100 Err bitreich.org 70 i Err bitreich.org 70 ifixed CTL macro causing buggy input Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 11 +++++++---- Err bitreich.org 70 i M iomenu.c | 57 +++++++++++-------------------- Err bitreich.org 70 i A str.h | 1 + Err bitreich.org 70 i A strcasestr.c | 25 +++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i4 files changed, 53 insertions(+), 41 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/iomenu/file/Makefile.gph bitreich.org 70 i@@ -1,6 +1,6 @@ Err bitreich.org 70 i CFLAGS = -std=c89 -pedantic -Wall -Wextra -g -D_POSIX_C_SOURCE=200809L Err bitreich.org 70 i Err bitreich.org 70 i-SRC = iomenu.c utf8.c Err bitreich.org 70 i+SRC = iomenu.c utf8.c strcasestr.c Err bitreich.org 70 i OBJ = ${SRC:.o=.c} Err bitreich.org 70 i Err bitreich.org 70 i all: iomenu Err bitreich.org 70 i@@ -8,16 +8,19 @@ all: iomenu Err bitreich.org 70 i .c.o: Err bitreich.org 70 i ${CC} -c -o $@ ${CFLAGS} $< Err bitreich.org 70 i Err bitreich.org 70 i-iomenu: ${OBJ} Err bitreich.org 70 i+iomenu: ${OBJ} utf8.h str.h Err bitreich.org 70 i ${CC} -o $@ ${LDFLAGS} ${OBJ} Err bitreich.org 70 i-${OBJ}: utf8.h Err bitreich.org 70 i+ Err bitreich.org 70 i+utf8.c: utf8.h Err bitreich.org 70 i+ Err bitreich.org 70 i+strcasestr.c: str.h Err bitreich.org 70 i Err bitreich.org 70 i test: test.c Err bitreich.org 70 i ${CC} -o $@ ${LDFLAGS} test.c utf8.c Err bitreich.org 70 i ./$@ Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i- rm -f *.o *.core iomenu Err bitreich.org 70 i+ rm -f *.o *.core iomenu test Err bitreich.org 70 i Err bitreich.org 70 i install: iomenu Err bitreich.org 70 i mkdir -p ${PREFIX}/share/man/man1 Err bitreich.org 70 1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70 i@@ -12,13 +12,14 @@ Err bitreich.org 70 i #include 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 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 MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) Err bitreich.org 70 i-#define CTL(char) ((char) | 0x40) 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@@ -26,32 +27,11 @@ 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-int linec = 0, matchc = 0, cur = 0; Err bitreich.org 70 i-char **linev = NULL, **matchv = NULL; Err bitreich.org 70 i-char input[LINE_MAX], formatted[LINE_MAX * 8]; 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-int flag_hs = 0; Err bitreich.org 70 i- Err bitreich.org 70 i-static char * Err bitreich.org 70 i-io_strstr(const char *str1, const char *str2) Err bitreich.org 70 i-{ Err bitreich.org 70 i- const char *s1; Err bitreich.org 70 i- const char *s2; Err bitreich.org 70 i- Err bitreich.org 70 i- for (;;) { Err bitreich.org 70 i- s1 = str1; Err bitreich.org 70 i- s2 = str2; Err bitreich.org 70 i- while (*s1 != '\0' && tolower(*s1) == tolower(*s2)) Err bitreich.org 70 i- s1++, s2++; Err bitreich.org 70 i- if (*s2 == '\0') Err bitreich.org 70 i- return (char *) str1; Err bitreich.org 70 i- if (*s1 == '\0') Err bitreich.org 70 i- return NULL; Err bitreich.org 70 i- str1++; Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i- return NULL; Err bitreich.org 70 i-} Err bitreich.org 70 i+static int flag_hs = 0; 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@@ -63,7 +43,7 @@ match_line(char *line, char **tokv) Err bitreich.org 70 i if (flag_hs && line[0] == '#') Err bitreich.org 70 i return 2; Err bitreich.org 70 i for (; *tokv != NULL; tokv++) Err bitreich.org 70 i- if (io_strstr(line, *tokv) == NULL) Err bitreich.org 70 i+ if (strcasestr(line, *tokv) == NULL) Err bitreich.org 70 i return 0; Err bitreich.org 70 i return 1; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -267,6 +247,8 @@ key(int k) Err bitreich.org 70 i extern int linec; Err bitreich.org 70 i Err bitreich.org 70 i top: Err bitreich.org 70 i+ printf("{%d}", k); Err bitreich.org 70 i+ fflush(stdout); Err bitreich.org 70 i switch (k) { Err bitreich.org 70 i case CTL('C'): Err bitreich.org 70 i return -1; Err bitreich.org 70 i@@ -382,7 +364,7 @@ set_terminal(void) Err bitreich.org 70 i perror("tcgetattr"); Err bitreich.org 70 i exit(EXIT_FAILURE); Err bitreich.org 70 i } Err bitreich.org 70 i- new.c_lflag &= ~(ICANON | ECHO | IGNBRK | IEXTEN | ISIG); Err bitreich.org 70 i+ new.c_lflag &= ~(ICANON | ECHO | IEXTEN | IGNBRK); Err bitreich.org 70 i tcsetattr(ttyfd, TCSANOW, &new); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -396,18 +378,19 @@ 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+sighandle(int sig) 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- err("ioctl"); Err bitreich.org 70 i- print_screen(); Err bitreich.org 70 i- signal(SIGWINCH, sigwinch); Err bitreich.org 70 i+ switch (sig) { Err bitreich.org 70 i+ case SIGWINCH: Err bitreich.org 70 i+ if (ioctl(ttyfd, TIOCGWINSZ, &ws) < 0) Err bitreich.org 70 i+ err("ioctl"); Err bitreich.org 70 i+ print_screen(); Err bitreich.org 70 i+ break; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ signal(sig, sighandle); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static void Err bitreich.org 70 i@@ -453,7 +436,7 @@ init(void) Err bitreich.org 70 i err("open /dev/tty"); Err bitreich.org 70 i Err bitreich.org 70 i set_terminal(); Err bitreich.org 70 i- sigwinch(); Err bitreich.org 70 i+ sighandle(SIGWINCH); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 1diff --git a/str.h b/str.h /scm/iomenu/file/str.h.gph bitreich.org 70 i@@ -0,0 +1 @@ Err bitreich.org 70 i+char *strcasestr(const char *, const char *); Err bitreich.org 70 1diff --git a/strcasestr.c b/strcasestr.c /scm/iomenu/file/strcasestr.c.gph bitreich.org 70 i@@ -0,0 +1,25 @@ Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+#include "str.h" Err bitreich.org 70 i+ Err bitreich.org 70 i+char * Err bitreich.org 70 i+strcasesstr(const char *str1, const char *str2) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ const char *s1; Err bitreich.org 70 i+ const char *s2; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (;;) { Err bitreich.org 70 i+ s1 = str1; Err bitreich.org 70 i+ s2 = str2; Err bitreich.org 70 i+ while (*s1 != '\0' && tolower(*s1) == tolower(*s2)) Err bitreich.org 70 i+ s1++, s2++; Err bitreich.org 70 i+ if (*s2 == '\0') Err bitreich.org 70 i+ return (char *) str1; Err bitreich.org 70 i+ if (*s1 == '\0') Err bitreich.org 70 i+ return NULL; Err bitreich.org 70 i+ str1++; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ return NULL; Err bitreich.org 70 i+} Err bitreich.org 70 .