summaryrefslogtreecommitdiff
path: root/src/libs/input/sdl/keynames.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/input/sdl/keynames.c')
-rw-r--r--src/libs/input/sdl/keynames.c229
1 files changed, 229 insertions, 0 deletions
diff --git a/src/libs/input/sdl/keynames.c b/src/libs/input/sdl/keynames.c
new file mode 100644
index 0000000..86c104a
--- /dev/null
+++ b/src/libs/input/sdl/keynames.c
@@ -0,0 +1,229 @@
+/*
+ * 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.
+ */
+
+#include "port.h"
+#include SDL_INCLUDE(SDL.h)
+#include <string.h>
+#include "keynames.h"
+
+/* This code is adapted from the code in SDL_keysym.h. Though this
+ * would almost certainly be fast if we were to use a direct char *
+ * array, this technique permits us to be independent of the actual
+ * character encoding to keysyms. */
+
+/* These names are case-insensitive when compared, but we format
+ * them to look pretty when output */
+
+/* This version of Virtual Controller does not support SDLK_WORLD_*
+ * keysyms or the Num/Caps/ScrollLock keys. SDL treats locking keys
+ * specially, and we cannot treat them as normal keys. Pain,
+ * tragedy. */
+
+typedef struct vcontrol_keyname {
+ const char *name;
+ int code;
+} keyname;
+
+static keyname keynames[] = {
+ {"Backspace", SDLK_BACKSPACE},
+ {"Tab", SDLK_TAB},
+ {"Clear", SDLK_CLEAR},
+ {"Return", SDLK_RETURN},
+ {"Pause", SDLK_PAUSE},
+ {"Escape", SDLK_ESCAPE},
+ {"Space", SDLK_SPACE},
+ {"!", SDLK_EXCLAIM},
+ {"\"", SDLK_QUOTEDBL},
+ {"Hash", SDLK_HASH},
+ {"$", SDLK_DOLLAR},
+ {"&", SDLK_AMPERSAND},
+ {"'", SDLK_QUOTE},
+ {"(", SDLK_LEFTPAREN},
+ {")", SDLK_RIGHTPAREN},
+ {"*", SDLK_ASTERISK},
+ {"+", SDLK_PLUS},
+ {",", SDLK_COMMA},
+ {"-", SDLK_MINUS},
+ {".", SDLK_PERIOD},
+ {"/", SDLK_SLASH},
+ {"0", SDLK_0},
+ {"1", SDLK_1},
+ {"2", SDLK_2},
+ {"3", SDLK_3},
+ {"4", SDLK_4},
+ {"5", SDLK_5},
+ {"6", SDLK_6},
+ {"7", SDLK_7},
+ {"8", SDLK_8},
+ {"9", SDLK_9},
+ {":", SDLK_COLON},
+ {";", SDLK_SEMICOLON},
+ {"<", SDLK_LESS},
+ {"=", SDLK_EQUALS},
+ {">", SDLK_GREATER},
+ {"?", SDLK_QUESTION},
+ {"@", SDLK_AT},
+ {"[", SDLK_LEFTBRACKET},
+ {"\\", SDLK_BACKSLASH},
+ {"]", SDLK_RIGHTBRACKET},
+ {"^", SDLK_CARET},
+ {"_", SDLK_UNDERSCORE},
+ {"`", SDLK_BACKQUOTE},
+ {"a", SDLK_a},
+ {"b", SDLK_b},
+ {"c", SDLK_c},
+ {"d", SDLK_d},
+ {"e", SDLK_e},
+ {"f", SDLK_f},
+ {"g", SDLK_g},
+ {"h", SDLK_h},
+ {"i", SDLK_i},
+ {"j", SDLK_j},
+ {"k", SDLK_k},
+ {"l", SDLK_l},
+ {"m", SDLK_m},
+ {"n", SDLK_n},
+ {"o", SDLK_o},
+ {"p", SDLK_p},
+ {"q", SDLK_q},
+ {"r", SDLK_r},
+ {"s", SDLK_s},
+ {"t", SDLK_t},
+ {"u", SDLK_u},
+ {"v", SDLK_v},
+ {"w", SDLK_w},
+ {"x", SDLK_x},
+ {"y", SDLK_y},
+ {"z", SDLK_z},
+ {"Delete", SDLK_DELETE},
+#if SDL_MAJOR_VERSION == 1
+ {"Keypad-0", SDLK_KP0},
+ {"Keypad-1", SDLK_KP1},
+ {"Keypad-2", SDLK_KP2},
+ {"Keypad-3", SDLK_KP3},
+ {"Keypad-4", SDLK_KP4},
+ {"Keypad-5", SDLK_KP5},
+ {"Keypad-6", SDLK_KP6},
+ {"Keypad-7", SDLK_KP7},
+ {"Keypad-8", SDLK_KP8},
+ {"Keypad-9", SDLK_KP9},
+#else
+ {"Keypad-0", SDLK_KP_0},
+ {"Keypad-1", SDLK_KP_1},
+ {"Keypad-2", SDLK_KP_2},
+ {"Keypad-3", SDLK_KP_3},
+ {"Keypad-4", SDLK_KP_4},
+ {"Keypad-5", SDLK_KP_5},
+ {"Keypad-6", SDLK_KP_6},
+ {"Keypad-7", SDLK_KP_7},
+ {"Keypad-8", SDLK_KP_8},
+ {"Keypad-9", SDLK_KP_9},
+#endif
+ {"Keypad-.", SDLK_KP_PERIOD},
+ {"Keypad-/", SDLK_KP_DIVIDE},
+ {"Keypad-*", SDLK_KP_MULTIPLY},
+ {"Keypad--", SDLK_KP_MINUS},
+ {"Keypad-+", SDLK_KP_PLUS},
+ {"Keypad-Enter", SDLK_KP_ENTER},
+ {"Keypad-=", SDLK_KP_EQUALS},
+ {"Up", SDLK_UP},
+ {"Down", SDLK_DOWN},
+ {"Right", SDLK_RIGHT},
+ {"Left", SDLK_LEFT},
+ {"Insert", SDLK_INSERT},
+ {"Home", SDLK_HOME},
+ {"End", SDLK_END},
+ {"PageUp", SDLK_PAGEUP},
+ {"PageDown", SDLK_PAGEDOWN},
+ {"F1", SDLK_F1},
+ {"F2", SDLK_F2},
+ {"F3", SDLK_F3},
+ {"F4", SDLK_F4},
+ {"F5", SDLK_F5},
+ {"F6", SDLK_F6},
+ {"F7", SDLK_F7},
+ {"F8", SDLK_F8},
+ {"F9", SDLK_F9},
+ {"F10", SDLK_F10},
+ {"F11", SDLK_F11},
+ {"F12", SDLK_F12},
+ {"F13", SDLK_F13},
+ {"F14", SDLK_F14},
+ {"F15", SDLK_F15},
+ {"RightShift", SDLK_RSHIFT},
+ {"LeftShift", SDLK_LSHIFT},
+ {"RightControl", SDLK_RCTRL},
+ {"LeftControl", SDLK_LCTRL},
+ {"RightAlt", SDLK_RALT},
+ {"LeftAlt", SDLK_LALT},
+#if SDL_MAJOR_VERSION == 1
+ {"RightMeta", SDLK_RMETA},
+ {"LeftMeta", SDLK_LMETA},
+ {"RightSuper", SDLK_RSUPER},
+ {"LeftSuper", SDLK_LSUPER},
+ {"AltGr", SDLK_MODE},
+ {"Compose", SDLK_COMPOSE},
+ {"Help", SDLK_HELP},
+ {"Print", SDLK_PRINT},
+ {"SysReq", SDLK_SYSREQ},
+ {"Break", SDLK_BREAK},
+ {"Menu", SDLK_MENU},
+ {"Power", SDLK_POWER},
+ {"Euro", SDLK_EURO},
+ {"Undo", SDLK_UNDO},
+#ifdef _WIN32_WCE
+ {"App1", SDLK_APP1},
+ {"App2", SDLK_APP2},
+ {"App3", SDLK_APP3},
+ {"App4", SDLK_APP4},
+ {"App5", SDLK_APP5},
+ {"App6", SDLK_APP6},
+#endif /* _WIN32_WCE */
+#endif /* SDL_MAJOR_VERSION == 1 */
+
+ {"Unknown", 0}};
+/* Last element must have code zero */
+
+const char *
+VControl_code2name (int code)
+{
+ int i = 0;
+ while (1)
+ {
+ int test = keynames[i].code;
+ if (test == code || !test)
+ {
+ return keynames[i].name;
+ }
+ ++i;
+ }
+}
+
+int
+VControl_name2code (const char *name)
+{
+ int i = 0;
+ while (1)
+ {
+ const char *test = keynames[i].name;
+ int code = keynames[i].code;
+ if (!strcasecmp(test, name) || !code)
+ {
+ return code;
+ }
+ ++i;
+ }
+}