ISO8859-2 to CP852 output translation wants to have Win1250 to ISO8859-2
[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_88592cp852)
146 return xlatISO88592toCP852[c];
147 return c;
148 }
149
150
151 static unsigned char latkbd2_win[]=
152 {
153 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
154 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
155 32, 33,221, 35, 36, 37, 38,253, 40, 41, 42,178,225,186,254, 46,
156 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,198,230,193,179,222, 44,
157 64,212,200,209,194,211,192,207,208,216,206,203,196,220,210,217,
158 199,201,202,219,197,195,204,214,215,205,223,245,191,250, 94,170,
159 96,244,232,241,226,243,224,239,240,248,238,235,228,252,242,249,
160 231,233,234,251,229,227,236,246,247,237,255,213,175,218,126,127,
161 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
162 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
163 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
164 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
165 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
166 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
167 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
168 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
169 };
170
171 unsigned char xlat_latkbd2win(unsigned char c)
172 {
173 if(cfg.xlat_capslockcyr)
174 return latkbd2_win[c];
175 return c;
176 }