]>
Commit | Line | Data |
---|---|---|
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 */ |