mirror of
https://github.com/DxWnd/DxWnd.reloaded
synced 2024-12-30 09:25:35 +01:00
v2_02_36_src
Former-commit-id: 178cc79be8d4d9da34476bbe4f5e51f44d840c13
This commit is contained in:
parent
8b109aa710
commit
e0e9bcffd2
@ -100,19 +100,21 @@
|
||||
#define YUV2RGB 0x00040000 // Simulate YUV to RGB color conversion
|
||||
#define RGB2YUV 0x00080000 // Simulate RGB to YUV color conversion
|
||||
#define BUFFEREDIOFIX 0x00100000 // fix buffered IO incompatibilities between pre-Win98 and post-WinNT
|
||||
#define FILTERMESSAGES 0x00200000 // eliminates window-related messages that might be offending for a fullscreen program
|
||||
#define FILTERMESSAGES 0x00200000 // ignore offending messages that are typical of a window and are hot handled by a fullscreeen app
|
||||
#define PEEKALLMESSAGES 0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt
|
||||
|
||||
// logging Tflags DWORD:
|
||||
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general
|
||||
#define OUTDDRAWTRACE 0x00000002 // traces DxWnd directdraw screen handling
|
||||
#define OUTWINMESSAGES 0x00000004 // traces windows messages
|
||||
#define OUTCURSORTRACE 0x00000008 // traces windows messages
|
||||
#define OUTCURSORTRACE 0x00000008 // traces cursor positions & operations
|
||||
#define OUTPROXYTRACE 0x00000010 // warning: it also enables proxy functions !!!!
|
||||
#define DXPROXED 0x00000020 // hook DX proxy methods to log each call in original behaviour
|
||||
#define ASSERTDIALOG 0x00000040 // show assert messages in Dialog Box
|
||||
#define OUTIMPORTTABLE 0x00000080 // dump import table contents
|
||||
#define OUTDEBUG 0x00000100 // detailed debugging indormation
|
||||
#define OUTREGISTRY 0x00000200 // log registry operations
|
||||
#define TRACEHOOKS 0x00000400 // log hook operations
|
||||
|
||||
#define EMULATEFLAGS (EMULATEBUFFER | EMULATESURFACE | LOCKEDSURFACE)
|
||||
#define HANDLEFPS (SHOWFPS | SHOWFPSOVERLAY | LIMITFPS | SKIPFPS)
|
||||
@ -186,6 +188,7 @@ LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM);
|
||||
#define OutTraceC if(dxw.dwTFlags & OUTCURSORTRACE) OutTrace
|
||||
#define OutTraceB if(dxw.dwTFlags & OUTDEBUG) OutTrace
|
||||
#define OutTraceR if(dxw.dwTFlags & OUTREGISTRY) OutTrace
|
||||
#define OutTraceH if(dxw.dwTFlags & TRACEHOOKS) OutTrace
|
||||
#define OutTraceP OutTrace
|
||||
#define OutTraceE OutTrace
|
||||
|
||||
@ -194,6 +197,7 @@ LRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM);
|
||||
#define IsTraceD (dxw.dwTFlags & OUTDDRAWTRACE)
|
||||
#define IsTraceC (dxw.dwTFlags & OUTCURSORTRACE)
|
||||
#define IsTraceR (dxw.dwTFlags & OUTREGISTRY)
|
||||
#define IsTraceH (dxw.dwTFlags & TRACEHOOKS)
|
||||
#define IsTraceP (TRUE)
|
||||
#define IsTraceE (TRUE)
|
||||
#define IsDebug (dxw.dwTFlags & OUTDEBUG)
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3f5743861a1292a4618e1a2ba0010db02dbcd6cf7af54405d41963ffc14594c0
|
||||
size 407040
|
||||
oid sha256:87bb2172d84948aba5cd6af6e3b810430441b3935584ea3d46b3ef4c0bf1f8ed
|
||||
size 407552
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fdfc4f4a7a785e89e56cf5ea2ec95e1735e2ffe4a572a4036764839d377bf628
|
||||
size 524800
|
||||
oid sha256:6228efb8d349dfee02f1fc5b997651e2bb36d01120398c7743ab495286852aeb
|
||||
size 525312
|
||||
|
@ -1,52 +0,0 @@
|
||||
[window]
|
||||
posx=1435
|
||||
posy=210
|
||||
sizx=320
|
||||
sizy=420
|
||||
[target]
|
||||
title0=Rayman 2 Demo
|
||||
path0=D:\Games\Rayman2Demo\Rayman2Demo.exe
|
||||
module0=
|
||||
opengllib0=
|
||||
ver0=1
|
||||
coord0=0
|
||||
flag0=402653217
|
||||
flagg0=1207959552
|
||||
flagh0=2097172
|
||||
flagi0=0
|
||||
tflag0=64
|
||||
initx0=0
|
||||
inity0=0
|
||||
minx0=0
|
||||
miny0=0
|
||||
maxx0=0
|
||||
maxy0=0
|
||||
posx0=50
|
||||
posy0=50
|
||||
sizx0=800
|
||||
sizy0=600
|
||||
maxfps0=0
|
||||
initts0=0
|
||||
title1=Mirror's Edge
|
||||
path1=D:\Games\Mirror's Edge\Binaries\MirrorsEdge.exe
|
||||
module1=
|
||||
opengllib1=
|
||||
ver1=0
|
||||
coord1=0
|
||||
flag1=134217762
|
||||
flagg1=1207959552
|
||||
flagh1=2097172
|
||||
flagi1=0
|
||||
tflag1=512
|
||||
initx1=0
|
||||
inity1=0
|
||||
minx1=0
|
||||
miny1=0
|
||||
maxx1=0
|
||||
maxy1=0
|
||||
posx1=50
|
||||
posy1=50
|
||||
sizx1=800
|
||||
sizy1=600
|
||||
maxfps1=0
|
||||
initts1=6
|
@ -260,7 +260,11 @@ fixed BACKBUFFER surface attributes in direct (not emulated) mode: Rayman 2 play
|
||||
added FILTERMESSAGES flag ("filter offending messages") to eliminate some problems to games not developed to work windowized (Rayman 2, Mirror's Edge ...)
|
||||
fixed bug crashing the program when "keep aspect ratio" is selected with window size set to 0
|
||||
|
||||
|
||||
|
||||
v2.02.36
|
||||
hooked GetAttachedSurface to non-PRIMARY surface to track ZBUFFER attach to BACKBUFFER. Useless, so far...
|
||||
revised capability handling in CreateSurface
|
||||
hook trace is now activated from a separate log flag to reduce debug log size
|
||||
added "Peek all messages in queue" to avoid queue saturation and automatic task kill in Win7 (thank to P K help)
|
||||
fixed message handling in the case messages are passed to a routine handle
|
||||
|
||||
|
||||
|
101
dll/ddraw.cpp
101
dll/ddraw.cpp
@ -268,6 +268,7 @@ static void RefProbe(INTERFACE *obj, char *op, int line)
|
||||
OutTrace("### COM obj=%x op=%s refcount=%d at %d ###\n", obj, op, (*pReleaseS)((LPDIRECTDRAWSURFACE)obj), line);
|
||||
}
|
||||
|
||||
//#define REFPROVE_TEST // comment out to eliminate
|
||||
#ifdef REFPROVE_TEST
|
||||
#define REFPROBE(obj, op) RefProbe((INTERFACE *)(obj), op, __LINE__)
|
||||
#else
|
||||
@ -1287,6 +1288,22 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast, (void **)&pBltFast, "BltFast(S)");
|
||||
// IDirectDrawSurface::DeleteAttachedSurface
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface, (void **)&pDeleteAttachedSurface, "DeleteAttachedSurface(S)");
|
||||
// IDirectDrawSurface::GetAttachedSurface
|
||||
switch(dxversion) {
|
||||
case 1:
|
||||
case 2:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface1, (void **)&pGetAttachedSurface1, "GetAttachedSurface(S1)");
|
||||
break;
|
||||
case 3:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface3, (void **)&pGetAttachedSurface3, "GetAttachedSurface(S3)");
|
||||
break;
|
||||
case 4:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface4, (void **)&pGetAttachedSurface4, "GetAttachedSurface(S4)");
|
||||
break;
|
||||
case 7:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface7, (void **)&pGetAttachedSurface7, "GetAttachedSurface(S7)");
|
||||
break;
|
||||
}
|
||||
// IDirectDrawSurface::GetCaps
|
||||
switch(dxversion) {
|
||||
case 1:
|
||||
@ -1350,22 +1367,6 @@ static void HookDDSurfaceGeneric(LPDIRECTDRAWSURFACE *lplpdds, int dxversion)
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRectProxy, (void **)&pAddOverlayDirtyRect, "AddOverlayDirtyRect(S)");
|
||||
// IDirectDrawSurface::BltBatch
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 24), extBltBatchProxy, (void **)&pBltBatch, "BltBatch(S)");
|
||||
// IDirectDrawSurface::GetAttachedSurface
|
||||
switch(dxversion) {
|
||||
case 1:
|
||||
case 2:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface1Proxy, (void **)&pGetAttachedSurface1, "GetAttachedSurface(S1)");
|
||||
break;
|
||||
case 3:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface3Proxy, (void **)&pGetAttachedSurface3, "GetAttachedSurface(S3)");
|
||||
break;
|
||||
case 4:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface4Proxy, (void **)&pGetAttachedSurface4, "GetAttachedSurface(S4)");
|
||||
break;
|
||||
case 7:
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface7Proxy, (void **)&pGetAttachedSurface7, "GetAttachedSurface(S7)");
|
||||
break;
|
||||
}
|
||||
// IDirectDrawSurface::EnumAttachedSurfaces
|
||||
SetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces, (void **)&pEnumAttachedSurfaces, "EnumAttachedSurfaces(S)");
|
||||
// IDirectDrawSurface::EnumOverlayZOrders
|
||||
@ -1739,6 +1740,7 @@ HRESULT WINAPI extQueryInterfaceS(void *lpdds, REFIID riid, LPVOID *obp)
|
||||
}
|
||||
|
||||
if(lpdds == lpDDSBack) lpDDSBack = (LPDIRECTDRAWSURFACE)*obp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1947,20 +1949,20 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd)
|
||||
// Submarine titans (8BPP)
|
||||
OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat (1)\n");
|
||||
//lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
||||
lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
|
||||
lpddsd->ddsCaps.dwCaps = (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);
|
||||
return SetPixFmt(lpddsd);
|
||||
break;
|
||||
case DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY:
|
||||
// Duckman
|
||||
OutTrace("FixSurfaceCaps: SystemMemory OffScreen PixelFormat (2)\n");
|
||||
//lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
||||
//lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
|
||||
//lpddsd->ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);
|
||||
return SetPixFmt(lpddsd);
|
||||
break;
|
||||
case DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER:
|
||||
// the Sims
|
||||
OutTrace("FixSurfaceCaps: SystemMemory ZBuffer for the Sims\n");
|
||||
//lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER; identical ...
|
||||
//lpddsd->ddsCaps.dwCaps = (DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER); identical ...
|
||||
return "ZBUFFER";
|
||||
break;
|
||||
}
|
||||
@ -2005,7 +2007,7 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd)
|
||||
if(((lpddsd->dwFlags & (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) == (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT)) &&
|
||||
(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)){
|
||||
OutTraceB("FixSurfaceCaps: Experimental pixelformat for ZBUFFER case\n");
|
||||
lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; // Evany
|
||||
lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // Evany
|
||||
lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
|
||||
return "ZBUFFER";
|
||||
}
|
||||
@ -2021,9 +2023,9 @@ static char *FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd)
|
||||
}
|
||||
// adjust pixel format
|
||||
OutTraceB("FixSurfaceCaps: suppress DDSCAPS_VIDEOMEMORY case\n");
|
||||
lpddsd->dwFlags |= DDSD_CAPS | DDSD_PIXELFORMAT;
|
||||
lpddsd->dwFlags |= (DDSD_CAPS|DDSD_PIXELFORMAT);
|
||||
lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
||||
lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN;
|
||||
lpddsd->ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);
|
||||
return SetPixFmt(lpddsd);
|
||||
}
|
||||
|
||||
@ -2041,6 +2043,7 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
HRESULT res;
|
||||
|
||||
// emulated primary surface
|
||||
#if 0
|
||||
ClearSurfaceDesc((void *)&ddsd, dxversion);
|
||||
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN;
|
||||
@ -2051,6 +2054,17 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
ddsd.dwWidth = dxw.GetScreenWidth();
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
SetPixFmt((LPDDSURFACEDESC2)&ddsd);
|
||||
#else
|
||||
memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize);
|
||||
ddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE);
|
||||
ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT);
|
||||
ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM);
|
||||
// DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces
|
||||
ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);
|
||||
ddsd.dwWidth = dxw.GetScreenWidth();
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
SetPixFmt((LPDDSURFACEDESC2)&ddsd);
|
||||
#endif
|
||||
|
||||
// create Primary surface
|
||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__);
|
||||
@ -2134,7 +2148,7 @@ static HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
// genuine primary surface
|
||||
memcpy((void *)&ddsd, lpddsd, lpddsd->dwSize);
|
||||
ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT);
|
||||
ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP | DDSCAPS_COMPLEX);
|
||||
ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP|DDSCAPS_COMPLEX);
|
||||
|
||||
// create Primary surface
|
||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Primary]" , __LINE__);
|
||||
@ -2192,12 +2206,25 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS
|
||||
HRESULT res;
|
||||
|
||||
// create BackBuffer surface
|
||||
#if 0
|
||||
ClearSurfaceDesc((void *)&ddsd, dxversion);
|
||||
ddsd.dwFlags = DDSD_CAPS|DDSD_PIXELFORMAT|DDSD_HEIGHT|DDSD_WIDTH;
|
||||
ddsd.ddsCaps.dwCaps=DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN;
|
||||
ddsd.dwWidth = dxw.GetScreenWidth();
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
SetPixFmt(&ddsd);
|
||||
#else
|
||||
memcpy(&ddsd, lpddsd, lpddsd->dwSize);
|
||||
ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE);
|
||||
ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT);
|
||||
ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_BACKBUFFER|DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM);
|
||||
// DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces
|
||||
ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);
|
||||
ddsd.dwWidth = dxw.GetScreenWidth();
|
||||
ddsd.dwHeight = dxw.GetScreenHeight();
|
||||
SetPixFmt(&ddsd);
|
||||
#endif
|
||||
|
||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Backbuf]" , __LINE__);
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
if(res) {
|
||||
@ -2280,23 +2307,19 @@ static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf
|
||||
HRESULT res;
|
||||
|
||||
memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over ....
|
||||
if(ddsd.dwFlags & DDSD_CAPS){
|
||||
ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
||||
}
|
||||
else{
|
||||
ddsd.dwFlags |= DDSD_CAPS;
|
||||
ddsd.ddsCaps.dwCaps = 0;
|
||||
}
|
||||
ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
|
||||
//if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;
|
||||
FixSurfaceCaps(&ddsd);
|
||||
|
||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]" , __LINE__);
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu);
|
||||
if(res){
|
||||
// v2.1.81: retry on system memory may fix not only the DDERR_OUTOFVIDEOMEMORY
|
||||
// error, but the DDERR_INVALIDPIXELFORMAT (see "The Sims ???")
|
||||
if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) &&
|
||||
((res==DDERR_OUTOFVIDEOMEMORY) || (res==DDERR_INVALIDPIXELFORMAT))){
|
||||
OutTraceD("CreateSurface: CreateSurface ERROR err=%x(%s) at %d, retry in SYSTEMMEMORY\n",
|
||||
res, ExplainDDError(res), __LINE__);
|
||||
ddsd.dwFlags |= DDSD_CAPS;
|
||||
ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;
|
||||
ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
|
||||
DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic2]" , __LINE__);
|
||||
res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);
|
||||
}
|
||||
}
|
||||
if (res) {
|
||||
OutTraceE("CreateSurface: ERROR on Emu_Generic res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__);
|
||||
return res;
|
||||
@ -3931,7 +3954,7 @@ HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRA
|
||||
// note: C&C95 Gold Edition includes a check for the primary surface NOT having
|
||||
// DDSCAPS_SYSTEMMEMORY bit set
|
||||
|
||||
if(IsPrim) caps->dwCaps = dxw.dwPrimarySurfaceCaps;
|
||||
if(IsPrim) caps->dwCaps |= dxw.dwPrimarySurfaceCaps;
|
||||
// v2.1.83: add FLIP capability (Funtraks a.k.a. Ignition)
|
||||
// v2.2.26: add VIDEOMEMORY|LOCALVIDMEM capability (Alien Cabal 95 - partial fix)
|
||||
if(dxw.dwFlags1 & EMULATESURFACE) {
|
||||
@ -4101,7 +4124,7 @@ HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDR
|
||||
|
||||
//if(dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE;
|
||||
if(dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM;
|
||||
|
||||
|
||||
if(IsFixed) DumpSurfaceAttributes(lpddsd, "GetSurfaceDesc [FIXED]", __LINE__);
|
||||
return DD_OK;
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ static char *Flag4Names[32]={
|
||||
static char *TFlagNames[32]={
|
||||
"OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE",
|
||||
"OUTPROXYTRACE", "DXPROXED", "ASSERTDIALOG", "OUTIMPORTTABLE",
|
||||
"OUTDEBUG", "OUTREGISTRY", "", "",
|
||||
"OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "",
|
||||
"", "", "", "",
|
||||
"", "", "", "",
|
||||
"", "", "", "",
|
||||
@ -167,12 +167,12 @@ void HookDlls(HMODULE module)
|
||||
__try{
|
||||
pnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);
|
||||
if(!pnth) {
|
||||
OutTraceB("HookDlls: ERROR no pnth at %d\n", __LINE__);
|
||||
OutTraceH("HookDlls: ERROR no pnth at %d\n", __LINE__);
|
||||
return;
|
||||
}
|
||||
rva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
|
||||
if(!rva) {
|
||||
OutTraceB("HookDlls: ERROR no rva at %d\n", __LINE__);
|
||||
OutTraceH("HookDlls: ERROR no rva at %d\n", __LINE__);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -190,18 +190,18 @@ void HookDlls(HMODULE module)
|
||||
if(idx != -1) {
|
||||
DllBase=GetModuleHandle(impmodule);
|
||||
SysLibs[idx]=DllBase;
|
||||
OutTraceB("HookDlls: system module %s at %x\n", impmodule, DllBase);
|
||||
OutTraceH("HookDlls: system module %s at %x\n", impmodule, DllBase);
|
||||
continue;
|
||||
}
|
||||
|
||||
OutTraceB("HookDlls: ENTRY timestamp=%x module=%s forwarderchain=%x\n",
|
||||
OutTraceH("HookDlls: ENTRY timestamp=%x module=%s forwarderchain=%x\n",
|
||||
pidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain);
|
||||
if(pidesc->OriginalFirstThunk) {
|
||||
ptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk);
|
||||
}
|
||||
else{
|
||||
ptname = 0;
|
||||
OutTraceB("HookDlls: no PE OFTs - stripped module=%s\n", impmodule);
|
||||
OutTraceH("HookDlls: no PE OFTs - stripped module=%s\n", impmodule);
|
||||
}
|
||||
|
||||
DllBase=GetModuleHandle(impmodule);
|
||||
@ -283,7 +283,7 @@ void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname)
|
||||
static DWORD MinHook=0xFFFFFFFF;
|
||||
static DWORD MaxHook=0;
|
||||
|
||||
OutTraceB("SetHook: DEBUG target=%x, proc=%x name=%s\n", target, hookproc, hookname);
|
||||
OutTraceH("SetHook: DEBUG target=%x, proc=%x name=%s\n", target, hookproc, hookname);
|
||||
// keep track of hooked call range to avoid re-hooking of hooked addresses !!!
|
||||
if ((DWORD)hookproc < MinHook) MinHook=(DWORD)hookproc;
|
||||
if ((DWORD)hookproc > MaxHook) MaxHook=(DWORD)hookproc;
|
||||
@ -488,7 +488,7 @@ void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, voi
|
||||
pidesc ++;
|
||||
}
|
||||
if(!pidesc->FirstThunk) {
|
||||
OutTraceB("HookAPI: PE unreferenced dll=%s\n", dll);
|
||||
OutTraceH("HookAPI: PE unreferenced dll=%s\n", dll);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -496,7 +496,7 @@ void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, voi
|
||||
ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL;
|
||||
|
||||
if((apiproc==NULL) && (ptname==NULL)){
|
||||
if (IsDebug) OutTraceD("HookAPI: unreacheable api=%s dll=%s\n", apiname, dll);
|
||||
OutTraceH("HookAPI: unreacheable api=%s dll=%s\n", apiname, dll);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -531,7 +531,7 @@ void *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, voi
|
||||
OutTraceD("HookAPI: FlushInstructionCache error %d at %d\n", GetLastError(), __LINE__);
|
||||
return 0;
|
||||
}
|
||||
if(IsDebug) OutTrace("HookAPI hook=%s address=%x->%x\n", apiname, org, hookproc);
|
||||
OutTraceH("HookAPI hook=%s address=%x->%x\n", apiname, org, hookproc);
|
||||
}
|
||||
__except(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
@ -657,11 +657,6 @@ void AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)
|
||||
// fixing windows message handling procedure
|
||||
|
||||
pWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC);
|
||||
if (((DWORD)pWindowProc & 0xFFFF0000) == 0xFFFF0000){
|
||||
// don't hook pseudo-callbacks (v2.1.71: Commandos 2)
|
||||
OutTraceD("GetWindowLong: no valid WindowProc routine detected, hwnd=%x WindowProc=%x\n", hwnd, (DWORD)pWindowProc);
|
||||
}
|
||||
else
|
||||
if (pWindowProc == extWindowProc){
|
||||
// hooked already !!!
|
||||
OutTraceD("GetWindowLong: extWindowProc already in place, hwnd=%x\n", hwnd);
|
||||
@ -1090,7 +1085,6 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
||||
case VK_F6:
|
||||
case VK_F5:
|
||||
if (dxw.dwFlags2 & TIMESTRETCH) {
|
||||
char *sTSCaption[17]={"x16","x8","x4","x2","x1",":2",":4",":8",":16"};
|
||||
if (wparam == VK_F5 && (dxw.TimeShift < 8)) dxw.TimeShift++;
|
||||
if (wparam == VK_F6 && (dxw.TimeShift > -8)) dxw.TimeShift--;
|
||||
OutTrace("Time Stretch: shift=%d speed=%s\n", dxw.TimeShift, dxw.GetTSCaption());
|
||||
@ -1116,7 +1110,10 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
|
||||
// (*pWindowProc), extWindowProc, message, ExplainWinMessage(message), wparam, lparam);
|
||||
if(pWindowProc) {
|
||||
LRESULT ret;
|
||||
ret=(*pWindowProc)(hwnd, message, wparam, lparam);
|
||||
|
||||
// v2.02.36: use CallWindowProc that handles WinProc handles
|
||||
ret=(*pCallWindowProc)(pWindowProc, hwnd, message, wparam, lparam);
|
||||
|
||||
// save last NCHITTEST cursor position for use with KEEPASPECTRATIO scaling
|
||||
if(message==WM_NCHITTEST) LastCursorPos=ret;
|
||||
// v2.1.89: if FORCEWINRESIZE add standard processing for the missing WM_NC* messages
|
||||
|
@ -911,7 +911,7 @@ char *dxwCore::GetTSCaption(int shift)
|
||||
"x1",
|
||||
":1.5",":2",":3",":4",
|
||||
":6",":8",":12",":16"};
|
||||
if (shift<0 || shift>16) return "???";
|
||||
if (shift<(-8) || shift>(+8)) return "???";
|
||||
return sTSCaption[shift+8];
|
||||
}
|
||||
char *dxwCore::GetTSCaption(void)
|
||||
|
Binary file not shown.
@ -520,9 +520,13 @@ BOOL WINAPI extReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRea
|
||||
static char *IOBuffer=NULL;
|
||||
DWORD BytesRead;
|
||||
DWORD Cursor;
|
||||
//HANDLE hFileRead;
|
||||
|
||||
OutTrace("ReadFile: hFile=%x Buffer=%x BytesToRead=%d\n", hFile, lpBuffer, nNumberOfBytesToRead);
|
||||
|
||||
#define SECTOR_SIZE 4096
|
||||
//#define LEGACY_SIZE 1024
|
||||
#define LEGACY_SIZE 1024
|
||||
|
||||
if(!IOBuffer) { // initial allocation
|
||||
IOHeap=HeapCreate(0, 0, 0);
|
||||
@ -538,14 +542,18 @@ BOOL WINAPI extReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRea
|
||||
OutTrace("ReadFile: BUFFERED BEFORE BytesRequested=%d FileSize=%d where=%d\n",
|
||||
nNumberOfBytesToRead, FileLength, Where);
|
||||
if((Where+nNumberOfBytesToRead)<=FileLength)
|
||||
*lpNumberOfBytesRead=nNumberOfBytesToRead;
|
||||
*lpNumberOfBytesRead=nNumberOfBytesToRead;
|
||||
else
|
||||
*lpNumberOfBytesRead=FileLength-Where;
|
||||
if (*lpNumberOfBytesRead < 0) *lpNumberOfBytesRead=0;
|
||||
memcpy(lpBuffer, IOBuffer+Where, nNumberOfBytesToRead);
|
||||
memcpy((char *)lpBuffer, IOBuffer+Where, *lpNumberOfBytesRead);
|
||||
OutTrace("ReadFile: ");
|
||||
for(unsigned int i=0; i<*lpNumberOfBytesRead; i++) OutTrace("%02X,", *((unsigned char *)lpBuffer+i));
|
||||
OutTrace("\n");
|
||||
OutTrace("ReadFile: BUFFERED READ BytesRequested=%d BytesRead=%d where=%d\n",
|
||||
nNumberOfBytesToRead, *lpNumberOfBytesRead, Where);
|
||||
Where += (*lpNumberOfBytesRead);
|
||||
//Where = ((Where+(LEGACY_SIZE-1)) / LEGACY_SIZE) * LEGACY_SIZE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -561,17 +569,25 @@ BOOL WINAPI extReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRea
|
||||
OutTraceE("SetFilePointer ERROR: err=%d at %d\n", GetLastError(), __LINE__);
|
||||
return FALSE;
|
||||
}
|
||||
OutTrace("SetFilePointer: current pos=%d\n", Where);
|
||||
//hFileRead=ReOpenFile(hFile, 0, 0, 0);
|
||||
do {// try to read it all
|
||||
// when space is not enough, let's grow!
|
||||
if((DWORD)(IOBuffer+Cursor+SECTOR_SIZE) > (DWORD)IOHeapSize){
|
||||
IOHeapSize += 200*SECTOR_SIZE;
|
||||
if((DWORD)(Cursor+SECTOR_SIZE) > (DWORD)IOHeapSize){
|
||||
OutTrace("HeapReAlloc: about to add another chunk... current size=%d\n", IOHeapSize);
|
||||
IOHeapSize += (200*SECTOR_SIZE);
|
||||
IOBuffer=(char *)HeapReAlloc(IOHeap, 0, IOBuffer, IOHeapSize);
|
||||
if(IOBuffer==0) OutTraceE("HeapReAlloc ERROR: err=%d at %d\n", GetLastError(), __LINE__);
|
||||
}
|
||||
ret=(*pReadFile)(hFile, IOBuffer+Cursor, SECTOR_SIZE, &BytesRead, lpOverlapped); // read one block
|
||||
ret=(*pReadFile)(hFile, IOBuffer+Cursor, SECTOR_SIZE, &BytesRead, NULL); // read one block
|
||||
if(!ret)
|
||||
OutTrace("ReadFIle ERROR: err=%d at %d\n", GetLastError(), __LINE__);
|
||||
else
|
||||
OutTrace("ReadFIle: BytesRead=%d\n", BytesRead);
|
||||
Cursor+=BytesRead;
|
||||
if (ret && BytesRead == 0) ret=FALSE; // eof
|
||||
} while(ret);
|
||||
//CloseHandle(hFileRead);
|
||||
OutTrace("ReadFIle: BUFFERED FileSize=%d\n", Cursor);
|
||||
FileLength=Cursor;
|
||||
|
||||
@ -587,17 +603,22 @@ HANDLE WINAPI extCreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwS
|
||||
OutTrace("CreateFile: FileName=%s DesiredAccess=%x SharedMode=%x Disposition=%x Flags=%x\n",
|
||||
lpFileName, dwDesiredAccess, dwShareMode, dwCreationDisposition, dwFlagsAndAttributes);
|
||||
|
||||
//dwFlagsAndAttributes &= ~FILE_FLAG_NO_BUFFERING;
|
||||
|
||||
ret=(*pCreateFile)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
|
||||
if(ret && (ret != (HANDLE)INVALID_SET_FILE_POINTER))
|
||||
OutTrace("CreateFile: ret=%x\n", ret);
|
||||
else
|
||||
OutTraceE("CreateFile ERROR: err=%d\n", GetLastError());
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL WINAPI extCloseHandle(HANDLE hObject)
|
||||
{
|
||||
if (hObject==LastFile) LastFile=0; // invalidate cache
|
||||
if (hObject==LastFile) {
|
||||
LastFile=0; // invalidate cache
|
||||
OutTrace("CloseHandle: INVALIDATE CACHE hFile=%x\n", hObject);
|
||||
}
|
||||
|
||||
return (*pCloseHandle)(hObject);
|
||||
}
|
||||
@ -610,6 +631,7 @@ DWORD WINAPI extSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDista
|
||||
|
||||
// if cached file ...
|
||||
if(LastFile==hFile){
|
||||
int LastPos=Where;
|
||||
if(!lpDistanceToMoveHigh){
|
||||
OutTrace("SetFilePointer: buffered move\n");
|
||||
switch(dwMoveMethod){
|
||||
@ -617,7 +639,18 @@ DWORD WINAPI extSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDista
|
||||
case FILE_CURRENT: Where+=lDistanceToMove; break;
|
||||
case FILE_END: Where=FileLength-lDistanceToMove; break;
|
||||
}
|
||||
OutTrace("SetFilePointer: ret=%x\n", Where);
|
||||
//if(Where % LEGACY_SIZE){
|
||||
// Where=LastPos;
|
||||
// SetLastError(ERROR_INVALID_PARAMETER);
|
||||
// OutTrace("SetFilePointer: ret=INVALID_SET_FILE_POINTER pos=%d\n", Where);
|
||||
// return INVALID_SET_FILE_POINTER;
|
||||
//}
|
||||
|
||||
// Where = ((Where + LEGACY_SIZE-1) / LEGACY_SIZE) * LEGACY_SIZE;
|
||||
|
||||
Where = (Where / LEGACY_SIZE) * LEGACY_SIZE;
|
||||
|
||||
OutTrace("SetFilePointer: ret=0x%x(#%d)\n", Where, Where);
|
||||
return Where;
|
||||
}
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ FARPROC Remap_user32_ProcAddress(LPCSTR proc, HMODULE hModule)
|
||||
if (addr=RemapLibrary(proc, hModule, WinHooks)) return addr;
|
||||
if((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED))
|
||||
if (addr=RemapLibrary(proc, hModule, MouseHooks2)) return addr;
|
||||
if(FALSE)
|
||||
if(dxw.dwFlags3 & PEEKALLMESSAGES)
|
||||
if (addr=RemapLibrary(proc, hModule, PeekAllHooks)) return addr;
|
||||
return NULL;
|
||||
}
|
||||
@ -145,7 +145,7 @@ void HookUser32(HMODULE hModule)
|
||||
if(dxw.dwFlags1 & MODIFYMOUSE)HookLibrary(hModule, MouseHooks, libname);
|
||||
if (dxw.dwFlags1 & (PREVENTMAXIMIZE|FIXWINFRAME|LOCKWINPOS|LOCKWINSTYLE))HookLibrary(hModule, WinHooks, libname);
|
||||
if((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)) HookLibrary(hModule, MouseHooks2, libname);
|
||||
if(FALSE) HookLibrary(hModule, PeekAllHooks, libname);
|
||||
if(dxw.dwFlags3 & PEEKALLMESSAGES) HookLibrary(hModule, PeekAllHooks, libname);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -784,17 +784,9 @@ BOOL WINAPI extPeekAnyMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT w
|
||||
{
|
||||
BOOL res;
|
||||
|
||||
if(wMsgFilterMin || wMsgFilterMax){
|
||||
while (TRUE){
|
||||
res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, wRemoveMsg);
|
||||
if((lpMsg->message >= wMsgFilterMin) && (lpMsg->message <= wMsgFilterMax)) break;
|
||||
if(!wRemoveMsg)(*pPeekMessage)(lpMsg, hwnd, 0, 0, TRUE);
|
||||
}
|
||||
}
|
||||
else
|
||||
res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, wRemoveMsg);
|
||||
res=(*pPeekMessage)(lpMsg, hwnd, 0, 0, (wRemoveMsg & 0x000F));
|
||||
|
||||
OutTraceW("PeekMessage: lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n",
|
||||
OutTraceW("PeekMessage: ANY lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n",
|
||||
lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg,
|
||||
lpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF),
|
||||
lpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res);
|
||||
@ -805,8 +797,12 @@ BOOL WINAPI extPeekAnyMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT w
|
||||
BOOL WINAPI extPeekMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg)
|
||||
{
|
||||
BOOL res;
|
||||
UINT iRemoveMsg;
|
||||
|
||||
res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
|
||||
iRemoveMsg = wRemoveMsg;
|
||||
if(1) iRemoveMsg &= 0x000F; // Peek all messages
|
||||
|
||||
res=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, iRemoveMsg);
|
||||
|
||||
OutTraceW("PeekMessage: lpmsg=%x hwnd=%x filter=(%x-%x) remove=%x msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\n",
|
||||
lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg,
|
||||
@ -1427,10 +1423,10 @@ BOOL WINAPI extGetClipCursor(LPRECT lpRect)
|
||||
ret=(*pGetClipCursor)(lpRect);
|
||||
if(IsTraceD){
|
||||
if (lpRect)
|
||||
OutTrace("ClipCursor: PROXED rect=(%d,%d)-(%d,%d) ret=%d\n",
|
||||
OutTrace("GetClipCursor: PROXED rect=(%d,%d)-(%d,%d) ret=%d\n",
|
||||
lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, ret);
|
||||
else
|
||||
OutTrace("ClipCursor: PROXED rect=(NULL) ret=%d\n", ret);
|
||||
OutTrace("GetClipCursor: PROXED rect=(NULL) ret=%d\n", ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -1443,7 +1439,7 @@ BOOL WINAPI extGetClipCursor(LPRECT lpRect)
|
||||
lpRect->right = dxw.GetScreenWidth();
|
||||
lpRect->bottom = dxw.GetScreenHeight();
|
||||
}
|
||||
OutTraceD("ClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\n",
|
||||
OutTraceD("GetClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\n",
|
||||
lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, TRUE);
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,8 @@ void WhndStackPush(HWND hwnd, WNDPROC wndproc)
|
||||
{
|
||||
int StackIdx;
|
||||
// wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses ....
|
||||
if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return;
|
||||
// v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them!
|
||||
//if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return;
|
||||
//OutTraceD("DEBUG: WNDPROC STACK push hwnd=%x, wndproc=%x\n", hwnd, wndproc);
|
||||
// try update first...
|
||||
for(StackIdx=0; StackIdx<WhndTOS; StackIdx++)
|
||||
|
@ -170,6 +170,8 @@
|
||||
#define IDC_FIXD3DFRAME 1127
|
||||
#define IDC_BUFFEREDIOFIX 1128
|
||||
#define IDC_FILTERMESSAGES 1129
|
||||
#define IDC_PEEKALLMESSAGES 1130
|
||||
#define IDC_TRACEHOOKS 1131
|
||||
#define ID_MODIFY 32771
|
||||
#define ID_DELETE 32772
|
||||
#define ID_ADD 32773
|
||||
|
@ -44,6 +44,7 @@ void CTabLogs::DoDataExchange(CDataExchange* pDX)
|
||||
DDX_Check(pDX, IDC_OUTDXTRACE, cTarget->m_OutDXTrace);
|
||||
DDX_Check(pDX, IDC_IMPORTTABLE, cTarget->m_ImportTable);
|
||||
DDX_Check(pDX, IDC_OUTREGISTRY, cTarget->m_RegistryOp);
|
||||
DDX_Check(pDX, IDC_TRACEHOOKS, cTarget->m_TraceHooks);
|
||||
if(gbDebug){
|
||||
DDX_Check(pDX, IDC_DXPROXED, cTarget->m_DXProxed);
|
||||
DDX_Check(pDX, IDC_ASSERT, cTarget->m_AssertDialog);
|
||||
|
@ -37,6 +37,7 @@ void CTabProgram::DoDataExchange(CDataExchange* pDX)
|
||||
DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry);
|
||||
DDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly);
|
||||
DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages);
|
||||
DDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages);
|
||||
DDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin);
|
||||
DDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled);
|
||||
DDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner);
|
||||
|
@ -52,6 +52,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
|
||||
m_EmulateRegistry = FALSE; // default true !!
|
||||
m_FullScreenOnly = FALSE;
|
||||
m_FilterMessages = FALSE;
|
||||
m_PeekAllMessages = FALSE;
|
||||
m_NoBanner = FALSE;
|
||||
m_StartDebug = FALSE;
|
||||
m_FilePath = _T("");
|
||||
|
@ -39,6 +39,7 @@ public:
|
||||
BOOL m_AssertDialog;
|
||||
BOOL m_ImportTable;
|
||||
BOOL m_RegistryOp;
|
||||
BOOL m_TraceHooks;
|
||||
BOOL m_HandleDC;
|
||||
BOOL m_UnNotify;
|
||||
BOOL m_Windowize;
|
||||
@ -46,6 +47,7 @@ public:
|
||||
BOOL m_EmulateRegistry;
|
||||
BOOL m_FullScreenOnly;
|
||||
BOOL m_FilterMessages;
|
||||
BOOL m_PeekAllMessages;
|
||||
BOOL m_NoBanner;
|
||||
BOOL m_StartDebug;
|
||||
BOOL m_HookEnabled;
|
||||
|
@ -1,5 +0,0 @@
|
||||
[window]
|
||||
posx=1330
|
||||
posy=241
|
||||
sizx=320
|
||||
sizy=200
|
Binary file not shown.
@ -277,24 +277,26 @@ BEGIN
|
||||
CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,150,124,10
|
||||
CONTROL "Fullscreen only",IDC_FULLSCREENONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,150,114,10
|
||||
CONTROL "Filter offending messages",IDC_FILTERMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,162,114,10
|
||||
CONTROL "Peek all messages in queue",IDC_PEEKALLMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,162,114,10
|
||||
END
|
||||
|
||||
IDD_TAB_LOG DIALOGEX 0, 0, 300, 240
|
||||
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
GROUPBOX "dxwnd.log logs",IDC_STATIC,7,3,129,131
|
||||
GROUPBOX "dxwnd.log logs",IDC_STATIC,7,3,129,145
|
||||
CONTROL "Enable Trace",IDC_LOGENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,25,73,12
|
||||
CONTROL "DxWnd",IDC_OUTTRACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,73,12
|
||||
CONTROL "DirectX trace",IDC_OUTDXTRACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,58,73,12
|
||||
CONTROL "Win Events",IDC_OUTWINMESSAGES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,70,73,12
|
||||
CONTROL "Cursor/Mouse",IDC_CURSORTRACE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,82,73,12
|
||||
CONTROL "Import Table",IDC_IMPORTTABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,94,73,12
|
||||
GROUPBOX "debug mode only",IDC_STATIC,7,139,130,94
|
||||
CONTROL "Assert Dialog",IDC_ASSERT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,152,73,12
|
||||
CONTROL "ddraw Proxy",IDC_DXPROXED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,164,73,12
|
||||
GROUPBOX "debug mode only",IDC_STATIC,7,154,130,79
|
||||
CONTROL "Assert Dialog",IDC_ASSERT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,165,73,12
|
||||
CONTROL "ddraw Proxy",IDC_DXPROXED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,177,73,12
|
||||
CONTROL "Debug",IDC_OUTDEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,106,73,12
|
||||
CONTROL "Registry op.",IDC_OUTREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,118,73,12
|
||||
CONTROL "Hook op.",IDC_TRACEHOOKS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,130,73,12
|
||||
END
|
||||
|
||||
IDD_TAB_DIRECTX DIALOGEX 0, 0, 300, 240
|
||||
|
Binary file not shown.
@ -115,6 +115,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
||||
if(dlg->m_StartDebug) t->flags2 |= STARTDEBUG;
|
||||
if(dlg->m_FullScreenOnly) t->flags3 |= FULLSCREENONLY;
|
||||
if(dlg->m_FilterMessages) t->flags3 |= FILTERMESSAGES;
|
||||
if(dlg->m_PeekAllMessages) t->flags3 |= PEEKALLMESSAGES;
|
||||
|
||||
t->flags &= ~EMULATEFLAGS;
|
||||
switch(dlg->m_DxEmulationMode){
|
||||
@ -144,6 +145,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
|
||||
if(dlg->m_AssertDialog) t->tflags |= ASSERTDIALOG;
|
||||
if(dlg->m_ImportTable) t->tflags |= OUTIMPORTTABLE;
|
||||
if(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY;
|
||||
if(dlg->m_TraceHooks) t->tflags |= TRACEHOOKS;
|
||||
if(dlg->m_HandleDC) t->flags |= HANDLEDC;
|
||||
if(dlg->m_HandleExceptions) t->flags |= HANDLEEXCEPTIONS;
|
||||
if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES;
|
||||
@ -245,6 +247,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
||||
dlg->m_StartDebug = t->flags2 & STARTDEBUG ? 1 : 0;
|
||||
dlg->m_FullScreenOnly = t->flags3 & FULLSCREENONLY ? 1 : 0;
|
||||
dlg->m_FilterMessages = t->flags3 & FILTERMESSAGES ? 1 : 0;
|
||||
dlg->m_PeekAllMessages = t->flags3 & PEEKALLMESSAGES ? 1 : 0;
|
||||
|
||||
dlg->m_DxEmulationMode = 0;
|
||||
if(t->flags & EMULATEBUFFER) dlg->m_DxEmulationMode = 1;
|
||||
@ -268,6 +271,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
|
||||
dlg->m_AssertDialog = t->tflags & ASSERTDIALOG ? 1 : 0;
|
||||
dlg->m_ImportTable = t->tflags & OUTIMPORTTABLE ? 1 : 0;
|
||||
dlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0;
|
||||
dlg->m_TraceHooks = t->tflags & TRACEHOOKS ? 1 : 0;
|
||||
dlg->m_HandleDC = t->flags & HANDLEDC ? 1 : 0;
|
||||
dlg->m_HandleExceptions = t->flags & HANDLEEXCEPTIONS ? 1 : 0;
|
||||
dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user