25 procedure populateKeyNames(var KeyArray: TKeyNames); |
25 procedure populateKeyNames(var KeyArray: TKeyNames); |
26 // procedure generateKeyNames(); // DEBUG (see below) |
26 // procedure generateKeyNames(); // DEBUG (see below) |
27 |
27 |
28 implementation |
28 implementation |
29 |
29 |
|
30 uses uPhysFSLayer, uUtils, uVariables, uTypes, uConsole; |
|
31 |
30 procedure populateKeyNames(var KeyArray: TKeyNames); |
32 procedure populateKeyNames(var KeyArray: TKeyNames); |
|
33 var f: PfsFile; |
|
34 l, keyname, tmp: shortstring; |
|
35 i, scancode: LongInt; |
31 begin |
36 begin |
32 (* |
37 (* |
33 This is a mapping from SDL scancodes to Hedgewars key identifiers. |
38 KeyArray is a mapping from SDL scancodes to Hedgewars key identifiers. |
34 Hedgewars key identifiers are strings with a maximum length of 15 |
39 Hedgewars key identifiers are strings with a maximum length of 15 |
35 and are used internally to identify keys in the engine and in settings.ini. |
40 and are used internally to identify keys in the engine and in settings.ini. |
36 *) |
41 *) |
37 KeyArray[4] := 'a'; |
|
38 KeyArray[5] := 'b'; |
|
39 KeyArray[6] := 'c'; |
|
40 KeyArray[7] := 'd'; |
|
41 KeyArray[8] := 'e'; |
|
42 KeyArray[9] := 'f'; |
|
43 KeyArray[10] := 'g'; |
|
44 KeyArray[11] := 'h'; |
|
45 KeyArray[12] := 'i'; |
|
46 KeyArray[13] := 'j'; |
|
47 KeyArray[14] := 'k'; |
|
48 KeyArray[15] := 'l'; |
|
49 KeyArray[16] := 'm'; |
|
50 KeyArray[17] := 'n'; |
|
51 KeyArray[18] := 'o'; |
|
52 KeyArray[19] := 'p'; |
|
53 KeyArray[20] := 'q'; |
|
54 KeyArray[21] := 'r'; |
|
55 KeyArray[22] := 's'; |
|
56 KeyArray[23] := 't'; |
|
57 KeyArray[24] := 'u'; |
|
58 KeyArray[25] := 'v'; |
|
59 KeyArray[26] := 'w'; |
|
60 KeyArray[27] := 'x'; |
|
61 KeyArray[28] := 'y'; |
|
62 KeyArray[29] := 'z'; |
|
63 KeyArray[30] := '1'; |
|
64 KeyArray[31] := '2'; |
|
65 KeyArray[32] := '3'; |
|
66 KeyArray[33] := '4'; |
|
67 KeyArray[34] := '5'; |
|
68 KeyArray[35] := '6'; |
|
69 KeyArray[36] := '7'; |
|
70 KeyArray[37] := '8'; |
|
71 KeyArray[38] := '9'; |
|
72 KeyArray[39] := '0'; |
|
73 KeyArray[40] := 'return'; |
|
74 KeyArray[41] := 'escape'; |
|
75 KeyArray[42] := 'backspace'; |
|
76 KeyArray[43] := 'tab'; |
|
77 KeyArray[44] := 'space'; |
|
78 KeyArray[45] := '-'; |
|
79 KeyArray[46] := '='; |
|
80 KeyArray[47] := '['; |
|
81 KeyArray[48] := ']'; |
|
82 KeyArray[49] := '\'; |
|
83 KeyArray[50] := '#'; |
|
84 KeyArray[51] := ';'; |
|
85 KeyArray[52] := ''''; |
|
86 KeyArray[53] := '`'; |
|
87 KeyArray[54] := ','; |
|
88 KeyArray[55] := '.'; |
|
89 KeyArray[56] := '/'; |
|
90 KeyArray[57] := 'capslock'; |
|
91 KeyArray[58] := 'f1'; |
|
92 KeyArray[59] := 'f2'; |
|
93 KeyArray[60] := 'f3'; |
|
94 KeyArray[61] := 'f4'; |
|
95 KeyArray[62] := 'f5'; |
|
96 KeyArray[63] := 'f6'; |
|
97 KeyArray[64] := 'f7'; |
|
98 KeyArray[65] := 'f8'; |
|
99 KeyArray[66] := 'f9'; |
|
100 KeyArray[67] := 'f10'; |
|
101 KeyArray[68] := 'f11'; |
|
102 KeyArray[69] := 'f12'; |
|
103 KeyArray[70] := 'printscreen'; |
|
104 KeyArray[71] := 'scrolllock'; |
|
105 KeyArray[72] := 'pause'; |
|
106 KeyArray[73] := 'insert'; |
|
107 KeyArray[74] := 'home'; |
|
108 KeyArray[75] := 'pageup'; |
|
109 KeyArray[76] := 'delete'; |
|
110 KeyArray[77] := 'end'; |
|
111 KeyArray[78] := 'pagedown'; |
|
112 KeyArray[79] := 'right'; |
|
113 KeyArray[80] := 'left'; |
|
114 KeyArray[81] := 'down'; |
|
115 KeyArray[82] := 'up'; |
|
116 KeyArray[83] := 'numlock'; |
|
117 KeyArray[84] := 'keypad_/'; |
|
118 KeyArray[85] := 'keypad_*'; |
|
119 KeyArray[86] := 'keypad_-'; |
|
120 KeyArray[87] := 'keypad_+'; |
|
121 KeyArray[88] := 'keypad_enter'; |
|
122 KeyArray[89] := 'keypad_1'; |
|
123 KeyArray[90] := 'keypad_2'; |
|
124 KeyArray[91] := 'keypad_3'; |
|
125 KeyArray[92] := 'keypad_4'; |
|
126 KeyArray[93] := 'keypad_5'; |
|
127 KeyArray[94] := 'keypad_6'; |
|
128 KeyArray[95] := 'keypad_7'; |
|
129 KeyArray[96] := 'keypad_8'; |
|
130 KeyArray[97] := 'keypad_9'; |
|
131 KeyArray[98] := 'keypad_0'; |
|
132 KeyArray[99] := 'keypad_.'; |
|
133 KeyArray[101] := 'menu'; |
|
134 KeyArray[102] := 'power'; |
|
135 KeyArray[103] := 'keypad_='; |
|
136 KeyArray[104] := 'f13'; |
|
137 KeyArray[105] := 'f14'; |
|
138 KeyArray[106] := 'f15'; |
|
139 KeyArray[107] := 'f16'; |
|
140 KeyArray[108] := 'f17'; |
|
141 KeyArray[109] := 'f18'; |
|
142 KeyArray[110] := 'f19'; |
|
143 KeyArray[111] := 'f20'; |
|
144 KeyArray[112] := 'f21'; |
|
145 KeyArray[113] := 'f22'; |
|
146 KeyArray[114] := 'f23'; |
|
147 KeyArray[115] := 'f24'; |
|
148 KeyArray[116] := 'execute'; |
|
149 KeyArray[117] := 'help'; |
|
150 KeyArray[118] := 'menu'; |
|
151 KeyArray[119] := 'select'; |
|
152 KeyArray[120] := 'stop'; |
|
153 KeyArray[121] := 'again'; |
|
154 KeyArray[122] := 'undo'; |
|
155 KeyArray[123] := 'cut'; |
|
156 KeyArray[124] := 'copy'; |
|
157 KeyArray[125] := 'paste'; |
|
158 KeyArray[126] := 'find'; |
|
159 KeyArray[127] := 'mute'; |
|
160 KeyArray[128] := 'volumeup'; |
|
161 KeyArray[129] := 'volumedown'; |
|
162 KeyArray[133] := 'keypad_,'; |
|
163 KeyArray[134] := 'keypad_=_(as400'; |
|
164 KeyArray[153] := 'alterase'; |
|
165 KeyArray[154] := 'sysreq'; |
|
166 KeyArray[155] := 'cancel'; |
|
167 KeyArray[156] := 'clear'; |
|
168 KeyArray[157] := 'prior'; |
|
169 KeyArray[158] := 'return2'; |
|
170 KeyArray[159] := 'separator'; |
|
171 KeyArray[160] := 'out'; |
|
172 KeyArray[161] := 'oper'; |
|
173 KeyArray[162] := 'clear_/_again'; |
|
174 KeyArray[163] := 'crsel'; |
|
175 KeyArray[164] := 'exsel'; |
|
176 KeyArray[176] := 'keypad_00'; |
|
177 KeyArray[177] := 'keypad_000'; |
|
178 KeyArray[178] := 'thousandssepara'; |
|
179 KeyArray[179] := 'decimalseparato'; |
|
180 KeyArray[180] := 'currencyunit'; |
|
181 KeyArray[181] := 'currencysubunit'; |
|
182 KeyArray[182] := 'keypad_('; |
|
183 KeyArray[183] := 'keypad_)'; |
|
184 KeyArray[184] := 'keypad_{'; |
|
185 KeyArray[185] := 'keypad_}'; |
|
186 KeyArray[186] := 'keypad_tab'; |
|
187 KeyArray[187] := 'keypad_backspac'; |
|
188 KeyArray[188] := 'keypad_a'; |
|
189 KeyArray[189] := 'keypad_b'; |
|
190 KeyArray[190] := 'keypad_c'; |
|
191 KeyArray[191] := 'keypad_d'; |
|
192 KeyArray[192] := 'keypad_e'; |
|
193 KeyArray[193] := 'keypad_f'; |
|
194 KeyArray[194] := 'keypad_xor'; |
|
195 KeyArray[195] := 'keypad_^'; |
|
196 KeyArray[196] := 'keypad_%'; |
|
197 KeyArray[197] := 'keypad_<'; |
|
198 KeyArray[198] := 'keypad_>'; |
|
199 KeyArray[199] := 'keypad_&'; |
|
200 KeyArray[200] := 'keypad_&&'; |
|
201 KeyArray[201] := 'keypad_|'; |
|
202 KeyArray[202] := 'keypad_||'; |
|
203 KeyArray[203] := 'keypad_:'; |
|
204 KeyArray[204] := 'keypad_#'; |
|
205 KeyArray[205] := 'keypad_space'; |
|
206 KeyArray[206] := 'keypad_@'; |
|
207 KeyArray[207] := 'keypad_!'; |
|
208 KeyArray[208] := 'keypad_memstore'; |
|
209 KeyArray[209] := 'keypad_memrecal'; |
|
210 KeyArray[210] := 'keypad_memclear'; |
|
211 KeyArray[211] := 'keypad_memadd'; |
|
212 KeyArray[212] := 'keypad_memsubtr'; |
|
213 KeyArray[213] := 'keypad_memmulti'; |
|
214 KeyArray[214] := 'keypad_memdivid'; |
|
215 KeyArray[215] := 'keypad_+/-'; |
|
216 KeyArray[216] := 'keypad_clear'; |
|
217 KeyArray[217] := 'keypad_clearent'; |
|
218 KeyArray[218] := 'keypad_binary'; |
|
219 KeyArray[219] := 'keypad_octal'; |
|
220 KeyArray[220] := 'keypad_decimal'; |
|
221 KeyArray[221] := 'keypad_hexadeci'; |
|
222 KeyArray[224] := 'left_ctrl'; |
|
223 KeyArray[225] := 'left_shift'; |
|
224 KeyArray[226] := 'left_alt'; |
|
225 KeyArray[227] := 'left_gui'; |
|
226 KeyArray[228] := 'right_ctrl'; |
|
227 KeyArray[229] := 'right_shift'; |
|
228 KeyArray[230] := 'right_alt'; |
|
229 KeyArray[231] := 'right_gui'; |
|
230 KeyArray[257] := 'modeswitch'; |
|
231 KeyArray[258] := 'audionext'; |
|
232 KeyArray[259] := 'audioprev'; |
|
233 KeyArray[260] := 'audiostop'; |
|
234 KeyArray[261] := 'audioplay'; |
|
235 KeyArray[262] := 'audiomute'; |
|
236 KeyArray[263] := 'mediaselect'; |
|
237 KeyArray[264] := 'www'; |
|
238 KeyArray[265] := 'mail'; |
|
239 KeyArray[266] := 'calculator'; |
|
240 KeyArray[267] := 'computer'; |
|
241 KeyArray[268] := 'ac_search'; |
|
242 KeyArray[269] := 'ac_home'; |
|
243 KeyArray[270] := 'ac_back'; |
|
244 KeyArray[271] := 'ac_forward'; |
|
245 KeyArray[272] := 'ac_stop'; |
|
246 KeyArray[273] := 'ac_refresh'; |
|
247 KeyArray[274] := 'ac_bookmarks'; |
|
248 KeyArray[275] := 'brightnessdown'; |
|
249 KeyArray[276] := 'brightnessup'; |
|
250 KeyArray[277] := 'displayswitch'; |
|
251 KeyArray[278] := 'kbdillumtoggle'; |
|
252 KeyArray[279] := 'kbdillumdown'; |
|
253 KeyArray[280] := 'kbdillumup'; |
|
254 KeyArray[281] := 'eject'; |
|
255 KeyArray[282] := 'sleep'; |
|
256 KeyArray[283] := 'app1'; |
|
257 KeyArray[284] := 'app2'; |
|
258 KeyArray[285] := 'audiorewind'; |
|
259 KeyArray[286] := 'audiofastforwar'; |
|
260 |
42 |
261 // generateKeyNames(); // DEBUG (see below) |
43 (* Key identifiers are read from an RFC 4180-compliant CSV file. |
|
44 - 1st column: SDL scancode |
|
45 - 2nd column: Hedgewars key ID *) |
|
46 if pfsExists(cPathz[ptMisc]+'/keys.csv') then |
|
47 begin |
|
48 f:= pfsOpenRead(cPathz[ptMisc]+'/keys.csv'); |
|
49 l:= ''; |
|
50 pfsReadLn(f, l); |
|
51 while (not pfsEOF(f)) and (l <> '') do |
|
52 begin |
|
53 tmp:= ''; |
|
54 i:= 1; |
|
55 while (i <= length(l)) and (l[i] <> ',') do |
|
56 begin |
|
57 tmp:= tmp + l[i]; |
|
58 inc(i) |
|
59 end; |
|
60 scancode:= StrToInt(tmp); |
|
61 |
|
62 if i < length(l) then |
|
63 begin |
|
64 keyname:= copy(l, i + 1, length(l) - i); |
|
65 if (keyname[1] = '"') and (keyname[length(keyname)] = '"') then |
|
66 keyname:= copy(keyname, 2, length(keyname) - 2) |
|
67 else |
|
68 keyname:= copy(keyname, 1, length(keyname) - 1); |
|
69 end; |
|
70 |
|
71 pfsReadLn(f, l); |
|
72 KeyArray[scancode]:= keyname; |
|
73 end; |
|
74 |
|
75 pfsClose(f) |
|
76 end |
|
77 else |
|
78 begin |
|
79 WriteLnToConsole('misc/keys.csv file not found'); |
|
80 AddFileLog('misc/keys.csv file not found'); |
|
81 halt(haltStartupError); |
|
82 end; |
|
83 |
|
84 // generateKeyNames(); // DEBUG (see below) |
262 end; |
85 end; |
263 |
86 |
264 (* |
87 (* |
265 The Hedgewars key identifiers were obtained with the following algorithm: |
88 The Hedgewars key identifiers were obtained with the following algorithm: |
266 |
89 |