X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/a0c1ddf1a2d53ea9ad97948c8c83d576997f45db..66ee282adab99e6ef6ab7e09700611c89d87c97c:/unicode.c diff --git a/unicode.c b/unicode.c index ad14b325..8dfe1d15 100644 --- a/unicode.c +++ b/unicode.c @@ -16,7 +16,7 @@ static void get_unitab(int codepage, wchar_t * unitab, int ftype); /* Character conversion arrays; they are usually taken from windows, * the xterm one has the four scanlines that have no unicode 2.0 - * equlivents mapped into the private area. + * equivalents mapped to their unicode 3.0 locations. */ static char **uni_tbl; @@ -267,7 +267,7 @@ void init_ucs_tables(void) int i, j; int used_dtf = 0; char tbuf[256]; - int old_codepage = line_codepage; + for (i = 0; i < 256; i++) tbuf[i] = i; @@ -420,14 +420,14 @@ void init_ucs_tables(void) static void link_font(WCHAR * line_tbl, WCHAR * font_tbl, WCHAR attr) { - int i, j, k; - for (k = 0; k < 256; k++) { - i = ((k + 32) & 0xFF); - if (DIRECT_FONT(line_tbl[i])) + int font_index, line_index, i; + for (line_index = 0; line_index < 256; line_index++) { + if (DIRECT_FONT(line_tbl[line_index])) continue; - for (j = 0; j < 256; j++) { - if (line_tbl[i] == font_tbl[j]) { - line_tbl[i] = (WCHAR) (attr + j); + for(i = 0; i < 256; i++) { + font_index = ((32 + i) & 0xFF); + if (line_tbl[line_index] == font_tbl[font_index]) { + line_tbl[line_index] = (WCHAR) (attr + font_index); break; } } @@ -474,6 +474,9 @@ void luni_send(wchar_t * widebuf, int len) /* UTF is a simple algorithm */ for (p = linebuffer, i = 0; i < len; i++) { wchar_t ch = widebuf[i]; + /* Windows wchar_t is UTF-16 */ + if ((ch&0xF800) == 0xD800) ch = '.'; + if (ch < 0x80) { *p++ = (char) (ch); } else if (ch < 0x800) {