From d68142a8f2f460c852d6ae95d22cd642e9511a4e Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 14 May 2025 02:27:34 +0200 Subject: [PATCH] Move MFC supporting functions to minimfc (#77) --- CONFIG/detectdx5.cpp | 1 + miniwin/minimfc/include/minimfc.h | 250 +++++++++++++++++++++++++++++ miniwin/minimfc/src/minimfc.cpp | 55 +++++++ miniwin/miniwin/include/miniwin.h | 257 +----------------------------- miniwin/miniwin/src/miniwin.cpp | 54 ------- 5 files changed, 314 insertions(+), 303 deletions(-) diff --git a/CONFIG/detectdx5.cpp b/CONFIG/detectdx5.cpp index 3716ddd1..f1c2b886 100644 --- a/CONFIG/detectdx5.cpp +++ b/CONFIG/detectdx5.cpp @@ -1,6 +1,7 @@ #include "detectdx5.h" #ifdef MINIWIN +#include "minimfc.h" #include "miniwin_ddraw.h" #include "miniwin_dinput.h" #else diff --git a/miniwin/minimfc/include/minimfc.h b/miniwin/minimfc/include/minimfc.h index 46cd739f..76c20b91 100644 --- a/miniwin/minimfc/include/minimfc.h +++ b/miniwin/minimfc/include/minimfc.h @@ -2,6 +2,85 @@ #include "miniwin.h" +#include +#include +#include + +// --- Defines and Macros --- + +// Remove WinAPI stuff +#define BEGIN_MESSAGE_MAP(class_name, base_class_name) +#define DECLARE_MESSAGE_MAP() +#ifndef __cdecl +#define __cdecl +#endif +#define END_MESSAGE_MAP() +#define ON_COMMAND(id, func) +#define ON_LBN_SELCHANGE(id, func) +#define ON_WM_DESTROY() +#define ON_WM_PAINT() +#define ON_WM_QUERYDRAGICON() +#define ON_WM_SYSCOMMAND() + +#define FAILED(hr) (((HRESULT) (hr)) < 0) +#define InterlockedIncrement(x) __sync_add_and_fetch(x, 1) +#define INVALID_HANDLE ((HANDLE) -1) +#define INVALID_HANDLE_VALUE ((HANDLE) -1) +#define HKEY_LOCAL_MACHINE ((HKEY) 0x80000002) +#define LOWORD(l) ((WORD) (((DWORD_PTR) (l)) & 0xffff)) +#define MAKEINTRESOURCE(i) (reinterpret_cast((ULONG_PTR) ((WORD) (i)))) + +#define ICON_BIG 1 +#define ICON_SMALL 0 + +#define KEY_READ 0x20019 +#define KEY_WRITE 0x20006 + +#define LB_ADDSTRING 0x180 +#define LB_GETCURSEL 0x0188 +#define LB_SETCURSEL 0x185 + +#define MF_SEPARATOR 0x80000000 +#define MF_STRING 0x00000000 + +#define SM_CXICON 11 +#define SM_CYICON 12 + +#define WM_ICONERASEBKGND 0x0027 +#define WM_SETICON 0x804 + +#define ERROR_SUCCESS 0 +#define GENERIC_READ 0x80000000L +#define OPEN_EXISTING 3 +#define REG_SZ 1 +#define RT_GROUP_ICON 0x00000007 +#define SW_RESTORE 9 + +// --- Typedefs --- +typedef char CHAR; +typedef BYTE* LPBYTE; +typedef char* LPTSTR; +typedef const char* LPCTSTR; +typedef intptr_t INT_PTR, *PINT_PTR; +typedef uintptr_t UINT_PTR, *PUINT_PTR; +typedef intptr_t LONG_PTR, *PLONG_PTR; +typedef uintptr_t ULONG_PTR, *PULONG_PTR; +typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; +typedef UINT_PTR WPARAM; +typedef LONG_PTR LPARAM, LRESULT; +typedef HKEY* PHKEY; +typedef BITMAPINFO* LPBITMAPINFO; +typedef GUID REFIID; + +// --- Structs --- +struct OSVERSIONINFOA { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; +}; +typedef struct IUnknown* LPUNKNOWN; + struct CWnd { void* m_hWnd; void EnableWindow(bool bEnable) {} @@ -56,10 +135,181 @@ struct CWinApp { virtual int ExitInstance(); }; +struct MEMORYSTATUS { + DWORD dwLength; + DWORD dwTotalPhys; +}; + struct CCommandLineInfo { virtual void ParseParam(LPCSTR pszParam, BOOL bFlag, BOOL bLast) {} }; +// --- Classs --- +class CString { +public: + CString(const char* str = "") : m_str(str) {} + void LoadString(int str) {} + operator const char*() const { return m_str; } + +private: + const char* m_str; +}; + +// --- Functions --- +inline WINBOOL WINAPI SetForegroundWindow(HWND hWnd) +{ + return TRUE; +} + +inline BOOL ShowWindow(HWND hWnd, int nCmdShow) +{ + return TRUE; +} + +inline BOOL SetWindowPos(HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) +{ + return TRUE; +} + +BOOL GetWindowRect(HWND hDlg, struct RECT* Rect); + +inline BOOL GetClientRect(LPRECT lpRect) +{ + return TRUE; +} + +inline BOOL IsIconic() +{ + return FALSE; +} + +inline int GetSystemMetrics(int nIndex) +{ + return 0; +} + +inline BOOL GetVersionEx(OSVERSIONINFOA* version) +{ + return TRUE; +} + +void GlobalMemoryStatus(MEMORYSTATUS* memory_status); + +inline BOOL DrawIcon(HDC hdc, int x, int y, HICON hIcon) +{ + return TRUE; +} + +inline bool AppendMenu(void* menu, UINT uFlags, UINT_PTR uIDNewItem, LPCTSTR lpszNewItem) +{ + return true; +} + +inline LSTATUS RegOpenKeyEx(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult) +{ + return ERROR_SUCCESS; +} + +inline LSTATUS RegQueryValueEx( + HKEY hKey, + LPCSTR lpValueName, + LPDWORD lpReserved, + LPDWORD lpType, + BYTE* lpData, + LPDWORD lpcbData +) +{ + return ERROR_SUCCESS; +} + +inline LSTATUS RegCloseKey(HKEY hKey) +{ + return ERROR_SUCCESS; +} + +inline LSTATUS RegSetValueEx( + HKEY hKey, + LPCSTR lpValueName, + DWORD Reserved, + DWORD dwType, + const BYTE* lpData, + DWORD cbData +) +{ + return ERROR_SUCCESS; +} + +inline LSTATUS RegCreateKeyEx( + HKEY hKey, + LPCSTR lpSubKey, + DWORD Reserved, + const char* lpClass, + DWORD dwOptions, + REGSAM samDesired, + void* lpSecurityAttributes, + PHKEY phkResult, + LPDWORD lpdwDisposition +) +{ + return ERROR_SUCCESS; +} + +void OutputDebugString(const char* lpOutputString); + +inline void* GetProcAddress(HMODULE module, const char* name) +{ + return 0; +} + +int miniwin_stricmp(const char* str1, const char* str2); +#define _stricmp miniwin_stricmp + +inline HICON LoadIcon(HINSTANCE hInstance, LPCSTR lpIconName) +{ + return 0; +} + +inline int lstrcmpi(LPCSTR lpString1, LPCSTR lpString2) +{ + return 0; +} + +inline HINSTANCE AfxFindResourceHandle(LPCTSTR lpszResourceName, int lpszResourceType) +{ + return 0; +} + +inline HMODULE LoadLibrary(const char* name) +{ + return 0; +} + +inline int FreeLibrary(void* hModule) +{ + return 0; +} + +inline HMENU GetSystemMenu(HWND hWnd, bool bRevert) +{ + assert(false && "Needs implementation"); + return reinterpret_cast(0x1234); +} + +inline HWND WINAPI FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName) +{ + return 0; +} + +inline LRESULT SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam) +{ + return 0; +} + +inline LRESULT SendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + return 0; +} + inline BOOL IsDlgButtonChecked(int nIDButton) { return 0; diff --git a/miniwin/minimfc/src/minimfc.cpp b/miniwin/minimfc/src/minimfc.cpp index 2c6e1af0..a74fc600 100644 --- a/miniwin/minimfc/src/minimfc.cpp +++ b/miniwin/minimfc/src/minimfc.cpp @@ -5,6 +5,7 @@ #include #include #include +#include char* afxCurrentAppName; AFX_MODULE_STATE g_CustomModuleState; @@ -97,3 +98,57 @@ void AfxMessageBox(const char* message) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, title, message, NULL); } + +static std::vector> sdl_hwnd_mapping; + +SDL_Window* miniwin_GetSdlWindow(HWND hWnd) +{ + for (size_t i = 0; i < sdl_hwnd_mapping.size(); i++) { + if (sdl_hwnd_mapping[i].second == hWnd) { + return sdl_hwnd_mapping[i].first; + } + } + return NULL; +} + +BOOL GetWindowRect(HWND hWnd, RECT* Rect) +{ + int x, y, w, h; + if (!Rect) { + return FALSE; + } + SDL_Window* window = miniwin_GetSdlWindow(hWnd); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unregistered HWND %p", hWnd); + Rect->left = 0; + Rect->top = 0; + Rect->right = 640; + Rect->bottom = 480; + return FALSE; + } + SDL_GetWindowPosition(window, &x, &y); + SDL_GetWindowSize(window, &w, &h); + + Rect->right = x; + Rect->top = y; + Rect->left = w + x; + Rect->bottom = h + y; + + return TRUE; +} + +void OutputDebugString(const char* lpOutputString) +{ + SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "%s", lpOutputString); +} + +int miniwin_stricmp(const char* str1, const char* str2) +{ + return SDL_strcasecmp(str1, str2); +} + +void GlobalMemoryStatus(MEMORYSTATUS* memory_status) +{ + memory_status->dwLength = sizeof(*memory_status); + memory_status->dwTotalPhys = 1024 * SDL_GetSystemRAM(); +} diff --git a/miniwin/miniwin/include/miniwin.h b/miniwin/miniwin/include/miniwin.h index 53b1041a..af60ab90 100644 --- a/miniwin/miniwin/include/miniwin.h +++ b/miniwin/miniwin/include/miniwin.h @@ -1,16 +1,10 @@ #pragma once -#include #include -#include #include -#include #include // --- Defines and Macros --- -#define RASTERCAPS 0x00000000 -#define RC_PALETTE 0x00000000 -#define SIZEPALETTE 256 #define MAKE_HRESULT(sev, fac, code) \ ((HRESULT) (((uint32_t) (sev) << 31) | ((uint32_t) (fac) << 16) | ((uint32_t) (code)))) @@ -19,31 +13,10 @@ const GUID GuidName = {l, w1, w2, b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8} // Remove WinAPI stuff -#define BEGIN_MESSAGE_MAP(class_name, base_class_name) -#define DECLARE_MESSAGE_MAP() #define CALLBACK -#ifndef __cdecl -#define __cdecl -#endif #define FAR -#define END_MESSAGE_MAP() -#define ON_COMMAND(id, func) -#define ON_LBN_SELCHANGE(id, func) -#define ON_WM_DESTROY() -#define ON_WM_PAINT() -#define ON_WM_QUERYDRAGICON() -#define ON_WM_SYSCOMMAND() #define WINAPI - -#define FAILED(hr) (((HRESULT) (hr)) < 0) -#define InterlockedIncrement(x) __sync_add_and_fetch(x, 1) -#define INVALID_HANDLE ((HANDLE) -1) -#define INVALID_HANDLE_VALUE ((HANDLE) -1) -#define HKEY_LOCAL_MACHINE ((HKEY) 0x80000002) -#define GWL_STYLE (-16) #define HWND_NOTOPMOST (HWND) - 2 -#define LOWORD(l) ((WORD) (((DWORD_PTR) (l)) & 0xffff)) -#define MAKEINTRESOURCE(i) (reinterpret_cast((ULONG_PTR) ((WORD) (i)))) #define RGB(r, g, b) ((r) | ((g) << 8) | ((b) << 16)) #define S_OK ((HRESULT) 0) #define E_NOINTERFACE (0x80004002) @@ -51,30 +24,12 @@ #define TRUE 1 #define FALSE 0 -#define ICON_BIG 1 -#define ICON_SMALL 0 - -#define KEY_READ 0x20019 -#define KEY_WRITE 0x20006 - -#define LB_ADDSTRING 0x180 -#define LB_GETCURSEL 0x0188 -#define LB_SETCURSEL 0x185 - -#define MF_SEPARATOR 0x80000000 -#define MF_STRING 0x00000000 - -#define SM_CXICON 11 -#define SM_CYICON 12 - #define SWP_NOACTIVATE 0x0010 #define SWP_NOMOVE 0x0002 #define SWP_NOSIZE 0x0004 #define SWP_NOZORDER 0x0001 #define WM_CLOSE 0x0010 -#define WM_ICONERASEBKGND 0x0027 -#define WM_SETICON 0x804 #define WM_QUIT 0x0012 #define WM_TIMER 0x0113 @@ -84,30 +39,27 @@ #define WS_SYSMENU 0x00080000L #define WS_THICKFRAME 0x00040000L +#define GWL_STYLE (-16) +#define GWL_EXSTYLE -20 + #define ANSI_CHARSET 0 #define BI_RGB 0 #define CLIP_DEFAULT_PRECIS 0 #define DEFAULT_QUALITY 0 -#define ERROR_SUCCESS 0 #define ETO_OPAQUE 0x0002 #define FF_DONTCARE 0x00000000 +#define RASTERCAPS 0x00000000 +#define RC_PALETTE 0x00000000 +#define SIZEPALETTE 256 #define FW_NORMAL 400 -#define GENERIC_READ 0x80000000L -#define GWL_EXSTYLE -20 #define OPAQUE 2 -#define OPEN_EXISTING 3 #define OUT_DEFAULT_PRECIS 0 #define RDW_FRAME 0x0400 -#define REG_SZ 1 -#define RT_GROUP_ICON 0x00000007 #define SRCCOPY 0x00CC0020 -#define SW_RESTORE 9 #define VARIABLE_PITCH 2 // --- Typedefs --- -typedef char CHAR; typedef uint8_t BYTE, byte; -typedef BYTE* LPBYTE; typedef int32_t LONG; typedef uint32_t ULONG, DWORD; typedef DWORD* LPDWORD; @@ -117,22 +69,12 @@ typedef unsigned short WORD; typedef long* LPLONG; typedef void* LPVOID; typedef char* LPSTR; -typedef char* LPTSTR; -typedef const char* LPCTSTR; typedef const char* LPCSTR; -typedef intptr_t INT_PTR, *PINT_PTR; -typedef uintptr_t UINT_PTR, *PUINT_PTR; -typedef intptr_t LONG_PTR, *PLONG_PTR; -typedef uintptr_t ULONG_PTR, *PULONG_PTR; -typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; -typedef UINT_PTR WPARAM; -typedef LONG_PTR LPARAM, LRESULT; typedef void* HANDLE; typedef HANDLE HMENU, HICON, HFONT; typedef struct HINSTANCE__* HINSTANCE; typedef HANDLE HWND, HMODULE, HDC, HPALETTE, HFILE, HCURSOR; typedef LONG HRESULT, LSTATUS, HKEY, REGSAM; -typedef HKEY* PHKEY; // --- Structs --- struct tagPOINT { @@ -146,14 +88,13 @@ struct SIZE { LONG cy; }; -struct tagRECT { +struct RECT { LONG left; LONG top; LONG right; LONG bottom; }; -typedef tagRECT RECT; -typedef tagRECT* LPRECT; +typedef RECT* LPRECT; struct BITMAPINFOHEADER { DWORD biSize; @@ -185,7 +126,6 @@ struct BITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; }; -typedef BITMAPINFO* LPBITMAPINFO; struct PALETTEENTRY { BYTE peRed; @@ -201,7 +141,6 @@ struct GUID { int m_data3; int m_data4; }; -typedef GUID REFIID; typedef GUID* LPGUID; struct IUnknown { @@ -214,8 +153,6 @@ struct IUnknown { private: int m_refCount; }; -typedef struct IUnknown* LPUNKNOWN; - struct LOGPALETTE { WORD palVersion; WORD palNumEntries; @@ -223,79 +160,16 @@ struct LOGPALETTE { }; typedef LOGPALETTE* LPLOGPALETTE; -struct MEMORYSTATUS { - DWORD dwLength; - DWORD dwTotalPhys; -}; - -struct OSVERSIONINFOA { - DWORD dwOSVersionInfoSize; - DWORD dwMajorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformId; -}; - -// --- Classs --- -class CString { -public: - CString(const char* str = "") : m_str(str) {} - void LoadString(int str) {} - operator const char*() const { return m_str; } - -private: - const char* m_str; -}; - -// --- Functions --- -inline WINBOOL WINAPI SetForegroundWindow(HWND hWnd) -{ - return TRUE; -} - -inline BOOL ShowWindow(HWND hWnd, int nCmdShow) -{ - return TRUE; -} - inline BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) { return TRUE; } -inline BOOL SetWindowPos(HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags) -{ - return TRUE; -} - -BOOL GetWindowRect(HWND hDlg, struct tagRECT* Rect); - -inline BOOL GetClientRect(LPRECT lpRect) -{ - return TRUE; -} - -inline BOOL IsIconic() -{ - return FALSE; -} - -inline int GetSystemMetrics(int nIndex) -{ - return 0; -} - inline UINT WINAPI GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LPPALETTEENTRY pPalEntries) { return 0; } -inline BOOL GetVersionEx(OSVERSIONINFOA* version) -{ - return TRUE; -} - -void GlobalMemoryStatus(MEMORYSTATUS* memory_status); - inline HDC WINAPI GetDC(HWND hWnd) { return 0; @@ -331,11 +205,6 @@ inline int SetTextColor(HDC hdc, int color) return color; } -inline BOOL DrawIcon(HDC hdc, int x, int y, HICON hIcon) -{ - return TRUE; -} - inline static BOOL GetTextExtentPoint(HDC hdc, LPCSTR lpString, int c, SIZE* psizl) { if (psizl) { @@ -380,11 +249,6 @@ inline int GetTextExtentPoint32(HDC hdc, LPCSTR str, int len, SIZE* out) return GetTextExtentPoint(hdc, str, len, out); } -inline bool AppendMenu(void* menu, UINT uFlags, UINT_PTR uIDNewItem, LPCTSTR lpszNewItem) -{ - return true; -} - inline HMENU GetMenu(HWND hWnd) { return NULL; @@ -395,62 +259,6 @@ inline int DrawMenuBar(void* hWnd) return 1; } -inline LSTATUS RegOpenKeyEx(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult) -{ - return ERROR_SUCCESS; -} - -inline LSTATUS RegQueryValueEx( - HKEY hKey, - LPCSTR lpValueName, - LPDWORD lpReserved, - LPDWORD lpType, - BYTE* lpData, - LPDWORD lpcbData -) -{ - return ERROR_SUCCESS; -} - -inline LSTATUS RegCloseKey(HKEY hKey) -{ - return ERROR_SUCCESS; -} - -inline LSTATUS RegSetValueEx( - HKEY hKey, - LPCSTR lpValueName, - DWORD Reserved, - DWORD dwType, - const BYTE* lpData, - DWORD cbData -) -{ - return ERROR_SUCCESS; -} - -inline LSTATUS RegCreateKeyEx( - HKEY hKey, - LPCSTR lpSubKey, - DWORD Reserved, - const char* lpClass, - DWORD dwOptions, - REGSAM samDesired, - void* lpSecurityAttributes, - PHKEY phkResult, - LPDWORD lpdwDisposition -) -{ - return ERROR_SUCCESS; -} - -void OutputDebugString(const char* lpOutputString); - -inline void* GetProcAddress(HMODULE module, const char* name) -{ - return 0; -} - inline static int StretchDIBits( void* hdc, int xDest, @@ -485,19 +293,11 @@ inline int DeleteObject(void*) return 1; } -int miniwin_stricmp(const char* str1, const char* str2); -#define _stricmp miniwin_stricmp - inline BOOL AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle) { return TRUE; } -inline HICON LoadIcon(HINSTANCE hInstance, LPCSTR lpIconName) -{ - return 0; -} - inline int SetRect(RECT* rc, int left, int top, int right, int bottom) { rc->left = left; @@ -507,49 +307,8 @@ inline int SetRect(RECT* rc, int left, int top, int right, int bottom) return 1; } -inline int lstrcmpi(LPCSTR lpString1, LPCSTR lpString2) -{ - return 0; -} - -inline HINSTANCE AfxFindResourceHandle(LPCTSTR lpszResourceName, int lpszResourceType) -{ - return 0; -} - -inline HMODULE LoadLibrary(const char* name) -{ - return 0; -} - -inline int FreeLibrary(void* hModule) -{ - return 0; -} - -inline HMENU GetSystemMenu(HWND hWnd, bool bRevert) -{ - assert(false && "Needs implementation"); - return reinterpret_cast(0x1234); -} - VOID WINAPI Sleep(DWORD dwMilliseconds); -inline HWND WINAPI FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName) -{ - return 0; -} - -inline LRESULT SendMessage(UINT Msg, WPARAM wParam, LPARAM lParam) -{ - return 0; -} - -inline LRESULT SendMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) -{ - return 0; -} - inline HPALETTE CreatePalette(LPLOGPALETTE lpLogPalette) { return nullptr; diff --git a/miniwin/miniwin/src/miniwin.cpp b/miniwin/miniwin/src/miniwin.cpp index 88b397b4..92da13ce 100644 --- a/miniwin/miniwin/src/miniwin.cpp +++ b/miniwin/miniwin/src/miniwin.cpp @@ -25,61 +25,7 @@ HRESULT IUnknown::QueryInterface(const GUID& riid, void** ppvObject) return E_NOINTERFACE; } -static std::vector> sdl_hwnd_mapping; - -SDL_Window* miniwin_GetSdlWindow(HWND hWnd) -{ - for (size_t i = 0; i < sdl_hwnd_mapping.size(); i++) { - if (sdl_hwnd_mapping[i].second == hWnd) { - return sdl_hwnd_mapping[i].first; - } - } - return NULL; -} - -void OutputDebugString(const char* lpOutputString) -{ - SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "%s", lpOutputString); -} - VOID WINAPI Sleep(DWORD dwMilliseconds) { SDL_Delay(dwMilliseconds); } - -BOOL GetWindowRect(HWND hWnd, tagRECT* Rect) -{ - int x, y, w, h; - if (!Rect) { - return FALSE; - } - SDL_Window* window = miniwin_GetSdlWindow(hWnd); - if (window == NULL) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unregistered HWND %p", hWnd); - Rect->left = 0; - Rect->top = 0; - Rect->right = 640; - Rect->bottom = 480; - return FALSE; - } - SDL_GetWindowPosition(window, &x, &y); - SDL_GetWindowSize(window, &w, &h); - - Rect->right = x; - Rect->top = y; - Rect->left = w + x; - Rect->bottom = h + y; - - return TRUE; -} - -int miniwin_stricmp(const char* str1, const char* str2) -{ - return SDL_strcasecmp(str1, str2); -} - -void GlobalMemoryStatus(MEMORYSTATUS* memory_status) -{ - memory_status->dwLength = sizeof(*memory_status); - memory_status->dwTotalPhys = 1024 * SDL_GetSystemRAM(); -}