RJK's patch to enable PuTTY's X forwarding to connect to local X
[u/mdw/putty] / unix / uxucs.c
index 8731239..601b35d 100644 (file)
@@ -8,6 +8,7 @@
 #include <time.h>
 
 #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);
+}