#ifndef KEYS_H
#define KEYS_H

#define JES_KEY_MODS_MASK       0xFF000000u

#define JES_KEY_MODS_SHIFT      0x01000000u
#define JES_KEY_MODS_LOCK       0x02000000u
#define JES_KEY_MODS_CTRL       0x04000000u

#define JES_KEY_KEYCODE_MASK    0x00FFFFFFu

#define JES_KEY_F1              0x00FF0001u
#define JES_KEY_F2              0x00FF0002u
#define JES_KEY_F3              0x00FF0003u
#define JES_KEY_F4              0x00FF0004u
#define JES_KEY_F5              0x00FF0005u
#define JES_KEY_F6              0x00FF0006u
#define JES_KEY_F7              0x00FF0007u
#define JES_KEY_F8              0x00FF0008u
#define JES_KEY_F9              0x00FF0009u
#define JES_KEY_F10             0x00FF000Au
#define JES_KEY_F11             0x00FF000Bu
#define JES_KEY_F12             0x00FF000Cu
#define JES_KEY_F13             0x00FF000Du
#define JES_KEY_F14             0x00FF000Eu
#define JES_KEY_F15             0x00FF000Fu
#define JES_KEY_F16             0x00FF0010u
#define JES_KEY_F17             0x00FF0011u
#define JES_KEY_F18             0x00FF0012u
#define JES_KEY_F19             0x00FF0013u
#define JES_KEY_F20             0x00FF0014u
#define JES_KEY_F21             0x00FF0015u
#define JES_KEY_F22             0x00FF0016u
#define JES_KEY_F23             0x00FF0017u
#define JES_KEY_F24             0x00FF0018u
#define JES_KEY_F25             0x00FF0019u
#define JES_KEY_F26             0x00FF001Au
#define JES_KEY_F27             0x00FF001Bu
#define JES_KEY_F28             0x00FF001Cu
#define JES_KEY_F29             0x00FF001Du
#define JES_KEY_F30             0x00FF001Eu
#define JES_KEY_F31             0x00FF001Fu

#define JES_KEY_SHIFT_L         0x00FF0030u
#define JES_KEY_SHIFT_R         0x00FF0031u
#define JES_KEY_CTRL_L          0x00FF0032u
#define JES_KEY_CTRL_R          0x00FF0033u
#define JES_KEY_CAPS_LOCK       0x00FF0034u
#define JES_KEY_SHIFT_LOCK      0x00FF0035u

#define JES_KEY_META_L          0x00FF0036u
#define JES_KEY_META_R          0x00FF0037u
#define JES_KEY_ALT_L           0x00FF0038u
#define JES_KEY_ALT_R           0x00FF0039u
#define JES_KEY_SUPER_L         0x00FF003Au
#define JES_KEY_SUPER_R         0x00FF003Bu

#define JES_KEY_HOME            0x00FF003Cu
#define JES_KEY_LEFT            0x00FF003Du
#define JES_KEY_UP              0x00FF003Eu
#define JES_KEY_RIGHT           0x00FF003Fu
#define JES_KEY_DOWN            0x00FF0040u
#define JES_KEY_PAGE_UP         0x00FF0042u
#define JES_KEY_PAGE_DOWN       0x00FF0044u
#define JES_KEY_END             0x00FF0045u
#define JES_KEY_BEGIN           0x00FF0046u

#define JES_KEY_SELECT          0x00FF0047u
#define JES_KEY_PRINT           0x00FF0048u
#define JES_KEY_EXECUTE         0x00FF0049u
#define JES_KEY_INSERT          0x00FF004Au
#define JES_KEY_UNDO            0x00FF004Bu
#define JES_KEY_REDO            0x00FF004Cu
#define JES_KEY_MENU            0x00FF004Du
#define JES_KEY_FIND            0x00FF004Eu
#define JES_KEY_CANCEL          0x00FF004Fu
#define JES_KEY_HELP            0x00FF0050u
#define JES_KEY_BREAK           0x00FF0051u
#define JES_KEY_NUM_LOCK        0x00FF0054u

#define JES_KEY_KP_SPACE        0x00FF0055u
#define JES_KEY_KP_TAB          0x00FF0056u
#define JES_KEY_KP_ENTER        0x00FF0057u
#define JES_KEY_KP_F1           0x00FF0058u
#define JES_KEY_KP_F2           0x00FF0059u
#define JES_KEY_KP_F3           0x00FF005Au
#define JES_KEY_KP_F4           0x00FF005Bu
#define JES_KEY_KP_HOME         0x00FF005Cu
#define JES_KEY_KP_LEFT         0x00FF005Du
#define JES_KEY_KP_UP           0x00FF005Eu
#define JES_KEY_KP_RIGHT        0x00FF005Fu
#define JES_KEY_KP_DOWN         0x00FF0060u
#define JES_KEY_KP_PAGE_UP      0x00FF0062u
#define JES_KEY_KP_PAGE_DOWN    0x00FF0064u
#define JES_KEY_KP_END          0x00FF0065u
#define JES_KEY_KP_BEGIN        0x00FF0066u
#define JES_KEY_KP_INSERT       0x00FF0067u
#define JES_KEY_KP_DELETE       0x00FF0068u
#define JES_KEY_KP_EQUAL        0x00FF0069u
#define JES_KEY_KP_MULTIPLY     0x00FF006Au
#define JES_KEY_KP_ADD          0x00FF006Bu
#define JES_KEY_KP_SEPARATOR    0x00FF006Cu
#define JES_KEY_KP_SUBTRACT     0x00FF006Du
#define JES_KEY_KP_DECIMAL      0x00FF006Eu
#define JES_KEY_KP_DIVIDE       0x00FF006Fu

#define JES_KEY_KP_0            0x00FF0070u
#define JES_KEY_KP_1            0x00FF0071u
#define JES_KEY_KP_2            0x00FF0072u
#define JES_KEY_KP_3            0x00FF0073u
#define JES_KEY_KP_4            0x00FF0074u
#define JES_KEY_KP_5            0x00FF0075u
#define JES_KEY_KP_6            0x00FF0076u
#define JES_KEY_KP_7            0x00FF0077u
#define JES_KEY_KP_8            0x00FF0078u
#define JES_KEY_KP_9            0x00FF0079u

#define JES_KEY_UNKNOWN         0x00FFFFFFu

#endif
