Robert de Bath's multi-purpose patch, slightly modified.
[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
14963b8f 85unsigned char xlat_kbd2tty(unsigned char c)
86{
87 if(cfg.xlat_enablekoiwin)
88 return win2koi[c];
d3d16feb 89 else if (cfg.xlat_88592w1250)
90 return xlatWIN1250toISO88592[c];
14963b8f 91 return c;
92}
93
94unsigned char xlat_tty2scr(unsigned char c)
95{
96 if(cfg.xlat_enablekoiwin)
97 return koi2win[c];
d3d16feb 98 else if (cfg.xlat_88592w1250)
99 return xlatISO88592toWIN1250[c];
14963b8f 100 return c;
101}
102
103
104static unsigned char latkbd2_win[]=
105{
106 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
107 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
108 32, 33,221, 35, 36, 37, 38,253, 40, 41, 42,178,225,186,254, 46,
109 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,198,230,193,179,222, 44,
110 64,212,200,209,194,211,192,207,208,216,206,203,196,220,210,217,
111 199,201,202,219,197,195,204,214,215,205,223,245,191,250, 94,170,
112 96,244,232,241,226,243,224,239,240,248,238,235,228,252,242,249,
113 231,233,234,251,229,227,236,246,247,237,255,213,175,218,126,127,
114 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
115 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
116 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
117 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
118 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
119 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
120 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
121 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
122};
123
124unsigned char xlat_latkbd2win(unsigned char c)
125{
126 if(cfg.xlat_capslockcyr)
127 return latkbd2_win[c];
128 return c;
129}