2020-09-30 17:12:29 +02:00

328 lines
12 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifdef HEADER
/******************************************************************************\
* Copyright: (c) Microsoft Corporation - 1993 - All Rights Reserved
********************************************************************************
*
* Filename: HDXDLL.H
* Purpose:
* Notes:
*
* History:
* Date by description
* ---- -- -----------
* 10/13/93 chauv added HDXFILEINFO to fix *.hdx data size bug
* 10/12/93 chauv added tchar.h and DBC-enable code
* 04/25/93 v-tkback created
*
********************************************************************************
* $Header$
\******************************************************************************/
#endif
/******************************************************************************\
* *
* Include Files
* *
\******************************************************************************/
/********************/
/* Windows Includes */
/********************/
#include <windows.h>
#include <custcntl.h>
/*********************/
/* Standard Includes */
/*********************/
#ifndef RC_INVOKED
#include <stdio.h>
#endif
#include <stdlib.h>
#include <ctype.h>
#include <io.h>
#include <tchar.h>
#include "hdxdllrc.h"
/******************************************************************************\
* *
* Definitions used for 16 and 32-bit portable code
* *
\******************************************************************************/
#ifdef _WIN32
#define PC_LPCCSTYLE LPCCSTYLE
#define PC_EXPORT
#define PC_WNDPROCRV LRESULT
#else
#define PC_LPCCSTYLE LPCTLSTYLE
#define PC_EXPORT __export
#define PC_WNDPROCRV BOOL
/***********************/
/* Custom Control Data */
/***********************/
typedef struct tagCCSTYLEFLAGA {
DWORD flStyle; // Style bits for this style.
DWORD flStyleMask; // Mask for the style. Can be zero.
LPSTR pszStyle; // Points to the style define string.
} CCSTYLEFLAGA;
#endif
/******************************************************************************\
* *
* Global Definitions
* *
\******************************************************************************/
#define ENTRIES(a) (sizeof(a) / sizeof(*(a)))
#define EXISTS(f) (_access((f),0x04)==0)
#ifdef ALLOCATE
#define STORAGE /*!extern*/
#define DECLARE(v,i) /*!extern*/ v = i
#else
#define STORAGE extern
#define DECLARE(v,i) extern v
#endif
/******************************************************************************\
* *
* Global Constants
* *
\******************************************************************************/
/*********************/
/* Drawing Constants */
/*********************/
#define LEFTMARGIN 4
/******************************************/
/* Help File Structure String Size Limits */
/******************************************/
#define MAXHELPFILENAME 16
#define MAXHELPFILETOPIC 100
/*****************************************/
/* Help Index Book/Page Bitmap Structure */
/*****************************************/
#define BITMAP_ROWS 4
#define BITMAP_COLS 3
#define CLOSED_BOOK 0
#define OPENED_BOOK 1
#define SINGLE_PAGE 2
/*
+-------+-------+-------+
|Closed |Opened |Single |
|Book 1 |Book 1 |Page 1 |
+-------+-------+-------+
|Closed |Opened |Single |
|Book 2 |Book 2 |Page 2 |
+-------+-------+-------+
|Closed |Opened |Single |
|Book 3 |Book 3 |Page 3 |
+-------+-------+-------+
|Closed |Opened |Single |
|Book 4 |Book 4 |Page 4 |
+-------+-------+-------+
*/
/****************************/
/* Help Index Option Styles */
/****************************/
#define CCHSTYLE 10 // size of style string, i.e. "HS_LINES"
#define IDD_LINES 100 // Dialog Control ID of Style Checkbox
#define IDD_VIEWER 200 // wParam for WM_COMMAND to signal whether to use Viewer or Winhelp
#define IDD_PRODUCTKEY 300 // used to send product registry key
#define IDD_BOOKSETKEY 350 // used to send book set registry key
#define IDD_JUMPID 400 // used to send jump id from command line -i<id>:<helpfile>
#define IDD_TROUBLESHOOT 500
#define IDD_SETHELPPATH 600 // used to set LocalHelp1 path passed in from command line
#define IDD_SEARCH 610 // used to open FTS or old plain Winhelp Search dialogbox
#define IDD_CHANGEBITMAP 620 // used to change help icon in listbox - sent by contents.exe
#define HS_LINES 0x0001 // Style attached to control
#define HAS_LINES(hWnd) (GetWindowLong( (hWnd), GWL_STYLE ) & HS_LINES)
#define HELP_SEARCH (UINT)(HELP_CONTEXT-2) // to make sure we don't use HELP_XXX in winuser.h
#define HELP_FTSEARCH (UINT)(HELP_CONTEXT-3)
/*****************************************/
/* Window Word Help Index Pointer Offset */
/*****************************************/
#define GWL_HELPINDEXDATA 0 // offset of control's instance data
#define GETHELPINDEX(hWnd) \
((LPHELPINDEX)GetWindowLong( (hWnd), GWL_HELPINDEXDATA ))
#define SETHELPINDEX(hWnd,pHIdx) \
((LPHELPINDEX)SetWindowLong( (hWnd), GWL_HELPINDEXDATA, (LONG)(pHIdx) ))
/******************************************************************************\
* *
* Global Types
* *
\******************************************************************************/
/*****************/
/* HELPINDEXITEM */
/*****************/
typedef struct
{
LONG bExpanded_OverlaidIn16BitImpl; // Item Open State
LONG nHelpDepth; // Outline Depth
LONG nHelpLines_OverlaidIn16BitImpl; // Outline Lines Bitmask
ULONG nHelpTopic; // Outline Topic ID
char szHelpFile[MAXHELPFILENAME]; // Help "8.3" Filename
char szHelpTopic[MAXHELPFILETOPIC]; // Help Topic String
} HELPINDEXITEM, *PHELPINDEXITEM, FAR *LPHELPINDEXITEM;
//--------------------
// file info structure
typedef struct
{
LONG size; // contains the size in byte of HELPINDEXITEM structure
} HDXFILEINFO;
/**********************/
/* ITEM_RW_OVERLAY */
/* (and related defs) */
/**********************-------------------------------------------------------
Most of the help index file consists of an array of fixed-format records
representing the individual index items (index entries). Each record consists
mostly of read-only fields that contain the constant index definition, but
there are also a few read/write fields. The original, 32-bit implementation
of this program makes an in-memory copy of the entire file during
initialization, and uses the read/write fields in the memory copy to maintain
per-item state.
In (this) 16-bit implementation, the memory impact of loading the entire index
file at one time is considered unacceptable, and the file is accessed via an
item cache instead. To simplify the cache management and make it more
efficient, the read/write portions of the file are moved to a separate,
memory-resident "overlay" that masks off the modifiable fields.
The definitions in this group define the overlay entry for a single item, set
the maximum size of the array of overlay entries attached to a given index
file, and expose some constraints on the index file that result from the
overlay structure. Access to the read/write overlay is via the HELPINDEX
structure.
--------------------------------------------------------------------------- */
typedef UINT ITEM_RW_OVERLAY;
#define ITEMRW_EXPANDED (1 << (sizeof (ITEM_RW_OVERLAY) * 8 - 1) )
#define ITEMRW_LINESMAP (~ ITEMRW_EXPANDED)
// [chauv 7/1/ 94] increased max to 32K from 16K
#define MAX_ITEM_OVERLAY_CT ((128L * 1024 - 256) / sizeof (ITEM_RW_OVERLAY))
#define MAX_INDEX_REC_CT MAX_ITEM_OVERLAY_CT
#define MAX_INDEX_DEPTH (16) /* (bits in ITEMRW_LINESMAP + 1 for leaves) */
/*************/
/* HELPINDEX */
/*************/
// constants defining use of the index item cache
#define ITEMS_PER_PAGE (2048 / sizeof(HELPINDEXITEM))
#define BYTES_PER_PAGE (ITEMS_PER_PAGE * sizeof(HELPINDEXITEM))
// [chauv 7/1/94] increased to 128L from 64L
#define PAGES_PER_CACHE ((int) ((128L * 1024 - 256) / BYTES_PER_PAGE))
#define ITEMS_PER_CACHE (PAGES_PER_CACHE * ITEMS_PER_PAGE)
#define BYTES_PER_CACHE (((long) PAGES_PER_CACHE) * BYTES_PER_PAGE)
typedef struct
{
int nBasePos;
int nNewerPage;
int nOlderPage;
} PAGEINFO;
typedef struct
{
HWND hListbox;
HDC hdcBitmaps;
HBITMAP hbmBitmaps, hbmDefault;
UINT nMaxTextWidth;
UINT nBitmapHeight, nBitmapWidth;
UINT nTextHeight, nLineHeight;
char szProfile[_MAX_FNAME];
HFILE hfileIndex;
LONG nHdrBytesCt;
LONG nHelpItemCt;
HELPINDEXITEM FAR * pIndexItemCache;
PAGEINFO pageinfo[PAGES_PER_CACHE];
int nNewestPage;
ITEM_RW_OVERLAY FAR * pIndexRWOverlay;
} HELPINDEX, *PHELPINDEX, FAR *LPHELPINDEX;
/******************************************************************************\
* *
* Global Variables
* *
\******************************************************************************/
/****************************/
/* DLL Instance Information */
/****************************/
DECLARE( HINSTANCE hInstance, NULL );
DECLARE( UINT nRegistered, 0 );
/****************************/
/* Help Index Control Names */
/****************************/
DECLARE( char szHelpIndexClass[], _TEXT("HelpIndex") );
DECLARE( char szHelpIndexDesc[], _TEXT("Help Index Outline Control") );
DECLARE( char szHelpIndexDefault[], _TEXT("HELPFILE.HDX") );
STORAGE CCSTYLEFLAGA aHelpIndexStyleFlags[]
#ifdef ALLOCATE
= { { HS_LINES, 0, _TEXT("HS_LINES") }, }
#endif
;
DECLARE(LONG nHelpIndexStyleFlags, ENTRIES( aHelpIndexStyleFlags ) );
/************************************************************/
/* Global Pointer to custom control style passed by DLGEDIT */
/************************************************************/
DECLARE(PC_LPCCSTYLE gpccs, NULL );
// registry strings
DECLARE(TCHAR const szRegistryKey[], _T("Software\\Microsoft"));
DECLARE(TCHAR const szContentsSection[], _T("Contents"));
DECLARE(TCHAR const cszHDXKey[], _T("Contents File"));
DECLARE(TCHAR const cszHLPKey[], _T("Helpfile"));
DECLARE(TCHAR const szDirectoriesSection[], _T("Help")); // changed from "Directories" to "Help"
DECLARE(TCHAR const szLocalHelpKey[], _T("LocalHelp")); // changed from "Local Help" to "LocalHelp"
DECLARE(TCHAR const szRemoteHelpKey[], _T("RemoteHelp")); // changed from "Remote Help" to "RemoteHelp"
DECLARE(TCHAR const szLocalHelpKey1[], _T("LocalHelp1"));
DECLARE(TCHAR const szRemoteHelpKey1[], _T("RemoteHelp1"));
DECLARE(TCHAR const szWindowPos[], _T("Contents Position"));
DECLARE(TCHAR const cszFTSFiles[], _T("FTS Files"));
DECLARE(TCHAR const szDlgClass[], _T("#32770"));
DECLARE(TCHAR const szHelpDirDlgCaption[], _T("Help Directories"));
DECLARE(TCHAR const szNull[], _T(""));
DECLARE(TCHAR const szTopicID[], _T("LastTopicID"));
DECLARE(TCHAR const szTopicHelpfile[], _T("LastTopicHelpfile"));
DECLARE(TCHAR const szTopicTitle[], _T("LastTopicTitle"));
DECLARE(TCHAR const szTopicUse[], _T("LastTopic"));
DECLARE(TCHAR const szCurrentBookset[], _T("Current Bookset"));
/*EOF*/