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 <mail@josuah.net> 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 <unistd.h> 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 <ctype.h> Err bitreich.org 70
i+#include <stddef.h> 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
.
Response:
text/plain