From d8005ac897ca2c6601d0aa33c631623d98e5d549 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Fri, 6 Apr 2018 15:42:05 +0200 Subject: [PATCH] Make non-SDL code indipendent from SDL, fix keyboard issues --- src/libsdl/sdl.c | 104 ++++++++++++++++++++++++-- src/libsdl/sdl.h | 86 ++++++++++++++++++++- src/mercenary/main.c | 208 ++++++++++++++++++++++++++------------------------- 3 files changed, 287 insertions(+), 111 deletions(-) diff --git a/src/libsdl/sdl.c b/src/libsdl/sdl.c index bc19158..45f859d 100644 --- a/src/libsdl/sdl.c +++ b/src/libsdl/sdl.c @@ -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)); } } diff --git a/src/libsdl/sdl.h b/src/libsdl/sdl.h index 79a9cba..f44dc22 100644 --- a/src/libsdl/sdl.h +++ b/src/libsdl/sdl.h @@ -1,6 +1,88 @@ -#include -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); diff --git a/src/mercenary/main.c b/src/mercenary/main.c index cd0bd6a..5a427ad 100644 --- a/src/mercenary/main.c +++ b/src/mercenary/main.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #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; } } -- 2.13.6