diff --git a/3rdParty/StormLib/src/StormPort.h b/3rdParty/StormLib/src/StormPort.h index 2504ec862..c35ff549d 100644 --- a/3rdParty/StormLib/src/StormPort.h +++ b/3rdParty/StormLib/src/StormPort.h @@ -313,6 +313,6 @@ // #define bool int -void TranslateFileName(char* dst, int dstLen, const char* src); +extern "C" void TranslateFileName(char* dst, int dstLen, const char* src); #endif // __STORMPORT_H__ diff --git a/CMake/mingwcc.cmake b/CMake/mingwcc.cmake new file mode 100644 index 000000000..c00643837 --- /dev/null +++ b/CMake/mingwcc.cmake @@ -0,0 +1,13 @@ +SET(CROSS_PREFIX "/usr" CACHE STRING "crosstool-NG prefix") + +SET(CMAKE_SYSTEM_NAME Windows) + +SET(CMAKE_C_COMPILER "${CROSS_PREFIX}/i686-w64-mingw32/bin/i686-w64-mingw32-gcc") +SET(CMAKE_CXX_COMPILER "${CROSS_PREFIX}/i686-w64-mingw32/bin/i686-w64-mingw32-g++") + +SET(CMAKE_FIND_ROOT_PATH "${CROSS_PREFIX}/i686-w64-mingw32" "${CROSS_PREFIX}/i686-w64-mingw32/i686-w64-mingw32") + +SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/CMakeLists.txt b/CMakeLists.txt index caf541c47..d10c1741b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,6 +196,7 @@ target_link_libraries(devilutionx PRIVATE SDL2::SDL2_mixer sodium) +target_compile_definitions(devilution PRIVATE DEVILUTION_ENGINE) target_compile_definitions(devilution PUBLIC DEVILUTION_STUB "$<$:_DEBUG>" @@ -236,8 +237,8 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Silence warnings about __int64 alignment hack not always being applicable target_compile_options(devilutionx PRIVATE -Wno-ignored-attributes) # Fix: error: cast from pointer to smaller type 'unsigned char' loses information - target_compile_options(devilution PRIVATE -fms-extensions -fms-compatibility -fms-compatibility-version=19.00) - + target_compile_options(devilution PRIVATE -fms-extensions -fms-compatibility -fms-compatibility-version=19.00) + set_target_properties(devilutionx PROPERTIES LINK_FLAGS "-liconv") endif() diff --git a/README.md b/README.md index 2dccbbd76..5360d4fae 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,12 @@ Install the dependencies using [Homebrew](https://brew.sh/): brew install cmake sdl2_mixer sdl2_ttf libsodium pkg-config ``` +### Cross-compiling using MinGW (work in progress, does not yet compile) +Use the following cmake invocation: +``` +cmake -DCMAKE_TOOLCHAIN_FILE=../CMake/mingwcc.cmake -DCROSS_PREFIX=/path/to/crosstool-NG/prefix .. +``` + Now run the following commands: ``` mkdir build diff --git a/Source/appfat.cpp b/Source/appfat.cpp index 461208819..4557d54b4 100644 --- a/Source/appfat.cpp +++ b/Source/appfat.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char sz_error_buf[256]; BOOL terminating; int cleanup_thread_id; @@ -397,3 +399,5 @@ void __fastcall DirErrorDlg(char *error) TermMsg(NULL); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/automap.cpp b/Source/automap.cpp index e088e37e7..00a963a3c 100644 --- a/Source/automap.cpp +++ b/Source/automap.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + // BUGFIX: only the first 256 elements are ever read WORD automaptype[512]; static int MapX; @@ -638,3 +640,5 @@ void __cdecl AutomapZoomReset() AMPlayerX = AutoMapYPos >> 1; AMPlayerY = AMPlayerX >> 1; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/capture.cpp b/Source/capture.cpp index e47b9ebe2..ba1ce0f40 100644 --- a/Source/capture.cpp +++ b/Source/capture.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + void __cdecl CaptureScreen() { HANDLE hObject; @@ -184,3 +186,5 @@ void __fastcall RedPalette(PALETTEENTRY *pal) lpDDPalette->lpVtbl->SetEntries(lpDDPalette, 0, 0, 256, red); #endif } + +DEVILUTION_END_NAMESPACE diff --git a/Source/codec.cpp b/Source/codec.cpp index f92196650..fe7b6bd8f 100644 --- a/Source/codec.cpp +++ b/Source/codec.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int __fastcall codec_decode(void *pbSrcDst, int size, char *pszPassword) { unsigned int v3; // ebx @@ -152,3 +154,5 @@ void __fastcall codec_encode(void *pbSrcDst, int size, int size_64, char *pszPas } // 4036BE: using guessed type char var_AC[128]; // 4036BE: using guessed type char dst[20]; + +DEVILUTION_END_NAMESPACE diff --git a/Source/control.cpp b/Source/control.cpp index 1bbb899cc..8f1f015a6 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char sgbNextTalkSave; // weak char sgbTalkSavePos; // weak void *pDurIcons; @@ -2877,3 +2879,5 @@ void __fastcall control_up_down(char a1) strcpy(sgszTalkMsg, sgszTalkSave[v1]); } // 4B84CD: using guessed type char sgbTalkSavePos; + +DEVILUTION_END_NAMESPACE diff --git a/Source/cursor.cpp b/Source/cursor.cpp index e081d89fd..14ab57605 100644 --- a/Source/cursor.cpp +++ b/Source/cursor.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int cursH; // weak int icursH28; // idb int cursW; // idb @@ -692,3 +694,5 @@ void __cdecl CheckCursMove() // 52569C: using guessed type int zoomflag; // 52575C: using guessed type int doomflag; // 69BD04: using guessed type int questlog; + +DEVILUTION_END_NAMESPACE diff --git a/Source/dead.cpp b/Source/dead.cpp index 068642a34..da5fcda7f 100644 --- a/Source/dead.cpp +++ b/Source/dead.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + // unused, this was probably for blood boil/burn int spurtndx; DeadStruct dead[MAXDEAD]; @@ -92,3 +94,5 @@ void __cdecl SetDead() } } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/debug.cpp b/Source/debug.cpp index 152f21240..ed78f3495 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + void *pSquareCel; char dMonsDbg[NUMLEVELS][MAXDUNX][MAXDUNY]; char dFlagDbg[NUMLEVELS][MAXDUNX][MAXDUNY]; @@ -227,3 +229,5 @@ void __cdecl NextDebugMonster() NetSendCmdString(1 << myplr, dstr); } #endif + +DEVILUTION_END_NAMESPACE diff --git a/Source/diablo.cpp b/Source/diablo.cpp index a0d716f55..622491eec 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + HWND ghMainWnd; int glMid1Seed[NUMLEVELS]; int glMid2Seed[NUMLEVELS]; @@ -1990,3 +1992,5 @@ void __cdecl diablo_color_cyc_logic() } } // 52574C: using guessed type int color_cycle_timer; + +DEVILUTION_END_NAMESPACE diff --git a/Source/doom.cpp b/Source/doom.cpp index 7fb51ffbe..3716064e0 100644 --- a/Source/doom.cpp +++ b/Source/doom.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int doom_quest_time; int doom_stars_drawn; void *pDoomCel; @@ -97,3 +99,5 @@ void __cdecl doom_draw() CelDecodeOnly(64, 511, pDoomCel, 1, 640); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/drlg_l1.cpp b/Source/drlg_l1.cpp index 362d5e557..43213e766 100644 --- a/Source/drlg_l1.cpp +++ b/Source/drlg_l1.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char L5dungeon[80][80]; char mydflags[40][40]; int setloadflag; // weak @@ -1843,3 +1845,5 @@ void __cdecl DRLG_L5CornerFix() ++v0; } while (v0 < 39); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/drlg_l2.cpp b/Source/drlg_l2.cpp index d0ac46c46..be1c610c0 100644 --- a/Source/drlg_l2.cpp +++ b/Source/drlg_l2.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int nSx1; int nSx2; // weak int nSy1; @@ -2995,3 +2997,5 @@ void __cdecl DRLG_InitL2Vals() ++v6; } while ((INT_PTR)v7 < (INT_PTR)dPiece[1]); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/drlg_l3.cpp b/Source/drlg_l3.cpp index bea47fd4c..ea2b1b0a4 100644 --- a/Source/drlg_l3.cpp +++ b/Source/drlg_l3.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char lavapool; // weak int abyssx; // weak int lockoutcnt; // weak @@ -2570,3 +2572,5 @@ void __fastcall LoadPreL3Dungeon(char *sFileName, int vx, int vy) memcpy(pdungeon, dungeon, 0x640u); mem_free_dbg(v5); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/drlg_l4.cpp b/Source/drlg_l4.cpp index e2c1264da..bb8df6a9a 100644 --- a/Source/drlg_l4.cpp +++ b/Source/drlg_l4.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int diabquad1x; // weak int diabquad1y; // weak int diabquad3x; // idb @@ -2944,3 +2946,5 @@ void __cdecl DRLG_L4Pass3() ++v4; } while (v4 < 40); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/dthread.cpp b/Source/dthread.cpp index 7643c21f6..06230ec4b 100644 --- a/Source/dthread.cpp +++ b/Source/dthread.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + static CRITICAL_SECTION sgMemCrit; // idb unsigned int glpDThreadId; // idb TMegaPkt *sgpInfoHead; /* may not be right struct */ @@ -169,3 +171,5 @@ void __cdecl dthread_cleanup() sgpInfoHead = tmp1; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/dx.cpp b/Source/dx.cpp index c3f8add4d..1122b9c78 100644 --- a/Source/dx.cpp +++ b/Source/dx.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + Screen *sgpBackBuf; LPDIRECTDRAW lpDDInterface; IDirectDrawPalette *lpDDPalette; // idb @@ -351,3 +353,5 @@ void __cdecl dx_reinit() LeaveCriticalSection(&sgMemCrit); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/effects.cpp b/Source/effects.cpp index cc00da367..ec624c028 100644 --- a/Source/effects.cpp +++ b/Source/effects.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int sfxdelay; // weak int sfxdnum; HANDLE sfx_stream; @@ -1257,3 +1259,5 @@ void __stdcall effects_play_sound(char *snd_file) } } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/encrypt.cpp b/Source/encrypt.cpp index 936d09f8b..b0f94cf82 100644 --- a/Source/encrypt.cpp +++ b/Source/encrypt.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + DWORD hashtable[1280]; void __fastcall Decrypt(void *block, DWORD size, DWORD key) @@ -157,3 +159,5 @@ void __fastcall PkwareDecompress(void *param, int recv_size, int dwMaxBytes) mem_free_dbg(ptr); mem_free_dbg(pbOutBuff); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/engine.cpp b/Source/engine.cpp index 679eb18dc..da25a8825 100644 --- a/Source/engine.cpp +++ b/Source/engine.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char gbPixelCol; // automap pixel color 8-bit (palette entry) int dword_52B970; // BOOLEAN flip - if y < x int orgseed; // weak @@ -2432,3 +2434,5 @@ void __fastcall PlayInGameMovie(char *pszMovie) drawpanflag = 255; } // 52571C: using guessed type int drawpanflag; + +DEVILUTION_END_NAMESPACE diff --git a/Source/error.cpp b/Source/error.cpp index 81998bd59..12c9e3325 100644 --- a/Source/error.cpp +++ b/Source/error.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char msgtable[80]; char msgdelay; char msgflag; @@ -162,3 +164,5 @@ void __cdecl DrawDiabloMsg() msgflag = msgtable[msgcnt]; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/fault.cpp b/Source/fault.cpp index f4a5a44b9..d7308cf3f 100644 --- a/Source/fault.cpp +++ b/Source/fault.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter; // idb #ifndef _MSC_VER @@ -254,3 +256,5 @@ LPTOP_LEVEL_EXCEPTION_FILTER __cdecl exception_get_filter() { return lpTopLevelExceptionFilter; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/gamemenu.cpp b/Source/gamemenu.cpp index 5b4279440..2c562eca2 100644 --- a/Source/gamemenu.cpp +++ b/Source/gamemenu.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + TMenuItem sgSingleMenu[6] = { // clang-format off // dwFlags, pszStr, fnMenu @@ -298,3 +300,5 @@ void __cdecl gamemenu_color_cycling() palette_set_color_cycling(palette_get_colour_cycling() == 0); sgOptionMenu[3].pszStr = color_cycling_toggle_names[palette_get_colour_cycling() & 1]; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/gendung.cpp b/Source/gendung.cpp index 301e63ced..74dc19bc8 100644 --- a/Source/gendung.cpp +++ b/Source/gendung.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + short level_frame_types[2048]; int themeCount; char nTransTable[2049]; @@ -1242,3 +1244,5 @@ void __cdecl InitLevels() } // 52572C: using guessed type int leveldebug; // 5CF31D: using guessed type char setlevel; + +DEVILUTION_END_NAMESPACE diff --git a/Source/gmenu.cpp b/Source/gmenu.cpp index 0bd757ac9..9019ae2a5 100644 --- a/Source/gmenu.cpp +++ b/Source/gmenu.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + void *optbar_cel; BOOLEAN byte_634464; // weak void *PentSpin_cel; @@ -462,3 +464,5 @@ void __fastcall gmenu_slider_3(TMenuItem *pItem, int dwTicks) { pItem->dwFlags ^= (pItem->dwFlags ^ (dwTicks << 12)) & 0xFFF000; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/help.cpp b/Source/help.cpp index c04fec503..cf538ab10 100644 --- a/Source/help.cpp +++ b/Source/help.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int help_select_line; // weak int dword_634494; // weak int helpflag; @@ -246,3 +248,5 @@ void __cdecl HelpScrollDown() } // 634490: using guessed type int help_select_line; // 634960: using guessed type int HelpTop; + +DEVILUTION_END_NAMESPACE diff --git a/Source/init.cpp b/Source/init.cpp index f85f3e8a0..8908ad786 100644 --- a/Source/init.cpp +++ b/Source/init.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + _SNETVERSIONDATA fileinfo; int gbActive; // weak char diablo_exe_path[260]; @@ -472,3 +474,5 @@ WNDPROC __fastcall SetWindowProc(WNDPROC NewProc) CurrentProc = NewProc; return OldProc; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/interfac.cpp b/Source/interfac.cpp index 31cc65344..d0c8ecece 100644 --- a/Source/interfac.cpp +++ b/Source/interfac.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + void *sgpBackCel; int sgdwProgress; int progress_id; // idb @@ -356,3 +358,5 @@ void __fastcall InitCutscene(unsigned int uMsg) goto LABEL_33; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/inv.cpp b/Source/inv.cpp index 7eca72dc9..e1935159a 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + BOOL invflag; void *pInvCels; int drawsbarflag; // idb @@ -2786,3 +2788,5 @@ int __cdecl DropItemBeforeTrig() SetCursor_(CURSOR_HAND); return 1; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/items.cpp b/Source/items.cpp index a7aab5596..572d3110a 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int itemactive[MAXITEMS]; int uitemflag; int itemavail[MAXITEMS]; @@ -4987,3 +4989,5 @@ void __fastcall PutItemRecord(int seed, WORD ci, int index) } while (v3 < gnNumGetRecords); } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/lighting.cpp b/Source/lighting.cpp index ca0f77487..e4d0feda3 100644 --- a/Source/lighting.cpp +++ b/Source/lighting.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + LightListStruct VisionList[32]; char lightactive[32]; LightListStruct LightList[32]; @@ -1581,3 +1583,5 @@ void __cdecl lighting_color_cycling() } } // 525728: using guessed type int light4flag; + +DEVILUTION_END_NAMESPACE diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 841e24834..c98811a8d 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + unsigned char *tbuff; void __fastcall LoadGame(BOOL firstflag) @@ -700,3 +702,5 @@ void __cdecl LoadLevel() mem_free_dbg(LoadBuff); } // 642A18: using guessed type int dolighting; + +DEVILUTION_END_NAMESPACE diff --git a/Source/logging.cpp b/Source/logging.cpp index dfbcd324e..f9df5dba5 100644 --- a/Source/logging.cpp +++ b/Source/logging.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + static CRITICAL_SECTION sgMemCrit; CHAR FileName[260]; // idb char log_buffer[388]; @@ -208,3 +210,5 @@ void __cdecl log_dump_computer_info() SystemTime.wSecond, log_buffer); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/mainmenu.cpp b/Source/mainmenu.cpp index d0d090080..7bed263b6 100644 --- a/Source/mainmenu.cpp +++ b/Source/mainmenu.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char gszHero[16]; /* data */ @@ -156,3 +158,5 @@ void __cdecl mainmenu_play_intro() play_movie("gendata\\diablo1.smk", 1); mainmenu_refresh_music(); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/minitext.cpp b/Source/minitext.cpp index 83a5654a6..b22c021d5 100644 --- a/Source/minitext.cpp +++ b/Source/minitext.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int qtexty; // weak char *qtextptr; int qtextSpd; // weak @@ -255,3 +257,5 @@ void __cdecl DrawQText() // 646D04: using guessed type int scrolltexty; // 646D08: using guessed type int sgLastScroll; // 428202: using guessed type char qstr[128]; + +DEVILUTION_END_NAMESPACE diff --git a/Source/missiles.cpp b/Source/missiles.cpp index bc216a084..7fc01a816 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int missileactive[MAXMISSILES]; int missileavail[MAXMISSILES]; MissileStruct missile[MAXMISSILES]; @@ -6350,3 +6352,5 @@ void __fastcall ClearMissileSpot(int mi) dFlags[missile[mi]._mix][missile[mi]._miy] &= ~DFLAG_MISSILE; dMissile[missile[mi]._mix][missile[mi]._miy] = 0; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/monster.cpp b/Source/monster.cpp index 166e70973..e435f25e0 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + // Tracks which missile files are already loaded int MissileFileFlag; @@ -6993,3 +6995,5 @@ void __fastcall decode_enemy(int m, int enemy) monster[m]._menemyy = monster[enemy]._mfuty; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/movie.cpp b/Source/movie.cpp index cb24d0bf4..b66c8ff2c 100644 --- a/Source/movie.cpp +++ b/Source/movie.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + BYTE movie_playing; BOOL loop_movie; @@ -64,3 +66,5 @@ LRESULT __stdcall MovieWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam return MainWndProc(hWnd, Msg, wParam, lParam); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/mpqapi.cpp b/Source/mpqapi.cpp index a79be494a..d1002b098 100644 --- a/Source/mpqapi.cpp +++ b/Source/mpqapi.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int sgdwMpqOffset; // idb char mpq_buf[4096]; _HASHENTRY *sgpHashTbl; @@ -735,3 +737,5 @@ BOOLEAN __cdecl mpqapi_can_seek() result = SetEndOfFile(sghArchive); return result; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/msg.cpp b/Source/msg.cpp index 60de60a37..3341f2526 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + static DWORD sgdwOwnerWait; static DWORD sgdwRecvOffset; static int sgnCurrMegaPlayer; @@ -2492,3 +2494,5 @@ int __fastcall On_REMSHIELD(TCmd *pCmd, int pnum) return sizeof(*pCmd); } + +DEVILUTION_END_NAMESPACE diff --git a/Source/msgcmd.cpp b/Source/msgcmd.cpp index 5ba61058a..5ed1af4b3 100644 --- a/Source/msgcmd.cpp +++ b/Source/msgcmd.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + /* TODO: decompile and fix, commands are NOT deleted properly */ ChatCmd sgChat_Cmd; @@ -244,3 +246,5 @@ void __fastcall msgcmd_cleanup_extern_msg(ServerCommand **extern_msgs) extern_msgs[1] = 0; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/multi.cpp b/Source/multi.cpp index 742660359..c260daa17 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char gbSomebodyWonGameKludge; // weak TBuffer sgHiPriBuf; char szPlayerDescript[128]; @@ -1009,3 +1011,5 @@ void __fastcall multi_player_joins(int pnum, TCmdPlrInfoHdr *cmd, int a3) } } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/nthread.cpp b/Source/nthread.cpp index 835456d51..608fab4b8 100644 --- a/Source/nthread.cpp +++ b/Source/nthread.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + char byte_679704; // weak int gdwMsgLenTbl[MAX_PLRS]; static CRITICAL_SECTION sgMemCrit; @@ -296,3 +298,5 @@ BOOL __fastcall nthread_has_500ms_passed(BOOL unused) } // 679660: using guessed type char gbMaxPlayers; // 679764: using guessed type int last_tick; + +DEVILUTION_END_NAMESPACE diff --git a/Source/objects.cpp b/Source/objects.cpp index e45afa496..4b3742f1e 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int trapid; // weak int trapdir; // weak unsigned char *pObjCels[40]; @@ -5781,3 +5783,5 @@ void __fastcall GetObjectStr(int i) } // 4B883C: using guessed type int infoclr; // 5CF31D: using guessed type char setlevel; + +DEVILUTION_END_NAMESPACE diff --git a/Source/pack.cpp b/Source/pack.cpp index 91642537b..85c1d206a 100644 --- a/Source/pack.cpp +++ b/Source/pack.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + void __fastcall PackPlayer(PkPlayerStruct *pPack, int pnum, BOOL manashield) { PlayerStruct *pPlayer; // edi @@ -252,3 +254,5 @@ void __fastcall UnPackItem(PkItemStruct *is, ItemStruct *id) qmemcpy(v3, &item[MAXITEMS], sizeof(ItemStruct)); } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/palette.cpp b/Source/palette.cpp index 54e336537..82a56ceeb 100644 --- a/Source/palette.cpp +++ b/Source/palette.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + PALETTEENTRY logical_palette[256]; PALETTEENTRY system_palette[256]; PALETTEENTRY orig_palette[256]; @@ -300,3 +302,5 @@ void __fastcall palette_set_color_cycling(BOOLEAN enabled) { color_cycling_enabled = enabled; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/path.cpp b/Source/path.cpp index 5ce8858fc..05ce666e4 100644 --- a/Source/path.cpp +++ b/Source/path.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + // preallocated nodes, search is terminated after 300 nodes are visited PATHNODE path_nodes[MAXPATHNODES]; // size of the pnode_tblptr stack @@ -372,3 +374,5 @@ PATHNODE *__cdecl path_new_step() memset(new_node, 0, sizeof(PATHNODE)); return new_node; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 65915fb5a..32298ad18 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + #define PASSWORD_SINGLE "xrgyrkj1" #define PASSWORD_MULTI "szqnlsk1" @@ -694,3 +696,5 @@ void __fastcall pfile_update(BOOL force_save) } } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/player.cpp b/Source/player.cpp index 98cda76b8..3514079a9 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int plr_lframe_size; int plr_wframe_size; UCHAR plr_gfx_flag = 0; @@ -4157,3 +4159,5 @@ void __cdecl PlayDungMsgs() } } // 52A554: using guessed type int sfxdelay; + +DEVILUTION_END_NAMESPACE diff --git a/Source/plrmsg.cpp b/Source/plrmsg.cpp index aa6015e6e..25d844539 100644 --- a/Source/plrmsg.cpp +++ b/Source/plrmsg.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + static unsigned char plr_msg_slot; _plrmsg plr_msgs[PMSG_COUNT]; @@ -145,3 +147,5 @@ void __fastcall PrintPlrMsg(unsigned int x, unsigned int y, unsigned int width, break; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/portal.cpp b/Source/portal.cpp index 95c1f84ba..ed09c3d32 100644 --- a/Source/portal.cpp +++ b/Source/portal.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + PortalStruct portal[MAXPORTAL]; int portalindex; @@ -174,3 +176,5 @@ BOOL __fastcall PosOkPortal(int lvl, int x, int y) } return FALSE; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/quests.cpp b/Source/quests.cpp index bbb4b23ec..36253c943 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int qtopline; // idb int questlog; // weak void *pQLogCel; @@ -1130,3 +1132,5 @@ void __fastcall SetMultiQuest(int q, int s, int l, int v1) *v6 = v1; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/render.cpp b/Source/render.cpp index 193408058..33d9e98cd 100644 --- a/Source/render.cpp +++ b/Source/render.cpp @@ -1,6 +1,8 @@ //HEADER_GOES_HERE #include "../types.h" + +DEVILUTION_BEGIN_NAMESPACE #include "_asm.cpp" int WorldBoolFlag = 0; @@ -5212,3 +5214,5 @@ void __fastcall world_draw_black_tile(unsigned char *pbDst) } while (yy_32 != 32); } #endif + +DEVILUTION_END_NAMESPACE diff --git a/Source/restrict.cpp b/Source/restrict.cpp index c3aa52034..449667ff5 100644 --- a/Source/restrict.cpp +++ b/Source/restrict.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + BOOL __cdecl SystemSupported() { OSVERSIONINFO VersionInformation; @@ -58,3 +60,5 @@ BOOL __cdecl ReadOnlyTest() } return ret; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 706639f83..fddfa7397 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int light_table_index; // weak int screen_y_times_768[1024]; unsigned int sgdwCursWdtOld; // idb @@ -3032,3 +3034,5 @@ void __cdecl DrawAndBlit() } // 4B8960: using guessed type int talkflag; // 52571C: using guessed type int drawpanflag; + +DEVILUTION_END_NAMESPACE diff --git a/Source/setmaps.cpp b/Source/setmaps.cpp index a67ade7c6..d8160fc1d 100644 --- a/Source/setmaps.cpp +++ b/Source/setmaps.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + // BUGFIX: constant data should be const unsigned char SkelKingTrans1[8] = { 19, 47, 26, 55, @@ -190,3 +192,5 @@ void __cdecl LoadSetMap() break; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/sha.cpp b/Source/sha.cpp index edcf595bb..3ded27e89 100644 --- a/Source/sha.cpp +++ b/Source/sha.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + SHA1Context sgSHA1[3]; void __cdecl SHA1Clear() @@ -127,3 +129,5 @@ void __fastcall SHA1Init(SHA1Context *context) context->state[3] = 0x10325476; context->state[4] = 0xC3D2E1F0; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/sound.cpp b/Source/sound.cpp index d67519e71..6267c359b 100644 --- a/Source/sound.cpp +++ b/Source/sound.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + LPDIRECTSOUNDBUFFER DSBs[8]; LPDIRECTSOUND sglpDS; char gbSndInited; @@ -501,3 +503,5 @@ int __fastcall sound_get_or_set_sound_volume(int volume) return sglSoundVolume; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/spells.cpp b/Source/spells.cpp index 50543713c..c84e67eb4 100644 --- a/Source/spells.cpp +++ b/Source/spells.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + SpellData spelldata[MAX_SPELLS] = { // clang-format off // sName, sManaCost, sType, sNameText, sSkillText, sBookLvl, sStaffLvl, sTargeted, sTownSpell, sMinInt, sSFX, sMissiles[3], sManaAdj, sMinMana, sStaffMin, sStaffMax, sBookCost, sStaffCost @@ -323,3 +325,5 @@ void __fastcall DoHealOther(int pnum, int rid) drawhpflag = TRUE; } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/stores.cpp b/Source/stores.cpp index 923589d4a..26dbe8d16 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int stextup; // weak int storenumh; // weak int stextlhold; // weak @@ -3737,3 +3739,5 @@ void __cdecl ReleaseStoreBtn() } // 6A8A2C: using guessed type char stextscrldbtn; // 6AA704: using guessed type char stextscrlubtn; + +DEVILUTION_END_NAMESPACE diff --git a/Source/sync.cpp b/Source/sync.cpp index b8caffb28..8d2dd9a71 100644 --- a/Source/sync.cpp +++ b/Source/sync.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + short sync_word_6AA708[MAXMONSTERS]; int syncmonsters; // weak short sync_word_6AA89C[MAXMONSTERS]; @@ -342,3 +344,5 @@ void __cdecl sync_clear_pkt() memset(sync_word_6AA89C, 255, 0x190u); } // 6AA898: using guessed type int syncmonsters; + +DEVILUTION_END_NAMESPACE diff --git a/Source/textdat.cpp b/Source/textdat.cpp index fabb5f94f..8377c005f 100644 --- a/Source/textdat.cpp +++ b/Source/textdat.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + /* todo: move text out of struct */ const TextDataStruct alltext[259] = { @@ -509,3 +511,5 @@ const TextDataStruct alltext[259] = { 1, 5, TSFX_TAVERN0 } }; const int gdwAllTextEntries = 259; /* unused */ + +DEVILUTION_END_NAMESPACE diff --git a/Source/themes.cpp b/Source/themes.cpp index 803509412..04f6cf4fa 100644 --- a/Source/themes.cpp +++ b/Source/themes.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int numthemes; // idb BOOL armorFlag; int ThemeGoodIn[4]; @@ -1220,3 +1222,5 @@ void __cdecl CreateThemeRooms() UpdateL4Trans(); } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/tmsg.cpp b/Source/tmsg.cpp index fe2f98f20..a17fb2d40 100644 --- a/Source/tmsg.cpp +++ b/Source/tmsg.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + static TMsg *sgpTimedMsgHead; int __fastcall tmsg_get(BYTE *pbMsg, DWORD dwMaxLen) @@ -49,3 +51,5 @@ void *__cdecl tmsg_cleanup() } return sgpTimedMsgHead; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/town.cpp b/Source/town.cpp index 8adb2171c..cf08b474e 100644 --- a/Source/town.cpp +++ b/Source/town.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + void __fastcall town_clear_upper_buf(unsigned char *a1) { unsigned char *v1; // edi @@ -1506,3 +1508,5 @@ void __fastcall CreateTown(int entry) // 5D2458: using guessed type int dminx; // 5D245C: using guessed type int dminy; // 6ABB30: using guessed type int TWarpFrom; + +DEVILUTION_END_NAMESPACE diff --git a/Source/towners.cpp b/Source/towners.cpp index 7e0ba1513..fa34c84a3 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int storeflag; // weak int sgnCowMsg; int numtowners; // idb @@ -1030,3 +1032,5 @@ void __fastcall CowSFX(int pnum) PlaySfxLoc(CowPlaying, plr[pnum].WorldX, plr[pnum].WorldY); } } + +DEVILUTION_END_NAMESPACE diff --git a/Source/track.cpp b/Source/track.cpp index ae035e047..062cd8201 100644 --- a/Source/track.cpp +++ b/Source/track.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + static BYTE sgbIsScrolling; static DWORD sgdwLastWalk; static BOOL sgbIsWalking; @@ -47,3 +49,5 @@ BOOL __cdecl track_isscrolling() { return sgbIsScrolling; } + +DEVILUTION_END_NAMESPACE diff --git a/Source/trigs.cpp b/Source/trigs.cpp index d133a0a9f..0dc662b6a 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + int trigflag[MAXTRIGGERS]; TriggerStruct trigs[MAXTRIGGERS]; int TWarpFrom; // weak @@ -1213,3 +1215,5 @@ void __cdecl CheckTriggers() } // 679660: using guessed type char gbMaxPlayers; // 6ABB30: using guessed type int TWarpFrom; + +DEVILUTION_END_NAMESPACE diff --git a/Source/wave.cpp b/Source/wave.cpp index 2feb34b5f..f55dcc9ef 100644 --- a/Source/wave.cpp +++ b/Source/wave.cpp @@ -2,6 +2,8 @@ #include "../types.h" +DEVILUTION_BEGIN_NAMESPACE + BOOL __fastcall WCloseFile(HANDLE file) { return SFileCloseFile(file); @@ -213,3 +215,5 @@ void *__fastcall LoadWaveFile(HANDLE hsFile, WAVEFORMATEX *pwfx, CKINFO *chunk) } return wave_file.buf; } + +DEVILUTION_END_NAMESPACE diff --git a/SourceS/miniwin.h b/SourceS/miniwin.h index 34295ef77..3bb0e8239 100644 --- a/SourceS/miniwin.h +++ b/SourceS/miniwin.h @@ -34,1024 +34,16 @@ #define APIENTRY #define WINAPI #define WINAPIV - -#define ALIGNED(n) __attribute__((aligned(n))) - -// Basic types -#define __int8 char -#define __int16 short -#define __int32 int -#define __int64 long long ALIGNED(8) - -#define VOID void - -typedef char CHAR; -typedef uint16_t SHORT; -typedef int32_t LONG; -typedef uint8_t BOOLEAN; - -typedef LONG *PLONG; -typedef uint32_t ULONG; -typedef ULONG *PULONG; -typedef unsigned short USHORT; -typedef USHORT *PUSHORT; -typedef unsigned char UCHAR; -typedef UCHAR *PUCHAR; -typedef char *PSZ; - -typedef uint32_t DWORD; -typedef int BOOL, WINBOOL; -typedef unsigned char BYTE; -typedef unsigned short WORD; -typedef float FLOAT; -typedef FLOAT *PFLOAT; -typedef BOOL *LPBOOL; -typedef BYTE *LPBYTE; -typedef int *LPINT; -typedef WORD *LPWORD; -typedef long *LPLONG; -typedef DWORD *LPDWORD; -typedef void *LPVOID; -typedef void *PVOID; -typedef const void *LPCVOID; -typedef void *HBRUSH; -typedef void *HMENU; -typedef void *HICON; -typedef void *LPITEMIDLIST; -typedef LPITEMIDLIST PIDLIST_ABSOLUTE; -typedef LPITEMIDLIST PCIDLIST_ABSOLUTE; - -typedef int INT; -typedef unsigned int UINT; -typedef unsigned int *PUINT; - -// GCC qword alignment is 4, MSVC is 8, work around by introducing a more aligned type -typedef long long INT64 ALIGNED(8); -typedef unsigned long long UINT64 ALIGNED(8); - -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 SIZE_T; - -typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; - -typedef CHAR *LPSTR; -typedef CHAR *LPTSTR; -typedef const CHAR *LPCSTR; - -typedef UINT_PTR WPARAM; -typedef LONG_PTR LPARAM; -typedef LONG_PTR LRESULT; - -// -// Handles -// -typedef void *HANDLE; -#define INVALID_HANDLE_VALUE ((HANDLE)-1) -#define INVALID_HANDLE ((HANDLE)-1) -#define HFILE_ERROR ((HFILE)-1) - -typedef HANDLE HWND, HGDIOBJ, HMODULE, HDC, HRGN, HINSTANCE, HPALETTE, HFILE, HCURSOR; - -typedef LONG LCID; - -typedef DWORD COLORREF; - -typedef LONG HRESULT; - -typedef LRESULT(CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM); - -// -// Intrinsics -// -#define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff)) -#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff)) -#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) -#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) - -#define InterlockedIncrement(x) __sync_add_and_fetch(x, 1) - -#define INFINITE 0xFFFFFFFF - -typedef struct waveformat_tag { - WORD wFormatTag; - WORD nChannels; - DWORD nSamplesPerSec; - DWORD nAvgBytesPerSec; - WORD nBlockAlign; -} WAVEFORMAT, *PWAVEFORMAT, *LPWAVEFORMAT; - -typedef struct pcmwaveformat_tag { - WAVEFORMAT wf; - WORD wBitsPerSample; -} PCMWAVEFORMAT, *PPCMWAVEFORMAT, *LPPCMWAVEFORMAT; - -typedef struct tWAVEFORMATEX { - WORD wFormatTag; - WORD nChannels; - DWORD nSamplesPerSec; - DWORD nAvgBytesPerSec; - WORD nBlockAlign; - WORD wBitsPerSample; - WORD cbSize; -} WAVEFORMATEX, *LPWAVEFORMATEX, *LPCWAVEFORMATEX; - -typedef struct _FILETIME { - DWORD dwLowDateTime; - DWORD dwHighDateTime; -} FILETIME, *LPFILETIME; - -typedef struct tagRECT { - LONG left; - LONG top; - LONG right; - LONG bottom; -} RECT; - -typedef RECT *LPRECT; - -typedef struct tagPOINT { - LONG x; - LONG y; -} POINT; - -typedef struct tagSIZE { - LONG cx; - LONG cy; -} SIZE; - -typedef struct tagVS_FIXEDFILEINFO { - DWORD dwSignature; - DWORD dwStrucVersion; - DWORD dwFileVersionMS; - DWORD dwFileVersionLS; - DWORD dwProductVersionMS; - DWORD dwProductVersionLS; - DWORD dwFileFlagsMask; - DWORD dwFileFlags; - DWORD dwFileOS; - DWORD dwFileType; - DWORD dwFileSubtype; - DWORD dwFileDateMS; - DWORD dwFileDateLS; -} VS_FIXEDFILEINFO; - -typedef struct tagMSG { - HWND hwnd; - UINT message; - WPARAM wParam; - LPARAM lParam; - DWORD time; - POINT pt; -} MSG, *LPMSG; - -#define MAKEFOURCC(x, y, z, w) \ - (((uint32_t)((uint8_t)x)) \ - | (((uint32_t)((uint8_t)y)) << 8) \ - | (((uint32_t)((uint8_t)z)) << 16) \ - | (((uint32_t)((uint8_t)w)) << 24)) - -typedef uint32_t FOURCC; - -typedef struct { - FOURCC ckid; - DWORD cksize; - FOURCC fccType; - DWORD dwDataOffset; - DWORD dwFlags; -} MMCKINFO; - -// -// System time is represented with the following structure: -// - -typedef struct _SYSTEMTIME { - WORD wYear; - WORD wMonth; - WORD wDayOfWeek; - WORD wDay; - WORD wHour; - WORD wMinute; - WORD wSecond; - WORD wMilliseconds; -} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; - -typedef struct tagWNDCLASSEXA { - UINT cbSize; - UINT style; - WNDPROC lpfnWndProc; - int cbClsExtra; - int cbWndExtra; - HINSTANCE hInstance; - HICON hIcon; - HCURSOR hCursor; - HBRUSH hbrBackground; - LPCSTR lpszMenuName; - LPCSTR lpszClassName; - HICON hIconSm; -} WNDCLASSEXA; - -typedef unsigned long _fsize_t; /* Could be 64 bits for Win32 */ - -struct _finddata_t { - unsigned attrib; - time_t time_create; /* -1 for FAT file systems */ - time_t time_access; /* -1 for FAT file systems */ - time_t time_write; - _fsize_t size; - char name[260]; -}; - -typedef WORD ATOM; #define WINUSERAPI -#define WNDCLASSEX WNDCLASSEXA - -#define FOURCC_RIFF MAKEFOURCC('W', 'A', 'V', 'E') - -// -// COM -// -#define DECLARE_INTERFACE_(name, base) struct name : public base -#define THIS_ -#define THIS -#define PURE = 0 - -#define CS_HREDRAW 0x0001 -#define CS_VREDRAW 0x0002 - -#define IDC_ARROW (LPCSTR)0x1 // Dummy value - -#define CSIDL_STARTMENU 0x000b - -#define SW_HIDE 0 -#define SW_SHOWNORMAL 1 - -#define BLACK_BRUSH 4 - -#define LR_DEFAULTCOLOR 0x0000 - -#define IMAGE_ICON 1 - -#define SM_CXSCREEN 0 -#define SM_CYSCREEN 1 - -#define GW_HWNDNEXT 2 - -#define STDMETHOD(name) STDMETHOD_(HRESULT, name) -#define STDMETHOD_(type, name) virtual WINAPI type name - -typedef void *REFIID; - -struct IUnknown { - // clang-format off - STDMETHOD(QueryInterface)(THIS_ REFIID, LPVOID *) PURE; - STDMETHOD_(ULONG, AddRef)(THIS) PURE; - STDMETHOD_(ULONG, Release)(THIS) PURE; - // clang-format on -}; - -#define MAKE_HRESULT(sev, fac, code) ((HRESULT)(((uint32_t)(sev) << 31) | ((uint32_t)(fac) << 16) | ((uint32_t)(code)))) -#define E_FAIL ((HRESULT)0x80004005L) -#define S_OK ((HRESULT)0) - -// -// Everything else -// -typedef struct tagPALETTEENTRY { - BYTE peRed; - BYTE peGreen; - BYTE peBlue; - BYTE peFlags; -} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY; - -typedef struct _SYSTEM_INFO { - union { - DWORD dwOemId; - struct { - WORD wProcessorArchitecture; - WORD wReserved; - }; - }; - DWORD dwPageSize; - LPVOID lpMinimumApplicationAddress; - LPVOID lpMaximumApplicationAddress; - DWORD_PTR dwActiveProcessorMask; - DWORD dwNumberOfProcessors; - DWORD dwProcessorType; - DWORD dwAllocationGranularity; - WORD wProcessorLevel; - WORD wProcessorRevision; -} SYSTEM_INFO, *LPSYSTEM_INFO; - -typedef void *LPSECURITY_ATTRIBUTES; - -#define ERROR_ALREADY_EXISTS 183 - -typedef struct _LIST_ENTRY { - struct _LIST_ENTRY *Flink; - struct _LIST_ENTRY *Blink; -} LIST_ENTRY, *PLIST_ENTRY; - -DWORD WINAPI GetTickCount(VOID); - -DWORD WINAPI GetLastError(VOID); -VOID WINAPI SetLastError(DWORD dwErrCode); - -WINBOOL WINAPI CloseHandle(HANDLE hObject); - -HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, - LPCSTR lpName); -#define CreateEvent CreateEventA -BOOL WINAPI SetEvent(HANDLE hEvent); -BOOL WINAPI ResetEvent(HANDLE hEvent); -DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); - -WINBOOL WINAPI SetCursorPos(int X, int Y); -int WINAPI ShowCursor(WINBOOL bShow); -HWND WINAPI SetCapture(HWND hWnd); -WINBOOL WINAPI ReleaseCapture(VOID); - -SHORT WINAPI GetAsyncKeyState(int vKey); - -#define PM_NOREMOVE 0x0000 -#define PM_REMOVE 0x0001 - -#define WM_QUIT 0x0012 - -WINBOOL WINAPI PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg); -#define PeekMessage PeekMessageA -WINBOOL WINAPI TranslateMessage(CONST MSG *lpMsg); -LRESULT WINAPI DispatchMessageA(CONST MSG *lpMsg); -#define DispatchMessage DispatchMessageA -WINBOOL WINAPI PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); -#define PostMessage PostMessageA - -WINBOOL WINAPI DestroyWindow(HWND hWnd); -HWND WINAPI GetLastActivePopup(HWND hWnd); -HWND WINAPI GetTopWindow(HWND hWnd); -WINBOOL WINAPI SetForegroundWindow(HWND hWnd); -HWND WINAPI SetFocus(HWND hWnd); -HWND GetDesktopWindow(); -HRESULT SHGetSpecialFolderLocation(HWND hwnd, int csidl, PIDLIST_ABSOLUTE *ppidl); -HWND CreateWindowExA( - DWORD dwExStyle, - LPCSTR lpClassName, - LPCSTR lpWindowName, - DWORD dwStyle, - int X, - int Y, - int nWidth, - int nHeight, - HWND hWndParent, - HMENU hMenu, - HINSTANCE hInstance, - LPVOID lpParam); -#define CreateWindowEx CreateWindowExA -HWND WINAPI FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName); -#define FindWindow FindWindowA -BOOL InvalidateRect(HWND hWnd, const RECT *lpRect, BOOL bErase); -BOOL UpdateWindow(HWND hWnd); -BOOL ShowWindow(HWND hWnd, int nCmdShow); -WINUSERAPI ATOM WINAPI RegisterClassExA(const WNDCLASSEX *lpwcx); -#define RegisterClassEx RegisterClassExA -int GetSystemMetrics(int nIndex); -HGDIOBJ GetStockObject(int i); -HCURSOR LoadCursorA(HINSTANCE hInstance, LPCSTR lpCursorName); -#define LoadCursor LoadCursorA -BOOL GetUserNameA(LPSTR lpBuffer, LPDWORD pcbBuffer); -#define GetUserName GetUserNameA -void GetLocalTime(LPSYSTEMTIME lpSystemTime); -long __cdecl _findfirst(const char *, struct _finddata_t *); -int __cdecl _findnext(long, struct _finddata_t *); - -HICON LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName); -#define LoadIcon LoadIconA -HANDLE LoadImageA(HINSTANCE hInst, LPCSTR name, UINT type, int cx, int cy, UINT fuLoad); -#define LoadImage LoadImageA -BOOL SHGetPathFromIDListA(PCIDLIST_ABSOLUTE pidl, LPSTR pszPath); -#define SHGetPathFromIDList SHGetPathFromIDListA -HINSTANCE ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); -#define ShellExecute ShellExecuteA -int GetClassName(HWND hWnd, LPTSTR lpClassName, int nMaxCount); - -typedef LONG(WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)( - struct _EXCEPTION_POINTERS *ExceptionInfo); -typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER; -LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter); - -HMODULE GetModuleHandleA(LPCSTR lpModuleName); -#define GetModuleHandle GetModuleHandleA - -#define THREAD_BASE_PRIORITY_MAX 2 -#define THREAD_PRIORITY_NORMAL 0 -#define THREAD_PRIORITY_HIGHEST THREAD_BASE_PRIORITY_MAX -#define THREAD_PRIORITY_ABOVE_NORMAL (THREAD_PRIORITY_HIGHEST - 1) - -uintptr_t __cdecl _beginthreadex(void *_Security, unsigned _StackSize, unsigned(__stdcall *_StartAddress)(void *), - void *_ArgList, unsigned _InitFlag, unsigned *_ThrdAddr); -HANDLE WINAPI GetCurrentThread(VOID); -DWORD WINAPI GetCurrentThreadId(VOID); -WINBOOL WINAPI SetThreadPriority(HANDLE hThread, int nPriority); -VOID WINAPI Sleep(DWORD dwMilliseconds); - -VOID WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo); -HDC WINAPI GetDC(HWND hWnd); -int WINAPI ReleaseDC(HWND hWnd, HDC hDC); -WINBOOL WINAPI TextOutA(HDC hdc, int x, int y, LPCSTR lpString, int c); -#define TextOut TextOutA - -#define HORZRES 8 -#define VERTRES 10 -#define NUMRESERVED 106 -int WINAPI GetDeviceCaps(HDC hdc, int index); -BOOL GetWindowRect(HWND hDlg, tagRECT *Rect); -UINT WINAPI GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LPPALETTEENTRY pPalEntries); - -#define _snprintf snprintf -#define _vsnprintf vsnprintf -int WINAPIV wsprintfA(LPSTR, LPCSTR, ...); -#define wsprintf wsprintfA -int WINAPIV wvsprintfA(LPSTR dest, LPCSTR format, va_list arglist); -#define wvsprintf wvsprintfA -int __cdecl _strcmpi(const char *_Str1, const char *_Str2); -char *__cdecl _itoa(int _Value, char *_Dest, int _Radix); - -char *__cdecl _strlwr(char *str); - -// -// File I/O -// -#define FILE_BEGIN 0 -#define FILE_CURRENT 1 -#define FILE_END 2 -#define FILE_FLAG_WRITE_THROUGH 0x80000000 -#define CREATE_ALWAYS 2 -#define GENERIC_READ 0x80000000L -#define GENERIC_WRITE 0x40000000L -#define OPEN_EXISTING 3 -#define OPEN_ALWAYS 4 -#define ERROR_FILE_NOT_FOUND 2 -#define FILE_ATTRIBUTE_NORMAL 128 -#define FILE_ATTRIBUTE_HIDDEN 0x00000002 -#define FILE_ATTRIBUTE_SYSTEM 0x00000004 -#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 -#define FILE_SHARE_READ 1 - -#define OFS_MAXPATHNAME 128 -#define MAX_PATH 260 - -typedef struct _WIN32_FIND_DATAA { - DWORD dwFileAttributes; - FILETIME ftCreationTime; - FILETIME ftLastAccessTime; - FILETIME ftLastWriteTime; - DWORD nFileSizeHigh; - DWORD nFileSizeLow; - DWORD dwReserved0; - DWORD dwReserved1; - CHAR cFileName[MAX_PATH]; - CHAR cAlternateFileName[14]; - DWORD dwFileType; - DWORD dwCreatorType; - WORD wFinderFlags; -} WIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; - -typedef void *LPOVERLAPPED; - -typedef struct _IMAGE_FILE_HEADER { - WORD Machine; - WORD NumberOfSections; - DWORD TimeDateStamp; - DWORD PointerToSymbolTable; - DWORD NumberOfSymbols; - WORD SizeOfOptionalHeader; - WORD Characteristics; -} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; - -// -// Calculate the byte offset of a field in a structure of type type. -// - -#define FIELD_OFFSET(type, field) ((LONG)(INT_PTR) & (((type *)0)->field)) -#define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER)((UINT_PTR)ntheader + FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) + ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader)) - -typedef BOOL(CALLBACK *DLGPROC)(HWND, UINT, WPARAM, LPARAM); - -#define IMAGE_NT_SIGNATURE 0x00004550 // PE00 - -typedef struct _IMAGE_OPTIONAL_HEADER { - WORD Magic; - BYTE MajorLinkerVersion; - BYTE MinorLinkerVersion; - DWORD SizeOfCode; - DWORD SizeOfInitializedData; - DWORD SizeOfUninitializedData; - DWORD AddressOfEntryPoint; - DWORD BaseOfCode; - DWORD BaseOfData; - DWORD ImageBase; - DWORD SectionAlignment; - DWORD FileAlignment; - WORD MajorOperatingSystemVersion; - WORD MinorOperatingSystemVersion; - WORD MajorImageVersion; - WORD MinorImageVersion; - WORD MajorSubsystemVersion; - WORD MinorSubsystemVersion; - DWORD Win32VersionValue; - DWORD SizeOfImage; - DWORD SizeOfHeaders; - DWORD CheckSum; - WORD Subsystem; - WORD DllCharacteristics; - DWORD SizeOfStackReserve; - DWORD SizeOfStackCommit; - DWORD SizeOfHeapReserve; - DWORD SizeOfHeapCommit; - DWORD LoaderFlags; - DWORD NumberOfRvaAndSizes; -} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; - -typedef struct _IMAGE_NT_HEADERS { - DWORD Signature; - IMAGE_FILE_HEADER FileHeader; - IMAGE_OPTIONAL_HEADER32 OptionalHeader; -} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS; - -#define IMAGE_DOS_SIGNATURE 0x5A4D - -typedef struct _IMAGE_DOS_HEADER { - WORD e_magic; - WORD e_cblp; - WORD e_cp; - WORD e_crlc; - WORD e_cparhdr; - WORD e_minalloc; - WORD e_maxalloc; - WORD e_ss; - WORD e_sp; - WORD e_csum; - WORD e_ip; - WORD e_cs; - WORD e_lfarlc; - WORD e_ovno; - WORD e_res[4]; - WORD e_oemid; - WORD e_oeminfo; - WORD e_res2[10]; - LONG e_lfanew; -} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; - -typedef struct _OFSTRUCT { - BYTE cBytes; - BYTE fFixedDisk; - WORD nErrCode; - WORD Reserved1; - WORD Reserved2; - CHAR szPathName[OFS_MAXPATHNAME]; -} OFSTRUCT, *LPOFSTRUCT, *POFSTRUCT; - -#define VER_PLATFORM_WIN32_NT 2 - -typedef struct _OSVERSIONINFOA { - DWORD dwOSVersionInfoSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformId; - CHAR szCSDVersion[128]; -} OSVERSIONINFO, *LPOSVERSIONINFOA; - -typedef struct _IMAGE_SECTION_HEADER { - union { - DWORD PhysicalAddress; - DWORD VirtualSize; - } Misc; - DWORD VirtualAddress; - DWORD SizeOfRawData; - DWORD PointerToRawData; - DWORD PointerToRelocations; - DWORD PointerToLinenumbers; - WORD NumberOfRelocations; - WORD NumberOfLinenumbers; - DWORD Characteristics; -} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; - -BOOL GetVersionExA(LPOSVERSIONINFOA lpVersionInformation); -#define GetVersionEx GetVersionExA - -void lstrcpynA(LPSTR lpString1, LPCSTR lpString2, int iMaxLength); -#define lstrcpyn lstrcpynA - -#define SEC_COMMIT 0x8000000 -#define PAGE_READWRITE 0x04 - -#define FILE_MAP_ALL_ACCESS SECTION_ALL_ACCESS -#define SECTION_QUERY 0x0001 -#define SECTION_MAP_WRITE 0x0002 -#define SECTION_MAP_READ 0x0004 -#define SECTION_MAP_EXECUTE 0x0008 -#define SECTION_EXTEND_SIZE 0x0010 -#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 -#define STANDARD_RIGHTS_REQUIRED 0x000F0000 - -#define SECTION_ALL_ACCESS \ - (STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE) - -#define CREATE_NEW_PROCESS_GROUP 0x200 - -typedef struct _PROCESS_INFORMATION { - HANDLE hProcess; - HANDLE hThread; - DWORD dwProcessId; - DWORD dwThreadId; -} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; - -typedef void *LPSTARTUPINFOA; -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); -#define CreateProcess CreateProcessA -VOID WINAPI ExitProcess(UINT uExitCode); -DWORD WINAPI GetCurrentProcessId(VOID); - -HANDLE WINAPI CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, - DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName); -#define CreateFileMapping CreateFileMappingA -LPVOID WINAPI MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, - DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap); -WINBOOL WINAPI UnmapViewOfFile(LPCVOID lpBaseAddress); - -LPVOID VirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); -BOOL VirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType); - -DWORD WINAPI WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds); -HWND WINAPI GetForegroundWindow(VOID); -HWND WINAPI GetWindow(HWND hWnd, UINT uCmd); -DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId); - -DWORD WINAPI GetPrivateProfileStringA(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, - DWORD nSize, LPCSTR lpFileName); -#define GetPrivateProfileString GetPrivateProfileStringA -int MessageBoxA(HWND hWnd, const char *Text, const char *Title, UINT Flags); -#define MessageBox MessageBoxA -typedef LONG LSTATUS, HKEY, REGSAM, PHKEY; -#define HKEY_CURRENT_USER 1 -#define KEY_READ 0x20019 -#define KEY_WRITE 0x20006 -#define REG_SZ 1 -LSTATUS RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult); -#define RegOpenKeyEx RegOpenKeyExA -LSTATUS RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, BYTE *lpData, LPDWORD lpcbData); -#define RegQueryValueEx RegQueryValueExA -LSTATUS RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData); -#define RegSetValueEx RegSetValueExA -LSTATUS RegCloseKeyA(HKEY hKey); -#define RegCloseKey RegCloseKeyA -void PostQuitMessage(int nExitCode); -LRESULT DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); -#define DefWindowProc DefWindowProcA -LONG GetWindowLongA(HWND hWnd, int nIndex); -#define GetWindowLong GetWindowLongA -LONG SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong); -#define SetWindowLong SetWindowLongA - -WINBOOL WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, - LPOVERLAPPED lpOverlapped); -DWORD WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); -WINBOOL WINAPI SetEndOfFile(HANDLE hFile); -DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName); -#define GetFileAttributes GetFileAttributesA -WINBOOL WINAPI SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes); -#define SetFileAttributes SetFileAttributesA -HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData); -#define FindFirstFile FindFirstFileA -BOOL FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData); -#define FindNextFile FindNextFileA -WINBOOL WINAPI FindClose(HANDLE hFindFile); -HANDLE WINAPI CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); -#define CreateFile CreateFileA -WINBOOL WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, - LPOVERLAPPED lpOverlapped); -DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh); -UINT WINAPI GetWindowsDirectoryA(LPSTR lpBuffer, UINT uSize); -#define GetWindowsDirectory GetWindowsDirectoryA -DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer); -DWORD GetLogicalDriveStringsA(DWORD nBufferLength, LPSTR lpBuffer); -#define GetLogicalDriveStrings GetLogicalDriveStringsA -UINT GetDriveTypeA(LPCSTR lpRootPathName); -#define GetDriveType GetDriveTypeA -WINBOOL WINAPI GetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, - LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters); -#define GetDiskFreeSpace GetDiskFreeSpaceA -DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize); -#define GetModuleFileName GetModuleFileNameA -WINBOOL WINAPI GetComputerNameA(LPSTR lpBuffer, LPDWORD nSize); -#define GetComputerName GetComputerNameA -DWORD GetFileVersionInfoSizeA(LPCSTR lptstrFilename, LPDWORD lpdwHandle); -#define GetFileVersionInfoSize GetFileVersionInfoSizeA -BOOL GetFileVersionInfoA(LPCSTR lptstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData); -#define GetFileVersionInfo GetFileVersionInfoA -BOOL VerQueryValueA(LPCVOID pBlock, LPCSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen); -#define VerQueryValue VerQueryValueA -WINBOOL WINAPI DeleteFileA(LPCSTR lpFileName); -#define DeleteFile DeleteFileA -WINBOOL WINAPI CopyFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, WINBOOL bFailIfExists); -#define CopyFile CopyFileA -HFILE WINAPI OpenFile(LPCSTR lpFileName, LPOFSTRUCT lpReOpenBuff, UINT uStyle); - -#define GWL_STYLE (-16) - -#define WS_POPUP 0x80000000L -#define WS_SYSMENU 0x00080000L - -#define DRIVE_CDROM 5 - -// -// Events -// -#define WM_MOUSEFIRST 0x0200 -#define WM_MOUSEMOVE 0x0200 -#define WM_LBUTTONDOWN 0x0201 -#define WM_LBUTTONUP 0x0202 -#define WM_RBUTTONDOWN 0x0204 -#define WM_RBUTTONUP 0x0205 - -#define WM_KEYFIRST 0x0100 -#define WM_KEYDOWN 0x0100 -#define WM_KEYUP 0x0101 -#define WM_SYSKEYDOWN 0x0104 - -#define WM_INITDIALOG 0x0110 -#define WM_COMMAND 0x0111 -#define WM_SYSCOMMAND 0x0112 - -#define WM_CHAR 0x0102 -#define WM_CAPTURECHANGED 0x0215 - -#define WM_CREATE 0x0001 -#define WM_DESTROY 0x0002 -#define WM_PAINT 0x000F -#define WM_CLOSE 0x0010 -#define WM_QUERYENDSESSION 0x0011 -#define WM_ERASEBKGND 0x0014 -#define WM_ACTIVATEAPP 0x001C -#define WM_QUERYNEWPALETTE 0x030F -#define WM_PALETTECHANGED 0x0311 - -#define SC_CLOSE 0xF060 - -#define VK_RETURN 0x0D -#define VK_BACK 0x08 -#define VK_SHIFT 0x10 -#define VK_ESCAPE 0x1B -#define VK_SPACE 0x20 -#define VK_LEFT 0x25 -#define VK_UP 0x26 -#define VK_RIGHT 0x27 -#define VK_DOWN 0x28 - -#define VK_F1 0x70 -#define VK_F2 0x71 -#define VK_F3 0x72 -#define VK_F4 0x73 -#define VK_F5 0x74 -#define VK_F6 0x75 -#define VK_F7 0x76 -#define VK_F8 0x77 -#define VK_F9 0x78 -#define VK_F10 0x79 -#define VK_F11 0x7A -#define VK_F12 0x7B - -#define VK_TAB 0x09 -#define VK_PAUSE 0x13 -#define VK_PRIOR 0x21 -#define VK_NEXT 0x22 -#define VK_SNAPSHOT 0x2C - -#define VK_OEM_1 0xBA -#define VK_OEM_PLUS 0xBB -#define VK_OEM_COMMA 0xBC -#define VK_OEM_MINUS 0xBD -#define VK_OEM_PERIOD 0xBE -#define VK_OEM_2 0xBF -#define VK_OEM_3 0xC0 -#define VK_OEM_4 0xDB -#define VK_OEM_5 0xDC -#define VK_OEM_6 0xDD -#define VK_OEM_7 0xDE -//#define VK_OEM_8 0xDF -//#define VK_OEM_102 0xE2 - -#define MK_SHIFT 0x0004 -#define MK_LBUTTON 0x0001 -#define MK_RBUTTON 0x0002 - -#define MB_TASKMODAL 0x00002000L -#define MB_ICONHAND 0x00000010L -#define MB_ICONEXCLAMATION 0x00000030L - -#define FORMAT_MESSAGE_IGNORE_INSERTS 0x00000200 -#define FORMAT_MESSAGE_FROM_HMODULE 0x00000800 -#define FORMAT_MESSAGE_FROM_SYSTEM 0x00001000 - -#define STATUS_BREAKPOINT ((DWORD)0x80000003L) -#define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001L) -#define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD)0xC000008EL) -#define STATUS_SINGLE_STEP ((DWORD)0x80000004L) -#define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD)0xC000008CL) -#define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005L) -#define STATUS_IN_PAGE_ERROR ((DWORD)0xC0000006L) -#define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001DL) -#define STATUS_DATATYPE_MISALIGNMENT ((DWORD)0x80000002L) -#define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD)0xC000008DL) -#define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD)0xC0000025L) -#define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD)0xC0000094L) -#define STATUS_INVALID_HANDLE ((DWORD)0xC0000008L) -#define STATUS_FLOAT_OVERFLOW ((DWORD)0xC0000091L) -#define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001DL) -#define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001L) -#define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001DL) -#define STATUS_INTEGER_OVERFLOW ((DWORD)0xC0000095L) -#define STATUS_PRIVILEGED_INSTRUCTION ((DWORD)0xC0000096L) -#define STATUS_FLOAT_UNDERFLOW ((DWORD)0xC0000093L) -#define STATUS_FLOAT_INEXACT_RESULT ((DWORD)0xC000008FL) -#define STATUS_FLOAT_INVALID_OPERATION ((DWORD)0xC0000090L) -#define STATUS_FLOAT_STACK_CHECK ((DWORD)0xC0000092L) -#define STATUS_INVALID_DISPOSITION ((DWORD)0xC0000026L) -#define STATUS_STACK_OVERFLOW ((DWORD)0xC00000FDL) - -#define EXCEPTION_CONTINUE_SEARCH 0x0 -#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION -#define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT -#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION -#define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO -#define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP -#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED -#define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR -#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION -#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT -#define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND -#define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION -#define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO -#define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE -#define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW -#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION -#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION -#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION -#define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW -#define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION -#define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW -#define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT -#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION -#define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK -#define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION -#define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW - -#define HWND_NOTOPMOST (HWND) - 2 -#define HWND_TOP (HWND)0 - -#define SWP_NOACTIVATE 0x0010 -#define SWP_NOMOVE 0x0002 -#define SWP_NOSIZE 0x0004 -#define SWP_NOZORDER 0x0001 - -typedef struct _CONTEXT { - - // - // The flags values within this flag control the contents of - // a CONTEXT record. - // - // If the context record is used as an input parameter, then - // for each portion of the context record controlled by a flag - // whose value is set, it is assumed that that portion of the - // context record contains valid context. If the context record - // is being used to modify a threads context, then only that - // portion of the threads context will be modified. - // - // If the context record is used as an IN OUT parameter to capture - // the context of a thread, then only those portions of the thread's - // context corresponding to set flags will be returned. - // - // The context record is never used as an OUT only parameter. - // - - DWORD ContextFlags; - - // - // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is - // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT - // included in CONTEXT_FULL. - // - - DWORD Dr0; - DWORD Dr1; - DWORD Dr2; - DWORD Dr3; - DWORD Dr6; - DWORD Dr7; - - // - // This section is specified/returned if the - // ContextFlags word contians the flag CONTEXT_SEGMENTS. - // - - DWORD SegGs; - DWORD SegFs; - DWORD SegEs; - DWORD SegDs; - - // - // This section is specified/returned if the - // ContextFlags word contians the flag CONTEXT_INTEGER. - // - - DWORD Edi; - DWORD Esi; - DWORD Ebx; - DWORD Edx; - DWORD Ecx; - DWORD Eax; - - // - // This section is specified/returned if the - // ContextFlags word contians the flag CONTEXT_CONTROL. - // - - DWORD Ebp; - DWORD Eip; - DWORD SegCs; // MUST BE SANITIZED - DWORD EFlags; // MUST BE SANITIZED - DWORD Esp; - DWORD SegSs; -} CONTEXT; - -typedef CONTEXT *PCONTEXT; - -// -// Exception record definition. -// - -typedef struct _EXCEPTION_RECORD { - DWORD ExceptionCode; - DWORD ExceptionFlags; - struct _EXCEPTION_RECORD *ExceptionRecord; - PVOID ExceptionAddress; - DWORD NumberParameters; -} EXCEPTION_RECORD; - -typedef EXCEPTION_RECORD *PEXCEPTION_RECORD; - -typedef struct _EXCEPTION_POINTERS { - PEXCEPTION_RECORD ExceptionRecord; - PCONTEXT ContextRecord; -} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; - -typedef struct _MEMORY_BASIC_INFORMATION { - PVOID BaseAddress; - PVOID AllocationBase; - DWORD AllocationProtect; - SIZE_T RegionSize; - DWORD State; - DWORD Protect; - DWORD Type; -} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; - -// -// Total fakes -// -typedef struct { -} SOCKADDR, GUID, *LPGUID; - -typedef struct { - DWORD cb; -} STARTUPINFOA; - -BOOL IsBadReadPtr(const VOID *lp, UINT_PTR ucb); -BOOL IsBadWritePtr(LPVOID lp, UINT_PTR ucb); -SIZE_T VirtualQuery(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength); - -// -// MSCVRT emulation -// - -extern void LoadCharNames(); -extern void LoadAndPlaySound(char *FilePath, int lVolume, int lPan); -extern void DrawArtWithMask(int SX, int SY, int SW, int SH, int nFrame, BYTE bMask, void *pBuffer); -extern BOOL __cdecl LoadArtWithPal(char *pszFile, void **pBuffer, int frames, DWORD *data); - -#define OF_EXIST 1 +#define VOID void +#include "miniwin_misc.h" +#include "miniwin_com.h" #include "miniwin_ddraw.h" #include "miniwin_dsound.h" #include "miniwin_ui.h" #include "miniwin_thread.h" #include "miniwin_rand.h" + +#include "miniwin_macro.h" diff --git a/SourceS/miniwin_com.h b/SourceS/miniwin_com.h new file mode 100644 index 000000000..7deeee80b --- /dev/null +++ b/SourceS/miniwin_com.h @@ -0,0 +1,51 @@ +#pragma once + +namespace dvl { + +// +// COM +// +#define DECLARE_INTERFACE_(name, base) struct name : public base +#define THIS_ +#define THIS +#define PURE = 0 + +#define CS_HREDRAW 0x0001 +#define CS_VREDRAW 0x0002 + +#define IDC_ARROW (LPCSTR)0x1 // Dummy value + +#define CSIDL_STARTMENU 0x000b + +#define SW_HIDE 0 +#define SW_SHOWNORMAL 1 + +#define BLACK_BRUSH 4 + +#define LR_DEFAULTCOLOR 0x0000 + +#define IMAGE_ICON 1 + +#define SM_CXSCREEN 0 +#define SM_CYSCREEN 1 + +#define GW_HWNDNEXT 2 + +#define STDMETHOD(name) STDMETHOD_(HRESULT, name) +#define STDMETHOD_(type, name) virtual WINAPI type name + +typedef void *REFIID; + +struct IUnknown { + // clang-format off + STDMETHOD(QueryInterface)(THIS_ REFIID, LPVOID *) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + // clang-format on +}; + +#define MAKE_HRESULT(sev, fac, code) ((HRESULT)(((uint32_t)(sev) << 31) | ((uint32_t)(fac) << 16) | ((uint32_t)(code)))) +#define E_FAIL ((HRESULT)0x80004005L) +#define S_OK ((HRESULT)0) + +} diff --git a/SourceS/miniwin_ddraw.h b/SourceS/miniwin_ddraw.h index 0de7c5137..2bc5a3325 100644 --- a/SourceS/miniwin_ddraw.h +++ b/SourceS/miniwin_ddraw.h @@ -1,5 +1,7 @@ #pragma once +namespace dvl { + typedef struct _DDCOLORKEY { DWORD dwColorSpaceLowValue; DWORD dwColorSpaceHighValue; @@ -296,3 +298,5 @@ DECLARE_INTERFACE_(IDirectDraw,IUnknown) STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; // clang-format on }; + +} diff --git a/SourceS/miniwin_dsound.h b/SourceS/miniwin_dsound.h index 932b66f0c..b0ac9adf6 100644 --- a/SourceS/miniwin_dsound.h +++ b/SourceS/miniwin_dsound.h @@ -1,5 +1,7 @@ #pragma once +namespace dvl { + typedef void *LPDSBCAPS, *LPCDSBUFFERDESC; struct IDirectSound; @@ -107,3 +109,5 @@ DECLARE_INTERFACE_(IDirectSound, IUnknown) #define DSERR_INVALIDPARAM 0x80070057 #define DSERR_ALLOCATED MAKE_DSHRESULT(10) #define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) + +} diff --git a/SourceS/miniwin_macro.h b/SourceS/miniwin_macro.h new file mode 100644 index 000000000..95f11094c --- /dev/null +++ b/SourceS/miniwin_macro.h @@ -0,0 +1,321 @@ +#pragma once + +// Basic types +#define __int8 char +#define __int16 short +#define __int32 int +#define __int64 long long + +#define INVALID_HANDLE_VALUE ((HANDLE)-1) +#define INVALID_HANDLE ((HANDLE)-1) +#define HFILE_ERROR ((HFILE)-1) + +// +// Intrinsics +// +#define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff)) +#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff)) +#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) +#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) + +#define InterlockedIncrement(x) __sync_add_and_fetch(x, 1) + +#define INFINITE 0xFFFFFFFF + +#define MAKEFOURCC(x, y, z, w) \ + (((uint32_t)((uint8_t)x)) \ + | (((uint32_t)((uint8_t)y)) << 8) \ + | (((uint32_t)((uint8_t)z)) << 16) \ + | (((uint32_t)((uint8_t)w)) << 24)) + +#define WINUSERAPI + +#define FOURCC_RIFF MAKEFOURCC('W', 'A', 'V', 'E') + +#define ERROR_ALREADY_EXISTS 183 + +#define CreateEvent CreateEventA + +#define PM_NOREMOVE 0x0000 +#define PM_REMOVE 0x0001 + +#define WM_QUIT 0x0012 + +#define PeekMessage PeekMessageA +#define DispatchMessage DispatchMessageA +#define PostMessage PostMessageA +#define CreateWindowEx CreateWindowExA +#define FindWindow FindWindowA +#define RegisterClassEx RegisterClassExA +#define LoadCursor LoadCursorA +#define GetUserName GetUserNameA +#define LoadIcon LoadIconA +#define LoadImage LoadImageA +#define SHGetPathFromIDList SHGetPathFromIDListA +#define ShellExecute ShellExecuteA +#define GetModuleHandle GetModuleHandleA + +#define THREAD_BASE_PRIORITY_MAX 2 +#define THREAD_PRIORITY_NORMAL 0 +#define THREAD_PRIORITY_HIGHEST THREAD_BASE_PRIORITY_MAX +#define THREAD_PRIORITY_ABOVE_NORMAL (THREAD_PRIORITY_HIGHEST - 1) + +#define TextOut TextOutA + +#define HORZRES 8 +#define VERTRES 10 +#define NUMRESERVED 106 + +#define _snprintf snprintf +#define _vsnprintf vsnprintf +#define wsprintf wsprintfA +#define wvsprintf wvsprintfA + +// +// File I/O +// + +#define FILE_BEGIN 0 +#define FILE_CURRENT 1 +#define FILE_END 2 +#define FILE_FLAG_WRITE_THROUGH 0x80000000 +#define CREATE_ALWAYS 2 +#define GENERIC_READ 0x80000000L +#define GENERIC_WRITE 0x40000000L +#define OPEN_EXISTING 3 +#define OPEN_ALWAYS 4 +#define ERROR_FILE_NOT_FOUND 2 +#define FILE_ATTRIBUTE_NORMAL 128 +#define FILE_ATTRIBUTE_HIDDEN 0x00000002 +#define FILE_ATTRIBUTE_SYSTEM 0x00000004 +#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 +#define FILE_SHARE_READ 1 + +#define OFS_MAXPATHNAME DVL_OFS_MAXPATHNAME +#define MAX_PATH DVL_MAX_PATH + +// +// Calculate the byte offset of a field in a structure of type type. +// + +#define FIELD_OFFSET(type, field) ((LONG)(INT_PTR) & (((type *)0)->field)) +#define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER)((UINT_PTR)ntheader + FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) + ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader)) + +#define IMAGE_NT_SIGNATURE 0x00004550 // PE00 +#define IMAGE_DOS_SIGNATURE 0x5A4D +#define VER_PLATFORM_WIN32_NT 2 + +#define GetVersionEx GetVersionExA + +#define lstrcpyn lstrcpynA + +#define SEC_COMMIT 0x8000000 +#define PAGE_READWRITE 0x04 + +#define FILE_MAP_ALL_ACCESS SECTION_ALL_ACCESS +#define SECTION_QUERY 0x0001 +#define SECTION_MAP_WRITE 0x0002 +#define SECTION_MAP_READ 0x0004 +#define SECTION_MAP_EXECUTE 0x0008 +#define SECTION_EXTEND_SIZE 0x0010 +#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 +#define STANDARD_RIGHTS_REQUIRED 0x000F0000 + +#define SECTION_ALL_ACCESS \ + (STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE) + +#define CREATE_NEW_PROCESS_GROUP 0x200 + +#define CreateProcess CreateProcessA +#define CreateFileMapping CreateFileMappingA +#define GetPrivateProfileString GetPrivateProfileStringA +#define MessageBox MessageBoxA + +#define HKEY_CURRENT_USER 1 +#define KEY_READ 0x20019 +#define KEY_WRITE 0x20006 +#define REG_SZ 1 + +#define RegOpenKeyEx RegOpenKeyExA +#define RegQueryValueEx RegQueryValueExA +#define RegSetValueEx RegSetValueExA +#define RegCloseKey RegCloseKeyA +#define DefWindowProc DefWindowProcA +#define GetWindowLong GetWindowLongA +#define SetWindowLong SetWindowLongA + +#define GetFileAttributes GetFileAttributesA +#define SetFileAttributes SetFileAttributesA +#define FindFirstFile FindFirstFileA +#define FindNextFile FindNextFileA +#define CreateFile CreateFileA +#define GetWindowsDirectory GetWindowsDirectoryA +#define GetLogicalDriveStrings GetLogicalDriveStringsA +#define GetDriveType GetDriveTypeA +#define GetDiskFreeSpace GetDiskFreeSpaceA +#define GetModuleFileName GetModuleFileNameA +#define GetComputerName GetComputerNameA +#define GetFileVersionInfoSize GetFileVersionInfoSizeA +#define GetFileVersionInfo GetFileVersionInfoA +#define VerQueryValue VerQueryValueA +#define DeleteFile DeleteFileA +#define CopyFile CopyFileA + +#define GWL_STYLE (-16) + +#define WS_POPUP 0x80000000L +#define WS_SYSMENU 0x00080000L + +#define DRIVE_CDROM 5 + +// +// Events +// +#define WM_MOUSEFIRST 0x0200 +#define WM_MOUSEMOVE 0x0200 +#define WM_LBUTTONDOWN 0x0201 +#define WM_LBUTTONUP 0x0202 +#define WM_RBUTTONDOWN 0x0204 +#define WM_RBUTTONUP 0x0205 + +#define WM_KEYFIRST 0x0100 +#define WM_KEYDOWN 0x0100 +#define WM_KEYUP 0x0101 +#define WM_SYSKEYDOWN 0x0104 + +#define WM_INITDIALOG 0x0110 +#define WM_COMMAND 0x0111 +#define WM_SYSCOMMAND 0x0112 + +#define WM_CHAR 0x0102 +#define WM_CAPTURECHANGED 0x0215 + +#define WM_CREATE 0x0001 +#define WM_DESTROY 0x0002 +#define WM_PAINT 0x000F +#define WM_CLOSE 0x0010 +#define WM_QUERYENDSESSION 0x0011 +#define WM_ERASEBKGND 0x0014 +#define WM_ACTIVATEAPP 0x001C +#define WM_QUERYNEWPALETTE 0x030F +#define WM_PALETTECHANGED 0x0311 + +#define SC_CLOSE 0xF060 + +#define VK_RETURN 0x0D +#define VK_BACK 0x08 +#define VK_SHIFT 0x10 +#define VK_ESCAPE 0x1B +#define VK_SPACE 0x20 +#define VK_LEFT 0x25 +#define VK_UP 0x26 +#define VK_RIGHT 0x27 +#define VK_DOWN 0x28 + +#define VK_F1 0x70 +#define VK_F2 0x71 +#define VK_F3 0x72 +#define VK_F4 0x73 +#define VK_F5 0x74 +#define VK_F6 0x75 +#define VK_F7 0x76 +#define VK_F8 0x77 +#define VK_F9 0x78 +#define VK_F10 0x79 +#define VK_F11 0x7A +#define VK_F12 0x7B + +#define VK_TAB 0x09 +#define VK_PAUSE 0x13 +#define VK_PRIOR 0x21 +#define VK_NEXT 0x22 +#define VK_SNAPSHOT 0x2C + +#define VK_OEM_1 0xBA +#define VK_OEM_PLUS 0xBB +#define VK_OEM_COMMA 0xBC +#define VK_OEM_MINUS 0xBD +#define VK_OEM_PERIOD 0xBE +#define VK_OEM_2 0xBF +#define VK_OEM_3 0xC0 +#define VK_OEM_4 0xDB +#define VK_OEM_5 0xDC +#define VK_OEM_6 0xDD +#define VK_OEM_7 0xDE +//#define VK_OEM_8 0xDF +//#define VK_OEM_102 0xE2 + +#define MK_SHIFT 0x0004 +#define MK_LBUTTON 0x0001 +#define MK_RBUTTON 0x0002 + +#define MB_TASKMODAL 0x00002000L +#define MB_ICONHAND 0x00000010L +#define MB_ICONEXCLAMATION 0x00000030L + +#define FORMAT_MESSAGE_IGNORE_INSERTS 0x00000200 +#define FORMAT_MESSAGE_FROM_HMODULE 0x00000800 +#define FORMAT_MESSAGE_FROM_SYSTEM 0x00001000 + +#define STATUS_BREAKPOINT ((DWORD)0x80000003L) +#define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001L) +#define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD)0xC000008EL) +#define STATUS_SINGLE_STEP ((DWORD)0x80000004L) +#define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD)0xC000008CL) +#define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005L) +#define STATUS_IN_PAGE_ERROR ((DWORD)0xC0000006L) +#define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001DL) +#define STATUS_DATATYPE_MISALIGNMENT ((DWORD)0x80000002L) +#define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD)0xC000008DL) +#define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD)0xC0000025L) +#define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD)0xC0000094L) +#define STATUS_INVALID_HANDLE ((DWORD)0xC0000008L) +#define STATUS_FLOAT_OVERFLOW ((DWORD)0xC0000091L) +#define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001DL) +#define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001L) +#define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001DL) +#define STATUS_INTEGER_OVERFLOW ((DWORD)0xC0000095L) +#define STATUS_PRIVILEGED_INSTRUCTION ((DWORD)0xC0000096L) +#define STATUS_FLOAT_UNDERFLOW ((DWORD)0xC0000093L) +#define STATUS_FLOAT_INEXACT_RESULT ((DWORD)0xC000008FL) +#define STATUS_FLOAT_INVALID_OPERATION ((DWORD)0xC0000090L) +#define STATUS_FLOAT_STACK_CHECK ((DWORD)0xC0000092L) +#define STATUS_INVALID_DISPOSITION ((DWORD)0xC0000026L) +#define STATUS_STACK_OVERFLOW ((DWORD)0xC00000FDL) + +#define EXCEPTION_CONTINUE_SEARCH 0x0 +#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION +#define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT +#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION +#define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO +#define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP +#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED +#define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR +#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION +#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT +#define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND +#define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION +#define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO +#define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE +#define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW +#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION +#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION +#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION +#define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW +#define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION +#define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW +#define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT +#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION +#define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK +#define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION +#define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW + +#define HWND_NOTOPMOST (HWND) - 2 +#define HWND_TOP (HWND)0 + +#define SWP_NOACTIVATE 0x0010 +#define SWP_NOMOVE 0x0002 +#define SWP_NOSIZE 0x0004 +#define SWP_NOZORDER 0x0001 + +#define OF_EXIST 1 diff --git a/SourceS/miniwin_misc.h b/SourceS/miniwin_misc.h new file mode 100644 index 000000000..68d68cd46 --- /dev/null +++ b/SourceS/miniwin_misc.h @@ -0,0 +1,671 @@ +#pragma once + +namespace dvl { + +static constexpr auto DVL_OFS_MAXPATHNAME = 128; +static constexpr auto DVL_MAX_PATH = 260; + +typedef char CHAR; +typedef uint16_t SHORT; +typedef int32_t LONG; +typedef uint8_t BOOLEAN; + +typedef LONG *PLONG; +typedef uint32_t ULONG; +typedef ULONG *PULONG; +typedef unsigned short USHORT; +typedef USHORT *PUSHORT; +typedef unsigned char UCHAR; +typedef UCHAR *PUCHAR; +typedef char *PSZ; + +typedef uint32_t DWORD; +typedef int BOOL, WINBOOL; +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef float FLOAT; +typedef FLOAT *PFLOAT; +typedef BOOL *LPBOOL; +typedef BYTE *LPBYTE; +typedef int *LPINT; +typedef WORD *LPWORD; +typedef long *LPLONG; +typedef DWORD *LPDWORD; +typedef void *LPVOID; +typedef void *PVOID; +typedef const void *LPCVOID; +typedef void *HBRUSH; +typedef void *HMENU; +typedef void *HICON; +typedef void *LPITEMIDLIST; +typedef LPITEMIDLIST PIDLIST_ABSOLUTE; +typedef LPITEMIDLIST PCIDLIST_ABSOLUTE; + +typedef int INT; +typedef unsigned int UINT; +typedef unsigned int *PUINT; + +// GCC qword alignment is 4, MSVC is 8, work around by introducing a more aligned type +typedef long long INT64; +typedef unsigned long long UINT64; + +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 SIZE_T; + +typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; + +typedef CHAR *LPSTR; +typedef CHAR *LPTSTR; +typedef const CHAR *LPCSTR; + +typedef UINT_PTR WPARAM; +typedef LONG_PTR LPARAM; +typedef LONG_PTR LRESULT; + +// +// Handles +// +typedef void *HANDLE; + +typedef HANDLE HWND, HGDIOBJ, HMODULE, HDC, HRGN, HINSTANCE, HPALETTE, HFILE, HCURSOR; + +typedef LONG LCID; + +typedef DWORD COLORREF; + +typedef LONG HRESULT; + +typedef LRESULT(CALLBACK *WNDPROC)(HWND, UINT, WPARAM, LPARAM); + +typedef struct waveformat_tag { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; +} WAVEFORMAT, *PWAVEFORMAT, *LPWAVEFORMAT; + +typedef struct pcmwaveformat_tag { + WAVEFORMAT wf; + WORD wBitsPerSample; +} PCMWAVEFORMAT, *PPCMWAVEFORMAT, *LPPCMWAVEFORMAT; + +typedef struct tWAVEFORMATEX { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wBitsPerSample; + WORD cbSize; +} WAVEFORMATEX, *LPWAVEFORMATEX, *LPCWAVEFORMATEX; + +typedef struct _FILETIME { + DWORD dwLowDateTime; + DWORD dwHighDateTime; +} FILETIME, *LPFILETIME; + +typedef struct tagRECT { + LONG left; + LONG top; + LONG right; + LONG bottom; +} RECT; + +typedef RECT *LPRECT; + +typedef struct tagPOINT { + LONG x; + LONG y; +} POINT; + +typedef struct tagSIZE { + LONG cx; + LONG cy; +} SIZE; + +typedef struct tagVS_FIXEDFILEINFO { + DWORD dwSignature; + DWORD dwStrucVersion; + DWORD dwFileVersionMS; + DWORD dwFileVersionLS; + DWORD dwProductVersionMS; + DWORD dwProductVersionLS; + DWORD dwFileFlagsMask; + DWORD dwFileFlags; + DWORD dwFileOS; + DWORD dwFileType; + DWORD dwFileSubtype; + DWORD dwFileDateMS; + DWORD dwFileDateLS; +} VS_FIXEDFILEINFO; + +typedef struct tagMSG { + HWND hwnd; + UINT message; + WPARAM wParam; + LPARAM lParam; + DWORD time; + POINT pt; +} MSG, *LPMSG; + +typedef uint32_t FOURCC; + +typedef struct { + FOURCC ckid; + DWORD cksize; + FOURCC fccType; + DWORD dwDataOffset; + DWORD dwFlags; +} MMCKINFO; + +// +// System time is represented with the following structure: +// + +typedef struct _SYSTEMTIME { + WORD wYear; + WORD wMonth; + WORD wDayOfWeek; + WORD wDay; + WORD wHour; + WORD wMinute; + WORD wSecond; + WORD wMilliseconds; +} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; + +typedef struct tagWNDCLASSEXA { + UINT cbSize; + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCSTR lpszMenuName; + LPCSTR lpszClassName; + HICON hIconSm; +} WNDCLASSEXA; + +typedef unsigned long _fsize_t; /* Could be 64 bits for Win32 */ + +struct _finddata_t { + unsigned attrib; + time_t time_create; /* -1 for FAT file systems */ + time_t time_access; /* -1 for FAT file systems */ + time_t time_write; + _fsize_t size; + char name[260]; +}; + +typedef WORD ATOM; + +// +// Everything else +// +typedef struct tagPALETTEENTRY { + BYTE peRed; + BYTE peGreen; + BYTE peBlue; + BYTE peFlags; +} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY; + +typedef struct _SYSTEM_INFO { + union { + DWORD dwOemId; + struct { + WORD wProcessorArchitecture; + WORD wReserved; + }; + }; + DWORD dwPageSize; + LPVOID lpMinimumApplicationAddress; + LPVOID lpMaximumApplicationAddress; + DWORD_PTR dwActiveProcessorMask; + DWORD dwNumberOfProcessors; + DWORD dwProcessorType; + DWORD dwAllocationGranularity; + WORD wProcessorLevel; + WORD wProcessorRevision; +} SYSTEM_INFO, *LPSYSTEM_INFO; + +typedef void *LPSECURITY_ATTRIBUTES; + +typedef struct _LIST_ENTRY { + struct _LIST_ENTRY *Flink; + struct _LIST_ENTRY *Blink; +} LIST_ENTRY, *PLIST_ENTRY; + +DWORD WINAPI GetTickCount(VOID); + +DWORD WINAPI GetLastError(VOID); +VOID WINAPI SetLastError(DWORD dwErrCode); + +WINBOOL WINAPI CloseHandle(HANDLE hObject); + +HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, + LPCSTR lpName); +BOOL WINAPI SetEvent(HANDLE hEvent); +BOOL WINAPI ResetEvent(HANDLE hEvent); +DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); + +WINBOOL WINAPI SetCursorPos(int X, int Y); +int WINAPI ShowCursor(WINBOOL bShow); +HWND WINAPI SetCapture(HWND hWnd); +WINBOOL WINAPI ReleaseCapture(VOID); + +SHORT WINAPI GetAsyncKeyState(int vKey); + +WINBOOL WINAPI PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg); + +WINBOOL WINAPI TranslateMessage(CONST MSG *lpMsg); +LRESULT WINAPI DispatchMessageA(CONST MSG *lpMsg); +WINBOOL WINAPI PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); + +WINBOOL WINAPI DestroyWindow(HWND hWnd); +HWND WINAPI GetLastActivePopup(HWND hWnd); +HWND WINAPI GetTopWindow(HWND hWnd); +WINBOOL WINAPI SetForegroundWindow(HWND hWnd); +HWND WINAPI SetFocus(HWND hWnd); +HWND GetDesktopWindow(); +HRESULT SHGetSpecialFolderLocation(HWND hwnd, int csidl, PIDLIST_ABSOLUTE *ppidl); +HWND CreateWindowExA( + DWORD dwExStyle, + LPCSTR lpClassName, + LPCSTR lpWindowName, + DWORD dwStyle, + int X, + int Y, + int nWidth, + int nHeight, + HWND hWndParent, + HMENU hMenu, + HINSTANCE hInstance, + LPVOID lpParam); +HWND WINAPI FindWindowA(LPCSTR lpClassName, LPCSTR lpWindowName); +BOOL InvalidateRect(HWND hWnd, const RECT *lpRect, BOOL bErase); +BOOL UpdateWindow(HWND hWnd); +BOOL ShowWindow(HWND hWnd, int nCmdShow); +WINUSERAPI ATOM WINAPI RegisterClassExA(const WNDCLASSEXA *lpwcx); +int GetSystemMetrics(int nIndex); +HGDIOBJ GetStockObject(int i); +HCURSOR LoadCursorA(HINSTANCE hInstance, LPCSTR lpCursorName); +BOOL GetUserNameA(LPSTR lpBuffer, LPDWORD pcbBuffer); +void GetLocalTime(LPSYSTEMTIME lpSystemTime); +long __cdecl _findfirst(const char *, struct _finddata_t *); +int __cdecl _findnext(long, struct _finddata_t *); + +HICON LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName); +HANDLE LoadImageA(HINSTANCE hInst, LPCSTR name, UINT type, int cx, int cy, UINT fuLoad); +BOOL SHGetPathFromIDListA(PCIDLIST_ABSOLUTE pidl, LPSTR pszPath); +HINSTANCE ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd); +int GetClassName(HWND hWnd, LPTSTR lpClassName, int nMaxCount); + +typedef LONG(WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)( + struct _EXCEPTION_POINTERS *ExceptionInfo); +typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER; +LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter); + +HMODULE GetModuleHandleA(LPCSTR lpModuleName); + +uintptr_t __cdecl _beginthreadex(void *_Security, unsigned _StackSize, unsigned(__stdcall *_StartAddress)(void *), + void *_ArgList, unsigned _InitFlag, unsigned *_ThrdAddr); +HANDLE WINAPI GetCurrentThread(VOID); +DWORD WINAPI GetCurrentThreadId(VOID); +WINBOOL WINAPI SetThreadPriority(HANDLE hThread, int nPriority); +VOID WINAPI Sleep(DWORD dwMilliseconds); + +VOID WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo); + +HDC WINAPI GetDC(HWND hWnd); +int WINAPI ReleaseDC(HWND hWnd, HDC hDC); +WINBOOL WINAPI TextOutA(HDC hdc, int x, int y, LPCSTR lpString, int c); + +int WINAPI GetDeviceCaps(HDC hdc, int index); +BOOL GetWindowRect(HWND hDlg, tagRECT *Rect); +UINT WINAPI GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LPPALETTEENTRY pPalEntries); + +int WINAPIV wsprintfA(LPSTR, LPCSTR, ...); +int WINAPIV wvsprintfA(LPSTR dest, LPCSTR format, va_list arglist); +int __cdecl _strcmpi(const char *_Str1, const char *_Str2); +char *__cdecl _itoa(int _Value, char *_Dest, int _Radix); + +char *__cdecl _strlwr(char *str); + +// +// File I/O +// + +typedef struct _WIN32_FIND_DATAA { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD dwReserved0; + DWORD dwReserved1; + CHAR cFileName[DVL_MAX_PATH]; + CHAR cAlternateFileName[14]; + DWORD dwFileType; + DWORD dwCreatorType; + WORD wFinderFlags; +} WIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; + +typedef void *LPOVERLAPPED; + +typedef struct _IMAGE_FILE_HEADER { + WORD Machine; + WORD NumberOfSections; + DWORD TimeDateStamp; + DWORD PointerToSymbolTable; + DWORD NumberOfSymbols; + WORD SizeOfOptionalHeader; + WORD Characteristics; +} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; + +typedef BOOL(CALLBACK *DLGPROC)(HWND, UINT, WPARAM, LPARAM); + +typedef struct _IMAGE_OPTIONAL_HEADER { + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + DWORD BaseOfData; + DWORD ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + DWORD SizeOfStackReserve; + DWORD SizeOfStackCommit; + DWORD SizeOfHeapReserve; + DWORD SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; +} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; + +typedef struct _IMAGE_NT_HEADERS { + DWORD Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER32 OptionalHeader; +} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS; + +typedef struct _IMAGE_DOS_HEADER { + WORD e_magic; + WORD e_cblp; + WORD e_cp; + WORD e_crlc; + WORD e_cparhdr; + WORD e_minalloc; + WORD e_maxalloc; + WORD e_ss; + WORD e_sp; + WORD e_csum; + WORD e_ip; + WORD e_cs; + WORD e_lfarlc; + WORD e_ovno; + WORD e_res[4]; + WORD e_oemid; + WORD e_oeminfo; + WORD e_res2[10]; + LONG e_lfanew; +} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; + +typedef struct _OFSTRUCT { + BYTE cBytes; + BYTE fFixedDisk; + WORD nErrCode; + WORD Reserved1; + WORD Reserved2; + CHAR szPathName[DVL_OFS_MAXPATHNAME]; +} OFSTRUCT, *LPOFSTRUCT, *POFSTRUCT; + +typedef struct _OSVERSIONINFOA { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + CHAR szCSDVersion[128]; +} OSVERSIONINFO, *LPOSVERSIONINFOA; + +typedef struct _IMAGE_SECTION_HEADER { + union { + DWORD PhysicalAddress; + DWORD VirtualSize; + } Misc; + DWORD VirtualAddress; + DWORD SizeOfRawData; + DWORD PointerToRawData; + DWORD PointerToRelocations; + DWORD PointerToLinenumbers; + WORD NumberOfRelocations; + WORD NumberOfLinenumbers; + DWORD Characteristics; +} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; + +BOOL GetVersionExA(LPOSVERSIONINFOA lpVersionInformation); + +void lstrcpynA(LPSTR lpString1, LPCSTR lpString2, int iMaxLength); + +typedef struct _PROCESS_INFORMATION { + HANDLE hProcess; + HANDLE hThread; + DWORD dwProcessId; + DWORD dwThreadId; +} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; + +typedef void *LPSTARTUPINFOA; +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); + +VOID WINAPI ExitProcess(UINT uExitCode); +DWORD WINAPI GetCurrentProcessId(VOID); + +HANDLE WINAPI CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, + DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName); +LPVOID WINAPI MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, + DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap); +WINBOOL WINAPI UnmapViewOfFile(LPCVOID lpBaseAddress); + +LPVOID VirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); +BOOL VirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType); + +DWORD WINAPI WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds); +HWND WINAPI GetForegroundWindow(VOID); +HWND WINAPI GetWindow(HWND hWnd, UINT uCmd); +DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId); + +DWORD WINAPI GetPrivateProfileStringA(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, + DWORD nSize, LPCSTR lpFileName); +int MessageBoxA(HWND hWnd, const char *Text, const char *Title, UINT Flags); +typedef LONG LSTATUS, HKEY, REGSAM, PHKEY; + +LSTATUS RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult); +LSTATUS RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, BYTE *lpData, LPDWORD lpcbData); +LSTATUS RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData); +LSTATUS RegCloseKeyA(HKEY hKey); +void PostQuitMessage(int nExitCode); +LRESULT DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +LONG GetWindowLongA(HWND hWnd, int nIndex); +LONG SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong); + +WINBOOL WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, + LPOVERLAPPED lpOverlapped); +DWORD WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); +WINBOOL WINAPI SetEndOfFile(HANDLE hFile); +DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName); +WINBOOL WINAPI SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes); +HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData); +BOOL FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData); +WINBOOL WINAPI FindClose(HANDLE hFindFile); +HANDLE WINAPI CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, + DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); +WINBOOL WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, + LPOVERLAPPED lpOverlapped); +DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh); +UINT WINAPI GetWindowsDirectoryA(LPSTR lpBuffer, UINT uSize); +DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer); +DWORD GetLogicalDriveStringsA(DWORD nBufferLength, LPSTR lpBuffer); +UINT GetDriveTypeA(LPCSTR lpRootPathName); +WINBOOL WINAPI GetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, + LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters); +DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize); +WINBOOL WINAPI GetComputerNameA(LPSTR lpBuffer, LPDWORD nSize); +DWORD GetFileVersionInfoSizeA(LPCSTR lptstrFilename, LPDWORD lpdwHandle); +BOOL GetFileVersionInfoA(LPCSTR lptstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData); +BOOL VerQueryValueA(LPCVOID pBlock, LPCSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen); +WINBOOL WINAPI DeleteFileA(LPCSTR lpFileName); +WINBOOL WINAPI CopyFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, WINBOOL bFailIfExists); +HFILE WINAPI OpenFile(LPCSTR lpFileName, LPOFSTRUCT lpReOpenBuff, UINT uStyle); + +typedef struct _CONTEXT { + + // + // The flags values within this flag control the contents of + // a CONTEXT record. + // + // If the context record is used as an input parameter, then + // for each portion of the context record controlled by a flag + // whose value is set, it is assumed that that portion of the + // context record contains valid context. If the context record + // is being used to modify a threads context, then only that + // portion of the threads context will be modified. + // + // If the context record is used as an IN OUT parameter to capture + // the context of a thread, then only those portions of the thread's + // context corresponding to set flags will be returned. + // + // The context record is never used as an OUT only parameter. + // + + DWORD ContextFlags; + + // + // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is + // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT + // included in CONTEXT_FULL. + // + + DWORD Dr0; + DWORD Dr1; + DWORD Dr2; + DWORD Dr3; + DWORD Dr6; + DWORD Dr7; + + // + // This section is specified/returned if the + // ContextFlags word contians the flag CONTEXT_SEGMENTS. + // + + DWORD SegGs; + DWORD SegFs; + DWORD SegEs; + DWORD SegDs; + + // + // This section is specified/returned if the + // ContextFlags word contians the flag CONTEXT_INTEGER. + // + + DWORD Edi; + DWORD Esi; + DWORD Ebx; + DWORD Edx; + DWORD Ecx; + DWORD Eax; + + // + // This section is specified/returned if the + // ContextFlags word contians the flag CONTEXT_CONTROL. + // + + DWORD Ebp; + DWORD Eip; + DWORD SegCs; // MUST BE SANITIZED + DWORD EFlags; // MUST BE SANITIZED + DWORD Esp; + DWORD SegSs; +} CONTEXT; + +typedef CONTEXT *PCONTEXT; + +// +// Exception record definition. +// + +typedef struct _EXCEPTION_RECORD { + DWORD ExceptionCode; + DWORD ExceptionFlags; + struct _EXCEPTION_RECORD *ExceptionRecord; + PVOID ExceptionAddress; + DWORD NumberParameters; +} EXCEPTION_RECORD; + +typedef EXCEPTION_RECORD *PEXCEPTION_RECORD; + +typedef struct _EXCEPTION_POINTERS { + PEXCEPTION_RECORD ExceptionRecord; + PCONTEXT ContextRecord; +} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; + +typedef struct _MEMORY_BASIC_INFORMATION { + PVOID BaseAddress; + PVOID AllocationBase; + DWORD AllocationProtect; + SIZE_T RegionSize; + DWORD State; + DWORD Protect; + DWORD Type; +} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; + +// +// Total fakes +// +typedef struct { +} SOCKADDR, GUID, *LPGUID; + +typedef struct { + DWORD cb; +} STARTUPINFOA; + +BOOL IsBadReadPtr(const VOID *lp, UINT_PTR ucb); +BOOL IsBadWritePtr(LPVOID lp, UINT_PTR ucb); +SIZE_T VirtualQuery(LPCVOID lpAddress, PMEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength); + +// +// MSCVRT emulation +// + +extern void LoadCharNames(); +extern void LoadAndPlaySound(char *FilePath, int lVolume, int lPan); +extern void DrawArtWithMask(int SX, int SY, int SW, int SH, int nFrame, BYTE bMask, void *pBuffer); +extern BOOL __cdecl LoadArtWithPal(char *pszFile, void **pBuffer, int frames, DWORD *data); + +} diff --git a/SourceS/miniwin_rand.h b/SourceS/miniwin_rand.h index 76c874297..ed2af7d3f 100644 --- a/SourceS/miniwin_rand.h +++ b/SourceS/miniwin_rand.h @@ -1,4 +1,8 @@ #pragma once +namespace dvl { + int rand(void); void srand(unsigned int seed); + +} diff --git a/SourceS/miniwin_thread.h b/SourceS/miniwin_thread.h index ff2f240d3..3dd8cba82 100644 --- a/SourceS/miniwin_thread.h +++ b/SourceS/miniwin_thread.h @@ -1,7 +1,11 @@ #pragma once +namespace dvl { + typedef void *CRITICAL_SECTION, **LPCRITICAL_SECTION; VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); VOID WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection); VOID WINAPI LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection); VOID WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection); + +} diff --git a/SourceS/miniwin_ui.h b/SourceS/miniwin_ui.h index 5e8b38acb..a8ea23d36 100644 --- a/SourceS/miniwin_ui.h +++ b/SourceS/miniwin_ui.h @@ -1,8 +1,12 @@ #pragma once +namespace dvl { + BOOL EndDialog(HWND hDlg, INT_PTR nResult); BOOL SetDlgItemText(HWND hDlg, int nIDDlgItem, LPCSTR lpString); BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags); DWORD FormatMessage(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, char *lpBuffer, DWORD nSize, va_list *Arguments); int DialogBoxParam(HINSTANCE hInstance, LPCSTR msgId, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam); LPCSTR MAKEINTRESOURCE(int i); + +} diff --git a/SourceX/DiabloUI/credits.cpp b/SourceX/DiabloUI/credits.cpp index 413453741..85318fd46 100644 --- a/SourceX/DiabloUI/credits.cpp +++ b/SourceX/DiabloUI/credits.cpp @@ -2,6 +2,8 @@ #define CREDIT_LINES 13 +namespace dvl { + int creditLine; int ybase; int lastYbase; @@ -557,3 +559,5 @@ BOOL __stdcall UiCreditsDialog(int a1) return TRUE; } + +} diff --git a/SourceX/DiabloUI/diabloui.cpp b/SourceX/DiabloUI/diabloui.cpp index 12c3828ed..4b459e4aa 100644 --- a/SourceX/DiabloUI/diabloui.cpp +++ b/SourceX/DiabloUI/diabloui.cpp @@ -1,6 +1,8 @@ #include "pch.h" #include +namespace dvl { + TTF_Font *font; int SelectedItemMin = 1; int SelectedItemMax = 1; @@ -823,3 +825,5 @@ void DrawMouse() DrawArt(MouseX, MouseY, &ArtCursor); } + +} diff --git a/SourceX/DiabloUI/diabloui.h b/SourceX/DiabloUI/diabloui.h index 323e451c2..5b5875a9d 100644 --- a/SourceX/DiabloUI/diabloui.h +++ b/SourceX/DiabloUI/diabloui.h @@ -3,6 +3,8 @@ #include #include +namespace dvl { + typedef enum _artFocus { FOCUS_SMALL, FOCUS_MED, @@ -115,3 +117,5 @@ void UiInitList(int min, int max, void(__stdcall *fnFocus)(int value), void(__st void UiRender(); void UiRenderItems(UI_Item *items, int size); void WordWrap(UI_Item *item); + +} diff --git a/SourceX/DiabloUI/dialogs.cpp b/SourceX/DiabloUI/dialogs.cpp index 01812eb5b..00688c9a0 100644 --- a/SourceX/DiabloUI/dialogs.cpp +++ b/SourceX/DiabloUI/dialogs.cpp @@ -1,5 +1,7 @@ #include "pch.h" +namespace dvl { + UI_Item OKCANCEL_DIALOG[] = { { { 180, 168, 280, 144 }, UI_IMAGE, 0, 0, "ui_art\\spopup.pcx" }, { { 200, 180, 240, 80 }, UI_TEXT, UIS_CENTER }, // message @@ -35,3 +37,5 @@ UI_Item SPAWNERR_DIALOG[] = { { { 140, 199, 400, 177 }, UI_TEXT, 0, 0, "The Rogue and Sorcerer are only available in the full retail version of Diablo. For ordering information call (800) 953-SNOW." }, { { 230, 407, 180, 43 }, UI_BUTTON, 0, 0, "OK" }, }; + +} diff --git a/SourceX/DiabloUI/mainmenu.cpp b/SourceX/DiabloUI/mainmenu.cpp index b4aef3000..245613f96 100644 --- a/SourceX/DiabloUI/mainmenu.cpp +++ b/SourceX/DiabloUI/mainmenu.cpp @@ -1,5 +1,7 @@ #include "pch.h" +namespace dvl { + int MainMenuResult; UI_Item MAINMENU_DIALOG[] = { { { 0, 0, 640, 480 }, UI_IMAGE, 0, 0, NULL, &ArtBackground }, @@ -56,3 +58,5 @@ BOOL __stdcall UiMainMenuDialog(char *name, int *pdwResult, void(__stdcall *fnSo *pdwResult = MainMenuResult; return TRUE; } + +} diff --git a/SourceX/DiabloUI/progress.cpp b/SourceX/DiabloUI/progress.cpp index 362e625cc..822de8081 100644 --- a/SourceX/DiabloUI/progress.cpp +++ b/SourceX/DiabloUI/progress.cpp @@ -1,5 +1,7 @@ #include "pch.h" +namespace dvl { + Art ArtPopupSm; Art ArtProgBG; Art ProgFil; @@ -107,3 +109,5 @@ int __stdcall UiProgressDialog(HWND window, char *msg, int enable, int(__cdecl * return progress == 100; } + +} diff --git a/SourceX/DiabloUI/selconn.cpp b/SourceX/DiabloUI/selconn.cpp index 1fe507ba9..fb35dc168 100644 --- a/SourceX/DiabloUI/selconn.cpp +++ b/SourceX/DiabloUI/selconn.cpp @@ -1,6 +1,8 @@ #include "pch.h" #include "selconn.h" +namespace dvl { + char selconn_MaxPlayers[21]; char selconn_Description[64]; char selconn_Gateway[129]; @@ -120,3 +122,5 @@ int __stdcall UiSelectProvider( return selconn_ReturnValue; } + +} diff --git a/SourceX/DiabloUI/selconn.h b/SourceX/DiabloUI/selconn.h index c3e963c6a..f6fc75842 100644 --- a/SourceX/DiabloUI/selconn.h +++ b/SourceX/DiabloUI/selconn.h @@ -1,3 +1,7 @@ +namespace dvl { + void selconn_Esc(); void selconn_Focus(int value); void selconn_Select(int value); + +} diff --git a/SourceX/DiabloUI/selgame.cpp b/SourceX/DiabloUI/selgame.cpp index 86ee3a315..2f85fddd5 100644 --- a/SourceX/DiabloUI/selgame.cpp +++ b/SourceX/DiabloUI/selgame.cpp @@ -1,6 +1,8 @@ #include "pch.h" #include "selgame.h" +namespace dvl { + char selgame_Lable[32]; char selgame_Ip[129] = ""; char selgame_Password[16] = ""; @@ -221,3 +223,5 @@ int __stdcall UiSelectGame(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDAT return selgame_enteringGame; } + +} diff --git a/SourceX/DiabloUI/selgame.h b/SourceX/DiabloUI/selgame.h index 033bfb94b..66fe628a6 100644 --- a/SourceX/DiabloUI/selgame.h +++ b/SourceX/DiabloUI/selgame.h @@ -1,3 +1,7 @@ +#pragma once + +namespace dvl { + void selgame_GameSelection_Init(); void selgame_GameSelection_Focus(int value); void selgame_GameSelection_Select(int value); @@ -8,3 +12,5 @@ void selgame_Diff_Esc(); void selgame_Password_Init(int value); void selgame_Password_Select(int value); void selgame_Password_Esc(); + +} diff --git a/SourceX/DiabloUI/selhero.cpp b/SourceX/DiabloUI/selhero.cpp index 32918ed6e..8b2e10fd6 100644 --- a/SourceX/DiabloUI/selhero.cpp +++ b/SourceX/DiabloUI/selhero.cpp @@ -1,6 +1,8 @@ #include "pch.h" #include "selhero.h" +namespace dvl { + int selhero_SaveCount = 0; _uiheroinfo heros[MAX_CHARACTERS]; _uiheroinfo heroInfo; @@ -278,3 +280,5 @@ BOOL __stdcall UiSelHeroMultDialog( isMultiPlayer = true; return UiSelHeroDialog(fninfo, fncreate, fnstats, dlgresult, name); } + +} diff --git a/SourceX/DiabloUI/selhero.h b/SourceX/DiabloUI/selhero.h index 5dc5968b2..54be00cb5 100644 --- a/SourceX/DiabloUI/selhero.h +++ b/SourceX/DiabloUI/selhero.h @@ -1,3 +1,7 @@ +#pragma once + +namespace dvl { + void selhero_List_Init(); void selhero_List_Focus(int value); void selhero_List_Select(int value); @@ -9,3 +13,5 @@ void selhero_Name_Select(int value); void selhero_Name_Esc(); void selhero_Load_Focus(int value); void selhero_Load_Select(int value); + +} diff --git a/SourceX/DiabloUI/title.cpp b/SourceX/DiabloUI/title.cpp index ff5948899..c5c7a3c7c 100644 --- a/SourceX/DiabloUI/title.cpp +++ b/SourceX/DiabloUI/title.cpp @@ -1,5 +1,7 @@ #include "pch.h" +namespace dvl { + void title_Load() { LoadBackgroundArt("ui_art\\title.pcx"); @@ -55,3 +57,5 @@ BOOL __stdcall UiTitleDialog(int a1) return TRUE; } + +} diff --git a/SourceX/dvlnet/abstract_net.cpp b/SourceX/dvlnet/abstract_net.cpp index b36c36d4d..6789b6b9b 100644 --- a/SourceX/dvlnet/abstract_net.cpp +++ b/SourceX/dvlnet/abstract_net.cpp @@ -5,7 +5,7 @@ #include "dvlnet/udp_p2p.h" #include "dvlnet/loopback.h" -using namespace dvlnet; +namespace dvl { namespace net { abstract_net::~abstract_net() { @@ -24,3 +24,4 @@ std::unique_ptr abstract_net::make_net(provider_t provider) } } +}} diff --git a/SourceX/dvlnet/abstract_net.h b/SourceX/dvlnet/abstract_net.h index fd79e25ca..b4a2eb96b 100644 --- a/SourceX/dvlnet/abstract_net.h +++ b/SourceX/dvlnet/abstract_net.h @@ -7,7 +7,7 @@ #include "devilution.h" -namespace dvlnet { +namespace dvl { namespace net { typedef std::vector buffer_t; typedef void(__stdcall *snet_event_func)(struct _SNETEVENT*); typedef unsigned long provider_t; @@ -38,5 +38,5 @@ namespace dvlnet { static std::unique_ptr make_net(provider_t provider); }; -} +}} diff --git a/SourceX/dvlnet/base.cpp b/SourceX/dvlnet/base.cpp index 8f848b53b..b9d6eae47 100644 --- a/SourceX/dvlnet/base.cpp +++ b/SourceX/dvlnet/base.cpp @@ -2,7 +2,7 @@ #include -using namespace dvlnet; +namespace dvl { namespace net { void base::setup_gameinfo(buffer_t info) { @@ -253,3 +253,5 @@ bool base::SNetGetTurnsInTransit(int *turns) *turns = turn_queue[plr_self].size(); return true; } + +}} diff --git a/SourceX/dvlnet/base.h b/SourceX/dvlnet/base.h index eb1600cb5..bc4decb34 100644 --- a/SourceX/dvlnet/base.h +++ b/SourceX/dvlnet/base.h @@ -18,7 +18,7 @@ #define LEAVE_ENDING 0x40000004 #define LEAVE_DROP 0x40000006 -namespace dvlnet { +namespace dvl { namespace net { class base : public abstract_net { public: virtual int create(std::string addrstr, std::string passwd) = 0; @@ -74,4 +74,4 @@ namespace dvlnet { plr_t get_owner(); void clear_msg(plr_t plr); }; -} +}} diff --git a/SourceX/dvlnet/frame_queue.cpp b/SourceX/dvlnet/frame_queue.cpp index 907c84c55..5374995cf 100644 --- a/SourceX/dvlnet/frame_queue.cpp +++ b/SourceX/dvlnet/frame_queue.cpp @@ -2,7 +2,7 @@ #include "dvlnet/packet.h" -using namespace dvlnet; +namespace dvl { namespace net { size_t frame_queue::size() { @@ -74,3 +74,5 @@ buffer_t frame_queue::make_frame(buffer_t packetbuf) ret.insert(ret.end(), packetbuf.begin(), packetbuf.end()); return std::move(ret); } + +}} diff --git a/SourceX/dvlnet/frame_queue.h b/SourceX/dvlnet/frame_queue.h index 12cf099af..9aed69b94 100644 --- a/SourceX/dvlnet/frame_queue.h +++ b/SourceX/dvlnet/frame_queue.h @@ -4,7 +4,7 @@ #include "dvlnet/abstract_net.h" -namespace dvlnet { +namespace dvl { namespace net { class frame_queue_exception : public dvlnet_exception {}; class frame_queue { @@ -25,4 +25,4 @@ namespace dvlnet { static buffer_t make_frame(buffer_t packetbuf); }; -} +}} diff --git a/SourceX/dvlnet/loopback.cpp b/SourceX/dvlnet/loopback.cpp index 421b25e5b..7de7c88e5 100644 --- a/SourceX/dvlnet/loopback.cpp +++ b/SourceX/dvlnet/loopback.cpp @@ -1,6 +1,6 @@ #include "dvlnet/loopback.h" -using namespace dvlnet; +namespace dvl { namespace net { int loopback::create(std::string addrstr, std::string passwd) { @@ -102,3 +102,5 @@ bool loopback::SNetGetTurnsInTransit(int *turns) *turns = 0; return true; } + +}} diff --git a/SourceX/dvlnet/loopback.h b/SourceX/dvlnet/loopback.h index 407b050ac..4e45376e8 100644 --- a/SourceX/dvlnet/loopback.h +++ b/SourceX/dvlnet/loopback.h @@ -6,7 +6,7 @@ #include "devilution.h" #include "dvlnet/abstract_net.h" -namespace dvlnet { +namespace dvl { namespace net { class loopback : public abstract_net { private: std::queue message_queue; @@ -32,4 +32,4 @@ namespace dvlnet { virtual bool SNetGetTurnsInTransit(int *turns); virtual void setup_gameinfo(buffer_t info); }; -} +}} diff --git a/SourceX/dvlnet/packet.cpp b/SourceX/dvlnet/packet.cpp index 52d031b82..35ace6a90 100644 --- a/SourceX/dvlnet/packet.cpp +++ b/SourceX/dvlnet/packet.cpp @@ -1,6 +1,6 @@ #include "dvlnet/packet.h" -using namespace dvlnet; +namespace dvl { namespace net { static constexpr bool disable_encryption = false; @@ -173,3 +173,5 @@ packet_factory::packet_factory(std::string pw) crypto_pwhash_ALG_DEFAULT)) ABORT(); } + +}} diff --git a/SourceX/dvlnet/packet.h b/SourceX/dvlnet/packet.h index b54919f6f..6a1ecd67f 100644 --- a/SourceX/dvlnet/packet.h +++ b/SourceX/dvlnet/packet.h @@ -7,7 +7,7 @@ #include "dvlnet/abstract_net.h" -namespace dvlnet { +namespace dvl { namespace net { enum packet_type : uint8_t { PT_MESSAGE = 0x01, PT_TURN = 0x02, @@ -265,4 +265,4 @@ namespace dvlnet { ret->encrypt(); return ret; } -} +}} diff --git a/SourceX/dvlnet/tcp_client.cpp b/SourceX/dvlnet/tcp_client.cpp index 2ec72e9e2..a764bfe0f 100644 --- a/SourceX/dvlnet/tcp_client.cpp +++ b/SourceX/dvlnet/tcp_client.cpp @@ -8,7 +8,7 @@ #include #include -using namespace dvlnet; +namespace dvl { namespace net { int tcp_client::create(std::string addrstr, std::string passwd) { @@ -102,3 +102,5 @@ void tcp_client::send(packet& pkt) std::bind(&tcp_client::handle_send, this, std::placeholders::_1, std::placeholders::_2)); } + +}} diff --git a/SourceX/dvlnet/tcp_client.h b/SourceX/dvlnet/tcp_client.h index c658cd9cf..bdb8cbf40 100644 --- a/SourceX/dvlnet/tcp_client.h +++ b/SourceX/dvlnet/tcp_client.h @@ -12,7 +12,7 @@ #include "dvlnet/base.h" #include "dvlnet/tcp_server.h" -namespace dvlnet { +namespace dvl { namespace net { class tcp_client : public base { public: int create(std::string addrstr, std::string passwd); @@ -34,4 +34,4 @@ namespace dvlnet { void start_recv(); void handle_send(const asio::error_code& error, size_t bytes_sent); }; -} +}} diff --git a/SourceX/dvlnet/tcp_server.cpp b/SourceX/dvlnet/tcp_server.cpp index ee5690597..8ecbde56c 100644 --- a/SourceX/dvlnet/tcp_server.cpp +++ b/SourceX/dvlnet/tcp_server.cpp @@ -5,7 +5,7 @@ #include "dvlnet/base.h" -using namespace dvlnet; +namespace dvl { namespace net { tcp_server::tcp_server(asio::io_context& ioc, std::string bindaddr, unsigned short port, std::string pw) : @@ -207,3 +207,5 @@ void tcp_server::drop_connection(scc con) con->timer.cancel(); con->socket.close(); } + +}} diff --git a/SourceX/dvlnet/tcp_server.h b/SourceX/dvlnet/tcp_server.h index 60f00f5ee..bd4918f6d 100644 --- a/SourceX/dvlnet/tcp_server.h +++ b/SourceX/dvlnet/tcp_server.h @@ -12,7 +12,7 @@ #include "dvlnet/abstract_net.h" #include "dvlnet/frame_queue.h" -namespace dvlnet { +namespace dvl { namespace net { class server_exception : public dvlnet_exception {}; class tcp_server { @@ -61,4 +61,4 @@ namespace dvlnet { void handle_timeout(scc con, const asio::error_code& ec); void drop_connection(scc con); }; -} +}} diff --git a/SourceX/dvlnet/udp_p2p.cpp b/SourceX/dvlnet/udp_p2p.cpp index fc4afab8c..a2971f580 100644 --- a/SourceX/dvlnet/udp_p2p.cpp +++ b/SourceX/dvlnet/udp_p2p.cpp @@ -1,6 +1,6 @@ #include "dvlnet/udp_p2p.h" -using namespace dvlnet; +namespace dvl { namespace net { const udp_p2p::endpoint udp_p2p::none; @@ -166,3 +166,5 @@ void udp_p2p::recv_decrypted(packet& pkt, endpoint sender) return; //packet not for us, drop recv_local(pkt); } + +}} diff --git a/SourceX/dvlnet/udp_p2p.h b/SourceX/dvlnet/udp_p2p.h index 09125a4d4..585ff485a 100644 --- a/SourceX/dvlnet/udp_p2p.h +++ b/SourceX/dvlnet/udp_p2p.h @@ -10,7 +10,7 @@ #include "dvlnet/packet.h" #include "dvlnet/base.h" -namespace dvlnet { +namespace dvl { namespace net { class udp_p2p : public base { public: virtual int create(std::string addrstr, std::string passwd); @@ -42,4 +42,4 @@ namespace dvlnet { std::set dests_for_addr(plr_t dest, endpoint sender); void recv_decrypted(packet& pkt, endpoint sender); }; -} +}} diff --git a/SourceX/dx.cpp b/SourceX/dx.cpp index 03e86b5ab..0f9276829 100644 --- a/SourceX/dx.cpp +++ b/SourceX/dx.cpp @@ -1,5 +1,7 @@ #include "pch.h" +namespace dvl { + Screen *gpBuffer; IDirectDraw *lpDDInterface; @@ -540,3 +542,5 @@ WINBOOL WINAPI TextOutA(HDC hdc, int x, int y, LPCSTR lpString, int c) return TRUE; } + +} diff --git a/SourceX/main.cpp b/SourceX/main.cpp index 3db033fd3..7d9b3ed1c 100644 --- a/SourceX/main.cpp +++ b/SourceX/main.cpp @@ -20,5 +20,7 @@ static std::string build_cmdline(int argc, char **argv) int main(int argc, char **argv) { auto cmdline = build_cmdline(argc, argv); - return WinMain(NULL, NULL, (char *)cmdline.c_str(), 0); + return dvl::WinMain(NULL, NULL, (char *)cmdline.c_str(), 0); } + + diff --git a/SourceX/miniwin.cpp b/SourceX/miniwin.cpp index 92084d1c3..f9b9892e9 100644 --- a/SourceX/miniwin.cpp +++ b/SourceX/miniwin.cpp @@ -3,6 +3,8 @@ #include #endif +namespace dvl { + DWORD last_error; DWORD WINAPI GetLastError(VOID) @@ -329,7 +331,7 @@ BOOL ShowWindow(HWND hWnd, int nCmdShow) return TRUE; } -WINUSERAPI ATOM WINAPI RegisterClassExA(const WNDCLASSEX *lpwcx) +WINUSERAPI ATOM WINAPI RegisterClassExA(const WNDCLASSEXA *lpwcx) { DUMMY(); return 1; @@ -714,3 +716,5 @@ LONG SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong) DUMMY(); return 0; } + +} diff --git a/SourceX/miniwin_io.cpp b/SourceX/miniwin_io.cpp index 2e8a17d2d..d582cd3f3 100644 --- a/SourceX/miniwin_io.cpp +++ b/SourceX/miniwin_io.cpp @@ -1,8 +1,8 @@ #include "pch.h" -static std::set files; +namespace dvl { -void TranslateFileName(char *dst, int dstLen, const char *src) +extern "C" void TranslateFileName(char *dst, int dstLen, const char *src) { for (int i = 0; i < dstLen; i++) { char c = *src++; @@ -13,6 +13,8 @@ void TranslateFileName(char *dst, int dstLen, const char *src) } } +static std::set files; + HANDLE WINAPI CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) @@ -138,3 +140,5 @@ WINBOOL WINAPI CloseHandle(HANDLE hObject) } return TRUE; } + +} diff --git a/SourceX/miniwin_msg_sdl.cpp b/SourceX/miniwin_msg_sdl.cpp index 9a2369d2f..1abad716a 100644 --- a/SourceX/miniwin_msg_sdl.cpp +++ b/SourceX/miniwin_msg_sdl.cpp @@ -4,6 +4,8 @@ * Windows message handling and keyboard event conversion for SDL. */ +namespace dvl { + static std::deque message_queue; static int translate_sdl_key(SDL_Keysym key) @@ -298,3 +300,5 @@ WINBOOL WINAPI PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) return TRUE; } + +} diff --git a/SourceX/miniwin_sdl.h b/SourceX/miniwin_sdl.h index f3c0912a7..5ad1a7e77 100644 --- a/SourceX/miniwin_sdl.h +++ b/SourceX/miniwin_sdl.h @@ -2,6 +2,8 @@ #include +namespace dvl { + extern SDL_Window *window; extern SDL_Renderer *renderer; extern SDL_Texture *texture; @@ -11,6 +13,10 @@ extern SDL_Surface *pal_surface; void sdl_present_surface(); +void sdl_update_entire_surface(); + +} + #ifdef __WINDOWS__ #include #define GetCurrentDir _getcwd @@ -19,4 +25,3 @@ void sdl_present_surface(); #define GetCurrentDir getcwd #endif -void sdl_update_entire_surface(); diff --git a/SourceX/miniwin_thread.cpp b/SourceX/miniwin_thread.cpp index fe3e5bf81..cd47af274 100644 --- a/SourceX/miniwin_thread.cpp +++ b/SourceX/miniwin_thread.cpp @@ -1,5 +1,7 @@ #include "pch.h" +namespace dvl { + static std::set threads; static std::set events; @@ -139,3 +141,5 @@ DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) return wait_for_sdl_cond(hHandle, dwMilliseconds); UNIMPLEMENTED(); } + +} diff --git a/SourceX/sound.cpp b/SourceX/sound.cpp index 591866f18..0d2884a74 100644 --- a/SourceX/sound.cpp +++ b/SourceX/sound.cpp @@ -3,6 +3,8 @@ #include "../types.h" #include "pch.h" +namespace dvl { + LPDIRECTSOUNDBUFFER DSBs[8]; LPDIRECTSOUND sglpDS; char gbSndInited; @@ -440,3 +442,5 @@ void fill_audio(void *udata, Uint8 *stream, int len) audio_len -= len; } */ + +} diff --git a/SourceX/storm.cpp b/SourceX/storm.cpp index b27aa89c6..49c51c593 100644 --- a/SourceX/storm.cpp +++ b/SourceX/storm.cpp @@ -2,7 +2,9 @@ #include "../3rdParty/libsmacker/smacker.h" #include "pch.h" -DWORD nLastError = 0; +namespace dvl { + +extern "C" DWORD nLastError = 0; std::string getIniPath() { @@ -643,3 +645,5 @@ BOOL __stdcall SFileEnableDirectAccess(BOOL enable) DUMMY(); return TRUE; } + +} diff --git a/SourceX/storm_net.cpp b/SourceX/storm_net.cpp index 9e11afa24..2d853d72e 100644 --- a/SourceX/storm_net.cpp +++ b/SourceX/storm_net.cpp @@ -1,7 +1,9 @@ #include "dvlnet/abstract_net.h" #include "pch.h" -static std::unique_ptr dvlnet_inst; +namespace dvl { + +static std::unique_ptr dvlnet_inst; BOOL STORMAPI SNetReceiveMessage(int *senderplayerid, char **data, int *databytes) { @@ -88,7 +90,7 @@ int __stdcall SNetInitializeProvider(unsigned long provider, struct _SNETPROGRAM struct _SNETPLAYERDATA *user_info, struct _SNETUIDATA *ui_info, struct _SNETVERSIONDATA *fileinfo) { - dvlnet_inst = dvlnet::abstract_net::make_net(provider); + dvlnet_inst = net::abstract_net::make_net(provider); return ui_info->selectnamecallback(client_info, user_info, ui_info, fileinfo, provider, NULL, 0, NULL, 0, NULL); } @@ -101,7 +103,7 @@ BOOL STORMAPI SNetCreateGame(const char *pszGameName, const char *pszGamePasswor { if (GameTemplateSize != 8) ABORT(); - dvlnet::buffer_t game_init_info(GameTemplateData, GameTemplateData + GameTemplateSize); + net::buffer_t game_init_info(GameTemplateData, GameTemplateData + GameTemplateSize); dvlnet_inst->setup_gameinfo(std::move(game_init_info)); char addrstr[129] = "0.0.0.0"; @@ -153,3 +155,5 @@ BOOL STORMAPI SNetSetGameMode(DWORD modeFlags, bool makePublic) UNIMPLEMENTED(); return TRUE; } + +} diff --git a/SourceX/stub_rand.cpp b/SourceX/stub_rand.cpp index d8490db3d..aa4cafd35 100644 --- a/SourceX/stub_rand.cpp +++ b/SourceX/stub_rand.cpp @@ -1,5 +1,7 @@ #include "devilution.h" +namespace dvl { + unsigned int rand_state = 1; int rand(void) @@ -12,3 +14,5 @@ void srand(unsigned int seed) { rand_state = seed; } + +} diff --git a/types.h b/types.h index 32da1c41f..540dfea9c 100644 --- a/types.h +++ b/types.h @@ -39,12 +39,20 @@ #pragma warning(disable : 4146) // negative unsigned #endif +#define DEVILUTION_BEGIN_NAMESPACE +#define DEVILUTION_END_NAMESPACE + #else +#define DEVILUTION_BEGIN_NAMESPACE namespace dvl { +#define DEVILUTION_END_NAMESPACE } + #include "miniwin.h" #endif +DEVILUTION_BEGIN_NAMESPACE + #include "defs.h" #include "enums.h" #include "structs.h" @@ -145,4 +153,6 @@ //} //#endif +DEVILUTION_END_NAMESPACE + #endif