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