home *** CD-ROM | disk | FTP | other *** search
- /* got this off net.sources */
- #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 */
- }
-