#ifndef _POLYFILL_H_
#define _POLYFILL_H_
#include "harness/compiler.h"
#include "win95_polyfill_defs.h"
#include <assert.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
// All functions have a "_" suffix to avoid collisions with <windows.h>-defined types
uint32_t GetFileAttributesA_(char* path);
int SetFileAttributesA_(char* lpFileName, uint32_t dwFileAttributes);
void* CreateFileA_(
char* lpFileName,
uint32_t dwDesiredAccess,
uint32_t dwShareMode,
void* lpSecurityAttributes,
uint32_t dwCreationDisposition,
uint32_t dwFlagsAndAttributes,
void* hTemplateFile);
uint32_t GetFileSize_(
void* hFile,
uint32_t* lpFileSizeHigh);
int CloseHandle_(
void* hObject);
void GlobalMemoryStatus_(MEMORYSTATUS_* lpBuffer);
int GetCursorPos_(POINT_* lpPoint);
int ScreenToClient_(void* hWnd, POINT_* lpPoint);
uint32_t timeGetTime_(void);
uint32_t GetCurrentDirectoryA_(uint32_t nBufferLength, char* lpBuffer);
int SetCurrentDirectoryA_(char* lpPathName);
uint32_t GetShortPathNameA_(char* lpszLongPath, char* lpszShortPath, uint32_t cchBuffer);
HANDLE_ FindFirstFileA_(char* lpFileName, WIN32_FIND_DATAA_* lpFindFileData);
int FindNextFileA_(HANDLE_ hFindFile, WIN32_FIND_DATAA_* lpFindFileData);
int FindClose_(HANDLE_ hFindFile);
void* CreateWindowExA_(uint32_t dwExStyle, char* lpClassName, char* lpWindowName, uint32_t dwStyle, int X, int Y, int nWidth, int nHeight, void* hWndParent, void* hMenu, void* hInstance, void* lpParam);
int SetWindowPos_(void* hWnd, void* hWndInsertAfter, int X, int Y, int cx, int cy, unsigned int uFlags);
int ShowCursor_(int bShow);
int SendMessageA_(void* hWnd, unsigned int Msg, unsigned int wParam, long lParam);
int MessageBoxA_(void* hWnd, char* lpText, char* lpCaption, unsigned int uType);
int DestroyWindow_(void* hWnd);
HARNESS_NORETURN void ExitProcess_(unsigned int uExitCode);
void TranslateMessage_(MSG_* lpMsg);
void DispatchMessageA_(MSG_* lpMsg);
int PeekMessageA_(MSG_* lpMsg, void* hWnd, unsigned int wMsgFilterMin, unsigned int wMsgFilterMax, unsigned int wRemoveMsg);
int GetMessageA_(MSG_* lpMsg, void* hWnd, unsigned int wMsgFilterMin, unsigned int wMsgFilterMax);
void Sleep_(uint32_t dwMilliseconds);
void DirectDraw_CreateSurface(int width, int height);
void DirectDrawDevice_SetPaletteEntries(PALETTEENTRY_* palette, int pFirst_colour, int pCount);
void DirectInputDevice_GetDeviceState(unsigned int keys, uint8_t* buffer);
void _splitpath_(char* path, char* drive, char* dir, char* fname, char* ext);
int _CrtDbgReport_(int reportType, const char* filename, int linenumber, const char* moduleName, const char* format, ...);
#endif