Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libtksh/include/tksh.h
1810 views
1
#pragma prototyped
2
#ifndef __TKSH_H_
3
#define __TKSH_H_
4
5
#include <ast/shell.h> /* X11 has Shell.h that clashes on case ignorant systems */
6
#include <tcl.h>
7
#include <errno.h>
8
9
/*
10
* The structure below defines a deletion callback, which is
11
* a procedure to invoke just before an interpreter is deleted.
12
*/
13
14
typedef struct DeleteCallback {
15
Tcl_InterpDeleteProc *proc; /* Procedure to call. */
16
ClientData clientData; /* Value to pass to procedure. */
17
struct DeleteCallback *nextPtr;
18
/* Next in list of callbacks for this
19
* interpreter (or NULL for end of list). */
20
} DeleteCallback;
21
22
typedef struct Interp {
23
24
/*
25
* Note: the first three fields must match exactly the fields in
26
* a Tcl_Interp struct (see tcl.h). If you change one, be sure to
27
* change the other.
28
*/
29
30
char *result; /* Points to result returned by last
31
* command. */
32
Tcl_FreeProc *freeProc; /* Zero means result is statically allocated.
33
* If non-zero, gives address of procedure
34
* to invoke to free the result. Must be
35
* freed by Tcl_Eval before executing next
36
* command. */
37
int errorLine; /* When TCL_ERROR is returned, this gives
38
* the line number within the command where
39
* the error occurred (1 means first line). */
40
Tcl_HashTable xxxcommandTable; /* Contains all of the commands currently
41
* registered in this interpreter. Indexed
42
* by strings; values have type (Command *). */
43
Tcl_HashTable mathFuncTable;/* Contains all of the math functions currently
44
* defined for the interpreter. Indexed by
45
* strings (function names); values have
46
* type (MathFunc *). */
47
48
/*
49
* Information related to procedures and variables. See tclProc.c
50
* and tclvar.c for usage.
51
*/
52
53
Tcl_HashTable xxxglobalTable; /* Contains all global variables for
54
* interpreter. */
55
#ifndef NO_TCL_INTERP
56
int numLevels; /* Keeps track of how many nested calls to
57
* Tcl_Eval are in progress for this
58
* interpreter. It's used to delay deletion
59
* of the table until all Tcl_Eval invocations
60
* are completed. */
61
int maxNestingDepth; /* If numLevels exceeds this value then Tcl
62
* assumes that infinite recursion has
63
* occurred and it generates an error. */
64
#endif
65
void * /* CallFrame */ xxxframePtr; /* Points to top-most in stack of all nested
66
* procedure invocations. NULL means there
67
* are no active procedures. */
68
void * /* CallFrame */ xxxvarFramePtr; /* Points to the call frame whose variables
69
* are currently in use (same as framePtr
70
* unless an "uplevel" command is being
71
* executed). NULL means no procedure is
72
* active or "uplevel 0" is being exec'ed. */
73
void * /* ActiveVarTrace */ xxxactiveTracePtr;
74
/* First in list of active traces for interp,
75
* or NULL if no active traces. */
76
77
int returnCode; /* Completion code to return if current
78
* procedure exits with a TCL_RETURN code. */
79
char *errorInfo; /* Value to store in errorInfo if returnCode
80
* is TCL_ERROR. Malloc'ed, may be NULL */
81
char *errorCode; /* Value to store in errorCode if returnCode
82
* is TCL_ERROR. Malloc'ed, may be NULL */
83
84
/*
85
* Information related to history:
86
*/
87
88
#ifdef TCL_CODE
89
int xxxnumEvents; /* Number of previously-executed commands
90
* to retain. */
91
#else
92
int interpType;
93
#endif
94
void * /*HistoryEvent */ xxxevents; /* Array containing numEvents entries
95
* (dynamically allocated). */
96
int xxxcurEvent; /* Index into events of place where current
97
* (or most recent) command is recorded. */
98
int xxxcurEventNum; /* Event number associated with the slot
99
* given by curEvent. */
100
void * /*HistoryRev */ xxxrevPtr; /* First in list of pending revisions. */
101
char *xxxhistoryFirst; /* First char. of current command executed
102
* from history module or NULL if none. */
103
int xxxrevDisables; /* 0 means history revision OK; > 0 gives
104
* a count of number of times revision has
105
* been disabled. */
106
char *xxxevalFirst; /* If TCL_RECORD_BOUNDS flag set, Tcl_Eval
107
* sets this field to point to the first
108
* char. of text from which the current
109
* command came. Otherwise Tcl_Eval sets
110
* this to NULL. */
111
char *xxxevalLast; /* Similar to evalFirst, except points to
112
* last character of current command. */
113
114
115
/*
116
* Information used by Tcl_AppendResult to keep track of partial
117
* results. See Tcl_AppendResult code for details.
118
*/
119
120
char *appendResult; /* Storage space for results generated
121
* by Tcl_AppendResult. Malloc-ed. NULL
122
* means not yet allocated. */
123
int appendAvl; /* Total amount of space available at
124
* partialResult. */
125
int appendUsed; /* Number of non-null bytes currently
126
* stored at partialResult. */
127
128
/*
129
* A cache of compiled regular expressions. See TclCompileRegexp
130
* in tclUtil.c for details.
131
*/
132
133
#define NUM_REGEXPS 5
134
char *xxxpatterns[NUM_REGEXPS];/* Strings corresponding to compiled
135
* regular expression patterns. NULL
136
* means that this slot isn't used.
137
* Malloc-ed. */
138
int xxxpatLengths[NUM_REGEXPS];/* Number of non-null characters in
139
* corresponding entry in patterns.
140
* -1 means entry isn't used. */
141
void * /* regexp */ xxxregexps[NUM_REGEXPS];
142
/* Compiled forms of above strings. Also
143
* malloc-ed, or NULL if not in use yet. */
144
145
146
/*
147
* Information used by Tcl_PrintDouble:
148
*/
149
150
char pdFormat[10]; /* Format string used by Tcl_PrintDouble. */
151
int pdPrec; /* Current precision (used to restore the
152
* the tcl_precision variable after a bogus
153
* value has been put into it). */
154
155
#ifndef NO_TCL_INTERP
156
157
/*
158
* Miscellaneous information:
159
*/
160
161
int cmdCount; /* Total number of times a command procedure
162
* has been called for this interpreter. */
163
int noEval; /* Non-zero means no commands should actually
164
* be executed: just parse only. Used in
165
* expressions when the result is already
166
* determined. */
167
int evalFlags; /* Flags to control next call to Tcl_Eval.
168
* Normally zero, but may be set before
169
* calling Tcl_Eval to an OR'ed combination
170
* of TCL_BRACKET_TERM and TCL_RECORD_BOUNDS. */
171
char *termPtr; /* Character just after the last one in
172
* a command. Set by Tcl_Eval before
173
* returning. */
174
char *scriptFile; /* NULL means there is no nested source
175
* command active; otherwise this points to
176
* the name of the file being sourced (it's
177
* not malloc-ed: it points to an argument
178
* to Tcl_EvalFile. */
179
int flags; /* Various flag bits. See below. */
180
void * /* Trace */ tracePtr; /* List of traces for this interpreter. */
181
DeleteCallback* deleteCallbackPtr;
182
/* First in list of callbacks to invoke when
183
* interpreter is deleted. */
184
185
#endif
186
/*
187
* Information about packages. Used only in tclPkg.c.
188
*/
189
190
Tcl_HashTable packageTable; /* Describes all of the packages loaded
191
* in or available to this interpreter.
192
* Keys are package names, values are
193
* (Package *) pointers. */
194
char *packageUnknown; /* Command to invoke during "package
195
* require" commands for packages that
196
* aren't described in packageTable.
197
* Malloc'ed, may be NULL. */
198
199
Tcl_HashTable *assocData; /* Hash table for associating data with
200
* this interpreter. Cleaned up when
201
* this interpreter is deleted. */
202
203
void* shbltin; /* shell (Shbltin_t*) */
204
205
char resultSpace[TCL_RESULT_SIZE+1];
206
/* Static space for storing small results. */
207
} Interp;
208
209
/*
210
* Flag bits for Interp structures:
211
*
212
* DELETED: Non-zero means the interpreter has been deleted:
213
* don't process any more commands for it, and destroy
214
* the structure as soon as all nested invocations of
215
* Tcl_Eval are done.
216
* ERR_IN_PROGRESS: Non-zero means an error unwind is already in progress.
217
* Zero means a command proc has been invoked since last
218
* error occured.
219
* ERR_ALREADY_LOGGED: Non-zero means information has already been logged
220
* in $errorInfo for the current Tcl_Eval instance,
221
* so Tcl_Eval needn't log it (used to implement the
222
* "error message log" command).
223
* ERROR_CODE_SET: Non-zero means that Tcl_SetErrorCode has been
224
* called to record information for the current
225
* error. Zero means Tcl_Eval must clear the
226
* errorCode variable if an error is returned.
227
*/
228
229
#define DELETED 1
230
#define ERR_IN_PROGRESS 2
231
#define ERR_ALREADY_LOGGED 4
232
#define ERROR_CODE_SET 8
233
234
#define INTERP_KSH 0
235
#define INTERP_TCL 1
236
#define INTERP_MASK 3
237
#define INTERP_CURRENT 2
238
239
#define TKSH_TRACE_RUNNING 0x400 /* Set when trace is running */
240
#define COMMAND_ACTIVE 4 /* Used in commandType field */
241
#define NV_FUNC (NV_NOADD | NV_NOASSIGN)
242
243
#ifndef LIB_DIR_ENV
244
#define LIB_DIR_ENV "TKSH_LIBRARY"
245
#endif
246
247
#ifndef LIB_DIR
248
#define LIB_DIR "lib/tksh7.6"
249
#endif
250
251
#define SPLIT_CMD_NAME "_tksh_split_list"
252
253
typedef struct TkshArrayInfo
254
{
255
ClientData clientData;
256
} TkshArrayInfo;
257
258
typedef struct TkshCommandData
259
{
260
Tcl_Interp *interp;
261
Tcl_CmdInfo info;
262
char commandType;
263
} TkshCommandData;
264
265
#define Tksh_MapReturn(i) ((((i) >= 0) && ((i) <= TCL_CONTINUE)) ? (i) \
266
: TCL_ERROR)
267
#define Tksh_ReturnVal() (Tksh_MapReturn(sh.exitval))
268
#define Tksh_OkOrErr() ((sh.exitval == 0) ? TCL_OK : TCL_ERROR)
269
#define Tksh_InterpString(i) (((i)==INTERP_TCL)? "tcl": (((i)==INTERP_KSH) \
270
? "ksh" : "either"))
271
272
#define Tksh_BeginBlock(interp, kind) do { int oldInterp = ((Interp *)interp)->interpType; ((Interp *)interp)->interpType = kind
273
#define Tksh_EndBlock(interp) ((Interp *)interp)->interpType = oldInterp; } while(0)
274
275
#if _BLD_tcl && defined(__EXPORT__)
276
#define extern __EXPORT__
277
#endif
278
279
extern void TkshDeleteSearches(TkshArrayInfo *);
280
extern TkshArrayInfo* TkshArrayData(Namval_t *namval);
281
extern void TkshTracesOff(void);
282
283
extern int tksh_waitevent(int, long, int);
284
extern int nv_getlevel(void);
285
286
extern int Tksh_Eval(Tcl_Interp *interp, char *cmd, int flag);
287
extern int Tksh_SetCommandType(Tcl_Interp *, char *, int tp);
288
extern int Tksh_Init(Tcl_Interp *interp);
289
extern char* Tksh_ConvertList(Tcl_Interp *interp, char *lst, int to);
290
extern void TkshCreateInterp(Tcl_Interp *interp, void *data);
291
extern void TkshSubShell(void);
292
extern int Tksh_CreatePipeline(Tcl_Interp*, int, char**, Tcl_DString*);
293
294
extern int b_print(int argc, char *argv[], Shbltin_t *);
295
extern int b_tclinit(int argc, char *argv[], Shbltin_t *);
296
extern int b_tkinit(int argc, char *argv[], Shbltin_t *);
297
298
#undef extern
299
300
#endif /* __TKSH_H_ */
301
302