NEW
  AUTO 3,1
*--------------------------------------
BS.GetSysBuf	lda #$04

BS.GetSysBufA	sta	XBBB5
				jsr	BS.KW.FRE
				bcs	.99

				lda AS.STRINGSTART+1
				sbc	AS.ARRAYEND+1
				cmp	XBBB5
				lda #BS.E.NOBUFFER
				bcc	.98

				lda AS.STRINGSTART+1
				sta	ZP.PCH
				sbc	XBBB5
				sta	ZP.A1H
				sta	AS.STRINGSTART+1

				lda AS.STRINGSTART
				sta	ZP.PCL
				sta	ZP.A1L

				lda AS.HIMEM
				sbc	ZP.PCL
				sta	BS.ReqMem

				lda AS.HIMEM+1
				sbc	ZP.PCH
				sta	BS.ReqMem+1

				jsr	BS.MoveMemDown

				lda #$00
				sec
				sbc	XBBB5
				sta	XBBE2
				jsr	LA3A3
				lda AS.HIMEM+1
				sta	XBBB7
				sec
				sbc	XBBB5
				sta	AS.HIMEM+1
				clc
				adc	#$04
				sta	BS.BUFPAGE
				rts

.98				sec
.99				rts

XBBB5			.BS 1
*--------------------------------------
BS.FreeSysBuf	jsr BS.KW.FRE
				bcs	.9

				lda AS.HIMEM+1
				sbc	#$00
				sta	ZP.PCH
				adc	#$03
				sta	ZP.A1H

				lda AS.STRINGSTART
				sta	ZP.PCL
				sta	ZP.A1L

				lda AS.HIMEM
				sec
				sbc	AS.STRINGSTART
				sta	BS.ReqMem

				lda AS.HIMEM+1
				sbc	AS.STRINGSTART+1
				sta	BS.ReqMem+1

				jsr	BS.MoveMemUp

				lda #$04
				sta	XBBE2
				clc
				adc	AS.HIMEM+1
				sta	AS.HIMEM+1
				jsr	LA3A3

				lda BS.BUFPAGE
				cmp	AS.HIMEM+1
				beq	.8

				pha
				ldx	GP.OPENCNT
				beq	.2

				lda AS.HIMEM+1

.1				cmp	BS.BUFPAGEs-1,x
				beq	LA29E

				dex
				bne	.1

.2				pla
				sec
.9				rts

.8				clc
				rts
*--------------------------------------
LA29E			pla
*--------------------------------------
BS.SetFileBuf	sta	GP.SBUFADR+1
				sta	BS.BUFPAGEs-1,x

				stz	GP.SBUFADR
				lda BS.REFNUMs,x
				sta	GP.MLIMRKEOFBUF.REFNUM
				lda #MLI.SETBUF
				jmp GP.GOSYSTEM
*--------------------------------------
BS.GETBUFR		jsr	BS.GetSysBufA
				bcs	LA2F6.9

				pha
				sbc	#$03
				sta	XBBB8
				pla

.1				sta	GP.SBUFADR+1
				ldx	GP.OPENCNT
				beq	.4

				lda XBBB7
				clc
				adc	#$04
				sta	XBBB7

.2				cmp	BS.BUFPAGEs-1,x
				bne	.3

				lda GP.SBUFADR+1
				jsr	LA356
				jsr	BS.SetFileBuf
				lda GP.SBUFADR+1
				adc	#$04
				bcc	.1

.3				dex
				bne	.2

.4				lda GP.SBUFADR+1
				bit	GP.EXECACTV
				bpl	LA2F6.8
*--------------------------------------
LA2F6			ldx	#$08
				jsr	LA356
				jsr	BS.SetFileBuf
				lda GP.SBUFADR+1
				adc	#$04

LA2F6.8			clc
LA2F6.9			rts
*--------------------------------------
BS.FREEBUFR		lda GP.OPENCNT
				asl
				asl
				adc	AS.HIMEM+1
				sta	XBBB7

				lda AS.HIMEM+1
				sta	XBBB8
				lda GP.RSHIMEM
				cmp	AS.HIMEM+1
				beq	.8

				sta	AS.HIMEM+1
				bit	GP.EXECACTV
				bpl	.1

				jsr	LA2F6
				bcc	.3

