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.
WinChar = Utf16Char
Handle = int
LONG = int32
ULONG = int32
PULONG = ptr int
WINBOOL = int32
DWORD = int32
PDWORD = ptr DWORD
LPINT = ptr int32
ULONG_PTR = uint
PULONG_PTR = ptr uint
HDC = Handle
HGLRC = Handle
SECURITY_ATTRIBUTES = object nLength*: int32 lpSecurityDescriptor*: pointer bInheritHandle*: WINBOOL
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
PROCESS_INFORMATION = object hProcess*: Handle hThread*: Handle dwProcessId*: int32 dwThreadId*: int32
FILETIME = object dwLowDateTime*: DWORD dwHighDateTime*: DWORD
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
OSVERSIONINFO = object dwOSVersionInfoSize*: DWORD dwMajorVersion*: DWORD dwMinorVersion*: DWORD dwBuildNumber*: DWORD dwPlatformId*: DWORD szCSDVersion*: array[0 .. 127, WinChar]
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]
SocketHandle = distinct int
WSAData = object wVersion, wHighVersion: int16 szDescription: array[0 .. WSADESCRIPTION_LEN, char] szSystemStatus: array[0 .. WSASYS_STATUS_LEN, char] iMaxSockets, iMaxUdpDg: int16 lpVendorInfo: cstring
SockAddr = object sa_family*: int16 sa_data*: array[0 .. 13, char]
InAddr = object s_addr*: uint32
Sockaddr_in = object sin_family*: int16 sin_port*: uint16 sin_addr*: InAddr sin_zero*: array[0 .. 7, char]
In6_addr = object
bytes* {.importc: "u.Byte".}: array[0 .. 15, char]Sockaddr_in6 = object sin6_family*: int16 sin6_port*: uint16 sin6_flowinfo*: int32 sin6_addr*: In6_addr sin6_scope_id*: int32
Sockaddr_in6_old = object sin6_family*: int16 sin6_port*: int16 sin6_flowinfo*: int32 sin6_addr*: In6_addr
Servent = object
s_name*: cstring
s_aliases*: cstringArray
when defined(cpu64):
s_proto*: cstring
s_port*: int16
else:
s_port*: int16
s_proto*: cstringHostent = object h_name*: cstring h_aliases*: cstringArray h_addrtype*: int16 h_length*: int16 h_addr_list*: cstringArray
TFdSet = object fd_count*: cint fd_array*: array[0 .. 64 - 1, SocketHandle]
Timeval = object tv_sec*, tv_usec*: int32
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*: csize ## 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.
SockLen = cuint
WOHandleArray = array[0 .. 0x00000040 - 1, Handle]
PWOHandleArray = ptr WOHandleArray
OVERLAPPED = object internal*: PULONG internalHigh*: PULONG offset*: DWORD offsetHigh*: DWORD hEvent*: Handle
POVERLAPPED = ptr OVERLAPPED
POVERLAPPED_COMPLETION_ROUTINE = proc (para1: DWORD; para2: DWORD; para3: POVERLAPPED) {.
stdcall.}GUID = object D1*: int32 D2*: int16 D3*: int16 D4*: array[0 .. 7, int8]
TWSABuf = object len*: ULONG buf*: cstring
WSAPROC_ACCEPTEX = proc (sListenSocket: SocketHandle; sAcceptSocket: SocketHandle;
lpOutputBuffer: pointer; dwReceiveDataLength: DWORD;
dwLocalAddressLength: DWORD; dwRemoteAddressLength: DWORD;
lpdwBytesReceived: ptr DWORD; lpOverlapped: POVERLAPPED): bool {.
stdcall, gcsafe.}WSAPROC_CONNECTEX = proc (s: SocketHandle; name: ptr SockAddr; namelen: cint;
lpSendBuffer: pointer; dwSendDataLength: DWORD;
lpdwBytesSent: ptr DWORD; lpOverlapped: POVERLAPPED): bool {.
stdcall, gcsafe.}WSAPROC_GETACCEPTEXSOCKADDRS = proc (lpOutputBuffer: pointer;
dwReceiveDataLength: DWORD;
dwLocalAddressLength: DWORD;
dwRemoteAddressLength: DWORD;
LocalSockaddr: ptr PSockAddr;
LocalSockaddrLength: ptr cint;
RemoteSockaddr: ptr PSockAddr;
RemoteSockaddrLength: ptr cint) {.stdcall, gcsafe.}WAITORTIMERCALLBACK = proc (para1: pointer; para2: int32): void {.stdcall.}KEY_EVENT_RECORD = object eventType*: int16 bKeyDown*: WINBOOL wRepeatCount*: int16 wVirtualKeyCode*: int16 wVirtualScanCode*: int16 uChar*: int16 dwControlKeyState*: DWORD
LPFIBER_START_ROUTINE = proc (param: pointer): void {.stdcall.}SOMAXCONN: cint
INVALID_SOCKET: SocketHandle
SOL_SOCKET: cint
SO_DEBUG: cint
SO_ACCEPTCONN: cint
SO_REUSEADDR: cint
SO_REUSEPORT: cint
SO_KEEPALIVE: cint
SO_DONTROUTE: cint
SO_BROADCAST: cint
SO_USELOOPBACK: cint
SO_LINGER: cint
SO_OOBINLINE: cint
SO_DONTLINGER: cint
SO_EXCLUSIVEADDRUSE: cint
SO_ERROR: cint
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])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])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])useWinUnicode = true
STARTF_USESHOWWINDOW = 1'i32
STARTF_USESTDHANDLES = 256'i32
HIGH_PRIORITY_CLASS = 128'i32
IDLE_PRIORITY_CLASS = 64'i32
NORMAL_PRIORITY_CLASS = 32'i32
REALTIME_PRIORITY_CLASS = 256'i32
WAIT_OBJECT_0 = 0'i32
WAIT_TIMEOUT = 0x00000102'i32
WAIT_FAILED = 0xFFFFFFFF'i32
INFINITE = -1
STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12
DETACHED_PROCESS = 8'i32
SW_SHOWNORMAL = 1'i32
INVALID_HANDLE_VALUE = -1
CREATE_UNICODE_ENVIRONMENT = 1024'i32
PIPE_ACCESS_DUPLEX = 0x00000003'i32
PIPE_ACCESS_INBOUND = 1'i32
PIPE_ACCESS_OUTBOUND = 2'i32
PIPE_NOWAIT = 0x00000001'i32
SYNCHRONIZE = 0x00100000'i32
FILE_FLAG_WRITE_THROUGH = 0x80000000'i32
CREATE_NO_WINDOW = 0x08000000'i32
FILE_ATTRIBUTE_ARCHIVE = 32'i32
FILE_ATTRIBUTE_COMPRESSED = 2048'i32
FILE_ATTRIBUTE_NORMAL = 128'i32
FILE_ATTRIBUTE_DIRECTORY = 16'i32
FILE_ATTRIBUTE_HIDDEN = 2'i32
FILE_ATTRIBUTE_READONLY = 1'i32
FILE_ATTRIBUTE_REPARSE_POINT = 1024'i32
FILE_ATTRIBUTE_SYSTEM = 4'i32
FILE_ATTRIBUTE_TEMPORARY = 256'i32
MAX_PATH = 260
MOVEFILE_COPY_ALLOWED = 0x00000002'i32
MOVEFILE_CREATE_HARDLINK = 0x00000010'i32
MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004'i32
MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x00000020'i32
MOVEFILE_REPLACE_EXISTING = 0x00000001'i32
MOVEFILE_WRITE_THROUGH = 0x00000008'i32
WSADESCRIPTION_LEN = 256
WSASYS_STATUS_LEN = 128
FD_SETSIZE = 64
MSG_PEEK = 2
INADDR_ANY = 0'u32
INADDR_LOOPBACK = 0x7F000001
INADDR_BROADCAST = -1
INADDR_NONE = -1
MAXIMUM_WAIT_OBJECTS = 0x00000040
GENERIC_READ = 0x80000000'i32
GENERIC_WRITE = 0x40000000'i32
GENERIC_ALL = 0x10000000'i32
FILE_SHARE_READ = 1'i32
FILE_SHARE_DELETE = 4'i32
FILE_SHARE_WRITE = 2'i32
CREATE_ALWAYS = 2'i32
CREATE_NEW = 1'i32
OPEN_EXISTING = 3'i32
FILE_BEGIN = 0'i32
INVALID_SET_FILE_POINTER = -1
NO_ERROR = 0'i32
PAGE_READONLY = 2'i32
PAGE_READWRITE = 4'i32
FILE_MAP_READ = 4'i32
FILE_MAP_WRITE = 2'i32
INVALID_FILE_SIZE = -1
FILE_FLAG_BACKUP_SEMANTICS = 33554432'i32
FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000'i32
DUPLICATE_SAME_ACCESS = 2
FILE_READ_DATA = 0x00000001
FILE_WRITE_DATA = 0x00000002
ERROR_FILE_NOT_FOUND = 2
ERROR_PATH_NOT_FOUND = 3
ERROR_ACCESS_DENIED = 5
ERROR_HANDLE_EOF = 38
ERROR_BAD_ARGUMENTS = 165
ERROR_IO_PENDING = 997
FILE_FLAG_OVERLAPPED = 1073741824
WSAECONNABORTED = 10053
WSAEADDRINUSE = 10048
WSAECONNRESET = 10054
WSAEDISCON = 10101
WSAENETRESET = 10052
WSAETIMEDOUT = 10060
WSANOTINITIALISED = 10093
WSAENOTSOCK = 10038
WSAEINPROGRESS = 10036
WSAEINTR = 10004
WSAEWOULDBLOCK = 10035
ERROR_NETNAME_DELETED = 64
STATUS_PENDING = 0x00000103
IOC_OUT = 0x40000000
IOC_IN = 0x0000000080000000'i64
IOC_WS2 = 0x08000000
IOC_INOUT = 3221225472
SIO_GET_EXTENSION_FUNCTION_POINTER = 3355443206
SO_UPDATE_ACCEPT_CONTEXT = 0x0000700B
AI_V4MAPPED = 0x00000008
AF_UNSPEC = 0
AF_INET = 2
AF_INET6 = 23
WT_EXECUTEDEFAULT = 0x00000000'i32
WT_EXECUTEINIOTHREAD = 0x00000001'i32
WT_EXECUTEINUITHREAD = 0x00000002'i32
WT_EXECUTEINWAITTHREAD = 0x00000004'i32
WT_EXECUTEONLYONCE = 0x00000008'i32
WT_EXECUTELONGFUNCTION = 0x00000010'i32
WT_EXECUTEINTIMERTHREAD = 0x00000020'i32
WT_EXECUTEINPERSISTENTIOTHREAD = 0x00000040'i32
WT_EXECUTEINPERSISTENTTHREAD = 0x00000080'i32
WT_TRANSFER_IMPERSONATION = 0x00000100'i32
PROCESS_TERMINATE = 0x00000001'i32
PROCESS_CREATE_THREAD = 0x00000002'i32
PROCESS_SET_SESSIONID = 0x00000004'i32
PROCESS_VM_OPERATION = 0x00000008'i32
PROCESS_VM_READ = 0x00000010'i32
PROCESS_VM_WRITE = 0x00000020'i32
PROCESS_DUP_HANDLE = 0x00000040'i32
PROCESS_CREATE_PROCESS = 0x00000080'i32
PROCESS_SET_QUOTA = 0x00000100'i32
PROCESS_SET_INFORMATION = 0x00000200'i32
PROCESS_QUERY_INFORMATION = 0x00000400'i32
PROCESS_SUSPEND_RESUME = 0x00000800'i32
PROCESS_QUERY_LIMITED_INFORMATION = 0x00001000'i32
PROCESS_SET_LIMITED_INFORMATION = 0x00002000'i32
FD_READ = 0x00000001'i32
FD_WRITE = 0x00000002'i32
FD_OOB = 0x00000004'i32
FD_ACCEPT = 0x00000008'i32
FD_CONNECT = 0x00000010'i32
FD_CLOSE = 0x00000020'i32
FD_QQS = 0x00000040'i32
FD_GROUP_QQS = 0x00000080'i32
FD_ROUTING_INTERFACE_CHANGE = 0x00000100'i32
FD_ADDRESS_LIST_CHANGE = 0x00000200'i32
FD_ALL_EVENTS = 0x000003FF'i32
FIBER_FLAG_FLOAT_SWITCH = 0x00000001
proc getVersionExW(lpVersionInfo: ptr OSVERSIONINFO): WINBOOL {.stdcall,
dynlib: "kernel32", importc: "GetVersionExW".}proc getVersion(): DWORD {.stdcall, dynlib: "kernel32", importc: "GetVersion".}proc closeHandle(hObject: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
importc: "CloseHandle".}proc readFile(hFile: Handle; Buffer: pointer; nNumberOfBytesToRead: int32;
lpNumberOfBytesRead: ptr int32; lpOverlapped: pointer): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "ReadFile".}proc writeFile(hFile: Handle; Buffer: pointer; nNumberOfBytesToWrite: int32;
lpNumberOfBytesWritten: ptr int32; lpOverlapped: pointer): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "WriteFile".}proc createPipe(hReadPipe, hWritePipe: var Handle;
lpPipeAttributes: var SECURITY_ATTRIBUTES; nSize: int32): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "CreatePipe".}proc createNamedPipe(lpName: WideCString; dwOpenMode, dwPipeMode, nMaxInstances,
nOutBufferSize, nInBufferSize,
nDefaultTimeOut: int32;
lpSecurityAttributes: ptr SECURITY_ATTRIBUTES): Handle {.
stdcall, dynlib: "kernel32", importc: "CreateNamedPipeW".}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".}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".}proc suspendThread(hThread: Handle): int32 {.stdcall, dynlib: "kernel32",
importc: "SuspendThread".}proc resumeThread(hThread: Handle): int32 {.stdcall, dynlib: "kernel32",
importc: "ResumeThread".}proc waitForSingleObject(hHandle: Handle; dwMilliseconds: int32): int32 {.stdcall,
dynlib: "kernel32", importc: "WaitForSingleObject".}proc terminateProcess(hProcess: Handle; uExitCode: int): WINBOOL {.stdcall,
dynlib: "kernel32", importc: "TerminateProcess".}proc getExitCodeProcess(hProcess: Handle; lpExitCode: var int32): WINBOOL {.stdcall,
dynlib: "kernel32", importc: "GetExitCodeProcess".}proc getStdHandle(nStdHandle: int32): Handle {.stdcall, dynlib: "kernel32",
importc: "GetStdHandle".}proc setStdHandle(nStdHandle: int32; hHandle: Handle): WINBOOL {.stdcall,
dynlib: "kernel32", importc: "SetStdHandle".}proc flushFileBuffers(hFile: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
importc: "FlushFileBuffers".}proc getLastError(): int32 {.importc: "GetLastError", stdcall, dynlib: "kernel32".}proc setLastError(error: int32) {.importc: "SetLastError", stdcall, dynlib: "kernel32".}proc formatMessageW(dwFlags: int32; lpSource: pointer;
dwMessageId, dwLanguageId: int32; lpBuffer: pointer; nSize: int32;
Arguments: pointer): int32 {.importc: "FormatMessageW", stdcall,
dynlib: "kernel32".}proc localFree(p: pointer) {.importc: "LocalFree", stdcall, dynlib: "kernel32".}proc getCurrentDirectoryW(nBufferLength: int32; lpBuffer: WideCString): int32 {.
importc: "GetCurrentDirectoryW", dynlib: "kernel32", stdcall.}proc setCurrentDirectoryW(lpPathName: WideCString): int32 {.
importc: "SetCurrentDirectoryW", dynlib: "kernel32", stdcall.}proc createDirectoryW(pathName: WideCString; security: pointer = nil): int32 {.
importc: "CreateDirectoryW", dynlib: "kernel32", stdcall.}proc removeDirectoryW(lpPathName: WideCString): int32 {.importc: "RemoveDirectoryW",
dynlib: "kernel32", stdcall.}proc setEnvironmentVariableW(lpName, lpValue: WideCString): int32 {.stdcall,
dynlib: "kernel32", importc: "SetEnvironmentVariableW".}proc getModuleFileNameW(handle: Handle; buf: WideCString; size: int32): int32 {.
importc: "GetModuleFileNameW", dynlib: "kernel32", stdcall.}proc createSymbolicLinkW(lpSymlinkFileName, lpTargetFileName: WideCString;
flags: DWORD): int32 {.importc: "CreateSymbolicLinkW",
dynlib: "kernel32", stdcall.}proc createHardLinkW(lpFileName, lpExistingFileName: WideCString;
security: pointer = nil): int32 {.importc: "CreateHardLinkW",
dynlib: "kernel32", stdcall.}proc findFirstFileW(lpFileName: WideCString; lpFindFileData: var WIN32_FIND_DATA): Handle {.
stdcall, dynlib: "kernel32", importc: "FindFirstFileW".}proc findNextFileW(hFindFile: Handle; lpFindFileData: var WIN32_FIND_DATA): int32 {.
stdcall, dynlib: "kernel32", importc: "FindNextFileW".}proc findClose(hFindFile: Handle) {.stdcall, dynlib: "kernel32", importc: "FindClose".}proc getFullPathNameW(lpFileName: WideCString; nBufferLength: int32;
lpBuffer: WideCString; lpFilePart: var WideCString): int32 {.
stdcall, dynlib: "kernel32", importc: "GetFullPathNameW".}proc getFileAttributesW(lpFileName: WideCString): int32 {.stdcall,
dynlib: "kernel32", importc: "GetFileAttributesW".}proc setFileAttributesW(lpFileName: WideCString; dwFileAttributes: int32): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "SetFileAttributesW".}proc copyFileW(lpExistingFileName, lpNewFileName: WideCString;
bFailIfExists: WINBOOL): WINBOOL {.importc: "CopyFileW", stdcall,
dynlib: "kernel32".}proc moveFileW(lpExistingFileName, lpNewFileName: WideCString): WINBOOL {.
importc: "MoveFileW", stdcall, dynlib: "kernel32".}proc moveFileExW(lpExistingFileName, lpNewFileName: WideCString; flags: DWORD): WINBOOL {.
importc: "MoveFileExW", stdcall, dynlib: "kernel32".}proc getEnvironmentStringsW(): WideCString {.stdcall, dynlib: "kernel32",
importc: "GetEnvironmentStringsW".}proc freeEnvironmentStringsW(para1: WideCString): int32 {.stdcall,
dynlib: "kernel32", importc: "FreeEnvironmentStringsW".}proc getCommandLineW(): WideCString {.importc: "GetCommandLineW", stdcall,
dynlib: "kernel32".}proc rdFileTime(f: FILETIME): int64 {.raises: [], tags: [].}proc rdFileSize(f: WIN32_FIND_DATA): int64 {.raises: [], tags: [].}proc getSystemTimeAsFileTime(lpSystemTimeAsFileTime: var FILETIME) {.
importc: "GetSystemTimeAsFileTime", dynlib: "kernel32", stdcall.}proc sleep(dwMilliseconds: int32) {.stdcall, dynlib: "kernel32", importc: "Sleep".}proc shellExecuteW(HWND: Handle;
lpOperation, lpFile, lpParameters, lpDirectory: WideCString;
nShowCmd: int32): Handle {.stdcall, dynlib: "shell32.dll",
importc: "ShellExecuteW".}proc getFileInformationByHandle(hFile: Handle; lpFileInformation: ptr BY_HANDLE_FILE_INFORMATION): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "GetFileInformationByHandle".}proc wsaGetLastError(): cint {.importc: "WSAGetLastError", dynlib: ws2dll.}proc `==`(x, y: SocketHandle): bool {.borrow.}proc getservbyname(name, proto: cstring): ptr Servent {.stdcall,
importc: "getservbyname", dynlib: ws2dll.}proc getservbyport(port: cint; proto: cstring): ptr Servent {.stdcall,
importc: "getservbyport", dynlib: ws2dll.}proc gethostbyaddr(ip: ptr InAddr; len: cuint; theType: cint): ptr Hostent {.stdcall,
importc: "gethostbyaddr", dynlib: ws2dll.}proc gethostbyname(name: cstring): ptr Hostent {.stdcall, importc: "gethostbyname",
dynlib: ws2dll.}proc gethostname(hostname: cstring; len: cint): cint {.stdcall, importc: "gethostname",
dynlib: ws2dll.}proc socket(af, typ, protocol: cint): SocketHandle {.stdcall, importc: "socket",
dynlib: ws2dll.}proc closesocket(s: SocketHandle): cint {.stdcall, importc: "closesocket",
dynlib: ws2dll.}proc accept(s: SocketHandle; a: ptr SockAddr; addrlen: ptr SockLen): SocketHandle {.
stdcall, importc: "accept", dynlib: ws2dll.}proc bindSocket(s: SocketHandle; name: ptr SockAddr; namelen: SockLen): cint {.stdcall,
importc: "bind", dynlib: ws2dll.}proc connect(s: SocketHandle; name: ptr SockAddr; namelen: SockLen): cint {.stdcall,
importc: "connect", dynlib: ws2dll.}proc getsockname(s: SocketHandle; name: ptr SockAddr; namelen: ptr SockLen): cint {.
stdcall, importc: "getsockname", dynlib: ws2dll.}proc getpeername(s: SocketHandle; name: ptr SockAddr; namelen: ptr SockLen): cint {.
stdcall, importc, dynlib: ws2dll.}proc getsockopt(s: SocketHandle; level, optname: cint; optval: pointer;
optlen: ptr SockLen): cint {.stdcall, importc: "getsockopt",
dynlib: ws2dll.}proc setsockopt(s: SocketHandle; level, optname: cint; optval: pointer; optlen: SockLen): cint {.
stdcall, importc: "setsockopt", dynlib: ws2dll.}proc listen(s: SocketHandle; backlog: cint): cint {.stdcall, importc: "listen",
dynlib: ws2dll.}proc recv(s: SocketHandle; buf: pointer; len, flags: cint): cint {.stdcall,
importc: "recv", dynlib: ws2dll.}proc recvfrom(s: SocketHandle; buf: cstring; len, flags: cint; fromm: ptr SockAddr;
fromlen: ptr SockLen): cint {.stdcall, importc: "recvfrom", dynlib: ws2dll.}proc select(nfds: cint; readfds, writefds, exceptfds: ptr TFdSet; timeout: ptr Timeval): cint {.
stdcall, importc: "select", dynlib: ws2dll.}proc send(s: SocketHandle; buf: pointer; len, flags: cint): cint {.stdcall,
importc: "send", dynlib: ws2dll.}proc sendto(s: SocketHandle; buf: pointer; len, flags: cint; to: ptr SockAddr;
tolen: SockLen): cint {.stdcall, importc: "sendto", dynlib: ws2dll.}proc shutdown(s: SocketHandle; how: cint): cint {.stdcall, importc: "shutdown",
dynlib: ws2dll.}proc getnameinfo(a1: ptr SockAddr; a2: SockLen; a3: cstring; a4: SockLen; a5: cstring;
a6: SockLen; a7: cint): cint {.stdcall, importc: "getnameinfo",
dynlib: ws2dll.}proc inet_addr(cp: cstring): uint32 {.stdcall, importc: "inet_addr", dynlib: ws2dll.}proc FD_ISSET(socket: SocketHandle; set: var TFdSet): cint {.raises: [], tags: [].}proc FD_SET(socket: SocketHandle; s: var TFdSet) {.raises: [], tags: [].}proc FD_ZERO(s: var TFdSet) {.raises: [], tags: [].}proc wsaStartup(wVersionRequired: int16; WSData: ptr WSAData): cint {.stdcall,
importc: "WSAStartup", dynlib: ws2dll.}proc getaddrinfo(nodename, servname: cstring; hints: ptr AddrInfo;
res: var ptr AddrInfo): cint {.stdcall, importc: "getaddrinfo",
dynlib: ws2dll.}proc freeaddrinfo(ai: ptr AddrInfo) {.stdcall, importc: "freeaddrinfo", dynlib: ws2dll.}proc inet_ntoa(i: InAddr): cstring {.stdcall, importc, dynlib: ws2dll.}proc waitForMultipleObjects(nCount: DWORD; lpHandles: PWOHandleArray;
bWaitAll: WINBOOL; dwMilliseconds: DWORD): DWORD {.
stdcall, dynlib: "kernel32", importc: "WaitForMultipleObjects".}proc duplicateHandle(hSourceProcessHandle: Handle; hSourceHandle: Handle;
hTargetProcessHandle: Handle; lpTargetHandle: ptr Handle;
dwDesiredAccess: DWORD; bInheritHandle: WINBOOL;
dwOptions: DWORD): WINBOOL {.stdcall, dynlib: "kernel32",
importc: "DuplicateHandle".}proc getCurrentProcess(): Handle {.stdcall, dynlib: "kernel32",
importc: "GetCurrentProcess".}proc createFileW(lpFileName: WideCString; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: pointer;
dwCreationDisposition, dwFlagsAndAttributes: DWORD;
hTemplateFile: Handle): Handle {.stdcall, dynlib: "kernel32",
importc: "CreateFileW".}proc deleteFileW(pathName: WideCString): int32 {.importc: "DeleteFileW",
dynlib: "kernel32", stdcall.}proc setEndOfFile(hFile: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
importc: "SetEndOfFile".}proc setFilePointer(hFile: Handle; lDistanceToMove: LONG;
lpDistanceToMoveHigh: ptr LONG; dwMoveMethod: DWORD): DWORD {.
stdcall, dynlib: "kernel32", importc: "SetFilePointer".}proc getFileSize(hFile: Handle; lpFileSizeHigh: ptr DWORD): DWORD {.stdcall,
dynlib: "kernel32", importc: "GetFileSize".}proc mapViewOfFileEx(hFileMappingObject: Handle; dwDesiredAccess: DWORD;
dwFileOffsetHigh, dwFileOffsetLow: DWORD;
dwNumberOfBytesToMap: DWORD; lpBaseAddress: pointer): pointer {.
stdcall, dynlib: "kernel32", importc: "MapViewOfFileEx".}proc createFileMappingW(hFile: Handle; lpFileMappingAttributes: pointer;
flProtect, dwMaximumSizeHigh: DWORD;
dwMaximumSizeLow: DWORD; lpName: pointer): Handle {.stdcall,
dynlib: "kernel32", importc: "CreateFileMappingW".}proc unmapViewOfFile(lpBaseAddress: pointer): WINBOOL {.stdcall, dynlib: "kernel32",
importc: "UnmapViewOfFile".}proc createIoCompletionPort(FileHandle: Handle; ExistingCompletionPort: Handle;
CompletionKey: ULONG_PTR;
NumberOfConcurrentThreads: DWORD): Handle {.stdcall,
dynlib: "kernel32", importc: "CreateIoCompletionPort".}proc getQueuedCompletionStatus(CompletionPort: Handle;
lpNumberOfBytesTransferred: PDWORD;
lpCompletionKey: PULONG_PTR;
lpOverlapped: ptr POVERLAPPED; dwMilliseconds: DWORD): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "GetQueuedCompletionStatus".}proc getOverlappedResult(hFile: Handle; lpOverlapped: POVERLAPPED;
lpNumberOfBytesTransferred: var DWORD; bWait: WINBOOL): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "GetOverlappedResult".}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".}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".}proc WSARecvFrom(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD;
bytesReceived: PDWORD; flags: PDWORD; name: ptr SockAddr;
namelen: ptr cint; lpOverlapped: POVERLAPPED;
completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall,
importc: "WSARecvFrom", dynlib: "Ws2_32.dll".}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".}proc WSASendTo(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD; bytesSent: PDWORD;
flags: DWORD; name: ptr SockAddr; namelen: cint;
lpOverlapped: POVERLAPPED;
completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall,
importc: "WSASendTo", dynlib: "Ws2_32.dll".}proc get_osfhandle(fd: FileHandle): Handle {.importc: "_get_osfhandle",
header: "<io.h>".}proc getSystemTimes(lpIdleTime, lpKernelTime, lpUserTime: var FILETIME): WINBOOL {.
stdcall, dynlib: "kernel32", importc: "GetSystemTimes".}proc getProcessTimes(hProcess: Handle; lpCreationTime, lpExitTime, lpKernelTime,
lpUserTime: var FILETIME): WINBOOL {.stdcall,
dynlib: "kernel32", importc: "GetProcessTimes".}proc inet_ntop(family: cint; paddr: pointer; pStringBuffer: cstring;
stringBufSize: int32): cstring {.stdcall, raises: [Exception],
tags: [RootEffect].}proc postQueuedCompletionStatus(CompletionPort: Handle;
dwNumberOfBytesTransferred: DWORD;
dwCompletionKey: ULONG_PTR; lpOverlapped: pointer): bool {.
stdcall, dynlib: "kernel32", importc: "PostQueuedCompletionStatus".}proc registerWaitForSingleObject(phNewWaitObject: ptr Handle; hObject: Handle;
Callback: WAITORTIMERCALLBACK; Context: pointer;
dwMilliseconds: ULONG; dwFlags: ULONG): bool {.
stdcall, dynlib: "kernel32", importc: "RegisterWaitForSingleObject".}proc unregisterWait(WaitHandle: Handle): DWORD {.stdcall, dynlib: "kernel32",
importc: "UnregisterWait".}proc openProcess(dwDesiredAccess: DWORD; bInheritHandle: WINBOOL; dwProcessId: DWORD): Handle {.
stdcall, dynlib: "kernel32", importc: "OpenProcess".}proc createEvent(lpEventAttributes: ptr SECURITY_ATTRIBUTES; bManualReset: DWORD;
bInitialState: DWORD; lpName: ptr Utf16Char): Handle {.stdcall,
dynlib: "kernel32", importc: "CreateEventW".}proc setEvent(hEvent: Handle): cint {.stdcall, dynlib: "kernel32", importc: "SetEvent".}proc wsaEventSelect(s: SocketHandle; hEventObject: Handle; lNetworkEvents: clong): cint {.
stdcall, importc: "WSAEventSelect", dynlib: "ws2_32.dll".}proc wsaCreateEvent(): Handle {.stdcall, importc: "WSACreateEvent",
dynlib: "ws2_32.dll".}proc wsaCloseEvent(hEvent: Handle): bool {.stdcall, importc: "WSACloseEvent",
dynlib: "ws2_32.dll".}proc wsaResetEvent(hEvent: Handle): bool {.stdcall, importc: "WSAResetEvent",
dynlib: "ws2_32.dll".}proc readConsoleInput(hConsoleInput: Handle; lpBuffer: pointer; nLength: cint;
lpNumberOfEventsRead: ptr cint): cint {.stdcall,
dynlib: "kernel32", importc: "ReadConsoleInputW".}proc CreateFiber(stackSize: int; fn: LPFIBER_START_ROUTINE; param: pointer): pointer {.
stdcall, discardable, dynlib: "kernel32", importc.}proc CreateFiberEx(stkCommit: int; stkReserve: int; flags: int32;
fn: LPFIBER_START_ROUTINE; param: pointer): pointer {.stdcall,
discardable, dynlib: "kernel32", importc.}proc ConvertThreadToFiber(param: pointer): pointer {.stdcall, discardable,
dynlib: "kernel32", importc.}proc ConvertThreadToFiberEx(param: pointer; flags: int32): pointer {.stdcall,
discardable, dynlib: "kernel32", importc.}proc DeleteFiber(fiber: pointer): void {.stdcall, discardable, dynlib: "kernel32",
importc.}proc SwitchToFiber(fiber: pointer): void {.stdcall, discardable, dynlib: "kernel32",
importc.}proc GetCurrentFiber(): pointer {.stdcall, importc, header: "Windows.h".}template hasOverlappedIoCompleted(lpOverlapped): bool
template WSAIORW(x, y): untyped
© 2006–2017 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/winlean.html