1/*-
2 * Copyright (c) 1988, 1989, 1990, 1993
3 *	The Regents of the University of California.  All rights reserved.
4 * Copyright (c) 1988, 1989 by Adam de Boor
5 * Copyright (c) 1989 by Berkeley Softworks
6 * All rights reserved.
7 *
8 * This code is derived from software contributed to Berkeley by
9 * Adam de Boor.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 *    notice, this list of conditions and the following disclaimer in the
18 *    documentation and/or other materials provided with the distribution.
19 * 3. All advertising materials mentioning features or use of this software
20 *    must display the following acknowledgement:
21 *	This product includes software developed by the University of
22 *	California, Berkeley and its contributors.
23 * 4. Neither the name of the University nor the names of its contributors
24 *    may be used to endorse or promote products derived from this software
25 *    without specific prior written permission.
26 *
27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 * SUCH DAMAGE.
38 *
39 * $FreeBSD$
40 */
41
42#ifndef shell_h_6002e3b8
43#define	shell_h_6002e3b8
44
45#include <sys/queue.h>
46
47#include "str.h"
48#include "util.h"
49
50/**
51 * Shell Specifications:
52 *
53 * Some special stuff goes on if a shell doesn't have error control. In such
54 * a case, errCheck becomes a printf template for echoing the command,
55 * should echoing be on and ignErr becomes another printf template for
56 * executing the command while ignoring the return status. If either of these
57 * strings is empty when hasErrCtl is FALSE, the command will be executed
58 * anyway as is and if it causes an error, so be it.
59 */
60struct Shell {
61	TAILQ_ENTRY(Shell) link;	/* link all shell descriptions */
62
63	/*
64	 * the name of the shell. For Bourne and C shells, this is used
65	 * only to find the shell description when used as the single
66	 * source of a .SHELL target.
67	 */
68	char	*name;
69
70	char	*path;		/* full path to the shell */
71
72	/* True if both echoOff and echoOn defined */
73	Boolean	hasEchoCtl;
74
75	char	*echoOff;	/* command to turn off echo */
76	char	*echoOn;	/* command to turn it back on */
77
78	/*
79	 * What the shell prints, and its length, when given the
80	 * echo-off command. This line will not be printed when
81	 * received from the shell. This is usually the command which
82	 * was executed to turn off echoing
83	 */
84	char	*noPrint;
85
86	/* set if can control error checking for individual commands */
87	Boolean	hasErrCtl;
88
89	/* string to turn error checking on */
90	char	*errCheck;
91
92	/* string to turn off error checking */
93	char	*ignErr;
94
95	char	*echo;	/* command line flag: echo commands */
96	char	*exit;	/* command line flag: exit on error */
97
98	ArgArray builtins;	/* ordered list of shell builtins */
99	char	*meta;		/* shell meta characters */
100
101	Boolean	unsetenv;	/* unsetenv("ENV") before exec */
102};
103TAILQ_HEAD(Shells, Shell);
104
105extern struct Shell		*commandShell;
106
107void				Shell_Init(void);
108Boolean				Shell_Parse(const char []);
109
110#endif /* shell_h_6002e3b8 */
111