aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--win32/termios.c75
1 files changed, 33 insertions, 42 deletions
diff --git a/win32/termios.c b/win32/termios.c
index 3a381903c..45d4e7740 100644
--- a/win32/termios.c
+++ b/win32/termios.c
@@ -49,55 +49,46 @@ int64_t FAST_FUNC read_key(int fd, char *buf UNUSED_PARAM, int timeout)
49#else 49#else
50 if (!record.Event.KeyEvent.uChar.AsciiChar) { 50 if (!record.Event.KeyEvent.uChar.AsciiChar) {
51#endif 51#endif
52 if (alt_pressed) { 52 if (alt_pressed && !(state & ENHANCED_KEY)) {
53 /* keys on numeric pad used to enter character codes */
53 switch (record.Event.KeyEvent.wVirtualKeyCode) { 54 switch (record.Event.KeyEvent.wVirtualKeyCode) {
54 case VK_MENU: 55 case VK_NUMPAD0: case VK_INSERT:
55 case VK_INSERT: 56 case VK_NUMPAD1: case VK_END:
56 case VK_END: 57 case VK_NUMPAD2: case VK_DOWN:
57 case VK_DOWN: 58 case VK_NUMPAD3: case VK_NEXT:
58 case VK_NEXT: 59 case VK_NUMPAD4: case VK_LEFT:
59 case VK_CLEAR: 60 case VK_NUMPAD5: case VK_CLEAR:
60 case VK_HOME: 61 case VK_NUMPAD6: case VK_RIGHT:
61 case VK_UP: 62 case VK_NUMPAD7: case VK_HOME:
62 case VK_PRIOR: 63 case VK_NUMPAD8: case VK_UP:
63 case VK_KANA: 64 case VK_NUMPAD9: case VK_PRIOR:
64 continue; 65 continue;
65 } 66 }
66 } 67 }
67 68
68 switch (record.Event.KeyEvent.wVirtualKeyCode) { 69 switch (record.Event.KeyEvent.wVirtualKeyCode) {
69 case VK_DELETE: ret = KEYCODE_DELETE; goto done; 70 case VK_DELETE: ret = KEYCODE_DELETE; break;
70 case VK_INSERT: ret = KEYCODE_INSERT; goto done; 71 case VK_INSERT: ret = KEYCODE_INSERT; break;
71 case VK_UP: ret = KEYCODE_UP; goto done; 72 case VK_UP: ret = KEYCODE_UP; break;
72 case VK_DOWN: ret = KEYCODE_DOWN; goto done; 73 case VK_DOWN: ret = KEYCODE_DOWN; break;
73 case VK_RIGHT: 74 case VK_RIGHT: ret = KEYCODE_RIGHT; break;
74 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) { 75 case VK_LEFT: ret = KEYCODE_LEFT; break;
75 ret = KEYCODE_CTRL_RIGHT; 76 case VK_HOME: ret = KEYCODE_HOME; break;
76 goto done; 77 case VK_END: ret = KEYCODE_END; break;
77 } 78 case VK_PRIOR: ret = KEYCODE_PAGEUP; break;
78 if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) { 79 case VK_NEXT: ret = KEYCODE_PAGEDOWN; break;
79 ret = KEYCODE_ALT_RIGHT; 80 default:
80 goto done; 81 alt_pressed = FALSE;
81 } 82 continue;
82 ret = KEYCODE_RIGHT;
83 goto done;
84 case VK_LEFT:
85 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) {
86 ret = KEYCODE_CTRL_LEFT;
87 goto done;
88 }
89 if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED)) {
90 ret = KEYCODE_ALT_LEFT;
91 goto done;
92 }
93 ret = KEYCODE_LEFT;
94 goto done;
95 case VK_HOME: ret = KEYCODE_HOME; goto done;
96 case VK_END: ret = KEYCODE_END; goto done;
97 case VK_PRIOR: ret = KEYCODE_PAGEUP; goto done;
98 case VK_NEXT: ret = KEYCODE_PAGEDOWN; goto done;
99 } 83 }
100 continue; 84
85 if (state & (RIGHT_ALT_PRESSED|LEFT_ALT_PRESSED))
86 ret &= ~0x20;
87 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED))
88 ret &= ~0x40;
89 if (state & SHIFT_PRESSED)
90 ret &= ~0x80;
91 goto done;
101 } 92 }
102#if ENABLE_FEATURE_EURO 93#if ENABLE_FEATURE_EURO
103 uchar = record.Event.KeyEvent.uChar.UnicodeChar; 94 uchar = record.Event.KeyEvent.uChar.UnicodeChar;