MCPcopy Create free account
hub / github.com/OpenDUNE/OpenDUNE / Input_Keyboard_HandleKeys

Function Input_Keyboard_HandleKeys

src/input/input.c:591–655  ·  view source on GitHub ↗

* Handle keyboard input. * @param value Combined keycode and modifier flags. * @return key value and modifier flags. (ASCII value or > 0x80) * @todo Most users seem to ignore the returned high byte, perhaps make it a * uint8 at some time in the future? */

Source from the content-addressed store, hash-verified

589 * uint8 at some time in the future?
590 */
591uint16 Input_Keyboard_HandleKeys(uint16 value)
592{
593 uint16 keyFlags;
594
595 keyFlags = value & 0xFF00;
596 value &= 0x00FF;
597
598 if ((keyFlags & 0x8000) != 0 || (keyFlags & 0x800) != 0) {
599 return 0; /* return on key up */
600 }
601
602 if (value == 0x6E) {
603 return keyFlags | 0x1B; /* ESCAPE */
604 }
605
606 if (value < 0x3E) { /* Printables Chars */
607 uint8 keySave = value & 0x3F;
608 uint16 asciiValue;
609
610 if ((keyFlags & 0x100) != 0) {
611 asciiValue = s_keymapShift[keySave];
612 } else {
613 asciiValue = s_keymapNormal[keySave];
614 }
615
616 if ((keyFlags & 0x200) != 0) { /* ALT */
617 if ((s_keymapSpecialMask[keySave >> 3] & (1 << (keySave & 7))) != 0) {
618 asciiValue &= 0x1F;
619 }
620 }
621 return keyFlags | asciiValue;
622 }
623
624 if (value < 0x4B) {
625 /* 0x3E - 0x4A : unused codes ? */
626 if (value >= 0x41) {
627 return keyFlags | (value + 0x85); /* 0x41-0x4A => 0xC6-0xCF */
628 }
629 return keyFlags | value | 0x80; /* 0x3E 0x3F 0x40 => 0xBE 0xBF 0xC0 */
630 }
631
632 if (value < 0x6E) {
633 /* 0x4B - 0x6D : Keypad + grey edit keys */
634 if (value >= 0x5A) {
635 return s_keymapNumlock[value - 0x5A];
636 } else {
637 /*return s_keymapNumpad[value - 0x4B]; CODE has been removed in 1b81370b006 */
638 }
639 }
640
641 if (value < 0x70 || value > 0x79) {
642 return keyFlags | value | 0x80;
643 }
644 value -= 0x70; /* F1-F10 Function keys */
645 if ((keyFlags & 0x700) != 0) {
646 if ((keyFlags & 0x400) == 0) { /* ? */
647 if ((keyFlags & 0x200) == 0) { /* ALT */
648 return keyFlags | (0xAC - value); /* 0xA3 - 0xAC */

Callers 4

GameLoop_HandleEventsFunction · 0.85
GUI_EditBoxFunction · 0.85
Input_WaitForValidInputFunction · 0.85
Input_Keyboard_NextKeyFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected