Mercurial > sdl-ios-xcode
diff src/video/ataricommon/SDL_ikbdevents.c @ 2030:d774e9d7c2a8
Forward keyboard reworking from 1.2
author | Patrice Mandin <patmandin@gmail.com> |
---|---|
date | Wed, 20 Sep 2006 19:47:09 +0000 |
parents | d20f4510c718 |
children | adf732f1f016 |
line wrap: on
line diff
--- a/src/video/ataricommon/SDL_ikbdevents.c Sat Sep 16 17:13:41 2006 +0000 +++ b/src/video/ataricommon/SDL_ikbdevents.c Wed Sep 20 19:47:09 2006 +0000 @@ -37,88 +37,16 @@ #include "SDL_atarievents_c.h" #include "SDL_ikbdinterrupt_s.h" -/* Special keys state */ -enum -{ - K_RSHIFT = 0, - K_LSHIFT, - K_CTRL, - K_ALT, - K_CAPSLOCK, - K_CLRHOME, - K_INSERT -}; - -#define ATARIBIOS_MAXKEYS 128 - #define KEY_PRESSED 0xff #define KEY_UNDEFINED 0x80 #define KEY_RELEASED 0x00 -/* The translation tables from a console scancode to a SDL keysym */ -#define KT_NOCHANGE -1 - -enum -{ - KT_UNSHIFT = 0, - KT_SHIFT = 1, - KT_CAPS = 2 -}; - static Uint16 atari_prevmouseb; /* save state of mouse buttons */ -static int caps_state; /* caps lock state */ -_KEYTAB *curtables; -static unsigned char *tab_unshift, *tab_shift, *tab_caps; -static SDLKey keymap[ATARIBIOS_MAXKEYS]; - -static SDL_keysym *TranslateKey(int scancode, int numkeytable, - SDL_keysym * keysym, SDL_bool pressed); void AtariIkbd_InitOSKeymap(_THIS) { - int i; - - SDL_memset(SDL_AtariIkbd_keyboard, KEY_UNDEFINED, ATARIBIOS_MAXKEYS); - - /* Initialize keymap */ - for (i = 0; i < ATARIBIOS_MAXKEYS; i++) - keymap[i] = SDLK_UNKNOWN; - - /* Functions keys */ - for (i = 0; i < 10; i++) - keymap[SCANCODE_F1 + i] = SDLK_F1 + i; - - /* Cursor keypad */ - keymap[SCANCODE_HELP] = SDLK_HELP; - keymap[SCANCODE_UNDO] = SDLK_UNDO; - keymap[SCANCODE_INSERT] = SDLK_INSERT; - keymap[SCANCODE_CLRHOME] = SDLK_HOME; - keymap[SCANCODE_UP] = SDLK_UP; - keymap[SCANCODE_DOWN] = SDLK_DOWN; - keymap[SCANCODE_RIGHT] = SDLK_RIGHT; - keymap[SCANCODE_LEFT] = SDLK_LEFT; - - /* Special keys */ - keymap[SCANCODE_ESCAPE] = SDLK_ESCAPE; - keymap[SCANCODE_BACKSPACE] = SDLK_BACKSPACE; - keymap[SCANCODE_TAB] = SDLK_TAB; - keymap[SCANCODE_ENTER] = SDLK_RETURN; - keymap[SCANCODE_DELETE] = SDLK_DELETE; - keymap[SCANCODE_LEFTCONTROL] = SDLK_LCTRL; - keymap[SCANCODE_LEFTSHIFT] = SDLK_LSHIFT; - keymap[SCANCODE_RIGHTSHIFT] = SDLK_RSHIFT; - keymap[SCANCODE_LEFTALT] = SDLK_LALT; - keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK; - - /* Read XBIOS tables for scancode -> ascii translation */ - curtables = Keytbl(KT_NOCHANGE, KT_NOCHANGE, KT_NOCHANGE); - tab_unshift = curtables->unshift; - tab_shift = curtables->shift; - tab_caps = curtables->caps; - - /* Set Caps lock initial state */ - caps_state = (Kbshift(-1) & (1 << K_CAPSLOCK)); + SDL_memset(SDL_AtariIkbd_keyboard, KEY_UNDEFINED, sizeof(SDL_AtariIkbd_keyboard)); /* Now install our handler */ SDL_AtariIkbd_mouseb = SDL_AtariIkbd_mousex = SDL_AtariIkbd_mousey = 0; @@ -150,36 +78,19 @@ /*--- Send keyboard events ---*/ - /* Update caps lock state */ - if (SDL_AtariIkbd_keyboard[SCANCODE_CAPSLOCK] == KEY_PRESSED) { - caps_state ^= 1; - } - - /* Choose the translation table */ - specialkeys = KT_UNSHIFT; - if ((SDL_AtariIkbd_keyboard[SCANCODE_LEFTSHIFT] == KEY_PRESSED) - || (SDL_AtariIkbd_keyboard[SCANCODE_RIGHTSHIFT] == KEY_PRESSED)) { - specialkeys = KT_SHIFT; - } - if (caps_state) { - specialkeys = KT_CAPS; - } - /* Now generate events */ for (i = 0; i < ATARIBIOS_MAXKEYS; i++) { /* Key pressed ? */ if (SDL_AtariIkbd_keyboard[i] == KEY_PRESSED) { SDL_PrivateKeyboard(SDL_PRESSED, - TranslateKey(i, specialkeys, &keysym, - SDL_TRUE)); + SDL_Atari_TranslateKey(i, &keysym, SDL_TRUE)); SDL_AtariIkbd_keyboard[i] = KEY_UNDEFINED; } /* Key released ? */ if (SDL_AtariIkbd_keyboard[i] == KEY_RELEASED) { SDL_PrivateKeyboard(SDL_RELEASED, - TranslateKey(i, specialkeys, &keysym, - SDL_FALSE)); + SDL_Atari_TranslateKey(i, &keysym, SDL_FALSE)); SDL_AtariIkbd_keyboard[i] = KEY_UNDEFINED; } } @@ -213,42 +124,6 @@ } } -static SDL_keysym * -TranslateKey(int scancode, int numkeytable, SDL_keysym * keysym, - SDL_bool pressed) -{ - unsigned char asciicode; - - /* Set the keysym information */ - keysym->scancode = scancode; - - asciicode = 0; - switch (numkeytable) { - case KT_UNSHIFT: - asciicode = tab_unshift[scancode]; - break; - case KT_SHIFT: - asciicode = tab_shift[scancode]; - break; - case KT_CAPS: - asciicode = tab_caps[scancode]; - break; - } - - if (asciicode) - keysym->sym = asciicode; - else - keysym->sym = keymap[scancode]; - - keysym->mod = KMOD_NONE; - keysym->unicode = 0; - if (SDL_TranslateUNICODE && pressed) { - keysym->unicode = SDL_AtariToUnicodeTable[asciicode]; - } - - return (keysym); -} - void AtariIkbd_ShutdownEvents(void) {