Article View: comp.archives
Article #6002[comp.lang.c] Re: command line parser
From: Peter da Silva
Date: Wed, 07 Feb 1990 18:00
Date: Wed, 07 Feb 1990 18:00
79 lines
3211 bytes
3211 bytes
Archive-name: parseargs/06-Feb-90
Original-posting-by: peter@ficc.uu.net (Peter da Silva)
Original-subject: Re: command line parser
Archive-site: ucbarpa.berkeley.edu [128.32.130.11]
Archive-directory: pub/c_advisor
Archive-files: parseargs.shar
Reposted-by: emv@math.lsa.umich.edu (Edward Vielmetti)
In article <232@rm1.UUCP> mjc@rm1.UUCP (Mark J. Christophel) writes:
> In article <2048@lamont.ldgo.columbia.edu>, boaz@lamont.ldgo.columbia.edu (richard boaz) writes:
> > does anyone happen to have a nice clean command line parser in C?
> > cluster -S /duke/data/events/ -l /duke/data/events/LOGS -m 2.5
> Try using getopt().
No, try using parseargs() by Eric Allman. I've made some enhancements to it,
and recently posted diffs to alt.sources. The original will be coming out in
comp.sources.unix if Rich $alz ever wakes up, or you can ftp it from:
ucbarpa.berkeley.edu [128.32.130.11] pub/c_advisor/parseargs.shar
I'm thinking I should maybe post my complete code to alt.sources.
#include <parseargs.h>
char *Log = DEFAULTLOG;
char *Sdir = DEFAULTDIR;
float mflag = 0.0;
int aflag = 0, bflag = 0;
ARGDESC Args[] =
{
'S', ARGOPT, argStr, __ &Sdir, "Directory",
'l', ARGOPT, argStr, __ &Sdir, "Logfile",
'm', ARGOPT, argFloat, __ &mflag, "MFlag",
'a', ARGOPT, argBool, __ &aflag, "AFlag",
'b', ARGOPT, argBool, __ &bflag, "BFlag",
ENDOFARGS
};
main(argc, argv)
int argc;
char **argv;
{
int newargc;
newargc = parseargs(argv, Args, "File");
/* Now argv just contains actual file name arguments. */
}
Isn't that much simpler than getopt? And, it will automatically generate
the following usage message:
Usage: program [-S <Directory>] [-l <Logfile>] [-m <MFlag>] [-a] [-b] \
[<File>]...
The exact same code, on the Amiga (with the Amiga version of parseargs I'm
working on) will implement Amiga syntax:
Usage: program [DIRECTORY <Directory>] [LOGFILE <Logfile>] [MFLAG <Mflag>] +
[AFLAG] [BFLAG] [<File>]...
Similarly, VMS users would be able to use, with a slightly modified library:
Usage: program [/Directory=<Directory>] [/Logfile=<Logfile>] [/MFlag=<MFlag>] -
[/AFlag] [/BFlag] [<File>]...
And in all of the above you get argument type checking, meaningful error
messages, and so on.
I'm much impressed with Eric's concept, and with minimal tweaking this becomes
the biggest advance in command line parsing since argv[argc] was -1.
--
_--_|\ Peter da Silva. +1 713 274 5180. <peter@ficc.uu.net>.
/ \
\_.--._/ Xenix Support -- it's not just a job, it's an adventure!
v "Have you hugged your wolf today?" `-_-'
Technical Details
Message-ID:
<10826@stag.math.lsa.umich.edu>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!rpi!zaphod.mps.ohio-state.edu!math.lsa.umich.edu!emvReferences:
<2048@lamont.ldgo.columbia.edu> <232@rm1.UUCP> <8VK1IOCxds13@ficc.uu.net>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!uwm.edu!rpi!zaphod.mps.ohio-state.edu!math.lsa.umich.edu!emv From: peter@ficc.uu.net (Peter da Silva) Newsgroups: comp.archives Subject: [comp.lang.c] Re: command line parser Message-ID: <10826@stag.math.lsa.umich.edu> Date: 7 Feb 90 18:00:12 GMT References: <2048@lamont.ldgo.columbia.edu> <232@rm1.UUCP> <8VK1IOCxds13@ficc.uu.net> Sender: news@math.lsa.umich.edu Reply-To: peter@ficc.uu.net (Peter da Silva) Followup-To: comp.lang.c Lines: 79 Approved: emv@math.lsa.umich.edu (Edward Vielmetti)