xref: /freebsd/bin/sh/options.h (revision 5134c3f7990c353d2442ddd8a9a1d30b80099e43)
14b88c807SRodney W. Grimes /*-
24b88c807SRodney W. Grimes  * Copyright (c) 1991, 1993
34b88c807SRodney W. Grimes  *	The Regents of the University of California.  All rights reserved.
44b88c807SRodney W. Grimes  *
54b88c807SRodney W. Grimes  * This code is derived from software contributed to Berkeley by
64b88c807SRodney W. Grimes  * Kenneth Almquist.
74b88c807SRodney W. Grimes  *
84b88c807SRodney W. Grimes  * Redistribution and use in source and binary forms, with or without
94b88c807SRodney W. Grimes  * modification, are permitted provided that the following conditions
104b88c807SRodney W. Grimes  * are met:
114b88c807SRodney W. Grimes  * 1. Redistributions of source code must retain the above copyright
124b88c807SRodney W. Grimes  *    notice, this list of conditions and the following disclaimer.
134b88c807SRodney W. Grimes  * 2. Redistributions in binary form must reproduce the above copyright
144b88c807SRodney W. Grimes  *    notice, this list of conditions and the following disclaimer in the
154b88c807SRodney W. Grimes  *    documentation and/or other materials provided with the distribution.
164b88c807SRodney W. Grimes  * 3. All advertising materials mentioning features or use of this software
174b88c807SRodney W. Grimes  *    must display the following acknowledgement:
184b88c807SRodney W. Grimes  *	This product includes software developed by the University of
194b88c807SRodney W. Grimes  *	California, Berkeley and its contributors.
204b88c807SRodney W. Grimes  * 4. Neither the name of the University nor the names of its contributors
214b88c807SRodney W. Grimes  *    may be used to endorse or promote products derived from this software
224b88c807SRodney W. Grimes  *    without specific prior written permission.
234b88c807SRodney W. Grimes  *
244b88c807SRodney W. Grimes  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
254b88c807SRodney W. Grimes  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
264b88c807SRodney W. Grimes  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
274b88c807SRodney W. Grimes  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
284b88c807SRodney W. Grimes  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
294b88c807SRodney W. Grimes  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
304b88c807SRodney W. Grimes  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
314b88c807SRodney W. Grimes  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
324b88c807SRodney W. Grimes  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
334b88c807SRodney W. Grimes  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
344b88c807SRodney W. Grimes  * SUCH DAMAGE.
354b88c807SRodney W. Grimes  *
36aa9caaf6SPeter Wemm  *	@(#)options.h	8.2 (Berkeley) 5/4/95
372a456239SPeter Wemm  * $FreeBSD$
384b88c807SRodney W. Grimes  */
394b88c807SRodney W. Grimes 
404b88c807SRodney W. Grimes struct shparam {
41ab0a2172SSteve Price 	int nparam;		/* # of positional parameters (without $0) */
42ab0a2172SSteve Price 	unsigned char malloc;	/* if parameter list dynamically allocated */
43ab0a2172SSteve Price 	unsigned char reset;	/* if getopts has been reset */
444b88c807SRodney W. Grimes 	char **p;		/* parameter list */
454b88c807SRodney W. Grimes 	char **optnext;		/* next parameter to be processed by getopts */
464b88c807SRodney W. Grimes 	char *optptr;		/* used by getopts */
474b88c807SRodney W. Grimes };
484b88c807SRodney W. Grimes 
494b88c807SRodney W. Grimes 
504b88c807SRodney W. Grimes 
514b88c807SRodney W. Grimes #define eflag optlist[0].val
524b88c807SRodney W. Grimes #define fflag optlist[1].val
534b88c807SRodney W. Grimes #define Iflag optlist[2].val
544b88c807SRodney W. Grimes #define iflag optlist[3].val
554b88c807SRodney W. Grimes #define mflag optlist[4].val
564b88c807SRodney W. Grimes #define nflag optlist[5].val
574b88c807SRodney W. Grimes #define sflag optlist[6].val
584b88c807SRodney W. Grimes #define xflag optlist[7].val
594b88c807SRodney W. Grimes #define vflag optlist[8].val
604b88c807SRodney W. Grimes #define Vflag optlist[9].val
614b88c807SRodney W. Grimes #define	Eflag optlist[10].val
624b88c807SRodney W. Grimes #define	Cflag optlist[11].val
634b88c807SRodney W. Grimes #define	aflag optlist[12].val
644b88c807SRodney W. Grimes #define	bflag optlist[13].val
654b88c807SRodney W. Grimes #define	uflag optlist[14].val
66621a31c6SSteve Price #define	privileged optlist[15].val
67c1c72a3cSMartin Cracauer #define	Tflag optlist[16].val
684b88c807SRodney W. Grimes 
69c1c72a3cSMartin Cracauer #define NOPTS	17
704b88c807SRodney W. Grimes 
714b88c807SRodney W. Grimes struct optent {
724b88c807SRodney W. Grimes 	const char *name;
734b88c807SRodney W. Grimes 	const char letter;
744b88c807SRodney W. Grimes 	char val;
754b88c807SRodney W. Grimes };
764b88c807SRodney W. Grimes 
774b88c807SRodney W. Grimes #ifdef DEFINE_OPTIONS
784b88c807SRodney W. Grimes struct optent optlist[NOPTS] = {
79aa9caaf6SPeter Wemm 	{ "errexit",	'e',	0 },
80aa9caaf6SPeter Wemm 	{ "noglob",	'f',	0 },
81aa9caaf6SPeter Wemm 	{ "ignoreeof",	'I',	0 },
82aa9caaf6SPeter Wemm 	{ "interactive",'i',	0 },
83aa9caaf6SPeter Wemm 	{ "monitor",	'm',	0 },
84aa9caaf6SPeter Wemm 	{ "noexec",	'n',	0 },
85aa9caaf6SPeter Wemm 	{ "stdin",	's',	0 },
86aa9caaf6SPeter Wemm 	{ "xtrace",	'x',	0 },
87aa9caaf6SPeter Wemm 	{ "verbose",	'v',	0 },
88aa9caaf6SPeter Wemm 	{ "vi",		'V',	0 },
89aa9caaf6SPeter Wemm 	{ "emacs",	'E',	0 },
90aa9caaf6SPeter Wemm 	{ "noclobber",	'C',	0 },
91aa9caaf6SPeter Wemm 	{ "allexport",	'a',	0 },
92aa9caaf6SPeter Wemm 	{ "notify",	'b',	0 },
93aa9caaf6SPeter Wemm 	{ "nounset",	'u',	0 },
94621a31c6SSteve Price 	{ "privileged",	'p',	0 },
95c1c72a3cSMartin Cracauer 	{ "trapsasync",	'T',	0 },
964b88c807SRodney W. Grimes };
974b88c807SRodney W. Grimes #else
984b88c807SRodney W. Grimes extern struct optent optlist[NOPTS];
994b88c807SRodney W. Grimes #endif
1004b88c807SRodney W. Grimes 
1014b88c807SRodney W. Grimes 
1024b88c807SRodney W. Grimes extern char *minusc;		/* argument to -c option */
1034b88c807SRodney W. Grimes extern char *arg0;		/* $0 */
1044b88c807SRodney W. Grimes extern struct shparam shellparam;  /* $@ */
1054b88c807SRodney W. Grimes extern char **argptr;		/* argument list for builtin commands */
106f01e3d0cSMartin Cracauer extern char *shoptarg;		/* set by nextopt */
1074b88c807SRodney W. Grimes extern char *optptr;		/* used by nextopt */
1084b88c807SRodney W. Grimes 
1095134c3f7SWarner Losh void procargs(int, char **);
1105134c3f7SWarner Losh void optschanged(void);
1115134c3f7SWarner Losh void setparam(char **);
1125134c3f7SWarner Losh void freeparam(struct shparam *);
1135134c3f7SWarner Losh int shiftcmd(int, char **);
1145134c3f7SWarner Losh int setcmd(int, char **);
1155134c3f7SWarner Losh int getoptscmd(int, char **);
1165134c3f7SWarner Losh int nextopt(char *);
1175134c3f7SWarner Losh void getoptsreset(const char *);
118