Removed INPUT_KEY_RECORD
This commit is contained in:
parent
dd7a24d8cc
commit
57bd50a916
2 changed files with 14 additions and 21 deletions
|
|
@ -498,20 +498,15 @@ proc getch*(): char =
|
||||||
## The character is not printed to the terminal.
|
## The character is not printed to the terminal.
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
let fd = getStdHandle(STD_INPUT_HANDLE)
|
let fd = getStdHandle(STD_INPUT_HANDLE)
|
||||||
# Block until character is entered
|
var keyEvent = KEY_EVENT_RECORD()
|
||||||
discard waitForSingleObject(fd, INFINITE)
|
|
||||||
var record = INPUT_RECORD()
|
|
||||||
var recordPtr: ptr INPUT_RECORD = addr(record)
|
|
||||||
var numRead: cint
|
var numRead: cint
|
||||||
while true:
|
while true:
|
||||||
discard readConsoleInput(fd, recordPtr, 1, addr(numRead))
|
# Block until character is entered
|
||||||
if numRead == 0 or record.eventType != 1:
|
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
|
continue
|
||||||
let keyEvent = cast[ptr KEY_EVENT_RECORD](recordPtr)
|
return char(keyEvent.uChar)
|
||||||
# skip key release events
|
|
||||||
if keyEvent.bKeyDown == 0:
|
|
||||||
continue
|
|
||||||
return char(keyEvent.UnicodeChar)
|
|
||||||
else:
|
else:
|
||||||
let fd = getFileHandle(stdin)
|
let fd = getFileHandle(stdin)
|
||||||
var oldMode: Termios
|
var oldMode: Termios
|
||||||
|
|
|
||||||
|
|
@ -1019,23 +1019,21 @@ proc wsaResetEvent*(hEvent: Handle): bool
|
||||||
{.stdcall, importc: "WSAResetEvent", dynlib: "ws2_32.dll".}
|
{.stdcall, importc: "WSAResetEvent", dynlib: "ws2_32.dll".}
|
||||||
|
|
||||||
type
|
type
|
||||||
INPUT_RECORD* {.final, pure.} = object
|
|
||||||
eventType*: int16
|
|
||||||
padding: array[18, byte]
|
|
||||||
KEY_EVENT_RECORD* {.final, pure.} = object
|
KEY_EVENT_RECORD* {.final, pure.} = object
|
||||||
eventType*: int16
|
eventType*: uint16
|
||||||
|
# padding: array[2, byte]
|
||||||
bKeyDown*: WINBOOL
|
bKeyDown*: WINBOOL
|
||||||
wRepeatCount*: int16
|
wRepeatCount*: uint16
|
||||||
wVirtualKeyCode*: int16
|
wVirtualKeyCode*: uint16
|
||||||
wVirtualScanCode*: int16
|
wVirtualScanCode*: uint16
|
||||||
UnicodeChar*: int16
|
uChar*: uint16
|
||||||
dwControlKeyState*: DWORD
|
dwControlKeyState*: DWORD
|
||||||
|
|
||||||
when defined(useWinAnsi):
|
when defined(useWinAnsi):
|
||||||
proc readConsoleInput*(hConsoleInput: Handle, lpBuffer: pointer, nLength: cint,
|
proc readConsoleInput*(hConsoleInput: Handle, lpBuffer: pointer, nLength: cint,
|
||||||
lpNumberOfEventsRead: ptr cint): cint
|
lpNumberOfEventsRead: ptr cint): cint
|
||||||
{.header: "<windows.h>", importc: "ReadConsoleInputA".}
|
{.dynlib: "kernel32", importc: "ReadConsoleInputA".}
|
||||||
else:
|
else:
|
||||||
proc readConsoleInput*(hConsoleInput: Handle, lpBuffer: pointer, nLength: cint,
|
proc readConsoleInput*(hConsoleInput: Handle, lpBuffer: pointer, nLength: cint,
|
||||||
lpNumberOfEventsRead: ptr cint): cint
|
lpNumberOfEventsRead: ptr cint): cint
|
||||||
{.header: "<windows.h>", importc: "ReadConsoleInputW".}
|
{.dynlib: "kernel32", importc: "ReadConsoleInputW".}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue