mac-rom/Toolbox/ScriptMgr/ScriptMgrUtil.a

217 lines
11 KiB
Plaintext
Raw Normal View History

;
; File: ScriptMgrUtil.a (formerly SMgrUtil.a)
;
; Contains: Script Manager dispatcher and utility routines
;
; Written by: Joe Ternasky, September 13, 1986
;
; Copyright: <09> 1986-1990, 1992 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <8> 4/30/92 JSM ScriptMgrDispatch.a and ScriptMgrKeyGetSet.a now compiled
; separately for ROM builds, don<6F>t include them here, get rid of
; conditionals: smgrUseStdExit is always true. This file has no
; more conditionals.
; <7> 5/24/90 PKE Reorganized files: Moved ScriptUtil dispatcher and FontScript,
; Font2Script, IntlScript to new file ScriptMgrDispatch.a. This is
; included here (ptch 4) for 6.x, and included in
; ScriptMgrExtTail.a (ptch 27) for 7.0. In the latter case, we
; still have the BitBucket routines here because they are used by
; the RomanUtil dispatcher.
; <6> 5/11/90 PKE Expand dispatch table for new internal routine _AddScriptFonts.
; <5> 5/5/90 PKE Expand dispatch table for new internal routines InitScripts and
; InitKeybdMenu.
; <4> 4/10/90 PKE Use smgrSysVers, smgrROMVers, and forRom symbols instead of
; buildLevel. Deleted conditionalized definition of SysVers. Moved
; KeyScript, Get/SetEnvirons, and Get/SetScript into separate file
; ScriptMgrKeyGetSet.a which is included here. Started organizing
; for ROMification of 7.0 extensions. Add export of FontScript,
; IntlScript, Font2Script.
; <3> 3/20/90 EMT Removed unnecessary ROM85 references and oldMacTweek code.
; <2> 3/19/90 PKE Always export BitBucket and BitBucketReg. Use new feature
; conditionals smgrUseStdExit and smgrUseDispTablePtr. Deleted old
; definition: if forRom undefined, then forRom equ 0. Updated
; header to BBS format and fixed tabs.
; <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:)
; <2.7> 9/18/89 PKE Move KeyScript to ptch 27 so we can make a bug fix in itlk
; processing for both old and new ROMs. Change its vector here to
; be a dummy and stuff real address in ptch 27.
; <2.6> 9/17/89 PKE For 7.0, move Get/SetEnvirons and Get/SetScript to ptch 27.
; Change the vectors for these routines to be dummy vectors here;
; ptch 27 will stuff the real addresses.
; <2.5> 9/15/89 PKE Put in dummy vectors for TruncText, TruncString, ReplaceText,
; and, yes, NFindWord again (we'll allow a direct call with
; explicit specification of the break table, but the normal
; FindWord call won't use this vector). Use smLowCall60x instead
; of smLowCall for SysVers < $700, due to the fact that we can't
; conditionalize ScriptEqu.a (it is part of a dumpfile).
; <2.4> 9/5/89 PKE Delete the NFindWord vector space from the dummy address table
; created in 2.3, since we now have a different mechanism for
; getting to NFindWord.
; <2.3> 9/4/89 PKE Add dummy addresses for 7.0 routines to utilTable, to force
; allocation of space in dispatch table pointed to by
; smgrDispTable. The real routine addresses will be filled in
; later by SMgrExtTail.a (ptch 27).
; <2.2> 8/26/89 PKE Cleaned up some conditionals.
; <2.1> 8/22/89 SES Removed references to nFiles.
; <2.0> 6/30/89 PKE NEEDED FOR AURORA: Optimize table access in Get/SetEnvirons and
; Get/SetScript (from code review).
; <1.9> 6/23/89 PKE Add four verbs to GetScript/SetScript which correspond to new
; font&size information in ScriptRecord; skip definition of
; buildLevel (done in ScriptEqu.priv).
; <1.8> 6/5/89 PKE Fix comments in CommonMapping, (ROM & 7.0 only) change a bgt to
; a bpl
; <1.7> 4/26/89 PKE (ROM & 7.0 only) Change _ScriptUtil to use dispatch tables in
; RAM, accessed through pointer/limits in SmgrRecord.
; <1.6> 3/8/89 PKE Change a BEQ.S to BEQ so Big Bang builds.
; <1.5> 3/5/89 PKE Use KeyScript patch from KeyHack.a for Big Bang (as well as ROM)
; <1.4> 2/21/89 PKE Replaced with RomProj version, which already had system and Rom
; sources merged.
; (EASE ROMproj history below)
; <1.5> 2/21/89 PKE Fix up includes: always use include 'inc.sum.a'.
; <1.4> 2/14/89 PKE Updated to use MPW 3.0 final ScriptEqu.a equate names
; <1.3> 2/3/89 PKE Merged with current system sources (CCH's 01/16/1989 merge of
; 6.0.3 and 7.0 sources, done in RES.sys:smgr)
; <1.2> 11/14/88 PKE Synchronize EASE and Projector
; <1.1> 11/11/88 CCH Fixed Header.
; <1.0> 11/9/88 CCH Adding to EASE.
; (old EASE ROMproj history below)
; <1.7> 10/27/88 LDC Mods by Carl Hewitt and Brian McGhie in the process of putting
; Script Manager in ROM
; (EASE SYSproj history below)
; <1.3> 2/14/89 PKE Updated to use MPW 3.0 final ScriptEqu.a equates
; <1.2> 1/30/89 PKE Fixed end of GetEnvirons to do "move.l d0,result(a6)" for all
; systems, not just SysVers>=$700.
; <1.1> 1/16/89 CCH Merged 6.0.3 final sources into 7.0.
; <1.0> 11/16/88 CCH Added to EASE.
; (pre-EASE history below)
; 10/10/88 ldc Added code to handle itlk resource
; 10/5/88 ldc Changed scriptFlags to scriptXFlags
; ** Changes above for ROM or buildLevel 2: **
; 6/24/88 ldc Added checking for EastAsian private verbs
; 5/19/88 ldc Added StdUnlink and StdExit
; 4/27/88 ldc Began vectorization of routines for move to ROM
; 1/27/88 med Rotate if Alternate scripts doesn't work; cleaned up flow of
; control
; 1/27/88 med CommonMapping: use faster test for non-Roman; use moveq instead
; of move.w
; 1/27/88 med ChgFont not tested properly in StdTxMeas!!!
; 1/6/88 med Added dispatch for FindScriptRun, PortionText
; 1/4/88 med Moved clear of selector high bit to under appTweak flag
; 1/4/88 med Strip high bit in bit-bucket routine
; 11/16/87 med Added dispatches
; 11/10/87 med Merged public verbs from RomanUtil into GetScript/SetScript
; 11/10/87 med Added BitBucketReg export
; 11/10/87 med Removed AISTweeks
; 11/10/87 med Fix IntlScript to force non-romans to system script, too
; 8/18/87 med Added smCharPortion verb
; 7/7/87 med Added verb entry in table for GetEnvirons of smGenFlags,
; smOverride
; 1/13/87 jdt Changed environment verb smAppScript to smLastScript. Modified
; KeyScript and added last script meta-number for quick toggling
; between two scripts.
; 12/23/86 jdt Changed name of KeyScript and fixed a deadly bug where a4 was
; used instead of a1 to find the Script Manager globals.
; 12/22/86 jdt Added the smBidirect verb to the GetEnvirons/SetEnvirons calls.
; Changed stack frames to include argument sizes. Saved space in
; GetEnvirons/SetEnvirons. Added constant for last environment
; verb. Fixed OldParamTable's Transliterate entry. Changed
; compatibility flag names. Saved space in aisTweaks tables.
; 12/3/86 jdt Added another check for old AIS script system (1.0). Additional
; code braketed by compatability flags.
; 11/25/86 jdt Added aisTweaks flags around Arabic 1.0 compatability hacks.
; Added appTweaks flags around application compatability hacks.
; 11/21/86 MED Added GetThePort macro in FontScript and IntlScript.
; 11/20/86 jdt Replaced standard equates load.
; 11/17/86 KWK Handles both old->new and new->old re-ordering of routines.
; 11/16/86 KWK Backwards compatibility is NEVER pretty. Added check for
; ScriptUtil called w/old-style selector. Added check for call to
; old AIS script system (1.0). Handles re-org of selector values.
; 10/25/86 jdt Reorganized the routine selectors. Added result and argument
; lengths to selectors. Conditional assembly directives around
; previous change.
; 10/24/86 KWK Sometimes programming isn't pretty...force 104 to Kanji so Excel
; works correctly (doesn't look for high fonds when setting up
; font dialog).
; 10/1/86 KWK Always toggle keyboard in KybdScript even if same as before.
; 9/14/86 JDT Threaded FontScript, IntlScript, and Font2Script together.
; 9/13/86 JDT Broke out ScriptUtil routines from initialization code.
;___________________________________________________________________________________________________
; To Do (old):
; Extend number of calls handled directly by script manager.
; Remove aisTweaks for AIS 1.0 sometime in the near future.
; Remove msTweaks for Microsoft sometime in the near future.
; Remove mpwTweaks for MPW sometime in the near future.
;___________________________________________________________________________________________________
load 'StandardEqu.d'
include 'ScriptPriv.a'
blanks on
string asis
proc
export StdUnlink, StdExit ; standard exit points
;<5/19/88ldc> Added StdUnlink StdExit
; ----------------------------------------------------------------------------
; StdUnlink, StdExit
; Standard point of return for script manager routines.
; Input
; d0 := number of arguments passed to returning routine
; sp := address of jump target routine
; ----------------------------------------------------------------------------
StdUnlink
unlk a6 ; unlink the stack.
StdExit
move.l (sp)+,a0 ; pop return address.
add.w d0,sp ; pop arguments.
jmp (a0) ; restore the stack.
; -------------------------End of StdExit-------------------------------------
endproc
proc
export BitBucket, BitBucketReg ; always export <2>
; ----------------------------------------------------------------------------
; routine BitBucket
; input (sp) return address
; 4(sp) selector
; function clean up stack and bail from routine
; ----------------------------------------------------------------------------
BitBucket
move.l (sp)+,a0 ; pop the return address.
move.l (sp)+,d0 ; pop the selector value.
; drop thru
; ----------------------------------------------------------------------------
; routine BitBucketReg
; input a0 return address
; d0 selector
; function clean up stack and bail from routine
; ----------------------------------------------------------------------------
BitBucketReg
swap d0 ; load the lengths.
clr.l d1 ; clear a long.
move.b d0,d1 ; isolate arguments length.
lsr.w #8,d0 ; isolate results length.
and.w #$7F,d0 ; strip high bit <1/4/88med>
add.w d1,sp ; pop the arguments.
move.l sp,a1 ; copy the stack pointer.
bra.s @2 ; enter loop at bottom.
@1 clr.b (a1)+ ; clear a byte.
@2 dbra d0,@1 ; do the next byte.
jmp (a0) ; return to the caller.
endProc
end