#ifndef _KEY_EVENT_H_
#define _KEY_EVENT_H_

#define EVENT_KEY_PRESSED  300
#define EVENT_KEY_RELEASED 301
#define EVENT_KEY_TYPED 302

#define J_CHAR_UNDEFINED 0xFFFF;
#define J_VK_ENTER          '\n'
#define J_VK_BACK_SPACE     '\b'
#define J_VK_TAB            '\t'
#define J_VK_CANCEL         0x03
#define J_VK_CLEAR          0x0C
#define J_VK_SHIFT          0x10
#define J_VK_CONTROL        0x11
#define J_VK_ALT            0x12
#define J_VK_PAUSE          0x13
#define J_VK_CAPS_LOCK      0x14
#define J_VK_ESCAPE         0x1B
#define J_VK_SPACE          0x20
#define J_VK_PAGE_UP        0x21
#define J_VK_PAGE_DOWN      0x22
#define J_VK_END            0x23
#define J_VK_HOME           0x24
#define J_VK_LEFT           0x25
#define J_VK_UP             0x26
#define J_VK_RIGHT          0x27
#define J_VK_DOWN           0x28
#define J_VK_COMMA          0x2C
#define J_VK_MINUS          0x2D
#define J_VK_PERIOD         0x2E
#define J_VK_SLASH          0x2F
#define J_VK_0              0x30
#define J_VK_1              0x31
#define J_VK_2              0x32
#define J_VK_3              0x33
#define J_VK_4              0x34
#define J_VK_5              0x35
#define J_VK_6              0x36
#define J_VK_7              0x37
#define J_VK_8              0x38
#define J_VK_9              0x39
#define J_VK_SEMICOLON      0x3B
#define J_VK_EQUALS         0x3D
#define J_VK_A              0x41
#define J_VK_B              0x42
#define J_VK_C              0x43
#define J_VK_D              0x44
#define J_VK_E              0x45
#define J_VK_F              0x46
#define J_VK_G              0x47
#define J_VK_H              0x48
#define J_VK_I              0x49
#define J_VK_J              0x4A
#define J_VK_K              0x4B
#define J_VK_L              0x4C
#define J_VK_M              0x4D
#define J_VK_N              0x4E
#define J_VK_O              0x4F
#define J_VK_P              0x50
#define J_VK_Q              0x51
#define J_VK_R              0x52
#define J_VK_S              0x53
#define J_VK_T              0x54
#define J_VK_U              0x55
#define J_VK_V              0x56
#define J_VK_W              0x57
#define J_VK_X              0x58
#define J_VK_Y              0x59
#define J_VK_Z              0x5A
#define J_VK_OPEN_BRACKET   0x5B
#define J_VK_BACK_SLASH     0x5C
#define J_VK_CLOSE_BRACKET  0x5D
#define J_VK_NUMPAD0        0x60
#define J_VK_NUMPAD1        0x61
#define J_VK_NUMPAD2        0x62
#define J_VK_NUMPAD3        0x63
#define J_VK_NUMPAD4        0x64
#define J_VK_NUMPAD5        0x65
#define J_VK_NUMPAD6        0x66
#define J_VK_NUMPAD7        0x67
#define J_VK_NUMPAD8        0x68
#define J_VK_NUMPAD9        0x69
#define J_VK_MULTIPLY       0x6A
#define J_VK_ADD            0x6B
#define J_VK_SEPARATOR      0x6C
#define J_VK_SUBTRACT       0x6D
#define J_VK_DECIMAL        0x6E
#define J_VK_DIVIDE         0x6F
#define J_VK_DELETE         0x7F /* ASCII DEL */
#define J_VK_NUM_LOCK       0x90
#define J_VK_SCROLL_LOCK    0x91
#define J_VK_F1             0x70
#define J_VK_F2             0x71
#define J_VK_F3             0x72
#define J_VK_F4             0x73
#define J_VK_F5             0x74
#define J_VK_F6             0x75
#define J_VK_F7             0x76
#define J_VK_F8             0x77
#define J_VK_F9             0x78
#define J_VK_F10            0x79
#define J_VK_F11            0x7A
#define J_VK_F12            0x7B
#define J_VK_F13            0xF000
#define J_VK_F14            0xF001
#define J_VK_F15            0xF002
#define J_VK_F16            0xF003
#define J_VK_F17            0xF004
#define J_VK_F18            0xF005
#define J_VK_F19            0xF006
#define J_VK_F20            0xF007
#define J_VK_F21            0xF008
#define J_VK_F22            0xF009
#define J_VK_F23            0xF00A
#define J_VK_F24            0xF00B
#define J_VK_PRINTSCREEN    0x9A
#define J_VK_INSERT         0x9B
#define J_VK_HELP           0x9C
#define J_VK_META           0x9D
#define J_VK_BACK_QUOTE     0xC0
#define J_VK_QUOTE          0xDE
#define J_VK_KP_UP          0xE0
#define J_VK_KP_DOWN        0xE1
#define J_VK_KP_LEFT        0xE2
#define J_VK_KP_RIGHT       0xE3
#define J_VK_DEAD_GRAVE               0x80
#define J_VK_DEAD_ACUTE               0x81
#define J_VK_DEAD_CIRCUMFLEX          0x82
#define J_VK_DEAD_TILDE               0x83
#define J_VK_DEAD_MACRON              0x84
#define J_VK_DEAD_BREVE               0x85
#define J_VK_DEAD_ABOVEDOT            0x86
#define J_VK_DEAD_DIAERESIS           0x87
#define J_VK_DEAD_ABOVERING           0x88
#define J_VK_DEAD_DOUBLEACUTE         0x89
#define J_VK_DEAD_CARON               0x8a
#define J_VK_DEAD_CEDILLA             0x8b
#define J_VK_DEAD_OGONEK              0x8c
#define J_VK_DEAD_IOTA                0x8d
#define J_VK_DEAD_VOICED_SOUND        0x8e
#define J_VK_DEAD_SEMIVOICED_SOUND    0x8f
#define J_VK_AMPERSAND                0x96
#define J_VK_ASTERISK                 0x97
#define J_VK_QUOTEDBL                 0x98
#define J_VK_LESS                     0x99
#define J_VK_GREATER                  0xa0
#define J_VK_BRACELEFT                0xa1
#define J_VK_BRACERIGHT               0xa2
#define J_VK_AT                       0x0200
#define J_VK_COLON                    0x0201
#define J_VK_CIRCUMFLEX               0x0202
#define J_VK_DOLLAR                   0x0203
#define J_VK_EURO_SIGN                0x0204
#define J_VK_EXCLAMATION_MARK         0x0205
#define J_VK_INVERTED_EXCLAMATION_MARK 0x0206
#define J_VK_LEFT_PARENTHESIS         0x0207
#define J_VK_NUMBER_SIGN              0x0208
#define J_VK_PLUS                     0x0209
#define J_VK_RIGHT_PARENTHESIS        0x020A
#define J_VK_UNDERSCORE               0x020B
#define J_VK_WINDOWS                  0x020C
#define J_VK_CONTEXT_MENU             0x020D
#define J_VK_FINAL                    0x0018
#define J_VK_CONVERT                  0x001C
#define J_VK_NONCONVERT               0x001D
#define J_VK_ACCEPT                   0x001E
#define J_VK_MODECHANGE               0x001F
#define J_VK_KANA                     0x0015
#define J_VK_KANJI                    0x0019
#define J_VK_ALPHANUMERIC             0x00F0
#define J_VK_KATAKANA                 0x00F1
#define J_VK_HIRAGANA                 0x00F2
#define J_VK_FULL_WIDTH               0x00F3
#define J_VK_HALF_WIDTH               0x00F4
#define J_VK_ROMAN_CHARACTERS         0x00F5
#define J_VK_ALL_CANDIDATES           0x0100
#define J_VK_PREVIOUS_CANDIDATE       0x0101
#define J_VK_CODE_INPUT               0x0102
#define J_VK_JAPANESE_KATAKANA        0x0103
#define J_VK_JAPANESE_HIRAGANA        0x0104
#define J_VK_JAPANESE_ROMAN           0x0105
#define J_VK_KANA_LOCK                0x0106
#define J_VK_INPUT_METHOD_ON_OFF      0x0107
#define J_VK_CUT                      0xFFD1
#define J_VK_COPY                     0xFFCD
#define J_VK_PASTE                    0xFFCF
#define J_VK_UNDO                     0xFFCB
#define J_VK_AGAIN                    0xFFC9
#define J_VK_FIND                     0xFFD0
#define J_VK_PROPS                    0xFFCA
#define J_VK_STOP                     0xFFC8
#define J_VK_COMPOSE                  0xFF20
#define J_VK_ALT_GRAPH                0xFF7E
#define J_VK_BEGIN                    0xFF58
#define J_VK_UNDEFINED      0x0

#endif