istarting to add utf8 functions to iomenu - 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 278c57dbd7ecb5aa22c6136c5d95ff3ff12de141 /scm/iomenu/commit/278c57dbd7ecb5aa22c6136c5d95ff3ff12de141.gph bitreich.org 70
1parent c383bef4af98a82331c2c6e56ff7964e3dbf690b /scm/iomenu/commit/c383bef4af98a82331c2c6e56ff7964e3dbf690b.gph bitreich.org 70
hAuthor: Josuah Demangeon <josuah.demangeon@gandi.net> URL:mailto:josuah.demangeon@gandi.net bitreich.org 70
iDate: Tue, 22 Aug 2017 23:21:32 +0200 Err bitreich.org 70
i Err bitreich.org 70
istarting to add utf8 functions to iomenu Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 2 ++ Err bitreich.org 70
i M iomenu.c | 37 +++++++++++++++++++------------ Err bitreich.org 70
i M utf8.c | 12 ++++++------ Err bitreich.org 70
i M utf8.h | 9 +++++---- Err bitreich.org 70
i Err bitreich.org 70
i4 files changed, 36 insertions(+), 24 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@@ -2,6 +2,8 @@ CFLAGS = -std=c89 -Wpedantic -Wall -Wextra -g # -static Err bitreich.org 70
i Err bitreich.org 70
i all: clean iomenu Err bitreich.org 70
i Err bitreich.org 70
i+iomenu: iomenu.o utf8.o Err bitreich.org 70
i+ Err bitreich.org 70
i clean: Err bitreich.org 70
i rm -f *.o iomenu 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@@ -10,6 +10,8 @@ Err bitreich.org 70
i Err bitreich.org 70
i #include <sys/ioctl.h> Err bitreich.org 70
i Err bitreich.org 70
i+#include "utf8.h" Err bitreich.org 70
i+ Err bitreich.org 70
i #define CONTINUE 2 /* as opposed to EXIT_SUCCESS and EXIT_FAILURE */ Err bitreich.org 70
i Err bitreich.org 70
i #define CTL(char) (char ^ 0x40) Err bitreich.org 70
i@@ -121,26 +123,33 @@ readlines(void) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static char * Err bitreich.org 70
i-format(char *str, int cols) Err bitreich.org 70
i+format(char *s, int cols) Err bitreich.org 70
i { Err bitreich.org 70
i- int i, j; Err bitreich.org 70
i- Err bitreich.org 70
i- for (i = j = 0; str[i] && j < cols; i++) { Err bitreich.org 70
i- Err bitreich.org 70
i- if (str[i] == '\t') { Err bitreich.org 70
i- int t = 8 - j % 8; Err bitreich.org 70
i- while (t-- > 0 && j < cols) Err bitreich.org 70
i- formatted[j++] = ' '; 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+ } Err bitreich.org 70
i+ s++; Err bitreich.org 70
i Err bitreich.org 70
i- } else if (isprint(str[i])) { Err bitreich.org 70
i- formatted[j++] = str[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- formatted[j++] = '?'; Err bitreich.org 70
i+ *f++ = '?'; Err bitreich.org 70
i+ i++; Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i- Err bitreich.org 70
i- formatted[j] = '\0'; Err bitreich.org 70
i+ *f = '\0'; Err bitreich.org 70
i Err bitreich.org 70
i return formatted; 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@@ -33,7 +33,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, int n) Err bitreich.org 70
i+utf8len(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@@ -45,7 +45,7 @@ utf8len(char *s, int n) Err bitreich.org 70
i (*sp < 0xfe) ? 6 : /* 1111110x < 11111110 */ Err bitreich.org 70
i (*sp < 0xff) ? 7 : /* 11111110 < 11111111 */ Err bitreich.org 70
i 0; Err bitreich.org 70
i- if (len > n) return 0; Err bitreich.org 70
i+ if (len > strlen(s)) return 0; Err bitreich.org 70
i Err bitreich.org 70
i /* check continuation bytes */ Err bitreich.org 70
i for (sp++, i = 1; i < len; i++, sp++) Err bitreich.org 70
i@@ -75,12 +75,12 @@ 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, size_t n) Err bitreich.org 70
i+utf8torune(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, n); Err bitreich.org 70
i+ size_t i, len = utf8len(s); Err bitreich.org 70
i Err bitreich.org 70
i- if (len == 0 || len > 6 || len > n) Err bitreich.org 70
i+ if (len == 0 || len > 6 || len > strlen(s)) Err bitreich.org 70
i return 0; Err bitreich.org 70
i Err bitreich.org 70
i /* first byte */ Err bitreich.org 70
i@@ -130,7 +130,7 @@ utf8check(char *s, size_t len) 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, len); Err bitreich.org 70
i+ shift = utf8torune(&r, s); Err bitreich.org 70
i if (!shift || !utf8runeisunicode(r)) Err bitreich.org 70
i return 0; 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,5 +1,6 @@ Err bitreich.org 70
i-size_t utf8len(char *, int); 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 *, size_t); Err bitreich.org 70
i-int utf8runeisunicode(long); Err bitreich.org 70
i-int utf8check(char *, size_t); 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
.
Response:
text/plain