X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/21d2b241875c072a8700e838ae0da677a7b9d428..7440fd4419acfc9c784f142fb9dee3e64c9a18c2:/unicode.c diff --git a/unicode.c b/unicode.c index fdfa08db..1d5e66fe 100644 --- a/unicode.c +++ b/unicode.c @@ -1,7 +1,3 @@ -#ifdef WINDOWS -#include -#endif - #include #include #include @@ -516,12 +512,12 @@ void init_ucs(Config *cfg, struct unicode_data *ucsdata) if (DIRECT_FONT(ucsdata->unitab_line[i])) continue; if (!ucsdata->uni_tbl) { - ucsdata->uni_tbl = smalloc(256 * sizeof(char *)); + ucsdata->uni_tbl = snewn(256, char *); memset(ucsdata->uni_tbl, 0, 256 * sizeof(char *)); } j = ((ucsdata->unitab_line[i] >> 8) & 0xFF); if (!ucsdata->uni_tbl[j]) { - ucsdata->uni_tbl[j] = smalloc(256 * sizeof(char)); + ucsdata->uni_tbl[j] = snewn(256, char); memset(ucsdata->uni_tbl[j], 0, 256 * sizeof(char)); } ucsdata->uni_tbl[j][ucsdata->unitab_line[i] & 0xFF] = i; @@ -560,11 +556,11 @@ void init_ucs(Config *cfg, struct unicode_data *ucsdata) /* Last chance, if !unicode then try poorman links. */ if (cfg->vtmode != VT_UNICODE) { - static char poorman_scoacs[] = + static const char poorman_scoacs[] = "CueaaaaceeeiiiAAE**ooouuyOUc$YPsaiounNao?++**!<>###||||++||++++++--|-+||++--|-+----++++++++##||#aBTPEsyt******EN=+><++-=... n2* "; - static char poorman_latin1[] = + static const char poorman_latin1[] = " !cL.Y|S\"Ca<--R~o+23'u|.,1o>///?AAAAAAACEEEEIIIIDNOOOOOxOUUUUYPBaaaaaaaceeeeiiiionooooo/ouuuuypy"; - static char poorman_vt100[] = "*#****o~**+++++-----++++|****L."; + static const char poorman_vt100[] = "*#****o~**+++++-----++++|****L."; for (i = 160; i < 256; i++) if (!DIRECT_FONT(ucsdata->unitab_line[i]) && @@ -603,7 +599,7 @@ static void link_font(WCHAR * line_tbl, WCHAR * font_tbl, WCHAR attr) wchar_t xlat_uskbd2cyrllic(int ch) { - static wchar_t cyrtab[] = { + static const wchar_t cyrtab[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, @@ -624,10 +620,10 @@ wchar_t xlat_uskbd2cyrllic(int ch) return cyrtab[ch&0x7F]; } -int check_compose(int first, int second) +int check_compose_internal(int first, int second, int recurse) { - static struct { + static const struct { char first, second; wchar_t composed; } composetbl[] = { @@ -961,7 +957,6 @@ int check_compose(int first, int second) 0, 0, 0} }, *c; - static int recurse = 0; int nc = -1; for (c = composetbl; c->first; c++) { @@ -970,17 +965,20 @@ int check_compose(int first, int second) } if (recurse == 0) { - recurse = 1; - nc = check_compose(second, first); + nc = check_compose_internal(second, first, 1); if (nc == -1) - nc = check_compose(toupper(first), toupper(second)); + nc = check_compose_internal(toupper(first), toupper(second), 1); if (nc == -1) - nc = check_compose(toupper(second), toupper(first)); - recurse = 0; + nc = check_compose_internal(toupper(second), toupper(first), 1); } return nc; } +int check_compose(int first, int second) +{ + return check_compose_internal(first, second, 0); +} + int decode_codepage(char *cp_name) { char *s, *d; @@ -1013,7 +1011,7 @@ int decode_codepage(char *cp_name) * 1254 -> ISO 8859-9 * 1255 -> ISO 8859-8 * 1256 -> ISO 8859-6 - * 1257 -> ISO 8859-4 + * 1257 -> ISO 8859-13 (changed from 8859-4 on advice of a Lithuanian) * * and for anything else, choose direct-to-font. */ @@ -1026,7 +1024,7 @@ int decode_codepage(char *cp_name) case 1254: cp_name = "ISO-8859-9"; break; case 1255: cp_name = "ISO-8859-8"; break; case 1256: cp_name = "ISO-8859-6"; break; - case 1257: cp_name = "ISO-8859-4"; break; + case 1257: cp_name = "ISO-8859-13"; break; /* default: leave it blank, which will select -1, direct->font */ } } @@ -1092,7 +1090,7 @@ int decode_codepage(char *cp_name) return codepage; } -char *cp_name(int codepage) +const char *cp_name(int codepage) { const struct cp_list_item *cpi, *cpno; static char buf[32]; @@ -1132,7 +1130,7 @@ char *cp_name(int codepage) * Return the nth code page in the list, for use in the GUI * configurer. */ -char *cp_enumerate(int index) +const char *cp_enumerate(int index) { if (index < 0 || index >= lenof(cp_list)) return NULL;