diff --git a/3rdParty/Storm/MakefileVC b/3rdParty/Storm/MakefileVC new file mode 100644 index 000000000..3eaa49f1e --- /dev/null +++ b/3rdParty/Storm/MakefileVC @@ -0,0 +1,59 @@ +VC5_DIR ?= $(HOME)/DevStudio_5.10/VC + +# The $(VS6_DIR) directory is a copy of the "Microsoft Visual Studio" directory. +# +# To get a working setup on Linux or other "portable" copies of VS, +# the following DLLs have to be copied to the +# $(VS6_DIR)/VC98/Bin directory. +# +# - $(VS6_DIR)/Common/MSDev98/Bin/MSPDB60.DLL +# +# And to the $(VC5_DIR)/bin directory. +# +# - $(VC5_DIR)/SharedIDE/bin/MSDIS100.DLL +# - $(VC5_DIR)/SharedIDE/bin/MSPDB50.DLL +VS6_DIR ?= $(HOME)/VS6 + +VC6_DIR = $(VS6_DIR)/VC98 + +VC6_BIN_DIR = $(VC6_DIR)/Bin +VC6_INC_DIR = $(VC6_DIR)/Include +VC6_LIB_DIR = $(VC6_DIR)/Lib + +VC5_LIB_DIR = $(VC5_DIR)/lib + +IDE_DIR ?= $(VS6_DIR)/Common/MSDev98 +IDE_BIN_DIR = $(IDE_DIR)/bin +ifeq ($(OS),Windows_NT) + CL = $(VC6_BIN_DIR)/CL.EXE + RC = $(IDE_BIN_DIR)/RC.EXE + VC5_LINK = $(VC5_DIR)/bin/link.exe + VC6_LINK = $(VC6_BIN_DIR)/link.exe +else + CL = wine $(VC6_BIN_DIR)/CL.EXE + RC = wine $(IDE_BIN_DIR)/RC.EXE + VC5_LINK = wine $(VC5_DIR)/bin/link.exe + VC6_LINK = wine $(VC6_BIN_DIR)/link.exe +endif + +CFLAGS=/nologo /c /GX /W3 /O1 /I $(VC6_INC_DIR) /FD /MT /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /Gm /Zi +LINKFLAGS=/nologo /subsystem:windows /machine:I386 /incremental:no + +VC_LINK=$(VC5_LINK) +LINKFLAGS+= /LIBPATH:$(VC5_LIB_DIR) + +all: storm.lib + +STORM_SRC=$(sort $(wildcard Source/*.cpp)) +STORM_OBJS=$(STORM_SRC:.cpp=.obj) + +storm.lib: $(STORM_OBJS) + $(CL) $^ /link /LINK50COMPAT /nologo /dll /subsystem:windows /machine:I386 /LIBPATH:$(VC6_LIB_DIR) /def:"Source/storm.def" /out:storm.dll + +%.obj: %.cpp + $(CL) $(CFLAGS) /Fo$@ $< + +clean: + @$(RM) -v $(STORM_OBJS) storm.{exp,lib,dll} vc60.{idb,pch,pdb} + +.PHONY: clean all diff --git a/DiabloUI/MakefileVC b/DiabloUI/MakefileVC new file mode 100644 index 000000000..69d2fbc4d --- /dev/null +++ b/DiabloUI/MakefileVC @@ -0,0 +1,62 @@ +VC5_DIR ?= $(HOME)/DevStudio_5.10/VC + +# The $(VS6_DIR) directory is a copy of the "Microsoft Visual Studio" directory. +# +# To get a working setup on Linux or other "portable" copies of VS, +# the following DLLs have to be copied to the +# $(VS6_DIR)/VC98/Bin directory. +# +# - $(VS6_DIR)/Common/MSDev98/Bin/MSPDB60.DLL +# +# And to the $(VC5_DIR)/bin directory. +# +# - $(VC5_DIR)/SharedIDE/bin/MSDIS100.DLL +# - $(VC5_DIR)/SharedIDE/bin/MSPDB50.DLL +VS6_DIR ?= $(HOME)/VS6 + +VC6_DIR = $(VS6_DIR)/VC98 + +VC6_BIN_DIR = $(VC6_DIR)/Bin +VC6_INC_DIR = $(VC6_DIR)/Include +VC6_LIB_DIR = $(VC6_DIR)/Lib + +VC5_LIB_DIR = $(VC5_DIR)/lib + +IDE_DIR ?= $(VS6_DIR)/Common/MSDev98 +IDE_BIN_DIR = $(IDE_DIR)/bin +ifeq ($(OS),Windows_NT) + CL = $(VC6_BIN_DIR)/CL.EXE + RC = $(IDE_BIN_DIR)/RC.EXE + VC5_LINK = $(VC5_DIR)/bin/link.exe + VC6_LINK = $(VC6_BIN_DIR)/link.exe +else + CL = wine $(VC6_BIN_DIR)/CL.EXE + RC = wine $(IDE_BIN_DIR)/RC.EXE + VC5_LINK = wine $(VC5_DIR)/bin/link.exe + VC6_LINK = wine $(VC6_BIN_DIR)/link.exe +endif + +CFLAGS=/nologo /c /GX /W3 /O1 /I $(VC6_INC_DIR) /FD /MT /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /Gm /Zi +LINKFLAGS=/nologo /subsystem:windows /machine:I386 /incremental:no + +VC_LINK=$(VC5_LINK) +LINKFLAGS+= /LIBPATH:$(VC5_LIB_DIR) + +all: diabloui.lib + +DIABLOUI_SRC=diabloui.cpp +DIABLOUI_OBJS=$(DIABLOUI_SRC:.cpp=.obj) + +diabloui.lib: $(DIABLOUI_OBJS) ../3rdParty/Storm/storm.lib + $(CL) $^ /link /LINK50COMPAT /nologo /dll /subsystem:windows /machine:I386 /LIBPATH:$(VC6_LIB_DIR) /LIBPATH:../3rdParty/Storm diabloui.res advapi32.lib gdi32.lib shell32.lib user32.lib version.lib storm.lib /def:"diabloui.def" /out:diabloui.dll + +../3rdParty/Storm/storm.lib: + make -C ../3rdParty/Storm + +%.obj: %.cpp + $(CL) $(CFLAGS) /Fo$@ $< + +clean: + @$(RM) -v $(DIABLOUI_OBJS) diabloui.{exp,lib,dll} vc50.{idb,pch,pdb} + +.PHONY: clean all diff --git a/DiabloUI/diabloui.cpp b/DiabloUI/diabloui.cpp index b299d81e1..9d3d49ac3 100644 --- a/DiabloUI/diabloui.cpp +++ b/DiabloUI/diabloui.cpp @@ -1,3 +1,4 @@ +#define STRICT // for WNDPROC. ref: Remarks in https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-callwindowproca #include #include #include diff --git a/DiabloUI/local.cpp b/DiabloUI/local.cpp index fbac4a739..c96ccfd12 100644 --- a/DiabloUI/local.cpp +++ b/DiabloUI/local.cpp @@ -275,15 +275,14 @@ void __fastcall local_DoUiWndProc(HWND hWnd, DWORD *pdwMsgTbl) // ref: 0x10007D01 LRESULT __stdcall local_PostUiWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - LRESULT(__stdcall * v4) - (HWND, UINT, WPARAM, LPARAM); // ebx + WNDPROC v4; HWND v5; // eax HWND v6; // eax HWND v7; // eax WPARAM v9; // [esp-8h] [ebp-14h] BOOL v10; // [esp-4h] [ebp-10h] - v4 = (LRESULT(__stdcall *)(HWND, UINT, WPARAM, LPARAM))GetPropA(hWnd, "UIWNDPROC"); + v4 = (WNDPROC)GetPropA(hWnd, "UIWNDPROC"); switch (uMsg) { case 2u: RemovePropA(hWnd, "UIWNDPROC"); diff --git a/MakefileVC b/MakefileVC index b718bfd43..1d363c4f2 100644 --- a/MakefileVC +++ b/MakefileVC @@ -60,20 +60,14 @@ OBJS=$(DIABLO_SRC:.cpp=.obj) PKWARE_SRC=$(sort $(wildcard 3rdParty/PKWare/*.cpp)) PKWARE_OBJS=$(PKWARE_SRC:.cpp=.obj) -STORM_SRC=$(sort $(wildcard 3rdParty/Storm/Source/*.cpp)) -STORM_OBJS=$(STORM_SRC:.cpp=.obj) +Diablo.exe: main_files $(PKWARE_OBJS) diablo.res DiabloUI/diabloui.lib 3rdParty/Storm/storm.lib + $(VC_LINK) /OUT:$@ $(LINKFLAGS) $(OBJS) $(PKWARE_OBJS) diablo.res DiabloUI/diabloui.lib 3rdParty/Storm/storm.lib user32.lib gdi32.lib advapi32.lib shell32.lib version.lib -DIABLOUI_SRC=DiabloUI/diabloui.cpp -DIABLOUI_OBJS=$(DIABLOUI_SRC:.cpp=.obj) +DiabloUI/diabloui.lib: + make -C DiabloUI -f MakefileVC -Diablo.exe: main_files $(PKWARE_OBJS) diablo.res DiabloUI/diabloui.lib 3rdParty/Storm/Source/storm.lib - $(VC_LINK) /OUT:$@ $(LINKFLAGS) $(OBJS) $(PKWARE_OBJS) diablo.res DiabloUI/diabloui.lib 3rdParty/Storm/Source/storm.lib user32.lib gdi32.lib advapi32.lib shell32.lib version.lib - -DiabloUI/diabloui.lib: $(DIABLOUI_OBJS) 3rdParty/Storm/Source/storm.lib - $(CL) $^ /link /LINK50COMPAT /nologo /dll /subsystem:windows /machine:I386 /LIBPATH:$(VC6_LIB_DIR) DiabloUI/diabloui.res advapi32.lib gdi32.lib shell32.lib user32.lib version.lib 3rdParty/Storm/Source/storm.lib /def:"DiabloUI/diabloui.def" /out:DiabloUI/diabloui.dll - -3rdParty/Storm/Source/storm.lib: $(STORM_OBJS) - $(CL) $^ /link /LINK50COMPAT /nologo /dll /subsystem:windows /machine:I386 /LIBPATH:$(VC6_LIB_DIR) /def:"3rdParty/Storm/Source/storm.def" /out:3rdParty/Storm/Source/storm.dll +3rdParty/Storm/storm.lib: + make -C 3rdParty/Storm -f MakefileVC # compiles all main source files with once compiler call main_files: @@ -86,6 +80,6 @@ diablo.res: Diablo.rc $(RC) /i $(VC6_INC_DIR) /i $(VC6_DIR)/MFC/Include /l 0x409 /fo $@ $< clean: - @$(RM) -v $(OBJS) $(PKWARE_OBJS) $(STORM_OBJS) $(DIABLOUI_OBJS) DiabloUI/diabloui.{exp,lib,dll} 3rdParty/Storm/Source/storm.{exp,lib,dll} + @$(RM) -v $(OBJS) $(PKWARE_OBJS) .PHONY: clean all