mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-09-06 18:54:30 +00:00
1027 lines
45 KiB
Plaintext
1027 lines
45 KiB
Plaintext
|
;
|
|||
|
; File: ScriptMgrExtTail.a (formerly SMgrExtTail.a)
|
|||
|
;
|
|||
|
; Contains: Installation and initialization code at the end of the Script Mgr extensions patch, ptch 27.
|
|||
|
;
|
|||
|
; Written by: PKE Peter Edberg
|
|||
|
; SMB Sue Bartalo
|
|||
|
; JH John Harvey
|
|||
|
; KSM Kevin MacDonell
|
|||
|
; YK Yousuke Kurita
|
|||
|
;
|
|||
|
; Copyright: <09> 1989-1992 by Apple Computer, Inc., all rights reserved.
|
|||
|
;
|
|||
|
; Change History (most recent first):
|
|||
|
;
|
|||
|
; <62> 6/17/92 HA #1029756,<PKE>: #1029756 <PKE> make sure that we stuff the real
|
|||
|
; vector of StyledLineBreak after moving it to ptch 27.
|
|||
|
; <61> 5/19/92 PKE #1030321,<jh>: Add installation of private interface to existing
|
|||
|
; NFindScriptRun routine.
|
|||
|
; <60> 5/14/92 PKE #1027061,<ha>: Add installation of private ScriptToRange
|
|||
|
; routine.
|
|||
|
; <59> 5/10/92 SMB #1026551,<pke>: Deleted patch installation code for
|
|||
|
; ptchDrawMenuBar since no longer patching this. (See
|
|||
|
; ScriptMgrKeyGetSet.a comments for new strategy.)
|
|||
|
; <58> 4/30/92 DTY Get rid of debugger breaks that Jeff left lying around.
|
|||
|
; <57> 4/29/92 JSM Don<6F>t include ScriptMgrDispatch.a and ScriptMgrKetGetSet.a here,
|
|||
|
; link them in instead, delete some unneeded include files.
|
|||
|
; <56> 4/28/92 JSM Move all resident code to ScriptMgrExtensions.a. Leave tail
|
|||
|
; patch ptchLwrString here (compiled only when FixCacheAndStr2Date
|
|||
|
; is true), it now jumps to ScriptMgrExtensions.a. Also leave
|
|||
|
; GetScaledFontInfo routine here, and make sure it only compiles
|
|||
|
; when useInterChar is true since the only place that calls it is
|
|||
|
; in RomanNewJust.a under the same condition. This saves some
|
|||
|
; space in CubeE. Note that these two things are the only pieces
|
|||
|
; of resident code now left in this file, and under the current
|
|||
|
; conditional settings none of them are compiled. They probably
|
|||
|
; don<6F>t work anyway and should be removed, but I left it here.
|
|||
|
; Only fix up ROM binds if there are any (i.e. if either of the
|
|||
|
; above routines are compiled). Don<6F>t include GestaltEqu.a or use
|
|||
|
; smgrSysVers conditional anymore.
|
|||
|
; <55> 4/22/92 PKE #1026767: (no reviewer before check-in: it is late at night,
|
|||
|
; nobody is around, I am going out of town early tomorrow morning,
|
|||
|
; and I have to have this in for the a7 build) Don't load handles
|
|||
|
; in itl2/itl4 cache, since we no longer cache handles, just IDs.
|
|||
|
; <54> 4/22/92 PKE #1027368,<FM>: Move Roman CharType here and make it handle
|
|||
|
; direction bit for R-L scripts.
|
|||
|
; <53> 4/10/92 SMB #1026551,<pke>: Install head patch to DrawMenuBar to handle
|
|||
|
; disabling for Keyboard Menu state.
|
|||
|
; <52> 4/10/92 PKE #1026778,<amw>: To make FindWord not depend on having script
|
|||
|
; code passed in d2 (script code will not be in d2 when it is
|
|||
|
; called from one-byte extension), need to have script code in new
|
|||
|
; scriptID field of ScriptRecord. InitScripts must set this up at
|
|||
|
; boot.
|
|||
|
; <51> 4/8/92 PKE #1025369,<cv>: Holding down Shift should disable loading of
|
|||
|
; Simple Scripts (e.g. Cyrillic).
|
|||
|
; <50> 4/2/92 PKE #1025998,<ha>: (actually part of fix for bugs #1025998,
|
|||
|
; #1025364, #1025998, #1024837) Move Roman GetScript/SetScript
|
|||
|
; here and change them to not require selector on the stack, so
|
|||
|
; they will work if called from one-byte extension. They used to
|
|||
|
; just branch to the unimplemented routine handler, which needed
|
|||
|
; the selector. This also fixes an old bug in which Roman
|
|||
|
; SetScript did not return the correct error code for bad verbs.
|
|||
|
; <49> 2/13/92 PKE #1021419, Cube-E: Change Roman dispatch table to have nil
|
|||
|
; (instead of address of unimplemented routine) for IsSpecialFont
|
|||
|
; & RawPrinterValues. This makes one-byte extension handle them
|
|||
|
; properly.
|
|||
|
; <48> 2/11/92 DCL Changed the name of TSMEqu.[aph] to TextServices.[aph] for
|
|||
|
; better read-ability.
|
|||
|
; <47> 1/7/92 JH InitScripts has a subroutine called FixFond that claims that a2
|
|||
|
; contains a ptr to some scripts globals. In actual case, a3
|
|||
|
; contains said pointer and a2 contains a ptr to the script's
|
|||
|
; itlb. So changing FixFond to reflect this.
|
|||
|
; <46> 12/11/91 SMB For CubeE, updated dependencies to include TSMequ.a &
|
|||
|
; Component.a.
|
|||
|
; <45> 12/10/91 PKE #1017754: For non-ROM builds, move PrintAction here for all
|
|||
|
; CPUs, and change it to leave ScriptRecord ptr in a0.
|
|||
|
; <44> 12/6/91 PKE #1017161: Make TestLetter available through private Script Mgr
|
|||
|
; selector, for use by script systems. Move it to resident code
|
|||
|
; section.
|
|||
|
; <43> 11/21/91 YK InputUtils were gone. What was that!?
|
|||
|
; <42> 11/8/91 SMB #1015613 (for CubeE & Bruges) - Update dependencies to include
|
|||
|
; MenuMgrPriv.a.
|
|||
|
; <41> 10/28/91 PKE #1014968 (for Cube-E & Bruges): InitScripts should set
|
|||
|
; SysFontFam and ApFontId to the values it believes are correct
|
|||
|
; even the values already there are in the correct script.
|
|||
|
; <40> 10/25/91 YK Don't load an InputUtils resource at init. Unnecessary clearing
|
|||
|
; code was commented out.
|
|||
|
; <39> 10/23/91 YK Added InitDictionaryMgr and InitInputUtils at the end of
|
|||
|
; SMgrInstallExt.
|
|||
|
; <38> 10/8/91 PKE For Cube-E (and Bruges): Move remainder of LwrString here from
|
|||
|
; ScriptMgrPatch.a (ptch 4), modify to use GetScriptItl and
|
|||
|
; SCTransliterate, and add SCLwrString entry; install new
|
|||
|
; (currently private) RealScript, Font2RealScript, SCLwrString
|
|||
|
; routines in dispatch table (needed for bugs #1013149, #1012949).
|
|||
|
; Include IntlUtilsPriv.a. Clean up some more conditionals.
|
|||
|
; <37> 9/26/91 PKE For Cube-E (and Bruges): Update InitScripts to initialize
|
|||
|
; TESysJust from 'itlc' resource, and to set smgrBidirect and
|
|||
|
; smgrDoubleByte according to enabled scripts. Fix
|
|||
|
; auto-initialization so Opt-E (on any keyboard!) disables simple
|
|||
|
; scripts too; to do this, make some changes in IsCmdChar so we
|
|||
|
; can share code. Also conditionalize out some code related to
|
|||
|
; interchar spacing in Roman (not used). Remove some conditionals
|
|||
|
; for smgrSysVers>=$700 and smgrSysVers>=$606, and remove some old
|
|||
|
; code for smgrSysVers<$700.
|
|||
|
; <36> 8/22/91 KSM PKE,#Bruges: Nobody told me the ScriptMgr dispatcher left its
|
|||
|
; selector on the stack...
|
|||
|
; <35> 2/15/91 PKE JSM,#54736: Redo conditionals to move change <34> to Post 7.0.
|
|||
|
; Object compare identical to <33>.
|
|||
|
; <34> 1/28/91 JH PKE,#54736: Added a comefrom patch to _LowerString so that
|
|||
|
; String2Time could use the new Date Cache structure.
|
|||
|
; <33> 1/14/91 PKE (stb, except that routine in here by KSM was reviewed by PKE,
|
|||
|
; with algorithm review by dba): Allocate handle to ClientLLRecord
|
|||
|
; and put handle in SMgrRecord. Add Kevin<69>s private FindCharInSet
|
|||
|
; routine to be called by Dialog Mgr and Finder.
|
|||
|
; <32> 12/10/90 PKE (VL) Add private ReInitScripts routine to be called after net
|
|||
|
; booting switches system files. It cleans up Script Mgr data
|
|||
|
; structures based on resources in old file, then calls
|
|||
|
; InitScripts to set up new structures based on current file.
|
|||
|
; <31> 9/17/90 SMB (PKE) NEEDED FOR SIXPACK & SS-606. Must test for itl2 extensions
|
|||
|
; before loading FindScriptTable. Bug fixes in FindScriptRun code:
|
|||
|
; needed to branch unsigned, special case for length of 1, used .w
|
|||
|
; rather than .l when adding to pointers, and slight
|
|||
|
; size/performance improvement.
|
|||
|
; <30> 9/1/90 PKE When expanding the Roman dispatch table, need to fill in
|
|||
|
; BitBucket entries for the two special Kanji selectors, which are
|
|||
|
; not implemented in Roman. Otherwise print driver may try to call
|
|||
|
; IsSpecialFont or RawPrinterValues for Roman, and crash.
|
|||
|
; <29> 8/24/90 PKE CleanupScriptApp should reset ExpandMemRec.emScriptAppGlobals to
|
|||
|
; 0 to ensure that we don<6F>t try to use a disposed handle.
|
|||
|
; <28> 8/2/90 PKE Initialize application-specific Script Mgr globals to all 0.
|
|||
|
; <27> 7/25/90 PKE Add private InitScriptApp and CleanupScriptApp routines to be
|
|||
|
; called when apps are launched and closed in order to set up and
|
|||
|
; delete the new application-specific script globals (which, for
|
|||
|
; now, just contain the application itl cache). Renamed
|
|||
|
; emItlAppCacheHndl to emScriptAppGlobals.
|
|||
|
; <26> 7/20/90 PKE Changes to InitScripts, AddScriptFonts, and patch
|
|||
|
; initialization: (1) Move FixSMgrWorld code to InitScripts and
|
|||
|
; patch out ROM version entirely. Change script enable loop so IT
|
|||
|
; copies extended itlb info into ScriptRecord, instead of doing it
|
|||
|
; in patch initialization separately for Roman and simple scripts.
|
|||
|
; We now get extended font info from script<70>s itlb resource
|
|||
|
; regardless of the state of the auto-initialization bit. (2) Move
|
|||
|
; setting of smgrRegionCode to InitScripts. (3) InitScripts now
|
|||
|
; pre-loads the sys itl cache. (4) InitScripts now loops through
|
|||
|
; each enabled script and calls its scriptAvail vector (if <20>0).
|
|||
|
; (4) AddScriptFonts now loops through each enabled script and
|
|||
|
; calls its scriptAddFonts vector (if <20>0). Also, don<6F>t bother
|
|||
|
; doing ReleaseResource on purgeable resources.
|
|||
|
; <25> 7/16/90 PKE Use new names for fields in ExpandMemRec: emItlCache2Ptr becomes
|
|||
|
; emItlSysCachePtr, emItlAppCachePtr becomes emItlAppCacheHndl.
|
|||
|
; Renamed Cache2Rec to NewItlCacheRec.
|
|||
|
; <24> 7/11/90 PKE Added private routine IsCmdChar for checking Command-key combos
|
|||
|
; in an international way (needed mainly for Command-period, and
|
|||
|
; needed by new standard Filter Proc for dialogs<67>).
|
|||
|
; <23> 7/2/90 PKE Initialize emItlAppCachePtr to -1.
|
|||
|
; <22> 6/13/90 PKE Install private RebuildKeybdMenu routine in Script Mgr dispatch
|
|||
|
; table.
|
|||
|
; <21> 6/7/90 PKE Move GetScaledFontInfo routine here from RomanNewJust. Use BINDs
|
|||
|
; so that we jump into ROM code for most of it. Rearrange its
|
|||
|
; parameter order for efficiency. Initialize new emNumer and
|
|||
|
; emDenom fields in ExpandMemRec.
|
|||
|
; <20> 6/5/90 SMB Fixed odd address bug when initializing Roman scriptRecord
|
|||
|
; fields scriptValidStyles and scriptAliasStyle from Roman 'itlb'.
|
|||
|
; <19> 5/31/90 PKE Install new private routine SetKbdMenuInfo. Initialize Roman
|
|||
|
; scriptRecord fields scriptValidStyles and scriptAliasStyle from
|
|||
|
; Roman 'itlb'.
|
|||
|
; <18> 5/29/90 PKE NEEDED FOR SIXPACK DISK: Moved ParseTable here from ptch 4 so we
|
|||
|
; can fix an old unbalanced stack bug in both RAM and ROM
|
|||
|
; versions. Also, for 6.x, don<6F>t override version number set in
|
|||
|
; ROM or ptch 4. The new sections are flagged with <18>.
|
|||
|
; <17> 5/24/90 PKE Moved ScriptUtil dispatcher and FontScript, Font2Script,
|
|||
|
; IntlScript here (ptch 27) from ScriptMgrUtil.a (ptch 4).
|
|||
|
; Combined ScriptUtil dispatcher with special FindWord patches
|
|||
|
; that were already here. Changed FontScript, Font2Script,
|
|||
|
; IntlScript to default to system script instead of Roman. These
|
|||
|
; routines are all in a separate file, ScriptMgrDispatch.a, which
|
|||
|
; is included here.
|
|||
|
; <16> 5/11/90 PKE Add _AddScriptFonts routine and its installation.
|
|||
|
; <15> 5/8/90 PKE Added the meat to InitScripts: it now initializes new sort cache
|
|||
|
; and script/lang map tables.
|
|||
|
; <14> 5/5/90 PKE NEEDED FOR 6.0.7 AND 7.0: Fixed a bug introduced in <13>: Simple
|
|||
|
; scripts were not getting initialized correctly because one of
|
|||
|
; the new SimpleTable entries had a value of 0, which terminated
|
|||
|
; the table. Changed terminator to be -1. Relevant lines are
|
|||
|
; marked <**>. NEEDED ONLY FOR 7.0: Added private ScriptUtil
|
|||
|
; routine InitScripts (called by StartSystem.a); it calls
|
|||
|
; FixSMgrWorld and then does other extensions that have yet to be
|
|||
|
; added. Install InitScripts and Sue<75>s InitKeyboardMenu routine
|
|||
|
; into Script Mgr dispatch table. Added Sue<75>s installation for her
|
|||
|
; SystemMenu patch. Added doExpandSMgrDispTable conditional
|
|||
|
; symbol.
|
|||
|
; <13> 4/26/90 PKE NEEDED FOR 6.0.7: Cleaned up script auto-initialize stuff - use
|
|||
|
; SimpleTable loop to initialize scriptVersion, scriptCreator,
|
|||
|
; scriptFile instead of of explicitly initializing them.
|
|||
|
; <12> 4/10/90 PKE Moved KeyScript, Get/SetEnvirons, and Get/SetScript into a
|
|||
|
; separate file ScriptMgrKeyGetSet.a, which is included here.
|
|||
|
; Moved all of the roman routines that handle justified text into
|
|||
|
; a separate file RomanNewJust.a, which is assembled separately
|
|||
|
; and linked in. Moved TruncString, TruncText, and ReplaceText
|
|||
|
; into another separate file ScriptMgrTruncRepl.a which is also
|
|||
|
; assembled separately and linked in. Adjusted the includes
|
|||
|
; accordingly. Wrong version was being put into simple script
|
|||
|
; ScriptRecords; fixed it.
|
|||
|
; <11> 3/26/90 PKE Conditionalize so ptch 27 can be used in Sys 6.0.7+ to get
|
|||
|
; script auto-initialize capability. Use new conditionals
|
|||
|
; doScriptMgrGestalt, doScriptMgrLwrString2; otherwise just
|
|||
|
; conditionalize on smgrSysVers (need to improve this later).
|
|||
|
; <10> 3/22/90 PKE Now initialize Roman font data from 'itlb' resource. Get Help
|
|||
|
; Mgr font/size from 'itlb' for all scripts.
|
|||
|
; <9> 3/21/90 PKE Changed scrTable so GetScript and SetScript support new
|
|||
|
; smScriptAppFondSize and smScriptHelpFondSize verbs.
|
|||
|
; <8> 3/21/90 SMB For 7.0, move FindScriptRun here from ptch 4 and modify it to
|
|||
|
; handle any simple script using optional table in itl2. Add
|
|||
|
; automatic installation of simple scripts.
|
|||
|
; <7> 3/5/90 PKE In TruncString/TruncText, changed NTruncX selectors to TruncX.
|
|||
|
; <6> 3/2/90 PKE Use new name nItl4Rec for 7.0 extended version of Itl4Rec.
|
|||
|
; <5> 2/22/90 PKE For 7.0, moved Char2Pixel, DrawJust, MeasureJust here because we
|
|||
|
; patch them out entirely for ROM; added these to NewRomanTable so
|
|||
|
; their vectors get filled in. Added new InitJustData,
|
|||
|
; AdjustSpChExtra, and RestoreSpChExtra utility routines for
|
|||
|
; handling justification parameters with intercharacter spacing,
|
|||
|
; using new JustDataRec structure. Added other utility routines
|
|||
|
; GetFontSize, DrawGap, SignFixRound. Rewrote (N)PortionText,
|
|||
|
; (N)DrawJust, (N)MeasureJust, (N)Char2Pixel and (N)Pixel2Char
|
|||
|
; routines to fully implement the new justification model, using
|
|||
|
; the above utility routines. Also made the <20>N<EFBFBD> versions standard
|
|||
|
; for these routines, so that the old interfaces just redo the
|
|||
|
; stack and fall through to the new routines.
|
|||
|
; <4> 1/18/90 PKE Fixed bug introduced in <2>: for most of the installation code,
|
|||
|
; a4 was assumed to point to SMgrRecord, but the RomanUtil
|
|||
|
; dispatch table update in <2> made it point to the Roman
|
|||
|
; ScriptRecord, messing up subsequent initializations; we now
|
|||
|
; point it back to SMgrRecord after the RomanUtil dispatch table
|
|||
|
; update. Now initialize smgrRegionCode from the itlc resource.
|
|||
|
; <3> 1/17/90 PKE Added handling of new GetEnvirons verb smRegionCode.
|
|||
|
; <2> 1/11/90 PKE Moved Roman PortionText and Pixel2Char here so we can fix them
|
|||
|
; later for all systems (deal with color grafPorts, etc.) and also
|
|||
|
; to reduce duplication of code in new interfaces. We may move
|
|||
|
; other Roman routines here later. Added crude implementations of
|
|||
|
; some new interfaces: NPortionText, NDrawJust, NMeasureJust,
|
|||
|
; NChar2Pixel, and NPixel2Char. These ignore styleRunPosition, but
|
|||
|
; otherwise behave as specified. Added code to expand the
|
|||
|
; RomanUtil dispatch table if necessary (i.e. for ROM version of
|
|||
|
; ScriptMgr) and fill in vectors for PortionText, Pixel2Char, and
|
|||
|
; new interfaces listed above. Updated header to be in BBS format.
|
|||
|
; <1> 12/18/89 CCH Adding for the first time into BBS. Changed include 'inc.sum.a'
|
|||
|
; to load 'StandardEqu.d'. Updated file name references.
|
|||
|
; (BBS versions above, EASE versions below)
|
|||
|
; <1.8> 12/8/89 PKE FOR 7.0: Patch LwrString to handle 2-byte chars via
|
|||
|
; Transliterate (yuck), including extensions to handle LwrString
|
|||
|
; opcode bits.
|
|||
|
; <1.7> 11/8/89 PKE Modify TruncString and TruncText to support both new and old
|
|||
|
; calling conventions (with and without truncWhere parameter).
|
|||
|
; Implement handling of center truncation (in TruncText).
|
|||
|
; <1.6> 10/2/89 PKE Added code in GetEnvirons/SetEnvirons to handle new smKCHRCache
|
|||
|
; verb.
|
|||
|
; <1.5> 9/18/89 PKE Moved KeyScript here from ptch 4 so we can move 'itlk'
|
|||
|
; GetResource after the point at which meta-script numbers are
|
|||
|
; mapped to real script numbers and checks are made for script
|
|||
|
; installed and enabled. Replaced the _GetScript call in this
|
|||
|
; 'itlk' stuff with a direct access to ScriptRecord since we have
|
|||
|
; already done the validity checking.
|
|||
|
; <1.4> 9/17/89 PKE Better error reporting in TruncText, ReplaceText. Moved
|
|||
|
; gestaltScriptMgr function, GetEnvirons/SetEnvirons and
|
|||
|
; GetScript/SetScript here from ptch 4 for 7.0 so we can remove
|
|||
|
; gestaltScriptMgr and Get/SetScript from PTCH files and so we
|
|||
|
; don't have to also add Get/SetEnvirons there. Added new
|
|||
|
; smDoubleByte verb for Get/SetEnvirons. Also moved initialization
|
|||
|
; of new ScriptRecord font/size fields for Roman system here from
|
|||
|
; ptch 4 and PTCH files. Updated Roman Script System version using
|
|||
|
; new romanVersPriv constant.
|
|||
|
; <1.3> 9/15/89 PKE Change NFindWord references to xNFindWord, do install it again
|
|||
|
; in dispatch table - we'll permit direct calls in addition to
|
|||
|
; getting to it from the old FindWord selector via the glue. Add
|
|||
|
; and install framework code for TruncString, TruncText,
|
|||
|
; ReplaceText. Stuff correct version number in SMgrRecord.
|
|||
|
; <1.2> 9/5/89 PKE Add ScriptUtil patch which checks for FindWord call, sets up and
|
|||
|
; checks tables, and decides between new or old FindWord. Don't
|
|||
|
; install NFindWord address in trap table anymore. Include
|
|||
|
; 'PackMacs.a'.
|
|||
|
; <1.1> 9/4/89 PKE Put new routine addresses into dispatch table pointed to by
|
|||
|
; smgrDispTable, expanding it if necessary (i.e. for ROM version
|
|||
|
; of Script Mgr).
|
|||
|
; <1.0> 9/1/89 PKE Set up framework for 'ptch' resource 27, which contains 7.0
|
|||
|
; extensions for Script Mgr. This file and ScriptMgrExtHead.a
|
|||
|
; replace SMgrExt.a.
|
|||
|
;___________________________________________________________________________________________________
|
|||
|
; To Do:
|
|||
|
; Figure out best way to use FindWord glue for ROM too.
|
|||
|
; Figure out best way to use new initialization stuff for ROM too.
|
|||
|
;
|
|||
|
;___________________________________________________________________________________________________
|
|||
|
|
|||
|
blanks on
|
|||
|
string asis
|
|||
|
|
|||
|
LOAD 'StandardEqu.d'
|
|||
|
include 'ScriptPriv.a'
|
|||
|
include 'PatchMacros.a'
|
|||
|
|
|||
|
; =============================================================================
|
|||
|
; RESIDENT CODE
|
|||
|
; Code that is not in ROM <56>
|
|||
|
; Note: as the conditionals stand now, none of the following code is used.
|
|||
|
; =============================================================================
|
|||
|
|
|||
|
ROMVersions MacPlus,MacSE,MacII,Esprit,Aurora
|
|||
|
|
|||
|
FixCacheAndStr2Date equ 0 ; do this for 7.1? (not 7.0.1) <35>
|
|||
|
useInterChar equ 0 ; Turn off code related to interchar spacing in Roman <37>
|
|||
|
; also defined in RomanNewJust.a
|
|||
|
|
|||
|
IF FixCacheAndStr2Date THEN ; <34><35>
|
|||
|
|
|||
|
;
|
|||
|
; for ptchComeFromString2Time
|
|||
|
; note all the MacPlus,$0 kind of parameters this is only to keep the FixRomAddress macro happy
|
|||
|
; the patch code will never be reached on a Plus,SE, or II since String2Time doesn't exist in the ROM
|
|||
|
|
|||
|
ROMMatchStringJSR BIND (MacPlus,$0),(MacSE,$0),(MacII,$0),(Aurora,$1F664),(Esprit,$19142)
|
|||
|
ROMStr2TimeUprText BIND (MacPlus,$0),(MacSE,$0),(MacII,$0),(Aurora,$1F64C),(Esprit,$1912A)
|
|||
|
|
|||
|
ptchLwrString proc export
|
|||
|
|
|||
|
; If we are coming from String2Time on Portable or IIci ROMs, change return
|
|||
|
; address so we return to ROM through our tail patch. Makes changes in String2Time
|
|||
|
; to accomodate new cache structure. Slime central.
|
|||
|
bra.s @protection
|
|||
|
BackToTrap oldLwrString2 ; Jump back to the Rom
|
|||
|
@protection
|
|||
|
move.l RomBase,a1 ; note: preserve a0,d0,d1 for LwrString
|
|||
|
move.w 8(a1),d2 ; get ROM number as word
|
|||
|
cmp.w #Esprit,d2 ; is this a Portable?
|
|||
|
beq.s @tweakRetnAddr ; if so, see if we're in String2Time
|
|||
|
cmp.w #Aurora,d2 ; is this IIci family?
|
|||
|
bne.s @beginRealPatch ; if not, skip check for String2Time
|
|||
|
@tweakRetnAddr
|
|||
|
CMPBIND ROMStr2TimeUprText,OSTrapReturnAddressDepth(sp) ; From String2Time?
|
|||
|
bne.s @beginRealPatch ; if not, just continue with patch
|
|||
|
lea ptchComeFromString2Time,a1 ; addr for LwrString to return to
|
|||
|
move.l a1,OSTrapReturnAddressDepth(sp) ; so trap returns to patch, not ROM
|
|||
|
@beginRealPatch
|
|||
|
|
|||
|
import NewLwrString ; in ScriptMgrExtensions.a <56>
|
|||
|
bra.s NewLwrString ; <56>
|
|||
|
|
|||
|
endproc
|
|||
|
|
|||
|
; ----------------------------------------------------------------------------
|
|||
|
; Tail patch to LwrString, changes String2Time to use new cache structure <34>
|
|||
|
; ----------------------------------------------------------------------------
|
|||
|
|
|||
|
; include new cache record here
|
|||
|
; it will redefine TimeLen, NumTimeStrings
|
|||
|
|
|||
|
Str15 EQU 16 ; length of string[15]
|
|||
|
Str4 EQU 5 ; length of string[4] added for more space-efficient cache <1-8-91jh><10>
|
|||
|
Str8 EQU 9 ; length of string[8] ditto <34>
|
|||
|
|
|||
|
TimeLen equ 4 ; length of time strings
|
|||
|
NumDays EQU 7 ; length of various arrays
|
|||
|
NumMonths EQU 12
|
|||
|
NumTimeStrings equ 4 ; number of time strings ( we now have AM, PM, 24 hour AM, 24 hour PM)
|
|||
|
|
|||
|
DayList EQU NumDays*Str15
|
|||
|
MonthList EQU NumMonths*Str15
|
|||
|
|
|||
|
maxExtraSeps equ 10 ; count of extra seps in cache, must be at least 1!! <10>
|
|||
|
IF maxExtraSeps<1 THEN ; <34>
|
|||
|
aerror &concat('maxExtraSeps wrong: ',&i2s(maxExtraSeps)) ; <34>
|
|||
|
ENDIF ; <34>
|
|||
|
|
|||
|
;========================IMPORTANT NOTE,POTENTIAL DANGER===================================
|
|||
|
;
|
|||
|
; The Data structure below is actually 6 bytes longer than the size of a
|
|||
|
; DateCacheRecord. Initially, I fixed it so that the Record fit within 512 bytes
|
|||
|
; but that change forced very large patches to String2Date and String2Time in the
|
|||
|
; aurora and esprit ROMs.
|
|||
|
;
|
|||
|
; Since these patches were large and required a fair amount of change to ScriptMgrROMPatch.a
|
|||
|
; we rethought fixing the cache so that it fit into 512 bytes and instead opted
|
|||
|
; for keeping the fields in identical offsets.
|
|||
|
;
|
|||
|
; This is not as bad as it sounds (although it is bad, let there be no doubt about that)
|
|||
|
; since the last 32 bytes of a tokenBlock are reserved and at this time (7.0 and earlier)
|
|||
|
; are neither read from nor written to. For that reason, the fact that the declaration
|
|||
|
; below is 6 bytes longer than the memory provided for it is only a forgiveable bit
|
|||
|
; of forgetfulness.
|
|||
|
;
|
|||
|
; However, do NOT read or write any values past the itlResource field of the token block.
|
|||
|
; And do NOT do what inside mac and the published headers say to do which is zero out
|
|||
|
; the last 32 bytes of the token block. Doing that will TRASH memory. DON'T DO IT.
|
|||
|
;========================================================================================
|
|||
|
|
|||
|
Cache RECORD 0
|
|||
|
version ds.w 1
|
|||
|
CurrentDate DS LongDateRec
|
|||
|
BaseDate DS LongDateRec
|
|||
|
|
|||
|
theDays DS.B DayList
|
|||
|
theMonths DS.B MonthList
|
|||
|
|
|||
|
theEveStr DS.B Str4 ;use new string definitions to make room for altseps
|
|||
|
theMornStr DS.B Str4 ;
|
|||
|
the24hrAMStr DS.B Str4 ;
|
|||
|
the24hrPMStr DS.B Str4 ;
|
|||
|
countAltSeps DS.W 1 ;number of separator tokens <1-8-91, jh>
|
|||
|
AltSeps DS.W maxExtraSeps ;contains an array of separator tokens <1-8-91, jh>
|
|||
|
filler DS.B 6
|
|||
|
|
|||
|
theTimeSep DS.W 1
|
|||
|
theDateSep DS.W 1
|
|||
|
theDateOrder DS.b 1
|
|||
|
longDateOrder ds.b 1
|
|||
|
theAbbrLen DS.W 1
|
|||
|
TBlock DS tokenBlock
|
|||
|
CacheSize equ *
|
|||
|
theTimeStrings equ theEveStr
|
|||
|
ENDR
|
|||
|
|
|||
|
|
|||
|
ptchComeFromString2Time
|
|||
|
;ok we came from the _UpperText call in String2Time so set up the stack for a JSR to matchString
|
|||
|
;and then JMP back
|
|||
|
CLR.W -(SP) ; attempt to find a time string which matches alpha token
|
|||
|
MOVE.L A2,-(SP)
|
|||
|
WITH TokenRec,Cache
|
|||
|
MOVE.W length+2(a3),-(SP) ; push length as integer
|
|||
|
MOVE.W #2,-(SP) ; push minlen as integer <2/23/88med>
|
|||
|
PEA theTimeStrings(a4) ; array
|
|||
|
ENDWITH
|
|||
|
|
|||
|
MOVE.W #TimeLen,-(SP)
|
|||
|
MOVE.W #NumTimeStrings,-(SP)
|
|||
|
JMPBIND ROMMatchStringJSR ; jump to the JSR MatchString in the old String2Time
|
|||
|
|
|||
|
endproc
|
|||
|
|
|||
|
ENDIF ; FixCacheAndStr2Date
|
|||
|
|
|||
|
IF useInterChar THEN ; only called in RomanNewJust.a when this conditional is true <56>
|
|||
|
|
|||
|
; for GetScaledFontInfo <21>
|
|||
|
ROMGetFontInfoPlus14H BIND (MacPlus,$8E98),(MacSE,$13608),(MacII,$19A88),(Esprit,$20046),(Aurora,$29434)
|
|||
|
|
|||
|
;------------------------------------------ <5><21>
|
|||
|
;
|
|||
|
; PROCEDURE GetScaledFontInfo(VAR info: FontInfo; numer, denom: Point);
|
|||
|
;
|
|||
|
; Just modifies the beginning of GetFontInfo, then jumps into ROM for
|
|||
|
; the rest.
|
|||
|
;
|
|||
|
proc
|
|||
|
export GetScaledFontInfo
|
|||
|
|
|||
|
NUMER EQU -4 ;POINT
|
|||
|
DENOM EQU NUMER-4 ;POINT
|
|||
|
VARSIZE EQU DENOM ;TOTAL LOCALS
|
|||
|
|
|||
|
GetScaledFontInfo
|
|||
|
move.l (sp)+,a0 ; pop return address
|
|||
|
move.l (sp)+,d1 ; pop denom
|
|||
|
move.l (sp)+,d0 ; pop numer
|
|||
|
move.l a0,-(sp) ; restore return address
|
|||
|
|
|||
|
; Now we are set up like GetFontInfo call, but scaling params are in d0 and d1.
|
|||
|
|
|||
|
LINK A6,#VARSIZE ;ALLOCATE LOCALS
|
|||
|
MOVE.L d0,NUMER(A6) ;set numer to scaling value
|
|||
|
MOVE.L d1,DENOM(A6) ;set denom to scaling value
|
|||
|
|
|||
|
JMPBIND ROMGetFontInfoPlus14H ; jump into ROM
|
|||
|
|
|||
|
endproc
|
|||
|
|
|||
|
ENDIF ; useInterChar <56>
|
|||
|
|
|||
|
; =============================================================================
|
|||
|
; END RESIDENT CODE
|
|||
|
; =============================================================================
|
|||
|
|
|||
|
CutBackPt Proc Export
|
|||
|
|
|||
|
; EntryTable YourTrap,YourTrapID
|
|||
|
EntryTable 0 ; <=== Last table entry
|
|||
|
|
|||
|
EndProc
|
|||
|
|
|||
|
; =============================================================================
|
|||
|
; BEGIN INSTALL CODE
|
|||
|
; =============================================================================
|
|||
|
|
|||
|
SMgrInstallExt Proc Export ; init routine
|
|||
|
Import CutBackPt
|
|||
|
Import CodeEntry
|
|||
|
With SMgrRecord
|
|||
|
|
|||
|
; begin init code
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; The FixRomAddresses macro has to be located after the last bind macro in the
|
|||
|
; code, but has to be executed before any of them. So we put it at the end and
|
|||
|
; BSR to it.
|
|||
|
|
|||
|
IF (FixCacheAndStr2Date OR useInterChar) THEN ; <56>
|
|||
|
|
|||
|
bsr DoFixRomAddresses ; there are only ROM binds if one of the above is true
|
|||
|
|
|||
|
ENDIF ; <56>
|
|||
|
movem.l d3/a2-a4,-(sp)
|
|||
|
GetSMgrCore a4 ; get pointer to SMgrRecord
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; update ScriptUtil dispatch table
|
|||
|
;
|
|||
|
|
|||
|
smLowCall32 equ smLowCall++$FFFF0000 ; make longint; assumes smLowCall<0
|
|||
|
|
|||
|
move.l smgrDispTable(a4),a3 ; get pointer to DispTable
|
|||
|
move.w smgrDispLow(a4),d1 ; get old low limit
|
|||
|
cmp.w #smLowCall,d1 ; how low does table go?
|
|||
|
ble.s @tableSizeOk ; if low enough, skip resizing
|
|||
|
|
|||
|
; need to allocate bigger table, copy old contents
|
|||
|
|
|||
|
moveq #0,d0 ; for longizing
|
|||
|
move.w smgrDispHigh(a4),d0 ; get current high limit
|
|||
|
add.w d0,d0 ; make long offset
|
|||
|
move.l d0,d2 ; save for later
|
|||
|
sub.w #2*(smLowCall32-2),d0 ; subtract new low offset (negative)
|
|||
|
_NewPtr sys,clear ; now a0 points to new space
|
|||
|
bne ErrExit ; if error, bail
|
|||
|
lea -2*smLowCall32(a0),a2 ; ptr to new entry for selector=0
|
|||
|
add.w d1,d1 ; old low offset
|
|||
|
lea 0(a3,d1.w),a0 ; pointer to start of old table vectors
|
|||
|
move.l a0,a3 ; save for _DisposPtr
|
|||
|
lea 0(a2,d1.w),a1 ; pointer to same place in new table
|
|||
|
move.l d2,d0 ; high offset; already longized!
|
|||
|
sub.w d1,d0 ; subtract low offset
|
|||
|
addq #4,d0 ; need 1 long more than difference
|
|||
|
_BlockMove ; move old vectors to new place
|
|||
|
bne ErrExit ; if error, bail
|
|||
|
move.l a3,a0 ; pointer to start of old space
|
|||
|
_DisposPtr ; dispose of it; don't care if we fail
|
|||
|
move.l a2,a3 ; new DispTable pointer in a3
|
|||
|
move.l a3,smgrDispTable(a4) ; new DispTable pointer in globals
|
|||
|
move.w #smLowCall,smgrDispLow(a4) ; new low limit in globals
|
|||
|
@tableSizeOk
|
|||
|
|
|||
|
; now fill in real addresses for new routines.
|
|||
|
|
|||
|
lea NewUtilTable,a1
|
|||
|
lea CodeEntry,a2
|
|||
|
@fillLoop
|
|||
|
move.l (a1)+,d0 ; routine offset in low word
|
|||
|
beq.s @doneFill ; if terminator, quit
|
|||
|
lea 0(a2,d0.w),a0 ; get routine address
|
|||
|
swap d0 ; get selector from high word
|
|||
|
add.w d0,d0 ; make long offset
|
|||
|
move.l a0,0(a3,d0.w) ; put in dispatch table
|
|||
|
bra.s @fillLoop
|
|||
|
@doneFill
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; update RomanUtil dispatch table <2>
|
|||
|
|
|||
|
move.l smgrEntry+(smRoman*4)(a4),d0 ; Roman ScriptRecord ptr
|
|||
|
beq.s @romanDoneFill ; if 0, no disp table!
|
|||
|
move.l d0,a4 ; copy pointer
|
|||
|
|
|||
|
with ScriptRecord
|
|||
|
move.l scriptDispTable(a4),a3 ; get pointer to DispTable
|
|||
|
|
|||
|
move.w scriptDispHigh(a4),d1 ; get old high limit
|
|||
|
cmp.w #sisHighCall,d1 ; how high does table go?
|
|||
|
bge.s @romanTableSizeOk ; if high enough, skip resizing
|
|||
|
|
|||
|
; need to allocate bigger table, copy old contents
|
|||
|
|
|||
|
moveq #0,d0 ; for longizing
|
|||
|
move.w #sisHighCall+2,d0 ; get desired high limit (>0)
|
|||
|
sub.w scriptDispLow(a4),d0 ; subtract current low limit (>0)
|
|||
|
add.w d0,d0 ; size for longs, not words
|
|||
|
_NewPtr sys,clear ; now a0 points to new space
|
|||
|
bne ErrExit ; if error, bail
|
|||
|
move.l a0,a2 ; save new pointer
|
|||
|
move.l a3,a0 ; beginning of old table
|
|||
|
move.l a2,a1 ; beginning of new table
|
|||
|
moveq #0,d0 ; for longizing
|
|||
|
move.w scriptDispHigh(a4),d0 ; get old high limit
|
|||
|
sub.w scriptDispLow(a4),d0 ; subtract old low limit
|
|||
|
addq.w #2,d0
|
|||
|
add.w d0,d0 ; now we have size of old table
|
|||
|
_BlockMove ; move old vectors to new place
|
|||
|
bne ErrExit ; if error, bail
|
|||
|
move.l a3,a0 ; pointer to start of old space
|
|||
|
_DisposPtr ; dispose of it; don't care if we fail
|
|||
|
move.l a2,a3 ; new DispTable pointer in a3
|
|||
|
move.l a3,scriptDispTable(a4) ; new DispTable pointer in globals
|
|||
|
move.w #sisHighCall,scriptDispHigh(a4) ; new low limit in globals
|
|||
|
@romanTableSizeOk
|
|||
|
|
|||
|
; now fill in real addresses for new routines.
|
|||
|
; assumes new scriptDispTable pointer in a3, ScriptRecord pointer in a4
|
|||
|
|
|||
|
lea NewRomanTable,a1
|
|||
|
lea CodeEntry,a2
|
|||
|
@romanFillLoop
|
|||
|
move.l (a1)+,d0 ; get routine offset in low word
|
|||
|
beq.s @romanDoneFill ; if terminator, quit
|
|||
|
movea.l #0,a0 ; assume 0 entry in dispatch table <49>
|
|||
|
tst.w d0 ; is this what we want? <49>
|
|||
|
beq.s @gotAddress ; if so, leave it as 0 <49>
|
|||
|
lea 0(a2,d0.w),a0 ; otherwise get real routine address
|
|||
|
@gotAddress ; <49>
|
|||
|
swap d0 ; get selector from high word
|
|||
|
sub.w scriptDispLow(a4),d0 ; make word offset in table
|
|||
|
add.w d0,d0 ; make long offset
|
|||
|
move.l a0,0(a3,d0.w) ; put in dispatch table
|
|||
|
bra.s @romanFillLoop
|
|||
|
endwith
|
|||
|
@romanDoneFill
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; install ScriptUtil patch <1.2> remove conditionals <37>
|
|||
|
|
|||
|
InstToolTp xScriptUtil,$0B5
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; update version number <1.3>
|
|||
|
;
|
|||
|
; The GetSMgrCore below was commented out; uncomment it because we blew a4 away
|
|||
|
; with the RomanUtil dispatch table update in <2> above. <4>
|
|||
|
|
|||
|
GetSMgrCore a4 ; get pointer to SMgrRecord
|
|||
|
move.w #smgrVersPriv,smgrVersion(a4) ; <18>
|
|||
|
|
|||
|
; ----------------------------------------------------------------------------- <45>
|
|||
|
; Install new PrintAction routine
|
|||
|
|
|||
|
;; GetSMgrCore a4 ; get pointer to SMgrRecord
|
|||
|
import PrintAction ; <56>
|
|||
|
lea PrintAction,a0
|
|||
|
move.l a0,smgrPrint(a4)
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; Inactivate sVectFixSMgrWorld vector. <14><25>
|
|||
|
;
|
|||
|
; We want to inactivate the old sVectFixSMgrWorld vector by stuffing the
|
|||
|
; address of an rts. This ensures that any calls from the ROM InitWindows
|
|||
|
; or InitResources to FixSMgrWorld will be harmless.
|
|||
|
|
|||
|
;; GetSMgrCore a4 ; get pointer to SMgrRecord
|
|||
|
import KillOldFixWorldVec ; <56>
|
|||
|
lea KillOldFixWorldVec,a0
|
|||
|
move.l a0,sVectFixSMgrWorld(a4)
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; Initialize new emNumer and emDenom fields in ExpandMem <21>
|
|||
|
; Also initialize emScriptAppGlobals field. <23><27>
|
|||
|
;
|
|||
|
with ExpandMemRec
|
|||
|
move.l ExpandMem,a0
|
|||
|
move.l #$00010001,d0
|
|||
|
move.l d0,emNumer(a0)
|
|||
|
move.l d0,emDenom(a0)
|
|||
|
move.l #-1,emScriptAppGlobals(a0) ; <23><27>
|
|||
|
endwith ;ExpandMemRec
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; update Roman version no. <1.4><11>
|
|||
|
;
|
|||
|
; moved initialization of Roman font and style info from here to InitScripts <26>
|
|||
|
;
|
|||
|
|
|||
|
with ScriptRecord
|
|||
|
;; GetSMgrCore a4 ; get pointer to SMgrRecord
|
|||
|
move.l smgrEntry+(smRoman*4)(a4),a2 ; Roman ScriptRecord pointer
|
|||
|
|
|||
|
move.w #romanVersPriv,scriptVersion(a2) ; set version no. <1.4>
|
|||
|
endwith ;ScriptRecord
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; Install Script Manager's Gestalt selectors. <1.4>
|
|||
|
|
|||
|
import gestaltScriptMgr,gestaltSMgrTable
|
|||
|
|
|||
|
lea gestaltSMgrTable,a2 ; table of Gestalt selectors
|
|||
|
; and GetEnvirons verbs
|
|||
|
@loopInstallGestalt
|
|||
|
move.l (a2)+,d0 ; get next Gestalt selector
|
|||
|
beq.s @doneInstallGestalt ; 0 means we're done
|
|||
|
addq.l #2,a2 ; skip GetEnvirons verb
|
|||
|
lea gestaltScriptMgr,a0 ; push gestaltFunction ProcPtr
|
|||
|
_NewGestalt
|
|||
|
; ignore OSErr in d0 (what can
|
|||
|
; we do if it is not noErr?)
|
|||
|
bra.s @loopInstallGestalt
|
|||
|
@doneInstallGestalt
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; install LwrString patch for 2-byte chars <1.8>
|
|||
|
|
|||
|
IF FixCacheAndStr2Date THEN ; <34><35>
|
|||
|
PatchOSJump oldLwrString2,$56 ; for our _LwrString come from patch in
|
|||
|
; String2Date (aurora, esprit only)
|
|||
|
InstOSTp ptchLwrString,$56 ; <20>and then install patch
|
|||
|
ELSE ; <56>
|
|||
|
InstOSTp NewLwrString,$56 ; in ScriptMgrExtensions.a <56>
|
|||
|
ENDIF
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; Allocate handle to ClientLLRecord and put handle in SMgrRecord. <33>
|
|||
|
|
|||
|
IF useInterChar THEN ; <33><37>
|
|||
|
|
|||
|
with ClientLLRecord
|
|||
|
move.l IntlSpec,a1
|
|||
|
move.l #cllRecSize,d0
|
|||
|
_NewHandle
|
|||
|
bne.s @doneAllocClientLLRec
|
|||
|
move.l a0,smgrClientLLRecHndl(a1)
|
|||
|
endwith ;ClientLLRecord
|
|||
|
@doneAllocClientLLRec
|
|||
|
|
|||
|
ENDIF ; <33>
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; Perform auto-initialization of script systems based on info in their itlb <8>
|
|||
|
|
|||
|
; Skip if Opt-E or Shift <37><51>
|
|||
|
btst #0,KeyMap+7 ; shift key down? <51>
|
|||
|
bne DoneAutoInit ; if yes, skip script install <51>
|
|||
|
btst #2,KeyMap+7 ; option key down? <37>
|
|||
|
beq.s @noSkipInstall ; no, skip check. <37>
|
|||
|
subq #2,sp ; make room for Boolean result <37>
|
|||
|
move.w #'e',-(sp) ; push 'e' as the char to test for <37>
|
|||
|
|
|||
|
import iTestLetter ; <56>
|
|||
|
bsr iTestLetter ; returns TRUE if key with Roman 'e' being pressed <37>44>
|
|||
|
|
|||
|
tst.b (sp)+ ; what was the result? <37>
|
|||
|
bne DoneAutoInit ; if Opt-e, skip script install <37>
|
|||
|
@noSkipInstall ; <37>
|
|||
|
|
|||
|
; no Opt-E, go ahead
|
|||
|
with scriptRecord,itlbRecord,ItlbExtRecord
|
|||
|
GetSMgrCore a4 ; reset a4 to point to SMgrRecord
|
|||
|
move.w #smgrCount-1,d3 ; for all entries.
|
|||
|
|
|||
|
@SimpleLoopStart
|
|||
|
move.w d3,d0 ; copy index.
|
|||
|
lsl.w #2,d0 ; long word offset.
|
|||
|
move.l smgrEntry(a4,d0.w),d0 ; script installed?
|
|||
|
bne @NextSimple ; yes -> try next entry.
|
|||
|
|
|||
|
subq.l #4,sp ; make room for handle.
|
|||
|
move.l #'itlb',-(sp) ; push bundle type.
|
|||
|
move.w d3,-(sp) ; push bundle number.
|
|||
|
_GetResource ; load the resource.
|
|||
|
move.l (sp)+,d0 ; handle = nil?
|
|||
|
beq @NextSimple ; yes -> try next entry.
|
|||
|
|
|||
|
; we have a prospective itlb, so check if the simple bit is on
|
|||
|
move.l d0,a3 ; load bundle handle.
|
|||
|
move.l (a3),a0 ; load bundle pointer.
|
|||
|
btst.b #smsfAutoInit,itlbFlags+1(a0) ; auto-init it? (+1 for mem test)
|
|||
|
beq @ReleaseSimple ; no, try next one
|
|||
|
|
|||
|
; we have a simple script, so allocate the record, load the font numbers
|
|||
|
|
|||
|
move.l itlbLocalSize(a0),d0 ; requested size for script locals
|
|||
|
cmp.l #scriptSize,d0 ; must be <20> ScriptRecord size
|
|||
|
bcc.s @doneFixLocalRecordSize ; if it already is, skip fix
|
|||
|
move.l #scriptSize,d0 ; if too small, fix it
|
|||
|
@doneFixLocalRecordSize
|
|||
|
_NewPtr sys,clear ; allocate script local data
|
|||
|
bne ErrExit ; if error, bail
|
|||
|
move.l a0,a2 ; save entry pointer.
|
|||
|
move.w d3,d0 ; get script number
|
|||
|
asl.w #2,d0 ; *4 for long array
|
|||
|
move.l a2,smgrEntry(a4,d0.w) ; store in SMgr globals.
|
|||
|
|
|||
|
; Use SimpleTable to initialize scriptVersion, scriptCreator, scriptFile instead <13>
|
|||
|
; of explicitly initializing them here.
|
|||
|
|
|||
|
; Copy font information from itlb, and check it.
|
|||
|
; For 7.0, this is moved to InitScripts. <26>
|
|||
|
|
|||
|
; copy relevant entries from Roman ScriptRecord to simple ScriptRecord
|
|||
|
; a2=simple ScriptRecord
|
|||
|
|
|||
|
move.l smgrEntry+(smRoman*4)(a4),a0 ; address of roman globals
|
|||
|
lea SimpleTable,a1 ; load table pointer.
|
|||
|
@SimpleEntryLoop
|
|||
|
move.w (a1)+,d0 ; get offset (and trap code).
|
|||
|
blt.s @ReleaseSimple ; last entry is -1. <14><**>
|
|||
|
move.w 0(a0,d0.w),0(a2,d0.w) ; copy Roman word to simple scriptRecord
|
|||
|
bra.s @SimpleEntryLoop ; do the next routine.
|
|||
|
|
|||
|
@ReleaseSimple
|
|||
|
; Don't bother releasing anymore <26>
|
|||
|
|
|||
|
@NextSimple
|
|||
|
subq #1,d3 ; don't do Roman
|
|||
|
bgt.s @SimpleLoopStart ; keep going until 0 or less
|
|||
|
bra DoneAutoInit ; clean exit <37>
|
|||
|
endWith ;
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; Table of ScriptRecord fields to copy from Roman when auto-initializing
|
|||
|
; a script.
|
|||
|
;
|
|||
|
; Moved initialization of scriptVersion, scriptCreator, scriptFile here instead <13>
|
|||
|
; of explicitly initializing them above.
|
|||
|
;
|
|||
|
; Changed terminator to be -1, cause one of the fields we want to initialize <14><**>
|
|||
|
; with this table has an offset of 0.
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
|
|||
|
SimpleTable
|
|||
|
with ScriptRecord
|
|||
|
dc.w scriptVersion ; <13>
|
|||
|
dc.w scriptCreator ; <13>
|
|||
|
dc.w scriptCreator+2 ; (long) <13>
|
|||
|
dc.w scriptFile ; <13>
|
|||
|
dc.w scriptFile+2 ; (long) <13>
|
|||
|
dc.w scriptDispTable
|
|||
|
dc.w scriptDispTable+2 ; (long)
|
|||
|
dc.w scriptDispLow
|
|||
|
dc.w scriptDispHigh
|
|||
|
dc.w scriptPrint
|
|||
|
dc.w scriptPrint+2 ; (long)
|
|||
|
dc.w scriptTrap
|
|||
|
dc.w scriptTrap+2 ; (long)
|
|||
|
dc.w scriptName
|
|||
|
dc.w scriptName+2 ; (long)
|
|||
|
dc.w $ffff ; now -1 is terminator <14><**>
|
|||
|
endwith
|
|||
|
|
|||
|
DoneAutoInit
|
|||
|
|
|||
|
;____________________________________________________________________________ <14>
|
|||
|
; Installing head patch to SystemMenu to handle Keyboard Menu.
|
|||
|
|
|||
|
import ptchSystemMenu
|
|||
|
|
|||
|
move.w #$1B5,d0 ; SystemMenu trap number
|
|||
|
_GetTrapAddress ; returns in a0
|
|||
|
move.l IntlSpec,a1
|
|||
|
move.l a0,sVectOldSystemMenu(a1)
|
|||
|
InstToolTp ptchSystemMenu,$1B5
|
|||
|
|
|||
|
;------------------------------------------------------------------------------
|
|||
|
;
|
|||
|
bsr InitDictionaryMgr
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; end init code
|
|||
|
|
|||
|
Exit
|
|||
|
movem.l (sp)+,d3/a2-a4
|
|||
|
lea CutBackPt,a0 ; <=== Keep these two lines<65>
|
|||
|
Rts ; <=== in any case
|
|||
|
ErrExit
|
|||
|
move.w #dsSysErr,d0 ; load generic error
|
|||
|
_SysError ; system error!
|
|||
|
bra.s Exit
|
|||
|
|
|||
|
|
|||
|
;=======================================================================
|
|||
|
;
|
|||
|
; InitDictionaryMgr
|
|||
|
; Called to load the 'dimg' file which contains the
|
|||
|
; Dictionary Manager code. We load the resources stick
|
|||
|
; them into expand mem, and call it a day.
|
|||
|
; JH, 10-9-91
|
|||
|
;========================================================================
|
|||
|
|
|||
|
InitDictionaryMgr
|
|||
|
with ExpandMemRec
|
|||
|
clr.l -(sp) ;room for our handle
|
|||
|
move.l #'dimg',-(sp) ;looking for a 'dimg' resource
|
|||
|
move.w #-16385,-(sp) ;with an id of -16385
|
|||
|
move.w #MapFalse,RomMapInsert ;don't load it
|
|||
|
_GetResource ;see if we can get it
|
|||
|
move.l ExpandMem,a0 ;ptr to expandmem rec into a0
|
|||
|
move.l (sp)+,emDictionaryMgrPackHandle(a0) ;move the handle into our expandmem handle
|
|||
|
; move.w #0,emDictionaryMgrUseCount(a0) ;0 our count
|
|||
|
rts
|
|||
|
endwith ;ExpandMemRec
|
|||
|
|
|||
|
; -----------------------------------------------------------------------------
|
|||
|
; *** We need a better way to handle the conditionals here. The table here needs <14>
|
|||
|
; *** to be sized depending on the min and max codes for a given set of
|
|||
|
; *** conditionals, and the installation code needs to fill in BitBucket for any
|
|||
|
; *** holes. This won't work correctly if any of the conditionals below happen
|
|||
|
; *** not to be equal to (smgrSysVers >= $700).
|
|||
|
|
|||
|
NewUtilTable
|
|||
|
|
|||
|
import FontScript ; <17>
|
|||
|
dc.w smFontScript,FontScript-CodeEntry ; <17>
|
|||
|
import IntlScript ; <17>
|
|||
|
dc.w smIntlScript,IntlScript-CodeEntry ; <17>
|
|||
|
import Font2Script ; <17>
|
|||
|
dc.w smFont2Script,Font2Script-CodeEntry ; <17>
|
|||
|
|
|||
|
import RealScript ; <38>
|
|||
|
dc.w smRealScript,RealScript-CodeEntry ; <38>
|
|||
|
import Font2RealScript ; <38>
|
|||
|
dc.w smFont2RealScript,Font2RealScript-CodeEntry ; <38>
|
|||
|
import SCLwrString ; <38>
|
|||
|
dc.w smSCLwrString,SCLwrString-CodeEntry ; <38>
|
|||
|
import xTestLetter ; <44>
|
|||
|
dc.w smTestLetter,xTestLetter-CodeEntry ; <44>
|
|||
|
import ScriptToRange ; <60>
|
|||
|
dc.w smScriptToRange,ScriptToRange-CodeEntry ; <60>
|
|||
|
import NFindScriptRun ; <61>
|
|||
|
dc.w smNFindScriptRun,NFindScriptRun-CodeEntry ; <61>
|
|||
|
|
|||
|
import StyledLineBreak ; <62>
|
|||
|
dc.w -2,StyledLineBreak-CodeEntry ; <62>
|
|||
|
|
|||
|
import GetEnvirons ; <1.4><12>
|
|||
|
dc.w smGetEnvirons,GetEnvirons-CodeEntry ; <1.4><12>
|
|||
|
import SetEnvirons ; <1.4><12>
|
|||
|
dc.w smSetEnvirons,SetEnvirons-CodeEntry ; <1.4><12>
|
|||
|
import GetScript ; <1.4><12>
|
|||
|
dc.w smGetScript,GetScript-CodeEntry ; <1.4><12>
|
|||
|
import SetScript ; <1.4><12>
|
|||
|
dc.w smSetScript,SetScript-CodeEntry ; <1.4><12>
|
|||
|
import KeyScript ; <1.5><12>
|
|||
|
dc.w smKybdScript,KeyScript-CodeEntry ; <1.5><12>
|
|||
|
|
|||
|
import xNFindWord ; <1.3>
|
|||
|
dc.w smNFindWord,xNFindWord-CodeEntry ; <1.3>
|
|||
|
import TruncString ; <1.3><12>
|
|||
|
dc.w smTruncString,TruncString-CodeEntry ; <1.3><12>
|
|||
|
import TruncText ; <1.3><12>
|
|||
|
dc.w smTruncText,TruncText-CodeEntry ; <1.3><12>
|
|||
|
import ReplaceText ; <1.3><12>
|
|||
|
dc.w smReplaceText,ReplaceText-CodeEntry ; <1.3><12>
|
|||
|
import InitScripts ; <14>
|
|||
|
dc.w smInitScripts,InitScripts-CodeEntry ; <14>
|
|||
|
import AddScriptFonts ; <16>
|
|||
|
dc.w smAddScriptFonts,AddScriptFonts-CodeEntry ; <16>
|
|||
|
import IsCmdChar ; <24>
|
|||
|
dc.w smIsCmdChar,IsCmdChar-CodeEntry ; <24>
|
|||
|
import InitScriptApp ; <27>
|
|||
|
dc.w smInitScriptApp,InitScriptApp-CodeEntry ; <27>
|
|||
|
import CleanupScriptApp ; <27>
|
|||
|
dc.w smCleanupScriptApp,CleanupScriptApp-CodeEntry ; <27>
|
|||
|
import ReInitScripts ; <32>
|
|||
|
dc.w smReInitScripts,ReInitScripts-CodeEntry ; <32>
|
|||
|
import FindCharInSet ; <33>
|
|||
|
dc.w smFindCharInSet,FindCharInSet-CodeEntry ; <33>
|
|||
|
|
|||
|
import InitKeybdMenu ; <14>
|
|||
|
dc.w smInitKeybdMenu,InitKeybdMenu-CodeEntry ; <14>
|
|||
|
import SetKbdMenuInfo ; <19>
|
|||
|
dc.w smSetKbdMenuInfo,SetKbdMenuInfo-CodeEntry ; <19>
|
|||
|
import RebuildKeybdMenu ; <22>
|
|||
|
dc.w smRebuildKeybdMenu,RebuildKeybdMenu-CodeEntry ; <22>
|
|||
|
|
|||
|
dc.l 0 ; terminator
|
|||
|
|
|||
|
NewRomanTable
|
|||
|
|
|||
|
import Char2Pixel ; <5>
|
|||
|
dc.w smChar2Pixel,Char2Pixel-CodeEntry ; <5>
|
|||
|
import Pixel2Char ; <2>
|
|||
|
dc.w smPixel2Char,Pixel2Char-CodeEntry ; <2>
|
|||
|
import DrawJust ; <5>
|
|||
|
dc.w smDrawJust,DrawJust-CodeEntry ; <5>
|
|||
|
import MeasureJust ; <5>
|
|||
|
dc.w smMeasureJust,MeasureJust-CodeEntry ; <5>
|
|||
|
import PortionText ; <2>
|
|||
|
dc.w smPortionText,PortionText-CodeEntry ; <2>
|
|||
|
|
|||
|
;; import BitBucket ; <30>
|
|||
|
;; dc.w smIsSpecialFont,BitBucket-CodeEntry ; <30>
|
|||
|
;; dc.w smRawPrinterValues,BitBucket-CodeEntry ; <30>
|
|||
|
dc.w smIsSpecialFont,0 ; <49>
|
|||
|
dc.w smRawPrinterValues,0 ; <49>
|
|||
|
|
|||
|
import NChar2Pixel ; <2>
|
|||
|
dc.w smNChar2Pixel,NChar2Pixel-CodeEntry ; <2>
|
|||
|
import NPixel2Char ; <2>
|
|||
|
dc.w smNPixel2Char,NPixel2Char-CodeEntry ; <2>
|
|||
|
import NDrawJust ; <2>
|
|||
|
dc.w smNDrawJust,NDrawJust-CodeEntry ; <2>
|
|||
|
import NMeasureJust ; <2>
|
|||
|
dc.w smNMeasureJust,NMeasureJust-CodeEntry ; <2>
|
|||
|
import NPortionText ; <2>
|
|||
|
dc.w smNPortionText,NPortionText-CodeEntry ; <2>
|
|||
|
|
|||
|
import FindScriptRun ; <8>
|
|||
|
dc.w smFindScriptRun,FindScriptRun-CodeEntry ; <8>
|
|||
|
|
|||
|
import ParseTable ; <18>
|
|||
|
dc.w smParseTable,ParseTable-CodeEntry ; <18>
|
|||
|
|
|||
|
import RomanGetScript, RomanSetScript ; <50>
|
|||
|
dc.w smGetScript,RomanGetScript-CodeEntry ; <50>
|
|||
|
dc.w smSetScript,RomanSetScript-CodeEntry ; <50>
|
|||
|
|
|||
|
import CharType ; <54>
|
|||
|
dc.w smCharType,CharType-CodeEntry ; <54>
|
|||
|
|
|||
|
dc.l 0
|
|||
|
|
|||
|
EndWith
|
|||
|
|
|||
|
IF (FixCacheAndStr2Date OR useInterChar) THEN ; <56> only needed if one of these is true
|
|||
|
|
|||
|
DoFixRomAddresses ; <21>
|
|||
|
FixRomAddresses ; new macro <21>
|
|||
|
rts ; <21>
|
|||
|
|
|||
|
ENDIF ; <56>
|
|||
|
|
|||
|
EndProc
|
|||
|
|
|||
|
END
|
|||
|
|
|||
|
|
|||
|
|