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 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 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 .