A2osX/BIN/EDIT.S.FILE.txt
2021-06-30 21:09:07 +02:00

557 lines
7.7 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 .9
>PUSHA
>PUSHEA.G STATBUF
>SYSCALL FStat
bcs .9
jsr FILE.GetBuffer
bcs .9
.1 ldy #0
jsr FILE.ReadY read 256
bcs .7
sty TmpCount Count read
ldy #0
.2 lda (ZPPTR1),y
cmp #C.LF
bne .3
phy
lda #2
>STA.G FileType
ply
bra .5
.3 sta (BufPtr)
inc BufPtr
bne .4
inc BufPtr+1
.4 cmp #C.CR
beq .5
inc FileLen
bne .5
inc FileLen+1
.5 dec TmpCount
beq .1
iny
bra .2
.7 cmp #MLI.E.EOF
bne .9
.8 lda #0
sta (BufPtr)
clc
rts
.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
.1 ldy #3
jsr FILE.ReadY
bcs .7
lda (ZPPTR1)
dec
dec
dec
tay
jsr FILE.ReadY
bcs .7
jsr FILE.Load.ASM.Decode
bcc .1
.7 cmp #MLI.E.EOF
bne .9
lda #0
sta (BufPtr)
clc
rts
.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
.4 lda (ZPPTR1),y Get Repeat Char
jsr FILE.Load.ASM.2Buf
bcs .9
dex
bne .4
iny Skip Repeat char
bra .1
.5 and #$3F Compute blank count
tax
.6 lda #C.SPACE
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.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
ldx #S.FI.T.TXT
jsr FILE.CreateTypeX
bcs FILE.Save.9
>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 .7
inc BufPtr+1
.7 jsr FILE.WriteY
bcs FILE.Save.99
bra .1
.8 >STZ.G bUnSaved
FILE.Save.99 jmp FILE.Close
*--------------------------------------
FILE.Save.ASM stz TmpLen
stz TmpLen+1
inc TmpLen
ldx #$FA S-C/ASM
jsr FILE.CreateTypeX
bcs FILE.Save.99
>LDYA.G BufBase
>STYA BufPtr
.1 lda (BufPtr)
beq .8
ldy #1
lda TmpLen
sta (ZPPTR1),y
iny
lda TmpLen+1
sta (ZPPTR1),y
ldy #0
.2 iny
lda (BufPtr),y
beq .3
cmp #C.CR
bne .2
.3 ldy #3 Initial LEN
.4 lda (BufPtr)
beq .7
ldx #0
.40 inc BufPtr
bne .5
inc BufPtr+1
.5 cmp #C.CR
beq .7
cmp (BufPtr) same as next ?
bne .50 no -> flush
inx
cpx #$3F
bne .40
.50 cpx #0
beq .60 only one char....
cmp #C.SPACE
beq .61
cpx #3
bcs .62
.63 sta (ZPPTR1),y
iny
dex
bpl .63
bra .4
.62 pha
lda #$C0
sta (ZPPTR1),y
iny
txa
sta (ZPPTR1),y
iny
pla
sta (ZPPTR1),y
iny
bra .4
.61 txa
ora #$C0
.60 sta (ZPPTR1),y
iny
bra .4
.7 lda #0
sta (ZPPTR1),y
iny
tya
sta (ZPPTR1)
jsr FILE.WriteY
bcs FILE.Close
inc TmpLen
bne .1
inc TmpLen+1
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.OpenTypeX lda #O.RDONLY
bra FILE.Open
FILE.CreateTypeX
lda #O.CREATE+O.WRONLY
FILE.Open stz TmpIndex
phx
pha
>LDA.G hFileName
>SYSCALL GetMemPtr
>PUSHYA
pla access
>PUSHA
pla type
>PUSHA
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .9
sta TmpIndex
.9 rts
*--------------------------------------
FILE.ReadY phy
>PUSHB TmpIndex
>PUSHW ZPPTR1
lda #0
ply
bne .1
inc
.1 >PUSHYA
>SYSCALL FRead
rts
*--------------------------------------
FILE.WriteY phy
>PUSHB TmpIndex
>PUSHW ZPPTR1
ply
lda #0
>PUSHYA
>SYSCALL FWrite
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