4 * Declarations of things used internally by the Tcl interpreter.
6 * Copyright 1987-1991 Regents of the University of California
7 * Permission to use, copy, modify, and distribute this
8 * software and its documentation for any purpose and without
9 * fee is hereby granted, provided that the above copyright
10 * notice appear in all copies. The University of California
11 * makes no representations about the suitability of this
12 * software for any purpose. It is provided "as is" without
13 * express or implied warranty.
15 * $Header: /user6/ouster/tcl/RCS/tclInt.h,v 1.69 92/06/21 14:09:23 ouster Exp $ SPRITE (Berkeley)
22 * Common include files needed by most of the Tcl source files are
23 * included here, so that system-dependent personalizations for the
24 * include files only have to be made in once place. This results
25 * in a few extra includes, but greater modularity. The order of
26 * the three groups of #includes is important. For example, stdio.h
27 * is needed by tcl.h, and the _ANSI_ARGS_ declaration in tcl.h is
28 * needed by stdlib.h in some configurations.
45 * Macro to use instead of "void" for arguments that must have
46 * type "void *" in ANSI C; maps them to type "char *" in
47 * non-ANSI systems. This macro may be used in some of the include
48 * files below, which is why it is defined here.
62 //#include <varargs.h>
66 * At present (12/91) not all stdlib.h implementations declare strtod.
67 * The declaration below is here to ensure that it's declared, so that
68 * the compiler won't take the default approach of assuming it returns
69 * an int. There's no ANSI prototype for it because there would end
70 * up being too many conflicts with slightly-different prototypes.
73 extern double strtod();
76 *----------------------------------------------------------------
77 * Data structures related to variables. These are used primarily
79 *----------------------------------------------------------------
83 * The following structure defines a variable trace, which is used to
84 * invoke a specific C procedure whenever certain operations are performed
88 typedef struct VarTrace
{
89 Tcl_VarTraceProc
*traceProc
;/* Procedure to call when operations given
90 * by flags are performed on variable. */
91 ClientData clientData
; /* Argument to pass to proc. */
92 int flags
; /* What events the trace procedure is
93 * interested in: OR-ed combination of
94 * TCL_TRACE_READS, TCL_TRACE_WRITES, and
95 * TCL_TRACE_UNSETS. */
96 struct VarTrace
*nextPtr
; /* Next in list of traces associated with
97 * a particular variable. */
101 * When a variable trace is active (i.e. its associated procedure is
102 * executing), one of the following structures is linked into a list
103 * associated with the variable's interpreter. The information in
104 * the structure is needed in order for Tcl to behave reasonably
105 * if traces are deleted while traces are active.
108 typedef struct ActiveVarTrace
{
109 struct ActiveVarTrace
*nextPtr
;
110 /* Next in list of all active variable
111 * traces for the interpreter, or NULL
113 VarTrace
*nextTracePtr
; /* Next trace to check after current
114 * trace procedure returns; if this
115 * trace gets deleted, must update pointer
116 * to avoid using free'd memory. */
120 * The following structure describes an enumerative search in progress on
121 * an array variable; this are invoked with options to the "array"
125 typedef struct ArraySearch
{
126 int id
; /* Integer id used to distinguish among
127 * multiple concurrent searches for the
129 struct Var
*varPtr
; /* Pointer to array variable that's being
131 Tcl_HashSearch search
; /* Info kept by the hash module about
132 * progress through the array. */
133 Tcl_HashEntry
*nextEntry
; /* Non-null means this is the next element
134 * to be enumerated (it's leftover from
135 * the Tcl_FirstHashEntry call or from
136 * an "array anymore" command). NULL
137 * means must call Tcl_NextHashEntry
138 * to get value to return. */
139 struct ArraySearch
*nextPtr
;/* Next in list of all active searches
140 * for this variable, or NULL if this is
145 * The structure below defines a variable, which associates a string name
146 * with a string value. Pointers to these structures are kept as the
147 * values of hash table entries, and the name of each variable is stored
152 int valueLength
; /* Holds the number of non-null bytes
153 * actually occupied by the variable's
154 * current value in value.string (extra
155 * space is sometimes left for expansion).
156 * For array and global variables this is
158 int valueSpace
; /* Total number of bytes of space allocated
160 int upvarUses
; /* Counts number of times variable is
161 * is referenced via global or upvar variables
162 * (i.e. how many variables have "upvarPtr"
163 * pointing to this variable). Variable
164 * can't be deleted until this count reaches
166 VarTrace
*tracePtr
; /* First in list of all traces set for this
168 ArraySearch
*searchPtr
; /* First in list of all searches active
169 * for this variable, or NULL if none. */
170 int flags
; /* Miscellaneous bits of information about
171 * variable. See below for definitions. */
173 char string
[4]; /* String value of variable. The actual
174 * length of this field is given by the
175 * valueSpace field above. */
176 Tcl_HashTable
*tablePtr
;/* For array variables, this points to
177 * information about the hash table used
178 * to implement the associative array.
179 * Points to malloc-ed data. */
180 Tcl_HashEntry
*upvarPtr
;
181 /* If this is a global variable being
182 * referred to in a procedure, or a variable
183 * created by "upvar", this field points to
184 * the hash table entry for the higher-level
186 } value
; /* MUST BE LAST FIELD IN STRUCTURE!!! */
190 * Flag bits for variables:
192 * VAR_ARRAY - 1 means this is an array variable rather
193 * than a scalar variable.
194 * VAR_UPVAR - 1 means this variable just contains a
195 * pointer to another variable that has the
196 * real value. Variables like this come
197 * about through the "upvar" and "global"
199 * VAR_UNDEFINED - 1 means that the variable is currently
200 * undefined. Undefined variables usually
201 * go away completely, but if an undefined
202 * variable has a trace on it, or if it is
203 * a global variable being used by a procedure,
204 * then it stays around even when undefined.
205 * VAR_ELEMENT_ACTIVE - Used only in array variables; 1 means that
206 * an element of the array is currently being
207 * manipulated in some way, so that it isn't
208 * safe to delete the whole array.
209 * VAR_TRACE_ACTIVE - 1 means that trace processing is currently
210 * underway for a read or write access, so
211 * new read or write accesses should not cause
212 * trace procedures to be called and the
213 * variable can't be deleted.
218 #define VAR_UNDEFINED 4
219 #define VAR_ELEMENT_ACTIVE 0x10
220 #define VAR_TRACE_ACTIVE 0x20
221 #define VAR_SEARCHES_POSSIBLE 0x40
224 *----------------------------------------------------------------
225 * Data structures related to procedures. These are used primarily
227 *----------------------------------------------------------------
231 * The structure below defines an argument to a procedure, which
232 * consists of a name and an (optional) default value.
236 struct Arg
*nextPtr
; /* Next argument for this procedure,
237 * or NULL if this is the last argument. */
238 char *defValue
; /* Pointer to arg's default value, or NULL
239 * if no default value. */
240 char name
[4]; /* Name of argument starts here. The name
241 * is followed by space for the default,
242 * if there is one. The actual size of this
243 * field will be as large as necessary to
244 * hold both name and default value. THIS
245 * MUST BE THE LAST FIELD IN THE STRUCTURE!! */
249 * The structure below defines a command procedure, which consists of
250 * a collection of Tcl commands plus information about arguments and
254 typedef struct Proc
{
255 struct Interp
*iPtr
; /* Interpreter for which this command
257 char *command
; /* Command that constitutes the body of
258 * the procedure (dynamically allocated). */
259 Arg
*argPtr
; /* Pointer to first of procedure's formal
260 * arguments, or NULL if none. */
264 * The structure below defines a command trace. This is used to allow Tcl
265 * clients to find out whenever a command is about to be executed.
268 typedef struct Trace
{
269 int level
; /* Only trace commands at nesting level
270 * less than or equal to this. */
271 Tcl_CmdTraceProc
*proc
; /* Procedure to call to trace command. */
272 ClientData clientData
; /* Arbitrary value to pass to proc. */
273 struct Trace
*nextPtr
; /* Next in list of traces for this interp. */
277 * The structure below defines a frame, which is a procedure invocation.
278 * These structures exist only while procedures are being executed, and
279 * provide a sort of call stack.
282 typedef struct CallFrame
{
283 Tcl_HashTable varTable
; /* Hash table containing all of procedure's
284 * local variables. */
285 int level
; /* Level of this procedure, for "uplevel"
286 * purposes (i.e. corresponds to nesting of
287 * callerVarPtr's, not callerPtr's). 1 means
288 * outer-most procedure, 0 means top-level. */
289 int argc
; /* This and argv below describe name and
290 * arguments for this procedure invocation. */
291 char **argv
; /* Array of arguments. */
292 struct CallFrame
*callerPtr
;
293 /* Value of interp->framePtr when this
294 * procedure was invoked (i.e. next in
295 * stack of all active procedures). */
296 struct CallFrame
*callerVarPtr
;
297 /* Value of interp->varFramePtr when this
298 * procedure was invoked (i.e. determines
299 * variable scoping within caller; same
300 * as callerPtr unless an "uplevel" command
301 * or something equivalent was active in
306 * The structure below defines one history event (a previously-executed
307 * command that can be re-executed in whole or in part).
311 char *command
; /* String containing previously-executed
313 int bytesAvl
; /* Total # of bytes available at *event (not
314 * all are necessarily in use now). */
318 *----------------------------------------------------------------
319 * Data structures related to history. These are used primarily
321 *----------------------------------------------------------------
325 * The structure below defines a pending revision to the most recent
326 * history event. Changes are linked together into a list and applied
327 * during the next call to Tcl_RecordHistory. See the comments at the
328 * beginning of tclHistory.c for information on revisions.
331 typedef struct HistoryRev
{
332 int firstIndex
; /* Index of the first byte to replace in
333 * current history event. */
334 int lastIndex
; /* Index of last byte to replace in
335 * current history event. */
336 int newSize
; /* Number of bytes in newBytes. */
337 char *newBytes
; /* Replacement for the range given by
338 * firstIndex and lastIndex. */
339 struct HistoryRev
*nextPtr
; /* Next in chain of revisions to apply, or
340 * NULL for end of list. */
344 *----------------------------------------------------------------
345 * Data structures related to files. These are used primarily in
346 * tclUnixUtil.c and tclUnixAZ.c.
347 *----------------------------------------------------------------
351 * The data structure below defines an open file (or connection to
352 * a process pipeline) as returned by the "open" command.
355 typedef struct OpenFile
{
356 FILE *f
; /* Stdio file to use for reading and/or
358 FILE *f2
; /* Normally NULL. In the special case of
359 * a command pipeline with pipes for both
360 * input and output, this is a stdio file
361 * to use for writing to the pipeline. */
362 int readable
; /* Non-zero means file may be read. */
363 int writable
; /* Non-zero means file may be written. */
364 int numPids
; /* If this is a connection to a process
365 * pipeline, gives number of processes
366 * in pidPtr array below; otherwise it
368 int *pidPtr
; /* Pointer to malloc-ed array of child
369 * process ids (numPids of them), or NULL
370 * if this isn't a connection to a process
372 int errorId
; /* File id of file that receives error
373 * output from pipeline. -1 means not
374 * used (i.e. this is a normal file). */
378 *----------------------------------------------------------------
379 * This structure defines an interpreter, which is a collection of
380 * commands plus other state information related to interpreting
381 * commands, such as variable storage. Primary responsibility for
382 * this data structure is in tclBasic.c, but almost every Tcl
383 * source file uses something in here.
384 *----------------------------------------------------------------
387 typedef struct Command
{
388 Tcl_CmdProc
*proc
; /* Procedure to process command. */
389 ClientData clientData
; /* Arbitrary value to pass to proc. */
390 Tcl_CmdDeleteProc
*deleteProc
;
391 /* Procedure to invoke when deleting
395 #define CMD_SIZE(nameLength) ((unsigned) sizeof(Command) + nameLength - 3)
397 typedef struct Interp
{
400 * Note: the first three fields must match exactly the fields in
401 * a Tcl_Interp struct (see tcl.h). If you change one, be sure to
405 char *result
; /* Points to result returned by last
407 Tcl_FreeProc
*freeProc
; /* Zero means result is statically allocated.
408 * If non-zero, gives address of procedure
409 * to invoke to free the result. Must be
410 * freed by Tcl_Eval before executing next
412 int errorLine
; /* When TCL_ERROR is returned, this gives
413 * the line number within the command where
414 * the error occurred (1 means first line). */
415 Tcl_HashTable commandTable
; /* Contains all of the commands currently
416 * registered in this interpreter. Indexed
417 * by strings; values have type (Command *). */
420 * Information related to procedures and variables. See tclProc.c
421 * and tclvar.c for usage.
424 Tcl_HashTable globalTable
; /* Contains all global variables for
426 int numLevels
; /* Keeps track of how many nested calls to
427 * Tcl_Eval are in progress for this
428 * interpreter. It's used to delay deletion
429 * of the table until all Tcl_Eval invocations
431 CallFrame
*framePtr
; /* Points to top-most in stack of all nested
432 * procedure invocations. NULL means there
433 * are no active procedures. */
434 CallFrame
*varFramePtr
; /* Points to the call frame whose variables
435 * are currently in use (same as framePtr
436 * unless an "uplevel" command is being
437 * executed). NULL means no procedure is
438 * active or "uplevel 0" is being exec'ed. */
439 ActiveVarTrace
*activeTracePtr
;
440 /* First in list of active traces for interp,
441 * or NULL if no active traces. */
444 * Information related to history:
447 int numEvents
; /* Number of previously-executed commands
449 HistoryEvent
*events
; /* Array containing numEvents entries
450 * (dynamically allocated). */
451 int curEvent
; /* Index into events of place where current
452 * (or most recent) command is recorded. */
453 int curEventNum
; /* Event number associated with the slot
454 * given by curEvent. */
455 HistoryRev
*revPtr
; /* First in list of pending revisions. */
456 char *historyFirst
; /* First char. of current command executed
457 * from history module or NULL if none. */
458 int revDisables
; /* 0 means history revision OK; > 0 gives
459 * a count of number of times revision has
461 char *evalFirst
; /* If TCL_RECORD_BOUNDS flag set, Tcl_Eval
462 * sets this field to point to the first
463 * char. of text from which the current
464 * command came. Otherwise Tcl_Eval sets
466 char *evalLast
; /* Similar to evalFirst, except points to
467 * last character of current command. */
470 * Information used by Tcl_AppendResult to keep track of partial
471 * results. See Tcl_AppendResult code for details.
474 char *appendResult
; /* Storage space for results generated
475 * by Tcl_AppendResult. Malloc-ed. NULL
476 * means not yet allocated. */
477 int appendAvl
; /* Total amount of space available at
479 int appendUsed
; /* Number of non-null bytes currently
480 * stored at partialResult. */
483 * Information related to files. See tclUnixAZ.c and tclUnixUtil.c
487 int numFiles
; /* Number of entries in filePtrArray
488 * below. 0 means array hasn't been
490 OpenFile
**filePtrArray
; /* Pointer to malloc-ed array of pointers
491 * to information about open files. Entry
492 * N corresponds to the file with fileno N.
493 * If an entry is NULL then the corresponding
494 * file isn't open. If filePtrArray is NULL
495 * it means no files have been used, so even
496 * stdin/stdout/stderr entries haven't been
499 * A cache of compiled regular expressions. See TclCompileRegexp
500 * in tclUtil.c for details.
503 #define NUM_REGEXPS 5
504 char *patterns
[NUM_REGEXPS
];/* Strings corresponding to compiled
505 * regular expression patterns. NULL
506 * means that this slot isn't used.
508 int patLengths
[NUM_REGEXPS
];/* Number of non-null characters in
509 * corresponding entry in patterns.
510 * -1 means entry isn't used. */
511 regexp
*regexps
[NUM_REGEXPS
];
512 /* Compiled forms of above strings. Also
513 * malloc-ed, or NULL if not in use yet. */
517 * Miscellaneous information:
520 int cmdCount
; /* Total number of times a command procedure
521 * has been called for this interpreter. */
522 int noEval
; /* Non-zero means no commands should actually
523 * be executed: just parse only. Used in
524 * expressions when the result is already
526 char *scriptFile
; /* NULL means there is no nested source
527 * command active; otherwise this points to
528 * the name of the file being sourced (it's
529 * not malloc-ed: it points to an argument
530 * to Tcl_EvalFile. */
531 int flags
; /* Various flag bits. See below. */
532 Trace
*tracePtr
; /* List of traces for this interpreter. */
533 char resultSpace
[TCL_RESULT_SIZE
+1];
534 /* Static space for storing small results. */
538 * Flag bits for Interp structures:
540 * DELETED: Non-zero means the interpreter has been deleted:
541 * don't process any more commands for it, and destroy
542 * the structure as soon as all nested invocations of
544 * ERR_IN_PROGRESS: Non-zero means an error unwind is already in progress.
545 * Zero means a command proc has been invoked since last
547 * ERR_ALREADY_LOGGED: Non-zero means information has already been logged
548 * in $errorInfo for the current Tcl_Eval instance,
549 * so Tcl_Eval needn't log it (used to implement the
550 * "error message log" command).
551 * ERROR_CODE_SET: Non-zero means that Tcl_SetErrorCode has been
552 * called to record information for the current
553 * error. Zero means Tcl_Eval must clear the
554 * errorCode variable if an error is returned.
558 #define ERR_IN_PROGRESS 2
559 #define ERR_ALREADY_LOGGED 4
560 #define ERROR_CODE_SET 8
563 *----------------------------------------------------------------
564 * Data structures related to command parsing. These are used in
565 * tclParse.c and its clients.
566 *----------------------------------------------------------------
570 * The following data structure is used by various parsing procedures
571 * to hold information about where to store the results of parsing
572 * (e.g. the substituted contents of a quoted argument, or the result
573 * of a nested command). At any given time, the space available
574 * for output is fixed, but a procedure may be called to expand the
575 * space available if the current space runs out.
578 typedef struct ParseValue
{
579 char *buffer
; /* Address of first character in
581 char *next
; /* Place to store next character in
583 char *end
; /* Address of the last usable character
585 void (*expandProc
) _ANSI_ARGS_((struct ParseValue
*pvPtr
, int needed
));
586 /* Procedure to call when space runs out;
587 * it will make more space. */
588 ClientData clientData
; /* Arbitrary information for use of
593 * A table used to classify input characters to assist in parsing
594 * Tcl commands. The table should be indexed with a signed character
595 * using the CHAR_TYPE macro. The character may have a negative
599 extern char tclTypeTable
[];
600 #define CHAR_TYPE(c) (tclTypeTable+128)[c]
603 * Possible values returned by CHAR_TYPE:
605 * TCL_NORMAL - All characters that don't have special significance
606 * to the Tcl language.
607 * TCL_SPACE - Character is space, tab, or return.
608 * TCL_COMMAND_END - Character is newline or null or semicolon or
610 * TCL_QUOTE - Character is a double-quote.
611 * TCL_OPEN_BRACKET - Character is a "[".
612 * TCL_OPEN_BRACE - Character is a "{".
613 * TCL_CLOSE_BRACE - Character is a "}".
614 * TCL_BACKSLASH - Character is a "\".
615 * TCL_DOLLAR - Character is a "$".
620 #define TCL_COMMAND_END 2
622 #define TCL_OPEN_BRACKET 4
623 #define TCL_OPEN_BRACE 5
624 #define TCL_CLOSE_BRACE 6
625 #define TCL_BACKSLASH 7
629 * Additional flags passed to Tcl_Eval. See tcl.h for other flags to
630 * Tcl_Eval; these ones are only used internally by Tcl.
632 * TCL_RECORD_BOUNDS Tells Tcl_Eval to record information in the
633 * evalFirst and evalLast fields for each command
634 * executed directly from the string (top-level
635 * commands and those from command substitution).
638 #define TCL_RECORD_BOUNDS 0x100
641 * Maximum number of levels of nesting permitted in Tcl commands.
644 #define MAX_NESTING_DEPTH 100
647 * Variables shared among Tcl modules but not used by the outside
651 extern char * tclRegexpError
;
654 *----------------------------------------------------------------
655 * Procedures shared among Tcl modules but not used by the outside
657 *----------------------------------------------------------------
661 extern regexp
* TclCompileRegexp
_ANSI_ARGS_((Tcl_Interp
*interp
,
663 extern void TclCopyAndCollapse
_ANSI_ARGS_((int count
, char *src
,
665 extern void TclDeleteVars
_ANSI_ARGS_((Interp
*iPtr
,
666 Tcl_HashTable
*tablePtr
));
667 extern void TclExpandParseValue
_ANSI_ARGS_((ParseValue
*pvPtr
,
669 extern int TclFindElement
_ANSI_ARGS_((Tcl_Interp
*interp
,
670 char *list
, char **elementPtr
, char **nextPtr
,
671 int *sizePtr
, int *bracePtr
));
672 extern Proc
* TclFindProc
_ANSI_ARGS_((Interp
*iPtr
,
674 extern int TclGetFrame
_ANSI_ARGS_((Tcl_Interp
*interp
,
675 char *string
, CallFrame
**framePtrPtr
));
676 extern int TclGetListIndex
_ANSI_ARGS_((Tcl_Interp
*interp
,
677 char *string
, int *indexPtr
));
678 extern int TclGetOpenFile
_ANSI_ARGS_((Tcl_Interp
*interp
,
679 char *string
, OpenFile
**filePtrPtr
));
680 extern Proc
* TclIsProc
_ANSI_ARGS_((Command
*cmdPtr
));
681 extern void TclMakeFileTable
_ANSI_ARGS_((Interp
*iPtr
,
683 extern int TclParseBraces
_ANSI_ARGS_((Tcl_Interp
*interp
,
684 char *string
, char **termPtr
, ParseValue
*pvPtr
));
685 extern int TclParseNestedCmd
_ANSI_ARGS_((Tcl_Interp
*interp
,
686 char *string
, int flags
, char **termPtr
,
688 extern int TclParseQuotes
_ANSI_ARGS_((Tcl_Interp
*interp
,
689 char *string
, int termChar
, int flags
,
690 char **termPtr
, ParseValue
*pvPtr
));
691 extern int TclParseWords
_ANSI_ARGS_((Tcl_Interp
*interp
,
692 char *string
, int flags
, int maxWords
,
693 char **termPtr
, int *argcPtr
, char **argv
,
695 extern void TclSetupEnv
_ANSI_ARGS_((Tcl_Interp
*interp
));
696 extern char * TclWordEnd
_ANSI_ARGS_((char *start
, int nested
));
699 *----------------------------------------------------------------
700 * Command procedures in the generic core:
701 *----------------------------------------------------------------
704 extern int Tcl_AppendCmd
_ANSI_ARGS_((ClientData clientData
,
705 Tcl_Interp
*interp
, int argc
, char **argv
));
706 extern int Tcl_ArrayCmd
_ANSI_ARGS_((ClientData clientData
,
707 Tcl_Interp
*interp
, int argc
, char **argv
));
708 extern int Tcl_BreakCmd
_ANSI_ARGS_((ClientData clientData
,
709 Tcl_Interp
*interp
, int argc
, char **argv
));
710 extern int Tcl_CaseCmd
_ANSI_ARGS_((ClientData clientData
,
711 Tcl_Interp
*interp
, int argc
, char **argv
));
712 extern int Tcl_CatchCmd
_ANSI_ARGS_((ClientData clientData
,
713 Tcl_Interp
*interp
, int argc
, char **argv
));
714 extern int Tcl_ConcatCmd
_ANSI_ARGS_((ClientData clientData
,
715 Tcl_Interp
*interp
, int argc
, char **argv
));
716 extern int Tcl_ContinueCmd
_ANSI_ARGS_((ClientData clientData
,
717 Tcl_Interp
*interp
, int argc
, char **argv
));
718 extern int Tcl_ErrorCmd
_ANSI_ARGS_((ClientData clientData
,
719 Tcl_Interp
*interp
, int argc
, char **argv
));
720 extern int Tcl_EvalCmd
_ANSI_ARGS_((ClientData clientData
,
721 Tcl_Interp
*interp
, int argc
, char **argv
));
722 extern int Tcl_ExprCmd
_ANSI_ARGS_((ClientData clientData
,
723 Tcl_Interp
*interp
, int argc
, char **argv
));
724 extern int Tcl_ForCmd
_ANSI_ARGS_((ClientData clientData
,
725 Tcl_Interp
*interp
, int argc
, char **argv
));
726 extern int Tcl_ForeachCmd
_ANSI_ARGS_((ClientData clientData
,
727 Tcl_Interp
*interp
, int argc
, char **argv
));
728 extern int Tcl_FormatCmd
_ANSI_ARGS_((ClientData clientData
,
729 Tcl_Interp
*interp
, int argc
, char **argv
));
730 extern int Tcl_GlobalCmd
_ANSI_ARGS_((ClientData clientData
,
731 Tcl_Interp
*interp
, int argc
, char **argv
));
732 extern int Tcl_HistoryCmd
_ANSI_ARGS_((ClientData clientData
,
733 Tcl_Interp
*interp
, int argc
, char **argv
));
734 extern int Tcl_IfCmd
_ANSI_ARGS_((ClientData clientData
,
735 Tcl_Interp
*interp
, int argc
, char **argv
));
736 extern int Tcl_IncrCmd
_ANSI_ARGS_((ClientData clientData
,
737 Tcl_Interp
*interp
, int argc
, char **argv
));
738 extern int Tcl_InfoCmd
_ANSI_ARGS_((ClientData clientData
,
739 Tcl_Interp
*interp
, int argc
, char **argv
));
740 extern int Tcl_JoinCmd
_ANSI_ARGS_((ClientData clientData
,
741 Tcl_Interp
*interp
, int argc
, char **argv
));
742 extern int Tcl_LappendCmd
_ANSI_ARGS_((ClientData clientData
,
743 Tcl_Interp
*interp
, int argc
, char **argv
));
744 extern int Tcl_LindexCmd
_ANSI_ARGS_((ClientData clientData
,
745 Tcl_Interp
*interp
, int argc
, char **argv
));
746 extern int Tcl_LinsertCmd
_ANSI_ARGS_((ClientData clientData
,
747 Tcl_Interp
*interp
, int argc
, char **argv
));
748 extern int Tcl_LlengthCmd
_ANSI_ARGS_((ClientData clientData
,
749 Tcl_Interp
*interp
, int argc
, char **argv
));
750 extern int Tcl_ListCmd
_ANSI_ARGS_((ClientData clientData
,
751 Tcl_Interp
*interp
, int argc
, char **argv
));
752 extern int Tcl_LrangeCmd
_ANSI_ARGS_((ClientData clientData
,
753 Tcl_Interp
*interp
, int argc
, char **argv
));
754 extern int Tcl_LreplaceCmd
_ANSI_ARGS_((ClientData clientData
,
755 Tcl_Interp
*interp
, int argc
, char **argv
));
756 extern int Tcl_LsearchCmd
_ANSI_ARGS_((ClientData clientData
,
757 Tcl_Interp
*interp
, int argc
, char **argv
));
758 extern int Tcl_LsortCmd
_ANSI_ARGS_((ClientData clientData
,
759 Tcl_Interp
*interp
, int argc
, char **argv
));
760 extern int Tcl_ProcCmd
_ANSI_ARGS_((ClientData clientData
,
761 Tcl_Interp
*interp
, int argc
, char **argv
));
762 extern int Tcl_RegexpCmd
_ANSI_ARGS_((ClientData clientData
,
763 Tcl_Interp
*interp
, int argc
, char **argv
));
764 extern int Tcl_RegsubCmd
_ANSI_ARGS_((ClientData clientData
,
765 Tcl_Interp
*interp
, int argc
, char **argv
));
766 extern int Tcl_RenameCmd
_ANSI_ARGS_((ClientData clientData
,
767 Tcl_Interp
*interp
, int argc
, char **argv
));
768 extern int Tcl_ReturnCmd
_ANSI_ARGS_((ClientData clientData
,
769 Tcl_Interp
*interp
, int argc
, char **argv
));
770 extern int Tcl_ScanCmd
_ANSI_ARGS_((ClientData clientData
,
771 Tcl_Interp
*interp
, int argc
, char **argv
));
772 extern int Tcl_SetCmd
_ANSI_ARGS_((ClientData clientData
,
773 Tcl_Interp
*interp
, int argc
, char **argv
));
774 extern int Tcl_SplitCmd
_ANSI_ARGS_((ClientData clientData
,
775 Tcl_Interp
*interp
, int argc
, char **argv
));
776 extern int Tcl_StringCmd
_ANSI_ARGS_((ClientData clientData
,
777 Tcl_Interp
*interp
, int argc
, char **argv
));
778 extern int Tcl_TraceCmd
_ANSI_ARGS_((ClientData clientData
,
779 Tcl_Interp
*interp
, int argc
, char **argv
));
780 extern int Tcl_UnsetCmd
_ANSI_ARGS_((ClientData clientData
,
781 Tcl_Interp
*interp
, int argc
, char **argv
));
782 extern int Tcl_UplevelCmd
_ANSI_ARGS_((ClientData clientData
,
783 Tcl_Interp
*interp
, int argc
, char **argv
));
784 extern int Tcl_UpvarCmd
_ANSI_ARGS_((ClientData clientData
,
785 Tcl_Interp
*interp
, int argc
, char **argv
));
786 extern int Tcl_WhileCmd
_ANSI_ARGS_((ClientData clientData
,
787 Tcl_Interp
*interp
, int argc
, char **argv
));
788 extern int Tcl_Cmd
_ANSI_ARGS_((ClientData clientData
,
789 Tcl_Interp
*interp
, int argc
, char **argv
));
790 extern int Tcl_Cmd
_ANSI_ARGS_((ClientData clientData
,
791 Tcl_Interp
*interp
, int argc
, char **argv
));
794 *----------------------------------------------------------------
795 * Command procedures in the UNIX core:
796 *----------------------------------------------------------------
799 extern int Tcl_CdCmd
_ANSI_ARGS_((ClientData clientData
,
800 Tcl_Interp
*interp
, int argc
, char **argv
));
801 extern int Tcl_CloseCmd
_ANSI_ARGS_((ClientData clientData
,
802 Tcl_Interp
*interp
, int argc
, char **argv
));
803 extern int Tcl_EofCmd
_ANSI_ARGS_((ClientData clientData
,
804 Tcl_Interp
*interp
, int argc
, char **argv
));
805 extern int Tcl_ExecCmd
_ANSI_ARGS_((ClientData clientData
,
806 Tcl_Interp
*interp
, int argc
, char **argv
));
807 extern int Tcl_ExitCmd
_ANSI_ARGS_((ClientData clientData
,
808 Tcl_Interp
*interp
, int argc
, char **argv
));
809 extern int Tcl_FileCmd
_ANSI_ARGS_((ClientData clientData
,
810 Tcl_Interp
*interp
, int argc
, char **argv
));
811 extern int Tcl_FlushCmd
_ANSI_ARGS_((ClientData clientData
,
812 Tcl_Interp
*interp
, int argc
, char **argv
));
813 extern int Tcl_GetsCmd
_ANSI_ARGS_((ClientData clientData
,
814 Tcl_Interp
*interp
, int argc
, char **argv
));
815 extern int Tcl_GlobCmd
_ANSI_ARGS_((ClientData clientData
,
816 Tcl_Interp
*interp
, int argc
, char **argv
));
817 extern int Tcl_OpenCmd
_ANSI_ARGS_((ClientData clientData
,
818 Tcl_Interp
*interp
, int argc
, char **argv
));
819 extern int Tcl_PutsCmd
_ANSI_ARGS_((ClientData clientData
,
820 Tcl_Interp
*interp
, int argc
, char **argv
));
821 extern int Tcl_PwdCmd
_ANSI_ARGS_((ClientData clientData
,
822 Tcl_Interp
*interp
, int argc
, char **argv
));
823 extern int Tcl_ReadCmd
_ANSI_ARGS_((ClientData clientData
,
824 Tcl_Interp
*interp
, int argc
, char **argv
));
825 extern int Tcl_SeekCmd
_ANSI_ARGS_((ClientData clientData
,
826 Tcl_Interp
*interp
, int argc
, char **argv
));
827 extern int Tcl_SourceCmd
_ANSI_ARGS_((ClientData clientData
,
828 Tcl_Interp
*interp
, int argc
, char **argv
));
829 extern int Tcl_TellCmd
_ANSI_ARGS_((ClientData clientData
,
830 Tcl_Interp
*interp
, int argc
, char **argv
));
831 extern int Tcl_TimeCmd
_ANSI_ARGS_((ClientData clientData
,
832 Tcl_Interp
*interp
, int argc
, char **argv
));