|
|
1.1 ! root 1: /* /sccs/src/cmd/uucp/s.getopt.c ! 2: getopt.c 1.1 8/30/84 17:37:21 ! 3: */ ! 4: #include "uucp.h" ! 5: VERSION(@(#)getopt.c 1.1); ! 6: ! 7: /* @(#)getopt.c 1.2 */ ! 8: /* 3.0 SID # 1.2 */ ! 9: /*LINTLIBRARY*/ ! 10: #define ERR(s, c) if(opterr){\ ! 11: (void) fputs(argv[0], stderr);\ ! 12: (void) fputs(s, stderr);\ ! 13: (void) fputc(c, stderr);\ ! 14: (void) fputc('\n', stderr);} ! 15: ! 16: extern int strcmp(); ! 17: extern char *strchr(); ! 18: ! 19: int opterr = 1; ! 20: int optind = 1; ! 21: int optopt; ! 22: char *optarg; ! 23: ! 24: int ! 25: getopt(argc, argv, opts) ! 26: int argc; ! 27: char **argv, *opts; ! 28: { ! 29: static int sp = 1; ! 30: register int c; ! 31: register char *cp; ! 32: ! 33: if(sp == 1) ! 34: if(optind >= argc || ! 35: argv[optind][0] != '-' || argv[optind][1] == '\0') ! 36: return(EOF); ! 37: else if(strcmp(argv[optind], "--") == NULL) { ! 38: optind++; ! 39: return(EOF); ! 40: } ! 41: optopt = c = argv[optind][sp]; ! 42: if(c == ':' || (cp=strchr(opts, c)) == NULL) { ! 43: ERR(": illegal option -- ", c); ! 44: if(argv[optind][++sp] == '\0') { ! 45: optind++; ! 46: sp = 1; ! 47: } ! 48: return('?'); ! 49: } ! 50: if(*++cp == ':') { ! 51: if(argv[optind][sp+1] != '\0') ! 52: optarg = &argv[optind++][sp+1]; ! 53: else if(++optind >= argc) { ! 54: ERR(": option requires an argument -- ", c); ! 55: sp = 1; ! 56: return('?'); ! 57: #ifndef NO_MINUS ! 58: } else ! 59: optarg = argv[optind++]; ! 60: #else NO_MINUS ! 61: } else { ! 62: optarg = argv[optind++]; ! 63: if (*optarg == '-') { ! 64: ERR(": option requires an argument -- ", c); ! 65: sp = 1; ! 66: return('?'); ! 67: } ! 68: } ! 69: #endif NO_MINUS ! 70: sp = 1; ! 71: } else { ! 72: if(argv[optind][++sp] == '\0') { ! 73: sp = 1; ! 74: optind++; ! 75: } ! 76: optarg = NULL; ! 77: } ! 78: return(c); ! 79: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.