Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/include/shcmd.h
1810 views
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 <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
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
114