Add more Windows API types and structs (#1956)

* Add more Windows API types and structs
* Add more Windows API types and structs (merged sock.c3 to wsa.c3)
* Some formatting.

---------

Co-authored-by: Kirill Velikiy <velikoss@vk.com>
Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
This commit is contained in:
Velikiy Kirill
2025-02-13 01:30:07 +03:00
committed by GitHub
parent 1f856cacf5
commit f0682422c0
5 changed files with 205 additions and 0 deletions

View File

@@ -81,6 +81,7 @@ def Win32_LPVOID = void*;
def Win32_LPWORD = Win32_WORD*;
def Win32_LPWSTR = Win32_WCHAR*;
def Win32_LRESULT = Win32_LONG_PTR;
def Win32_NTSTATUS = Win32_LONG;
def Win32_PBOOL = Win32_BOOL*;
def Win32_PBOOLEAN = Win32_BOOLEAN*;
def Win32_PBYTE = Win32_BYTE*;

View File

@@ -0,0 +1,61 @@
// console
module std::os::win32 @if(env::WIN32);
struct Win32_KEY_EVENT_RECORD
{
Win32_BOOL bKeyDown;
Win32_WORD wRepeatCount;
Win32_WORD wVirtualKeyCode;
Win32_WORD wVirtualScanCode;
union uChar
{
Win32_WCHAR unicodeChar;
Win32_CHAR asciiChar;
}
Win32_DWORD dwControlKeyState;
}
struct Win32_COORD
{
Win32_SHORT x;
Win32_SHORT y;
}
struct Win32_MOUSE_EVENT_RECORD
{
Win32_COORD dwMousePosition;
Win32_DWORD dwButtonState;
Win32_DWORD dwControlKeyState;
Win32_DWORD dwEventFlags;
}
struct Win32_WINDOW_BUFFER_SIZE_RECORD
{
Win32_COORD dwSize;
}
struct Win32_MENU_EVENT_RECORD
{
Win32_UINT dwCommandId;
}
struct Win32_FOCUS_EVENT_RECORD
{
Win32_BOOL bSetFocus;
}
struct Win32_INPUT_RECORD
{
Win32_WORD eventType;
union event
{
Win32_KEY_EVENT_RECORD keyEvent;
Win32_MOUSE_EVENT_RECORD mouseEvent;
Win32_WINDOW_BUFFER_SIZE_RECORD windowBufferSizeEvent;
Win32_MENU_EVENT_RECORD menuEvent;
Win32_FOCUS_EVENT_RECORD focusEvent;
}
}
def Win32_PCOORD = Win32_COORD*;

View File

@@ -20,6 +20,18 @@ struct Win32_SIZE
Win32_LONG cy;
}
struct Win32_WSABUF
{
Win32_ULONG len;
Win32_CHAR* buf;
}
struct Win32_SOCKADDR
{
Win32_USHORT sa_family;
Win32_CHAR[14]* sa_data;
}
def Win32_PSIZE = Win32_SIZE*;
def Win32_NPSIZE = Win32_SIZE*;
def Win32_LPSIZE = Win32_SIZE*;
@@ -31,3 +43,9 @@ def Win32_LPOINT = Win32_POINT*;
def Win32_PRECT = Win32_RECT*;
def Win32_NPRECT = Win32_RECT*;
def Win32_LPRECT = Win32_RECT*;
def Win32_PWSABUF = Win32_WSABUF*;
def Win32_LPWSABUF = Win32_WSABUF*;
def Win32_PSOCKADDR = Win32_SOCKADDR*;
def Win32_LPSOCKADDR = Win32_SOCKADDR*;

View File

