From: Ralph Ronnquist Date: Sat, 5 Jun 2021 13:16:07 +0000 (+1000) Subject: added command line processing X-Git-Url: https://git.rrq.au/?a=commitdiff_plain;h=26b4e4c3601c02bb543b224a9bff136f551cc8fd;p=rrq%2Frrqforth.git added command line processing --- diff --git a/rrqforth b/rrqforth index e30a063..d06e35f 100755 Binary files a/rrqforth and b/rrqforth differ diff --git a/rrqforth.asm b/rrqforth.asm index 96b9083..0a3f801 100644 --- a/rrqforth.asm +++ b/rrqforth.asm @@ -190,7 +190,7 @@ p_lparen_loop: cmp rax,1 jne p_lparen_loop push rbx - push p_lbaren_rparen + push p_lparen_rparen push 1 DOFORTH p_strncmp pop rax @@ -199,7 +199,7 @@ p_lparen_loop: p_lparen_exit: popr rsi next -p_lbaren_rparen: db ')',0 +p_lparen_rparen: db ')',0 ;;; ******** The main entry point. ******** ;;; This could be set up as a WORD but it isn't @@ -240,6 +240,39 @@ main_is_verbose_loop: main_is_not_verbose: ret + WORD p_process_args_var,'PROCESS-ARGS-VAR',dovariable + ;; ( -- a ) + ;; Two cells for iterating and load the main args +p_process_args_ptr: dq 0 +p_process_args_end: dq 0 + + WORD p_process_args,'PROCESS-ARGS',fasm + pushr rsi + mov rax,qword [p_args_DFA] ; args* + mov rbx,qword [rax] ; count + shl rbx,3 + add rax,8 + add rbx,rax ; end + mov qword [p_process_args_end],rbx + add rax,8 + mov qword [p_process_args_ptr],rax +p_process_args_loop: + mov rax,qword [p_process_args_ptr] + cmp rax,qword [p_process_args_end] + jge p_process_args_done + add qword [p_process_args_ptr],8 + mov rax,qword [rax] + mov bl,[rax] + cmp bl,'-' + je p_process_args_loop + push rax + push rax + DOFORTH p_strlen, p_load_file, p_drop + jmp p_process_args_loop +p_process_args_done: + popr rsi + next + ;;; This word is also the last word before syscalls last_forth_word: WORD p_quit,'QUIT',fasm @@ -253,6 +286,7 @@ last_forth_word: push 10000 DOFORTH p_stream pop qword [p_stdin_DFA] ; Assign STDIN + DOFORTH p_process_args p_quit_INITIALIZED: ;; Setup INPUT from STDIN