/************************************************************/
/* 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 */
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];
CHAR szAppName[10]; /* For message box headings */
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;
/* 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)[];
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;
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 */