~ubuntu-branches/ubuntu/karmic/libsdl1.2/karmic

« back to all changes in this revision

Viewing changes to src/video/ataricommon/SDL_biosevents.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2007-12-05 20:29:43 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20071205202943-ryogi07hodn5cdif
Tags: 1.2.12-1ubuntu1
* Merge with Debian; remaining changes:
  - Remove svgalib support.
  - Prefer libgl1-mesa-dev build-dependency over xlibmesa-gl-dev.
  - Build for lpia as for i386.
* Link using -Wl,-Bsymbolic-functions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
#include "SDL_xbiosevents_c.h"
40
40
#include "SDL_ataridevmouse_c.h"
41
41
 
42
 
/* To save state of keyboard */
43
 
#define ATARIBIOS_MAXKEYS 128
44
 
 
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;
49
45
 
50
 
/* Special keys state */
51
 
enum {
52
 
        K_RSHIFT=0,
53
 
        K_LSHIFT,
54
 
        K_CTRL,
55
 
        K_ALT,
56
 
        K_CAPSLOCK,
57
 
        K_CLRHOME,
58
 
        K_INSERT
59
 
};
60
 
 
61
 
/* The translation tables from a console scancode to a SDL keysym */
62
 
static SDLKey keymap[ATARIBIOS_MAXKEYS];
63
 
 
64
 
static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym,
65
 
        SDL_bool pressed);
66
46
static void UpdateSpecialKeys(int special_keys_state);
67
47
 
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));
75
55
 
76
 
        /* Initialize keymap */
77
 
        for ( i=0; i<sizeof(keymap); i++ )
78
 
                keymap[i] = SDLK_UNKNOWN;
79
 
 
80
 
        /* Functions keys */
81
 
        for ( i = 0; i<10; i++ )
82
 
                keymap[SCANCODE_F1 + i] = SDLK_F1+i;
83
 
 
84
 
        /* Cursor keypad */
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;
93
 
 
94
 
        /* Special keys */
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;
105
 
 
106
56
        use_dev_mouse = (SDL_AtariDevMouse_Open()!=0) ? SDL_TRUE : SDL_FALSE;
107
57
 
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 */
111
61
        }
112
 
        if (Getcookie(C_MiNT, &dummy)==C_FOUND) {
 
62
/*      if (Getcookie(C_MiNT, &dummy)==C_FOUND) {
113
63
                vectors_mask = 0;
114
 
        }
 
64
        }*/
115
65
 
116
66
        SDL_AtariXbios_InstallVectors(vectors_mask);
117
67
}
126
76
 
127
77
        while (Bconstat(_CON)) {
128
78
                unsigned long key_pressed;
129
 
                unsigned char asciicode, scancode;
130
 
 
131
79
                key_pressed=Bconin(_CON);
132
 
 
133
 
                asciicode = key_pressed;
134
 
                scancode = key_pressed >> 16;
135
 
 
136
 
                bios_currentkeyboard[scancode]=0xFF;
137
 
                bios_currentascii[scancode]=asciicode;
 
80
                bios_currentkeyboard[(key_pressed>>16)&(ATARIBIOS_MAXKEYS-1)]=0xFF;
138
81
        }
139
82
 
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));
149
92
                        
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));
154
97
        }
155
98
 
156
99
        if (use_dev_mouse) {
160
103
        }
161
104
 
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));
164
107
}
165
108
 
166
109
static void UpdateSpecialKeys(int special_keys_state)
169
112
        {       \
170
113
                if (special_keys_state & (1<<(numbit))) { \
171
114
                        bios_currentkeyboard[scancode]=0xFF; \
172
 
                        bios_currentascii[scancode]=0; \
173
115
                }       \
174
116
        }
175
117
 
180
122
        UPDATE_SPECIAL_KEYS(K_CAPSLOCK, SCANCODE_CAPSLOCK);
181
123
}
182
124
 
183
 
static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym,
184
 
        SDL_bool pressed)
185
 
{
186
 
        /* Set the keysym information */
187
 
        keysym->scancode = scancode;
188
 
 
189
 
        if (asciicode)
190
 
                keysym->sym = asciicode;                
191
 
        else
192
 
                keysym->sym = keymap[scancode];
193
 
 
194
 
        keysym->mod = KMOD_NONE;
195
 
        keysym->unicode = 0;
196
 
        if (SDL_TranslateUNICODE && pressed) {
197
 
                keysym->unicode = SDL_AtariToUnicodeTable[asciicode];
198
 
        }
199
 
 
200
 
        return(keysym);
201
 
}
202
 
 
203
125
void AtariBios_ShutdownEvents(void)
204
126
{
205
127
        SDL_AtariXbios_RestoreVectors();