mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 01:29:20 +00:00
5b0f0cc134
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.
287 lines
8.5 KiB
Plaintext
287 lines
8.5 KiB
Plaintext
;
|
|
; File: IntlResourcesPriv.a
|
|
;
|
|
; Contains: Macros for building itl2, and equates used for IntlTokenize code in
|
|
; ScriptMgrUtilText.a and itl4Roman.a. This file can be given to localizers and script
|
|
; developers along with sources for RomanItl2.a and itl4Roman.a. The macros are
|
|
; extracted from itl2 source to avoid unnecessary duplication. The itl4 equates are
|
|
; separated out from ScriptPriv.a because the other stuff in ScriptPriv.a should not
|
|
; be distributed and is not neeeded in order to build itl4 resources.
|
|
;
|
|
; Written by: PKE Peter Edberg
|
|
;
|
|
; Copyright: © 1992 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <2> 11/20/92 PKE Also add in SetFSRow macro used in script itl2 sources.
|
|
; <1> 11/17/92 PKE Extracted itl2 macros from RomanItl2.a and itl4 equates from
|
|
; ScriptPriv.a
|
|
;
|
|
;___________________________________________________________________________________________________
|
|
|
|
IF &TYPE('__INCLUDINGINTLRESOURCESPRIV__') = 'UNDEFINED' THEN
|
|
__INCLUDINGINTLRESOURCESPRIV__ SET 1
|
|
|
|
; ----------------------------------------------------------------------------
|
|
tblSize equ 256 ; bumped from 65 to 70 <03/12/89 pke> and up to 256 <1>
|
|
|
|
; ===============================MACROS=============================================
|
|
;
|
|
; Set up compressed type & case tables for CharType and Transliterate <12/16/87med>
|
|
;
|
|
; Modified SetClass macro to add NoMarkList <03/29/89 pke>
|
|
; eliminated LowerNoMarkList <1>
|
|
|
|
macro
|
|
SetClass &type, &casestrip, &case, &strip, &rest
|
|
gbla &cls[256], &TypeList[tblSize]
|
|
gbla &UpperList[tblSize], &LowerList[tblSize]
|
|
gbla &UpperNoMarkList[tblSize], &NoMarkList[tblSize]
|
|
lcla &i,&j,&first,&a,&b,&c,&t,&cs,&s
|
|
|
|
&t: seta &eval(&type)
|
|
&cs: seta &eval(&casestrip) ; change case + strip diacritics <9/23/88 ldc>
|
|
&c: seta &eval(&case) ; change case only
|
|
&s: seta &eval(&strip) ; strip diacritics only <03/12/89 pke>
|
|
&i: seta 5 ; now 5th parameter <03/12/89 pke>
|
|
while &i <= &nbr(&syslist) do
|
|
if &nbr(&syslist[&i]) then
|
|
&a: seta &eval(&syslist[&i,1])
|
|
&b: seta &eval(&syslist[&i,2])
|
|
else
|
|
&a: seta &eval(&syslist[&i])
|
|
&b: seta &a
|
|
endif
|
|
if &first = 0 then
|
|
&first: seta &a
|
|
endif
|
|
while &a <= &b do
|
|
&cls[&a+1]: seta lastClass
|
|
&a: seta &a+1
|
|
endWhile
|
|
&i: seta &i+1
|
|
endWhile
|
|
lastClass: set lastClass+1
|
|
&TypeList[lastClass]: seta &t
|
|
&UpperList[lastClass]: seta 0
|
|
&LowerList[lastClass]: seta 0
|
|
&UpperNoMarkList[lastClass]: seta 0
|
|
&NoMarkList[lastClass]: seta 0
|
|
if &c <> 0 then
|
|
if (&t**$80)= 0 then ; lowercase or no case
|
|
&UpperList[lastClass]: seta $000000FF**(&c-&first)
|
|
&UpperNoMarkList[lastClass]: seta $000000FF**(&cs-&first) ; <09/23/88 ldc>
|
|
else ; uppercase
|
|
&LowerList[lastClass]: seta $000000FF**(&c-&first)
|
|
&UpperNoMarkList[lastClass]: seta $000000FF**(&s-&first) ; <03/12/89 pke>
|
|
endif
|
|
&NoMarkList[lastClass]: seta $000000FF**(&s-&first) ; <03/29/89 pke>
|
|
endif
|
|
endMacro
|
|
|
|
; ==========================================================================================
|
|
; modified DumpCharTable macro to add NoMarkList <03/29/89 pke>
|
|
; eliminated LowerNoMarkList <1>
|
|
|
|
macro
|
|
DumpCharTable &index
|
|
gbla &cls[256], &TypeList[tblSize]
|
|
gbla &UpperList[tblSize], &LowerList[tblSize]
|
|
gbla &UpperNoMarkList[tblSize], &NoMarkList[tblSize]
|
|
lcla &i
|
|
|
|
&i: seta 1
|
|
if &index = 0 then
|
|
while &i <= 256 do ; corrected to <= <04/12/89 pke>
|
|
dc.b &cls[&i],&cls[&i+1],&cls[&i+2],&cls[&i+3],&cls[&i+4],&cls[&i+5],&cls[&i+6],&cls[&i+7]
|
|
&i: seta &i+8
|
|
endWhile
|
|
elseif &index = 1 then ; Type list
|
|
while &i <= lastClass do
|
|
dc.b &TypeList[&i]
|
|
&i: seta &i+1
|
|
endWhile
|
|
elseif &index = 2 then ; Uppercase delta list
|
|
while &i <= lastClass do
|
|
dc.b &UpperList[&i]
|
|
&i: seta &i+1
|
|
endWhile
|
|
elseif &index = 3 then ; Lowercase delta list
|
|
while &i <= lastClass do
|
|
dc.b &LowerList[&i]
|
|
&i: seta &i+1
|
|
endWhile
|
|
elseif &index = 4 then ; StripUppercase delta list
|
|
while &i <= lastClass do
|
|
dc.b &UpperNoMarkList[&i]
|
|
&i: seta &i+1
|
|
endWhile
|
|
elseif &index < 7 then ; Strip (diacritics) delta list (was 6, now 5 to replace unused LowerNoMarkList)
|
|
while &i <= lastClass do
|
|
dc.b &NoMarkList[&i]
|
|
&i: seta &i+1
|
|
endWhile
|
|
endif
|
|
align 2
|
|
endMacro
|
|
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; macro: setByte
|
|
; input: Base address, value, settings.
|
|
; Each setting is either a number or a range (f,s).
|
|
;
|
|
; This macro is used to create the first part of a breakTable, the character
|
|
; type array. This array is indexed by ASCII code, and contains the type of
|
|
; each character. For example, the characters 'a' through 'z' will all have
|
|
; the type 'letter' in the array.
|
|
; ----------------------------------------------------------------------------
|
|
|
|
macro
|
|
setByte &base,&v
|
|
print push,nomdir
|
|
lcla &n,&a,&b,&value
|
|
&value seta &eval(&v)
|
|
&n seta 3
|
|
while &n<=&nbr(&syslist) do
|
|
if &nbr(&syslist[&n]) then
|
|
&a seta &eval(&syslist[&n,1])
|
|
&b seta &eval(&syslist[&n,2])
|
|
else
|
|
&a seta &eval(&syslist[&n])
|
|
&b seta &a
|
|
endif
|
|
org &base+&a
|
|
dcb.b &b-&a+1,&value
|
|
&n seta &n+1
|
|
endwhile
|
|
org
|
|
print pop
|
|
endm
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; macro: SetRow
|
|
; input: Base address, state number, action 1, action 2, É
|
|
; other symbols: Assumes Nstate and Nclass are set to the number of states
|
|
; and the number of classes, respectively (uses these for
|
|
; error checking only)
|
|
; Note: each action is a state number, optionally preceded by '*' to indicate
|
|
; that the word in progress should be updated to include the current
|
|
; char
|
|
;
|
|
; Macro for setting up transition table rows and transition table index values
|
|
; No error checking yet!
|
|
; ----------------------------------------------------------------------------
|
|
|
|
macro
|
|
SetRow &base, &state
|
|
print push, nogen
|
|
lcla &off, &n, &act
|
|
lclc &str
|
|
&off seta * - &eval(&base)
|
|
org &base + (&eval(&state) << 1)
|
|
dc.w &off
|
|
org
|
|
&n seta 2
|
|
while &n<&nbr(&syslist) do
|
|
&n seta &n+1
|
|
&act seta 0
|
|
&str setc &syslist[&n]
|
|
if &scanne('*',&str,1)<>0 then
|
|
&act seta $80
|
|
&str setc &substr(&str,2,&len(&str))
|
|
endif
|
|
&act seta &act OR (&eval(&str) << 1)
|
|
dc.b &act
|
|
endw
|
|
print pop
|
|
endm
|
|
|
|
; ****************************************************************************
|
|
; FindScriptRun macros
|
|
; ****************************************************************************
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; macro: SetFSRow
|
|
; input: Base address, state number, action 1, action 2, É
|
|
; other symbols: Assumes Nstate and Nclass are set to the number of states
|
|
; and the number of classes, respectively (uses these for
|
|
; error checking only)
|
|
; Note: each action is a state number, optionally preceded by:
|
|
; '*' to mark, i.e. indicate that the word in progress should be
|
|
; updated to include the current char
|
|
; 'e' to exit. In this case, the following number is an index into
|
|
; a table of ScriptRunStatus values - it specifies the correct
|
|
; value for the completed run.
|
|
;
|
|
; Macro for setting up transition table rows and transition table index values
|
|
; No error checking yet!
|
|
; ----------------------------------------------------------------------------
|
|
|
|
macro
|
|
SetFSRow &base, &state
|
|
print push, nogen
|
|
lcla &off, &n, &act
|
|
lclc &str
|
|
&off seta * - &eval(&base)
|
|
org &base + (&eval(&state) << 1)
|
|
dc.w &off
|
|
org
|
|
&n seta 2
|
|
|
|
while &n<&nbr(&syslist) do
|
|
&n seta &n+1
|
|
&act seta 0
|
|
&str setc &syslist[&n]
|
|
|
|
if &scanne('*',&str,1)<>0 then
|
|
&act seta $80
|
|
&str setc &substr(&str,2,&len(&str))
|
|
endif
|
|
|
|
if &scanne('e',&str,1)<>0 then
|
|
&act seta &act OR $40
|
|
&str setc &substr(&str,2,&len(&str))
|
|
endif
|
|
|
|
&act seta &act OR &eval(&str)
|
|
dc.b &act
|
|
endw
|
|
|
|
print pop
|
|
endm
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; IntlTokenize equates for itl4 and IntlTokenize code
|
|
; ----------------------------------------------------------------------------
|
|
|
|
srcA EQU a0
|
|
srcL EQU d0
|
|
toks EQU a1
|
|
tokL EQU d1
|
|
holdA EQU a2
|
|
cSym EQU d2
|
|
lastA EQU a3
|
|
ld EQU d3
|
|
map EQU a4
|
|
lc1 EQU d4
|
|
pBlok EQU a5
|
|
lc2 EQU d5
|
|
temp EQU d6
|
|
dTab EQU a6
|
|
temp1 EQU d7
|
|
|
|
rd EQU ld
|
|
escRD EQU lc1
|
|
rc EQU ld
|
|
|
|
mapEmergOffset equ -8
|
|
mapExtendOffset equ -4
|
|
|
|
magicStackTokenEnd equ 6
|
|
magicStackErrorValue equ 4
|
|
|
|
; ----------------------------------------------------------------------------
|
|
ENDIF ; ...already included
|