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.
850 lines
30 KiB
850 lines
30 KiB
/************************************************************/
|
|
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
|
|
/************************************************************/
|
|
|
|
/* WRITE Globals */
|
|
|
|
#define NOGDICAPMASKS
|
|
#define NOVIRTUALKEYCODES
|
|
#define NOWINMESSAGES
|
|
#define NOWINSTYLES
|
|
#define NOSYSMETRICS
|
|
#define NOICON
|
|
#define NOKEYSTATE
|
|
#define NOSYSCOMMANDS
|
|
#define NOSHOWWINDOW
|
|
#define NOATOM
|
|
#define NOCLIPBOARD
|
|
#define NOCOLOR
|
|
#define NOCREATESTRUCT
|
|
#define NOCTLMGR
|
|
#define NODRAWTEXT
|
|
#define NOMB
|
|
#define NOMEMMGR
|
|
#define NOMETAFILE
|
|
#define NOMINMAX
|
|
#define NOOPENFILE
|
|
#define NOPEN
|
|
#define NOREGION
|
|
#define NOSCROLL
|
|
#define NOSOUND
|
|
#define NOWH
|
|
#define NOWINOFFSETS
|
|
#define NOWNDCLASS
|
|
#define NOCOMM
|
|
#include <windows.h>
|
|
|
|
#include "mw.h"
|
|
#define NOUAC
|
|
#include "cmddefs.h"
|
|
#include "dispdefs.h"
|
|
#include "docdefs.h"
|
|
#include "filedefs.h"
|
|
#include "fmtdefs.h" /* formatdefs.h */
|
|
#include "propdefs.h"
|
|
#include "fkpdefs.h"
|
|
#include "printdef.h" /* printdefs.h */
|
|
#include "wwdefs.h"
|
|
#include "prmdefs.h"
|
|
#include "rulerdef.h"
|
|
#include "editdefs.h"
|
|
#define NOSTRERRORS
|
|
#include "str.h"
|
|
#include "fontdefs.h"
|
|
#include "globdefs.h" /* text for static strings */
|
|
|
|
VAL rgval [ivalMax]; /* General purpose parm-passing array */
|
|
#ifdef ENABLE
|
|
VAL rgvalAgain[ivalMax];
|
|
#endif
|
|
|
|
CHAR vchDecimal = '?'; /* "decimal point" character
|
|
real value set in initwin.c */
|
|
|
|
int vzaTabDflt = vzaTabDfltDef; /* width of default tab in twips */
|
|
|
|
/* pen windows */
|
|
VOID (FAR PASCAL *lpfnRegisterPenApp)(WORD, BOOL) = NULL;
|
|
|
|
/* page buffers stuff */
|
|
CHAR *rgibpHash;
|
|
int iibpHashMax;
|
|
struct BPS *mpibpbps;
|
|
int ibpMax;
|
|
int ibpMaxFloat = 128;
|
|
typeTS tsMruBps;
|
|
CHAR (*rgbp)[cbSector];
|
|
struct ERFN dnrfn[rfnMax];
|
|
int rfnMac;
|
|
typeTS tsMruRfn;
|
|
int vfBuffersDirty = FALSE;
|
|
|
|
/* doc stuff */
|
|
struct DOD (**hpdocdod)[];
|
|
int docCur; /* current doc */
|
|
int docMac;
|
|
int docScrap;
|
|
#ifdef CASHMERE /* No docBuffer in WRITE */
|
|
int docBuffer;
|
|
#endif
|
|
int docUndo;
|
|
|
|
#if defined(JAPAN) & defined(DBCS_IME) /* Doc for Insert IR_STRING from IME [yutakan]*/
|
|
int docIRString;
|
|
#endif
|
|
|
|
int docRulerSprm;
|
|
int docMode = docNil; /* doc with "Page nnn" message */
|
|
int vpgn; /* current page number of document */
|
|
typeCP cpMinCur;
|
|
typeCP cpMacCur;
|
|
|
|
/* file stuff */
|
|
struct FCB (**hpfnfcb)[];
|
|
int fnMac;
|
|
int ferror;
|
|
int errIO; /* i/o error code */
|
|
int versFile = 0;
|
|
int vrefFile = 0;
|
|
int vrefSystem = 0;
|
|
|
|
#ifdef DBCS_VERT
|
|
CHAR szAtSystem [] = szAtSystemDef; // for vertical-sysfont
|
|
#endif
|
|
|
|
WORD vwDosVersion; /* Current DOS version, maj in lo 8, minor in hi */
|
|
int vfInitializing = TRUE; /* TRUE during inz, FALSE thereafter */
|
|
int vfDiskFull = FALSE; /* Disk full error, fn != fnScratch */
|
|
int vfSysFull = FALSE; /* Disk holding fnScratch is full */
|
|
int vfDiskError = FALSE; /* Serious Disk Error has occurred */
|
|
int vfLargeSys = FALSE;
|
|
int vfMemMsgReported = FALSE;
|
|
int vfCloseFilesInDialog = FALSE; /* Set inside OPEN, SAVE dialog */
|
|
int vfSizeMode;
|
|
int vfPictSel;
|
|
int vfPMS = FALSE; /* Currently doing picture move/size */
|
|
int vfnWriting = fnNil; /* fn that gets written to disk */
|
|
int vfnSaving = fnNil; /* Like above, but longer lifetime */
|
|
int vibpWriting;
|
|
CHAR (**vhrgbSave)[]; /* emergency space for save events */
|
|
struct FPRM fprmCache; /* scratch file property modifiers */
|
|
|
|
/* global boolean flags */
|
|
int vfTextOnlySave = FALSE; /* reset by each new/open, use by save as */
|
|
int vfBackupSave; /* use by save as box */
|
|
|
|
#if defined(JAPAN) || defined(KOREA)
|
|
int vfWordWrap; /*t-Yoshio WordWrap flag*/
|
|
#elif defined(TAIWAN) || defined(PRC) //Daniel/MSTC, 1993/02/25
|
|
int vfWordWrap= 1; // always set it on
|
|
#endif
|
|
|
|
#if defined(JAPAN) & defined(IME_HIDDEN) //IME3.1J
|
|
int vfImeHidden; /*T-HIROYN ImeHidden Mode flag*/
|
|
#endif
|
|
|
|
int vfOutOfMemory = FALSE;
|
|
int vfOvertype = FALSE; /* still using this ? */
|
|
int vfPrintMode = FALSE; /* TRUE if format to printer mode on screen */
|
|
int vfDraftMode = FALSE; /* TRUE if the user choose the draft mode option */
|
|
int vfRepageConfirm = FALSE; /* repaginate confirm page break option */
|
|
int vfVisiMode = FALSE; /* TRUE if visible char mode on */
|
|
int vfModeIsFootnote; /* TRUE when szMode contains string "Footnote" */
|
|
int vfNoIdle = FALSE;
|
|
int vfDeactByOtherApp = FALSE; /* TRUE if we are deactivated by another app */
|
|
int vfDownClick = FALSE; /* TRUE when we received a down click in our window */
|
|
int vfCursorVisible = FALSE; /* TRUE if want to show the cursor in a mouseless
|
|
system */
|
|
int vfMouseExist = FALSE; /* TRUE if mouse hardware is installed */
|
|
int vfInLongOperation = FALSE; /* TRUE if we are still in a long operation
|
|
so that the cursor should stay hourglass */
|
|
int vfScrapIsPic = FALSE; /* Whether docScrap contains picture */
|
|
BOOL fDestroyOK;
|
|
|
|
int fGrayChar; /* TRUE if selection consists of mixed char properties */
|
|
int fGrayPara; /* TRUE if selection consists of mixed para properties */
|
|
|
|
int vfPrPages = FALSE; /* TRUE if print page range */
|
|
int vpgnBegin; /* starting page number to print */
|
|
int vpgnEnd; /* ending page number to print */
|
|
int vcCopies = 1; /* nubmer of copies to print */
|
|
BOOL vfPrErr = FALSE; /* TRUE iff a printing error occurred */
|
|
BOOL vfPrDefault = TRUE; /* TRUE iff Write chose printer */
|
|
BOOL vfWarnMargins = FALSE; /* TRUE if we should warn user about bad margins */
|
|
|
|
/* Show that Print, Help, and Glossary processing is uninitialized */
|
|
int vfPrintIsInit = FALSE;
|
|
int vfHelpIsInit = FALSE;
|
|
int vfGlyIsInit = FALSE;
|
|
|
|
int vfInsEnd = false; /* Is insert point at end-of-line? */
|
|
int vfInsertOn;
|
|
int vfMakeInsEnd;
|
|
int vfSelAtPara;
|
|
int vfSeeSel = FALSE;
|
|
int vfLastCursor; /* TRUE iff the last selection was made
|
|
by an Up/Down cursor key */
|
|
int vfGotoKeyMode = FALSE; /* Apply GOTO meta mode to next cursor
|
|
key */
|
|
#ifdef SAND
|
|
int vftcDaisyPS = -1;
|
|
int vftcDaisyNoPS = -1;
|
|
int vfDaisyWheel = FALSE;
|
|
int vifntApplication;
|
|
int vifntMac;
|
|
#endif /* SAND */
|
|
|
|
#ifdef UNUSED
|
|
int vfCanPrint;
|
|
#endif
|
|
|
|
int vchInch;
|
|
int vfMouse;
|
|
typeCP vcpSelect;
|
|
|
|
#ifdef DEBUG
|
|
int fIbpCheck = TRUE;
|
|
int fPctbCheck = TRUE;
|
|
#ifdef CKSM
|
|
unsigned (**hpibpcksm) []; /* Checksums for buffer page contents */
|
|
unsigned ibpCksmMax; /* Alloc limit for cksm array */
|
|
#endif
|
|
#endif /* DEBUG */
|
|
|
|
int vWordFmtMode = FALSE; /* used during saves. If false, no conversion is
|
|
done. True is convert to Word format,CVTFROMWORD
|
|
is translate chars from Word character set at
|
|
save */
|
|
|
|
/* **************************************************************** */
|
|
/* strings, predefined file names - definitions stored in globdefs.h */
|
|
/* */
|
|
/* NOTE NOTE NOTE Win 3.0 */
|
|
/* */
|
|
/* Some of these strings have now been moved from globdefs.h */
|
|
/* to write.rc. This was done to easy localization. */
|
|
/* */
|
|
/* **************************************************************** */
|
|
|
|
CHAR (**hszTemp)[];
|
|
CHAR (**hszGlosFile)[];
|
|
CHAR (**hszXfOptions)[];
|
|
CHAR szMode[30]; /* buffer for "Page nnn" message */
|
|
|
|
CHAR szEmpty[] = "";
|
|
CHAR szExtDoc[] = szExtDocDef;
|
|
CHAR szExtWordDoc[] = szExtWordDocDef;
|
|
CHAR szExtGls[] = szExtGlsDef;
|
|
CHAR szExtDrv[] = szExtDrvDef;
|
|
/* for Intl added szExtWordDoc entry */
|
|
CHAR *mpdtyszExt [] = { szExtDoc, szExtGls, szEmpty, szEmpty,
|
|
szEmpty, szEmpty,
|
|
szExtWordDoc };
|
|
CHAR szExtBackup[] = szExtBackupDef;
|
|
CHAR szExtWordBak[] = szExtWordBakDef;
|
|
/* WIN.INI: our app entry */
|
|
CHAR szWriteProduct[] = szWriteProductDef;
|
|
CHAR szFontEntry[] = szFontEntryDef; /* WIN.INI: our font list */
|
|
CHAR szWriteDocPrompt[25]; /* OpenFile prompts */
|
|
CHAR szScratchFilePrompt[25];
|
|
CHAR szSaveFilePrompt[25];
|
|
#if defined(KOREA) // jinwoo : 10/16/92
|
|
CHAR szAppName[13]; /* For message box headings */
|
|
#else
|
|
CHAR szAppName[10]; /* For message box headings */
|
|
#endif
|
|
CHAR szUntitled[20]; /* Unnamed doc */
|
|
CHAR szSepName[] = szSepNameDef; /* separator between product
|
|
name and file name in header */
|
|
|
|
#ifdef STYLES
|
|
CHAR szSshtEmpty[] = szSshtEmptyDef;
|
|
#endif /* STYLES */
|
|
|
|
/* Strings for parsing the user profile. */
|
|
CHAR szWindows[] = szWindowsDef;
|
|
CHAR szDevice[] = szDeviceDef;
|
|
CHAR szDevices[] = szDevicesDef;
|
|
CHAR szBackup[] = szBackupDef;
|
|
|
|
#if defined(JAPAN) || defined(KOREA) //Win3.1J
|
|
CHAR szWordWrap[] = szWordWrapDef;
|
|
#endif
|
|
|
|
#if defined(JAPAN) & defined(IME_HIDDEN) //IME3.1J
|
|
CHAR szImeHidden[] = szImeHiddenDef;
|
|
#endif
|
|
|
|
/* Strings for our window classes (MUST BE < 39 CHARS) */
|
|
|
|
CHAR szParentClass[] = szParentClassDef;
|
|
CHAR szDocClass[] = szDocClassDef;
|
|
CHAR szRulerClass[] = szRulerClassDef;
|
|
CHAR szPageInfoClass[] = szPageInfoClassDef;
|
|
#ifdef ONLINEHELP
|
|
CHAR szHelpDocClass[] = szHelpDocClassDef;
|
|
#endif
|
|
|
|
CHAR szWRITEText[30];
|
|
CHAR szFree[15];
|
|
CHAR szMWTemp [] = szMWTempDef;
|
|
CHAR szSystem [] = szSystemDef;
|
|
|
|
CHAR szMw_acctb[] = szMw_acctbDef;
|
|
CHAR szNullPort[] = szNullPortDef;
|
|
CHAR szNone[15];
|
|
CHAR szMwlores[] = szMwloresDef;
|
|
CHAR szMwhires[] = szMwhiresDef;
|
|
CHAR szMw_icon[] = szMw_iconDef;
|
|
CHAR szMw_menu[] = szMw_menuDef;
|
|
CHAR szScrollBar[] = szScrollBarDef;
|
|
CHAR szAltBS[20];
|
|
CHAR szPmsCur[] = szPmsCurDef;
|
|
CHAR szHeader[15];
|
|
CHAR szFooter[15];
|
|
|
|
CHAR szModern[] = szModernDef;
|
|
CHAR szRoman[] = szRomanDef;
|
|
CHAR szSwiss[] = szSwissDef;
|
|
CHAR szScript[] = szScriptDef;
|
|
CHAR szDecorative[] = szDecorativeDef;
|
|
|
|
CHAR szExtSearch[] = szExtSearchDef; /* store default search spec */
|
|
CHAR szLoadFile[25];
|
|
CHAR szCvtLoadFile[45];
|
|
|
|
CHAR szIntl[] = szIntlDef;
|
|
CHAR szsDecimal[] = szsDecimalDef;
|
|
CHAR szsDecimalDefault[] = szsDecimalDefaultDef;
|
|
CHAR sziCountry[] = sziCountryDef;
|
|
CHAR sziCountryDefault[5];
|
|
|
|
/* table of unit names from util2.c - Must agree with cmddefs.h */
|
|
CHAR *mputsz[utMax] =
|
|
{
|
|
" ",
|
|
" ",
|
|
" ",
|
|
" ",
|
|
" ",
|
|
" ",
|
|
};
|
|
|
|
|
|
/* For convenience, we reserves Mac's st concept, the difference is that
|
|
cch stored in the first byte of the array includes the '\0' so that we
|
|
can use it as a sz by chopping the 1st byte */
|
|
CHAR stBuf[256];
|
|
|
|
CHAR szCaptionSave[cchMaxFile]; /* save the caption text */
|
|
/* insert stuff */
|
|
CHAR rgchInsert[cchInsBlock]; /* temporary insert buffer */
|
|
typeCP cpInsert; /* beginning cp of insert block */
|
|
int ichInsert; /* number of chars used in rgchInsert */
|
|
typeFC fcMacPapIns = fc0;
|
|
typeFC fcMacChpIns = fc0;
|
|
struct FKPD vfkpdCharIns;
|
|
struct FKPD vfkpdParaIns;
|
|
int vdlIns; /* Display line for current insert */
|
|
int vcchBlted=0; /* # of chars blted onto vdlIns */
|
|
int vidxpInsertCache=-1; /* Current position in vfli.rgdxp
|
|
during fast insert */
|
|
int vfInsFontTooTall; /* Ins chr will be too tall for line */
|
|
struct EDL *vpedlAdjustCp;
|
|
int vfSuperIns; /* whether in super-fast insert mode */
|
|
typeCP cpInsLastInval;
|
|
int vdypCursLineIns;
|
|
int vdypBase;
|
|
int vdypAfter;
|
|
int vxpIns;
|
|
int vxpMacIns;
|
|
int vypBaseIns;
|
|
int vfTextBltValid;
|
|
typeCP cpWall = cp0;
|
|
int vfInsLast;
|
|
|
|
/* Keyboard shift/lock flags */
|
|
int vfShiftKey = FALSE; /* whether Shift is down */
|
|
int vfCommandKey = FALSE; /* whether Ctrl key is down */
|
|
int vfOptionKey = FALSE; /* whether Alt key is down */
|
|
|
|
/* cache stuff */
|
|
CHAR *vpchFetch;
|
|
CHAR (**hgchExpand)[];
|
|
int vichFetch;
|
|
int vdocFetch;
|
|
int vccpFetch;
|
|
int vcchFetch;
|
|
int visedCache;
|
|
int vdocExpFetch;
|
|
int vdocParaCache = docNil;
|
|
int vdocPageCache;
|
|
int vdocSectCache;
|
|
typeCP vcpFetch;
|
|
typeCP vcpFirstParaCache;
|
|
typeCP vcpLimParaCache;
|
|
typeCP vcpMinPageCache;
|
|
typeCP vcpMacPageCache;
|
|
typeCP vcpLimSectCache;
|
|
typeCP vcpFirstSectCache;
|
|
|
|
/* cache stuff for display purpose */
|
|
int ctrCache = 0;
|
|
int itrFirstCache = 0;
|
|
int itrLimCache = itrMaxCache;
|
|
int dcpCache = 0;
|
|
typeCP cpCacheHint = cp0;
|
|
|
|
/* The picture bitmap cache */
|
|
|
|
int vdocBitmapCache = docNil;
|
|
typeCP vcpBitmapCache;
|
|
HBITMAP vhbmBitmapCache = NULL;
|
|
BOOL vfBMBitmapCache;
|
|
|
|
/* style property stuff */
|
|
int ichpMacFormat;
|
|
struct CHP vchpNormal;
|
|
struct CHP vchpAbs;
|
|
struct CHP vchpInsert;
|
|
struct CHP vchpFetch;
|
|
struct CHP vchpSel; /* Holds the props when the selection is
|
|
an insert point */
|
|
struct CHP *pchpDefault;
|
|
struct CHP (**vhgchpFormat)[];
|
|
struct PAP vpapPrevIns;
|
|
struct PAP vpapAbs;
|
|
struct PAP *vppapNormal;
|
|
struct SEP vsepNormal;
|
|
struct SEP vsepAbs;
|
|
struct SEP vsepStd;
|
|
struct SEP vsepPage;
|
|
|
|
#define ESPRM(cch, sgc, spr, fSame, fClobber) \
|
|
(cch + (ESPRM_sgcMult * sgc) + (ESPRM_spr * spr) + \
|
|
(ESPRM_fSame * fSame) + (ESPRM_fClobber * fClobber))
|
|
|
|
/* ESPRM fields are:
|
|
cch 2 bits of length, 0 means determined by procedure
|
|
sgc 2 bits of group: char, para, or running head
|
|
spr 1 bit priority, fClobber sprms clobber sprms in same group with
|
|
priority less than or equal
|
|
fSame means overrides previous instance of same sprm
|
|
fClobber see spr
|
|
*/
|
|
|
|
#define ESPRMChar ESPRM(2,0,0,1,0)
|
|
#define ESPRMPara ESPRM(2,1,1,1,0)
|
|
#define ESPRMParaLong ESPRM(3,1,1,1,0)
|
|
|
|
/* This table corresponds to sprm's in prmdefs.h */
|
|
CHAR dnsprm[sprmMax] = {
|
|
/* 0 */ 0, /* */
|
|
ESPRMParaLong, /* PLMarg */
|
|
/* 2 */ ESPRMParaLong, /* PRMarg */
|
|
ESPRMParaLong, /* PFIndent */
|
|
/* 4 */ ESPRMPara, /* PJc */
|
|
ESPRM(1,1,1,1,0), /* Ruler */
|
|
/* 6 */ ESPRM(0,1,1,1,0), /* Ruler1 */
|
|
ESPRMPara, /* PKeep */
|
|
/* 8 */ ESPRM(2,1,1,1,1), /* PNormal (formerly Pstyle) */
|
|
ESPRM(2,2,0,1,0), /* PRhc running head code */
|
|
/* 10 */ ESPRM(0,1,0,1,1), /* PSame, clobbers all tabs but related ones */
|
|
ESPRMParaLong, /* PDyaLine */
|
|
/* 12 */ ESPRMParaLong, /* PDyaBefore */
|
|
ESPRMParaLong, /* PDyaAfter */
|
|
/* 14 */ ESPRM(1,1,1,0,0), /* PNest */
|
|
ESPRM(1,1,1,0,0), /* PUnNest */
|
|
/* 16 */ ESPRM(1,1,1,0,0), /* PHang - hanging indent */
|
|
ESPRM(0,1,1,1,0), /* PRgtbd */
|
|
/* 18 */ ESPRMPara, /* PKeepFollow */
|
|
ESPRM(1,1,0,1,1), /* PCAll - NUSED */
|
|
/* 20 */ ESPRMChar, /* CBold */
|
|
ESPRMChar, /* CItalic */
|
|
/* 22 */ ESPRMChar, /* CUline */
|
|
ESPRMChar, /* CPos */
|
|
/* 24 */ ESPRMChar, /* CFtc */
|
|
ESPRMChar, /* CHps */
|
|
/* 26 */ ESPRM(0,0,0,1,1), /* CSame */
|
|
ESPRMChar, /* CChgFtc */
|
|
/* 28 */ ESPRMChar, /* CChgHps */
|
|
ESPRM(2,0,0,1,0), /* CPlain */
|
|
/* 30 */ ESPRMChar, /* CShadow */
|
|
ESPRMChar, /* COutline */
|
|
/* 32 */ ESPRMChar, /* CCsm - case modification. */
|
|
|
|
/* The following sprms are unused as of 10/10/84: */
|
|
ESPRMChar, /* CStrike */
|
|
/* 34 */ ESPRMChar, /* DLine - ? */
|
|
ESPRMChar, /* CPitch - obs. */
|
|
/* 36 */ ESPRMPara, /* COverset */
|
|
ESPRM(2,0,0,1,1), /* CStc Style */
|
|
/* The preceding sprms are unused as of 10/10/84: */
|
|
|
|
/* 38 */ ESPRM(0,0,0,0,0), /* CMapFtc */
|
|
ESPRM(0,0,0,0,0), /* COldFtc */
|
|
/* 40 */ ESPRM(0,1,1,1,0) /* PRhcNorm -- cch is 4 */
|
|
};
|
|
|
|
/* ruler stuff */
|
|
int mprmkdxa[rmkMARGMAX]; /* stores dxa of indents on ruler */
|
|
int rgxaRulerSprm[3];
|
|
|
|
/* This is a global parameter to AdjustCp; if FALSE, no invalidation will
|
|
take place. */
|
|
BOOL vfInvalid = TRUE; /* if FALSE, no invalidation will take place
|
|
in AdjustCp */
|
|
|
|
int viDigits = 2;
|
|
BOOL vbLZero = FALSE;
|
|
int utCur = utDefault; /* may be inch or cm depending on value
|
|
in globdefs.h */
|
|
|
|
short itxbMac;
|
|
struct TXB (**hgtxb)[];
|
|
struct UAB vuab;
|
|
|
|
/* search stuff */
|
|
CHAR (**hszFlatSearch)[];
|
|
#if defined(JAPAN) || defined(KOREA)
|
|
CHAR (**hszDistFlatSearch)[];
|
|
#endif
|
|
CHAR (**hszSearch)[];
|
|
CHAR (**hszReplace)[];
|
|
CHAR (**hszRealReplace)[]; /* used for building replacement text */
|
|
CHAR (**hszCaseReplace)[]; /* used for building replacement text with
|
|
appropriate capitalization. */
|
|
CHAR *szSearch;
|
|
BOOL fReplConfirm = TRUE;
|
|
BOOL fSearchCase = FALSE;
|
|
#if defined(JAPAN) || defined(KOREA)
|
|
BOOL fSearchDist = TRUE;
|
|
#endif
|
|
BOOL fSearchWord = FALSE;
|
|
BOOL fSpecialMatch;
|
|
BOOL fMatchedWhite = FALSE;
|
|
BOOL fParaReplace = FALSE;
|
|
/*BOOL fSearchForward = TRUE;*/
|
|
typeCP cpMatchLim;
|
|
int vfDidSearch = FALSE;
|
|
|
|
/* Strings for printer selection */
|
|
CHAR (**hszPrinter)[]; /* name of the current printer */
|
|
CHAR (**hszPrDriver)[]; /* name of the current printer driver */
|
|
CHAR (**hszPrPort)[]; /* name of the current printer port */
|
|
CHAR szNul[cchMaxIDSTR]; /* name of the null device */
|
|
BOOL vfPrinterValid = TRUE; /* FALSE iff the above strings do not
|
|
describe the printer DC */
|
|
|
|
/* global dxa/dya stuff */
|
|
int vdxaPaper;
|
|
int vdyaPaper;
|
|
int vdxaTextRuler; /* from section props used to calculate right margin */
|
|
|
|
int dxpLogInch;
|
|
int dypLogInch;
|
|
int dxpLogCm;
|
|
int dypLogCm;
|
|
int dxaPrPage;
|
|
int dyaPrPage;
|
|
int dxpPrPage;
|
|
int dypPrPage;
|
|
int ypSubSuperPr;
|
|
|
|
#ifdef KINTL
|
|
int dxaAdjustPerCm; /* The amount of kick-back to be added to xa per cm in
|
|
XaQuantize() to offset a round-off error. */
|
|
#endif /* ifdef KINTL */
|
|
|
|
/* actual position of the cursor line */
|
|
int vxpCursLine;
|
|
int vypCursLine;
|
|
int vdypCursLine;
|
|
int vfScrollInval; /* means scroll did not take and UpdateWw must be repeated */
|
|
|
|
/* selection stuff */
|
|
int vfSelHidden = FALSE;
|
|
struct SEL selCur; /* current selection (i.e. sel in current ww) */
|
|
|
|
/* window stuff */
|
|
struct WWD rgwwd[wwMax];
|
|
int wwMac = 0;
|
|
int wwCur = wwNil;
|
|
#ifdef ONLINEHELP
|
|
int wwHelp=wwNil; /* Help Window */
|
|
#endif
|
|
int wwClipboard=wwNil; /* Clipboard Display Window */
|
|
struct WWD *pwwdCur = &rgwwd[0]; /* current window descriptor */
|
|
int vipgd = -1; /* page number displayed in lower corner */
|
|
int xpAlpha;
|
|
int ypAlpha;
|
|
RECT rectParent;
|
|
struct FLI vfli =
|
|
{
|
|
cp0, 0, cp0, 0, 0, 0, FALSE, 0, 0, 0, 0, 0, 0, 0,
|
|
FALSE, FALSE, 0, 0, 0, 0, 0, FALSE, 0, 0,
|
|
/* rgdxp */
|
|
0x0000, 0xFFFE, 0xffff, 0xffff, 0xe0ff, 0xff3f, 0x00ff, 0xff07,
|
|
0x00fe, 0xff03, 0x00f8, 0xff00, 0x0ff0, 0x7f80, 0x3fe0, 0x3fe0,
|
|
0x7fc0, 0x1ff0, 0xffc0, 0x1ff8, 0xff81, 0x0ffc, 0xff83, 0x0ffe,
|
|
0xff87, 0x0fff, 0x8f07, 0x071f, 0x060f, 0x870f, 0x060f, 0x870f,
|
|
0x8f0f, 0x871f, 0xff0f, 0x87ff, 0xff0f, 0x87ff, 0xff0f, 0x87ff,
|
|
0x1f0f, 0x878f, 0x0f0f, 0x870f, 0x0007, 0x070f, 0x8087, 0x0f1f,
|
|
0xe083, 0x0f7e, 0xff81, 0x0ffc, 0xffc0, 0x1ff8, 0x7fc0, 0x1ff0,
|
|
0x1fe0, 0x3fc0, 0x00f0, 0x7f00, 0x00fc, 0xff01, 0x00fe, 0xff03,
|
|
0xe0ff, 0xff3f, 0x8BEC, 0xFC46, 0xF8D1, 0x4689, 0x2BEA, 0x8BFF,
|
|
0xEBF7, 0xFF55, 0x0A76, 0x468B, 0x2BEC, 0x50C6, 0x8B57, 0x085E,
|
|
0x5FFF, 0xFF08, 0x0A76, 0x8B56, 0xEA46, 0xC703, 0x8B50, 0x085E,
|
|
0x5FFF, 0xFF0C, 0x0A76, 0x468B, 0x03EC, 0x50C6, 0x8B57, 0x085E,
|
|
0x5FFF, 0xFF08, 0x0A76, 0x468B, 0x2BFA, 0x50C6, 0x468B, 0x03EA,
|
|
0x50C7, 0x5E8B, 0xFF08, 0x0C5F, 0x468B, 0xB1FA, 0xD306, 0x03F8,
|
|
0x8BF0, 0xFC46, 0xF8D3, 0xF803, 0x7639, 0x7DEC, 0x5EA6, 0x835F,
|
|
0x02ED, 0xE58B, 0x5D1F, 0xCA4D, 0x0008, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
|
/* rgch */
|
|
0x11, 0x30, 0x5c, 0x71, 0x84, 0x75, 0x83, 0x84,
|
|
0x30, 0x72, 0x89, 0x30, 0x60, 0x71, 0x85, 0x7c,
|
|
0x64, 0x30, 0x7A, 0x7D, 0x77, 0x7C, 0x64, 0x60,
|
|
0x33, 0x44, 0x61, 0x7A, 0x67, 0x76, 0x33, 0x7B,
|
|
0x72, 0x60, 0x33, 0x71, 0x76, 0x76, 0x7D, 0x33,
|
|
0x71, 0x61, 0x7C, 0x66, 0x74, 0x7B, 0x67, 0x33,
|
|
0x67, 0x7C, 0x33, 0x6A, 0x7C, 0x66, 0x33, 0x71,
|
|
0x6A, 0x33, 0x51, 0x7C, 0x71, 0x3F, 0x33, 0x51,
|
|
0x7C, 0x71, 0x3F, 0x33, 0x51, 0x61, 0x6A, 0x72,
|
|
0x7D, 0x3F, 0x33, 0x50, 0x7B, 0x7A, 0x3E, 0x50,
|
|
0x7B, 0x66, 0x76, 0x7D, 0x3F, 0x33, 0x72, 0x7D,
|
|
0x77, 0x33, 0x43, 0x72, 0x67, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
};
|
|
|
|
/* Screen dependent measurements */
|
|
int DxaPerPix; /* number of twips per xp */
|
|
int DyaPerPix; /* number of twips per yp */
|
|
|
|
int xpInch; /* number of xp's per inch */
|
|
int xpMaxUser;
|
|
int xpSelBar; /* width of the selection bar in xp's */
|
|
|
|
int dxpScrlBar; /* width of the scroll bar in xp's */
|
|
int dypScrlBar; /* height of the scroll bar in xp's */
|
|
int dxpInfoSize; /* width of the page info area */
|
|
|
|
int xpRightMax;
|
|
int xpMinScroll;
|
|
int xpRightLim;
|
|
|
|
int ypMaxWwInit;
|
|
int ypMaxAll;
|
|
|
|
int dypMax;
|
|
int dypAveInit;
|
|
int dypWwInit;
|
|
int dypBand;
|
|
int dypRuler = 0;
|
|
int dypSplitLine;
|
|
int ypSubSuper; /* adjustment from base line for sub/super */
|
|
|
|
/* idstr stuff */
|
|
int idstrCurrentUndo = IDSTRUndoBase;
|
|
|
|
/* the following two may eventually be deleted -- check usage in ruler.c */
|
|
int vfTabsChanged = FALSE; /* TRUE if any tabs are changed from the ruler */
|
|
int vfMargChanged = FALSE; /* TRUE if any indents are changed from the ruler */
|
|
|
|
#ifdef CASHMERE
|
|
struct TBD rgtbdRulerSprm[itbdMax];
|
|
#endif /* CASHMERE */
|
|
|
|
#ifdef RULERALSO
|
|
BOOL vfDisableMenus = FALSE;/* TRUE if top level menus (including
|
|
the system menu are to be disabled */
|
|
int vfTempRuler; /* TRUE if ruler is created because of dialog box creation */
|
|
HWND vhDlgTab = (HWND)NULL;
|
|
HWND vhDlgIndent = (HWND)NULL;
|
|
struct TBD rgtbdRuler[itbdMax];
|
|
#endif /* RULERALSO */
|
|
|
|
int flashID = 0; /* timer ID for flashing before we put up a messagebox when we are not the active app */
|
|
|
|
|
|
|
|
/*-----------------------------------------------------*/
|
|
/* Merged MGLOBALS.C and MGLOBALS2.C ..pault 10/26/89 */
|
|
/*-----------------------------------------------------*/
|
|
|
|
|
|
/* internal memory stuff */
|
|
int *memory; /* ptr to beginning of free space, get incremented after
|
|
allocating chunks from memory */
|
|
#ifdef OURHEAP
|
|
int *pmemMax;/* ptr to max of memory */
|
|
CHAR * pmemStart; /* point to start of memory after global data */
|
|
unsigned vcbMemTotal; /* total number of free memory bytes */
|
|
unsigned cbTotQuotient;/* for calculating % of free space */
|
|
unsigned cbTot; /* for calculating % of free space */
|
|
#endif
|
|
unsigned cwHeapFree; /* number of free heap space in words */
|
|
|
|
/* MS-WINDOWS related variables */
|
|
|
|
HWND hParentWw = NULL; /* handle to parent ww (created in
|
|
interface module) */
|
|
HANDLE hMmwModInstance = NULL; /* handle to memory module instance */
|
|
HANDLE vhReservedSpace; /* space reserved for control manger */
|
|
long rgbBkgrnd = -1L; /* rgb color of the background */
|
|
long rgbText = -1L; /* rgb color of the text */
|
|
HBRUSH hbrBkgrnd = NULL; /* handle to background brush */
|
|
long ropErase = WHITENESS; /* raster op to erase the screen */
|
|
BOOL vfMonochrome = FALSE; /* TRUE iff display is monochrome */
|
|
|
|
HMENU vhMenu = NULL; /* handle to top level menu */
|
|
|
|
CHAR *vpDlgBuf; /* pointer to buffer for dialog boxes */
|
|
|
|
#ifdef INEFFLOCKDOWN /* SEE NOTE IN FINITFARPROCS() */
|
|
/* far pointers to dialog functions exported to WINDOWS */
|
|
FARPROC lpDialogOpen;
|
|
FARPROC lpDialogSaveAs;
|
|
FARPROC lpDialogPrinterSetup;
|
|
FARPROC lpDialogPrint;
|
|
FARPROC lpDialogCancelPrint;
|
|
FARPROC lpDialogRepaginate;
|
|
FARPROC lpDialogSetPage;
|
|
FARPROC lpDialogPageMark;
|
|
FARPROC lpDialogHelp;
|
|
|
|
#ifdef ONLINEHELP
|
|
FARPROC lpDialogHelpInner;
|
|
#endif /* ONLINEHELP */
|
|
|
|
FARPROC lpDialogGoTo;
|
|
FARPROC lpDialogFind;
|
|
FARPROC lpDialogChange;
|
|
FARPROC lpDialogCharFormats;
|
|
FARPROC lpDialogParaFormats;
|
|
FARPROC lpDialogRunningHead;
|
|
FARPROC lpDialogTabs;
|
|
FARPROC lpDialogDivision;
|
|
FARPROC lpDialogAlert;
|
|
FARPROC lpDialogConfirm;
|
|
FARPROC lpFontFaceEnum;
|
|
FARPROC lpFPrContinue;
|
|
FARPROC lpDialogWordCvt;
|
|
#endif /* ifdef INEFFLOCKDOWN */
|
|
|
|
/* Mouse status flags and cursors */
|
|
int vfDoubleClick = FALSE; /* whether click is double click */
|
|
HCURSOR vhcHourGlass; /* handle to hour glass cursor */
|
|
HCURSOR vhcIBeam; /* handle to i-beam cursor */
|
|
HCURSOR vhcArrow; /* handle to arrow cursor */
|
|
HCURSOR vhcBarCur; /* handle to back arrow cursor */
|
|
|
|
#ifdef PENWIN // for PenWindows (5/21/91) patlam
|
|
#include <penwin.h>
|
|
HCURSOR vhcPen; /* handle to pen cursor */
|
|
int (FAR PASCAL *lpfnProcessWriting)(HWND, LPRC) = NULL;
|
|
VOID (FAR PASCAL *lpfnPostVirtualKeyEvent)(WORD, BOOL) = NULL;
|
|
VOID (FAR PASCAL *lpfnTPtoDP)(LPPOINT, int) = NULL;
|
|
BOOL (FAR PASCAL *lpfnCorrectWriting)(HWND, LPSTR, int, LPRC, DWORD, DWORD) = NULL;
|
|
BOOL (FAR PASCAL *lpfnSymbolToCharacter)(LPSYV, int, LPSTR, LPINT) = NULL;
|
|
#endif
|
|
|
|
/* MS-WINDOWS stuff */
|
|
HANDLE vhSysMenu;
|
|
HDC vhMDC = NULL; /* memory DC compatible with the screen */
|
|
int dxpbmMDC = 0; /* width of the bitmap attatched to vhMDC */
|
|
int dypbmMDC = 0; /* height of the bitmap attatched to vhMDC */
|
|
HBITMAP hbmNull; /* handle to an empty bitmap */
|
|
HDC vhDCPrinter = NULL; /* DC for the printer */
|
|
HWND vhWnd; /* handle to document window */
|
|
HANDLE vhAccel; /* handle to menu key accelerator table */
|
|
|
|
/* modeless dialog handles */
|
|
HWND vhDlgRunningHead = (HWND)NULL;
|
|
HWND vhDlgFind = (HWND)NULL;
|
|
/* handle to modeless Find dialog box */
|
|
HWND vhDlgChange = (HWND)NULL;
|
|
/* handle to modeless Change dialog box */
|
|
|
|
HWND vhWndRuler = (HWND)NULL;
|
|
HWND vhWndCancelPrint = (HWND)NULL;
|
|
/* handle to modeless Cancel Print dialog box */
|
|
#ifndef NOMORESIZEBOX
|
|
HWND vhWndSizeBox; /* handle to the size box */
|
|
#endif
|
|
HWND vhWndPageInfo; /* handle to the page info window */
|
|
HWND vhWndMsgBoxParent = (HWND)NULL; /* parent of the message box */
|
|
|
|
int vfSkipNextBlink = FALSE;
|
|
/* skip next timed off-transition of caret */
|
|
int vfFocus = FALSE; /* Whether we have the input focus */
|
|
int vfOwnClipboard = FALSE;
|
|
/* Whether we are the owner of the clipboard */
|
|
MSG vmsgLast; /* last message received */
|
|
|
|
HFONT vhfPageInfo = NULL; /* handle to the font for the page info */
|
|
int ypszPageInfo; /* y position in window to write page info */
|
|
|
|
/* font related variables */
|
|
int vifceMac = ifceMax;
|
|
union FCID vfcidScreen;
|
|
union FCID vfcidPrint;
|
|
struct FCE rgfce[ifceMax];
|
|
struct FCE *vpfceMru;
|
|
struct FCE *vpfceScreen;
|
|
struct FCE *vpfcePrint;
|
|
struct FMI vfmiScreen;
|
|
struct FMI vfmiPrint;
|
|
|
|
#ifndef NEWFONTENUM
|
|
int aspectXFont;
|
|
int aspectYFont;
|
|
#endif
|
|
|
|
|
|
#ifdef SYSENDMARK
|
|
HFONT vhfSystem = NULL; /* handle to the standard system font for
|
|
chEMark. */
|
|
struct FMI vfmiSysScreen; /* to keep the metrics info for the system
|
|
font. */
|
|
int vrgdxpSysScreen[chFmiMax - chFmiMin];
|
|
/* Used by vfmiSysScreen. */
|
|
#endif /* KANJI */
|
|
|
|
#if defined(JAPAN) || defined(KOREA) /*t-Yoshio*/
|
|
unsigned char Zenstr1[256];
|
|
unsigned char Zenstr2[256];
|
|
#endif
|