00001 00014 #include <stdio.h> 00015 #include <string.h> 00016 00017 00018 #define ERR(s, c) if (opterr) (void) fprintf(stderr, "%s: %s\n", argv[0], s) 00019 00020 int opterr = 1; 00021 int optind = 1; 00022 int optopt; 00023 char *optarg; 00024 00025 int getopt(int argc, char **argv, char *opts) 00026 { 00027 static int sp = 1; 00028 register int c; 00029 register char *cp; 00030 00031 if(sp == 1) { 00032 if(optind >= argc || 00033 argv[optind][0] != '-' || argv[optind][1] == '\0') 00034 return(EOF); 00035 else if(strcmp(argv[optind], "--") == 0) { 00036 optind++; 00037 return(EOF); 00038 } 00039 } 00040 optopt = c = argv[optind][sp]; 00041 if(c == ':' || (cp=strchr(opts, c)) == NULL) { 00042 ERR(": illegal option -- ", c); 00043 if(argv[optind][++sp] == '\0') { 00044 optind++; 00045 sp = 1; 00046 } 00047 return('?'); 00048 } 00049 if(*++cp == ':') { 00050 if(argv[optind][sp+1] != '\0') 00051 optarg = &argv[optind++][sp+1]; 00052 else if(++optind >= argc) { 00053 ERR(": option requires an argument -- ", c); 00054 sp = 1; 00055 return('?'); 00056 } else 00057 optarg = argv[optind++]; 00058 sp = 1; 00059 } else { 00060 if(argv[optind][++sp] == '\0') { 00061 sp = 1; 00062 optind++; 00063 } 00064 optarg = NULL; 00065 } 00066 return(c); 00067 }