.1				lda XBBB7
				ldx	GP.OPENCNT
				beq	.5

.2				cmp	BS.BUFPAGEs-1,x
				bne	.4

				lda AS.HIMEM+1
				jsr	LA356
				jsr	BS.SetFileBuf
				sec
				lda XBBB7
				sbc	#$04
				sta	XBBB7

.3				lda AS.HIMEM+1
				sec
				sbc	#$04
				sta	AS.HIMEM+1
				bcs	.1

.4				dex
				bne	.2

.5				jsr	BS.KW.FRE

.8				clc
				rts
*--------------------------------------
LA356			pha
				lda XBBB8
				jsr	BS.SetFileBuf
				pla
				rts
*--------------------------------------
BS.MoveMemDown	ldy	#$00
				cpy	BS.ReqMem+1
				beq	.2

.1				lda (ZP.PCL),y
				sta	(ZP.A1L),y
				iny
				bne	.1

				inc	ZP.PCH
				inc	ZP.A1H
				dec	BS.ReqMem+1
				bne	.1

.2				cpy	BS.ReqMem
				beq	.8

				lda (ZP.PCL),y
				sta	(ZP.A1L),y
				iny
				bne	.2

.8				rts
*--------------------------------------
BS.MoveMemUp	ldy	BS.ReqMem
XA386			beq	LA38F				SELF MODIFIED

LA388			jsr	LA39A

				dec	ZP.A1H
				dec	ZP.PCH

LA38F			cpy	BS.ReqMem+1
				beq	LA3A2

				dec	BS.ReqMem+1
				bra	LA388
*--------------------------------------
LA39A			dey
				lda (ZP.PCL),y
				sta	(ZP.A1L),y
				tya
				bne	LA39A

LA3A2			rts
*--------------------------------------
LA3A3			lda AS.VARSTART+1
				sta	ZP.A2H
				lda AS.VARSTART
				ldx	AS.ARRAYSTART+1
				clc
				bcc	.2

.1				clc
				lda ZP.A2L
				adc	#$07

.2				sta	ZP.A2L
				bcc	.3

				inc	ZP.A2H

.3				eor	AS.ARRAYSTART
				bne	.4

				cpx	ZP.A2H

.4				clc
				beq	.5

				ldy	#$00
				lda (ZP.A2L),y
				iny
				eor	(ZP.A2L),y
				bpl	.1

				lda (ZP.A2L),y
				bpl	.1

				iny
				jsr	LA3FD
				bra	.1

.5				lda ZP.A2L
				sta	XBBDC

.6				clc
				jsr	LA160
				bcs	LA410

.7				ldy	#$00
				clc
				jsr	LA3FD
				clc
				lda #$03
				adc	ZP.A2L
				sta	ZP.A2L
				bcc	.8

				inc	ZP.A2H

.8				cmp	XBBDC
				bne	.7

				cpx	ZP.A2H
				bne	.7

				beq	.6
*--------------------------------------
LA3FD			lda (ZP.A2L),y
				beq	LA410

				iny
				iny
				lda AS.VARSTART+1
				cmp	(ZP.A2L),y
				bcs	LA410

				lda (ZP.A2L),y
				adc	XBBE2
				sta	(ZP.A2L),y

LA410			rts
*--------------------------------------
LA411			jsr	BS.FRE0
				bcs	.9

				lda AS.ARRAYEND
				sec
				sbc	AS.VARSTART
				sta	BS.BAS.HDR
				sta	BS.ReqMem

				lda AS.ARRAYEND+1
				sbc	AS.VARSTART+1
				sta	BS.BAS.HDR+1
				sta	BS.ReqMem+1

				lda AS.ARRAYSTART
				sbc	AS.VARSTART
				sta	BS.BAS.HDR+2

				lda AS.ARRAYSTART+1
				sbc	AS.VARSTART+1
				sta	BS.BAS.HDR+3

				lda AS.STRINGSTART
				sbc	BS.ReqMem
				sta	ZP.A1L

				lda AS.STRINGSTART+1
				sbc	#$00
				sta	ZP.A1H

				lda AS.ARRAYEND
				sbc	BS.ReqMem
				sta	ZP.PCL

				lda AS.ARRAYEND+1
				sbc	#$00
				sta	ZP.PCH

				lda #$03
				sta	XA386+1

				jsr	BS.MoveMemUp

				lda #$07
				sta	XA386+1

				lda ZP.A1L
				sta	XBBE9

				inc	ZP.A1H
				lda ZP.A1H
				sta	XBBEA

				lda AS.HIMEM
				sec
				sbc	ZP.A1L
				sta	XBBEB

				lda AS.HIMEM+1
				sta	BS.BAS.HDR+4
				sbc	ZP.A1H
				sta	XBBEC

				clc
