options.h revision 90111
1238438Sdteske/*-
2245106Sdteske * Copyright (c) 1991, 1993
3238438Sdteske *	The Regents of the University of California.  All rights reserved.
4238438Sdteske *
5238438Sdteske * This code is derived from software contributed to Berkeley by
6238438Sdteske * Kenneth Almquist.
7238438Sdteske *
8238438Sdteske * Redistribution and use in source and binary forms, with or without
9238438Sdteske * modification, are permitted provided that the following conditions
10238438Sdteske * are met:
11238438Sdteske * 1. Redistributions of source code must retain the above copyright
12238438Sdteske *    notice, this list of conditions and the following disclaimer.
13238438Sdteske * 2. Redistributions in binary form must reproduce the above copyright
14238438Sdteske *    notice, this list of conditions and the following disclaimer in the
15238438Sdteske *    documentation and/or other materials provided with the distribution.
16238438Sdteske * 3. All advertising materials mentioning features or use of this software
17238438Sdteske *    must display the following acknowledgement:
18238438Sdteske *	This product includes software developed by the University of
19238438Sdteske *	California, Berkeley and its contributors.
20238438Sdteske * 4. Neither the name of the University nor the names of its contributors
21238438Sdteske *    may be used to endorse or promote products derived from this software
22238438Sdteske *    without specific prior written permission.
23238438Sdteske *
24238438Sdteske * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25238438Sdteske * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26238438Sdteske * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27238438Sdteske * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28252803Sdteske * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29238438Sdteske * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30238438Sdteske * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31238438Sdteske * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32238438Sdteske * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33238438Sdteske * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34238438Sdteske * SUCH DAMAGE.
35238438Sdteske *
36238438Sdteske *	@(#)options.h	8.2 (Berkeley) 5/4/95
37238438Sdteske * $FreeBSD: head/bin/sh/options.h 90111 2002-02-02 06:50:57Z imp $
38238438Sdteske */
39238438Sdteske
40238438Sdteskestruct shparam {
41238438Sdteske	int nparam;		/* # of positional parameters (without $0) */
42238438Sdteske	unsigned char malloc;	/* if parameter list dynamically allocated */
43238438Sdteske	unsigned char reset;	/* if getopts has been reset */
44238438Sdteske	char **p;		/* parameter list */
45238438Sdteske	char **optnext;		/* next parameter to be processed by getopts */
46238438Sdteske	char *optptr;		/* used by getopts */
47238438Sdteske};
48238438Sdteske
49252815Sdteske
50252815Sdteske
51252815Sdteske#define eflag optlist[0].val
52238438Sdteske#define fflag optlist[1].val
53238438Sdteske#define Iflag optlist[2].val
54238438Sdteske#define iflag optlist[3].val
55252813Sdteske#define mflag optlist[4].val
56252813Sdteske#define nflag optlist[5].val
57252813Sdteske#define sflag optlist[6].val
58252813Sdteske#define xflag optlist[7].val
59252813Sdteske#define vflag optlist[8].val
60252813Sdteske#define Vflag optlist[9].val
61245052Sdteske#define	Eflag optlist[10].val
62245052Sdteske#define	Cflag optlist[11].val
63245052Sdteske#define	aflag optlist[12].val
64245052Sdteske#define	bflag optlist[13].val
65245052Sdteske#define	uflag optlist[14].val
66245052Sdteske#define	privileged optlist[15].val
67245052Sdteske#define	Tflag optlist[16].val
68245052Sdteske
69245052Sdteske#define NOPTS	17
70245052Sdteske
71245052Sdteskestruct optent {
72238438Sdteske	const char *name;
73238438Sdteske	const char letter;
74238438Sdteske	char val;
75238438Sdteske};
76238438Sdteske
77238438Sdteske#ifdef DEFINE_OPTIONS
78238438Sdteskestruct optent optlist[NOPTS] = {
79238438Sdteske	{ "errexit",	'e',	0 },
80238438Sdteske	{ "noglob",	'f',	0 },
81238438Sdteske	{ "ignoreeof",	'I',	0 },
82238438Sdteske	{ "interactive",'i',	0 },
83238438Sdteske	{ "monitor",	'm',	0 },
84238438Sdteske	{ "noexec",	'n',	0 },
85238444Sjoel	{ "stdin",	's',	0 },
86238438Sdteske	{ "xtrace",	'x',	0 },
87238438Sdteske	{ "verbose",	'v',	0 },
88238438Sdteske	{ "vi",		'V',	0 },
89238438Sdteske	{ "emacs",	'E',	0 },
90238438Sdteske	{ "noclobber",	'C',	0 },
91252804Sdteske	{ "allexport",	'a',	0 },
92252804Sdteske	{ "notify",	'b',	0 },
93238438Sdteske	{ "nounset",	'u',	0 },
94238444Sjoel	{ "privileged",	'p',	0 },
95238438Sdteske	{ "trapsasync",	'T',	0 },
96238438Sdteske};
97238438Sdteske#else
98238438Sdteskeextern struct optent optlist[NOPTS];
99238438Sdteske#endif
100238438Sdteske
101238438Sdteske
102238438Sdteskeextern char *minusc;		/* argument to -c option */
103252804Sdteskeextern char *arg0;		/* $0 */
104252804Sdteskeextern struct shparam shellparam;  /* $@ */
105238438Sdteskeextern char **argptr;		/* argument list for builtin commands */
106238438Sdteskeextern char *shoptarg;		/* set by nextopt */
107238444Sjoelextern char *optptr;		/* used by nextopt */
108238438Sdteske
109238438Sdteskevoid procargs(int, char **);
110238438Sdteskevoid optschanged(void);
111238438Sdteskevoid setparam(char **);
112238438Sdteskevoid freeparam(struct shparam *);
113238438Sdteskeint shiftcmd(int, char **);
114238438Sdteskeint setcmd(int, char **);
115238438Sdteskeint getoptscmd(int, char **);
116238438Sdteskeint nextopt(char *);
117241330Sjoelvoid getoptsreset(const char *);
118252804Sdteske