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

1 line
7.3 KiB
Plaintext
Executable File

load 'macros.dump'
include 'driver.equ'
include 'scrap.equ'
include 'sssc.equ'
IMPORT X_AsciitoWPScrap
IMPORT D_BeachBall
IMPORT D_CurCursor
IMPORT X_DBtoPLScrap
IMPORT D_GrowHandle
IMPORT D_GrowLHandle
IMPORT D_NeedHand
IMPORT D_NeedHandle
IMPORT X_OldCursor
IMPORT X_ParBlockSize
IMPORT D_SetCursor
import X_AsciiFilter
IMPORT CellBody
IMPORT D_Deref
IMPORT EndCellBody
IMPORT X_FSScratch
IMPORT X_InitFieldScanner
IMPORT X_NextField
IMPORT X_FormatValue
IMPORT D_UnLock
import X_ClipData
X_ScPLtoAsciiScrap PROC EXPORT
;Using D_CursorData
;Using X_ClipData
input Src:l
local Sptr:l,Ssize:l,Dptr:l,Dsize:l,Doff:l
local EndDptr:l,EndSptr:l
output Dest:l
error err
begin
MoveWord >D_CurCursor,X_OldCursor
stz err
SpaceLong
PushLong Src
_GetHandleSize
sta err
PullLong Ssize
jcs exit
SpaceLong
PushLong Ssize
jsl D_NeedHand
sta err
PullLong Dest
jcs exit
MoveLong [Dest],Dptr
Stzl Doff
PushLong Src
_HLock
AddLong [Src],#7,Sptr
AddLong [Src],Ssize,EndSptr
loop Cmpl Sptr,EndSptr
jge done
shortm
lda [Sptr]
cmp #$20
bge normal
cmp #$9
beq normal
cmp #CR
bne notcr
longm
Addwl #7,Sptr
jsl D_BeachBall
shortm
lda #CR
brl normal
LONGA Off
notcr cmp #1
bne notfont
longm
Addwl #3,Sptr
brl loop
LONGA Off
notfont longm
Addwl #2,Sptr
brl loop
LONGA Off
normal sta [Dptr]
longm
IncLong Sptr
IncLong Doff
IncLong Dptr
brl loop
mem_err PushLong Dest
_DisposeHandle
PushLong Src
_HUnlock
brl exit
done PushLong Src
_HUnlock
PushLong Doff
PushLong Dest
jsl D_GrowHandle
exit PushWord X_OldCursor
jsl D_SetCursor
return err
ENDP
;************************************************************************
;
; X_WPtoAsciiScrap
;
;************************************************************************
X_ScWPtoAsciiScrap PROC EXPORT
;Using X_SWScrapEquates
;Using X_WPScrapData
;Using D_CursorData
;Using X_ClipData
input Src:l
local Sptr:l,Pars:w,Block:l,Bptr:l,Bsize:l
local Dptr:l,Dsize:l,FirstPar:w,Offset:w,NextPar:w
local Doff:l,Pptr:l
output Dest:l
error err
begin
MoveWord >D_CurCursor,X_OldCursor
stz err
Spacelong
_MaxBlock
PullLong Dsize
SpaceLong
PushLong Dsize
PushWord #X_Locked
jsl D_NeedHandle
sta err
PullLong Dest
jcs exit1
PushLong Src
_HLock
MoveLong [Src],Sptr
MoveWord [Sptr],Pars
AddLong Sptr,#2,Pptr
MoveLong [Pptr],Block
PushLong Block
_HLock
MoveLong [Block],Bptr
MoveWord [Bptr],Bsize
MoveLong [Dest],Dptr
stz Dsize+2
MoveWord Bsize,Dsize
stzl Doff
parloop jsl D_BeachBall
MoveWord [Pptr]:#4,Offset
AddWord Offset,#7,Offset
charloop shortm
ldy Offset
lda [Bptr],y
cmp #CR+1
jge notspecial
cmp #9
jeq notspecial
cmp #CR
jeq X_DoCR
cmp #1
jeq dofont
longm
AddWord Offset,#2,Offset
brl charloop
dofont longm
AddWord Offset,#3,Offset
brl charloop
X_DoCR sta [Dptr]
longm
inc Doff
bne x4
inc Doff+2
x4 inc Dptr
bne x5
inc Dptr+2
x5 inc Offset
dec Pars
jeq exit
AddLong Pptr,#X_ParBlockSize,Pptr
Cmpl Block,[Pptr]
jeq parloop
MoveLong [Pptr],Block
MoveLong [Block],Bptr
MoveWord [Bptr]:#2,Bsize
stz Bsize+2
lda Dsize
clc
adc Bsize
sta Dsize
bcc noadd1
inc Dsize+2
noadd1 SpaceLong
PushLong Dsize
PushLong Dest
jsl D_GrowLHandle
sta err
PullLong Dptr
jcs Exit
AddLong Dptr,Doff,Dptr
brl parloop
LONGA Off
notspecial
sta [Dptr]
longm
inc Doff
bne x1
inc Doff+2
x1 inc Dptr
bne x2
inc Dptr+2
x2 inc Offset
brl charloop
exit PushLong Block
_HUnlock
PushLong Src
_HUnlock
PushLong Dest
_HUnlock
lda err
jeq NoErrors
pushlong Dest
_DisposeHandle
bra Exitcursor
NoErrors
lda Doff
dec a
tax
bne nohistuff
lda Doff+2
dec a
bra histuff
nohistuff
lda Doff+2
histuff pha
phx
PushLong Dest
jsl D_GrowHandle
sta err
ExitCursor
PushWord X_OldCursor
jsl D_SetCursor
Exit1
return err
ENDP
;***********************************************************************
;
; X_SStoAsciiScrap
; From a D_SS-type scrap, generate an ascii textblock (handle)
; s.t. cells are seperated by tabs and rows by carriage returns.
;
;X_SSScrapRows
;X_SSScrapcols
;X_SSScrapParseCode
;X_SSScrapSize ;Size of handle
;X_SSScrapCells ;Start of data
;
;X_SSScrapCellLoc
;X_SSScrapCellSize
;X_SSScrapFormat
;X_SSScrapValueSize
;X_SSScrapValue
***********************************************************************
X_ScSStoAsciiScrap PROC EXPORT
;Using X_SSScrapData
;Using D_CursorData
;Using X_ClipData
input src:l
output dest:l
local sptr:l,cptr:l,cellcount:l,ascptr:l,colcount:w,colindex:w
local dsize:l,tmp:l,strptr:l,newsize:l,rowindex:w,mysize:l
error err
begin
MoveWord >D_CurCursor,X_OldCursor
cpzl src
bne GetPtr
moveword #-1,err
brl quit
GetPtr rcall D_Deref,in=(src:ax),out=(sptr:ax)
; initial approximation of the size
tool _MaxBlock,out=(mysize:l)
call D_NeedHand,in=(mysize:l),out=(dest:l),err=(err)
jcs exit
moveword [sptr]:#X_SSScrapcols,colcount
stzl dsize
in [sptr]:#X_SSScrapRows:w,[sptr]:#X_SSScrapcols:w
out cellcount:l
xtool _Multiply
addwl #X_SSScrapCells,sptr
moveword #1,rowindex
sta colindex
CellLoop call D_BeachBall
cpzl cellcount
jeq EndCellLoop
cmpw [sptr]:#X_SSScrapCellLoc,rowindex
jne EmptyCell
cmpw [sptr]:#X_SSScrapCellLoc+2,colindex
jne EmptyCell
moveword [sptr]:#X_SSScrapFormat,a
and #X_SSCellType
xba
div16 a
tax
jmp (TypeTable,x)
TypeTable DC.W TextCell,ValueCell,CalcTextCell,FormulaCell
DC.W LpadCell,RpadCell,EmptyCell,EmptyCell
TextCell stz tmp+2
moveword [sptr]:#X_SSScrapValue,a
and #$00FF
sta tmp
addlong a,dsize,newsize
call D_GrowHandle,in=(newsize:l,dest:l),err=(err)
jcs abort
movelong [dest],ascptr
addlong sptr,#X_SSScrapValue+1,s
addlong ascptr,dsize,s
tool _BlockMove,in=(:l,:l,tmp:l)
movelong newsize,dsize
brl DidCell
CalcTextCell stz tmp+2
moveword [sptr]:#X_SSScrapValueSize,a
and #$00FF
sta tmp
addlong a,dsize,newsize
call D_GrowHandle,in=(newsize:l,dest:l),err=(err)
jcs abort
movelong [dest],ascptr
addlong sptr,#X_SSScrapValue,s
addlong ascptr,dsize,s
tool _BlockMove,in=(:l,:l,tmp:l)
movelong newsize,dsize
brl DidCell
FormulaCell
ValueCell spacelong
spacelong
pushword #256
pushlong [sptr]:#X_SSScrapFormat
addlong #X_SSScrapValue,sptr,s
call X_FormatValue ; in=(:w,:l,:l),out=(:w,:l,:w)
ply
pulllong strptr
ply
stz tmp+2
lda [strptr]
and #$00FF
tay
lda [strptr],y
and #$FF
cmp #' '
bne GetSize
dey
GetSize sty tmp
GotSize tya
addlong a,dsize,newsize
incl strptr
call D_GrowHandle,in=(newsize:l,dest:l),err=(err)
jcs abort
movelong [dest],ascptr
pushlong strptr
addlong ascptr,dsize,s
tool _BlockMove,in=(:l,:l,tmp:l)
movelong newsize,dsize
LPadCell
RPadCell
DidCell moveword [sptr]:#X_SSScrapCellSize,tmp
stz tmp+2
addlong tmp,sptr,sptr
EmptyCell incl dsize
call D_GrowHandle,in=(dsize:l,dest:l),err=(err)
jcs abort
movelong [dest],ascptr
addlong ascptr,dsize,ascptr ; set ascptr to last byte
decl ascptr ;
lda colindex
ina
sta colindex
cmp colcount
ble DoTab
moveword #1,colindex
inc rowindex
lda #CR
bra DoSep
DoTab lda #Tab
DoSep shortm
sta [ascptr]
longm
ContCell
decl cellcount
brl CellLoop
EndCellLoop
exit rcall D_UnLock,in=(src:ax)
tool _GetHandleSize,in=(dest:l),out=(dsize:l)
IncLong dsize
call D_GrowHandle,in=(dsize:l,dest:l)
DecLong dsize
AddLong [Dest],dsize,cptr
MoveByte #CR,[cptr]
quit call D_SetCursor,in=(X_OldCursor:w)
return
abort tool _DisposeHandle,in=(Dest:l)
brl exit
ENDP
END