383 lines
9.4 KiB
C
383 lines
9.4 KiB
C
|
/************************************************************/
|
|||
|
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
|
|||
|
/************************************************************/
|
|||
|
|
|||
|
/* chlook.c -- modify format from the keyboard or directly from dropdown */
|
|||
|
#define NOCLIPBOARD
|
|||
|
#define NOCTLMGR
|
|||
|
#define NOGDICAPMASKS
|
|||
|
#define NOWINSTYLES
|
|||
|
#define NOWINMESSAGES
|
|||
|
#define NOVIRTUALKEYCODES
|
|||
|
|
|||
|
#include <windows.h>
|
|||
|
#include "mw.h"
|
|||
|
#include "cmddefs.h"
|
|||
|
#include "editdefs.h"
|
|||
|
#include "str.h"
|
|||
|
#include "prmdefs.h"
|
|||
|
#include "propdefs.h"
|
|||
|
#include "filedefs.h"
|
|||
|
#include "dispdefs.h"
|
|||
|
#include "menudefs.h"
|
|||
|
|
|||
|
/* E X T E R N A L S */
|
|||
|
extern HMENU vhMenu;
|
|||
|
extern int vfVisiMode;
|
|||
|
extern int vfInsLast;
|
|||
|
extern int vfSeeSel;
|
|||
|
extern int fGrayChar;
|
|||
|
extern struct UAB vuab;
|
|||
|
#ifdef ENABLE /* myMenus and mpifntfont not used */
|
|||
|
extern MENUHANDLE myMenus[];
|
|||
|
extern int mpifntfont[];
|
|||
|
#endif
|
|||
|
extern int vifntMac;
|
|||
|
extern int vifntApplication;
|
|||
|
|
|||
|
#define keyDownMask 8
|
|||
|
|
|||
|
CHAR rgbAgain[1 + cchINT]; /* holds last sprm with value for Again key */
|
|||
|
|
|||
|
/* D O C H L O O K */
|
|||
|
/* decode ch and apply looks to pchp (or to current sel if pchp == 0) */
|
|||
|
DoChLook(ch, pchp)
|
|||
|
int ch;
|
|||
|
struct CHP *pchp;
|
|||
|
{
|
|||
|
#ifdef ENABLE /* DoChLook not implemented yet */
|
|||
|
typeCP cpFirst, cpLim;
|
|||
|
int val;
|
|||
|
int sprm;
|
|||
|
int enbSave;
|
|||
|
|
|||
|
vfSeeSel = vfInsLast = fTrue;
|
|||
|
if (ch == chAgain)
|
|||
|
{
|
|||
|
AddOneSprm(rgbAgain, fTrue);
|
|||
|
vuab.uac = uacChLook;
|
|||
|
SetUndoMenuStr(IDSTRUndoLook);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
val = fTrue;
|
|||
|
switch(ChUpper(ch & 0377))
|
|||
|
{
|
|||
|
default:
|
|||
|
/*---- Error(IDPMTBadLook);----*/
|
|||
|
beep();
|
|||
|
return;
|
|||
|
case chLookStd & 0377:
|
|||
|
sprm = sprmCPlain;
|
|||
|
val = stcNormal;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookItalic & 0377:
|
|||
|
sprm = sprmCItalic;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookBold & 0377:
|
|||
|
sprm = sprmCBold;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookUline & 0377:
|
|||
|
sprm = sprmCUline;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookShadow & 0377:
|
|||
|
sprm = sprmCShadow;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookOutline & 0377:
|
|||
|
sprm = sprmCOutline;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookSuper & 0377:
|
|||
|
sprm = sprmCPos;
|
|||
|
val = ypSubSuper;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookSub & 0377:
|
|||
|
sprm = sprmCPos;
|
|||
|
val = -ypSubSuper;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookSmCaps & 0377:
|
|||
|
sprm = sprmCCsm;
|
|||
|
val = csmSmallCaps;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookHpsBig & 0377:
|
|||
|
sprm = sprmCChgHps;
|
|||
|
val = 1;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookHpsSmall & 0377:
|
|||
|
sprm = sprmCChgHps;
|
|||
|
val = -1;
|
|||
|
goto LApplyCLook;
|
|||
|
case chLookFont & 0377:
|
|||
|
/* Disable eject disk/ print image key handlers */
|
|||
|
#define SCRDMPENB (0x2f8L)
|
|||
|
enbSave = LDBI(SCRDMPENB);
|
|||
|
STBI(0, SCRDMPENB);
|
|||
|
ch = ChInpWait();
|
|||
|
STBI(enbSave, SCRDMPENB);
|
|||
|
if (ch < '0' || ch > '9')
|
|||
|
{
|
|||
|
/*---- Error(IDPMTBadLook);----*/
|
|||
|
beep();
|
|||
|
return;
|
|||
|
}
|
|||
|
sprm = sprmCChgFtc;
|
|||
|
val = ch - '0';
|
|||
|
/* Map from font index to system font code */
|
|||
|
val = val >= vifntMac ? vifntApplication & 0377: mpifntfont[val];
|
|||
|
goto LApplyCLook;
|
|||
|
|
|||
|
/* Paragraph looks */
|
|||
|
case chLookGeneral & 0377:
|
|||
|
sprm = sprmPNormal;
|
|||
|
/*val = 0;*/
|
|||
|
break;
|
|||
|
case chLookLeft & 0377:
|
|||
|
sprm = sprmPJc;
|
|||
|
val = jcLeft;
|
|||
|
break;
|
|||
|
case chLookRight & 0377:
|
|||
|
sprm = sprmPJc;
|
|||
|
val = jcRight;
|
|||
|
break;
|
|||
|
case chLookJust & 0377:
|
|||
|
sprm = sprmPJc;
|
|||
|
val = jcBoth;
|
|||
|
break;
|
|||
|
case chLookCenter & 0377:
|
|||
|
sprm = sprmPJc;
|
|||
|
val = jcCenter;
|
|||
|
break;
|
|||
|
case chLookIndent & 0377:
|
|||
|
val = czaInch/2;
|
|||
|
sprm = sprmPFIndent;
|
|||
|
goto LApplyPLook;
|
|||
|
case chLookDouble & 0377:
|
|||
|
val = czaLine * 2;
|
|||
|
sprm = sprmPDyaLine;
|
|||
|
goto LApplyPLook;
|
|||
|
case chLookOpen & 0377:
|
|||
|
val = czaLine;
|
|||
|
sprm = sprmPDyaBefore;
|
|||
|
goto LApplyPLook;
|
|||
|
case chLookNest & 0377:
|
|||
|
sprm = sprmPNest;
|
|||
|
/*val = 0;*/
|
|||
|
break;
|
|||
|
case chLookUnNest & 0377:
|
|||
|
sprm = sprmPUnNest;
|
|||
|
/*val = 0;*/
|
|||
|
break;
|
|||
|
case chLookHang & 0377:
|
|||
|
sprm = sprmPHang;
|
|||
|
/*val = 0;*/
|
|||
|
break;
|
|||
|
}
|
|||
|
/* apply look with 1 char value */
|
|||
|
ApplyLooksParaS(pchp, sprm, val);
|
|||
|
return;
|
|||
|
/* apply look with cchInt char value */
|
|||
|
LApplyPLook:
|
|||
|
ApplyLooksPara(pchp, sprm, val);
|
|||
|
return;
|
|||
|
|
|||
|
LApplyCLook:
|
|||
|
ApplyCLooks(pchp, sprm, val);
|
|||
|
return;
|
|||
|
#endif /* ENABLE */
|
|||
|
}
|
|||
|
|
|||
|
/* A P P L Y C L O O K S */
|
|||
|
/* character looks. val is a 1 char value */
|
|||
|
ApplyCLooks(pchp, sprm, val)
|
|||
|
struct CHP *pchp;
|
|||
|
int sprm, val;
|
|||
|
{
|
|||
|
/* Assemble sprm */
|
|||
|
CHAR *pch = rgbAgain;
|
|||
|
*pch++ = sprm;
|
|||
|
*pch = val;
|
|||
|
|
|||
|
if (pchp == 0)
|
|||
|
{
|
|||
|
/* apply looks to current selection */
|
|||
|
AddOneSprm(rgbAgain, fTrue);
|
|||
|
vuab.uac = uacChLook;
|
|||
|
SetUndoMenuStr(IDSTRUndoLook);
|
|||
|
}
|
|||
|
else
|
|||
|
/* apply looks to pchp */
|
|||
|
DoSprm(pchp, 0, sprm, pch);
|
|||
|
}
|
|||
|
|
|||
|
/* A P P L Y L O O K S P A R A S */
|
|||
|
/* val is a char value */
|
|||
|
ApplyLooksParaS(pchp, sprm, val)
|
|||
|
struct CHP *pchp;
|
|||
|
int sprm, val;
|
|||
|
{
|
|||
|
int valT = 0;
|
|||
|
CHAR *pch = (CHAR *)&valT;
|
|||
|
*pch = val;
|
|||
|
/* all the above is just to prepare bltbyte later gets the right byte order */
|
|||
|
ApplyLooksPara(pchp, sprm, valT);
|
|||
|
}
|
|||
|
|
|||
|
/* A P P L Y L O O K S P A R A */
|
|||
|
/* val is an integer value. Char val's must have been bltbyte'd into val */
|
|||
|
ApplyLooksPara(pchp, sprm, val)
|
|||
|
struct CHP *pchp;
|
|||
|
int sprm, val;
|
|||
|
{
|
|||
|
|
|||
|
#ifdef ENABLE /* related to footnote */
|
|||
|
if (FWriteCk(fwcNil)) /* Just check for illegal action in footnote */
|
|||
|
#endif
|
|||
|
{
|
|||
|
/* set Again stuff since we may have been called from the menu */
|
|||
|
CHAR *pch = rgbAgain;
|
|||
|
*pch++ = sprm;
|
|||
|
bltbyte(&val, pch, cchINT);
|
|||
|
AddOneSprm(rgbAgain, fTrue);
|
|||
|
vuab.uac = uacChLook;
|
|||
|
SetUndoMenuStr(IDSTRUndoLook);
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#ifdef ENABLE /* fnChar/fnPara */
|
|||
|
/* F N C H A R P L A I N */
|
|||
|
void fnCharPlain()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCPlain, 0);
|
|||
|
}
|
|||
|
|
|||
|
/* F N C H A R B O L D */
|
|||
|
void fnCharBold()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCBold, FMenuUnchecked(imiBold));
|
|||
|
}
|
|||
|
|
|||
|
void fnCharItalic()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCItalic, FMenuUnchecked(imiItalic));
|
|||
|
}
|
|||
|
|
|||
|
void fnCharUnderline()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCUline, FMenuUnchecked(imiUnderline));
|
|||
|
}
|
|||
|
|
|||
|
void fnCharSuperscript()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCPos, FMenuUnchecked(imiSuper) ? ypSubSuper : 0);
|
|||
|
}
|
|||
|
|
|||
|
void fnCharSubscript()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCPos, FMenuUnchecked(imiSub) ? -ypSubSuper : 0);
|
|||
|
}
|
|||
|
|
|||
|
void fnParaNormal()
|
|||
|
{
|
|||
|
extern int vfPictSel;
|
|||
|
|
|||
|
ApplyLooksParaS(0, sprmPNormal, 0);
|
|||
|
if (vfPictSel)
|
|||
|
CmdUnscalePic();
|
|||
|
}
|
|||
|
|
|||
|
void fnParaLeft()
|
|||
|
{
|
|||
|
ApplyLooksParaS(0, sprmPJc, jcLeft);
|
|||
|
}
|
|||
|
|
|||
|
void fnParaCentered()
|
|||
|
{
|
|||
|
ApplyLooksParaS(0, sprmPJc, jcCenter);
|
|||
|
}
|
|||
|
|
|||
|
void fnParaRight()
|
|||
|
{
|
|||
|
ApplyLooksParaS(0, sprmPJc, jcRight);
|
|||
|
}
|
|||
|
|
|||
|
void fnParaJustified()
|
|||
|
{
|
|||
|
ApplyLooksParaS(0, sprmPJc, jcBoth);
|
|||
|
}
|
|||
|
|
|||
|
void fnParaOneandhalfspace()
|
|||
|
{
|
|||
|
ApplyLooksPara(0, sprmPDyaLine, czaLine * 3 / 2);
|
|||
|
}
|
|||
|
|
|||
|
void fnParaDoublespace()
|
|||
|
{
|
|||
|
ApplyLooksPara(0, sprmPDyaLine, czaLine * 2);
|
|||
|
}
|
|||
|
|
|||
|
void fnParaSinglespace()
|
|||
|
{
|
|||
|
ApplyLooksPara(0, sprmPDyaLine, czaLine);
|
|||
|
}
|
|||
|
|
|||
|
int
|
|||
|
FMenuUnchecked(imi)
|
|||
|
int imi;
|
|||
|
{ /* Return true if there is NO check mark in front of menu */
|
|||
|
int flag;
|
|||
|
|
|||
|
if (fGrayChar)
|
|||
|
return true;
|
|||
|
flag = CheckMenuItem(vhMenu, imi, MF_CHECKED);
|
|||
|
CheckMenuItem(vhMenu, imi, flag); /* back to original status */
|
|||
|
return(flag == MF_UNCHECKED ? true : false);
|
|||
|
|
|||
|
#ifdef SAND
|
|||
|
GetItemMark(myMenus[CHARACTER - 1], imi, &ch);
|
|||
|
/***** WRONG COMMENT BELOW! *****/
|
|||
|
return (ch != 18); /* Return true is there is a check mark in front of menu */
|
|||
|
#endif /* SAND */
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
int ChInpWait()
|
|||
|
{
|
|||
|
#ifdef ENABLE /* CpInpWait not implemented yet */
|
|||
|
EVENT event;
|
|||
|
int i;
|
|||
|
for (i = 0; i < 15000; i++)
|
|||
|
{
|
|||
|
if(GetNextEvent(keyDownMask, &event))
|
|||
|
return (event.message.wl & 0x007f);
|
|||
|
}
|
|||
|
return -1; /* Will cause a beep if the user times out */
|
|||
|
#endif /* ENABLE */
|
|||
|
}
|
|||
|
|
|||
|
#ifdef CASHMERE /* smcap, overstrike, dbline, open para, visible mode */
|
|||
|
fnCharSmallcaps()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCCsm, FMenuUnchecked(7) ? csmSmallCaps : csmNormal);
|
|||
|
}
|
|||
|
fnCharOutline()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCOutline, FMenuUnchecked(5));
|
|||
|
}
|
|||
|
|
|||
|
fnCharShadow()
|
|||
|
{
|
|||
|
ApplyCLooks(0, sprmCShadow, FMenuUnchecked(6));
|
|||
|
}
|
|||
|
fnParaOpenspace()
|
|||
|
{
|
|||
|
ApplyLooksPara(0, sprmPDyaBefore, czaLine);
|
|||
|
}
|
|||
|
fnVisiMode()
|
|||
|
{
|
|||
|
vfVisiMode = !vfVisiMode;
|
|||
|
TrashAllWws();
|
|||
|
}
|
|||
|
#endif /* CASHMERE */
|
|||
|
|