A2osX/BASIC.FX/BASIC.S.B.txt

1425 lines
21 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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