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.
395 lines
14 KiB
395 lines
14 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Eeapi.h
|
|
|
|
Abstract:
|
|
|
|
This file contains all types and APIs that are defined by the
|
|
Expression Evaluator and are publicly accessible by other components.
|
|
|
|
Author:
|
|
|
|
David J. Gilman (davegi) 04-May-1992
|
|
|
|
Environment:
|
|
|
|
Win32, User Mode
|
|
|
|
Notes:
|
|
|
|
The master copy of this file resides in the CodeView 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
|
|
Sequoia
|
|
C/C++ expression evaluator
|
|
Cobol expression evaluator
|
|
QC/Windows
|
|
Pascal 2.0 expression evaluator
|
|
|
|
--*/
|
|
|
|
#if ! defined( _EEAPI_ )
|
|
#define _EEAPI_
|
|
|
|
|
|
// **********************************************************************
|
|
// * *
|
|
// * Initialization Structures *
|
|
// * *
|
|
// **********************************************************************
|
|
|
|
typedef struct {
|
|
void FAR * (LOADDS PASCAL *pMHlpvAlloc)( size_t );
|
|
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 *pSHGetCxtFromHexe)(HEXE, PCXT);
|
|
PCXT (LOADDS PASCAL *pSHSetCxt)(LPADDR, PCXT);
|
|
PCXT (LOADDS PASCAL *pSHSetCxtMod)(LPADDR, PCXT);
|
|
HSYM (LOADDS PASCAL *pSHFindNameInGlobal)(HSYM, PCXT, LPSSTR, SHFLAG, PFNCMP, PCXT);
|
|
HSYM (LOADDS PASCAL *pSHFindNameInContext)(HSYM, PCXT, LPSSTR, SHFLAG, PFNCMP, 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);
|
|
char FAR * (LOADDS PASCAL *pSHGetModNameFromHexe)(HEXE);
|
|
char FAR * (LOADDS PASCAL *pSHGetSymFName)(HEXE);
|
|
HEXE (LOADDS PASCAL *pSHGethExeFromName)(char FAR *);
|
|
HEXE (LOADDS PASCAL *pSHGethExeFromModuleName)(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 *);
|
|
|
|
|
|
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, LPSSTR, 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);
|
|
LPV (LOADDS PASCAL *pMHMemLock)(HDEP);
|
|
void (LOADDS PASCAL *pMHMemUnLock)(HDEP);
|
|
SHFLAG (LOADDS PASCAL *pMHIsMemLocked)(HDEP);
|
|
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);
|
|
UINT (LOADDS PASCAL *pDHSetupExecute)(LPHDEP);
|
|
UINT (LOADDS PASCAL *pDHCleanUpExecute)(HDEP);
|
|
UINT (LOADDS PASCAL *pDHStartExecute)(HDEP, LPADDR, BOOL, SHCALL);
|
|
char FAR *pin386mode;
|
|
char FAR *pis_assign;
|
|
void (LOADDS PASCAL *passert)(LPCH,LPCH,UINT);
|
|
void (LOADDS PASCAL *pquit)(UINT);
|
|
ushort FAR *pArrayDefault;
|
|
SHFLAG (LOADDS PASCAL *pSHCompareRE)(char FAR *, char FAR *, BOOL);
|
|
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);
|
|
BOOL (LOADDS PASCAL *pSYGetAddr)(PADDR, int);
|
|
DWORD (LOADDS PASCAL *pSYGetMemInfo)(LPMEMINFO);
|
|
BOOL (LOADDS PASCAL *pSHWantSymbols)(HEXE);
|
|
} 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 *, ...);
|
|
} 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 enum {
|
|
fmtAscii = 0,
|
|
fmtInt = 1,
|
|
fmtUInt = 2,
|
|
fmtFloat = 3,
|
|
fmtAddress = 4,
|
|
fmtUnicode = 5,
|
|
fmtBasis = 0x0f,
|
|
|
|
fmtOverRide = 0x2000, // override logic to force radix
|
|
fmtZeroPad = 0x4000
|
|
} FMTTYPE;
|
|
|
|
|
|
// Error return values
|
|
#define EENOERROR 0
|
|
#define EENOMEMORY 1
|
|
#define EEGENERAL 2
|
|
#define EEBADADDR 3
|
|
#define EEBADFORMAT 4
|
|
#define EEOVERRUN 5
|
|
#define EEOPTIONAL 6 // expression valid for optional form
|
|
#define EEDEFAULT 7 // argument was missing; default value was used
|
|
#define EECATASTROPHIC 0XFF
|
|
|
|
typedef enum {
|
|
EEHORIZONTAL,
|
|
EEVERTICAL,
|
|
EEBPADDRESS
|
|
} EEDSP; // Display format specifier
|
|
|
|
typedef enum {
|
|
EENOTEXP,
|
|
EEAGGREGATE,
|
|
EETYPE,
|
|
EEPOINTER,
|
|
EETYPENOTEXP
|
|
} EEPDTYP;
|
|
typedef EEPDTYP FAR *PEEPDTYP;
|
|
|
|
typedef enum {
|
|
EEFMT_32 = 0x01, /* Display a 32-bit offset */
|
|
EEFMT_SEG = 0x02, /* Display a segment */
|
|
EEFMT_LOWER = 0x04, /* Use lowercase letters */
|
|
EEFMT_REAL = 0x08 /* Real mode address */
|
|
} EEFMTFLGS;
|
|
|
|
typedef struct TML {
|
|
unsigned cTMListMax;
|
|
unsigned cTMListAct;
|
|
unsigned iTMError;
|
|
HDEP hTMList;
|
|
} TML;
|
|
typedef TML FAR *PTML;
|
|
|
|
#define TMLISTCNT 20 // number of entries in TM list
|
|
|
|
|
|
typedef struct RI {
|
|
ushort fSegType :1;
|
|
ushort fAddr :1;
|
|
ushort fValue :1;
|
|
ushort fSzBits :1;
|
|
ushort fSzBytes :1;
|
|
ushort fLvalue :1;
|
|
ushort Type;
|
|
} RI;
|
|
typedef RI FAR * PRI;
|
|
|
|
typedef struct TI {
|
|
RI 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 fFmtStr :1;
|
|
} u;
|
|
union {
|
|
ADDR AI;
|
|
ushort hReg; // This is really a CV_HREG_e
|
|
} u2;
|
|
ulong cbValue;
|
|
#ifdef i386
|
|
char Value[0];
|
|
#else
|
|
char Value[1];
|
|
#endif
|
|
} TI;
|
|
typedef TI FAR * PTI;
|
|
|
|
typedef struct {
|
|
HSYM hSym;
|
|
CXT CXT;
|
|
} HCS;
|
|
|
|
typedef struct {
|
|
CXT CXT;
|
|
ushort cHCS;
|
|
#ifdef i386
|
|
HCS rgHCS[0];
|
|
#else
|
|
HCS rgHCS[1];
|
|
#endif
|
|
} 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
|
|
#define HSYMR_nocase 0x8000 // case insensitive
|
|
#define HSYMR_allscopes \
|
|
HSYMR_lexical | \
|
|
HSYMR_function | \
|
|
HSYMR_class | \
|
|
HSYMR_module | \
|
|
HSYMR_global | \
|
|
HSYMR_exe | \
|
|
HSYMR_public
|
|
|
|
// 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 {
|
|
void (LOADDS PASCAL *pEEFreeStr)(EEHSTR);
|
|
EESTATUS (LOADDS PASCAL *pEEGetError)(PHTM, EESTATUS, PEEHSTR);
|
|
EESTATUS (LOADDS PASCAL *pEEParse)(char FAR *, EERADIX, SHFLAG, PHTM, uint FAR *);
|
|
EESTATUS (LOADDS PASCAL *pEEBindTM)(PHTM, PCXT, SHFLAG, SHFLAG,BOOL);
|
|
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, BOOL);
|
|
void (LOADDS PASCAL *pEEFreeTM)(PHTM);
|
|
EESTATUS (LOADDS PASCAL *pEEParseBP)(char FAR *, EERADIX, SHFLAG, PCXF, PTML, ulong, uint 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, uint FAR *, SHFLAG, uint);
|
|
EESTATUS (LOADDS PASCAL *pEEDereferenceTM)(PHTM, PHTM, uint FAR *, SHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEcParamTM)(PHTM, ushort FAR *, PSHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEGetParmTM)(PHTM, uint, PHTM, uint FAR *, SHFLAG, uint);
|
|
EESTATUS (LOADDS PASCAL *pEEGetTMFromHSYM)(HSYM, PCXT, PHTM, uint FAR *, SHFLAG);
|
|
EESTATUS (LOADDS PASCAL *pEEFormatAddress)(SHSEG, SHOFF, char FAR *, uint, uint);
|
|
EESTATUS (LOADDS PASCAL *pEEGetHSYMList)(PHSYML, PCXT, ushort, uchar FAR *, SHFLAG);
|
|
void (LOADDS PASCAL *pEEFreeHSYMList)(PHSYML);
|
|
EESTATUS (LOADDS PASCAL *pEEFormatAddr)(LPADDR, char FAR *, uint, uint);
|
|
EESTATUS (LOADDS PASCAL *pEEUnFormatAddr)(LPADDR, char FAR *);
|
|
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);
|
|
EESTATUS (LOADDS PASCAL *pEEFormatMemory)(char FAR *, uint, char FAR *, uint, FMTTYPE, uint);
|
|
EESTATUS (LOADDS PASCAL *pEEUnformatMemory)(uchar FAR *, char FAR *, uint, FMTTYPE, uint);
|
|
EESTATUS (LOADDS PASCAL *pEEFormatEnumerate)(uint, uint FAR *, uint FAR *, uint FAR *,
|
|
uint FAR *, uint FAR *, LPCH FAR *);
|
|
HTYPE (LOADDS PASCAL *pEEGetHtypeFromTM)(PHTM);
|
|
void (LOADDS PASCAL *pEESetSuffix)(char);
|
|
|
|
} 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 PASCAL FAR FNEEINIT(PCI, PEI);
|
|
typedef VOID (PASCAL LOADDS FAR * LPFNEEINIT)(PCI, PEI);
|
|
|
|
// This is the only EE function that's actually exported from the DLL
|
|
//FNEEINIT EEInitializeExpr;
|
|
|
|
#endif // _EEAPI_
|