]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - xlat.c
Run entire source base through GNU indent to tidy up the varying
[PuTTY.git] / 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 }