windows-nt/Source/XPSP1/NT/sdktools/mep/extens/mhelp/mh.h
2020-09-26 16:20:57 +08:00

310 lines
9.3 KiB
C

/*** mh.h - common include file for the MS Editor help extension
*
* Copyright <C> 1988, Microsoft Corporation
*
* Revision History:
* 24-Feb-1989 ln Increase max open help files to 20
* 13-Jan-1989 ln PWIN->PWND
* 09-Dec-1988 ln Changes for Dialog help
* 28-Sep-1988 ln Correct GrabWord return value
* 13-Sep-1988 Make EVTargs param a pointer
* [] 17-May-1988 Created
*
*************************************************************************/
#ifndef EXTINT
#include "ext.h" /* z extension include file */
#include <stdio.h>
#include <windows.h>
#if defined (DEBUG )
#define ORGDBG DEBUG
#else
#undef ORGDBG
#endif
#if defined (_INCLUDE_TOOLS_ )
#define _FLAGTYPE_DEFINED_ 1
#include "tools.h"
#if defined (ORGDBG)
#define DEBUG ORGDBG
#else
#undef DEBUG
#endif
#else
struct findType {
unsigned type; /* type of object being searched */
HANDLE dir_handle; /* Dir search handle for FindNext */
WIN32_FIND_DATA fbuf; /* Aligned structure for Cruiser and NT */
};
#endif
#endif // EXTINT
#include "help.h" /* help system include file */
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif
#define MAXFILES 20 /* max open helpfiles */
#define MAXEXT 10 /* max default search extensions*/
#if defined(PWB)
#define CLISTMAX 20 /* max number of duplicates */
#endif
#define WIN_MIN 5 /* min number of lines in window*/
//
// Editor color indexes
//
#define C_BOLD USERCOLORMIN
#define C_ITALICS (1 + C_BOLD)
#define C_UNDERLINE (1 + C_ITALICS)
#define C_WARNING (1 + C_UNDERLINE)
#define C_NORM (1 + C_WARNING)
//
// Info we keep for every helpfile
//
typedef struct {
nc ncInit; /* initial context */
uchar exts[MAXEXT][4]; /* extensions */
} helpfile;
//
// Forward Declarations of help extension routines
//
void pascal near appTitle (char far *, nc);
uchar pascal near atrmap (ushort);
flagType pascal EXTERNAL CloseWin (EVTargs far *);
flagType pascal near closehelp (char *);
flagType pascal near errstat (char *, char *);
flagType pascal near fContextCommand (char *);
flagType pascal near fDisplayNc (nc, flagType, flagType, flagType);
flagType pascal near fReadNc (nc);
flagType pascal near fHelpCmd (char *, flagType, flagType);
PWND pascal near FindHelpWin (flagType);
void pascal near GrabWord (void);
flagType pascal EXTERNAL IdleProc (EVTargs far *);
flagType pascal EXTERNAL keyevent (EVTargs far *);
flagType pascal EXTERNAL LooseFocus (EVTargs far *);
void pascal near mhcwinit (void);
void pascal near mhevtinit (void);
nc pascal near ncSearch (uchar far *, uchar far *, nc, flagType, flagType);
void pascal near opendefault (void);
void pascal near openhelp (char *, struct findType*, void*);
PWND pascal near OpenWin (ushort);
void pascal near PlaceColor (int, COL, COL);
int pascal near procArgs (ARG far *);
void pascal near ProcessKeys (void);
void pascal near procExt(int, char *);
flagType pascal EXTERNAL prochelpfiles (char *);
void pascal near stat (char *);
flagType pascal near wordSepar (int);
char far * pascal near xrefCopy (char far *, char far *);
#if defined(PWB)
nc pascal near ncChoose (char far *);
#endif
#ifdef DEBUG
void pascal near debend (flagType);
void pascal near debhex (long);
void pascal near debmsg (char far *);
/*
* assertion support
*
* assert - assertion macro. We define our own, because if we abort we need
* to be able to shut down cleanly (or at least die trying). This
* version also saves us some code over the C library one.
*
* asserte - version of assert that always executes the expression, regardless
* of debug state.
*/
void pascal near _mhassertexit (char *, char *, int);
#define assert(exp) { \
if (!(exp)) \
_mhassertexit (#exp, __FILE__, __LINE__); \
}
#define asserte(exp) assert(exp)
#else
#define debend(x)
#define debhex(x)
#define debmsg(x)
#define assert(exp)
#define asserte(exp) ((exp) != 0)
#endif
//
// Global Data
//
// results of procArgs.
//
extern int cArg; /* number of <args> hit */
extern rn rnArg; /* range of argument */
extern char *pArgText; /* ptr to any single line text */
extern char *pArgWord; /* ptr to context-sens word */
extern PFILE pFileCur; /* file handle of user file */
//
// Global State
//
extern flagType fInOpen; /* TRUE=> currently opening win */
extern flagType fInPopUp; /* TRUE=> currently in popup */
extern flagType fSplit; /* TRUE=> window was split open */
extern flagType fCreateWindow; /* TRUE=> create window */
extern buffer fnCur; /* Current file being editted */
extern char *fnExtCur; /* ptr to it's extension */
extern int ifileCur; /* Current index into files */
extern nc ncCur; /* most recently accessed */
extern nc ncInitLast; /* ncInit of most recent topic */
extern nc ncInitLastFile; /* ncInit of most recent, our files*/
extern nc ncLast; /* most recently displayed topic*/
extern PFILE pHelp; /* help PFILE */
extern PWND pWinHelp; /* handle to window w/ help in */
extern PWND pWinUser; /* User's most recent window */
extern buffer szLastFound; /* last context string found */
//
// Global Misc
//
extern buffer buf; /* utility buffer */
extern helpfile files[MAXFILES]; /* help file structs */
helpinfo hInfoCur; /* information on the help file */
extern uchar far *pTopic; /* mem for topic */
extern fl flIdle; /* last position of idle check */
//
// Multiple search list
//
extern flagType fList; /* TRUE=> search for and list dups*/
#if defined(PWB)
extern nc rgncList[CLISTMAX]; /* list of found nc's */
extern int cList; /* number of entries */
#endif
extern flagType ExtensionLoaded;
//
// colors
//
extern int hlColor; /* normal: white on black */
extern int blColor; /* bold: high white on black */
extern int itColor; /* italics: high green on black */
extern int ulColor; /* underline: high red on black */
extern int wrColor; /* warning: black on white */
#if defined(PWB)
extern uchar far *rgsa; /* pointer to color table */
#endif
//
// Debugging
//
#ifdef DEBUG
extern int delay; /* message delay */
#endif
//
// The extension accesses the entry points in the engine thru a table
// which is initialize by DosGetProcAddr.
//
typedef void pascal (*void_F) (void);
typedef int pascal (*int_F) (void);
typedef ushort pascal (*ushort_F) (void);
typedef f pascal (*f_F) (void);
typedef char * pascal (*pchar_F) (void);
typedef nc pascal (*nc_F) (void);
typedef mh pascal (*mh_F) (void);
#if defined( HELP_HACK )
#else
#define HelpcLines ((int pascal (*)(PB)) (pHelpEntry[P_HelpcLines ]))
#define HelpClose ((void pascal (*)(nc)) (pHelpEntry[P_HelpClose ]))
#define HelpCtl ((void pascal (*)(PB, f)) (pHelpEntry[P_HelpCtl ]))
#define HelpDecomp ((f pascal (*)(PB, PB, nc)) (pHelpEntry[P_HelpDecomp ]))
#define HelpGetCells ((int pascal (*)(int, int, char *, pb, uchar *)) (pHelpEntry[P_HelpGetCells ]))
#define HelpGetInfo ((int pascal (*)(nc, helpinfo *, int)) (pHelpEntry[P_HelpGetInfo ]))
#define HelpGetLine ((ushort pascal (*)(ushort, ushort, uchar *, PB)) (pHelpEntry[P_HelpGetLine ]))
#define HelpGetLineAttr ((ushort pascal (*)(ushort, int, lineattr *, PB)) (pHelpEntry[P_HelpGetLineAttr]))
#define HelpHlNext ((f pascal (*)(int, PB, hotspot *)) (pHelpEntry[P_HelpHlNext ]))
#define HelpLook ((ushort pascal (*)(nc, PB)) (pHelpEntry[P_HelpLook ]))
#define HelpNc ((nc pascal (*)(char *, nc)) (pHelpEntry[P_HelpNc ]))
#define HelpNcBack ((nc pascal (*)(void)) (pHelpEntry[P_HelpNcBack ]))
#define HelpNcCb ((ushort pascal (*)(nc)) (pHelpEntry[P_HelpNcCb ]))
#define HelpNcCmp ((nc pascal (*)(char *, nc, f (pascal *)(uchar *, uchar *, ushort, f, f) ) (pHelpEntry[P_HelpNcCmp ]))
#define HelpNcNext ((nc pascal (*)(nc)) (pHelpEntry[P_HelpNcNext ]))
#define HelpNcPrev ((nc pascal (*)(nc)) (pHelpEntry[P_HelpNcPrev ]))
#define HelpNcRecord ((void pascal (*)(nc)) (pHelpEntry[P_HelpNcRecord ]))
#define HelpNcUniq ((nc pascal (*)(nc)) (pHelpEntry[P_HelpNcUniq ]))
#define HelpOpen ((nc pascal (*)(char *)) (pHelpEntry[P_HelpOpen ]))
#define HelpShrink ((void pascal (*)(void)) (pHelpEntry[P_HelpShrink ]))
#define HelpSzContext ((f pascal (*)(uchar *, nc))(pHelpEntry[P_HelpSzContext ]))
#define HelpXRef ((char * pascal (*)(PB, hotspot *)) (pHelpEntry[P_HelpXRef ]))
//#define LoadFdb ((f_F) (pHelpEntry[P_LoadFdb ]))
//#define LoadPortion ((mh_F) (pHelpEntry[P_LoadPortion ]))
#endif // HELP_HACK
// Some functions return an error code in the nc structure
// (yuck!)
//
#define ISERROR(x) (((x).mh == 0L) && ((x).cn <= HELPERR_MAX))
enum {
P_HelpcLines,
P_HelpClose,
P_HelpCtl,
P_HelpDecomp,
P_HelpGetCells,
P_HelpGetInfo,
P_HelpGetLine,
P_HelpGetLineAttr,
P_HelpHlNext,
P_HelpLook,
P_HelpNc,
P_HelpNcBack,
P_HelpNcCb,
P_HelpNcCmp,
P_HelpNcNext,
P_HelpNcPrev,
P_HelpNcRecord,
P_HelpNcUniq,
P_HelpOpen,
P_HelpShrink,
P_HelpSzContext,
P_HelpXRef,
P_LoadFdb,
P_LoadPortion,
LASTENTRYPOINT
} ENTRYPOINTS;
#define NUM_ENTRYPOINTS (LASTENTRYPOINT - P_HelpcLines)
//
// Name of the help engine
//
#define HELPDLL_NAME "MSHELP.DLL"
#define HELPDLL_BASE "mshelp"
typedef nc pascal (*PHF) (void);
HANDLE hModule;
PHF pHelpEntry[NUM_ENTRYPOINTS];