5 for k, v in ipairs(arg) do
6 demap = string.match(v, "ignore=([0-9]+)");
8 demap = tonumber(demap);
12 table.insert(demappings, demap);
16 add_keyboard_map_entry = function(keynum, raw, shifted)
17 if type(raw) == "string" then
18 raw = string.byte(raw);
20 if type(shifted) == "string" then
21 shifted = string.byte(shifted);
24 keyboard_map[raw] = {keynum, keynum};
25 keyboard_map[raw + 128] = {56, keynum, keynum, 56};
26 if raw >= 64 and raw <= 95 then
27 keyboard_map[raw - 64] = {29, keynum, keynum, 29};
28 keyboard_map[raw + 64] = {56, 29, keynum, keynum, 29, 56};
32 keyboard_map[shifted] = {54, keynum, keynum, 54};
33 keyboard_map[shifted + 128] = {56, 54, keynum, keynum, 54, 56};
34 if shifted >= 64 and shifted <= 95 then
35 keyboard_map[shifted - 64] = {29, 54, keynum, keynum, 54, 29};
36 keyboard_map[shifted + 64] = {56, 54, 29, keynum, keynum, 29, 54, 56};
43 special_keys["1"] = {2, 2};
44 special_keys["2"] = {3, 3};
45 special_keys["3"] = {4, 4};
46 special_keys["4"] = {5, 5};
47 special_keys["5"] = {6, 6};
48 special_keys["6"] = {7, 7};
49 special_keys["7"] = {8, 8};
50 special_keys["8"] = {9, 9};
51 special_keys["9"] = {10, 10};
52 special_keys["0"] = {11, 11};
53 special_keys["A"] = {63, 63};
54 special_keys["B"] = {66, 66};
55 special_keys["C"] = {15, 15};
56 special_keys["r"] = {28, 28};
57 special_keys["n"] = {28, 28};
58 special_keys["D"] = {95, 95};
61 -- Keyboard mapping table
63 add_keyboard_map_entry(1); -- ESCAPE
64 add_keyboard_map_entry(2, "1", "!");
65 add_keyboard_map_entry(3, "2", "@");
66 add_keyboard_map_entry(4, "3", "#");
67 add_keyboard_map_entry(5, "4", "$");
68 add_keyboard_map_entry(6, "5", "%");
69 add_keyboard_map_entry(7, "6", "^");
70 add_keyboard_map_entry(8, "7", "&");
71 add_keyboard_map_entry(9, "8", "*");
72 add_keyboard_map_entry(10, "9", "(");
73 add_keyboard_map_entry(11, "0", ")");
74 add_keyboard_map_entry(12, "-", "_");
75 add_keyboard_map_entry(13, "=", "+");
76 add_keyboard_map_entry(14); -- BACKSPACE
77 add_keyboard_map_entry(15); -- TABULATOR
78 add_keyboard_map_entry(16, "q", "Q");
79 add_keyboard_map_entry(17, "w", "W");
80 add_keyboard_map_entry(18, "e", "E");
81 add_keyboard_map_entry(19, "r", "R");
82 add_keyboard_map_entry(20, "t", "T");
83 add_keyboard_map_entry(21, "y", "Y");
84 add_keyboard_map_entry(22, "u", "U");
85 add_keyboard_map_entry(23, "i", "I");
86 add_keyboard_map_entry(24, "o", "O");
87 add_keyboard_map_entry(25, "p", "P");
88 add_keyboard_map_entry(26, "[", "{");
89 add_keyboard_map_entry(27, "]", "}");
90 add_keyboard_map_entry(28); -- ENTER
91 add_keyboard_map_entry(29); -- Left CONTROL
92 add_keyboard_map_entry(30, "a", "A");
93 add_keyboard_map_entry(31, "s", "S");
94 add_keyboard_map_entry(32, "d", "D");
95 add_keyboard_map_entry(33, "f", "F");
96 add_keyboard_map_entry(34, "g", "G");
97 add_keyboard_map_entry(35, "h", "H");
98 add_keyboard_map_entry(36, "j", "J");
99 add_keyboard_map_entry(37, "k", "K");
100 add_keyboard_map_entry(38, "l", "L");
101 add_keyboard_map_entry(39, ";", ":");
102 add_keyboard_map_entry(40, "'", "\"");
103 add_keyboard_map_entry(41, "`", "~");
104 add_keyboard_map_entry(42); -- LEFT SHIFT
105 add_keyboard_map_entry(43, "\\", "|");
106 add_keyboard_map_entry(44, "z", "Z");
107 add_keyboard_map_entry(45, "x", "X");
108 add_keyboard_map_entry(46, "c", "C");
109 add_keyboard_map_entry(47, "v", "V");
110 add_keyboard_map_entry(48, "b", "B");
111 add_keyboard_map_entry(49, "n", "N");
112 add_keyboard_map_entry(50, "m", "M");
113 add_keyboard_map_entry(51, ",", "<");
114 add_keyboard_map_entry(52, ".", ">");
115 add_keyboard_map_entry(53, "/", "?");
116 add_keyboard_map_entry(54); -- RIGHT SHIFT
117 add_keyboard_map_entry(55); -- KEYPAD MULTIPLY
118 add_keyboard_map_entry(56); -- LEFT ALT
119 add_keyboard_map_entry(57, " ");
120 add_keyboard_map_entry(58); -- CAPS LOCK
121 add_keyboard_map_entry(59); -- F1
122 add_keyboard_map_entry(60); -- F2
123 add_keyboard_map_entry(61); -- F3
124 add_keyboard_map_entry(62); -- F4
125 add_keyboard_map_entry(63); -- F5
126 add_keyboard_map_entry(64); -- F6
127 add_keyboard_map_entry(65); -- F7
128 add_keyboard_map_entry(66); -- F8
129 add_keyboard_map_entry(67); -- F9
130 add_keyboard_map_entry(68); -- F10
131 add_keyboard_map_entry(69); -- NUM LOCK
132 add_keyboard_map_entry(70); -- SCROLL LOCK
133 add_keyboard_map_entry(71); -- KP7
134 add_keyboard_map_entry(72); -- KP8
135 add_keyboard_map_entry(73); -- KP9
136 add_keyboard_map_entry(74); -- KEYPAD MINUS
137 add_keyboard_map_entry(75); -- KP4
138 add_keyboard_map_entry(76); -- KP5
139 add_keyboard_map_entry(77); -- KP6
140 add_keyboard_map_entry(78); -- KEYPAD PLUS
141 add_keyboard_map_entry(79); -- KP1
142 add_keyboard_map_entry(80); -- KP2
143 add_keyboard_map_entry(81); -- KP3
144 add_keyboard_map_entry(82); -- KP0
145 add_keyboard_map_entry(83); -- KEYPAD DECIMAL SIGN
146 add_keyboard_map_entry(84); -- RESERVED BY EMULATOR
147 add_keyboard_map_entry(85); -- UNKNOWN
148 add_keyboard_map_entry(86); -- UNKNOWN
149 add_keyboard_map_entry(87); -- F11
150 add_keyboard_map_entry(88); -- F12
151 add_keyboard_map_entry(89); -- UNKNOWN
152 add_keyboard_map_entry(90); -- UNKNOWN
153 add_keyboard_map_entry(91); -- UNKNOWN
154 add_keyboard_map_entry(92); -- UNKNOWN
155 add_keyboard_map_entry(93); -- UNKNOWN
156 add_keyboard_map_entry(94); -- UNKNOWN
157 add_keyboard_map_entry(95); -- UNKNOWN
160 keyboard_map[0x0A] = {};
162 -- Demap unwanted keys.
163 for k, v in ipairs(demappings) do
164 keyboard_map[v] = {};
167 write = function(tab)
169 for k, v in ipairs(tab) do
174 special_escape = false;
176 charo = io.stdin:read(1);
177 if special_escape then
178 if charo == "\\" then
179 -- Handle as ordinary.
180 char = string.byte(charo);
181 if not keyboard_map[char] then
182 error(string.format("Unknown character 0x%02X (not found in keyboard map)", char));
184 write(keyboard_map[char]);
185 elseif special_keys[charo] then
186 write(special_keys[charo]);
188 error("Bad special '" .. charo .. "'");
190 special_escape = false;
191 elseif charo == "\\" then
192 special_escape = true;
197 char = string.byte(charo);
198 if not keyboard_map[char] then
199 error(string.format("Unknown character 0x%02X (not found in keyboard map)", char));
201 write(keyboard_map[char]);