|
|
1.1 root 1: /*
2: * getopt - get option letter from argv
3: */
4:
5: #include <stdio.h>
6:
7: char *optarg; /* Global argument pointer. */
8: int optind = 1; /* Global argv index. */
9:
10: static char *scan = NULL; /* Private scan pointer. */
11:
12: extern char *strchr();
13:
14: int
15: getopt(argc, argv, optstring)
16: int argc;
17: char *argv[];
18: char *optstring;
19: {
20: register char c;
21: register char *place;
22:
23: for (optarg = NULL; scan == NULL || !*scan; scan++, optind++) {
24: if ((optind >= argc) || (*(scan = argv[optind]) != '-')) {
25: scan = NULL;
26: return(EOF);
27: }
28: }
29:
30: if ((place = strchr(optstring, c = *scan++)) == NULL || c == ':') {
31: fprintf(stderr, "%s: unknown option %c\n", argv[0], c);
32: return('?');
33: }
34:
35: if (place[1] == ':') {
36: if (*scan) {
37: optarg = scan;
38: scan = NULL;
39: } else if (optind < argc)
40: optarg = argv[optind++];
41: else {
42: fprintf(stderr, "%s: %c argument missing\n", argv[0], c);
43: return('?');
44: }
45: }
46:
47: return(c);
48: }
49:
50: #ifdef TEST
51: /*
52: * This test example shows how to use getopt in a program.
53: * Typical test lines are
54: * getopt -xyfxxx -f yyy a b c
55: * getopt -xj
56: */
57: main(argc, argv)
58: char *argv[];
59: {
60: char c;
61:
62: while(EOF != (c = getopt(argc, argv, "xyf:")))
63: switch(c) {
64: case 'x':
65: printf("option x\n");
66: break;
67: case 'y':
68: printf("option y\n");
69: break;
70: case 'f':
71: printf("option f with %s\n", optarg);
72: break;
73: default:
74: printf("usage: getopt [-xy] [-f filen]\n");
75: exit(1);
76: }
77: for(;optind < argc; optind++)
78: printf("Trailing %s\n", argv[optind]);
79: exit(0);
80: }
81: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.