Created a shiny new abstraction for the socket handling. Has many
[u/mdw/putty] / xlat.c
CommitLineData
14963b8f 1#include <windows.h>
ec562aea 2#include <stdio.h>
14963b8f 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
d3d16feb 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
b0faa571 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
14963b8f 125unsigned char xlat_kbd2tty(unsigned char c)
126{
127 if(cfg.xlat_enablekoiwin)
128 return win2koi[c];
ed282e28 129 else if (cfg.xlat_88592w1250 || cfg.xlat_88592cp852)
d3d16feb 130 return xlatWIN1250toISO88592[c];
14963b8f 131 return c;
132}
133
134unsigned char xlat_tty2scr(unsigned char c)
135{
136 if(cfg.xlat_enablekoiwin)
137 return koi2win[c];
5b44a37e 138 else if (cfg.xlat_88592w1250)
139 return xlatISO88592toWIN1250[c];
b0faa571 140 else if (cfg.xlat_88592cp852)
141 return xlatISO88592toCP852[c];
14963b8f 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}