17c2fbfb3SApril Chin /***********************************************************************
27c2fbfb3SApril Chin *                                                                      *
37c2fbfb3SApril Chin *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1985-2012 AT&T Intellectual Property          *
57c2fbfb3SApril Chin *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
77c2fbfb3SApril Chin *                    by AT&T Intellectual Property                     *
87c2fbfb3SApril Chin *                                                                      *
97c2fbfb3SApril Chin *                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)         *
127c2fbfb3SApril Chin *                                                                      *
137c2fbfb3SApril Chin *              Information and Software Systems Research               *
147c2fbfb3SApril Chin *                            AT&T Research                             *
157c2fbfb3SApril Chin *                           Florham Park NJ                            *
167c2fbfb3SApril Chin *                                                                      *
177c2fbfb3SApril Chin *                 Glenn Fowler <gsf@research.att.com>                  *
187c2fbfb3SApril Chin *                  David Korn <dgk@research.att.com>                   *
197c2fbfb3SApril Chin *                   Phong Vo <kpv@research.att.com>                    *
207c2fbfb3SApril Chin *                                                                      *
217c2fbfb3SApril Chin ***********************************************************************/
227c2fbfb3SApril Chin #pragma prototyped
237c2fbfb3SApril Chin 
247c2fbfb3SApril Chin /*
257c2fbfb3SApril Chin  * ksh builtin command api
267c2fbfb3SApril Chin  */
277c2fbfb3SApril Chin 
287c2fbfb3SApril Chin #ifndef _SHCMD_H
297c2fbfb3SApril Chin #define _SHCMD_H	1
307c2fbfb3SApril Chin 
31*b30d1939SAndy Fiddaman #ifndef AST_PLUGIN_VERSION
32*b30d1939SAndy Fiddaman #define AST_PLUGIN_VERSION(v)	(v)
33*b30d1939SAndy Fiddaman #endif
34*b30d1939SAndy Fiddaman #define SH_PLUGIN_VERSION	AST_PLUGIN_VERSION(20111111L)
35*b30d1939SAndy Fiddaman 
36*b30d1939SAndy Fiddaman #if __STDC__
37*b30d1939SAndy Fiddaman #define SHLIB(m)	unsigned long	plugin_version(void) { return SH_PLUGIN_VERSION; }
38*b30d1939SAndy Fiddaman #else
39*b30d1939SAndy Fiddaman #define SHLIB(m)	unsigned long	plugin_version() { return SH_PLUGIN_VERSION; }
40*b30d1939SAndy Fiddaman #endif
41*b30d1939SAndy Fiddaman 
427c2fbfb3SApril Chin #ifndef SH_VERSION
437c2fbfb3SApril Chin #   define Shell_t	void
447c2fbfb3SApril Chin #endif
457c2fbfb3SApril Chin #ifndef NV_DEFAULT
467c2fbfb3SApril Chin #   define Namval_t	void
477c2fbfb3SApril Chin #endif
487c2fbfb3SApril Chin 
49*b30d1939SAndy Fiddaman #undef Shbltin_t
50*b30d1939SAndy Fiddaman struct Shbltin_s;
51*b30d1939SAndy Fiddaman typedef struct Shbltin_s Shbltin_t;
52*b30d1939SAndy Fiddaman 
53*b30d1939SAndy Fiddaman #ifdef _SHTABLE_H /* pre-ksh93u+ -- obsolete */
547c2fbfb3SApril Chin typedef int (*Shbltin_f)(int, char**, void*);
55*b30d1939SAndy Fiddaman #else
56*b30d1939SAndy Fiddaman typedef int (*Shbltin_f)(int, char**, Shbltin_t*);
57*b30d1939SAndy Fiddaman #endif /* _SHTABLE_H */
587c2fbfb3SApril Chin 
59*b30d1939SAndy Fiddaman struct Shbltin_s
607c2fbfb3SApril Chin {
61*b30d1939SAndy Fiddaman 	Shell_t*	shp;
62*b30d1939SAndy Fiddaman 	void*		ptr;
637c2fbfb3SApril Chin 	int		version;
647c2fbfb3SApril Chin 	int		(*shrun)(int, char**);
657c2fbfb3SApril Chin 	int		(*shtrap)(const char*, int);
667c2fbfb3SApril Chin 	void		(*shexit)(int);
67*b30d1939SAndy Fiddaman 	Namval_t*	(*shbltin)(const char*, Shbltin_f, void*);
687c2fbfb3SApril Chin 	unsigned char	notify;
697c2fbfb3SApril Chin 	unsigned char	sigset;
707c2fbfb3SApril Chin 	unsigned char	nosfio;
71*b30d1939SAndy Fiddaman 	Namval_t*	bnode;
72*b30d1939SAndy Fiddaman 	Namval_t*	vnode;
73*b30d1939SAndy Fiddaman 	char*		data;
747c2fbfb3SApril Chin 	int		flags;
75*b30d1939SAndy Fiddaman 	char*		(*shgetenv)(const char*);
76*b30d1939SAndy Fiddaman 	char*		(*shsetenv)(const char*);
777c2fbfb3SApril Chin 	int		invariant;
78*b30d1939SAndy Fiddaman };
797c2fbfb3SApril Chin 
807c2fbfb3SApril Chin #if defined(SH_VERSION) ||  defined(_SH_PRIVATE)
817c2fbfb3SApril Chin #   undef Shell_t
827c2fbfb3SApril Chin #   undef Namval_t
837c2fbfb3SApril Chin #else
8434f9b3eeSRoland Mainz #   define sh_context(c)	((Shbltin_t*)(c))
8534f9b3eeSRoland Mainz #   define sh_run(c, ac, av)	((c)?(*sh_context(c)->shrun)(ac,av):-1)
8634f9b3eeSRoland Mainz #   define sh_system(c,str)	((c)?(*sh_context(c)->shtrap)(str,0):system(str))
8734f9b3eeSRoland Mainz #   define sh_exit(c,n)		((c)?(*sh_context(c)->shexit)(n):exit(n))
8834f9b3eeSRoland Mainz #   define sh_checksig(c)	((c) && sh_context(c)->sigset)
89*b30d1939SAndy Fiddaman #   define sh_builtin(c,n,f,p)	((c)?(*sh_context(c)->shbltin)(n,(Shbltin_f)(f),sh_context(p)):0)
907c2fbfb3SApril Chin #   if defined(SFIO_VERSION) || defined(_AST_H)
917c2fbfb3SApril Chin #	define LIB_INIT(c)
927c2fbfb3SApril Chin #   else
9334f9b3eeSRoland Mainz #	define LIB_INIT(c)	((c) && (sh_context(c)->nosfio = 1))
947c2fbfb3SApril Chin #   endif
957c2fbfb3SApril Chin #   ifndef _CMD_H
96*b30d1939SAndy Fiddaman #     ifndef ERROR_NOTIFY
97*b30d1939SAndy Fiddaman #       define ERROR_NOTIFY	1
98*b30d1939SAndy Fiddaman #     endif
99*b30d1939SAndy Fiddaman #     define cmdinit(ac,av,c,cat,flg)		do { if((ac)<=0) return(0); \
100*b30d1939SAndy Fiddaman 	(sh_context(c)->notify = ((flg)&ERROR_NOTIFY)?1:0);} while(0)
1017c2fbfb3SApril Chin #   endif
1027c2fbfb3SApril Chin #endif
1037c2fbfb3SApril Chin 
1047c2fbfb3SApril Chin #if _BLD_ast && defined(__EXPORT__)
1057c2fbfb3SApril Chin #define extern		__EXPORT__
1067c2fbfb3SApril Chin #endif
1077c2fbfb3SApril Chin 
1087c2fbfb3SApril Chin extern int		astintercept(Shbltin_t*, int);
1097c2fbfb3SApril Chin 
1107c2fbfb3SApril Chin #undef	extern
1117c2fbfb3SApril Chin 
1127c2fbfb3SApril Chin #endif
113