|
|
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){(void)fprintf(stderr, "%s%s%c\n", argv[0], s, c);} ! 11: ! 12: extern int strcmp(); ! 13: extern char *strchr(); ! 14: ! 15: int opterr = 1; ! 16: int optind = 1; ! 17: int optopt; ! 18: char *optarg; ! 19: ! 20: int ! 21: getopt(argc, argv, opts) ! 22: int argc; ! 23: char **argv, *opts; ! 24: { ! 25: static int sp = 1; ! 26: register int c; ! 27: register char *cp; ! 28: ! 29: if(sp == 1) ! 30: if(optind >= argc || ! 31: argv[optind][0] != '-' || argv[optind][1] == '\0') ! 32: return(EOF); ! 33: else if(strcmp(argv[optind], "--") == NULL) { ! 34: optind++; ! 35: return(EOF); ! 36: } ! 37: optopt = c = argv[optind][sp]; ! 38: if(c == ':' || (cp=strchr(opts, c)) == NULL) { ! 39: ERR(": illegal option -- ", c); ! 40: if(argv[optind][++sp] == '\0') { ! 41: optind++; ! 42: sp = 1; ! 43: } ! 44: return('?'); ! 45: } ! 46: if(*++cp == ':') { ! 47: if(argv[optind][sp+1] != '\0') ! 48: optarg = &argv[optind++][sp+1]; ! 49: else if(++optind >= argc) { ! 50: ERR(": option requires an argument -- ", c); ! 51: sp = 1; ! 52: return('?'); ! 53: #ifndef NO_MINUS ! 54: } else ! 55: optarg = argv[optind++]; ! 56: #else NO_MINUS ! 57: } else { ! 58: optarg = argv[optind++]; ! 59: if (*optarg == '-') { ! 60: ERR(": option requires an argument -- ", c); ! 61: sp = 1; ! 62: return('?'); ! 63: } ! 64: } ! 65: #endif NO_MINUS ! 66: sp = 1; ! 67: } else { ! 68: if(argv[optind][++sp] == '\0') { ! 69: sp = 1; ! 70: optind++; ! 71: } ! 72: optarg = NULL; ! 73: } ! 74: return(c); ! 75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.