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