char getChar(){ /*I don't like allocating this memory every time a key is pressed but for now it works*/ unsigned char kbdus[128]= { 0, 27, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\b', '\t', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', 0, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', 0, '\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 0, '*', 0, ' ', 0, /* capslock */ 0, /* f1... */ 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ...f10 */ 0, /* numlock */ 0, /*scroll lock*/ 0, /*home*/ 0, /*uparrow*/ 0, /*pgup*/ '-', 0, /*leftarrow*/ 0, /*rightarrow*/ '+', 0, /*end*/ 0, /*downarrow*/ 0, /*pgdown*/ 0, /*insert*/ 0, /*delete*/ 0, 0, 0, 0, /*f11*/ 0, /*f12*/ 0, /*else*/ }; int result; result = getScancode(); if (result != (result & 127)){ return 0; } result = result & 127; unsigned char ret; ret = kbdus[result]; return (char) ret; }
static void keyboard_handler(registers_t* r) { // Get scancode uint8_t scancode = getScancode(); bool make = false; // Find out key. Issue events. KEY_t key = scancodeToKey(scancode, &make); if (key == __KEY_INVALID) { return; } if (make) { for (dlelement_t* e = console_displayed->tasks->head; e != 0; e = e->next) { event_issue(((task_t*)(e->data))->eventQueue, EVENT_KEY_DOWN, &key, sizeof(KEY_t)); } } else { for (dlelement_t* e = console_displayed->tasks->head; e != 0; e = e->next) { event_issue(((task_t*)(e->data))->eventQueue, EVENT_KEY_UP, &key, sizeof(KEY_t)); } return; } // Find out ASCII representation of key. Issue events. char ascii = keyToASCII(key); if (ascii) { for (dlelement_t* e = console_displayed->tasks->head; e != 0; e = e->next) { event_issue(((task_t*)(e->data))->eventQueue, EVENT_TEXT_ENTERED, &ascii, sizeof(char)); } } }