From 26b4e4c3601c02bb543b224a9bff136f551cc8fd Mon Sep 17 00:00:00 2001 From: Ralph Ronnquist Date: Sat, 5 Jun 2021 23:16:07 +1000 Subject: [PATCH] added command line processing --- rrqforth | Bin 2150202 -> 2150539 bytes rrqforth.asm | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/rrqforth b/rrqforth index e30a063bfcbd10616cc7d37dc6e6d9f95e76a10b..d06e35f5c70f145fed62600ce5691f17625d92fe 100755 GIT binary patch delta 3262 zcmZ`*eNa@_6~AwBVOe5a!2KYA9KsOP08LeFgb`e2^^xIY189-~r)xEn7KcgE;Pj6g zpE7R}x-%j|JliJNkOXIHMq?X4VEJa*T|Ra}V{N8?B-ZIT#iTYS(~M57v%T-$`$$Ws z_m4e$@BN)~e&@V%&%OTBZIZXQO*-L_l+LsrN#3hKwBfz_bL{A_SdS{IBB_c&RpL}- znW`97C0k(eS??dS71JGp#G%1PghI4&0Jqw$`nV37)gvDrX|*ZS;JsY%cuI%Ao z%F3F0(lx^9Nl|=e4D9Bv5pFeolqWfl+!26W^n}2U&QVzX)E$AsQI6ItI*#zskhh!c z9c6}#^^c-UX-xMZbj4gh1$%XyW1K-gndg?WqauLCY>D&4x(Rj6Lr9z#23|w=7_DdL z7~`?1eXxi7UF1VGwZXOXoPy35Lh7LzIf|6mxavyDMZ7fz%JP&g+?VW)*DUUG%Tj1zzgRpV%pRQJ-?pw^tA))Iys8fe!DQY%;b9?M zn!vdTJw6SjZ9;Qy&j=eoj>Tfy=EA3C+)0}N$KhWlAkA=%BQwLsmnl+9$wIq8UK7ar z0I$`p&N>NXj1dJoA8c&H8`?*u$u7v8j*%U#d4+D^ta<7#8-WTv_ zSn~G(Pp0g8k@O4TLk;+@0QLtw8jh4r^0rerN!yNTlAqI^lkf}a&p0;;St$dXxnZN-=f}LU79IYX+lr)RZp?!aC7}zf%rEpxd>ZN9_7d#BZ&g74z zSJ4-OA4muBM3|n?n<3U{9)zGql28sqmVsudC8S+PVX$ymR<>UMy4265E_3l}7|LkJ zvP^;fNu7ZnfPPxv5CQL>;-|HkY?@-JNY?E>B3r)WYG1cfw2t?G!$Z&w#s&CXH@sM& zKx*Z)-12pydP=BP);P<#YU2#cmb4uEW*|=rU{n)f{8kfvm^lkM*?JY|brKZUZIh4< zxMvpZiH+2;HvWJ|XQ}c5{M{^UH6NJetLYKFGn7|UliRcGl22s{^yjufy&U1ORXHoF z3!Jq(>d4cP|3y9>;r7l`WJ|mi-;O|{p*6C2Kun3P0&x$c5!yROA}l${w4GU^G&Q~= zk!^mT6h^_Z;&r;wBvHgJ4N;3bqcniEc$n^G)K0`=3o9r`x!r1~-RI7G^rICVBJ_1Q zisz${mhk~qI@9`v@_LN4-k0xx5*QH-Y;&G2NVKN9YiqW->grfP1-qQJ?$~Kegm(@8nSH zJoUMLJ(kXaW22Am(zUm>wdKMlji1@n{nGtGZU62%&QtWPYzsrtIukXcmuI@jdKllI jW5qi=2T!ikcWFaqdV}Kn)z|f=r=3J?n2%%DJf!~ze@+)6 delta 2969 zcmZ`*eN0=|6~E67U>gbsf^9wmhkOW9LJ}C8HdsPTFg#WV6CmwWC5mCIwy?2*BBr#d z*0-@Yg|R9jP!6qr?$}d=$P487Sq~Na zj9Mge?~Fz6OBlwQL1>ifabOTyqzCx!5M-NfZztrNa{s0qm^1{f(o1-F2%4qsx>8ER z$Pmc6^Tj&l(*IJvjXPe2&fLBK7qAttz6vi(zs8DTc-G)5!m%N+OXYZJ7(9kQMbU`x zxzsiO#0VTKkV>#~96S||{2o1ji33c^@szD{Z|zp2QSR@diwPT7$G-8`xO^oJnd1zy z3#TU_JE_&_a*>DQs7!zr%O;@M{E!2NCQ$N&eFN1W#g`|*w!LkZnM%4ZLUv8C@hR^0 zC?7x2sPiSiZk4^>>Zflot2RuXgd($_8+A=;?yO190}ZXDYElpAsr9xG)_JU&WL(RW zc;^CG6B=D)WD*a)Mb{FY1fzL`>r=f<-_k@r7@Udm(@hFIY1wV+?#Dz+}!8?jE5Vuoi$M!`*-$+XlHmYbO>@ z!M8HfYFSWsIXpIn-3V5r!{u_flGmp6sHB^CegmI3?_H!s@6v(&GS$hw3r4wb&)OI9 zxV$j`4?43-TVxihr5CX<2pcn=-^aY2;6yJ3**3MbI$E7%e^9H&eAE6QTaFKZ8H8*@ zUr=*n!>J%7XWXb}41FA93bC{vA-6azB}8Gp9CnMto(t*c09J<}!LTi)*BBlSfiZbo zh&g*RtV2^mvF79v8(uyqN(YM- znZD@J|2eUJ0g9;6FBYJnP}IDT!dl1@Tv~wY$4w^+`**)#WFktjJkfNo@MU)|vg)WL z)r)#w(uJcnvQH0(t*0!9H~Z-8j93twLToIEs~6e$3tU;Gr5RzYWr9_}MEE{lequht z&7a4e5h$ehY*PesHs6cJ<8r_DO0Z}PT!pW(!YGL_XORd3J$(Sxn~e z&I)W!wbD1{>e(;z{n2iVU1>j~a~%>r@D6KA7rLWRRKAsCwiCH;+utA24PFR0oo=G~ zU_8E>LKiOgW!dO?aqkDEKO*$q7sSg^$j<#O<+#-Ik@Dj>>G@3l><^(i9@3N7*h}W% zA^MV`4>tWstdD`k{%9>u!KEGKyOtvDeK=oxjmGiq3jARV>{&6YrE?wH+};Wn_*L}B wpdfpKCr)f(A$JwUPh$E8=Us=*pJBA8;R+!VgLXD 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 -- 2.39.2