/* PokeMini - Pokémon-Mini Emulator Copyright (C) 2009-2015 JustBurn 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 3 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, see . */ #include "PokeMini.h" #include "CommandLine.h" #include "Keyboard.h" // Keyboard re-mapping TKeyboardRemap *KeyboardHostRemap = NULL; // Keyboard mapping with host keysym int KeyboardMapHostKeysym_A[10]; int KeyboardMapHostKeysym_B[10]; // Temp keyboard map static int TMP_keyb_a[10]; static int TMP_keyb_b[10]; static int KeyLastKey = -1; // Keyboard character names const char *KeyboardMapStr[PMKEYB_EOL] = { "NONE", "ESCAPE", "RETURN", "BACKSPACE", "TAB", "BACKQUOTE", "RSHIFT", "LSHIFT", "RCTRL", "LCTRL", "RALT", "LALT", "INSERT", "DELETE", "HOME", "END", "PAGEUP", "PAGEDOWN", "NUMLOCK", "CAPSLOCK", "SCROLLLOCK", "KP_PERIOD", "KP_DIVIDE", "KP_MULTIPLY", "KP_MINUS", "KP_PLUS", "KP_ENTER", "KP_EQUALS", "UP", "DOWN", "RIGHT", "LEFT", "SPACE", "EXCLAIM", "QUOTEDBL", "HASH", "DOLLAR", "PERCENT", "AMPERSAND", "QUOTE", "LEFTPAREN", "RIGHTPAREN", "ASTERISK", "PLUS", "COMMA", "MINUS", "PERIOD", "SLASH", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "COLON", "SEMICOLON", "LESS", "EQUALS", "GREATER", "QUESTION", "AT", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "LEFTBRACK", "BACKSLASH", "RIGHTBRACK", "CARET", "UNDERSCORE", "KP_0", "KP_1", "KP_2", "KP_3", "KP_4", "KP_5", "KP_6", "KP_7", "KP_8", "KP_9" }; static const char *GetKeyboardMapStr(int index) { if ((index < 0) || (index >= PMKEYB_EOL)) index = 0; return KeyboardMapStr[index]; } void KeyboardRemap(TKeyboardRemap *keymap) { int i, k; if (keymap) KeyboardHostRemap = keymap; if (!KeyboardHostRemap) return; for (i=0; i<10; i++) { k = CommandLine.keyb_a[i]; if ((k < 0) || (k >= PMKEYB_EOL)) k = 0; KeyboardMapHostKeysym_A[i] = (*KeyboardHostRemap)[k]; k = CommandLine.keyb_b[i]; if ((k < 0) || (k >= PMKEYB_EOL)) k = 0; KeyboardMapHostKeysym_B[i] = (*KeyboardHostRemap)[k]; } } // Joystick menu int UIItems_KeyboardC(int index, int reason); TUIMenu_Item UIItems_Keyboard[] = { { 0, 0, "Go back...", UIItems_KeyboardC }, { 0, 1, "Apply changes...", UIItems_KeyboardC }, { 0, 40, "Check inputs...", UIItems_KeyboardC }, { 0, 4, "Menu Key: %s", UIItems_KeyboardC }, { 0, 5, "A Key: %s", UIItems_KeyboardC }, { 0, 6, "B Key: %s", UIItems_KeyboardC }, { 0, 7, "C Key: %s", UIItems_KeyboardC }, { 0, 8, "Up Key: %s", UIItems_KeyboardC }, { 0, 9, "Down Key: %s", UIItems_KeyboardC }, { 0, 10, "Left Key: %s", UIItems_KeyboardC }, { 0, 11, "Right Key: %s", UIItems_KeyboardC }, { 0, 12, "Power Key: %s", UIItems_KeyboardC }, { 0, 13, "Shake Key: %s", UIItems_KeyboardC }, { 0, 24, "Menu Alt: %s", UIItems_KeyboardC }, { 0, 25, "A Alt: %s", UIItems_KeyboardC }, { 0, 26, "B Alt: %s", UIItems_KeyboardC }, { 0, 27, "C Alt: %s", UIItems_KeyboardC }, { 0, 28, "Up Alt: %s", UIItems_KeyboardC }, { 0, 29, "Down Alt: %s", UIItems_KeyboardC }, { 0, 30, "Left Alt: %s", UIItems_KeyboardC }, { 0, 31, "Right Alt: %s", UIItems_KeyboardC }, { 0, 32, "Power Alt: %s", UIItems_KeyboardC }, { 0, 33, "Shake Alt: %s", UIItems_KeyboardC }, { 9, 0, "Keyboard", UIItems_KeyboardC } }; int KeyboardTestButtons(int line, char *outtext) { int i, key = 0; if (line == 0) { if (KeyLastKey == -1) sprintf(outtext, "Last key: None"); else { for (i=0; i= PMKEYB_EOL) TMP_keyb_a[index-4] = 0; break; case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: TMP_keyb_b[index-24]++; if (TMP_keyb_b[index-24] >= PMKEYB_EOL) TMP_keyb_b[index-24] = 0; break; case 40: KeyLastKey = -1; UIMenu_RealTimeMessage(KeyboardTestButtons); break; } } UIMenu_ChangeItem(UIItems_Keyboard, 4, "Menu Key: %s", GetKeyboardMapStr(TMP_keyb_a[0])); UIMenu_ChangeItem(UIItems_Keyboard, 5, "A Key: %s", GetKeyboardMapStr(TMP_keyb_a[1])); UIMenu_ChangeItem(UIItems_Keyboard, 6, "B Key: %s", GetKeyboardMapStr(TMP_keyb_a[2])); UIMenu_ChangeItem(UIItems_Keyboard, 7, "C Key: %s", GetKeyboardMapStr(TMP_keyb_a[3])); UIMenu_ChangeItem(UIItems_Keyboard, 8, "Up Key: %s", GetKeyboardMapStr(TMP_keyb_a[4])); UIMenu_ChangeItem(UIItems_Keyboard, 9, "Down Key: %s", GetKeyboardMapStr(TMP_keyb_a[5])); UIMenu_ChangeItem(UIItems_Keyboard, 10, "Left Key: %s", GetKeyboardMapStr(TMP_keyb_a[6])); UIMenu_ChangeItem(UIItems_Keyboard, 11, "Right Key: %s", GetKeyboardMapStr(TMP_keyb_a[7])); UIMenu_ChangeItem(UIItems_Keyboard, 12, "Power Key: %s", GetKeyboardMapStr(TMP_keyb_a[8])); UIMenu_ChangeItem(UIItems_Keyboard, 13, "Shake Key: %s", GetKeyboardMapStr(TMP_keyb_a[9])); UIMenu_ChangeItem(UIItems_Keyboard, 24, "Menu Alt: %s", GetKeyboardMapStr(TMP_keyb_b[0])); UIMenu_ChangeItem(UIItems_Keyboard, 25, "A Alt: %s", GetKeyboardMapStr(TMP_keyb_b[1])); UIMenu_ChangeItem(UIItems_Keyboard, 26, "B Alt: %s", GetKeyboardMapStr(TMP_keyb_b[2])); UIMenu_ChangeItem(UIItems_Keyboard, 27, "C Alt: %s", GetKeyboardMapStr(TMP_keyb_b[3])); UIMenu_ChangeItem(UIItems_Keyboard, 28, "Up Alt: %s", GetKeyboardMapStr(TMP_keyb_b[4])); UIMenu_ChangeItem(UIItems_Keyboard, 29, "Down Alt: %s", GetKeyboardMapStr(TMP_keyb_b[5])); UIMenu_ChangeItem(UIItems_Keyboard, 30, "Left Alt: %s", GetKeyboardMapStr(TMP_keyb_b[6])); UIMenu_ChangeItem(UIItems_Keyboard, 31, "Right Alt: %s", GetKeyboardMapStr(TMP_keyb_b[7])); UIMenu_ChangeItem(UIItems_Keyboard, 32, "Power Alt: %s", GetKeyboardMapStr(TMP_keyb_b[8])); UIMenu_ChangeItem(UIItems_Keyboard, 33, "Shake Alt: %s", GetKeyboardMapStr(TMP_keyb_b[9])); return 1; } // Enter into the keyboard menu void KeyboardEnterMenu(void) { int i; for (i=0; i<10; i++) { TMP_keyb_a[i] = CommandLine.keyb_a[i]; TMP_keyb_b[i] = CommandLine.keyb_b[i]; } UIMenu_LoadItems(UIItems_Keyboard, 0); } // Process keyboard press event int KeyboardPressEvent(int keysym) { int index, took = 0; KeyLastKey = keysym; for (index=0; index<10; index++) { if (KeyboardMapHostKeysym_A[index] == keysym) { took = 1; if (index) { UIMenu_KeyEvent(index, 1); } else { UI_Status = !UI_Status; } } else if (KeyboardMapHostKeysym_B[index] == keysym) { took = 1; if (index) { UIMenu_KeyEvent(index, 1); } else { UI_Status = !UI_Status; } } } return took; } // Process keyboard release event int KeyboardReleaseEvent(int keysym) { int index, took = 0; for (index=1; index<10; index++) { if (KeyboardMapHostKeysym_A[index] == keysym) { took = 1; UIMenu_KeyEvent(index, 0); } else if (KeyboardMapHostKeysym_B[index] == keysym) { took = 1; UIMenu_KeyEvent(index, 0); } } return took; }