1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* $NetBSD: options.h,v 1.17 2003/08/07 09:05:36 agc Exp $ */ 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*- 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (c) 1991, 1993 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * The Regents of the University of California. All rights reserved. 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * This code is derived from software contributed to Berkeley by 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Kenneth Almquist. 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Redistribution and use in source and binary forms, with or without 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * modification, are permitted provided that the following conditions 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * are met: 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * notice, this list of conditions and the following disclaimer. 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * documentation and/or other materials provided with the distribution. 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 3. Neither the name of the University nor the names of its contributors 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * may be used to endorse or promote products derived from this software 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * without specific prior written permission. 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * SUCH DAMAGE. 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * @(#)options.h 8.2 (Berkeley) 5/4/95 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct shparam { 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int nparam; /* # of positional parameters (without $0) */ 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned char malloc; /* if parameter list dynamically allocated */ 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned char reset; /* if getopts has been reset */ 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char **p; /* parameter list */ 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char **optnext; /* next parameter to be processed by getopts */ 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *optptr; /* used by getopts */ 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct optent { 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project const char *name; /* for set -o <name> */ 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project const char letter; /* set [+/-]<letter> and $- */ 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project const char opt_set; /* mutually exclusive option set */ 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char val; /* value of <letter>flag */ 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* Those marked [U] are required by posix, but have no effect! */ 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef DEFINE_OPTIONS 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define DEF_OPTS(name, letter, opt_set) {name, letter, opt_set, 0}, 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstruct optent optlist[] = { 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#else 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define DEF_OPTS(name, letter, opt_set) 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define DEF_OPT(name,letter) DEF_OPTS(name, letter, 0) 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "errexit", 'e' ) /* exit on error */ 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define eflag optlist[0].val 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "noglob", 'f' ) /* no pathname expansion */ 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define fflag optlist[1].val 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "ignoreeof", 'I' ) /* do not exit on EOF */ 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define Iflag optlist[2].val 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "interactive",'i' ) /* interactive shell */ 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define iflag optlist[3].val 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "monitor", 'm' ) /* job control */ 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define mflag optlist[4].val 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "noexec", 'n' ) /* [U] do not exec commands */ 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define nflag optlist[5].val 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "stdin", 's' ) /* read from stdin */ 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define sflag optlist[6].val 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "xtrace", 'x' ) /* trace after expansion */ 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define xflag optlist[7].val 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "verbose", 'v' ) /* trace read input */ 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define vflag optlist[8].val 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPTS( "vi", 'V', 'V' ) /* vi style editing */ 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define Vflag optlist[9].val 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPTS( "emacs", 'E', 'V' ) /* emacs style editing */ 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define Eflag optlist[10].val 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "noclobber", 'C' ) /* do not overwrite files with > */ 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define Cflag optlist[11].val 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "allexport", 'a' ) /* export all variables */ 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define aflag optlist[12].val 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "notify", 'b' ) /* [U] report completion of background jobs */ 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define bflag optlist[13].val 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "nounset", 'u' ) /* error expansion of unset variables */ 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define uflag optlist[14].val 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "quietprofile", 'q' ) 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define qflag optlist[15].val 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "nolog", 0 ) /* [U] no functon defs in command history */ 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define nolog optlist[16].val 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "cdprint", 0 ) /* always print result of cd */ 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define cdprint optlist[17].val 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef DEBUG 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectDEF_OPT( "debug", 0 ) /* enable debug prints */ 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define debug optlist[18].val 103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef DEFINE_OPTIONS 106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project { 0, 0, 0, 0 }, 107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}; 108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define NOPTS (sizeof optlist / sizeof optlist[0] - 1) 109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint sizeof_optlist = sizeof optlist; 110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#else 111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern struct optent optlist[]; 112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern int sizeof_optlist; 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern char *minusc; /* argument to -c option */ 117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern char *arg0; /* $0 */ 118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern struct shparam shellparam; /* $@ */ 119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern char **argptr; /* argument list for builtin commands */ 120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern char *optionarg; /* set by nextopt */ 121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern char *optptr; /* used by nextopt */ 122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid procargs(int, char **); 124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid optschanged(void); 125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid setparam(char **); 126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid freeparam(volatile struct shparam *); 127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint shiftcmd(int, char **); 128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint setcmd(int, char **); 129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint getoptscmd(int, char **); 130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint nextopt(const char *); 131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid getoptsreset(const char *); 132