Module winlean

This module implements a small wrapper for some needed Win API procedures, so that the Nim compiler does not depend on the huge Windows module.

Types

Handle = int
  Source
LONG = int32
  Source
ULONG = int32
  Source
PULONG = ptr int
  Source
WINBOOL = int32
  Source
DWORD = int32
  Source
PDWORD = ptr DWORD
  Source
LPINT = ptr int32
  Source
HDC = Handle
  Source
HGLRC = Handle
  Source
SECURITY_ATTRIBUTES = object
  nLength*: int32
  lpSecurityDescriptor*: pointer
  bInheritHandle*: WINBOOL
  Source
STARTUPINFO = object
  cb*: int32
  lpReserved*: cstring
  lpDesktop*: cstring
  lpTitle*: cstring
  dwX*: int32
  dwY*: int32
  dwXSize*: int32
  dwYSize*: int32
  dwXCountChars*: int32
  dwYCountChars*: int32
  dwFillAttribute*: int32
  dwFlags*: int32
  wShowWindow*: int16
  cbReserved2*: int16
  lpReserved2*: pointer
  hStdInput*: Handle
  hStdOutput*: Handle
  hStdError*: Handle
  Source
PROCESS_INFORMATION = object
  hProcess*: Handle
  hThread*: Handle
  dwProcessId*: int32
  dwThreadId*: int32
  Source
FILETIME = object
  dwLowDateTime*: DWORD
  dwHighDateTime*: DWORD
CANNOT BE int64 BECAUSE OF ALIGNMENT   Source
BY_HANDLE_FILE_INFORMATION = object
  dwFileAttributes*: DWORD
  ftCreationTime*: FILETIME
  ftLastAccessTime*: FILETIME
  ftLastWriteTime*: FILETIME
  dwVolumeSerialNumber*: DWORD
  nFileSizeHigh*: DWORD
  nFileSizeLow*: DWORD
  nNumberOfLinks*: DWORD
  nFileIndexHigh*: DWORD
  nFileIndexLow*: DWORD
  Source
WinChar = Utf16Char
  Source
WIN32_FIND_DATA = object
  dwFileAttributes*: int32
  ftCreationTime*: FILETIME
  ftLastAccessTime*: FILETIME
  ftLastWriteTime*: FILETIME
  nFileSizeHigh*: int32
  nFileSizeLow*: int32
  dwReserved0: int32
  dwReserved1: int32
  cFileName*: array[0 .. 260 - 1, WinChar]
  cAlternateFileName*: array[0 .. 13, WinChar]
  Source
SocketHandle = distinct int
  Source
WSAData = object
  wVersion, wHighVersion: int16
  szDescription: array[0 .. WSADESCRIPTION_LEN, char]
  szSystemStatus: array[0 .. WSASYS_STATUS_LEN, char]
  iMaxSockets, iMaxUdpDg: int16
  lpVendorInfo: cstring
  Source
SockAddr = object
  sa_family*: int16
  sa_data: array[0 .. 13, char]
  Source
InAddr = object
  s_addr*: int32
  Source
Sockaddr_in = object
  sin_family*: int16
  sin_port*: int16
  sin_addr*: InAddr
  sin_zero*: array[0 .. 7, char]
  Source
In6_addr = object
  bytes*: array[0 .. 15, char]
  Source
Sockaddr_in6 = object
  sin6_family*: int16
  sin6_port*: int16
  sin6_flowinfo*: int32
  sin6_addr*: In6_addr
  sin6_scope_id*: int32
  Source
Sockaddr_in6_old = object
  sin6_family*: int16
  sin6_port*: int16
  sin6_flowinfo*: int32
  sin6_addr*: In6_addr
  Source
Servent = object
  s_name*: cstring
  s_aliases*: cstringArray
  when defined(cpu64):
      s_proto*: cstring
      s_port*: int16

  else:
      s_port*: int16
      s_proto*: cstring

  
  Source
