diff options
author | Ron Yorston <rmy@pobox.com> | 2012-02-16 09:33:12 +0000 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2012-02-16 09:33:12 +0000 |
commit | 33d2e753332f0466a73e3a023dfc544a6e6eaeb4 (patch) | |
tree | bfce2c2adecb90f29225610b7cec0e0c98236cfa | |
parent | 4d8a277d59ad9c4036c9c595e0647a900f6bd7c8 (diff) | |
download | busybox-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.c | 40 |
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: |