windows-nt/Source/XPSP1/NT/enduser/troubleshoot/control/cachegen.h
2020-09-26 16:20:57 +08:00

214 lines
4.6 KiB
C++

//
// MODULE: CACHEGEN.H
//
// PURPOSE: Cache Generator Header
//
// PROJECT: Generic Troubleshooter DLL for Microsoft AnswerPoint
//
// COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com
//
// AUTHOR: Roman Mach
//
// ORIGINAL DATE: 8/7/97
//
// NOTES:
// 1. >>> Data members in this file could sure use documentation! - JM
//
// Version Date By Comments
//--------------------------------------------------------------------
// V0.2 8/7/97 RM Local Version for Memphis
// V0.3 3/24/98 JM Local Version for NT5
//
#ifndef __CACHEGEN_H_
#define __CACHEGEN_H_ 1
typedef struct _GTS_CACHE_FILE_HEADER
{
unsigned char signature[8];
UINT crcdsc;
UINT crcself;
UINT count; // item count of node data (one item = a set node and rec node structure)
UINT netoffset;
unsigned char reserved[28];
} GTS_CACHE_FILE_HEADER;
// -- property data --
//
// property start block
typedef struct _GTS_CACHE_PROP_NETSTART_BLK
{
UINT netpropoffset;
UINT netpropcount;
UINT nodecountnetwork;
UINT nodecountfile;
} GTS_CACHE_PROP_NETSTART_BLK;
// node item offset block
typedef struct _GTS_CACHE_PROP_NODEOFF_BLK
{
UINT nodeid;
UINT nodeoffset;
} GTS_CACHE_PROP_NODEOFF_BLK;
// node item offset block
typedef struct _GTS_CACHE_PROP_NODESTART_BLK
{
UINT labelnode;
UINT nodestringcount;
} GTS_CACHE_PROP_NODESTART_BLK;
// node item offset block
typedef struct _GTS_CACHE_PROP_STR_BLK
{
UINT nameoffset;
UINT stringoffset;
} GTS_CACHE_PROP_STR_BLK;
#define G_SYMBOLIC_NAME "GSN"
#define G_FULL_NAME "GFN"
#define G_S0_NAME "GS0"
#define G_S1_NAME "GS1"
// node property support
/*
typedef struct _GTS_NODE_SUPPORT
{
fpos_t ctlposition;
fpos_t dataposition;
UINT nodeid;
ESTDLBL albl;
CString sGSymName;
CString sGFullName;
CString sGState0Name;
CString sGState1Name;
CString sHProbTxt;
CString sHNodeHd;
CArray<CString,CString> sHNodeTxt;
} GTS_NODE_SUPPORT;
*/
class GTS_NODE_ITEM : public CObject
{
public:
GTS_NODE_ITEM(CString sStringN) { sStringName = sStringN; };
CString sStringName;
CStringArray sStringArr;
fpos_t ctlposition;
fpos_t snameposition;
fpos_t sdataposition;
};
class GTS_NODE_SUPPORT : public CObject
{
public:
fpos_t ctlposition;
fpos_t dataposition;
UINT nodeid;
UINT albl;
CPtrList lData;
};
// -- recommendation data --
//
typedef struct _GTS_CACHE_NODE
{
UINT node; // may be more than one UINT if count > 1
UINT state; // may be more than one UINT if count > 1
} GTS_CACHE_NODE;
// reference structure for set node and rec node
typedef struct _GTS_CACHE_FILE_SETDATA
{
UINT count;
GTS_CACHE_NODE item[1]; // may be more than one UINT if count > 1
} GTS_CACHE_FILE_SETDATA;
// reference structure for rec node
typedef struct _GTS_CACHE_FILE_RECDATA
{
UINT count;
UINT item[1]; // may be more than one UINT if count > 1
} GTS_CACHE_FILE_RECDATA;
// -- node ordering structure
typedef struct _GTS_NODE_ORDER
{
UINT nodeid;
int depth;
} GTS_NODE_ORDER;
// cache item data
/*
typedef struct _BN_CACHE_ITEM {
UINT uNodeCount, uRecCount;
UINT *uName;
UINT *uValue;
UINT *uRec;
} BN_CACHE_ITEM;
*/
#define GTS_CACHE_SIG "TSCACH02"
#define STATE_UNKNOWN 102
#define MAX_SYM_NAME_BUF_LEN 500
class GTSCacheGenerator
{
friend class BCache;
public:
GTSCacheGenerator( BOOL bScanAll = FALSE, \
const char *szLogFile = NULL, \
const char *szBNTSLogFile = NULL);
~GTSCacheGenerator();
static bool TcharToChar(char szOut[], LPCTSTR szIn, int &OutLen);
BOOL ReadCacheFileHeader(CString &sCacheFilename, const CString& strCacheFileWithinCHM);
BOOL GetNextCacheEntryFromFile(BOOL &bErr, CBNCache *pCache);
BOOL FindNetworkProperty(LPCSTR szName, CString &sResult, int index = 0);
BOOL FindNodeProperty(UINT nodeid, LPCSTR szName, CString &sResult, int index = 0);
BOOL IsNodePresent(UINT nodeid);
int GetNodeCount();
BOOL GetNodeIDFromSymName(LPCTSTR szSymName, UINT &nodeid);
BOOL GetLabelOfNode(UINT nodeid, UINT &lbl);
protected:
BOOL NodeTraverse( FILE *fp, \
BNTS *bp, \
int depth, \
CArray<int,int> &newnodes, \
CArray<int,int> &newstates, \
int currnode, \
int currstate);
void UninstantiateAll(BNTS *bp);
void SetNodes(BNTS *bp, CArray<int,int> &nodes, CArray<int,int> &states);
void LogOut(TCHAR *szcFormat, ...);
BOOL GetNCEFF(BN_CACHE_ITEM *pCacheItem, CBNCache *pCache);
void SaveNetItem(CPtrList *nsp, BNTS *bp, FILE *fp, LPCSTR name);
protected:
BOOL m_bScanAll;
UINT m_nCount;
UINT m_nItemCount;
CArray<int,int> m_oldnodes;
const char *m_szBNTSLogFile;
FILE *m_fp;
fpos_t m_headposition;
UINT m_netstartoffset;
char *m_filedata;
GTS_NODE_ORDER *m_nodeorder;
GTS_CACHE_FILE_SETDATA *m_cachepos;
};
#endif