options.h revision 1.15
1/* $NetBSD: options.h,v 1.15 2002/11/24 22:35:42 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. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed by the University of 21 * California, Berkeley and its contributors. 22 * 4. Neither the name of the University nor the names of its contributors 23 * may be used to endorse or promote products derived from this software 24 * without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 * 38 * @(#)options.h 8.2 (Berkeley) 5/4/95 39 */ 40 41struct shparam { 42 int nparam; /* # of positional parameters (without $0) */ 43 unsigned char malloc; /* if parameter list dynamically allocated */ 44 unsigned char reset; /* if getopts has been reset */ 45 char **p; /* parameter list */ 46 char **optnext; /* next parameter to be processed by getopts */ 47 char *optptr; /* used by getopts */ 48}; 49 50 51struct optent { 52 const char *name; /* for set -o <name> */ 53 const char letter; /* set [+/-]<letter> and $- */ 54 const char opt_set; /* mutually exclusive option set */ 55 char val; /* value of <letter>flag */ 56}; 57 58/* Those marked [U] are required by posix, but have no effect! */ 59 60#ifdef DEFINE_OPTIONS 61#define DEF_OPTS(name, letter, opt_set) {name, letter, opt_set, 0}, 62struct optent optlist[] = { 63#else 64#define DEF_OPTS(name, letter, opt_set) 65#endif 66#define DEF_OPT(name,letter) DEF_OPTS(name, letter, 0) 67 68DEF_OPT( "errexit", 'e' ) /* exit on error */ 69#define eflag optlist[0].val 70DEF_OPT( "noglob", 'f' ) /* no pathname expansion */ 71#define fflag optlist[1].val 72DEF_OPT( "ignoreeof", 'I' ) /* do not exit on EOF */ 73#define Iflag optlist[2].val 74DEF_OPT( "interactive",'i' ) /* interactive shell */ 75#define iflag optlist[3].val 76DEF_OPT( "monitor", 'm' ) /* job control */ 77#define mflag optlist[4].val 78DEF_OPT( "noexec", 'n' ) /* [U] do not exec commands */ 79#define nflag optlist[5].val 80DEF_OPT( "stdin", 's' ) /* read from stdin */ 81#define sflag optlist[6].val 82DEF_OPT( "xtrace", 'x' ) /* trace after expansion */ 83#define xflag optlist[7].val 84DEF_OPT( "verbose", 'v' ) /* trace read input */ 85#define vflag optlist[8].val 86DEF_OPTS( "vi", 'V', 'V' ) /* vi style editing */ 87#define Vflag optlist[9].val 88DEF_OPTS( "emacs", 'E', 'V' ) /* emacs style editing */ 89#define Eflag optlist[10].val 90DEF_OPT( "noclobber", 'C' ) /* do not overwrite files with > */ 91#define Cflag optlist[11].val 92DEF_OPT( "allexport", 'a' ) /* export all variables */ 93#define aflag optlist[12].val 94DEF_OPT( "notify", 'b' ) /* [U] report completion of background jobs */ 95#define bflag optlist[13].val 96DEF_OPT( "nounset", 'u' ) /* error expansion of unset variables */ 97#define uflag optlist[14].val 98DEF_OPT( "quietprofile", 'q' ) 99#define qflag optlist[15].val 100DEF_OPT( "nolog", 0 ) /* [U] no functon defs in command history */ 101#define nolog optlist[16].val 102#ifdef DEBUG 103DEF_OPT( "debug", 0 ) 104#define debug optlist[17].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 shiftcmd(int, char **); 130int setcmd(int, char **); 131int getoptscmd(int, char **); 132int nextopt(const char *); 133void getoptsreset(const char *); 134