274 lines
8.5 KiB
C
274 lines
8.5 KiB
C
/*****************************************************************************
|
|
* *
|
|
* DE.H *
|
|
* *
|
|
* Copyright (C) Microsoft Corporation 1990. *
|
|
* All Rights reserved. *
|
|
* *
|
|
******************************************************************************
|
|
* *
|
|
* Module Intent *
|
|
* *
|
|
* The Display Environment is the capsule of information tha *
|
|
* the Applet vollies to the Navigator, containing all info *
|
|
* needed for one topic window! There is expected to be one *
|
|
* DE per Help window. *
|
|
* *
|
|
*
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
* *
|
|
* Defines *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
|
|
#define FSearchModuleExists(x) ((BOOL)QDE_HRHFT(x))
|
|
|
|
#define CBMAXTITLE 127
|
|
#define CBMAXCOPYRIGHT 256
|
|
|
|
// Types of DEs
|
|
|
|
enum {
|
|
deNone, // 0
|
|
deTopic, // 1
|
|
deNote, // 2
|
|
dePrint, // 3
|
|
deCopy, // 4
|
|
deNSR, // 5
|
|
deAuto, // 6 // 4.0 -- auto-sizing topic
|
|
};
|
|
|
|
#define deUDH 0x80
|
|
#define deUDHTopic (deUDH | deTopic)
|
|
#define deUDHNote (deUDH | deNote )
|
|
#define deUDHPrint (deUDH | dePrint)
|
|
#define deUDHCopy (deUDH | deCopy )
|
|
|
|
#if defined(UDH)
|
|
#define fIsUDH(deType) ((BOOL)(deType & deUDH))
|
|
#define fIsUDHQde(qde) fIsUDH(qde->deType)
|
|
#else
|
|
#define fIsUDH(deType) UDH not defined
|
|
#define fIsUDHQde(qde) UDH not defined
|
|
#endif
|
|
|
|
|
|
/*****************************************************************************
|
|
* *
|
|
* Typedefs *
|
|
* *
|
|
*****************************************************************************/
|
|
|
|
// Will probably become a structure in the future
|
|
|
|
|
|
// Database (DB) Structure. Contains all the information that is specific to
|
|
// a given help file. May be referenced by multiple owners.
|
|
|
|
typedef struct db_tag {
|
|
struct db_tag *pdbNext; // link to known DB's
|
|
WORD cRef; // reference count
|
|
WORD wFileType; // Type of file
|
|
FM fm; // File name
|
|
#ifdef UDH
|
|
HDB hdb; // handle to database (UDH)
|
|
#endif
|
|
HFS hfs; // File system handle
|
|
HRGWSMAG hrgwsmag; // handle to array of window smag
|
|
HF hfTopic; // Handle to file holding FCs |TOPIC
|
|
HF hfMap; // Handle to Topic Map |TOMAP
|
|
HBT hbtContext; // Btree of context hash values
|
|
HFNTTABLE hFntTable;
|
|
BMK bmk; // Handle to Bookmark info.
|
|
HADS hads; // Handle to Annotation doc info
|
|
CTX ctxIndex; // Contents topic id (override)
|
|
ADDR addrContents; // REVIEW: alternative to hfMap
|
|
GH hphr; // Phrase decompression handle
|
|
HHDR hhdr; // helpfile header
|
|
GH hCitation; // handle to citation string
|
|
|
|
// REVIEW: could the following 2 be made allocated pointers, thereby removing
|
|
// the size restriction?
|
|
|
|
// Lynn -- if these don't align
|
|
|
|
CHAR rgchTitle[CBMAXTITLE + 1]; // because the following entry is byte aligned, need to force DWORD alignment (50+1+1)
|
|
CHAR rgchCopyright[CBMAXCOPYRIGHT + 1 +3]; // align this sucker!
|
|
|
|
#ifdef RAWHIDE
|
|
GH hrhft; // Handle to the full-text index information
|
|
#endif
|
|
FM hHelpOn; // Help On file if SetHelpOn() used.
|
|
HANDLE llMacros; // Linked list of macros.
|
|
#ifndef _X86_
|
|
int isdffTopic; // SDFF file ID of the Topic file
|
|
#endif
|
|
DWORD lTimestamp; // last mod time of fs
|
|
UINT lpJPhrase;
|
|
|
|
KEYWORD_LOCALE kwlcid;
|
|
LCID lcid;
|
|
PBYTE aCharSets;
|
|
} DB;
|
|
|
|
typedef DB *PDB;
|
|
typedef DB *QDB;
|
|
|
|
#define pdbNil ((PDB)0)
|
|
#define qdbNil ((QDB)0)
|
|
|
|
#define wFileTypeWin 0
|
|
#define wFileTypeUDH 1
|
|
|
|
// Macros for accessing PDB fields
|
|
|
|
#define PDB_ADDRCONTENTS(pdb) ((pdb)->addrContents)
|
|
#define PDB_BMK(pdb) ((pdb)->bmk)
|
|
#define PDB_CREF(pdb) ((pdb)->cRef)
|
|
#define PDB_CTXINDEX(pdb) ((pdb)->ctxIndex)
|
|
#define PDB_FM(pdb) ((pdb)->fm)
|
|
#define PDB_HHELPON(pdb) ((pdb)->hHelpOn)
|
|
#define PDB_HADS(pdb) ((pdb)->hads)
|
|
#define PDB_HBTCONTEXT(pdb) ((pdb)->hbtContext)
|
|
#define PDB_HCITATION(pdb) ((pdb)->hCitation)
|
|
#define PDB_HDB(pdb) ((pdb)->hdb)
|
|
#define PDB_HFMAP(pdb) ((pdb)->hfMap)
|
|
#define PDB_HFNTTABLE(pdb) ((pdb)->hFntTable)
|
|
#define PDB_HFS(pdb) ((pdb)->hfs)
|
|
#define PDB_HFTOPIC(pdb) ((pdb)->hfTopic)
|
|
#define PDB_HHDR(pdb) ((pdb)->hhdr)
|
|
#define PDB_HPHR(pdb) ((pdb)->hphr)
|
|
#define PDB_HRGWSMAG(pdb) ((pdb)->hrgwsmag)
|
|
#define PDB_HRHFT(pdb) ((pdb)->hrhft)
|
|
#define PDB_PDBNEXT(pdb) ((pdb)->pdbNext)
|
|
#define PDB_RGCHCOPYRIGHT(pdb) ((pdb)->rgchCopyright)
|
|
#define PDB_RGCHTITLE(pdb) ((pdb)->rgchTitle)
|
|
#define PDB_WFILETYPE(pdb) ((pdb)->wFileType)
|
|
#define PDB_LLMACROS(pdb) ((pdb)->llMacros)
|
|
#ifndef _X86_
|
|
// SDFF stuff
|
|
#define PDB_ISDFFTOPIC(pdb) ((pdb)->isdffTopic)
|
|
#endif
|
|
#define PDB_LTIMESTAMP(pdb) ((pdb)->lTimestamp)
|
|
#define PDB_LPJPHRASE(pdb) ((pdb)->lpJPhrase)
|
|
|
|
|
|
/* DE Structure */
|
|
typedef struct de_tag
|
|
{
|
|
int deType; // Type of DE (see nav.h)
|
|
HDC hdc; // Handle to 'Display Surface'
|
|
HWND hwnd; // Handle to window topic window
|
|
|
|
PDB pdb; // near pointer to database info (WIN)
|
|
|
|
RECT rct; // Client area rectangle.
|
|
|
|
// Info which the Applet will need
|
|
|
|
STATE prevstate; // Flags which have changed
|
|
STATE thisstate; // Current state of flags
|
|
GH htbmi; // Bitmap cache information handle
|
|
|
|
// Info for the Frame Manager
|
|
|
|
TOP top; // Information about the curr topic
|
|
|
|
int ifnt; // ifnt: The currently selected font
|
|
HSFNTINFO hSFntInfo; // handle to cached font info
|
|
|
|
HSS hss; // Handle to current Search Set
|
|
int wXAspectMul;
|
|
int wYAspectMul;
|
|
|
|
int fHorScrollVis; // Scrollbars visible?
|
|
int fVerScrollVis;
|
|
int dxVerScrollWidth; // Size of scrollbars
|
|
int dyHorScrollHeight;
|
|
|
|
COLORREF coFore; // Default colors
|
|
COLORREF coBack;
|
|
|
|
BOOL fHiliteHotspots;
|
|
DWORD FFlags; // Misc flags
|
|
|
|
/* Beginning of frame manager information. No one but the frame manager */
|
|
/* should ever look at any of this stuff. All of this is documented in */
|
|
/* frextern.c */
|
|
#if defined(_DEBUG)
|
|
int wLayoutMagic;
|
|
#endif
|
|
TLP tlp;
|
|
MLI mli;
|
|
int xScrolled;
|
|
int xScrollMax;
|
|
int xScrollMaxSoFar; // so far the max that's found.
|
|
MRD mrdFCM;
|
|
MRD mrdLSM;
|
|
MR mrFr;
|
|
MR mrTWS;
|
|
MRD mrdHot;
|
|
|
|
VA vaStartMark; // Fields to support direct text selection
|
|
VA vaEndMark;
|
|
int lichStartMark;
|
|
int lichEndMark;
|
|
BOOL fSelectionFlags; // Flag bits defined in nav\navpriv.h
|
|
|
|
int imhiSelected;
|
|
int imhiHit;
|
|
DWORD lHotID;
|
|
int wStyleDraw;
|
|
int wStyleTM;
|
|
TEXTMETRIC tm;
|
|
/* End of frame manager information. Don't put stuff in here. */
|
|
} DE /* *QDE */;
|
|
|
|
// Note: the generic pointer-to-de type QDE is "opaquely" defined in
|
|
// helpmisc.h since so many funcs pass it around.
|
|
|
|
// Macros for accessing QDE fields
|
|
//
|
|
#define QDE_HTBMI(qde) (qde->htbmi)
|
|
#define QDE_HSFNTINFO(qde) (qde->hSFntInfo)
|
|
#define QDE_PDB(qde) (qde->pdb)
|
|
#define QDE_PREVSTATE(qde) (qde->prevstate)
|
|
#define QDE_THISSTATE(qde) (qde->thisstate)
|
|
#define QDE_TOPIC(qde) (qde->deType == deTopic || qde->deType == deAuto || (qde->deType == deNote && !hwndNote))
|
|
#define HDE_TOPIC(hde) (QDE_TOPIC(QdeFromGh(hde)))
|
|
|
|
// Macros for accessing QDE fields that are in the PDB
|
|
|
|
#define QDE_ADDRCONTENTS(qde) PDB_ADDRCONTENTS(QDE_PDB(((QDE) qde)))
|
|
#define QDE_BMK(qde) PDB_BMK(QDE_PDB(((QDE) qde)))
|
|
#define QDE_CTXINDEX(qde) PDB_CTXINDEX(QDE_PDB(((QDE) qde)))
|
|
#define QDE_FM(qde) PDB_FM(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HHELPON(qde) PDB_HHELPON(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HADS(qde) PDB_HADS(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HBTCONTEXT(qde) PDB_HBTCONTEXT(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HCITATION(qde) PDB_HCITATION(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HDB(qde) PDB_HDB(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HFMAP(qde) PDB_HFMAP(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HFNTTABLE(qde) PDB_HFNTTABLE(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HFS(qde) PDB_HFS(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HFTOPIC(qde) PDB_HFTOPIC(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HHDR(qde) PDB_HHDR(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HPHR(qde) PDB_HPHR(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HRGWSMAG(qde) PDB_HRGWSMAG(QDE_PDB(((QDE) qde)))
|
|
#define QDE_HRHFT(qde) PDB_HRHFT(QDE_PDB(((QDE) qde)))
|
|
#define QDE_RGCHCOPYRIGHT(qde) PDB_RGCHCOPYRIGHT(QDE_PDB(((QDE) qde)))
|
|
#define QDE_RGCHTITLE(qde) PDB_RGCHTITLE(QDE_PDB(((QDE) qde)))
|
|
#define QDE_WFILETYPE(qde) PDB_WFILETYPE(QDE_PDB(((QDE) qde)))
|
|
#define QDE_LLMACROS(qde) PDB_LLMACROS(QDE_PDB(((QDE) qde)))
|
|
#ifndef _X86_
|
|
#define QDE_ISDFFTOPIC(qde) PDB_ISDFFTOPIC(QDE_PDB((qde)))
|
|
#endif
|
|
#define QDE_LTIMESTAMP(qde) PDB_LTIMESTAMP(QDE_PDB(qde))
|
|
|
|
// Because of PDB, this can't be in help.h
|
|
|
|
BOOL STDCALL FReadSystemFile(HFS hfs, PDB pdb, UINT *qwErr, UINT fTag);
|