PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
					.LIST OFF
*---------------------------------------
FIO.Init			ldy #S.PS.hCMDLINE
					lda (pPS),y
					>SYSCALL SYS.GetMemPtrA
					bcs .99
					>STYA ZPPtr1
					lda (ZPPtr1)
					tay
					adc #3					len of ".T."
					sta ASM.T.FILENAMELEN
					adc #4					len of "6502"
					sta ASM.T.FILENAME
					tax
					
.2					lda (ZPPtr1),y
					sta ASM.T.FILENAME,y
					dey
					bne .2
					
					ldy #6

.3					lda ASM.T.DEFAULT,y
					sta ASM.T.FILENAME,x
					dex
					dey
					bpl .3
					
					jmp FIO.LOAD.ASM.T
.99					rts
*---------------------------------------
FIO.OpenFileA		sta FIO.hFileName
					>SYSCALL SYS.GetMemPtrA
					>STYA ZPPtr1
					
					stz FIO.hFullPath
					
					ldy #1
					lda (ZPPtr1),y
					cmp #'/'
					beq .1

					>PUSHB FIO.hFileName
					ldy #S.PS.hPREFIX
					lda (pPs),y
					>PUSHA
					>SYSCALL SYS.PStrCat
					sta FIO.hFullPath
					sta FIO.hFileName
					
					>SYSCALL SYS.GetMemPtrA
					>STYA ZPPtr1
					
.1					>PUSHW ZPPtr1
					>PUSHW L.MSG.SRC.FILE
					>LIBCALL hLIBSTR,LIBSTR.PRINTF
					
					ldy #SRC.COUNT
					lda (pData),y
					cmp #SRC.IN.MAXDEPTH
					bne .10
					
					lda #ERR.SRC.TOO.MANY.IN
					sec
					bra FIO.OpenFileA.Exit
					
.10					lda FIO.hFileName
					>SYSCALL SYS.GetMemPtrA
					>SYSCALL SYS.MLIOpenYA
					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

					lda FIO.hFileName
					>SYSCALL SYS.GetMemPtrA
					>SYSCALL SYS.MLIGetFileInfoYA
					bcs .99

					>STYA ZPPtr1
					ldy #1
					lda (ZPPtr1),y
					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
					bra FIO.OpenFileA.Exit
					
.98					lda #ERR.SRC.INV.TYPE
					
.99					sec
FIO.OpenFileA.Exit	php
					pha
					lda FIO.hFullPath
					beq .1
					>SYSCALL SYS.FreeMemA
.1					pla
					plp
					rts
*---------------------------------------
FIO.ReadLine		stz SRC.BufPtr
					
					ldy #SRC.COUNT
					lda (pData),y
					clc
					adc #SRC.hFILETYPES-1
					tay
					lda (pData),y
					bmi .10
					
					>PUSHWI 256
					>PUSHWI UsrBuf256
					jsr FIO.ReadFromFile
					bcs .19 
					
					lda #0				replace ending $0D with $00
					sta UsrBuf256,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 UsrBuf256,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 UsrBuf256,x
					pla
					inx
					beq .99
					dec
					bne .3
					iny
					bne .1
					bra .99
					
.5					and #$3F			Compute blank count
.6					pha
					lda #$20
					sta UsrBuf256,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
*---------------------------------------
FIO.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
					
					>PUSHWI 0				Aux type
					>PUSHBI 6				S.FILEINFO.TYPE.BIN
					>PUSHBI	SYS.FOPEN.R
					>PUSHW L.ASM.T.FILENAME
					>SYSCALL SYS.LoadFile
					bcs .9
					
					txa
					ldy #ASM.T.hMem
					sta (pData),y
					
.9					rts										
*---------------------------------------
FIO.EmitByte		clc
					rts
*---------------------------------------
MAN
SAVE BIN/ASM.S.FIO
LOAD BIN/ASM.S
ASM
