;
; 2003-03-07, Ullrich von Bassewitz
; 2011-01-28, Stefan Haubenthal
-; 2013-07-15, Greg King
+; 2013-12-22, Greg King
;
; Setup arguments for main
;
;
ldx #0
L2: lda BASIC_BUF,x
- beq done ; no "rem," no args.
+ beq done ; no "rem", no args.
inx
cmp #REM
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
lda #' ' ; A space ends the argument
setterm:sta term ; Set end of argument marker
-; Now store a pointer to the argument into the next slot. Since the BASIC
-; input buffer is located at the zero page, no calculations are necessary.
+; Now, store a pointer, to the argument, into the next slot.
txa ; Get low byte
- add #<BASIC_BUF ; Not at page boundary
+ add #<args
sta argv,y ; argv[y]= &arg
+ lda #>0
+ adc #>args
+ sta argv+1,y
iny
iny
inc __argc ; Found another arg
; replace the terminating character by a zero.
lda #0
- sta BASIC_BUF-1,x
+ sta args-1,x
; Check if the maximum number of command line arguments is reached. If not,
; parse the next one.
ldx #>argv
sta __argv
stx __argv + 1
-
rts
.endproc
.bss
term: .res 1
name: .res FNAME_LEN + 1
+args: .res SCREEN_XSIZE * 2 - 1
.data
argv: .addr name
- .res MAXARGS * 2
+ .res MAXARGS * 2, 0