summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2025-05-28 04:19:24 +0200
committerMitya Selivanov <automainint@guattari.tech>2025-05-28 04:19:24 +0200
commit6cd861f877a808b9fc30d1c0cbc7859103100f09 (patch)
treed200227ef02fd3a20c468db6fe70dbe076bb7d79
parenta71e3613810f20ae4863d7c82bcc4cd38117678e (diff)
downloadsaw-rework.zip
RED changesrework
-rw-r--r--red/runtime.c308
1 files changed, 137 insertions, 171 deletions
diff --git a/red/runtime.c b/red/runtime.c
index dc747c6..6851bf1 100644
--- a/red/runtime.c
+++ b/red/runtime.c
@@ -738,8 +738,8 @@ typedef struct {
// Platform-specific data
- void *window_handle_win32;
- u64 window_handle_x11;
+ void **window_handle_win32;
+ u64 window_handle_x11;
#if ENABLE_RENDER_FRAME_ROUTINE
i64 num_pixels;
@@ -859,10 +859,8 @@ extern Platform g_platform;
#include <pthread.h>
#endif
-#if defined(_WIN32)
-
#ifndef WINAPI
-#if defined(_ARM_)
+#if defined(_ARM_) || defined(__linux__)
#define WINAPI
#else
#define WINAPI __stdcall
@@ -875,35 +873,7 @@ extern Platform g_platform;
#define WAIT_TIMEOUT 0x00000102u
#define WAIT_FAILED 0xffffffffu
-#define INVALID_HANDLE_VALUE ((HANDLE) (iptr) -1)
-
-typedef c8 *LPSTR;
-typedef c16 *LPWSTR;
-typedef c8 const *LPCSTR;
-typedef c16 const *LPCWSTR;
-typedef void **HANDLE;
-typedef HANDLE HMODULE;
-typedef HANDLE HINSTANCE;
-typedef HANDLE HWND;
-typedef HANDLE HDC;
-typedef HANDLE HICON;
-typedef HANDLE HCURSOR;
-typedef HANDLE HBRUSH;
-typedef HANDLE HMENU;
-typedef HANDLE HRAWINPUT;
-typedef HANDLE HDROP;
-
-#if defined(_WIN64)
-typedef u64 WPARAM;
-typedef i64 LPARAM;
-typedef i64 LRESULT;
-#else
-typedef u32 WPARAM;
-typedef i32 LPARAM;
-typedef i32 LRESULT;
-#endif
-
-typedef i32 HRESULT;
+#define INVALID_HANDLE_VALUE ((void **) (iptr) -1)
#define GENERIC_READ 0x80000000u
#define FILE_ATTRIBUTE_NORMAL 0x00000080u
@@ -924,9 +894,9 @@ typedef struct _SECURITY_ATTRIBUTES {
typedef struct _STARTUPINFOW {
u32 cb;
- LPWSTR lpReserved;
- LPWSTR lpDesktop;
- LPWSTR lpTitle;
+ c16 *lpReserved;
+ c16 *lpDesktop;
+ c16 *lpTitle;
u32 dwX;
u32 dwY;
u32 dwXSize;
@@ -938,14 +908,14 @@ typedef struct _STARTUPINFOW {
u16 wShowWindow;
u16 cbReserved2;
u8 *lpReserved2;
- HANDLE hStdInput;
- HANDLE hStdOutput;
- HANDLE hStdError;
+ void **hStdInput;
+ void **hStdOutput;
+ void **hStdError;
} STARTUPINFOW;
typedef struct _PROCESS_INFORMATION {
- HANDLE hProcess;
- HANDLE hThread;
+ void **hProcess;
+ void **hThread;
u32 dwProcessId;
u32 dwThreadId;
} PROCESS_INFORMATION;
@@ -970,37 +940,39 @@ typedef struct _WIN32_FIND_DATAW {
u16 wFinderFlags;
} WIN32_FIND_DATAW;
+#if defined(_WIN32)
+
// KERNEL32.DLL
u32 WINAPI GetLastError (void);
-HMODULE WINAPI GetModuleHandleW (LPCWSTR lpModuleName);
-HMODULE WINAPI LoadLibraryW (LPCWSTR lpLibFileName);
-b32 WINAPI FreeLibrary (HMODULE hLibModule);
-Proc_Address WINAPI GetProcAddress (HMODULE hModule, LPCSTR lpProcName);
+void ** WINAPI GetModuleHandleW (c16 const *lpModuleName);
+void ** WINAPI LoadLibraryW (c16 const *lpLibFileName);
+b32 WINAPI FreeLibrary (void **hLibModule);
+Proc_Address WINAPI GetProcAddress (void **hModule, c8 const *lpProcName);
u32 WINAPI GetLastError (void);
-b32 WINAPI CloseHandle (HANDLE hObject);
+b32 WINAPI CloseHandle (void **hObject);
void WINAPI InitializeCriticalSection (CRITICAL_SECTION *lpCriticalSection);
void WINAPI DeleteCriticalSection (CRITICAL_SECTION *lpCriticalSection);
b32 WINAPI TryEnterCriticalSection (CRITICAL_SECTION *lpCriticalSection);
void WINAPI EnterCriticalSection (CRITICAL_SECTION *lpCriticalSection);
void WINAPI LeaveCriticalSection (CRITICAL_SECTION *lpCriticalSection);
-u32 WINAPI WaitForSingleObject (HANDLE hHandle, u32 dwMilliseconds);
+u32 WINAPI WaitForSingleObject (void **hHandle, u32 dwMilliseconds);
void WINAPI Sleep (u32 dwMilliseconds);
b32 WINAPI SwitchToThread (void);
u32 WINAPI GetCurrentThreadId (void);
b32 WINAPI QueryPerformanceFrequency (i64 *lpFrequency);
b32 WINAPI QueryPerformanceCounter (i64 *lpPerformanceCount);
void WINAPI GetSystemTimePreciseAsFileTime (i64 *lpSystemTimeAsFileTime);
-u32 WINAPI GetModuleFileNameW (HMODULE hModule, LPWSTR lpFilename, u32 nSize);
-u32 WINAPI GetEnvironmentVariableW (LPCWSTR lpName, LPWSTR lpBuffer, u32 nSize);
-b32 WINAPI CreateProcessW (LPCWSTR lpApplicationName, LPWSTR lpCommandLine, SECURITY_ATTRIBUTES *lpProcessAttributes, SECURITY_ATTRIBUTES *lpThreadAttributes, b32 bInheritHandles, u32 dwCreationFlags, void *lpEnvironment, LPCWSTR lpCurrentDirectory, STARTUPINFOW *lpStartupInfo, PROCESS_INFORMATION *lpProcessInformation);
-HANDLE WINAPI CreateFileW (LPCWSTR lpFileName, u32 dwDesiredAccess, u32 dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes, u32 dwCreationDisposition, u32 dwFlagsAndAttributes, HANDLE hTemplateFile);
-b32 WINAPI GetFileSizeEx (HANDLE hFile, u64 *lpFileSize);
-b32 WINAPI ReadFile (HANDLE hFile, void *lpBuffer, u32 nNumberOfBytesToRead, u32 *lpNumberOfBytesRead, void *lpOverlapped);
-HANDLE WINAPI FindFirstFileW (LPCWSTR lpFileName, WIN32_FIND_DATAW *lpFindFileData);
-b32 WINAPI FindNextFileW (HANDLE hFindFile, WIN32_FIND_DATAW *lpFindFileData);
-b32 WINAPI FindClose (HANDLE hFindFile);
+u32 WINAPI GetModuleFileNameW (void **hModule, c16 * lpFilename, u32 nSize);
+u32 WINAPI GetEnvironmentVariableW (c16 const * lpName, c16 * lpBuffer, u32 nSize);
+b32 WINAPI CreateProcessW (c16 const * lpApplicationName, c16 * lpCommandLine, SECURITY_ATTRIBUTES *lpProcessAttributes, SECURITY_ATTRIBUTES *lpThreadAttributes, b32 bInheritHandles, u32 dwCreationFlags, void *lpEnvironment, c16 const *lpCurrentDirectory, STARTUPINFOW *lpStartupInfo, PROCESS_INFORMATION *lpProcessInformation);
+void ** WINAPI CreateFileW (c16 const * lpFileName, u32 dwDesiredAccess, u32 dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes, u32 dwCreationDisposition, u32 dwFlagsAndAttributes, void **hTemplateFile);
+b32 WINAPI GetFileSizeEx (void **hFile, u64 *lpFileSize);
+b32 WINAPI ReadFile (void **hFile, void *lpBuffer, u32 nNumberOfBytesToRead, u32 *lpNumberOfBytesRead, void *lpOverlapped);
+void ** WINAPI FindFirstFileW (c16 const *lpFileName, WIN32_FIND_DATAW *lpFindFileData);
+b32 WINAPI FindNextFileW (void **hFindFile, WIN32_FIND_DATAW *lpFindFileData);
+b32 WINAPI FindClose (void **hFindFile);
c16 * WINAPI GetEnvironmentStringsW (void);
-b32 WINAPI GetExitCodeProcess (HANDLE hProcess, u32 *lpExitCode);
+b32 WINAPI GetExitCodeProcess (void **hProcess, u32 *lpExitCode);
c16 * WINAPI GetCommandLineW (void);
enum {
@@ -1296,7 +1268,6 @@ static u16 ntohs_(u16 x) {
// TODO:
// - Use print formatting after we implement it.
-// - Print time.
enum {
LOG_Level_None = 0,
@@ -2602,7 +2573,7 @@ void dynamic_library_close(u16 slot) {
#if defined(__linux__)
dlclose(_dynamic_libraries.slots[slot].handle);
#elif defined(_WIN32)
- FreeLibrary((HMODULE) _dynamic_libraries.slots[slot].handle);
+ FreeLibrary((void **) _dynamic_libraries.slots[slot].handle);
#endif
if (_dynamic_libraries.slots[slot].status_ptr != NULL)
@@ -2637,7 +2608,7 @@ Proc_Address dynamic_library_get_proc_address(u16 slot, c8 *proc) {
#if defined(__linux__)
proc_address = (Proc_Address) dlsym(_dynamic_libraries.slots[slot].handle, proc);
#elif defined(_WIN32)
- proc_address = (Proc_Address) GetProcAddress((HMODULE) _dynamic_libraries.slots[slot].handle, proc);
+ proc_address = (Proc_Address) GetProcAddress((void **) _dynamic_libraries.slots[slot].handle, proc);
#endif
#pragma GCC diagnostic pop
@@ -3459,7 +3430,6 @@ static void wl_registry_destroy(struct wl_registry *wl_registry) {
//
// ================================================================
-#if defined(_WIN32)
#define WS_CAPTION 0x00C00000u
#define WS_MAXIMIZEBOX 0x00010000u
#define WS_MINIMIZEBOX 0x00020000u
@@ -3469,7 +3439,7 @@ static void wl_registry_destroy(struct wl_registry *wl_registry) {
#define WS_VISIBLE 0x10000000u
#define SRCCOPY 0x00CC0020u
#define RID_INPUT 0x10000003u
-#define IDC_ARROW ((LPWSTR) (u16) 32512)
+#define IDC_ARROW ((c16 *) (u16) 32512)
enum {
WM_DESTROY = 0x0002,
@@ -3514,21 +3484,21 @@ enum {
MAPVK_VK_TO_CHAR = 2,
};
-typedef LRESULT (WINAPI *WNDPROC)(HWND hWnd, u32 message, WPARAM wparam, LPARAM lparam);
+typedef iptr (WINAPI *WNDPROC)(void **hWnd, u32 message, uptr wparam, iptr lparam);
typedef struct tagWNDCLASSEXW {
- u32 cbSize;
- u32 style;
- WNDPROC lpfnWndProc;
- i32 cbClsExtra;
- i32 cbWndExtra;
- HINSTANCE hInstance;
- HICON hIcon;
- HCURSOR hCursor;
- HBRUSH hbrBackground;
- LPCWSTR lpszMenuName;
- LPCWSTR lpszClassName;
- HICON hIconSm;
+ u32 cbSize;
+ u32 style;
+ WNDPROC lpfnWndProc;
+ i32 cbClsExtra;
+ i32 cbWndExtra;
+ void ** hInstance;
+ void ** hIcon;
+ void ** hCursor;
+ void ** hbrBackground;
+ c16 const *lpszMenuName;
+ c16 const *lpszClassName;
+ void ** hIconSm;
} WNDCLASSEXW;
typedef struct tagPOINT {
@@ -3537,10 +3507,10 @@ typedef struct tagPOINT {
} POINT;
typedef struct tagMSG {
- HWND hwnd;
+ void **hwnd;
u32 message;
- WPARAM wParam;
- LPARAM lParam;
+ uptr wParam;
+ iptr lParam;
u32 time;
POINT pt;
u32 lPrivate;
@@ -3580,17 +3550,17 @@ typedef struct tagRECT {
} RECT;
typedef struct tagRAWINPUTDEVICE {
- u16 usUsagePage;
- u16 usUsage;
- u32 dwFlags;
- HWND hwndTarget;
+ u16 usUsagePage;
+ u16 usUsage;
+ u32 dwFlags;
+ void **hwndTarget;
} RAWINPUTDEVICE;
typedef struct tagRAWINPUTHEADER {
u32 dwType;
u32 dwSize;
- HANDLE hDevice;
- WPARAM wParam;
+ void **hDevice;
+ uptr wParam;
} RAWINPUTHEADER;
typedef struct tagRAWMOUSE {
@@ -3636,35 +3606,33 @@ typedef struct tagRAWINPUT {
PROC_(b32, WINAPI, SetProcessDPIAware, void);
PROC_(u32, WINAPI, GetDpiForSystem, void);
PROC_(u16, WINAPI, RegisterClassExW, WNDCLASSEXW const *wcex);
-PROC_(b32, WINAPI, UnregisterClassW, LPCWSTR lpClassName, HINSTANCE hInstance);
-PROC_(HWND, WINAPI, CreateWindowExW, u32 dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, u32 dwStyle, i32 X, i32 Y, i32 nWidth, i32 nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, void *lpParam);
-PROC_(LRESULT, WINAPI, DefWindowProcW, HWND hWnd, u32 Msg, WPARAM wParam, LPARAM lParam);
+PROC_(b32, WINAPI, UnregisterClassW, c16 const * lpClassName, void **hInstance);
+PROC_(void **, WINAPI, CreateWindowExW, u32 dwExStyle, c16 const * lpClassName, c16 const * lpWindowName, u32 dwStyle, i32 X, i32 Y, i32 nWidth, i32 nHeight, void **hWndParent, void **hMenu, void **hInstance, void *lpParam);
+PROC_(iptr, WINAPI, DefWindowProcW, void **hWnd, u32 Msg, uptr wParam, iptr lParam);
PROC_(void, WINAPI, PostQuitMessage, i32 nExitCode);
-PROC_(b32, WINAPI, DestroyWindow, HWND hWnd);
-PROC_(b32, WINAPI, PeekMessageW, MSG *lpMsg, HWND hWnd, u32 wMsgFilterMin, u32 wMsgFilterMax, u32 wRemoveMsg);
+PROC_(b32, WINAPI, DestroyWindow, void **hWnd);
+PROC_(b32, WINAPI, PeekMessageW, MSG *lpMsg, void **hWnd, u32 wMsgFilterMin, u32 wMsgFilterMax, u32 wRemoveMsg);
PROC_(b32, WINAPI, TranslateMessage, MSG const *lpMsg);
-PROC_(LRESULT, WINAPI, DispatchMessageW, MSG const *lpMsg);
-PROC_(HDC, WINAPI, GetDC, HWND hWnd);
-PROC_(i32, WINAPI, ReleaseDC, HWND hWnd, HDC hDC);
+PROC_(iptr, WINAPI, DispatchMessageW, MSG const *lpMsg);
+PROC_(void **, WINAPI, GetDC, void **hWnd);
+PROC_(i32, WINAPI, ReleaseDC, void **hWnd, void **hDC);
PROC_(i32, WINAPI, GetSystemMetrics, i32 nIndex);
-PROC_(b32, WINAPI, GetClientRect, HWND hWnd, RECT *lpRect);
+PROC_(b32, WINAPI, GetClientRect, void **hWnd, RECT *lpRect);
PROC_(b32, WINAPI, AdjustWindowRect, RECT *lpRect, u32 dwStyle, b32 bMenu);
-PROC_(HCURSOR, WINAPI, LoadCursorW, HINSTANCE hInstance, LPCWSTR lpCursorName);
+PROC_(void **, WINAPI, LoadCursorW, void **hInstance, c16 const *lpCursorName);
PROC_(b32, WINAPI, RegisterRawInputDevices, RAWINPUTDEVICE const *pRawInputDevices, u32 uiNumDevices, u32 cbSize);
-PROC_(u32, WINAPI, GetRawInputData, HRAWINPUT hRawInput, u32 uiCommand, void *pData, u32 *pcbSize, u32 cbSizeHeader);
+PROC_(u32, WINAPI, GetRawInputData, void **hRawInput, u32 uiCommand, void *pData, u32 *pcbSize, u32 cbSizeHeader);
PROC_(u32, WINAPI, MapVirtualKeyW, u32 uCode, u32 uMapType);
PROC_(b32, WINAPI, GetCursorPos, POINT *lpPoint);
-PROC_(b32, WINAPI, ScreenToClient, HWND hWnd, POINT *lpPoint);
+PROC_(b32, WINAPI, ScreenToClient, void **hWnd, POINT *lpPoint);
// GDI32.DLL
-PROC_(i32, WINAPI, StretchDIBits, HDC hdc, i32 xDest, i32 yDest, i32 DestWidth, i32 DestHeight, i32 xSrc, i32 ySrc, i32 SrcWidth, i32 SrcHeight, void const *lpBits, BITMAPINFO const *lpbmi, u32 iUsage, u32 rop);
+PROC_(i32, WINAPI, StretchDIBits, void **hdc, i32 xDest, i32 yDest, i32 DestWidth, i32 DestHeight, i32 xSrc, i32 ySrc, i32 SrcWidth, i32 SrcHeight, void const *lpBits, BITMAPINFO const *lpbmi, u32 iUsage, u32 rop);
// SHELL32.DLL
-PROC_(void, WINAPI, DragAcceptFiles, HWND hWnd, b32 fAccept);
-PROC_(void, WINAPI, DragFinish, HDROP hDrop);
-PROC_(u32, WINAPI, DragQueryFileW, HDROP hDrop, u32 iFile, LPWSTR lpszFile, u32 cch);
-
-#endif
+PROC_(void, WINAPI, DragAcceptFiles, void **hWnd, b32 fAccept);
+PROC_(void, WINAPI, DragFinish, void **hDrop);
+PROC_(u32, WINAPI, DragQueryFileW, void **hDrop, u32 iFile, c16 * lpszFile, u32 cch);
// ================================================================
//
@@ -3673,8 +3641,6 @@ PROC_(u32, WINAPI, DragQueryFileW, HDROP hDrop, u32 iFile, LPWSTR lpszFile, u3
//
// ================================================================
-#if defined(_WIN32)
-
typedef struct {
u32 Data1;
u16 Data2;
@@ -3683,13 +3649,13 @@ typedef struct {
} GUID;
typedef struct {
- u16 wFormatTag;
- u16 nChannels;
- u32 nSamplesPerSec;
- u32 nAvgBytesPerSec;
- u16 nBlockAlign;
- u16 wBitsPerSample;
- u16 cbSize;
+ u16 wFormatTag;
+ u16 nChannels;
+ u32 nSamplesPerSec;
+ u32 nAvgBytesPerSec;
+ u16 nBlockAlign;
+ u16 wBitsPerSample;
+ u16 cbSize;
} WAVEFORMATEX;
typedef struct _IUnknown IUnknown;
@@ -3701,49 +3667,49 @@ typedef struct _IAudioClient IAudioClient;
typedef struct _IAudioRenderClient IAudioRenderClient;
typedef struct {
- HRESULT (WINAPI *QueryInterface) (IUnknown *This, GUID *riid, void **ppvObject);
- u32 (WINAPI *AddRef) (IUnknown *This);
- u32 (WINAPI *Release) (IUnknown *This);
+ i32 (WINAPI *QueryInterface) (IUnknown *This, GUID *riid, void **ppvObject);
+ u32 (WINAPI *AddRef) (IUnknown *This);
+ u32 (WINAPI *Release) (IUnknown *This);
} IUnknownVtbl;
typedef struct {
- HRESULT (WINAPI *QueryInterface) (IMMDeviceEnumerator *This, GUID *riid, void **ppvObject);
- u32 (WINAPI *AddRef) (IMMDeviceEnumerator *This);
- u32 (WINAPI *Release) (IMMDeviceEnumerator *This);
-
- HRESULT (WINAPI *EnumAudioEndpoints) (IMMDeviceEnumerator *This, i32 dataFlow, u32 dwStateMask, IMMDeviceCollection **ppDevices);
- HRESULT (WINAPI *GetDefaultAudioEndpoint) (IMMDeviceEnumerator *This, i32 dataFlow, i32 role, IMMDevice **ppEndpoint);
- HRESULT (WINAPI *GetDevice) (IMMDeviceEnumerator *This, LPCWSTR pwstrId, IMMDevice **ppDevice);
- HRESULT (WINAPI *RegisterEndpointNotificationCallback) (IMMDeviceEnumerator *This, IMMNotificationClient *pClient);
- HRESULT (WINAPI *UnregisterEndpointNotificationCallback) (IMMDeviceEnumerator *This, IMMNotificationClient *pClient);
+ i32 (WINAPI *QueryInterface) (IMMDeviceEnumerator *This, GUID *riid, void **ppvObject);
+ u32 (WINAPI *AddRef) (IMMDeviceEnumerator *This);
+ u32 (WINAPI *Release) (IMMDeviceEnumerator *This);
+
+ i32 (WINAPI *EnumAudioEndpoints) (IMMDeviceEnumerator *This, i32 dataFlow, u32 dwStateMask, IMMDeviceCollection **ppDevices);
+ i32 (WINAPI *GetDefaultAudioEndpoint) (IMMDeviceEnumerator *This, i32 dataFlow, i32 role, IMMDevice **ppEndpoint);
+ i32 (WINAPI *GetDevice) (IMMDeviceEnumerator *This, c16 const * pwstrId, IMMDevice **ppDevice);
+ i32 (WINAPI *RegisterEndpointNotificationCallback) (IMMDeviceEnumerator *This, IMMNotificationClient *pClient);
+ i32 (WINAPI *UnregisterEndpointNotificationCallback) (IMMDeviceEnumerator *This, IMMNotificationClient *pClient);
} IMMDeviceEnumeratorVtbl;
typedef struct {
- HRESULT (WINAPI *QueryInterface) (IAudioClient *This, GUID *riid, void **ppvObject);
- u32 (WINAPI *AddRef) (IAudioClient *This);
- u32 (WINAPI *Release) (IAudioClient *This);
-
- HRESULT (WINAPI *Initialize) (IAudioClient *This, i32 ShareMode, u32 StreamFlags, i64 hnsBufferDuration, i64 hnsPeriodicity, WAVEFORMATEX const *pFormat, GUID const *AudioSessionGuid);
- HRESULT (WINAPI *GetBufferSize) (IAudioClient *This, u32 *pNumBufferFrames);
- HRESULT (WINAPI *GetStreamLatency) (IAudioClient *This, i64 *phnsLatency);
- HRESULT (WINAPI *GetCurrentPadding) (IAudioClient *This, u32 *pNumPaddingFrames);
- HRESULT (WINAPI *IsFormatSupported) (IAudioClient *This, i32 ShareMode, WAVEFORMATEX const *pFormat, WAVEFORMATEX **ppClosestMatch);
- HRESULT (WINAPI *GetMixFormat) (IAudioClient *This, WAVEFORMATEX **ppDeviceFormat);
- HRESULT (WINAPI *GetDevicePeriod) (IAudioClient *This, i64 *phnsDefaultDevicePeriod, i64 *phnsMinimumDevicePeriod);
- HRESULT (WINAPI *Start) (IAudioClient *This);
- HRESULT (WINAPI *Stop) (IAudioClient *This);
- HRESULT (WINAPI *Reset) (IAudioClient *This);
- HRESULT (WINAPI *SetEventHandle) (IAudioClient *This, HANDLE eventHandle);
- HRESULT (WINAPI *GetService) (IAudioClient *This, GUID *riid, void **ppv);
+ i32 (WINAPI *QueryInterface) (IAudioClient *This, GUID *riid, void **ppvObject);
+ u32 (WINAPI *AddRef) (IAudioClient *This);
+ u32 (WINAPI *Release) (IAudioClient *This);
+
+ i32 (WINAPI *Initialize) (IAudioClient *This, i32 ShareMode, u32 StreamFlags, i64 hnsBufferDuration, i64 hnsPeriodicity, WAVEFORMATEX const *pFormat, GUID const *AudioSessionGuid);
+ i32 (WINAPI *GetBufferSize) (IAudioClient *This, u32 *pNumBufferFrames);
+ i32 (WINAPI *GetStreamLatency) (IAudioClient *This, i64 *phnsLatency);
+ i32 (WINAPI *GetCurrentPadding) (IAudioClient *This, u32 *pNumPaddingFrames);
+ i32 (WINAPI *IsFormatSupported) (IAudioClient *This, i32 ShareMode, WAVEFORMATEX const *pFormat, WAVEFORMATEX **ppClosestMatch);
+ i32 (WINAPI *GetMixFormat) (IAudioClient *This, WAVEFORMATEX **ppDeviceFormat);
+ i32 (WINAPI *GetDevicePeriod) (IAudioClient *This, i64 *phnsDefaultDevicePeriod, i64 *phnsMinimumDevicePeriod);
+ i32 (WINAPI *Start) (IAudioClient *This);
+ i32 (WINAPI *Stop) (IAudioClient *This);
+ i32 (WINAPI *Reset) (IAudioClient *This);
+ i32 (WINAPI *SetEventHandle) (IAudioClient *This, void **eventHandle);
+ i32 (WINAPI *GetService) (IAudioClient *This, GUID *riid, void **ppv);
} IAudioClientVtbl;
typedef struct {
- HRESULT (WINAPI *QueryInterface) (IAudioRenderClient *This, GUID *riid, void **ppvObject);
- u32 (WINAPI *AddRef) (IAudioRenderClient *This);
- u32 (WINAPI *Release) (IAudioRenderClient *This);
+ i32 (WINAPI *QueryInterface) (IAudioRenderClient *This, GUID *riid, void **ppvObject);
+ u32 (WINAPI *AddRef) (IAudioRenderClient *This);
+ u32 (WINAPI *Release) (IAudioRenderClient *This);
- HRESULT (WINAPI *GetBuffer) (IAudioRenderClient *This, u32 NumFramesRequested, u8 **ppData);
- HRESULT (WINAPI *ReleaseBuffer) (IAudioRenderClient *This, u32 NumFramesWritten, u32 dwFlags);
+ i32 (WINAPI *GetBuffer) (IAudioRenderClient *This, u32 NumFramesRequested, u8 **ppData);
+ i32 (WINAPI *ReleaseBuffer) (IAudioRenderClient *This, u32 NumFramesWritten, u32 dwFlags);
} IAudioRenderClientVtbl;
struct _IUnknown { IUnknownVtbl *lpVtbl; };
@@ -3756,10 +3722,9 @@ static GUID IID_IMMDeviceEnumerator = { 0xa95664d2, 0x9614, 0x4f35, 0xa7, 0x46,
static GUID IID_IAudioClient = { 0x1cb9ad4c, 0xdbfa, 0x4c32, 0xb1, 0x78, 0xc2, 0xf5, 0x68, 0xa7, 0x03, 0xb2, };
static GUID IID_IAudioRenderClient = { 0xf294acfc, 0x3146, 0x4483, 0xa7, 0xbf, 0xad, 0xdc, 0xa7, 0xc2, 0x60, 0xe2, };
-PROC_(HRESULT, WINAPI, CoInitializeEx, void *pvReserved, u32 dwCoInit);
-PROC_(void, WINAPI, CoUninitialize, void);
-PROC_(HRESULT, WINAPI, CoCreateInstance, GUID *rclsid, IUnknown *pUnkOuter, u32 dwClsContext, GUID *riid, void **ppv);
-#endif
+PROC_(i32, WINAPI, CoInitializeEx, void *pvReserved, u32 dwCoInit);
+PROC_(void, WINAPI, CoUninitialize, void);
+PROC_(i32, WINAPI, CoCreateInstance, GUID *rclsid, IUnknown *pUnkOuter, u32 dwClsContext, GUID *riid, void **ppv);
// ================================================================
//
@@ -4299,7 +4264,7 @@ File_List enumerate_folder(c8 *folder_name, File_List list) {
#if defined(_WIN32)
WIN32_FIND_DATAW data;
- HANDLE hFind = FindFirstFileW(utf16_file_name_from_utf8_(folder_name, 2, (c16 *) L"\\*"), &data);
+ void **hFind = FindFirstFileW(utf16_file_name_from_utf8_(folder_name, 2, (c16 *) L"\\*"), &data);
if (hFind == INVALID_HANDLE_VALUE) {
LOG_verbose("FindFirstFileW failed: %d", GetLastError());
return list;
@@ -6459,29 +6424,29 @@ b8 x11_screenshot_(i64 *width, i64 *height, i64 max_num_pixels, u32 *pixels) {
#if ENABLE_PLATFORM_WINDOWS
-static c16 _class_name[] = { 'R', 'E', 'D', '_', '0', '\0', };
-static b8 _class_ready = 0;
-static HINSTANCE _hInstance = NULL;
-static HCURSOR _hCursor = NULL;
-static HWND _window = NULL;
-static i64 _update_width = 0;
-static i64 _update_height = 0;
-static i64 _frame_time = 0;
-static i64 _raw_input_len = 0;
-static i64 _raw_input_capacity = 0;
-static u8 *_raw_input = NULL;
-static i64 _drop_file_len = 0;
-static i64 _drop_file_capacity = 0;
-static c16 *_drop_file = NULL;
+static c16 _class_name[] = { 'R', 'E', 'D', '_', '0', '\0', };
+static b8 _class_ready = 0;
+static void **_hInstance = NULL;
+static void **_hCursor = NULL;
+static void **_window = NULL;
+static i64 _update_width = 0;
+static i64 _update_height = 0;
+static i64 _frame_time = 0;
+static i64 _raw_input_len = 0;
+static i64 _raw_input_capacity = 0;
+static u8 *_raw_input = NULL;
+static i64 _drop_file_len = 0;
+static i64 _drop_file_capacity = 0;
+static c16 *_drop_file = NULL;
static void win32_request_clipboard_(void) {
// TODO
}
-static LRESULT WINAPI win32_window_proc_(HWND hWnd, u32 message, WPARAM wParam, LPARAM lParam) {
+static iptr WINAPI win32_window_proc_(void **hWnd, u32 message, uptr wParam, iptr lParam) {
switch (message) {
case WM_INPUT: {
- HRAWINPUT hRawInput = (HRAWINPUT) lParam;
+ void **hRawInput = (void **) lParam;
u32 len;
if (GetRawInputData(hRawInput, RID_INPUT, NULL, &len, sizeof(RAWINPUTHEADER)) != 0) {
@@ -6854,8 +6819,9 @@ static LRESULT WINAPI win32_window_proc_(HWND hWnd, u32 message, WPARAM wParam,
break;
}
- HDROP hDrop = (HDROP) wParam;
- u32 num = DragQueryFileW(hDrop, 0xffffffffu, NULL, 0);
+ void **hDrop = (void **) wParam;
+
+ u32 num = DragQueryFileW(hDrop, 0xffffffffu, NULL, 0);
if (num == 0)
LOG_error("DragQueryFileW failed: %d", GetLastError());
@@ -6875,7 +6841,7 @@ static LRESULT WINAPI win32_window_proc_(HWND hWnd, u32 message, WPARAM wParam,
// Out of memory.
break;
- if (DragQueryFileW(hDrop, i, (LPWSTR) _drop_file, u16_len + 1) != u16_len) {
+ if (DragQueryFileW(hDrop, i, (c16 *) _drop_file, u16_len + 1) != u16_len) {
LOG_error("DragQueryFileW failed: %d", GetLastError());
break;
}
@@ -6892,7 +6858,7 @@ static LRESULT WINAPI win32_window_proc_(HWND hWnd, u32 message, WPARAM wParam,
utf8_from_utf16_(u8_len, g_platform.drop_files[i].name, u16_len, _drop_file);
- HANDLE hFile = CreateFileW(_drop_file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ void **hFile = CreateFileW(_drop_file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == NULL) {
LOG_error("CreateFileW failed: %d", GetLastError());
@@ -7014,7 +6980,7 @@ static void win32_put_image_to_main_window_(void) {
if (_internal_width == 0 || _internal_height == 0)
return;
- HDC hDC = GetDC(_window);
+ void **hDC = GetDC(_window);
if (hDC == NULL) {
LOG_error("GetDC failed.");