antoine-source/appleworksgs/Scrap/Src/wpscrap2.aii
2023-03-04 03:45:20 +01:00

1 line
3.3 KiB
Plaintext
Executable File

load 'macros.dump'
include 'driver.equ'
include 'scrap.equ'
IMPORT D_BeachBall
IMPORT X_CopyOneHandle
IMPORT X_DisposeWPScrap
IMPORT D_NeedHandle
IMPORT X_ParBlockSize
X_CopyThread PROC EXPORT
;Using X_WPScrapData
;Using X_WPFileData
input Refcon:l,Type:w
local Rptr:l,Cptr:l,CurBlock:l,CurBlockCopy:l
local RulArray:l,RAPtr:l,Pars:w,ParsSeen:w
local Rulers:w,RulSeen:w,RulOff:w,ParSize:w
local CopyRuler:l,CRPtr:l
output Copy:l
error err
begin +b
stz err
lda Type
bne notwp
MoveWord #X_ParBlockSize,ParSize
bra cont
notwp MoveWord #(X_ParBlockSize+4),ParSize
cont PushLong Refcon
_HLock
SpaceLong
PushLong Refcon
jsl X_CopyOneHandle
sta err
PullLong Copy
jcs exit
PushLong Copy
_HLock
AddLong [Copy],#2,Cptr
MoveLong [Refcon],Rptr
MoveWord [Rptr],Pars
AddWord Rptr,#2,Rptr
stz Parsseen
SpaceLong
lda Pars
asl a
asl a
asl a
pea 0
pha
PushWord #$8000
jsl D_NeedHandle
sta err
PullLong RulArray
jcc goodrularray
PushLong Copy
_DisposeHandle
brl exit
goodrularray
MoveLong [RulArray],RAPtr
stz Rulers
MoveLong #0,CurBlock
parloop jsl D_BeachBall
lda Parsseen
cmp Pars
jge done
Cmpl [Rptr],CurBlock
beq sameblock
SpaceLong
PushLong [Rptr]
jsl X_CopyOneHandle
sta err
PullLong CurBlockCopy
jcs abort
MoveLong [Rptr],CurBlock
sameblock
MoveLong CurBlockCopy,[Cptr]
lda Type
jne cont2
ldy #X_scpAttr
lda [Rptr],y
jne endruleloop
cont2 stz RulSeen
MoveLong [RulArray],RAPtr
ruleloop lda RulSeen
cmp Rulers
bge notfound
Cmpl [RAPtr],[Rptr]:#X_scpRulerHand
beq foundit
inc RulSeen
AddLong RAPtr,#8,RAPtr
bra ruleloop
foundit ldy #4
MoveLong [RAPtr]:y,[Cptr]:#X_scpRulerHand
MoveLong [RAPtr]:#4,CopyRuler
MoveLong [CopyRuler],CRPtr
lda [CRPtr]
inc a
sta [CRPtr]
brl endruleloop
notfound MoveLong [Rptr]:#X_scpRulerHand,[RAPtr]
SpaceLong
PushLong [Rptr]:#X_scpRulerHand
jsl X_CopyOneHandle
sta err
PullLong CopyRuler
jcc gotruler
abort
MoveLong [Copy],Cptr
MoveWord Parsseen,[Cptr]
PushLong Copy
jsl X_DisposeWPScrap
PushLong RulArray
_DisposeHandle
brl exit
gotruler
MoveLong CopyRuler,[Cptr]:#X_scpRulerHand
MoveLong CopyRuler,[RAPtr]:#4
MoveLong [CopyRuler],CRPtr
MoveWord #1,[CRPtr]
inc Rulers
endruleloop
inc Parsseen
MoveLong #0,[Cptr]:#X_scpLinehand
Addwl ParSize,Rptr
Addwl ParSize,Cptr
brl parloop
done
PushLong Copy
_HUnlock
PushLong RulArray
_DisposeHandle
exit PushLong Refcon
_Hunlock
return err
ENDP
X_DisposeThread PROC EXPORT
;Using X_WPScrapData
;Using X_WPFileData
input Refcon:l,Type:w
local Rptr:l,ParSize:w,Bpars:w
local Ruler:l,RulPtr:l
begin +b
lda Type
bne notwp
MoveWord #X_ParBlockSize,ParSize
bra cont
notwp MoveWord #(X_ParBlockSize+4),ParSize
cont Movelong [Refcon],Rptr
MoveWord [Rptr],Bpars
Addwl #2,Rptr
loop lda Bpars
jeq exit
MoveWord [Rptr]:#X_scpOffset,a
cmp #4
jne doruler
PushLong [Rptr]:#X_scpBlockHand
_DisposeHandle
doruler lda Type
bne disruler
MoveWord [Rptr]:#X_scpAttr,a
jne dolines
disruler MoveLong [Rptr]:#X_scpRulerHand,Ruler
MoveLong [Ruler],RulPtr
lda [RulPtr]
dec a
bne dodec
PushLong Ruler
_DisposeHandle
bra dolines
dodec sta [RulPtr]
dolines MoveLong [Rptr]:#X_scpLinehand,Ruler
lda Ruler
ora Ruler
beq endloop
PushLong Ruler
_DisposeHandle
endloop dec Bpars
Addwl ParSize,Rptr
brl loop
exit PushLong Refcon
_DisposeHandle
return
ENDP
END