mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
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:
@@ -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*;
|
||||
|
||||
61
lib/std/os/win32/wincon.c3
Normal file
61
lib/std/os/win32/wincon.c3
Normal 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*;
|
||||
@@ -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*;
|
||||
31
lib/std/os/win32/ws2def.c3
Normal file
31
lib/std/os/win32/ws2def.c3
Normal 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*;
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user