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