Files
ToyBox/source/keyboard.c
T
2026-05-26 18:54:49 +10:00

140 lines
3.2 KiB
C

#include "keyboard.h"
#include "string.h"
KeyboardMap keyboardMap[] = {
{KEY_NULL, ""},
{KEY_APOSTROPHE, "APOSTROPHE"},
{KEY_COMMA, "COMMA"},
{KEY_MINUS, "MINUS"},
{KEY_PERIOD, "PERIOD"},
{KEY_SLASH, "SLASH"},
{KEY_ZERO, "ZERO"},
{KEY_ONE, "ONE"},
{KEY_TWO, "TWO"},
{KEY_THREE, "THREE"},
{KEY_FOUR, "FOUR"},
{KEY_FIVE, "FIVE"},
{KEY_SIX, "SIX"},
{KEY_SEVEN, "SEVEN"},
{KEY_EIGHT, "EIGHT"},
{KEY_NINE, "NINE"},
{KEY_SEMICOLON, "SEMICOLON"},
{KEY_EQUAL, "EQUAL"},
{KEY_A, "A"},
{KEY_B, "B"},
{KEY_C, "C"},
{KEY_D, "D"},
{KEY_E, "E"},
{KEY_F, "F"},
{KEY_G, "G"},
{KEY_H, "H"},
{KEY_I, "I"},
{KEY_J, "J"},
{KEY_K, "K"},
{KEY_L, "L"},
{KEY_M, "M"},
{KEY_N, "N"},
{KEY_O, "O"},
{KEY_P, "P"},
{KEY_Q, "Q"},
{KEY_R, "R"},
{KEY_S, "S"},
{KEY_T, "T"},
{KEY_U, "U"},
{KEY_V, "V"},
{KEY_W, "W"},
{KEY_X, "X"},
{KEY_Y, "Y"},
{KEY_Z, "Z"},
{KEY_LEFT_BRACKET, "LEFT_BRACKET"},
{KEY_BACKSLASH, "BACKSLASH"},
{KEY_RIGHT_BRACKET, "RIGHT_BRACKET"},
{KEY_GRAVE, "GRAVE"},
{KEY_SPACE, "SPACE"},
{KEY_ESCAPE, "ESCAPE"},
{KEY_ENTER, "ENTER"},
{KEY_TAB, "TAB"},
{KEY_BACKSPACE, "BACKSPACE"},
{KEY_INSERT, "INSERT"},
{KEY_DELETE, "DELETE"},
{KEY_RIGHT, "RIGHT"},
{KEY_LEFT, "LEFT"},
{KEY_DOWN, "DOWN"},
{KEY_UP, "UP"},
{KEY_PAGE_UP, "PAGE_UP"},
{KEY_PAGE_DOWN, "PAGE_DOWN"},
{KEY_HOME, "HOME"},
{KEY_END, "END"},
{KEY_CAPS_LOCK, "CAPS_LOCK"},
{KEY_SCROLL_LOCK, "SCROLL_LOCK"},
{KEY_NUM_LOCK, "NUM_LOCK"},
{KEY_PRINT_SCREEN, "PRINT_SCREEN"},
{KEY_PAUSE, "PAUSE"},
{KEY_F1, "F1"},
{KEY_F2, "F2"},
{KEY_F3, "F3"},
{KEY_F4, "F4"},
{KEY_F5, "F5"},
{KEY_F6, "F6"},
{KEY_F7, "F7"},
{KEY_F8, "F8"},
{KEY_F9, "F9"},
{KEY_F10, "F10"},
{KEY_F11, "F11"},
{KEY_F12, "F12"},
{KEY_LEFT_SHIFT, "LEFT_SHIFT"},
{KEY_LEFT_CONTROL, "LEFT_CONTROL"},
{KEY_LEFT_ALT, "LEFT_ALT"},
{KEY_LEFT_SUPER, "LEFT_SUPER"},
{KEY_RIGHT_SHIFT, "RIGHT_SHIFT"},
{KEY_RIGHT_CONTROL, "RIGHT_CONTROL"},
{KEY_RIGHT_ALT, "RIGHT_ALT"},
{KEY_RIGHT_SUPER, "RIGHT_SUPER"},
{KEY_KB_MENU, "KB_MENU"},
{KEY_KP_0, "KP_0"},
{KEY_KP_1, "KP_1"},
{KEY_KP_2, "KP_2"},
{KEY_KP_3, "KP_3"},
{KEY_KP_4, "KP_4"},
{KEY_KP_5, "KP_5"},
{KEY_KP_6, "KP_6"},
{KEY_KP_7, "KP_7"},
{KEY_KP_8, "KP_8"},
{KEY_KP_9, "KP_9"},
{KEY_KP_DECIMAL, "KP_DECIMAL"},
{KEY_KP_DIVIDE, "KP_DIVIDE"},
{KEY_KP_MULTIPLY, "KP_MULTIPLY"},
{KEY_KP_SUBTRACT, "KP_SUBTRACT"},
{KEY_KP_ADD, "KP_ADD"},
{KEY_KP_ENTER, "KP_ENTER"},
{KEY_KP_EQUAL, "KP_EQUAL"},
{KEY_BACK, "BACK"},
{KEY_MENU, "MENU"},
{KEY_VOLUME_UP, "VOLUME_UP"},
{KEY_VOLUME_DOWN, "VOLUME_DOWN"},
{0, NULL},
};
KeyboardData keyboardData = { //NOTE: it is just a dummy struct right now so the API looks nice
.type = OPAQUE_KEYBOARD,
};
Toy_Value handleKeyboardAttributes(Toy_VM* vm, Toy_Value compound, Toy_Value attribute) {
(void)vm;
(void)compound;
Toy_String* string = TOY_VALUE_AS_STRING(attribute);
const char* cstr = string->leaf.data;
//find the mapped value, if available
for (KeyboardMap* ptr = keyboardMap; ptr->cstr != NULL; ptr++) {
if (strlen(ptr->cstr) == strlen(cstr) && strncmp(cstr, ptr->cstr, strlen(ptr->cstr)) == 0) {
bool result = IsKeyPressed(ptr->raykey);
return TOY_VALUE_FROM_BOOLEAN(result);
}
}
//unknown key
return TOY_VALUE_FROM_NULL();
}