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