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.
166 lines
4.6 KiB
166 lines
4.6 KiB
/* symref.h - include file for database
|
|
*/
|
|
|
|
#define HANDLE_BAD ((HANDLE)-1)
|
|
|
|
#define CBBLK 0x1000
|
|
#define BLKSHFT 12
|
|
#define BLKMSK 0x0FFF
|
|
|
|
#if CBBLK != (1 << BLKSHFT)
|
|
#error CBBLK and BLKSHFT dont agree
|
|
#endif
|
|
|
|
#define SRREV 2 /* current revision */
|
|
|
|
typedef struct {
|
|
long rev; /* revision of database format */
|
|
long symmaxhash; /* hash table size */
|
|
} SRHDR;
|
|
|
|
typedef SRHDR *PSRHDR;
|
|
|
|
#define OHDR OFIRSTALLOCOBJ
|
|
#define OHASHTAB (OHDR + sizeof (SRHDR))
|
|
|
|
#define OHASH(h) (OHASHTAB + (OFFSET)(h) * sizeof (OFFSET))
|
|
|
|
#define SYMMAXHASH 32731
|
|
|
|
#define LINELEN 256
|
|
|
|
#define CBMSG 256
|
|
#define CMSG (100*CBMSG)
|
|
|
|
typedef USHORT LINE, *PLINE;
|
|
|
|
#define BADLINE ((LINE)-1)
|
|
|
|
/* database structures. The osymNext and type fields must be in the
|
|
* same offset.
|
|
*/
|
|
|
|
typedef struct SH {
|
|
OFFSET oshNext; // offset of next symbol in hash bucket
|
|
ULONG type; // type of this symbol
|
|
ULONG dName; // delta from the symbol to the name
|
|
} SH, *PSH;
|
|
|
|
typedef struct NAME {
|
|
BYTE cch; // length of name
|
|
char sz[1]; // ASCIIZ text of name
|
|
} NAME, *PNAME;
|
|
|
|
#define PNAME(psh) ((PNAME) ((char *) (psh) + ((psh)->dName)))
|
|
#define CCH(psh) (PNAME(psh)->cch)
|
|
#define SZ(psh) (PNAME(psh)->sz)
|
|
|
|
typedef struct SYM {
|
|
SH sh; // symbol header
|
|
OFFSET oref; // offset of first reference to sym
|
|
NAME name;
|
|
} SYM, *PSYM;
|
|
|
|
typedef struct EXT {
|
|
SH sh; // symbol header
|
|
NAME name;
|
|
} EXT, *PEXT;
|
|
|
|
typedef struct NOI {
|
|
SH sh; // symbol header
|
|
NAME name;
|
|
} NOI, *PNOI;
|
|
|
|
typedef struct FIL {
|
|
SH sh; // symbol header
|
|
OFFSET oref; // offset of reference to symbol
|
|
OFFSET ompBlkLine; // vector of block-to-beginning line
|
|
FILETIME tmMod; // time of modification of file
|
|
long cblk; // number of blocks in file
|
|
NAME name;
|
|
} FIL, *PFIL;
|
|
|
|
typedef struct DIR {
|
|
SH sh; // symbol header
|
|
NAME name;
|
|
} DIR, *PDIR;
|
|
|
|
|
|
#define TY_SYM 0
|
|
#define TY_EXT 1
|
|
#define TY_FIL 2
|
|
#define TY_DIR 3
|
|
#define TY_NOI 4
|
|
|
|
#define TY_ALL 0xFFFFFFFF
|
|
|
|
#define CBSYM(n) (sizeof (SYM) + (n))
|
|
#define CBEXT(n) (sizeof (EXT) + (n))
|
|
#define CBFIL(n) (sizeof (FIL) + (n))
|
|
#define CBDIR(n) (sizeof (DIR) + (n))
|
|
#define CBNOI(n) (sizeof (NOI) + (n))
|
|
|
|
typedef unsigned long HASH, *PHASH;
|
|
|
|
typedef struct {
|
|
OFFSET orefNext; /* next link in reference chain */
|
|
OFFSET ofil; /* file reference is in */
|
|
OFFSET orefFileNext; /* next reference for file */
|
|
OFFSET osym; /* symbol reference is for */
|
|
BYTE bm[1]; /* bitmap of references */
|
|
} REFERENCE, *PREF;
|
|
|
|
#define CBREF(n) (sizeof (REFERENCE) - 1 + ((n)+7)/8)
|
|
|
|
#define MAPHEADER(o) ((PSRHDR)DBMap (pdbSym, (o)))
|
|
#define MAPHASH(o) ((OFFSET *) DBMap (pdbSym, (o)))
|
|
#define MAPSH(o) ((PSH) DBMap (pdbSym, (o)))
|
|
#define MAPSYM(o) ((PSYM) DBMap (pdbSym, (o)))
|
|
#define MAPEXT(o) ((PEXT) DBMap (pdbSym, (o)))
|
|
#define MAPFIL(o) ((PFIL) DBMap (pdbSym, (o)))
|
|
#define MAPDIR(o) ((PDIR) DBMap (pdbSym, (o)))
|
|
#define MAPNOI(o) ((PNOI) DBMap (pdbSym, (o)))
|
|
#define MAPREFERENCE(o) ((PREF) DBMap (pdbRef, (o)))
|
|
#define MAPVECTOR(o) ((PLINE) DBMap (pdbRef, (o)))
|
|
|
|
char * database;
|
|
BOOL fDirty;
|
|
|
|
PDB pdbSym; /* database for hash/symbols */
|
|
PDB pdbRef; /* database for references */
|
|
|
|
#define SR_BAD_REV (1+DB_MAX_ERR)
|
|
#define SR_CANT_CARVE (1+SR_BAD_REV)
|
|
|
|
#define FND_SYM 0x01 /* symbol found in find routine */
|
|
#define FND_ERR 0x02 /* error in sending */
|
|
|
|
typedef void (*PFNENUM) (HASH h, OFFSET osh, PSH psh, void * pv);
|
|
typedef BOOL (*PFNFIND) (HANDLE h, PSZ psz);
|
|
|
|
/* Handy error display macro
|
|
*/
|
|
|
|
#define NOTEERROR(x) printf (x " returned %x\n", GetLastError ())
|
|
|
|
/* Forward declarations
|
|
*/
|
|
int SRCreate (PSZ psz);
|
|
int SROpen (PSZ psz);
|
|
void SRClose (BOOL fCommit);
|
|
HASH hashFromSym (PSZ psz);
|
|
PSYM psymFind (PSZ psz, OFFSET *posym, BOOL fCreate);
|
|
PFIL pfilFind (PSZ psz, OFFSET *pofil, BOOL fCreate);
|
|
PEXT pextFind (PSZ psz, OFFSET *poext, BOOL fCreate);
|
|
PDIR pdirFind (PSZ psz, OFFSET *podir, BOOL fCreate);
|
|
PNOI pnoiFind (PSZ psz, OFFSET *ponoi, BOOL fCreate);
|
|
PLINE pvecAlloc (PFIL pfil, int cblk);
|
|
PREF prefFind (PSYM psym, OFFSET osym, PFIL pfil, OFFSET ofil, int cblk);
|
|
BOOL fSetRefSymBit (PSZ psz, int ibit, PFIL pfil, OFFSET ofil, int cblk);
|
|
void SRIndexInit (void);
|
|
long IndexFile (HANDLE h, PSZ psz);
|
|
void RemoveFile (PSZ psz);
|
|
void RemoveSym (PSZ psz);
|
|
void SRSymLocate (PFNFIND pfn, HANDLE h, PSZ apsz[]);
|
|
BOOL fSymFileFind (PFNFIND pfn, HANDLE h, PSZ psz, PREF pref);
|
|
void EnSym (PFNENUM pfnen, void * pv, ULONG typeSym);
|