1 #ifndef lint
2 static char sccsid[] = "@(#)getopt.c 5.1 (Berkeley) 07/02/83";
3 #endif
4
5 #include <stdio.h>
6 #define ERR(s, c) if(opterr){\
7 fputs(argv[0], stderr);\
8 fputs(s, stderr);\
9 fputc(c, stderr);\
10 fputc('\n', stderr);} else
11
12 int opterr = 1;
13 int optind = 1;
14 int optopt;
15 char *optarg;
16
17 extern char *index();
18
19 int
getopt(argc,argv,opts)20 getopt (argc, argv, opts)
21 char **argv, *opts;
22 {
23 static int sp = 1;
24 register c;
25 register char *cp;
26
27 if (sp == 1)
28 if (optind >= argc ||
29 argv[optind][0] != '-' || argv[optind][1] == '\0')
30 return EOF;
31 else if (strcmp(argv[optind], "--") == NULL) {
32 optind++;
33 return EOF;
34 }
35 optopt = c = argv[optind][sp];
36 if (c == ':' || (cp=index(opts, c)) == NULL) {
37 ERR (": illegal option -- ", c);
38 if (argv[optind][++sp] == '\0') {
39 optind++;
40 sp = 1;
41 }
42 return '?';
43 }
44 if (*++cp == ':') {
45 if (argv[optind][sp+1] != '\0')
46 optarg = &argv[optind++][sp+1];
47 else if (++optind >= argc) {
48 ERR (": option requires an argument -- ", c);
49 sp = 1;
50 return '?';
51 } else
52 optarg = argv[optind++];
53 sp = 1;
54 }
55 else {
56 if (argv[optind][++sp] == '\0') {
57 sp = 1;
58 optind++;
59 }
60 optarg = NULL;
61 }
62 return c;
63 }
64