- BORLAND/: Borland C++ 4.52 (chosen over 4.5 by byte-match: CODE/RP/CW32.LIB
is identical to 4.52's install lib). BCC32/TLINK32/TLIB/MAKE run natively on
Win11; CODE/BT/OPT.MAK is the shipped BTL4OPT.EXE's exact flag recipe
(extender = Borland PowerPack DPMI32, not Phar Lap TNT).
- restoration/source410/: the literal 1995-form reconstruction of the missing
BT game source (never mixed into CODE/). Round 1-3 state:
* 6 of 10 surviving original TUs COMPILE CLEAN under the period toolchain
(BTMSSN, BTCNSL, BTSCNRL, BTTEAM, BTL4MODE, BTL4ARND) - first builds
since 1996.
* BT_L4/BTL4APP.CPP pilot reconstruction: 12/12 functions, Fail() lands on
its binary-recorded line 400 exactly.
* BT/BTCNSL.HPP: console wire IDs recovered from the binary's ctors
(Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1];
TeamScore=12 flagged [T4]).
* MUNGA/: 8 engine-header backfills back-dated from the BT412 WinTesla tree
(VDATA numbering decomp-verified; AUDREND's OpenAL-era virtual removed -
the period compiler is the drift detector).
* Tooling: backdate.py (WinTesla->1995 header transform), compile410.sh
(per-TU verification sweep under authentic OPT.MAK flags).
* README: corrected roadmap - MECH.HPP is the capstone grown with the mech
TU reconstructions; BTREG.CPP green = the header-family milestone.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
240 lines
7.8 KiB
C++
240 lines
7.8 KiB
C++
//
|
|
//**************************************************************************
|
|
//
|
|
// OleDebug.h -- Some debugging utilities for getting symbolic output
|
|
// from the OLE2 error codes and enums
|
|
//
|
|
// Copyright (c) 1993,94 by Borland International, Inc. All rights reserved
|
|
//
|
|
//**************************************************************************
|
|
|
|
#ifndef _OLEDEBUG_H
|
|
#define _OLEDEBUG_H
|
|
|
|
#undef OLEDBG
|
|
// to enable the OLEDBG stuff, #define OLEDBG and add oledebug.obj in
|
|
// the makefile.
|
|
|
|
class IUnknownWatcher : public IUnknown
|
|
{
|
|
public:
|
|
|
|
IUnknownWatcher( IUnknown *Data, char *Name );
|
|
// IUnknown
|
|
virtual HRESULT _IFUNC QueryInterface(REFIID iid, void FAR* FAR* pif);
|
|
virtual ULONG _IFUNC AddRef();
|
|
virtual ULONG _IFUNC Release();
|
|
|
|
protected:
|
|
|
|
int nRef();
|
|
IUnknown *pUnk;
|
|
char Name[40];
|
|
};
|
|
|
|
class IMonikerWatcher : public IMoniker
|
|
{
|
|
public:
|
|
IMonikerWatcher( IMoniker *pMoniker, char *Name );
|
|
|
|
// *** IUnknown methods ***
|
|
virtual HRESULT _IFUNC QueryInterface(REFIID riid, LPVOID FAR* ppvObj);
|
|
virtual ULONG _IFUNC AddRef();
|
|
virtual ULONG _IFUNC Release();
|
|
|
|
// *** IPersist methods ***
|
|
virtual HRESULT _IFUNC GetClassID(LPCLSID lpClassID);
|
|
|
|
// *** IPersistStream methods ***
|
|
virtual HRESULT _IFUNC IsDirty();
|
|
virtual HRESULT _IFUNC Load(LPSTREAM pStm);
|
|
virtual HRESULT _IFUNC Save(LPSTREAM pStm, BOOL fClearDirty);
|
|
virtual HRESULT _IFUNC GetSizeMax(ULARGE_INTEGER FAR * pcbSize);
|
|
|
|
// *** IMoniker methods ***
|
|
virtual HRESULT _IFUNC BindToObject(LPBC pbc, LPMONIKER pmkToLeft,
|
|
REFIID riidResult, LPVOID FAR* ppvResult);
|
|
virtual HRESULT _IFUNC BindToStorage(LPBC pbc, LPMONIKER pmkToLeft,
|
|
REFIID riid, LPVOID FAR* ppvObj);
|
|
virtual HRESULT _IFUNC Reduce(LPBC pbc, DWORD dwReduceHowFar, LPMONIKER FAR*
|
|
ppmkToLeft, LPMONIKER FAR * ppmkReduced);
|
|
virtual HRESULT _IFUNC ComposeWith(LPMONIKER pmkRight, BOOL fOnlyIfNotGeneric,
|
|
LPMONIKER FAR* ppmkComposite);
|
|
virtual HRESULT _IFUNC Enum(BOOL fForward, LPENUMMONIKER FAR* ppenumMoniker);
|
|
virtual HRESULT _IFUNC IsEqual(LPMONIKER pmkOtherMoniker);
|
|
virtual HRESULT _IFUNC Hash(LPDWORD pdwHash);
|
|
virtual HRESULT _IFUNC IsRunning(LPBC pbc, LPMONIKER pmkToLeft, LPMONIKER
|
|
pmkNewlyRunning);
|
|
virtual HRESULT _IFUNC GetTimeOfLastChange(LPBC pbc, LPMONIKER pmkToLeft,
|
|
FILETIME FAR* pfiletime);
|
|
virtual HRESULT _IFUNC Inverse(LPMONIKER FAR* ppmk);
|
|
virtual HRESULT _IFUNC CommonPrefixWith(LPMONIKER pmkOther, LPMONIKER FAR*
|
|
ppmkPrefix);
|
|
virtual HRESULT _IFUNC RelativePathTo(LPMONIKER pmkOther, LPMONIKER FAR*
|
|
ppmkRelPath);
|
|
virtual HRESULT _IFUNC GetDisplayName(LPBC pbc, LPMONIKER pmkToLeft,
|
|
LPSTR FAR* lplpszDisplayName);
|
|
virtual HRESULT _IFUNC ParseDisplayName(LPBC pbc, LPMONIKER pmkToLeft,
|
|
LPSTR lpszDisplayName, ULONG FAR* pchEaten,
|
|
LPMONIKER FAR* ppmkOut);
|
|
virtual HRESULT _IFUNC IsSystemMoniker(LPDWORD pdwMksys);
|
|
|
|
protected:
|
|
|
|
IMoniker * pMoniker;
|
|
char Name[40];
|
|
};
|
|
|
|
class ReleaseWatcher : public IUnknown
|
|
{
|
|
public:
|
|
|
|
ReleaseWatcher( IUnknown *watched ) : Watched( watched ), nRef( 1 ){}
|
|
virtual HRESULT _IFUNC QueryInterface(REFIID, LPVOID FAR *);
|
|
virtual ULONG _IFUNC AddRef();
|
|
virtual ULONG _IFUNC Release();
|
|
IUnknown *Watched;
|
|
ULONG nRef;
|
|
};
|
|
|
|
#include <assert.h>
|
|
|
|
#ifdef OLEDBG /* put at end of class in order to not change member offsets */
|
|
|
|
class _ICLASS cDebug
|
|
{
|
|
protected:
|
|
|
|
int DebugMode;
|
|
char* DebugClass;
|
|
char* DebugFunc;
|
|
void DebugEnter(char * dc, char * df, LPOLESTR s);
|
|
SCODE DebugReturn(char * dc, char * df, SCODE);
|
|
HRESULT DebugReturn(char * dc, char * df, HRESULT);
|
|
BOOL DebugReturn(char * dc, char * df, BOOL);
|
|
ULONG DebugReturn(char * dc, char * df, LPOLESTR s, ULONG);
|
|
void DebugReturn(char * dc, char * df, REFIID, void *);
|
|
void DebugExit(char * dc, char * df);
|
|
HRESULT DebugHResult(LPOLESTR, HRESULT);
|
|
ULONG DebugRefCnt (LPOLESTR, ULONG);
|
|
void cdecl DebugPrintf(LPOLESTR, ...);
|
|
int SetDebugMode(int m){DebugMode = m; return 1;}
|
|
char * prepareBuf (char *);
|
|
void DebugPrint (REFIID riid);
|
|
void DebugPrint (LPOLESTR pS, const RECT FAR * pR);
|
|
void DebugPrint (LPOLESTR pS, const SIZEL FAR * pL);
|
|
void DebugPrint (LPOLESTR pS, BOOL f);
|
|
cDebug() : DebugMode (1) {}
|
|
};
|
|
|
|
struct cDebugEnumRecord
|
|
{
|
|
LPOLESTR pEnumS;
|
|
WORD eValue;
|
|
};
|
|
|
|
class _ICLASS cDebugEnum
|
|
{
|
|
cDebugEnumRecord * pEnumRecs;
|
|
WORD count;
|
|
LPOLESTR pEnumName;
|
|
static char enumBuf [200];
|
|
public:
|
|
cDebugEnum (LPOLESTR pN, cDebugEnumRecord *pR, WORD c) : pEnumName (pN), pEnumRecs (pR), count (c) {}
|
|
|
|
void Print (DWORD e);
|
|
|
|
LPOLESTR buf () { return enumBuf; }
|
|
};
|
|
|
|
extern cDebugEnum cOLERENDER;
|
|
extern cDebugEnum cOLEVERBATTRIB;
|
|
extern cDebugEnum cUSERCLASSTYPE;
|
|
extern cDebugEnum cOLEMISC;
|
|
extern cDebugEnum cOLECLOSE;
|
|
extern cDebugEnum cOLEGETMONIKER;
|
|
extern cDebugEnum cOLEWHICHMK;
|
|
extern cDebugEnum cBINDSPEED;
|
|
extern cDebugEnum cOLECONTF;
|
|
extern cDebugEnum cOLEUPDATE;
|
|
extern cDebugEnum cOLELINKBIND;
|
|
extern cDebugEnum cDVASPECT;
|
|
extern cDebugEnum cTYMED;
|
|
extern cDebugEnum cDATADIR;
|
|
extern cDebugEnum cADVF;
|
|
extern cDebugEnum cMEMCTX;
|
|
extern cDebugEnum cCLSCTX;
|
|
extern cDebugEnum cREGCLS;
|
|
extern cDebugEnum cMSHLFLAGS;
|
|
extern cDebugEnum cMSHCTX;
|
|
extern cDebugEnum cCALLTYPE;
|
|
extern cDebugEnum cSERVERCALL;
|
|
extern cDebugEnum cPENDINGTYPE;
|
|
extern cDebugEnum cPENDINGMSG;
|
|
extern cDebugEnum cBIND_FLAGS;
|
|
extern cDebugEnum cKSYS;
|
|
extern cDebugEnum cMKRREDUCE;
|
|
extern cDebugEnum cSTGC;
|
|
extern cDebugEnum cSTGTY;
|
|
extern cDebugEnum cSTREAM_SEEK;
|
|
extern cDebugEnum cLOCKTYPE;
|
|
extern cDebugEnum cSTGMOVE;
|
|
extern cDebugEnum cSTATFLAG;
|
|
extern cDebugEnum cOLEUIPASTEFLAG;
|
|
|
|
#else
|
|
class _ICLASS cDebug;
|
|
class _ICLASS cDebugEnum;
|
|
#endif
|
|
|
|
#ifdef OLEDBG
|
|
# define OLEIMP(m,a) HRESULT _IFUNC _export OLE_IMPLEMENTATION::m a { \
|
|
DebugClass=OLE_INTERFACE; DebugFunc=#m; DebugEnter(OLE_INTERFACE,#m,0);
|
|
# define OLEIMPRET(r,m,a) r _IFUNC OLE_IMPLEMENTATION::m a { \
|
|
DebugClass=OLE_INTERFACE; DebugFunc=#m; DebugEnter(OLE_INTERFACE,#m,0);
|
|
# define OLEENTER DebugEnter(OLE_INTERFACE, OLE_FUNC, NULL);
|
|
# define OLEENTERS(s) DebugEnter(OLE_INTERFACE, OLE_FUNC, s);
|
|
# define OLERET(s) return ResultFromScode (DebugReturn(OLE_INTERFACE, OLE_FUNC, s))
|
|
# define OLERES(r) return DebugReturn(OLE_INTERFACE, OLE_FUNC, r)
|
|
# define OLEREF(s, r) return DebugReturn(OLE_INTERFACE, OLE_FUNC, s, r)
|
|
# define OLEBRET(b) return DebugReturn(OLE_INTERFACE, OLE_FUNC, b)
|
|
# define OLEPRET(id,p) return DebugReturn(OLE_INTERFACE, OLE_FUNC, id, p),p
|
|
# define OLEEXIT DebugExit(OLE_INTERFACE, OLE_FUNC)
|
|
# define OLEIID(id) DebugPrint (id)
|
|
# define OLEHRES(s,r) DebugHResult (s, r)
|
|
# define OLEREFCNT(s,r) DebugRefCnt (s,r)
|
|
# define OLEPRINTF1(l) DebugPrintf(l)
|
|
# define OLEPRINTF2(l1,l2) DebugPrintf(l1,l2)
|
|
# define OLEPRINTF3(l1,l2,l3) DebugPrintf(l1,l2,l3)
|
|
# define OLEPRINTF4(l1,l2,l3,l4) DebugPrintf(l1,l2,l3,l4)
|
|
# define OLEPRINTF5(l1,l2,l3,l4,l5) DebugPrintf(l1,l2,l3,l4,l5)
|
|
# define OLEENUM(E,v) E.Print(v);DebugPrintf(E.buf())
|
|
#else
|
|
# define OLEIMP(m,a) HRESULT _IFUNC _export OLE_IMPLEMENTATION::m a {
|
|
# define OLEIMPRET(r,m,a) r _IFUNC OLE_IMPLEMENTATION::m a {
|
|
// # define OLEENTER
|
|
|
|
# define OLEENTER(s)
|
|
# define OLEPRINTF1(l)
|
|
# define OLEPRINTF2(l1,l2)
|
|
# define OLEPRINTF3(l1,l2,l3)
|
|
# define OLEPRINTF4(l1,l2,l3,l4)
|
|
# define OLEPRINTF5(l1,l2,l3,l4,l5)
|
|
# define OLEIID(id)
|
|
# define OLEHRES(s,r) (r)
|
|
# define OLERET(s) return ResultFromScode (s)
|
|
# define OLERES(r) return r
|
|
# define OLEREF(s, r) return r
|
|
# define OLEREFCNT(s,r) (r)
|
|
# define OLEEXIT
|
|
# define OLEBRET(b) return b
|
|
# define OLEPRET(id,p) return p
|
|
# define OLEENUM(E,v)
|
|
#endif
|
|
|
|
#define OLE_INTERFACE DebugClass
|
|
#define OLE_FUNC DebugFunc
|
|
|
|
#endif
|
|
|