Initial revision
[catagits/fcgi2.git] / include / tcl.h
1 /*
2  * tcl.h --
3  *
4  *      This header file describes the externally-visible facilities
5  *      of the Tcl interpreter.
6  *
7  * Copyright (c) 1987-1994 The Regents of the University of California.
8  * Copyright (c) 1994-1995 Sun Microsystems, Inc.
9  *
10  * This software is copyrighted by the Regents of the University of
11  * California, Sun Microsystems, Inc., and other parties.  The following
12  * terms apply to all files associated with the software unless explicitly
13  * disclaimed in individual files.
14  *
15  * The authors hereby grant permission to use, copy, modify, distribute,
16  * and license this software and its documentation for any purpose, provided
17  * that existing copyright notices are retained in all copies and that this
18  * notice is included verbatim in any distributions. No written agreement,
19  * license, or royalty fee is required for any of the authorized uses.
20  * Modifications to this software may be copyrighted by their authors
21  * and need not follow the licensing terms described here, provided that
22  * the new terms are clearly indicated on the first page of each file where
23  * they apply.
24  * 
25  * IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
26  * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
27  * ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
28  * DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  * 
31  * THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
32  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
33  * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
34  * IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
35  * NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
36  * MODIFICATIONS.
37  * 
38  * RESTRICTED RIGHTS: Use, duplication or disclosure by the government
39  * is subject to the restrictions as set forth in subparagraph (c) (1) (ii)
40  * of the Rights in Technical Data and Computer Software Clause as DFARS
41  * 252.227-7013 and FAR 52.227-19.
42  *
43  * $Id: tcl.h,v 1.1 1997/09/16 15:36:32 stanleyg Exp $
44  *
45  * @(#) tcl.h 1.153 95/06/27 15:42:31
46  */
47
48 #ifndef _TCL
49 #define _TCL
50
51 #ifndef BUFSIZ
52 #include <stdio.h>
53 #endif
54
55 #define TCL_VERSION "7.4"
56 #define TCL_MAJOR_VERSION 7
57 #define TCL_MINOR_VERSION 4
58
59 /*
60  * Definitions that allow this header file to be used either with or
61  * without ANSI C features like function prototypes.
62  */
63
64 #undef _ANSI_ARGS_
65 #undef CONST
66 #if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus)
67 #   define _USING_PROTOTYPES_ 1
68 #   define _ANSI_ARGS_(x)       x
69 #   define CONST const
70 #   ifdef __cplusplus
71 #       define VARARGS(first) (first, ...)
72 #   else
73 #       define VARARGS(first) ()
74 #   endif
75 #else
76 #   define _ANSI_ARGS_(x)       ()
77 #   define CONST
78 #endif
79
80 #ifdef __cplusplus
81 #   define EXTERN extern "C"
82 #else
83 #   define EXTERN extern
84 #endif
85
86 /*
87  * Macro to use instead of "void" for arguments that must have
88  * type "void *" in ANSI C;  maps them to type "char *" in
89  * non-ANSI systems.
90  */
91
92 #ifndef VOID
93 #   ifdef __STDC__
94 #       define VOID void
95 #   else
96 #       define VOID char
97 #   endif
98 #endif
99
100 /*
101  * Miscellaneous declarations (to allow Tcl to be used stand-alone,
102  * without the rest of Sprite).
103  */
104
105 #ifndef NULL
106 #define NULL 0
107 #endif
108
109 #ifndef _CLIENTDATA
110 #   if defined(__STDC__) || defined(__cplusplus)
111     typedef void *ClientData;
112 #   else
113     typedef int *ClientData;
114 #   endif /* __STDC__ */
115 #define _CLIENTDATA
116 #endif
117
118 /*
119  * Data structures defined opaquely in this module.  The definitions
120  * below just provide dummy types.  A few fields are made visible in
121  * Tcl_Interp structures, namely those for returning string values.
122  * Note:  any change to the Tcl_Interp definition below must be mirrored
123  * in the "real" definition in tclInt.h.
124  */
125
126 typedef struct Tcl_Interp{
127     char *result;               /* Points to result string returned by last
128                                  * command. */
129     void (*freeProc) _ANSI_ARGS_((char *blockPtr));
130                                 /* Zero means result is statically allocated.
131                                  * If non-zero, gives address of procedure
132                                  * to invoke to free the result.  Must be
133                                  * freed by Tcl_Eval before executing next
134                                  * command. */
135     int errorLine;              /* When TCL_ERROR is returned, this gives
136                                  * the line number within the command where
137                                  * the error occurred (1 means first line). */
138 } Tcl_Interp;
139
140 typedef int *Tcl_Trace;
141 typedef int *Tcl_Command;
142 typedef struct Tcl_AsyncHandler_ *Tcl_AsyncHandler;
143 typedef struct Tcl_RegExp_ *Tcl_RegExp;
144
145 /*
146  * When a TCL command returns, the string pointer interp->result points to
147  * a string containing return information from the command.  In addition,
148  * the command procedure returns an integer value, which is one of the
149  * following:
150  *
151  * TCL_OK               Command completed normally;  interp->result contains
152  *                      the command's result.
153  * TCL_ERROR            The command couldn't be completed successfully;
154  *                      interp->result describes what went wrong.
155  * TCL_RETURN           The command requests that the current procedure
156  *                      return;  interp->result contains the procedure's
157  *                      return value.
158  * TCL_BREAK            The command requests that the innermost loop
159  *                      be exited;  interp->result is meaningless.
160  * TCL_CONTINUE         Go on to the next iteration of the current loop;
161  *                      interp->result is meaningless.
162  */
163
164 #define TCL_OK          0
165 #define TCL_ERROR       1
166 #define TCL_RETURN      2
167 #define TCL_BREAK       3
168 #define TCL_CONTINUE    4
169
170 #define TCL_RESULT_SIZE 200
171
172 /*
173  * Argument descriptors for math function callbacks in expressions:
174  */
175
176 typedef enum {TCL_INT, TCL_DOUBLE, TCL_EITHER} Tcl_ValueType;
177 typedef struct Tcl_Value {
178     Tcl_ValueType type;         /* Indicates intValue or doubleValue is
179                                  * valid, or both. */
180     long intValue;              /* Integer value. */
181     double doubleValue;         /* Double-precision floating value. */
182 } Tcl_Value;
183
184 /*
185  * Procedure types defined by Tcl:
186  */
187
188 typedef int (Tcl_AppInitProc) _ANSI_ARGS_((Tcl_Interp *interp));
189 typedef int (Tcl_AsyncProc) _ANSI_ARGS_((ClientData clientData,
190         Tcl_Interp *interp, int code));
191 typedef void (Tcl_CmdDeleteProc) _ANSI_ARGS_((ClientData clientData));
192 typedef int (Tcl_CmdProc) _ANSI_ARGS_((ClientData clientData,
193         Tcl_Interp *interp, int argc, char *argv[]));
194 typedef void (Tcl_CmdTraceProc) _ANSI_ARGS_((ClientData clientData,
195         Tcl_Interp *interp, int level, char *command, Tcl_CmdProc *proc,
196         ClientData cmdClientData, int argc, char *argv[]));
197 typedef void (Tcl_FreeProc) _ANSI_ARGS_((char *blockPtr));
198 typedef void (Tcl_InterpDeleteProc) _ANSI_ARGS_((ClientData clientData,
199         Tcl_Interp *interp));
200 typedef int (Tcl_MathProc) _ANSI_ARGS_((ClientData clientData,
201         Tcl_Interp *interp, Tcl_Value *args, Tcl_Value *resultPtr));
202 typedef char *(Tcl_VarTraceProc) _ANSI_ARGS_((ClientData clientData,
203         Tcl_Interp *interp, char *part1, char *part2, int flags));
204
205 /*
206  * The structure returned by Tcl_GetCmdInfo and passed into
207  * Tcl_SetCmdInfo:
208  */
209
210 typedef struct Tcl_CmdInfo {
211     Tcl_CmdProc *proc;                  /* Procedure that implements command. */
212     ClientData clientData;              /* ClientData passed to proc. */
213     Tcl_CmdDeleteProc *deleteProc;      /* Procedure to call when command
214                                          * is deleted. */
215     ClientData deleteData;              /* Value to pass to deleteProc (usually
216                                          * the same as clientData). */
217 } Tcl_CmdInfo;
218
219 /*
220  * The structure defined below is used to hold dynamic strings.  The only
221  * field that clients should use is the string field, and they should
222  * never modify it.
223  */
224
225 #define TCL_DSTRING_STATIC_SIZE 200
226 typedef struct Tcl_DString {
227     char *string;               /* Points to beginning of string:  either
228                                  * staticSpace below or a malloc'ed array. */
229     int length;                 /* Number of non-NULL characters in the
230                                  * string. */
231     int spaceAvl;               /* Total number of bytes available for the
232                                  * string and its terminating NULL char. */
233     char staticSpace[TCL_DSTRING_STATIC_SIZE];
234                                 /* Space to use in common case where string
235                                  * is small. */
236 } Tcl_DString;
237
238 #define Tcl_DStringLength(dsPtr) ((dsPtr)->length)
239 #define Tcl_DStringValue(dsPtr) ((dsPtr)->string)
240 #define Tcl_DStringTrunc Tcl_DStringSetLength
241
242 /*
243  * Definitions for the maximum number of digits of precision that may
244  * be specified in the "tcl_precision" variable, and the number of
245  * characters of buffer space required by Tcl_PrintDouble.
246  */
247
248 #define TCL_MAX_PREC 17
249 #define TCL_DOUBLE_SPACE (TCL_MAX_PREC+10)
250
251 /*
252  * Flag that may be passed to Tcl_ConvertElement to force it not to
253  * output braces (careful!  if you change this flag be sure to change
254  * the definitions at the front of tclUtil.c).
255  */
256
257 #define TCL_DONT_USE_BRACES     1
258
259 /*
260  * Flag values passed to Tcl_RecordAndEval.
261  * WARNING: these bit choices must not conflict with the bit choices
262  * for evalFlag bits in tclInt.h!!
263  */
264
265 #define TCL_NO_EVAL             0x10000
266 #define TCL_EVAL_GLOBAL         0x20000
267
268 /*
269  * Special freeProc values that may be passed to Tcl_SetResult (see
270  * the man page for details):
271  */
272
273 #define TCL_VOLATILE    ((Tcl_FreeProc *) 1)
274 #define TCL_STATIC      ((Tcl_FreeProc *) 0)
275 #define TCL_DYNAMIC     ((Tcl_FreeProc *) 3)
276
277 /*
278  * Flag values passed to variable-related procedures.
279  */
280
281 #define TCL_GLOBAL_ONLY         1
282 #define TCL_APPEND_VALUE        2
283 #define TCL_LIST_ELEMENT        4
284 #define TCL_TRACE_READS         0x10
285 #define TCL_TRACE_WRITES        0x20
286 #define TCL_TRACE_UNSETS        0x40
287 #define TCL_TRACE_DESTROYED     0x80
288 #define TCL_INTERP_DESTROYED    0x100
289 #define TCL_LEAVE_ERR_MSG       0x200
290
291 /*
292  * Types for linked variables:
293  */
294
295 #define TCL_LINK_INT            1
296 #define TCL_LINK_DOUBLE         2
297 #define TCL_LINK_BOOLEAN        3
298 #define TCL_LINK_STRING         4
299 #define TCL_LINK_READ_ONLY      0x80
300
301 /*
302  * Permission flags for files:
303  */
304
305 #define TCL_FILE_READABLE       1
306 #define TCL_FILE_WRITABLE       2
307
308 /*
309  * The following declarations either map ckalloc and ckfree to
310  * malloc and free, or they map them to procedures with all sorts
311  * of debugging hooks defined in tclCkalloc.c.
312  */
313
314 #ifdef TCL_MEM_DEBUG
315
316 EXTERN char *           Tcl_DbCkalloc _ANSI_ARGS_((unsigned int size,
317                             char *file, int line));
318 EXTERN int              Tcl_DbCkfree _ANSI_ARGS_((char *ptr,
319                             char *file, int line));
320 EXTERN char *           Tcl_DbCkrealloc _ANSI_ARGS_((char *ptr,
321                             unsigned int size, char *file, int line));
322 EXTERN int              Tcl_DumpActiveMemory _ANSI_ARGS_((char *fileName));
323 EXTERN void             Tcl_ValidateAllMemory _ANSI_ARGS_((char *file,
324                             int line));
325 #  define ckalloc(x) Tcl_DbCkalloc(x, __FILE__, __LINE__)
326 #  define ckfree(x)  Tcl_DbCkfree(x, __FILE__, __LINE__)
327 #  define ckrealloc(x,y) Tcl_DbCkrealloc((x), (y),__FILE__, __LINE__)
328
329 #else
330
331 #  define ckalloc(x) malloc(x)
332 #  define ckfree(x)  free(x)
333 #  define ckrealloc(x,y) realloc(x,y)
334 #  define Tcl_DumpActiveMemory(x)
335 #  define Tcl_ValidateAllMemory(x,y)
336
337 #endif /* TCL_MEM_DEBUG */
338
339 /*
340  * Macro to free up result of interpreter.
341  */
342
343 #define Tcl_FreeResult(interp)                                  \
344     if ((interp)->freeProc != 0) {                              \
345         if ((interp)->freeProc == (Tcl_FreeProc *) free) {      \
346             ckfree((interp)->result);                           \
347         } else {                                                \
348             (*(interp)->freeProc)((interp)->result);            \
349         }                                                       \
350         (interp)->freeProc = 0;                                 \
351     }
352
353 /*
354  * Forward declaration of Tcl_HashTable.  Needed by some C++ compilers
355  * to prevent errors when the forward reference to Tcl_HashTable is
356  * encountered in the Tcl_HashEntry structure.
357  */
358
359 #ifdef __cplusplus
360 struct Tcl_HashTable;
361 #endif
362
363 /*
364  * Structure definition for an entry in a hash table.  No-one outside
365  * Tcl should access any of these fields directly;  use the macros
366  * defined below.
367  */
368
369 typedef struct Tcl_HashEntry {
370     struct Tcl_HashEntry *nextPtr;      /* Pointer to next entry in this
371                                          * hash bucket, or NULL for end of
372                                          * chain. */
373     struct Tcl_HashTable *tablePtr;     /* Pointer to table containing entry. */
374     struct Tcl_HashEntry **bucketPtr;   /* Pointer to bucket that points to
375                                          * first entry in this entry's chain:
376                                          * used for deleting the entry. */
377     ClientData clientData;              /* Application stores something here
378                                          * with Tcl_SetHashValue. */
379     union {                             /* Key has one of these forms: */
380         char *oneWordValue;             /* One-word value for key. */
381         int words[1];                   /* Multiple integer words for key.
382                                          * The actual size will be as large
383                                          * as necessary for this table's
384                                          * keys. */
385         char string[4];                 /* String for key.  The actual size
386                                          * will be as large as needed to hold
387                                          * the key. */
388     } key;                              /* MUST BE LAST FIELD IN RECORD!! */
389 } Tcl_HashEntry;
390
391 /*
392  * Structure definition for a hash table.  Must be in tcl.h so clients
393  * can allocate space for these structures, but clients should never
394  * access any fields in this structure.
395  */
396
397 #define TCL_SMALL_HASH_TABLE 4
398 typedef struct Tcl_HashTable {
399     Tcl_HashEntry **buckets;            /* Pointer to bucket array.  Each
400                                          * element points to first entry in
401                                          * bucket's hash chain, or NULL. */
402     Tcl_HashEntry *staticBuckets[TCL_SMALL_HASH_TABLE];
403                                         /* Bucket array used for small tables
404                                          * (to avoid mallocs and frees). */
405     int numBuckets;                     /* Total number of buckets allocated
406                                          * at **bucketPtr. */
407     int numEntries;                     /* Total number of entries present
408                                          * in table. */
409     int rebuildSize;                    /* Enlarge table when numEntries gets
410                                          * to be this large. */
411     int downShift;                      /* Shift count used in hashing
412                                          * function.  Designed to use high-
413                                          * order bits of randomized keys. */
414     int mask;                           /* Mask value used in hashing
415                                          * function. */
416     int keyType;                        /* Type of keys used in this table. 
417                                          * It's either TCL_STRING_KEYS,
418                                          * TCL_ONE_WORD_KEYS, or an integer
419                                          * giving the number of ints in a
420                                          */
421     Tcl_HashEntry *(*findProc) _ANSI_ARGS_((struct Tcl_HashTable *tablePtr,
422             char *key));
423     Tcl_HashEntry *(*createProc) _ANSI_ARGS_((struct Tcl_HashTable *tablePtr,
424             char *key, int *newPtr));
425 } Tcl_HashTable;
426
427 /*
428  * Structure definition for information used to keep track of searches
429  * through hash tables:
430  */
431
432 typedef struct Tcl_HashSearch {
433     Tcl_HashTable *tablePtr;            /* Table being searched. */
434     int nextIndex;                      /* Index of next bucket to be
435                                          * enumerated after present one. */
436     Tcl_HashEntry *nextEntryPtr;        /* Next entry to be enumerated in the
437                                          * the current bucket. */
438 } Tcl_HashSearch;
439
440 /*
441  * Acceptable key types for hash tables:
442  */
443
444 #define TCL_STRING_KEYS         0
445 #define TCL_ONE_WORD_KEYS       1
446
447 /*
448  * Macros for clients to use to access fields of hash entries:
449  */
450
451 #define Tcl_GetHashValue(h) ((h)->clientData)
452 #define Tcl_SetHashValue(h, value) ((h)->clientData = (ClientData) (value))
453 #define Tcl_GetHashKey(tablePtr, h) \
454     ((char *) (((tablePtr)->keyType == TCL_ONE_WORD_KEYS) ? (h)->key.oneWordValue \
455                                                 : (h)->key.string))
456
457 /*
458  * Macros to use for clients to use to invoke find and create procedures
459  * for hash tables:
460  */
461
462 #define Tcl_FindHashEntry(tablePtr, key) \
463         (*((tablePtr)->findProc))(tablePtr, key)
464 #define Tcl_CreateHashEntry(tablePtr, key, newPtr) \
465         (*((tablePtr)->createProc))(tablePtr, key, newPtr)
466
467 /*
468  * Exported Tcl variables:
469  */
470
471 EXTERN int              tcl_AsyncReady;
472 EXTERN void             (*tcl_FileCloseProc) _ANSI_ARGS_((FILE *f));
473 EXTERN char *           tcl_RcFileName;
474
475 /*
476  * Exported Tcl procedures:
477  */
478
479 EXTERN void             Tcl_AddErrorInfo _ANSI_ARGS_((Tcl_Interp *interp,
480                             char *message));
481 EXTERN void             Tcl_AllowExceptions _ANSI_ARGS_((Tcl_Interp *interp));
482 EXTERN void             Tcl_AppendElement _ANSI_ARGS_((Tcl_Interp *interp,
483                             char *string));
484 EXTERN void             Tcl_AppendResult _ANSI_ARGS_(
485                             VARARGS(Tcl_Interp *interp));
486 EXTERN int              Tcl_AppInit _ANSI_ARGS_((Tcl_Interp *interp));
487 EXTERN void             Tcl_AsyncMark _ANSI_ARGS_((Tcl_AsyncHandler async));
488 EXTERN Tcl_AsyncHandler Tcl_AsyncCreate _ANSI_ARGS_((Tcl_AsyncProc *proc,
489                             ClientData clientData));
490 EXTERN void             Tcl_AsyncDelete _ANSI_ARGS_((Tcl_AsyncHandler async));
491 EXTERN int              Tcl_AsyncInvoke _ANSI_ARGS_((Tcl_Interp *interp,
492                             int code));
493 EXTERN char             Tcl_Backslash _ANSI_ARGS_((char *src,
494                             int *readPtr));
495 EXTERN void             Tcl_CallWhenDeleted _ANSI_ARGS_((Tcl_Interp *interp,
496                             Tcl_InterpDeleteProc *proc,
497                             ClientData clientData));
498 EXTERN int              Tcl_CommandComplete _ANSI_ARGS_((char *cmd));
499 EXTERN char *           Tcl_Concat _ANSI_ARGS_((int argc, char **argv));
500 EXTERN int              Tcl_ConvertElement _ANSI_ARGS_((char *src,
501                             char *dst, int flags));
502 EXTERN Tcl_Command      Tcl_CreateCommand _ANSI_ARGS_((Tcl_Interp *interp,
503                             char *cmdName, Tcl_CmdProc *proc,
504                             ClientData clientData,
505                             Tcl_CmdDeleteProc *deleteProc));
506 EXTERN Tcl_Interp *     Tcl_CreateInterp _ANSI_ARGS_((void));
507 EXTERN void             Tcl_CreateMathFunc _ANSI_ARGS_((Tcl_Interp *interp,
508                             char *name, int numArgs, Tcl_ValueType *argTypes,
509                             Tcl_MathProc *proc, ClientData clientData));
510 EXTERN int              Tcl_CreatePipeline _ANSI_ARGS_((Tcl_Interp *interp,
511                             int argc, char **argv, int **pidArrayPtr,
512                             int *inPipePtr, int *outPipePtr,
513                             int *errFilePtr));
514 EXTERN Tcl_Trace        Tcl_CreateTrace _ANSI_ARGS_((Tcl_Interp *interp,
515                             int level, Tcl_CmdTraceProc *proc,
516                             ClientData clientData));
517 EXTERN int              Tcl_DeleteCommand _ANSI_ARGS_((Tcl_Interp *interp,
518                             char *cmdName));
519 EXTERN void             Tcl_DeleteHashEntry _ANSI_ARGS_((
520                             Tcl_HashEntry *entryPtr));
521 EXTERN void             Tcl_DeleteHashTable _ANSI_ARGS_((
522                             Tcl_HashTable *tablePtr));
523 EXTERN void             Tcl_DeleteInterp _ANSI_ARGS_((Tcl_Interp *interp));
524 EXTERN void             Tcl_DeleteTrace _ANSI_ARGS_((Tcl_Interp *interp,
525                             Tcl_Trace trace));
526 EXTERN void             Tcl_DetachPids _ANSI_ARGS_((int numPids, int *pidPtr));
527 EXTERN void             Tcl_DontCallWhenDeleted _ANSI_ARGS_((
528                             Tcl_Interp *interp, Tcl_InterpDeleteProc *proc,
529                             ClientData clientData));
530 EXTERN char *           Tcl_DStringAppend _ANSI_ARGS_((Tcl_DString *dsPtr,
531                             char *string, int length));
532 EXTERN char *           Tcl_DStringAppendElement _ANSI_ARGS_((
533                             Tcl_DString *dsPtr, char *string));
534 EXTERN void             Tcl_DStringEndSublist _ANSI_ARGS_((Tcl_DString *dsPtr));
535 EXTERN void             Tcl_DStringFree _ANSI_ARGS_((Tcl_DString *dsPtr));
536 EXTERN void             Tcl_DStringGetResult _ANSI_ARGS_((Tcl_Interp *interp,
537                             Tcl_DString *dsPtr));
538 EXTERN void             Tcl_DStringInit _ANSI_ARGS_((Tcl_DString *dsPtr));
539 EXTERN void             Tcl_DStringResult _ANSI_ARGS_((Tcl_Interp *interp,
540                             Tcl_DString *dsPtr));
541 EXTERN void             Tcl_DStringSetLength _ANSI_ARGS_((Tcl_DString *dsPtr,
542                             int length));
543 EXTERN void             Tcl_DStringStartSublist _ANSI_ARGS_((
544                             Tcl_DString *dsPtr));
545 EXTERN void             Tcl_EnterFile _ANSI_ARGS_((Tcl_Interp *interp,
546                             FILE *file, int permissions));
547 EXTERN char *           Tcl_ErrnoId _ANSI_ARGS_((void));
548 EXTERN int              Tcl_Eval _ANSI_ARGS_((Tcl_Interp *interp, char *cmd));
549 EXTERN int              Tcl_EvalFile _ANSI_ARGS_((Tcl_Interp *interp,
550                             char *fileName));
551 EXTERN int              Tcl_ExprBoolean _ANSI_ARGS_((Tcl_Interp *interp,
552                             char *string, int *ptr));
553 EXTERN int              Tcl_ExprDouble _ANSI_ARGS_((Tcl_Interp *interp,
554                             char *string, double *ptr));
555 EXTERN int              Tcl_ExprLong _ANSI_ARGS_((Tcl_Interp *interp,
556                             char *string, long *ptr));
557 EXTERN int              Tcl_ExprString _ANSI_ARGS_((Tcl_Interp *interp,
558                             char *string));
559 EXTERN int              Tcl_FilePermissions _ANSI_ARGS_((FILE *file));
560 EXTERN Tcl_HashEntry *  Tcl_FirstHashEntry _ANSI_ARGS_((
561                             Tcl_HashTable *tablePtr,
562                             Tcl_HashSearch *searchPtr));
563 EXTERN int              Tcl_GetBoolean _ANSI_ARGS_((Tcl_Interp *interp,
564                             char *string, int *boolPtr));
565 EXTERN int              Tcl_GetCommandInfo _ANSI_ARGS_((Tcl_Interp *interp,
566                             char *cmdName, Tcl_CmdInfo *infoPtr));
567 EXTERN char *           Tcl_GetCommandName _ANSI_ARGS_((Tcl_Interp *interp,
568                             Tcl_Command command));
569 EXTERN int              Tcl_GetDouble _ANSI_ARGS_((Tcl_Interp *interp,
570                             char *string, double *doublePtr));
571 EXTERN int              Tcl_GetInt _ANSI_ARGS_((Tcl_Interp *interp,
572                             char *string, int *intPtr));
573 EXTERN int              Tcl_GetOpenFile _ANSI_ARGS_((Tcl_Interp *interp,
574                             char *string, int write, int checkUsage,
575                             FILE **filePtr));
576 EXTERN char *           Tcl_GetVar _ANSI_ARGS_((Tcl_Interp *interp,
577                             char *varName, int flags));
578 EXTERN char *           Tcl_GetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
579                             char *part1, char *part2, int flags));
580 EXTERN int              Tcl_GlobalEval _ANSI_ARGS_((Tcl_Interp *interp,
581                             char *command));
582 EXTERN char *           Tcl_HashStats _ANSI_ARGS_((Tcl_HashTable *tablePtr));
583 EXTERN int              Tcl_Init _ANSI_ARGS_((Tcl_Interp *interp));
584 EXTERN void             Tcl_InitHashTable _ANSI_ARGS_((Tcl_HashTable *tablePtr,
585                             int keyType));
586 EXTERN void             Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp *interp));
587 EXTERN int              Tcl_LinkVar _ANSI_ARGS_((Tcl_Interp *interp,
588                             char *varName, char *addr, int type));
589 EXTERN void             Tcl_Main _ANSI_ARGS_((int argc, char **argv,
590                             Tcl_AppInitProc *appInitProc));
591 EXTERN char *           Tcl_Merge _ANSI_ARGS_((int argc, char **argv));
592 EXTERN Tcl_HashEntry *  Tcl_NextHashEntry _ANSI_ARGS_((
593                             Tcl_HashSearch *searchPtr));
594 EXTERN char *           Tcl_ParseVar _ANSI_ARGS_((Tcl_Interp *interp,
595                             char *string, char **termPtr));
596 EXTERN char *           Tcl_PosixError _ANSI_ARGS_((Tcl_Interp *interp));
597 EXTERN void             Tcl_PrintDouble _ANSI_ARGS_((Tcl_Interp *interp,
598                             double value, char *dst));
599 EXTERN void             Tcl_ReapDetachedProcs _ANSI_ARGS_((void));
600 EXTERN int              Tcl_RecordAndEval _ANSI_ARGS_((Tcl_Interp *interp,
601                             char *cmd, int flags));
602 EXTERN Tcl_RegExp       Tcl_RegExpCompile _ANSI_ARGS_((Tcl_Interp *interp,
603                             char *string));
604 EXTERN int              Tcl_RegExpExec _ANSI_ARGS_((Tcl_Interp *interp,
605                             Tcl_RegExp regexp, char *string, char *start));
606 EXTERN int              Tcl_RegExpMatch _ANSI_ARGS_((Tcl_Interp *interp,
607                             char *string, char *pattern));
608 EXTERN void             Tcl_RegExpRange _ANSI_ARGS_((Tcl_RegExp regexp,
609                             int index, char **startPtr, char **endPtr));
610 EXTERN void             Tcl_ResetResult _ANSI_ARGS_((Tcl_Interp *interp));
611 #define Tcl_Return Tcl_SetResult
612 EXTERN int              Tcl_ScanElement _ANSI_ARGS_((char *string,
613                             int *flagPtr));
614 EXTERN int              Tcl_SetCommandInfo _ANSI_ARGS_((Tcl_Interp *interp,
615                             char *cmdName, Tcl_CmdInfo *infoPtr));
616 EXTERN void             Tcl_SetErrorCode _ANSI_ARGS_(
617                             VARARGS(Tcl_Interp *interp));
618 EXTERN int              Tcl_SetRecursionLimit _ANSI_ARGS_((Tcl_Interp *interp,
619                             int depth));
620 EXTERN void             Tcl_SetResult _ANSI_ARGS_((Tcl_Interp *interp,
621                             char *string, Tcl_FreeProc *freeProc));
622 EXTERN char *           Tcl_SetVar _ANSI_ARGS_((Tcl_Interp *interp,
623                             char *varName, char *newValue, int flags));
624 EXTERN char *           Tcl_SetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
625                             char *part1, char *part2, char *newValue,
626                             int flags));
627 EXTERN char *           Tcl_SignalId _ANSI_ARGS_((int sig));
628 EXTERN char *           Tcl_SignalMsg _ANSI_ARGS_((int sig));
629 EXTERN int              Tcl_SplitList _ANSI_ARGS_((Tcl_Interp *interp,
630                             char *list, int *argcPtr, char ***argvPtr));
631 EXTERN int              Tcl_StringMatch _ANSI_ARGS_((char *string,
632                             char *pattern));
633 EXTERN char *           Tcl_TildeSubst _ANSI_ARGS_((Tcl_Interp *interp,
634                             char *name, Tcl_DString *bufferPtr));
635 EXTERN int              Tcl_TraceVar _ANSI_ARGS_((Tcl_Interp *interp,
636                             char *varName, int flags, Tcl_VarTraceProc *proc,
637                             ClientData clientData));
638 EXTERN int              Tcl_TraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
639                             char *part1, char *part2, int flags,
640                             Tcl_VarTraceProc *proc, ClientData clientData));
641 EXTERN void             Tcl_UnlinkVar _ANSI_ARGS_((Tcl_Interp *interp,
642                             char *varName));
643 EXTERN int              Tcl_UnsetVar _ANSI_ARGS_((Tcl_Interp *interp,
644                             char *varName, int flags));
645 EXTERN int              Tcl_UnsetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
646                             char *part1, char *part2, int flags));
647 EXTERN void             Tcl_UntraceVar _ANSI_ARGS_((Tcl_Interp *interp,
648                             char *varName, int flags, Tcl_VarTraceProc *proc,
649                             ClientData clientData));
650 EXTERN void             Tcl_UntraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
651                             char *part1, char *part2, int flags,
652                             Tcl_VarTraceProc *proc, ClientData clientData));
653 EXTERN int              Tcl_UpVar _ANSI_ARGS_((Tcl_Interp *interp,
654                             char *frameName, char *varName,
655                             char *localName, int flags));
656 EXTERN int              Tcl_UpVar2 _ANSI_ARGS_((Tcl_Interp *interp,
657                             char *frameName, char *part1, char *part2,
658                             char *localName, int flags));
659 EXTERN int              Tcl_VarEval _ANSI_ARGS_(VARARGS(Tcl_Interp *interp));
660 EXTERN ClientData       Tcl_VarTraceInfo _ANSI_ARGS_((Tcl_Interp *interp,
661                             char *varName, int flags,
662                             Tcl_VarTraceProc *procPtr,
663                             ClientData prevClientData));
664 EXTERN ClientData       Tcl_VarTraceInfo2 _ANSI_ARGS_((Tcl_Interp *interp,
665                             char *part1, char *part2, int flags,
666                             Tcl_VarTraceProc *procPtr,
667                             ClientData prevClientData));
668
669 #endif /* _TCL */