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 */
|
||
|