X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/21d2b241875c072a8700e838ae0da677a7b9d428..fc0f17db91f32c7504756e92a411a60d2ef0e264:/unix/uxucs.c diff --git a/unix/uxucs.c b/unix/uxucs.c index 8731239f..601b35da 100644 --- a/unix/uxucs.c +++ b/unix/uxucs.c @@ -8,6 +8,7 @@ #include #include "putty.h" +#include "charset.h" #include "terminal.h" #include "misc.h" @@ -106,7 +107,7 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen, * Return value is TRUE if pterm is to run in direct-to-font mode. */ int init_ucs(struct unicode_data *ucsdata, - char *linecharset, int font_charset) + char *linecharset, int font_charset, int vtmode) { int i, ret = 0; @@ -122,9 +123,7 @@ int init_ucs(struct unicode_data *ucsdata, * line_codepage should be decoded from the specification in * cfg. */ - ucsdata->line_codepage = charset_from_mimeenc(linecharset); - if (ucsdata->line_codepage == CS_NONE) - ucsdata->line_codepage = charset_from_xenc(linecharset); + ucsdata->line_codepage = decode_codepage(linecharset); /* * If line_codepage is _still_ CS_NONE, we assume we're using @@ -177,8 +176,18 @@ int init_ucs(struct unicode_data *ucsdata, 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c, 0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020 }; + static const wchar_t unitab_xterm_poorman[32] = + L"*#****o~**+++++-----++++|****L. "; + + const wchar_t *ptr; + + if (vtmode == VT_POORMAN) + ptr = unitab_xterm_poorman; + else + ptr = unitab_xterm_std; + if (i >= 0x5F && i < 0x7F) - ucsdata->unitab_xterm[i] = unitab_xterm_std[i & 0x1F]; + ucsdata->unitab_xterm[i] = ptr[i & 0x1F]; else ucsdata->unitab_xterm[i] = ucsdata->unitab_line[i]; } @@ -218,3 +227,28 @@ int init_ucs(struct unicode_data *ucsdata, return ret; } + +const char *cp_name(int codepage) +{ + if (codepage == CS_NONE) + return "Use font encoding"; + return charset_to_localenc(codepage); +} + +const char *cp_enumerate(int index) +{ + int charset; + if (index == 0) + return "Use font encoding"; + charset = charset_localenc_nth(index-1); + if (charset == CS_NONE) + return NULL; + return charset_to_localenc(charset); +} + +int decode_codepage(char *cp_name) +{ + if (!*cp_name) + return CS_NONE; /* use font encoding */ + return charset_from_localenc(cp_name); +}