summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authormiere43 <x.miere@gmail.com>2016-06-26 16:01:37 +0300
committermiere43 <x.miere@gmail.com>2016-06-26 16:01:37 +0300
commit57bd50a9166fa4171071f88bc29f37f6d8959c11 (patch)
treec158a78979852c7585bfea29e8eda36eb098be0e /lib/pure
parentdd7a24d8ccae7cf943fcb66133c51591fb2e719d (diff)
downloadNim-57bd50a9166fa4171071f88bc29f37f6d8959c11.tar.gz
Removed INPUT_KEY_RECORD
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/terminal.nim17
1 files changed, 6 insertions, 11 deletions
diff --git a/lib/pure/terminal.nim b/lib/pure/terminal.nim
index 60fce04c9..62cee0ee8 100644
--- a/lib/pure/terminal.nim
+++ b/lib/pure/terminal.nim
@@ -498,20 +498,15 @@ proc getch*(): char =
   ## The character is not printed to the terminal.
   when defined(windows):
     let fd = getStdHandle(STD_INPUT_HANDLE)
-    # Block until character is entered
-    discard waitForSingleObject(fd, INFINITE)
-    var record = INPUT_RECORD()
-    var recordPtr: ptr INPUT_RECORD = addr(record)
+    var keyEvent = KEY_EVENT_RECORD()
     var numRead: cint 
     while true:
-      discard readConsoleInput(fd, recordPtr, 1, addr(numRead))
-      if numRead == 0 or record.eventType != 1:
+      # Block until character is entered
+      assert(waitForSingleObject(fd, INFINITE) == WAIT_OBJECT_0)
+      assert(readConsoleInput(fd, addr(keyEvent), 1, addr(numRead)) != 0)
+      if numRead == 0 or keyEvent.eventType != 1 or keyEvent.bKeyDown == 0:
         continue
-      let keyEvent = cast[ptr KEY_EVENT_RECORD](recordPtr)
-      # skip key release events
-      if keyEvent.bKeyDown == 0:
-        continue
-      return char(keyEvent.UnicodeChar)
+      return char(keyEvent.uChar)
   else:
     let fd = getFileHandle(stdin)
     var oldMode: Termios