|
|
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.