+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;