add key code to character translation helper function
This commit is contained in:
parent
365b628d66
commit
ff51055ff8
139
DGLKBRD.C
139
DGLKBRD.C
|
@ -31,6 +31,120 @@ volatile KEY _key_scan;
|
||||||
volatile uword key_flags;
|
volatile uword key_flags;
|
||||||
volatile uword key_mod;
|
volatile uword key_mod;
|
||||||
|
|
||||||
|
static char lookup_key_to_char[128] = {
|
||||||
|
0, 0, '1', '2', '3', '4', '5', '6', // 00 - 07
|
||||||
|
'7', '8', '9', '0', '-', '=', 0, '\t', // 08 - 0F
|
||||||
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', // 10 - 17
|
||||||
|
'o', 'p', '[', ']', 0, 0, 'a', 's', // 18 - 1F
|
||||||
|
'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', // 20 - 27
|
||||||
|
'\'', '`', 0, '\\', 'z', 'x', 'c', 'v', // 28 - 2F
|
||||||
|
'b', 'n', 'm', ',', '.', '/', 0, '*', // 30 - 37
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0, // 38 - 3F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 40 - 47
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 48 - 4F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 50 - 57
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 58 - 5F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 60 - 67
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 68 - 6F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 70 - 77
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0 // 78 - 7F
|
||||||
|
};
|
||||||
|
|
||||||
|
static char lookup_key_to_char_shift[128] = {
|
||||||
|
0, 0, '!', '@', '#', '$', '%', '^', // 00 - 07
|
||||||
|
'&', '*', '(', ')', '_', '+', 0, '\t', // 08 - 0F
|
||||||
|
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', // 10 - 17
|
||||||
|
'O', 'P', '{', '}', 0, 0, 'A', 'S', // 18 - 1F
|
||||||
|
'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', // 20 - 27
|
||||||
|
'"', '~', 0, '|', 'Z', 'X', 'C', 'V', // 28 - 2F
|
||||||
|
'B', 'N', 'M', '<', '>', '?', 0, '*', // 30 - 37
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0, // 38 - 3F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 40 - 47
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 48 - 4F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 50 - 57
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 58 - 5F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 60 - 67
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 68 - 6F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 70 - 77
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0 // 78 - 7F
|
||||||
|
};
|
||||||
|
|
||||||
|
static char lookup_key_to_char_caps[128] = {
|
||||||
|
0, 0, '1', '2', '3', '4', '5', '6', // 00 - 07
|
||||||
|
'7', '8', '9', '0', '-', '=', 0, '\t', // 08 - 0F
|
||||||
|
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', // 10 - 17
|
||||||
|
'O', 'P', '[', ']', 0, 0, 'A', 'S', // 18 - 1F
|
||||||
|
'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', // 20 - 27
|
||||||
|
'\'', '`', 0, '\\', 'Z', 'X', 'C', 'V', // 28 - 2F
|
||||||
|
'B', 'N', 'M', ',', '.', '/', 0, '*', // 30 - 37
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0, // 38 - 3F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 40 - 47
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 48 - 4F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 50 - 57
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 58 - 5F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 60 - 67
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 68 - 6F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 70 - 77
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0 // 78 - 7F
|
||||||
|
};
|
||||||
|
|
||||||
|
static char lookup_key_to_char_caps_shift[128] = {
|
||||||
|
0, 0, '!', '@', '#', '$', '%', '^', // 00 - 07
|
||||||
|
'&', '*', '(', ')', '_', '+', 0, '\t', // 08 - 0F
|
||||||
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', // 10 - 17
|
||||||
|
'o', 'p', '{', '}', 0, 0, 'a', 's', // 18 - 1F
|
||||||
|
'd', 'f', 'g', 'h', 'j', 'k', 'l', ':', // 20 - 27
|
||||||
|
'"', '~', 0, '|', 'z', 'x', 'c', 'v', // 28 - 2F
|
||||||
|
'b', 'n', 'm', '<', '>', '?', 0, '*', // 30 - 37
|
||||||
|
0, ' ', 0, 0, 0, 0, 0, 0, // 38 - 3F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 40 - 47
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 48 - 4F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 50 - 57
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 58 - 5F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 60 - 67
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 68 - 6F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 70 - 77
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0 // 78 - 7F
|
||||||
|
};
|
||||||
|
|
||||||
|
static char lookup_key_to_char_numpad[128] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 00 - 07
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 08 - 0F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 10 - 17
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 18 - 1F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 20 - 27
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 28 - 2F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 30 - 37
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 38 - 3F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, '7', // 40 - 47
|
||||||
|
'8', '9', '-', '4', '5', '6', '+', '1', // 48 - 4F
|
||||||
|
'2', '3', '0', '.', 0, 0, 0, 0, // 50 - 57
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 58 - 5F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 60 - 67
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 68 - 6F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 70 - 77
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0 // 78 - 7F
|
||||||
|
};
|
||||||
|
|
||||||
|
static char lookup_key_to_char_extended[128] = {
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 00 - 07
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 08 - 0F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 10 - 17
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 18 - 1F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 20 - 27
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 28 - 2F
|
||||||
|
0, 0, 0, 0, 0, '/', 0, 0, // 30 - 37
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 38 - 3F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 40 - 47
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 48 - 4F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 50 - 57
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 58 - 5F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 60 - 67
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 68 - 6F
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, // 70 - 77
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0 // 78 - 7F
|
||||||
|
};
|
||||||
|
|
||||||
void (interrupt far *_old_handler)();
|
void (interrupt far *_old_handler)();
|
||||||
|
|
||||||
static void reset_key_states() {
|
static void reset_key_states() {
|
||||||
|
@ -238,3 +352,28 @@ void keyboard_wait_for_key(KEY key) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char key_to_char(KEY key, uword modifiers) {
|
||||||
|
if (BIT_ISSET(KEYBRD_MOD_EXTENDED, modifiers)) {
|
||||||
|
return lookup_key_to_char_extended[(int)key];
|
||||||
|
}
|
||||||
|
else if ((key >= (KEY)0x47) && (key <= (KEY)0x53)) {
|
||||||
|
if (BIT_ISSET(KEYBRD_MOD_NUMLOCK, modifiers) &&
|
||||||
|
!BIT_ISSET(KEYBRD_MOD_SHIFT, modifiers))
|
||||||
|
return lookup_key_to_char_numpad[(int)key];
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
if (BIT_ISSET(KEYBRD_MOD_CAPSLOCK, modifiers)) {
|
||||||
|
if (BIT_ISSET(KEYBRD_MOD_SHIFT, modifiers))
|
||||||
|
return lookup_key_to_char_caps_shift[(int)key];
|
||||||
|
else
|
||||||
|
return lookup_key_to_char_caps[(int)key];
|
||||||
|
} else {
|
||||||
|
if (BIT_ISSET(KEYBRD_MOD_SHIFT, modifiers))
|
||||||
|
return lookup_key_to_char_shift[(int)key];
|
||||||
|
else
|
||||||
|
return lookup_key_to_char[(int)key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,5 +51,7 @@ KEY keyboard_read_key(void);
|
||||||
*/
|
*/
|
||||||
void keyboard_wait_for_key(KEY key);
|
void keyboard_wait_for_key(KEY key);
|
||||||
|
|
||||||
|
char key_to_char(KEY key, uword modifiers);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
void test_events(void) {
|
void test_events(void) {
|
||||||
boolean result;
|
boolean result;
|
||||||
INPUTEVENT *event;
|
INPUTEVENT *event;
|
||||||
|
char ch;
|
||||||
|
|
||||||
clrscr(0);
|
clrscr(0);
|
||||||
delay(500);
|
delay(500);
|
||||||
|
@ -29,10 +30,12 @@ void test_events(void) {
|
||||||
|
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
case EVENT_TYPE_KEYBOARD:
|
case EVENT_TYPE_KEYBOARD:
|
||||||
printf("KEYBOARD: %2d - %d (%d)\n",
|
ch = key_to_char(event->keyboard.key, event->keyboard.mod);
|
||||||
|
printf("KEYBOARD: %2d - %d (%d) - \"%c\"\n",
|
||||||
event->keyboard.key,
|
event->keyboard.key,
|
||||||
event->keyboard.action,
|
event->keyboard.action,
|
||||||
event->keyboard.mod);
|
event->keyboard.mod,
|
||||||
|
ch);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_TYPE_MOUSE_MOTION:
|
case EVENT_TYPE_MOUSE_MOTION:
|
||||||
|
|
Loading…
Reference in a new issue