diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2025-05-28 04:19:24 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2025-05-28 04:19:24 +0200 |
commit | 6cd861f877a808b9fc30d1c0cbc7859103100f09 (patch) | |
tree | d200227ef02fd3a20c468db6fe70dbe076bb7d79 | |
parent | a71e3613810f20ae4863d7c82bcc4cd38117678e (diff) | |
download | saw-rework.zip |
RED changesrework
-rw-r--r-- | red/runtime.c | 308 |
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."); |