Blame


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