Hostent = object
  h_name*: cstring
  h_aliases*: cstringArray
  h_addrtype*: int16
  h_length*: int16
  h_addr_list*: cstringArray
  Source
TFdSet = object
  fd_count*: cint
  fd_array*: array[0 .. 64 - 1, SocketHandle]
  Source
Timeval = object
  tv_sec*, tv_usec*: int32
  Source
AddrInfo = object
  ai_flags*: cint
  ai_family*: cint             ## Address family of socket.
  ai_socktype*: cint           ## Socket type.
  ai_protocol*: cint           ## Protocol of socket.
  ai_addrlen*: int             ## Length of socket address.
  ai_canonname*: cstring       ## Canonical name of service location.
  ai_addr*: ptr SockAddr        ## Socket address of socket.
  ai_next*: ptr AddrInfo        ## Pointer to next in list.
  
Input flags.   Source
SockLen = cuint
  Source
WOHandleArray = array[0 .. 0x00000040 - 1, Handle]
  Source
PWOHandleArray = ptr WOHandleArray
  Source
OVERLAPPED = object
  internal*: PULONG
  internalHigh*: PULONG
  offset*: DWORD
  offsetHigh*: DWORD
  hEvent*: Handle
  Source
POVERLAPPED = ptr OVERLAPPED
  Source
POVERLAPPED_COMPLETION_ROUTINE = proc (para1: DWORD; para2: DWORD; para3: POVERLAPPED) {.
    stdcall.}
  Source
GUID = object
  D1*: int32
  D2*: int16
  D3*: int16
  D4*: array[0 .. 7, int8]
  Source
TWSABuf = object
  len*: ULONG
  buf*: cstring
  Source

Vars

SOMAXCONN: cint
  Source
INVALID_SOCKET: SocketHandle
  Source
SOL_SOCKET: cint
  Source
SO_DEBUG: cint
turn on debugging info recording   Source
SO_ACCEPTCONN: cint
  Source
SO_REUSEADDR: cint
  Source
SO_KEEPALIVE: cint
  Source
SO_DONTROUTE: cint
  Source
SO_BROADCAST: cint
  Source
SO_USELOOPBACK: cint
  Source
SO_LINGER: cint
  Source
SO_OOBINLINE: cint
  Source
SO_DONTLINGER: cint
  Source
SO_EXCLUSIVEADDRUSE: cint
  Source
SO_ERROR: cint
  Source
