#pragma once

#include "kint.h"

/**
 * A scan code -> keyboard char mapping
 */
struct kbd_scan_codes
{
	bool ascii;
	int symbol;
	/**
	 * Uppercase version of symbol
	 */
	int up_symbol;
	uchar prefix;
	bool brk;
};

/**
 * Non-char keyboard keys, assigned values above 7-bit ascii range (>128)
 */
enum kbd_keys
{
	FIRST_KBD_KEY = 129,
	KBD_BACKSPACE = 129,
	KBD_TAB,
	KBD_CAPS_LOCK,
	KBD_ENTER,
	KBD_LEFT_SHIFT,
	KBD_RIGHT_SHIFT,
	KBD_LEFT_CTRL,
	KBD_LEFT_ALT,
	KBD_SPACEBAR,
	KBD_RIGHT_ALT,
	KBD_RIGHT_CTRL,
	KBD_INSERT,
	KBD_DELETE,
	KBD_LEFT_ARROW,
	KBD_HOME,
	KBD_END,
	KBD_UP_ARROW,
	KBD_DOWN_ARROW,
	KBD_RIGHT_ARROW,
	KBD_NUM_LOCK,
	KBD_KEYPAD_0,
	KBD_KEYPAD_1,
	KBD_KEYPAD_2,
	KBD_KEYPAD_3,
	KBD_KEYPAD_4,
	KBD_KEYPAD_5,
	KBD_KEYPAD_6,
	KBD_KEYPAD_7,
	KBD_KEYPAD_8,
	KBD_KEYPAD_9,
	KBD_KEYPAD_DOT,
	KBD_KEYPAD_PLUS,
	KBD_KEYPAD_MINUS,
	KBD_KEYPAD_TIMES,
	KBD_KEYPAD_DIV,
	KBD_KEYPAD_ENTER,
	KBD_ESC,
	KBD_F1,
	KBD_F2,
	KBD_F3,
	KBD_F4,
	KBD_F5,
	KBD_F6,
	KBD_F7,
	KBD_F8,
	KBD_F9,
	KBD_F10,
	KBD_F11,
	KBD_F12,
	KBD_PRINT_SCREEN,
	KBD_SCROLL_LOCK,
	KBD_PAUSE_BREAK,
	KBD_PAGE_UP,
	KBD_PAGE_DOWN,
	LAST_KBD_KEY,
};

extern const struct kbd_scan_codes scan_code_set_3[0xff];
extern const struct kbd_scan_codes scan_code_set_1[0xff];
extern bool pressed_keys[LAST_KBD_KEY];
extern char special_key_mappings[LAST_KBD_KEY - FIRST_KBD_KEY];
