|
|
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.