#include #include #include #include "miniwin.h" #include "stubs.h" DWORD last_error; DWORD WINAPI GetLastError(VOID) { return last_error; } VOID WINAPI SetLastError(DWORD dwErrCode) { last_error = dwErrCode; } char __cdecl *_strlwr(char *str) { for (char *p = str; *p; ++p) { *p = tolower(*p); } return str; } int WINAPIV wsprintfA(LPSTR dest, LPCSTR format, ...) { va_list args; va_start(args, format); return vsprintf(dest, format, args); } int __cdecl _strcmpi(const char *_Str1, const char *_Str2) { return strcasecmp(_Str1, _Str2); } char *__cdecl _itoa(int _Value, char *_Dest, int _Radix) { UNIMPLEMENTED(); } DWORD WINAPI GetTickCount(VOID) { struct timespec now; if (clock_gettime(CLOCK_MONOTONIC, &now)) return 0; return now.tv_sec * 1000.0 + now.tv_nsec / 1000000.0; } VOID WINAPI Sleep(DWORD dwMilliseconds) { usleep(dwMilliseconds * 1000); } HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData) { UNIMPLEMENTED(); } WINBOOL WINAPI FindClose(HANDLE hFindFile) { UNIMPLEMENTED(); } UINT WINAPI GetWindowsDirectoryA(LPSTR lpBuffer, UINT uSize) { UNIMPLEMENTED(); } WINBOOL WINAPI GetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters) { UNIMPLEMENTED(); } DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize) { DUMMY(); assert(nSize >= 16); const char *name = ".\\diablo.exe"; strncpy(lpFilename, name, nSize); return strlen(name); } WINBOOL WINAPI GetComputerNameA(LPSTR lpBuffer, LPDWORD nSize) { UNIMPLEMENTED(); } WINBOOL WINAPI DeleteFileA(LPCSTR lpFileName) { UNIMPLEMENTED(); } WINBOOL WINAPI CopyFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, WINBOOL bFailIfExists) { UNIMPLEMENTED(); } HFILE WINAPI OpenFile(LPCSTR lpFileName, LPOFSTRUCT lpReOpenBuff, UINT uStyle) { UNIMPLEMENTED(); } VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) { UNIMPLEMENTED(); } VOID WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection) { DUMMY_ONCE(); } VOID WINAPI LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection) { DUMMY_ONCE(); } VOID WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection) { UNIMPLEMENTED(); } DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) { UNIMPLEMENTED(); } HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, LPCSTR lpName) { DUMMY_PRINT("%s", nullstr(lpName)); return NULL; } HWND WINAPI SetCapture(HWND hWnd) { DUMMY_ONCE(); return hWnd; } WINBOOL WINAPI ReleaseCapture(VOID) { DUMMY_ONCE(); return TRUE; } WINBOOL WINAPI DestroyWindow(HWND hWnd) { UNIMPLEMENTED(); } HWND WINAPI GetLastActivePopup(HWND hWnd) { UNIMPLEMENTED(); } HWND WINAPI GetTopWindow(HWND hWnd) { UNIMPLEMENTED(); } WINBOOL WINAPI SetForegroundWindow(HWND hWnd) { UNIMPLEMENTED(); } HWND WINAPI SetFocus(HWND hWnd) { UNIMPLEMENTED(); } HWND WINAPI FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName) { DUMMY_PRINT("class: %s window: %s", nullstr(lpClassName), nullstr(lpWindowName)); return NULL; } HANDLE WINAPI GetCurrentThread(VOID) { DUMMY_ONCE(); return NULL; } DWORD WINAPI GetCurrentThreadId(VOID) { UNIMPLEMENTED(); } WINBOOL WINAPI SetThreadPriority(HANDLE hThread, int nPriority) { DUMMY_ONCE(); return TRUE; } VOID WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo) { DUMMY(); memset(lpSystemInfo, 0, sizeof(*lpSystemInfo)); lpSystemInfo->dwPageSize = 4096; } HDC WINAPI GetDC(HWND hWnd) { UNIMPLEMENTED(); } int WINAPI ReleaseDC(HWND hWnd, HDC hDC) { UNIMPLEMENTED(); } int WINAPI GetDeviceCaps(HDC hdc, int index) { UNIMPLEMENTED(); } UINT WINAPI GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LPPALETTEENTRY pPalEntries) { UNIMPLEMENTED(); } uintptr_t __cdecl _beginthreadex(void *_Security, unsigned _StackSize, unsigned(__stdcall *_StartAddress)(void *), void *_ArgList, unsigned _InitFlag, unsigned *_ThrdAddr) { UNIMPLEMENTED(); } WINBOOL WINAPI CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, WINBOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) { UNIMPLEMENTED(); } VOID WINAPI ExitProcess(UINT uExitCode) { UNIMPLEMENTED(); } DWORD WINAPI GetCurrentProcessId(VOID) { UNIMPLEMENTED(); } HANDLE WINAPI CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName) { DUMMY(); assert(hFile == (HANDLE)-1); return NULL; } LPVOID WINAPI MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap) { UNIMPLEMENTED(); } WINBOOL WINAPI UnmapViewOfFile(LPCVOID lpBaseAddress) { UNIMPLEMENTED(); } DWORD WINAPI WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds) { UNIMPLEMENTED(); } HWND WINAPI GetForegroundWindow(VOID) { UNIMPLEMENTED(); } HWND WINAPI GetWindow(HWND hWnd, UINT uCmd) { UNIMPLEMENTED(); } DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId) { UNIMPLEMENTED(); } DWORD WINAPI GetPrivateProfileStringA(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName) { UNIMPLEMENTED(); }