Branch
Hash :
1a08f436
Author :
Date :
2010-08-25T09:23:17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
\ cmdline.fth 1.4 02/05/02
\ Copyright 1993-1994 Bradley Forthware, Inc. All Rights Reserved.
\ Copyright 1994-2002 Sun Microsystems, Inc. All Rights Reserved
\ Copyright Use is subject to license terms.
\ Get the arguments passed from the program
\ Returns the command line argument indexed by arg#, as a string.
\ In most systems, the 0'th argument is the name of the program file.
\ If the arg#'th argument doesn't exist, returns 0.
: >arg ( arg# -- false | arg-adr arg-len true )
dup #args >= if ( arg# )
drop false
else ( arg# )
args swap na+ @ cscount true
then
;
variable arg#
\ Get the next argument from the command line.
\ Returns 0 when there are no more arguments.
\ arg# should be set to 1 before the first call.
\ argument number 0 is usually the name of the program file.
: next-arg ( -- false | arg-adr arg-len true )
arg# @ >arg dup if 1 arg# +! then
;
defer cmdline-file ' 2drop is cmdline-file
: bootstrap-file ( str,len -- )
?dup if
d# 46 d# 45 fsyscall ( ) \ grab whole file
2>r 2r@ evaluate ( )
2r> sys-free-mem ( )
else ( adr )
drop ( )
then ( )
;
\ ' bootstrap-file is cmdline-file \ No bootstrap yet!
: process-argument ( adr len -- )
2dup " -s" $= if ( adr len )
2drop next-arg 0= ( ?? ) abort" Missing argument after '-s'"
evaluate ( ?? )
else ( adr len )
2dup " -b" $= if ( adr len )
2drop next-arg 0= abort" Missing argument after '-b'"
bootstrap-file ( )
else
2dup " -x" $= if ( adr len )
2drop \ prepare-xref ( )
else
2dup " -" $= if ( adr len )
2drop
interact
else ( adr len )
cmdline-file
then then then then
;
: process-command-line ( -- )
#args 1 <= if exit then
1 arg# !
begin next-arg while ( adr len )
['] process-argument catch ?dup if .error bye then
repeat
bye
;