Run entire source base through GNU indent to tidy up the varying
[u/mdw/putty] / xlat.c
CommitLineData
14963b8f 1#include <windows.h>
ec562aea 2#include <stdio.h>
14963b8f 3#include "putty.h"
4
32874aea 5static 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
14963b8f 32};
33
32874aea 34static 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
14963b8f 61};
62
32874aea 63static 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
d3d16feb 89};
90
32874aea 91static 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
d3d16feb 118};
119
32874aea 120static 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,
b0faa571 145};
146
32874aea 147static 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,
b0faa571 174};
175
14963b8f 176unsigned char xlat_kbd2tty(unsigned char c)
177{
32874aea 178 if (cfg.xlat_enablekoiwin)
14963b8f 179 return win2koi[c];
ed282e28 180 else if (cfg.xlat_88592w1250 || cfg.xlat_88592cp852)
32874aea 181 return xlatWIN1250toISO88592[c];
14963b8f 182 return c;
183}
184
185unsigned char xlat_tty2scr(unsigned char c)
186{
32874aea 187 if (cfg.xlat_enablekoiwin)
14963b8f 188 return koi2win[c];
5b44a37e 189 else if (cfg.xlat_88592w1250)
32874aea 190 return xlatISO88592toWIN1250[c];
b0faa571 191 else if (cfg.xlat_88592cp852)
32874aea 192 return xlatISO88592toCP852[c];
14963b8f 193 return c;
194}
195
196
32874aea 197static 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
14963b8f 226};
227
32874aea 228unsigned char xlat_latkbd2win(unsigned char c)
14963b8f 229{
32874aea 230 if (cfg.xlat_capslockcyr)
14963b8f 231 return latkbd2_win[c];
232 return c;
233}