#ifndef input_H
#define input_H

#include <stdlib.h>
#include "num_types.h"
#include <SDL2/SDL_keycode.h>
#include <SDL2/SDL_mouse.h>
#include <SDL2/SDL_events.h>

enum Key_State
{
	KS_INACTIVE = -1,
	KS_PRESSED  = SDL_PRESSED,
	KS_RELEASED = SDL_RELEASED
};

enum Mouse_Mode
{
	MM_NORMAL = 0,
	MM_RELATIVE
};

enum Mouse_Button
{
	MSB_LEFT   = SDL_BUTTON_LEFT,
	MSB_MIDDLE = SDL_BUTTON_MIDDLE,
	MSB_RIGHT  = SDL_BUTTON_RIGHT,
	MSB_X1     = SDL_BUTTON_X1,
	MSB_X2     = SDL_BUTTON_X2
};

enum Keyboard_Key
{
	KEY_A            = SDLK_a,
	KEY_B            = SDLK_b,
	KEY_C            = SDLK_c,
	KEY_D            = SDLK_d,
	KEY_E            = SDLK_e,
	KEY_F            = SDLK_f,
	KEY_G            = SDLK_g,
	KEY_H            = SDLK_h,
	KEY_I            = SDLK_i,
	KEY_J            = SDLK_j,
	KEY_K            = SDLK_k,
	KEY_L            = SDLK_l,
	KEY_M            = SDLK_m,
	KEY_N            = SDLK_n,
	KEY_O            = SDLK_o,
	KEY_P            = SDLK_p,
	KEY_Q            = SDLK_q,
	KEY_R            = SDLK_r,
	KEY_S            = SDLK_s,
	KEY_T            = SDLK_t,
	KEY_U            = SDLK_u,
	KEY_V            = SDLK_v,
	KEY_W            = SDLK_w,
	KEY_X            = SDLK_x,
	KEY_Y            = SDLK_y,
	KEY_Z            = SDLK_z,
	KEY_0            = SDLK_0,
	KEY_1            = SDLK_1,
	KEY_2            = SDLK_2,
	KEY_3            = SDLK_3,
	KEY_4            = SDLK_4,
	KEY_5            = SDLK_5,
	KEY_6            = SDLK_6,
	KEY_7            = SDLK_7,
	KEY_8            = SDLK_8,
	KEY_9            = SDLK_9,
	KEY_BACKSPACE    = SDLK_BACKSPACE,
	KEY_TAB          = SDLK_TAB,
	KEY_RETURN       = SDLK_RETURN,
	KEY_RETURN2      = SDLK_RETURN2,
	KEY_KP_ENTER     = SDLK_KP_ENTER,
	KEY_SHIFT        = SDLK_LSHIFT,
	KEY_CTRL         = SDLK_LCTRL,
	KEY_ALT          = SDLK_LALT,
	KEY_GUI          = SDLK_LGUI,
	KEY_PAUSE        = SDLK_PAUSE,
	KEY_CAPSLOCK     = SDLK_CAPSLOCK,
	KEY_ESCAPE       = SDLK_ESCAPE,
	KEY_SPACE        = SDLK_SPACE,
	KEY_PAGEUP       = SDLK_PAGEUP,
	KEY_PAGEDOWN     = SDLK_PAGEDOWN,
	KEY_END          = SDLK_END,
	KEY_HOME         = SDLK_HOME,
	KEY_LEFT         = SDLK_LEFT,
	KEY_UP           = SDLK_UP,
	KEY_RIGHT        = SDLK_RIGHT,
	KEY_DOWN         = SDLK_DOWN,
	KEY_SELECT       = SDLK_SELECT,
	KEY_PRINTSCREEN  = SDLK_PRINTSCREEN,
	KEY_INSERT       = SDLK_INSERT,
	KEY_DELETE       = SDLK_DELETE,
	KEY_LGUI         = SDLK_LGUI,
	KEY_RGUI         = SDLK_RGUI,
	KEY_APPLICATION  = SDLK_APPLICATION,
	KEY_KP_0         = SDLK_KP_0,
	KEY_KP_1         = SDLK_KP_1,
	KEY_KP_2         = SDLK_KP_2,
	KEY_KP_3         = SDLK_KP_3,
	KEY_KP_4         = SDLK_KP_4,
	KEY_KP_5         = SDLK_KP_5,
	KEY_KP_6         = SDLK_KP_6,
	KEY_KP_7         = SDLK_KP_7,
	KEY_KP_8         = SDLK_KP_8,
	KEY_KP_9         = SDLK_KP_9,
	KEY_KP_MULTIPLY  = SDLK_KP_MULTIPLY,
	KEY_KP_PLUS      = SDLK_KP_PLUS,
	KEY_KP_MINUS     = SDLK_KP_MINUS,
	KEY_KP_PERIOD    = SDLK_KP_PERIOD,
	KEY_KP_DIVIDE    = SDLK_KP_DIVIDE,
	KEY_F1           = SDLK_F1,
	KEY_F2           = SDLK_F2,
	KEY_F3           = SDLK_F3,
	KEY_F4           = SDLK_F4,
	KEY_F5           = SDLK_F5,
	KEY_F6           = SDLK_F6,
	KEY_F7           = SDLK_F7,
	KEY_F8           = SDLK_F8,
	KEY_F9           = SDLK_F9,
	KEY_F10          = SDLK_F10,
	KEY_F11          = SDLK_F11,
	KEY_F12          = SDLK_F12,
	KEY_F13          = SDLK_F13,
	KEY_F14          = SDLK_F14,
	KEY_F15          = SDLK_F15,
	KEY_F16          = SDLK_F16,
	KEY_F17          = SDLK_F17,
	KEY_F18          = SDLK_F18,
	KEY_F19          = SDLK_F19,
	KEY_F20          = SDLK_F20,
	KEY_F21          = SDLK_F21,
	KEY_F22          = SDLK_F22,
	KEY_F23          = SDLK_F23,
	KEY_F24          = SDLK_F24,
	KEY_NUMLOCKCLEAR = SDLK_NUMLOCKCLEAR,
	KEY_SCROLLLOCK   = SDLK_SCROLLLOCK,
	KEY_LSHIFT       = SDLK_LSHIFT,
	KEY_RSHIFT       = SDLK_RSHIFT,
	KEY_LCTRL        = SDLK_LCTRL,
	KEY_RCTRL        = SDLK_RCTRL,
	KEY_LALT         = SDLK_LALT,
	KEY_RALT         = SDLK_RALT
};

