diff --git a/startup.4th b/startup.4th index a56499f..130d9f8 100644 --- a/startup.4th +++ b/startup.4th @@ -2384,6 +2384,9 @@ SYSTEM DEFINITIONS \ immediately following the NULL-terminated array of argument pointers ARGV ARGC 1+ CELLS+ CONSTANT ENVIRON +VARIABLE ARGV-SHIFT +0 ARGV-SHIFT ! + FORTH DEFINITIONS \ Convert a C string to a FORTH string by counting the characters @@ -2400,10 +2403,16 @@ FORTH DEFINITIONS 2DROP CELL+ REPEAT ▪ NIP ▪ 2RDROP ; +\ Return ARGC decremented by ARGV-SHIFT, but not less than zero +: ARGC ( -- u ) ARGC DUP ARGV-SHIFT @ UMIN - ; + \ Return the string value of the numbered command-line argument \ Argument 0 is (normally) the pathname of the current program : ARGV ( u -- c-addr u ) - DUP ARGC U>= IF DROP 0 0 ELSE ARGV SWAP CELLS+ @ CSTRING THEN ; + DUP ARGC U>= IF DROP 0 0 ELSE ARGV SWAP ARGV-SHIFT @ + CELLS+ @ CSTRING THEN ; + +: SHIFT-ARGV ( -- c-addr u ) + 0 ARGV 1 ARGV-SHIFT +! ; UTILITY DEFINITIONS @@ -3018,7 +3027,8 @@ SYSTEM DEFINITIONS { ONLY FORTH DEFINITIONS ARGC 2 U>= IF - 1 ARGV [[ ' INCLUDED ]] CATCH + "SHIFT-ARGV SCONSTANT INTERPRETER" EVALUATE + 0 ARGV [[ ' INCLUDED ]] CATCH DUP EXCP-QUIT = IF DROP 2DROP QUIT ELSE ?DUP IF