WSAID_CONNECTEX: GUID = GUID(D1: 0x25A207B9, D2: 0xDDF3'i16, D3: 0x00004660, D4: [0x8E'i8,
    0xE9'i8, 0x76'i8, 0xE5'i8, 0x8C'i8, 0x74'i8, 0x06'i8, 0x3E'i8])
  Source
WSAID_ACCEPTEX: GUID = GUID(D1: 0xB5367DF1'i32, D2: 0xCBAC'i16, D3: 0x000011CF, D4: [
    0x95'i8, 0xCA'i8, 0x00'i8, 0x80'i8, 0x5F'i8, 0x48'i8, 0xA1'i8, 0x92'i8])
  Source
WSAID_GETACCEPTEXSOCKADDRS: GUID = GUID(D1: 0xB5367DF2'i32, D2: 0xCBAC'i16,
                                     D3: 0x000011CF, D4: [0x95'i8, 0xCA'i8, 0x00'i8,
    0x80'i8, 0x5F'i8, 0x48'i8, 0xA1'i8, 0x92'i8])
  Source

Consts

useWinUnicode = true
  Source
STARTF_USESHOWWINDOW = 1'i32
  Source
STARTF_USESTDHANDLES = 256'i32
  Source
HIGH_PRIORITY_CLASS = 128'i32
  Source
IDLE_PRIORITY_CLASS = 64'i32
  Source
NORMAL_PRIORITY_CLASS = 32'i32
  Source
REALTIME_PRIORITY_CLASS = 256'i32
  Source
WAIT_OBJECT_0 = 0'i32
  Source
WAIT_TIMEOUT = 0x00000102'i32
  Source
WAIT_FAILED = 0xFFFFFFFF'i32
  Source
INFINITE = -1
  Source
STD_INPUT_HANDLE = -10
  Source
STD_OUTPUT_HANDLE = -11
  Source
STD_ERROR_HANDLE = -12
  Source
DETACHED_PROCESS = 8'i32
  Source
SW_SHOWNORMAL = 1'i32
  Source
INVALID_HANDLE_VALUE = -1
  Source
CREATE_UNICODE_ENVIRONMENT = 1024'i32
  Source
PIPE_ACCESS_DUPLEX = 0x00000003'i32
  Source
PIPE_ACCESS_INBOUND = 1'i32
  Source
PIPE_ACCESS_OUTBOUND = 2'i32
  Source
PIPE_NOWAIT = 0x00000001'i32
  Source
SYNCHRONIZE = 0x00100000'i32
  Source
FILE_FLAG_WRITE_THROUGH = 0x80000000'i32
  Source
CREATE_NO_WINDOW = 0x08000000'i32
  Source
FILE_ATTRIBUTE_ARCHIVE = 32'i32
  Source
FILE_ATTRIBUTE_COMPRESSED = 2048'i32
  Source
FILE_ATTRIBUTE_NORMAL = 128'i32
  Source
FILE_ATTRIBUTE_DIRECTORY = 16'i32
  Source
FILE_ATTRIBUTE_HIDDEN = 2'i32
  Source
FILE_ATTRIBUTE_READONLY = 1'i32
  Source
FILE_ATTRIBUTE_REPARSE_POINT = 1024'i32
  Source
FILE_ATTRIBUTE_SYSTEM = 4'i32
  Source
FILE_ATTRIBUTE_TEMPORARY = 256'i32
  Source
MAX_PATH = 260
  Source
WSADESCRIPTION_LEN = 256
  Source
WSASYS_STATUS_LEN = 128
  Source
FD_SETSIZE = 64
  Source
MSG_PEEK = 2
  Source
INADDR_ANY = 0
  Source
INADDR_LOOPBACK = 0x7F000001
  Source
INADDR_BROADCAST = -1
  Source
INADDR_NONE = -1
  Source
WSAEWOULDBLOCK = 10035
  Source
WSAEINPROGRESS = 10036
  Source
MAXIMUM_WAIT_OBJECTS = 0x00000040
  Source
GENERIC_READ = 0x80000000'i32
  Source
GENERIC_WRITE = 0x40000000'i32
  Source
GENERIC_ALL = 0x10000000'i32
  Source
FILE_SHARE_READ = 1'i32
  Source
FILE_SHARE_DELETE = 4'i32
  Source
FILE_SHARE_WRITE = 2'i32
  Source
CREATE_ALWAYS = 2'i32
  Source
CREATE_NEW = 1'i32
  Source
OPEN_EXISTING = 3'i32
  Source
FILE_BEGIN = 0'i32
  Source
INVALID_SET_FILE_POINTER = -1
  Source
NO_ERROR = 0'i32
  Source
PAGE_READONLY = 2'i32
  Source
PAGE_READWRITE = 4'i32
  Source
FILE_MAP_READ = 4'i32
  Source
FILE_MAP_WRITE = 2'i32
  Source
INVALID_FILE_SIZE = -1
  Source
FILE_FLAG_BACKUP_SEMANTICS = 33554432'i32
  Source
FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000'i32
  Source
DUPLICATE_SAME_ACCESS = 2
  Source
FILE_READ_DATA = 0x00000001
  Source
FILE_WRITE_DATA = 0x00000002
  Source
ERROR_ACCESS_DENIED = 5
  Source
ERROR_HANDLE_EOF = 38
  Source
ERROR_IO_PENDING = 997
  Source
FILE_FLAG_OVERLAPPED = 1073741824
  Source
WSAECONNABORTED = 10053
  Source
WSAEADDRINUSE = 10048
  Source
WSAECONNRESET = 10054
  Source
WSAEDISCON = 10101
  Source
WSAENETRESET = 10052
  Source
WSAETIMEDOUT = 10060
  Source
ERROR_NETNAME_DELETED = 64
  Source
IOC_OUT = 0x40000000
  Source
IOC_IN = 0x0000000080000000'i64
  Source
IOC_WS2 = 0x08000000
  Source
IOC_INOUT = 3221225472
  Source
SIO_GET_EXTENSION_FUNCTION_POINTER = 3355443206
  Source
SO_UPDATE_ACCEPT_CONTEXT = 0x0000700B
  Source
AI_V4MAPPED = 0x00000008
  Source
AF_INET = 2
  Source
AF_INET6 = 23
  Source

Procs

proc closeHandle(hObject: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
    importc: "CloseHandle".}
  Source
proc readFile(hFile: Handle; Buffer: pointer; nNumberOfBytesToRead: int32;
             lpNumberOfBytesRead: ptr int32; lpOverlapped: pointer): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "ReadFile".}
  Source
proc writeFile(hFile: Handle; Buffer: pointer; nNumberOfBytesToWrite: int32;
              lpNumberOfBytesWritten: ptr int32; lpOverlapped: pointer): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "WriteFile".}
  Source
proc createPipe(hReadPipe, hWritePipe: var Handle;
               lpPipeAttributes: var SECURITY_ATTRIBUTES; nSize: int32): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "CreatePipe".}
  Source
