1 /***********************************************************************
2 *                                                                      *
3 *               This software is part of the ast package               *
4 *          Copyright (c) 1982-2012 AT&T Intellectual Property          *
5 *                      and is licensed under the                       *
6 *                 Eclipse Public License, Version 1.0                  *
7 *                    by AT&T Intellectual Property                     *
8 *                                                                      *
9 *                A copy of the License is available at                 *
10 *          http://www.eclipse.org/org/documents/epl-v10.html           *
11 *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12 *                                                                      *
13 *              Information and Software Systems Research               *
14 *                            AT&T Research                             *
15 *                           Florham Park NJ                            *
16 *                                                                      *
17 *                  David Korn <dgk@research.att.com>                   *
18 *                                                                      *
19 ***********************************************************************/
20 #pragma prototyped
21 /*
22  *	UNIX shell
23  *	David Korn
24  *
25  */
26 /*
27  * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
28  */
29 
30 #include	<ast.h>
31 #include	<sfio.h>
32 
33 #ifndef IOBSIZE
34 #   define  IOBSIZE	(SF_BUFSIZE*sizeof(char*))
35 #endif /* IOBSIZE */
36 #define IOMAXTRY	20
37 
38 #ifndef SF_CLOSING
39 #define SF_CLOSING	SF_CLOSE
40 #endif
41 #ifndef SF_APPENDWR
42 #define SF_APPENDWR	SF_APPEND
43 #endif
44 
45 /* used for output of shell errors */
46 #define ERRIO		2
47 
48 #define IOREAD		001
49 #define IOWRITE		002
50 #define IODUP 		004
51 #define IOSEEK		010
52 #define IONOSEEK	020
53 #define IOTTY 		040
54 #define IOCLEX 		0100
55 #define IOCLOSE		(IOSEEK|IONOSEEK)
56 
57 #define IOSUBSHELL	0x8000	/* must be larger than any file descriptor */
58 #define IOPICKFD	0x10000 /* file descriptor number was selected automatically */
59 #define IOHERESTRING	0x20000 /* allow here documents to be string streams */
60 
61 /*
62  * The remainder of this file is only used when compiled with shell
63  */
64 
65 #if KSHELL
66 
67 #ifndef ARG_RAW
68     struct ionod;
69 #endif /* !ARG_RAW */
70 
71 extern int	sh_iocheckfd(Shell_t*,int);
72 extern void 	sh_ioinit(Shell_t*);
73 extern int 	sh_iomovefd(int);
74 extern int	sh_iorenumber(Shell_t*,int,int);
75 extern void 	sh_pclose(int[]);
76 extern int	sh_rpipe(int[]);
77 extern void 	sh_iorestore(Shell_t*,int,int);
78 #if defined(__EXPORT__) && defined(_BLD_DLL) && defined(_BLD_shell)
79    __EXPORT__
80 #endif
81 extern Sfio_t 	*sh_iostream(Shell_t*,int);
82 extern int	sh_redirect(Shell_t*,struct ionod*,int);
83 extern void 	sh_iosave(Shell_t *, int,int,char*);
84 extern int	sh_get_unused_fd(Shell_t* shp, int min_fd);
85 extern int 	sh_iovalidfd(Shell_t*, int);
86 extern int 	sh_inuse(Shell_t*, int);
87 extern void 	sh_iounsave(Shell_t*);
88 extern int	sh_chkopen(const char*);
89 extern int	sh_ioaccess(int,int);
90 extern int	sh_devtofd(const char*);
91 extern int	sh_isdevfd(const char*);
92 extern int	sh_source(Shell_t*, Sfio_t*, const char*);
93 
94 extern int	VALIDATE_FD(Shell_t *, int);
95 
96 #define	VALIDATE_FD(shp, fd) \
97 	(((fd) >= (shp)->gd->lim.open_max) ? sh_iovalidfd(shp, fd) : 1)
98 
99 
100 /* the following are readonly */
101 extern const char	e_pexists[];
102 extern const char	e_query[];
103 extern const char	e_history[];
104 extern const char	e_argtype[];
105 extern const char	e_create[];
106 extern const char	e_tmpcreate[];
107 extern const char	e_exists[];
108 extern const char	e_file[];
109 extern const char	e_redirect[];
110 extern const char	e_formspec[];
111 extern const char	e_badregexp[];
112 extern const char	e_open[];
113 extern const char	e_notseek[];
114 extern const char	e_noread[];
115 extern const char	e_badseek[];
116 extern const char	e_badwrite[];
117 extern const char	e_badpattern[];
118 extern const char	e_toomany[];
119 extern const char	e_pipe[];
120 extern const char	e_unknown[];
121 extern const char	e_devnull[];
122 extern const char	e_profile[];
123 extern const char	e_sysprofile[];
124 #if SHOPT_SYSRC
125 extern const char	e_sysrc[];
126 #endif
127 #if SHOPT_BASH
128 #if SHOPT_SYSRC
129 extern const char	e_bash_sysrc[];
130 #endif
131 extern const char	e_bash_rc[];
132 extern const char	e_bash_login[];
133 extern const char	e_bash_logout[];
134 extern const char	e_bash_profile[];
135 #endif
136 extern const char	e_stdprompt[];
137 extern const char	e_supprompt[];
138 extern const char	e_ambiguous[];
139 
140 #endif /* KSHELL */
141