boot3/Toolbox/FontMgr/BassExtensions.a
Elliot Nunn 5b0f0cc134 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 10:02:57 +08:00

554 lines
23 KiB
Plaintext

; File: BassExtensions.a
;
; Contains: This file was formerly part of the 'lpch' resource which loads the Spline
; Package. It is now part of the SuperMario ROM.
;
; Written by: Charlton E. Lui
;
; Copyright: © 1988-1993 by Apple Computer, Inc. All rights reserved.
;
; Change History (most recent first):
;
; <SM5> 5/21/93 CSS Fix the fontmgr gestalt call to return the correct number of
; bits for double byte support. And expand DispatchFontCache table
; to support InitializePartialFonts and InitializeDiskCache which
; are enabled once the gestalt call turns on the new bits. Per
; Reality BassPatches.a <14> comment follows:
; <14> 3/9/92 DTY #1023997: DonÕt call InitializePartialFonts and
; InitializeDiskCache as part of the TrueType installation process
; any more. Instead, make them selectors off of vFontCache so that
; they can be called by the Universal Two Byte Extension, since
; two byte systems are the only clients for these features at the
; moment. This way, about 150K is saved in the base system.
; <SM4> 11/3/92 SWC Changed ToolEqu.a->ToolUtils.a and QuickEqu.a->QuickDraw.a.
; <SM3> 8/25/92 chp The DispatchFontCache and DispatchFontScaler tables have been
; moved back to the system heap using the old format of absolute
; long address vectors initialized at boot time. The StyleWriter
; driver depends on this patchable format.
; <SM2> 6/8/92 CSS Roll-in Reality Changes: Note that <15> was not applied as the fix applies to
; the ATM patch that is no longer part of this file.
; <16> 4/1/92 YK #1023997: Ignore case for InitializePartialFonts and
; InitializeDiskcache since they are pascal functions now.
; <14> 3/9/92 DTY #1023997: DonÕt call InitializePartialFonts and
; InitializeDiskCache as part of the TrueType installation process
; any more. Instead, make them selectors off of vFontCache so that
; they can be called by the Universal Two Byte Extension, since
; two byte systems are the only clients for these features at the
; moment. This way, about 150K is saved in the base system.
; <SM1> 4/16/92 PN first checked in
; <13> 10/25/91 RB Fix selectors to support new TT calls for embedded bitmaps.
; <12> 10/23/91 ngk KON, Add InstallProc for myGetSeek to load it only when 32-bit
; QD is not present.
; <11> 10/22/91 RB Add support for sfnt-embedded-bitmaps
; <10> 9/25/91 jlf Rolled in modifications from Pacific TrueType project: added
; initialization calls to InitializePartialFonts and
; InitializeDiskCache; added SetAppBase and InitApplZone
; patches to remove caches when an application heap is reformatted
; (the CloseResFile patch doesn't catch a Finder or MultiFinder
; launch when the system font is an outline font).
; <9> 7/10/91 JSM Remove obsolete SysVers conditionals, remove unused DISK_CACHE
; equate.
; <8> 6/14/91 JL Removed benign redefinition of spare1 declared in Private.a.
; <7> 6/12/91 LN added #include 'SysPrivateEqu.a'
; <6> 2/4/91 CL (MR)Conditionalizing the CacheCleaner code in this file to only
; be used for the Guadi init. The cleaning code for 7.0 is moved
; to MiscPatches.a in the CleanupApplication routine. Taking out
; old dead code.
; <5> 12/17/90 MR [ph] Add patch to SetTrapAddress to protect ATM from crashing if
; they try to draw when a TrueType font is currently loaded.
; <4> 12/5/90 MR Add Gestalt selector 'font'. [cl]
; <3> 10/30/90 CL (MR)Adding in fs_LowestPPEM to realfont.
; <2> 10/23/90 CL (MR)Kill fontTools.
; <14> 10/9/90 CL Added preflight call to the dispatcher.
; <16> 10/2/90 CL Of course we have more memory manager stuff. Accidently
; installed memory manager grow zone patch into the init
; on machines besides the MacPlus. Fixing it up!
; <15> 10/2/90 CL Fixing memory manager patch on the system heap grow zone.
; <14> 10/1/90 CL The prglue patch does not work in Finder mode since the printing
; code does in fact get memory for the app heap not the system
; heap. Need to check which mode and set accordingly.
; <13> 9/27/90 CL Adding in Dave HarrisonÕs cool memory patch for the MacPlus ROM.
; <12> 9/24/90 CL Adding sb_searchForcache back into vector table.
; <11> 9/13/90 CL Taking out MachineType since it is no longer needed for the
; MultiFinder exist check. Memory manager has a bad bug. It
; sometimes loops forever. This bug was fixed in the Mac SE
; memory manager but was never rolled back into the Plus ROM
; Now we include this 5k patch into the Gaudi init build.
; Set mfExists to true if we're in System 7.0.
; <10> 9/7/90 CL Fixing a Prglue heap corruption problem.
; <9> 9/7/90 MR Remove PSName calls since they now live in the LW driver.
; <8> 8/31/90 CL got rid of call to the now unneeded sb_initmemory. When the
; link patches got rolled in the rom address for putpicdata for
; the portable was wrong. Pictures died on the Guadi init.
; Took out extra ifdef out code.
; <7> 8/10/90 MR change detachfontface to getfontfacefamily
; <6> 7/31/90 KSM Fix bug in JStdTxMeas where address was getting SUB.W instead of
; SUB.L.
; <5> 7/27/90 CL Added the SetFractEnable and SetFScaleDisable patches in since
; they are not defined in the MacPlus Rom.
; <4> 7/23/90 MR Remove duplicate dispatch entries, fix jmp bug at SplineCall
; <3> 7/21/90 DTY Took out _Debugger in _GetSeek patch.
; <2> 7/20/90 DTY No change. Just cleaning up the change history.
; <1> 7/20/90 DTY Bass: The Linked Patch. This file used to be BassComm_Tail.
; Contents of BassBW_Tail, BassCQD_Tail, DispatchBass, and
; BPatcher have been merged in. All Head files are gone now that
; Bass is a linked patch. The dispatch tables are now formed by
; using the dcImportResident macro instead of copying them into a
; block in the system heap. The cache cleaning traps have been
; modified to use the jmpOld macro to return to the real toolbox
; routine, so these addresses donÕt have to be saved in
; ExdpandMem. GetDevPix has been moved into FontMgr.a since
; thatÕs where itÕs being called.
;
; BassCommTail.a --> BassPatches.a
;
; <11> 7/16/90 CL Made Finder compatible for the Goudy init.
; <10> 7/13/90 MR Add GetFontGlyph
; <9> 6/26/90 MR Modify ToolBox calls
; <8> 6/22/90 CL Adding fontPrivate.a include
; <7> 6/19/90 MR Add GetPSFontName to the trap
; <6> 6/5/90 MR Add font toolbox and get rid of readmvt and mapcharcodes
; <5> 5/29/90 CL Added conditionalized support for disk caching.
; <4> 5/3/90 CL Adding non-sys newhandle clear. Taking out old encrypt selector.
; Added fs_MapCharCodes and fs_ReadMVT to dispatcher.
; <3> 4/10/90 CL Conditionalize for ROMÉ
; <2> 2/27/90 CL Getting bbs headers
; <2.1> 11/14/89 CEL Moved globals from BassComm_MiddleJump.a to this file.
; <2.0> 9/28/89 CEL Took out killing the caches when an application quits.
; <1.9> 9/25/89 CEL Kill the caches in the application heap when quiting.
; <1.8> 9/15/89 CEL Changed to case sensitive obj code.
; <1.7> 8/14/89 CEL Set up machinetype & mfexists var for later checking.
; <1.6> 8/1/89 CEL Font scaler with composites updateÉ
; <1.5> 6/10/89 CEL Moved Private.a QuickDraw Equates into proper QuickDraw private
; file (colorequ.a), got rid of QuickDraw nFiles dependencies and
; fixed up necessary filesÉ
; <1.4> 6/6/89 CEL 32-bit QD is a new tool, need to change GetTrapAddress for check
; for 32-bit QD to work right
; <1.3> 6/2/89 CEL Changed Bind labels to new labels to references in patchmacs.a
; <1.2> 5/26/89 CEL Integrated the new Font Scaler 1.0 into Spline Fonts
; <¥1.1> 5/3/89 CEL All kinks worked out, Blasting in bass filesÉ
; <1.0> 5/1/89 cel Adding Bass for first timeÉ
;
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
STRING PASCAL
CASE OBJ
machine mc68020 ; <SM3 chp>
BASS_INIT equ 0
IF (&TYPE('SCRIPT_CHAR_EXTRA') = 'UNDEFINED') THEN ; <3> CEL
SCRIPT_CHAR_EXTRA EQU 1
ENDIF
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; IncludesÉ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;wholeErrors EQU 1 ;Ed added dsBadPatch error, so it needs this equate
;USE_MAKESYSFREE EQU 1 ;MakeSysFree flag
ATM_HACK EQU 1
INCLUDE 'Traps.a'
INCLUDE 'SysEqu.a'
INCLUDE 'SysErr.a'
INCLUDE 'ToolUtils.a'
INCLUDE 'QuickDraw.a'
INCLUDE 'SplineDefines.a'
INCLUDE 'fontPrivate.a'
INCLUDE 'LinkedPatchMacros.a'
INCLUDE 'ColorEqu.a'
INCLUDE 'GestaltEqu.a'
include 'GestaltPrivateEqu.a' ;<SM2> CSS
INCLUDE 'SysPrivateEqu.a'
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Install Bass patches to QuickDraw & FontMgr routines.
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Misc routines
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
ArithMode PROC EXPORT
; hilite
;avg addPin addOver subPin trans max subOver min
DC.B srcCopy, srcBic, srcXor, srcOr, srcOr, srcBic, srcXor, srcOr
EndProc
JStdTxMeas PROC EXPORT
dc.l $E00+($ED*4) ; Space to hold vector to StdTxMeas routine
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Remove any application memory allocated by Bass whenever the application heap is
; reformatted. SetAppBase and InitApplZone must be patched since they both trash the
; application heap.
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;SetAppBaseCacheCleaner PatchProc $A057,(Plus,SE,II,Portable,IIci) ;SetAppBase
;InitApplZoneCacheCleaner PatchProc $A02C,(Plus,SE,II,Portable,IIci) ;InitApplZone
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; ATM lovely hack remains with system files
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Bass Dispatcher
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;SplineCall PatchProc $A854,(Plus,SE,II,Portable,IIci)
SPLINECALL Proc Export
MOVE.L expandMem, A0 ; get low mem expand
MOVE.L ExpandMemRec.emSplineKey(A0),D1 ; splineKey invalid?
BEQ.S @bailOut ; yes -> bail out
MOVE.L D1,A0 ; load splineKey handle
MOVE.L (A0),A0 ; load splineKey pointer
MOVE.L SplineKeyRec.vFontCache(A0),A1 ; load font cache vectors.
TST.W D0 ; High bit set?
BPL.S @fontCache ; no -> it belongs to the font cache.
AND.W #$7FFF,D0 ; clear high bit flag.
MOVE.L SplineKeyRec.vFontScaler(A0),A1 ; load font scaler vectors.
@fontCache
MOVE.L (A1)+,D1 ; load vector table size.
CMP.W D1,D0 ; valid selector?
BHS.S @bailOut ; no -> bail out. <SM3 chp>
@loadVector
move.l (a1,d0*4),a1 ; Get address of routine <SM3 chp>
jmp (a1) ; Jump to routine <SM3 chp>
@bailOut
SWAP D0 ; Get number of params
CLR.L D1 ; clear a long.
MOVE.B D0,D1 ; isolate arguments length.
LSR.L #8,D0 ; isolate results length.
ADD.W D1,SP ; pop the arguments.
MOVE.L SP,A1 ; copy the stack pointer.
BRA.S @2 ; enter loop at bottom.
@1
MOVE.B #$FF, (A1)+ ; clear a byte.
@2
DBRA D0,@1 ; do the next byte.
JMP (A1) ; return to the caller.
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; This is the gestalt call back function. mrr
;
; pascal OSErr FontMgrGestalt(OSType selector, long* response)
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
FontMgrGestalt PROC EXPORT
MOVE.L (sp)+, a0 ; return address
MOVE.L (sp)+, a1 ; addr of response
ADDQ #4, sp ; eat the selector
MOVE.L #(1 << gestaltOutlineFonts) | \ ; <14>
(1 << gestaltPartialFonts) | \ ; <14>
(1 << gestaltDiskCachedFonts) \ ; <14>
,(a1)
CLR.W (sp) ; no error
JMP (a0) ; go home
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; EntryTablesÉ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
FREE_SPOT PROC EXPORT ; Just a place holder
RTS
ENDPROC
; <SM3 chp> Current versions of the StyleWriter driver know about the structure of the
; <SM3 chp> DispatchFontCache table and patch it, so the table cannot change until
; <SM3 chp> the StyleWriter driver changes (post Cube-E). For now, DispatchFontCache
; <SM3 chp> is a template for a nonrelocatable block of memory in the system heap.
; <SM3 chp> DispatchFontScaler needs to have the same general structure as the former
; <SM3 chp> table since it is used in the same manner by the same dispatch routine.
DispatchFontCache record 0 ; <SM3 chp>
entries ds.l 1
vIsOutline ds.l 1 ; selector 0
vSetOutlinePreferred ds.l 1 ; selector 1
vSB_KillSomeCaches ds.l 1 ; selector 2
vsb_FillPrinterWidths ds.l 1 ; selector 3
vsb_RetrieveGlyph ds.l 1 ; selector 4
vsb_FillWidthTab ds.l 1 ; selector 5
vsb_SearchForCache ds.l 1 ; selector 6
vsb_PreFlightFontMem ds.l 1 ; selector 7
vOutlineMetrics ds.l 1 ; selector 8
vGetOutlinePreferred ds.l 1 ; selector 9
vSetPreserveGlyph ds.l 1 ; selector a
vGetPreserveGlyph ds.l 1 ; selector b
vsb_FlushFonts ds.l 1 ; selector c
vsb_SFNTMatchSize ds.l 1 ; selector d
vfs_LowestPPEM ds.l 1 ; selector e
InitializePartialFonts ds.l 1 ; selector f <14>
InitializeDiskCache ds.l 1 ; selector 10 <14>
size equ *
endr
DispatchFontScaler record 0
entries ds.l 1
vfs_OpenFonts ds.l 1 ; selector 0
vfs_Initialize ds.l 1 ; selector 1
vfs_NewSfnt ds.l 1 ; selector 2
vfs_NewTransformation ds.l 1 ; selector 3
vfs_NewGlyph ds.l 1 ; selector 4
vfs_GetAdvanceWidth ds.l 1 ; selector 5
vfs_ContourGridFit ds.l 1 ; selector 6
vfs_ContourNoGridFit ds.l 1 ; selector 7
vfs_FindBitMapSize ds.l 1 ; selector 8
vfs_SizeOfOutlines ds.l 1 ; selector 9
vfs_SaveOutlines ds.l 1 ; selector a
vfs_RestoreOutlines ds.l 1 ; selector b
vfs_ContourScan ds.l 1 ; selector c
vfs_CloseFonts ds.l 1 ; selector d
if TheFuture then
vfs_GetGlyphInfo ds.l 1 ; selector e
vfs_GetGlyphData ds.l 1 ; selector f
vfs_GetBitMapInfo ds.l 1 ; selector 10
vfs_GetBitMapData ds.l 1 ; selector 11
endif
size equ *
endr ; <SM3 chp>
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Boot-time initialization code, if any, goes here.
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;InstallBassCommon InstallProc (Plus,SE,II,Portable,IIci)
INSTALLBASSCOMMON Proc Export
; <SM3 chp> Since the above-described dispatch tables are no longer initialized by the
; <SM3 chp> link patch mechanism and cannot be placed in ROM, all of the following
; <SM3 chp> entry points are imported and initialized into the tables by this routine.
;
case off
import IsOutline, SetOutlinePreferred, SB_KillSomeCaches
import sb_FillPrinterWidths, sb_RetrieveGlyph, sb_FillWidthTab
import sb_SearchForCache, sb_PreflightFontMem
import OutlineMetrics, GetOutlinePreferred
import SetPreserveGlyph, GetPreserveGlyph
import sb_FlushFonts, sb_SFNTMatchSize, fs_LowestPPEM
import InitializePartialFonts, InitializeDiskCache
import fs_OpenFonts, fs_Initialize, fs_NewSfnt
import fs_NewTransformation, fs_NewGlyph
import fs_GetAdvanceWidth
import fs_ContourGridFit, fs_ContourNoGridFit
import fs_FindBitMapSize, fs_SizeOfOutlines
import fs_SaveOutlines, fs_RestoreOutlines
import fs_ContourScan, fs_CloseFonts
if TheFuture then
import fs_GetGlyphInfo, fs_GetGlyphData
import fs_GetBitMapInfo, fs_GetBitMapData
endif
case obj
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Allocate splinekey memoryÉ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
MOVE.L #splineKeyRec.splineKeySize, D0 ;Size of splinekey
_NewHandle ,SYS,CLEAR
BNE @bailOut ; We are hosed
MOVE.L expandMem, A2 ; get low mem expand
MOVE.L A0, ExpandMemRec.emSplineKey(A2) ; Handle to splineKey
MOVE.L (A0), A2 ; Get the ptr in a reg
MOVE.B #1, splineKeyRec.mfExists(A2) ; multiFinder always exists in 7.0
_HLock ;
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Fill out dispatch tablesÉ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
moveq #DispatchFontCache.size,d0 ; <SM3 chp>
_NewPtr ,sys,clear
MOVE.L A0, splineKeyRec.vFontCache(A2) ; Save dispatch table ptr (fontCache)
beq.b @endDFCInit
moveq #(DispatchFontCache.size/4)-1,d0 ; number of vector entries in table
move.l d0,(a0)+
lea IsOutline,a1 ; selector 0
move.l a1,(a0)+
lea SetOutlinePreferred,a1 ; selector 1
move.l a1,(a0)+
lea SB_KillSomeCaches,a1 ; selector 2
move.l a1,(a0)+
lea sb_FillPrinterWidths,a1 ; selector 3
move.l a1,(a0)+
lea sb_RetrieveGlyph,a1 ; selector 4
move.l a1,(a0)+
lea sb_FillWidthTab,a1 ; selector 5
move.l a1,(a0)+
lea sb_SearchForCache,a1 ; selector 6
move.l a1,(a0)+
lea sb_PreFlightFontMem,a1 ; selector 7
move.l a1,(a0)+
lea OutlineMetrics,a1 ; selector 8
move.l a1,(a0)+
lea GetOutlinePreferred,a1 ; selector 9
move.l a1,(a0)+
lea SetPreserveGlyph,a1 ; selector a
move.l a1,(a0)+
lea GetPreserveGlyph,a1 ; selector b
move.l a1,(a0)+
lea sb_FlushFonts,a1 ; selector c
move.l a1,(a0)+
lea sb_SFNTMatchSize,a1 ; selector d
move.l a1,(a0)+
lea fs_LowestPPEM,a1 ; selector e
move.l a1,(a0)+
lea InitializePartialFonts,a1 ; selector f <14>
move.l a1,(a0)+
lea InitializeDiskCache,a1 ; selector 10 <14>
move.l a1,(a0)+
@endDFCInit
moveq #DispatchFontScaler.size,d0
_NewPtr ,sys,clear
MOVE.L A0, splineKeyRec.vFontScaler(A2) ; Save dispatch table ptr (fontScaler)
beq.b @endDFSInit
moveq #(DispatchFontScaler.size/4)-1,d0 ; number of vector entries in table
move.l d0,(a0)+
lea fs_OpenFonts,a1 ; selector 0
move.l a1,(a0)+
lea fs_Initialize,a1 ; selector 1
move.l a1,(a0)+
lea fs_NewSfnt,a1 ; selector 2
move.l a1,(a0)+
lea fs_NewTransformation,a1 ; selector 3
move.l a1,(a0)+
lea fs_NewGlyph,a1 ; selector 4
move.l a1,(a0)+
lea fs_GetAdvanceWidth,a1 ; selector 5
move.l a1,(a0)+
lea fs_ContourGridFit,a1 ; selector 6
move.l a1,(a0)+
lea fs_ContourNoGridFit,a1 ; selector 7
move.l a1,(a0)+
lea fs_FindBitMapSize,a1 ; selector 8
move.l a1,(a0)+
lea fs_SizeOfOutlines,a1 ; selector 9
move.l a1,(a0)+
lea fs_SaveOutlines,a1 ; selector a
move.l a1,(a0)+
lea fs_RestoreOutlines,a1 ; selector b
move.l a1,(a0)+
lea fs_ContourScan,a1 ; selector c
move.l a1,(a0)+
lea fs_CloseFonts,a1 ; selector d
move.l a1,(a0)+
if TheFuture then
lea fs_GetGlyphInfo,a1 ; selector e
move.l a1,(a0)+
lea fs_GetGlyphData,a1 ; selector f
move.l a1,(a0)+
lea fs_GetBitMapInfo,a1 ; selector 10
move.l a1,(a0)+
lea fs_GetBitMapData,a1 ; selector 11
move.l a1,(a0)+
endif
@endDFSInit ; <SM3 chp>
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Initialize the splinePreferred flagÉ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
BCLR #preserveGlyph, HiliteMode ;Do not always blit everything unless set
BCLR #splinePreferred, HiliteMode ;Clear the low mem bit
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Set up flagsÉ
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
MOVE.L #$A89F, D0 ;Unimplemented trap
_GetTrapAddress
MOVE.L A0, D3
MOVE.L #$AB03, D0
_GetTrapAddress newTool ; see where trap is
CMP.L A0, D3
SNE.B splineKeyRec.is32bit(A2) ;Set the 32 bit color flag
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Unlock the splineKey globalsÉ
; A2 no longer has splineKeyPtr.
; Must unlock before calling SB_INITMEMORY.
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
MOVE.L expandMem, A0 ; get low mem expand
MOVE.L ExpandMemRec.emSplineKey(A0),A0 ; Handle to splineKey
_HUnlock ; Unlock splineKey globals
rts ; Exit anyway
@bailOut
MOVE.L expandMem, A2 ; get low mem expand
CLR.L ExpandMemRec.emSplineKey(A2) ; Handle to splineKey
RTS ; <=== in any case
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Force _InitFonts to be called.
; DonÕt include Mac Plus in ROM list, since FMExist doesnÕt on the Plus.
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;ForceInitFontsCall InstallProc (SE,II,Portable,IIci)
FORCEINITFONTSCALL Proc Export
ST FMExist
rts
ENDPROC
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Register our selector 'font'
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;InstallFontGestalt InstallProc (Plus,SE,II,Portable,IIci)
INSTALLFONTGESTALT Proc Export
IMPORT FontMgrGestalt
MOVE.L #gestaltFontMgrAttr, D0
LEA FontMgrGestalt, A0
_NewGestalt ; Install our function
; BEQ.S @noError ; error is in D0
; DC.W $A9FF ; let me know if it failed
;@noError
RTS
EndProc
;¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥Temporary hack for InitZone
;----------------------------------------------------------------------
;
; Procedure InitZoneGlue(growProc: ProcPtr;
; moreMasters: Integer;
; limitPtr,startPtr : Ptr);
; Creates and initializes a fresh zone from unstructured storage
;
; Arguments:
; growProc: points to grow procedure for this zone
; moreMasters: number of master pointers to create at a time
; limitPtr: points one past last byte of raw storage
; startPtr: points to first byte of raw storage
;
; Registers:
; D0 - result code from InitApplZone
;
INITZONEGLUE PROC EXPORT
MOVE.L (SP)+,A1 ;return address
Move.L SP,A0 ;stack parameters form req blk
_InitZone
Add #14,SP ;strip parameters
JMP (A1) ;return via A1
;¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; END Spline_PatcheeTail.a!!!
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
End