Annotation of researchv10no/cmd/worm/scsi/tcl/Tcl.man, revision 1.1

1.1     ! root        1: '\" Copyright 1989 Regents of the University of California
        !             2: '\" Permission to use, copy, modify, and distribute this
        !             3: '\" documentation for any purpose and without fee is hereby
        !             4: '\" granted, provided that this notice appears in all copies.
        !             5: '\" The University of California makes no representations about
        !             6: '\" the suitability of this material for any purpose.  It is
        !             7: '\" provided "as is" without express or implied warranty.
        !             8: '\" 
        !             9: '\" $Header: /sprite/src/lib/tcl/RCS/Tcl.man,v 1.29 90/04/18 17:19:18 ouster Exp $ SPRITE (Berkeley)
        !            10: '
        !            11: .so \*(]ltmac.sprite
        !            12: .de UL
        !            13: \\$1\l'|0\(ul'\\$2
        !            14: ..
        !            15: .HS Tcl tcl
        !            16: .BS
        !            17: .SH NAME
        !            18: Tcl \- overview of tool command language facilities
        !            19: .BE
        !            20: 
        !            21: .SH INTRODUCTION
        !            22: .PP
        !            23: Tcl stands for ``tool command language'' and is pronounced ``tickle.''
        !            24: It is actually two things:
        !            25: a language and a library.
        !            26: First, Tcl is a simple textual language,
        !            27: intended primarily for issuing commands to interactive programs such
        !            28: as text editors, debuggers, illustrators, and shells.  It has
        !            29: a simple syntax and is also programmable, so
        !            30: Tcl users can write command procedures to provide more powerful
        !            31: commands than those in the built-in set.
        !            32: .PP
        !            33: Second, Tcl is a library package that can be embedded in application
        !            34: programs.  The Tcl library consists of a parser for the Tcl
        !            35: language, routines to implement the Tcl built-in commands, and
        !            36: procedures that allow each application to extend Tcl with additional
        !            37: commands specific to that application.  The application program
        !            38: generates Tcl commands and passes them to the Tcl parser for
        !            39: execution.  Commands may be generated
        !            40: by reading characters from an input
        !            41: source, or by associating command strings with elements of the
        !            42: application's user interface, such as menu entries, buttons, or
        !            43: keystrokes.
        !            44: When the Tcl library receives commands it parses them
        !            45: into component fields and executes built-in commands directly.
        !            46: For commands implemented by the
        !            47: application, Tcl calls back to the application to execute the
        !            48: commands.  In many cases commands will invoke recursive invocations
        !            49: of the Tcl interpreter by passing in additional strings to execute
        !            50: (procedures, looping commands, and conditional commands all work
        !            51: in this way).
        !            52: .PP
        !            53: An application program gains three advantages by using Tcl for
        !            54: its command language.  First, Tcl provides a standard syntax:  once
        !            55: users know Tcl, they will be able to issue commands easily
        !            56: to any Tcl-based application.  Second, Tcl provides programmability.
        !            57: All a Tcl application needs to do is to implement a few
        !            58: application-specific low-level commands.  Tcl provides many utility
        !            59: commands plus a general programming interface for building up
        !            60: complex command procedures.  By using Tcl, applications need not
        !            61: re-implement these features.  Third, Tcl will eventually provide
        !            62: a mechanism for communicating between applications:  it will be
        !            63: possible to send Tcl commands from one application to another.
        !            64: The common Tcl language framework will make it easier for applications
        !            65: to communicate with one another.  The communication features are not
        !            66: implemented in the current version of Tcl.
        !            67: .PP
        !            68: This manual page focusses primarily on the Tcl language.  It describes
        !            69: the language syntax and the built-in commands that will be available in
        !            70: any application based on Tcl.  The individual library
        !            71: procedures are described in more detail in separate manual pages, one
        !            72: per procedure.
        !            73: 
        !            74: .SH "INTERPRETERS"
        !            75: .PP
        !            76: The central data structure in Tcl is an interpreter (C type
        !            77: ``Tcl_Interp'').  An interpreter consists of a set of command
        !            78: bindings, a set of variable values, and a few other miscellaneous
        !            79: pieces of state.  Each Tcl command is interpreted in the context
        !            80: of a particular interpreter.
        !            81: Some Tcl-based applications will maintain
        !            82: multiple interpreters simultaneously, each associated with a
        !            83: different widget or portion of the application.
        !            84: Interpreters are relatively lightweight structures.  They can
        !            85: be created and deleted quickly, so application programmers should feel free to
        !            86: use multiple interpreters if that simplifies the application.
        !            87: Eventually Tcl will provide a mechanism for sending Tcl commands
        !            88: and results back and forth between interpreters, even if the
        !            89: interpreters are managed by different processes.
        !            90: 
        !            91: .SH "DATA TYPES"
        !            92: .PP
        !            93: Tcl supports only one type of data:  strings.  All commands,
        !            94: all arguments to commands, all command results, and all variable values
        !            95: are strings.
        !            96: Where commands require numeric arguments or return numeric results,
        !            97: the arguments and results are passed as strings.
        !            98: Many commands expect their string arguments to have certain formats,
        !            99: but this interpretation is
        !           100: up to the individual commands.  For example, arguments often contain
        !           101: Tcl command strings, which may get executed as part of the commands.
        !           102: The easiest way to understand the Tcl interpreter is to remember that
        !           103: everything is just an operation on a string.  In many cases Tcl constructs
        !           104: will look similar to more structured constructs from other languages.
        !           105: However, the Tcl constructs
        !           106: are not structured at all;  they are just strings of characters, and this
        !           107: gives them a different behavior than the structures they may look like.
        !           108: .PP
        !           109: Although the exact interpretation of a Tcl string depends on who is
        !           110: doing the interpretation, there are three common forms that strings
        !           111: take:  commands, expressions, and lists.  The major sections below
        !           112: discuss these three forms in more detail.
        !           113: 
        !           114: .SH "BASIC COMMAND SYNTAX"
        !           115: .PP
        !           116: The Tcl language has syntactic similarities to both the Unix shells
        !           117: and Lisp.  However, the interpretation of commands is different
        !           118: in Tcl than in either of those other two systems.
        !           119: A Tcl command string consists of one or more commands separated
        !           120: by newline characters or semi-colons.
        !           121: Each command consists of a collection of fields separated by
        !           122: white space (spaces or tabs).
        !           123: The first field must be the name of a command, and the
        !           124: additional fields, if any, are arguments that will be passed to
        !           125: that command.  For example, the command
        !           126: .DS
        !           127: \fBset a 22\fR
        !           128: .DE
        !           129: has three fields:  the first, \fBset\fR, is the name of a Tcl command, and
        !           130: the last two, \fBa\fR and \fB22\fR, will be passed as arguments to
        !           131: the \fBset\fR command.  The command name may refer either to a built-in
        !           132: Tcl command, an application-specific command bound in with the library
        !           133: procedure \fBTcl_CreateCommand\fR, or a command procedure defined with the
        !           134: \fBproc\fR built-in command.
        !           135: Arguments are passed literally as
        !           136: text strings.  Individual commands may interpret those strings in any
        !           137: fashion they wish.  The \fBset\fR command, for example, will treat its
        !           138: first argument as the name of a variable and its second argument as a
        !           139: string value to assign to that variable.  For other commands arguments
        !           140: may be interpreted as integers, lists, file names, or Tcl commands.
        !           141: .PP
        !           142: Command names may be abbreviated as long as the abbreviation is unique.
        !           143: However, it's probably a bad idea to use abbreviations in command scripts
        !           144: and other forms that will be re-used over time:  changes to the command
        !           145: set may cause abbreviations to become ambiguous, resulting in scripts
        !           146: that no longer work.  Abbreviations are intended primarily for
        !           147: commands that are typed interactively, invoked once, and discarded.
        !           148: Also, command abbreviations are disallowed if the global variable
        !           149: \fBnoAbbrev\fR has the value \fB1\fR.
        !           150: 
        !           151: .SH "COMMENTS"
        !           152: .PP
        !           153: If the first non-blank character in a command is \fB#\fR, then everything
        !           154: from the \fB#\fR up through the next newline character is treated as
        !           155: a comment and ignored.
        !           156: 
        !           157: .SH "GROUPING ARGUMENTS WITH DOUBLE-QUOTES"
        !           158: .VS
        !           159: .PP
        !           160: Normally each argument field ends at the next white space, but
        !           161: double-quotes may be used to create arguments with embedded
        !           162: space.  If an argument
        !           163: field begins with a double-quote, then the argument isn't
        !           164: terminated by white space (including newlines) or a semi-colon
        !           165: (see below for information on semi-colons);  instead it ends at the next
        !           166: double-quote character.  The double-quotes are not included
        !           167: in the resulting argument.  For example, the
        !           168: command
        !           169: .DS
        !           170: \fBset a "This is a single argument"\fR
        !           171: .DE
        !           172: will pass two arguments to \fBset\fR:  \fBa\fR and
        !           173: \fBThis is a single argument\fR.  Within double-quotes, command
        !           174: substitutions, variable substitutions, and backslash substitutions
        !           175: still occur, as described below.  If the first character of a
        !           176: command field is not a quote, then quotes receive no special
        !           177: interpretation in the parsing of that field.
        !           178: 
        !           179: .SH "GROUPING ARGUMENTS WITH BRACES"
        !           180: .PP
        !           181: Curly braces may also be used for grouping arguments.  They are
        !           182: similar to quotes except for two differences.  First, they nest;
        !           183: this makes them easier to use for complicated arguments like nested Tcl
        !           184: command strings.  Second, the substitutions described below for
        !           185: commands, variables, and backslashes do \fInot\fR occur in arguments
        !           186: enclosed in braces, so braces can be used to prevent substitutions
        !           187: where they are undesirable.
        !           188: If an argument field
        !           189: begins with a left brace, then the argument ends at the matching
        !           190: right brace.  Tcl will strip off the outermost layer of braces
        !           191: and pass the information between the braces to the command without
        !           192: any further modification.  For example, in the command
        !           193: .VE
        !           194: .DS
        !           195: \fBset a {xyz a {b c d}}\fR
        !           196: .DE
        !           197: the \fBset\fR command will receive two arguments: \fBa\fR
        !           198: and \fBxyz a {b c d}\fR.
        !           199: .PP
        !           200: When braces or quotes are in effect, the matching brace
        !           201: or quote need not be on
        !           202: the same line as the starting quote or brace;  in this case
        !           203: the newline will be
        !           204: included in the argument field along with any other characters up to the
        !           205: matching brace or quote.  For example, the \fBeval\fR command
        !           206: takes one
        !           207: argument, which is a command string;  \fBeval\fR invokes the Tcl
        !           208: interpreter to execute the command string.  The command
        !           209: .DS
        !           210: \fBeval {
        !           211:        set a 22
        !           212:        set b 33
        !           213: }\fR
        !           214: .DE
        !           215: will assign the value \fB22\fR to \fBa\fR and \fB33\fR to \fBb\fR.
        !           216: .PP
        !           217: If the first character of a command field is not a left
        !           218: brace, then neither left nor right
        !           219: braces in the field will be treated specially (except as part of
        !           220: variable substitution;  see below).
        !           221: 
        !           222: .SH "COMMAND SUBSTITUTION WITH BRACKETS"
        !           223: .PP
        !           224: If an open bracket occurs in a field of a command, then
        !           225: command substitution occurs (except for fields enclosed in
        !           226: braces).  All of the text up to the matching
        !           227: close bracket is treated as a Tcl command and executed immediately.
        !           228: Then the result of that command is substituted for the bracketed
        !           229: text.  For example, consider the command
        !           230: .DS
        !           231: \fBset a [set b]\fR
        !           232: .DE
        !           233: When the \fBset\fR command has only a single argument, it is the
        !           234: name of a variable and \fBset\fR returns the contents of that
        !           235: variable.  In this case, if variable \fBb\fR has the value \fBfoo\fR,
        !           236: then the command above is equivalent to the command
        !           237: .DS
        !           238: \fBset a foo\fR
        !           239: .DE
        !           240: Brackets can be used in more complex ways.  For example, if the
        !           241: variable \fBb\fR has the value \fBfoo\fR and the variable \fBc\fR
        !           242: has the value \fBgorp\fR, then the command
        !           243: .DS
        !           244: \fBset a xyz[set b].[set c]\fR
        !           245: .DE
        !           246: is equivalent to the command
        !           247: .DS
        !           248: \fBset a xyzfoo.gorp\fR
        !           249: .DE
        !           250: A bracketed command need not be all on one line:  newlines within
        !           251: brackets are treated as argument separators, not command separators.
        !           252: If a field is enclosed in braces then the brackets and the characters
        !           253: between them are not interpreted specially;  they are passed through
        !           254: to the argument verbatim.
        !           255: 
        !           256: .SH "VARIABLE SUBSTITUTION WITH $"
        !           257: .PP
        !           258: The dollar sign (\fB$\fR) may be used as a special shorthand form
        !           259: for substituting variables.  If \fB$\fR appears in an argument that
        !           260: isn't enclosed in braces
        !           261: then variable substitution will occur.  The characters after
        !           262: the \fB$\fR, up to the first character that isn't a number, letter, or
        !           263: underscore, are taken as a variable name and the string value of that
        !           264: variable is substituted for the name.  Or, if the dollar sign is followed
        !           265: by an open curly brace then the variable name consists of all the characters
        !           266: up to the next close curly brace.  For example, if variable \fBfoo\fR
        !           267: has the value \fBtest\fR, then the command
        !           268: .DS C
        !           269: \fBset a $foo.c\fR
        !           270: .DE
        !           271: is equivalent to the command
        !           272: .DS C
        !           273: \fBset a test.c\fR
        !           274: .DE
        !           275: and the command
        !           276: .DS C
        !           277: \fBset a abc${foo}bar\fR
        !           278: .DE
        !           279: is equivalent to the command
        !           280: .DS C
        !           281: \fBset a abctestbar\fR
        !           282: .DE
        !           283: Variable substitution does not occur in arguments that are enclosed
        !           284: in braces:  the
        !           285: dollar sign and variable name are passed through to the argument verbatim.
        !           286: .PP
        !           287: The dollar sign abbreviation is simply a shorthand form.  \fB$a\fR is
        !           288: completely equivalent to \fB[set a]\fR;  it is provided as a convenience
        !           289: to reduce typing.
        !           290: 
        !           291: .VS
        !           292: .SH "SEPARATING COMMANDS WITH SEMI-COLONS"
        !           293: .PP
        !           294: Normally, each command occupies one line (the command is terminated by
        !           295: a newline character).  However, semi-colon (``;'') is treated
        !           296: as a command separator character;  multiple commands may be placed
        !           297: on one line by separating them with a semi-colon.  Semi-colons are
        !           298: not treated as command separators if they appear within curly braces
        !           299: or double-quotes.
        !           300: .VE
        !           301: 
        !           302: .SH "BACKSLASH SUBSTITUTION"
        !           303: .PP
        !           304: Backslashes may be used to insert non-printing characters into
        !           305: command fields and also to insert special characters like
        !           306: braces and brackets into fields
        !           307: without them being interpreted specially as described above.
        !           308: The backslash sequences understood by the Tcl interpreter are
        !           309: listed below.  In each case, the backslash
        !           310: sequence is replaced by the given character:
        !           311: .TP 20
        !           312: \fB\eb\fR
        !           313: Backspace (0x8).
        !           314: .TP 20
        !           315: \fB\ee\fR
        !           316: Escape (0x1b).
        !           317: .TP 20
        !           318: \fB\en\fR
        !           319: Newline (0xa).
        !           320: .TP 20
        !           321: \fB\er\fR
        !           322: .VS
        !           323: Carriage-return (0xd).
        !           324: .VE
        !           325: .TP 20
        !           326: \fB\et\fR
        !           327: Tab (0x9).
        !           328: .TP 20
        !           329: \fB\e{\fR
        !           330: Left brace (``{'').
        !           331: .TP 20
        !           332: \fB\e}\fR
        !           333: Right brace (``}'').
        !           334: .TP 20
        !           335: \fB\e[\fR
        !           336: Open bracket (``['').
        !           337: .TP 20
        !           338: \fB\e]\fR
        !           339: Close bracket (``]'').
        !           340: .TP 20
        !           341: \fB\e$\fR
        !           342: Dollar sign (``$'').
        !           343: .TP 20
        !           344: \fB\e<space>\fR
        !           345: Space (`` ''): doesn't terminate argument.
        !           346: .br
        !           347: .VS
        !           348: .TP 20
        !           349: \fB\e;\fR
        !           350: Semi-colon: doesn't terminate command.
        !           351: .TP 20
        !           352: \fB\e"\fR
        !           353: Double-quote.
        !           354: .TP 20
        !           355: \fB\e<newline>\fR
        !           356: Nothing:  this effectively joins two lines together
        !           357: into a single line.  This backslash feature is only provided
        !           358: when parsing Tcl commands;  it is not supported by the
        !           359: Tcl_Backslash procedure.
        !           360: .VE
        !           361: .TP 20
        !           362: \fB\e\e\fR
        !           363: Backslash (``\e'').
        !           364: .TP 20
        !           365: \fB\eC\fIx\fR
        !           366: Control-\fIx\fR (\fIx\fR AND octal 037), for any ASCII \fIx\fR except \fBM\fR
        !           367: (see below).
        !           368: .TP 20
        !           369: \fB\eM\fIx\fR
        !           370: Meta-\fIx\fR (\fIx\fR OR octal 200), for any ASCII \fIx\fR.
        !           371: .TP 20
        !           372: \fB\eCM\fIx\fR
        !           373: Control-meta-\fIx\fR ((\fIx\fR AND octal 037) OR octal 0200), for
        !           374: any ASCII \fIx\fR.
        !           375: .TP 20
        !           376: \fB\e\fIddd\fR
        !           377: The digits \fIddd\fR (one, two, or three of them) give the octal value of
        !           378: the character.
        !           379: .PP
        !           380: For example, in the command
        !           381: .DS
        !           382: \fBset a \e{x\e[\e\0yz\e141\fR
        !           383: .DE
        !           384: the second argument to \fBset\fR will be ``\fB{x[\0yza\fR''.
        !           385: .PP
        !           386: If a backslash is followed by something other than one of the options
        !           387: described above, then the backslash is transmitted to the argument
        !           388: field without any special processing, and the Tcl scanner continues
        !           389: normal processing with the next character.  For example, in the
        !           390: command
        !           391: .DS
        !           392: \fBset \e*a \e\e\e{foo\fR
        !           393: .DE
        !           394: The first argument to \fBset\fR will be \fB\e*a\fR and the second
        !           395: argument will be \fB\e{foo\fR.
        !           396: .PP
        !           397: If an argument is enclosed in braces, then backslash sequences inside
        !           398: the argument are parsed but no substitution occurs:  the backslash
        !           399: sequence is passed through to the argument as is, without making
        !           400: any special interpretation of the characters in the backslash sequence.
        !           401: In particular, backslashed braces are not counted in locating the
        !           402: matching right brace that terminates the argument.
        !           403: For example, in the
        !           404: command
        !           405: .DS
        !           406: \fBset a {\e{abc}\fR
        !           407: .DE
        !           408: the second argument to \fBset\fR will be \fB\e{abc\fR.
        !           409: .PP
        !           410: This backslash mechanism is not sufficient to generate absolutely
        !           411: any argument structure;  it only covers the
        !           412: most common cases.  To produce particularly complicated arguments
        !           413: it is probably easiest to use the \fBformat\fR command along with
        !           414: command substitution.
        !           415: 
        !           416: .SH "COMMAND SUMMARY"
        !           417: .IP [1]
        !           418: A command is just a string.
        !           419: .IP [2]
        !           420: Within a string commands are separated by newlines or semi-colons
        !           421: (unless the newline or semi-colon is within braces or brackets
        !           422: or is backslashed).
        !           423: .IP [3]
        !           424: A command consists of fields.  The first field is the name of the command,
        !           425: and may be abbreviated.
        !           426: The other fields are strings that are passed to that command as arguments.
        !           427: .IP [4]
        !           428: Fields are normally separated by white space.
        !           429: .IP [5]
        !           430: Double-quotes allow white space and semi-colons to appear within
        !           431: a single argument.
        !           432: Command substitution, variable substitution, and backslash substitution
        !           433: still occur inside quotes.
        !           434: .IP [6]
        !           435: Braces defer interpretation of special characters.
        !           436: If a field begins with a left brace, then it consists of everything
        !           437: between the left brace and the matching right brace. The
        !           438: braces themselves are not included in the argument.
        !           439: No further processing is done on the information between the braces.
        !           440: .IP [7]
        !           441: If a field doesn't begin with a brace then backslash,
        !           442: variable, and command substitution are done on the field.  Only a
        !           443: single level of processing is done:  the results of one substitution
        !           444: are not scanned again for further substitutions or any other
        !           445: special treatment.  Substitution can
        !           446: occur on any field of a command, including the command name
        !           447: as well as the arguments.
        !           448: .IP [8]
        !           449: If the first non-blank character of a command is a \fB#\fR, everything
        !           450: from the \fB#\fR up through the next newline is treated as a comment
        !           451: and ignored.
        !           452: 
        !           453: .SH "EXPRESSIONS"
        !           454: .PP
        !           455: The second major interpretation applied to strings in Tcl is
        !           456: as expressions.  Several commands, such as \fBexpr\fR, \fBfor\fR,
        !           457: and \fBif\fR, treat some of their arguments as expressions and
        !           458: call the Tcl expression processor (\fBTcl_Expr\fR) to evaluate them.
        !           459: A Tcl expression has C-like syntax and evaluates to an integer
        !           460: result.  Expressions
        !           461: may contain integer values, variable names in \fB$\fR notation
        !           462: (the variables' values must be integer strings),
        !           463: commands (embedded in brackets) that produce integer string results,
        !           464: parentheses for grouping, and operators.  Numeric values, whether they
        !           465: are passed directly or through variable or command substitution, may
        !           466: be specified either in decimal (the normal case), in octal (if the
        !           467: first character of the value is \fB0\fR), or in hexadecimal (if the first
        !           468: two characters of the value are \fB0x\fR).
        !           469: The valid operators are listed
        !           470: below, grouped in decreasing order of precedence:
        !           471: .TP 20
        !           472: \fB\-\0\0~\0\0!\fR
        !           473: Unary minus, bit-wise NOT, logical NOT.
        !           474: .TP 20
        !           475: \fB*\0\0/\0\0%\fR
        !           476: Multiply, divide, remainder.
        !           477: .TP 20
        !           478: \fB+\0\0\-\fR
        !           479: Add and subtract.
        !           480: .TP 20
        !           481: \fB<<\0\0>>\fR
        !           482: Left and right shift.
        !           483: .TP 20
        !           484: \fB<\0\0>\0\0<=\0\0>=\fR
        !           485: Boolean less, greater, less than or equal, and greater than or equal.
        !           486: Each operator produces 1 if the condition is true, 0 otherwise.
        !           487: .TP 20
        !           488: \fB==\0\0!=\fR
        !           489: Boolean equal and not equal.  Each operator produces a zero/one result.
        !           490: .TP 20
        !           491: \fB&\fR
        !           492: Bit-wise AND.
        !           493: .TP 20
        !           494: \fB^\fR
        !           495: Bit-wise exclusive OR.
        !           496: .TP 20
        !           497: \fB|\fR
        !           498: Bit-wise OR.
        !           499: .TP 20
        !           500: \fB&&\fR
        !           501: Logical AND.  Produces a 1 result if both operands are non-zero, 0 otherwise.
        !           502: .TP 20
        !           503: \fB||\fR
        !           504: Logical OR.  Produces a 0 result if both operands are zero, 1 otherwise.
        !           505: .TP 20
        !           506: \fIx\fB?\fIy\fB:\fIz\fR
        !           507: .VS
        !           508: If-then-else, as in C.  If \fIx
        !           509: evaluates to non-zero, then the result is the value of \fIy\fR.
        !           510: Otherwise the result is the value of \fIz\fR.
        !           511: .VE
        !           512: .PP
        !           513: See the C manual for more details on the results
        !           514: produced by each operator.
        !           515: All of the binary operators group left-to-right within the same
        !           516: precedence level.  For example, the expression
        !           517: .DS
        !           518: \fB(4*2) < 7\fR
        !           519: .DE
        !           520: evaluates to 0.  Evaluating the expression string
        !           521: .DS
        !           522: \fB($a + 3) < [set b]\fR
        !           523: .DE
        !           524: will cause the values of the variables \fBa\fR and \fBb\fR to be
        !           525: examined;  the result will be 1
        !           526: if \fBb\fR is greater than a by at least 3;  otherwise the result
        !           527: will be 0.
        !           528: .PP
        !           529: In general it is safest to enclose an expression in braces when
        !           530: entering it in a command:  otherwise, if the expression contains
        !           531: any white space then the Tcl interpreter will split it
        !           532: among several arguments.  For example, the command
        !           533: .DS C
        !           534: \fBexpr $a + $b\fR
        !           535: .DE
        !           536: results in three arguments being passed to \fBexpr\fR:  \fB$a\fR,
        !           537: \fB+\fR, and \fB$b\fR.  In addition, if the expression isn't in braces
        !           538: then the Tcl interpreter will perform variable and command substitution
        !           539: immediately (it will happen in the command parser rather than in
        !           540: the expression parser).  In many cases the expression is being
        !           541: passed to a command that will evaluate the expression later (or
        !           542: even many times if, for example, the expression is to be used to
        !           543: decide when to exit a loop).  Usually the desired goal is to re-do
        !           544: the variable or command substitutions each time the expression is
        !           545: evaluated, rather than once and for all at the beginning.  For example,
        !           546: the command
        !           547: .DS C
        !           548: \fBfor {set i 1} $i<=10 {set i [expr $i+1]} {...}\fR
        !           549: .DE
        !           550: is probably intended to iterate over all values of \fBi\fR from 1 to 10.
        !           551: After each iteration of the body of the loop, \fBfor\fR will pass
        !           552: its second argument to the expression evaluator to see whether or not
        !           553: to continue processing.  Unfortunately, in this case the value of \fBi\fR
        !           554: in the second argument will be substituted once and for all when the
        !           555: \fBfor\fR command is parsed.  If \fBi\fR was 0 before the \fBfor\fR
        !           556: command was invoked then \fBfor\fR's second argument will be \fB0<=10\fR
        !           557: which will always evaluate to 1, even though \fBi\fR's value eventually
        !           558: becomes greater than 10.  In the above case the loop will never
        !           559: terminate.  By placing the expression in braces, the
        !           560: substitution of \fBi\fR's
        !           561: value will be delayed;  it will be re-done each time the expression is
        !           562: evaluated, which is probably the desired result.
        !           563: 
        !           564: .SH LISTS
        !           565: .PP
        !           566: The third major way that strings are interpreted in Tcl is as lists.
        !           567: A list is just a string with a list-like structure
        !           568: consisting of fields separated by white space.  For example, the
        !           569: string
        !           570: .DS
        !           571: \fBAl Sue Anne John\fR
        !           572: .DE
        !           573: is a list with four elements or fields.
        !           574: Lists have the same basic structure as command strings, except
        !           575: that a newline character in a list is treated as a field separator
        !           576: just like space or tab.  Conventions for braces
        !           577: and backslashes are the same for lists as for commands.  For example,
        !           578: the string
        !           579: .DS
        !           580: \fBa b\e c {d e {f g h}}\fR
        !           581: .DE
        !           582: is a list with three elements:  \fBa\fR, \fBb c\fR, and \fBd e {f g h}\fR.
        !           583: Whenever an element
        !           584: is extracted from a list, the same rules about backslashes and
        !           585: braces are applied as for commands.  Thus in the example above
        !           586: when the third element is extracted from the list, the result is
        !           587: .DS
        !           588: \fBd e {f g h}\fR
        !           589: .DE
        !           590: (when the field was extracted, all that happened was to strip off
        !           591: the outermost layer of braces).  Command substitution is never
        !           592: made on a list (at least, not by the list-processing commands;  the
        !           593: list can always be passed to the Tcl interpreter for evaluation).
        !           594: .PP
        !           595: The Tcl commands \fBconcat\fR, \fBforeach\fR, \fBindex\fR,
        !           596: \fBlength\fR, \fBlist\fR, and \fBrange\fR allow you to build lists,
        !           597: extract elements from them, search them, and perform other list-related
        !           598: functions.
        !           599: 
        !           600: .SH "COMMAND RESULTS"
        !           601: .PP
        !           602: Each command produces two results:  a code and a string.  The
        !           603: code indicates whether the command completed successfully or not,
        !           604: and the string gives additional information.  The valid codes are
        !           605: defined in tcl.h, and are:
        !           606: .RS
        !           607: .TP 20
        !           608: \fBTCL_OK\fR
        !           609: This is the normal return code, and indicates that the command completed
        !           610: succesfully.  The string gives the command's return value.
        !           611: .TP 20
        !           612: \fBTCL_ERROR\fR
        !           613: Indicates that an error occurred;  the string gives a message describing
        !           614: the error.
        !           615: .VS
        !           616: The variable \fBerrorInfo\fR will contain additional information
        !           617: describing which commands and procedures were being executed when the
        !           618: error occurred.
        !           619: .VE
        !           620: .TP 20
        !           621: \fBTCL_RETURN\fR
        !           622: Indicates that the \fBreturn\fR command has been invoked, and that the
        !           623: .VS
        !           624: current procedure (or top-level command or \fBsource\fR command)
        !           625: should return immediately.  The
        !           626: string gives the return value for the procedure or command.
        !           627: .VE
        !           628: .TP 20
        !           629: \fBTCL_BREAK\fR
        !           630: Indicates that the \fBbreak\fR command has been invoked, so the
        !           631: innermost loop should abort immediately.  The string should always
        !           632: be empty.
        !           633: .TP 20
        !           634: \fBTCL_CONTINUE\fR
        !           635: Indicates that the \fBcontinue\fR command has been invoked, so the
        !           636: innermost loop should go on to the next iteration.  The string
        !           637: should always be empty.
        !           638: .RE
        !           639: Tcl programmers do not normally need to think about return codes,
        !           640: since TCL_OK is almost always returned.  If anything else is returned
        !           641: by a command, then the Tcl interpreter immediately stops processing
        !           642: commands and returns to its caller.  If there are several nested
        !           643: invocations of the Tcl interpreter in progress, then each nested
        !           644: command will usually return the error to its caller, until eventually
        !           645: the error is reported to the top-level application code.  The
        !           646: application will then display the error message for the user.
        !           647: .PP
        !           648: In a few cases, some commands will handle certain ``error'' conditions
        !           649: themselves and not return them upwards.  For example, the \fBfor\fR
        !           650: command checks for the TCL_BREAK code;  if it occurs, then \fBfor\fR
        !           651: stops executing the body of the loop and returns TCL_OK to its
        !           652: caller.  The \fBfor\fR command also handles TCL_CONTINUE codes and the
        !           653: procedure interpreter handles TCL_RETURN codes.  The \fBcatch\fR
        !           654: command allows Tcl programs to catch errors and handle them without
        !           655: aborting command interpretation any further.
        !           656: 
        !           657: .SH PROCEDURES
        !           658: .PP
        !           659: Tcl allows you to extend the command interface by defining
        !           660: procedures.  A Tcl procedure can be invoked just like any other Tcl
        !           661: command (it has a name and it receives one or more arguments).
        !           662: The only difference is that its body isn't a piece of C code linked
        !           663: into the program;  it is a string containing one or more other
        !           664: Tcl commands.  See the \fBproc\fR command for information on
        !           665: how to define procedures and what happens when they are invoked.
        !           666: 
        !           667: .SH VARIABLES
        !           668: .PP
        !           669: Tcl allows the definition of variables and the use of their values
        !           670: either through \fB$\fR-style variable substitution, the \fBset\fR
        !           671: command, or a few other mechanisms.  Variables need not be declared:
        !           672: a new variable will automatically be created each time a new variable
        !           673: name is used.  Variables may be either global or local.  If a variable
        !           674: name is used when a procedure isn't being executed, then it
        !           675: automatically refers to a global variable.  Variable names used
        !           676: within a procedure normally refer to local variables associated with that
        !           677: invocation of the procedure.  Local variables are deleted whenever
        !           678: a procedure exits.  The \fBglobal\fR command may be used to request
        !           679: that a name refer to a global variable for the duration of the current
        !           680: procedure (this is somewhat analogous to \fBextern\fR in C).
        !           681: 
        !           682: .SH "BUILT-IN COMMANDS"
        !           683: .PP
        !           684: The Tcl library provides the following built-in commands, which will
        !           685: be available in any application using Tcl.  In addition to these
        !           686: built-in commands, there may be additional commands defined by each
        !           687: application, plus commands defined as Tcl procedures.  In the command syntax
        !           688: descriptions below, optional arguments are indicated by enclosing their
        !           689: names in brackets;  apologies in advance for the confusion between this
        !           690: descriptive use of brackets and the use of brackets to invoke
        !           691: command substitution.
        !           692: Words in boldface are literals that you type verbatim to Tcl.
        !           693: Words in italics are meta-symbols;  they act as names to refer to
        !           694: a class of values that you can type.
        !           695: .TP
        !           696: \fBbreak\fR
        !           697: This command may be invoked only inside the body of a loop command
        !           698: such as \fBfor\fR or \fBforeach\fR.  It returns a TCL_BREAK code
        !           699: to signal the innermost containing loop command to return immediately.
        !           700: .TP
        !           701: \fBcase\fI string \fR[\fBin\fR] \fIpatList body patList body \fR...
        !           702: .VS
        !           703: Match \fIstring\fR against each of the \fIpatList\fR arguments
        !           704: in order.  If one matches, then evaluate the following \fIbody\fR argument
        !           705: by passing it recursively to the Tcl interpreter, and return the result
        !           706: of that evaluation.  Each \fIpatList\fR argument consists of a single
        !           707: pattern or list of patterns.  Each pattern may contain any of the wild-cards
        !           708: described under \fBstring match\fR.  If a \fIpatList\fR
        !           709: argument is \fBdefault\fR, the corresponding body will be evaluated
        !           710: if no \fIpatList\fR matches \fIstring\fR.  If no \fIpatList\fR argument
        !           711: matches \fIstring\fR and no default is given, then the \fBcase\fR
        !           712: command returns an empty string.  For example,
        !           713: .RS
        !           714: .DS
        !           715: \fBcase abc in {a b} {format 1} default {format 2} a* {format 3}
        !           716: .DE
        !           717: will return \fB3\fR, 
        !           718: .DS
        !           719: \fBcase a in {a b} {format 1} default {format 2} a* {format 3}
        !           720: .DE
        !           721: will return \fB1\fR, and
        !           722: .DS
        !           723: \fBcase xyz {a b} {format 1} default {format 2} a* {format 3}
        !           724: .DE
        !           725: will return \fB2\fR.
        !           726: .RE
        !           727: .VE
        !           728: .TP
        !           729: \fBcatch\fI command \fR[\fIvarName\fR]
        !           730: The \fBcatch\fR command may be used to prevent errors from aborting
        !           731: command interpretation.  \fBCatch\fR calls the Tcl interpreter recursively
        !           732: to execute \fIcommand\fR, and always returns a TCL_OK code, regardless of
        !           733: any errors that might occur while executing \fIcommand\fR.  The return
        !           734: value from \fBcatch\fR is a decimal string giving the
        !           735: code returned by the Tcl interpreter after executing \fIcommand\fR.
        !           736: This will be \fB0\fR (TCL_OK) if there were no errors in \fIcommand\fR; otherwise
        !           737: it will have a non-zero value corresponding to one of the exceptional
        !           738: return codes (see tcl.h for the definitions of code values).  If the
        !           739: \fIvarName\fR argument is given, then it gives the name of a variable;
        !           740: \fBcatch\fR will set the value of the variable to the string returned
        !           741: from \fIcommand\fR (either a result or an error message).
        !           742: .TP
        !           743: \fBconcat\fI arg \fR[\fIarg ...\fR]
        !           744: This command treats each argument as a list and concatenates them
        !           745: into a single list.  It permits any number of arguments.  For example,
        !           746: the command
        !           747: .RS
        !           748: .DS
        !           749: \fBconcat a b {c d e} {f {g h}}\fR
        !           750: .DE
        !           751: will return
        !           752: .DS
        !           753: \fBa b c d e f {g h}\fR
        !           754: .DE
        !           755: as its result.
        !           756: .RE
        !           757: .TP
        !           758: \fBcontinue\fR
        !           759: This command may be invoked only inside the body of a loop command
        !           760: such as \fBfor\fR or \fBforeach\fR.  It returns a  TCL_CONTINUE code
        !           761: to signal the innermost containing loop command to skip the
        !           762: remainder of the loop's body
        !           763: but continue with the next iteration of the loop.
        !           764: .TP
        !           765: \fBerror \fImessage\fR [\fIinfo\fR]
        !           766: Returns a TCL_ERROR code, which causes command interpretation to be
        !           767: unwound.  \fIMessage\fR is a string that is returned to the application
        !           768: to indicate what went wrong.
        !           769: .VS
        !           770: If the \fIinfo\fR argument is
        !           771: provided, it is used to initialize the global variable \fBerrorInfo\fR.
        !           772: \fBErrorInfo\fR is used to accumulate a stack trace of what
        !           773: was in progress when an error occurred;  as nested commands unwind,
        !           774: the Tcl interpreter adds information to \fBerrorInfo\fR.  If the
        !           775: \fIinfo\fR argument is present, it is used to initialize the
        !           776: \fBerrorInfo\fR variable, and the first increment of unwind information
        !           777: will not be added by the Tcl interpreter.  In other
        !           778: words, the command containing the \fBerror\fR command will not appear
        !           779: in the \fBerrorInfo\fR variable;  in its place will be \fIinfo\fR.
        !           780: This feature is most useful in conjunction with the \fBcatch\fR command:
        !           781: if a caught error cannot be handled successfully, \fIinfo\fR can be used
        !           782: to return a stack trace reflecting the original point of occurrence
        !           783: of the error:
        !           784: .RS
        !           785: .DS
        !           786: \fBcatch {...} errMsg
        !           787: set savedInfo $errorInfo
        !           788: \&...
        !           789: error $errMsg $savedInfo\fR
        !           790: .DE
        !           791: .RE
        !           792: .TP
        !           793: \fBeval \fIarg1 \fR[\fIarg2 ...\fR]
        !           794: \fBEval\fR takes one or more arguments, which together comprise a Tcl
        !           795: command (or collection of Tcl commands separated by newlines in the
        !           796: usual way).  \fBEval\fR concatenates all its arguments in the same
        !           797: fashion as the \fBconcat\fR command, passes the concatenated string to the
        !           798: Tcl interpreter recursively, and returns the result of that
        !           799: evaluation (or any error generated by it).
        !           800: .VE
        !           801: .TP
        !           802: \fBexec \fIcommand arg1 \fR[\fIarg2 ...\fR] [\fB< \fIinput\fR]
        !           803: The \fBexec\fR command treats its \fIcommand\fR argument as the name of
        !           804: a program to execute.  \fBExec\fR
        !           805: .VS
        !           806: performs tilde-substitution on
        !           807: \fIcommand\fR, if appropriate, then searches the directories in
        !           808: .VE
        !           809: the PATH environment variable to find
        !           810: an executable file by the name \fIcommand\fR,
        !           811: then executes the file, passing it an argument list consisting of
        !           812: \fIcommand\fR plus all of the \fIarg\fRs.  If an argument \fB<\fR appears
        !           813: anywhere among the arguments to \fBexec\fR, then neither it or the
        !           814: following argument is passed to \fIcommand\fR.  Instead, the following
        !           815: argument (\fIinput\fR) consists of input to the command;  \fBexec\fR
        !           816: will create a pipe and use it to pass \fIinput\fR to \fIcommand\fR
        !           817: as standard input.  \fBExec\fR also creates a pipe to receive \fIcommand\fR's
        !           818: output (both standard output and standard error).  The information
        !           819: received over this pipe is returned as the result of the \fBexec\fR
        !           820: command.  The \fBexec\fR command also looks at the return status
        !           821: returned by \fIcommand\fR.  Normally this should be zero;  if it is then
        !           822: \fBexec\fR returns normally.  If \fIcommand\fR returns a non-zero status,
        !           823: then \fBexec\fR will return that code;  it should be one of the ones
        !           824: defined in the section ``COMMAND RESULTS'' above.  If an out-of range
        !           825: code is returned by the command, it will cause command unwinding just
        !           826: as if TCL_ERROR had been returned; at the outermost level of command
        !           827: interpretation, the Tcl interpreter will turn the code into TCL_ERROR,
        !           828: with an appropriate error message.
        !           829: .TP
        !           830: \fBexpr \fIarg\fR
        !           831: Calls the expression processor to evaluate \fIarg\fR, and returns
        !           832: the result as a decimal string.
        !           833: .TP
        !           834: \fBfile \fIname\fR \fIoption\fR
        !           835: Operate on a file or a file name.  \fIName\fR is the name of a file;
        !           836: .VS
        !           837: if it starts with a tilde, then tilde substitution is done before
        !           838: executing the command (see the manual entry for \fBTcl_TildeSubst\fR
        !           839: for details).
        !           840: .VE
        !           841: \fIOption\fR indicates what to do with the file name.  Any unique
        !           842: abbreviation for \fIoption\fR is acceptable.  The valid options are:
        !           843: .RS
        !           844: .TP
        !           845: \fBfile \fIname \fBdirname\fR
        !           846: Return all of the characters in \fIname\fR up to but not including
        !           847: the last slash character.  If there are no slashes in \fIname\fR
        !           848: then return ``.''.  If the last slash in \fIname\fR is its first
        !           849: character, then return ``/''.
        !           850: .TP
        !           851: \fBfile \fIname \fBexecutable\fR
        !           852: Return \fB1\fR if file \fIname\fR is executable by
        !           853: the current user, \fB0\fR otherwise.
        !           854: .TP
        !           855: \fBfile \fIname \fBexists\fR
        !           856: Return \fB1\fR if file \fIname\fR exists and the current user has
        !           857: search privileges for the directories leading to it, \fB0\fR otherwise.
        !           858: .TP
        !           859: \fBfile \fIname \fBextension\fR
        !           860: Return all of the characters in \fIname\fR after and including the
        !           861: last dot in \fIname\fR.  If there is no dot in \fIname\fR then return
        !           862: the empty string.
        !           863: .TP
        !           864: \fBfile \fIname \fBisdirectory\fR
        !           865: Return \fB1\fR if file \fIname\fR is a directory,
        !           866: \fB0\fR otherwise.
        !           867: .TP
        !           868: \fBfile \fIname \fBisfile\fR
        !           869: Return \fB1\fR if file \fIname\fR is a regular file,
        !           870: \fB0\fR otherwise.
        !           871: .TP
        !           872: \fBfile \fIname \fBowned\fR
        !           873: Return \fB1\fR if file \fIname\fR is owned by the current user,
        !           874: \fB0\fR otherwise.
        !           875: .TP
        !           876: \fBfile \fIname \fBreadable\fR
        !           877: Return \fB1\fR if file \fIname\fR is readable by
        !           878: the current user, \fB0\fR otherwise.
        !           879: .TP
        !           880: \fBfile \fIname \fBrootname\fR
        !           881: Return all of the characters in \fIname\fR up to but not including
        !           882: the last ``.'' character in the name.  If \fIname\fR doesn't contain
        !           883: a dot, then return \fIname\fR.
        !           884: .TP
        !           885: \fBfile \fIname \fBtail\fR
        !           886: Return all of the characters in \fIname\fR after the last slash.
        !           887: If \fIname\fR contains no slashes then return \fIname\fR.
        !           888: .TP
        !           889: \fBfile \fIname \fBwritable\fR
        !           890: Return \fB1\fR if file \fIname\fR is writable by
        !           891: the current user, \fB0\fR otherwise.
        !           892: .RE
        !           893: .IP
        !           894: The \fBfile\fR commands that return 0/1 results are often used in
        !           895: conditional or looping commands, for example:
        !           896: .RS
        !           897: .DS
        !           898: \fBif {![file foo exists]} then {error {bad file name}} else {...}\fR
        !           899: .DE
        !           900: .RE
        !           901: .TP
        !           902: \fBfor \fIstart test next body\fR
        !           903: \fBFor\fR is a looping command, similar in structure to the C
        !           904: \fBfor\fR statement.  The \fIstart\fR, \fInext\fR, and
        !           905: \fIbody\fR arguments must be Tcl command strings, and \fItest\fR
        !           906: is an expression string.
        !           907: The \fBfor\fR command first invokes the Tcl interpreter to
        !           908: execute \fIstart\fR.  Then it repeatedly evaluates \fItest\fR as
        !           909: an expression;  if the result is non-zero it invokes the Tcl
        !           910: interpreter on \fIbody\fR, then invokes the Tcl interpreter on \fInext\fR,
        !           911: then repeats the loop.  The command terminates when \fItest\fR evaluates
        !           912: to 0.  If a \fBcontinue\fR command is invoked within \fIbody\fR then
        !           913: any remaining commands in the current execution of \fIbody\fR are skipped;
        !           914: processing continues by invoking the Tcl interpreter on \fInext\fR, then
        !           915: evaluating \fItest\fR, and so on.  If a \fBbreak\fR command is invoked
        !           916: within \fIbody\fR
        !           917: .VS
        !           918: or \fInext\fR,
        !           919: .VE
        !           920: then the \fBfor\fR command will
        !           921: return immediately.
        !           922: The operation of \fBbreak\fR and \fBcontinue\fR are similar to the
        !           923: corresponding statements in C.
        !           924: \fBFor\fR returns an empty string.
        !           925: .TP
        !           926: \fBforeach \fIvarname list body\fR
        !           927: In this command, \fIvarname\fR is the name of a variable, \fIlist\fR
        !           928: is a list of values to assign to \fIvarname\fR, and \fIbody\fR is a
        !           929: collection of Tcl commands.  For each field in \fIlist\fR (in order
        !           930: from left to right), \fBforeach\fR assigns the contents of the
        !           931: field to \fIvarname\fR (as if the \fBindex\fR command had been used
        !           932: to extract the field), then calls the Tcl interpreter to execute
        !           933: \fIbody\fR.  The \fBbreak\fR and \fBcontinue\fR statements may be
        !           934: invoked inside \fIbody\fR, with the same effect as in the \fBfor\fR
        !           935: command.  \fBForeach\fR an empty string.
        !           936: .TP
        !           937: \fBformat \fIformatString \fR[\fIarg arg ...\fR]
        !           938: This command generates a formatted string in the same way as the
        !           939: C \fBsprintf\fR procedure (it uses \fBsprintf\fR in its
        !           940: implementation).  \fIFormatString\fR indicates how to format
        !           941: the result, using \fB%\fR fields as in \fBsprintf\fR, and the additional
        !           942: arguments, if any, provide values to be substituted into the result.
        !           943: All of the \fBsprintf\fR options are valid;  see the \fBsprintf\fR
        !           944: man page for details.  Each \fIarg\fR must match the expected type
        !           945: from the \fB%\fR field in \fIformatString\fR;  the \fBformat\fR command
        !           946: converts each argument to the correct type (floating, integer, etc.)
        !           947: before passing it to \fBsprintf\fR for formatting.
        !           948: The only unusual conversion is for \fB%c\fR;  in this case the argument
        !           949: must be a decimal string, which will then be converted to the corresponding
        !           950: ASCII character value.
        !           951: \fBFormat\fR does backslash substitution on its \fIformatString\fR
        !           952: argument, so backslash sequences in \fIformatString\fR will be handled
        !           953: correctly even if the argument is in braces.
        !           954: The return value from \fBformat\fR
        !           955: is the formatted string.
        !           956: .TP
        !           957: \fBglob \fIfilename\fR [\fIfilename ...\fR]
        !           958: .VS
        !           959: This command performs filename globbing, using csh rules.  The returned
        !           960: value from \fBglob\fR is the list of expanded filenames.
        !           961: .VE
        !           962: .TP
        !           963: \fBglobal \fIvarname \fR[\fIvarname ...\fR]
        !           964: This command is ignored unless a Tcl procedure is being interpreted.
        !           965: If so, then it declares the given \fIvarname\fR's to be global variables
        !           966: rather than local ones.  For the duration of the current procedure
        !           967: (and only while executing in the current procedure), any reference to
        !           968: any of the \fIvarname\fRs will be bound to a global variable instead
        !           969: of a local one.
        !           970: .TP
        !           971: \fBhistory \fR[\fIoption \fR[\fIarg arg ...\fR]
        !           972: .VS
        !           973: Note:  this command may not be available in all Tcl-based applications.
        !           974: Typically, only those that receive command input in a typescript
        !           975: form will support history.
        !           976: The \fBhistory\fR command performs one of several operations related to
        !           977: recently-executed commands recorded in a history list.  Each of
        !           978: these recorded commands is referred to as an ``event''.  When
        !           979: specifying an event to the \fBhistory\fR command, the following
        !           980: forms may be used:
        !           981: .RS
        !           982: .IP [1]
        !           983: A number:  if positive, it refers to the event with
        !           984: that number (all events are numbered starting at 1).  If the number
        !           985: is negative, it selects an event relative to the current event
        !           986: (\fB-1\fR refers to the previous event, \fB-2\fR to the one before that, and
        !           987: so on).
        !           988: .IP [2]
        !           989: A string:  selects the most recent event that matches the string.
        !           990: An event is considered to match the string either if the string is
        !           991: the same as the first characters of the event, or if the string
        !           992: matches the event in the sense of the \fBstring match\fR command.
        !           993: .LP
        !           994: The \fBhistory\fR command can take any of the following forms:
        !           995: .TP
        !           996: \fBhistory\fR
        !           997: Re-execute the most recent command in the history list and return
        !           998: its result.  This command has the same effect as \fBhistory redo -1\fR.
        !           999: .TP
        !          1000: \fBhistory add\fI command \fR[\fBexec\fR]
        !          1001: Add the \fIcommand\fR argument to the history list as a new event.  If
        !          1002: \fBexec\fR is specified (or abbreviated) then the command is also
        !          1003: executed and its result is returned.  If \fBexec\fR isn't specified
        !          1004: then an empty string is returned as result.
        !          1005: .TP
        !          1006: \fBhistory change\fI newValue\fR [\fIevent\fR]
        !          1007: Replace the value recorded for an event with \fInewValue\fR.  \fIEvent\fR
        !          1008: specifies the event to replace, and
        !          1009: defaults to the \fIcurrent\fR event (not event \fB-1\fR).  This command
        !          1010: is intended for use in commands that implement new forms of history
        !          1011: substitution and wish to replace the current event (which invokes the
        !          1012: substitution) with the command created through substitution.  The return
        !          1013: value is an empty string.
        !          1014: .TP
        !          1015: \fBhistory event\fR [\fIevent\fR]
        !          1016: Returns the value of the event given by \fIevent\fR.  \fIEvent\fR
        !          1017: defaults to \fB-1\fR.  This command causes history revision to occur:
        !          1018: see below for details.
        !          1019: .TP
        !          1020: \fBhistory info \fR[\fIcount\fR]
        !          1021: Returns a formatted string (intended for humans to read) giving
        !          1022: the event number and contents for each of the events in the history
        !          1023: list except the current event.  If \fIcount\fR is specified
        !          1024: then only the most recent \fIcount\fR events are returned.
        !          1025: .TP
        !          1026: \fBhistory keep \fIcount\fR
        !          1027: This command may be used to change the size of the history list to
        !          1028: \fIcount\fR events.  Initially, 20 events are retained in the history
        !          1029: list.  This command returns an empty string.
        !          1030: .TP
        !          1031: \fBhistory nextid\fR
        !          1032: Returns the number of the next event to be recorded
        !          1033: in the history list.  It is useful for things like printing the
        !          1034: event number in command-line prompts.
        !          1035: .TP
        !          1036: \fBhistory redo \fR[\fIevent\fR]
        !          1037: Re-execute the command indicated by \fIevent\fR and return its result.
        !          1038: \fIEvent\fR defaults to \fB-1\fR.  This command results in history
        !          1039: revision:  see below for details.
        !          1040: .TP
        !          1041: \fBhistory substitute \fIold new \fR[\fIevent\fR]
        !          1042: Retrieve the command given by \fIevent\fR
        !          1043: (\fB-1\fR by default), replace any occurences of \fIold\fR by
        !          1044: \fInew\fR in the command (only simple character equality is supported;
        !          1045: no wild cards), execute the resulting command, and return the result
        !          1046: of that execution.  This command results in history
        !          1047: revision:  see below for details.
        !          1048: .TP
        !          1049: \fBhistory words \fIselector\fR [\fIevent\fR]
        !          1050: Retrieve from the command given by \fIevent\fR (\fB-1\fR by default)
        !          1051: the words given by \fIselector\fR, and return those words in a string
        !          1052: separated by spaces.  The \fBselector\fR argument has three forms.
        !          1053: If it is a single number then it selects the word given by that
        !          1054: number (\fB0\fR for the command name, \fB1\fR for its first argument,
        !          1055: and so on).  If it consists of two numbers separated by a dash,
        !          1056: then it selects all the arguments between those two.  Otherwise
        !          1057: \fBseletor\fR is treated as a pattern;  all words matching that
        !          1058: pattern (in the sense of \fBstring match\fR) are returned.  In
        !          1059: the numeric forms \fB$\fR may be used
        !          1060: to select the last word of a command.
        !          1061: For example, suppose the most recent command in the history list is
        !          1062: .RS
        !          1063: .DS
        !          1064: \fBformat  {%s is %d years old} Alice [expr $ageInMonths/12]\fR
        !          1065: .DE
        !          1066: Below are some history commands and the results they would produce:
        !          1067: .DS
        !          1068: .ta 4c
        !          1069: .fi
        !          1070: .UL Command "  "
        !          1071: .UL Result
        !          1072: .nf
        !          1073: 
        !          1074: \fBhistory words $     [expr $ageInMonths*12]\fR
        !          1075: \fBhistory words 1-2   {%s is %d years  old} Alice\fR
        !          1076: \fBhistory words *a*o* {%s is %d years old} [expr $ageInMonths*12]\fR
        !          1077: .DE
        !          1078: \fBHistory words\fR results in history revision:  see below for details.
        !          1079: .RE
        !          1080: The history options \fBredo\fR, \fBsubstitute\fR, and \fBwords\fR result
        !          1081: in ``history revision''.  If a history command with one of these options
        !          1082: can be traced directly to the current history event (e.g. the current
        !          1083: event invoked the history command directly or through command
        !          1084: substitution), then the current event is modified to eliminate the
        !          1085: history command and replace it with the result of the history
        !          1086: substitution.  For example, suppose that the most recent command in
        !          1087: the history list is
        !          1088: .DS
        !          1089: \fBset a [expr $b+2]\fR
        !          1090: .DE
        !          1091: and suppose that the next command invoked is one of the ones on
        !          1092: the left side of the table below.  The command actually recorded in
        !          1093: the history event will be the corresponding one on the right side
        !          1094: of the table.
        !          1095: .ne 1.5c
        !          1096: .DS
        !          1097: .ta 4c
        !          1098: .fi
        !          1099: .UL "Command Typed" "  "
        !          1100: .UL "Command Recorded"
        !          1101: .nf
        !          1102: 
        !          1103: \fBhistory     set a [expr $b+2]\fR
        !          1104: \fBhistory s a b       set b [expr $b+2]\fR
        !          1105: \fBset c [history w 2] set c [expr $b+2]\fR
        !          1106: .DE
        !          1107: History revision only occurs for history commands that can be directly
        !          1108: traced to the current event.  For example, the command
        !          1109: \fBeval history\fR will not result in history revision, because
        !          1110: the history command is invoked indirectly by \fBeval\fR.  If history
        !          1111: revision is desired in cases like this, it can be achieved by
        !          1112: requesting it explicitly with \fBhistory change\fR.
        !          1113: .RE
        !          1114: .VE
        !          1115: .TP
        !          1116: \fBif \fItest \fR[\fBthen\fR] \fItrueBody \fR[[\fBelse\fR] \fIfalseBody\fR]
        !          1117: The \fIif\fR command evaluates \fItest\fR as an expression (in the
        !          1118: same way that \fBexpr\fR evaluates its argument).  If the
        !          1119: result is non-zero then \fItrueBody\fR is called by passing it to the
        !          1120: Tcl interpreter.  Otherwise \fIfalseBody\fR is executed by passing it to
        !          1121: the Tcl interpreter.  The \fBthen\fR and \fBelse\fR arguments are optional
        !          1122: ``noise words'' to make the command easier to read.  \fIFalseBody\fR is
        !          1123: also optional;  if it isn't specified then the command does nothing if
        !          1124: \fItest\fR evaluates to zero.  The return value from \fBif\fR is
        !          1125: the value of the last command executed in \fItrueBody\fR or
        !          1126: \fIfalseBody\fR, or the empty string if \fItest\fR evaluates to zero and
        !          1127: \fIfalseBody\fR isn't specified.
        !          1128: .TP
        !          1129: \fBindex \fIvalue index \fR[\fBchars\fR]
        !          1130: Extract an element from a list or a character from a string.  If the
        !          1131: \fBchars\fR keyword isn't specified, then \fBindex\fR treats \fIvalue\fR
        !          1132: as a list and returns the \fIindex\fR'th field from it.  In extracting
        !          1133: the field, \fIindex\fR observes the same rules concerning braces
        !          1134: and backslashes as the Tcl command interpreter;  however, variable
        !          1135: substitution and command substitution do not occur.  If \fIindex\fR is
        !          1136: greater than or equal to the number of elements in \fIvalue\fR, then the empty
        !          1137: string is returned.  If the \fBchars\fR keyword is specified (or any
        !          1138: abbreviation of it), then \fIvalue\fR is treated as a string and the
        !          1139: command returns the \fIindex\fR'th character from it (or the empty string
        !          1140: if there aren't at least \fIindex\fR+1 characters in the string).
        !          1141: Index 0 refers to the first element or character of \fIvalue\fR.
        !          1142: .TP
        !          1143: \fBinfo \fIoption \fR[\fIarg arg ...\fR]
        !          1144: Provide information about various internals to the Tcl interpreter.
        !          1145: The legal \fIoption\fR's (which may be abbreviated) are:
        !          1146: .RS
        !          1147: .TP
        !          1148: \fBinfo args \fIprocname\fR
        !          1149: Returns a list containing the names of the arguments to procedure
        !          1150: \fIprocname\fR, in order.  \fIProcname\fR must be the name of a
        !          1151: Tcl command procedure.
        !          1152: .TP
        !          1153: \fBinfo body \fIprocname\fR
        !          1154: Returns the body of procedure \fIprocname\fR.  \fIProcname\fR must be
        !          1155: the name of a Tcl command procedure.
        !          1156: .TP
        !          1157: \fBinfo commands \fR[\fIpattern\fR]
        !          1158: .VS
        !          1159: If \fIpattern\fR isn't specified, returns a list of names of all the
        !          1160: Tcl commands, including both the built-in commands written in C and
        !          1161: the command procedures defined using the \fBproc\fR command.
        !          1162: If \fIpattern\fR is specified, only those names matching \fIpattern\fR
        !          1163: are returned.  Matching is determined using the same rules as for
        !          1164: \fBstring match\fR.
        !          1165: .VE
        !          1166: .TP
        !          1167: \fBinfo cmdcount\fR
        !          1168: Returns a count of the total number of commands that have been invoked
        !          1169: in this interpreter.
        !          1170: .TP
        !          1171: \fBinfo default \fIprocname arg varname\fR
        !          1172: \fIProcname\fR must be the name of a Tcl command procedure and \fIarg\fR
        !          1173: must be the name of an argument to that procedure.  If \fIarg\fR
        !          1174: doesn't have a default value then the command returns \fB0\fR.
        !          1175: Otherwise it returns \fB1\fR and places the default value of \fIarg\fR
        !          1176: into variable \fIvarname\fR.
        !          1177: .TP
        !          1178: \fBinfo exists \fIvarName\fR
        !          1179: Returns \fB1\fR if the variable named \fIvarName\fR exists in the
        !          1180: current context (either as a global or local variable), returns \fB0\fR
        !          1181: otherwise.
        !          1182: .TP
        !          1183: \fBinfo globals \fR[\fIpattern\fR]
        !          1184: .VS
        !          1185: If \fIpattern\fR isn't specified, returns a list of all the names
        !          1186: of currently-defined global variables.
        !          1187: If \fIpattern\fR is specified, only those names matching \fIpattern\fR
        !          1188: are returned.  Matching is determined using the same rules as for
        !          1189: \fBstring match\fR.
        !          1190: .TP
        !          1191: \fBinfo level\fR [\fInumber\fR]
        !          1192: If \fInumber\fR is not specified, this command returns a number
        !          1193: giving the stack level of the invoking procedure, or 0 if the
        !          1194: command is invoked at top-level.  If \fInumber\fR is specified,
        !          1195: then the result is a list consisting of the name and arguments for the
        !          1196: procedure call at level \fInumber\fR on the stack.  If \fInumber\fR
        !          1197: is positive then it selects a particular stack level (1 refers
        !          1198: to the top-most active procedure, 2 to the procedure it called, and
        !          1199: so on);  otherwise it gives a level relative to the current level
        !          1200: (0 refers to the current procedure, -1 to its caller, and so on).
        !          1201: See the \fBuplevel\fR command for more information on what stack
        !          1202: levels mean.
        !          1203: .TP
        !          1204: \fBinfo locals \fR[\fIpattern\fR]
        !          1205: If \fIpattern\fR isn't specified, returns a list of all the names
        !          1206: of currently-defined local variables, including arguments to the
        !          1207: current procedure, if any.
        !          1208: If \fIpattern\fR is specified, only those names matching \fIpattern\fR
        !          1209: are returned.  Matching is determined using the same rules as for
        !          1210: \fBstring match\fR.
        !          1211: .TP
        !          1212: \fBinfo procs \fR[\fIpattern\fR]
        !          1213: If \fIpattern\fR isn't specified, returns a list of all the
        !          1214: names of Tcl command procedures.
        !          1215: If \fIpattern\fR is specified, only those names matching \fIpattern\fR
        !          1216: are returned.  Matching is determined using the same rules as for
        !          1217: \fBstring match\fR.
        !          1218: .TP
        !          1219: \fBinfo tclversion\fR
        !          1220: Returns the version number for this version of Tcl in the form \fIx.y\fR,
        !          1221: where changes to \fIx\fR represent major changes with probable
        !          1222: incompatibilities and changes to \fIy\fR represent small enhancements and
        !          1223: bug fixes that retain backward compatibility.
        !          1224: .VE
        !          1225: .TP
        !          1226: \fBinfo vars\fR
        !          1227: Returns a list of all the names of currently-visible variables, including
        !          1228: both locals and currently-visible globals.
        !          1229: .RE
        !          1230: .TP
        !          1231: \fBlength \fIvalue\fR [\fBchars\fR]
        !          1232: If \fBchars\fR isn't specified, treats \fIvalue\fR as a list
        !          1233: and returns the number of elements in the list.  If \fBchars\fR
        !          1234: is specified (or any abbreviation of it), then \fBlength\fR
        !          1235: treats \fIvalue\fR as a string and returns the number of characters
        !          1236: in it (not including the terminating null character).
        !          1237: .TP
        !          1238: \fBlist \fIarg1 \fR[\fIarg2 ...\fR]
        !          1239: This command returns a list comprised of all the \fIarg\fRs.  Braces
        !          1240: and backslashes get added as necessary, so that the \fBindex\fR command
        !          1241: may be used on the result to re-extract the original arguments, and also
        !          1242: so that \fBeval\fR may be used to execute the resulting list, with
        !          1243: \fIarg1\fR comprising the command's name and the other \fIarg\fRs comprising
        !          1244: its arguments.  \fBList\fR produces slightly different results than
        !          1245: \fBconcat\fR:  \fBconcat\fR removes one level of grouping before forming
        !          1246: the list, while \fBlist\fR works directly from the original arguments.
        !          1247: For example, the command
        !          1248: .RS
        !          1249: .DS
        !          1250: \fBlist a b {c d e} {f {g h}}
        !          1251: .DE
        !          1252: will return
        !          1253: .DS
        !          1254: \fBa b {c d e} {f {g h}}
        !          1255: .DE
        !          1256: while \fBconcat\fR with the same arguments will return
        !          1257: .DS
        !          1258: \fBa b c d e f {g h}\fR
        !          1259: .DE
        !          1260: .RE
        !          1261: .TP
        !          1262: \fBprint \fIstring \fR[\fIfile \fR[\fBappend\fR]]
        !          1263: .VS
        !          1264: Print the \fIstring\fR argument.  If no \fIfile\fR is specified then
        !          1265: \fIstring\fR is output to the standard output file.  If \fIfile\fR is
        !          1266: specified, then \fIstring\fR is output to that file.  If the \fBappend\fR
        !          1267: option is given, then \fIstring\fR is appended to \fIfile\fR;  otherwise
        !          1268: any existing contents of \fIfile\fR are discarded before \fIstring\fR
        !          1269: is written to the file.
        !          1270: .VE
        !          1271: .TP
        !          1272: \fBproc \fIname args body\fR
        !          1273: The \fBproc\fR command creates a new Tcl command procedure,
        !          1274: \fIname\fR, replacing
        !          1275: any existing command there may have been by that name.  Whenever the
        !          1276: new command is invoked, the contents of \fIbody\fR will be executed
        !          1277: by the Tcl interpreter.  \fIArgs\fR specifies the formal arguments to the
        !          1278: procedure.  It consists of a list, possibly empty, each of whose
        !          1279: elements specifies
        !          1280: one argument.  Each argument specifier is also a list with either
        !          1281: one or two fields.  If there is only a single field in the specifier,
        !          1282: then it is the name of the argument;  if there are two fields, then
        !          1283: the first is the argument name and the second is its default value.
        !          1284: braces and backslashes may be used in the usual way to specify
        !          1285: complex default values.
        !          1286: .IP
        !          1287: When \fIname\fR is invoked, a local variable
        !          1288: will be created for each of the formal arguments to the procedure;  its
        !          1289: value will be the value of corresponding argument in the invoking command
        !          1290: or the argument's default value.
        !          1291: Arguments with default values need not be
        !          1292: specified in a procedure invocation.  However, there must be enough
        !          1293: actual arguments for all the
        !          1294: formal arguments that don't have defaults, and there must not be any extra
        !          1295: actual arguments.  There is one special case to permit procedures with
        !          1296: variable numbers of arguments.  If the last formal argument has the name
        !          1297: \fBargs\fR, then a call to the procedure may contain more actual arguments
        !          1298: than the procedure has formals.  In this case, all of the actual arguments
        !          1299: starting at the one that would be assigned to \fBargs\fR are combined into
        !          1300: a list (as if the \fBlist\fR command had been used);  this combined value
        !          1301: is assigned to the local variable \fBargs\fR.
        !          1302: .IP
        !          1303: When \fIbody\fR is being executed, variable names normally refer to
        !          1304: local variables, which are created automatically when referenced and
        !          1305: deleted when the procedure returns.  One local variable is automatically
        !          1306: created for each of the procedure's arguments.
        !          1307: Global variables can only be accessed by invoking
        !          1308: the \fBglobal\fR command.
        !          1309: .IP
        !          1310: The \fBproc\fR command returns the null string.  When a procedure is
        !          1311: invoked, the procedure's return value is the value specified in a
        !          1312: \fBreturn\fR command.  If the procedure doesn't execute an explicit
        !          1313: \fBreturn\fR, then its return value is the value of the last command
        !          1314: executed in the procedure's body.
        !          1315: If an error occurs while executing the procedure
        !          1316: body, then the procedure-as-a-whole will return that same error.
        !          1317: .TP
        !          1318: \fBrange \fIvalue first last \fR[\fBchars\fR]
        !          1319: Return a range of fields or characters from \fIvalue\fR.  If the
        !          1320: \fBchars\fR keyword isn't specified, then \fIvalue\fR must be
        !          1321: a list and \fBrange\fR will return a new list consisting of elements
        !          1322: \fIfirst\fR through \fIlast\fR, inclusive.  The
        !          1323: special keyword \fBend\fR may be specified for \fIlast\fR; in
        !          1324: this case all the elements of \fIvalue\fR starting at \fIfirst\fR
        !          1325: are returned.  If the \fBchars\fR keyword, or any abbreviation of
        !          1326: it, is specified, then \fBrange\fR treats \fIvalue\fR as a character
        !          1327: string and returns characters \fIfirst\fR through \fIlast\fR of
        !          1328: it, inclusive.  Once again, the \fBend\fR keyword may be used for
        !          1329: \fIlast\fR.  In both cases if a \fIlast\fR value is specified greater
        !          1330: than the size of \fIvalue\fR it is equivalent to specifying \fBend\fR;
        !          1331: if \fIlast\fR is less than \fIfirst\fR then an empty string is returned.
        !          1332: Note: ``\fBrange \fIvalue first first\fR'' does not always produce the
        !          1333: same results as ``\fBindex \fIvalue first\fR'' (although it often does
        !          1334: for simple fields that aren't enclosed in braces);  it does, however,
        !          1335: produce exactly the same results as ``\fBlist [index \fIvalue first\fB]\fR''
        !          1336: .TP
        !          1337: \fBrename \fIoldName newName\fR
        !          1338: .VS
        !          1339: Rename the command that used to be called \fIoldName\fR so that it
        !          1340: is now called \fInewName\fR.  If \fInewName\fR is an empty string
        !          1341: (e.g. {}) then \fIoldName\fR is deleted.  The \fBrename\fR command
        !          1342: returns an empty string as result.
        !          1343: .VE
        !          1344: .TP
        !          1345: \fBreturn \fR[\fIvalue\fR]
        !          1346: Return immediately from the current procedure
        !          1347: .VS
        !          1348: (or top-level command or \fBsource\fR command),
        !          1349: .VE
        !          1350: with \fIvalue\fR as the return value.  If \fIvalue\fR is not specified,
        !          1351: an empty string will be returned as result.
        !          1352: .VE
        !          1353: .TP
        !          1354: \fBscan \fIstring format varname1 \fR[\fIvarname2 ...\fR]
        !          1355: This command parses fields from an input string in the same fashion
        !          1356: as the C \fBsscanf\fR procedure.  \fIString\fR gives the input to
        !          1357: be parsed and \fIformat\fR indicates how to parse it, using \fB%\fR
        !          1358: fields as in \fBsscanf\fR.  All of the \fBsscanf\fR options are valid;
        !          1359: see the \fBsscanf\fR man page for details.  Each \fIvarname\fR gives
        !          1360: the name of a variable;  when a field is scanned from \fIstring\fR,
        !          1361: the result is converted back into a string and assigned to the
        !          1362: corresponding \fIvarname\fR.  The only unusual conversion is for
        !          1363: \fB%c\fR;  in this case, the character value is converted to a
        !          1364: decimal string, which is then assigned to the corresponding \fIvarname\fR.
        !          1365: .VS
        !          1366: .TP
        !          1367: \fBset \fIvarname \fR[\fIvalue\fR]
        !          1368: .VS
        !          1369: If \fIvalue\fR isn't specified, then return the current value of
        !          1370: \fIvarname\fR.  If \fIvalue\fR is specified, then set
        !          1371: .VE
        !          1372: the value of \fIvarname\fR to \fIvalue\fR, creating a new variable
        !          1373: if one doesn't already exist.  If no procedure is active, then
        !          1374: \fIvarname\fR refers to a global variable.  If a procedure is
        !          1375: active, then \fIvarname\fR refers to a parameter or local variable
        !          1376: of the procedure, unless the \fIglobal\fR command has been invoked
        !          1377: to declare \fIvarname\fR to be global.
        !          1378: .VE
        !          1379: .TP
        !          1380: \fBsource \fIfileName\fR
        !          1381: Read file \fIfileName\fR and pass the contents to the Tcl interpreter
        !          1382: as a sequence of commands to execute in the normal fashion.  The return
        !          1383: value of \fBsource\fR is the return value of the last command executed
        !          1384: from the file.  If an error occurs in executing the contents of the
        !          1385: file, then the \fBsource\fR command will return that error.
        !          1386: .VS
        !          1387: If a \fBreturn\fR command is invoked from within the file, the remainder of
        !          1388: the file will be skipped and the \fBsource\fR command will return
        !          1389: normally with the result from the \fBreturn\fR command.
        !          1390: If \fIfileName\fR starts with a tilde, then it is tilde-substituted
        !          1391: as described in the \fBTcl_TildeSubst\fR manual entry.
        !          1392: .VE
        !          1393: .TP
        !          1394: \fBstring \fIoption a b\fR
        !          1395: Perform a string operation on the two operands \fIa\fR and \fIb\fR,
        !          1396: based on \fIoption\fR.  The possible options are:
        !          1397: .RS
        !          1398: .TP
        !          1399: \fBstring compare \fIa b\fR
        !          1400: Perform a character-by-character comparison of strings \fIa\fR and
        !          1401: \fIb\fR, in the same way as the C \fBstrcmp\fR procedure.  Return
        !          1402: -1, 0, or 1, depending on whether \fIa\fR is lexicographically
        !          1403: less than, equal to, or greater than \fIb\fR.
        !          1404: .TP
        !          1405: \fBstring first \fIa b\fR
        !          1406: Search \fIb\fR for a sequence of characters that exactly match
        !          1407: the characters in \fIa\fR.  If found, return the index of the
        !          1408: first character in the first such match within \fIb\fR.  If not
        !          1409: found, return -1.
        !          1410: .TP
        !          1411: \fBstring last \fIa b\fR
        !          1412: Search \fIb\fR for a sequence of characters that exactly match
        !          1413: the characters in \fIa\fR.  If found, return the index of the
        !          1414: first character in the last such match within \fIb\fR.  If there
        !          1415: is no match, then return -1.
        !          1416: .br
        !          1417: .VS
        !          1418: .TP
        !          1419: \fBstring match \fIpattern\fR \fIstring\fR
        !          1420: See if \fIpattern\fR matches \fIstring\fR;  return 1 if it does, 0
        !          1421: if it doesn't.  Matching is done in a fashion similar to that
        !          1422: used by the C-shell.  For the two strings to match, their contents
        !          1423: must be identical except that the following special sequences
        !          1424: may appear in \fIpattern\fR:
        !          1425: .RS
        !          1426: .IP \fB*\fR 10
        !          1427: Matches any sequence of characters in \fIstring\fR,
        !          1428: including a null string.
        !          1429: .IP \fB?\fR 10
        !          1430: Matches any single character in \fIstring\fR.
        !          1431: .IP \fB[\fIchars\fB]\fR 10
        !          1432: Matches any character in the set given by \fIchars\fR.  If a sequence
        !          1433: of the form
        !          1434: \fIx\fB\-\fIy\fR appears in \fIchars\fR, then any character
        !          1435: between \fIx\fR and \fIy\fR, inclusive, will match.
        !          1436: .IP\fB\e\fIx\fR 10
        !          1437: Matches the single character \fIx\fR.  This provides a way of
        !          1438: avoiding the special interpretation of the characters
        !          1439: \fB*?[]\e\fR in \fIpattern\fR.
        !          1440: .RE
        !          1441: .RE
        !          1442: .VE
        !          1443: .IP
        !          1444: Unique abbreviations for \fIoption\fR are acceptable.
        !          1445: .TP
        !          1446: \fBtime \fIcommand\fR [\fIcount\fR]
        !          1447: This command will call the Tcl interpreter \fIcount\fR
        !          1448: times to execute \fIcommand\fR (or once if \fIcount\fR isn't
        !          1449: specified).  It will then return a string of the form
        !          1450: .RS
        !          1451: .DS
        !          1452: \fB503 microseconds per iteration\fR
        !          1453: .DE
        !          1454: which indicates the average amount of time required per iteration,
        !          1455: in microseconds.
        !          1456: Time is measured in elapsed time, not CPU time.
        !          1457: .RE
        !          1458: .TP
        !          1459: \fBuplevel \fR[\fIlevel\fR]\fI command \fR[\fIcommand ...\fR]
        !          1460: .VS
        !          1461: All of the \fIcommand\fR arguments are concatenated as if they had
        !          1462: been passed to \fBconcat\fR;  the result is then evaluated in the
        !          1463: variable context indicated by \fIlevel\fR.  \fBUplevel\fR returns
        !          1464: the result of that evaluation.  If \fIlevel\fR is an integer, then
        !          1465: it gives a distance (up the procedure calling stack) to move before
        !          1466: executing the command.  If \fIlevel\fR consists of \fB#\fR followed by
        !          1467: a number then the number gives an absolute level number.  If \fIlevel\fR
        !          1468: is omitted then it defaults to \fB1\fR.  \fILevel\fR cannot be
        !          1469: defaulted if the first \fIcommand\fR argument starts with a digit or \fB#\fR.
        !          1470: For example, suppose that procedure \fBa\fR was invoked
        !          1471: from top-level, and that it called \fBb\fR, and that \fBb\fR called \fBc\fR.
        !          1472: Suppose that \fBc\fR invokes the \fBuplevel\fR command.  If \fIlevel\fR
        !          1473: is \fB1\fR or \fB#2\fR  or omitted, then the command will be executed
        !          1474: in the variable context of \fBb\fR.  If \fIlevel\fR is \fB2\fR or \fB#1\fR
        !          1475: then the command will be executed in the variable context of \fBa\fR.
        !          1476: If \fIlevel\fR is \fB3\fR or \fB#0\fR then the command will be executed
        !          1477: at top-level (only global variables will be visible).
        !          1478: The \fBuplevel\fR command causes the invoking procedure to disappear
        !          1479: from the procedure calling stack while the command is being executed.
        !          1480: In the above example, suppose \fBc\fR invokes the command
        !          1481: .RS
        !          1482: .DS
        !          1483: \fBuplevel 1 {set x 43; d}
        !          1484: .DE
        !          1485: where \fBc\fR is another Tcl procedure.  The \fBset\fR command will
        !          1486: modify the variable \fBx\fR in \fBb\fR's context, and \fBd\fR will execute
        !          1487: at level 3, as if called from \fBb\fR.  If it in turn executes
        !          1488: the command
        !          1489: .DS
        !          1490: \fBuplevel {set x 42}
        !          1491: .DE
        !          1492: then the \fBset\fR command will modify the same variable \fBx\fR in \fBb\fR's
        !          1493: context:  the procedure \fBc\fR does not appear to be on the call stack
        !          1494: when \fBd\fR is executing.  The command ``\fBinfo level\fR'' may
        !          1495: be used to obtain the level of the current procedure.
        !          1496: \fBUplevel\fR makes it possible to implement new control
        !          1497: constructs as Tcl procedures (for example, \fBuplevel\fR could
        !          1498: be used to implement the \fBwhile\fR construct as a Tcl procedure).
        !          1499: .VE
        !          1500: .RE
        !          1501: 
        !          1502: .VS
        !          1503: .SH "BUILT-IN VARIABLES"
        !          1504: .PP
        !          1505: The following global variables are created and managed automatically
        !          1506: by the Tcl library.  These variables should normally be treated as
        !          1507: read-only by application-specific code and by users.
        !          1508: .TP
        !          1509: \fBerrorInfo\fR
        !          1510: After an error has occurred, this string will contain two or more lines
        !          1511: identifying the Tcl commands and procedures that were being executed
        !          1512: when the most recent error occurred.
        !          1513: .TP
        !          1514: \fBnoAbbrev\fR
        !          1515: If this variable has the value \fB1\fR then abbreviations are disallowed
        !          1516: for command names.  If the variable doesn't exist or has a value other
        !          1517: than \fB1\fR then abbreviations are permitted.
        !          1518: .VE
        !          1519: 
        !          1520: .SH AUTHOR
        !          1521: John Ousterhout, University of California at Berkeley ([email protected])

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.