Subversion Repositories Vertical

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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-1997 Sun Microsystems, Inc.
  9.  * Copyright (c) 1993-1996 Lucent Technologies.
  10.  * Copyright (c) 1998 by Scriptics Corporation.
  11.  *
  12.  * See the file "license.terms" for information on usage and redistribution
  13.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  14.  *
  15.  * RCS: @(#) $Id: tcl.h,v 1.1.1.1 2003/11/04 23:34:57 mjames Exp $
  16.  */
  17.  
  18. #ifndef _TCL
  19. #define _TCL
  20. #include "tcl_l.h"
  21. /*
  22.  * When version numbers change here, must also go into the following files
  23.  * and update the version numbers:
  24.  *
  25.  * README
  26.  * library/init.tcl     (only if major.minor changes, not patchlevel)
  27.  * unix/configure.in
  28.  * win/makefile.bc      (only if major.minor changes, not patchlevel)
  29.  * win/makefile.vc      (only if major.minor changes, not patchlevel)
  30.  * win/README
  31.  * win/README.binary
  32.  *
  33.  * The release level should be  0 for alpha, 1 for beta, and 2 for
  34.  * final/patch.  The release serial value is the number that follows the
  35.  * "a", "b", or "p" in the patch level; for example, if the patch level
  36.  * is 7.6b2, TCL_RELEASE_SERIAL is 2.  It restarts at 1 whenever the
  37.  * release level is changed, except for the final release which is 0
  38.  * (the first patch will start at 1).
  39.  */
  40.  
  41. #define TCL_MAJOR_VERSION   8
  42. #define TCL_MINOR_VERSION   0
  43. #define TCL_RELEASE_LEVEL   2
  44. #define TCL_RELEASE_SERIAL  4
  45.  
  46. #define TCL_VERSION         "8.0"
  47. #define TCL_PATCH_LEVEL     "8.0.4"
  48.  
  49. /*
  50.  * The following definitions set up the proper options for Windows
  51.  * compilers.  We use this method because there is no autoconf equivalent.
  52.  */
  53.  
  54. #ifndef __WIN32__
  55. #   if defined(_WIN32) || defined(WIN32)
  56. #       define __WIN32__
  57. #   endif
  58. #endif
  59.  
  60. #ifdef __WIN32__
  61. #   ifndef STRICT
  62. #       define STRICT
  63. #   endif
  64. #   ifndef USE_PROTOTYPE
  65. #       define USE_PROTOTYPE 1
  66. #   endif
  67. #   ifndef HAS_STDARG
  68. #       define HAS_STDARG 1
  69. #   endif
  70. #   ifndef USE_PROTOTYPE
  71. #       define USE_PROTOTYPE 1
  72. #   endif
  73. #   ifndef USE_TCLALLOC
  74. #       define USE_TCLALLOC 1
  75. #   endif
  76. #endif /* __WIN32__ */
  77.  
  78. /*
  79.  * The following definitions set up the proper options for Macintosh
  80.  * compilers.  We use this method because there is no autoconf equivalent.
  81.  */
  82.  
  83. #ifdef MAC_TCL
  84. #   ifndef HAS_STDARG
  85. #       define HAS_STDARG 1
  86. #   endif
  87. #   ifndef USE_TCLALLOC
  88. #       define USE_TCLALLOC 1
  89. #   endif
  90. #   ifndef NO_STRERROR
  91. #       define NO_STRERROR 1
  92. #   endif
  93. #endif
  94.  
  95. /*
  96.  * Utility macros: STRINGIFY takes an argument and wraps it in "" (double
  97.  * quotation marks), JOIN joins two arguments.
  98.  */
  99.  
  100. #define VERBATIM(x) x
  101. #ifdef _MSC_VER
  102. # define STRINGIFY(x) STRINGIFY1(x)
  103. # define STRINGIFY1(x) #x
  104. # define JOIN(a,b) JOIN1(a,b)
  105. # define JOIN1(a,b) a##b
  106. #else
  107. # ifdef RESOURCE_INCLUDED
  108. #  define STRINGIFY(x) STRINGIFY1(x)
  109. #  define STRINGIFY1(x) #x
  110. #  define JOIN(a,b) JOIN1(a,b)
  111. #  define JOIN1(a,b) a##b
  112. # else
  113. #  ifdef __STDC__
  114. #   define STRINGIFY(x) #x
  115. #   define JOIN(a,b) a##b
  116. #  else
  117. #   define STRINGIFY(x) "x"
  118. #   define JOIN(a,b) VERBATIM(a)VERBATIM(b)
  119. #  endif
  120. # endif
  121. #endif
  122.  
  123. /*
  124.  * A special definition used to allow this header file to be included
  125.  * in resource files so that they can get obtain version information from
  126.  * this file.  Resource compilers don't like all the C stuff, like typedefs
  127.  * and procedure declarations, that occur below.
  128.  */
  129.  
  130. #ifndef RESOURCE_INCLUDED
  131.  
  132. #ifndef BUFSIZ
  133. #include <stdio.h>
  134. #endif
  135.  
  136. /*
  137.  * Definitions that allow Tcl functions with variable numbers of
  138.  * arguments to be used with either varargs.h or stdarg.h.  TCL_VARARGS
  139.  * is used in procedure prototypes.  TCL_VARARGS_DEF is used to declare
  140.  * the arguments in a function definiton: it takes the type and name of
  141.  * the first argument and supplies the appropriate argument declaration
  142.  * string for use in the function definition.  TCL_VARARGS_START
  143.  * initializes the va_list data structure and returns the first argument.
  144.  */
  145.  
  146. #if defined(__STDC__) || defined(HAS_STDARG)
  147. #   define TCL_VARARGS(type, name) (type name, ...)
  148. #   define TCL_VARARGS_DEF(type, name) (type name, ...)
  149. #   define TCL_VARARGS_START(type, name, list) (va_start(list, name), name)
  150. #else
  151. #   ifdef __cplusplus
  152. #       define TCL_VARARGS(type, name) (type name, ...)
  153. #       define TCL_VARARGS_DEF(type, name) (type va_alist, ...)
  154. #   else
  155. #       define TCL_VARARGS(type, name) ()
  156. #       define TCL_VARARGS_DEF(type, name) (va_alist)
  157. #   endif
  158. #   define TCL_VARARGS_START(type, name, list) \
  159.         (va_start(list), va_arg(list, type))
  160. #endif
  161.  
  162. /*
  163.  * Macros used to declare a function to be exported by a DLL.
  164.  * Used by Windows, maps to no-op declarations on non-Windows systems.
  165.  * The default build on windows is for a DLL, which causes the DLLIMPORT
  166.  * and DLLEXPORT macros to be nonempty. To build a static library, the
  167.  * macro STATIC_BUILD should be defined.
  168.  * The support follows the convention that a macro called BUILD_xxxx, where
  169.  * xxxx is the name of a library we are building, is set on the compile line
  170.  * for sources that are to be placed in the library. See BUILD_tcl in this
  171.  * file for an example of how the macro is to be used.
  172.  */
  173.  
  174. #ifdef __WIN32__
  175. # ifdef STATIC_BUILD
  176. #  define DLLIMPORT
  177. #  define DLLEXPORT
  178. # else
  179. #  ifdef _MSC_VER
  180. #   define DLLIMPORT __declspec(dllimport)
  181. #   define DLLEXPORT __declspec(dllexport)
  182. #  else
  183. #   define DLLIMPORT
  184. #   define DLLEXPORT
  185. #  endif
  186. # endif
  187. #else
  188. # define DLLIMPORT
  189. # define DLLEXPORT
  190. #endif
  191.  
  192. #ifdef TCL_STORAGE_CLASS
  193. # undef TCL_STORAGE_CLASS
  194. #endif
  195. #ifdef BUILD_tcl
  196. # define TCL_STORAGE_CLASS DLLEXPORT
  197. #else
  198. # define TCL_STORAGE_CLASS DLLIMPORT
  199. #endif
  200.  
  201. /*
  202.  * Definitions that allow this header file to be used either with or
  203.  * without ANSI C features like function prototypes.
  204.  */
  205.  
  206. #undef _ANSI_ARGS_
  207. #undef CONST
  208.  
  209. #if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus) || defined(USE_PROTOTYPE)
  210. #   define _USING_PROTOTYPES_ 1
  211. #   define _ANSI_ARGS_(x)       x
  212. #   define CONST const
  213. #else
  214. #   define _ANSI_ARGS_(x)       ()
  215. #   define CONST
  216. #endif
  217.  
  218. #ifdef __cplusplus
  219. #   define EXTERN extern "C" TCL_STORAGE_CLASS
  220. #else
  221. #   define EXTERN extern TCL_STORAGE_CLASS
  222. #endif
  223.  
  224. /*
  225.  * Macro to use instead of "void" for arguments that must have
  226.  * type "void *" in ANSI C;  maps them to type "char *" in
  227.  * non-ANSI systems.
  228.  */
  229. #ifndef __WIN32__
  230. #ifndef VOID
  231. #   ifdef __STDC__
  232. #       define VOID void
  233. #   else
  234. #       define VOID char
  235. #   endif
  236. #endif
  237. #else /* __WIN32__ */
  238. /*
  239.  * The following code is copied from winnt.h
  240.  */
  241. #ifndef VOID
  242. #define VOID void
  243. typedef char CHAR;
  244. typedef short SHORT;
  245. typedef long LONG;
  246. #endif
  247. #endif /* __WIN32__ */
  248.  
  249. /*
  250.  * Miscellaneous declarations.
  251.  */
  252.  
  253. #ifndef NULL
  254. #define NULL 0
  255. #endif
  256.  
  257. #ifndef _CLIENTDATA
  258. #   if defined(__STDC__) || defined(__cplusplus)
  259.     typedef void *ClientData;
  260. #   else
  261.     typedef int *ClientData;
  262. #   endif /* __STDC__ */
  263. #define _CLIENTDATA
  264. #endif
  265.  
  266. /*
  267.  * Data structures defined opaquely in this module. The definitions below
  268.  * just provide dummy types. A few fields are made visible in Tcl_Interp
  269.  * structures, namely those used for returning a string result from
  270.  * commands. Direct access to the result field is discouraged in Tcl 8.0.
  271.  * The interpreter result is either an object or a string, and the two
  272.  * values are kept consistent unless some C code sets interp->result
  273.  * directly. Programmers should use either the procedure Tcl_GetObjResult()
  274.  * or Tcl_GetStringResult() to read the interpreter's result. See the
  275.  * SetResult man page for details.
  276.  *
  277.  * Note: any change to the Tcl_Interp definition below must be mirrored
  278.  * in the "real" definition in tclInt.h.
  279.  *
  280.  * Note: Tcl_ObjCmdProc procedures do not directly set result and freeProc.
  281.  * Instead, they set a Tcl_Obj member in the "real" structure that can be
  282.  * accessed with Tcl_GetObjResult() and Tcl_SetObjResult().
  283.  */
  284.  
  285. typedef struct Tcl_Interp {
  286.     char *result;               /* If the last command returned a string
  287.                                  * result, this points to it. */
  288.     void (*freeProc) _ANSI_ARGS_((char *blockPtr));
  289.                                 /* Zero means the string result is
  290.                                  * statically allocated. TCL_DYNAMIC means
  291.                                  * it was allocated with ckalloc and should
  292.                                  * be freed with ckfree. Other values give
  293.                                  * the address of procedure to invoke to
  294.                                  * free the result. Tcl_Eval must free it
  295.                                  * before executing next command. */
  296.     int errorLine;              /* When TCL_ERROR is returned, this gives
  297.                                  * the line number within the command where
  298.                                  * the error occurred (1 if first line). */
  299. } Tcl_Interp;
  300.  
  301. typedef struct Tcl_AsyncHandler_ *Tcl_AsyncHandler;
  302. typedef struct Tcl_Channel_ *Tcl_Channel;
  303. typedef struct Tcl_Command_ *Tcl_Command;
  304. typedef struct Tcl_Event Tcl_Event;
  305. typedef struct Tcl_Pid_ *Tcl_Pid;
  306. typedef struct Tcl_RegExp_ *Tcl_RegExp;
  307. typedef struct Tcl_TimerToken_ *Tcl_TimerToken;
  308. typedef struct Tcl_Trace_ *Tcl_Trace;
  309. typedef struct Tcl_Var_ *Tcl_Var;
  310.  
  311. /*
  312.  * When a TCL command returns, the interpreter contains a result from the
  313.  * command. Programmers are strongly encouraged to use one of the
  314.  * procedures Tcl_GetObjResult() or Tcl_GetStringResult() to read the
  315.  * interpreter's result. See the SetResult man page for details. Besides
  316.  * this result, the command procedure returns an integer code, which is
  317.  * one of the following:
  318.  *
  319.  * TCL_OK               Command completed normally; the interpreter's
  320.  *                      result contains the command's result.
  321.  * TCL_ERROR            The command couldn't be completed successfully;
  322.  *                      the interpreter's result describes what went wrong.
  323.  * TCL_RETURN           The command requests that the current procedure
  324.  *                      return; the interpreter's result contains the
  325.  *                      procedure's return value.
  326.  * TCL_BREAK            The command requests that the innermost loop
  327.  *                      be exited; the interpreter's result is meaningless.
  328.  * TCL_CONTINUE         Go on to the next iteration of the current loop;
  329.  *                      the interpreter's result is meaningless.
  330.  */
  331.  
  332. #define TCL_OK          0
  333. #define TCL_ERROR       1
  334. #define TCL_RETURN      2
  335. #define TCL_BREAK       3
  336. #define TCL_CONTINUE    4
  337.  
  338. #define TCL_RESULT_SIZE 200
  339.  
  340. /*
  341.  * Argument descriptors for math function callbacks in expressions:
  342.  */
  343.  
  344. typedef enum {TCL_INT, TCL_DOUBLE, TCL_EITHER} Tcl_ValueType;
  345. typedef struct Tcl_Value {
  346.     Tcl_ValueType type;         /* Indicates intValue or doubleValue is
  347.                                  * valid, or both. */
  348.     long intValue;              /* Integer value. */
  349.     double doubleValue;         /* Double-precision floating value. */
  350. } Tcl_Value;
  351.  
  352. /*
  353.  * Forward declaration of Tcl_Obj to prevent an error when the forward
  354.  * reference to Tcl_Obj is encountered in the procedure types declared
  355.  * below.
  356.  */
  357.  
  358. struct Tcl_Obj;
  359.  
  360. /*
  361.  * Procedure types defined by Tcl:
  362.  */
  363.  
  364. typedef int (Tcl_AppInitProc) _ANSI_ARGS_((Tcl_Interp *interp));
  365. typedef int (Tcl_AsyncProc) _ANSI_ARGS_((ClientData clientData,
  366.         Tcl_Interp *interp, int code));
  367. typedef void (Tcl_ChannelProc) _ANSI_ARGS_((ClientData clientData, int mask));
  368. typedef void (Tcl_CloseProc) _ANSI_ARGS_((ClientData data));
  369. typedef void (Tcl_CmdDeleteProc) _ANSI_ARGS_((ClientData clientData));
  370. typedef int (Tcl_CmdProc) _ANSI_ARGS_((ClientData clientData,
  371.         Tcl_Interp *interp, int argc, char *argv[]));
  372. typedef void (Tcl_CmdTraceProc) _ANSI_ARGS_((ClientData clientData,
  373.         Tcl_Interp *interp, int level, char *command, Tcl_CmdProc *proc,
  374.         ClientData cmdClientData, int argc, char *argv[]));
  375. typedef void (Tcl_DupInternalRepProc) _ANSI_ARGS_((struct Tcl_Obj *srcPtr,
  376.         struct Tcl_Obj *dupPtr));
  377. typedef int (Tcl_EventProc) _ANSI_ARGS_((Tcl_Event *evPtr, int flags));
  378. typedef void (Tcl_EventCheckProc) _ANSI_ARGS_((ClientData clientData,
  379.         int flags));
  380. typedef int (Tcl_EventDeleteProc) _ANSI_ARGS_((Tcl_Event *evPtr,
  381.         ClientData clientData));
  382. typedef void (Tcl_EventSetupProc) _ANSI_ARGS_((ClientData clientData,
  383.         int flags));
  384. typedef void (Tcl_ExitProc) _ANSI_ARGS_((ClientData clientData));
  385. typedef void (Tcl_FileProc) _ANSI_ARGS_((ClientData clientData, int mask));
  386. typedef void (Tcl_FileFreeProc) _ANSI_ARGS_((ClientData clientData));
  387. typedef void (Tcl_FreeInternalRepProc) _ANSI_ARGS_((struct Tcl_Obj *objPtr));
  388. typedef void (Tcl_FreeProc) _ANSI_ARGS_((char *blockPtr));
  389. typedef void (Tcl_IdleProc) _ANSI_ARGS_((ClientData clientData));
  390. typedef void (Tcl_InterpDeleteProc) _ANSI_ARGS_((ClientData clientData,
  391.         Tcl_Interp *interp));
  392. typedef int (Tcl_MathProc) _ANSI_ARGS_((ClientData clientData,
  393.         Tcl_Interp *interp, Tcl_Value *args, Tcl_Value *resultPtr));
  394. typedef void (Tcl_NamespaceDeleteProc) _ANSI_ARGS_((ClientData clientData));
  395. typedef int (Tcl_ObjCmdProc) _ANSI_ARGS_((ClientData clientData,
  396.         Tcl_Interp *interp, int objc, struct Tcl_Obj * CONST objv[]));
  397. typedef int (Tcl_PackageInitProc) _ANSI_ARGS_((Tcl_Interp *interp));
  398. typedef void (Tcl_TcpAcceptProc) _ANSI_ARGS_((ClientData callbackData,
  399.         Tcl_Channel chan, char *address, int port));
  400. typedef void (Tcl_TimerProc) _ANSI_ARGS_((ClientData clientData));
  401. typedef int (Tcl_SetFromAnyProc) _ANSI_ARGS_((Tcl_Interp *interp,
  402.         struct Tcl_Obj *objPtr));
  403. typedef void (Tcl_UpdateStringProc) _ANSI_ARGS_((struct Tcl_Obj *objPtr));
  404. typedef char *(Tcl_VarTraceProc) _ANSI_ARGS_((ClientData clientData,
  405.         Tcl_Interp *interp, char *part1, char *part2, int flags));
  406.  
  407. /*
  408.  * The following structure represents a type of object, which is a
  409.  * particular internal representation for an object plus a set of
  410.  * procedures that provide standard operations on objects of that type.
  411.  */
  412.  
  413. typedef struct Tcl_ObjType {
  414.     char *name;                 /* Name of the type, e.g. "int". */
  415.     Tcl_FreeInternalRepProc *freeIntRepProc;
  416.                                 /* Called to free any storage for the type's
  417.                                  * internal rep. NULL if the internal rep
  418.                                  * does not need freeing. */
  419.     Tcl_DupInternalRepProc *dupIntRepProc;
  420.                                 /* Called to create a new object as a copy
  421.                                  * of an existing object. */
  422.     Tcl_UpdateStringProc *updateStringProc;
  423.                                 /* Called to update the string rep from the
  424.                                  * type's internal representation. */
  425.     Tcl_SetFromAnyProc *setFromAnyProc;
  426.                                 /* Called to convert the object's internal
  427.                                  * rep to this type. Frees the internal rep
  428.                                  * of the old type. Returns TCL_ERROR on
  429.                                  * failure. */
  430. } Tcl_ObjType;
  431.  
  432. /*
  433.  * One of the following structures exists for each object in the Tcl
  434.  * system. An object stores a value as either a string, some internal
  435.  * representation, or both.
  436.  */
  437.  
  438. typedef struct Tcl_Obj {
  439.     int refCount;               /* When 0 the object will be freed. */
  440.     char *bytes;                /* This points to the first byte of the
  441.                                  * object's string representation. The array
  442.                                  * must be followed by a null byte (i.e., at
  443.                                  * offset length) but may also contain
  444.                                  * embedded null characters. The array's
  445.                                  * storage is allocated by ckalloc. NULL
  446.                                  * means the string rep is invalid and must
  447.                                  * be regenerated from the internal rep.
  448.                                  * Clients should use Tcl_GetStringFromObj
  449.                                  * to get a pointer to the byte array as a
  450.                                  * readonly value. */
  451.     int length;                 /* The number of bytes at *bytes, not
  452.                                  * including the terminating null. */
  453.     Tcl_ObjType *typePtr;       /* Denotes the object's type. Always
  454.                                  * corresponds to the type of the object's
  455.                                  * internal rep. NULL indicates the object
  456.                                  * has no internal rep (has no type). */
  457.     union {                     /* The internal representation: */
  458.         long longValue;         /*   - an long integer value */
  459.         double doubleValue;     /*   - a double-precision floating value */
  460.         VOID *otherValuePtr;    /*   - another, type-specific value */
  461.         struct {                /*   - internal rep as two pointers */
  462.             VOID *ptr1;
  463.             VOID *ptr2;
  464.         } twoPtrValue;
  465.     } internalRep;
  466. } Tcl_Obj;
  467.  
  468. /*
  469.  * Macros to increment and decrement a Tcl_Obj's reference count, and to
  470.  * test whether an object is shared (i.e. has reference count > 1).
  471.  * Note: clients should use Tcl_DecrRefCount() when they are finished using
  472.  * an object, and should never call TclFreeObj() directly. TclFreeObj() is
  473.  * only defined and made public in tcl.h to support Tcl_DecrRefCount's macro
  474.  * definition. Note also that Tcl_DecrRefCount() refers to the parameter
  475.  * "obj" twice. This means that you should avoid calling it with an
  476.  * expression that is expensive to compute or has side effects.
  477.  */
  478.  
  479. EXTERN void             Tcl_IncrRefCount _ANSI_ARGS_((Tcl_Obj *objPtr));
  480. EXTERN void             Tcl_DecrRefCount _ANSI_ARGS_((Tcl_Obj *objPtr));
  481. EXTERN int              Tcl_IsShared _ANSI_ARGS_((Tcl_Obj *objPtr));
  482.  
  483. #ifdef TCL_MEM_DEBUG
  484. #   define Tcl_IncrRefCount(objPtr) \
  485.         Tcl_DbIncrRefCount(objPtr, __FILE__, __LINE__)
  486. #   define Tcl_DecrRefCount(objPtr) \
  487.         Tcl_DbDecrRefCount(objPtr, __FILE__, __LINE__)
  488. #   define Tcl_IsShared(objPtr) \
  489.         Tcl_DbIsShared(objPtr, __FILE__, __LINE__)
  490. #else
  491. #   define Tcl_IncrRefCount(objPtr) \
  492.         ++(objPtr)->refCount
  493. #   define Tcl_DecrRefCount(objPtr) \
  494.         if (--(objPtr)->refCount <= 0) TclFreeObj(objPtr)
  495. #   define Tcl_IsShared(objPtr) \
  496.         ((objPtr)->refCount > 1)
  497. #endif
  498.  
  499. /*
  500.  * Macros and definitions that help to debug the use of Tcl objects.
  501.  * When TCL_MEM_DEBUG is defined, the Tcl_New* declarations are
  502.  * overridden to call debugging versions of the object creation procedures.
  503.  */
  504.  
  505. EXTERN Tcl_Obj *        Tcl_NewBooleanObj _ANSI_ARGS_((int boolValue));
  506. EXTERN Tcl_Obj *        Tcl_NewDoubleObj _ANSI_ARGS_((double doubleValue));
  507. EXTERN Tcl_Obj *        Tcl_NewIntObj _ANSI_ARGS_((int intValue));
  508. EXTERN Tcl_Obj *        Tcl_NewListObj _ANSI_ARGS_((int objc,
  509.                             Tcl_Obj *CONST objv[]));
  510. EXTERN Tcl_Obj *        Tcl_NewLongObj _ANSI_ARGS_((long longValue));
  511. EXTERN Tcl_Obj *        Tcl_NewObj _ANSI_ARGS_((void));
  512. EXTERN Tcl_Obj *        Tcl_NewStringObj _ANSI_ARGS_((char *bytes,
  513.                             int length));
  514.  
  515. #ifdef TCL_MEM_DEBUG
  516. #  define Tcl_NewBooleanObj(val) \
  517.      Tcl_DbNewBooleanObj(val, __FILE__, __LINE__)
  518. #  define Tcl_NewDoubleObj(val) \
  519.      Tcl_DbNewDoubleObj(val, __FILE__, __LINE__)
  520. #  define Tcl_NewIntObj(val) \
  521.      Tcl_DbNewLongObj(val, __FILE__, __LINE__)
  522. #  define Tcl_NewListObj(objc, objv) \
  523.      Tcl_DbNewListObj(objc, objv, __FILE__, __LINE__)
  524. #  define Tcl_NewLongObj(val) \
  525.      Tcl_DbNewLongObj(val, __FILE__, __LINE__)
  526. #  define Tcl_NewObj() \
  527.      Tcl_DbNewObj(__FILE__, __LINE__)
  528. #  define Tcl_NewStringObj(bytes, len) \
  529.      Tcl_DbNewStringObj(bytes, len, __FILE__, __LINE__)
  530. #endif /* TCL_MEM_DEBUG */
  531.  
  532. /*
  533.  * The following definitions support Tcl's namespace facility.
  534.  * Note: the first five fields must match exactly the fields in a
  535.  * Namespace structure (see tcl.h).
  536.  */
  537.  
  538. typedef struct Tcl_Namespace {
  539.     char *name;                 /* The namespace's name within its parent
  540.                                  * namespace. This contains no ::'s. The
  541.                                  * name of the global namespace is ""
  542.                                  * although "::" is an synonym. */
  543.     char *fullName;             /* The namespace's fully qualified name.
  544.                                  * This starts with ::. */
  545.     ClientData clientData;      /* Arbitrary value associated with this
  546.                                  * namespace. */
  547.     Tcl_NamespaceDeleteProc* deleteProc;
  548.                                 /* Procedure invoked when deleting the
  549.                                  * namespace to, e.g., free clientData. */
  550.     struct Tcl_Namespace* parentPtr;
  551.                                 /* Points to the namespace that contains
  552.                                  * this one. NULL if this is the global
  553.                                  * namespace. */
  554. } Tcl_Namespace;
  555.  
  556. /*
  557.  * The following structure represents a call frame, or activation record.
  558.  * A call frame defines a naming context for a procedure call: its local
  559.  * scope (for local variables) and its namespace scope (used for non-local
  560.  * variables; often the global :: namespace). A call frame can also define
  561.  * the naming context for a namespace eval or namespace inscope command:
  562.  * the namespace in which the command's code should execute. The
  563.  * Tcl_CallFrame structures exist only while procedures or namespace
  564.  * eval/inscope's are being executed, and provide a Tcl call stack.
  565.  *
  566.  * A call frame is initialized and pushed using Tcl_PushCallFrame and
  567.  * popped using Tcl_PopCallFrame. Storage for a Tcl_CallFrame must be
  568.  * provided by the Tcl_PushCallFrame caller, and callers typically allocate
  569.  * them on the C call stack for efficiency. For this reason, Tcl_CallFrame
  570.  * is defined as a structure and not as an opaque token. However, most
  571.  * Tcl_CallFrame fields are hidden since applications should not access
  572.  * them directly; others are declared as "dummyX".
  573.  *
  574.  * WARNING!! The structure definition must be kept consistent with the
  575.  * CallFrame structure in tclInt.h. If you change one, change the other.
  576.  */
  577.  
  578. typedef struct Tcl_CallFrame {
  579.     Tcl_Namespace *nsPtr;
  580.     int dummy1;
  581.     int dummy2;
  582.     char *dummy3;
  583.     char *dummy4;
  584.     char *dummy5;
  585.     int dummy6;
  586.     char *dummy7;
  587.     char *dummy8;
  588.     int dummy9;
  589.     char* dummy10;
  590. } Tcl_CallFrame;
  591.  
  592. /*
  593.  * Information about commands that is returned by Tcl_GetCommandInfo and
  594.  * passed to Tcl_SetCommandInfo. objProc is an objc/objv object-based
  595.  * command procedure while proc is a traditional Tcl argc/argv
  596.  * string-based procedure. Tcl_CreateObjCommand and Tcl_CreateCommand
  597.  * ensure that both objProc and proc are non-NULL and can be called to
  598.  * execute the command. However, it may be faster to call one instead of
  599.  * the other. The member isNativeObjectProc is set to 1 if an
  600.  * object-based procedure was registered by Tcl_CreateObjCommand, and to
  601.  * 0 if a string-based procedure was registered by Tcl_CreateCommand.
  602.  * The other procedure is typically set to a compatibility wrapper that
  603.  * does string-to-object or object-to-string argument conversions then
  604.  * calls the other procedure.
  605.  */
  606.      
  607. typedef struct Tcl_CmdInfo {
  608.     int isNativeObjectProc;      /* 1 if objProc was registered by a call to
  609.                                   * Tcl_CreateObjCommand; 0 otherwise.
  610.                                   * Tcl_SetCmdInfo does not modify this
  611.                                   * field. */
  612.     Tcl_ObjCmdProc *objProc;     /* Command's object-based procedure. */
  613.     ClientData objClientData;    /* ClientData for object proc. */
  614.     Tcl_CmdProc *proc;           /* Command's string-based procedure. */
  615.     ClientData clientData;       /* ClientData for string proc. */
  616.     Tcl_CmdDeleteProc *deleteProc;
  617.                                  /* Procedure to call when command is
  618.                                   * deleted. */
  619.     ClientData deleteData;       /* Value to pass to deleteProc (usually
  620.                                   * the same as clientData). */
  621.     Tcl_Namespace *namespacePtr; /* Points to the namespace that contains
  622.                                   * this command. Note that Tcl_SetCmdInfo
  623.                                   * will not change a command's namespace;
  624.                                   * use Tcl_RenameCommand to do that. */
  625.  
  626. } Tcl_CmdInfo;
  627.  
  628. /*
  629.  * The structure defined below is used to hold dynamic strings.  The only
  630.  * field that clients should use is the string field, and they should
  631.  * never modify it.
  632.  */
  633.  
  634. #define TCL_DSTRING_STATIC_SIZE 200
  635. typedef struct Tcl_DString {
  636.     char *string;               /* Points to beginning of string:  either
  637.                                  * staticSpace below or a malloced array. */
  638.     int length;                 /* Number of non-NULL characters in the
  639.                                  * string. */
  640.     int spaceAvl;               /* Total number of bytes available for the
  641.                                  * string and its terminating NULL char. */
  642.     char staticSpace[TCL_DSTRING_STATIC_SIZE];
  643.                                 /* Space to use in common case where string
  644.                                  * is small. */
  645. } Tcl_DString;
  646.  
  647. #define Tcl_DStringLength(dsPtr) ((dsPtr)->length)
  648. #define Tcl_DStringValue(dsPtr) ((dsPtr)->string)
  649. #define Tcl_DStringTrunc Tcl_DStringSetLength
  650.  
  651. /*
  652.  * Definitions for the maximum number of digits of precision that may
  653.  * be specified in the "tcl_precision" variable, and the number of
  654.  * characters of buffer space required by Tcl_PrintDouble.
  655.  */
  656.  
  657. #define TCL_MAX_PREC 17
  658. #define TCL_DOUBLE_SPACE (TCL_MAX_PREC+10)
  659.  
  660. /*
  661.  * Flag that may be passed to Tcl_ConvertElement to force it not to
  662.  * output braces (careful!  if you change this flag be sure to change
  663.  * the definitions at the front of tclUtil.c).
  664.  */
  665.  
  666. #define TCL_DONT_USE_BRACES     1
  667.  
  668. /*
  669.  * Flag that may be passed to Tcl_GetIndexFromObj to force it to disallow
  670.  * abbreviated strings.
  671.  */
  672.  
  673. #define TCL_EXACT       1
  674.  
  675. /*
  676.  * Flag values passed to Tcl_RecordAndEval.
  677.  * WARNING: these bit choices must not conflict with the bit choices
  678.  * for evalFlag bits in tclInt.h!!
  679.  */
  680.  
  681. #define TCL_NO_EVAL             0x10000
  682. #define TCL_EVAL_GLOBAL         0x20000
  683.  
  684. /*
  685.  * Special freeProc values that may be passed to Tcl_SetResult (see
  686.  * the man page for details):
  687.  */
  688.  
  689. #define TCL_VOLATILE    ((Tcl_FreeProc *) 1)
  690. #define TCL_STATIC      ((Tcl_FreeProc *) 0)
  691. #define TCL_DYNAMIC     ((Tcl_FreeProc *) 3)
  692.  
  693. /*
  694.  * Flag values passed to variable-related procedures.
  695.  */
  696.  
  697. #define TCL_GLOBAL_ONLY          1
  698. #define TCL_NAMESPACE_ONLY       2
  699. #define TCL_APPEND_VALUE         4
  700. #define TCL_LIST_ELEMENT         8
  701. #define TCL_TRACE_READS          0x10
  702. #define TCL_TRACE_WRITES         0x20
  703. #define TCL_TRACE_UNSETS         0x40
  704. #define TCL_TRACE_DESTROYED      0x80
  705. #define TCL_INTERP_DESTROYED     0x100
  706. #define TCL_LEAVE_ERR_MSG        0x200
  707. #define TCL_PARSE_PART1          0x400
  708.  
  709. /*
  710.  * Types for linked variables:
  711.  */
  712.  
  713. #define TCL_LINK_INT            1
  714. #define TCL_LINK_DOUBLE         2
  715. #define TCL_LINK_BOOLEAN        3
  716. #define TCL_LINK_STRING         4
  717. #define TCL_LINK_READ_ONLY      0x80
  718.  
  719. /*
  720.  * The following declarations either map ckalloc and ckfree to
  721.  * malloc and free, or they map them to procedures with all sorts
  722.  * of debugging hooks defined in tclCkalloc.c.
  723.  */
  724.  
  725. EXTERN char *           Tcl_Alloc _ANSI_ARGS_((unsigned int size));
  726. EXTERN void             Tcl_Free _ANSI_ARGS_((char *ptr));
  727. EXTERN char *           Tcl_Realloc _ANSI_ARGS_((char *ptr,
  728.                             unsigned int size));
  729.  
  730. #ifdef TCL_MEM_DEBUG
  731.  
  732. #  define Tcl_Alloc(x) Tcl_DbCkalloc(x, __FILE__, __LINE__)
  733. #  define Tcl_Free(x)  Tcl_DbCkfree(x, __FILE__, __LINE__)
  734. #  define Tcl_Realloc(x,y) Tcl_DbCkrealloc((x), (y),__FILE__, __LINE__)
  735. #  define ckalloc(x) Tcl_DbCkalloc(x, __FILE__, __LINE__)
  736. #  define ckfree(x)  Tcl_DbCkfree(x, __FILE__, __LINE__)
  737. #  define ckrealloc(x,y) Tcl_DbCkrealloc((x), (y),__FILE__, __LINE__)
  738.  
  739. EXTERN int              Tcl_DumpActiveMemory _ANSI_ARGS_((char *fileName));
  740. EXTERN void             Tcl_ValidateAllMemory _ANSI_ARGS_((char *file,
  741.                             int line));
  742.  
  743. #else
  744.  
  745. /* CYGNUS LOCAL: Always use TCLALLOC.  This means that calls to malloc
  746.    will always be checked to make sure that malloc succeeded.
  747.  
  748.    NOTE: In tcl8.1a2, the definition of TclpAlloc was removed from
  749.    unix/tclUnixPort.h.  That means that in tcl8.1a2, this will wind up
  750.    calling the special allocator in tclAlloc.c, which would be bad.
  751.    When tcl 8.1 is imported, this needs to be checked.  */
  752. #ifndef USE_TCLALLOC
  753. #define USE_TCLALLOC 1
  754. #endif
  755. /* END CYGNUS LOCAL */
  756.  
  757. #  if USE_TCLALLOC
  758. #     define ckalloc(x) Tcl_Alloc(x)
  759. #     define ckfree(x) Tcl_Free(x)
  760. #     define ckrealloc(x,y) Tcl_Realloc(x,y)
  761. #  else
  762. #     define ckalloc(x) malloc(x)
  763. #     define ckfree(x)  free(x)
  764. #     define ckrealloc(x,y) realloc(x,y)
  765. #  endif
  766. #  define Tcl_DumpActiveMemory(x)
  767. #  define Tcl_ValidateAllMemory(x,y)
  768.  
  769. #endif /* TCL_MEM_DEBUG */
  770.  
  771. /*
  772.  * Forward declaration of Tcl_HashTable.  Needed by some C++ compilers
  773.  * to prevent errors when the forward reference to Tcl_HashTable is
  774.  * encountered in the Tcl_HashEntry structure.
  775.  */
  776.  
  777. #ifdef __cplusplus
  778. struct Tcl_HashTable;
  779. #endif
  780.  
  781. /*
  782.  * Structure definition for an entry in a hash table.  No-one outside
  783.  * Tcl should access any of these fields directly;  use the macros
  784.  * defined below.
  785.  */
  786.  
  787. typedef struct Tcl_HashEntry {
  788.     struct Tcl_HashEntry *nextPtr;      /* Pointer to next entry in this
  789.                                          * hash bucket, or NULL for end of
  790.                                          * chain. */
  791.     struct Tcl_HashTable *tablePtr;     /* Pointer to table containing entry. */
  792.     struct Tcl_HashEntry **bucketPtr;   /* Pointer to bucket that points to
  793.                                          * first entry in this entry's chain:
  794.                                          * used for deleting the entry. */
  795.     ClientData clientData;              /* Application stores something here
  796.                                          * with Tcl_SetHashValue. */
  797.     union {                             /* Key has one of these forms: */
  798.         char *oneWordValue;             /* One-word value for key. */
  799.         int words[1];                   /* Multiple integer words for key.
  800.                                          * The actual size will be as large
  801.                                          * as necessary for this table's
  802.                                          * keys. */
  803.         char string[4];                 /* String for key.  The actual size
  804.                                          * will be as large as needed to hold
  805.                                          * the key. */
  806.     } key;                              /* MUST BE LAST FIELD IN RECORD!! */
  807. } Tcl_HashEntry;
  808.  
  809. /*
  810.  * Structure definition for a hash table.  Must be in tcl.h so clients
  811.  * can allocate space for these structures, but clients should never
  812.  * access any fields in this structure.
  813.  */
  814.  
  815. #define TCL_SMALL_HASH_TABLE 4
  816. typedef struct Tcl_HashTable {
  817.     Tcl_HashEntry **buckets;            /* Pointer to bucket array.  Each
  818.                                          * element points to first entry in
  819.                                          * bucket's hash chain, or NULL. */
  820.     Tcl_HashEntry *staticBuckets[TCL_SMALL_HASH_TABLE];
  821.                                         /* Bucket array used for small tables
  822.                                          * (to avoid mallocs and frees). */
  823.     int numBuckets;                     /* Total number of buckets allocated
  824.                                          * at **bucketPtr. */
  825.     int numEntries;                     /* Total number of entries present
  826.                                          * in table. */
  827.     int rebuildSize;                    /* Enlarge table when numEntries gets
  828.                                          * to be this large. */
  829.     int downShift;                      /* Shift count used in hashing
  830.                                          * function.  Designed to use high-
  831.                                          * order bits of randomized keys. */
  832.     int mask;                           /* Mask value used in hashing
  833.                                          * function. */
  834.     int keyType;                        /* Type of keys used in this table.
  835.                                          * It's either TCL_STRING_KEYS,
  836.                                          * TCL_ONE_WORD_KEYS, or an integer
  837.                                          * giving the number of ints that
  838.                                          * is the size of the key.
  839.                                          */
  840.     Tcl_HashEntry *(*findProc) _ANSI_ARGS_((struct Tcl_HashTable *tablePtr,
  841.             CONST char *key));
  842.     Tcl_HashEntry *(*createProc) _ANSI_ARGS_((struct Tcl_HashTable *tablePtr,
  843.             CONST char *key, int *newPtr));
  844. } Tcl_HashTable;
  845.  
  846. /*
  847.  * Structure definition for information used to keep track of searches
  848.  * through hash tables:
  849.  */
  850.  
  851. typedef struct Tcl_HashSearch {
  852.     Tcl_HashTable *tablePtr;            /* Table being searched. */
  853.     int nextIndex;                      /* Index of next bucket to be
  854.                                          * enumerated after present one. */
  855.     Tcl_HashEntry *nextEntryPtr;        /* Next entry to be enumerated in the
  856.                                          * the current bucket. */
  857. } Tcl_HashSearch;
  858.  
  859. /*
  860.  * Acceptable key types for hash tables:
  861.  */
  862.  
  863. #define TCL_STRING_KEYS         0
  864. #define TCL_ONE_WORD_KEYS       1
  865.  
  866. /*
  867.  * Macros for clients to use to access fields of hash entries:
  868.  */
  869.  
  870. #define Tcl_GetHashValue(h) ((h)->clientData)
  871. #define Tcl_SetHashValue(h, value) ((h)->clientData = (ClientData) (value))
  872. #define Tcl_GetHashKey(tablePtr, h) \
  873.     ((char *) (((tablePtr)->keyType == TCL_ONE_WORD_KEYS) ? (h)->key.oneWordValue \
  874.                                                 : (h)->key.string))
  875.  
  876. /*
  877.  * Macros to use for clients to use to invoke find and create procedures
  878.  * for hash tables:
  879.  */
  880.  
  881. #define Tcl_FindHashEntry(tablePtr, key) \
  882.         (*((tablePtr)->findProc))(tablePtr, key)
  883. #define Tcl_CreateHashEntry(tablePtr, key, newPtr) \
  884.         (*((tablePtr)->createProc))(tablePtr, key, newPtr)
  885.  
  886. /*
  887.  * Flag values to pass to Tcl_DoOneEvent to disable searches
  888.  * for some kinds of events:
  889.  */
  890.  
  891. #define TCL_DONT_WAIT           (1<<1)
  892. #define TCL_WINDOW_EVENTS       (1<<2)
  893. #define TCL_FILE_EVENTS         (1<<3)
  894. #define TCL_TIMER_EVENTS        (1<<4)
  895. #define TCL_IDLE_EVENTS         (1<<5)  /* WAS 0x10 ???? */
  896. #define TCL_ALL_EVENTS          (~TCL_DONT_WAIT)
  897.  
  898. /*
  899.  * The following structure defines a generic event for the Tcl event
  900.  * system.  These are the things that are queued in calls to Tcl_QueueEvent
  901.  * and serviced later by Tcl_DoOneEvent.  There can be many different
  902.  * kinds of events with different fields, corresponding to window events,
  903.  * timer events, etc.  The structure for a particular event consists of
  904.  * a Tcl_Event header followed by additional information specific to that
  905.  * event.
  906.  */
  907.  
  908. struct Tcl_Event {
  909.     Tcl_EventProc *proc;        /* Procedure to call to service this event. */
  910.     struct Tcl_Event *nextPtr;  /* Next in list of pending events, or NULL. */
  911. };
  912.  
  913. /*
  914.  * Positions to pass to Tcl_QueueEvent:
  915.  */
  916.  
  917. typedef enum {
  918.     TCL_QUEUE_TAIL, TCL_QUEUE_HEAD, TCL_QUEUE_MARK
  919. } Tcl_QueuePosition;
  920.  
  921. /*
  922.  * Values to pass to Tcl_SetServiceMode to specify the behavior of notifier
  923.  * event routines.
  924.  */
  925.  
  926. #define TCL_SERVICE_NONE 0
  927. #define TCL_SERVICE_ALL 1
  928.  
  929. /*
  930.  * The following structure keeps is used to hold a time value, either as
  931.  * an absolute time (the number of seconds from the epoch) or as an
  932.  * elapsed time. On Unix systems the epoch is Midnight Jan 1, 1970 GMT.
  933.  * On Macintosh systems the epoch is Midnight Jan 1, 1904 GMT.
  934.  */
  935.  
  936. typedef struct Tcl_Time {
  937.     long sec;                   /* Seconds. */
  938.     long usec;                  /* Microseconds. */
  939. } Tcl_Time;
  940.  
  941. /*
  942.  * Bits to pass to Tcl_CreateFileHandler and Tcl_CreateChannelHandler
  943.  * to indicate what sorts of events are of interest:
  944.  */
  945.  
  946. #define TCL_READABLE    (1<<1)
  947. #define TCL_WRITABLE    (1<<2)
  948. #define TCL_EXCEPTION   (1<<3)
  949.  
  950. /*
  951.  * Flag values to pass to Tcl_OpenCommandChannel to indicate the
  952.  * disposition of the stdio handles.  TCL_STDIN, TCL_STDOUT, TCL_STDERR,
  953.  * are also used in Tcl_GetStdChannel.
  954.  */
  955.  
  956. #define TCL_STDIN               (1<<1) 
  957. #define TCL_STDOUT              (1<<2)
  958. #define TCL_STDERR              (1<<3)
  959. #define TCL_ENFORCE_MODE        (1<<4)
  960.  
  961. /*
  962.  * Typedefs for the various operations in a channel type:
  963.  */
  964.  
  965. typedef int     (Tcl_DriverBlockModeProc) _ANSI_ARGS_((
  966.                     ClientData instanceData, int mode));
  967. typedef int     (Tcl_DriverCloseProc) _ANSI_ARGS_((ClientData instanceData,
  968.                     Tcl_Interp *interp));
  969. typedef int     (Tcl_DriverInputProc) _ANSI_ARGS_((ClientData instanceData,
  970.                     char *buf, int toRead, int *errorCodePtr));
  971. typedef int     (Tcl_DriverOutputProc) _ANSI_ARGS_((ClientData instanceData,
  972.                     char *buf, int toWrite, int *errorCodePtr));
  973. typedef int     (Tcl_DriverSeekProc) _ANSI_ARGS_((ClientData instanceData,
  974.                     long offset, int mode, int *errorCodePtr));
  975. typedef int     (Tcl_DriverSetOptionProc) _ANSI_ARGS_((
  976.                     ClientData instanceData, Tcl_Interp *interp,
  977.                     char *optionName, char *value));
  978. typedef int     (Tcl_DriverGetOptionProc) _ANSI_ARGS_((
  979.                     ClientData instanceData, Tcl_Interp *interp,
  980.                     char *optionName, Tcl_DString *dsPtr));
  981. typedef void    (Tcl_DriverWatchProc) _ANSI_ARGS_((
  982.                     ClientData instanceData, int mask));
  983. typedef int     (Tcl_DriverGetHandleProc) _ANSI_ARGS_((
  984.                     ClientData instanceData, int direction,
  985.                     ClientData *handlePtr));
  986.  
  987. /*
  988.  * Enum for different end of line translation and recognition modes.
  989.  */
  990.  
  991. typedef enum Tcl_EolTranslation {
  992.     TCL_TRANSLATE_AUTO,                 /* Eol == \r, \n and \r\n. */
  993.     TCL_TRANSLATE_CR,                   /* Eol == \r. */
  994.     TCL_TRANSLATE_LF,                   /* Eol == \n. */
  995.     TCL_TRANSLATE_CRLF                  /* Eol == \r\n. */
  996. } Tcl_EolTranslation;
  997.  
  998. /*
  999.  * struct Tcl_ChannelType:
  1000.  *
  1001.  * One such structure exists for each type (kind) of channel.
  1002.  * It collects together in one place all the functions that are
  1003.  * part of the specific channel type.
  1004.  */
  1005.  
  1006. typedef struct Tcl_ChannelType {
  1007.     char *typeName;                     /* The name of the channel type in Tcl
  1008.                                          * commands. This storage is owned by
  1009.                                          * channel type. */
  1010.     Tcl_DriverBlockModeProc *blockModeProc;
  1011.                                         /* Set blocking mode for the
  1012.                                          * raw channel. May be NULL. */
  1013.     Tcl_DriverCloseProc *closeProc;     /* Procedure to call to close
  1014.                                          * the channel. */
  1015.     Tcl_DriverInputProc *inputProc;     /* Procedure to call for input
  1016.                                          * on channel. */
  1017.     Tcl_DriverOutputProc *outputProc;   /* Procedure to call for output
  1018.                                          * on channel. */
  1019.     Tcl_DriverSeekProc *seekProc;       /* Procedure to call to seek
  1020.                                          * on the channel. May be NULL. */
  1021.     Tcl_DriverSetOptionProc *setOptionProc;
  1022.                                         /* Set an option on a channel. */
  1023.     Tcl_DriverGetOptionProc *getOptionProc;
  1024.                                         /* Get an option from a channel. */
  1025.     Tcl_DriverWatchProc *watchProc;     /* Set up the notifier to watch
  1026.                                          * for events on this channel. */
  1027.     Tcl_DriverGetHandleProc *getHandleProc;
  1028.                                         /* Get an OS handle from the channel
  1029.                                          * or NULL if not supported. */
  1030.     VOID *reserved;                     /* reserved for future expansion */
  1031. } Tcl_ChannelType;
  1032.  
  1033. /*
  1034.  * The following flags determine whether the blockModeProc above should
  1035.  * set the channel into blocking or nonblocking mode. They are passed
  1036.  * as arguments to the blockModeProc procedure in the above structure.
  1037.  */
  1038.  
  1039. #define TCL_MODE_BLOCKING 0             /* Put channel into blocking mode. */
  1040. #define TCL_MODE_NONBLOCKING 1          /* Put channel into nonblocking
  1041.                                          * mode. */
  1042.  
  1043. /*
  1044.  * Enum for different types of file paths.
  1045.  */
  1046.  
  1047. typedef enum Tcl_PathType {
  1048.     TCL_PATH_ABSOLUTE,
  1049.     TCL_PATH_RELATIVE,
  1050.     TCL_PATH_VOLUME_RELATIVE
  1051. } Tcl_PathType;
  1052.  
  1053. /*
  1054.  * Exported Tcl procedures:
  1055.  */
  1056.  
  1057. EXTERN void             Tcl_AddErrorInfo _ANSI_ARGS_((Tcl_Interp *interp,
  1058.                             char *message));
  1059. EXTERN void             Tcl_AddObjErrorInfo _ANSI_ARGS_((Tcl_Interp *interp,
  1060.                             char *message, int length));
  1061. EXTERN void             Tcl_AllowExceptions _ANSI_ARGS_((Tcl_Interp *interp));
  1062. EXTERN int              Tcl_AppendAllObjTypes _ANSI_ARGS_((
  1063.                             Tcl_Interp *interp, Tcl_Obj *objPtr));
  1064. EXTERN void             Tcl_AppendElement _ANSI_ARGS_((Tcl_Interp *interp,
  1065.                             char *string));
  1066. EXTERN void             Tcl_AppendResult _ANSI_ARGS_(
  1067.                             TCL_VARARGS(Tcl_Interp *,interp));
  1068. EXTERN void             Tcl_AppendToObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1069.                             char *bytes, int length));
  1070. EXTERN void             Tcl_AppendStringsToObj _ANSI_ARGS_(
  1071.                             TCL_VARARGS(Tcl_Obj *,interp));
  1072. EXTERN int              Tcl_AppInit _ANSI_ARGS_((Tcl_Interp *interp));
  1073. EXTERN Tcl_AsyncHandler Tcl_AsyncCreate _ANSI_ARGS_((Tcl_AsyncProc *proc,
  1074.                             ClientData clientData));
  1075. EXTERN void             Tcl_AsyncDelete _ANSI_ARGS_((Tcl_AsyncHandler async));
  1076. EXTERN int              Tcl_AsyncInvoke _ANSI_ARGS_((Tcl_Interp *interp,
  1077.                             int code));
  1078. EXTERN void             Tcl_AsyncMark _ANSI_ARGS_((Tcl_AsyncHandler async));
  1079. EXTERN int              Tcl_AsyncReady _ANSI_ARGS_((void));
  1080. EXTERN void             Tcl_BackgroundError _ANSI_ARGS_((Tcl_Interp *interp));
  1081. EXTERN char             Tcl_Backslash _ANSI_ARGS_((CONST char *src,
  1082.                             int *readPtr));
  1083. EXTERN int              Tcl_BadChannelOption _ANSI_ARGS_((Tcl_Interp *interp,
  1084.                             char *optionName, char *optionList));
  1085. EXTERN void             Tcl_CallWhenDeleted _ANSI_ARGS_((Tcl_Interp *interp,
  1086.                             Tcl_InterpDeleteProc *proc,
  1087.                             ClientData clientData));
  1088. EXTERN void             Tcl_CancelIdleCall _ANSI_ARGS_((Tcl_IdleProc *idleProc,
  1089.                             ClientData clientData));
  1090. #define Tcl_Ckalloc Tcl_Alloc
  1091. #define Tcl_Ckfree Tcl_Free
  1092. #define Tcl_Ckrealloc Tcl_Realloc
  1093. EXTERN int              Tcl_Close _ANSI_ARGS_((Tcl_Interp *interp,
  1094.                             Tcl_Channel chan));
  1095. EXTERN int              Tcl_CommandComplete _ANSI_ARGS_((char *cmd));
  1096. EXTERN char *           Tcl_Concat _ANSI_ARGS_((int argc, char **argv));
  1097. EXTERN Tcl_Obj *        Tcl_ConcatObj _ANSI_ARGS_((int objc,
  1098.                             Tcl_Obj *CONST objv[]));
  1099. EXTERN int              Tcl_ConvertCountedElement _ANSI_ARGS_((CONST char *src,
  1100.                             int length, char *dst, int flags));
  1101. EXTERN int              Tcl_ConvertElement _ANSI_ARGS_((CONST char *src,
  1102.                             char *dst, int flags));
  1103. EXTERN int              Tcl_ConvertToType _ANSI_ARGS_((Tcl_Interp *interp,
  1104.                             Tcl_Obj *objPtr, Tcl_ObjType *typePtr));
  1105. EXTERN int              Tcl_CreateAlias _ANSI_ARGS_((Tcl_Interp *slave,
  1106.                             char *slaveCmd, Tcl_Interp *target,
  1107.                             char *targetCmd, int argc, char **argv));
  1108. EXTERN int              Tcl_CreateAliasObj _ANSI_ARGS_((Tcl_Interp *slave,
  1109.                             char *slaveCmd, Tcl_Interp *target,
  1110.                             char *targetCmd, int objc,
  1111.                             Tcl_Obj *CONST objv[]));
  1112. EXTERN Tcl_Channel      Tcl_CreateChannel _ANSI_ARGS_((
  1113.                             Tcl_ChannelType *typePtr, char *chanName,
  1114.                             ClientData instanceData, int mask));
  1115. EXTERN void             Tcl_CreateChannelHandler _ANSI_ARGS_((
  1116.                             Tcl_Channel chan, int mask,
  1117.                             Tcl_ChannelProc *proc, ClientData clientData));
  1118. EXTERN void             Tcl_CreateCloseHandler _ANSI_ARGS_((
  1119.                             Tcl_Channel chan, Tcl_CloseProc *proc,
  1120.                             ClientData clientData));
  1121. EXTERN Tcl_Command      Tcl_CreateCommand _ANSI_ARGS_((Tcl_Interp *interp,
  1122.                             char *cmdName, Tcl_CmdProc *proc,
  1123.                             ClientData clientData,
  1124.                             Tcl_CmdDeleteProc *deleteProc));
  1125. EXTERN void             Tcl_CreateEventSource _ANSI_ARGS_((
  1126.                             Tcl_EventSetupProc *setupProc,
  1127.                             Tcl_EventCheckProc *checkProc,
  1128.                             ClientData clientData));
  1129. EXTERN void             Tcl_CreateExitHandler _ANSI_ARGS_((Tcl_ExitProc *proc,
  1130.                             ClientData clientData));
  1131. EXTERN void             Tcl_CreateFileHandler _ANSI_ARGS_((
  1132.                             int fd, int mask, Tcl_FileProc *proc,
  1133.                             ClientData clientData));
  1134. EXTERN Tcl_Interp *     Tcl_CreateInterp _ANSI_ARGS_((void));
  1135. EXTERN void             Tcl_CreateMathFunc _ANSI_ARGS_((Tcl_Interp *interp,
  1136.                             char *name, int numArgs, Tcl_ValueType *argTypes,
  1137.                             Tcl_MathProc *proc, ClientData clientData));
  1138. EXTERN Tcl_Command      Tcl_CreateObjCommand _ANSI_ARGS_((
  1139.                             Tcl_Interp *interp, char *cmdName,
  1140.                             Tcl_ObjCmdProc *proc, ClientData clientData,
  1141.                             Tcl_CmdDeleteProc *deleteProc));
  1142. EXTERN Tcl_Interp *     Tcl_CreateSlave _ANSI_ARGS_((Tcl_Interp *interp,
  1143.                             char *slaveName, int isSafe));
  1144. EXTERN Tcl_TimerToken   Tcl_CreateTimerHandler _ANSI_ARGS_((int milliseconds,
  1145.                             Tcl_TimerProc *proc, ClientData clientData));
  1146. EXTERN Tcl_Trace        Tcl_CreateTrace _ANSI_ARGS_((Tcl_Interp *interp,
  1147.                             int level, Tcl_CmdTraceProc *proc,
  1148.                             ClientData clientData));
  1149. EXTERN char *           Tcl_DbCkalloc _ANSI_ARGS_((unsigned int size,
  1150.                             char *file, int line));
  1151. EXTERN int              Tcl_DbCkfree _ANSI_ARGS_((char *ptr,
  1152.                             char *file, int line));
  1153. EXTERN char *           Tcl_DbCkrealloc _ANSI_ARGS_((char *ptr,
  1154.                             unsigned int size, char *file, int line));
  1155. EXTERN void             Tcl_DbDecrRefCount _ANSI_ARGS_((Tcl_Obj *objPtr,
  1156.                             char *file, int line));
  1157. EXTERN void             Tcl_DbIncrRefCount _ANSI_ARGS_((Tcl_Obj *objPtr,
  1158.                             char *file, int line));
  1159. EXTERN int              Tcl_DbIsShared _ANSI_ARGS_((Tcl_Obj *objPtr,
  1160.                             char *file, int line));
  1161. EXTERN Tcl_Obj *        Tcl_DbNewBooleanObj _ANSI_ARGS_((int boolValue,
  1162.                             char *file, int line));
  1163. EXTERN Tcl_Obj *        Tcl_DbNewDoubleObj _ANSI_ARGS_((double doubleValue,
  1164.                             char *file, int line));
  1165. EXTERN Tcl_Obj *        Tcl_DbNewListObj _ANSI_ARGS_((int objc,
  1166.                             Tcl_Obj *CONST objv[], char *file, int line));
  1167. EXTERN Tcl_Obj *        Tcl_DbNewLongObj _ANSI_ARGS_((long longValue,
  1168.                             char *file, int line));
  1169. EXTERN Tcl_Obj *        Tcl_DbNewObj _ANSI_ARGS_((char *file, int line));
  1170. EXTERN Tcl_Obj *        Tcl_DbNewStringObj _ANSI_ARGS_((char *bytes,
  1171.                             int length, char *file, int line));
  1172. EXTERN void             Tcl_DeleteAssocData _ANSI_ARGS_((Tcl_Interp *interp,
  1173.                             char *name));
  1174. EXTERN int              Tcl_DeleteCommand _ANSI_ARGS_((Tcl_Interp *interp,
  1175.                             char *cmdName));
  1176. EXTERN int              Tcl_DeleteCommandFromToken _ANSI_ARGS_((
  1177.                             Tcl_Interp *interp, Tcl_Command command));
  1178. EXTERN void             Tcl_DeleteChannelHandler _ANSI_ARGS_((
  1179.                             Tcl_Channel chan, Tcl_ChannelProc *proc,
  1180.                             ClientData clientData));
  1181. EXTERN void             Tcl_DeleteCloseHandler _ANSI_ARGS_((
  1182.                             Tcl_Channel chan, Tcl_CloseProc *proc,
  1183.                             ClientData clientData));
  1184. EXTERN void             Tcl_DeleteEvents _ANSI_ARGS_((
  1185.                             Tcl_EventDeleteProc *proc,
  1186.                             ClientData clientData));
  1187. EXTERN void             Tcl_DeleteEventSource _ANSI_ARGS_((
  1188.                             Tcl_EventSetupProc *setupProc,
  1189.                             Tcl_EventCheckProc *checkProc,
  1190.                             ClientData clientData));
  1191. EXTERN void             Tcl_DeleteExitHandler _ANSI_ARGS_((Tcl_ExitProc *proc,
  1192.                             ClientData clientData));
  1193. EXTERN void             Tcl_DeleteFileHandler _ANSI_ARGS_((int fd));
  1194. EXTERN void             Tcl_DeleteHashEntry _ANSI_ARGS_((
  1195.                             Tcl_HashEntry *entryPtr));
  1196. EXTERN void             Tcl_DeleteHashTable _ANSI_ARGS_((
  1197.                             Tcl_HashTable *tablePtr));
  1198. EXTERN void             Tcl_DeleteInterp _ANSI_ARGS_((Tcl_Interp *interp));
  1199. EXTERN void             Tcl_DeleteTimerHandler _ANSI_ARGS_((
  1200.                             Tcl_TimerToken token));
  1201. EXTERN void             Tcl_DeleteTrace _ANSI_ARGS_((Tcl_Interp *interp,
  1202.                             Tcl_Trace trace));
  1203. EXTERN void             Tcl_DetachPids _ANSI_ARGS_((int numPids, Tcl_Pid *pidPtr));
  1204. EXTERN void             Tcl_DontCallWhenDeleted _ANSI_ARGS_((
  1205.                             Tcl_Interp *interp, Tcl_InterpDeleteProc *proc,
  1206.                             ClientData clientData));
  1207. EXTERN int              Tcl_DoOneEvent _ANSI_ARGS_((int flags));
  1208. EXTERN void             Tcl_DoWhenIdle _ANSI_ARGS_((Tcl_IdleProc *proc,
  1209.                             ClientData clientData));
  1210. EXTERN char *           Tcl_DStringAppend _ANSI_ARGS_((Tcl_DString *dsPtr,
  1211.                             CONST char *string, int length));
  1212. EXTERN char *           Tcl_DStringAppendElement _ANSI_ARGS_((
  1213.                             Tcl_DString *dsPtr, CONST char *string));
  1214. EXTERN void             Tcl_DStringEndSublist _ANSI_ARGS_((Tcl_DString *dsPtr));
  1215. EXTERN void             Tcl_DStringFree _ANSI_ARGS_((Tcl_DString *dsPtr));
  1216. EXTERN void             Tcl_DStringGetResult _ANSI_ARGS_((Tcl_Interp *interp,
  1217.                             Tcl_DString *dsPtr));
  1218. EXTERN void             Tcl_DStringInit _ANSI_ARGS_((Tcl_DString *dsPtr));
  1219. EXTERN void             Tcl_DStringResult _ANSI_ARGS_((Tcl_Interp *interp,
  1220.                             Tcl_DString *dsPtr));
  1221. EXTERN void             Tcl_DStringSetLength _ANSI_ARGS_((Tcl_DString *dsPtr,
  1222.                             int length));
  1223. EXTERN void             Tcl_DStringStartSublist _ANSI_ARGS_((
  1224.                             Tcl_DString *dsPtr));
  1225. EXTERN Tcl_Obj *        Tcl_DuplicateObj _ANSI_ARGS_((Tcl_Obj *objPtr));
  1226. EXTERN int              Tcl_Eof _ANSI_ARGS_((Tcl_Channel chan));
  1227. EXTERN char *           Tcl_ErrnoId _ANSI_ARGS_((void));
  1228. EXTERN char *           Tcl_ErrnoMsg _ANSI_ARGS_((int err));
  1229. EXTERN int              Tcl_Eval _ANSI_ARGS_((Tcl_Interp *interp,
  1230.                             char *string));
  1231. EXTERN int              Tcl_EvalFile _ANSI_ARGS_((Tcl_Interp *interp,
  1232.                             char *fileName));
  1233. EXTERN void             Tcl_EventuallyFree _ANSI_ARGS_((ClientData clientData,
  1234.                             Tcl_FreeProc *freeProc));
  1235. EXTERN int              Tcl_EvalObj _ANSI_ARGS_((Tcl_Interp *interp,
  1236.                             Tcl_Obj *objPtr));
  1237. EXTERN void             Tcl_Exit _ANSI_ARGS_((int status));
  1238. EXTERN int              Tcl_ExposeCommand _ANSI_ARGS_((Tcl_Interp *interp,
  1239.                             char *hiddenCmdToken, char *cmdName));
  1240. EXTERN int              Tcl_ExprBoolean _ANSI_ARGS_((Tcl_Interp *interp,
  1241.                             char *string, int *ptr));
  1242. EXTERN int              Tcl_ExprBooleanObj _ANSI_ARGS_((Tcl_Interp *interp,
  1243.                             Tcl_Obj *objPtr, int *ptr));
  1244. EXTERN int              Tcl_ExprDouble _ANSI_ARGS_((Tcl_Interp *interp,
  1245.                             char *string, double *ptr));
  1246. EXTERN int              Tcl_ExprDoubleObj _ANSI_ARGS_((Tcl_Interp *interp,
  1247.                             Tcl_Obj *objPtr, double *ptr));
  1248. EXTERN int              Tcl_ExprLong _ANSI_ARGS_((Tcl_Interp *interp,
  1249.                             char *string, long *ptr));
  1250. EXTERN int              Tcl_ExprLongObj _ANSI_ARGS_((Tcl_Interp *interp,
  1251.                             Tcl_Obj *objPtr, long *ptr));
  1252. EXTERN int              Tcl_ExprObj _ANSI_ARGS_((Tcl_Interp *interp,
  1253.                             Tcl_Obj *objPtr, Tcl_Obj **resultPtrPtr));
  1254. EXTERN int              Tcl_ExprString _ANSI_ARGS_((Tcl_Interp *interp,
  1255.                             char *string));
  1256. EXTERN void             Tcl_Finalize _ANSI_ARGS_((void));
  1257. EXTERN void             Tcl_FindExecutable _ANSI_ARGS_((char *argv0));
  1258. EXTERN Tcl_HashEntry *  Tcl_FirstHashEntry _ANSI_ARGS_((
  1259.                             Tcl_HashTable *tablePtr,
  1260.                             Tcl_HashSearch *searchPtr));
  1261. EXTERN int              Tcl_Flush _ANSI_ARGS_((Tcl_Channel chan));
  1262. EXTERN void             TclFreeObj _ANSI_ARGS_((Tcl_Obj *objPtr));
  1263. EXTERN void             Tcl_FreeResult _ANSI_ARGS_((Tcl_Interp *interp));
  1264. EXTERN int              Tcl_GetAlias _ANSI_ARGS_((Tcl_Interp *interp,
  1265.                             char *slaveCmd, Tcl_Interp **targetInterpPtr,
  1266.                             char **targetCmdPtr, int *argcPtr,
  1267.                             char ***argvPtr));
  1268. EXTERN int              Tcl_GetAliasObj _ANSI_ARGS_((Tcl_Interp *interp,
  1269.                             char *slaveCmd, Tcl_Interp **targetInterpPtr,
  1270.                             char **targetCmdPtr, int *objcPtr,
  1271.                             Tcl_Obj ***objv));
  1272. EXTERN ClientData       Tcl_GetAssocData _ANSI_ARGS_((Tcl_Interp *interp,
  1273.                             char *name, Tcl_InterpDeleteProc **procPtr));
  1274. EXTERN int              Tcl_GetBoolean _ANSI_ARGS_((Tcl_Interp *interp,
  1275.                             char *string, int *boolPtr));
  1276. EXTERN int              Tcl_GetBooleanFromObj _ANSI_ARGS_((
  1277.                             Tcl_Interp *interp, Tcl_Obj *objPtr,
  1278.                             int *boolPtr));
  1279. EXTERN Tcl_Channel      Tcl_GetChannel _ANSI_ARGS_((Tcl_Interp *interp,
  1280.                             char *chanName, int *modePtr));
  1281. EXTERN int              Tcl_GetChannelBufferSize _ANSI_ARGS_((
  1282.                             Tcl_Channel chan));
  1283. EXTERN int              Tcl_GetChannelHandle _ANSI_ARGS_((Tcl_Channel chan,
  1284.                             int direction, ClientData *handlePtr));
  1285. EXTERN ClientData       Tcl_GetChannelInstanceData _ANSI_ARGS_((
  1286.                             Tcl_Channel chan));
  1287. EXTERN int              Tcl_GetChannelMode _ANSI_ARGS_((Tcl_Channel chan));
  1288. EXTERN char *           Tcl_GetChannelName _ANSI_ARGS_((Tcl_Channel chan));
  1289. EXTERN int              Tcl_GetChannelOption _ANSI_ARGS_((Tcl_Interp *interp,
  1290.                             Tcl_Channel chan, char *optionName,
  1291.                             Tcl_DString *dsPtr));
  1292. EXTERN Tcl_ChannelType * Tcl_GetChannelType _ANSI_ARGS_((Tcl_Channel chan));
  1293. EXTERN int              Tcl_GetCommandInfo _ANSI_ARGS_((Tcl_Interp *interp,
  1294.                             char *cmdName, Tcl_CmdInfo *infoPtr));
  1295. EXTERN char *           Tcl_GetCommandName _ANSI_ARGS_((Tcl_Interp *interp,
  1296.                             Tcl_Command command));
  1297. EXTERN int              Tcl_GetDouble _ANSI_ARGS_((Tcl_Interp *interp,
  1298.                             char *string, double *doublePtr));
  1299. EXTERN int              Tcl_GetDoubleFromObj _ANSI_ARGS_((
  1300.                             Tcl_Interp *interp, Tcl_Obj *objPtr,
  1301.                             double *doublePtr));
  1302. EXTERN int              Tcl_GetErrno _ANSI_ARGS_((void));
  1303. EXTERN char *           Tcl_GetHostName _ANSI_ARGS_((void));
  1304. EXTERN int              Tcl_GetIndexFromObj _ANSI_ARGS_((Tcl_Interp *interp,
  1305.                             Tcl_Obj *objPtr, char **tablePtr, char *msg,
  1306.                             int flags, int *indexPtr));
  1307. EXTERN int              Tcl_GetInt _ANSI_ARGS_((Tcl_Interp *interp,
  1308.                             char *string, int *intPtr));
  1309. EXTERN int              Tcl_GetInterpPath _ANSI_ARGS_((Tcl_Interp *askInterp,
  1310.                             Tcl_Interp *slaveInterp));
  1311. EXTERN int              Tcl_GetIntFromObj _ANSI_ARGS_((Tcl_Interp *interp,
  1312.                             Tcl_Obj *objPtr, int *intPtr));
  1313. EXTERN int              Tcl_GetLongFromObj _ANSI_ARGS_((Tcl_Interp *interp,
  1314.                             Tcl_Obj *objPtr, long *longPtr));
  1315. EXTERN Tcl_Interp *     Tcl_GetMaster _ANSI_ARGS_((Tcl_Interp *interp));
  1316. EXTERN CONST char *     Tcl_GetNameOfExecutable _ANSI_ARGS_((void));
  1317. EXTERN Tcl_Obj *        Tcl_GetObjResult _ANSI_ARGS_((Tcl_Interp *interp));
  1318. EXTERN Tcl_ObjType *    Tcl_GetObjType _ANSI_ARGS_((char *typeName));
  1319. EXTERN int              Tcl_GetOpenFile _ANSI_ARGS_((Tcl_Interp *interp,
  1320.                             char *string, int write, int checkUsage,
  1321.                             ClientData *filePtr));
  1322. EXTERN Tcl_PathType     Tcl_GetPathType _ANSI_ARGS_((char *path));
  1323. EXTERN int              Tcl_Gets _ANSI_ARGS_((Tcl_Channel chan,
  1324.                             Tcl_DString *dsPtr));
  1325. EXTERN int              Tcl_GetsObj _ANSI_ARGS_((Tcl_Channel chan,
  1326.                             Tcl_Obj *objPtr));
  1327. EXTERN int              Tcl_GetServiceMode _ANSI_ARGS_((void));
  1328. EXTERN Tcl_Interp *     Tcl_GetSlave _ANSI_ARGS_((Tcl_Interp *interp,
  1329.                             char *slaveName));
  1330. EXTERN Tcl_Channel      Tcl_GetStdChannel _ANSI_ARGS_((int type));
  1331. EXTERN char *           Tcl_GetStringFromObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1332.                             int *lengthPtr));
  1333. EXTERN char *           Tcl_GetStringResult _ANSI_ARGS_((Tcl_Interp *interp));
  1334. EXTERN char *           Tcl_GetVar _ANSI_ARGS_((Tcl_Interp *interp,
  1335.                             char *varName, int flags));
  1336. EXTERN char *           Tcl_GetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1337.                             char *part1, char *part2, int flags));
  1338. EXTERN int              Tcl_GlobalEval _ANSI_ARGS_((Tcl_Interp *interp,
  1339.                             char *command));
  1340. EXTERN int              Tcl_GlobalEvalObj _ANSI_ARGS_((Tcl_Interp *interp,
  1341.                             Tcl_Obj *objPtr));
  1342. EXTERN char *           Tcl_HashStats _ANSI_ARGS_((Tcl_HashTable *tablePtr));
  1343. EXTERN int              Tcl_HideCommand _ANSI_ARGS_((Tcl_Interp *interp,
  1344.                             char *cmdName, char *hiddenCmdToken));
  1345. EXTERN int              Tcl_Init _ANSI_ARGS_((Tcl_Interp *interp));
  1346. EXTERN void             Tcl_InitHashTable _ANSI_ARGS_((Tcl_HashTable *tablePtr,
  1347.                             int keyType));
  1348. EXTERN void             Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp *interp));
  1349. EXTERN int              Tcl_InputBlocked _ANSI_ARGS_((Tcl_Channel chan));
  1350. EXTERN int              Tcl_InputBuffered _ANSI_ARGS_((Tcl_Channel chan));
  1351. EXTERN int              Tcl_InterpDeleted _ANSI_ARGS_((Tcl_Interp *interp));
  1352. EXTERN int              Tcl_IsSafe _ANSI_ARGS_((Tcl_Interp *interp));
  1353. EXTERN void             Tcl_InvalidateStringRep _ANSI_ARGS_((
  1354.                             Tcl_Obj *objPtr));
  1355. EXTERN char *           Tcl_JoinPath _ANSI_ARGS_((int argc, char **argv,
  1356.                             Tcl_DString *resultPtr));
  1357. EXTERN int              Tcl_LinkVar _ANSI_ARGS_((Tcl_Interp *interp,
  1358.                             char *varName, char *addr, int type));
  1359. EXTERN int              Tcl_ListObjAppendList _ANSI_ARGS_((
  1360.                             Tcl_Interp *interp, Tcl_Obj *listPtr,
  1361.                             Tcl_Obj *elemListPtr));
  1362. EXTERN int              Tcl_ListObjAppendElement _ANSI_ARGS_((
  1363.                             Tcl_Interp *interp, Tcl_Obj *listPtr,
  1364.                             Tcl_Obj *objPtr));
  1365. EXTERN int              Tcl_ListObjGetElements _ANSI_ARGS_((
  1366.                             Tcl_Interp *interp, Tcl_Obj *listPtr,
  1367.                             int *objcPtr, Tcl_Obj ***objvPtr));
  1368. EXTERN int              Tcl_ListObjIndex _ANSI_ARGS_((Tcl_Interp *interp,
  1369.                             Tcl_Obj *listPtr, int index,
  1370.                             Tcl_Obj **objPtrPtr));
  1371. EXTERN int              Tcl_ListObjLength _ANSI_ARGS_((Tcl_Interp *interp,
  1372.                             Tcl_Obj *listPtr, int *intPtr));
  1373. EXTERN int              Tcl_ListObjReplace _ANSI_ARGS_((Tcl_Interp *interp,
  1374.                             Tcl_Obj *listPtr, int first, int count,
  1375.                             int objc, Tcl_Obj *CONST objv[]));
  1376. EXTERN void             Tcl_Main _ANSI_ARGS_((int argc, char **argv,
  1377.                             Tcl_AppInitProc *appInitProc));
  1378. EXTERN Tcl_Channel      Tcl_MakeFileChannel _ANSI_ARGS_((ClientData handle,
  1379.                             int mode));
  1380. EXTERN int              Tcl_MakeSafe _ANSI_ARGS_((Tcl_Interp *interp));
  1381. EXTERN Tcl_Channel      Tcl_MakeTcpClientChannel _ANSI_ARGS_((
  1382.                             ClientData tcpSocket));
  1383. EXTERN char *           Tcl_Merge _ANSI_ARGS_((int argc, char **argv));
  1384. EXTERN Tcl_HashEntry *  Tcl_NextHashEntry _ANSI_ARGS_((
  1385.                             Tcl_HashSearch *searchPtr));
  1386. EXTERN void             Tcl_NotifyChannel _ANSI_ARGS_((Tcl_Channel channel,
  1387.                             int mask));
  1388. EXTERN Tcl_Obj *        Tcl_ObjGetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1389.                             Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr,
  1390.                             int flags));
  1391. EXTERN Tcl_Obj *        Tcl_ObjSetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1392.                             Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr,
  1393.                             Tcl_Obj *newValuePtr, int flags));
  1394. EXTERN Tcl_Channel      Tcl_OpenCommandChannel _ANSI_ARGS_((
  1395.                             Tcl_Interp *interp, int argc, char **argv,
  1396.                             int flags));
  1397. EXTERN Tcl_Channel      Tcl_OpenFileChannel _ANSI_ARGS_((Tcl_Interp *interp,
  1398.                             char *fileName, char *modeString,
  1399.                             int permissions));
  1400. EXTERN Tcl_Channel      Tcl_OpenTcpClient _ANSI_ARGS_((Tcl_Interp *interp,
  1401.                             int port, char *address, char *myaddr,
  1402.                             int myport, int async));
  1403. EXTERN Tcl_Channel      Tcl_OpenTcpServer _ANSI_ARGS_((Tcl_Interp *interp,
  1404.                             int port, char *host,
  1405.                             Tcl_TcpAcceptProc *acceptProc,
  1406.                             ClientData callbackData));
  1407. EXTERN char *           Tcl_ParseVar _ANSI_ARGS_((Tcl_Interp *interp,
  1408.                             char *string, char **termPtr));
  1409. EXTERN int              Tcl_PkgProvide _ANSI_ARGS_((Tcl_Interp *interp,
  1410.                             char *name, char *version));
  1411. EXTERN char *           Tcl_PkgRequire _ANSI_ARGS_((Tcl_Interp *interp,
  1412.                             char *name, char *version, int exact));
  1413. EXTERN char *           Tcl_PosixError _ANSI_ARGS_((Tcl_Interp *interp));
  1414. EXTERN void             Tcl_Preserve _ANSI_ARGS_((ClientData data));
  1415. EXTERN void             Tcl_PrintDouble _ANSI_ARGS_((Tcl_Interp *interp,
  1416.                             double value, char *dst));
  1417. EXTERN int              Tcl_PutEnv _ANSI_ARGS_((CONST char *string));
  1418. EXTERN void             Tcl_QueueEvent _ANSI_ARGS_((Tcl_Event *evPtr,
  1419.                             Tcl_QueuePosition position));
  1420. EXTERN int              Tcl_Read _ANSI_ARGS_((Tcl_Channel chan,
  1421.                             char *bufPtr, int toRead));
  1422. EXTERN void             Tcl_ReapDetachedProcs _ANSI_ARGS_((void));
  1423. EXTERN int              Tcl_RecordAndEval _ANSI_ARGS_((Tcl_Interp *interp,
  1424.                             char *cmd, int flags));
  1425. EXTERN int              Tcl_RecordAndEvalObj _ANSI_ARGS_((Tcl_Interp *interp,
  1426.                             Tcl_Obj *cmdPtr, int flags));
  1427. EXTERN Tcl_RegExp       Tcl_RegExpCompile _ANSI_ARGS_((Tcl_Interp *interp,
  1428.                             char *string));
  1429. EXTERN int              Tcl_RegExpExec _ANSI_ARGS_((Tcl_Interp *interp,
  1430.                             Tcl_RegExp regexp, char *string, char *start));
  1431. EXTERN int              Tcl_RegExpMatch _ANSI_ARGS_((Tcl_Interp *interp,
  1432.                             char *string, char *pattern));
  1433. EXTERN void             Tcl_RegExpRange _ANSI_ARGS_((Tcl_RegExp regexp,
  1434.                             int index, char **startPtr, char **endPtr));
  1435. EXTERN void             Tcl_RegisterChannel _ANSI_ARGS_((Tcl_Interp *interp,
  1436.                             Tcl_Channel chan));
  1437. EXTERN void             Tcl_RegisterObjType _ANSI_ARGS_((
  1438.                             Tcl_ObjType *typePtr));
  1439. EXTERN void             Tcl_Release _ANSI_ARGS_((ClientData clientData));
  1440. EXTERN void             Tcl_ResetResult _ANSI_ARGS_((Tcl_Interp *interp));
  1441. #define Tcl_Return Tcl_SetResult
  1442. EXTERN int              Tcl_ScanCountedElement _ANSI_ARGS_((CONST char *string,
  1443.                             int length, int *flagPtr));
  1444. EXTERN int              Tcl_ScanElement _ANSI_ARGS_((CONST char *string,
  1445.                             int *flagPtr));
  1446. EXTERN int              Tcl_Seek _ANSI_ARGS_((Tcl_Channel chan,
  1447.                             int offset, int mode));
  1448. EXTERN int              Tcl_ServiceAll _ANSI_ARGS_((void));
  1449. EXTERN int              Tcl_ServiceEvent _ANSI_ARGS_((int flags));
  1450. EXTERN void             Tcl_SetAssocData _ANSI_ARGS_((Tcl_Interp *interp,
  1451.                             char *name, Tcl_InterpDeleteProc *proc,
  1452.                             ClientData clientData));
  1453. EXTERN void             Tcl_SetBooleanObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1454.                             int boolValue));
  1455. EXTERN void             Tcl_SetChannelBufferSize _ANSI_ARGS_((
  1456.                             Tcl_Channel chan, int sz));
  1457. EXTERN int              Tcl_SetChannelOption _ANSI_ARGS_((
  1458.                             Tcl_Interp *interp, Tcl_Channel chan,
  1459.                             char *optionName, char *newValue));
  1460. EXTERN int              Tcl_SetCommandInfo _ANSI_ARGS_((Tcl_Interp *interp,
  1461.                             char *cmdName, Tcl_CmdInfo *infoPtr));
  1462. EXTERN void             Tcl_SetDoubleObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1463.                             double doubleValue));
  1464. EXTERN void             Tcl_SetErrno _ANSI_ARGS_((int err));
  1465. EXTERN void             Tcl_SetErrorCode _ANSI_ARGS_(
  1466.                             TCL_VARARGS(Tcl_Interp *,arg1));
  1467. EXTERN void             Tcl_SetIntObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1468.                             int intValue));
  1469. EXTERN void             Tcl_SetListObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1470.                             int objc, Tcl_Obj *CONST objv[]));
  1471. EXTERN void             Tcl_SetLongObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1472.                             long longValue));
  1473. EXTERN void             Tcl_SetMaxBlockTime _ANSI_ARGS_((Tcl_Time *timePtr));
  1474. EXTERN void             Tcl_SetObjErrorCode _ANSI_ARGS_((Tcl_Interp *interp,
  1475.                             Tcl_Obj *errorObjPtr));
  1476. EXTERN void             Tcl_SetObjLength _ANSI_ARGS_((Tcl_Obj *objPtr,
  1477.                             int length));
  1478. EXTERN void             Tcl_SetObjResult _ANSI_ARGS_((Tcl_Interp *interp,
  1479.                             Tcl_Obj *resultObjPtr));
  1480. EXTERN void             Tcl_SetPanicProc _ANSI_ARGS_((void (*proc)
  1481.                             _ANSI_ARGS_(TCL_VARARGS(char *, format))));
  1482. EXTERN int              Tcl_SetRecursionLimit _ANSI_ARGS_((Tcl_Interp *interp,
  1483.                             int depth));
  1484. EXTERN void             Tcl_SetResult _ANSI_ARGS_((Tcl_Interp *interp,
  1485.                             char *string, Tcl_FreeProc *freeProc));
  1486. EXTERN int              Tcl_SetServiceMode _ANSI_ARGS_((int mode));
  1487. EXTERN void             Tcl_SetStdChannel _ANSI_ARGS_((Tcl_Channel channel,
  1488.                             int type));
  1489. EXTERN void             Tcl_SetStringObj _ANSI_ARGS_((Tcl_Obj *objPtr,
  1490.                             char *bytes, int length));
  1491. EXTERN void             Tcl_SetTimer _ANSI_ARGS_((Tcl_Time *timePtr));
  1492. EXTERN char *           Tcl_SetVar _ANSI_ARGS_((Tcl_Interp *interp,
  1493.                             char *varName, char *newValue, int flags));
  1494. EXTERN char *           Tcl_SetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1495.                             char *part1, char *part2, char *newValue,
  1496.                             int flags));
  1497. EXTERN char *           Tcl_SignalId _ANSI_ARGS_((int sig));
  1498. EXTERN char *           Tcl_SignalMsg _ANSI_ARGS_((int sig));
  1499. EXTERN void             Tcl_Sleep _ANSI_ARGS_((int ms));
  1500. EXTERN void             Tcl_SourceRCFile _ANSI_ARGS_((Tcl_Interp *interp));
  1501. EXTERN int              Tcl_SplitList _ANSI_ARGS_((Tcl_Interp *interp,
  1502.                             char *list, int *argcPtr, char ***argvPtr));
  1503. EXTERN void             Tcl_SplitPath _ANSI_ARGS_((char *path,
  1504.                             int *argcPtr, char ***argvPtr));
  1505. EXTERN void             Tcl_StaticPackage _ANSI_ARGS_((Tcl_Interp *interp,
  1506.                             char *pkgName, Tcl_PackageInitProc *initProc,
  1507.                             Tcl_PackageInitProc *safeInitProc));
  1508. EXTERN int              Tcl_StringMatch _ANSI_ARGS_((char *string,
  1509.                             char *pattern));
  1510. EXTERN int              Tcl_Tell _ANSI_ARGS_((Tcl_Channel chan));
  1511. #define Tcl_TildeSubst Tcl_TranslateFileName
  1512. EXTERN int              Tcl_TraceVar _ANSI_ARGS_((Tcl_Interp *interp,
  1513.                             char *varName, int flags, Tcl_VarTraceProc *proc,
  1514.                             ClientData clientData));
  1515. EXTERN int              Tcl_TraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1516.                             char *part1, char *part2, int flags,
  1517.                             Tcl_VarTraceProc *proc, ClientData clientData));
  1518. EXTERN char *           Tcl_TranslateFileName _ANSI_ARGS_((Tcl_Interp *interp,
  1519.                             char *name, Tcl_DString *bufferPtr));
  1520. EXTERN int              Tcl_Ungets _ANSI_ARGS_((Tcl_Channel chan, char *str,
  1521.                             int len, int atHead));
  1522. EXTERN void             Tcl_UnlinkVar _ANSI_ARGS_((Tcl_Interp *interp,
  1523.                             char *varName));
  1524. EXTERN int              Tcl_UnregisterChannel _ANSI_ARGS_((Tcl_Interp *interp,
  1525.                             Tcl_Channel chan));
  1526. EXTERN int              Tcl_UnsetVar _ANSI_ARGS_((Tcl_Interp *interp,
  1527.                             char *varName, int flags));
  1528. EXTERN int              Tcl_UnsetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1529.                             char *part1, char *part2, int flags));
  1530. EXTERN void             Tcl_UntraceVar _ANSI_ARGS_((Tcl_Interp *interp,
  1531.                             char *varName, int flags, Tcl_VarTraceProc *proc,
  1532.                             ClientData clientData));
  1533. EXTERN void             Tcl_UntraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1534.                             char *part1, char *part2, int flags,
  1535.                             Tcl_VarTraceProc *proc, ClientData clientData));
  1536. EXTERN void             Tcl_UpdateLinkedVar _ANSI_ARGS_((Tcl_Interp *interp,
  1537.                             char *varName));
  1538. EXTERN int              Tcl_UpVar _ANSI_ARGS_((Tcl_Interp *interp,
  1539.                             char *frameName, char *varName,
  1540.                             char *localName, int flags));
  1541. EXTERN int              Tcl_UpVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  1542.                             char *frameName, char *part1, char *part2,
  1543.                             char *localName, int flags));
  1544. EXTERN int              Tcl_VarEval _ANSI_ARGS_(
  1545.                             TCL_VARARGS(Tcl_Interp *,interp));
  1546. EXTERN ClientData       Tcl_VarTraceInfo _ANSI_ARGS_((Tcl_Interp *interp,
  1547.                             char *varName, int flags,
  1548.                             Tcl_VarTraceProc *procPtr,
  1549.                             ClientData prevClientData));
  1550. EXTERN ClientData       Tcl_VarTraceInfo2 _ANSI_ARGS_((Tcl_Interp *interp,
  1551.                             char *part1, char *part2, int flags,
  1552.                             Tcl_VarTraceProc *procPtr,
  1553.                             ClientData prevClientData));
  1554. EXTERN int              Tcl_WaitForEvent _ANSI_ARGS_((Tcl_Time *timePtr));
  1555. EXTERN Tcl_Pid          Tcl_WaitPid _ANSI_ARGS_((Tcl_Pid pid, int *statPtr,
  1556.                             int options));
  1557. EXTERN int              Tcl_Write _ANSI_ARGS_((Tcl_Channel chan,
  1558.                             char *s, int slen));
  1559. EXTERN void             Tcl_WrongNumArgs _ANSI_ARGS_((Tcl_Interp *interp,
  1560.                             int objc, Tcl_Obj *CONST objv[], char *message));
  1561.  
  1562. #endif /* RESOURCE_INCLUDED */
  1563.  
  1564. #undef TCL_STORAGE_CLASS
  1565. #define TCL_STORAGE_CLASS DLLIMPORT
  1566.  
  1567. #endif /* _TCL */
  1568.