Parseargs
Brad Appleton
brad at SSD.CSD.HARRIS.COM
Fri Mar 22 02:13:53 AEST 1991
I just released parseargs on comp.sources.misc. It is the "dream" command-line
parser you have always wanted. It will completely parse yor command-lines from
shell-scripts, C-programs, perl-scripts and awk-scripts.
The following is a brief description of parseargs:
Parseargs is a set of functions to parse command-line arguments. Unlike
getopt and its variants, parseargs does more than just split up the
command-line into some canonical form. Parseargs will actually parse the
command-line, assigning the appropriate command-line values to the
corresponding variables, and will verify the command-line syntax (and print
a usage message if necessary). Furthermore, many features of it's parsing
behavior are configurable at run-time. Some of these features include the
following:
o Prompting the user for missing arguments
o Allowing keywords (+count=4) and/or options (-c4)
o Checking for default arguments in an environment variable
o Ignoring bad syntax instead of terminating
o Ignoring upper/lower case on the command-line
o Controlling the location of non-positional parameters
o Controlling the contents (syntax and verbosity) of usage messages
o Having long usage messages piped through a paging program
Parseargs also allows for options that take an optional argument, and
options that take a (possibly optional) list of one or more arguments.
In addition, parseargs may be configured at compile-time to parse
command-lines in accordance with the native command-syntax of any of the
following operating systems:
o Unix
o VAX/VMS
o OS/2
o MS-DOS
o AmigaDOS
Parseargs consists of a set of C-functions to parse arguments from the
command-line, from files, from strings, from linked-lists, and from
string-vectors. Also included is a command-line interface which will parse
arguments for shell scripts (sh, csh/tcsh, ksh, bash, and rc), awk-scripts,
and perl-scripts.
The basic structure used by parseargs is the argument-descriptor (sometimes
called "argdesc" for brevity). An array/string of argdescs is declared by
the user to describe the command in question. The resulting argdesc-array
is passed to all the parseargs functions and is used to hold all information
about the command. a sample argdesc-array is shown below.
STARTOFARGS,
{ 'a', ARGVALOPT, argStr, &area, "AREAcode : optional area-code" },
{ 'g', ARGLIST, argStr, &groups, "newsGROUPS : groups to test" },
{ 'r', ARGOPT, argInt, &count, "REPcount : repetition factor" },
{ 's', ARGOPT, argChar, &sepch, "SEPchar : field separator" },
{ 'x', ARGOPT, argBool, &xflag, "Xflag : turn on X-mode" },
{ ' ', ARGREQ, argStr, &name, "name : name to use" },
{ ' ', ARGLIST, argStr, &args, "args : any remaining arguments" },
ENDOFARGS
Once the above array/string is declared it is a simple matter to invoke
parseargs from C as in the following example:
status = parseargs( argdesc_array, argv );
or from a shell script as in the following example:
echo "$ARGDESC_STR" | parseargs -s sh -- "$0" "$@" >tmp$$
if [ $? = 0 ] ; then
. tmp$$
fi
/bin/rm -f tmp$$
And before you know it, your command-line had been parsed, all variables
have been assigned their corresponding values from the command-line, syntax
has been verified, and a usage message (if required) has been printed.
Under UNIX, the command-line syntax (using single character options) for the
above command would be:
cmdname [-a [<areacode>]] [-g <newsgroups>...] [-r <repcount>]
[-s <sepchar>] [-x] <name> [<args>...]
The UNIX command-line syntax using keywords (or long options) would be:
cmdname [+area [<areacode>]] [+groups <newsgroups>...] [+rep <repcount>]
[+sep <sepchar>] [+x] <name> [<args>...]
The VMS command-line syntax would be the following:
cmdname [/AREA[=<areacode>]] [/GROUPS=<newsgroups>[,<newsgroups>...]
[/REP=<repcount>] [/SEP=<sepchar>] [/X] <name>
[<args>[,<args>...]]
The MS-DOS and OS/2 command-line syntax would be the following (unless the
environment variable $SWITCHAR is '-' in which case UNIX syntax is used):
cmdname [/a[=<areacode>]] [/g=<newsgroups>...] [/r=<repcount>]
[/s=<sepchar>] [/x] <name> [<args>...]
The AmigaDOS command-line syntax would be the following:
cmdname [AREA [<areacode>]] [GROUPS <newsgroups>...] [REP <repcount>]
[SEP <sepchar>] [X] <name> [<args>...]
Please look at the README files and manpages for more detailed information!
______________________ "And miles to go before I sleep." ______________________
Brad Appleton brad at ssd.csd.harris.com Harris Computer Systems
uunet!hcx1!brad Fort Lauderdale, FL USA
~~~~~~~~~~~~~~~~~~~~ Disclaimer: I said it, not my company! ~~~~~~~~~~~~~~~~~~~
More information about the Comp.unix.programmer
mailing list