00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #if defined(LIBC_SCCS) && !defined(lint)
00017 static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
00018 #endif
00019
00020 #include <stdio.h>
00021 #include <stdlib.h>
00022 #include <string.h>
00023
00024 int opterr = 1,
00025 optind = 1,
00026 optopt,
00027 optreset;
00028 char *optarg;
00029
00030 #define BADCH (int)'?'
00031 #define BADARG (int)':'
00032 #define EMSG ""
00033
00034
00035
00036
00037
00038 int
00039 getopt(int nargc, char * const *nargv, const char *ostr)
00040 {
00041
00042 static char *place = EMSG;
00043 char *oli=NULL;
00044
00045 if (optreset || !*place) {
00046 optreset = 0;
00047 if (optind >= nargc || *(place = nargv[optind]) != '-') {
00048 place = EMSG;
00049 return (EOF);
00050 }
00051 if (place[1] && *++place == '-') {
00052 ++optind;
00053 place = EMSG;
00054 return (EOF);
00055 }
00056 }
00057
00058 optopt = (int)*place++;
00059 if (optopt != (int)':') oli = strchr(ostr, optopt);
00060 if ((optopt == (int)':') || !oli)
00061 {
00062
00063
00064
00065
00066 if (optopt == (int)'-')
00067 return (EOF);
00068 if (!*place)
00069 ++optind;
00070 if (opterr && *ostr != ':')
00071 (void)fprintf(stderr,
00072
00073 "illegal option -- %c\n", optopt);
00074 return (BADCH);
00075 }
00076 if (*++oli != ':') {
00077 optarg = NULL;
00078 if (!*place)
00079 ++optind;
00080 }
00081 else {
00082 if (*place)
00083 optarg = place;
00084 else if (nargc <= ++optind) {
00085 place = EMSG;
00086 if (*ostr == ':')
00087 return (BADARG);
00088 if (opterr)
00089 (void)fprintf(stderr,
00090
00091
00092 "option requires an argument -- %c\n",
00093 optopt);
00094 return (BADCH);
00095 }
00096 else
00097 optarg = nargv[optind];
00098 place = EMSG;
00099 ++optind;
00100 }
00101 return (optopt);
00102 }