NEW
  PREFIX
AUTO 4,1
*---------------------------------------
FIO.Init		>LDYA L.ASM.6502
FIO.LOAD.ASM.T	>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.T.FILENAME,x
				bne .1
				
				lda #'.'
				sta ASM.T.FILENAME,x

				inx

				lda #'T'
				sta ASM.T.FILENAME,x

				inx

				lda #'.'
				sta ASM.T.FILENAME,x
				
				ldy #$ff

.2				iny
				inx
				lda (ZPPtr2),y
				jsr SRC.IsLetterOrDigit
				bcs .3
				sta ASM.T.FILENAME,x
				bra .2
				
.3				stz ASM.T.FILENAME,x
				ldy #ASM.T.hMem
				lda (pData),y
				beq .4
				
				>SYSCALL FreeMem
				ldy #ASM.T.hMem
				lda #0
				sta (pData),y
				
.4				>PUSHW L.ASM.T.FILENAME
				>PUSHBI 2
				>LDYA L.MSG.T.FILE
				jsr OUT.Print
				
				>PUSHWZ				Aux type
				>PUSHBI 6				S.FI.T.BIN
				>PUSHBI	O.RDONLY
				>LDYA L.ASM.T.FILENAME
				>SYSCALL LoadFile
				bcs .9
				
				txa
				ldy #ASM.T.hMem
				sta (pData),y
				
				>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 ZPPtr1
				>PUSHBI 2
				>LDYA L.MSG.SRC.FILE
				jsr OUT.Print
				
				ldy #SRC.COUNT
				lda (pData),y
				cmp #IN.MAXDEPTH
				bne .1
				
				lda #E.SRC.TOO.MANY.IN
				sec
				rts
				
.1				>PUSHW L.FIO.Stat
				>LDYA ZPPtr1
				>SYSCALL Stat
				bcs .99
				
				lda FIO.Stat+S.STAT.P.TYPE
				cmp #$04			TXT ?
				bne .2

				>PUSHWZ
				>PUSHBI 4
				>PUSHBI O.RDONLY+O.TEXT					
				bra .3
				
.2				cmp #$FA			S-C/BAS?					
				bne .98
				
				>PUSHWZ
				>PUSHBI $FA
				>PUSHBI O.RDONLY
				
.3				>LDYA ZPPtr1
				>SYSCALL FOpen
				bcs .99
			
				pha
				ldy #SRC.COUNT
				lda (pData),y
				clc
				adc #SRC.hFILES
				tay
				pla
				sta (pData),y
				
				ldy #SRC.COUNT
				lda (pData),y
				clc
				adc #SRC.hFILETYPES
				tay

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

				ldy #SRC.COUNT
				lda (pData),y
				inc
				sta (pData),y
				
				lda #0
				>STA.G SRC.LINENUM
				iny
				sta (pData),y
				
				clc
				rts
				
.98				lda #E.SRC.INV.TYPE
				
				sec
.99				rts
*---------------------------------------
FIO.ReadLine	ldy #SRC.COUNT
				lda (pData),y
				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
				ldy #SRC.COUNT
				lda (pData),y
				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	ldy #SRC.COUNT
				lda (pData),y
				beq .8
				
				clc
				adc #SRC.hFILES-1
				tay
				lda (pData),y
				>SYSCALL fclose
				
				ldy #SRC.COUNT
				lda (pData),y
				dec
				sta (pData),y
				
.8				clc
				rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.FIO
LOAD USR/SRC/BIN/ASM.S
ASM