proc createNamedPipe(lpName: WideCString; dwOpenMode, dwPipeMode, nMaxInstances,
                                       nOutBufferSize, nInBufferSize,
                                       nDefaultTimeOut: int32;
                    lpSecurityAttributes: ptr SECURITY_ATTRIBUTES): Handle {.
    stdcall, dynlib: "kernel32", importc: "CreateNamedPipeW".}
  Source
proc peekNamedPipe(hNamedPipe: Handle; lpBuffer: pointer = nil; nBufferSize: int32 = 0;
                  lpBytesRead: ptr int32 = nil; lpTotalBytesAvail: ptr int32 = nil;
                  lpBytesLeftThisMessage: ptr int32 = nil): bool {.stdcall,
    dynlib: "kernel32", importc: "PeekNamedPipe".}
  Source
proc createProcessW(lpApplicationName, lpCommandLine: WideCString;
                   lpProcessAttributes: ptr SECURITY_ATTRIBUTES;
                   lpThreadAttributes: ptr SECURITY_ATTRIBUTES;
                   bInheritHandles: WINBOOL; dwCreationFlags: int32;
                   lpEnvironment, lpCurrentDirectory: WideCString;
                   lpStartupInfo: var STARTUPINFO;
                   lpProcessInformation: var PROCESS_INFORMATION): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "CreateProcessW".}
  Source
proc suspendThread(hThread: Handle): int32 {.stdcall, dynlib: "kernel32",
    importc: "SuspendThread".}
  Source
proc resumeThread(hThread: Handle): int32 {.stdcall, dynlib: "kernel32",
                                        importc: "ResumeThread".}
  Source
proc waitForSingleObject(hHandle: Handle; dwMilliseconds: int32): int32 {.stdcall,
    dynlib: "kernel32", importc: "WaitForSingleObject".}
  Source
proc terminateProcess(hProcess: Handle; uExitCode: int): WINBOOL {.stdcall,
    dynlib: "kernel32", importc: "TerminateProcess".}
  Source
proc getExitCodeProcess(hProcess: Handle; lpExitCode: var int32): WINBOOL {.stdcall,
    dynlib: "kernel32", importc: "GetExitCodeProcess".}
  Source
proc getStdHandle(nStdHandle: int32): Handle {.stdcall, dynlib: "kernel32",
    importc: "GetStdHandle".}
  Source
