1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-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 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #pragma prototyped 23 24 /* 25 * ksh builtin command api 26 */ 27 28 #ifndef _SHCMD_H 29 #define _SHCMD_H 1 30 31 #ifndef AST_PLUGIN_VERSION 32 #define AST_PLUGIN_VERSION(v) (v) 33 #endif 34 #define SH_PLUGIN_VERSION AST_PLUGIN_VERSION(20111111L) 35 36 #if __STDC__ 37 #define SHLIB(m) unsigned long plugin_version(void) { return SH_PLUGIN_VERSION; } 38 #else 39 #define SHLIB(m) unsigned long plugin_version() { return SH_PLUGIN_VERSION; } 40 #endif 41 42 #ifndef SH_VERSION 43 # define Shell_t void 44 #endif 45 #ifndef NV_DEFAULT 46 # define Namval_t void 47 #endif 48 49 #undef Shbltin_t 50 struct Shbltin_s; 51 typedef struct Shbltin_s Shbltin_t; 52 53 #ifdef _SHTABLE_H /* pre-ksh93u+ -- obsolete */ 54 typedef int (*Shbltin_f)(int, char**, void*); 55 #else 56 typedef int (*Shbltin_f)(int, char**, Shbltin_t*); 57 #endif /* _SHTABLE_H */ 58 59 struct Shbltin_s 60 { 61 Shell_t* shp; 62 void* ptr; 63 int version; 64 int (*shrun)(int, char**); 65 int (*shtrap)(const char*, int); 66 void (*shexit)(int); 67 Namval_t* (*shbltin)(const char*, Shbltin_f, void*); 68 unsigned char notify; 69 unsigned char sigset; 70 unsigned char nosfio; 71 Namval_t* bnode; 72 Namval_t* vnode; 73 char* data; 74 int flags; 75 char* (*shgetenv)(const char*); 76 char* (*shsetenv)(const char*); 77 int invariant; 78 }; 79 80 #if defined(SH_VERSION) || defined(_SH_PRIVATE) 81 # undef Shell_t 82 # undef Namval_t 83 #else 84 # define sh_context(c) ((Shbltin_t*)(c)) 85 # define sh_run(c, ac, av) ((c)?(*sh_context(c)->shrun)(ac,av):-1) 86 # define sh_system(c,str) ((c)?(*sh_context(c)->shtrap)(str,0):system(str)) 87 # define sh_exit(c,n) ((c)?(*sh_context(c)->shexit)(n):exit(n)) 88 # define sh_checksig(c) ((c) && sh_context(c)->sigset) 89 # define sh_builtin(c,n,f,p) ((c)?(*sh_context(c)->shbltin)(n,(Shbltin_f)(f),sh_context(p)):0) 90 # if defined(SFIO_VERSION) || defined(_AST_H) 91 # define LIB_INIT(c) 92 # else 93 # define LIB_INIT(c) ((c) && (sh_context(c)->nosfio = 1)) 94 # endif 95 # ifndef _CMD_H 96 # ifndef ERROR_NOTIFY 97 # define ERROR_NOTIFY 1 98 # endif 99 # define cmdinit(ac,av,c,cat,flg) do { if((ac)<=0) return(0); \ 100 (sh_context(c)->notify = ((flg)&ERROR_NOTIFY)?1:0);} while(0) 101 # endif 102 #endif 103 104 #if _BLD_ast && defined(__EXPORT__) 105 #define extern __EXPORT__ 106 #endif 107 108 extern int astintercept(Shbltin_t*, int); 109 110 #undef extern 111 112 #endif 113