antoine-source/appleworksgs/PL/Src/PSCRAP.S

1 line
3.6 KiB
ArmAsm
Executable File

load 'macros.dump'
include 'driver.equ'
include 'pl.equ'
;-----------------------------------------------
;
; Imported addresses
;
;-----------------------------------------------
IMPORT X_CopyOneHandle
IMPORT X_DisposeThread
IMPORT P_CopyObjList
IMPORT P_MakePict
IMPORT T_CpyOrClrObj
IMPORT T_ReThread
;-----------------------------------------------
;
; Forward addresses and entries
;
;-----------------------------------------------
ENTRY P_CopyPLScrap
ENTRY P_DelObjList
ENTRY P_DelPLScrap
ENTRY P_PL2Pict
ENTRY T_Dispose
P_ScrapJumps PROC EXPORT
DC.L P_CopyPLScrap
DC.L P_DelPLScrap
DC.L P_PL2Pict
ENDP
P_ScrapData PROC EXPORT
EXPORT P_QDPict
EXPORT P_ConvErr
P_QDPict DS.B 4
P_ConvErr DS.B 2
ENDP
;------------------------------------------------------------------------------
;
; P_CopyPLScrap (ScrapHdl:l) : CopyHdl:l
;
P_CopyPLScrap PROC EXPORT
input ScrapHdl:l
output CopyHdl:l
error Err
begin
call P_CopyObjList,in=(ScrapHdl:l,#1:w),out=(CopyHdl:l),err=(Err)
return
ENDP
;-----------------------------------------------------------------------------
;
; P_DelPLScrap (ObjHdl:l,KillData:w)
;
P_DelPLScrap PROC EXPORT
;Using P_ObjData
;Using P_ScrapData
input ObjHdl:l,KillData:w
local ObjPtr:l,NextObj:l
begin +b
cpzl P_QDPict
beq DoIt
tool _KillPicture,in=(P_QDPict:l)
stzl P_QDPict
DoIt
call P_DelObjList,in=(ObjHdl:l,KillData:w,#1:w)
return
ENDP
;-----------------------------------------------------------------------------
;
; P_PL2Pict (ObjHdl:l) : PictHdl:l
;
P_PL2Pict PROC EXPORT
;Using P_ScrapData
input ObjHdl:l
output PictHdl:l
error Err
begin +b
cpzl P_QDPict
beq DoIt
moveword P_ConvErr,Err
bne Exit
call X_CopyOneHandle,in=(P_QDPict:l),out=(PictHdl:l),err=(Err)
bra Exit
DoIt
call P_MakePict,in=(ObjHdl:l),out=(PictHdl:l),err=(Err)
Exit
return
ENDP
;-----------------------------------------------------------------------------
;
; P_DelObjList (ObjHdl:l,KillData:w,All:w)
;
P_DelObjList PROC EXPORT
;Using P_ObjData
;Using P_ScrapData
input ObjHdl:l,KillData:w,All:w
local ObjPtr:l,NextObj:l
begin
WhileLoop
cpzl ObjHdl
jeq Exit
movelong [ObjHdl],ObjPtr
movelong [ObjPtr],NextObj
lda KillData
beq TrashIt
moveword [ObjPtr]:#P_Type,a
cmp #P_ALPHA
bne TryPict
call T_Dispose,in=(ObjHdl:l,All:w)
bra TrashIt
TryPict cmp #P_PICTURE
bne TrashIt
tool _KillPicture,in=([ObjPtr]:#P_PictHandle:l)
TrashIt
tool _DisposeHandle,in=(ObjHdl:l)
movelong NextObj,ObjHdl
brl WhileLoop
Exit return
ENDP
;----------------------------------------------------------------------------
;
; T_Dispose (ObjHdl:l,All:w)
;
; Can call X_DisposeThread if there are no objects attached to this one.
T_Dispose PROC EXPORT
;Using P_ObjData
input ObjHdl:l,All:w
local ObjPtr:l,NThread:l,PThread:l,Ptr:l
begin +b
movelong [ObjHdl],ObjPtr
movelong [ObjPtr]:#P_NThread,NThread
movelong [ObjPtr]:#P_PThread,PThread
lda All
beq NotAll
cpzl PThread
beq KillThread
lda PThread
and PThread+2
cmp #$FFFF
beq Killthread
brl Exit
NotAll
lda NThread
ora NThread+2
ora PThread
ora PThread+2
bne Linked
KillThread
call X_DisposeThread,in=([ObjPtr]:#P_ParagHdl:l,#1:w)
brl Exit
Linked
call T_CpyOrClrObj,in=(ObjPtr:l,#0:w),out=(a:l)
cpzl PThread
beq NoPrev
movelong [PThread],Ptr
movelong NThread,[Ptr]:#P_NThread
NoPrev
cpzl NThread
beq NoNext
movelong [NThread],Ptr
movelong PThread,[Ptr]:#P_PThread
NoNext
cpzl PThread
beq AtStart
pushlong PThread
bra Cont
AtStart pushlong NThread
Cont jsl T_ReThread
Exit return
ENDP
END