Moved the command-line arguments out of BASIC's input buffer.
The stdin console re-uses that buffer.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
;
|
;
|
||||||
; 2003-03-07, Ullrich von Bassewitz
|
; 2003-03-07, Ullrich von Bassewitz
|
||||||
; 2011-01-28, Stefan Haubenthal
|
; 2011-01-28, Stefan Haubenthal
|
||||||
; 2013-07-15, Greg King
|
; 2013-12-22, Greg King
|
||||||
;
|
;
|
||||||
; Setup arguments for main
|
; Setup arguments for main
|
||||||
;
|
;
|
||||||
@@ -40,11 +40,21 @@ L0: lda CFOUND_NAME,y
|
|||||||
;
|
;
|
||||||
ldx #0
|
ldx #0
|
||||||
L2: lda BASIC_BUF,x
|
L2: lda BASIC_BUF,x
|
||||||
beq done ; no "rem," no args.
|
beq done ; no "rem", no args.
|
||||||
inx
|
inx
|
||||||
cmp #REM
|
cmp #REM
|
||||||
bne L2
|
bne L2
|
||||||
ldy #1 * 2
|
|
||||||
|
; The arguments must be copied to a safe place because BASIC's input buffer
|
||||||
|
; might be re-used by the stdin console.
|
||||||
|
|
||||||
|
ldy #(SCREEN_XSIZE * 2 - 1) - 1
|
||||||
|
L3: lda BASIC_BUF,y
|
||||||
|
sta args,y
|
||||||
|
dey
|
||||||
|
bpl L3
|
||||||
|
|
||||||
|
ldy #1 * 2 ; Point to second argv slot
|
||||||
|
|
||||||
; Find the next argument
|
; Find the next argument
|
||||||
|
|
||||||
@@ -65,12 +75,14 @@ found: cmp #'"' ; Is the argument quoted?
|
|||||||
lda #' ' ; A space ends the argument
|
lda #' ' ; A space ends the argument
|
||||||
setterm:sta term ; Set end of argument marker
|
setterm:sta term ; Set end of argument marker
|
||||||
|
|
||||||
; Now store a pointer to the argument into the next slot. Since the BASIC
|
; Now, store a pointer, to the argument, into the next slot.
|
||||||
; input buffer is located at the zero page, no calculations are necessary.
|
|
||||||
|
|
||||||
txa ; Get low byte
|
txa ; Get low byte
|
||||||
add #<BASIC_BUF ; Not at page boundary
|
add #<args
|
||||||
sta argv,y ; argv[y]= &arg
|
sta argv,y ; argv[y]= &arg
|
||||||
|
lda #>0
|
||||||
|
adc #>args
|
||||||
|
sta argv+1,y
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
inc __argc ; Found another arg
|
inc __argc ; Found another arg
|
||||||
@@ -88,7 +100,7 @@ argloop:lda BASIC_BUF,x
|
|||||||
; replace the terminating character by a zero.
|
; replace the terminating character by a zero.
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta BASIC_BUF-1,x
|
sta args-1,x
|
||||||
|
|
||||||
; Check if the maximum number of command line arguments is reached. If not,
|
; Check if the maximum number of command line arguments is reached. If not,
|
||||||
; parse the next one.
|
; parse the next one.
|
||||||
@@ -103,7 +115,6 @@ done: lda #<argv
|
|||||||
ldx #>argv
|
ldx #>argv
|
||||||
sta __argv
|
sta __argv
|
||||||
stx __argv + 1
|
stx __argv + 1
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.endproc
|
.endproc
|
||||||
@@ -115,7 +126,8 @@ done: lda #<argv
|
|||||||
.bss
|
.bss
|
||||||
term: .res 1
|
term: .res 1
|
||||||
name: .res FNAME_LEN + 1
|
name: .res FNAME_LEN + 1
|
||||||
|
args: .res SCREEN_XSIZE * 2 - 1
|
||||||
|
|
||||||
.data
|
.data
|
||||||
argv: .addr name
|
argv: .addr name
|
||||||
.res MAXARGS * 2
|
.res MAXARGS * 2, 0
|
||||||
|
|||||||
Reference in New Issue
Block a user