@@ -0,0 +1,31 @@
module std::os::win32 @if(env::WIN32);
struct Win32_addrinfo
{
Win32_INT ai_flags;
Win32_INT ai_family;
Win32_INT ai_socktype;
Win32_INT ai_protocol;
Win32_SIZE_T ai_addrlen;
Win32_CHAR* ai_canonname;
Win32_SOCKADDR* ai_addr;
Win32_ADDRINFO* ai_next;
}
def Win32_ADDRINFO = Win32_addrinfo;
def Win32_ADDRINFOA = Win32_ADDRINFO;
def Win32_PADDRINFOA = Win32_ADDRINFO*;
struct Win32_addrinfoW {
Win32_INT ai_flags;
Win32_INT ai_family;
Win32_INT ai_socktype;
Win32_INT ai_protocol;
Win32_SIZE_T ai_addrlen;
Win32_PWSTR ai_canonname;
Win32_SOCKADDR *ai_addr;
Win32_addrinfo *ai_next;
}
def Win32_ADDRINFOW = Win32_addrinfoW;
def Win32_PADDRINFOW = Win32_addrinfoW*;

View File

@@ -3,6 +3,7 @@ module std::os::win32 @if(env::WIN32);
// See https://github.com/wine-mirror/wine/blob/master/include/winsock2.h
distinct WSAError = int;
struct Win32_pollfd
{
Win32_SOCKET fd;
@@ -13,6 +14,99 @@ def Win32_WSAPOLLFD = Win32_pollfd;
def Win32_PWSAPOLLFD = Win32_WSAPOLLFD*;
def Win32_LPWSAPOLLFD = Win32_WSAPOLLFD*;
struct Win32_InAddr
{
union
{
struct s_un_b
{
Win32_UCHAR s_b1;
Win32_UCHAR s_b2;
Win32_UCHAR s_b3;
Win32_UCHAR s_b4;
}
struct s_un_w
{
Win32_USHORT s_w1;
Win32_USHORT s_w2;
}
Win32_ULONG s_addr;
}
}
struct Win32_SOCKADDR_IN
{
Win32_SHORT sin_family;
Win32_USHORT sin_port;
Win32_InAddr sin_addr;
Win32_CHAR[8]* sin_zero;
}
const usz _SS_PAD1SIZE = 6;
const usz _SS_PAD2SIZE = 112;
struct Win32_SOCKADDR_STORAGE
{
Win32_USHORT ss_family;
Win32_CHAR[_SS_PAD1SIZE]* __ss_pad1;
Win32_INT64 __ss_align;
Win32_CHAR[_SS_PAD2SIZE]* __ss_pad2;
}
def Win32_WSAOVERLAPPED = Win32_OVERLAPPED;
def Win32_LPWSAOVERLAPPED = Win32_WSAOVERLAPPED*;
def Win32_LPWSAOVERLAPPED_COMPLETION_ROUTINE = fn void (
Win32_DWORD dwError,
Win32_DWORD cbTransferred,
Win32_LPWSAOVERLAPPED
lpOverlapped,
Win32_DWORD dwFlags
);
def Win32_LPFN_WSARECV = fn CInt(
Win32_SOCKET socket,
Win32_LPWSABUF buffers,
Win32_DWORD buffer_count,
Win32_LPDWORD bytes,
Win32_LPDWORD flags,
Win32_LPWSAOVERLAPPED overlapped,
Win32_LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine
);
def Win32_LPFN_WSARECVFROM = fn CInt(
Win32_SOCKET socket,
Win32_LPWSABUF buffers,
Win32_DWORD buffer_count,
Win32_LPDWORD bytes,
Win32_LPDWORD flags,
Win32_SOCKADDR* addr,
Win32_LPINT addr_len,
Win32_LPWSAOVERLAPPED overlapped,
Win32_LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine
);
def Win32_LPFn_CONNECTEX = fn bool(
Win32_SOCKET,
Win32_SOCKADDR*,
Win32_INT,
Win32_PVOID,
Win32_DWORD,
Win32_LPDWORD,
void*
);
def Win32_LPFn_ACCEPTEX = fn bool(
Win32_SOCKET,
Win32_SOCKET,
Win32_PVOID,
Win32_DWORD,
Win32_DWORD,
Win32_DWORD,
Win32_LPDWORD,
void*
);
const Win32_SHORT POLLERR = 0x0001;
const Win32_SHORT POLLHUP = 0x0002;
const Win32_SHORT POLLNVAL = 0x0004;