mac-rom/Toolbox/FontMgr/Bass_Cache.h

458 lines
18 KiB
C
Raw Normal View History

/*
File: Bass_Cache.h
Contains: This is the main define file for the Bass caching mechanism.
Written by: Charlton E. Lui
Date: May 8, 1988
Revision: 1.0
Copyright: <EFBFBD> 1988-1992 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<9> 8/28/92 DCL Fixed enums with commas before the closing brace. MPW now
complains.
<8> 5/4/92 DTY There really was a good reason for me to stick fondCache in the
middle of SplineKey, honest! But since I don<EFBFBD>t remember what it
is, I<EFBFBD>m moving it to the end of the structure to keep existing
offsets the same.
<7> 11/15/91 DTY Remember which resource map a font was loaded from.
<6> 10/11/91 DTY Building the candidate FOND list takes too long. Cache two lists
in SplineKey.
<5> 9/25/91 jlf Rolled in modifications from Pacific TrueType project:
Added prototypes for routines used by the partial font,
disk caching, and international support routines. Added
typedef for the memory manager purge procedure. Added
fSplineDirectory field to the WidthTable structure - the
spline directory of a TrueType font is now appended to it's
global width table for partial font support. Added
fEncodingTablePointer and fScriptNumber fields to the
sb_CacheHead structure for international support.
<4> 5/23/91 dba take out second copy of ZoneHandleOptions
<3> 1/9/91 RB (CEL/PKE/GM/DA) Added in safeCount variable to splineKey globals
to fix the long string bug caused in stdtxmeas overflow.
<2> 10/22/90 CL (BKR) Adding support for minimum memory mode to band and run in
low cache conditions.
<20> 10/9/90 CL Added support for preflight routine.
<19> 10/8/90 CL Adding loadSpline flag to the widthTable
<18> 10/1/90 CL Adding in memoryPatch vector for memory manager fix on the
growzone.
<17> 9/27/90 CL Made INITIAL_CHAR_COUNT start out smaller and increment cache
increases by a smaller amount.
<16> 9/24/90 CL Added FM data to the cacheheader.
<15> 9/20/90 CL Adding shrink options for the memory calls.
<14> 9/16/90 CL Cleaned up splinekeyRec<EFBFBD> Got rid of disk cache defines.
Added in heap defines into splineKey. Added mfExists flag.
Took out old prototypes.
<13> 8/29/90 CL Added cachezone to splinekey
<12> 8/28/90 MR Add bitmapzone to splinekey
<11> 8/20/90 MR Change CacheListHandle to handle of CacheReference {Handle and
zone} and add fsWorkZone. Both changes record the zone a
multiheap object lives in.
<10> 8/1/90 gbm changes here to fix warnings in Bass_Cache.c
<9> 7/18/90 MR Conditionalize typedef of transformMatrix and remove
redeclaration of FMOutput
<8> 7/16/90 CL Adding a vector for after cleaning up the cache.
<7> 6/29/90 CL Doing work<EFBFBD>
<7> 6/20/90 CL Added INCREASE_CACHE constant for the caching code.
<6> 5/29/90 CL Took out cache references from the width table.
<5> 5/3/90 CL Added new support for new memory area for scan converter.
and encryption.
<4> 4/10/90 CL Added in support for double byte codes. Work on disk caching.
Fixed retrieval masks.
<3> 3/20/90 CL Adding disk cache<EFBFBD> Support for tag format
<2> 2/27/90 CL Added in lots of support for optimizations of DrText.
<1.7> 11/15/89 CEL Moved WidthTabTempHandle up.
<1.6> 11/14/89 CEL Added device metrics. Added squash capabilities.
<1.5> 9/25/89 CEL Added in boolean param for sb_FillWidthTab.
<1.4> 9/15/89 CEL Took out the tempAscent and tempDescent vars in splinekey.
<1.3> 8/28/89 CEL Using transform matrix in widthtable and splinekeyrec instead of
numer and denom.
<1.2> 8/14/89 CEL Added some vars for mfexists & machinetype. These are used for
mem checks. Added in extra handle for temp memory that is not in
system heap. Updated widthtable to include encryption var.
<1.1> 8/1/89 CEL Fixed EASE<EFBFBD>s <EFBFBD>C<EFBFBD> comment brackets. On check in they were wrong!
<1.0> 8/1/89 CEL Adding into Bass build for the first time<EFBFBD>
<1.5> 6/12/89 CEL Re-Structured sp_Glyph data. Got rid of some unnecessary
constants.
<1.4> 6/12/89 CEL Needed extra check for sfnt state (face)<EFBFBD>
<1.3> 5/26/89 CEL Integrated the new Font Scaler 1.0 into Spline Fonts
<1.2> 5/3/89 CEL Comment brackets were previously messed up from override
<<EFBFBD>1.1> 5/3/89 CEL All kinks worked out, Blasting in bass files<EFBFBD>
<1.0> 5/2/89 CEL Rolling in Bass for first time<EFBFBD>
To Do:
*/
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Expandmem Define
*/
#define EXPAND_MEM_PTR (*(long *) 0x02B6)
#define SPLINE_KEY_HAND (*(sb_SplineKeyHdl **) ((char *)EXPAND_MEM_PTR + 0x0068))
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WidthListHandle
*/
#define FMOUTPUT_PTR (*(Ptr *) 0x0998)
#define WIDTH_LISTHANDLE (*(Handle **) 0x08E4)
#define WIDTH_TABNUM 12 /* Currently there are 12 width tables. If this should */
/* change then change this also */
#define LASTSPEXTRA 0x0B4C
#define HILITEMODE 0x0938
#define PRESERVE_GLYPH 0x10
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Resource Manager low mem
*/
#define TopMapHndl (*(long *) 0x0A50) /* topmost map in list [handle] */
#define SysMapHndl (*(long *) 0x0A54) /* system map [handle] */
#define SysMap (*(short *) 0x0A58) /* reference number of system map [word] */
#define CurMap (*(short *) 0x0A5A) /* reference number of current map [word] */
#define UPDATE_RESOURCE_COUNT 20 /* Write resource when number of new entries equal */
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDEFS
*/
#ifndef int16
#define int16 short
#endif
#ifndef uint16
#define uint16 unsigned short
#endif
#ifndef int32
#define int32 int
#endif
#ifndef uint32
#define uint32 unsigned long
#endif
#ifndef Fixed
#define Fixed long
#endif
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MACROS
*/
#define MAKE_EVEN( n ) if ( n & 1 ) n++
#define GetByte( p ) *(((char *)p)++)
#define GetAlignedWord( p ) *(((short *)p)++)
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Transform struct
*/
#define OBLIQUE_BIT 2
#define OUTLINE_BIT 8
#define SHADOW_BIT 16
#define HEIGHT 3
#define WIDTH 3
#ifndef transformMatrix
typedef struct {
Fixed transform[HEIGHT][WIDTH];
} transformMatrix;
#endif
#define POINTSPERINCH 72
#define INITIAL_BITMAP_SIZE 256
#define MULTI_ZONE_FLAG 0xFFFFFFFF
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CACHE DEFINES
*/
#define MAX_PPEM_CACHED 127
#define CONTOUR_ENTRY_BIT 0x80000000
#define ERROR_ENTRY_BIT 0xC0000000
#define ENTRY_MASK 0x3FFFFFFF
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NEW CACHE
*/
#define INITIAL_CACHES 5 /* Amount of allowed caches at once */
#define GROW_CACHE_NUM 5 /* Amount of allowed caches at once */
#define INITIAL_CHAR_COUNT 10 /* Amount of initial characters to alloc for */
#define ADD_CHAR_NUM 10 /* Add the character numbers */
#define INCREASE_CACHE 256 /* Amount to increase cache */
#define GLYPH_COUNT 256 /* Number of possible entries into cache */
#define AVG_CONTOUR_SIZE 400 /* Say 600 bytes for average contour */
#define EMPTY 0 /* Empty cell */
#define ADD_ENTRY_COUNT 128 /* Number of entries to add to cache */
#define SKIP_ENTRY_COUNT 1 /* Number of entries to skip on collision */
#define FULL_ENTRY_PERCENT 60 /* Percentage of entries used in full table */
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
$$$ CHANGE ASSEMBLY IF BELOW IS MODIFIED $$$
For QuickDraw - DrawText.a
*/
typedef struct {
uint16 StrikeID; /* character to blit */
uint16 glyphID; /* Code of Glyph */
uint16 ptSize; /* Size of character */
uint16 destDepth; /* Depth of device */
Boolean clipVert; /* Vertical character clip flag */
Boolean clipHorz; /* Horizontal character clip flag */
int16 botClip; /* bottom clip off baseline */
int16 topClip; /* top clip off baseline */
int16 yMin; /* Y min off baseline */
int16 yMax; /* Y max off baseline */
Fixed lsb; /* Left side bearing */
short devLSB; /* Device Left side bearing */
int16 scan; /* # of scan lines */
int16 bandScan; /* size of band for next band */
int16 nextBotBand; /* next bot character band */
int16 nextTopBand; /* next top character band */
Boolean nextBand; /* Another character band? */
Boolean FILLBYTE; /* */
long entryOffset; /* entry offset */
uint16 bitWidth; /* glyph bit width */
uint32 byteWidth; /* row bytes of character */
uint32 *bitMapPtr; /* Points to the BitMap */
uint32 bufStart; /* Start of destination bits buffer */
} sb_Glyph;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
$$$ UPDATE THE ASSEMBLY WHEN CHANGING THIS $$$
BitMap Header
*/
typedef struct {
short yMin; /* Y min off baseline to place BitMap */
short yMax; /* Y max off baseline */
long lsb; /* Left side bearing */
short devLSB; /* Device left side bearing */
short adjustTop; /* Adjust this char from ascent */
short rError; /* Error in case of huge size || bad font */
short bitWidth; /* Width of char bits */
long byteWidth; /* number of byte width */
short xMin; /* Save xMin and also use to calc xMax */
short scan; /* # of scan lines */
short scanByteWidth; /* actual need byteWidth for scan converter */
uint16 glyphID; /* id of glyph */
/** DO NOT PLACE ANYTHING AT END, THIS IS DATA TERRITORY **/
long cacheData[]; /* Data starts here */
} sb_GlyphData;
#define GLYPH_HEAD_BYTES ((sizeof(sb_GlyphData) + 3) & ~3)
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
$$$ UPDATE THE ASSEMBLY WHEN CHANGING THIS $$$
CACHE HEADER
*/
typedef struct {
/* Match the font with these */
short StrikeID; /* id of sfnt */
short ptSize; /* point size */
short face; /* style of request */
short newEntries; /* Number of new entries added */
long trans00; /* transform for x */
long trans11; /* transform for y */
long trans10; /* transform for skew */
Fixed ascent; /* Ascent of the font */
Fixed descent; /* Descent of the font */
Fixed widMax; /* Widmax of the Font */
Fixed leading; /* Leading of the Font */
Fixed lOverHMax; /* Left over hang max */
Fixed rOverHMax; /* Right over hang max */
Fixed yMax; /* YMax of the font */
Fixed yMin; /* YMin of the font */
short height; /* Height of the font */
short filler; /* */
Fixed rightItalicSlop; /* Right Italic slop */
Fixed leftItalicSlop; /* Left italic slop */
unsigned char fmAscent; /* FMOutput ascent */
unsigned char fmDescent; /* FMOutput descent */
unsigned char fmWidMax; /* FMOutput widmax */
char fmLeading; /* FMOutput leading */
long addEntryOffset; /* Offset to next spot to add */
char bitsCached; /* Set if bitmaps are cached */
char squashed; /* A squashed cached if true */
short familyID; /* Family id for international checks */
Ptr fEncodingTablePointer; /* pointer to double byte encoding table or nil for single byte scripts */
uint16 fScriptNumber; /* script associated with this cache */
uint16 fLongWordAlign; /* long word align */
uint32 glyphArray[]; /* Array of offsets starts here */
} sb_CacheHead, *sb_CacheHeadPtr, **sb_CacheHeadHdl;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WIDTH TABLE
*/
typedef struct {
Fixed tabData[256];
Handle tabFont;
long sExtra;
Fixed style;
short fID;
short fSize;
short face;
short device;
Point inNumer;
Point inDenom;
short aFID;
Handle fHand;
unsigned char usedFam;
unsigned char aFace;
short vOutput;
short hOutput;
short vFactor;
short hFactor;
short aSize;
short NFNT;
short StrikeID;
short Hint;
short devRes;
Boolean IsSpline;
Boolean notFast; /* flag of whats cached */
short badFontFlag; /* If the preprogram is corrupt use the missing character */
Boolean loadSpline; /* set if loading splines */
Boolean FREEBYTE; /* */
long trans00; /* transform for x */
long trans11; /* transform for y */
long trans10; /* transform for skew */
short fKeepSplineOnDisk; /* non-zero means don't load the spline into memory */
short fSplineDirectory[]; /* copy of spline directory is appended here */
} widthTable, *widthTablePtr, **widthTableHdl;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Font Scaler Storage
*/
typedef struct {
long xOffset, yOffset, startPointOffset, endPointOffset, onCurveOffset;
long *workSpacePtr; /* workSpace that will work on */
short contours; /* number of contours */
} splineData;
typedef struct {
Handle cache;
THz zone;
} CacheReference;
typedef enum {
kNoOptions = 0,
kKeepContents = 1
} ZoneHandleOptions;
typedef enum {
noShrink = 0,
doShrink = 1
} ShrinkOptions;
typedef enum {
useApp = 0,
useSys = 1
} whichHeap;
typedef pascal void (*PurgeProcPtr)( Handle purgeableHandle );
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
$$$ WARNING UPDATE. make parallel changes in fontPrivate.a $$$
Memory off Spline Low-Mem
*/
typedef struct {
long callDebug; /* Drop into debugger if set and error */
Ptr vFontCache; /* Dispatch table for QuickDraw caching */
Ptr vFontScaler; /* Dispatch table for Font scaling routines */
Handle bitmapHand; /* Bitmap Handle - Number 5 in Font Scaler */
THz bitmapZone; /* Zone the bitmapHand is allocated in */
CacheReference** cacheListHandle; /* List of Cache Handles */
sb_CacheHeadHdl cacheHand; /* Global cache hand */
THz cacheZone; /* zone for the current cache */
short cachePlace; /* spot where we got the cache */
short fontCount; /* Set to Zero on increment each time a new cache exists */
THz curAppZone; /* current application zone */
Boolean sysFull; /* System is full */
Boolean appFull; /* App is full */
char useHeap; /* which heap to use */
Boolean mfExists; /* flags whether multiFinder exists */
short glyphID; /* last glyph id */
Boolean is32Bit; /* Does 32bit QD exist */
Boolean squashed; /* Current font is squashed */
short StrikeID; /* check if still same sfnt */
short ptSize; /* Check Point Size the same */
short device; /* check Device resolution the same */
short face; /* check Face the same */
long trans00; /* transform for x */
long trans11; /* transform for y */
long trans10; /* transform for skew */
widthTableHdl tempWidthTabHand; /* Used temporarily to get printer widths */
Ptr vGrowZone; /* vector for growzone patch */
short safeCount; /* safe count in case of length overflow */
short EXTRAWORD;
/* <20><><EFBFBD><EFBFBD>FONT SCALER MEMORY<52><59><EFBFBD><EFBFBD> */
Handle fsWorkHand; /* work area for spline data */
THz fsWorkZone; /* heap this guy lives in */
fs_GlyphInputType *inPtr; /* pointer to input struct */
fs_GlyphInfoType *outPtr; /* pointer to info struct */
long inputOffset; /* Constant memory */
long infoOffset; /* Constant memory */
long globalOffset0; /* Constant memory */
long globalOffset1; /* Constant memory */
long globalOffset2; /* Constant memory */
long sfntDataOffset3; /* Variable size memory */
long sfntDataOffset4; /* Variable size memory */
long rowArrayOffset6; /* Variable size memory */
long columnArrayOffset7; /* Variable size memory */
THz fPartialFontZone; /* Zone for partial font fragments */
FragmentTableCacheStructureHandle fFragmentTableCache; /* list of fragment tables */
short fLastSwapFontFamilyID; /* FMInput family ide passed in at last SwapFont call */
Handle fDiskCacheMap; /* handle to disk cache map */
PurgeProcPtr fResourceManagerPurgeProcedure; /* saved resource manager purge procedure */
Boolean fInPurgeProcedure; /* true if currently in purge procedure */
Boolean fFontCacheExists; /* true if the font cache exists */
short lastFontMap; /* Reference number of resource map last font was fetched from */
Handle fondCache[2]; /* Cache for candidate FOND list */
} sb_SplineKey, *sb_SplineKeyPtr, **sb_SplineKeyHdl;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Interfaces
*/
#define SB_KILLSOMECACHES 0x0002
#define SB_FILLPRINTER_WIDTHS 0x0003
#define SB_RETRIEVE_GLYPH 0x0004
#define SB_FILL_WIDTHTAB 0x0005
#define SB_SFNTMatchSIZE 0x000d
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Outside system client calls
*/
/* Private calls */
extern pascal long FillPrinterWidths(Fixed *widthsArrayPtr, Handle sfntHand)
= {0x7000 + SB_FILLPRINTER_WIDTHS,0xA854};
extern pascal long KillSomeCaches( unsigned long startAddr, unsigned long endAddr )
= {0x7000 + SB_KILLSOMECACHES,0xA854};
extern pascal long sb__RetrieveGlyph( widthTableHdl widthTabHand, register sb_Glyph *glyphPtr )
= {0x303C,SB_RETRIEVE_GLYPH,0xA854};
extern pascal long sb__FillWidthTab(widthTableHdl widthTabHand, Boolean fractEnable, Boolean needWidths)
= {0x303C,SB_FILL_WIDTHTAB,0xA854};
extern pascal Boolean sb__SFNTMatchSize(Handle sfntHand, short matchSize)
= {0x303C,SB_SFNTMatchSIZE,0xA854};
long sb_ShrinkCacheToMin(sb_CacheHeadHdl cacheHand, long addEntryOffset);
Handle sb_SizeTheBlock(sb_SplineKeyHdl splineKey, Handle inputH, THz* inputZone, long inputSize, ZoneHandleOptions options, short cachePlace, ShrinkOptions shrinkTest);
void sb_DisposeZoneHandle(Handle h, THz zonePtr);
Handle sb_NewZoneHandle(sb_SplineKeyHdl splineKey, long size, THz* zone);
short IntrinsicStyle(widthTablePtr w);