proc setStdHandle(nStdHandle: int32; hHandle: Handle): WINBOOL {.stdcall,
    dynlib: "kernel32", importc: "SetStdHandle".}
  Source
proc flushFileBuffers(hFile: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
    importc: "FlushFileBuffers".}
  Source
proc getLastError(): int32 {.importc: "GetLastError", stdcall, dynlib: "kernel32".}
  Source
proc formatMessageW(dwFlags: int32; lpSource: pointer;
                   dwMessageId, dwLanguageId: int32; lpBuffer: pointer; nSize: int32;
                   Arguments: pointer): int32 {.importc: "FormatMessageW", stdcall,
    dynlib: "kernel32".}
  Source
proc localFree(p: pointer) {.importc: "LocalFree", stdcall, dynlib: "kernel32".}
  Source
proc getCurrentDirectoryW(nBufferLength: int32; lpBuffer: WideCString): int32 {.
    importc: "GetCurrentDirectoryW", dynlib: "kernel32", stdcall.}
  Source
proc setCurrentDirectoryW(lpPathName: WideCString): int32 {.
    importc: "SetCurrentDirectoryW", dynlib: "kernel32", stdcall.}
  Source
proc createDirectoryW(pathName: WideCString; security: pointer = nil): int32 {.
    importc: "CreateDirectoryW", dynlib: "kernel32", stdcall.}
  Source
proc removeDirectoryW(lpPathName: WideCString): int32 {.importc: "RemoveDirectoryW",
    dynlib: "kernel32", stdcall.}
  Source
proc setEnvironmentVariableW(lpName, lpValue: WideCString): int32 {.stdcall,
    dynlib: "kernel32", importc: "SetEnvironmentVariableW".}
  Source
proc getModuleFileNameW(handle: Handle; buf: WideCString; size: int32): int32 {.
    importc: "GetModuleFileNameW", dynlib: "kernel32", stdcall.}
  Source
proc createSymbolicLinkW(lpSymlinkFileName, lpTargetFileName: WideCString;
                        flags: DWORD): int32 {.importc: "CreateSymbolicLinkW",
    dynlib: "kernel32", stdcall.}
  Source
proc createHardLinkW(lpFileName, lpExistingFileName: WideCString;
                    security: pointer = nil): int32 {.importc: "CreateHardLinkW",
    dynlib: "kernel32", stdcall.}
  Source
proc findFirstFileW(lpFileName: WideCString; lpFindFileData: var WIN32_FIND_DATA): Handle {.
    stdcall, dynlib: "kernel32", importc: "FindFirstFileW".}
  Source
proc findNextFileW(hFindFile: Handle; lpFindFileData: var WIN32_FIND_DATA): int32 {.
    stdcall, dynlib: "kernel32", importc: "FindNextFileW".}
  Source
proc findClose(hFindFile: Handle) {.stdcall, dynlib: "kernel32", importc: "FindClose".}
  Source
proc getFullPathNameW(lpFileName: WideCString; nBufferLength: int32;
                     lpBuffer: WideCString; lpFilePart: var WideCString): int32 {.
    stdcall, dynlib: "kernel32", importc: "GetFullPathNameW".}
  Source
proc getFileAttributesW(lpFileName: WideCString): int32 {.stdcall,
    dynlib: "kernel32", importc: "GetFileAttributesW".}
  Source
proc setFileAttributesW(lpFileName: WideCString; dwFileAttributes: int32): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "SetFileAttributesW".}
  Source
proc copyFileW(lpExistingFileName, lpNewFileName: WideCString; bFailIfExists: cint): cint {.
    importc: "CopyFileW", stdcall, dynlib: "kernel32".}
  Source
proc moveFileW(lpExistingFileName, lpNewFileName: WideCString; bFailIfExists: cint): cint {.
    importc: "MoveFileW", stdcall, dynlib: "kernel32".}
  Source
proc getEnvironmentStringsW(): WideCString {.stdcall, dynlib: "kernel32",
    importc: "GetEnvironmentStringsW".}
  Source
