The new `-k` argument takes some comma-separated assignments, such as `-k ctrl=option,alt=command`. In this configuration, the SDL control keys are mapped to the mac option key, and the SDL alt keys are mapped to the Mac command key. The SDL "gui" keys remain associated with the Mac command key, and so the (non-existent on mac plus) Mac control key cannot be pressed with this particular configuration. When `-k` is not specified, the behavior is intended to be unchanged.
134 lines
5.6 KiB
C
134 lines
5.6 KiB
C
/* Keyboard scancode mapping from SDL to Mac codes
|
|
*
|
|
* From Mini vMac's OSGLUSDL.c, which is Copyright (C) 2012 Paul
|
|
* C. Pratt, Manuel Alfayate, and released under GPLv2.
|
|
*/
|
|
|
|
#ifndef KEYMAP_SDL_H
|
|
#define KEYMAP_SDL_H
|
|
|
|
#include "keymap.h"
|
|
|
|
enum { UNIX_CTRL, UNIX_ALT, UNIX_GUI };
|
|
static int sdl_mods[3] = { MKC_Control, MKC_Option, MKC_Command };
|
|
|
|
static inline int SDLScan2MacKeyCode(SDL_Scancode i)
|
|
{
|
|
int v = MKC_None;
|
|
|
|
switch (i) {
|
|
case SDL_SCANCODE_BACKSPACE: v = MKC_BackSpace; break;
|
|
case SDL_SCANCODE_TAB: v = MKC_Tab; break;
|
|
case SDL_SCANCODE_CLEAR: v = MKC_Clear; break;
|
|
case SDL_SCANCODE_RETURN: v = MKC_Return; break;
|
|
case SDL_SCANCODE_PAUSE: v = MKC_Pause; break;
|
|
case SDL_SCANCODE_ESCAPE: v = MKC_Escape; break;
|
|
case SDL_SCANCODE_SPACE: v = MKC_Space; break;
|
|
case SDL_SCANCODE_APOSTROPHE: v = MKC_SingleQuote; break;
|
|
case SDL_SCANCODE_COMMA: v = MKC_Comma; break;
|
|
case SDL_SCANCODE_MINUS: v = MKC_Minus; break;
|
|
case SDL_SCANCODE_PERIOD: v = MKC_Period; break;
|
|
case SDL_SCANCODE_SLASH: v = MKC_Slash; break;
|
|
case SDL_SCANCODE_0: v = MKC_0; break;
|
|
case SDL_SCANCODE_1: v = MKC_1; break;
|
|
case SDL_SCANCODE_2: v = MKC_2; break;
|
|
case SDL_SCANCODE_3: v = MKC_3; break;
|
|
case SDL_SCANCODE_4: v = MKC_4; break;
|
|
case SDL_SCANCODE_5: v = MKC_5; break;
|
|
case SDL_SCANCODE_6: v = MKC_6; break;
|
|
case SDL_SCANCODE_7: v = MKC_7; break;
|
|
case SDL_SCANCODE_8: v = MKC_8; break;
|
|
case SDL_SCANCODE_9: v = MKC_9; break;
|
|
case SDL_SCANCODE_SEMICOLON: v = MKC_SemiColon; break;
|
|
case SDL_SCANCODE_EQUALS: v = MKC_Equal; break;
|
|
|
|
case SDL_SCANCODE_LEFTBRACKET: v = MKC_LeftBracket; break;
|
|
case SDL_SCANCODE_BACKSLASH: v = MKC_BackSlash; break;
|
|
case SDL_SCANCODE_RIGHTBRACKET: v = MKC_RightBracket; break;
|
|
case SDL_SCANCODE_GRAVE: v = MKC_Grave; break;
|
|
|
|
case SDL_SCANCODE_A: v = MKC_A; break;
|
|
case SDL_SCANCODE_B: v = MKC_B; break;
|
|
case SDL_SCANCODE_C: v = MKC_C; break;
|
|
case SDL_SCANCODE_D: v = MKC_D; break;
|
|
case SDL_SCANCODE_E: v = MKC_E; break;
|
|
case SDL_SCANCODE_F: v = MKC_F; break;
|
|
case SDL_SCANCODE_G: v = MKC_G; break;
|
|
case SDL_SCANCODE_H: v = MKC_H; break;
|
|
case SDL_SCANCODE_I: v = MKC_I; break;
|
|
case SDL_SCANCODE_J: v = MKC_J; break;
|
|
case SDL_SCANCODE_K: v = MKC_K; break;
|
|
case SDL_SCANCODE_L: v = MKC_L; break;
|
|
case SDL_SCANCODE_M: v = MKC_M; break;
|
|
case SDL_SCANCODE_N: v = MKC_N; break;
|
|
case SDL_SCANCODE_O: v = MKC_O; break;
|
|
case SDL_SCANCODE_P: v = MKC_P; break;
|
|
case SDL_SCANCODE_Q: v = MKC_Q; break;
|
|
case SDL_SCANCODE_R: v = MKC_R; break;
|
|
case SDL_SCANCODE_S: v = MKC_S; break;
|
|
case SDL_SCANCODE_T: v = MKC_T; break;
|
|
case SDL_SCANCODE_U: v = MKC_U; break;
|
|
case SDL_SCANCODE_V: v = MKC_V; break;
|
|
case SDL_SCANCODE_W: v = MKC_W; break;
|
|
case SDL_SCANCODE_X: v = MKC_X; break;
|
|
case SDL_SCANCODE_Y: v = MKC_Y; break;
|
|
case SDL_SCANCODE_Z: v = MKC_Z; break;
|
|
|
|
case SDL_SCANCODE_KP_0: v = MKC_KP0; break;
|
|
case SDL_SCANCODE_KP_1: v = MKC_KP1; break;
|
|
case SDL_SCANCODE_KP_2: v = MKC_KP2; break;
|
|
case SDL_SCANCODE_KP_3: v = MKC_KP3; break;
|
|
case SDL_SCANCODE_KP_4: v = MKC_KP4; break;
|
|
case SDL_SCANCODE_KP_5: v = MKC_KP5; break;
|
|
case SDL_SCANCODE_KP_6: v = MKC_KP6; break;
|
|
case SDL_SCANCODE_KP_7: v = MKC_KP7; break;
|
|
case SDL_SCANCODE_KP_8: v = MKC_KP8; break;
|
|
case SDL_SCANCODE_KP_9: v = MKC_KP9; break;
|
|
|
|
case SDL_SCANCODE_KP_PERIOD: v = MKC_Decimal; break;
|
|
case SDL_SCANCODE_KP_DIVIDE: v = MKC_KPDevide; break;
|
|
case SDL_SCANCODE_KP_MULTIPLY: v = MKC_KPMultiply; break;
|
|
case SDL_SCANCODE_KP_MINUS: v = MKC_KPSubtract; break;
|
|
case SDL_SCANCODE_KP_PLUS: v = MKC_KPAdd; break;
|
|
case SDL_SCANCODE_KP_ENTER: v = MKC_Enter; break;
|
|
case SDL_SCANCODE_KP_EQUALS: v = MKC_KPEqual; break;
|
|
|
|
case SDL_SCANCODE_UP: v = MKC_Up; break;
|
|
case SDL_SCANCODE_DOWN: v = MKC_Down; break;
|
|
case SDL_SCANCODE_RIGHT: v = MKC_Right; break;
|
|
case SDL_SCANCODE_LEFT: v = MKC_Left; break;
|
|
case SDL_SCANCODE_INSERT: v = MKC_Help; break;
|
|
case SDL_SCANCODE_HOME: v = MKC_Home; break;
|
|
case SDL_SCANCODE_END: v = MKC_End; break;
|
|
case SDL_SCANCODE_PAGEUP: v = MKC_PageUp; break;
|
|
case SDL_SCANCODE_PAGEDOWN: v = MKC_PageDown; break;
|
|
/* FIXME, case SDL_SCANCODE_CAPSLOCK and MKC_formac_CapsLock */
|
|
case SDL_SCANCODE_RSHIFT:
|
|
case SDL_SCANCODE_LSHIFT: v = MKC_Shift; break;
|
|
case SDL_SCANCODE_RCTRL:
|
|
case SDL_SCANCODE_LCTRL: v = sdl_mods[UNIX_CTRL]; break;
|
|
case SDL_SCANCODE_RALT:
|
|
case SDL_SCANCODE_LALT: v = sdl_mods[UNIX_ALT]; break;
|
|
case SDL_SCANCODE_RGUI:
|
|
case SDL_SCANCODE_LGUI: v = sdl_mods[UNIX_GUI]; break;
|
|
|
|
case SDL_SCANCODE_KP_A: v = MKC_A; break;
|
|
case SDL_SCANCODE_KP_B: v = MKC_B; break;
|
|
case SDL_SCANCODE_KP_C: v = MKC_C; break;
|
|
case SDL_SCANCODE_KP_D: v = MKC_D; break;
|
|
case SDL_SCANCODE_KP_E: v = MKC_E; break;
|
|
case SDL_SCANCODE_KP_F: v = MKC_F; break;
|
|
|
|
case SDL_SCANCODE_KP_BACKSPACE: v = MKC_BackSpace; break;
|
|
case SDL_SCANCODE_KP_CLEAR: v = MKC_Clear; break;
|
|
case SDL_SCANCODE_KP_COMMA: v = MKC_Comma; break;
|
|
case SDL_SCANCODE_KP_DECIMAL: v = MKC_Decimal; break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return v;
|
|
}
|
|
|
|
#endif
|