.9				rts
*--------------------------------------
LA480			lda BS.BAS.HDR
				sta	BS.ReqMem
				clc
				adc	AS.VARSTART
				sta	AS.ARRAYEND

				lda BS.BAS.HDR+1
				sta	BS.ReqMem+1
				adc	AS.VARSTART+1
				sta	AS.ARRAYEND+1

				lda AS.VARSTART
				sta	ZP.A1L
				adc	BS.BAS.HDR+2
				sta	AS.ARRAYSTART

				lda AS.VARSTART+1
				sta	ZP.A1H
				adc	BS.BAS.HDR+3
				sta	AS.ARRAYSTART+1

				lda XBBE9
				sta	ZP.PCL
				lda XBBEA
				sta	ZP.PCH

				jsr	BS.MoveMemDown

				lda BS.ReqMem
				clc
				adc	ZP.PCL
				sta	AS.STRINGSTART

				lda ZP.PCH
				adc	#$00
				sta	AS.STRINGSTART+1
				sec
				lda AS.HIMEM+1
				sbc	BS.BAS.HDR+4
				beq	.8

				sta	XBBE2
				jsr	LA3A3

.8				clc
				rts
*--------------------------------------
BS.LINEBUFCLR80	lda #$A0
				ldx	#$4F

.1				sta	IO.LINEBUF+1,x
				dex
				bpl	.1

				rts
*--------------------------------------
BS.DOSCMD		stz BS.bFreeBuf

				lda #$FF
				sta	GP.XCNUM
				lda #$20
				sta	BS.GetCharSep
				lda #$08
				sta	BS.GetCharMax
				jsr	BS.GetKWInCmdBuf
				lda BS.CMDBUF
				cmp	#'A'
				bcs	LA6A5

				eor	#'-'
				beq	LA6A5

LA6A2			jmp	BS.SYNERR

LA6A5			jsr	BS.IsIntCmd
				bcc .1

				jsr	BS.IsExtCmd
				bcc .1
				
				rts

.1				lda GP.STATE
				bne	LA6BA

				lda GP.EXECACTV
				bne	LA6BA

				jsr	MON.CLREOL
				jsr	MON.CROUT

LA6BA			stz	GP.FoundBITS
				stz	GP.FoundBITS+1
				stz	BS.CMDBUF
				stz	MLI.PATHBUF

				lda GP.VDEFSLT
				sta	GP.ParamS
				lda GP.VDEFDRV
				sta	GP.ParamD

				lda AS.HIMEM+1
				sta	BS.BUFPAGE

				ldx	GP.XLEN
				inx
				inx
				stx	BS.GetCharMax

				lda GP.AllowedBITS
				beq	LA744

				asl
				bmi	LA747				CMDBITS0.SLOT

				jsr	BS.GetKWInCmdBuf
				php
				pha
				lda GP.AllowedBITS
				bpl	LA6F8				CMDBITS0.PFIX

				lda #MLI.GETPREFIX
				jsr	GP.GOSYSTEM

LA6F8			pla
				plp
				beq	LA744

				cmp	#','
				bne	LA703
				jmp	LA795

LA703			cmp	#'/'
				beq	LA70B

				cmp #'.'					.. or ../
				beq	LA70B

				cmp	#'A'
				bcc	LA73D

LA70B			dex
				lda #$82
				sta	BS.GetCharSep
				lsr
				sta	BS.GetCharMax

