/*** mh.h - common include file for the MS Editor help extension * * Copyright 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 #include #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 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];