date and time created 85/01/22 13:49:28 by ralph
[unix-history] / usr / src / usr.bin / uucp / port / getopt.c
CommitLineData
6db9356b
SL
1#ifndef lint
2static char sccsid[] = "@(#)getopt.c 5.1 (Berkeley) %G%";
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
12int opterr = 1;
13int optind = 1;
14int optopt;
15char *optarg;
16
17extern char *index();
18
19int
20getopt (argc, argv, opts)
21char **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}