Files
firestorm/Gameleap/code/mw4/Code/MW4/Ablenv.h
T
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

342 lines
6.4 KiB
C++

//***************************************************************************
//
// ENVIRON.H
//
//***************************************************************************
#ifndef ABLENV_H
#define ABLENV_H
#include <stdio.h>
#ifndef DABLENV_H
#include "dablenv.h"
#endif
#include "ablgen.h"
#ifndef ABLSYMT_H
#include "ablsymt.h"
#endif
#ifndef ABLEXEC_H
#include "ablexec.h"
#endif
#ifndef DABLDBUG_H
#include "dabldbug.h"
#endif
#ifndef DFILE_H
#include "dfile.h"
#endif
namespace ABL
{
//***************************************************************************
typedef struct _SourceFile
{
char fileName[MAXLEN_FILENAME];
unsigned char fileNumber;
FilePtr filePtr;
long lineNumber;
} SourceFile;
//---------------------------------------------------------------------------
#define MAX_USER_FILES 6
#define MAX_USER_FILE_LINES 50
#define MAX_USER_FILE_LINELEN 200
#if 0
class UserFile
{
public:
long handle;
bool inUse;
char fileName[MAXLEN_FILENAME];
Stuff::MemoryStream *stream;
long numLines;
long totalLines;
char lines[MAX_USER_FILE_LINES][MAX_USER_FILE_LINELEN];
static UserFile *files[MAX_USER_FILES];
public:
/*
void* operator new (size_t mySize);
void operator delete (void* us);
*/
void init (void)
{
handle = -1;
inUse = false;
fileName[0] = NULL;
stream = NULL;
numLines = 0;
totalLines = 0;
for (long i = 0; i < MAX_USER_FILE_LINES; i++)
lines[i][0] = NULL;
}
UserFile (void)
{
init();
}
void destroy (void);
~UserFile (void)
{
destroy();
}
void dump (void);
void close (void);
long open (Stuff::MemoryStream *stream);
void write (char* s);
static void setup (void);
static void cleanup (void);
static UserFile *getNewFile (void);
};
#endif
//---------------------------------------------------------------------------
#define MAX_ABLMODULE_NAME 25
#define MAX_SOURCE_FILES 256 // per module
#define MAX_LIBRARIES_USED 25 // per module
typedef struct
{
char name[128];
long size;
} VariableInfo;
typedef struct
{
char name[128];
long codeSegmentSize;
} RoutineInfo;
typedef struct
{
char name[128];
char fileName[128];
long numStaticVars;
long totalSizeStaticVars;
VariableInfo largestStaticVar;
long totalCodeSegmentSize;
long numRoutines;
RoutineInfo routineInfo[128];
} ModuleInfo;
typedef struct
{
char* fileName;
SymTableNodePtr moduleIdPtr;
long numSourceFiles;
char** sourceFiles;
long numLibrariesUsed;
ABLModulePtr* librariesUsed;
long numStaticVars;
long* sizeStaticVars;
long totalSizeStaticVars;
long numInstances;
} ModuleEntry;
typedef ModuleEntry* ModuleEntryPtr;
class ABLModule
{
private:
long id;
char name[MAX_ABLMODULE_NAME];
long handle;
StackItemPtr staticData;
StackItem returnVal;
bool initCalled;
WatchManagerPtr watchManager;
BreakPointManagerPtr breakPointManager;
SymTableNodePtr curState;
bool trace;
bool step;
bool traceEntry;
bool traceExit;
//static long numModules;
public:
// void* operator new (size_t mySize);
// void operator delete (void* us);
void init (void)
{
id = -1;
name[0] = NULL;
handle = -1;
staticData = NULL;
initCalled = false;
watchManager = NULL;
breakPointManager = NULL;
curState = NULL;
trace = false;
step = false;
traceEntry = false;
traceExit = false;
}
SymTableNodePtr GetCurState() const
{
return(curState);
}
ABLModule (void)
{
init();
}
reset (void);
long init (long moduleHandle);
void write (MemoryStream *stream);
void read (MemoryStream *stream);
long getId (void)
{
return(id);
}
void SwitchStates (const char *name);
long getHandle (void)
{
return(handle);
}
StackItemPtr getStaticData (void)
{
return(staticData);
}
void setInitCalled (bool called)
{
initCalled = called;
}
bool getInitCalled (void)
{
return(initCalled);
}
char* getName (void)
{
return(name);
}
void setName (char* _name);
WatchManagerPtr getWatchManager (void)
{
return(watchManager);
}
BreakPointManagerPtr getBreakPointManager (void)
{
return(breakPointManager);
}
void setTrace (bool _trace)
{
trace = _trace;
traceEntry = _trace;
traceExit = _trace;
}
bool getTrace (void)
{
return(trace);
}
void setStep (bool _step)
{
step = _step;
}
bool getStep (void)
{
return(step);
}
long execute (ABLParamPtr paramList = NULL);
long execute (ABLParamPtr moduleParamList, SymTableNodePtr functionIdPtr);
SymTableNodePtr findSymbol (char* symbolName, SymTableNodePtr curFunction = NULL, bool searchLibraries = false);
SymTableNodePtr findFunction (char* functionName, bool searchLibraries = false);
char* getSourceFile (long fileNumber);
char* getSourceDirectory (long fileNumber, char* directory);
void getInfo (ModuleInfo* moduleInfo);
float getReal (void)
{
return(returnVal.real);
}
long getInteger (void)
{
return(returnVal.integer);
}
long setStaticInteger (char* name, long value);
long getStaticInteger (char* name);
long setStaticReal (char* name, float value);
float getStaticReal (char* name);
long setStaticIntegerArray (char* name, long size, long* values);
long getStaticIntegerArray (char* name, long size, long* values);
long setStaticRealArray (char* name, long size, float* values);
long getStaticRealArray (char* name, long size, float* values);
void destroy (void);
~ABLModule (void)
{
destroy();
}
};
//*************************************************************************
void initModuleRegistry (long maxModules);
void destroyModuleRegistry (void);
void initLibraryRegistry (long maxLibraries);
void destroyLibraryRegistry (void);
//***************************************************************************
}
#endif