/*==========================================================
  File:  kbnames.c
  Author:  _pragma

  Description:  List of keyboard key identification numbers
                matched to stringified identifiers (for bind).
  ==========================================================*/


#include <SDL/SDL.h>

#include "kbnames.h"
#include "util.h"

/*==========================================================
  This is a "hash" connecting keyboard keystroke identification
  numbers with text string indentifiers.
  ==========================================================*/


/* Note: new keys must be added in the exact order
 *       shown in SDL_keysym.h!  If you add new keys
 *       beyond the last element in the list, you must
 *       set the MAX_KEYSTATES define accordingly (input.c).
 *       :pragma
 */


const kb_names_t keyNames[] =
    {
        /* see SDL_keysym.h  */
        /* ASCII mapped keys */

        {  0,               "UNUSED"      },
        {  SDLK_BACKSPACE,  "backspace"   },
        {  SDLK_TAB,        "tab"         },
        {  SDLK_CLEAR,      "clear"       },
        {  SDLK_RETURN,     "return"      },
        {  SDLK_RETURN,     "enter"       },
        {  SDLK_PAUSE,      "pause"       },
        {  SDLK_ESCAPE,     "escape"      },
        {  SDLK_SPACE,      "space"       },
        {  SDLK_EXCLAIM,    "!"           },
        {  SDLK_QUOTEDBL,   "\""          },
        {  SDLK_HASH,       "#"           },
        {  SDLK_DOLLAR,     "$"           },
        {  SDLK_AMPERSAND,  "&"           },
        {  SDLK_QUOTE,      "\'"          },
        {  SDLK_LEFTPAREN,  "("           },
        {  SDLK_RIGHTPAREN")"           },
        {  SDLK_ASTERISK,   "*"           },
        {  SDLK_PLUS,       "+"           },
        {  SDLK_COMMA,      ","           },
        {  SDLK_MINUS,      "-"           },
        {  SDLK_PERIOD,     "."           },
        {  SDLK_SLASH,      "/"           },
        {  SDLK_0,          "0"           },
        {  SDLK_1,          "1"      },
        {  SDLK_2,          "2"      },
        {  SDLK_3,          "3"      },
        {  SDLK_4,          "4"      },
        {  SDLK_5,          "5"      },
        {  SDLK_6,          "6"      },
        {  SDLK_7,          "7"      },
        {  SDLK_8,          "8"      },
        {  SDLK_9,          "9"      },
        {  SDLK_COLON,      ":"      },
        {  SDLK_SEMICOLON,  ";"      },
        {  SDLK_LESS,       "<"      },
        {  SDLK_EQUALS,     "="      },
        {  SDLK_GREATER,    ">"      },
        {  SDLK_QUESTION,   "?"      },
        {  SDLK_AT,         "@"      },

        /* skip uppercase letters */

        {  SDLK_LEFTBRACKET,     "["      },
        {  SDLK_BACKSLASH,       "\\"     },
        {  SDLK_RIGHTBRACKET,    "]"      },
        {  SDLK_CARET,           "^"      },
        {  SDLK_UNDERSCORE,      "_"      },
        {  SDLK_BACKQUOTE,       "`"      },
        {  SDLK_BACKQUOTE,       "~"      },
        {  SDLK_a"a"      },
        {  SDLK_b"b"      },
        {  SDLK_c"c"      },
        {  SDLK_d"d"      },
        {  SDLK_e"e"      },
        {  SDLK_f"f"      },
        {  SDLK_g"g"      },
        {  SDLK_h"h"      },
        {  SDLK_i"i"      },
        {  SDLK_j"j"      },
        {  SDLK_k"k"      },
        {  SDLK_l"l"      },
        {  SDLK_m"m"      },
        {  SDLK_n"n"      },
        {  SDLK_o"o"      },
        {  SDLK_p"p"      },
        {  SDLK_q"q"      },
        {  SDLK_r"r"      },
        {  SDLK_s"s"      },
        {  SDLK_t"t"      },
        {  SDLK_u"u"      },
        {  SDLK_v"v"      },
        {  SDLK_w"w"      },
        {  SDLK_x"x"      },
        {  SDLK_y"y"      },
        {  SDLK_z"z"      },
        {  SDLK_DELETE"delete"      },

        /* end of ASCII */

        /* numpad/keypad */

        { SDLK_KP0"kp_0"      },
        { SDLK_KP1"kp_1"      },
        { SDLK_KP2"kp_2"      },
        { SDLK_KP3"kp_3"      },
        { SDLK_KP4"kp_4"      },
        { SDLK_KP5"kp_5"      },
        { SDLK_KP6"kp_6"      },
        { SDLK_KP7"kp_7"      },
        { SDLK_KP8"kp_8"      },
        { SDLK_KP9"kp_9"      },
        { SDLK_KP_PERIOD,   "kp_period"      },
        { SDLK_KP_DIVIDE,   "kp_divide"      },
        { SDLK_KP_MULTIPLY"kp_multiply"    },
        { SDLK_KP_MINUS,    "kp_minus"       },
        { SDLK_KP_PLUS,     "kp_plus"        },
        { SDLK_KP_ENTER,    "kp_enter"       },
        { SDLK_KP_EQUALS,   "kp_equals"      },

        /* Arrows + Home/End pad */

        { SDLK_UP,       "up"         },
        { SDLK_DOWN,     "down"       },
        { SDLK_RIGHT,    "right"      },
        { SDLK_LEFT,     "left"       },
        { SDLK_INSERT,   "insert"     },
        { SDLK_HOME,     "home"       },
        { SDLK_END,      "end"        },
        { SDLK_PAGEUP,   "pageup"     },
        { SDLK_PAGEDOWN"pagedown"   },

        /* Function keys */

        { SDLK_F1,  "f1"       },
        { SDLK_F2,  "f2"       },
        { SDLK_F3,  "f3"       },
        { SDLK_F4,  "f4"       },
        { SDLK_F5,  "f5"       },
        { SDLK_F6,  "f6"       },
        { SDLK_F7,  "f7"       },
        { SDLK_F8,  "f8"       },
        { SDLK_F9,  "f9"       },
        { SDLK_F10"f10"      },
        { SDLK_F11"f11"      },
        { SDLK_F12"f12"      },
        { SDLK_F13"f13"      },
        { SDLK_F14"f14"      },
        { SDLK_F15"f15"      },

        /* Key state modifier keys */

        { SDLK_NUMLOCK,   "numlock"     },
        { SDLK_CAPSLOCK,  "capslock"    },
        { SDLK_SCROLLOCK"scroll_lock" },
        { SDLK_RSHIFT,    "rshift"     },
        { SDLK_LSHIFT,    "lshift"     },
        { SDLK_RCTRL,     "rctrl"       },
        { SDLK_LCTRL,     "lctrl"       },
        { SDLK_RALT,      "ralt"        },
        { SDLK_LALT,      "lalt"        },
        { SDLK_LSUPER,    "lwinkey"     },
        { SDLK_RSUPER,    "rwinkey"     },       

        /* End of hash */

        { -1,             "\n"          }
};