da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1982-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef SH_INTERACTIVE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * David Korn
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Labs
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Interface definitions for shell command language
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#include <ast.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <cdt.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _SH_PRIVATE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# include "name.h"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# include <nval.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _SH_PRIVATE */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define SH_VERSION 20071012
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef NOT_USED
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define NOT_USED(x) (&x,1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* options */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long v[4];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinShopt_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintypedef struct Shell_s Shell_t;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintypedef void (*Shinit_f)(Shell_t*, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef int (*Shwait_f)(int, long, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunion Shnode_u;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef union Shnode_u Shnode_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_CFLAG 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_HISTORY 1 /* used also as a state */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_ERREXIT 2 /* used also as a state */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_VERBOSE 3 /* used also as a state */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_MONITOR 4 /* used also as a state */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_INTERACTIVE 5 /* used also as a state */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_RESTRICTED 6
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_XTRACE 7
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_KEYWORD 8
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_NOUNSET 9
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_NOGLOB 10
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_ALLEXPORT 11
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_PFSH 12
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_IGNOREEOF 13
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_NOCLOBBER 14
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_MARKDIRS 15
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_BGNICE 16
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_VI 17
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_VIRAW 18
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_TFLAG 19
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_TRACKALL 20
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SFLAG 21
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_NOEXEC 22
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_GMACS 24
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_EMACS 25
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_PRIVILEGED 26
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SUBSHARE 27 /* subshell shares state with parent */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_NOLOG 28
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_NOTIFY 29
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_DICTIONARY 30
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_PIPEFAIL 32
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_GLOBSTARS 33
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_XARGS 34
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_RC 35
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SHOWME 36
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * passed as flags to builtins in Nambltin_t struct when BLT_OPTIM is on
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_BEGIN_OPTIM 0x1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_END_OPTIM 0x2
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* The following type is used for error messages */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* error messages */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_defpath[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_found[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_nospace[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_format[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_number[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_restricted[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_recursive[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char e_version[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct sh_scope
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct sh_scope *par_scope;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int argc;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char **argv;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *cmdname;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *filename;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin char *funname;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int lineno;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t *var_tree;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct sh_scope *self;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Shscope_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Saves the state of the shell
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinstruct Shell_s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Shopt_t options; /* set -o options */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t *var_tree; /* for shell variables */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t *fun_tree; /* for shell functions */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t *alias_tree; /* for alias names */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Dt_t *bltin_tree; /* for builtin commands */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Shscope_t *topscope; /* pointer to top-level scope */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int inlineno; /* line number of current input file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int exitval; /* most recent exit value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned char trapnote; /* set when trap/signal is pending */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin char shcomp; /* set when runing shcomp */
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz short subshell; /* set for virtual subshell */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _SH_PRIVATE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _SH_PRIVATE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _SH_PRIVATE */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* flags for sh_parse */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_NL 1 /* Treat new-lines as ; */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_EOF 2 /* EOF causes syntax error */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* symbolic values for sh_iogetiop */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_IOCOPROCESS (-2)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_IOHISTFILE (-3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#include <cmd.h>
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* symbolic value for sh_fdnotify */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_FDCLOSE (-1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#undef getenv /* -lshell provides its own */
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__EXPORT__) && defined(_DLL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# ifdef _BLD_shell
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define extern __EXPORT__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# endif /* _BLD_shell */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _DLL */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Dt_t *sh_bltin_tree(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_subfork(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Shell_t *sh_init(int,char*[],Shinit_f);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_reinit(char*[]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_eval(Sfio_t*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_delay(double);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void *sh_parse(Shell_t*, Sfio_t*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_trap(const char*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_fun(Namval_t*,Namval_t*, char*[]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_funscope(int,char*[],int(*)(void*),void*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Sfio_t *sh_iogetiop(int,int);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern int sh_main(int, char*[], Shinit_f);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern int sh_run(int, char*[]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_menu(Sfio_t*, int, char*[]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Namval_t *sh_addbuiltin(const char*, int(*)(int, char*[],void*), void*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *sh_fmtq(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *sh_fmtqf(const char*, int, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Sfdouble_t sh_strnum(const char*, char**, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_access(const char*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_close(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_dup(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_exit(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_fcntl(int, int, ...);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Sfio_t *sh_fd2sfio(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int (*sh_fdnotify(int(*)(int,int)))(int,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Shell_t *sh_getinterp(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_open(const char*, int, ...);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_openmax(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Sfio_t *sh_pathopen(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern ssize_t sh_read(int, void*, size_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern ssize_t sh_write(int, const void*, size_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern off_t sh_seek(int, off_t, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_pipe(int[]);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern mode_t sh_umask(mode_t);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void *sh_waitnotify(Shwait_f);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Shscope_t *sh_getscope(int,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Shscope_t *sh_setscope(Shscope_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void sh_sigcheck(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern unsigned long sh_isoption(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern unsigned long sh_onoption(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern unsigned long sh_offoption(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_waitsafe(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int sh_exec(const Shnode_t*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if SHOPT_DYNAMIC
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void **sh_getliblist(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* SHOPT_DYNAMIC */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * direct access to sh is obsolete, use sh_getinterp() instead
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if !defined(_SH_PRIVATE) && defined(__IMPORT__) && !defined(_BLD_shell)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern __IMPORT__ Shell_t sh;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern Shell_t sh;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _DLL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# undef extern
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* _DLL */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef _SH_PRIVATE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define access(a,b) sh_access(a,b)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define close(a) sh_close(a)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define exit(a) sh_exit(a)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define fcntl(a,b,c) sh_fcntl(a,b,c)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define pipe(a) sh_pipe(a)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define read(a,b,c) sh_read(a,b,c)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define write(a,b,c) sh_write(a,b,c)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define umask(a) sh_umask(a)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define dup sh_dup
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# if _lib_lseek64
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define open64 sh_open
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define lseek64 sh_seek
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define open sh_open
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define lseek sh_seek
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* !_SH_PRIVATE */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_SIGSET 4
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_EXITSIG 0400 /* signal exit bit */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_EXITMASK (SH_EXITSIG-1) /* normal exit status bits */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SH_RUNPROG -1022 /* needs to be negative and < 256 */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* SH_INTERACTIVE */