156 lines
3 KiB
C
156 lines
3 KiB
C
|
/************************************************************/
|
|||
|
/* Windows Write, Copyright 1985-1992 Microsoft Corporation */
|
|||
|
/************************************************************/
|
|||
|
|
|||
|
/* loadfnt2.c - MW font support code */
|
|||
|
|
|||
|
#define NOWINMESSAGES
|
|||
|
#define NOVIRTUALKEYCODES
|
|||
|
#define NOSYSMETRICS
|
|||
|
#define NOMENUS
|
|||
|
#define NOWINSTYLES
|
|||
|
#define NOCTLMGR
|
|||
|
#define NOCLIPBOARD
|
|||
|
#include <windows.h>
|
|||
|
|
|||
|
#include "mw.h"
|
|||
|
#include "macro.h"
|
|||
|
#define NOUAC
|
|||
|
#include "cmddefs.h"
|
|||
|
#include "fontdefs.h"
|
|||
|
#include "docdefs.h"
|
|||
|
|
|||
|
|
|||
|
extern int vifceMac;
|
|||
|
extern union FCID vfcidScreen;
|
|||
|
extern union FCID vfcidPrint;
|
|||
|
extern struct FCE rgfce[ifceMax];
|
|||
|
extern struct FCE *vpfceMru;
|
|||
|
extern struct FCE *vpfceScreen;
|
|||
|
extern struct FCE *vpfcePrint;
|
|||
|
extern struct DOD (**hpdocdod)[];
|
|||
|
|
|||
|
|
|||
|
struct FCE * (PfceLruGet(void));
|
|||
|
struct FCE * (PfceFcidScan(union FCID *));
|
|||
|
|
|||
|
|
|||
|
struct FCE * (PfceLruGet())
|
|||
|
/* tosses out the LRU cache entry's information */
|
|||
|
|
|||
|
{
|
|||
|
struct FCE *pfce;
|
|||
|
|
|||
|
pfce = vpfceMru->pfcePrev;
|
|||
|
FreePfce(pfce);
|
|||
|
return(pfce);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
FreePfce(pfce)
|
|||
|
/* frees the font objects for this cache entry */
|
|||
|
struct FCE *pfce;
|
|||
|
|
|||
|
{
|
|||
|
int ifce;
|
|||
|
HFONT hfont;
|
|||
|
|
|||
|
if (pfce->fcidRequest.lFcid != fcidNil)
|
|||
|
{
|
|||
|
hfont = pfce->hfont;
|
|||
|
|
|||
|
/* see if we're about to toss the screen or printer's current font */
|
|||
|
if (pfce == vpfceScreen)
|
|||
|
{
|
|||
|
ResetFont(FALSE);
|
|||
|
}
|
|||
|
else if (pfce == vpfcePrint)
|
|||
|
{
|
|||
|
ResetFont(TRUE);
|
|||
|
}
|
|||
|
|
|||
|
#ifdef DFONT
|
|||
|
CommSzNum("Deleting font: ", hfont);
|
|||
|
#endif /* DFONT */
|
|||
|
|
|||
|
if (hfont != NULL)
|
|||
|
{
|
|||
|
DeleteObject(hfont);
|
|||
|
pfce->hfont = NULL;
|
|||
|
}
|
|||
|
|
|||
|
if (pfce->hffn != 0)
|
|||
|
{
|
|||
|
FreeH(pfce->hffn);
|
|||
|
}
|
|||
|
|
|||
|
pfce->fcidRequest.lFcid = fcidNil;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
FreeFonts(fScreen, fPrinter)
|
|||
|
/* frees up the font objects for the screen, and the printer */
|
|||
|
|
|||
|
int fScreen, fPrinter;
|
|||
|
{
|
|||
|
int ifce, bit;
|
|||
|
|
|||
|
for (ifce = 0; ifce < vifceMac; ifce++)
|
|||
|
{
|
|||
|
bit = (rgfce[ifce].fcidRequest.strFcid.wFcid & bitPrintFcid) != 0;
|
|||
|
if (bit && fPrinter || !bit && fScreen)
|
|||
|
FreePfce(&rgfce[ifce]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
struct FCE * (PfceFcidScan(pfcid))
|
|||
|
union FCID *pfcid;
|
|||
|
|
|||
|
/* look for this font the "hard way" in the LRU list */
|
|||
|
{
|
|||
|
struct FFN **hffn, **hffnT;
|
|||
|
register struct FCE *pfce;
|
|||
|
struct FFN **MpFcidHffn();
|
|||
|
|
|||
|
hffn = MpFcidHffn(pfcid);
|
|||
|
pfce = vpfceMru;
|
|||
|
do
|
|||
|
{
|
|||
|
hffnT = pfce->hffn;
|
|||
|
if (hffnT != NULL)
|
|||
|
if (WCompSz((*hffn)->szFfn, (*hffnT)->szFfn) == 0 &&
|
|||
|
pfcid->strFcid.hps == pfce->fcidRequest.strFcid.hps &&
|
|||
|
pfcid->strFcid.wFcid == pfce->fcidRequest.strFcid.wFcid)
|
|||
|
{
|
|||
|
pfce->fcidRequest.strFcid.doc = pfcid->strFcid.doc;
|
|||
|
pfce->fcidRequest.strFcid.ftc = pfcid->strFcid.ftc;
|
|||
|
return(pfce);
|
|||
|
}
|
|||
|
pfce = pfce->pfceNext;
|
|||
|
}
|
|||
|
while (pfce != vpfceMru);
|
|||
|
|
|||
|
return(NULL);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
struct FFN **MpFcidHffn(pfcid)
|
|||
|
/* makes sure we use a font code that exists in the table - this is insurance
|
|||
|
against out of memory problems */
|
|||
|
|
|||
|
union FCID *pfcid;
|
|||
|
{
|
|||
|
int ftc;
|
|||
|
struct FFNTB **hffntb;
|
|||
|
|
|||
|
ftc = pfcid->strFcid.ftc;
|
|||
|
hffntb = HffntbGet(pfcid->strFcid.doc);
|
|||
|
if (ftc >= (*hffntb)->iffnMac)
|
|||
|
ftc = 0;
|
|||
|
|
|||
|
return((*hffntb)->mpftchffn[ftc]);
|
|||
|
}
|
|||
|
|