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