*			ldy	#$00

				jsr	BS.GetKWInCmdBufAtX
				dey
				sty	BS.CMDBUF.LEN
				lda #CMDBITS0.FN1
				sta	GP.FoundBITS

				phx
				jsr BS.Expand2PATHBUF
				plx
				bcs LA73A

				dex

				jsr	BS.GetCharSpaceSep
				bne	LA73A

				bcc	LA7A6

				lda GP.AllowedBITS
				lsr
				bcs	LA770				CMDBITS0.FN1

LA73A			jmp	BS.SYNERR

LA73D			lda GP.XCNUM
				cmp	#$06				RUN ????
				bne	LA73A

LA744			bra	LA7A6

LA747			jsr	BS.GetKWInCmdBuf
				beq	LA73A

				cmp	#$41
				beq	LA79A

				jsr	BS.TMPBUF3Reset
				stz	XBC08

				ldy	#$13
				sty	XBC09

				ldy	#CMDBITS0.SLOT
				sty	GP.FoundBITS

				stx BS.ToAUXSaveX
				ldx #BSX.GetDecNum.X
				jsr BS.ToAUX
				bcs	LA76F

				lda GP.ParamINPR
				cmp	#$08
				bcc	LA79F

LA76C			lda #BS.E.RANGE
				sec
LA76F			rts

LA770			lsr
				bcc	LA795

				jsr	BS.GetCharSpaceSep
				beq	LA73A

				dex
				lda #$82
				sta	BS.GetCharSep
				ldy	#$01
				jsr	BS.GetPathInPathBuf
				dey
				dey
				sty	MLI.PATHBUF
				lda #CMDBITS0.FN1+CMDBITS0.FN2
				sta	GP.FoundBITS
				dex
				jsr	BS.GetCharSpaceSep
				bne	LA73A

				bcc	LA7A6
*--------------------------------------
LA795			jsr	BS.GetCharSpaceSep
				beq	LA73A

LA79A			stx BS.ToAUXSaveX
				ldx #BSX.CheckOpt.X
				jsr	BS.ToAUX
				bcs	LA76F

LA79F			jsr	BS.GetCharSpaceSep
				bne	LA73A

				bcs	LA795

LA7A6			lda GP.ParamS
				beq	LA76C

				cmp	#$08
				bcs	LA76C

				lda GP.ParamD
				beq	LA76C

				cmp	#$03
				bcs	LA76C

				lda GP.AllowedBITS
				and	#CMDBITS0.RRUN+CMDBITS0.FN1
				lsr
				beq	LA7C9

				lda GP.STATE
				bne	LA7C9

				lda #BS.E.NODIRECT
				sec
				rts

LA7C9			bcc	LA80B

				lda GP.AllowedBITS+1
				and	#CMDBITS1.SD
				beq	LA80B

				lda GP.FoundBITS
				lsr
				bcs	LA7E1				CMDBITS0.FN1

				lda GP.AllowedBITS
				and	#CMDBITS0.PFIX+CMDBITS0.FNOPT
				beq	BS.SYNERR

				bpl	LA80B

LA7E1			lda BS.CMDBUF
				eor	#'/'
				beq	LA7ED

				lda MLI.PFIXPTR
				beq	LA806

LA7ED			lda GP.FoundBITS+1
				and	#CMDBITS1.SD
				beq	LA80B

				bcs	LA806

				stz	BS.CMDBUF.LEN
				stz	BS.CMDBUF

				lda #CMDBITS0.FN1
				tsb	GP.FoundBITS

LA806			jsr	BS.GetVolAtSxDy
				bcs	LA849

LA80B			lda GP.XCNUM
				beq	.8

				cmp	#25				PREFIX
				beq	.8

				cmp	#34				CD
				beq	.8

				lda GP.AllowedBITS+1
				and	#CMDBITS1.SD
				beq	.8

				lda GP.FoundBITS
				lsr
				bcc	LA844

				jsr	BS.GetFileInfo
				bcc	LA844

				cmp	#$07
				bne	LA849

				lda GP.AllowedBITS
				and	#CMDBITS0.CRFLG
				bne	LA844

				lda #BS.E.PATHNFND6
				rts

.8				clc
LA844			jsr .1

				bit BS.bFreeBuf
				bpl .8

				php
				pha
				
				jsr GP.FREEBUFR
				
				pla
				plp
.8				rts

.1				jmp	(BS.KW.JMPADDR)

