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 (at) 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 } 127