Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

299 lines
6.1 KiB
C++

//***************************************************************************
//
// ABLDBUG.H
//
//***************************************************************************
#ifndef ABLDBUG_H
#define ABLDBUG_H
#ifdef USE_IFACE
#ifndef AWINDOW_H
#include <awindow.h>
#endif
#endif
#ifndef DABLDBUG_H
#include "dabldbug.h"
#endif
#ifndef ABLENV_H
#include "ablenv.h"
#endif
namespace ABL
{
//***************************************************************************
typedef enum {
DEBUG_COMMAND_SET_MODULE,
DEBUG_COMMAND_TRACE,
DEBUG_COMMAND_STEP,
DEBUG_COMMAND_BREAKPOINT_SET,
DEBUG_COMMAND_BREAKPOINT_REMOVE,
DEBUG_COMMAND_WATCH_SET,
DEBUG_COMMAND_WATCH_REMOVE_ALL,
DEBUG_COMMAND_PRINT,
DEBUG_COMMAND_CONTINUE,
DEBUG_COMMAND_HELP,
DEBUG_COMMAND_INFO,
NUM_DEBUG_COMMANDS
} DebugCommandCode;
//***************************************************************************
typedef struct _Watch {
SymTableNodePtr idPtr;
bool store;
bool breakOnStore;
bool fetch;
bool breakOnFetch;
} Watch;
typedef Watch* WatchPtr;
class WatchManager {
protected:
long maxWatches;
long numWatches;
WatchPtr watches;
public:
void* operator new (size_t mySize);
void operator delete (void* us);
void init (void) {
maxWatches = 0;
maxWatches = 0;
watches = NULL;
}
long init (long max);
void destroy (void);
WatchManager (void) {
init();
}
~WatchManager (void) {
destroy();
}
WatchPtr add (SymTableNodePtr idPtr);
long remove (SymTableNodePtr idPtr);
long removeAll (void);
long setStore (SymTableNodePtr idPtr, bool state, bool breakToDebug = false);
long setFetch (SymTableNodePtr idPtr, bool state, bool breakToDebug = false);
bool getStore (SymTableNodePtr idPtr);
bool getFetch (SymTableNodePtr idPtr);
void print (void);
};
//---------------------------------------------------------------------------
class BreakPointManager {
protected:
long maxBreakPoints;
long numBreakPoints;
long* breakPoints;
public:
void* operator new (size_t mySize);
void operator delete (void* us);
void init (void) {
maxBreakPoints = 0;
numBreakPoints = 0;
breakPoints = NULL;
}
long init (long max);
void destroy (void);
BreakPointManager (void) {
init();
}
~BreakPointManager (void) {
destroy();
}
long add (long lineNumber);
long remove (long lineNumber);
long removeAll (void);
bool isBreakPoint (long lineNumber);
void print (void);
};
//---------------------------------------------------------------------------
#define WATCH_STORE_OFF 1
#define WATCH_STORE_ON 2
#define WATCH_FETCH_OFF 4
#define WATCH_FETCH_ON 8
#define WATCH_BREAK 16
class Debugger {
protected:
ABLModulePtr module; // Current executing module
WatchManagerPtr watchManager; // Current executing watch manager
BreakPointManagerPtr breakPointManager; // Current executing breakpt manager
ABLModulePtr debugModule; // Current module being debugged
bool enabled;
bool debugCommand;
bool halt;
bool trace;
bool step;
bool traceEntry;
bool traceExit;
bool atbreakpoint;
static char message[512];
void (*printCallback)(char* s);
public:
void* operator new (size_t mySize);
void operator delete (void* us);
void init (void);
long init (void (*callback)(char* s), ABLModulePtr _module);
void destroy (void);
void setCallback (void (*callback)(char* s))
{
printCallback = callback;
}
Debugger (void) {
init();
}
~Debugger (void) {
destroy();
}
void enable (void) {
enabled = true;
}
void disable (void) {
enabled = false;
}
bool isEnabled (void) {
return(enabled);
}
long print (char* s);
void setModule (ABLModulePtr _module);
long setWatch (long states);
long addBreakPoint (void);
long removeBreakPoint (void);
void sprintStatement (char* dest);
void sprintLineNumber (char* dest);
void sprintDataValue (char* dest, StackItemPtr data, TypePtr dataType);
long sprintSimpleValue (char* dest, SymTableNodePtr symbol);
long sprintArrayValue (char* dest, SymTableNodePtr symbol, char* subscriptString);
long sprintValue (char* dest, char* exprString);
long traceStatementExecution (void);
long traceRoutineEntry (SymTableNodePtr idPtr);
long traceRoutineExit (SymTableNodePtr idPtr);
long traceDataStore (SymTableNodePtr id, TypePtr idType, StackItemPtr target, TypePtr targetType);
long traceDataFetch (SymTableNodePtr id, TypePtr idType, StackItemPtr data);
void showValue (void);
void assignVariable (void);
void displayModuleInstanceRegistry (void);
void processCommand (long commandId, char* strParam1, long numParam1, ABLModulePtr moduleParam1);
void debugMode (void);
void AddActualParam (SymTableNodePtr formalIdPtr,StackItemPtr tos);
void EndActualParams (void);
void StartActualParams (SymTableNodePtr idPtr);
ABLModulePtr getDebugModule (void) {
return(debugModule);
}
};
//---------------------------------------------------------------------------
#ifdef USE_IFACE
class DebuggerWindow : public aTitleWindow {
public:
/*virtual*/ long init(long xPos, long yPos,long w, long h, char* t);
/*virtual*/ void destroy(void);
/*virtual*/ void resize(long w, long h);
};
//---------------------------------------------------------------------------
class ScrollingTextWindow : public aObject {
public:
long cWidth;
long cHeight;
public:
virtual void init (void);
virtual long init(long xPos, long yPos,long w, long h, char* t);
ScrollingTextWindow (void) {
init();
}
~ScrollingTextWindow (void) {
destroy();
}
virtual void handleEvent (aEvent* event);
virtual void draw (void);
virtual void resize (long w, long h);
virtual void print (char* s);
};
#endif
//***************************************************************************
}
#endif