#include <signal.h>
#include <AGL/agl.h>
#include <Carbon/Carbon.h>
+#include "vid_agl_mackeys.h" // this is SDL/src/video/maccommon/SDL_mackeys.h
#include "quakedef.h"
prev_keymod = keymod;
}
-static void Handle_Key(unsigned char charcode, qboolean keypressed)
+static void Handle_Key(unsigned char charcode, UInt32 mackeycode, qboolean keypressed)
{
unsigned int keycode = 0;
char ascii = '\0';
- switch (charcode)
+ switch (mackeycode)
{
- case kHomeCharCode:
- keycode = K_HOME;
+ case MK_ESCAPE:
+ keycode = K_ESCAPE;
break;
- case kEnterCharCode:
- keycode = K_KP_ENTER;
+ case MK_F1:
+ keycode = K_F1;
break;
- case kEndCharCode:
- keycode = K_END;
+ case MK_F2:
+ keycode = K_F2;
+ break;
+ case MK_F3:
+ keycode = K_F3;
+ break;
+ case MK_F4:
+ keycode = K_F4;
+ break;
+ case MK_F5:
+ keycode = K_F5;
+ break;
+ case MK_F6:
+ keycode = K_F6;
+ break;
+ case MK_F7:
+ keycode = K_F7;
+ break;
+ case MK_F8:
+ keycode = K_F8;
+ break;
+ case MK_F9:
+ keycode = K_F9;
+ break;
+ case MK_F10:
+ keycode = K_F10;
break;
- case kBackspaceCharCode:
+ case MK_F11:
+ keycode = K_F11;
+ break;
+ case MK_F12:
+ keycode = K_F12;
+ break;
+ case MK_SCROLLOCK:
+ keycode = K_SCROLLOCK;
+ break;
+ case MK_PAUSE:
+ keycode = K_PAUSE;
+ break;
+ case MK_BACKSPACE:
keycode = K_BACKSPACE;
break;
- case kTabCharCode:
- keycode = K_TAB;
+ case MK_INSERT:
+ keycode = K_INS;
+ break;
+ case MK_HOME:
+ keycode = K_HOME;
break;
- case kPageUpCharCode:
+ case MK_PAGEUP:
keycode = K_PGUP;
break;
- case kPageDownCharCode:
+ case MK_NUMLOCK:
+ keycode = K_NUMLOCK;
+ break;
+ case MK_KP_EQUALS:
+ keycode = K_KP_EQUALS;
+ break;
+ case MK_KP_DIVIDE:
+ keycode = K_KP_DIVIDE;
+ break;
+ case MK_KP_MULTIPLY:
+ keycode = K_KP_MULTIPLY;
+ break;
+ case MK_TAB:
+ keycode = K_TAB;
+ break;
+ case MK_DELETE:
+ keycode = K_DEL;
+ break;
+ case MK_END:
+ keycode = K_END;
+ break;
+ case MK_PAGEDOWN:
keycode = K_PGDN;
break;
- case kReturnCharCode:
+ case MK_KP7:
+ keycode = K_KP_7;
+ break;
+ case MK_KP8:
+ keycode = K_KP_8;
+ break;
+ case MK_KP9:
+ keycode = K_KP_9;
+ break;
+ case MK_KP_MINUS:
+ keycode = K_KP_MINUS;
+ break;
+ case MK_CAPSLOCK:
+ keycode = K_CAPSLOCK;
+ break;
+ case MK_RETURN:
keycode = K_ENTER;
break;
- case kEscapeCharCode:
- keycode = K_ESCAPE;
+ case MK_KP4:
+ keycode = K_KP_4;
break;
- case kLeftArrowCharCode:
- keycode = K_LEFTARROW;
+ case MK_KP5:
+ keycode = K_KP_5;
break;
- case kRightArrowCharCode:
- keycode = K_RIGHTARROW;
+ case MK_KP6:
+ keycode = K_KP_6;
break;
- case kUpArrowCharCode:
- keycode = K_UPARROW;
+ case MK_KP_PLUS:
+ keycode = K_KP_PLUS;
break;
- case kDownArrowCharCode :
- keycode = K_DOWNARROW;
+ case MK_KP1:
+ keycode = K_KP_1;
break;
- case kDeleteCharCode:
- keycode = K_DEL;
+ case MK_KP2:
+ keycode = K_KP_2;
break;
- case 0:
- case 191:
- // characters 0 and 191 are sent by the mouse buttons (?!)
+ case MK_KP3:
+ keycode = K_KP_3;
+ break;
+ case MK_KP_ENTER:
+ case MK_IBOOK_ENTER:
+ keycode = K_KP_ENTER;
+ break;
+ case MK_KP0:
+ keycode = K_KP_0;
+ break;
+ case MK_KP_PERIOD:
+ keycode = K_KP_PERIOD;
break;
default:
- if ('A' <= charcode && charcode <= 'Z')
- {
- keycode = charcode + ('a' - 'A'); // lowercase it
- ascii = charcode;
- }
- else if (charcode >= 32)
+ switch(charcode)
{
- keycode = charcode;
- ascii = charcode;
+ case kUpArrowCharCode:
+ keycode = K_UPARROW;
+ break;
+ case kLeftArrowCharCode:
+ keycode = K_LEFTARROW;
+ break;
+ case kDownArrowCharCode:
+ keycode = K_DOWNARROW;
+ break;
+ case kRightArrowCharCode:
+ keycode = K_RIGHTARROW;
+ break;
+ case 0:
+ case 191:
+ // characters 0 and 191 are sent by the mouse buttons (?!)
+ break;
+ default:
+ if ('A' <= charcode && charcode <= 'Z')
+ {
+ keycode = charcode + ('a' - 'A'); // lowercase it
+ ascii = charcode;
+ }
+ else if (charcode >= 32)
+ {
+ keycode = charcode;
+ ascii = charcode;
+ }
+ else
+ Con_Printf(">> UNKNOWN char/keycode: %d/%u <<\n", charcode, (unsigned) mackeycode);
}
- else
- Con_Printf(">> UNKNOWN charcode: %d <<\n", charcode);
}
if (keycode != 0)
case kEventClassKeyboard:
{
- char keycode;
+ char charcode;
+ UInt32 keycode;
switch (eventKind)
{
case kEventRawKeyDown:
- GetEventParameter(theEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(keycode), NULL, &keycode);
- Handle_Key(keycode, true);
+ GetEventParameter(theEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(charcode), NULL, &charcode);
+ GetEventParameter(theEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof(keycode), NULL, &keycode);
+ Handle_Key(charcode, keycode, true);
break;
case kEventRawKeyRepeat:
break;
case kEventRawKeyUp:
- GetEventParameter(theEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(keycode), NULL, &keycode);
- Handle_Key(keycode, false);
+ GetEventParameter(theEvent, kEventParamKeyMacCharCodes, typeChar, NULL, sizeof(charcode), NULL, &charcode);
+ GetEventParameter(theEvent, kEventParamKeyCode, typeUInt32, NULL, sizeof(keycode), NULL, &keycode);
+ Handle_Key(charcode, keycode, false);
break;
case kEventRawKeyModifiersChanged:
--- /dev/null
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997, 1998, 1999, 2000, 2001 Sam Lantinga
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ Sam Lantinga
+ slouken@devolution.com
+*/
+
+#ifdef SAVE_RCSID
+static char rcsid =
+ "@(#) $Id$";
+#endif
+
+/* These are the Macintosh key scancode constants -- from Inside Macintosh */
+
+#define MK_ESCAPE 0x35
+#define MK_F1 0x7A
+#define MK_F2 0x78
+#define MK_F3 0x63
+#define MK_F4 0x76
+#define MK_F5 0x60
+#define MK_F6 0x61
+#define MK_F7 0x62
+#define MK_F8 0x64
+#define MK_F9 0x65
+#define MK_F10 0x6D
+#define MK_F11 0x67
+#define MK_F12 0x6F
+#define MK_PRINT 0x69
+#define MK_SCROLLOCK 0x6B
+#define MK_PAUSE 0x71
+#define MK_POWER 0x7F
+#define MK_BACKQUOTE 0x32
+#define MK_1 0x12
+#define MK_2 0x13
+#define MK_3 0x14
+#define MK_4 0x15
+#define MK_5 0x17
+#define MK_6 0x16
+#define MK_7 0x1A
+#define MK_8 0x1C
+#define MK_9 0x19
+#define MK_0 0x1D
+#define MK_MINUS 0x1B
+#define MK_EQUALS 0x18
+#define MK_BACKSPACE 0x33
+#define MK_INSERT 0x72
+#define MK_HOME 0x73
+#define MK_PAGEUP 0x74
+#define MK_NUMLOCK 0x47
+#define MK_KP_EQUALS 0x51
+#define MK_KP_DIVIDE 0x4B
+#define MK_KP_MULTIPLY 0x43
+#define MK_TAB 0x30
+#define MK_q 0x0C
+#define MK_w 0x0D
+#define MK_e 0x0E
+#define MK_r 0x0F
+#define MK_t 0x11
+#define MK_y 0x10
+#define MK_u 0x20
+#define MK_i 0x22
+#define MK_o 0x1F
+#define MK_p 0x23
+#define MK_LEFTBRACKET 0x21
+#define MK_RIGHTBRACKET 0x1E
+#define MK_BACKSLASH 0x2A
+#define MK_DELETE 0x75
+#define MK_END 0x77
+#define MK_PAGEDOWN 0x79
+#define MK_KP7 0x59
+#define MK_KP8 0x5B
+#define MK_KP9 0x5C
+#define MK_KP_MINUS 0x4E
+#define MK_CAPSLOCK 0x39
+#define MK_a 0x00
+#define MK_s 0x01
+#define MK_d 0x02
+#define MK_f 0x03
+#define MK_g 0x05
+#define MK_h 0x04
+#define MK_j 0x26
+#define MK_k 0x28
+#define MK_l 0x25
+#define MK_SEMICOLON 0x29
+#define MK_QUOTE 0x27
+#define MK_RETURN 0x24
+#define MK_KP4 0x56
+#define MK_KP5 0x57
+#define MK_KP6 0x58
+#define MK_KP_PLUS 0x45
+#define MK_LSHIFT 0x38
+#define MK_z 0x06
+#define MK_x 0x07
+#define MK_c 0x08
+#define MK_v 0x09
+#define MK_b 0x0B
+#define MK_n 0x2D
+#define MK_m 0x2E
+#define MK_COMMA 0x2B
+#define MK_PERIOD 0x2F
+#define MK_SLASH 0x2C
+#if 0 /* These are the same as the left versions - use left by default */
+#define MK_RSHIFT 0x38
+#endif
+#define MK_UP 0x7E
+#define MK_KP1 0x53
+#define MK_KP2 0x54
+#define MK_KP3 0x55
+#define MK_KP_ENTER 0x4C
+#define MK_LCTRL 0x3B
+#define MK_LALT 0x3A
+#define MK_LMETA 0x37
+#define MK_SPACE 0x31
+#if 0 /* These are the same as the left versions - use left by default */
+#define MK_RMETA 0x37
+#define MK_RALT 0x3A
+#define MK_RCTRL 0x3B
+#endif
+#define MK_LEFT 0x7B
+#define MK_DOWN 0x7D
+#define MK_RIGHT 0x7C
+#define MK_KP0 0x52
+#define MK_KP_PERIOD 0x41
+
+/* Wierd, these keys are on my iBook under MacOS X */
+#define MK_IBOOK_ENTER 0x34
+#define MK_IBOOK_LEFT 0x3B
+#define MK_IBOOK_RIGHT 0x3C
+#define MK_IBOOK_DOWN 0x3D
+#define MK_IBOOK_UP 0x3E