Fix the licence again. (Despite the copyright holders being more
[u/mdw/putty] / unicode.c
index e1740da..877aff6 100644 (file)
--- a/unicode.c
+++ b/unicode.c
@@ -393,6 +393,13 @@ void init_ucs_tables(void)
        link_font(unitab_xterm, unitab_oemcp, ATTR_OEMCP);
     }
 
+    if (dbcs_screenfont && font_codepage != line_codepage) {
+       /* F***ing Microsoft fonts, Japanese and Korean codepage fonts
+        * have a currency symbol at 0x5C but their unicode value is 
+        * still given as U+005C not the correct U+00A5. */
+       unitab_line['\\'] = ATTR_OEMCP + '\\';
+    }
+
     /* Last chance, if !unicode then try poorman links. */
     if (cfg.vtmode != VT_UNICODE) {
        static char poorman_scoacs[] = 
@@ -420,14 +427,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;
            }
        }
@@ -537,7 +544,7 @@ int check_compose(int first, int second)
        0x43, 0x2f, 0x00a2}, {
        0x43, 0x7c, 0x00a2}, {
        0x4c, 0x2d, 0x00a3}, {
-       0x4c, 0x3d, 0x00a3}, {
+       0x4c, 0x3d, 0x20a4}, {
        0x58, 0x4f, 0x00a4}, {
        0x58, 0x30, 0x00a4}, {
        0x59, 0x2d, 0x00a5}, {