|
|
1.1 root 1: /*
2: * tclInt.h --
3: *
4: * Declarations of things used internally by the Tcl interpreter.
5: *
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.
14: *
15: * $Header: /user6/ouster/tcl/RCS/tclInt.h,v 1.69 92/06/21 14:09:23 ouster Exp $ SPRITE (Berkeley)
16: */
17:
18: #ifndef _TCLINT
19: #define _TCLINT
20:
21: /*
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.
29: */
30:
31: #include <stdio.h>
32: #include <unistd.h>
33:
34: #ifndef _TCL
35: #include "tcl.h"
36: #endif
37: #ifndef _TCLHASH
38: #include "tclhash.h"
39: #endif
40: #ifndef _REGEXP
41: #include "regexp.h"
42: #endif
43:
44: /*
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.
49: */
50:
51: #ifndef VOID
52: # ifdef __STDC__
53: # define VOID void
54: # else
55: # define VOID char
56: # endif
57: #endif
58:
59: #include <ctype.h>
60: #include <stdlib.h>
61: #include <string.h>
62: //#include <varargs.h>
63: #include <stdarg.h>
64:
65: /*
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.
71: */
72:
73: extern double strtod();
74:
75: /*
76: *----------------------------------------------------------------
77: * Data structures related to variables. These are used primarily
78: * in tclVar.c
79: *----------------------------------------------------------------
80: */
81:
82: /*
83: * The following structure defines a variable trace, which is used to
84: * invoke a specific C procedure whenever certain operations are performed
85: * on a variable.
86: */
87:
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. */
98: } VarTrace;
99:
100: /*
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.
106: */
107:
108: typedef struct ActiveVarTrace {
109: struct ActiveVarTrace *nextPtr;
110: /* Next in list of all active variable
111: * traces for the interpreter, or NULL
112: * if no more. */
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. */
117: } ActiveVarTrace;
118:
119: /*
120: * The following structure describes an enumerative search in progress on
121: * an array variable; this are invoked with options to the "array"
122: * command.
123: */
124:
125: typedef struct ArraySearch {
126: int id; /* Integer id used to distinguish among
127: * multiple concurrent searches for the
128: * same array. */
129: struct Var *varPtr; /* Pointer to array variable that's being
130: * searched. */
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
141: * the last one. */
142: } ArraySearch;
143:
144: /*
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
148: * in the hash entry.
149: */
150:
151: typedef struct Var {
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
157: * meaningless. */
158: int valueSpace; /* Total number of bytes of space allocated
159: * at value. */
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
165: * 0. */
166: VarTrace *tracePtr; /* First in list of all traces set for this
167: * variable. */
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. */
172: union {
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
185: * variable. */
186: } value; /* MUST BE LAST FIELD IN STRUCTURE!!! */
187: } Var;
188:
189: /*
190: * Flag bits for variables:
191: *
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"
198: * commands.
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.
214: */
215:
216: #define VAR_ARRAY 1
217: #define VAR_UPVAR 2
218: #define VAR_UNDEFINED 4
219: #define VAR_ELEMENT_ACTIVE 0x10
220: #define VAR_TRACE_ACTIVE 0x20
221: #define VAR_SEARCHES_POSSIBLE 0x40
222:
223: /*
224: *----------------------------------------------------------------
225: * Data structures related to procedures. These are used primarily
226: * in tclProc.c
227: *----------------------------------------------------------------
228: */
229:
230: /*
231: * The structure below defines an argument to a procedure, which
232: * consists of a name and an (optional) default value.
233: */
234:
235: typedef struct Arg {
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!! */
246: } Arg;
247:
248: /*
249: * The structure below defines a command procedure, which consists of
250: * a collection of Tcl commands plus information about arguments and
251: * variables.
252: */
253:
254: typedef struct Proc {
255: struct Interp *iPtr; /* Interpreter for which this command
256: * is defined. */
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. */
261: } Proc;
262:
263: /*
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.
266: */
267:
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. */
274: } Trace;
275:
276: /*
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.
280: */
281:
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
302: * the caller). */
303: } CallFrame;
304:
305: /*
306: * The structure below defines one history event (a previously-executed
307: * command that can be re-executed in whole or in part).
308: */
309:
310: typedef struct {
311: char *command; /* String containing previously-executed
312: * command. */
313: int bytesAvl; /* Total # of bytes available at *event (not
314: * all are necessarily in use now). */
315: } HistoryEvent;
316:
317: /*
318: *----------------------------------------------------------------
319: * Data structures related to history. These are used primarily
320: * in tclHistory.c
321: *----------------------------------------------------------------
322: */
323:
324: /*
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.
329: */
330:
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. */
341: } HistoryRev;
342:
343: /*
344: *----------------------------------------------------------------
345: * Data structures related to files. These are used primarily in
346: * tclUnixUtil.c and tclUnixAZ.c.
347: *----------------------------------------------------------------
348: */
349:
350: /*
351: * The data structure below defines an open file (or connection to
352: * a process pipeline) as returned by the "open" command.
353: */
354:
355: typedef struct OpenFile {
356: FILE *f; /* Stdio file to use for reading and/or
357: * writing. */
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
367: * is 0. */
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
371: * pipeline. */
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). */
375: } OpenFile;
376:
377: /*
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: *----------------------------------------------------------------
385: */
386:
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
392: * command. */
393: } Command;
394:
395: #define CMD_SIZE(nameLength) ((unsigned) sizeof(Command) + nameLength - 3)
396:
397: typedef struct Interp {
398:
399: /*
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
402: * change the other.
403: */
404:
405: char *result; /* Points to result returned by last
406: * command. */
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
411: * command. */
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 *). */
418:
419: /*
420: * Information related to procedures and variables. See tclProc.c
421: * and tclvar.c for usage.
422: */
423:
424: Tcl_HashTable globalTable; /* Contains all global variables for
425: * interpreter. */
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
430: * are completed. */
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. */
442:
443: /*
444: * Information related to history:
445: */
446:
447: int numEvents; /* Number of previously-executed commands
448: * to retain. */
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
460: * been disabled. */
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
465: * this to NULL. */
466: char *evalLast; /* Similar to evalFirst, except points to
467: * last character of current command. */
468:
469: /*
470: * Information used by Tcl_AppendResult to keep track of partial
471: * results. See Tcl_AppendResult code for details.
472: */
473:
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
478: * partialResult. */
479: int appendUsed; /* Number of non-null bytes currently
480: * stored at partialResult. */
481:
482: /*
483: * Information related to files. See tclUnixAZ.c and tclUnixUtil.c
484: * for details.
485: */
486:
487: int numFiles; /* Number of entries in filePtrArray
488: * below. 0 means array hasn't been
489: * created yet. */
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
497: * setup yet. */
498: /*
499: * A cache of compiled regular expressions. See TclCompileRegexp
500: * in tclUtil.c for details.
501: */
502:
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.
507: * Malloc-ed. */
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. */
514:
515:
516: /*
517: * Miscellaneous information:
518: */
519:
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
525: * determined. */
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. */
535: } Interp;
536:
537: /*
538: * Flag bits for Interp structures:
539: *
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
543: * Tcl_Eval are done.
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
546: * error occured.
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.
555: */
556:
557: #define DELETED 1
558: #define ERR_IN_PROGRESS 2
559: #define ERR_ALREADY_LOGGED 4
560: #define ERROR_CODE_SET 8
561:
562: /*
563: *----------------------------------------------------------------
564: * Data structures related to command parsing. These are used in
565: * tclParse.c and its clients.
566: *----------------------------------------------------------------
567: */
568:
569: /*
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.
576: */
577:
578: typedef struct ParseValue {
579: char *buffer; /* Address of first character in
580: * output buffer. */
581: char *next; /* Place to store next character in
582: * output buffer. */
583: char *end; /* Address of the last usable character
584: * in the buffer. */
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
589: * expandProc. */
590: } ParseValue;
591:
592: /*
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
596: * value.
597: */
598:
599: extern char tclTypeTable[];
600: #define CHAR_TYPE(c) (tclTypeTable+128)[c]
601:
602: /*
603: * Possible values returned by CHAR_TYPE:
604: *
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
609: * close-bracket.
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 "$".
616: */
617:
618: #define TCL_NORMAL 0
619: #define TCL_SPACE 1
620: #define TCL_COMMAND_END 2
621: #define TCL_QUOTE 3
622: #define TCL_OPEN_BRACKET 4
623: #define TCL_OPEN_BRACE 5
624: #define TCL_CLOSE_BRACE 6
625: #define TCL_BACKSLASH 7
626: #define TCL_DOLLAR 8
627:
628: /*
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.
631: *
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).
636: */
637:
638: #define TCL_RECORD_BOUNDS 0x100
639:
640: /*
641: * Maximum number of levels of nesting permitted in Tcl commands.
642: */
643:
644: #define MAX_NESTING_DEPTH 100
645:
646: /*
647: * Variables shared among Tcl modules but not used by the outside
648: * world:
649: */
650:
651: extern char * tclRegexpError;
652:
653: /*
654: *----------------------------------------------------------------
655: * Procedures shared among Tcl modules but not used by the outside
656: * world:
657: *----------------------------------------------------------------
658: */
659:
660: extern void panic();
661: extern regexp * TclCompileRegexp _ANSI_ARGS_((Tcl_Interp *interp,
662: char *string));
663: extern void TclCopyAndCollapse _ANSI_ARGS_((int count, char *src,
664: char *dst));
665: extern void TclDeleteVars _ANSI_ARGS_((Interp *iPtr,
666: Tcl_HashTable *tablePtr));
667: extern void TclExpandParseValue _ANSI_ARGS_((ParseValue *pvPtr,
668: int needed));
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,
673: char *procName));
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,
682: int index));
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,
687: ParseValue *pvPtr));
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,
694: ParseValue *pvPtr));
695: extern void TclSetupEnv _ANSI_ARGS_((Tcl_Interp *interp));
696: extern char * TclWordEnd _ANSI_ARGS_((char *start, int nested));
697:
698: /*
699: *----------------------------------------------------------------
700: * Command procedures in the generic core:
701: *----------------------------------------------------------------
702: */
703:
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));
792:
793: /*
794: *----------------------------------------------------------------
795: * Command procedures in the UNIX core:
796: *----------------------------------------------------------------
797: */
798:
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));
833:
834: #endif /* _TCLINT */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.