1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
23/*	  All Rights Reserved  	*/
24
25
26#ident	"%Z%%M%	%I%	%E% SMI"	/* from SVR4 bnu:getopt.c 2.3 */
27
28#include "uucp.h"
29
30/*	@(#)getopt.c	1.2	*/
31/*	3.0 SID #	1.2	*/
32/*LINTLIBRARY*/
33#define ERR(s, c)	if(opterr){\
34	(void) fputs(argv[0], stderr);\
35	(void) fputs(s, stderr);\
36	(void) fputc(c, stderr);\
37	(void) fputc('\n', stderr);}
38
39extern int strcmp();
40extern char *strchr();
41
42int	opterr = 1;
43int	optind = 1;
44int	optopt;
45char	*optarg;
46
47int
48getopt(argc, argv, opts)
49int	argc;
50char	**argv, *opts;
51{
52	static int sp = 1;
53	register int c;
54	register char *cp;
55
56	if(sp == 1)
57		if(optind >= argc ||
58		   argv[optind][0] != '-' || argv[optind][1] == '\0')
59			return(EOF);
60		else if(strcmp(argv[optind], "--") == NULL) {
61			optind++;
62			return(EOF);
63		}
64	optopt = c = argv[optind][sp];
65	if(c == ':' || (cp=strchr(opts, c)) == NULL) {
66		ERR(": illegal option -- ", c);
67		if(argv[optind][++sp] == '\0') {
68			optind++;
69			sp = 1;
70		}
71		return('?');
72	}
73	if(*++cp == ':') {
74		if(argv[optind][sp+1] != '\0')
75			optarg = &argv[optind++][sp+1];
76		else if(++optind >= argc) {
77			ERR(": option requires an argument -- ", c);
78			sp = 1;
79			return('?');
80#ifndef NO_MINUS
81		} else
82			optarg = argv[optind++];
83#else /* NO_MINUS */
84		} else {
85			optarg = argv[optind++];
86			if (*optarg == '-') {
87			    ERR(": option requires an argument -- ", c);
88			    sp = 1;
89			    return('?');
90			}
91		}
92#endif /* NO_MINUS */
93		sp = 1;
94	} else {
95		if(argv[optind][++sp] == '\0') {
96			sp = 1;
97			optind++;
98		}
99		optarg = NULL;
100	}
101	return(c);
102}
103