diff options
Diffstat (limited to 'dviware/quicspool/libtrw/getopt.c')
-rw-r--r-- | dviware/quicspool/libtrw/getopt.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/dviware/quicspool/libtrw/getopt.c b/dviware/quicspool/libtrw/getopt.c new file mode 100644 index 0000000000..b81dc931c3 --- /dev/null +++ b/dviware/quicspool/libtrw/getopt.c @@ -0,0 +1,61 @@ +static char *rcs = "$Header: getopt.c,v 1.1 88/01/15 12:56:30 simpson Rel $"; +/* +$Log: getopt.c,v $ + * Revision 1.1 88/01/15 12:56:30 simpson + * initial release + * + * Revision 0.1 87/12/11 17:14:09 simpson + * beta test + * +*/ +#include <stdio.h> + +/* + * get option letter from argument vector + */ +int opterr = 1, /* useless, never set or used */ + optind = 1, /* index into parent argv vector */ + optopt; /* character checked for validity */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define EMSG "" +#define tell(s) fputs(*nargv,stderr);fputs(s,stderr); \ + fputc(optopt,stderr);fputc('\n',stderr);return(BADCH); + +getopt(nargc,nargv,ostr) +int nargc; +char **nargv, + *ostr; +{ + static char *place = EMSG; /* option letter processing */ + register char *oli; /* option letter list index */ + char *index(); + + if(!*place) { /* update scanning pointer */ + if(optind >= nargc || *(place = nargv[optind]) != '-' || !*++place) return(EOF); + if (*place == '-') { /* found "--" */ + ++optind; + return(EOF); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || !(oli = index(ostr,optopt))) { + if(!*place) ++optind; + tell(": illegal option -- "); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) ++optind; + } + else { /* need an argument */ + if (*place) optarg = place; /* no white space */ + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + tell(": option requires an argument -- "); + } + else optarg = nargv[optind]; /* white space */ + place = EMSG; + ++optind; + } + return(optopt); /* dump back option letter */ +} |