BS.SYNERR		lda #BS.E.SYNTAX
LA849			sec
				rts
				
BS.bFreeBuf		.BS 1				
*--------------------------------------
BS.GetVolAtSxDy	lda GP.ParamS
				asl
				asl
				asl
				asl
				asl
				pha
				lda GP.ParamD
				eor	#$01
				lsr
				pla
				ror
				sta	GP.MLIMRKEOFBUF.REFNUM

				ldx	#$01
				ldy	#$02
				jsr BS.SetSBUFADRXY

				lda #MLI.ONLINE
				jsr	GP.GOSYSTEM
				bcs	LA849

				lda GP.ParamD
				sta	GP.VDEFDRV
				lda GP.ParamS
				sta	GP.VDEFSLT
				lda BS.CMDBUF
				eor	#'/'
				beq	LA8F4

				lda IO.LINEBUF+1
				and	#$0F
				adc	#$02
				sta	IO.LINEBUF+1
				adc	BS.CMDBUF.LEN
				cmp	#$40
				tax
				lda #BS.E.SYNTAX
				bcs	LA8F5

				ldy	BS.CMDBUF.LEN
				stx	BS.CMDBUF.LEN

LA89D			dex
				dey
				bmi	LA8AA

				lda BS.CMDBUF,y
				sta	BS.CMDBUF,x
				bra	LA89D

LA8AA			lda #'/'
				sta	BS.CMDBUF

LA8AF			sta	BS.CMDBUF,x
				lda IO.LINEBUF,x
				dex
				bne	LA8AF

				lda GP.XCNUM
				cmp	#$0B				OPEN
				beq	LA8F4

				cmp	#$16				DELETE
				beq	LA8F4

				cmp	#$08				EXEC
				beq	LA8F4

				lda MLI.PATHBUF
				tay
				clc
				adc	IO.LINEBUF+1
				cmp	#$40
				tax
				lda #BS.E.SYNTAX
				bcs	LA8F5

				stx	MLI.PATHBUF

LA8D9			dex
				dey
				bmi	LA8E6

				lda MLI.PATHBUF+1,y
				sta	MLI.PATHBUF+1,x
				bra	LA8D9

LA8E6			lda #'/'
				sta	MLI.PATHBUF+1

LA8EB			sta	MLI.PATHBUF+1,x
				lda IO.LINEBUF,x
				dex
				bne	LA8EB

LA8F4			clc

LA8F5			rts
*--------------------------------------
BS.GetPathInPathBuf
				jsr	BS.GetChar			UC
				sta	MLI.PATHBUF,y
				iny
				cmp	#','
				beq	LAA45

				cmp	#$20
				beq	LAA45

				cmp	#$0D
				beq	LAA56

				cpy	BS.GetCharMax
				bcc	BS.GetPathInPathBuf

				ora	#$00
				rts
*--------------------------------------
BS.GetKWInCmdBuf
				ldx	#$00

BS.GetKWInCmdBufAtX
				ldy	#$00

LAA2D			jsr	BS.GetChar			UC
				sta	BS.CMDBUF,y
				iny
				cmp	#','
				beq	LAA45

				cmp	#$20
				beq	LAA45

				cmp	#$0D
				beq	LAA56

				cpy	BS.GetCharMax
				bcc	LAA2D

LAA45			ora	#$00
				rts
*--------------------------------------
BS.GetCharSpaceSep
				lda #$20
				sta	BS.GetCharSep
				jsr	BS.GetChar			UC
				cmp	#','
				beq	LAA57

				cmp	#$0D

LAA56			clc
LAA57			rts
*--------------------------------------
BS.GetChar		lda IO.LINEBUF,x
				and	#$7F

				inx
				cmp	BS.GetCharSep
				beq	BS.GetChar

				rts
*--------------------------------------
BS.TMPBUF3x2	asl BS.TMPBUF4
				rol BS.TMPBUF4+1
				rol BS.TMPBUF4+2
BS.TMPBUF3x2.RTS
				rts
*--------------------------------------
BS.IsIntCmd		ldx #BSX.IsIntCmd.X
				jsr BS.ToAUX

				bcc BS.TMPBUF3x2.RTS

				dec	GP.XCNUM			$ff
				sec
				jmp	GP.EXTRNCMD
