|
|
1.1 root 1: /*
2: * UAE - The Un*x Amiga Emulator
3: *
4: * Support for platform-independent key-mapping
5: *
6: * Copyright 2004 Richard Drummond
7: */
8:
9: #include "sysconfig.h"
10: #include "sysdeps.h"
11:
12: #include "options.h"
13: #include "inputdevice.h"
14: #include "keymap/keymap.h"
15:
16: /*
17: * Default mapping of UAE keycodes to UAE input events
18: *
19: * This list is ordered by UAEKEY_#? code. Input events correspond
20: * to Amiga keycodes or UAE commands.
21: */
22: static const int default_keymap[] = {
23: INPUTEVENT_ZERO,
24: /* UAEKEY_ESCAPE */ INPUTEVENT_KEY_ESC,
25:
26: /* UAEKEY_F1 */ INPUTEVENT_KEY_F1,
27: /* UAEKEY_F2 */ INPUTEVENT_KEY_F2,
28: /* UAEKEY_F3 */ INPUTEVENT_KEY_F3,
29: /* UAEKEY_F4 */ INPUTEVENT_KEY_F4,
30: /* UAEKEY_F5 */ INPUTEVENT_KEY_F5,
31: /* UAEKEY_F6 */ INPUTEVENT_KEY_F6,
32: /* UAEKEY_F7 */ INPUTEVENT_KEY_F7,
33: /* UAEKEY_F8 */ INPUTEVENT_KEY_F8,
34: /* UAEKEY_F9 */ INPUTEVENT_KEY_F9,
35: /* UAEKEY_F10 */ INPUTEVENT_KEY_F10,
36: /* UAEKEY_F11 */ INPUTEVENT_ZERO,
37: /* UAEKEY_F12 */ INPUTEVENT_ZERO,
38:
39: /* UAEKEY_PRINTSCR */ INPUTEVENT_SPC_SCREENSHOT,
40: /* UAEKEY_SCROLL_LOCK */ INPUTEVENT_SPC_INHIBITSCREEN,
41: /* UAEKEY_PAUSE */ INPUTEVENT_SPC_PAUSE,
42:
43: /* UAEKEY_1 */ INPUTEVENT_KEY_1,
44: /* UAEKEY_2 */ INPUTEVENT_KEY_2,
45: /* UAEKEY_3 */ INPUTEVENT_KEY_3,
46: /* UAEKEY_4 */ INPUTEVENT_KEY_4,
47: /* UAEKEY_5 */ INPUTEVENT_KEY_5,
48: /* UAEKEY_6 */ INPUTEVENT_KEY_6,
49: /* UAEKEY_7 */ INPUTEVENT_KEY_7,
50: /* UAEKEY_8 */ INPUTEVENT_KEY_8,
51: /* UAEKEY_9 */ INPUTEVENT_KEY_9,
52: /* UAEKEY_0 */ INPUTEVENT_KEY_0,
53:
54: /* UAEKEY_MINUS */ INPUTEVENT_KEY_SUB,
55: /* UAEKEY_EQUALS */ INPUTEVENT_KEY_EQUALS,
56:
57: /* UAEKEY_BACKSPACE */ INPUTEVENT_KEY_BACKSPACE,
58: /* UAEKEY_ENTER */ INPUTEVENT_KEY_RETURN,
59: /* UAEKEY_SPACE */ INPUTEVENT_KEY_SPACE,
60:
61: /* UAEKEY_TAB */ INPUTEVENT_KEY_TAB,
62:
63: /* UAEKEY_A */ INPUTEVENT_KEY_A,
64: /* UAEKEY_B */ INPUTEVENT_KEY_B,
65: /* UAEKEY_C */ INPUTEVENT_KEY_C,
66: /* UAEKEY_D */ INPUTEVENT_KEY_D,
67: /* UAEKEY_E */ INPUTEVENT_KEY_E,
68: /* UAEKEY_F */ INPUTEVENT_KEY_F,
69: /* UAEKEY_G */ INPUTEVENT_KEY_G,
70: /* UAEKEY_H */ INPUTEVENT_KEY_H,
71: /* UAEKEY_I */ INPUTEVENT_KEY_I,
72: /* UAEKEY_J */ INPUTEVENT_KEY_J,
73: /* UAEKEY_K */ INPUTEVENT_KEY_K,
74: /* UAEKEY_L */ INPUTEVENT_KEY_L,
75: /* UAEKEY_M */ INPUTEVENT_KEY_M,
76: /* UAEKEY_N */ INPUTEVENT_KEY_N,
77: /* UAEKEY_O */ INPUTEVENT_KEY_O,
78: /* UAEKEY_P */ INPUTEVENT_KEY_P,
79: /* UAEKEY_Q */ INPUTEVENT_KEY_Q,
80: /* UAEKEY_R */ INPUTEVENT_KEY_R,
81: /* UAEKEY_S */ INPUTEVENT_KEY_S,
82: /* UAEKEY_T */ INPUTEVENT_KEY_T,
83: /* UAEKEY_U */ INPUTEVENT_KEY_U,
84: /* UAEKEY_V */ INPUTEVENT_KEY_V,
85: /* UAEKEY_W */ INPUTEVENT_KEY_W,
86: /* UAEKEY_X */ INPUTEVENT_KEY_X,
87: /* UAEKEY_Y */ INPUTEVENT_KEY_Y,
88: /* UAEKEY_Z */ INPUTEVENT_KEY_Z,
89:
90: /* UAEKEY_LEFTBRACKET */ INPUTEVENT_KEY_LEFTBRACKET,
91: /* UAEKEY_RIGHTBRACKET */ INPUTEVENT_KEY_RIGHTBRACKET,
92: /* UAEKEY_SEMICOLON */ INPUTEVENT_KEY_SEMICOLON,
93: /* UAEKEY_SINGLEQUOTE */ INPUTEVENT_KEY_SINGLEQUOTE,
94: /* UAEKEY_GRAVE */ INPUTEVENT_KEY_BACKQUOTE,
95: /* UAEKEY_BACKSLASH */ INPUTEVENT_KEY_BACKSLASH,
96: /* UAEKEY_COMMA */ INPUTEVENT_KEY_COMMA,
97: /* UAEKEY_PERIOD */ INPUTEVENT_KEY_PERIOD,
98: /* UAEKEY_SLASH */ INPUTEVENT_KEY_DIV,
99: /* UAEKEY_LTGT */ INPUTEVENT_KEY_30,
100:
101: /* UAEKEY_NUMLOCK */ INPUTEVENT_ZERO,
102: /* UAEKEY_NUMPAD_1 */ INPUTEVENT_KEY_NP_1,
103: /* UAEKEY_NUMPAD_2 */ INPUTEVENT_KEY_NP_2,
104: /* UAEKEY_NUMPAD_3 */ INPUTEVENT_KEY_NP_3,
105: /* UAEKEY_NUMPAD_4 */ INPUTEVENT_KEY_NP_4,
106: /* UAEKEY_NUMPAD_5 */ INPUTEVENT_KEY_NP_5,
107: /* UAEKEY_NUMPAD_6 */ INPUTEVENT_KEY_NP_6,
108: /* UAEKEY_NUMPAD_7 */ INPUTEVENT_KEY_NP_7,
109: /* UAEKEY_NUMPAD_8 */ INPUTEVENT_KEY_NP_8,
110: /* UAEKEY_NUMPAD_9 */ INPUTEVENT_KEY_NP_9,
111: /* UAEKEY_NUMPAD_0 */ INPUTEVENT_KEY_NP_0,
112: /* UAEKEY_NUMPAD_PERIOD */ INPUTEVENT_KEY_NP_PERIOD,
113: /* UAEKEY_NUMPAD_PLUS */ INPUTEVENT_KEY_NP_ADD,
114: /* UAEKEY_NUMPAD_MINUS */ INPUTEVENT_KEY_NP_SUB,
115: /* UAEKEY_NUMPAD_MULTIPLY */INPUTEVENT_KEY_NP_MUL,
116: /* UAEKEY_NUMPAD_DIVIDE */ INPUTEVENT_KEY_NP_DIV,
117: /* UAEKEY_NUMPAD_ENTER */ INPUTEVENT_KEY_ENTER,
118: /* UAEKEY_NUMPAD_EQUALS */ INPUTEVENT_ZERO,
119: /* UAEKEY_NUMPAD_LPAREN */ INPUTEVENT_KEY_NP_LPAREN,
120: /* UAEKEY_NUMPAD_RPAREN */ INPUTEVENT_KEY_NP_RPAREN,
121:
122: /* UAEKEY_INSERT */ INPUTEVENT_KEY_HELP,
123: /* UAEKEY_DELETE */ INPUTEVENT_KEY_DEL,
124: /* UAEKEY_HOME */ INPUTEVENT_ZERO,
125: /* UAEKEY_END */ INPUTEVENT_ZERO,
126: /* UAEKEY_PAGEUP */ INPUTEVENT_KEY_AMIGA_RIGHT,
127: /* UAEKEY_PAGEDOWN */ INPUTEVENT_KEY_AMIGA_LEFT,
128:
129: /* UAEKEY_CURSOR_UP */ INPUTEVENT_KEY_CURSOR_UP,
130: /* UAEKEY_CURSOR_DOWN */ INPUTEVENT_KEY_CURSOR_DOWN,
131: /* UAEKEY_CURSOR_LEFT */ INPUTEVENT_KEY_CURSOR_LEFT,
132: /* UAEKEY_CURSOR_RIGHT */ INPUTEVENT_KEY_CURSOR_RIGHT,
133:
134: /* UAEKEY_LEFT_CTRL */ INPUTEVENT_KEY_CTRL,
135: /* UAEKEY_LEFT_SHIFT */ INPUTEVENT_KEY_SHIFT_LEFT,
136: /* UAEKEY_LEFT_ALT */ INPUTEVENT_KEY_ALT_LEFT,
137: /* UAEKEY_LEFT_SUPER */ INPUTEVENT_KEY_AMIGA_LEFT,
138: /* UAEKEY_RIGHT_SUPER */ INPUTEVENT_KEY_AMIGA_RIGHT,
139: /* UAEKEY_RIGHT_ALT */ INPUTEVENT_KEY_ALT_RIGHT,
140: /* UAEKEY_MENU */ INPUTEVENT_KEY_AMIGA_RIGHT,
141: /* UAEKEY_RIGHT_SHIFT */ INPUTEVENT_KEY_SHIFT_RIGHT,
142: /* UAEKEY_RIGHT_CTRL */ INPUTEVENT_KEY_CTRL_RIGHT,
143: /* UAEKEY_CAPSLOCK */ INPUTEVENT_KEY_CAPS_LOCK,
144:
145: /* UAEKEY_HELP */ INPUTEVENT_KEY_HELP,
146:
147: /* UAEKEY_POWER */ INPUTEVENT_ZERO,
148: /* UAEKEY_SLEEP */ INPUTEVENT_ZERO,
149: /* UAEKEY_WAKE */ INPUTEVENT_ZERO
150: };
151:
152:
153: /*
154: * Build a default key translation table using the
155: * specified host keymap.
156: */
157: struct uae_input_device_kbr_default *uaekey_make_default_kbr (const struct uaekey_hostmap *hostkeys)
158: {
159: int i;
160: int count;
161: struct uae_input_device_kbr_default *trans;
162:
163: for (i = 0; i < 256 && hostkeys[i].hostkey != -1; i++);
164:
165: if (i == 256)
166: abort ();
167:
168: count = i;
169:
170: trans = (struct uae_input_device_kbr_default*)
171: malloc (sizeof (struct uae_input_device_kbr_default) * (count + 1));
172:
173: if (trans) {
174: for (i = 0; i < count; i++) {
175: trans[i].scancode = hostkeys[i].hostkey;
176: trans[i].event = default_keymap[hostkeys[i].uaekey];
177: }
178: trans[i].scancode = -1;
179: }
180:
181: return trans;
182: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.