[gforth] / gforth / kernel / args.fs  

gforth: gforth/kernel/args.fs


1 : anton 1.1 \ argument expansion
2 :    
3 :     \ Copyright (C) 1995-1997 Free Software Foundation, Inc.
4 :    
5 :     \ This file is part of Gforth.
6 :    
7 :     \ Gforth is free software; you can redistribute it and/or
8 :     \ modify it under the terms of the GNU General Public License
9 :     \ as published by the Free Software Foundation; either version 2
10 :     \ of the License, or (at your option) any later version.
11 :    
12 :     \ This program is distributed in the hope that it will be useful,
13 :     \ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 :     \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 :     \ GNU General Public License for more details.
16 :    
17 :     \ You should have received a copy of the GNU General Public License
18 :     \ along with this program; if not, write to the Free Software
19 :     \ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 :    
21 :     : cstring>sstring ( cstring -- addr n ) \ gforth cstring-to-sstring
22 :     -1 0 scan 0 swap 1+ /string ;
23 :     : arg ( n -- addr count ) \ gforth
24 :     \g returns the string for the @var{n}th command-line argument.
25 :     cells argv @ + @ cstring>sstring ;
26 :     : #! ( -- ) \ gforth hash-bang
27 :     \g an alias for @code{\}
28 :     postpone \ ; immediate
29 :    
30 :     Create pathstring 2 cells allot \ string
31 :     Create pathdirs 2 cells allot \ dir string array, pointer and count
32 :     Variable argv ( -- addr ) \ gforth
33 :     \g contains a pointer to a vector of pointers to the command-line
34 :     \g arguments (including the command-name). Each argument is
35 :     \g represented as a C-style string.
36 :     Variable argc ( -- addr ) \ gforth
37 :     \g contains the number of command-line arguments (including the command name)
38 :    
39 :     0 Value script? ( -- flag )
40 :    
41 :     : do-option ( addr1 len1 addr2 len2 -- n )
42 :     2swap
43 :     2dup s" -e" compare 0= >r
44 :     2dup s" --evaluate" compare 0= r> or
45 : pazsan 1.3 IF 2drop dup >r evaluate
46 : anton 1.1 r> >tib +! 2 EXIT THEN
47 : pazsan 1.3 2dup s" -h" compare 0= >r
48 :     2dup s" --help" compare 0= r> or
49 :     IF ." Image Options:" cr
50 :     ." FILE load FILE (with `require')" cr
51 :     ." -e STRING, --evaluate STRING interpret STRING (with `EVALUATE')" cr
52 :     ." Report bugs to <bug-gforth@gnu.ai.mit.edu>" cr
53 :     bye
54 :     THEN
55 : anton 1.1 ." Unknown option: " type cr 2drop 1 ;
56 :    
57 : jwilke 1.2 : (process-args) ( -- )
58 : anton 1.1 true to script?
59 : pazsan 1.3 >tib @ >r #tib @ >r >in @ >r
60 : anton 1.1 argc @ 1
61 :     ?DO
62 :     I arg over c@ [char] - <>
63 :     IF
64 : pazsan 1.3 2dup dup #tib ! >in ! >tib !
65 : anton 1.1 required 1
66 :     ELSE
67 :     I 1+ argc @ = IF s" " ELSE I 1+ arg THEN
68 :     do-option
69 :     THEN
70 :     +LOOP
71 : pazsan 1.3 r> >in ! r> #tib ! r> >tib !
72 : anton 1.1 false to script?
73 :     ;
74 :    
75 : jwilke 1.2 ' (process-args) IS process-args

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help