From pa.dec.com!decwrl!uunet!news.uu.net!sparky!kent Fri May 24 12:56:02 PDT 1991 Article: 2397 of comp.sources.misc Newsgroups: comp.sources.misc Path: pa.dec.com!decwrl!uunet!news.uu.net!sparky!kent From: Dave Mankins Subject: v20i005: getopt.h - simple interface to getopt, Part01/01 Message-ID: <1991May22.033524.16372@sparky.IMD.Sterling.COM> X-Md4-Signature: 5e342f6ddc3c7a1a33dba5becfc4bace Sender: kent@sparky.IMD.Sterling.COM (Kent Landfield) Organization: Thinking Machines Corporation, Cambridge, Massachusetts Date: Wed, 22 May 1991 03:35:24 GMT Approved: kent@sparky.imd.sterling.com Submitted-by: Dave Mankins Posting-number: Volume 20, Issue 5 Archive-name: getopt.h/part01 Yet another getopt ... Below is a macro package I wrote the second time I had to refer to the getopt(3) man page to remind myself how getopt() is used. I think this simplifies the use of getopt tremendously. Stick it into getopt.h in your personal toolkit. david mankins (dm@think.com) ---- #! /bin/sh # This is a shell archive. Remove anything before this line, then feed it # into a shell via "sh file" or similar. To overwrite existing files, # type "sh file -c". # The tool that generated this appeared in the comp.sources.unix newsgroup; # send mail to comp-sources-unix@uunet.uu.net if you want that tool. # Contents: getopt.h # Wrapped by kent@sparky on Tue May 21 22:31:30 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH echo If this archive is complete, you will see the following message: echo ' "shar: End of archive."' if test -f 'getopt.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'getopt.h'\" else echo shar: Extracting \"'getopt.h'\" \(1222 characters\) sed "s/^X//" >'getopt.h' <<'END_OF_FILE' X#ifndef GETOPT X/***************************************************************************** X * X * GETOPT, USES_GETOPT X * X * Usage: X * GETOPT(c, str) { X * case 'a': X * code for option a... X * case 'b': X * code for option b... X * case '?': X * code for unknown option... X * } X * GETOPT_LOOP_REST(strp) { X * loop over the remaining arguments (typically file names), that X * is, the ones at the end of the line that aren't prefixed with X * hyphens... X * } X * X * requires that argc, and argv have their usual names (and are in the X * same scope as the use of GETOPT). X * X * Expects a USES_GETOPT within the same scope to declare the getopt X * variables. X * X *****************************************************************************/ X#define USES_GETOPT extern char *optarg; extern int optind, opterr X#define GETOPT(c, str) while((c=getopt(argc, argv, str)) != -1) switch(c) X X/* X * Loop over the REST of the arguments X * X * (this has got to be one of the more egregious uses of the ternary ?: --- X * however, you only have to understand it once.) X */ X#define GETOPT_LOOP_REST(argp) \ X while((optind < argc)? (argp = argv[optind++]): (argp = NULL)) X X#endif /* GETOPT */ END_OF_FILE if test 1222 -ne `wc -c <'getopt.h'`; then echo shar: \"'getopt.h'\" unpacked with wrong size! fi # end of 'getopt.h' fi echo shar: End of archive. exit 0 exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.