NEW
  AUTO 3,1
*---------------------------------------
FIO.Init		>LDYA L.ASM.6502
FIO.LOAD.CPU	>STYA ZPPtr2

				ldy #S.PS.hARGV
				lda (pPS),y
				>SYSCALL GetMemPtr

				>STYA ZPPtr1
				ldy #$ff
				ldx #$ff
				
.1				iny
				inx
				lda (ZPPtr1),y
				sta ASM.CPU.FILE,x
				bne .1

				lda #'.'
				sta ASM.CPU.FILE,x
				ldy #$ff

.2				iny
				inx
				lda (ZPPtr2),y
				jsr SRC.IsLetterOrDigit
				bcs .3
				
				sta ASM.CPU.FILE,x
				bra .2
				
.3				stz ASM.CPU.FILE,x
				
				>LDA.G ASM.T.hMem
				beq .4
				
				>SYSCALL FreeMem
				
				>STZ.G ASM.T.hMem
				
.4				>PUSHW L.MSG.T.FILE
				>PUSHW L.ASM.CPU.FILE
				>PUSHBI 2
				jsr OUT.Print
				
				>PUSHW L.ASM.CPU.FILE
				>PUSHBI	O.RDONLY
				>PUSHBI S.FI.T.BIN
				>PUSHWZ				Aux type
				>SYSCALL LoadFile
				bcs .9

				txa
				>STA.G ASM.T.hMem
				
				>SYSCALL GetMemPtr
				>STYA ZPPtr1

				ldy #ASM.T.AM
				lda (ZPPtr1),y
				clc
				adc ZPPtr1
				sta ZPAMPtr
				iny
				lda (ZPPtr1),y
				adc ZPPtr1+1
				sta ZPAMPtr+1
				iny
				lda (ZPPtr1),y
				clc
				adc ZPPtr1
				sta ZPRPtr
				iny
				lda (ZPPtr1),y
				adc ZPPtr1+1
				sta ZPRPtr+1
				iny
				lda (ZPPtr1),y
				clc
				adc ZPPtr1
				sta ZPOpsPtr
				iny
				lda (ZPPtr1),y
				adc ZPPtr1+1
				sta ZPOpsPtr+1
.9				rts
*---------------------------------------
FIO.OpenFile	>STYA ZPPtr1
				>PUSHW L.MSG.SRC.FILE
				>PUSHW ZPPtr1
				>PUSHBI 2
				jsr OUT.Print
				
				>LDA.G SRC.COUNT
				cmp #IN.MAXDEPTH
				bne .1
				
				lda #E.SRC.TOO.MANY.IN
				sec
				rts
				
.1				>PUSHW ZPPtr1
				>PUSHW L.FIO.Stat
				>SYSCALL Stat
				bcs .99
				
				lda FIO.Stat+S.STAT.P.TYPE
				cmp #S.FI.T.TXT
				bne .2

				ldx #O.RDONLY+O.TEXT
				bra .3
				
.2				cmp #$FA			S-C/BAS?
				bne .98
				
				ldx #O.RDONLY
				
.3				>PUSHW ZPPtr1
				txa
				>PUSHA
				>PUSHB FIO.Stat+S.STAT.P.TYPE
				>PUSHWZ
				>SYSCALL FOpen
				bcs .99
			
				pha
				>LDA.G SRC.COUNT
				clc
				adc #SRC.hFILES
				tay
				pla
				sta (pData),y
				>LDA.G SRC.COUNT
				clc
				adc #SRC.hFILETYPES
				tay

				lda FIO.Stat+S.STAT.P.TYPE
				sta (pData),y

				>INC.G SRC.COUNT
				
				lda #0
				>STA.G SRC.LINENUM
				iny
				sta (pData),y
				
				clc
				rts
				
.98				lda #E.SRC.INV.TYPE
				sec
.99				rts
*---------------------------------------
FIO.ReadLine	>LDA.G SRC.COUNT
				clc
				adc #SRC.hFILETYPES-1
				tay
				lda (pData),y
				bmi .10

				>PUSHWI 256
				>PUSHW ZPLineBuf
				jsr FIO.ReadFromFile
				bcs .19 
				tya
				beq .13

				dey
				lda (ZPLineBuf),y
				eor #C.CR
				beq .22
				iny
.22				lda #0				replace ending $0D with $00
.13				sta (ZPLineBuf),y

				>INC.G SRC.LINENUM
				bne .19
				>INC.G SRC.LINENUM+1
.19				rts
*---------------------------------------
.10				>PUSHWI 3
				>PUSHW ZPTmpBuf
				jsr FIO.ReadFromFile
				bcs .19 

				ldy #1
				lda (ZPTmpBuf),y
				pha
				iny
				lda (ZPTmpBuf),y
				>STA.G SRC.LINENUM+1
				pla
				>STA.G SRC.LINENUM
				lda (ZPTmpBuf)		LEN
				sec
				sbc #3
				bcc .9				LEN should be at least 3

				tay
				lda #0
				>PUSHYA
				>PUSHW ZPTmpBuf
				jsr FIO.ReadFromFile
				bcs .9
				>LDYA ZPTmpBuf
				>STYA ZPPtr1
				ldy #0
.1				lda (ZPPtr1)
				inc ZPPtr1
				bne .11
				inc ZPPtr1+1
.11				tax
				bmi .2
				sta (ZPLineBuf),y
				beq .8				Ending 00

				iny
				bne .1
				bra .99
.2				cmp #$C0			REPEAT char?
				bne .5

				lda (ZPPtr1)		Get Repeat Count
				inc ZPPtr1
				bne .3
				inc ZPPtr1+1
.3				tax

				lda (ZPPtr1)		Get Repeat Char
				inc ZPPtr1
				bne .4
				inc ZPPtr1+1
.4				sta (ZPLineBuf),y
				iny
				beq .99
				dex
				bne .4

				bra .1
.5				and #$3F			Compute blank count
				tax
				lda #$20
.6				sta (ZPLineBuf),y
				iny
				beq .99
				dex
				bne .6
				bra .1
.8				clc
.9				rts

.99				lda #E.LINE.TOO.LONG
				sec
				rts
*--------------------------------------
FIO.ReadFromFile
				>LDA.G SRC.COUNT
				clc
				adc #SRC.hFILES-1
				tay
				lda (pData),y

				>SYSCALL FRead
				bcs .9
				tax						$100 byte transfered ?
				beq .9
				lda #E.LINE.TOO.LONG
				sec
.9				rts
*---------------------------------------
FIO.FileClose	>LDA.G SRC.COUNT
				beq .8
				
				dec
				sta (pData),y
				
				sec
				adc #SRC.hFILES-1
				tay
				lda (pData),y
				>SYSCALL fclose
				
.8				clc
				rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.FIO
LOAD USR/SRC/BIN/ASM.S
ASM
