39
39
#include "SDL_xbiosevents_c.h"
40
40
#include "SDL_ataridevmouse_c.h"
42
/* To save state of keyboard */
43
#define ATARIBIOS_MAXKEYS 128
45
42
static unsigned char bios_currentkeyboard[ATARIBIOS_MAXKEYS];
46
43
static unsigned char bios_previouskeyboard[ATARIBIOS_MAXKEYS];
47
static unsigned char bios_currentascii[ATARIBIOS_MAXKEYS];
48
44
static SDL_bool use_dev_mouse = SDL_FALSE;
50
/* Special keys state */
61
/* The translation tables from a console scancode to a SDL keysym */
62
static SDLKey keymap[ATARIBIOS_MAXKEYS];
64
static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym,
66
46
static void UpdateSpecialKeys(int special_keys_state);
68
48
void AtariBios_InitOSKeymap(_THIS)
73
53
SDL_memset(bios_currentkeyboard, 0, sizeof(bios_currentkeyboard));
74
54
SDL_memset(bios_previouskeyboard, 0, sizeof(bios_previouskeyboard));
76
/* Initialize keymap */
77
for ( i=0; i<sizeof(keymap); i++ )
78
keymap[i] = SDLK_UNKNOWN;
81
for ( i = 0; i<10; i++ )
82
keymap[SCANCODE_F1 + i] = SDLK_F1+i;
85
keymap[SCANCODE_HELP] = SDLK_HELP;
86
keymap[SCANCODE_UNDO] = SDLK_UNDO;
87
keymap[SCANCODE_INSERT] = SDLK_INSERT;
88
keymap[SCANCODE_CLRHOME] = SDLK_HOME;
89
keymap[SCANCODE_UP] = SDLK_UP;
90
keymap[SCANCODE_DOWN] = SDLK_DOWN;
91
keymap[SCANCODE_RIGHT] = SDLK_RIGHT;
92
keymap[SCANCODE_LEFT] = SDLK_LEFT;
95
keymap[SCANCODE_ESCAPE] = SDLK_ESCAPE;
96
keymap[SCANCODE_BACKSPACE] = SDLK_BACKSPACE;
97
keymap[SCANCODE_TAB] = SDLK_TAB;
98
keymap[SCANCODE_ENTER] = SDLK_RETURN;
99
keymap[SCANCODE_DELETE] = SDLK_DELETE;
100
keymap[SCANCODE_LEFTCONTROL] = SDLK_LCTRL;
101
keymap[SCANCODE_LEFTSHIFT] = SDLK_LSHIFT;
102
keymap[SCANCODE_RIGHTSHIFT] = SDLK_RSHIFT;
103
keymap[SCANCODE_LEFTALT] = SDLK_LALT;
104
keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK;
106
56
use_dev_mouse = (SDL_AtariDevMouse_Open()!=0) ? SDL_TRUE : SDL_FALSE;
108
58
vectors_mask = ATARI_XBIOS_JOYSTICKEVENTS; /* XBIOS joystick events */
109
59
if (!use_dev_mouse) {
110
60
vectors_mask |= ATARI_XBIOS_MOUSEEVENTS; /* XBIOS mouse events */
112
if (Getcookie(C_MiNT, &dummy)==C_FOUND) {
62
/* if (Getcookie(C_MiNT, &dummy)==C_FOUND) {
116
66
SDL_AtariXbios_InstallVectors(vectors_mask);
127
77
while (Bconstat(_CON)) {
128
78
unsigned long key_pressed;
129
unsigned char asciicode, scancode;
131
79
key_pressed=Bconin(_CON);
133
asciicode = key_pressed;
134
scancode = key_pressed >> 16;
136
bios_currentkeyboard[scancode]=0xFF;
137
bios_currentascii[scancode]=asciicode;
80
bios_currentkeyboard[(key_pressed>>16)&(ATARIBIOS_MAXKEYS-1)]=0xFF;
140
83
/* Read special keys */
145
88
/* Key pressed ? */
146
89
if (bios_currentkeyboard[i] && !bios_previouskeyboard[i])
147
90
SDL_PrivateKeyboard(SDL_PRESSED,
148
TranslateKey(i, bios_currentascii[i], &keysym, SDL_TRUE));
91
SDL_Atari_TranslateKey(i, &keysym, SDL_TRUE));
150
93
/* Key unpressed ? */
151
94
if (bios_previouskeyboard[i] && !bios_currentkeyboard[i])
152
95
SDL_PrivateKeyboard(SDL_RELEASED,
153
TranslateKey(i, bios_currentascii[i], &keysym, SDL_FALSE));
96
SDL_Atari_TranslateKey(i, &keysym, SDL_FALSE));
156
99
if (use_dev_mouse) {
162
105
/* Will be previous table */
163
SDL_memcpy(bios_previouskeyboard, bios_currentkeyboard, ATARIBIOS_MAXKEYS);
106
SDL_memcpy(bios_previouskeyboard, bios_currentkeyboard, sizeof(bios_previouskeyboard));
166
109
static void UpdateSpecialKeys(int special_keys_state)
180
122
UPDATE_SPECIAL_KEYS(K_CAPSLOCK, SCANCODE_CAPSLOCK);
183
static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym,
186
/* Set the keysym information */
187
keysym->scancode = scancode;
190
keysym->sym = asciicode;
192
keysym->sym = keymap[scancode];
194
keysym->mod = KMOD_NONE;
196
if (SDL_TranslateUNICODE && pressed) {
197
keysym->unicode = SDL_AtariToUnicodeTable[asciicode];
203
125
void AtariBios_ShutdownEvents(void)
205
127
SDL_AtariXbios_RestoreVectors();