#include <stdio.h>
#include <stdint.h>
#include <string.h>
+#include "../../include/keycodes.h"
#include "../libsdl/print.h"
#include "keyboard.h"
/* stolen from UAE */
static struct keycodes {
- const char *key;
+ enum keycode key;
uint8_t code;
} keycodes[] = {
- { "A", 0x20 }, { "B", 0x35 }, { "C", 0x33 }, { "D", 0x22 },
- { "E", 0x12 }, { "F", 0x23 }, { "G", 0x24 }, { "H", 0x25 },
- { "I", 0x17 }, { "J", 0x26 }, { "K", 0x27 }, { "L", 0x28 },
- { "M", 0x37 }, { "N", 0x36 }, { "O", 0x18 }, { "P", 0x19 },
- { "Q", 0x10 }, { "R", 0x13 }, { "S", 0x21 }, { "T", 0x14 },
- { "U", 0x16 }, { "V", 0x34 }, { "W", 0x11 }, { "X", 0x32 },
- { "Y", 0x15 }, { "Z", 0x31 },
-
- { "0", 0x0A }, { "1", 0x01 }, { "2", 0x02 }, { "3", 0x03 },
- { "4", 0x04 }, { "5", 0x05 }, { "6", 0x06 }, { "7", 0x07 },
- { "8", 0x08 }, { "9", 0x09 },
-
- { "NP0", 0x0F }, { "NP1", 0x1D }, { "NP2", 0x1E }, { "NP3", 0x1F },
- { "NP4", 0x2D }, { "NP5", 0x2E }, { "NP6", 0x2F }, { "NP7", 0x3D },
- { "NP8", 0x3E }, { "NP9", 0x3F },
-
- { "NPDIV", 0x5C }, { "NPMUL", 0x5D }, { "NPSUB", 0x4A },
- { "NPADD", 0x5E }, { "NPDEL", 0x3C }, { "NPLPAREN", 0x5A },
- { "NPRPAREN", 0x5B },
-
- { "F1", 0x50 }, { "F2", 0x51 }, { "F3", 0x52 }, { "F4", 0x53 },
- { "F5", 0x54 }, { "F6", 0x55 }, { "F7", 0x56 }, { "F8", 0x57 },
- { "F9", 0x58 }, { "F10", 0x59 },
-
- { "UP", 0x4C }, { "DN", 0x4D }, { "LF", 0x4F }, { "RT", 0x4E },
-
- { "SPC", 0x40 }, { "BS", 0x41 }, { "TAB", 0x42 }, { "ENT", 0x43 },
- { "RET", 0x44 }, { "ESC", 0x45 }, { "DEL", 0x46 },
-
- { "LSH", 0x60 }, { "RSH", 0x61 }, { "CAPSLOCK", 0x62 },
- { "CTRL", 0x63 }, { "LALT", 0x64 }, { "RALT", 0x65 }, { "LAMI", 0x66 },
- { "RAMI", 0x67 }, { "HELP", 0x5F },
-
- { "LBRACKET", 0x1A }, { "RBRACKET", 0x1B }, { "SEMICOLON", 0x29 },
- { "COMMA", 0x38 }, { "PERIOD", 0x39 }, { "SLASH", 0x3A },
- { "BACKSLASH", 0x0D }, { "QUOTE", 0x2A }, { "NUMBERSIGN", 0x2B },
- { "LTGT", 0x30 }, { "BACKQUOTE", 0x00 }, { "MINUS", 0x0B },
- { "EQUAL", 0x0C },
-
- { NULL, 0 },
+ { KEYCODE_a, 0x20 },
+ { KEYCODE_b, 0x35 },
+ { KEYCODE_c, 0x33 },
+ { KEYCODE_d, 0x22 },
+ { KEYCODE_e, 0x12 },
+ { KEYCODE_f, 0x23 },
+ { KEYCODE_g, 0x24 },
+ { KEYCODE_h, 0x25 },
+ { KEYCODE_i, 0x17 },
+ { KEYCODE_j, 0x26 },
+ { KEYCODE_k, 0x27 },
+ { KEYCODE_l, 0x28 },
+ { KEYCODE_m, 0x37 },
+ { KEYCODE_n, 0x36 },
+ { KEYCODE_o, 0x18 },
+ { KEYCODE_p, 0x19 },
+ { KEYCODE_q, 0x10 },
+ { KEYCODE_r, 0x13 },
+ { KEYCODE_s, 0x21 },
+ { KEYCODE_t, 0x14 },
+ { KEYCODE_u, 0x16 },
+ { KEYCODE_v, 0x34 },
+ { KEYCODE_w, 0x11 },
+ { KEYCODE_x, 0x32 },
+ { KEYCODE_y, 0x15 },
+ { KEYCODE_z, 0x31 },
+
+ { KEYCODE_0, 0x0A },
+ { KEYCODE_1, 0x01 },
+ { KEYCODE_2, 0x02 },
+ { KEYCODE_3, 0x03 },
+ { KEYCODE_4, 0x04 },
+ { KEYCODE_5, 0x05 },
+ { KEYCODE_6, 0x06 },
+ { KEYCODE_7, 0x07 },
+ { KEYCODE_8, 0x08 },
+ { KEYCODE_9, 0x09 },
+
+ { KEYCODE_KP_0, 0x0F },
+ { KEYCODE_KP_1, 0x1D },
+ { KEYCODE_KP_2, 0x1E },
+ { KEYCODE_KP_3, 0x1F },
+ { KEYCODE_KP_4, 0x2D },
+ { KEYCODE_KP_5, 0x2E },
+ { KEYCODE_KP_6, 0x2F },
+ { KEYCODE_KP_7, 0x3D },
+ { KEYCODE_KP_8, 0x3E },
+ { KEYCODE_KP_9, 0x3F },
+
+ { KEYCODE_KP_DIVIDE, 0x5C },
+ { KEYCODE_KP_MULTIPLY, 0x5D },
+ { KEYCODE_KP_MINUS, 0x4A },
+ { KEYCODE_KP_PLUS, 0x5E },
+ { KEYCODE_KP_PERIOD, 0x3C },
+ { KEYCODE_KP_ENTER, 0x43 },
+ { KEYCODE_KP_LPAREN, 0x5A },
+ { KEYCODE_KP_RPAREN, 0x5B },
+
+ { KEYCODE_F1, 0x50 },
+ { KEYCODE_F2, 0x51 },
+ { KEYCODE_F3, 0x52 },
+ { KEYCODE_F4, 0x53 },
+ { KEYCODE_F5, 0x54 },
+ { KEYCODE_F6, 0x55 },
+ { KEYCODE_F7, 0x56 },
+ { KEYCODE_F8, 0x57 },
+ { KEYCODE_F9, 0x58 },
+ { KEYCODE_F10, 0x59 },
+
+ { KEYCODE_UP, 0x4C },
+ { KEYCODE_DOWN, 0x4D },
+ { KEYCODE_LEFT, 0x4F },
+ { KEYCODE_RIGHT, 0x4E },
+
+ { KEYCODE_SPACE, 0x40 },
+ { KEYCODE_BACKSPACE, 0x41 },
+ { KEYCODE_TAB, 0x42 },
+ { KEYCODE_RETURN, 0x44 },
+ { KEYCODE_ESCAPE, 0x45 },
+ { KEYCODE_DELETE, 0x46 },
+
+ { KEYCODE_LSHIFT, 0x60 },
+ { KEYCODE_RSHIFT, 0x61 },
+ { KEYCODE_CAPSLOCK, 0x62 },
+ { KEYCODE_LCTRL, 0x63 },
+ { KEYCODE_RCTRL, 0x63 },
+ { KEYCODE_LALT, 0x64 },
+ { KEYCODE_RALT, 0x65 },
+ { KEYCODE_LAMIGA, 0x66 },
+ { KEYCODE_RAMIGA, 0x67 },
+ { KEYCODE_HELP, 0x5F },
+
+ { KEYCODE_LBRACKET, 0x1A },
+ { KEYCODE_RBRACKET, 0x1B },
+ { KEYCODE_SEMICOLON, 0x29 },
+ { KEYCODE_COMMA, 0x38 },
+ { KEYCODE_PERIOD, 0x39 },
+ { KEYCODE_SLASH, 0x3A },
+ { KEYCODE_BACKSLASH, 0x0D },
+ { KEYCODE_QUOTE, 0x2A },
+ { KEYCODE_NUMBERSIGN, 0x2B },
+ { KEYCODE_LTGT, 0x30 },
+ { KEYCODE_BACKQUOTE, 0x00 },
+ { KEYCODE_MINUS, 0x0B },
+ { KEYCODE_EQUAL, 0x0C },
+
+ { KEYCODE_UNDEFINED, 0xff },
};
static uint8_t buffer[16];
return 0xffff;
}
-void set_key(const char *key, int down)
+void set_amiga_key(enum keycode key, int down)
{
int code = -1, isdown;
int i;
- for (i = 0; keycodes[i].key; i++) {
- if (!strcmp(keycodes[i].key, key)) {
+ for (i = 0; keycodes[i].key != KEYCODE_UNDEFINED; i++) {
+ if (keycodes[i].key == key) {
code = keycodes[i].code;
break;
}
}
if (code < 0 || code >= 0x80) {
- print_error("Key code '%s' unknown, please fix!\n", key);
+#ifdef DEBUG_KEYS
+ printf("Key code '%d' unknown, please fix!\n", key);
+#endif
return;
}
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include "../../include/keycodes.h"
#include "../libsdl/sdl.h"
#ifdef HAVE_OVR
#include "../libovr/ovr.h"
if (keycode == KEYCODE_PAUSE && down)
help_view ^= 1;
- /* in help view we don't need to forward keypresses */
+ /* in help view we must not forward keypresses */
if (help_view)
return;
switch (keycode) {
case KEYCODE_LSHIFT:
- set_key("LSH", down);
+ set_amiga_key(keycode, down);
shift = down;
break;
case KEYCODE_RSHIFT:
- set_key("RSH", down);
+ set_amiga_key(keycode, down);
shift = down;
break;
case KEYCODE_LEFT:
if (shift && down) {
- set_key("LF", down);
+ set_amiga_key(keycode, down);
set_joystick(-1, -1, -1, -1, -1);
break;
}
- set_key("LF", 0);
+ set_amiga_key(keycode, 0);
set_joystick(down, -1, -1, -1, -1);
break;
case KEYCODE_RIGHT:
if (shift && down) {
- set_key("RT", down);
+ set_amiga_key(keycode, down);
set_joystick(-1, -1, -1, -1, -1);
break;
}
- set_key("RT", 0);
+ set_amiga_key(keycode, 0);
set_joystick(-1, down, -1, -1, -1);
break;
case KEYCODE_UP:
if (shift && down) {
- set_key("UP", down);
+ set_amiga_key(keycode, down);
set_joystick(-1, -1, -1, -1, -1);
break;
}
- set_key("UP", 0);
+ set_amiga_key(keycode, 0);
set_joystick(-1, -1, down, -1, -1);
break;
case KEYCODE_DOWN:
if (shift && down) {
- set_key("DN", down);
+ set_amiga_key(keycode, down);
set_joystick(-1, -1, -1, -1, -1);
break;
}
- set_key("DN", 0);
+ set_amiga_key(keycode, 0);
set_joystick(-1, -1, -1, down, -1);
break;
case KEYCODE_END:
set_joystick(-1, -1, -1, -1, down);
break;
-
- case KEYCODE_a: set_key("A", down); break;
- case KEYCODE_b: set_key("B", down); break;
- case KEYCODE_c: set_key("C", down); break;
- case KEYCODE_d: set_key("D", down); break;
- case KEYCODE_e: set_key("E", down); break;
- case KEYCODE_f: set_key("F", down); break;
- case KEYCODE_g: set_key("G", down); break;
- case KEYCODE_h: set_key("H", down); break;
- case KEYCODE_i: set_key("I", down); break;
- case KEYCODE_j: set_key("J", down); break;
- case KEYCODE_k: set_key("K", down); break;
- case KEYCODE_l: set_key("L", down); break;
- case KEYCODE_m: set_key("M", down); break;
- case KEYCODE_n: set_key("N", down); break;
- case KEYCODE_o: set_key("O", down); break;
- case KEYCODE_p: set_key("P", down); break;
- case KEYCODE_q: set_key("Q", down); break;
- case KEYCODE_r: set_key("R", down); break;
- case KEYCODE_s: set_key("S", down); break;
- case KEYCODE_t: set_key("T", down); break;
- case KEYCODE_u: set_key("U", down); break;
- case KEYCODE_v: set_key("V", down); break;
- case KEYCODE_w: set_key("W", down); break;
- case KEYCODE_x: set_key("X", down); break;
- case KEYCODE_y: set_key("Y", down); break;
- case KEYCODE_z: set_key("Z", down); break;
-
- case KEYCODE_0: set_key("0", down); break;
- case KEYCODE_1: set_key("1", down); break;
- case KEYCODE_2: set_key("2", down); break;
- case KEYCODE_3: set_key("3", down); break;
- case KEYCODE_4: set_key("4", down); break;
- case KEYCODE_5: set_key("5", down); break;
- case KEYCODE_6: set_key("6", down); break;
- case KEYCODE_7: set_key("7", down); break;
- case KEYCODE_8: set_key("8", down); break;
- case KEYCODE_9: set_key("9", down); break;
-
- case KEYCODE_KP_0: set_key("NP0", down); break;
- case KEYCODE_KP_1: set_key("NP1", down); break;
- case KEYCODE_KP_2: set_key("NP2", down); break;
- case KEYCODE_KP_3: set_key("NP3", down); break;
- case KEYCODE_KP_4: set_key("NP4", down); break;
- case KEYCODE_KP_5: set_key("NP5", down); break;
- case KEYCODE_KP_6: set_key("NP6", down); break;
- case KEYCODE_KP_7: set_key("NP7", down); break;
- case KEYCODE_KP_8: set_key("NP8", down); break;
- case KEYCODE_KP_9: set_key("NP9", down); break;
- case KEYCODE_KP_DIVIDE: set_key("NPDIV", down); break;
- case KEYCODE_KP_MULTIPLY: set_key("NPMUL", down); break;
- case KEYCODE_KP_MINUS: set_key("NPSUB", down); break;
- case KEYCODE_KP_PLUS: set_key("NPADD", down); break;
- case KEYCODE_KP_PERIOD: set_key("NPDEL", down); break;
- // NPLPAREN and NPRPAREN are not emulated
-
- case KEYCODE_F1: set_key("F1", down); break;
- case KEYCODE_F2: set_key("F2", down); break;
- case KEYCODE_F3: set_key("F3", down); break;
- case KEYCODE_F4: set_key("F4", down); break;
- case KEYCODE_F5: set_key("F5", down); break;
- case KEYCODE_F6: set_key("F6", down); break;
- case KEYCODE_F7: set_key("F7", down); break;
- case KEYCODE_F8: set_key("F8", down); break;
- case KEYCODE_F9: set_key("F9", down); break;
- case KEYCODE_F10: set_key("F10", down); break;
-
- case KEYCODE_SPACE: set_key("SPC", down); break;
- case KEYCODE_BACKSPACE: set_key("BS", down); break;
- case KEYCODE_TAB: set_key("TAB", down); break;
- case KEYCODE_KP_ENTER: set_key("ENT", down); break;
- case KEYCODE_RETURN: set_key("RET", down); break;
- case KEYCODE_ESCAPE: set_key("ESC", down); break;
- case KEYCODE_DELETE: set_key("DEL", down); break;
- case KEYCODE_INSERT: set_key("HELP", down); break;
-
- default: break;
+ case KEYCODE_INSERT:
+ set_amiga_key(KEYCODE_HELP, down);
+ break;
+ default:
+ set_amiga_key(keycode, down);
}
}