aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2012-02-16 09:33:12 +0000
committerRon Yorston <rmy@pobox.com>2012-02-16 09:33:12 +0000
commit33d2e753332f0466a73e3a023dfc544a6e6eaeb4 (patch)
treebfce2c2adecb90f29225610b7cec0e0c98236cfa
parent4d8a277d59ad9c4036c9c595e0647a900f6bd7c8 (diff)
downloadbusybox-w32-33d2e753332f0466a73e3a023dfc544a6e6eaeb4.tar.gz
busybox-w32-33d2e753332f0466a73e3a023dfc544a6e6eaeb4.tar.bz2
busybox-w32-33d2e753332f0466a73e3a023dfc544a6e6eaeb4.zip
Always reset console mode when returning key
-rw-r--r--win32/termios.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/win32/termios.c b/win32/termios.c
index 390b90382..12db40133 100644
--- a/win32/termios.c
+++ b/win32/termios.c
@@ -38,26 +38,34 @@ int64_t FAST_FUNC read_key(int fd, char *buf, int timeout)
38 38
39 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED) && 39 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED) &&
40 (record.Event.KeyEvent.wVirtualKeyCode >= 'A' && 40 (record.Event.KeyEvent.wVirtualKeyCode >= 'A' &&
41 record.Event.KeyEvent.wVirtualKeyCode <= 'Z')) 41 record.Event.KeyEvent.wVirtualKeyCode <= 'Z')) {
42 return record.Event.KeyEvent.wVirtualKeyCode & ~0x40; 42 ret = record.Event.KeyEvent.wVirtualKeyCode & ~0x40;
43 break;
44 }
43 45
44 switch (record.Event.KeyEvent.wVirtualKeyCode) { 46 switch (record.Event.KeyEvent.wVirtualKeyCode) {
45 case VK_DELETE: return KEYCODE_DELETE; 47 case VK_DELETE: ret = KEYCODE_DELETE; goto done;
46 case VK_INSERT: return KEYCODE_INSERT; 48 case VK_INSERT: ret = KEYCODE_INSERT; goto done;
47 case VK_UP: return KEYCODE_UP; 49 case VK_UP: ret = KEYCODE_UP; goto done;
48 case VK_DOWN: return KEYCODE_DOWN; 50 case VK_DOWN: ret = KEYCODE_DOWN; goto done;
49 case VK_RIGHT: 51 case VK_RIGHT:
50 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) 52 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) {
51 return KEYCODE_CTRL_RIGHT; 53 ret = KEYCODE_CTRL_RIGHT;
52 return KEYCODE_RIGHT; 54 goto done;
55 }
56 ret = KEYCODE_RIGHT;
57 goto done;
53 case VK_LEFT: 58 case VK_LEFT:
54 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) 59 if (state & (RIGHT_CTRL_PRESSED|LEFT_CTRL_PRESSED)) {
55 return KEYCODE_CTRL_LEFT; 60 ret = KEYCODE_CTRL_LEFT;
56 return KEYCODE_LEFT; 61 goto done;
57 case VK_HOME: return KEYCODE_HOME; 62 }
58 case VK_END: return KEYCODE_END; 63 ret = KEYCODE_LEFT;
59 case VK_PRIOR: return KEYCODE_PAGEUP; 64 goto done;
60 case VK_NEXT: return KEYCODE_PAGEDOWN; 65 case VK_HOME: ret = KEYCODE_HOME; goto done;
66 case VK_END: ret = KEYCODE_END; goto done;
67 case VK_PRIOR: ret = KEYCODE_PAGEUP; goto done;
68 case VK_NEXT: ret = KEYCODE_PAGEDOWN; goto done;
61 case VK_CAPITAL: 69 case VK_CAPITAL:
62 case VK_SHIFT: 70 case VK_SHIFT:
63 case VK_CONTROL: 71 case VK_CONTROL: