Make non-SDL code indipendent from SDL, fix keyboard issues
authorAndreas Eversberg <jolly@eversberg.eu>
Fri, 6 Apr 2018 13:42:05 +0000 (15:42 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Fri, 6 Apr 2018 13:42:05 +0000 (15:42 +0200)
src/libsdl/sdl.c
src/libsdl/sdl.h
src/mercenary/main.c

index bc19158..45f859d 100644 (file)
@@ -32,7 +32,7 @@ static int sdl_initialized = 0;
 static int audio_initialized = 0;
 static SDL_Window *gl_window = NULL;
 static SDL_GLContext gl_context = NULL;
-static void (*keyboard_sdl)(int down, SDL_Keycode sym) = NULL;
+static void (*keyboard_sdl)(int down, enum keycode keycode) = NULL;
 static void (*audio_sdl)(float *data, int len) = NULL;
 
 static void audio_cb(void __attribute__((unused)) *userdata, Uint8 *stream, int len)
@@ -44,7 +44,7 @@ static void audio_cb(void __attribute__((unused)) *userdata, Uint8 *stream, int
        SDL_MixAudio(stream, (Uint8 *)audio_data, len, SDL_MIX_MAXVOLUME);
 }
 
-int init_sdl(const char *progname, int width, int height, int sound_samplerate, int sound_chunk, void (*keyboard)(int down, SDL_Keycode sym), void (*audio)(float *data, int len), int multisampling)
+int init_sdl(const char *progname, int width, int height, int sound_samplerate, int sound_chunk, void (*keyboard)(int down, enum keycode keycode), void (*audio)(float *data, int len), int multisampling)
 {
        int rc;
 
@@ -72,7 +72,7 @@ int init_sdl(const char *progname, int width, int height, int sound_samplerate,
        /* open window */
        gl_window = SDL_CreateWindow(progname, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
        if (!gl_window) {
-               print_error("Failed to open SDL window: %s\n", SDL_GetError());
+               print_error("Failed to open SDL window: %s (try without multisampling)\n", SDL_GetError());
                rc = EIO;
                goto error;
        }
@@ -167,7 +167,93 @@ error:
        return rc;
 }
 
-static int key_ctrl = 0, fullscreen = 0;
+static enum keycode sdl2keycode(SDL_Keycode sym)
+{
+       switch (sym) {
+       case SDLK_LCTRL: return KEYCODE_LCTRL;
+       case SDLK_RCTRL: return KEYCODE_RCTRL;
+       case SDLK_LSHIFT: return KEYCODE_LSHIFT;
+       case SDLK_RSHIFT: return KEYCODE_RSHIFT;
+       case SDLK_PAUSE: return KEYCODE_PAUSE;
+       case SDLK_LEFT: return KEYCODE_LEFT;
+       case SDLK_RIGHT: return KEYCODE_RIGHT;
+       case SDLK_UP: return KEYCODE_UP;
+       case SDLK_DOWN: return KEYCODE_DOWN;
+       case SDLK_END: return KEYCODE_END;
+       case SDLK_a: return KEYCODE_a;
+       case SDLK_b: return KEYCODE_b;
+       case SDLK_c: return KEYCODE_c;
+       case SDLK_d: return KEYCODE_d;
+       case SDLK_e: return KEYCODE_e;
+       case SDLK_f: return KEYCODE_f;
+       case SDLK_g: return KEYCODE_g;
+       case SDLK_h: return KEYCODE_h;
+       case SDLK_i: return KEYCODE_i;
+       case SDLK_j: return KEYCODE_j;
+       case SDLK_k: return KEYCODE_k;
+       case SDLK_l: return KEYCODE_l;
+       case SDLK_m: return KEYCODE_m;
+       case SDLK_n: return KEYCODE_n;
+       case SDLK_o: return KEYCODE_o;
+       case SDLK_p: return KEYCODE_p;
+       case SDLK_q: return KEYCODE_q;
+       case SDLK_r: return KEYCODE_r;
+       case SDLK_s: return KEYCODE_s;
+       case SDLK_t: return KEYCODE_t;
+       case SDLK_u: return KEYCODE_u;
+       case SDLK_v: return KEYCODE_v;
+       case SDLK_w: return KEYCODE_w;
+       case SDLK_x: return KEYCODE_x;
+       case SDLK_y: return KEYCODE_y;
+       case SDLK_z: return KEYCODE_z;
+       case SDLK_0: return KEYCODE_0;
+       case SDLK_1: return KEYCODE_1;
+       case SDLK_2: return KEYCODE_2;
+       case SDLK_3: return KEYCODE_3;
+       case SDLK_4: return KEYCODE_4;
+       case SDLK_5: return KEYCODE_5;
+       case SDLK_6: return KEYCODE_6;
+       case SDLK_7: return KEYCODE_7;
+       case SDLK_8: return KEYCODE_8;
+       case SDLK_9: return KEYCODE_9;
+       case SDLK_KP_0: return KEYCODE_KP_0;
+       case SDLK_KP_1: return KEYCODE_KP_1;
+       case SDLK_KP_2: return KEYCODE_KP_2;
+       case SDLK_KP_3: return KEYCODE_KP_3;
+       case SDLK_KP_4: return KEYCODE_KP_4;
+       case SDLK_KP_5: return KEYCODE_KP_5;
+       case SDLK_KP_6: return KEYCODE_KP_6;
+       case SDLK_KP_7: return KEYCODE_KP_7;
+       case SDLK_KP_8: return KEYCODE_KP_8;
+       case SDLK_KP_9: return KEYCODE_KP_9;
+       case SDLK_KP_DIVIDE: return KEYCODE_KP_DIVIDE;
+       case SDLK_KP_MULTIPLY: return KEYCODE_KP_MULTIPLY;
+       case SDLK_KP_MINUS: return KEYCODE_KP_MINUS;
+       case SDLK_KP_PLUS: return KEYCODE_KP_PLUS;
+       case SDLK_KP_PERIOD: return KEYCODE_KP_PERIOD;
+       case SDLK_F1: return KEYCODE_F1;
+       case SDLK_F2: return KEYCODE_F2;
+       case SDLK_F3: return KEYCODE_F3;
+       case SDLK_F4: return KEYCODE_F4;
+       case SDLK_F5: return KEYCODE_F5;
+       case SDLK_F6: return KEYCODE_F6;
+       case SDLK_F7: return KEYCODE_F7;
+       case SDLK_F8: return KEYCODE_F8;
+       case SDLK_F9: return KEYCODE_F9;
+       case SDLK_F10: return KEYCODE_F10;
+       case SDLK_SPACE: return KEYCODE_SPACE;
+       case SDLK_BACKSPACE: return KEYCODE_BACKSPACE;
+       case SDLK_TAB: return KEYCODE_TAB;
+       case SDLK_KP_ENTER: return KEYCODE_KP_ENTER;
+       case SDLK_RETURN: return KEYCODE_RETURN;
+       case SDLK_ESCAPE: return KEYCODE_ESCAPE;
+       case SDLK_DELETE: return KEYCODE_DELETE;
+       case SDLK_INSERT: return KEYCODE_INSERT;
+       default: return KEYCODE_UNDEFINED;
+       }
+}
+
+static int key_ctrl = 0, key_f = 0, fullscreen = 0;
 
 int event_sdl(void)
 {
@@ -184,7 +270,7 @@ int event_sdl(void)
                if (event.type == SDL_KEYDOWN) {
                        switch (event.key.keysym.sym) {
                        case SDLK_f:
-                               if (key_ctrl) {
+                               if (key_ctrl && !key_f) {
                                        if (fullscreen) {
                                                fullscreen = 0;
                                                SDL_SetWindowFullscreen(gl_window, 0);
@@ -195,13 +281,14 @@ int event_sdl(void)
                                                fullscreen = 1;
                                        }
                                }
+                               key_f = 1;
                                break;
                        case SDLK_LCTRL:
                        case SDLK_RCTRL:
                                key_ctrl = 1;
                                break;
                        }
-                       keyboard_sdl(1, event.key.keysym.sym);
+                       keyboard_sdl(1, sdl2keycode(event.key.keysym.sym));
                }
                if (event.type == SDL_KEYUP) {
                        switch (event.key.keysym.sym) {
@@ -209,8 +296,11 @@ int event_sdl(void)
                        case SDLK_RCTRL:
                                key_ctrl = 0;
                                break;
+                       case SDLK_f:
+                               key_f = 0;
+                               break;
                        }
-                       keyboard_sdl(0, event.key.keysym.sym);
+                       keyboard_sdl(0, sdl2keycode(event.key.keysym.sym));
                }
        }
 
index 79a9cba..f44dc22 100644 (file)
@@ -1,6 +1,88 @@
-#include <SDL2/SDL.h>
 
-int init_sdl(const char *progname, int width, int height, int sound_samplerate, int sound_chunk, void (*keyboard)(int down, SDL_Keycode sym), void (*audio)(float *data, int len), int multisampling);
+enum keycode {
+       KEYCODE_UNDEFINED = 0,
+       KEYCODE_LCTRL,
+       KEYCODE_RCTRL,
+       KEYCODE_LSHIFT,
+       KEYCODE_RSHIFT,
+       KEYCODE_PAUSE,
+       KEYCODE_LEFT,
+       KEYCODE_RIGHT,
+       KEYCODE_UP,
+       KEYCODE_DOWN,
+       KEYCODE_END,
+       KEYCODE_a,
+       KEYCODE_b,
+       KEYCODE_c,
+       KEYCODE_d,
+       KEYCODE_e,
+       KEYCODE_f,
+       KEYCODE_g,
+       KEYCODE_h,
+       KEYCODE_i,
+       KEYCODE_j,
+       KEYCODE_k,
+       KEYCODE_l,
+       KEYCODE_m,
+       KEYCODE_n,
+       KEYCODE_o,
+       KEYCODE_p,
+       KEYCODE_q,
+       KEYCODE_r,
+       KEYCODE_s,
+       KEYCODE_t,
+       KEYCODE_u,
+       KEYCODE_v,
+       KEYCODE_w,
+       KEYCODE_x,
+       KEYCODE_y,
+       KEYCODE_z,
+       KEYCODE_0,
+       KEYCODE_1,
+       KEYCODE_2,
+       KEYCODE_3,
+       KEYCODE_4,
+       KEYCODE_5,
+       KEYCODE_6,
+       KEYCODE_7,
+       KEYCODE_8,
+       KEYCODE_9,
+       KEYCODE_KP_0,
+       KEYCODE_KP_1,
+       KEYCODE_KP_2,
+       KEYCODE_KP_3,
+       KEYCODE_KP_4,
+       KEYCODE_KP_5,
+       KEYCODE_KP_6,
+       KEYCODE_KP_7,
+       KEYCODE_KP_8,
+       KEYCODE_KP_9,
+       KEYCODE_KP_DIVIDE,
+       KEYCODE_KP_MULTIPLY,
+       KEYCODE_KP_MINUS,
+       KEYCODE_KP_PLUS,
+       KEYCODE_KP_PERIOD,
+       KEYCODE_F1,
+       KEYCODE_F2,
+       KEYCODE_F3,
+       KEYCODE_F4,
+       KEYCODE_F5,
+       KEYCODE_F6,
+       KEYCODE_F7,
+       KEYCODE_F8,
+       KEYCODE_F9,
+       KEYCODE_F10,
+       KEYCODE_SPACE,
+       KEYCODE_BACKSPACE,
+       KEYCODE_TAB,
+       KEYCODE_KP_ENTER,
+       KEYCODE_RETURN,
+       KEYCODE_ESCAPE,
+       KEYCODE_DELETE,
+       KEYCODE_INSERT,
+};
+
+int init_sdl(const char *progname, int width, int height, int sound_samplerate, int sound_chunk, void (*keyboard)(int down, enum keycode keycode), void (*audio)(float *data, int len), int multisampling);
 int event_sdl(void);
 void swap_sdl(void);
 void exit_sdl(void);
index cd0bd6a..5a427ad 100644 (file)
@@ -20,6 +20,7 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include "../libsdl/sdl.h"
@@ -307,7 +308,7 @@ static void main_loop(void)
        uint32_t palette_address;
        uint16_t palette[16];
 
-       last_time = SDL_GetTicks();
+       last_time = ticks_sdl();
 
        /* render result on window */
        while (!quit) {
@@ -405,7 +406,7 @@ static void main_loop(void)
                                opengl_blit_osd(0, help_osd, config_video_filter, (double_pixel_size) ? BENSON_AT_LINE * 2 : BENSON_AT_LINE, config_fov, benson_size, 1.0, 1.0, 0.0, 0.0);
                        if (osd_timer) {
                                opengl_blit_osd(1, info_osd, config_video_filter, (double_pixel_size) ? BENSON_AT_LINE * 2 : BENSON_AT_LINE, config_fov, benson_size, 0.5, 0.04, 0.5, -0.95);
-                               if (osd_timer - (int32_t)SDL_GetTicks() < 0)
+                               if (osd_timer - (int32_t)ticks_sdl() < 0)
                                        osd_timer = 0;
                        }
                }
@@ -418,7 +419,7 @@ static void main_loop(void)
                                opengl_blit_osd(0, help_osd, config_video_filter, 0, 0.0, 0, 1.0, 1.0, 0.0, 0.0);
                        if (osd_timer) {
                                opengl_blit_osd(1, info_osd, config_video_filter, 0, 0.0, 0, 0.5, 0.04, 0.5, -0.95);
-                               if (osd_timer - (int32_t)SDL_GetTicks() < 0)
+                               if (osd_timer - (int32_t)ticks_sdl() < 0)
                                        osd_timer = 0;
                        }
                }
@@ -432,7 +433,7 @@ static void main_loop(void)
                /* only do this, if we are not in help view */
                /* NOTE: We need initial IRQ, so we have out copper list initialized */
                if (!(had_first_irq && help_view)) {
-                       current_time = SDL_GetTicks();
+                       current_time = ticks_sdl();
                        diff = current_time - last_time;
                        /* in case of timer glitch, execute IRQ only by maximum number of SOUND_CHUNKS */
                        if (diff > 1000 * SOUND_CHUNKS / IRQ_RATE) {
@@ -624,42 +625,43 @@ static void osd_info(const char *param, const char *value)
        }
        strncpy(line + 25, value, strlen(value));
        text_render(info_osd, OSD_WIDTH, OSD_HEIGHT, line, 0x00, 4, 0, 0, 1);
-       osd_timer = SDL_GetTicks() + 2500;
+       osd_timer = ticks_sdl() + 2500;
 }
 
 static int shift = 0, ctrl = 0;
 
-static void keyboard_sdl(int down, SDL_Keycode sym)
+static void keyboard_sdl(int down, enum keycode keycode)
 {
-       switch (sym) {
-       case SDLK_LCTRL:
-       case SDLK_RCTRL:
+       switch (keycode) {
+       case KEYCODE_LCTRL:
+       case KEYCODE_RCTRL:
                ctrl = down;
                break;
+       default: break;
        }
 
        if (ctrl && down) {
-               switch (sym) {
-               case SDLK_h:
+               switch (keycode) {
+               case KEYCODE_h:
                        help_view ^= 1;
                        break;
-               case SDLK_v:
+               case KEYCODE_v:
                        config_video_filter ^= 1;
                        osd_info("video filter", (config_video_filter) ? "on" : "off");
                        break;
-               case SDLK_a:
+               case KEYCODE_a:
                        config_audio_filter ^= 1;
                        osd_info("audio filter", (config_audio_filter) ? "on" : "off");
                        break;
-               case SDLK_s:
+               case KEYCODE_s:
                        config_amiga_speed ^= 1;
                        osd_info("render speed", (config_amiga_speed) ? "original" : "fast");
                        break;
-               case SDLK_r:
+               case KEYCODE_r:
                        config_render ^= 1;
                        osd_info("render mode", (config_render) ? "OpenGL" : "original");
                        break;
-               case SDLK_b:
+               case KEYCODE_b:
                        if (!config_render) {
                                osd_info("", "not applicable");
                                break;
@@ -673,17 +675,17 @@ static void keyboard_sdl(int down, SDL_Keycode sym)
                        }
                        osd_info("Benson size", (config_benson_size == 0.5) ? "half" : "normal");
                        break;
-               case SDLK_i:
+               case KEYCODE_i:
                        if (!intro_skipped)
                                skip_intro();
                        else
                                osd_info("", "not applicable");
                        break;
-               case SDLK_c:
+               case KEYCODE_c:
                        if (config_ctrl_c)
                                quit = 1;
                        break;
-               case SDLK_KP_PLUS:
+               case KEYCODE_KP_PLUS:
                        if (config_fov / 1.2 >= FOV_MIN)
                                config_fov /= 1.2;
                        disp_fov:
@@ -693,32 +695,33 @@ static void keyboard_sdl(int down, SDL_Keycode sym)
                                osd_info("FOV", text);
                        }
                        break;
-               case SDLK_KP_MINUS:
+               case KEYCODE_KP_MINUS:
                        if (config_fov * 1.2 <= FOV_MAX)
                                config_fov *= 1.2;
                        goto disp_fov;
+               default: break;
                }
                /* do not pass keys to game while holding CTRL */
                return;
        }
 
-       if (sym == SDLK_PAUSE && down)
+       if (keycode == KEYCODE_PAUSE && down)
                help_view ^= 1;
 
        /* in help view we don't need to forward keypresses */
        if (help_view)
                return;
 
-       switch (sym) {
-       case SDLK_LSHIFT:
+       switch (keycode) {
+       case KEYCODE_LSHIFT:
                set_key("LSH", down);
                shift = down;
                break;
-       case SDLK_RSHIFT:
+       case KEYCODE_RSHIFT:
                set_key("RSH", down);
                shift = down;
                break;
-       case SDLK_LEFT:
+       case KEYCODE_LEFT:
                if (shift && down) {
                        set_key("LF", down);
                        set_joystick(-1, -1, -1, -1, -1);
@@ -727,7 +730,7 @@ static void keyboard_sdl(int down, SDL_Keycode sym)
                set_key("LF", 0);
                set_joystick(down, -1, -1, -1, -1);
                break;
-       case SDLK_RIGHT:
+       case KEYCODE_RIGHT:
                if (shift && down) {
                        set_key("RT", down);
                        set_joystick(-1, -1, -1, -1, -1);
@@ -736,7 +739,7 @@ static void keyboard_sdl(int down, SDL_Keycode sym)
                set_key("RT", 0);
                set_joystick(-1, down, -1, -1, -1);
                break;
-       case SDLK_UP:
+       case KEYCODE_UP:
                if (shift && down) {
                        set_key("UP", down);
                        set_joystick(-1, -1, -1, -1, -1);
@@ -745,7 +748,7 @@ static void keyboard_sdl(int down, SDL_Keycode sym)
                set_key("UP", 0);
                set_joystick(-1, -1, down, -1, -1);
                break;
-       case SDLK_DOWN:
+       case KEYCODE_DOWN:
                if (shift && down) {
                        set_key("DN", down);
                        set_joystick(-1, -1, -1, -1, -1);
@@ -754,85 +757,86 @@ static void keyboard_sdl(int down, SDL_Keycode sym)
                set_key("DN", 0);
                set_joystick(-1, -1, -1, down, -1);
                break;
-       case SDLK_END:
+       case KEYCODE_END:
                set_joystick(-1, -1, -1, -1, down);
                break;
 
-       case SDLK_a: set_key("A", down); break;
-       case SDLK_b: set_key("B", down); break;
-       case SDLK_c: set_key("C", down); break;
-       case SDLK_d: set_key("D", down); break;
-       case SDLK_e: set_key("E", down); break;
-       case SDLK_f: set_key("F", down); break;
-       case SDLK_g: set_key("G", down); break;
-       case SDLK_h: set_key("H", down); break;
-       case SDLK_i: set_key("I", down); break;
-       case SDLK_j: set_key("J", down); break;
-       case SDLK_k: set_key("K", down); break;
-       case SDLK_l: set_key("L", down); break;
-       case SDLK_m: set_key("M", down); break;
-       case SDLK_n: set_key("N", down); break;
-       case SDLK_o: set_key("O", down); break;
-       case SDLK_p: set_key("P", down); break;
-       case SDLK_q: set_key("Q", down); break;
-       case SDLK_r: set_key("R", down); break;
-       case SDLK_s: set_key("S", down); break;
-       case SDLK_t: set_key("T", down); break;
-       case SDLK_u: set_key("U", down); break;
-       case SDLK_v: set_key("V", down); break;
-       case SDLK_w: set_key("W", down); break;
-       case SDLK_x: set_key("X", down); break;
-       case SDLK_y: set_key("Y", down); break;
-       case SDLK_z: set_key("Z", down); break;
-
-       case SDLK_0: set_key("0", down); break;
-       case SDLK_1: set_key("1", down); break;
-       case SDLK_2: set_key("2", down); break;
-       case SDLK_3: set_key("3", down); break;
-       case SDLK_4: set_key("4", down); break;
-       case SDLK_5: set_key("5", down); break;
-       case SDLK_6: set_key("6", down); break;
-       case SDLK_7: set_key("7", down); break;
-       case SDLK_8: set_key("8", down); break;
-       case SDLK_9: set_key("9", down); break;
-
-       case SDLK_KP_0: set_key("NP0", down); break;
-       case SDLK_KP_1: set_key("NP1", down); break;
-       case SDLK_KP_2: set_key("NP2", down); break;
-       case SDLK_KP_3: set_key("NP3", down); break;
-       case SDLK_KP_4: set_key("NP4", down); break;
-       case SDLK_KP_5: set_key("NP5", down); break;
-       case SDLK_KP_6: set_key("NP6", down); break;
-       case SDLK_KP_7: set_key("NP7", down); break;
-       case SDLK_KP_8: set_key("NP8", down); break;
-       case SDLK_KP_9: set_key("NP9", down); break;
-       case SDLK_KP_DIVIDE: set_key("NPDIV", down); break;
-       case SDLK_KP_MULTIPLY: set_key("NPMUL", down); break;
-       case SDLK_KP_MINUS: set_key("NPSUB", down); break;
-       case SDLK_KP_PLUS: set_key("NPADD", down); break;
-       case SDLK_KP_PERIOD: set_key("NPDEL", 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 SDLK_F1: set_key("F1", down); break;
-       case SDLK_F2: set_key("F2", down); break;
-       case SDLK_F3: set_key("F3", down); break;
-       case SDLK_F4: set_key("F4", down); break;
-       case SDLK_F5: set_key("F5", down); break;
-       case SDLK_F6: set_key("F6", down); break;
-       case SDLK_F7: set_key("F7", down); break;
-       case SDLK_F8: set_key("F8", down); break;
-       case SDLK_F9: set_key("F9", down); break;
-       case SDLK_F10: set_key("F10", down); break;
-
-       case SDLK_SPACE: set_key("SPC", down); break;
-       case SDLK_BACKSPACE: set_key("BS", down); break;
-       case SDLK_TAB: set_key("TAB", down); break;
-       case SDLK_KP_ENTER: set_key("ENT", down); break;
-       case SDLK_RETURN: set_key("RET", down); break;
-       case SDLK_ESCAPE: set_key("ESC", down); break;
-       case SDLK_DELETE: set_key("DEL", down); break;
-       case SDLK_INSERT: set_key("HELP", down); break;
-
+       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;
        }
 }