enum Keyboard_Scancode
{
	SCANCODE_UNKNOWN            = SDL_SCANCODE_UNKNOWN,
	SCANCODE_CTRL               = SDL_SCANCODE_LCTRL,
	SCANCODE_SHIFT              = SDL_SCANCODE_LSHIFT,
	SCANCODE_ALT                = SDL_SCANCODE_LALT,
	SCANCODE_GUI                = SDL_SCANCODE_LGUI,
	SCANCODE_A                  = SDL_SCANCODE_A,
	SCANCODE_B                  = SDL_SCANCODE_B,
	SCANCODE_C                  = SDL_SCANCODE_C,
	SCANCODE_D                  = SDL_SCANCODE_D,
	SCANCODE_E                  = SDL_SCANCODE_E,
	SCANCODE_F                  = SDL_SCANCODE_F,
	SCANCODE_G                  = SDL_SCANCODE_G,
	SCANCODE_H                  = SDL_SCANCODE_H,
	SCANCODE_I                  = SDL_SCANCODE_I,
	SCANCODE_J                  = SDL_SCANCODE_J,
	SCANCODE_K                  = SDL_SCANCODE_K,
	SCANCODE_L                  = SDL_SCANCODE_L,
	SCANCODE_M                  = SDL_SCANCODE_M,
	SCANCODE_N                  = SDL_SCANCODE_N,
	SCANCODE_O                  = SDL_SCANCODE_O,
	SCANCODE_P                  = SDL_SCANCODE_P,
	SCANCODE_Q                  = SDL_SCANCODE_Q,
	SCANCODE_R                  = SDL_SCANCODE_R,
	SCANCODE_S                  = SDL_SCANCODE_S,
	SCANCODE_T                  = SDL_SCANCODE_T,
	SCANCODE_U                  = SDL_SCANCODE_U,
	SCANCODE_V                  = SDL_SCANCODE_V,
	SCANCODE_W                  = SDL_SCANCODE_W,
	SCANCODE_X                  = SDL_SCANCODE_X,
	SCANCODE_Y                  = SDL_SCANCODE_Y,
	SCANCODE_Z                  = SDL_SCANCODE_Z,
	SCANCODE_1                  = SDL_SCANCODE_1,
	SCANCODE_2                  = SDL_SCANCODE_2,
	SCANCODE_3                  = SDL_SCANCODE_3,
	SCANCODE_4                  = SDL_SCANCODE_4,
	SCANCODE_5                  = SDL_SCANCODE_5,
	SCANCODE_6                  = SDL_SCANCODE_6,
	SCANCODE_7                  = SDL_SCANCODE_7,
	SCANCODE_8                  = SDL_SCANCODE_8,
	SCANCODE_9                  = SDL_SCANCODE_9,
	SCANCODE_0                  = SDL_SCANCODE_0,
	SCANCODE_RETURN             = SDL_SCANCODE_RETURN,
	SCANCODE_ESCAPE             = SDL_SCANCODE_ESCAPE,
	SCANCODE_BACKSPACE          = SDL_SCANCODE_BACKSPACE,
	SCANCODE_TAB                = SDL_SCANCODE_TAB,
	SCANCODE_SPACE              = SDL_SCANCODE_SPACE,
	SCANCODE_MINUS              = SDL_SCANCODE_MINUS,
	SCANCODE_EQUALS             = SDL_SCANCODE_EQUALS,
	SCANCODE_LEFTBRACKET        = SDL_SCANCODE_LEFTBRACKET,
	SCANCODE_RIGHTBRACKET       = SDL_SCANCODE_RIGHTBRACKET,
	SCANCODE_BACKSLASH          = SDL_SCANCODE_BACKSLASH,
	SCANCODE_NONUSHASH          = SDL_SCANCODE_NONUSHASH,
	SCANCODE_SEMICOLON          = SDL_SCANCODE_SEMICOLON,
	SCANCODE_APOSTROPHE         = SDL_SCANCODE_APOSTROPHE,
	SCANCODE_GRAVE              = SDL_SCANCODE_GRAVE,
	SCANCODE_COMMA              = SDL_SCANCODE_COMMA,
	SCANCODE_PERIOD             = SDL_SCANCODE_PERIOD,
	SCANCODE_SLASH              = SDL_SCANCODE_SLASH,
	SCANCODE_CAPSLOCK           = SDL_SCANCODE_CAPSLOCK,
	SCANCODE_F1                 = SDL_SCANCODE_F1,
	SCANCODE_F2                 = SDL_SCANCODE_F2,
	SCANCODE_F3                 = SDL_SCANCODE_F3,
	SCANCODE_F4                 = SDL_SCANCODE_F4,
	SCANCODE_F5                 = SDL_SCANCODE_F5,
	SCANCODE_F6                 = SDL_SCANCODE_F6,
	SCANCODE_F7                 = SDL_SCANCODE_F7,
	SCANCODE_F8                 = SDL_SCANCODE_F8,
	SCANCODE_F9                 = SDL_SCANCODE_F9,
	SCANCODE_F10                = SDL_SCANCODE_F10,
	SCANCODE_F11                = SDL_SCANCODE_F11,
	SCANCODE_F12                = SDL_SCANCODE_F12,
	SCANCODE_PRINTSCREEN        = SDL_SCANCODE_PRINTSCREEN,
	SCANCODE_SCROLLLOCK         = SDL_SCANCODE_SCROLLLOCK,
	SCANCODE_PAUSE              = SDL_SCANCODE_PAUSE,
	SCANCODE_INSERT             = SDL_SCANCODE_INSERT,
	SCANCODE_HOME               = SDL_SCANCODE_HOME,
	SCANCODE_PAGEUP             = SDL_SCANCODE_PAGEUP,
	SCANCODE_DELETE             = SDL_SCANCODE_DELETE,
	SCANCODE_END                = SDL_SCANCODE_END,
	SCANCODE_PAGEDOWN           = SDL_SCANCODE_PAGEDOWN,
	SCANCODE_RIGHT              = SDL_SCANCODE_RIGHT,
	SCANCODE_LEFT               = SDL_SCANCODE_LEFT,
	SCANCODE_DOWN               = SDL_SCANCODE_DOWN,
	SCANCODE_UP                 = SDL_SCANCODE_UP,
	SCANCODE_NUMLOCKCLEAR       = SDL_SCANCODE_NUMLOCKCLEAR,
	SCANCODE_KP_DIVIDE          = SDL_SCANCODE_KP_DIVIDE,
	SCANCODE_KP_MULTIPLY        = SDL_SCANCODE_KP_MULTIPLY,
	SCANCODE_KP_MINUS           = SDL_SCANCODE_KP_MINUS,
	SCANCODE_KP_PLUS            = SDL_SCANCODE_KP_PLUS,
	SCANCODE_KP_ENTER           = SDL_SCANCODE_KP_ENTER,
	SCANCODE_KP_1               = SDL_SCANCODE_KP_1,
	SCANCODE_KP_2               = SDL_SCANCODE_KP_2,
	SCANCODE_KP_3               = SDL_SCANCODE_KP_3,
	SCANCODE_KP_4               = SDL_SCANCODE_KP_4,
	SCANCODE_KP_5               = SDL_SCANCODE_KP_5,
	SCANCODE_KP_6               = SDL_SCANCODE_KP_6,
	SCANCODE_KP_7               = SDL_SCANCODE_KP_7,
	SCANCODE_KP_8               = SDL_SCANCODE_KP_8,
	SCANCODE_KP_9               = SDL_SCANCODE_KP_9,
	SCANCODE_KP_0               = SDL_SCANCODE_KP_0,
	SCANCODE_KP_PERIOD          = SDL_SCANCODE_KP_PERIOD,
	SCANCODE_NONUSBACKSLASH     = SDL_SCANCODE_NONUSBACKSLASH,
	SCANCODE_APPLICATION        = SDL_SCANCODE_APPLICATION,
	SCANCODE_POWER              = SDL_SCANCODE_POWER,
	SCANCODE_KP_EQUALS          = SDL_SCANCODE_KP_EQUALS,
	SCANCODE_F13                = SDL_SCANCODE_F13,
	SCANCODE_F14                = SDL_SCANCODE_F14,
	SCANCODE_F15                = SDL_SCANCODE_F15,
	SCANCODE_F16                = SDL_SCANCODE_F16,
	SCANCODE_F17                = SDL_SCANCODE_F17,
	SCANCODE_F18                = SDL_SCANCODE_F18,
	SCANCODE_F19                = SDL_SCANCODE_F19,
	SCANCODE_F20                = SDL_SCANCODE_F20,
	SCANCODE_F21                = SDL_SCANCODE_F21,
	SCANCODE_F22                = SDL_SCANCODE_F22,
	SCANCODE_F23                = SDL_SCANCODE_F23,
	SCANCODE_F24                = SDL_SCANCODE_F24,
	SCANCODE_EXECUTE            = SDL_SCANCODE_EXECUTE,
	SCANCODE_HELP               = SDL_SCANCODE_HELP,
	SCANCODE_MENU               = SDL_SCANCODE_MENU,
	SCANCODE_SELECT             = SDL_SCANCODE_SELECT,
	SCANCODE_STOP               = SDL_SCANCODE_STOP,
	SCANCODE_AGAIN              = SDL_SCANCODE_AGAIN,
	SCANCODE_UNDO               = SDL_SCANCODE_UNDO,
	SCANCODE_CUT                = SDL_SCANCODE_CUT,
	SCANCODE_COPY               = SDL_SCANCODE_COPY,
	SCANCODE_PASTE              = SDL_SCANCODE_PASTE,
	SCANCODE_FIND               = SDL_SCANCODE_FIND,
	SCANCODE_MUTE               = SDL_SCANCODE_MUTE,
	SCANCODE_VOLUMEUP           = SDL_SCANCODE_VOLUMEUP,
	SCANCODE_VOLUMEDOWN         = SDL_SCANCODE_VOLUMEDOWN,
	SCANCODE_KP_COMMA           = SDL_SCANCODE_KP_COMMA,
	SCANCODE_KP_EQUALSAS400     = SDL_SCANCODE_KP_EQUALSAS400,
	SCANCODE_INTERNATIONAL1     = SDL_SCANCODE_INTERNATIONAL1,
	SCANCODE_INTERNATIONAL2     = SDL_SCANCODE_INTERNATIONAL2,
	SCANCODE_INTERNATIONAL3     = SDL_SCANCODE_INTERNATIONAL3,
	SCANCODE_INTERNATIONAL4     = SDL_SCANCODE_INTERNATIONAL4,
	SCANCODE_INTERNATIONAL5     = SDL_SCANCODE_INTERNATIONAL5,
	SCANCODE_INTERNATIONAL6     = SDL_SCANCODE_INTERNATIONAL6,
	SCANCODE_INTERNATIONAL7     = SDL_SCANCODE_INTERNATIONAL7,
	SCANCODE_INTERNATIONAL8     = SDL_SCANCODE_INTERNATIONAL8,
	SCANCODE_INTERNATIONAL9     = SDL_SCANCODE_INTERNATIONAL9,
	SCANCODE_LANG1              = SDL_SCANCODE_LANG1,
	SCANCODE_LANG2              = SDL_SCANCODE_LANG2,
	SCANCODE_LANG3              = SDL_SCANCODE_LANG3,
	SCANCODE_LANG4              = SDL_SCANCODE_LANG4,
	SCANCODE_LANG5              = SDL_SCANCODE_LANG5,
	SCANCODE_LANG6              = SDL_SCANCODE_LANG6,
	SCANCODE_LANG7              = SDL_SCANCODE_LANG7,
	SCANCODE_LANG8              = SDL_SCANCODE_LANG8,
	SCANCODE_LANG9              = SDL_SCANCODE_LANG9,
	SCANCODE_ALTERASE           = SDL_SCANCODE_ALTERASE,
	SCANCODE_SYSREQ             = SDL_SCANCODE_SYSREQ,
	SCANCODE_CANCEL             = SDL_SCANCODE_CANCEL,
	SCANCODE_CLEAR              = SDL_SCANCODE_CLEAR,
	SCANCODE_PRIOR              = SDL_SCANCODE_PRIOR,
	SCANCODE_RETURN2            = SDL_SCANCODE_RETURN2,
	SCANCODE_SEPARATOR          = SDL_SCANCODE_SEPARATOR,
	SCANCODE_OUT                = SDL_SCANCODE_OUT,
	SCANCODE_OPER               = SDL_SCANCODE_OPER,
	SCANCODE_CLEARAGAIN         = SDL_SCANCODE_CLEARAGAIN,
	SCANCODE_CRSEL              = SDL_SCANCODE_CRSEL,
	SCANCODE_EXSEL              = SDL_SCANCODE_EXSEL,
	SCANCODE_KP_00              = SDL_SCANCODE_KP_00,
	SCANCODE_KP_000             = SDL_SCANCODE_KP_000,
	SCANCODE_THOUSANDSSEPARATOR = SDL_SCANCODE_THOUSANDSSEPARATOR,
	SCANCODE_DECIMALSEPARATOR   = SDL_SCANCODE_DECIMALSEPARATOR,
	SCANCODE_CURRENCYUNIT       = SDL_SCANCODE_CURRENCYUNIT,
	SCANCODE_CURRENCYSUBUNIT    = SDL_SCANCODE_CURRENCYSUBUNIT,
	SCANCODE_KP_LEFTPAREN       = SDL_SCANCODE_KP_LEFTPAREN,
	SCANCODE_KP_RIGHTPAREN      = SDL_SCANCODE_KP_RIGHTPAREN,
	SCANCODE_KP_LEFTBRACE       = SDL_SCANCODE_KP_LEFTBRACE,
	SCANCODE_KP_RIGHTBRACE      = SDL_SCANCODE_KP_RIGHTBRACE,
	SCANCODE_KP_TAB             = SDL_SCANCODE_KP_TAB,
	SCANCODE_KP_BACKSPACE       = SDL_SCANCODE_KP_BACKSPACE,
	SCANCODE_KP_A               = SDL_SCANCODE_KP_A,
	SCANCODE_KP_B               = SDL_SCANCODE_KP_B,
	SCANCODE_KP_C               = SDL_SCANCODE_KP_C,
	SCANCODE_KP_D               = SDL_SCANCODE_KP_D,
	SCANCODE_KP_E               = SDL_SCANCODE_KP_E,
	SCANCODE_KP_F               = SDL_SCANCODE_KP_F,
	SCANCODE_KP_XOR             = SDL_SCANCODE_KP_XOR,
	SCANCODE_KP_POWER           = SDL_SCANCODE_KP_POWER,
	SCANCODE_KP_PERCENT         = SDL_SCANCODE_KP_PERCENT,
	SCANCODE_KP_LESS            = SDL_SCANCODE_KP_LESS,
	SCANCODE_KP_GREATER         = SDL_SCANCODE_KP_GREATER,
	SCANCODE_KP_AMPERSAND       = SDL_SCANCODE_KP_AMPERSAND,
	SCANCODE_KP_DBLAMPERSAND    = SDL_SCANCODE_KP_DBLAMPERSAND,
	SCANCODE_KP_VERTICALBAR     = SDL_SCANCODE_KP_VERTICALBAR,
	SCANCODE_KP_DBLVERTICALBAR  = SDL_SCANCODE_KP_DBLVERTICALBAR,
	SCANCODE_KP_COLON           = SDL_SCANCODE_KP_COLON,
	SCANCODE_KP_HASH            = SDL_SCANCODE_KP_HASH,
	SCANCODE_KP_SPACE           = SDL_SCANCODE_KP_SPACE,
	SCANCODE_KP_AT              = SDL_SCANCODE_KP_AT,
	SCANCODE_KP_EXCLAM          = SDL_SCANCODE_KP_EXCLAM,
	SCANCODE_KP_MEMSTORE        = SDL_SCANCODE_KP_MEMSTORE,
	SCANCODE_KP_MEMRECALL       = SDL_SCANCODE_KP_MEMRECALL,
	SCANCODE_KP_MEMCLEAR        = SDL_SCANCODE_KP_MEMCLEAR,
	SCANCODE_KP_MEMADD          = SDL_SCANCODE_KP_MEMADD,
	SCANCODE_KP_MEMSUBTRACT     = SDL_SCANCODE_KP_MEMSUBTRACT,
	SCANCODE_KP_MEMMULTIPLY     = SDL_SCANCODE_KP_MEMMULTIPLY,
	SCANCODE_KP_MEMDIVIDE       = SDL_SCANCODE_KP_MEMDIVIDE,
	SCANCODE_KP_PLUSMINUS       = SDL_SCANCODE_KP_PLUSMINUS,
	SCANCODE_KP_CLEAR           = SDL_SCANCODE_KP_CLEAR,
	SCANCODE_KP_CLEARENTRY      = SDL_SCANCODE_KP_CLEARENTRY,
	SCANCODE_KP_BINARY          = SDL_SCANCODE_KP_BINARY,
	SCANCODE_KP_OCTAL           = SDL_SCANCODE_KP_OCTAL,
	SCANCODE_KP_DECIMAL         = SDL_SCANCODE_KP_DECIMAL,
	SCANCODE_KP_HEXADECIMAL     = SDL_SCANCODE_KP_HEXADECIMAL,
	SCANCODE_LCTRL              = SDL_SCANCODE_LCTRL,
	SCANCODE_LSHIFT             = SDL_SCANCODE_LSHIFT,
	SCANCODE_LALT               = SDL_SCANCODE_LALT,
	SCANCODE_LGUI               = SDL_SCANCODE_LGUI,
	SCANCODE_RCTRL              = SDL_SCANCODE_RCTRL,
	SCANCODE_RSHIFT             = SDL_SCANCODE_RSHIFT,
	SCANCODE_RALT               = SDL_SCANCODE_RALT,
	SCANCODE_RGUI               = SDL_SCANCODE_RGUI,
	SCANCODE_MODE               = SDL_SCANCODE_MODE,
	SCANCODE_AUDIONEXT          = SDL_SCANCODE_AUDIONEXT,
	SCANCODE_AUDIOPREV          = SDL_SCANCODE_AUDIOPREV,
	SCANCODE_AUDIOSTOP          = SDL_SCANCODE_AUDIOSTOP,
	SCANCODE_AUDIOPLAY          = SDL_SCANCODE_AUDIOPLAY,
	SCANCODE_AUDIOMUTE          = SDL_SCANCODE_AUDIOMUTE,
	SCANCODE_MEDIASELECT        = SDL_SCANCODE_MEDIASELECT,
	SCANCODE_WWW                = SDL_SCANCODE_WWW,
	SCANCODE_MAIL               = SDL_SCANCODE_MAIL,
	SCANCODE_CALCULATOR         = SDL_SCANCODE_CALCULATOR,
	SCANCODE_COMPUTER           = SDL_SCANCODE_COMPUTER,
	SCANCODE_AC_SEARCH          = SDL_SCANCODE_AC_SEARCH,
	SCANCODE_AC_HOME            = SDL_SCANCODE_AC_HOME,
	SCANCODE_AC_BACK            = SDL_SCANCODE_AC_BACK,
	SCANCODE_AC_FORWARD         = SDL_SCANCODE_AC_FORWARD,
	SCANCODE_AC_STOP            = SDL_SCANCODE_AC_STOP,
	SCANCODE_AC_REFRESH         = SDL_SCANCODE_AC_REFRESH,
	SCANCODE_AC_BOOKMARKS       = SDL_SCANCODE_AC_BOOKMARKS,
	SCANCODE_BRIGHTNESSDOWN     = SDL_SCANCODE_BRIGHTNESSDOWN,
	SCANCODE_BRIGHTNESSUP       = SDL_SCANCODE_BRIGHTNESSUP,
	SCANCODE_DISPLAYSWITCH      = SDL_SCANCODE_DISPLAYSWITCH,
	SCANCODE_KBDILLUMTOGGLE     = SDL_SCANCODE_KBDILLUMTOGGLE,
	SCANCODE_KBDILLUMDOWN       = SDL_SCANCODE_KBDILLUMDOWN,
	SCANCODE_KBDILLUMUP         = SDL_SCANCODE_KBDILLUMUP,
	SCANCODE_EJECT              = SDL_SCANCODE_EJECT,
	SCANCODE_SLEEP              = SDL_SCANCODE_SLEEP,
	SCANCODE_APP1               = SDL_SCANCODE_APP1,
	SCANCODE_APP2               = SDL_SCANCODE_APP2
};

void input_init(void);
void input_cleanup(void);
int  input_mousebutton_state_get(uint button, int state_type);
int  input_is_key_pressed(int key);
void input_mouse_pos_get(int* xpos, int* ypos);
void input_mouse_delta_get(int* xpos, int* ypos); // Use with relative mouse mode
void input_mouse_pos_set(int xpos, int ypos);
void input_mouse_mode_set(enum Mouse_Mode mode);
int  input_mouse_mode_get(void);
void input_update(void);
int  input_map_state_get(const char* map_name, int state);
void input_map_create(const char* name, int* keys, size_t num_keys);
int  input_map_remove(const char* name);
int  input_map_keys_set(const char* name, int* keys, int num_keys);
int  input_map_name_set(const char* name, const char* new_name);

#endif
