]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - xlat.c
Add ISO8859-2 / CP852 translation courtesy of Jaromir Filsak
[PuTTY.git] / xlat.c
1 #include <windows.h>
2 #ifndef AUTO_WINSOCK
3 #ifdef WINSOCK_TWO
4 #include <winsock2.h>
5 #else
6 #include <winsock.h>
7 #endif
8 #endif
9 #include <stdio.h>
10 #include "putty.h"
11
12 static unsigned char win2koi[] =
13 {
14       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
15      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
16      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
17      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
18      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
19      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
20      96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
21     112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
22     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
23     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
24     160,161,162,163,164,189,166,167,179,169,180,171,172,173,174,183,
25     176,177,182,166,173,181,182,183,163,185,164,187,188,189,190,167,
26     225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
27     242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
28     193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
29     210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209
30 };
31
32 static unsigned char koi2win[] =
33 {
34       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
35      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
36      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
37      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
38      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
39      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
40      96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
41     112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
42     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
43     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
44     160,161,162,184,186,165,179,191,168,169,170,171,172,180,174,175,
45     176,177,178,168,170,181,178,175,184,185,186,187,188,165,190,191,
46     254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
47     239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
48     222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
49     207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218
50 };
51
52 static unsigned char xlatWIN1250toISO88592[] =
53 {
54       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
55      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
56      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
57      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
58      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
59      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
60      96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
61     112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
62     128,129, 39,131, 34, 46,124,124,136, 47,169, 60,166,171,174,172,
63     144, 96, 39, 34, 34, 42, 45, 45,152, 84,185, 62,182,187,190,188,
64     160,183,162,163,164,161,124,167,168, 99,170, 34, 39,173, 82,175,
65     176, 63,178,179,180,117,182,255,184,177,186, 34,165,189,181,191,
66     192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
67     208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
68     224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
69     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
70 };
71
72 static unsigned char xlatISO88592toWIN1250[] =
73 {
74       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
75      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
76      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
77      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
78      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
79      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
80      96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
81     112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
82     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
83     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
84     160,165,162,163,164,188,140,167,168,138,170,141,143,173,142,175,
85     176,185,178,179,180,190,156,161,184,154,186,157,159,189,158,191,
86     192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
87     208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
88     224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
89     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
90 };
91
92 static unsigned char xlatISO88592toCP852[] =
93 {
94       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
95      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
96      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
97      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
98      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
99      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
100      96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
101     112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
102     242, 32, 34, 32, 34, 46, 43, 35, 32, 47,138, 60,151,141,166,141,
103     032, 34, 34, 34, 34,254, 45, 45, 32,126,154, 62,152,157,167,171,
104     255,164,244,157,207,149,151,245,249,230,184,155,141,240,166,189,
105     248,165,247,136,239,150,152,243,242,231,173,156,171,241,167,190,
106     232,181,182,198,142,145,143,128,172,144,168,211,183,214,215,210,
107     209,227,213,224,226,138,153,158,252,222,233,235,154,237,221,225,
108     234,160,131,199,132,146,134,135,159,130,169,137,216,161,140,212,
109     208,228,229,162,147,139,148,246,253,133,163,251,129,236,238,250,
110 };
111
112 static unsigned char xlatCP852toISO88592[] =
113 {
114       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
115      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 
116      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 
117      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 
118      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 
119      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 
120      96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
121     112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
122     199,252,233,226,228,249,230,231,179,235,138,245,238,141,196,198,
123     201,197,229,244,246,165,181,140,156,214,154,171,187,157,215,232,
124     225,237,243,250,161,177,142,158,202,234,170,159,200,186,174,175,
125     176,177,178,179,180,193,194,204,170,185,186,187,188,175,191,191,
126     192,193,194,195,196,197,195,227,200,201,202,203,204,205,206,164,
127     240,208,207,203,239,210,205,206,236,217,218,219,220,222,217,223,
128     211,223,212,209,241,242,169,185,192,218,224,219,253,221,254,180,
129     173,189,128,183,162,167,247,178,176,168,255,251,216,248,149,160,
130 };
131
132 unsigned char xlat_kbd2tty(unsigned char c)
133 {
134     if(cfg.xlat_enablekoiwin)
135         return win2koi[c];
136     else if (cfg.xlat_88592w1250)
137         return xlatWIN1250toISO88592[c];
138     else if (cfg.xlat_88592cp852)
139         return xlatCP852toISO88592[c];
140     return c;
141 }
142
143 unsigned char xlat_tty2scr(unsigned char c)
144 {
145     if(cfg.xlat_enablekoiwin)
146         return koi2win[c];
147     else if (cfg.xlat_88592cp852)
148         return xlatISO88592toCP852[c];
149     return c;
150 }
151
152
153 static unsigned char latkbd2_win[]=
154 {
155       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
156      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
157      32, 33,221, 35, 36, 37, 38,253, 40, 41, 42,178,225,186,254, 46,
158      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,198,230,193,179,222, 44,
159      64,212,200,209,194,211,192,207,208,216,206,203,196,220,210,217,
160     199,201,202,219,197,195,204,214,215,205,223,245,191,250, 94,170,
161      96,244,232,241,226,243,224,239,240,248,238,235,228,252,242,249,
162     231,233,234,251,229,227,236,246,247,237,255,213,175,218,126,127,
163     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
164     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
165     160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
166     176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
167     192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
168     208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
169     224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
170     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
171 };
172
173 unsigned char xlat_latkbd2win(unsigned char  c)
174 {
175     if(cfg.xlat_capslockcyr)
176         return latkbd2_win[c];
177     return c;
178 }