1 2/* : : generated by proto : : */ 3/*********************************************************************** 4* * 5* This software is part of the ast package * 6* Copyright (c) 1982-2010 AT&T Intellectual Property * 7* and is licensed under the * 8* Common Public License, Version 1.0 * 9* by AT&T Intellectual Property * 10* * 11* A copy of the License is available at * 12* http://www.opensource.org/licenses/cpl1.0.txt * 13* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 14* * 15* Information and Software Systems Research * 16* AT&T Research * 17* Florham Park NJ * 18* * 19* David Korn <dgk@research.att.com> * 20* * 21***********************************************************************/ 22 23#ifndef SH_INTERACTIVE 24#if !defined(__PROTO__) 25#include <prototyped.h> 26#endif 27#if !defined(__LINKAGE__) 28#define __LINKAGE__ /* 2004-08-11 transition */ 29#endif 30 31/* 32 * David Korn 33 * AT&T Labs 34 * 35 * Interface definitions for shell command language 36 * 37 */ 38 39#include <ast.h> 40#include <cdt.h> 41#ifdef _SH_PRIVATE 42# include "name.h" 43#else 44# include <nval.h> 45#endif /* _SH_PRIVATE */ 46 47#define SH_VERSION 20071012 48 49#undef NOT_USED 50#define NOT_USED(x) (&x,1) 51 52/* options */ 53typedef struct 54{ 55 unsigned long v[4]; 56} 57Shopt_t; 58 59typedef struct Shell_s Shell_t; 60 61typedef void (*Shinit_f) __PROTO__((Shell_t*, int)); 62typedef int (*Shwait_f) __PROTO__((int, long, int)); 63 64union Shnode_u; 65typedef union Shnode_u Shnode_t; 66 67#define SH_CFLAG 0 68#define SH_HISTORY 1 /* used also as a state */ 69#define SH_ERREXIT 2 /* used also as a state */ 70#define SH_VERBOSE 3 /* used also as a state */ 71#define SH_MONITOR 4 /* used also as a state */ 72#define SH_INTERACTIVE 5 /* used also as a state */ 73#define SH_RESTRICTED 6 74#define SH_XTRACE 7 75#define SH_KEYWORD 8 76#define SH_NOUNSET 9 77#define SH_NOGLOB 10 78#define SH_ALLEXPORT 11 79#define SH_PFSH 12 80#define SH_IGNOREEOF 13 81#define SH_NOCLOBBER 14 82#define SH_MARKDIRS 15 83#define SH_BGNICE 16 84#define SH_VI 17 85#define SH_VIRAW 18 86#define SH_TFLAG 19 87#define SH_TRACKALL 20 88#define SH_SFLAG 21 89#define SH_NOEXEC 22 90#define SH_GMACS 24 91#define SH_EMACS 25 92#define SH_PRIVILEGED 26 93#define SH_SUBSHARE 27 /* subshell shares state with parent */ 94#define SH_NOLOG 28 95#define SH_NOTIFY 29 96#define SH_DICTIONARY 30 97#define SH_PIPEFAIL 32 98#define SH_GLOBSTARS 33 99#define SH_XARGS 34 100#define SH_RC 35 101#define SH_SHOWME 36 102 103/* 104 * passed as flags to builtins in Nambltin_t struct when BLT_OPTIM is on 105 */ 106#define SH_BEGIN_OPTIM 0x1 107#define SH_END_OPTIM 0x2 108 109/* The following type is used for error messages */ 110 111/* error messages */ 112extern __MANGLE__ const char e_defpath[]; 113extern __MANGLE__ const char e_found[]; 114extern __MANGLE__ const char e_nospace[]; 115extern __MANGLE__ const char e_format[]; 116extern __MANGLE__ const char e_number[]; 117extern __MANGLE__ const char e_restricted[]; 118extern __MANGLE__ const char e_recursive[]; 119extern __MANGLE__ char e_version[]; 120 121typedef struct sh_scope 122{ 123 struct sh_scope *par_scope; 124 int argc; 125 char **argv; 126 char *cmdname; 127 char *filename; 128 char *funname; 129 int lineno; 130 Dt_t *var_tree; 131 struct sh_scope *self; 132} Shscope_t; 133 134/* 135 * Saves the state of the shell 136 */ 137 138struct Shell_s 139{ 140 Shopt_t options; /* set -o options */ 141 Dt_t *var_tree; /* for shell variables */ 142 Dt_t *fun_tree; /* for shell functions */ 143 Dt_t *alias_tree; /* for alias names */ 144 Dt_t *bltin_tree; /* for builtin commands */ 145 Shscope_t *topscope; /* pointer to top-level scope */ 146 int inlineno; /* line number of current input file */ 147 int exitval; /* most recent exit value */ 148 unsigned char trapnote; /* set when trap/signal is pending */ 149 char shcomp; /* set when runing shcomp */ 150 short subshell; /* set for virtual subshell */ 151#ifdef _SH_PRIVATE 152 _SH_PRIVATE 153#endif /* _SH_PRIVATE */ 154}; 155 156/* flags for sh_parse */ 157#define SH_NL 1 /* Treat new-lines as ; */ 158#define SH_EOF 2 /* EOF causes syntax error */ 159 160/* symbolic values for sh_iogetiop */ 161#define SH_IOCOPROCESS (-2) 162#define SH_IOHISTFILE (-3) 163 164#include <cmd.h> 165 166/* symbolic value for sh_fdnotify */ 167#define SH_FDCLOSE (-1) 168 169#undef getenv /* -lshell provides its own */ 170 171#if defined(__EXPORT__) && defined(_DLL) 172# ifdef _BLD_shell 173#undef __MANGLE__ 174#define __MANGLE__ __LINKAGE__ __EXPORT__ 175# endif /* _BLD_shell */ 176#endif /* _DLL */ 177 178extern __MANGLE__ Dt_t *sh_bltin_tree __PROTO__((void)); 179extern __MANGLE__ void sh_subfork __PROTO__((void)); 180extern __MANGLE__ Shell_t *sh_init __PROTO__((int,char*[],Shinit_f)); 181extern __MANGLE__ int sh_reinit __PROTO__((char*[])); 182extern __MANGLE__ int sh_eval __PROTO__((Sfio_t*,int)); 183extern __MANGLE__ void sh_delay __PROTO__((double)); 184extern __MANGLE__ __V_ *sh_parse __PROTO__((Shell_t*, Sfio_t*,int)); 185extern __MANGLE__ int sh_trap __PROTO__((const char*,int)); 186extern __MANGLE__ int sh_fun __PROTO__((Namval_t*,Namval_t*, char*[])); 187extern __MANGLE__ int sh_funscope __PROTO__((int,char*[],int(*)(__V_*),__V_*,int)); 188extern __MANGLE__ Sfio_t *sh_iogetiop __PROTO__((int,int)); 189extern __MANGLE__ int sh_main __PROTO__((int, char*[], Shinit_f)); 190extern __MANGLE__ int sh_run __PROTO__((int, char*[])); 191extern __MANGLE__ void sh_menu __PROTO__((Sfio_t*, int, char*[])); 192extern __MANGLE__ Namval_t *sh_addbuiltin __PROTO__((const char*, int(*)(int, char*[],__V_*), __V_*)); 193extern __MANGLE__ char *sh_fmtq __PROTO__((const char*)); 194extern __MANGLE__ char *sh_fmtqf __PROTO__((const char*, int, int)); 195extern __MANGLE__ Sfdouble_t sh_strnum __PROTO__((const char*, char**, int)); 196extern __MANGLE__ int sh_access __PROTO__((const char*,int)); 197extern __MANGLE__ int sh_close __PROTO__((int)); 198extern __MANGLE__ int sh_dup __PROTO__((int)); 199extern __MANGLE__ void sh_exit __PROTO__((int)); 200extern __MANGLE__ int sh_fcntl __PROTO__((int, int, ...)); 201extern __MANGLE__ Sfio_t *sh_fd2sfio __PROTO__((int)); 202extern __MANGLE__ int (*sh_fdnotify __PROTO__((int(*)(int,int)))) __PROTO__((int,int)); 203extern __MANGLE__ Shell_t *sh_getinterp __PROTO__((void)); 204extern __MANGLE__ int sh_open __PROTO__((const char*, int, ...)); 205extern __MANGLE__ int sh_openmax __PROTO__((void)); 206extern __MANGLE__ Sfio_t *sh_pathopen __PROTO__((const char*)); 207extern __MANGLE__ ssize_t sh_read __PROTO__((int, __V_*, size_t)); 208extern __MANGLE__ ssize_t sh_write __PROTO__((int, const __V_*, size_t)); 209extern __MANGLE__ off_t sh_seek __PROTO__((int, off_t, int)); 210extern __MANGLE__ int sh_pipe __PROTO__((int[])); 211extern __MANGLE__ mode_t sh_umask __PROTO__((mode_t)); 212extern __MANGLE__ __V_ *sh_waitnotify __PROTO__((Shwait_f)); 213extern __MANGLE__ Shscope_t *sh_getscope __PROTO__((int,int)); 214extern __MANGLE__ Shscope_t *sh_setscope __PROTO__((Shscope_t*)); 215extern __MANGLE__ void sh_sigcheck __PROTO__((void)); 216extern __MANGLE__ unsigned long sh_isoption __PROTO__((int)); 217extern __MANGLE__ unsigned long sh_onoption __PROTO__((int)); 218extern __MANGLE__ unsigned long sh_offoption __PROTO__((int)); 219extern __MANGLE__ int sh_waitsafe __PROTO__((void)); 220extern __MANGLE__ int sh_exec __PROTO__((const Shnode_t*,int)); 221 222#if SHOPT_DYNAMIC 223 extern __MANGLE__ __V_ **sh_getliblist __PROTO__((void)); 224#endif /* SHOPT_DYNAMIC */ 225 226/* 227 * direct access to sh is obsolete, use sh_getinterp() instead 228 */ 229#if !defined(_SH_PRIVATE) && defined(__IMPORT__) && !defined(_BLD_shell) 230 extern __MANGLE__ __IMPORT__ Shell_t sh; 231#else 232 extern __MANGLE__ Shell_t sh; 233#endif 234 235#ifdef _DLL 236#undef __MANGLE__ 237#define __MANGLE__ __LINKAGE__ 238#endif /* _DLL */ 239 240#ifndef _SH_PRIVATE 241# define access(a,b) sh_access(a,b) 242# define close(a) sh_close(a) 243# define exit(a) sh_exit(a) 244# define fcntl(a,b,c) sh_fcntl(a,b,c) 245# define pipe(a) sh_pipe(a) 246# define read(a,b,c) sh_read(a,b,c) 247# define write(a,b,c) sh_write(a,b,c) 248# define umask(a) sh_umask(a) 249# define dup sh_dup 250# if _lib_lseek64 251# define open64 sh_open 252# define lseek64 sh_seek 253# else 254# define open sh_open 255# define lseek sh_seek 256# endif 257#endif /* !_SH_PRIVATE */ 258 259#define SH_SIGSET 4 260#define SH_EXITSIG 0400 /* signal exit bit */ 261#define SH_EXITMASK (SH_EXITSIG-1) /* normal exit status bits */ 262#define SH_RUNPROG -1022 /* needs to be negative and < 256 */ 263 264#endif /* SH_INTERACTIVE */ 265