]> cvs.zerfleddert.de Git - micropolis/blob - src/tcl/tclint.h
Optimize redrawing so that the mouse is more responsive, from Marc Espie.
[micropolis] / src / tcl / tclint.h
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 */
Impressum, Datenschutz