iimprove different libc compatibility thanks to _anthk feedback - 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 0332f4dd490ea3fe6421a8f064142c3747938653 /scm/iomenu/commit/0332f4dd490ea3fe6421a8f064142c3747938653.gph bitreich.org 70
1parent 61d1c7b96e038a9af18330f8a2efa1b648441575 /scm/iomenu/commit/61d1c7b96e038a9af18330f8a2efa1b648441575.gph bitreich.org 70
hAuthor: Josuah Demangeon <me@josuah.net> URL:mailto:me@josuah.net bitreich.org 70
iDate: Fri, 29 Oct 2021 19:45:58 +0200 Err bitreich.org 70
i Err bitreich.org 70
iimprove different libc compatibility thanks to _anthk feedback Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 13 +++++++------ Err bitreich.org 70
i M iomenu.c | 20 ++++++++++---------- Err bitreich.org 70
i M term.c | 17 +++++++++-------- Err bitreich.org 70
i M term.h | 2 +- Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 27 insertions(+), 25 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,7 +1,8 @@ Err bitreich.org 70
i NAME = iomenu Err bitreich.org 70
i-VERSION = 0.1 Err bitreich.org 70
i+V = 0.1 Err bitreich.org 70
i Err bitreich.org 70
i-CFLAGS = -DVERSION='"${VERSION}"' -I./src -Wall -Wextra -std=c99 --pedantic -g Err bitreich.org 70
i+D = -DVERSION='"$V"' -D_POSIX_C_SOURCE=200809L -D_BSD_SOURCE Err bitreich.org 70
i+CFLAGS = $D -Wall -Wextra -std=c99 -pedantic -g Err bitreich.org 70
i LDFLAGS = -static Err bitreich.org 70
i PREFIX = /usr/local Err bitreich.org 70
i MANPREFIX = ${PREFIX}/man Err bitreich.org 70
i@@ -22,7 +23,7 @@ ${BIN}: ${OBJ} ${BIN:=.o} Err bitreich.org 70
i ${CC} ${LDFLAGS} -o $@ $@.o ${OBJ} ${LIB} Err bitreich.org 70
i Err bitreich.org 70
i clean: Err bitreich.org 70
i- rm -rf *.o ${BIN} ${NAME}-${VERSION} *.gz Err bitreich.org 70
i+ rm -rf *.o ${BIN} ${NAME}-$V *.gz Err bitreich.org 70
i Err bitreich.org 70
i install: Err bitreich.org 70
i mkdir -p ${DESTDIR}${PREFIX}/bin Err bitreich.org 70
i@@ -31,6 +32,6 @@ install: Err bitreich.org 70
i cp -rf ${MAN1} ${DESTDIR}${MANPREFIX}/man1 Err bitreich.org 70
i Err bitreich.org 70
i dist: clean Err bitreich.org 70
i- mkdir -p ${NAME}-${VERSION} Err bitreich.org 70
i- cp -r README Makefile bin ${MAN1} ${SRC} ${NAME}-${VERSION} Err bitreich.org 70
i- tar -cf - ${NAME}-${VERSION} | gzip -c >${NAME}-${VERSION}.tar.gz Err bitreich.org 70
i+ mkdir -p ${NAME}-$V Err bitreich.org 70
i+ cp -r README Makefile bin ${MAN1} ${SRC} ${NAME}-$V Err bitreich.org 70
i+ tar -cf - ${NAME}-$V | gzip -c >${NAME}-$V.tar.gz Err bitreich.org 70
1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70
i@@ -16,7 +16,7 @@ Err bitreich.org 70
i #include "utf8.h" Err bitreich.org 70
i Err bitreich.org 70
i struct { Err bitreich.org 70
i- char input[LINE_MAX]; Err bitreich.org 70
i+ char input[256]; Err bitreich.org 70
i size_t cur; Err bitreich.org 70
i Err bitreich.org 70
i char **lines_buf; Err bitreich.org 70
i@@ -26,7 +26,7 @@ struct { Err bitreich.org 70
i size_t match_count; Err bitreich.org 70
i } ctx; Err bitreich.org 70
i Err bitreich.org 70
i-int opt_comment; Err bitreich.org 70
i+int flag_comment; 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, Err bitreich.org 70
i@@ -35,7 +35,7 @@ int opt_comment; Err bitreich.org 70
i static int Err bitreich.org 70
i match_line(char *line, char **tokv) Err bitreich.org 70
i { Err bitreich.org 70
i- if (opt_comment && line[0] == '#') Err bitreich.org 70
i+ if (flag_comment && line[0] == '#') Err bitreich.org 70
i return 2; Err bitreich.org 70
i for (; *tokv != NULL; tokv++) Err bitreich.org 70
i if (strcasestr(line, *tokv) == NULL) Err bitreich.org 70
i@@ -86,7 +86,7 @@ do_move(int sign) Err bitreich.org 70
i { Err bitreich.org 70
i /* integer overflow will do what we need */ Err bitreich.org 70
i for (size_t i = ctx.cur + sign; i < ctx.match_count; i += sign) { Err bitreich.org 70
i- if (opt_comment == 0 || ctx.match_buf[i][0] != '#') { Err bitreich.org 70
i+ if (flag_comment == 0 || ctx.match_buf[i][0] != '#') { Err bitreich.org 70
i ctx.cur = i; Err bitreich.org 70
i break; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -114,7 +114,7 @@ do_filter(char **search_buf, size_t search_count) Err bitreich.org 70
i for (size_t n = 0; n < search_count; n++) Err bitreich.org 70
i if (match_line(search_buf[n], tokv)) Err bitreich.org 70
i ctx.match_buf[ctx.match_count++] = search_buf[n]; Err bitreich.org 70
i- if (opt_comment && ctx.match_buf[ctx.cur][0] == '#') Err bitreich.org 70
i+ if (flag_comment && ctx.match_buf[ctx.cur][0] == '#') Err bitreich.org 70
i do_move(+1); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -136,7 +136,7 @@ do_move_header(signed int sign) Err bitreich.org 70
i { Err bitreich.org 70
i do_move(sign); Err bitreich.org 70
i Err bitreich.org 70
i- if (opt_comment == 0) Err bitreich.org 70
i+ if (flag_comment == 0) Err bitreich.org 70
i return; Err bitreich.org 70
i for (ctx.cur += sign;; ctx.cur += sign) { Err bitreich.org 70
i char *cur = ctx.match_buf[ctx.cur]; Err bitreich.org 70
i@@ -184,7 +184,7 @@ do_add_char(char c) Err bitreich.org 70
i static void Err bitreich.org 70
i do_print_selection(void) Err bitreich.org 70
i { Err bitreich.org 70
i- if (opt_comment) { Err bitreich.org 70
i+ if (flag_comment) { Err bitreich.org 70
i char **match = ctx.match_buf + ctx.cur; Err bitreich.org 70
i Err bitreich.org 70
i while (--match >= ctx.match_buf) { Err bitreich.org 70
i@@ -197,7 +197,7 @@ do_print_selection(void) Err bitreich.org 70
i } Err bitreich.org 70
i term_raw_off(2); Err bitreich.org 70
i if (ctx.match_count == 0 Err bitreich.org 70
i- || (opt_comment && ctx.match_buf[ctx.cur][0] == '#')) Err bitreich.org 70
i+ || (flag_comment && ctx.match_buf[ctx.cur][0] == '#')) Err bitreich.org 70
i fprintf(stdout, "%s\n", ctx.input); Err bitreich.org 70
i else Err bitreich.org 70
i fprintf(stdout, "%s\n", ctx.match_buf[ctx.cur]); Err bitreich.org 70
i@@ -277,7 +277,7 @@ key_action(void) Err bitreich.org 70
i static void Err bitreich.org 70
i print_line(char *line, int highlight) Err bitreich.org 70
i { Err bitreich.org 70
i- if (opt_comment && line[0] == '#') { Err bitreich.org 70
i+ if (flag_comment && line[0] == '#') { Err bitreich.org 70
i fprintf(stderr, "\n\x1b[1m\r%.*s\x1b[m", Err bitreich.org 70
i term_at_width(line + 1, term.winsize.ws_col, 0), line + 1); Err bitreich.org 70
i } else if (highlight) { Err bitreich.org 70
i@@ -390,7 +390,7 @@ main(int argc, char *argv[]) Err bitreich.org 70
i fprintf(stdout, "%s\n", VERSION); Err bitreich.org 70
i exit(0); Err bitreich.org 70
i case '#': Err bitreich.org 70
i- opt_comment = 1; Err bitreich.org 70
i+ flag_comment = 1; Err bitreich.org 70
i break; Err bitreich.org 70
i default: Err bitreich.org 70
i usage(arg0); Err bitreich.org 70
1diff --git a/term.c b/term.c /scm/iomenu/file/term.c.gph bitreich.org 70
i@@ -36,19 +36,20 @@ term_at_width(char const *s, int width, int pos) Err bitreich.org 70
i int Err bitreich.org 70
i term_raw_on(int fd) Err bitreich.org 70
i { Err bitreich.org 70
i- struct termios new_termios = {0}; Err bitreich.org 70
i- char *seq = "\x1b[s\x1b[?1049h\x1b[H"; Err bitreich.org 70
i+ static char *seq = "\x1b[s\x1b[?1049h\x1b[H"; Err bitreich.org 70
i+ struct termios termios; Err bitreich.org 70
i ssize_t len = strlen(seq); Err bitreich.org 70
i Err bitreich.org 70
i if (write(fd, seq, len) < len) Err bitreich.org 70
i return -1; Err bitreich.org 70
i Err bitreich.org 70
i- if (tcgetattr(fd, &term.old_termios) < 0) Err bitreich.org 70
i+ memset(&termios, 0, sizeof termios); Err bitreich.org 70
i+ if (tcgetattr(fd, &term.termios) < 0) Err bitreich.org 70
i return -1; Err bitreich.org 70
i- memcpy(&new_termios, &term.old_termios, sizeof new_termios); Err bitreich.org 70
i+ memcpy(&termios, &term.termios, sizeof termios); Err bitreich.org 70
i Err bitreich.org 70
i- new_termios.c_lflag &= ~(ICANON | ECHO | IEXTEN | IGNBRK | ISIG); Err bitreich.org 70
i- if (tcsetattr(fd, TCSANOW, &new_termios) == -1) Err bitreich.org 70
i+ termios.c_lflag &= ~(ICANON | ECHO | IEXTEN | IGNBRK | ISIG); Err bitreich.org 70
i+ if (tcsetattr(fd, TCSANOW, &termios) == -1) Err bitreich.org 70
i return -1; Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -56,10 +57,10 @@ term_raw_on(int fd) Err bitreich.org 70
i int Err bitreich.org 70
i term_raw_off(int fd) Err bitreich.org 70
i { Err bitreich.org 70
i- char *seq = "\x1b[2J\x1b[u\033[?1049l"; Err bitreich.org 70
i+ static char *seq = "\x1b[2J\x1b[u\033[?1049l"; Err bitreich.org 70
i ssize_t len = strlen(seq); Err bitreich.org 70
i Err bitreich.org 70
i- if (tcsetattr(fd, TCSANOW, &term.old_termios) < 0) Err bitreich.org 70
i+ if (tcsetattr(fd, TCSANOW, &term.termios) < 0) Err bitreich.org 70
i return -1; Err bitreich.org 70
i if (write(fd, seq, len) < len) Err bitreich.org 70
i return -1; Err bitreich.org 70
1diff --git a/term.h b/term.h /scm/iomenu/file/term.h.gph bitreich.org 70
i@@ -25,7 +25,7 @@ enum term_key { Err bitreich.org 70
i Err bitreich.org 70
i struct term { Err bitreich.org 70
i struct winsize winsize; Err bitreich.org 70
i- struct termios old_termios; Err bitreich.org 70
i+ struct termios termios; Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
i extern struct term term; Err bitreich.org 70
.
Response:
text/plain