mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
363 lines
13 KiB
363 lines
13 KiB
/** eeapi.h - Public API to the Expression Evaluator
|
|
*
|
|
* This file contains all types and APIs that are defined by
|
|
* the Expression Evaluator and are publicly accessible by
|
|
* other components.
|
|
*
|
|
* Before including this file, you must include cvtypes.h and shapi.h
|
|
*/
|
|
|
|
|
|
/*** The master copy of this file resides in the CVINC project.
|
|
* All Microsoft projects are required to use the master copy without
|
|
* modification. Modification of the master version or a copy
|
|
* without consultation with all parties concerned is extremely
|
|
* risky.
|
|
*
|
|
* The projects known to use this version (1.00.00) are:
|
|
*
|
|
* Codeview (uses version in CVINC project)
|
|
* Visual C++
|
|
* C/C++ expression evaluator (uses version in CVINC project)
|
|
* Cobol expression evaluator
|
|
* QC/Windows
|
|
* Pascal 2.0 expression evaluator
|
|
*/
|
|
|
|
#ifndef _VC_VER_INC
|
|
#include "..\include\vcver.h"
|
|
#endif
|
|
|
|
#ifndef EE_API
|
|
#define EE_API
|
|
|
|
#ifdef __cplusplus
|
|
#pragma warning(disable: 4200) // "non-standard extension: zero-sized array"
|
|
#endif
|
|
|
|
// **********************************************************************
|
|
// * *
|
|
// * Initialization Structures *
|
|
// * *
|
|
// **********************************************************************
|
|
|
|
typedef struct {
|
|
void FAR * (LOADDS PASCAL *pMHlpvAlloc)( UINT );
|
|
void (LOADDS PASCAL *pMHFreeLpv)(void FAR *);
|
|
HEXE (LOADDS PASCAL *pSHGetNextExe)(HEXE);
|
|
HEXE (LOADDS PASCAL *pSHHexeFromHmod)(HMOD);
|
|
HMOD (LOADDS PASCAL *pSHGetNextMod)(HEXE, HMOD);
|
|
PCXT (LOADDS PASCAL *pSHGetCxtFromHmod)(HMOD, PCXT);
|
|
PCXT (LOADDS PASCAL *pSHSetCxt)(LPADDR, PCXT);
|
|
PCXT (LOADDS PASCAL *pSHSetCxtMod)(LPADDR, PCXT);
|
|
HSYM (LOADDS PASCAL *pSHFindNameInGlobal)(HSYM, PCXT, HVOID, SHFLAG, PFNCMP, SHFLAG, PCXT);
|
|
HSYM (LOADDS PASCAL *pSHFindNameInContext)(HSYM, PCXT, HVOID, SHFLAG, PFNCMP, SHFLAG, PCXT);
|
|
HSYM (LOADDS PASCAL *pSHGoToParent)(PCXT, PCXT);
|
|
HSYM (LOADDS PASCAL *pSHHsymFromPcxt)(PCXT);
|
|
HSYM (LOADDS PASCAL *pSHNextHsym)(HMOD, HSYM);
|
|
PCXF (LOADDS PASCAL *pSHGetFuncCxf)(LPADDR, PCXF);
|
|
char FAR * (LOADDS PASCAL *pSHGetModName)(HMOD);
|
|
char FAR * (LOADDS PASCAL *pSHGetExeName)(HEXE);
|
|
HEXE (LOADDS PASCAL *pSHGethExeFromName)(char FAR *);
|
|
UOFF32 (LOADDS PASCAL *pSHGetNearestHsym)(LPADDR, HMOD, int, PHSYM);
|
|
SHFLAG (LOADDS PASCAL *pSHIsInProlog)(PCXT);
|
|
SHFLAG (LOADDS PASCAL *pSHIsAddrInCxt)(PCXT, LPADDR);
|
|
UINT (LOADDS PASCAL *pSHModelFromAddr)(PADDR,LPW,LPB,UOFFSET FAR *);
|
|
HSYM (LOADDS PASCAL *pSHFindSLink32)( PCXT );
|
|
|
|
BOOL (LOADDS PASCAL *pSLLineFromAddr) ( LPADDR, unsigned short FAR *, SHOFF FAR *, SHOFF FAR * );
|
|
BOOL (LOADDS PASCAL *pSLFLineToAddr) ( HSF, WORD, LPADDR, SHOFF FAR *, WORD FAR * );
|
|
char FAR * (LOADDS PASCAL *pSLNameFromHsf) ( HSF );
|
|
HMOD (LOADDS PASCAL *pSLHmodFromHsf) ( HEXE, HSF );
|
|
HSF (LOADDS PASCAL *pSLHsfFromPcxt) ( PCXT );
|
|
HSF (LOADDS PASCAL *pSLHsfFromFile) ( HMOD, char FAR * );
|
|
|
|
UOFF32 (LOADDS PASCAL *pPHGetNearestHsym)(LPADDR, HEXE, PHSYM);
|
|
HSYM (LOADDS PASCAL *pPHFindNameInPublics)(HSYM, HEXE, HVOID, SHFLAG, PFNCMP);
|
|
HTYPE (LOADDS PASCAL *pTHGetTypeFromIndex)(HMOD, THIDX);
|
|
HTYPE (LOADDS PASCAL *pTHGetNextType)(HMOD, HTYPE);
|
|
HDEP (LOADDS PASCAL *pMHMemAllocate)(UINT);
|
|
HDEP (LOADDS PASCAL *pMHMemReAlloc)(HDEP, UINT);
|
|
void (LOADDS PASCAL *pMHMemFree)(HDEP);
|
|
HVOID (LOADDS PASCAL *pMHMemLock)(HDEP);
|
|
void (LOADDS PASCAL *pMHMemUnLock)(HDEP);
|
|
SHFLAG (LOADDS PASCAL *pMHIsMemLocked)(HDEP);
|
|
HVOID (LOADDS PASCAL *pMHOmfLock)(HVOID);
|
|
void (LOADDS PASCAL *pMHOmfUnLock)(HVOID);
|
|
SHFLAG (LOADDS PASCAL *pDHExecProc)(LPADDR, SHCALL);
|
|
UINT (LOADDS PASCAL *pDHGetDebuggeeBytes)(ADDR, UINT, void FAR *);
|
|
UINT (LOADDS PASCAL *pDHPutDebuggeeBytes)(ADDR, UINT, void FAR *);
|
|
PSHREG (LOADDS PASCAL *pDHGetReg)(PSHREG, PCXT);
|
|
PSHREG (LOADDS PASCAL *pDHSetReg)(PSHREG, PCXT);
|
|
HDEP (LOADDS PASCAL *pDHSaveReg)(PCXT);
|
|
void (LOADDS PASCAL *pDHRestoreReg)(HDEP, PCXT);
|
|
char FAR *pin386mode;
|
|
char FAR *pis_assign;
|
|
void (LOADDS PASCAL *pquit)(UINT);
|
|
ushort FAR *pArrayDefault;
|
|
SHFLAG (LOADDS PASCAL *pSHCompareRE)(char FAR *, char FAR *);
|
|
SHFLAG (LOADDS PASCAL *pSHFixupAddr)(LPADDR);
|
|
SHFLAG (LOADDS PASCAL *pSHUnFixupAddr)(LPADDR);
|
|
SHFLAG (LOADDS PASCAL *pCVfnCmp)(HVOID, HVOID, char FAR *, SHFLAG);
|
|
SHFLAG (LOADDS PASCAL *pCVtdCmp)(HVOID, HVOID, char FAR *, SHFLAG);
|
|
SHFLAG (LOADDS PASCAL *pCVcsCmp)(HVOID, HVOID, char FAR *, SHFLAG);
|
|
UINT (LOADDS PASCAL *pCVAssertOut)(char FAR *, char FAR *, UINT);
|
|
SHFLAG (LOADDS PASCAL *pDHSetupExecute)(LPHIND);
|
|
SHFLAG (LOADDS PASCAL *pDHCleanUpExecute)(HIND);
|
|
SHFLAG (LOADDS PASCAL *pDHStartExecute)(HIND, LPADDR, BOOL, SHCALL);
|
|
HSYM (LOADDS PASCAL *pSHFindNameInTypes)( PCXT, LPSSTR, SHFLAG , PFNCMP , PCXT );
|
|
} CVF; // CodeView kernel Functions exported to the Expression Evaluator
|
|
typedef CVF FAR * PCVF;
|
|
|
|
typedef struct {
|
|
short (CDECL *pintLoadDS)();
|
|
char NEAR * (CDECL *pultoa)(ulong, char NEAR *, int);
|
|
char NEAR * (CDECL *pitoa)(int, char NEAR *, int);
|
|
char NEAR * (CDECL *pltoa)(long, char NEAR *, int);
|
|
int (CDECL *peprintf)(const char FAR *, char FAR *, char FAR *, int);
|
|
int (CDECL *psprintf)(char NEAR *, const char FAR *, ...);
|
|
FLOAT10 (CDECL *p_strtold)( const char NEAR *, char NEAR * NEAR *);
|
|
} CRF; // C Runtime functions exported to the Expression Evaluator
|
|
typedef CRF FAR * PCRF;
|
|
|
|
typedef struct CI {
|
|
char cbCI;
|
|
char Version;
|
|
CVF FAR * pStructCVAPI;
|
|
CRF FAR * pStructCRuntime;
|
|
} CI;
|
|
typedef CI FAR * PCI;
|
|
|
|
|
|
typedef struct HDR_TYPE {
|
|
ushort offname;
|
|
ushort lenname;
|
|
ushort offtrail;
|
|
} HDR_TYPE;
|
|
typedef HDR_TYPE FAR *PHDR_TYPE;
|
|
|
|
// **********************************************************************
|
|
// * *
|
|
// * the expr evaluator stuff *
|
|
// * *
|
|
// **********************************************************************
|
|
|
|
typedef HDEP HSYML; //* An hsym list
|
|
typedef HSYML FAR * PHSYML; //* A pointer to a hsym list
|
|
typedef uint EERADIX;
|
|
typedef EERADIX FAR * PEERADIX;
|
|
typedef uchar FAR * PEEFORMAT;
|
|
typedef ushort EESTATUS;
|
|
typedef HDEP EEHSTR;
|
|
typedef EEHSTR FAR * PEEHSTR;
|
|
typedef HDEP HTM;
|
|
typedef HTM FAR * PHTM;
|
|
typedef HDEP HTI;
|
|
typedef HTI FAR * PHTI;
|
|
typedef HDEP HBCIA; // Base class index array.
|
|
typedef HBCIA FAR * PHBCIA;
|
|
|
|
// Error return values
|
|
#define EENOERROR 0
|
|
#define EENOMEMORY 1
|
|
#define EEGENERAL 2
|
|
#define EEBADADDR 3
|
|
#define EECATASTROPHIC 0XFF
|
|
|
|
typedef enum {
|
|
EEHORIZONTAL,
|
|
EEVERTICAL,
|
|
EEBPADDRESS
|
|
} EEDSP; // Display format specifier
|
|
|
|
typedef enum {
|
|
ETIPRIMITIVE,
|
|
ETIARRAY,
|
|
ETIPOINTER,
|
|
ETICLASS,
|
|
ETIFUNCTION
|
|
} ETI;
|
|
typedef ETI FAR *PETI;
|
|
|
|
typedef enum {
|
|
EENOTEXP,
|
|
EEAGGREGATE,
|
|
EETYPE,
|
|
EEPOINTER,
|
|
EETYPENOTEXP,
|
|
EETYPEPTR
|
|
} EEPDTYP;
|
|
typedef EEPDTYP FAR *PEEPDTYP;
|
|
|
|
typedef struct TML {
|
|
unsigned cTMListMax;
|
|
unsigned cTMListAct;
|
|
unsigned iTMError;
|
|
HDEP hTMList;
|
|
} TML;
|
|
typedef TML FAR *PTML;
|
|
|
|
typedef struct RTMI {
|
|
ushort fSegType :1;
|
|
ushort fAddr :1;
|
|
ushort fValue :1;
|
|
ushort fSzBits :1;
|
|
ushort fSzBytes :1;
|
|
ushort fLvalue :1;
|
|
ushort fSynthChild :1;
|
|
ushort fLabel :1;
|
|
ushort Type;
|
|
} RTMI;
|
|
typedef RTMI FAR * PRI;
|
|
|
|
typedef struct TMI {
|
|
RTMI fResponse;
|
|
struct {
|
|
ushort SegType :4;
|
|
ushort fLvalue :1;
|
|
ushort fAddrInReg :1;
|
|
ushort fBPRel :1;
|
|
ushort fFunction :1;
|
|
ushort fLData :1; // True if expression references local data
|
|
ushort fGData :1; // True if expression references global data
|
|
ushort fSynthChild:1;
|
|
ushort fLabel:1;
|
|
};
|
|
union {
|
|
ADDR AI;
|
|
ushort hReg; // This is really a CV_HREG_e
|
|
};
|
|
ulong cbValue;
|
|
char Value[0];
|
|
} TMI;
|
|
typedef TMI FAR * PTI;
|
|
|
|
typedef struct {
|
|
HSYM hSym;
|
|
CXT CXT;
|
|
} HCS;
|
|
|
|
typedef struct {
|
|
CXT CXT;
|
|
ushort cHCS;
|
|
HCS rgHCS[0];
|
|
} CXTL;
|
|
|
|
typedef HDEP HCXTL;
|
|
typedef HCXTL FAR * PHCXTL;
|
|
typedef CXTL FAR * PCXTL;
|
|
|
|
// Structures for Get/Free HSYMList
|
|
|
|
// Search request / response flags for Get/Free HSYMList
|
|
|
|
#define HSYMR_lexical 0x0001 // lexical out to function scope
|
|
#define HSYMR_function 0x0002 // function scope
|
|
#define HSYMR_class 0x0004 // class scope
|
|
#define HSYMR_module 0x0008 // module scope
|
|
#define HSYMR_global 0x0010 // global symbol table scope
|
|
#define HSYMR_exe 0x0020 // all other module scope
|
|
#define HSYMR_public 0x0040 // public symbols
|
|
|
|
// structure describing HSYM list for a context
|
|
|
|
typedef struct HSL_LIST {
|
|
ushort request; // context that this block statisfies
|
|
struct {
|
|
ushort isused :1; // block contains data if true
|
|
ushort hascxt :1; // context packet has been stored
|
|
ushort complete :1; // block is complete if true
|
|
ushort isclass :1; // context is class if true
|
|
} status;
|
|
HSYM hThis; // handle of this pointer if class scope
|
|
ushort symbolcnt; // number of symbol handles in this block
|
|
CXT Cxt; // context for this block of symbols
|
|
HSYM hSym[]; // list of symbol handles
|
|
} HSL_LIST;
|
|
typedef HSL_LIST FAR *PHSL_LIST;
|
|
|
|
|
|
typedef struct HSL_HEAD {
|
|
ushort size; // number of bytes in buffer
|
|
ushort remaining; // remaining space in buffer
|
|
PHSL_LIST pHSLList; // pointer to current context list (EE internal)
|
|
struct {
|
|
ushort endsearch :1; // end of search reached if true
|
|
ushort fatal :1; // fatal error if true
|
|
} status;
|
|
ushort blockcnt; // number of CXT blocks in buffer
|
|
ushort symbolcnt; // number of symbol handles in buffer
|
|
HDEP restart; // handle of search restart information
|
|
} HSL_HEAD;
|
|
typedef HSL_HEAD FAR *PHSL_HEAD;
|
|
|
|
typedef struct HINDEX_ARRAY {
|
|
ushort count; // number of indices in this buffer.
|
|
long rgIndex[0];
|
|
} HINDEX_ARRAY;
|
|
typedef HINDEX_ARRAY *PHINDEX_ARRAY;
|
|
|
|
typedef struct {
|
|
void (LOADDS PASCAL *pEEFreeStr)(EEHSTR);
|
|
EESTATUS (LOADDS PASCAL *pEEGetError)(PHTM, EESTATUS, PEEHSTR);
|
|
EESTATUS (LOADDS PASCAL *pEEParse)(char FAR *, EERADIX, SHFLAG, PHTM, ushort FAR *);
|
|
EESTATUS (LOADDS PASCAL *pEEBindTM)(PHTM, PCXT, SHFLAG, SHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEvaluateTM)(PHTM, PFRAME, EEDSP);
|
|
EESTATUS (LOADDS PASCAL *pEEGetExprFromTM)(PHTM, PEERADIX, PEEHSTR, ushort FAR *);
|
|
EESTATUS (LOADDS PASCAL *pEEGetValueFromTM)(PHTM, EERADIX, PEEFORMAT, PEEHSTR);
|
|
EESTATUS (LOADDS PASCAL *pEEGetNameFromTM)(PHTM, PEEHSTR);
|
|
EESTATUS (LOADDS PASCAL *pEEGetTypeFromTM)(PHTM, EEHSTR, PEEHSTR, ulong);
|
|
EESTATUS (LOADDS PASCAL *pEEFormatCXTFromPCXT)(PCXT, PEEHSTR);
|
|
void (LOADDS PASCAL *pEEFreeTM)(PHTM);
|
|
EESTATUS (LOADDS PASCAL *pEEParseBP)(char FAR *, EERADIX, SHFLAG, PCXF, PTML, ulong, ushort FAR *, SHFLAG);
|
|
void (LOADDS PASCAL *pEEFreeTML)(PTML);
|
|
EESTATUS (LOADDS PASCAL *pEEInfoFromTM)(PHTM, PRI, PHTI);
|
|
void (LOADDS PASCAL *pEEFreeTI)(PHTI);
|
|
EESTATUS (LOADDS PASCAL *pEEGetCXTLFromTM)(PHTM, PHCXTL);
|
|
void (LOADDS PASCAL *pEEFreeCXTL)(PHCXTL);
|
|
EESTATUS (LOADDS PASCAL *pEEAssignTMToTM)(PHTM, PHTM);
|
|
EEPDTYP (LOADDS PASCAL *pEEIsExpandable)(PHTM);
|
|
SHFLAG (LOADDS PASCAL *pEEAreTypesEqual)(PHTM, PHTM);
|
|
EESTATUS (LOADDS PASCAL *pEEcChildrenTM)(PHTM, long FAR *, PSHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEGetChildTM)(PHTM, long, PHTM, ushort FAR *, EERADIX, SHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEDereferenceTM)(PHTM, PHTM, ushort FAR *, SHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEcParamTM)(PHTM, ushort FAR *, PSHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEGetParmTM)(PHTM, ushort, PHTM, ushort FAR *, SHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEGetTMFromHSYM)(HSYM, PCXT, PHTM, ushort FAR *, SHFLAG, SHFLAG);
|
|
void (LOADDS PASCAL *pEEFormatAddress)(PADDR, char FAR *);
|
|
EESTATUS (LOADDS PASCAL *pEEGetHSYMList)(PHSYML, PCXT, ushort, uchar FAR *, SHFLAG);
|
|
void (LOADDS PASCAL *pEEFreeHSYMList)(PHSYML);
|
|
EESTATUS (LOADDS PASCAL *pEEGetExtendedTypeInfo)(PHTM, PETI);
|
|
EESTATUS (LOADDS PASCAL *pEEGetAccessFromTM)(PHTM, PEEHSTR, ulong);
|
|
BOOL (LOADDS PASCAL *pEEEnableAutoClassCast)(BOOL);
|
|
void (LOADDS PASCAL *pEEInvalidateCache)(void);
|
|
EESTATUS (LOADDS PASCAL *pEEcSynthChildTM)(PHTM, long FAR *);
|
|
EESTATUS (LOADDS PASCAL *pEEGetBCIA)(PHTM, PHBCIA);
|
|
void (LOADDS PASCAL *pEEFreeBCIA)(PHBCIA);
|
|
SHFLAG (LOADDS PASCAL *pfnCmp)(HVOID, HVOID, char FAR *, SHFLAG);
|
|
SHFLAG (LOADDS PASCAL *ptdCmp)(HVOID, HVOID, char FAR *, SHFLAG);
|
|
SHFLAG (LOADDS PASCAL *pcsCmp)(HVOID, HVOID, char FAR *, SHFLAG);
|
|
} EXF;
|
|
typedef EXF FAR * PEXF;
|
|
|
|
typedef struct EI {
|
|
char cbEI;
|
|
char Version;
|
|
PEXF pStructExprAPI;
|
|
char Language;
|
|
char FAR *IdCharacters;
|
|
char FAR *EETitle;
|
|
char FAR *EESuffixes;
|
|
char FAR *Assign; // length prefixed assignment operator
|
|
} EI;
|
|
typedef EI FAR * PEI;
|
|
|
|
// FNEEINIT is the prototype for the EEInitializeExpr function
|
|
typedef VOID LOADDS EXPCALL FAR FNEEINIT(CI FAR *, EI FAR *);
|
|
typedef FNEEINIT FAR * PFNEEINIT;
|
|
typedef FNEEINIT FAR * LPFNEEINIT;
|
|
|
|
// This is the only EE function that's actually exported from the DLL
|
|
FNEEINIT EEInitializeExpr;
|
|
|
|
#endif // EE_API
|