119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Declarations for getopt.
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc.
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   This file is part of the GNU C Library.
419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   The GNU C Library is free software; you can redistribute it and/or
619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   modify it under the terms of the GNU Library General Public License as
719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   published by the Free Software Foundation; either version 2 of the
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   License, or (at your option) any later version.
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   The GNU C Library is distributed in the hope that it will be useful,
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   but WITHOUT ANY WARRANTY; without even the implied warranty of
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Library General Public License for more details.
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   You should have received a copy of the GNU Library General Public
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   License along with the GNU C Library; see the file COPYING.LIB.  If not,
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Boston, MA 02111-1307, USA.  */
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifndef _GETOPT_H
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define _GETOPT_H 1
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef	__cplusplus
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern "C" {
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifndef GETOPT_VARIABLE
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define GETOPT_VARIABLE
2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* For communication from `getopt' to the caller.
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   When `getopt' finds an option that takes an argument,
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   the argument value is returned here.
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Also, when `ordering' is RETURN_IN_ORDER,
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   each non-option ARGV-element is returned here.  */
3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern GETOPT_VARIABLE char *optarg;
3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Index in ARGV of the next element to be scanned.
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   This is used for communication to and from the caller
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   and for communication between successive calls to `getopt'.
4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   On entry to `getopt', zero means this is the first call; initialize.
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   When `getopt' returns -1, this is the index of the first of the
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   non-option elements that the caller should itself scan.
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   Otherwise, `optind' communicates from one call to the next
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   how much of ARGV has been scanned so far.  */
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern GETOPT_VARIABLE int optind;
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Callers store zero here to inhibit the error message `getopt' prints
5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   for unrecognized options.  */
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern GETOPT_VARIABLE int opterr;
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Set to an option character which was unrecognized.  */
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern GETOPT_VARIABLE int optopt;
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Describe the long-named options requested by the application.
6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   of `struct option' terminated by an element containing a name which is
6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   zero.
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   The field `has_arg' is:
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   no_argument		(or 0) if the option does not take an argument,
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   required_argument	(or 1) if the option requires an argument,
7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   optional_argument 	(or 2) if the option takes an optional argument.
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   If the field `flag' is not NULL, it points to a variable that is set
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   to the value given in the field `val' when the option is found, but
7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   left unchanged if the option is not found.
7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   To have a long-named option do something other than set an `int' to
7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   a compiled-in constant, such as set a value from `optarg', set the
7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   option's `flag' field to zero and its `val' field to a nonzero
7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   value (the equivalent single-letter option character, if there is
8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   one).  For long options that have a zero `flag' field, `getopt'
8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   returns the contents of the `val' field.  */
8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct option
8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#if defined (__STDC__) && __STDC__
8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  const char *name;
8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else
8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  char *name;
8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  /* has_arg can't be an enum because some compilers complain about
9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     type mismatches in all the code that assumes it is an int.  */
9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  int has_arg;
9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  int *flag;
9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project  int val;
9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project};
9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Names for the values of the `has_arg' field of `struct option'.  */
9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define	no_argument		0
10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define required_argument	1
10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define optional_argument	2
10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#if defined (__STDC__) && __STDC__
10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef __GNU_LIBRARY__
10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Many other libraries have conflicting prototypes for getopt, with
10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   differences in the consts, in stdlib.h.  To avoid compilation
10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project   errors, only prototype getopt for the GNU C library.  */
10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int getopt (int argc, char *const *argv, const char *shortopts);
10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else /* not __GNU_LIBRARY__ */
11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int getopt ();
11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif /* __GNU_LIBRARY__ */
11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int getopt_long (int argc, char *const *argv, const char *shortopts,
11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		        const struct option *longopts, int *longind);
11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int getopt_long_only (int argc, char *const *argv,
11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			     const char *shortopts,
11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		             const struct option *longopts, int *longind);
11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* Internal only.  Users should not call this directly.  */
11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int _getopt_internal (int argc, char *const *argv,
12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			     const char *shortopts,
12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		             const struct option *longopts, int *longind,
12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			     int long_only);
12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else /* not __STDC__ */
12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int getopt ();
12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int getopt_long ();
12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int getopt_long_only ();
12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int _getopt_internal ();
12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif /* __STDC__ */
13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
13119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef	__cplusplus
13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif /* _GETOPT_H */
136