|
1 /* |
|
2 SDL - Simple DirectMedia Layer |
|
3 Copyright (C) 1997-2006 Sam Lantinga |
|
4 |
|
5 This library is free software; you can redistribute it and/or |
|
6 modify it under the terms of the GNU Lesser General Public |
|
7 License as published by the Free Software Foundation; either |
|
8 version 2.1 of the License, or (at your option) any later version. |
|
9 |
|
10 This library is distributed in the hope that it will be useful, |
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
13 Lesser General Public License for more details. |
|
14 |
|
15 You should have received a copy of the GNU Lesser General Public |
|
16 License along with this library; if not, write to the Free Software |
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|
18 |
|
19 Sam Lantinga |
|
20 slouken@libsdl.org |
|
21 */ |
|
22 #include "SDL_config.h" |
|
23 |
|
24 /* |
|
25 * Atari keyboard events manager, using hardware IKBD |
|
26 * |
|
27 * Patrice Mandin |
|
28 */ |
|
29 |
|
30 /* Mint includes */ |
|
31 #include <mint/osbind.h> |
|
32 |
|
33 #include "../../events/SDL_sysevents.h" |
|
34 #include "../../events/SDL_events_c.h" |
|
35 |
|
36 #include "SDL_atarikeys.h" |
|
37 #include "SDL_atarievents_c.h" |
|
38 #include "SDL_ikbdinterrupt_s.h" |
|
39 |
|
40 #define KEY_PRESSED 0xff |
|
41 #define KEY_UNDEFINED 0x80 |
|
42 #define KEY_RELEASED 0x00 |
|
43 |
|
44 static Uint16 atari_prevmouseb; /* save state of mouse buttons */ |
|
45 |
|
46 void AtariIkbd_InitOSKeymap(_THIS) |
|
47 { |
|
48 int i; |
|
49 |
|
50 SDL_memset(SDL_AtariIkbd_keyboard, KEY_UNDEFINED, sizeof(SDL_AtariIkbd_keyboard)); |
|
51 |
|
52 /* Now install our handler */ |
|
53 SDL_AtariIkbd_mouseb = SDL_AtariIkbd_mousex = SDL_AtariIkbd_mousey = 0; |
|
54 atari_prevmouseb = 0; |
|
55 |
|
56 Supexec(SDL_AtariIkbdInstall); |
|
57 } |
|
58 |
|
59 static int atari_GetButton(int button) |
|
60 { |
|
61 switch(button) |
|
62 { |
|
63 case 0: |
|
64 return SDL_BUTTON_RIGHT; |
|
65 break; |
|
66 case 1: |
|
67 default: |
|
68 return SDL_BUTTON_LEFT; |
|
69 break; |
|
70 } |
|
71 } |
|
72 |
|
73 void AtariIkbd_PumpEvents(_THIS) |
|
74 { |
|
75 int i, specialkeys; |
|
76 SDL_keysym keysym; |
|
77 |
|
78 /*--- Send keyboard events ---*/ |
|
79 |
|
80 for (i=0; i<ATARIBIOS_MAXKEYS; i++) { |
|
81 /* Key pressed ? */ |
|
82 if (SDL_AtariIkbd_keyboard[i]==KEY_PRESSED) { |
|
83 SDL_PrivateKeyboard(SDL_PRESSED, |
|
84 SDL_Atari_TranslateKey(i, &keysym, SDL_TRUE)); |
|
85 SDL_AtariIkbd_keyboard[i]=KEY_UNDEFINED; |
|
86 } |
|
87 |
|
88 /* Key released ? */ |
|
89 if (SDL_AtariIkbd_keyboard[i]==KEY_RELEASED) { |
|
90 SDL_PrivateKeyboard(SDL_RELEASED, |
|
91 SDL_Atari_TranslateKey(i, &keysym, SDL_FALSE)); |
|
92 SDL_AtariIkbd_keyboard[i]=KEY_UNDEFINED; |
|
93 } |
|
94 } |
|
95 |
|
96 /*--- Send mouse events ---*/ |
|
97 |
|
98 /* Mouse motion ? */ |
|
99 if (SDL_AtariIkbd_mousex || SDL_AtariIkbd_mousey) { |
|
100 SDL_PrivateMouseMotion(0, 1, SDL_AtariIkbd_mousex, SDL_AtariIkbd_mousey); |
|
101 SDL_AtariIkbd_mousex = SDL_AtariIkbd_mousey = 0; |
|
102 } |
|
103 |
|
104 /* Mouse button ? */ |
|
105 if (SDL_AtariIkbd_mouseb != atari_prevmouseb) { |
|
106 for (i=0;i<2;i++) { |
|
107 int curbutton, prevbutton; |
|
108 |
|
109 curbutton = SDL_AtariIkbd_mouseb & (1<<i); |
|
110 prevbutton = atari_prevmouseb & (1<<i); |
|
111 |
|
112 if (curbutton && !prevbutton) { |
|
113 SDL_PrivateMouseButton(SDL_PRESSED, atari_GetButton(i), 0, 0); |
|
114 } |
|
115 if (!curbutton && prevbutton) { |
|
116 SDL_PrivateMouseButton(SDL_RELEASED, atari_GetButton(i), 0, 0); |
|
117 } |
|
118 } |
|
119 atari_prevmouseb = SDL_AtariIkbd_mouseb; |
|
120 } |
|
121 } |
|
122 |
|
123 void AtariIkbd_ShutdownEvents(void) |
|
124 { |
|
125 Supexec(SDL_AtariIkbdUninstall); |
|
126 } |