A2osX/BIN/EDIT.S.FILE.txt
2020-04-02 08:32:25 +02:00

430 lines
6.2 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
FILE.New jsr BUF.ResetSel
jsr SCRN.UpdateStatusBar
>LDYA L.MSG.NEWFILE
FILE.New.1 >PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs .9
txa
>STA.G hFileName
>LDYAI 1024
>STYA BufLen
>SYSCALL GetMem
bcs .9
>STYA BufPtr
>STYA.G BufBase
txa
>STA.G hBuf FileLen already set to 0
lda #0
sta (BufPtr)
stz FileLen
stz FileLen+1
jsr SCRN.Home
clc
.9 rts
*--------------------------------------
FILE.Load jsr BUF.ResetSel
jsr SCRN.UpdateStatusBar
>LDA.G hFileName
>SYSCALL GetMemPtr
>PUSHYA
>PUSHEA.G STATBUF
>SYSCALL Stat
bcc .1
>LDA.G hFileName
>SYSCALL GetMemPtr
jmp FILE.New.1
.1 >LDYAI 256
>SYSCALL GetMem
bcs .99
>STYA ZPPTR1
stx TmpByte
>LDA.G STATBUF+S.STAT.P.TYPE
cmp #S.FI.T.TXT
bne .2
jsr FILE.Load.TXT
jmp FILE.Close
.2 cmp #$FA S-C/ASM?
bne .9
jsr FILE.Load.ASM
jmp FILE.Close
.9 lda TmpByte
>SYSCALL FreeMem
lda #MLI.E.INCFF
sec
.99 rts
*--------------------------------------
FILE.Load.TXT stz FileLen
stz FileLen+1
jsr SCRN.Home
stz TmpIndex hFile
>STZ.G FileType
ldx #S.FI.T.TXT
jsr FILE.OpenTypeX
bcs .99
sta TmpIndex
>PUSHA
>PUSHEA.G STATBUF
>SYSCALL FStat
bcs .99
jsr FILE.GetBuffer
.99 bcs .9
.1 >PUSHWI 254
>PUSHW ZPPTR1
lda TmpIndex
>SYSCALL FRead
bcs .7
lda #0
sta (ZPPTR1),y Y = line len
ldx #0
ldy #0
lda (ZPPTR1)
beq .8
eor #C.LF
bne .2
phy
lda #2
>STA.G FileType
ply
iny
.2 lda (ZPPTR1),y
beq .4
sta (BufPtr)
inc BufPtr
bne .3
inc BufPtr+1
.3 inx
iny
bra .2
.4 txa
clc
adc FileLen
sta FileLen
bcc .1
inc FileLen+1
bra .1
.7 cmp #MLI.E.EOF
bne .9
.8 lda #0
sta (BufPtr)
clc
.HS B0 BCS
.9 sec
rts
*--------------------------------------
FILE.Load.ASM stz FileLen
stz FileLen+1
lda #4
>STA.G FileType
lda #8
jsr FILE.GetBufferA 2k buffer
bcs .9
ldx #$FA
jsr FILE.OpenTypeX
bcs .99
sta TmpIndex
.1 >PUSHWI 3
>PUSHW ZPPTR1
lda TmpIndex
>SYSCALL FRead
bcs .7
lda #0
>PUSHA
lda (ZPPTR1)
dec
dec
dec
>PUSHA
>PUSHW ZPPTR1
lda TmpIndex
>SYSCALL FRead
bcs .7
jsr FILE.Load.ASM.Decode
bcc .1
.7 cmp #MLI.E.EOF
bne .9
lda #0
sta (BufPtr)
clc
.HS B0 BCS
.9 sec
.99 rts
*--------------------------------------
FILE.Load.ASM.Decode
ldy #0
.1 lda (ZPPTR1),y
beq .8
iny
tax
bmi .2
jsr FILE.Load.ASM.2Buf
bcc .1
.9 rts
.2 cmp #$C0 REPEAT char?
bne .5
lda (ZPPTR1),y Get Repeat Count
iny
tax
lda (ZPPTR1),y Get Repeat Char
iny
.4 jsr FILE.Load.ASM.2Buf
bcs .9
dex
bne .4
bra .1
.5 and #$3F Compute blank count
tax
lda #C.SPACE
.6 jsr FILE.Load.ASM.2Buf
bcs .9
dex
bne .6
bra .1
.8 lda #C.CR
*--------------------------------------
FILE.Load.ASM.2Buf
phy
phx
sta (BufPtr)
inc BufPtr
bne .1
inc BufPtr+1
.1 inc FileLen
bne .8
inc FileLen+1
lda FileLen+1
cmp BufLen+1
bne .8
jsr BUF.BufPtr.Realloc
bcs .9
>LDA.G BufBase
* clc
adc FileLen
sta BufPtr
iny
lda (pData),y
adc FileLen+1
sta BufPtr+1
.8 clc
.9 plx
ply
rts
*--------------------------------------
FILE.OpenTypeX tax
>LDA.G hFileName
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI O.RDONLY
txa
>PUSHA
>PUSHWZ Aux type
>SYSCALL FOpen
rts
*--------------------------------------
FILE.Save >LDYAI 256
>SYSCALL GetMem
bcs FILE.Save.9
>STYA ZPPTR1
stx TmpByte
>LDA.G FileType
tax
jmp (J.SAVE,x)
FILE.Save.9 rts
*--------------------------------------
FILE.Save.CR clc
.HS B0 BCS
FILE.Save.CRLF sec
ror TmpIndex+1
stz TmpIndex hFile
>LDA.G hFileName
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI O.CREATE+O.WRONLY
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
>SYSCALL FOpen
bcs FILE.Save.9
sta TmpIndex
>LDYA.G BufBase
>STYA BufPtr
.1 lda (BufPtr)
beq .8
ldy #$ff
.2 iny
lda (BufPtr),y
sta (ZPPTR1),y
beq .3
cmp #C.CR
bne .2
iny
bit TmpIndex+1
bpl .3
iny
lda #C.LF
sta (ZPPTR1),y
.3 tya
beq .8
clc
adc BufPtr
sta BufPtr
bcc .4
inc BufPtr+1
.4 lda #0
>PUSHYA
>PUSHW ZPPTR1
lda TmpIndex
>SYSCALL FWrite
bcs FILE.Close
bra .1
.8 >STZ.G bUnSaved
*--------------------------------------
FILE.Close php
pha
lda TmpByte
beq .1
>SYSCALL FreeMem
.1 lda TmpIndex
beq .2
>SYSCALL FClose
.2 pla
plp
rts
*--------------------------------------
FILE.Save.ASM
clc
rts
*--------------------------------------
FILE.GetBuffer >LDA.G STATBUF+S.STAT.SIZE+3
dey
ora (pData),y
bne FILE.GetBuffer.9
dey
lda (pData),y Size HI
inc
inc
FILE.GetBufferA ldy #0 Size LO
>STYA BufLen
>SYSCALL GetMem
bcs .99
>STYA BufPtr
>STYA.G BufBase
txa
>STA.G hBuf
.99 rts
FILE.GetBuffer.9
lda #E.FTB
sec
rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/EDIT.S.FILE
LOAD USR/SRC/BIN/EDIT.S
ASM