mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 16:31:01 +00:00
4325cdcc78
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.
292 lines
12 KiB
Plaintext
292 lines
12 KiB
Plaintext
;
|
|
; File: DoubleByteSupport.a
|
|
;
|
|
; Contains: Assembly level support routines for drawing double byte characters in
|
|
; QuickDraw and caching double byte characters in TrueType.
|
|
;
|
|
; Written by: Joe Ternasky
|
|
;
|
|
; Copyright: © 1990-1992 by Apple Computer, Inc. All rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <SM3> 11/5/92 SWC Changed INCLUDEs to a LOAD of StandardEqu.d.
|
|
; <2> 6/22/92 JH #1033107 <AMW>: Changed GetEncodingTable to return the real
|
|
; script ID rather than 0 when the script isn't a CJK script.
|
|
; <1> 1/20/90 JF Created file, relocated Joe's routines from ÒDrawText.aÓ,
|
|
; and slapped on standard routine headers.
|
|
;
|
|
|
|
LOAD 'StandardEqu.d'
|
|
|
|
|
|
; -------------------------------------------------------------------------------------
|
|
;
|
|
; Routine: GetEncodingMap
|
|
;
|
|
; Input: d0.w text font ID
|
|
;
|
|
; Output: d0.w script code
|
|
; a0.l encoding table pointer
|
|
;
|
|
; Purpose: GetEncodingMap expects the text font ID in register d0. It returns the
|
|
; script code in d0 and the encoding table pointer in a0. The encoding
|
|
; table is is indexed by a byte code and each entry is a boolean value
|
|
; true if this is a high byte in the given font's encoding, false if this
|
|
; is a single byte. If the encoding table pointer is zero, this is a single
|
|
; byte font.
|
|
;
|
|
; Warning: none
|
|
;
|
|
; Frame: none
|
|
;
|
|
; -------------------------------------------------------------------------------------
|
|
|
|
|
|
GetEncodingMap proc export
|
|
|
|
cmp.w #1,d0 ; special font ID number?
|
|
bhi.s @noFontRemapping ; greater, skip all this
|
|
blo.s @systemFontRemapping ; less, remap to system font
|
|
|
|
@applicationFontRemapping
|
|
move.w ApFontID,d0 ; remap to application font
|
|
bra.s @noFontRemapping ; all through here
|
|
|
|
@systemFontRemapping
|
|
move.w SysFontFam,d0 ; remap to system font
|
|
|
|
@noFontRemapping
|
|
sub.w #smFondStart,d0 ; in the Roman range?
|
|
bmi.s @defaultEncoding ; yes, return default encoding
|
|
lsr.w #8,d0 ; divide font number by 2^8
|
|
lsr.w #1,d0 ; divide font number by 2^1
|
|
add.w #1,d0 ; make it a real script code
|
|
|
|
lea sjisHighBytes,a0 ; assume the SJIS encoding
|
|
cmp.w #smJapanese,d0 ; really is japanese?
|
|
beq.s @returnToCaller ; yes, just return now
|
|
lea bigFiveHighBytes,a0 ; assume the Big Five encoding
|
|
cmp.w #smTradChinese,d0 ; really is taiwanese?
|
|
beq.s @returnToCaller ; yes, just return now
|
|
lea kisHighBytes,a0 ; assume the KIS encoding
|
|
cmp.w #smKorean,d0 ; really is korean?
|
|
beq.s @returnToCaller ; yes, just return now
|
|
lea sgbHighBytes,a0 ; assume the SGB encoding
|
|
cmp.w #smSimpChinese,d0 ; really is chinese?
|
|
beq @returnToCaller ; assume the SGB encoding
|
|
sub.l a0,a0 ; clear result
|
|
bra.s @returnToCaller ; but keep the script code in d0
|
|
|
|
@defaultEncoding
|
|
sub.l a0,a0 ; assume the generic encoding
|
|
clr.w d0 ; set script number to smRoman
|
|
|
|
@returnToCaller
|
|
rts ; return to the caller
|
|
|
|
sjisHighBytes
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $40 to $4F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $50 to $5F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $60 to $6F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $70 to $7F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $80 to $8F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $90 to $9F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $A0 to $AF
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $B0 to $BF
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $C0 to $CF
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 ; $F0 to $FF
|
|
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $40 to $4F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $50 to $5F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $60 to $6F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ; $70 to $7F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $80 to $8F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $90 to $9F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $A0 to $AF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $B0 to $BF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $C0 to $CF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 ; $F0 to $FF
|
|
|
|
dc.b $40,$00 ; default low byte.
|
|
|
|
bigFiveHighBytes
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $40 to $4F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $50 to $5F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $60 to $6F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $70 to $7F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $80 to $8F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $90 to $9F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $A0 to $AF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $B0 to $BF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $C0 to $CF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 ; $F0 to $FF
|
|
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $40 to $4F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $50 to $5F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $60 to $6F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ; $70 to $7F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $80 to $8F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $90 to $9F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $A0 to $AF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $B0 to $BF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $C0 to $CF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ; $F0 to $FF
|
|
|
|
dc.b $40,$00 ; default low byte.
|
|
|
|
kisHighBytes
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $40 to $4F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $50 to $5F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $60 to $6F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $70 to $7F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $80 to $8F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $90 to $9F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $A0 to $AF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $B0 to $BF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $C0 to $CF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ; $F0 to $FF
|
|
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $40 to $4F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $50 to $5F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $60 to $6F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 ; $70 to $7F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $80 to $8F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $90 to $9F
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $A0 to $AF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $B0 to $BF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $C0 to $CF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ; $F0 to $FF
|
|
|
|
dc.b $41,$00 ; default low byte.
|
|
|
|
sgbHighBytes
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $40 to $4F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $50 to $5F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $60 to $6F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $70 to $7F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $80 to $8F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $90 to $9F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $A0 to $AF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $B0 to $BF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $C0 to $CF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0 ; $F0 to $FF
|
|
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $00 to $0F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $10 to $1F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $20 to $2F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $30 to $3F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $40 to $4F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $50 to $5F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $60 to $6F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $70 to $7F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $80 to $8F
|
|
dc.b 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; $90 to $9F
|
|
dc.b 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $A0 to $AF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $B0 to $BF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $C0 to $CF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $D0 to $DF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ; $E0 to $EF
|
|
dc.b 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 ; $F0 to $FF
|
|
|
|
dc.b $a1,$00 ; default low byte.
|
|
|
|
endproc
|
|
|
|
|
|
; -------------------------------------------------------------------------------------
|
|
;
|
|
; Routine: Function GetEncodingTable( fondID: Integer; VAR script: Integer ) : Ptr;
|
|
;
|
|
; Input: none
|
|
;
|
|
; Output: none
|
|
;
|
|
; Purpose: GetEncodingTable is a Pascal cover for the corresponding register based
|
|
; routine, GetEncodingMap. It expects the FOND ID number and a pointer to
|
|
; the script code storage on the stack and returns the encoding table pointer
|
|
; as the result and the proper script code in the storage. Only those few
|
|
; scripts that require the encoding table return one in the result; all other
|
|
; scripts return a nil pointer. The script code is always correct, but does
|
|
; not check with the Script Manager to make sure that the script system is
|
|
; really installed.
|
|
;
|
|
; Warning: none
|
|
;
|
|
; Frame:
|
|
|
|
GetEncodingTableFrame: Record {oldA6},decrement
|
|
|
|
result: ds.l 1
|
|
fondID: ds.w 1
|
|
scriptPtr: ds.l 1
|
|
returnAddress: ds.l 1
|
|
oldA6: ds.l 1
|
|
frameSize: equ *
|
|
|
|
EndR
|
|
;
|
|
; -------------------------------------------------------------------------------------
|
|
|
|
|
|
GetEncodingTable proc export
|
|
|
|
with GetEncodingTableFrame
|
|
link a6,#frameSize ; build the stack frame
|
|
|
|
move.w fondID(a6),d0 ; load the fond ID number
|
|
bsr GetEncodingMap ; get encoding table and script code
|
|
move.l a0,result(a6) ; save the encoding table pointer
|
|
move.l scriptPtr(a6),a0 ; load the script code storage pointer
|
|
move.w d0,(a0) ; save the script code
|
|
|
|
unlk a6 ; remove the stack frame
|
|
move.l (sp)+,a0 ; load the return address
|
|
add.l #6,sp ; remove the arguments
|
|
jmp (a0) ; return to the caller
|
|
endWith
|
|
endProc
|
|
|
|
end |