A2osX/BIN/EDIT.S.FILE.txt
2019-12-16 14:14:11 +01:00

310 lines
4.6 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
lda #$ff
>STA.G bUpdateStatus
>LDYA L.MSG.NEWFILE
FILE.New.1 >SYSCALL RealPath
bcs .9
txa
>STA.G hFileName
>LDYAI 4096
>STYA BufLen
>SYSCALL GetMem
bcs .9
>STYA BufPtr
>STYA.G BufBase
txa
>STA.G hBuffer FileLen already set to 0
lda #0
sta (BufPtr)
stz FileLen
stz FileLen+1
.9 rts
*--------------------------------------
FILE.Load jsr BUF.ResetSel
lda #$ff
>STA.G bUpdateStatus
>PUSHEA.G STATBUF
>LDA.G hFileName
>SYSCALL GetMemPtr
>SYSCALL stat
bcc .1
>LDA.G hFileName
>SYSCALL GetMemPtr
bra FILE.New.1
.1 >LDA.G STATBUF+S.STAT.P.TYPE
cmp #S.FI.T.TXT
beq FILE.Load.TXT
cmp #$FA S-C/ASM?
bne .9
jmp FILE.Load.ASM
.9 lda #MLI.E.INCFF
sec
rts
*--------------------------------------
FILE.Load.TXT stz FileLen
stz FileLen+1
stz TmpByte hLineBuffer
stz TmpIndex hFile
>STZ.G FileType
jsr FILE.GetBuffer
bcs .99
>LDYAI 256
>SYSCALL GetMem
bcs .99
>STYA ZPPTR1
stx TmpByte
>PUSHWZ Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY+O.TEXT
>LDA.G hFileName
>SYSCALL GetMemPtr
>SYSCALL fopen
.99 bcs .9
sta TmpIndex
.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
jmp FILE.Close
*--------------------------------------
FILE.Load.ASM
lda #MLI.E.INCFF
sec
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
>PUSHWZ Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.CREATE+O.WRONLY
>LDA.G hFileName
>SYSCALL GetMemPtr
>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 .9
bra .1
.8 jsr FILE.Close
>STZ.G bUnSaved
jsr SCRN.UpdateTopBar
jsr SCRN.ResetStatusBar
>LDA.G hFileName
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI 2
>PUSHW L.MSG.STATUSBAR.S
bra .90
.9 jsr FILE.Close
>PUSHA ERROR CODE
jsr SCRN.ResetStatusBar
>PUSHBI 1
>PUSHW L.MSG.STATUSBAR.E
.90 jsr SCRN.LineBufSprintf
jmp SCRN.LineBufOut
*--------------------------------------
FILE.Save.ASM
clc
rts
*--------------------------------------
FILE.GetBuffer >LDA.G STATBUF+S.STAT.SIZE+3
dey
ora (pData),y
bne .9
dey
lda (pData),y Size HI
cmp #16
bcs .1
lda #13 Min = 3k
.1 adc #3 1K more
ldy #0 Size LO
>STYA BufLen
>SYSCALL GetMem
bcs .99
>STYA BufPtr
>STYA.G BufBase
txa
>STA.G hBuffer
lda #0
sta (BufPtr)
rts
.9 lda #E.FTB
sec
.99 rts
*--------------------------------------
FILE.Close php
pha
lda TmpByte
beq .1
>SYSCALL freemem
.1 lda TmpIndex
beq .2
>SYSCALL fclose
.2 pla
plp
rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/EDIT.S.FILE
LOAD USR/SRC/BIN/EDIT.S
ASM