]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - xlat.c
Replace the 8859-2 -> Win1250 translation which I accidentally blew away
[PuTTY.git] / 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 }