/*
 * SDL_keysym.h
 *
 * Written by
 *  Sam Lantinga <slouken@libsdl.org>
 *
 * This file is a modified SDL header.
 *
 * This file is part of VICE, the Versatile Commodore Emulator.
 * See README for copyright notice.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program 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 General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 *  02111-1307  USA.
 *
 */

#ifndef _SDL_keysym_h
#define _SDL_keysym_h

/** What we really want is a mapping of every raw key on the keyboard.
 *  To support international keyboards, we use the range 0xA1 - 0xFF
 *  as international virtual keycodes.  We'll follow in the footsteps of X11...
 *  @brief The names of the keys
 */
typedef enum {
        /** @name ASCII mapped keysyms
         *  The keyboard syms have been cleverly chosen to map to ASCII
         */
        /*@{*/
	SDLK_UNKNOWN    = 0,
	SDLK_FIRST      = 0,
	SDLK_BACKSPACE  = 8,
	SDLK_TAB        = 9,
	SDLK_CLEAR      = 12,
	SDLK_RETURN     = 13,
	SDLK_PAUSE      = 19,
	SDLK_ESCAPE     = 27,
	SDLK_SPACE      = 32,
	SDLK_EXCLAIM    = 33,
	SDLK_QUOTEDBL   = 34,
	SDLK_HASH       = 35,
	SDLK_DOLLAR     = 36,
	SDLK_AMPERSAND  = 38,
	SDLK_QUOTE      = 39,
	SDLK_LEFTPAREN  = 40,
	SDLK_RIGHTPAREN = 41,
	SDLK_ASTERISK   = 42,
	SDLK_PLUS       = 43,
	SDLK_COMMA      = 44,
	SDLK_MINUS      = 45,
	SDLK_PERIOD     = 46,
	SDLK_SLASH      = 47,
	SDLK_0          = 48,
	SDLK_1          = 49,
	SDLK_2          = 50,
	SDLK_3          = 51,
	SDLK_4          = 52,
	SDLK_5          = 53,
	SDLK_6          = 54,
	SDLK_7          = 55,
	SDLK_8          = 56,
	SDLK_9          = 57,
	SDLK_COLON      = 58,
	SDLK_SEMICOLON  = 59,
	SDLK_LESS       = 60,
	SDLK_EQUALS     = 61,
	SDLK_GREATER    = 62,
	SDLK_QUESTION   = 63,
	SDLK_AT         = 64,

	/* 
	   Skip uppercase letters
	 */
	SDLK_LEFTBRACKET  = 91,
	SDLK_BACKSLASH    = 92,
	SDLK_RIGHTBRACKET = 93,
	SDLK_CARET        = 94,
	SDLK_UNDERSCORE   = 95,
	SDLK_BACKQUOTE    = 96,
	SDLK_a            = 97,
	SDLK_b            = 98,
	SDLK_c            = 99,
	SDLK_d            = 100,
	SDLK_e            = 101,
	SDLK_f            = 102,
	SDLK_g            = 103,
	SDLK_h            = 104,
	SDLK_i            = 105,
	SDLK_j            = 106,
	SDLK_k            = 107,
	SDLK_l            = 108,
	SDLK_m            = 109,
	SDLK_n            = 110,
	SDLK_o            = 111,
	SDLK_p            = 112,
	SDLK_q            = 113,
	SDLK_r            = 114,
	SDLK_s            = 115,
	SDLK_t            = 116,
	SDLK_u            = 117,
	SDLK_v            = 118,
	SDLK_w            = 119,
	SDLK_x            = 120,
	SDLK_y            = 121,
	SDLK_z            = 122,
	SDLK_DELETE       = 127,
	/* End of ASCII mapped keysyms */
        /*@}*/

	/** @name International keyboard syms */
        /*@{*/
	SDLK_WORLD_0  = 160,		/* 0xA0 */
	SDLK_WORLD_1  = 161,
	SDLK_WORLD_2  = 162,
	SDLK_WORLD_3  = 163,
	SDLK_WORLD_4  = 164,
	SDLK_WORLD_5  = 165,
	SDLK_WORLD_6  = 166,
	SDLK_WORLD_7  = 167,
	SDLK_WORLD_8  = 168,
	SDLK_WORLD_9  = 169,
	SDLK_WORLD_10 = 170,
	SDLK_WORLD_11 = 171,
	SDLK_WORLD_12 = 172,
	SDLK_WORLD_13 = 173,
	SDLK_WORLD_14 = 174,
	SDLK_WORLD_15 = 175,
	SDLK_WORLD_16 = 176,
	SDLK_WORLD_17 = 177,
	SDLK_WORLD_18 = 178,
	SDLK_WORLD_19 = 179,
	SDLK_WORLD_20 = 180,
	SDLK_WORLD_21 = 181,
	SDLK_WORLD_22 = 182,
	SDLK_WORLD_23 = 183,
	SDLK_WORLD_24 = 184,
	SDLK_WORLD_25 = 185,
	SDLK_WORLD_26 = 186,
	SDLK_WORLD_27 = 187,
	SDLK_WORLD_28 = 188,
	SDLK_WORLD_29 = 189,
	SDLK_WORLD_30 = 190,
	SDLK_WORLD_31 = 191,
	SDLK_WORLD_32 = 192,
	SDLK_WORLD_33 = 193,
	SDLK_WORLD_34 = 194,
	SDLK_WORLD_35 = 195,
	SDLK_WORLD_36 = 196,
	SDLK_WORLD_37 = 197,
	SDLK_WORLD_38 = 198,
	SDLK_WORLD_39 = 199,
	SDLK_WORLD_40 = 200,
	SDLK_WORLD_41 = 201,
	SDLK_WORLD_42 = 202,
	SDLK_WORLD_43 = 203,
	SDLK_WORLD_44 = 204,
	SDLK_WORLD_45 = 205,
	SDLK_WORLD_46 = 206,
	SDLK_WORLD_47 = 207,
	SDLK_WORLD_48 = 208,
	SDLK_WORLD_49 = 209,
	SDLK_WORLD_50 = 210,
	SDLK_WORLD_51 = 211,
	SDLK_WORLD_52 = 212,
	SDLK_WORLD_53 = 213,
	SDLK_WORLD_54 = 214,
	SDLK_WORLD_55 = 215,
	SDLK_WORLD_56 = 216,
	SDLK_WORLD_57 = 217,
	SDLK_WORLD_58 = 218,
	SDLK_WORLD_59 = 219,
	SDLK_WORLD_60 = 220,
	SDLK_WORLD_61 = 221,
	SDLK_WORLD_62 = 222,
	SDLK_WORLD_63 = 223,
	SDLK_WORLD_64 = 224,
	SDLK_WORLD_65 = 225,
	SDLK_WORLD_66 = 226,
	SDLK_WORLD_67 = 227,
	SDLK_WORLD_68 = 228,
	SDLK_WORLD_69 = 229,
	SDLK_WORLD_70 = 230,
	SDLK_WORLD_71 = 231,
	SDLK_WORLD_72 = 232,
	SDLK_WORLD_73 = 233,
	SDLK_WORLD_74 = 234,
	SDLK_WORLD_75 = 235,
	SDLK_WORLD_76 = 236,
	SDLK_WORLD_77 = 237,
	SDLK_WORLD_78 = 238,
	SDLK_WORLD_79 = 239,
	SDLK_WORLD_80 = 240,
	SDLK_WORLD_81 = 241,
	SDLK_WORLD_82 = 242,
	SDLK_WORLD_83 = 243,
	SDLK_WORLD_84 = 244,
	SDLK_WORLD_85 = 245,
	SDLK_WORLD_86 = 246,
	SDLK_WORLD_87 = 247,
	SDLK_WORLD_88 = 248,
	SDLK_WORLD_89 = 249,
	SDLK_WORLD_90 = 250,
	SDLK_WORLD_91 = 251,
	SDLK_WORLD_92 = 252,
	SDLK_WORLD_93 = 253,
	SDLK_WORLD_94 = 254,
	SDLK_WORLD_95 = 255,		/* 0xFF */
        /*@}*/

	/** @name Numeric keypad */
        /*@{*/
	SDLK_KP0         = 256,
	SDLK_KP1         = 257,
	SDLK_KP2         = 258,
	SDLK_KP3         = 259,
	SDLK_KP4         = 260,
	SDLK_KP5         = 261,
	SDLK_KP6         = 262,
	SDLK_KP7         = 263,
	SDLK_KP8         = 264,
	SDLK_KP9         = 265,
	SDLK_KP_PERIOD   = 266,
	SDLK_KP_DIVIDE   = 267,
	SDLK_KP_MULTIPLY = 268,
	SDLK_KP_MINUS    = 269,
	SDLK_KP_PLUS     = 270,
	SDLK_KP_ENTER    = 271,
	SDLK_KP_EQUALS   = 272,
        /*@}*/

	/** @name Arrows + Home/End pad */
        /*@{*/
	SDLK_UP       = 273,
	SDLK_DOWN     = 274,
	SDLK_RIGHT    = 275,
	SDLK_LEFT     = 276,
	SDLK_INSERT   = 277,
	SDLK_HOME     = 278,
	SDLK_END      = 279,
	SDLK_PAGEUP   = 280,
	SDLK_PAGEDOWN = 281,
        /*@}*/

	/** @name Function keys */
        /*@{*/
	SDLK_F1  = 282,
	SDLK_F2  = 283,
	SDLK_F3  = 284,
	SDLK_F4  = 285,
	SDLK_F5  = 286,
	SDLK_F6  = 287,
	SDLK_F7  = 288,
	SDLK_F8  = 289,
	SDLK_F9  = 290,
	SDLK_F10 = 291,
	SDLK_F11 = 292,
	SDLK_F12 = 293,
	SDLK_F13 = 294,
	SDLK_F14 = 295,
	SDLK_F15 = 296,
        /*@}*/

	/** @name Key state modifier keys */
        /*@{*/
	SDLK_NUMLOCK   = 300,
	SDLK_CAPSLOCK  = 301,
	SDLK_SCROLLOCK = 302,
	SDLK_RSHIFT    = 303,
	SDLK_LSHIFT    = 304,
	SDLK_RCTRL     = 305,
	SDLK_LCTRL     = 306,
	SDLK_RALT      = 307,
	SDLK_LALT      = 308,
	SDLK_RMETA     = 309,
	SDLK_LMETA     = 310,
	SDLK_LSUPER    = 311,		/**< Left "Windows" key */
	SDLK_RSUPER    = 312,		/**< Right "Windows" key */
	SDLK_MODE      = 313,		/**< "Alt Gr" key */
	SDLK_COMPOSE   = 314,		/**< Multi-key compose key */
        /*@}*/

	/** @name Miscellaneous function keys */
        /*@{*/
	SDLK_HELP   = 315,
	SDLK_PRINT  = 316,
	SDLK_SYSREQ = 317,
	SDLK_BREAK  = 318,
	SDLK_MENU   = 319,
	SDLK_POWER  = 320,		/**< Power Macintosh power key */
	SDLK_EURO   = 321,		/**< Some european keyboards */
	SDLK_UNDO   = 322,		/**< Atari keyboard has Undo */
        /*@}*/

	/* Add any other keys here */

	SDLK_LAST
} SDLKey;

/** Enumeration of valid key mods (possibly OR'd together) */
typedef enum {
	KMOD_NONE     = 0x0000,
	KMOD_LSHIFT   = 0x0001,
	KMOD_RSHIFT   = 0x0002,
	KMOD_LCTRL    = 0x0040,
	KMOD_RCTRL    = 0x0080,
	KMOD_LALT     = 0x0100,
	KMOD_RALT     = 0x0200,
	KMOD_LMETA    = 0x0400,
	KMOD_RMETA    = 0x0800,
	KMOD_NUM      = 0x1000,
	KMOD_CAPS     = 0x2000,
	KMOD_MODE     = 0x4000,
	KMOD_RESERVED = 0x8000
} SDLMod;

#define KMOD_CTRL    (KMOD_LCTRL | KMOD_RCTRL)
#define KMOD_SHIFT   (KMOD_LSHIFT | KMOD_RSHIFT)
#define KMOD_ALT     (KMOD_LALT | KMOD_RALT)
#define KMOD_META    (KMOD_LMETA | KMOD_RMETA)

#endif /* _SDL_keysym_h */
