|
|
1.1 root 1: #include "re.h"
2: #include "lre.h"
3: #include "hdr.h"
4:
5: #define ERR(str, chr) if(opterr){fprint(2, "%s%s%c\n", argv[0], str, chr);}
6: #define EOF -1
7: #define NULL 0
8: int opterr = 1;
9: int optind = 1;
10: int optopt;
11: char *optarg;
12:
13: int
14: getopt(int argc, char **argv, char *opts)
15: {
16: static int sp = 1;
17: register c;
18: register char *cp;
19:
20: if (sp == 1)
21: if (optind >= argc ||
22: argv[optind][0] != '-' || argv[optind][1] == '\0')
23: return EOF;
24: else if (strcmp(argv[optind], "--") == NULL) {
25: optind++;
26: return EOF;
27: }
28: optopt = c = argv[optind][sp];
29: if (c == ':' || (cp=strchr(opts, c)) == NULL) {
30: ERR (": illegal option -- ", c);
31: if (argv[optind][++sp] == '\0') {
32: optind++;
33: sp = 1;
34: }
35: return '?';
36: }
37: if (*++cp == ':') {
38: if (argv[optind][sp+1] != '\0')
39: optarg = &argv[optind++][sp+1];
40: else if (++optind >= argc) {
41: ERR (": option requires an argument -- ", c);
42: sp = 1;
43: return '?';
44: } else
45: optarg = argv[optind++];
46: sp = 1;
47: } else {
48: if (argv[optind][++sp] == '\0') {
49: sp = 1;
50: optind++;
51: }
52: optarg = NULL;
53: }
54: return c;
55: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.