I think I soved this issue(?)
    
    
    # winconsole.nim
    
    when system.hostOS == "windows":
      import std/winlean
      import std/unicode
      
      proc readConsoleW(hConsoleInput: Handle, lpBuffer: pointer, 
nNumberOfCharsToRead: int, lpNumberOfCharsRead: pointer, pInputControl: 
pointer): bool {.stdcall, dynlib: "kernel32", importc: "ReadConsoleW".}
      var readBuff: array[256, uint16]
      var readCount: uint32
      
      proc consoleInputToString(readBuff: array[256, uint16]): string =
        for i in 0..<readCount:
          result.add cast[Rune](readBuff[i])
      
      proc consoleReadLine*(line: var string): bool =
        let ok = readConsoleW(stdin.getOsFileHandle, readBuff.addr, 
readBuff.len, readCount.addr, nil)
        if ok:
          line = readBuff.consoleInputToString()
          true
        else:
          false
      
      proc consoleReadLine*(): string {.used.} =
        discard readConsoleW(stdin.getOsFileHandle, readBuff.addr, 
readBuff.len, readCount.addr, nil)
        readBuff.consoleInputToString()
    
    
    Run
    
    
    # input_test.nim
    
    import winconsole
    
    let input = consoleReadLine()
    echo input
    
    
    Run

Reply via email to