From: Pierre Habouzit Date: Sun, 30 Dec 2007 10:50:19 +0000 (+0100) Subject: Use nl_langinfo properly to detect if the charset is utf8 X-Git-Url: http://git.madism.org/?a=commitdiff_plain;h=6be1cb501cb582f98b6d800d7adfd7a42677ea77;p=apps%2Fmadtty.git Use nl_langinfo properly to detect if the charset is utf8 Also remove bogus guard: we cannot use waddch for a multi-byte character (EUC-JP comes to mind). Signed-off-by: Pierre Habouzit --- diff --git a/demo/boxshell.c b/demo/boxshell.c index 806a1ff..15fbc41 100644 --- a/demo/boxshell.c +++ b/demo/boxshell.c @@ -72,6 +72,7 @@ int main(void) keypad(stdscr, TRUE); curs_set(0); ESCDELAY=50; + madtty_init_vt100_graphics(); madtty_init_colors(); getmaxyx(stdscr, screen_h, screen_w); diff --git a/madtty/madtty.c b/madtty/madtty.c index ef1230b..4bb95f7 100644 --- a/madtty/madtty.c +++ b/madtty/madtty.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -47,7 +48,7 @@ #define IS_CONTROL(ch) !((ch) & 0xffffff60UL) -static int has_default = 0; +static int has_default, is_utf8; enum { C0_NUL = 0x00, @@ -687,13 +688,10 @@ static void madtty_process_nonprinting(madtty_t *t, wchar_t wc) } } -bool is_utf8 = true; - static void is_utf8_locale(void) { - const char *l = getenv("LANG"); - if (l) - is_utf8 = (strstr(l, "UTF-8") != NULL); + const char *cset = nl_langinfo(CODESET) ?: "ANSI_X3.4-1968"; + is_utf8 = !strcmp(cset, "UTF-8"); } // vt100 special graphics and line drawing @@ -771,10 +769,9 @@ static void madtty_putc(madtty_t *t, wchar_t wc) if (t->graphmode) { if (wc >= 0x41 && wc <= 0x7e) { - if(is_utf8 && vt100_utf8[wc - 0x41]) - wc = vt100_utf8[wc - 0x41]; - else if(!is_utf8 && vt100[wc - 0x41]) - wc = vt100[wc - 0x41]; + wchar_t gc = is_utf8 ? vt100_utf8[wc - 0x41] : vt100[wc - 0x41]; + if (gc) + wc = gc; } width = 1; } else { @@ -968,7 +965,7 @@ void madtty_draw(madtty_t *t, WINDOW *win, int srow, int scol) for (int j = 0; j < t->cols; j++) { if (!j || row->attr[j] != row->attr[j - 1]) wattrset(win, (attr_t)row->attr[j] << NCURSES_ATTR_SHIFT); - if (is_utf8 && row->text[j] >= 128) { + if (row->text[j] >= 128) { char buf[MB_CUR_MAX + 1]; int len; @@ -1064,11 +1061,11 @@ void madtty_init_colors(void) fg == COLOR_WHITE ? -1 : fg, bg == COLOR_BLACK ? -1 : bg); } else { - init_pair((7 - fg) * 8 + bg, fg, bg); + init_pair((7 - fg) * 8 + bg, fg, bg); + } } } } - } } int madtty_color_pair(int fg, int bg) diff --git a/madtty/madtty.h b/madtty/madtty.h index c790a50..8e8424a 100644 --- a/madtty/madtty.h +++ b/madtty/madtty.h @@ -30,11 +30,12 @@ #include #include +typedef struct madtty_t madtty_t; + void madtty_init_colors(void); -int madtty_color_pair(int fg, int bg); void madtty_init_vt100_graphics(void); -typedef struct madtty_t madtty_t; +int madtty_color_pair(int fg, int bg); madtty_t *madtty_create(int rows, int cols); void madtty_resize(madtty_t *, int rows, int cols);