#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 = { .type = OPAQUE_KEYBOARD, .callback = &IsKeyDown, }; KeyboardData keyPressedData = { .type = OPAQUE_KEY_PRESSED, .callback = &IsKeyPressed, }; KeyboardData keyReleasedData = { .type = OPAQUE_KEY_RELEASED, .callback = &IsKeyReleased, }; Toy_Value handleKeyboardAttributes(Toy_VM* vm, Toy_Value compound, Toy_Value attribute) { (void)vm; KeyboardData* kd = (KeyboardData*)TOY_VALUE_AS_OPAQUE(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 = kd->callback(ptr->raykey); return TOY_VALUE_FROM_BOOLEAN(result); } } //unknown key return TOY_VALUE_FROM_NULL(); }