127 lines
3.2 KiB
C
127 lines
3.2 KiB
C
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include <kernel/x86/keyb.h>
|
|
|
|
bool is_shift_down = false;
|
|
|
|
|
|
kb_key_press_t decode_scancode(uint8_t scancode)
|
|
{return (kb_key_press_t) scancode;}
|
|
|
|
// TODO: check the shift scan code as a boolean, if yes ... blah blah
|
|
|
|
char decode_key_enum(kb_key_press_t keycode)
|
|
{
|
|
switch(keycode) {
|
|
case KEY_Q:
|
|
return (is_shift_down) ? 'Q' : 'q';
|
|
case KEY_W:
|
|
return (is_shift_down) ? 'W' : 'w';
|
|
case KEY_E:
|
|
return (is_shift_down) ? 'E' : 'e';
|
|
case KEY_R:
|
|
return (is_shift_down) ? 'R' : 'r';
|
|
case KEY_T:
|
|
return (is_shift_down) ? 'T' : 't';
|
|
case KEY_Y:
|
|
return (is_shift_down) ? 'Y' : 'y';
|
|
case KEY_U:
|
|
return (is_shift_down) ? 'U' : 'u';
|
|
case KEY_I:
|
|
return (is_shift_down) ? 'I' : 'i';
|
|
case KEY_O:
|
|
return (is_shift_down) ? 'O' : 'o';
|
|
case KEY_P:
|
|
return (is_shift_down) ? 'P' : 'p';
|
|
case KEY_A:
|
|
return (is_shift_down) ? 'A' : 'a';
|
|
case KEY_S:
|
|
return (is_shift_down) ? 'S' : 's';
|
|
case KEY_D:
|
|
return (is_shift_down) ? 'D' : 'd';
|
|
case KEY_F:
|
|
return (is_shift_down) ? 'F' : 'f';
|
|
case KEY_G:
|
|
return (is_shift_down) ? 'G' : 'g';
|
|
case KEY_H:
|
|
return (is_shift_down) ? 'H' : 'h';
|
|
case KEY_J:
|
|
return (is_shift_down) ? 'J' : 'j';
|
|
case KEY_K:
|
|
return (is_shift_down) ? 'K' : 'k';
|
|
case KEY_L:
|
|
return (is_shift_down) ? 'L' : 'l';
|
|
case KEY_Z:
|
|
return (is_shift_down) ? 'Z' : 'z';
|
|
case KEY_X:
|
|
return (is_shift_down) ? 'X' : 'x';
|
|
case KEY_C:
|
|
return (is_shift_down) ? 'C' : 'c';
|
|
case KEY_V:
|
|
return (is_shift_down) ? 'V' : 'v';
|
|
case KEY_B:
|
|
return (is_shift_down) ? 'B' : 'b';
|
|
case KEY_N:
|
|
return (is_shift_down) ? 'N' : 'n';
|
|
case KEY_M:
|
|
return (is_shift_down) ? 'M' : 'm';
|
|
case KEY_1:
|
|
return (is_shift_down) ? '!' : '1';
|
|
case KEY_2:
|
|
return (is_shift_down) ? '@' : '2';
|
|
case KEY_3:
|
|
return (is_shift_down) ? '#' : '3';
|
|
case KEY_4:
|
|
return (is_shift_down) ? '$' : '4';
|
|
case KEY_5:
|
|
return (is_shift_down) ? '%' : '5';
|
|
case KEY_6:
|
|
return (is_shift_down) ? '^' : '6';
|
|
case KEY_7:
|
|
return (is_shift_down) ? '&' : '7';
|
|
case KEY_8:
|
|
return (is_shift_down) ? '*' : '8';
|
|
case KEY_9:
|
|
return (is_shift_down) ? '(' : '9';
|
|
case KEY_0:
|
|
return (is_shift_down) ? ')' : '0';
|
|
case KEY_MINUS:
|
|
return (is_shift_down) ? '_' : '-';
|
|
case KEY_EQUALS:
|
|
return (is_shift_down) ? '=' : '+';
|
|
case KEY_LEFT_BRACKET:
|
|
return (is_shift_down) ? '{' : '[';
|
|
case KEY_RIGHT_BRACKET:
|
|
return (is_shift_down) ? '}' : ']';
|
|
case KEY_BACKSLASH:
|
|
return (is_shift_down) ? '|' : '\\';
|
|
case KEY_SEMICOLON:
|
|
return (is_shift_down) ? ':' : ';';
|
|
case KEY_SINGLE_QUOTE:
|
|
return (is_shift_down) ? '\"' : '\'';
|
|
case KEY_COMMA:
|
|
return (is_shift_down) ? '<' : ',';
|
|
case KEY_PERIOD:
|
|
return (is_shift_down) ? '>' : '.';
|
|
case KEY_FORWARDSLASH:
|
|
return (is_shift_down) ? '?' : '/';
|
|
case KEY_BACK_TICK:
|
|
return (is_shift_down) ? '~' : '`';
|
|
case KEY_ENTER:
|
|
return '\n';
|
|
case KEY_SPACE:
|
|
return ' ';
|
|
case KEY_LEFT_SHIFT:
|
|
case KEY_RIGHT_SHIFT:
|
|
is_shift_down = true;
|
|
return '\0';
|
|
case KEY_LEFT_SHIFT_R:
|
|
case KEY_RIGHT_SHIFT_R:
|
|
is_shift_down = false;
|
|
return '\0'; // TODO: should i send a character on a no op key?
|
|
default:
|
|
return '\0';
|
|
}
|
|
}
|