proc freeEnvironmentStringsW(para1: WideCString): int32 {.stdcall,
    dynlib: "kernel32", importc: "FreeEnvironmentStringsW".}
  Source
proc getCommandLineW(): WideCString {.importc: "GetCommandLineW", stdcall,
                                   dynlib: "kernel32".}
  Source
proc rdFileTime(f: FILETIME): int64 {.raises: [], tags: [].}
  Source
proc rdFileSize(f: WIN32_FIND_DATA): int64 {.raises: [], tags: [].}
  Source
proc getSystemTimeAsFileTime(lpSystemTimeAsFileTime: var FILETIME) {.
    importc: "GetSystemTimeAsFileTime", dynlib: "kernel32", stdcall.}
  Source
proc sleep(dwMilliseconds: int32) {.stdcall, dynlib: "kernel32", importc: "Sleep".}
  Source
proc shellExecuteW(HWND: Handle;
                  lpOperation, lpFile, lpParameters, lpDirectory: WideCString;
                  nShowCmd: int32): Handle {.stdcall, dynlib: "shell32.dll",
    importc: "ShellExecuteW".}
  Source
proc getFileInformationByHandle(hFile: Handle; lpFileInformation: ptr BY_HANDLE_FILE_INFORMATION): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "GetFileInformationByHandle".}
  Source
proc wsaGetLastError(): cint {.importc: "WSAGetLastError", dynlib: ws2dll.}
  Source
proc `==`(x, y: SocketHandle): bool {.borrow.}
  Source
proc getservbyname(name, proto: cstring): ptr Servent {.stdcall,
    importc: "getservbyname", dynlib: ws2dll.}
  Source
proc getservbyport(port: cint; proto: cstring): ptr Servent {.stdcall,
    importc: "getservbyport", dynlib: ws2dll.}
  Source
proc gethostbyaddr(ip: ptr InAddr; len: cuint; theType: cint): ptr Hostent {.stdcall,
    importc: "gethostbyaddr", dynlib: ws2dll.}
  Source
proc gethostbyname(name: cstring): ptr Hostent {.stdcall, importc: "gethostbyname",
    dynlib: ws2dll.}
  Source
proc socket(af, typ, protocol: cint): SocketHandle {.stdcall, importc: "socket",
    dynlib: ws2dll.}
  Source
proc closesocket(s: SocketHandle): cint {.stdcall, importc: "closesocket",
                                      dynlib: ws2dll.}
  Source
proc accept(s: SocketHandle; a: ptr SockAddr; addrlen: ptr SockLen): SocketHandle {.
    stdcall, importc: "accept", dynlib: ws2dll.}
  Source
proc bindSocket(s: SocketHandle; name: ptr SockAddr; namelen: SockLen): cint {.stdcall,
    importc: "bind", dynlib: ws2dll.}
  Source
proc connect(s: SocketHandle; name: ptr SockAddr; namelen: SockLen): cint {.stdcall,
    importc: "connect", dynlib: ws2dll.}
  Source
proc getsockname(s: SocketHandle; name: ptr SockAddr; namelen: ptr SockLen): cint {.
    stdcall, importc: "getsockname", dynlib: ws2dll.}
  Source
proc getpeername(s: SocketHandle; name: ptr SockAddr; namelen: ptr SockLen): cint {.
    stdcall, importc, dynlib: ws2dll.}
  Source
proc getsockopt(s: SocketHandle; level, optname: cint; optval: pointer;
               optlen: ptr SockLen): cint {.stdcall, importc: "getsockopt",
                                        dynlib: ws2dll.}
  Source
proc setsockopt(s: SocketHandle; level, optname: cint; optval: pointer; optlen: SockLen): cint {.
    stdcall, importc: "setsockopt", dynlib: ws2dll.}
  Source
proc listen(s: SocketHandle; backlog: cint): cint {.stdcall, importc: "listen",
    dynlib: ws2dll.}
  Source
