1 #include	<stdio.h>
2 #include <string.h>
3 #include "ext.h"
4 #define ERR(str, chr)       if(opterr){fprintf(stderr, "%s%s%c\n", argv[0], str, chr);}
5 int     opterr = 1;
6 int     optind = 1;
7 int	optopt;
8 char    *optarg;
9 
10 int
getopt(int argc,char ** argv,char * opts)11 getopt (int argc, char **argv, char *opts)
12 {
13 	static int sp = 1;
14 	register int c;
15 	register char *cp;
16 
17 	if (sp == 1)
18 		if (optind >= argc ||
19 		   argv[optind][0] != '-' || argv[optind][1] == '\0')
20 			return EOF;
21 		else if (strcmp(argv[optind], "--") == 0) {
22 			optind++;
23 			return EOF;
24 		}
25 	optopt = c = argv[optind][sp];
26 	if (c == ':' || (cp=strchr(opts, c)) == NULL) {
27 		ERR (": illegal option -- ", c);
28 		if (argv[optind][++sp] == '\0') {
29 			optind++;
30 			sp = 1;
31 		}
32 		return '?';
33 	}
34 	if (*++cp == ':') {
35 		if (argv[optind][sp+1] != '\0')
36 			optarg = &argv[optind++][sp+1];
37 		else if (++optind >= argc) {
38 			ERR (": option requires an argument -- ", c);
39 			sp = 1;
40 			return '?';
41 		} else
42 			optarg = argv[optind++];
43 		sp = 1;
44 	} else {
45 		if (argv[optind][++sp] == '\0') {
46 			sp = 1;
47 			optind++;
48 		}
49 		optarg = NULL;
50 	}
51 	return c;
52 }
53