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