proc recv(s: SocketHandle; buf: pointer; len, flags: cint): cint {.stdcall,
    importc: "recv", dynlib: ws2dll.}
  Source
proc recvfrom(s: SocketHandle; buf: cstring; len, flags: cint; fromm: ptr SockAddr;
             fromlen: ptr SockLen): cint {.stdcall, importc: "recvfrom", dynlib: ws2dll.}
  Source
proc select(nfds: cint; readfds, writefds, exceptfds: ptr TFdSet; timeout: ptr Timeval): cint {.
    stdcall, importc: "select", dynlib: ws2dll.}
  Source
proc send(s: SocketHandle; buf: pointer; len, flags: cint): cint {.stdcall,
    importc: "send", dynlib: ws2dll.}
  Source
proc sendto(s: SocketHandle; buf: pointer; len, flags: cint; to: ptr SockAddr;
           tolen: SockLen): cint {.stdcall, importc: "sendto", dynlib: ws2dll.}
  Source
proc shutdown(s: SocketHandle; how: cint): cint {.stdcall, importc: "shutdown",
    dynlib: ws2dll.}
  Source
proc getnameinfo(a1: ptr SockAddr; a2: SockLen; a3: cstring; a4: SockLen; a5: cstring;
                a6: SockLen; a7: cint): cint {.stdcall, importc: "getnameinfo",
    dynlib: ws2dll.}
  Source
proc inet_addr(cp: cstring): int32 {.stdcall, importc: "inet_addr", dynlib: ws2dll.}
  Source
proc FD_ISSET(socket: SocketHandle; set: var TFdSet): cint {.raises: [], tags: [].}
  Source
proc FD_SET(socket: SocketHandle; s: var TFdSet) {.raises: [], tags: [].}
  Source
proc FD_ZERO(s: var TFdSet) {.raises: [], tags: [].}
  Source
proc wsaStartup(wVersionRequired: int16; WSData: ptr WSAData): cint {.stdcall,
    importc: "WSAStartup", dynlib: ws2dll.}
  Source
proc getaddrinfo(nodename, servname: cstring; hints: ptr AddrInfo;
                res: var ptr AddrInfo): cint {.stdcall, importc: "getaddrinfo",
    dynlib: ws2dll.}
  Source
proc freeaddrinfo(ai: ptr AddrInfo) {.stdcall, importc: "freeaddrinfo", dynlib: ws2dll.}
  Source
proc inet_ntoa(i: InAddr): cstring {.stdcall, importc, dynlib: ws2dll.}
  Source
proc inet_ntop(family: cint; paddr: pointer; pStringBuffer: cstring;
              stringBufSize: int32): cstring {.stdcall, importc, dynlib: ws2dll.}
  Source
proc waitForMultipleObjects(nCount: DWORD; lpHandles: PWOHandleArray;
                           bWaitAll: WINBOOL; dwMilliseconds: DWORD): DWORD {.
    stdcall, dynlib: "kernel32", importc: "WaitForMultipleObjects".}
  Source
proc duplicateHandle(hSourceProcessHandle: Handle; hSourceHandle: Handle;
                    hTargetProcessHandle: Handle; lpTargetHandle: ptr Handle;
                    dwDesiredAccess: DWORD; bInheritHandle: WINBOOL;
                    dwOptions: DWORD): WINBOOL {.stdcall, dynlib: "kernel32",
    importc: "DuplicateHandle".}
  Source
proc getCurrentProcess(): Handle {.stdcall, dynlib: "kernel32",
                                importc: "GetCurrentProcess".}
  Source
proc createFileW(lpFileName: WideCString; dwDesiredAccess, dwShareMode: DWORD;
                lpSecurityAttributes: pointer;
                dwCreationDisposition, dwFlagsAndAttributes: DWORD;
                hTemplateFile: Handle): Handle {.stdcall, dynlib: "kernel32",
    importc: "CreateFileW".}
  Source
