#define CASE_IGNORE 0
#define CASE_FUNCTION 1
#define CASE_UP_ARROW 2
#define CASE_DOWN_ARROW 3
#define CASE_RIGHT_ARROW 4
#define CASE_LEFT_ARROW 5
#define CASE_RET_ENTR 6
#define F1_KEY 0x02
#define F2_KEY 0x03
#define F3_KEY 0x04
#define F4_KEY 0x05
#define F5_KEY 0x06
#define F6_KEY 0x07
#define F7_KEY 0x08
#define F8_KEY 0x09
#define F9_KEY 0x0a
#define F10_KEY 0x0b
#define F11_KEY 0x0c
#define F12_KEY 0x0d
#define RETURN_KEY 0x47
#define ENTER_KEY 0x5b
#define LEFT_ARROW_KEY 0x61
#define RIGHT_ARROW_KEY 0x63
#define UP_ARROW_KEY 0x57
#define DOWN_ARROW_KEY 0x62
#define HOME_KEY 0x20
#define INSERT_KEY 0x1f
#define END_KEY 0x35
#define PAGE_UP_KEY 0x21
#define PAGE_DOWN_KEY 0x36
#define LEFT_ARROW_KEY_CODE "\033OD"
#define RIGHT_ARROW_KEY_CODE "\033OC"
#define UP_ARROW_KEY_CODE "\033OA"
#define DOWN_ARROW_KEY_CODE "\033OB"
#define SHIFT_LEFT_ARROW_KEY_CODE "\033O2D"
#define SHIFT_RIGHT_ARROW_KEY_CODE "\033O2C"
#define SHIFT_UP_ARROW_KEY_CODE "\033O2A"
#define SHIFT_DOWN_ARROW_KEY_CODE "\033O2B"
#define CTRL_LEFT_ARROW_KEY_CODE "\033O5D"
#define CTRL_RIGHT_ARROW_KEY_CODE "\033O5C"
#define CTRL_UP_ARROW_KEY_CODE "\033O5A"
#define CTRL_DOWN_ARROW_KEY_CODE "\033O5B"
#define DELETE_KEY_CODE "\033[3~"
#define BACKSPACE_KEY_CODE "\177"
#define HOME_KEY_CODE "\033OH"
#define INSERT_KEY_CODE "\033[2~"
#define END_KEY_CODE "\033OF"
#define PAGE_UP_KEY_CODE "\033[5~"
#define PAGE_DOWN_KEY_CODE "\033[6~"
#define SHIFT_HOME_KEY_CODE "\033O2H"
#define SHIFT_END_KEY_CODE "\033O2F"
#define BEGIN_BRACKETED_PASTE_CODE "\033[200~"
#define END_BRACKETED_PASTE_CODE "\033[201~"
#define IS_DOWN_KEY(x) \
(info.key_states[(x) >> 3] & (1 << (7 - ((x) % 8))))