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

1 line
10 KiB
Plaintext
Executable File

load 'macros.dump'
include 'driver.equ'
include 'scrap.equ'
IMPORT D_AlertBox
IMPORT X_BHand
IMPORT X_BOffset
IMPORT X_BRuler
IMPORT D_BeachBall
IMPORT X_CopyThread
IMPORT D_CurCursor
IMPORT X_CurrentParRecord
IMPORT X_DBtoPLScrap
IMPORT X_DisposeScrap
IMPORT X_DisposeThread
IMPORT D_GrowHandle
IMPORT X_MakeStandardRuler
IMPORT D_NeedHand
IMPORT D_NeedHandle
IMPORT X_OldCursor
IMPORT X_PLtoWPScrap
IMPORT X_ParBlockSize
IMPORT X_RulerSize
IMPORT X_ScrStdRuler
IMPORT D_SetCursor
import X_MassageWPScrap
import X_StdTabRuler
import X_DisposeWPScrap
import X_SwitchFontID
import X_ClipData
;***********************************************************************
;
; X_PLtoWPScrap
;
;***********************************************************************
X_ScPLtoWPScrap PROC EXPORT
;Using D_GlobalData
;Using X_ClipData
;Using X_WPScrapData
;Using X_WPFileData
;Using D_CursorData
;Using D_IOData
input Src:l
local Ssize:l,Sptr:l,Dsize:l,Dptr:l,Doff:l
local Pars:l,EndPtr:l
local Ruler:l,Rptr:l,Block:l,Bptr:l,Bsize:l
local Boff:l,RealBptr:l,Cptr:l,ParSize:l
local NewBlockSize:l,CRFlag:l
output Dest:l
error err
begin
MoveWord >D_CurCursor,X_OldCursor
;Set up everything. Check for empty scrap.
stz err
SpaceLong
PushLong Src
_GetHandlesize
PullLong Ssize
PushLong Src
_HLock
MoveLong [Src],Sptr
AddLong Sptr,Ssize,EndPtr
;Get block for Q_Text.
SpaceLong
PushLong #X_Blocksize
jsl D_NeedHand
sta err
PullLong Block
jcs exit
Movelong [Block],RealBptr
AddLong RealBptr,#4,Bptr
MoveWord #4,[RealBptr]
MoveWord #4,[RealBptr]:#2
MoveLong #4,Boff
MoveLong #4,Bsize
MoveLong Block,X_BHand
;Get ruler. This is ;easy*.
SpaceLong
PushLong #X_RulerSize
jsl D_NeedHand
sta err
PullLong Ruler
jcc rulerok
PushLong Block
_DisposeHandle
brl exit
rulerok MoveLong [Ruler],Rptr
jsl X_MakeStandardRuler
PushLong #X_ScrStdRuler
PushLong Rptr
PushLong #X_RulerSize
_BlockMove
MoveLong Ruler,X_BRuler
;Get paragraph array.
SpaceLong
_MaxBlock
PullLong Dsize
SpaceLong
PushLong Dsize
jsl D_NeedHand
sta err
PullLong Dest
jcc pararrayok
PushLong Block
_DisposeHandle
PushLong Ruler
_DisposeHandle
brl exit
pararrayok
MoveLong #2,Dsize
PushLong Dsize
PushLong Dest
jsl D_GrowHandle
sta err
bcc @1
tool _DisposeHandle,in=Block:l
tool _DisposeHandle,in=Ruler:l
tool _DisposeHandle,in=Dest:l
brl exit
@1 MoveLong #2,Dsize
MoveLong [Dest],Dptr
MoveWord #0,[Dptr]
PushLong Bsize
PushLong Block
jsl D_GrowHandle
stz ParSize+2
loop jsl D_BeachBall
jsr GetNextCR
sta ParSize
jcs through
;check the ruler
SpaceWord
jsr GetRulerAttr
pla
cmp X_ScrStdRuler+2
beq nonewruler
sta X_ScrStdRuler+2
MoveLong [Ruler],Rptr
lda [Rptr]
bne nothrowaway
PushLong Ruler
_DisposeHandle
nothrowaway
SpaceLong
PushLong #X_RulerSize
jsl D_NeedHand
sta err
PullLong X_BRuler
bcc wehavenewruler
PushLong Dest
jsl X_DisposeWPScrap
brl exit
wehavenewruler
PushLong #X_ScrStdRuler
PushLong X_BRuler
PushLong #X_RulerSize
_PtrToHand
MoveLong X_BRuler,Ruler
nonewruler
AddLong ParSize,Bsize,NewBlockSize
Cmpl NewBlockSize,#X_Blocksize
jlt docopypar
MoveLong [Block],Bptr
lda [Bptr]
cmp #4
jeq docopypar
SpaceLong
AddLong ParSize,#4,Bsize
PushLong Bsize
jsl D_NeedHand
sta err
PullLong Block
jcs exit
MoveLong Block,X_BHand
MoveWord #4,X_BOffset
MoveLong #4,Boff
MoveLong #4,Bsize
MoveLong [Block],Bptr
MoveWord #4,[Bptr]
MoveWord #4,[Bptr]:#2
docopypar
Addwl ParSize,Bsize
PushLong Bsize
PushLong Block
jsl D_GrowHandle
MoveLong [Block],Bptr
lda [Bptr]
sta X_BOffset
MoveWord Bsize,[Bptr]
MoveWord Bsize,[Bptr]:#2
Addwl Boff,Bptr
Addwl ParSize,Boff
PushLong Sptr
PushLong Bptr
PushLong ParSize
_BlockMove
Addwl ParSize,Sptr
Addwl #X_ParBlockSize,Dsize
PushLong Dsize
PushLong Dest
jsl D_GrowHandle
MoveLong [Dest],Dptr
lda [Dptr]
inc a
sta [Dptr]
AddLong [Dest],Dsize,Dptr
SubLong Dptr,#X_ParBlockSize,Dptr
PushLong #X_CurrentParRecord
PushLong Dptr
PushLong #X_ParBlockSize
_BlockMove
AddWord X_BOffset,ParSize,X_BOffset
MoveLong [Ruler],Rptr
lda [Rptr]
inc a
sta [Rptr]
brl loop
through
done
PushLong Dest
jsl X_MassageWPScrap
brl exit
partoobig
SpaceWord
PushLong #ParTooBigMess
jsl D_AlertBox
pla
MoveWord #-1,err
PushWord #WPText
PushLong Dest
jsl X_DisposeScrap
brl exit
ParTooBigMess STR 'There is a paragraph larger than 64K.'
exit PushWord X_OldCursor
jsl D_SetCursor
return
Header DC.L -1
DC.A 0
DC.B CR
GetNextCR
Cmpl Sptr,EndPtr
blt doit
sec
rts
doit
AddLong Sptr,#7,Cptr
ldx #7
crloop shortm
lda [Cptr]
cmp #CR
beq foundcr
cmp #1
beq dofontchange
cmp #5
blt dootherchange
longm
inx
IncLong Cptr
docompare
brl crloop
foundcr longm
txa
inc a
clc
rts
dofontchange
longm
Addwl #3,Cptr
txa
clc
adc #3
tax
brl crloop
dootherchange
longm
Addwl #2,Cptr
inx
inx
brl docompare
JustTable
DC.W X_scr_r_left
DC.W X_scr_r_center
DC.W X_scr_r_right
DC.W X_scr_r_full
SpaceTable
DC.W X_scr_r_single
DC.W X_scr_r_double
DC.W X_scr_r_triple
DC.W X_scr_r_single ;custom
GetRulerAttr
ldx #0
ldy #5
lda [Sptr],y
and #$ff
asl a
tax
lda >JustTable,x
sta 3,s
ldy #6
lda [Sptr],y
and #$ff
asl a
tax
lda >SpaceTable,x
ora 3,s
sta 3,s
rts
ENDP
;***********************************************************************
;
; X_AsciitoWPScrap
;
***********************************************************************
X_ScAsciitoWPScrap PROC EXPORT
;Using D_GlobalData
;Using X_ClipData
;Using X_WPScrapData
;Using X_WPFileData
;Using D_CursorData
;Using D_IOData
input Src:l
local Ssize:l,Sptr:l,Dsize:l,Dptr:l,Doff:l
local Pars:l,EndPtr:l,NewBlock:w
local Ruler:l,Rptr:l,Block:l,Bptr:l,Bsize:l
local Boff:l,RealBptr:l,Cptr:l,ParSize:l
local NewBlockSize:l,CRFlag:l
output Dest:l
error err
begin
MoveWord >D_CurCursor,X_OldCursor
;Set up everything. Check for empty scrap.
stz err
SpaceLong
PushLong Src
_GetHandlesize
PullLong Ssize
PushLong Src
_HLock
MoveLong [Src],Sptr
AddLong Sptr,Ssize,EndPtr
Cpzl Ssize
jeq emptyscrap
;Get block for Q_Text.
SpaceLong
PushLong #X_Blocksize
jsl D_NeedHand
sta err
PullLong Block
jcs exit
Movelong [Block],RealBptr
AddLong RealBptr,#4,Bptr
MoveWord #4,[RealBptr]
MoveWord #4,[RealBptr]:#2
MoveLong #4,Boff
MoveLong #4,Bsize
MoveLong Block,X_BHand
;Get ruler. This is ;easy*.
SpaceLong
PushLong #X_RulerSize
jsl D_NeedHand
sta err
PullLong Ruler
jcc rulerok
PushLong Block
_DisposeHandle
brl exit
rulerok MoveLong [Ruler],Rptr
jsl X_MakeStandardRuler
PushLong #X_ScrStdRuler
PushLong Rptr
PushLong #X_RulerSize
_BlockMove
MoveLong Ruler,X_BRuler
;Get paragraph array.
SpaceLong
_MaxBlock
PullLong Dsize
SpaceLong
PushLong Dsize
jsl D_NeedHand
sta err
PullLong Dest
jcc pararrayok
call D_NeedHand,in=(#2:l),out=(Dest:l),err=err
bcc gotdest
PushLong Block
_DisposeHandle
PushLong Ruler
_DisposeHandle
brl exit
pararrayok
MoveLong #2,Dsize
PushLong Dsize
PushLong Dest
jsl D_GrowHandle ;No error on shrinking
gotdest
MoveLong [Dest],Dptr
MoveWord #0,[Dptr]
PushLong Bsize
PushLong Block
jsl D_GrowHandle
stz ParSize+2
stz NewBlock
loop jsl D_BeachBall
jsr GetNextCR
sta ParSize
jeq through
bcc crthere
MoveWord #1,CRFlag
bra cont2
crthere stz CRFlag
cont2 lda ParSize
clc
adc #7
sta ParSize
jcs partoobig
AddLong ParSize,Bsize,NewBlockSize
Cmpl NewBlockSize,#X_Blocksize
jlt docopypar
MoveLong [Block],Bptr
lda [Bptr]
cmp #4
bne @2
stz NewBlock
bra docopypar
@2
SpaceLong
AddLong ParSize,#4,Bsize
PushLong Bsize
jsl D_NeedHand
sta err
PullLong Block
jcs memory_error
inc NewBlock
MoveLong Block,X_BHand
MoveWord #4,X_BOffset
MoveLong #4,Boff
MoveLong #4,Bsize
MoveLong [Block],Bptr
MoveWord #4,[Bptr]
MoveWord #4,[Bptr]:#2
docopypar
Addwl ParSize,Bsize
PushLong Bsize
PushLong Block
jsl D_GrowHandle
sta err
jcs memory_error
MoveLong [Block],Bptr
lda [Bptr]
sta X_BOffset
MoveWord Bsize,[Bptr]
MoveWord Bsize,[Bptr]:#2
Addwl Boff,Bptr
PushLong #Header
PushLong Bptr
PushLong #7
_BlockMove
Addwl ParSize,Boff
SubWord ParSize,#7,ParSize
Addwl #7,Bptr
PushLong Sptr
PushLong Bptr
PushLong ParSize
_BlockMove
Addwl ParSize,Sptr
Addwl #X_ParBlockSize,Dsize
PushLong Dsize
PushLong Dest
jsl D_GrowHandle
sta err
bcc @1
lda NewBlock
jeq exit
tool _DisposeHandle,in=(Block:l)
brl memory_error
@1
MoveLong [Dest],Dptr
lda [Dptr]
inc a
sta [Dptr]
AddLong [Dest],Dsize,Dptr
SubLong Dptr,#X_ParBlockSize,Dptr
PushLong #X_CurrentParRecord
PushLong Dptr
PushLong #X_ParBlockSize
_BlockMove
AddWord X_BOffset,ParSize,X_BOffset
MoveLong [Ruler],Rptr
lda [Rptr]
inc a
sta [Rptr]
lda CRFlag
bne through
brl loop
through
lda ParSize
beq blank_line
IncLong Bsize
PushLong Bsize
PushLong Block
jsl D_GrowHandle
sta err
jcs memory_error
MoveLong [Block],Bptr
lda [Bptr]
tay
shortm
lda #CR
sta [Bptr],y
longm
lda [Bptr]
inc a
sta [Bptr]
ldy #2
sta [Bptr],y
brl done
blank_line
SpaceLong
PushLong #12
jsl D_NeedHand
sta err
jcs memory_error
PullLong Block
MoveLong [Block],Bptr
MoveWord #12,[Bptr]
MoveWord #12,[Bptr]:#2
Addwl #4,Bptr
PushLong #Header
PushLong Bptr
PushLong #8
_BlockMove
MoveWord #4,X_BOffset
Addwl #X_ParBlockSize,Dsize
PushLong Dsize
PushLong Dest
jsl D_GrowHandle
sta err
bcc @1
tool _DisposeHandle,in=(Block:l)
brl memory_error
@1
MoveLong [Dest],Dptr
lda [Dptr]
inc a
sta [Dptr]
AddLong [Dest],Dsize,Dptr
SubLong Dptr,#X_ParBlockSize,Dptr
MoveLong Block,X_BHand
MoveWord #4,X_BOffset
PushLong #X_CurrentParRecord
PushLong Dptr
PushLong #X_ParBlockSize
_BlockMove
MoveLong [Ruler],Rptr
lda [Rptr]
inc a
sta [Rptr]
done
PushLong Dest
jsl X_MassageWPScrap
brl exit
partoobig
SpaceWord
PushLong #ParTooBigMess
jsl D_AlertBox
pla
MoveWord #-1,err
PushWord #WPText
PushLong Dest
jsl X_DisposeScrap
brl exit
ParTooBigMess STR 'There is a paragraph larger than 64K.'
emptyscrap
SpaceLong
PushLong #2
jsl D_NeedHand
sta err
PullLong Dest
bcs exit
MoveLong [Dest],Dptr
MoveWord #0,[Dptr]
bra exit
memory_error
call X_DisposeWpScrap,in=(Dest:l)
MoveLong #-1,Dest
exit PushWord X_OldCursor
jsl D_SetCursor
return
Header DC.L -1
DC.A 0
DC.B CR
GetNextCR
MoveLong Sptr,Cptr
ldx #0
crloop Cmpl Cptr,EndPtr
bge endloop
shortm
lda [Cptr]
cmp #CR
beq foundcr
longm
inx
IncLong Cptr
bra crloop
endloop txa
sec
rts
LONGA off
foundcr lda #CR
txy
sta [Sptr],y
longm
txa
inc a
clc
rts
ENDP
END