|
1 (* |
|
2 * Hedgewars, a free turn based strategy game |
|
3 * Copyright (c) 2004-2019 Andrey Korotaev <unC0Rr@gmail.com> |
|
4 * |
|
5 * This program is free software; you can redistribute it and/or modify |
|
6 * it under the terms of the GNU General Public License as published by |
|
7 * the Free Software Foundation; version 2 of the License |
|
8 * |
|
9 * This program is distributed in the hope that it will be useful, |
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 * GNU General Public License for more details. |
|
13 * |
|
14 * You should have received a copy of the GNU General Public License |
|
15 * along with this program; if not, write to the Free Software |
|
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|
17 *) |
|
18 |
|
19 unit uKeyNames; |
|
20 interface |
|
21 uses uConsts; |
|
22 |
|
23 type TKeyNames = array [0..cKeyMaxIndex] of string[15]; |
|
24 |
|
25 procedure populateKeyNames(var KeyArray: TKeyNames); |
|
26 |
|
27 implementation |
|
28 |
|
29 procedure populateKeyNames(var KeyArray: TKeyNames); |
|
30 begin |
|
31 (* |
|
32 This is a mapping from SDL scancodes to Hedgewars key identifiers. |
|
33 Hedgewars key identifiers are strings with a maximum length of 15 |
|
34 and are used internally to identify keys in the engine and in settings.ini. |
|
35 *) |
|
36 KeyArray[4] := 'a'; |
|
37 KeyArray[5] := 'b'; |
|
38 KeyArray[6] := 'c'; |
|
39 KeyArray[7] := 'd'; |
|
40 KeyArray[8] := 'e'; |
|
41 KeyArray[9] := 'f'; |
|
42 KeyArray[10] := 'g'; |
|
43 KeyArray[11] := 'h'; |
|
44 KeyArray[12] := 'i'; |
|
45 KeyArray[13] := 'j'; |
|
46 KeyArray[14] := 'k'; |
|
47 KeyArray[15] := 'l'; |
|
48 KeyArray[16] := 'm'; |
|
49 KeyArray[17] := 'n'; |
|
50 KeyArray[18] := 'o'; |
|
51 KeyArray[19] := 'p'; |
|
52 KeyArray[20] := 'q'; |
|
53 KeyArray[21] := 'r'; |
|
54 KeyArray[22] := 's'; |
|
55 KeyArray[23] := 't'; |
|
56 KeyArray[24] := 'u'; |
|
57 KeyArray[25] := 'v'; |
|
58 KeyArray[26] := 'w'; |
|
59 KeyArray[27] := 'x'; |
|
60 KeyArray[28] := 'y'; |
|
61 KeyArray[29] := 'z'; |
|
62 KeyArray[30] := '1'; |
|
63 KeyArray[31] := '2'; |
|
64 KeyArray[32] := '3'; |
|
65 KeyArray[33] := '4'; |
|
66 KeyArray[34] := '5'; |
|
67 KeyArray[35] := '6'; |
|
68 KeyArray[36] := '7'; |
|
69 KeyArray[37] := '8'; |
|
70 KeyArray[38] := '9'; |
|
71 KeyArray[39] := '0'; |
|
72 KeyArray[40] := 'return'; |
|
73 KeyArray[41] := 'escape'; |
|
74 KeyArray[42] := 'backspace'; |
|
75 KeyArray[43] := 'tab'; |
|
76 KeyArray[44] := 'space'; |
|
77 KeyArray[45] := '-'; |
|
78 KeyArray[46] := '='; |
|
79 KeyArray[47] := '['; |
|
80 KeyArray[48] := ']'; |
|
81 KeyArray[49] := '\'; |
|
82 KeyArray[50] := '#'; |
|
83 KeyArray[51] := ';'; |
|
84 KeyArray[52] := ''''; |
|
85 KeyArray[53] := '`'; |
|
86 KeyArray[54] := ','; |
|
87 KeyArray[55] := '.'; |
|
88 KeyArray[56] := '/'; |
|
89 KeyArray[57] := 'capslock'; |
|
90 KeyArray[58] := 'f1'; |
|
91 KeyArray[59] := 'f2'; |
|
92 KeyArray[60] := 'f3'; |
|
93 KeyArray[61] := 'f4'; |
|
94 KeyArray[62] := 'f5'; |
|
95 KeyArray[63] := 'f6'; |
|
96 KeyArray[64] := 'f7'; |
|
97 KeyArray[65] := 'f8'; |
|
98 KeyArray[66] := 'f9'; |
|
99 KeyArray[67] := 'f10'; |
|
100 KeyArray[68] := 'f11'; |
|
101 KeyArray[69] := 'f12'; |
|
102 KeyArray[70] := 'printscreen'; |
|
103 KeyArray[71] := 'scrolllock'; |
|
104 KeyArray[72] := 'pause'; |
|
105 KeyArray[73] := 'insert'; |
|
106 KeyArray[74] := 'home'; |
|
107 KeyArray[75] := 'pageup'; |
|
108 KeyArray[76] := 'delete'; |
|
109 KeyArray[77] := 'end'; |
|
110 KeyArray[78] := 'pagedown'; |
|
111 KeyArray[79] := 'right'; |
|
112 KeyArray[80] := 'left'; |
|
113 KeyArray[81] := 'down'; |
|
114 KeyArray[82] := 'up'; |
|
115 KeyArray[83] := 'numlock'; |
|
116 KeyArray[84] := 'keypad_/'; |
|
117 KeyArray[85] := 'keypad_*'; |
|
118 KeyArray[86] := 'keypad_-'; |
|
119 KeyArray[87] := 'keypad_+'; |
|
120 KeyArray[88] := 'keypad_enter'; |
|
121 KeyArray[89] := 'keypad_1'; |
|
122 KeyArray[90] := 'keypad_2'; |
|
123 KeyArray[91] := 'keypad_3'; |
|
124 KeyArray[92] := 'keypad_4'; |
|
125 KeyArray[93] := 'keypad_5'; |
|
126 KeyArray[94] := 'keypad_6'; |
|
127 KeyArray[95] := 'keypad_7'; |
|
128 KeyArray[96] := 'keypad_8'; |
|
129 KeyArray[97] := 'keypad_9'; |
|
130 KeyArray[98] := 'keypad_0'; |
|
131 KeyArray[99] := 'keypad_.'; |
|
132 KeyArray[101] := 'menu'; |
|
133 KeyArray[102] := 'power'; |
|
134 KeyArray[103] := 'keypad_='; |
|
135 KeyArray[104] := 'f13'; |
|
136 KeyArray[105] := 'f14'; |
|
137 KeyArray[106] := 'f15'; |
|
138 KeyArray[107] := 'f16'; |
|
139 KeyArray[108] := 'f17'; |
|
140 KeyArray[109] := 'f18'; |
|
141 KeyArray[110] := 'f19'; |
|
142 KeyArray[111] := 'f20'; |
|
143 KeyArray[112] := 'f21'; |
|
144 KeyArray[113] := 'f22'; |
|
145 KeyArray[114] := 'f23'; |
|
146 KeyArray[115] := 'f24'; |
|
147 KeyArray[116] := 'execute'; |
|
148 KeyArray[117] := 'help'; |
|
149 KeyArray[118] := 'menu'; |
|
150 KeyArray[119] := 'select'; |
|
151 KeyArray[120] := 'stop'; |
|
152 KeyArray[121] := 'again'; |
|
153 KeyArray[122] := 'undo'; |
|
154 KeyArray[123] := 'cut'; |
|
155 KeyArray[124] := 'copy'; |
|
156 KeyArray[125] := 'paste'; |
|
157 KeyArray[126] := 'find'; |
|
158 KeyArray[127] := 'mute'; |
|
159 KeyArray[128] := 'volumeup'; |
|
160 KeyArray[129] := 'volumedown'; |
|
161 KeyArray[133] := 'keypad_,'; |
|
162 KeyArray[134] := 'keypad_=_(as400'; |
|
163 KeyArray[153] := 'alterase'; |
|
164 KeyArray[154] := 'sysreq'; |
|
165 KeyArray[155] := 'cancel'; |
|
166 KeyArray[156] := 'clear'; |
|
167 KeyArray[157] := 'prior'; |
|
168 KeyArray[158] := 'return2'; |
|
169 KeyArray[159] := 'separator'; |
|
170 KeyArray[160] := 'out'; |
|
171 KeyArray[161] := 'oper'; |
|
172 KeyArray[162] := 'clear_/_again'; |
|
173 KeyArray[163] := 'crsel'; |
|
174 KeyArray[164] := 'exsel'; |
|
175 KeyArray[176] := 'keypad_00'; |
|
176 KeyArray[177] := 'keypad_000'; |
|
177 KeyArray[178] := 'thousandssepara'; |
|
178 KeyArray[179] := 'decimalseparato'; |
|
179 KeyArray[180] := 'currencyunit'; |
|
180 KeyArray[181] := 'currencysubunit'; |
|
181 KeyArray[182] := 'keypad_('; |
|
182 KeyArray[183] := 'keypad_)'; |
|
183 KeyArray[184] := 'keypad_{'; |
|
184 KeyArray[185] := 'keypad_}'; |
|
185 KeyArray[186] := 'keypad_tab'; |
|
186 KeyArray[187] := 'keypad_backspac'; |
|
187 KeyArray[188] := 'keypad_a'; |
|
188 KeyArray[189] := 'keypad_b'; |
|
189 KeyArray[190] := 'keypad_c'; |
|
190 KeyArray[191] := 'keypad_d'; |
|
191 KeyArray[192] := 'keypad_e'; |
|
192 KeyArray[193] := 'keypad_f'; |
|
193 KeyArray[194] := 'keypad_xor'; |
|
194 KeyArray[195] := 'keypad_^'; |
|
195 KeyArray[196] := 'keypad_%'; |
|
196 KeyArray[197] := 'keypad_<'; |
|
197 KeyArray[198] := 'keypad_>'; |
|
198 KeyArray[199] := 'keypad_&'; |
|
199 KeyArray[200] := 'keypad_&&'; |
|
200 KeyArray[201] := 'keypad_|'; |
|
201 KeyArray[202] := 'keypad_||'; |
|
202 KeyArray[203] := 'keypad_:'; |
|
203 KeyArray[204] := 'keypad_#'; |
|
204 KeyArray[205] := 'keypad_space'; |
|
205 KeyArray[206] := 'keypad_@'; |
|
206 KeyArray[207] := 'keypad_!'; |
|
207 KeyArray[208] := 'keypad_memstore'; |
|
208 KeyArray[209] := 'keypad_memrecal'; |
|
209 KeyArray[210] := 'keypad_memclear'; |
|
210 KeyArray[211] := 'keypad_memadd'; |
|
211 KeyArray[212] := 'keypad_memsubtr'; |
|
212 KeyArray[213] := 'keypad_memmulti'; |
|
213 KeyArray[214] := 'keypad_memdivid'; |
|
214 KeyArray[215] := 'keypad_+/-'; |
|
215 KeyArray[216] := 'keypad_clear'; |
|
216 KeyArray[217] := 'keypad_clearent'; |
|
217 KeyArray[218] := 'keypad_binary'; |
|
218 KeyArray[219] := 'keypad_octal'; |
|
219 KeyArray[220] := 'keypad_decimal'; |
|
220 KeyArray[221] := 'keypad_hexadeci'; |
|
221 KeyArray[224] := 'left_ctrl'; |
|
222 KeyArray[225] := 'left_shift'; |
|
223 KeyArray[226] := 'left_alt'; |
|
224 KeyArray[227] := 'left_gui'; |
|
225 KeyArray[228] := 'right_ctrl'; |
|
226 KeyArray[229] := 'right_shift'; |
|
227 KeyArray[230] := 'right_alt'; |
|
228 KeyArray[231] := 'right_gui'; |
|
229 KeyArray[257] := 'modeswitch'; |
|
230 KeyArray[258] := 'audionext'; |
|
231 KeyArray[259] := 'audioprev'; |
|
232 KeyArray[260] := 'audiostop'; |
|
233 KeyArray[261] := 'audioplay'; |
|
234 KeyArray[262] := 'audiomute'; |
|
235 KeyArray[263] := 'mediaselect'; |
|
236 KeyArray[264] := 'www'; |
|
237 KeyArray[265] := 'mail'; |
|
238 KeyArray[266] := 'calculator'; |
|
239 KeyArray[267] := 'computer'; |
|
240 KeyArray[268] := 'ac_search'; |
|
241 KeyArray[269] := 'ac_home'; |
|
242 KeyArray[270] := 'ac_back'; |
|
243 KeyArray[271] := 'ac_forward'; |
|
244 KeyArray[272] := 'ac_stop'; |
|
245 KeyArray[273] := 'ac_refresh'; |
|
246 KeyArray[274] := 'ac_bookmarks'; |
|
247 KeyArray[275] := 'brightnessdown'; |
|
248 KeyArray[276] := 'brightnessup'; |
|
249 KeyArray[277] := 'displayswitch'; |
|
250 KeyArray[278] := 'kbdillumtoggle'; |
|
251 KeyArray[279] := 'kbdillumdown'; |
|
252 KeyArray[280] := 'kbdillumup'; |
|
253 KeyArray[281] := 'eject'; |
|
254 KeyArray[282] := 'sleep'; |
|
255 KeyArray[283] := 'app1'; |
|
256 KeyArray[284] := 'app2'; |
|
257 KeyArray[285] := 'audiorewind'; |
|
258 KeyArray[286] := 'audiofastforwar'; |
|
259 |
|
260 end; |
|
261 |
|
262 (* |
|
263 The Hedgewars key identifiers were obtained with the following algorithm: |
|
264 |
|
265 Basically: |
|
266 - For each SDL scancode, do: |
|
267 - Take the printable SDL scancode key name (with SDL_GetScancodeName) |
|
268 - Replace spaces with underscores |
|
269 - Lowercase it |
|
270 - Cap string length to 15 characters |
|
271 - Manually fix duplicates |
|
272 |
|
273 See also: |
|
274 |
|
275 https://wiki.libsdl.org/SDLScancodeLookup |
|
276 https://wiki.libsdl.org/SDL_Scancode |
|
277 |
|
278 NOTE: For compability reasons, existing identifiers should not be renamed. |
|
279 |
|
280 Old code snippet: |
|
281 |
|
282 for i := 0 to cKeyMaxIndex - 5 do |
|
283 begin |
|
284 s := shortstring(SDL_GetScancodeName(TSDL_Scancode(i))); |
|
285 |
|
286 for t := 1 to Length(s) do |
|
287 if s[t] = ' ' then |
|
288 s[t] := '_'; |
|
289 KeyArray[i] := LowerCase(s); |
|
290 if s = '''' then |
|
291 WriteLnToConsole(' KeyArray['+IntToStr(i)+']'+' := '';') |
|
292 else if s <> '' then |
|
293 WriteLnToConsole(' KeyArray[SDL_SCANCODE_'+KeyArray[i]+']'+' := '''+KeyArray[i]+''';'); |
|
294 end; |
|
295 *) |
|
296 |
|
297 end. |