]> git.zerfleddert.de Git - micropolis/blob - src/tcl/tcl.h
Import Micropolis from http://www.donhopkins.com/home/micropolis/
[micropolis] / src / tcl / tcl.h
1 /*
2 * tcl.h --
3 *
4 * This header file describes the externally-visible facilities
5 * of the Tcl interpreter.
6 *
7 * Copyright 1987-1991 Regents of the University of California
8 * Permission to use, copy, modify, and distribute this
9 * software and its documentation for any purpose and without
10 * fee is hereby granted, provided that the above copyright
11 * notice appear in all copies. The University of California
12 * makes no representations about the suitability of this
13 * software for any purpose. It is provided "as is" without
14 * express or implied warranty.
15 *
16 * $Header: /user6/ouster/tcl/RCS/tcl.h,v 1.84 92/08/07 08:21:34 ouster Exp $ SPRITE (Berkeley)
17 */
18
19 #ifndef _TCL
20 #define _TCL
21
22 #define TCL_VERSION "6.4"
23
24 /*
25 * Definitions that allow this header file to be used either with or
26 * without ANSI C features like function prototypes.
27 */
28
29 #undef _ANSI_ARGS_
30 #undef const
31 #if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus)
32 # define _ANSI_ARGS_(x) x
33 # define CONST const
34 # ifdef __cplusplus
35 # define VARARGS (...)
36 # else
37 # define VARARGS ()
38 # endif
39 #else
40 # define _ANSI_ARGS_(x) ()
41 # define CONST
42 #endif
43
44 #ifdef __cplusplus
45 # define EXTERN extern "C"
46 #else
47 # define EXTERN extern
48 #endif
49
50 /*
51 * Miscellaneous declarations (to allow Tcl to be used stand-alone,
52 * without the rest of Sprite).
53 */
54
55 #ifndef NULL
56 #define NULL 0
57 #endif
58
59 #ifndef _CLIENTDATA
60 typedef int *ClientData;
61 #define _CLIENTDATA
62 #endif
63
64 /*
65 * Data structures defined opaquely in this module. The definitions
66 * below just provide dummy types. A few fields are made visible in
67 * Tcl_Interp structures, namely those for returning string values.
68 * Note: any change to the Tcl_Interp definition below must be mirrored
69 * in the "real" definition in tclInt.h.
70 */
71
72 typedef struct Tcl_Interp{
73 char *result; /* Points to result string returned by last
74 * command. */
75 void (*freeProc) _ANSI_ARGS_((char *blockPtr));
76 /* Zero means result is statically allocated.
77 * If non-zero, gives address of procedure
78 * to invoke to free the result. Must be
79 * freed by Tcl_Eval before executing next
80 * command. */
81 int errorLine; /* When TCL_ERROR is returned, this gives
82 * the line number within the command where
83 * the error occurred (1 means first line). */
84 } Tcl_Interp;
85
86 typedef int *Tcl_Trace;
87 typedef int *Tcl_CmdBuf;
88
89 /*
90 * When a TCL command returns, the string pointer interp->result points to
91 * a string containing return information from the command. In addition,
92 * the command procedure returns an integer value, which is one of the
93 * following:
94 *
95 * TCL_OK Command completed normally; interp->result contains
96 * the command's result.
97 * TCL_ERROR The command couldn't be completed successfully;
98 * interp->result describes what went wrong.
99 * TCL_RETURN The command requests that the current procedure
100 * return; interp->result contains the procedure's
101 * return value.
102 * TCL_BREAK The command requests that the innermost loop
103 * be exited; interp->result is meaningless.
104 * TCL_CONTINUE Go on to the next iteration of the current loop;
105 * interp->result is meaninless.
106 */
107
108 #define TCL_OK 0
109 #define TCL_ERROR 1
110 #define TCL_RETURN 2
111 #define TCL_BREAK 3
112 #define TCL_CONTINUE 4
113
114 #define TCL_RESULT_SIZE 199
115
116 /*
117 * Procedure types defined by Tcl:
118 */
119
120 typedef void (Tcl_CmdDeleteProc) _ANSI_ARGS_((ClientData clientData));
121 typedef int (Tcl_CmdProc) _ANSI_ARGS_((ClientData clientData,
122 Tcl_Interp *interp, int argc, char *argv[]));
123 typedef void (Tcl_CmdTraceProc) _ANSI_ARGS_((ClientData clientData,
124 Tcl_Interp *interp, int level, char *command, Tcl_CmdProc *proc,
125 ClientData cmdClientData, int argc, char *argv[]));
126 typedef void (Tcl_FreeProc) _ANSI_ARGS_((char *blockPtr));
127 typedef char *(Tcl_VarTraceProc) _ANSI_ARGS_((ClientData clientData,
128 Tcl_Interp *interp, char *name1, char *name2, int flags));
129
130 /*
131 * Flag values passed to Tcl_Eval (see the man page for details; also
132 * see tclInt.h for additional flags that are only used internally by
133 * Tcl):
134 */
135
136 #define TCL_BRACKET_TERM 1
137
138 /*
139 * Flag that may be passed to Tcl_ConvertElement to force it not to
140 * output braces (careful! if you change this flag be sure to change
141 * the definitions at the front of tclUtil.c).
142 */
143
144 #define TCL_DONT_USE_BRACES 1
145
146 /*
147 * Flag value passed to Tcl_RecordAndEval to request no evaluation
148 * (record only).
149 */
150
151 #define TCL_NO_EVAL -1
152
153 /*
154 * Specil freeProc values that may be passed to Tcl_SetResult (see
155 * the man page for details):
156 */
157
158 #define TCL_VOLATILE ((Tcl_FreeProc *) -1)
159 #define TCL_STATIC ((Tcl_FreeProc *) 0)
160 #define TCL_DYNAMIC ((Tcl_FreeProc *) free)
161
162 /*
163 * Flag values passed to variable-related procedures.
164 */
165
166 #define TCL_GLOBAL_ONLY 1
167 #define TCL_APPEND_VALUE 2
168 #define TCL_LIST_ELEMENT 4
169 #define TCL_NO_SPACE 8
170 #define TCL_TRACE_READS 0x10
171 #define TCL_TRACE_WRITES 0x20
172 #define TCL_TRACE_UNSETS 0x40
173 #define TCL_TRACE_DESTROYED 0x80
174 #define TCL_INTERP_DESTROYED 0x100
175 #define TCL_LEAVE_ERR_MSG 0x200
176
177 /*
178 * Additional flag passed back to variable watchers. This flag must
179 * not overlap any of the TCL_TRACE_* flags defined above or the
180 * TRACE_* flags defined in tclInt.h.
181 */
182
183 #define TCL_VARIABLE_UNDEFINED 8
184
185 /*
186 * The following declarations either map ckalloc and ckfree to
187 * malloc and free, or they map them to procedures with all sorts
188 * of debugging hooks defined in tclCkalloc.c.
189 */
190
191 #ifdef TCL_MEM_DEBUG
192
193 EXTERN char * Tcl_DbCkalloc _ANSI_ARGS_((unsigned int size,
194 char *file, int line));
195 EXTERN int Tcl_DbCkfree _ANSI_ARGS_((char *ptr,
196 char *file, int line));
197 # define ckalloc(x) Tcl_DbCkalloc(x, __FILE__, __LINE__)
198 # define ckfree(x) Tcl_DbCkfree(x, __FILE__, __LINE__)
199
200 #else
201
202 # define ckalloc(x) malloc(x)
203 # define ckfree(x) free(x)
204
205 #endif /* TCL_MEM_DEBUG */
206
207 /*
208 * Macro to free up result of interpreter.
209 */
210
211 #define Tcl_FreeResult(interp) \
212 if ((interp)->freeProc != 0) { \
213 if ((interp)->freeProc == (Tcl_FreeProc *) free) { \
214 ckfree((interp)->result); \
215 } else { \
216 (*(interp)->freeProc)((interp)->result); \
217 } \
218 (interp)->freeProc = 0; \
219 }
220
221 /*
222 * Exported Tcl procedures:
223 */
224
225 EXTERN void Tcl_AppendElement _ANSI_ARGS_((Tcl_Interp *interp,
226 char *string, int noSep));
227 EXTERN void Tcl_AppendResult _ANSI_ARGS_((Tcl_Interp *interp, ...));
228 EXTERN char * Tcl_AssembleCmd _ANSI_ARGS_((Tcl_CmdBuf buffer,
229 char *string));
230 EXTERN void Tcl_AddErrorInfo _ANSI_ARGS_((Tcl_Interp *interp,
231 char *message));
232 EXTERN char Tcl_Backslash _ANSI_ARGS_((char *src,
233 int *readPtr));
234 EXTERN char * Tcl_Concat _ANSI_ARGS_((int argc, char **argv));
235 EXTERN int Tcl_ConvertElement _ANSI_ARGS_((char *src,
236 char *dst, int flags));
237 EXTERN Tcl_CmdBuf Tcl_CreateCmdBuf _ANSI_ARGS_((void));
238 EXTERN void Tcl_CreateCommand _ANSI_ARGS_((Tcl_Interp *interp,
239 char *cmdName, Tcl_CmdProc *proc,
240 ClientData clientData,
241 Tcl_CmdDeleteProc *deleteProc));
242 EXTERN Tcl_Interp * Tcl_CreateInterp _ANSI_ARGS_((void));
243 EXTERN int Tcl_CreatePipeline _ANSI_ARGS_((Tcl_Interp *interp,
244 int argc, char **argv, int **pidArrayPtr,
245 int *inPipePtr, int *outPipePtr,
246 int *errFilePtr));
247 EXTERN Tcl_Trace Tcl_CreateTrace _ANSI_ARGS_((Tcl_Interp *interp,
248 int level, Tcl_CmdTraceProc *proc,
249 ClientData clientData));
250 EXTERN void Tcl_DeleteCmdBuf _ANSI_ARGS_((Tcl_CmdBuf buffer));
251 EXTERN int Tcl_DeleteCommand _ANSI_ARGS_((Tcl_Interp *interp,
252 char *cmdName));
253 EXTERN void Tcl_DeleteInterp _ANSI_ARGS_((Tcl_Interp *interp));
254 EXTERN void Tcl_DeleteTrace _ANSI_ARGS_((Tcl_Interp *interp,
255 Tcl_Trace trace));
256 EXTERN void Tcl_DetachPids _ANSI_ARGS_((int numPids, int *pidPtr));
257 EXTERN int Tcl_DumpActiveMemory _ANSI_ARGS_((char *fileName));
258 EXTERN char * Tcl_ErrnoId _ANSI_ARGS_((void));
259 EXTERN int Tcl_Eval _ANSI_ARGS_((Tcl_Interp *interp, char *cmd,
260 int flags, char **termPtr));
261 EXTERN int Tcl_EvalFile _ANSI_ARGS_((Tcl_Interp *interp,
262 char *fileName));
263 EXTERN int Tcl_ExprBoolean _ANSI_ARGS_((Tcl_Interp *interp,
264 char *string, int *ptr));
265 EXTERN int Tcl_ExprDouble _ANSI_ARGS_((Tcl_Interp *interp,
266 char *string, double *ptr));
267 EXTERN int Tcl_ExprLong _ANSI_ARGS_((Tcl_Interp *interp,
268 char *string, long *ptr));
269 EXTERN int Tcl_ExprString _ANSI_ARGS_((Tcl_Interp *interp,
270 char *string));
271 EXTERN int Tcl_Fork _ANSI_ARGS_((void));
272 EXTERN int Tcl_GetBoolean _ANSI_ARGS_((Tcl_Interp *interp,
273 char *string, int *boolPtr));
274 EXTERN int Tcl_GetDouble _ANSI_ARGS_((Tcl_Interp *interp,
275 char *string, double *doublePtr));
276 EXTERN int Tcl_GetInt _ANSI_ARGS_((Tcl_Interp *interp,
277 char *string, int *intPtr));
278 EXTERN char * Tcl_GetVar _ANSI_ARGS_((Tcl_Interp *interp,
279 char *varName, int flags));
280 EXTERN char * Tcl_GetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
281 char *name1, char *name2, int flags));
282 EXTERN int Tcl_GlobalEval _ANSI_ARGS_((Tcl_Interp *interp,
283 char *command));
284 EXTERN void Tcl_InitHistory _ANSI_ARGS_((Tcl_Interp *interp));
285 EXTERN void Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp *interp));
286 EXTERN char * Tcl_Merge _ANSI_ARGS_((int argc, char **argv));
287 EXTERN char * Tcl_ParseVar _ANSI_ARGS_((Tcl_Interp *interp,
288 char *string, char **termPtr));
289 EXTERN int Tcl_RecordAndEval _ANSI_ARGS_((Tcl_Interp *interp,
290 char *cmd, int flags));
291 EXTERN void Tcl_ResetResult _ANSI_ARGS_((Tcl_Interp *interp));
292 #define Tcl_Return Tcl_SetResult
293 EXTERN int Tcl_ScanElement _ANSI_ARGS_((char *string,
294 int *flagPtr));
295 EXTERN void Tcl_SetErrorCode _ANSI_ARGS_((Tcl_Interp *interp, ...));
296 EXTERN void Tcl_SetResult _ANSI_ARGS_((Tcl_Interp *interp,
297 char *string, Tcl_FreeProc *freeProc));
298 EXTERN char * Tcl_SetVar _ANSI_ARGS_((Tcl_Interp *interp,
299 char *varName, char *newValue, int flags));
300 EXTERN char * Tcl_SetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
301 char *name1, char *name2, char *newValue,
302 int flags));
303 EXTERN char * Tcl_SignalId _ANSI_ARGS_((int sig));
304 EXTERN char * Tcl_SignalMsg _ANSI_ARGS_((int sig));
305 EXTERN int Tcl_SplitList _ANSI_ARGS_((Tcl_Interp *interp,
306 char *list, int *argcPtr, char ***argvPtr));
307 EXTERN int Tcl_StringMatch _ANSI_ARGS_((char *string,
308 char *pattern));
309 EXTERN char * Tcl_TildeSubst _ANSI_ARGS_((Tcl_Interp *interp,
310 char *name));
311 EXTERN int Tcl_TraceVar _ANSI_ARGS_((Tcl_Interp *interp,
312 char *varName, int flags, Tcl_VarTraceProc *proc,
313 ClientData clientData));
314 EXTERN int Tcl_TraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
315 char *name1, char *name2, int flags,
316 Tcl_VarTraceProc *proc, ClientData clientData));
317 EXTERN char * Tcl_UnixError _ANSI_ARGS_((Tcl_Interp *interp));
318 EXTERN int Tcl_UnsetVar _ANSI_ARGS_((Tcl_Interp *interp,
319 char *varName, int flags));
320 EXTERN int Tcl_UnsetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
321 char *name1, char *name2, int flags));
322 EXTERN void Tcl_UntraceVar _ANSI_ARGS_((Tcl_Interp *interp,
323 char *varName, int flags, Tcl_VarTraceProc *proc,
324 ClientData clientData));
325 EXTERN void Tcl_UntraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
326 char *name1, char *name2, int flags,
327 Tcl_VarTraceProc *proc, ClientData clientData));
328 EXTERN int Tcl_VarEval _ANSI_ARGS_((Tcl_Interp *interp, ...));
329 EXTERN ClientData Tcl_VarTraceInfo _ANSI_ARGS_((Tcl_Interp *interp,
330 char *varName, int flags,
331 Tcl_VarTraceProc *procPtr,
332 ClientData prevClientData));
333 EXTERN ClientData Tcl_VarTraceInfo2 _ANSI_ARGS_((Tcl_Interp *interp,
334 char *name1, char *name2, int flags,
335 Tcl_VarTraceProc *procPtr,
336 ClientData prevClientData));
337 EXTERN int Tcl_WaitPids _ANSI_ARGS_((int numPids, int *pidPtr,
338 int *statusPtr));
339
340 #endif /* _TCL */
Impressum, Datenschutz