mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-04 04:31:04 +00:00
1 line
4.5 KiB
ArmAsm
Executable File
1 line
4.5 KiB
ArmAsm
Executable File
|
|
load 'macros.dump'
|
|
include 'driver.equ'
|
|
include 'pl.equ'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
IMPORT D_GrowHandle
|
|
IMPORT T_GetParPtr
|
|
IMPORT T_OffsetPars
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY T_LessRoom
|
|
ENTRY T_MakeRoom
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; ------------------------------------------------------------------------------
|
|
; T_MakeRoom and T_LessRoom will grow or shrink the Q_Text blocks the
|
|
; correct amount and make sure everything in the parag array data
|
|
; structure gets updated, with the exception of the LinesHdl.
|
|
;
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_DoRoom (Par:w,Offset:w,Bytes:w)
|
|
;
|
|
|
|
T_DoRoom PROC EXPORT
|
|
|
|
lda 4,s ;look at bytes
|
|
jpl T_MakeRoom
|
|
eor #$ffff
|
|
inc a
|
|
sta 4,s
|
|
brl T_LessRoom
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_MakeRoom (ParagNo:w,Offset:w,Bytes:w)
|
|
;
|
|
|
|
T_MakeRoom PROC EXPORT
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
INPUT ParagNo:w,Offset:w,Bytes:w
|
|
|
|
LOCAL ParagPtr:l,TextHdl:l,TextPtr:l
|
|
LOCAL X_Blocksize:w,TextSize:w,NewTSize:w
|
|
ERROR Err
|
|
|
|
BEGIN
|
|
|
|
stz Err
|
|
|
|
lda Bytes
|
|
jeq Exit
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
movelong [ParagPtr]:#T_TextBlock,TextHdl
|
|
addword [ParagPtr]:#T_ParOffset,Offset,Offset
|
|
|
|
|
|
movelong [TextHdl],TextPtr
|
|
moveword [TextPtr],X_Blocksize
|
|
moveword [TextPtr]:#T_TextSize,TextSize
|
|
addword a,Bytes,NewTSize
|
|
cmp X_Blocksize
|
|
blt Fits
|
|
|
|
|
|
|
|
|
|
; 1. Grow Q_Text Block
|
|
|
|
call D_GrowHandle,in=(#0:w,NewTSize:w,TextHdl:l),err=(Err)
|
|
bcs Exit
|
|
|
|
|
|
movelong [TextHdl],TextPtr
|
|
moveword NewTSize,[TextPtr]
|
|
|
|
|
|
; BlockMove rest of Q_Text down
|
|
|
|
Fits
|
|
moveword NewTSize,[TextPtr]:#T_TextSize
|
|
addwl Offset,TextPtr
|
|
|
|
pushlong TextPtr
|
|
lda Bytes
|
|
addlong a,TextPtr,s
|
|
pushword #0
|
|
subword TextSize,Offset,s
|
|
_BlockMove
|
|
|
|
|
|
call T_OffsetPars,in=(ParagNo:w,Bytes:w)
|
|
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_LessRoom (ParagNo:w,Offset:w,Bytes:w)
|
|
;
|
|
; This routine will remove the Bytes starting at ParagNo,Offset.
|
|
|
|
T_LessRoom PROC EXPORT
|
|
;Using T_TextEqu
|
|
|
|
INPUT ParagNo:w,Offset:w,Bytes:w
|
|
LOCAL ParagPtr:l,TextBlock:l,TextPtr:l
|
|
LOCAL TextSize:w,SrcOffset:w,DestOffset:w
|
|
|
|
BEGIN
|
|
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
movelong [ParagPtr]:#T_TextBlock,TextBlock
|
|
|
|
movelong [TextBlock],TextPtr
|
|
moveword [TextPtr]:#T_TextSize,TextSize
|
|
|
|
addword [ParagPtr]:#T_ParOffset,Offset,DestOffset
|
|
addword a,Bytes,SrcOffset
|
|
addlong a,TextPtr,s ;Src
|
|
lda DestOffset
|
|
addlong a,TextPtr,s ;Dest
|
|
subword TextSize,SrcOffset,a
|
|
pushword #0
|
|
pushword a ;Amount
|
|
_BlockMove
|
|
|
|
subword TextSize,Bytes,TextSize
|
|
cmp #4
|
|
beq KillIt
|
|
moveword a,[TextPtr]
|
|
moveword a,[TextPtr]:#T_TextSize
|
|
|
|
pushword #0
|
|
pushword TextSize
|
|
pushlong TextBlock
|
|
_SetHandleSize
|
|
|
|
pushword ParagNo
|
|
subword #0,Bytes,s
|
|
jsl T_OffsetPars
|
|
bra Exit
|
|
|
|
KillIt
|
|
tool _DisposeHandle,in=(TextBlock:l)
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------------
|
|
;
|
|
; T_CalcFBytes (FontId1:l,Color1:w,FontId2:l,Color2:w) : Bytes:w
|
|
;
|
|
|
|
T_CalcFBytes PROC EXPORT
|
|
|
|
INPUT FontID1:l,Color1:w,FontID2:l,Color2:w
|
|
OUTPUT Bytes:w
|
|
|
|
BEGIN
|
|
|
|
stz Bytes
|
|
|
|
cmpw FontId1,FontID2
|
|
beq SameFont
|
|
|
|
moveword #3,bytes
|
|
|
|
SameFont
|
|
cmpb FontId1+2,FontId2+2
|
|
beq SameStyle
|
|
|
|
addword #2,bytes,bytes
|
|
|
|
SameStyle
|
|
cmpb FontId1+3,FontId2+3
|
|
beq SameSize
|
|
|
|
addword #2,bytes,bytes
|
|
|
|
SameSize
|
|
cmpb color1,color2
|
|
beq SameColor
|
|
|
|
addword #2,bytes,bytes
|
|
|
|
SameColor
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_WriteFbytes (Ptr:l,FontId1:l,Color1:w,FontId2:l,Color2:w)
|
|
;
|
|
|
|
T_WriteFBytes PROC EXPORT
|
|
|
|
INPUT Ptr:l,FontID1:l,Color1:w,FontID2:l,Color2:w
|
|
|
|
BEGIN
|
|
|
|
|
|
cmpw FontId1,FontID2
|
|
beq SameFont
|
|
moveword #1,[Ptr]
|
|
moveword FontId2,[Ptr]:#1
|
|
addwl #3,Ptr
|
|
SameFont
|
|
|
|
cmpb FontId1+2,FontId2+2
|
|
beq SameStyle
|
|
lda FontId2+1 ;2 is in the high
|
|
shortm
|
|
lda #2 ;flag is in the low
|
|
longm
|
|
sta [Ptr]
|
|
|
|
addwl #2,Ptr
|
|
SameStyle
|
|
|
|
cmpb FontId1+3,FontId2+3
|
|
beq SameSize
|
|
|
|
lda FontId2+2 ;3 is in the high
|
|
shortm
|
|
lda #3 ;flag is in the low
|
|
longm
|
|
sta [Ptr]
|
|
|
|
addwl #2,Ptr
|
|
SameSize
|
|
|
|
cmpb color1,color2
|
|
beq SameColor
|
|
|
|
lda color2-1 ;2 is in the high
|
|
shortm
|
|
lda #4 ;flag is in the low
|
|
longm
|
|
sta [Ptr]
|
|
|
|
SameColor
|
|
|
|
RETURN
|
|
ENDP
|
|
END
|
|
|