*--------------------------------------
BS.TMPBUF3Reset	stz	BS.TMPBUF4
				stz	BS.TMPBUF4+1
				stz	BS.TMPBUF4+2
				rts
*--------------------------------------
BS.KW.DASH		lda GP.FITYPE
				cmp	#$FC
				beq	BS.KW.RUN

				cmp	#$06
				beq	LABA3

				cmp	#$04
				bne	LAB63

				jmp	BS.KW.EXEC

LAB63			cmp	#$FF
				beq	LAB6F

				cmp	#$B3
				beq	LAB6F

				lda #BS.E.MISMATCH
				sec
				rts

LAB6F			pha
				jsr	BS.CloseAll
				jsr	LB36B

				stz	GP.ParamA

				stz	MLI.MEMTABL+20
				stz	MLI.MEMTABL+21
				stz	MLI.MEMTABL+22

				lda #$01
				sta	MLI.MEMTABL+23
				lda #$20
				sta	GP.ParamA+1
				pla
				cmp	#$FF
				bne	LABA6

				sta	GP.ParamT
				lda #CMDBITS1.A
				sta	GP.FoundBITS+1
				lda #CMDBITS0.T+CMDBITS0.FN1
				sta	GP.FoundBITS

LABA3			jmp	BS.KW.BRUN

LABA6			sec
				jsr	MON.IIGSID
				bcs	LABA3

				jmp	BS.QUIT.IIgs
*--------------------------------------
BS.KW.CHAIN		jsr	LA411
				lda AS.HIMEM+1
				pha
				ldx	XBBEA
				dex
				stx	AS.HIMEM+1
				jsr	BS.LoadBAS
				plx
				stx	AS.HIMEM+1
				bcs	BS.LoadBAS0.RTS

				jsr	AS.CLEAR1
				jsr	LA480
				lda #$00
				beq	LABE6
*--------------------------------------
BS.KW.RUN		stz	GP.IFILACTV
				stz	AS.ERRNUM

				lda GP.FoundBITS
				lsr
				bcc	LABF4

				jsr	BS.LoadBAS0
				bcs	BS.LoadBAS0.RTS

				jsr	AS.CLEAR1

LABE6			sta	AS.ERRFLG
				jsr	BS.SetRunLineNum
				jsr	BS.SaveCSWKSW
				jsr	LABF4
				jmp	AS.NEXTSTMT
*--------------------------------------
LABF4			jsr	AS.NORMAL
				lda #$A3
				sta	X9F65
				lda #$FF
				sta	GP.XCNUM
				sta	ZP.PROMPT
				ldx	#$04
				jsr	BS.SetState
				jmp	BS.SYNERR
*--------------------------------------
BS.KW.LOAD		jsr	BS.LoadBAS0
				bcs	BS.LoadBAS0.RTS

BS.ENTRY		jsr	AS.CLEAR1
				jsr	BS.SetState0

				stz	ZP.CH
				jmp	AS.RESTART1
*--------------------------------------
BS.LoadBAS0		jsr BS.CloseAll
BS.LoadBAS0.RTS	bcs	BS.LoadBAS.RTS

BS.LoadBAS		lda #$01
				ldx	#$FC
				jsr	BS.CheckFTypeXAccessA
				bcs	BS.LoadBAS.RTS

				jsr	BS.MLIGetEOF
				bcs	BS.LoadBAS.RTS

				lda AS.PGRMSTART
				sta	GP.MLIRW.DATAPTR
				adc	GP.SBUFADR
				sta	GP.ParamA

				lda AS.PGRMSTART+1
				sta	GP.MLIRW.DATAPTR+1
				adc	GP.SBUFADR+1
				sta	GP.ParamA+1
				bcs	.1

				cmp	AS.HIMEM+1

