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