11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*	$NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $	*/
2d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes/*	$FreeBSD$ */
31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*-
51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (c) 2000 The NetBSD Foundation, Inc.
61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved.
71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * This code is derived from software contributed to The NetBSD Foundation
91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * by Dieter Baron and Thomas Klausner.
101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without
121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions
131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met:
141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *    documentation and/or other materials provided with the distribution.
191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project *
201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * POSSIBILITY OF SUCH DAMAGE.
311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _GETOPT_H_
341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _GETOPT_H_
351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h>
371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/*
39d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes * GNU-like getopt_long()/getopt_long_only() with 4.4BSD optreset extension.
40d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes * getopt() is declared here too for GNU programs.
411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */
421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define no_argument        0
431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define required_argument  1
441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define optional_argument  2
451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstruct option {
471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* name of long option */
481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	const char *name;
491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/*
501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	 * one of no_argument, required_argument, and optional_argument:
511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	 * whether option takes an argument
521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	 */
531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int has_arg;
541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* if not NULL, set *flag to val when option found */
551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int *flag;
561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	/* if flag not NULL, value to set *flag to; else return value */
571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project	int val;
581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project};
591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS
61d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughesint	getopt_long(int, char * const *, const char *,
62d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes	const struct option *, int *);
63d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughesint	getopt_long_only(int, char * const *, const char *,
64d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes	const struct option *, int *);
65d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes#ifndef _GETOPT_DECLARED
66d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes#define	_GETOPT_DECLARED
67d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughesint	 getopt(int, char * const [], const char *);
68bb5581ad6eec40041dab4e961149f7a8a3a83497David 'Digit' Turner
69d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughesextern char *optarg;			/* getopt(3) external variables */
70d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughesextern int optind, opterr, optopt;
71d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes#endif
72d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes#ifndef _OPTRESET_DECLARED
73d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughes#define	_OPTRESET_DECLARED
74d278b828fef47fb2d7098f8ec70867fbd3da09d6Elliott Hughesextern int optreset;			/* getopt(3) external variable */
751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif
761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS
771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project
781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* !_GETOPT_H_ */
79