31 static KeyName key_action_table[] = {
184 static KeyName key_key_table[] = {
185 { 0, VK_ESCAPE,
"VK_ESCAPE",
"Escape" },
186 { 0, VK_UP,
"VK_UP",
"Up" },
187 { 0, VK_DOWN,
"VK_DOWN",
"Down" },
188 { 0, VK_LEFT,
"VK_LEFT",
"Left" },
189 { 0, VK_RIGHT,
"VK_RIGHT",
"Right" },
190 { 0, VK_NEXT,
"VK_NEXT",
"Pg Down" },
191 { 0, VK_PRIOR,
"VK_PRIOR",
"Pg Up" },
192 { 0, VK_ADD,
"VK_ADD",
"+" },
193 { 0, VK_SUBTRACT,
"VK_SUBTRACT",
"-" },
194 { 0, VK_MULTIPLY,
"VK_MULTIPLY",
"*" },
195 { 0, VK_DIVIDE,
"VK_DIVIDE",
"/" },
196 { 0, VK_SPACE,
"VK_SPACE",
"Space" },
197 { 0, VK_TAB,
"VK_TAB",
"Tab" },
198 { 0, VK_RETURN,
"VK_RETURN",
"Enter" },
199 { 0, VK_HOME,
"VK_HOME",
"Home" },
200 { 0, VK_END,
"VK_END",
"End" },
201 { 0, VK_SHIFT,
"VK_SHIFT",
"Shift" },
202 { 0, VK_CONTROL,
"VK_CONTROL",
"Ctrl" },
203 { 0, VK_MENU,
"VK_MENU",
"Alt" },
205 { 0, VK_DECIMAL,
"VK_DECIMAL",
"." },
206 { 0, VK_SEPARATOR,
"VK_SEPARATOR",
"Separator" },
207 { 0, VK_PAUSE,
"VK_PAUSE",
"Pause" },
208 { 0, VK_BACK,
"VK_BACK",
"Backspace" },
209 { 0, VK_INSERT,
"VK_INSERT",
"Insert" },
210 { 0, VK_DELETE,
"VK_DELETE",
"Delete" },
211 { 0, 20,
"CAP",
"CapsLock" },
212 { 0, 144,
"NUM",
"NumLock" },
213 { 0, 145,
"SCROLL",
"Scroll" },
214 { 0, 44,
"PRINT",
"PrintScr" },
216 { 0, VK_NUMPAD0,
"VK_NUMPAD0",
"Num 0" },
217 { 0, VK_NUMPAD1,
"VK_NUMPAD1",
"Num 1" },
218 { 0, VK_NUMPAD2,
"VK_NUMPAD2",
"Num 2" },
219 { 0, VK_NUMPAD3,
"VK_NUMPAD3",
"Num 3" },
220 { 0, VK_NUMPAD4,
"VK_NUMPAD4",
"Num 4" },
221 { 0, VK_NUMPAD5,
"VK_NUMPAD5",
"Num 5" },
222 { 0, VK_NUMPAD6,
"VK_NUMPAD6",
"Num 6" },
223 { 0, VK_NUMPAD7,
"VK_NUMPAD7",
"Num 7" },
224 { 0, VK_NUMPAD8,
"VK_NUMPAD8",
"Num 8" },
225 { 0, VK_NUMPAD9,
"VK_NUMPAD9",
"Num 9" },
227 { 0, VK_F1,
"VK_F1",
"F1" },
228 { 0, VK_F2,
"VK_F2",
"F2" },
229 { 0, VK_F3,
"VK_F3",
"F3" },
230 { 0, VK_F4,
"VK_F4",
"F4" },
231 { 0, VK_F5,
"VK_F5",
"F5" },
232 { 0, VK_F6,
"VK_F6",
"F6" },
233 { 0, VK_F7,
"VK_F7",
"F7" },
234 { 0, VK_F8,
"VK_F8",
"F8" },
235 { 0, VK_F9,
"VK_F9",
"F9" },
236 { 0, VK_F10,
"VK_F10",
"F10" },
237 { 0, VK_F11,
"VK_F11",
"F11" },
238 { 0, VK_F12,
"VK_F12",
"F12" },
274 { 0, 186,
";",
";" },
275 { 0, 188,
",",
"<" },
276 { 0, 190,
".",
">" },
277 { 0, 191,
"/",
"/" },
278 { 0, 192,
"~",
"~" },
279 { 0, 219,
"[",
"[" },
280 { 0, 220,
"\\",
"\\" },
281 { 0, 221,
"]",
"]" },
282 { 0, 222,
"'",
"'" },
284 { 0,
'0',
"0",
"0" },
285 { 0,
'1',
"1",
"1" },
286 { 0,
'2',
"2",
"2" },
287 { 0,
'3',
"3",
"3" },
288 { 0,
'4',
"4",
"4" },
289 { 0,
'5',
"5",
"5" },
290 { 0,
'6',
"6",
"6" },
291 { 0,
'7',
"7",
"7" },
292 { 0,
'8',
"8",
"8" },
293 { 0,
'9',
"9",
"9" },
295 { 0,
'A',
"A",
"A" },
296 { 0,
'B',
"B",
"B" },
297 { 0,
'C',
"C",
"C" },
298 { 0,
'D',
"D",
"D" },
299 { 0,
'E',
"E",
"E" },
300 { 0,
'F',
"F",
"F" },
301 { 0,
'G',
"G",
"G" },
302 { 0,
'H',
"H",
"H" },
303 { 0,
'I',
"I",
"I" },
304 { 0,
'J',
"J",
"J" },
305 { 0,
'K',
"K",
"K" },
306 { 0,
'L',
"L",
"L" },
307 { 0,
'M',
"M",
"M" },
308 { 0,
'N',
"N",
"N" },
309 { 0,
'O',
"O",
"O" },
310 { 0,
'P',
"P",
"P" },
311 { 0,
'Q',
"Q",
"Q" },
312 { 0,
'R',
"R",
"R" },
313 { 0,
'S',
"S",
"S" },
314 { 0,
'T',
"T",
"T" },
315 { 0,
'U',
"U",
"U" },
316 { 0,
'V',
"V",
"V" },
317 { 0,
'W',
"W",
"W" },
318 { 0,
'X',
"X",
"X" },
319 { 0,
'Y',
"Y",
"Y" },
320 { 0,
'Z',
"Z",
"Z" },
328 if (!act_str)
return -1;
330 int nactions =
sizeof(key_action_table) /
sizeof(
KeyName);
332 for (
int i = 0; i < nactions; i++)
333 if (!_stricmp(act_str, key_action_table[i].name))
334 return key_action_table[i].key;
343 int nactions =
sizeof(key_action_table) /
sizeof(
KeyName);
345 for (
int i = 0; i < nactions; i++)
346 if (key_action_table[i].key == act)
356 if (!key_str)
return 0;
358 if (*key_str ==
'=') {
360 sscanf_s(key_str,
"=%d", &value);
366 for (
int i = 0; i <
nkeys; i++)
367 if (!_stricmp(key_str, key_key_table[i].name))
368 return key_key_table[i].key;
379 for (
int i = 0; i <
nkeys; i++)
380 if (key_key_table[i].key == key)
549 for (
int i = 0; i < max_keys; i++)
561 for (
int i = 0; i <
nkeys; i++) {
562 if (
map[i].act == a) {
579 fopen_s(&f, filename,
"r");
581 if (!f)
return nkeys;
585 while (fgets(line,
sizeof(line), f)) {
586 int act = -1, key = -1, alt = 0, joy = -1;
587 char act_str[128], key_str[128], alt_str[128], joy_str[128];
589 ZeroMemory(act_str,
sizeof(act_str));
590 ZeroMemory(key_str,
sizeof(key_str));
591 ZeroMemory(alt_str,
sizeof(alt_str));
592 ZeroMemory(joy_str,
sizeof(joy_str));
594 sscanf(line,
"%s %s %s %s", act_str, key_str, alt_str, joy_str);
601 if (act != -1 && key != -1) {
607 for (
int i = 0; i < max_keys && !mapped; i++) {
608 if (
map[i].act == act) {
609 Print(
" Remapping: '%s' => %s(%d) %s(%d) %s(%d)\n",
610 act_str, key_str, key, alt_str, alt, joy_str, joy);
618 Print(
" Mapping: '%s' => %s(%d) %s(%d) %s(%d)\n",
619 act_str, key_str, key, alt_str, alt, joy_str, joy);
624 if (
nkeys >= max_keys-1) {
625 Print(
" Too many keys in configuration...\n");
640 fopen_s(&f, filename,
"w");
643 for (
int i = 0; i <
nkeys; i++) {
649 fprintf(f,
"%-24s =%d\n", key_action_table[a].name,
map[i].key);
661 fprintf(f,
"%-24s %-16s %-16s %-16s\n",
662 key_action_table[a].name,
663 key_key_table[ k].name,
664 key_key_table[ s].name,
665 key_key_table[ j].name);
668 fprintf(f,
"%-24s %-16s %-16s %-16s\n",
669 key_action_table[a].name,
670 key_key_table[ k].name,
672 key_key_table[ j].name);
675 fprintf(f,
"%-24s %-16s %-16s %-16s\n",
676 key_action_table[a].name,
679 key_key_table[ j].name);
683 fprintf(f,
"%-24s %-16s %-16s\n",
684 key_action_table[a].name,
685 key_key_table[ k].name,
686 key_key_table[ s].name);
689 fprintf(f,
"%-24s %-16s\n",
690 key_action_table[a].name,
691 key_key_table[ k].name);
706 int nactions =
sizeof(key_action_table) /
sizeof(
KeyName);
708 for (
int i = 0; i < nactions; i++) {
709 if (
map[n].act == key_action_table[i].key) {
710 return key_action_table[i].
category;
722 for (
int n = 0; n <
nkeys; n++)
723 if (
map[n].act == act)
733 int nactions =
sizeof(key_action_table) /
sizeof(
KeyName);
735 for (
int i = 0; i < nactions; i++) {
736 if (
map[n].act == key_action_table[i].key) {
737 if (key_action_table[i].desc)
738 return key_action_table[i].
desc;
740 return key_action_table[i].
name;
749 static char key_desc[32];
754 if (n >= 0 && n < 256)
769 for (
int i = 0; i <
nkeys; i++) {
770 if (vk > 0 && vk == key_key_table[i].key) {
771 if (key_key_table[i].desc)
772 key = key_key_table[i].
desc;
774 key = key_key_table[i].
name;
777 if (shift > 0 && shift == key_key_table[i].key) {
778 if (key_key_table[i].desc)
779 alt = key_key_table[i].
desc;
781 alt = key_key_table[i].
name;
784 if (j > 0 && j == key_key_table[i].key) {
785 if (key_key_table[i].desc)
786 joy = key_key_table[i].
desc;
788 joy = key_key_table[i].
name;
794 sprintf_s(key_desc,
"%s+%s", alt, key);
797 strcpy_s(key_desc, key);
801 strcat_s(key_desc,
", ");
802 strcat_s(key_desc, joy);
807 strcpy_s(key_desc, joy);
811 sprintf_s(key_desc,
"%d", vk);
822 if (n >= 0 && n < nkeys) {
823 return key_key_table[n].
key;