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 .9

				>STYA ZPPTR1
				stx TmpByte

				>LDA.G STATBUF+S.STAT.P.TYPE
				cmp #S.FI.T.TXT
				bne .2
				jsr FILE.Load.TXT
				bra .8
				
.2				cmp #$FA				S-C/ASM?
				beq .3

				lda #MLI.E.INCFF
				sec
				rts
				
.3				jsr FILE.Load.ASM
				
.8				php
				pha
				lda TmpByte
				>SYSCALL freemem
				pla
				plp
				
.9				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 .99
				
				sta TmpIndex
				>PUSHA
				>PUSHEA.G STATBUF
				
				>SYSCALL fstat
				bcs .99
				
				jsr FILE.GetBuffer
.99				bcs .9

.1				>PUSHWI 254
				>PUSHW ZPPTR1
				lda TmpIndex
				>SYSCALL fread
				bcs .7

				lda #0
				sta (ZPPTR1),y			Y = line len

				ldx #0
				ldy #0

				lda (ZPPTR1)
				beq .8
				
				eor #C.LF
				bne .2
				
				phy

				lda #2
				>STA.G FileType
				
				ply
				iny
				
.2				lda (ZPPTR1),y
				beq .4

				sta (BufPtr)
				inc BufPtr
				bne .3

				inc BufPtr+1

.3				inx
				iny
				bra .2
				
.4				txa
				clc
				adc FileLen
				sta FileLen
				bcc .1
				
				inc FileLen+1
				bra .1
				
.7				cmp #MLI.E.EOF
				bne .9

.8				lda #0
				sta (BufPtr)
	
				clc
				.HS B0					BCS
.9				sec
				jmp FILE.Close
*--------------------------------------
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

				sta TmpIndex
				
.1				>PUSHWI 3
				>PUSHW ZPPTR1
				lda TmpIndex
				>SYSCALL fread
				bcs .7

				lda #0
				>PUSHA
				lda (ZPPTR1)
				dec
				dec
				dec
				>PUSHA
				>PUSHW ZPPTR1
				lda TmpIndex
				>SYSCALL fread
				bcs .7

				jsr FILE.Load.ASM.Decode

				bcc .1
				
.7				cmp #MLI.E.EOF
				bne .9
				
				lda #0
				sta (BufPtr)
				
				clc
				.HS B0					BCS
.9				sec
				jmp FILE.Close
.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

				lda (ZPPtr1),y		Get Repeat Char
				iny
				
.4				jsr FILE.Load.ASM.2Buf
				bcs .9

				dex
				bne .4

				bra .1
				
.5				and #$3F			Compute blank count
				tax
				lda #C.SPACE
				
.6				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.OpenTypeX	tax
				>LDA.G hFileName
				>SYSCALL GetMemPtr
				>PUSHYA
				>PUSHBI	O.RDONLY
				txa
				>PUSHA
				>PUSHWZ					Aux type
				>SYSCALL fopen
				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
				stz TmpIndex			hFile
				
				>LDA.G hFileName
				>SYSCALL GetMemPtr
				>PUSHYA
				>PUSHBI	O.CREATE+O.WRONLY
				>PUSHBI S.FI.T.TXT
				>PUSHWZ					Aux type
				>SYSCALL FOpen
				bcs FILE.Save.9

				sta TmpIndex

				>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 .4
				
				inc BufPtr+1
				
.4				lda #0
				>PUSHYA
				>PUSHW ZPPTR1
				lda TmpIndex
				>SYSCALL FWrite
				bcs FILE.Close
				
				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.Save.ASM
				clc
				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