.1				lda #BS.E.TOOLARGE
				bcs	BS.LoadBAS.RTS

				ldx	GP.SBUFADR
				ldy	GP.SBUFADR+1
				jsr	BS.ReadXYBytes
				bcs	BS.LoadBAS.RTS

				jsr	BS.MLIClose
				bcs	BS.LoadBAS.RTS

				jsr	LAC80
				ldx	GP.ParamA+1
				ldy	GP.ParamA

				stx	AS.PGRMEND+1
				sty	AS.PGRMEND

				sty	AS.ARRAYSTART
				sty	AS.VARSTART
				sty	AS.ARRAYEND
				stx	AS.ARRAYSTART+1
				stx	AS.VARSTART+1
				stx	AS.ARRAYEND+1

BS.LoadBAS.RTS	rts
*--------------------------------------
LAC80			sec
				lda AS.PGRMSTART
				sbc	GP.FIAUXTYPE
				sta	ZP.A1L

				lda AS.PGRMSTART+1
				sbc	GP.FIAUXTYPE+1
				sta	ZP.A1H
				ora	ZP.A1L
				clc
				beq	LACD9

				ldx	AS.PGRMSTART
				lda AS.PGRMSTART+1

LAC98			stx	ZP.PCL
				sta	ZP.PCH
				ldy	#$01
				lda (ZP.PCL),y
				dey
				ora	(ZP.PCL),y
				beq	LACD9

				lda (ZP.PCL),y
				adc	ZP.A1L
				tax
				sta	(ZP.PCL),y
				iny
				lda (ZP.PCL),y
				adc	ZP.A1H
				sta	(ZP.PCL),y
				clc
				bcc	LAC98

BS.SetRunLineNum
				lda GP.FoundBITS+1
				and	#CMDBITS1.LINE
				clc
				beq	LACD9

				lda GP.ParamAT
				sta	AS.LINNUM
				lda GP.ParamAT+1
				sta	AS.LINNUM+1
				jsr	AS.FINDLINE
				clc
				lda AS.LOWTR
				adc	#$FF
				sta	AS.TXTPTR
				lda AS.LOWTR+1
				adc	#$FF
				sta	AS.TXTPTR+1
				clc
LACD9			rts
*--------------------------------------
BS.KW.SAVE		bcc	LACFE

				lda #$FC
				sta	GP.ParamT
				sta	GP.FITYPE
				lda #$C3
				sta	GP.FIACCESS
				lda AS.PGRMSTART
				sta	GP.CRAUXTYPE
				sta	GP.FIAUXTYPE
				lda AS.PGRMSTART+1
				sta	GP.CRAUXTYPE+1
				sta	GP.FIAUXTYPE+1
				jsr	BS.CreateFileOrDir
				bcs	LAD47

LACFE			lda #$02
				ldx	#$FC
				jsr	BS.CheckFTypeXAccessA
				bcs	LAD47

				lda AS.PGRMEND
				sec
				sbc	AS.PGRMSTART
				tax

				lda AS.PGRMEND+1
				sbc	AS.PGRMSTART+1
				tay

				jsr BS.SetSBUFADRXY0

				lda AS.PGRMSTART
				sta	GP.MLIRW.DATAPTR
				lda AS.PGRMSTART+1
				sta	GP.MLIRW.DATAPTR+1
				jsr	BS.WriteXYBytes
				bcs	LAD47

				jsr BS.MLISetEOF
				bcs	LAD47

				jsr	BS.MLIClose
				bcs	LAD47

				lda AS.PGRMSTART+1
				ldx	AS.PGRMSTART
				cmp	GP.FIAUXTYPE+1
				bne	LAD48

				cpx	GP.FIAUXTYPE
				clc
				bne	LAD48

LAD47			rts

LAD48			stx	GP.FIAUXTYPE
				sta	GP.FIAUXTYPE+1
				jmp	BS.SetFileInfoNoDate
*--------------------------------------
BS.KW.CREATE	stz	GP.CRAUXTYPE
				stz	GP.CRAUXTYPE+1

				lda GP.FoundBITS
				and	#CMDBITS0.T
				bne	BS.CreateFileOrDir

				lda #$0F
				sta	GP.ParamT
BS.CreateFileOrDir
				lda GP.EXECACTV
				asl
				lda #$00
				adc	GP.OPENCNT
				cmp	#$08
				bcs	LAD8D

				lda GP.ParamT
				sta	GP.CRTYPE
				ldx	#$C3
				ldy	#$01
				cmp	#$0F
				bne	LAD82

				ldy	#$0D

