• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*	$NetBSD: options.h,v 1.17 2003/08/07 09:05:36 agc 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  
37  struct 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  
47  struct 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  	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},
58  struct 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  
64  DEF_OPT( "errexit",	'e' )	/* exit on error */
65  #define eflag optlist[0].val
66  DEF_OPT( "noglob",	'f' )	/* no pathname expansion */
67  #define fflag optlist[1].val
68  DEF_OPT( "ignoreeof",	'I' )	/* do not exit on EOF */
69  #define Iflag optlist[2].val
70  DEF_OPT( "interactive",'i' )	/* interactive shell */
71  #define iflag optlist[3].val
72  DEF_OPT( "monitor",	'm' )	/* job control */
73  #define mflag optlist[4].val
74  DEF_OPT( "noexec",	'n' )	/* [U] do not exec commands */
75  #define nflag optlist[5].val
76  DEF_OPT( "stdin",	's' )	/* read from stdin */
77  #define sflag optlist[6].val
78  DEF_OPT( "xtrace",	'x' )	/* trace after expansion */
79  #define xflag optlist[7].val
80  DEF_OPT( "verbose",	'v' )	/* trace read input */
81  #define vflag optlist[8].val
82  DEF_OPTS( "vi",		'V', 'V' )	/* vi style editing */
83  #define Vflag optlist[9].val
84  DEF_OPTS( "emacs",	'E', 'V' )	/* emacs style editing */
85  #define	Eflag optlist[10].val
86  DEF_OPT( "noclobber",	'C' )	/* do not overwrite files with > */
87  #define	Cflag optlist[11].val
88  DEF_OPT( "allexport",	'a' )	/* export all variables */
89  #define	aflag optlist[12].val
90  DEF_OPT( "notify",	'b' )	/* [U] report completion of background jobs */
91  #define	bflag optlist[13].val
92  DEF_OPT( "nounset",	'u' )	/* error expansion of unset variables */
93  #define	uflag optlist[14].val
94  DEF_OPT( "quietprofile", 'q' )
95  #define	qflag optlist[15].val
96  DEF_OPT( "nolog",	0 )	/* [U] no functon defs in command history */
97  #define	nolog optlist[16].val
98  DEF_OPT( "cdprint",	0 )	/* always print result of cd */
99  #define	cdprint optlist[17].val
100  #ifdef DEBUG
101  DEF_OPT( "debug",	0 )	/* enable debug prints */
102  #define	debug optlist[18].val
103  #endif
104  
105  #ifdef DEFINE_OPTIONS
106  	{ 0, 0, 0, 0 },
107  };
108  #define NOPTS (sizeof optlist / sizeof optlist[0] - 1)
109  int sizeof_optlist = sizeof optlist;
110  #else
111  extern struct optent optlist[];
112  extern int sizeof_optlist;
113  #endif
114  
115  
116  extern char *minusc;		/* argument to -c option */
117  extern char *arg0;		/* $0 */
118  extern struct shparam shellparam;  /* $@ */
119  extern char **argptr;		/* argument list for builtin commands */
120  extern char *optionarg;		/* set by nextopt */
121  extern char *optptr;		/* used by nextopt */
122  
123  void procargs(int, char **);
124  void optschanged(void);
125  void setparam(char **);
126  void freeparam(volatile struct shparam *);
127  int shiftcmd(int, char **);
128  int setcmd(int, char **);
129  int getoptscmd(int, char **);
130  int nextopt(const char *);
131  void getoptsreset(const char *);
132