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