LAD82			stx	GP.CRACCESS
				sty	GP.CRSTTYPE
				lda #MLI.CREATE
				jmp	GP.GOSYSTEM

LAD8D			lda #BS.E.NOBUFFER
				rts
*--------------------------------------
BS.KW.RENAME	lda GP.FoundBITS
				lsr
				lsr
				lda #MLI.RENAME
				bcs	LAD9E

				jmp	BS.SYNERR
*--------------------------------------
BS.KW.DELETE	lda #MLI.DESTROY
				.HS 2C					BIT ABS
BS.SETPREFIX	lda #MLI.SETPREFIX

LAD9E			jmp	GP.GOSYSTEM
*--------------------------------------
BS.KW.LOCK		jsr	BS.GetFileInfo
				lda GP.FIACCESS
				and	#$3C
				ora	#$01
				bra BS.KW.UNLOCK1
*--------------------------------------
BS.KW.UNLOCK	jsr	BS.GetFileInfo
				lda #$C3
				ora	GP.FIACCESS

BS.KW.UNLOCK1	sta	GP.FIACCESS
				jmp	BS.SetFileInfo
*--------------------------------------
BS.KW.PREFIX	lda GP.FoundBITS+1
				and	#CMDBITS1.SD

				bne	BS.SETPREFIX

				lda GP.FoundBITS
				lsr
				bcs	BS.SETPREFIX

BS.GETPREFIX	lda ZP.PROMPT
				beq	LADF0

				jsr	MON.CROUT
				ldx	#$00

LADD8			cpx	BS.CMDBUF.LEN
				beq	LADE8

				lda BS.CMDBUF,x
				ora	#$80
				jsr	MON.COUT
				inx
				bne	LADD8

LADE8			jsr	MON.CROUT
				jsr	MON.CROUT
				clc
				rts

LADF0			sec
				ror	GP.PFXACTV
				clc
				rts
*--------------------------------------
BS.IsExtCmd		ldx #BSX.GetPath.X
				jsr BS.ToAUX

				ldx BS.CMDBUF.LEN
				ldy #$ff
				
.1				iny
				lda IO.LINEBUF,y
				and	#$7F
				cmp #$0D
				beq .2
				
				cmp #$20
				beq .2
				
				sta BS.CMDBUF,x
				inx
				bra .1
				
.2				stx BS.CMDBUF.LEN
				dey
				sty GP.XLEN

				jsr	BS.GetFileInfo
				bcs .99
				
				stz GP.XCNUM
				
				lda AS.HIMEM+1
				sta	BS.BUFPAGE

				lda #$01				Read
				ldx	#$06				BIN

				jsr	BS.OpenTypeXAccessA
				bcs .99

				jsr	BS.MLIGetEOF
				php
				pha
				jsr BS.MLIClose
				pla
				plp
				bcs .99

				lda GP.SBUFADR+2		File LEN in GP.SBUFADR
				beq .20
				
				lda #BS.E.TOOLARGE
				sec
				rts

.20				lda GP.SBUFADR+1
				sta GP.MLIRW.COUNT+1
				ldx GP.SBUFADR
				stx GP.MLIRW.COUNT
				beq .3
				
				inc

.3				jsr GP.GETBUFR
				bcs .99
							
				dec BS.bFreeBuf
				stz GP.MLIRW.DATAPTR

			stz BS.KW.JMPADDR

				lda GP.SBUFADR+1		Buffer Addr in GP.SBUFADR
				sta GP.MLIRW.DATAPTR+1

			sta BS.KW.JMPADDR+1

				lda AS.HIMEM+1
				sta	BS.BUFPAGE

				lda #$01				Read
				ldx	#$06				BIN

				jsr	BS.OpenTypeXAccessA
				bcs .98

				lda #MLI.READ
				jsr	GP.GOSYSTEM
				bcs .98
		
				jsr BS.MLIClose
				bcs .98
		
				ldx #BSX.Rel.X

				jsr BS.ToAUX
				bcc .99
				
.98				pha

				jsr GP.FREEBUFR
				
				pla

				sec

.99				rts
*--------------------------------------
MAN
SAVE usr/src/basic.fx/basic.s.b
LOAD usr/src/basic.fx/basic.s
ASM
