Annotation of gforth/kernel/args.fs, revision 1.1

1.1     ! anton       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:     IF  2drop dup >r ['] evaluate catch
        !            46:        ?dup IF  dup >r DoError r> negate (bye)  THEN
        !            47:        r> >tib +!  2 EXIT  THEN
        !            48:     ." Unknown option: " type cr 2drop 1 ;
        !            49: 
        !            50: : process-args ( -- )
        !            51:     true to script?
        !            52:     >tib @ >r
        !            53:     argc @ 1
        !            54:     ?DO
        !            55:        I arg over c@ [char] - <>
        !            56:        IF
        !            57:            required 1
        !            58:        ELSE
        !            59:            I 1+ argc @ =  IF  s" "  ELSE  I 1+ arg  THEN
        !            60:            do-option
        !            61:        THEN
        !            62:     +LOOP
        !            63:     r> >tib !
        !            64:     false to script?
        !            65: ;
        !            66: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>