535497d6878224cabd346d1585471e3991d33ac4
[u/mdw/putty] / 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 || cfg.xlat_88592cp852)
137 return xlatWIN1250toISO88592[c];
138 return c;
139 }
140
141 unsigned char xlat_tty2scr(unsigned char c)
142 {
143 if(cfg.xlat_enablekoiwin)
144 return koi2win[c];
145 else if (cfg.xlat_88592w1250)
146 return xlatISO88592toWIN1250[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 }