A2osX/BIN/ASM.S.FIO.txt

281 lines
4.7 KiB
Plaintext
Raw Normal View History

2015-10-28 16:55:12 +00:00
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*---------------------------------------
2015-11-20 16:31:14 +00:00
FIO.OpenFileA sta FIO.hFileName
2015-10-28 16:55:12 +00:00
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1
2015-11-20 16:31:14 +00:00
stz FIO.hFullPath
2015-10-28 16:55:12 +00:00
ldy #1
lda (ZPPtr1),y
cmp #'/'
beq .1
2015-11-20 16:31:14 +00:00
>PUSHB FIO.hFileName
2015-10-28 16:55:12 +00:00
ldy #S.PS.hPREFIX
lda (pPs),y
>PUSHA
>SYSCALL SYS.PStrCat
2015-11-20 16:31:14 +00:00
sta FIO.hFullPath
sta FIO.hFileName
2015-10-28 16:55:12 +00:00
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1
.1 >PUSHW ZPPtr1
>PUSHW L.MSG.SRC.FILE
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #SRC.COUNT
lda (pData),y
2015-10-30 16:34:59 +00:00
cmp #SRC.IN.MAXDEPTH
2015-10-28 16:55:12 +00:00
bne .10
lda #ERR.SRC.TOO.MANY.IN
sec
2015-11-20 16:31:14 +00:00
bra FIO.OpenFileA.Exit
2015-10-28 16:55:12 +00:00
2015-11-20 16:31:14 +00:00
.10 lda FIO.hFileName
2015-10-28 16:55:12 +00:00
>SYSCALL SYS.MLIOpenA
bcs .99
pha
ldy #SRC.COUNT
lda (pData),y
clc
adc #SRC.hREFNUMS
tay
pla
sta (pData),y
ldy #SRC.COUNT
lda (pData),y
clc
adc #SRC.hBUFFERS
tay
txa
sta (pData),y
2015-11-20 16:31:14 +00:00
lda FIO.hFileName
2015-10-28 16:55:12 +00:00
>SYSCALL SYS.MLIGetFileInfoA
bcs .99
>STYA ZPPtr1
2015-10-28 16:55:12 +00:00
ldy #1
lda (ZPPtr1),y
2015-10-28 16:55:12 +00:00
tax
ldy #SRC.COUNT
lda (pData),y
clc
adc #SRC.hFILETYPES
tay
txa
sta (pData),y
cmp #$FA S-C/BAS?
beq .8
cmp #$04 TXT ?
bne .98
>PUSHBI $0D Line separator for TXT file
>PUSHBI $FF
ldy #SRC.COUNT
lda (pData),y
clc
adc #SRC.hREFNUMS
tay
lda (pData),y
>PUSHA
>SYSCALL SYS.MLINewLine
bcs .99
.8 ldy #SRC.COUNT
lda (pData),y
inc
sta (pData),y
clc
2015-11-20 16:31:14 +00:00
bra FIO.OpenFileA.Exit
2015-10-28 16:55:12 +00:00
.98 lda #ERR.SRC.INV.TYPE
.99 sec
2015-11-20 16:31:14 +00:00
FIO.OpenFileA.Exit php
pha
lda FIO.hFullPath
beq .1
>SYSCALL SYS.FreeMemA
.1 pla
plp
2015-10-28 16:55:12 +00:00
rts
*---------------------------------------
2015-11-13 16:25:31 +00:00
FIO.ReadLine stz SRC.BufPtr
2015-10-28 16:55:12 +00:00
ldy #SRC.COUNT
lda (pData),y
clc
adc #SRC.hFILETYPES-1
tay
lda (pData),y
bmi .10
>PUSHWI 256
>PUSHWI TmpBuffer256
jsr FIO.ReadFromFile
bcs .19
lda #0 replace ending $0D with $00
sta TmpBuffer256,y
.19 rts
.10 >PUSHWI 3
>PUSHW L.SRC.Buffer
jsr FIO.ReadFromFile
bcs .9
lda SRC.Buffer+1
sta SRC.LINENUM
lda SRC.Buffer+2
sta SRC.LINENUM+1
lda SRC.Buffer LEN
sec
sbc #3
bcc .9 LEN should be at least 3
tay
lda #0
>PUSHYA
>PUSHW L.SRC.BUFFER
jsr FIO.ReadFromFile
ldy #0
ldx #0
.1 lda SRC.Buffer,y
bmi .2
sta TmpBuffer256,x
beq .8 Ending 00
inx
beq .99
iny
bne .1
bra .99
.2 cmp #$C0 REPEAT char?
bne .5
iny
beq .99
lda SRC.Buffer,y
iny
beq .99
.3 pha
lda SRC.Buffer,y
sta TmpBuffer256,x
pla
inx
beq .99
dec
bne .3
iny
bne .1
bra .99
.5 and #$3F Compute blank count
.6 pha
lda #$20
sta TmpBuffer256,x
pla
inx
beq .99
dec
bne .6
iny
bne .1
bra .99
.8 clc
.9 rts
.99 lda #ERR.LINE.TOO.LONG
sec
rts
*--------------------------------------
FIO.ReadFromFile ldy #SRC.COUNT
lda (pData),y
clc
adc #SRC.hREFNUMS-1
tay
lda (pData),y
>PUSHA
>SYSCALL SYS.MLIRead
bcs .9
tax $100 byte transfered ?
beq .9
lda #ERR.LINE.TOO.LONG
sec
.9 rts
*---------------------------------------
FIO.FileClose ldy #SRC.COUNT
lda (pData),y
beq .8
clc
adc #SRC.hREFNUMS-1
tay
lda (pData),y
>SYSCALL SYS.MLICloseA
ldy #SRC.COUNT
lda (pData),y
clc
adc #SRC.hBUFFERS-1
tay
lda (pData),y
>SYSCALL SYS.FreeMemA
ldy #SRC.COUNT
lda (pData),y
dec
sta (pData),y
.8 clc
rts
*---------------------------------------
LOAD.ASM.T ldy #ASM.T.hMem
lda (pData),y
beq .1
>SYSCALL SYS.FreeMemA
ldy #ASM.T.hMem
lda #0
sta (pData),y
.1 >PUSHW L.ASM.T.FILENAME
>PUSHW L.MSG.T.FILE
>LIBCALL hLIBSTR,LIBSTR.PRINTF
>LDYA L.ASM.T.FILENAME
>SYSCALL SYS.LoadFileYA
bcs .9
txa
ldy #ASM.T.hMem
sta (pData),y
.9 rts
*---------------------------------------
MAN
SAVE BIN/ASM.S.FIO
LOAD BIN/ASM.S
ASM