4 * This header file describes the externally-visible facilities
5 * of the Tcl interpreter.
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.
16 * $Header: /user6/ouster/tcl/RCS/tcl.h,v 1.84 92/08/07 08:21:34 ouster Exp $ SPRITE (Berkeley)
22 #define TCL_VERSION "6.4"
25 * Definitions that allow this header file to be used either with or
26 * without ANSI C features like function prototypes.
31 #if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus)
32 # define _ANSI_ARGS_(x) x
35 # define VARARGS (...)
40 # define _ANSI_ARGS_(x) ()
45 # define EXTERN extern "C"
47 # define EXTERN extern
51 * Miscellaneous declarations (to allow Tcl to be used stand-alone,
52 * without the rest of Sprite).
60 typedef int *ClientData
;
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.
72 typedef struct Tcl_Interp
{
73 char *result
; /* Points to result string returned by last
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
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). */
86 typedef int *Tcl_Trace
;
87 typedef int *Tcl_CmdBuf
;
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
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
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.
112 #define TCL_CONTINUE 4
114 #define TCL_RESULT_SIZE 199
117 * Procedure types defined by Tcl:
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
));
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
136 #define TCL_BRACKET_TERM 1
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).
144 #define TCL_DONT_USE_BRACES 1
147 * Flag value passed to Tcl_RecordAndEval to request no evaluation
151 #define TCL_NO_EVAL -1
154 * Specil freeProc values that may be passed to Tcl_SetResult (see
155 * the man page for details):
158 #define TCL_VOLATILE ((Tcl_FreeProc *) -1)
159 #define TCL_STATIC ((Tcl_FreeProc *) 0)
160 #define TCL_DYNAMIC ((Tcl_FreeProc *) free)
163 * Flag values passed to variable-related procedures.
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
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.
183 #define TCL_VARIABLE_UNDEFINED 8
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.
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__)
202 # define ckalloc(x) malloc(x)
203 # define ckfree(x) free(x)
205 #endif /* TCL_MEM_DEBUG */
208 * Macro to free up result of interpreter.
211 #define Tcl_FreeResult(interp) \
212 if ((interp)->freeProc != 0) { \
213 if ((interp)->freeProc == (Tcl_FreeProc *) free) { \
214 ckfree((interp)->result); \
216 (*(interp)->freeProc)((interp)->result); \
218 (interp)->freeProc = 0; \
222 * Exported Tcl procedures:
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
,
230 EXTERN
void Tcl_AddErrorInfo
_ANSI_ARGS_((Tcl_Interp
*interp
,
232 EXTERN
char Tcl_Backslash
_ANSI_ARGS_((char *src
,
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
,
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
,
253 EXTERN
void Tcl_DeleteInterp
_ANSI_ARGS_((Tcl_Interp
*interp
));
254 EXTERN
void Tcl_DeleteTrace
_ANSI_ARGS_((Tcl_Interp
*interp
,
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
,
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
,
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
,
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
,
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
,
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
,
309 EXTERN
char * Tcl_TildeSubst
_ANSI_ARGS_((Tcl_Interp
*interp
,
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
,