proc deleteFileW(pathName: WideCString): int32 {.importc: "DeleteFileW",
    dynlib: "kernel32", stdcall.}
  Source
proc setEndOfFile(hFile: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
                                        importc: "SetEndOfFile".}
  Source
proc setFilePointer(hFile: Handle; lDistanceToMove: LONG;
                   lpDistanceToMoveHigh: ptr LONG; dwMoveMethod: DWORD): DWORD {.
    stdcall, dynlib: "kernel32", importc: "SetFilePointer".}
  Source
proc getFileSize(hFile: Handle; lpFileSizeHigh: ptr DWORD): DWORD {.stdcall,
    dynlib: "kernel32", importc: "GetFileSize".}
  Source
proc mapViewOfFileEx(hFileMappingObject: Handle; dwDesiredAccess: DWORD;
                    dwFileOffsetHigh, dwFileOffsetLow: DWORD;
                    dwNumberOfBytesToMap: DWORD; lpBaseAddress: pointer): pointer {.
    stdcall, dynlib: "kernel32", importc: "MapViewOfFileEx".}
  Source
proc createFileMappingW(hFile: Handle; lpFileMappingAttributes: pointer;
                       flProtect, dwMaximumSizeHigh: DWORD;
                       dwMaximumSizeLow: DWORD; lpName: pointer): Handle {.stdcall,
    dynlib: "kernel32", importc: "CreateFileMappingW".}
  Source
proc unmapViewOfFile(lpBaseAddress: pointer): WINBOOL {.stdcall, dynlib: "kernel32",
    importc: "UnmapViewOfFile".}
  Source
proc createIoCompletionPort(FileHandle: Handle; ExistingCompletionPort: Handle;
                           CompletionKey: DWORD; NumberOfConcurrentThreads: DWORD): Handle {.
    stdcall, dynlib: "kernel32", importc: "CreateIoCompletionPort".}
  Source
proc getQueuedCompletionStatus(CompletionPort: Handle;
                              lpNumberOfBytesTransferred: PDWORD;
                              lpCompletionKey: PULONG;
                              lpOverlapped: ptr POVERLAPPED; dwMilliseconds: DWORD): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "GetQueuedCompletionStatus".}
  Source
proc getOverlappedResult(hFile: Handle; lpOverlapped: OVERLAPPED;
                        lpNumberOfBytesTransferred: var DWORD; bWait: WINBOOL): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "GetOverlappedResult".}
  Source
proc WSAIoctl(s: SocketHandle; dwIoControlCode: DWORD; lpvInBuffer: pointer;
             cbInBuffer: DWORD; lpvOutBuffer: pointer; cbOutBuffer: DWORD;
             lpcbBytesReturned: PDWORD; lpOverlapped: POVERLAPPED;
             lpCompletionRoutine: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall,
    importc: "WSAIoctl", dynlib: "Ws2_32.dll".}
  Source
proc WSARecv(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD;
            bytesReceived, flags: PDWORD; lpOverlapped: POVERLAPPED;
            completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall,
    importc: "WSARecv", dynlib: "Ws2_32.dll".}
  Source
proc WSASend(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD; bytesSent: PDWORD;
            flags: DWORD; lpOverlapped: POVERLAPPED;
            completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall,
    importc: "WSASend", dynlib: "Ws2_32.dll".}
  Source
proc get_osfhandle(fd: FileHandle): Handle {.importc: "_get_osfhandle",
    header: "<io.h>".}
  Source
proc getSystemTimes(lpIdleTime, lpKernelTime, lpUserTime: var FILETIME): WINBOOL {.
    stdcall, dynlib: "kernel32", importc: "GetSystemTimes".}
  Source
proc getProcessTimes(hProcess: Handle; lpCreationTime, lpExitTime, lpKernelTime,
                                    lpUserTime: var FILETIME): WINBOOL {.stdcall,
    dynlib: "kernel32", importc: "GetProcessTimes".}
  Source

Templates

template WSAIORW(x, y): expr
  Source