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.
449 lines
12 KiB
449 lines
12 KiB
/************************************************************************
|
|
* *
|
|
* HCCOM.H *
|
|
* *
|
|
* Copyright (C) Microsoft Corporation 1993-1994 *
|
|
* All Rights reserved. *
|
|
* *
|
|
************************************************************************/
|
|
#ifndef HCCOM_H
|
|
#define HCCOM_H
|
|
|
|
#include <pshpack1.h>
|
|
|
|
// Header file common to hcw.exe, hcrtf.exe, and shed.exe
|
|
|
|
#define CH_OPEN_PAREN '('
|
|
#define CH_CLOSE_PAREN ')'
|
|
#define CH_COLON ':'
|
|
#define CH_SEMICOLON ';'
|
|
#define CH_START_QUOTE '`'
|
|
#define CH_END_QUOTE '\''
|
|
#define CH_QUOTE '"'
|
|
#define CH_BACKSLASH '\\'
|
|
#define CH_EQUAL '='
|
|
#define CH_SPACE ' '
|
|
#define CH_COMMA ','
|
|
#define CH_LEFT_BRACKET '['
|
|
#define CH_RIGHT_BRACKET ']'
|
|
#define CH_TAB '\t'
|
|
|
|
typedef const char* PCSTR;
|
|
|
|
enum FORAGE_CMD {
|
|
ForageNothing,
|
|
ForageRegions = 'a',
|
|
ForageStructs = 'b',
|
|
ForageTopics = 'c',
|
|
ForageText = 'd',
|
|
ForageBindings = 'e',
|
|
ForageHash = 'f',
|
|
ForageSystem = 'g',
|
|
ForageKLinkInfo = 'h',
|
|
ForageALinkInfo = 'i',
|
|
};
|
|
|
|
enum {
|
|
SECT_ALIAS,
|
|
SECT_BAGGAGE,
|
|
SECT_BITMAPS,
|
|
SECT_BUILDTAGS,
|
|
SECT_CONFIG,
|
|
SECT_FILES,
|
|
SECT_MAP,
|
|
SECT_OPTIONS,
|
|
SECT_WINDOWS,
|
|
|
|
// New to 4.0
|
|
|
|
SECT_CHARSET,
|
|
SECT_MACROS,
|
|
SECT_FONTS,
|
|
SECT_INCLUDE,
|
|
SECT_EXCLUDE,
|
|
|
|
SECT_MAX,
|
|
};
|
|
|
|
// The #defines are indices into ppszOptions[], the table of option names.
|
|
|
|
enum OPT { // must match ppszOptions in hccom.cpp
|
|
OPT_BMROOT,
|
|
OPT_BUILD,
|
|
OPT_COMPRESS,
|
|
OPT_ERRORLOG,
|
|
OPT_FORCEFONT,
|
|
OPT_ICON,
|
|
OPT_CONTENTS,
|
|
OPT_LANGUAGE,
|
|
OPT_MAPFONTSIZE,
|
|
OPT_MULTIKEY,
|
|
OPT_REPORT,
|
|
OPT_ROOT,
|
|
OPT_TITLE,
|
|
OPT_PHRASE,
|
|
OPT_WARNING,
|
|
OPT_COPYRIGHT,
|
|
OPT_CDROM,
|
|
OPT_CITATION,
|
|
|
|
// New for version 4.0
|
|
|
|
OPT_VERSION,
|
|
OPT_NOTE,
|
|
OPT_CNT,
|
|
OPT_HLP,
|
|
OPT_HCW,
|
|
OPT_LCID,
|
|
OPT_DBCS,
|
|
OPT_TMPDIR,
|
|
OPT_REPLACE,
|
|
OPT_CHARSET,
|
|
OPT_FTS,
|
|
OPT_DEFFONT,
|
|
OPT_PREFIX,
|
|
OPT_REVISIONS,
|
|
|
|
// New for 4.01 (except OPT_INDEX)
|
|
|
|
OPT_IGNORE,
|
|
|
|
OPT_INDEX, // insert new options before this
|
|
|
|
};
|
|
|
|
enum RC_TYPE {
|
|
RC_Success,
|
|
RC_Failure,
|
|
RC_Exists,
|
|
RC_NoExists,
|
|
RC_Invalid,
|
|
RC_BadHandle,
|
|
RC_BadArg,
|
|
RC_Unimplemented,
|
|
RC_OutOfMemory,
|
|
RC_NoPermission,
|
|
RC_BadVersion,
|
|
RC_DiskFull,
|
|
RC_Internal,
|
|
RC_NoFileHandles,
|
|
RC_FileChange,
|
|
RC_TooBig,
|
|
RC_UserQuit,
|
|
RC_EOF,
|
|
RC_SkipSection,
|
|
RC_CantWrite,
|
|
RC_DuplicateBitmap,
|
|
RC_ReadError,
|
|
RC_WriteError,
|
|
};
|
|
|
|
typedef struct {
|
|
DWORD fsCompareI;
|
|
DWORD fsCompare;
|
|
LANGID langid;
|
|
} KEYWORD_LOCALE;
|
|
|
|
typedef struct {
|
|
int cErrors;
|
|
int cWarnings;
|
|
int cNotes;
|
|
} ERROR_COUNT;
|
|
|
|
typedef struct {
|
|
PCSTR pszShort;
|
|
PCSTR pszExpanded;
|
|
} MACRO_PAIR;
|
|
extern const MACRO_PAIR macropair[];
|
|
|
|
#ifndef _CTMPFILE_INCLUDED
|
|
#include "ctmpfile.h"
|
|
#endif
|
|
|
|
typedef WORD BK; // btree block index
|
|
typedef void* HF; // handle to file
|
|
typedef HFILE FID;
|
|
typedef PSTR FM;
|
|
typedef DWORD KEY; // btree key
|
|
typedef UINT DIR; // Help directory flag
|
|
|
|
// Header of a btree file.
|
|
|
|
const int MAXFORMAT = 15; // length of format string
|
|
|
|
typedef struct _btree_header {
|
|
WORD wMagic;
|
|
BYTE bVersion;
|
|
BYTE bFlags; // r/o, open r/o, dirty, isdir
|
|
WORD cbBlock; // # bytes in a disk block
|
|
char rgchFormat[MAXFORMAT + 1];// key and record format string
|
|
BK bkFirst; // first leaf block in tree
|
|
BK bkLast; // last leaf block in tree
|
|
BK bkRoot; // root block
|
|
BK bkFree; // head of free block list
|
|
BK bkEOF; // next bk to use if free list empty
|
|
WORD cLevels; // # levels currently in tree
|
|
LONG lcEntries; // # keys in btree
|
|
} BTH;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD bk; // block number
|
|
LONG cKey; // which key in block (0 means first)
|
|
LONG iKey; // key's index db.rgbBlock (in bytes)
|
|
} BTPOS, *QBTPOS;
|
|
|
|
typedef struct _bthr {
|
|
BTH bth; // copy of header from disk
|
|
HF hf; // file handle of open btree file
|
|
int cbRecordSize; // 0 means variable size record
|
|
PBYTE pCache; // pointer to cache
|
|
// KT specific routines
|
|
int (STDCALL *SzCmp) (LPCSTR, LPCSTR);
|
|
BK (STDCALL *BkScanInternal) (BK, KEY, int, struct _bthr *, int*);
|
|
RC_TYPE (STDCALL *RcScanLeaf) (BK, KEY, int, struct _bthr *, void*, QBTPOS);
|
|
} BTH_RAM, *QBTHR, *HBT;
|
|
|
|
/*
|
|
* Header to file system. This lives at the beginning of the file that
|
|
* holds the file system.
|
|
*/
|
|
|
|
typedef struct {
|
|
WORD wMagic; // magic number identifying this as FS
|
|
BYTE bVersion; // version identification number
|
|
BYTE bFlags; // readonly, open r/o, dirty
|
|
LONG lifDirectory; // offset of directory block
|
|
LONG lifFirstFree; // offset of head of free list
|
|
LONG lifEof; // virtual end of file (allows fudge)
|
|
} FSH;
|
|
|
|
// open file system struct
|
|
|
|
typedef struct {
|
|
FSH fsh; // copy of header
|
|
QBTHR qbthr; // file system directory btree
|
|
FID fid; // header, files, and free list live here
|
|
FM fm; // FM for above fid lives here (so we can close it)
|
|
} FSHR, *QFSHR, *HFS;
|
|
|
|
typedef struct {
|
|
int lifBase; // file base
|
|
LONG lcbFile; // file size (not including header)
|
|
int lifCurrent; // file ptr
|
|
HFS hfs; // handle to file system
|
|
CTmpFile* pTmpFile; // temporary file in memory
|
|
DWORD bFlags; // dirty, noblock, file perm, open mode
|
|
char rgchKey[1]; // variable size rgch for file key
|
|
} RWFO, *QRWFO;
|
|
|
|
#define CH_RETURN_SEP '='
|
|
#define CH_SHORT_SIGNED 'i'
|
|
#define CH_SHORT_UNSIGNED 'u'
|
|
#define CH_NEAR_STRING 's'
|
|
#define CH_LONG_SIGNED 'I'
|
|
#define CH_LONG_UNSIGNED 'U'
|
|
#define CH_FAR_STRING 'S'
|
|
#define CH_VOID 'v'
|
|
#define CH_MACRO '!'
|
|
|
|
/*
|
|
When creating an FM (in other words, specifying the location of a new
|
|
or extant file), the caller must specify the directory in which that file
|
|
is located. There are a finite number of directories available to Help.
|
|
These are:
|
|
*/
|
|
|
|
#define DIR_NIL 0x0000 // No directory specified
|
|
#define DIR_CURRENT 0x0001 // Whatever the OS thinks the current dir. is
|
|
#define DIR_BOOKMARK 0x0002 // Wherever the Bookmark file lives
|
|
#define DIR_ANNOTATE 0x0004 // Wherever the Annotation file lives
|
|
#define DIR_TEMP 0x0008 // The directory temporary files are created in
|
|
|
|
#define DIR_PATH 0x0040 // Searches the $PATH (includes Current dir and System dirs)
|
|
#define DIR_INI 0x0080 // Directory from winhelp.ini
|
|
|
|
// Combine DIR_HELP with DIR_CURRENT to get the directory of the current
|
|
// help file.
|
|
|
|
#define DIR_CUR_HELP 0x8000 // Where-ever the current help file is located
|
|
|
|
#define DIR_FIRST DIR_CURRENT // The lowest bit that can be set
|
|
#define DIR_LAST DIR_INI // The highest bit that can be set
|
|
|
|
// The following are not implemented, but still used
|
|
|
|
#define DIR_SYSTEM 0x0020 // The Windows and Windows System directories
|
|
#define DIR_ALL 0xFFFF // Search all directories, in the above order
|
|
|
|
/*
|
|
To specify which parts of a full filename you want to extract, add
|
|
(logical or) the following part codes:
|
|
*/
|
|
|
|
#define PARTNONE 0x0000 // return nothing
|
|
#define PARTDRIVE 0x0001 // D: Vol
|
|
#define PARTDIR 0x0002 // dir\dir\ :dir:dir:
|
|
#define PARTBASE 0x0004 // basename filename
|
|
#define PARTEXT 0x0008 // ext <usu. nothing>
|
|
#define PARTALL 0xFFFF
|
|
|
|
#define HCW_FLAG_FILES (1 << 0) // [FILES] section has been processed
|
|
|
|
// Compression starts with bit 1 so that bit zero can specify full compression
|
|
// (backwards compatibility)
|
|
|
|
#define COMPRESS_MAXIMUM 0x0001 // Determine best possible compression
|
|
#define COMPRESS_TEXT_PHRASE 0x0002 // Phrase and Hall are mutually exclusive
|
|
#define COMPRESS_TEXT_HALL 0x0004
|
|
#define COMPRESS_TEXT_ZECK 0x0008
|
|
#define COMPRESS_BMP_RLE 0x0010
|
|
#define COMPRESS_BMP_ZECK 0x0020
|
|
|
|
#define COMPRESS_NONE 0
|
|
// #define COMPRESS_FULL (COMPRESS_TEXT_HALL | COMPRESS_TEXT_ZECK | COMPRESS_BMP_RLE | COMPRESS_BMP_ZECK)
|
|
|
|
#define COMPRESS_FULL (COMPRESS_TEXT_HALL | COMPRESS_TEXT_ZECK | COMPRESS_BMP_RLE | COMPRESS_BMP_ZECK)
|
|
|
|
// Must be identical to ..\winhlp32\inc\de.h
|
|
|
|
const int CBMAXTITLE = 127;
|
|
const int CBMAXCOPYRIGHT = 255;
|
|
|
|
/*
|
|
* Full Text Search flags
|
|
*/
|
|
|
|
#define FTS_ENABLED 0x00000001 // full text search is enabled
|
|
#define FTS_UNTITLED 0x00000002 // include untitled topics
|
|
#define FTS_PHRASE 0x00000004 // support phrase search
|
|
#define FTS_FEEDBACK 0x00000008 // phrase search feedback
|
|
#define FTS_SIMILARITY 0x00000010 // similarity search
|
|
|
|
/*
|
|
* These flags are set in wsmag.grf if the corresponding struct member is
|
|
* valid. If the flag is clear, the default value should be used.
|
|
*/
|
|
|
|
#define FWSMAG_CLASS 0x0001
|
|
#define FWSMAG_MEMBER 0x0002
|
|
#define FWSMAG_CAPTION 0x0004
|
|
#define FWSMAG_X 0x0008
|
|
#define FWSMAG_Y 0x0010
|
|
#define FWSMAG_DX 0x0020
|
|
#define FWSMAG_DY 0x0040
|
|
#define FWSMAG_MAXIMIZE 0x0080
|
|
#define FWSMAG_RGBMAIN 0x0100
|
|
#define FWSMAG_RGBNSR 0x0200
|
|
#define FWSMAG_ON_TOP 0x0400
|
|
|
|
// 4.0: These are new for 4.0 help files
|
|
|
|
#define FWSMAG_AUTO_SIZE 0x0800
|
|
#define FWSMAG_ABSOLUTE 0x1000 // position values are absolute
|
|
|
|
// 4.0: These values are new for 4.0, and extend the flags for wMax
|
|
|
|
#define FWSMAG_WMAX_MAXIMIZE 0x0001
|
|
#define FWSMAG_WMAX_DEF_POS 0x0002
|
|
#define FWSMAG_WMAX_NO_DEF_BTNS 0x0004
|
|
|
|
#define FWSMAG_WMAX_MENU 0x0100 // Menu button
|
|
#define FWSMAG_WMAX_BROWSE 0x0200 // Browse button
|
|
#define FWSMAG_WMAX_CONTENTS 0x0400 // Contents button
|
|
#define FWSMAG_WMAX_SEARCH 0x0800 // Index button
|
|
#define FWSMAG_WMAX_TOPICS 0x1000 // Topics button
|
|
#define FWSMAG_WMAX_PRINT 0x2000 // Print button
|
|
#define FWSMAG_WMAX_BACK 0x4000 // Back button
|
|
#define FWSMAG_WMAX_FIND 0x8000 // Find button (full-text search)
|
|
|
|
const int AUTHOR_WINDOW_ON_TOP = (1 << 0);
|
|
const int AUTHOR_AUTO_SIZE = (1 << 1);
|
|
const int AUTHOR_ABSOLUTE = (1 << 2);
|
|
const int AUTHOR_DEFAULT_POS = (1 << 5);
|
|
|
|
const int MAX_WINDOWCLASS = 10;
|
|
const int MAX_WINDOWCAPTION = 51;
|
|
|
|
const char FILESEPARATOR = '@';
|
|
const char WINDOWSEPARATOR = '>';
|
|
|
|
const int dxVirtScreen = 1024;
|
|
const int dyVirtScreen = 1024;
|
|
|
|
const int MAX_PASS_STRING = (32 * 1024); // maximum string to send to parent
|
|
|
|
const int WMP_MSG = (WM_USER + 900); // general message
|
|
const int WMP_SETHLP_FILE = (WM_USER + 901);
|
|
|
|
// wparam = hmem (handle to global memory containing the filename)
|
|
|
|
const int WMP_BUILD_COMPLETE = (WM_USER + 902); // build complete, hcrtf terminating
|
|
|
|
const int WMP_HWND_GRINDER = (WM_USER + 903); // sends grinder window handle
|
|
const int WMP_AUTO_MINIMIZE = (WM_USER + 904); // minimizes main window
|
|
const int WMP_AUTO_CMD_LINE = (WM_USER + 905); // minimizes main window
|
|
|
|
const int WMP_SET_TMPDIR = (WM_USER + 906);
|
|
const int WMP_STOP_GRINDING = (WM_USER + 907);
|
|
const int WMP_STOP_COMPILING = (WM_USER + 908);
|
|
const int WMP_ERROR_COUNT = (WM_USER + 909);
|
|
const int WMP_NO_ACTIVATE = (WM_USER + 910);
|
|
|
|
// wparam = position
|
|
|
|
// use UINT because hcw.exe is compiled STRICT and hcrtf is not.
|
|
|
|
extern HINSTANCE hinstApp;
|
|
extern HWND hwndParent;
|
|
extern HGLOBAL hmemSz;
|
|
extern char szParentString[512];
|
|
|
|
extern const char txtZeroLength[];
|
|
extern const char txtSharedMem[];
|
|
extern const char txtHCWClass[];
|
|
extern const char txtTmpName[];
|
|
|
|
void STDCALL ReplaceStrings(PSTR pszCur, PCSTR pszOrg, PCSTR pszNew);
|
|
void STDCALL TweakAddAccelerator(PSTR psz);
|
|
|
|
extern const PSTR ppszOptions[];
|
|
|
|
#if defined(_DEBUG)
|
|
#define DBWIN(psz) { OutputDebugString(psz); OutputDebugString("\n"); }
|
|
#else
|
|
#define DBWIN(psz)
|
|
#endif
|
|
|
|
extern const int MAX_OPT;
|
|
|
|
#define RECT_WIDTH(rc) (rc.right - rc.left)
|
|
#define RECT_HEIGHT(rc) (rc.bottom - rc.top)
|
|
#define PRECT_WIDTH(prc) (prc->right - prc->left)
|
|
#define PRECT_HEIGHT(prc) (prc->bottom - prc->top)
|
|
#define FGetUnsigned(sz, psz, pui) FGetNum((sz), (psz), (pui), FALSE)
|
|
|
|
#define ELEMENTS(array) (sizeof(array) / sizeof(array[0]))
|
|
|
|
void STDCALL ChangeDirectory(PCSTR pszFile);
|
|
void STDCALL DeleteTmpFiles(void);
|
|
BOOL STDCALL FGetNum(PCSTR pszIn, PSTR *ppszOut, void* pv, BOOL fSigned = TRUE);
|
|
FM STDCALL FmNew(PCSTR psz);
|
|
FM STDCALL FmNewSzDir(PCSTR szFile, DIR dir);
|
|
FM STDCALL FmNewTemp(void);
|
|
PSTR STDCALL GetArg(PSTR pszDest, PCSTR pszSrc);
|
|
PCSTR STDCALL GetTmpDirectory(void);
|
|
BOOL STDCALL IsValidContextSz(PCSTR pszContext);
|
|
int STDCALL LSeekHf(HF hf, int lOffset, WORD wOrigin);
|
|
RC_TYPE STDCALL RcWriteHf(HF hf, void* pvData, int lcb);
|
|
void STDCALL RemoveFM(FM* pfm);
|
|
void STDCALL SendStringToParent(PCSTR pszString = szParentString);
|
|
void STDCALL SetTmpDirectory(PCSTR pszDir);
|
|
void STDCALL SnoopPath(PCSTR szFile, int *pDrive, int *pDirPos, int *pBasePos, int *pExtPos);
|
|
PSTR STDCALL SzGetDir(DIR dir, PSTR sz);
|
|
void STDCALL SzPartsFm(FM fm, PSTR pszDest, int iPart);
|
|
int STDCALL YesNo(PCSTR psz);
|
|
|
|
#include <poppack.h>
|
|
|
|
#endif // #ifndef HCCOM_H
|