home *** CD-ROM | disk | FTP | other *** search
- From: brad@SSD.CSD.HARRIS.COM (Brad Appleton)
- Newsgroups: alt.sources
- Subject: Re: yet Another test AND a PD getopt
- Message-ID: <3454@travis.csd.harris.com>
- Date: 22 May 91 14:22:29 GMT
-
- In article <1074@isgtec.UUCP> robert@isgtec.UUCP writes:
- >In article <remus@paul.alpha.edu>, denv@nywu writes:
- >|> this is just a test.
- >
- >Why is this in alt.sources? It was crossposted to alt.test, so obviously
- >it's more than just the fact that you're a moron. Why post a test
- >why not post some sources?
- >
- >Rob.
- >
- >OB. Source
- >
- >Here is a getopt I wrote (now PD) because Turbo C doesn't have one!
- >(Maybe they'll put this one into their libraries now :-)
- >
- First of all - AT&T already put getopt into the Public domain. Second,
- getopt is a piece of crap. DOWN WITH GETOPT! There is much better stuff
- available. Take Parseargs for example (which I released). For any
- interested parties, the following is a brief description of Parseargs.
- You can get the latest version from me, or you can look in your local
- comp.sources.misc archives for the sources and latest patches (patch05).
-
- ______________________ "And miles to go before I sleep." ______________________
- Brad Appleton brad@ssd.csd.harris.com Harris Computer Systems
- uunet!hcx1!brad Fort Lauderdale, FL USA
- ~~~~~~~~~~~~~~~~~~~~ Disclaimer: I said it, not my company! ~~~~~~~~~~~~~~~~~~~
-
-
- PARSEARGS
-
- extracted from Eric Allman's
-
- NIFTY UTILITY LIBRARY
-
- Created by Eric P. Allman
- <eric@Berkeley.EDU>
-
- Modified by Peter da Silva
- <peter@Ferranti.COM>
-
- Modified and Rewritten by Brad Appleton
- <brad@SSD.CSD.Harris.COM>
-
-
- Welcome to parseargs! Dont let the initial size of this package scare you.
- over 75% of it is English text, and more than 50% of the source is comments.
-
- 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/itcsh, ksh, bash, zsh, 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$$
- test $? = 0 && . tmp$$
- /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@ssd.csd.harris.com Harris Computer Systems
- uunet!hcx1!brad Fort Lauderdale, FL USA
- ~~~~~~~~~~~~~~~~~~~~ Disclaimer: I said it, not my company! ~~~~~~~~~~~~~~~~~~~
-