TclX
TclX(TCL) TclX(TCL)
NAME
TclX - Extended Tcl: Extended command set for Tcl
INTRODUCTION
This man page contains the documentation for all of the extensions that
are added to Tcl 8.0 by Extended Tcl (TclX 8.0.0). TclX extends Tcl's
capabilities by adding new commands to it, without changing the syntax
of standard Tcl. Extended Tcl is a superset of standard Tcl and is
built alongside the standard Tcl sources.
Extended Tcl was created by Karl Lehenbauer (karl@neosoft.com) and Mark
Diekhans (markd@grizzly.com) and is freely redistributable for any use
without license or fee.
Available over the Internet since 1989, Extended Tcl, also known as
TclX, not only adds capabilities to Tcl, but has also been the source
of many of the capabilities of the baseline Tcl release, including
arrays, files, sockets, file events, and date and time handling, among
others.
Extended Tcl has three basic functional areas: A set of new commands, a
Tcl shell (i.e. a Unix shell-style command line and interactive envi-
ronment), and a user-extensible library of useful Tcl procedures, any
of which can be automatically loaded on the first attempt to execute
it.
The command descriptions are separated into several sections:
o General Commands
o Debugging and Development Commands
o Unix Access Commands
o File Commands
o Network Programming Support
o File Scanning Commands
o Math Commands
o List Manipulation Commands
o Keyed Lists
o String and Character Manipulation Commands
o XPG/3 Message Catalog Commands
o Extended Tcl Shell
o Help Facility
o Tcl Loadable Libraries and Packages
GENERAL COMMANDS
A set of general, useful Tcl commands, includes a command to begin an
interactive session with Tcl, a facility for tracing execution, and a
looping command.
dirs This procedure lists the directories in the directory stack.
commandloop ?-async? ?-interactive on | off | tty? ?-prompt1 cmd?
?-prompt2 cmd? ?-endcommand cmd?
Create an interactive command loop reading commands from stdin
and writing results to stdout. Command loops are maybe either
be blocking or event oriented. This command is useful for Tcl
scripts that do not normally converse interactively with a user
through a Tcl command interpreter, but which sometimes want to
enter this mode, perhaps for debugging or user configuration.
The command loop terminates on EOF.
The following options are available:
-async A command handler will be associated with stdin. When
input is available on stdin, it will be read and accumu-
lated until a full command is available. That command
will then be evaluated. An event loop must be entered
for input to be read and processed.
-interactive on | off | tty
Enable or disable interactive command mode. In interac-
tive mode, commands are prompted for and the results of
comments are printed. The value maybe any boolean value
or tty. If tty is used, interactive mode is enabled if
stdin is associated with a terminal or terminal emulator.
The default is tty.
-prompt1 cmd
If specified, cmd is used is evaluate and its result
used for the main command prompt. If not specified, the
command in tcl_prompt1 is evaluated to output the prompt.
Note the difference in behavior, cmd results is used,
while tcl_prompt1 outputs. This is to allow for future
expansion to command loops that write to other than std-
out.
-prompt2 cmd
If specified, cmd is used is evaluate and its result used
for the secondary (continuation) command prompt. If not
specified, the command in tcl_prompt2 is evaluated to
output the prompt.
-endcommand cmd
If specified, cmd is evaluated when the command loop ter-
minates.
In interactive mode, the results of set commands with two
arguments are not printed.
If SIGINT is configured to generate a Tcl error, it can
be used to delete the current command being type without
aborting the program in progress.
echo ?str ...?
Writes zero or more strings to standard output, followed by a
newline.
infox option
Return information about Extended Tcl, or the current applica-
tion. The following infox command options are available:
version
Return the version number of Extended Tcl. The version
number for Extended Tcl is generated by combining the
base version of the standard Tcl code with another number
indicating the version of Extended Tcl being used.
patchlevel
Return the patchlevel for Extended Tcl.
have_fchown
Return 1 if the fchown system call is available. This
supports the -fileid option on the chown and chgrp com-
mands.
have_fchmod
Return 1 if the fchmod system call is available. This
supports the -fileid option on the chmod command.
have_flock
Return 1 if the flock command defined, 0 if it is not
available.
have_fsync
Return 1 if the fsync system call is available and the
sync command will sync individual files. 0 if it is not
available and the sync command will always sync all file
buffers.
have_ftruncate
Return 1 if the ftruncate or chsize system call is avail-
able. If it is, the ftruncate command -fileid option
maybe used.
have_msgcats
Return 1 if XPG message catalogs are available, 0 if they
are not. The catgets is designed to continue to function
without message catalogs, always returning the default
string.
have_posix_signals
Return 1 if Posix signals are available (block and
unblock options available for the signal command). 0 is
returned if Posix signals are not available.
have_signal_restart
Return 1 if restartable signals are available (-restart
option available for the signal command). 0 is returned
if restartable signals are not available.
have_truncate
Return 1 if the truncate system call is available. If it
is, the ftruncate command may truncate by file path.
have_waitpid
Return 1 if the waitpid system call is available and the
wait command has full functionality. 0 if the wait com-
mand has limited functionality.
appname
Return the symbolic application name of the current
application linked with the Extended Tcl library. The C
variable tclAppName must be set by the application to
return an application specific value for this variable.
applongname
Return a natural language name for the current applica-
tion. The C variable tclLongAppName must be set by the
application to return an application specific value for
this variable.
appversion
Return the version number for the current application.
The C variable tclAppVersion must be set by the applica-
tion to return an application-specific value for this
variable.
apppatchlevel
Return the patchlevel for the current application. The C
variable tclAppPatchlevel must be set by the application
to return an application-specific value for this vari-
able.
for_array_keys var array_name code
This procedure performs a foreach-style loop for each key in the
named array. The break and continue statements work as with
foreach.
for_recursive_glob var dirlist globlist code
This procedure performs a foreach-style loop over recursively
matched files. All directories in dirlist are recursively
searched (breadth-first), comparing each file found against the
file glob patterns in globlist. For each matched file, the
variable var is set to the file path and code is evaluated.
Symbolic links are not followed.
loop var first limit ?increment? body
Loop is a looping command, similar in behavior to the Tcl for
statement, except that the loop statement achieves substantially
higher performance and is easier to code when the beginning and
ending values of a loop are known, and the loop variable is to
be incremented by a known, fixed amount every time through the
loop.
The var argument is the name of a Tcl variable that will con-
tain the loop index. The loop index is set to the value speci-
fied by first. The Tcl interpreter is invoked upon body zero or
more times, where var is incremented by increment every time
through the loop, or by one if increment is not specified.
Increment can be negative in which case the loop will count
downwards.
When var reaches limit, the loop terminates without a subsequent
execution of body. For instance, if the original loop parame-
ters would cause loop to terminate, say first was one, limit was
zero and increment was not specified or was non-negative, body
is not executed at all and loop returns.
The first, limit and increment are integer expressions. They
are only evaluated once at the beginning of the loop.
If a continue command is invoked within body then any remaining
commands in the current execution of body are skipped, as in the
for command. If a break command is invoked within body then the
loop command will return immediately. Loop returns an empty
string.
popd This procedure pops the top directory entry from the directory
stack and make it the current directory.
pushd ?dir?
This procedure pushs the current directory onto the directory
stack and cd to the specified directory. If the directory is
not specified, then the current directory is pushed, but remains
unchanged.
recursive_glob dirlist globlist
This procedure returns a list of recursively matches files. All
directories in dirlist are recursively searched (breadth-first),
comparing each file found against the file glob patterns in
globlist. Symbolic links are not followed.
showproc ?procname ...?
This procedure lists the definition of the named procedures.
Loading them if it is not already loaded. If no procedure names
are supplied, the definitions of all currently loaded procedures
are returned.
try_eval code catch ?finally?
The try_eval command evaluates code in the current context.
If an error occurs during the evaluation and catch is not empty, then
catch is evaluated to handler the error. The result of the command,
containing the error message, will be stored in a global variable
errorResult. The global variables errorResult, errorInfo and errorCode
will be imported into the current scope, there is no need to execute a
global command. The result of the catch command becomes the result of
the try_eval command. If the error that caused the catch to be evalu-
ate is to be continued, the following command should be used:
error $errorResult $errorCode $errorInfo
If the finally argument is supplied and not empty, it is evaluated
after the evaluation of the code and the catch commands. If an error
occurs during the evaluation of the finally command, it becomes the
result of the try_eval command. Otherwise, the result of either code
or catch is preserved, as described above.
DEBUGGING AND DEVELOPMENT COMMANDS
This section contains information on commands and procedures that are
useful for developing and debugging Tcl scripts.
cmdtrace level | on ?noeval? ?notruncate? ?procs? ?fileid? ?command
cmd?
Print a trace statement for all commands executed at depth of
level or below (1 is the top level). If on is specified, all
commands at any level are traced. The following options are
available:
noeval Causes arguments to be printed unevaluated. If noeval is
specified, the arguments are printed before evaluation.
Otherwise, they are printed afterwards.
If the command line is longer than 60 characters, it is
truncated to 60 and a "..." is postpended to indicate
that there was more output than was displayed. If an
evaluated argument contains a space, the entire argument
will be enclosed inside of braces (`{}') to allow the
reader to visually separate the arguments from each
other.
notruncate
Disables the truncation of commands and evaluated argu-
ments.
procs Enables the tracing of procedure calls only. Commands
that aren't procedure calls (i.e. calls to commands that
are written in C, C++ or some object-compatible language)
are not traced if the procs option is specified. This
option is particularly useful for greatly reducing the
output of cmdtrace while debugging.
fileid This is a file id as returned by the open command. If
specified, then the trace output will be written to the
file rather than stdout. A stdio buffer flush is done
after every line is written so that the trace may be mon-
itored externally or provide useful information for
debugging problems that cause core dumps.
command cmd
Call the specified command cmd on when each command is
executed instead of tracing to a file. See the descrip-
tion of the functionally below. This option may not be
specified with a fileid.
The most common use of this command is to enable tracing to a
file during the development. If a failure occurs, a trace is
then available when needed. Command tracing will slow down the
execution of code, so it should be removed when code is
debugged. The following command will enable tracing to a file
for the remainder of the program:
cmdtrace on [open cmd.log w]
The command option causes a user specified trace command to be
called for each command executed. The command will have the
following arguments appended to it before evaluation:
command
A string containing the text of the command, before any
argument substitution.
argv A list of the final argument information that will be
passed to the command after command, variable, and
backslash substitution.
evalLevel
The Tcl_Eval call level.
procLevel
The procedure call level.
The command should be constructed in such a manner that it will
work if additional arguments are added in the future. It is
suggested that the command be a proc with the final argument
being args.
Tracing will be turned off while the command is being executed.
The values of the errorInfo and errorCode variables will be
saved and restored on return from the command. It is the com-
mand's responsibility to preserve all other state.
If an error occurs during the execution of command, an error
message is dumped to stderr and the tracing is disabled. The
underlying mechanism that this functionality is built on does
not support returning an error to the interpreter.
cmdtrace off
Turn off all tracing.
cmdtrace depth
Returns the current maximum trace level, or zero if trace is
disabled.
edprocs ?proc...?
This procedure writes the named procedures, or all currently
defined procedures, to a temporary file, then calls an editor on
it (as specified by the EDITOR environment variable, or vi if
none is specified), then sources the file back in if it was
changed.
profile ?-commands? ?-eval? on
profile off arrayVar
This command is used to collect a performance profile of a Tcl
script. It collects data at the Tcl procedure level. The number
of calls to a procedure, and the amount of real and CPU time is
collected. Time is also collected for the global context. The
procedure data is collected by bucketing it based on the proce-
dure call stack, this allows determination of how much time is
spent in a particular procedure in each of it's calling con-
texts.
The on option enables profile data collection. If the -commands
option is specified, data on all commands within a procedure is
collected as well a procedures. Multiple occurrences of a com-
mand within a procedure are not distinguished, but this data may
still be useful for analysis.
The off option turns off profiling and moves the data collected
to the array arrayVar. The array is address by a list contain-
ing the procedure call stack. Element zero is the top of the
stack, the procedure that the data is for. The data in each
entry is a list consisting of the procedure call count and the
real time and CPU time in milliseconds spent in the procedure
(but not any procedures it calls). The list is in the form
{count real cpu}.
Normally, the variable scope stack is used in reporting where
time is spent. Thus upleveled code is reported in the context
that it was executed in, not the context that the uplevel was
called in. If the -eval option is specified, the procedure
evaluation (call) stack is used instead of the procedure scope
stack. Upleveled code is reported in the context of the
procedure that did the uplevel.
A Tcl procedure profrep is supplied for reducing the data and
producing a report.
On Windows 95/NT, profile command only reports elasped real
time, CPU time is not available and is reported as zero.
profrep profDataVar sortKey ?outFile? ?userTitle?
This procedure generates a report from data collect from the
profile command. ProfDataVar is the name of the array contain-
ing the data returned by the profile command. SortKey indicates
which data value to sort by. It should be one of "calls", "cpu"
or "real". OutFile is the name of file to write the report to.
If omitted, stdout is assumed. UserTitle is an optional title
line to add to output.
Listed with indentation below each procedure or command is the
procedure call stack. The first indented line being the proce-
dure that invoked the reported procedure or command. The next
line is the procedure that invoked the procedure above it, and
so on. If no indented procedures are shown, the procedure or
command was called from the global context. Time actually spent
in the global context is listed on a line labeled <global>.
Upleveled code is reported in the context that it was executed
in, not the context that the uplevel was called in.
saveprocs fileName ?proc...?
This procedure saves the definition of the named procedure, or
all currently defined procedures if none is specified, to the
named file.
UNIX ACCESS COMMANDS
These commands provide access to many basic Unix facilities, including
process handling, date and time processing, signal handling and the
executing commands via the shell.
alarm seconds
Instructs the system to send a SIGALRM signal in the specified
number of seconds. This is a floating point number, so frac-
tions of a section may be specified. If seconds is 0.0, any
previous alarm request is canceled. Only one alarm at a time
may be active; the command returns the number of seconds left in
the previous alarm. On systems without the setitimer system
call, seconds is rounded up to an integer number of seconds.
The alarm command is not available on Windows 95/NT.
execl ?-argv0 argv0? prog ?arglist?
Do an execl, replacing the current program (either Extended Tcl
or an application with Extended Tcl embedded into it) with prog
and passing the arguments in the list arglist.
The -argv0 options specifies that argv0 is to be passed to the
program as argv [0] rather than prog.
Note: If you are using execl in a Tk application and it fails,
you may not do anything that accesses the X server or you will
receive a BadWindow error from the X server. This includes exe-
cuting the Tk version of the exit command. We suggest using the
following command to abort Tk applications after an execl fail-
ure:
kill [id process]
On Windows 95/NT, where the fork command is not available, execl
starts a new process and returns the process id.
chroot dirname
Change root directory to dirname, by invoking the POSIX
chroot(2) system call. This command only succeeds if running as
root.
fork Fork the current Tcl process. Fork returns zero to the child
process and the process number of the child to the parent pro-
cess. If the fork fails, a Tcl error is generated.
If an execl is not going to be performed before the child pro-
cess does output, or if a close and dup sequence is going to be
performed on stdout or stderr, then a flush should be issued
against stdout, stderr and any other open output file before
doing the fork. Otherwise characters from the parent process
pending in the buffers will be output by both the parent and
child processes.
Note: If you are forking in a Tk based apllication you must
execl before doing any window operations in the child or you
will receive a BadWindow error from the X server.
The fork command is not available on Windows 95/NT.
id options
This command provides a means of getting, setting and converting
user, group and process ids. The id command has the following
options:
id user ?name?
id userid ?uid?
Set the real and effective user ID to name or uid, if the
name (or uid) is valid and permissions allow it. If the
name (or uid) is not specified, the current name (or uid)
is returned.
id convert userid uid
id convert user name
Convert a user ID number to a user name, or vice versa.
id group ?name?
id groupid ?gid?
Set the real and effective group ID to name or gid, if
the name (or gid) is valid and permissions allow it. If
the group name (or gid) is not specified, the current
group name (or gid) is returned.
id groups
id groupids
Return the current group access list of the process. The
option groups returns group names and groupids returns id
numbers.
id convert groupid gid
id convert group name
Convert a group ID number to a group name, or vice versa.
id effective user
id effective userid
Return the effective user name, or effective user ID num-
ber, respectively.
id effective group
id effective groupid
Return the effective group name, or effective group ID
number, respectively.
id effective groupids
Return all of the groupids the user is a member of.
id host
Return the hostname of the system the program is running
on.
id process
Return the process ID of the current process.
id process parent
Return the process ID of the parent of the current pro-
cess.
id process group
Return the process group ID of the current process.
id process group set
Set the process group ID of the current process to its
process ID.
id host
Returns the standard host name of the machine the process
is executing on.
On Windows 95/NT, only the host and process options are
implemented.
kill ?-pgroup ?signal? idlist
Send a signal to the each process in the list idlist, if permit-
ted. Signal, if present, is the signal number or the symbolic
name of the signal, see the signal system call manual page. The
leading ``SIG'' is optional when the signal is specified by its
symbolic name. The default for signo is 15, SIGTERM.
If -pgroup is specified, the numbers in idlist are take as pro-
cess group ids and the signal is sent to all of the process in
that process group. A process group id of 0 specifies the cur-
rent process group.
The kill command is not available on Windows 95/NT.
link ?-sym? srcpath destpath
Create a directory entry, destpath, linking it to the existing
file, srcpath. If -sym is specified, a symbolic link, rather
than a hard link, is created. (The -sym option is only avail-
able on systems that support symbolic links.)
The link command is not available on Windows 95/NT.
nice ?priorityincr?
Change or return the process priority. If priorityincr is omit-
ted, the current priority is returned. If priorityincr is posi-
tive, it is added to the current priority level, up to a system
defined maximum (normally 19),
Negative priorityincr values cumulatively increase the program's
priority down to a system defined minimum (normally -19);
increasing priority with negative niceness values will only work
for the superuser.
The new priority is returned.
The nice command is not available on Windows 95/NT.
readdir ?-hidden? dirPath
Returns a list containing the contents of the directory dirPath.
The directory entries "." and ".." are not returned.
On Windows 95/NT, -hidden maybe specified to include hidden
files in the result. This flag is ignored on Unix systems.
signal ?-restart? action siglist ?command?
Warning: If signals are being used as an event source (a trap
action), rather than generating an error to terminate a task;
one must use the -restart option. This causes a blocked system
call, such as read or waitpid to be restarted rather than gener-
ate an error. Failure to do this may results in unexpected
errors when a signal arrives while in one of these system calls.
When available, the -restart option can prevent this problem.
If -restart is specified, restart blocking system calls rather
than generating an error. The signal will be handled once the
Tcl command that issued the system call completes. The -restart
options is not available on all operating systems and its use
will generate an error when it is not supported. Use infox
have_signal_restart to check for availability.
Specify the action to take when a Unix signal is received by
Extended Tcl, or a program that embeds it. Siglist is a list of
either the symbolic or numeric Unix signal (the SIG prefix is
optional). Action is one of the following actions to be per-
formed on receipt of the signal. To specify all modifiable sig-
nals, use `*' (this will not include SIGKILL and SIGSTOP, as
they can not be modified).
default
Perform system default action when signal is received
(see signal system call documentation).
ignore Ignore the signal.
error Generate a catchable Tcl error. It will be as if the
command that was running returned an error. The error
code will be in the form:
POSIX SIG signame
For the death of child signal, signame will always be
SIGCHLD, rather than SIGCLD, to allow writing portable
code.
trap When the signal occurs, execute command and continue exe-
cution if an error is not returned by command. The com-
mand will be executed in the global context. The command
will be edited before execution, replacing occurrences of
"%S" with the signal name. Occurrences of "%%" result in
a single "%". This editing occurs just before the trap
command is evaluated. If an error is returned, then fol-
low the standard Tcl error mechanism. Often command will
just do an exit.
get Retrieve the current settings of the specified signals.
A keyed list will be returned were the keys are one of
the specified signals and the values are a list consist-
ing of the action associated with the signal, a 0 if the
signal may be delivered (not block) and a 1 if it is
blocked and a flag indicating if restarting of system
calls is specified. The actions maybe one of
`default',`ignore', `error' or `trap'. If the action is
trap, the third element is the command associated with
the action. The action `unknown' is returned if a non-
Tcl signal handler has been associated with the signal.
set Set signals from a keyed list in the format returned by
the get. For this action, siglist is the keyed list of
signal state. Signals with an action of `unknown' are
not modified.
block Block the specified signals from being received. (Posix
systems only).
unblock
Allow the specified signal to be received. Pending sig-
nals will not occur. (Posix systems only).
The signal action will remain enabled after the specified signal
has occurred. The exception to this is SIGCHLD on systems with-
out Posix signals. For these systems, SIGCHLD is not be auto-
matically reenabled. After a SIGCHLD signal is received, a call
to wait must be performed to retrieve the exit status of the
child process before issuing another signal SIGCHLD ... command.
For code that is to be portable between both types of systems,
use this approach.
Signals are not processed until after the completion of the Tcl
command that is executing when the signal is received. If an
interactive Tcl shell is running, then the SIGINT will be set to
error, non-interactive Tcl sessions leave SIGINT unchanged from
when the process started (normally default for foreground pro-
cesses and ignore for processes in the background).
sleep seconds
Sleep the Extended Tcl process for seconds seconds.
system cmdstr1 ?cmdstr2...?
Concatenates cmdstr1, cmdstr2 etc with space separators (see
the concat command) into a single command and then evaluates the
command using the standard system shell. On Unix systems, this
is /bin/sh and om Windows its command.com. The exit code of the
command is returned.
This command differs from the exec command in that system
doesn't return the executed command's standard output as the
result string, and system goes through the Unix shell to provide
wildcard expansion, redirection, etc, as is normal from an sh
command line.
sync ?fileId?
If fileId is not specified, or if it is and this system does not
support the fsync system call, issues a sync system call to
flush all pending disk output. If fileId is specified and the
system does support the fsync system call, issues an fsync on
the file corresponding to the specified Tcl fileId to force all
pending output to that file out to the disk.
If fileId is specified, the file must be writable. A flush will
be issued against the fileId before the sync.
The infox have_fsync command can be used to determine if "sync
fileId" will do a sync or a fsync.
times
Return a list containing the process and child execution times
in the form:
utime stime cutime cstime
Also see the times(2) system call manual page. The values are
in milliseconds.
umask ?octalmask?
Sets file-creation mode mask to the octal value of octalmask.
If octalmask is omitted, the current mask is returned.
wait ?-nohang? ?-untraced? ?-pgroup? ?pid?
Waits for a process created with the execl command to terminate,
either due to an untrapped signal or call to exit system call.
If the process id pid is specified, they wait on that process,
otherwise wait on any child process to terminate.
If -nohang is specified, then don't block waiting on a process
to terminate. If no process is immediately available, return an
empty list. If -untraced is specified then the status of child
processes that are stopped, and whose status has not yet been
reported since they stopped, are also returned. If -pgroup is
specified and pid is not specified, then wait on any child pro-
cess whose process groupd ID is they same as the calling pro-
cess. If pid is specified with -pgroup, then it is take as a
process group ID, waiting on any process in that process group
to terminate.
Wait returns a list containing three elements: The first element
is the process id of the process that terminated. If the pro-
cess exited normally, the second element is `EXIT', and the
third contains the numeric exit code. If the process terminated
due to a signal, the second element is `SIG', and the third con-
tains the signal name. If the process is currently stopped (on
systems that support SIGSTP), the second element is `STOP', fol-
lowed by the signal name.
Note that it is possible to wait on processes to terminate that
were create in the background with the exec command. However,
if any other exec command is executed after the process termi-
nates, then the process status will be reaped by the exec com-
mand and will not be available to the wait command.
On systems without the waitpid system call, the -nohang,
-untraced and -pgroup options are not available. The infox
have_waitpid command maybe use to determine if this functional-
ity is available.
FILE COMMANDS
These commands provide extended file access and manipulation. This
includes searching ASCII-sorted data files, copying files, duplicating
file descriptors, control of file access options, retrieving open file
status, and creating pipes with the pipe system call. Also linking
files, setting file, process, and user attributes and truncating files.
An interface to the select system call is available on Unix systems
that support it.
It should be noted that Tcl file I/O is implemented on top of the stdio
library. By default, the file is buffered. When communicating to a
process through a pipe, a flush command should be issued to force the
data out. Alternatively, the fcntl command may be used to set the
buffering mode of a file to line-buffered or unbuffered.
bsearch fileId key ?retvar? ?compare_proc?
Search an opened file fileId containing lines of text sorted
into ascending order for a match. Key contains the string to
match. If retvar is specified, then the line from the file is
returned in retvar, and the command returns 1 if key was found,
and 0 if it wasn't. If retvar is not specified or is a null
name, then the command returns the line that was found, or an
empty string if key wasn't found.
By default, the key is matched against the first white-space
separated field in each line. The field is treated as an ASCII
string. If compare_proc is specified, then it defines the name
of a Tcl procedure to evaluate against each line read from the
sorted file during the execution of the bsearch command. Com-
pare_proc takes two arguments, the key and a line extracted from
the file. The compare routine should return a number less than
zero if the key is less than the line, zero if the key matches
the line, or greater than zero if the key is greater than the
line. The file must be sorted in ascending order according to
the same criteria compare_proc uses to compare the key with the
line, or erroneous results will occur.
This command does not work on files containing binary data
(bytes of zero).
chmod [-fileid] mode filelist
Set permissions of each of the files in the list filelist to
mode, where mode is an absolute numeric mode or symbolic permis-
sions as in the UNIX chmod(1) command. To specify a mode as
octal, it should be prefixed with a "0" (e.g. 0622).
If the option -fileid is specified, filelist is a list of open
file identifiers rather than a list of file names. This option
is not available on all Unix systems. Use the infox have_fchmod
command to determine if this functionality is available.
The chmod command is not available on Windows 95/NT.
chown [-fileid] owner | {owner group} filelist
Set owner of each file in the list filelist to owner, which can
be a user name or numeric user id. If the first parameter is a
list, then the owner is set to the first element of the list and
the group is set to the second element. Group can be a group
name or numeric group id. If group is {}, then the file group
will be set to the login group of the specified user.
If the option -fileid is specified, filelist is a list of open
file identifiers rather than a list of file names. This option
is not available on all Unix systems. Use the infox have_fchown
command to determine if this functionality is available.
The chown command is not available on Windows 95/NT.
chgrp [-fileid] group filelist
Set the group id of each file in the list filelist to group,
which can be either a group name or a numeric group id.
If the option -fileid is specified, filelist is a list of open
file identifiers rather than a list of file names. This option
is not available on all Unix systems. Use the infox have_fchown
command to determine if this functionality is available.
The chgrp command is not available on Windows 95/NT.
dup fileId ?targetFileId?
Duplicate an open file. A new file id is opened that addresses
the same file as fileId.
If targetFileId is specified, the the file is dup to this speci-
fied file id. Normally this is stdin, stdout, or stderr. The
dup command will handle flushing output and closing this file.
The new file will be buffered, if its needs to be unbuffered,
use the fcntl command to set it unbuffered.
If fileId is a number rather than a Tcl file id, then the dup
command will bind that file to a Tcl file id. This is usedful
for accessing files that are passed from the parent process.
The argument ?targetFileId? is not valid with this operation.
On Windows 95/NT, only stdin, stdout, or stderr or a non-socket
file handle number maybe specified for targetFileId. The dup
command does not work on sockets on Windows 95/NT.
fcntl fileId attribute ?value?
This command either sets or clears a file option or returns its
current value. If value is not specified, then the current
value of attribute is returned. All values are boolean. Some
attributes maybe only be gotten, not modified. The following
attributes may be specified:
RDONLY The file is opened for reading only. (Get only)
WRONLY The file is opened for writing only. (Get only)
RDWR The file is opened for reading and writing. (Get only)
READ If the file is readable. (Get only).
WRITE If the file is writable. (Get only).
APPEND The file is opened for append-only writes. All writes will be
forced to the end of the file. (Get or set).
NONBLOCK
The file is to be accessed with non-blocking I/O. See the read
system call for a description of how it affects the behavior of
file reads.
CLOEXEC
Close the file on an process exec. If the execl command or some
other mechanism causes the process to do an exec, the file will
be closed if this option is set.
NOBUF The file is not buffered. If set, then there no buffering for
the file.
LINEBUF
Output the file will be line buffered. The buffer will be
flushed when a newline is written, when the buffer is full, or
when input is requested.
KEEPALIVE
Keep a socket connection alive. If SIGPIPE is enabled, then it
is sent if connection is broken and data is written to the
socket. If SIGPIPE is ignored, an error is returned on the
write. This attribute is valid only on sockets. By default,
SIGPIPE is ignored in Tcl.
The NONBLOCK, NOBUF and LINEBUF are provided for compatibility
with older scripts. Thefconfigure command is preferred method
of getting and setting these attributes.
The APPEND and CLOEXEC options are not available on Windows
95/NT.
flock options fileId ?start? ?length? ?origin?
This command places a lock on all or part of the file specified
by fileId. The lock is either advisory or mandatory, depending
on the mode bits of the file. The lock is placed beginning at
relative byte offset start for length bytes. If start or length
is omitted or empty, zero is assumed. If length is zero, then
the lock always extents to end of file, even if the file grows.
If origin is "start", then the offset is relative to the begin-
ning of the file. If it is "current", it is relative to the cur-
rent access position in the file. If it is "end", then it is
relative to the end-of-file (a negative is before the EOF, posi-
tive is after). If origin is omitted, start is assumed.
The following options are recognized:
-read Place a read lock on the file. Multiple processes may be
accessing the file with read-locks.
-write Place a write lock on the file. Only one process may be
accessing a file if there is a write lock.
-nowait
If specified, then the process will not block if the lock
can not be obtained. With this option, the command
returns 1 if the lock is obtained and 0 if it is not.
See your system's fcntl system call documentation for full
details of the behavior of file locking. If locking is being
done on ranges of a file, it is best to use unbuffered file
access (see the fcntl command).
The flock command is not available on Windows 95. It is avail-
able on Windows NT.
for_file var filename code
This procedure implements a loop over the contents of a file.
For each line in filename, it sets var to the line and executes
code.
The break and continue commands work as with foreach.
For example, the command
for_file line /etc/passwd {echo $line}
would echo all the lines in the password file.
funlock fileId ?start? ?length? ?origin?
Remove a locked from a file that was previously placed with the
flock command. The arguments are the same as for the flock com-
mand, see that command for more details.
The funlock command is not available on Windows 95. It is
available on Windows NT.
fstat fileId ?item? | ?stat arrayvar?
Obtain status information about an open file.
The following keys are used to identify data items:
atime The time of last access.
ctime The time of last file status change
dev The device containing a directory for the file. This
value uniquely identifies the file system that contains
the file.
gid The group ID of the file's group.
ino The inode number. This field uniquely identifies the
file in a given file system.
mode The mode of the file (see the mknod system call).
mtime Time when the data in the file was last modified.
nlink The number of links to the file.
size The file size in bytes.
tty If the file is associated with a terminal, then 1 other-
wise 0.
type The type of the file in symbolic form, which is one of
the following values: file, directory, characterSpecial,
blockSpecial, fifo, link, or socket.
uid The user ID of the file's owner.
If one of these keys is specified as item, then that data item
is returned.
If stat arrayvar is specified, then the information is returned
in the array arrayvar. Each of the above keys indexes an ele-
ment of the array containing the data.
If only fileId is specified, the command returns the data as a
keyed list.
The following values may be returned only if explicitly asked
for, it will not be returned with the array or keyed list forms:
remotehost
If fileId is a TCP/IP socket connection, then a list is
returned with the first element being the remote host IP
address. If the remote host name can be found, it is
returned as the second element of the list. The remote
host IP port number is the third element.
localhost
If fileId is a TCP/IP socket connection, then a list is
returned with the first element being the local host IP
address. If the local host name can be found, it is
returned as the second element of the list. The local
host IP port number is the third element.
ftruncate [-fileid] file newsize
Truncate a file to have a length of at most newsize bytes.
If the option -fileid is specified, file is an open file identi-
fier, otherwise it is a file path.
This command is not available or not fully functional if the
underlying operating system support is not available. The com-
mand infox have_truncate will indicate if this command may trun-
cate by file path. The command infox have_ftruncate will indi-
cate if this command may truncate by file id.
The -fileid option is not available on Windows 95/NT.
lgets fileId ?varName?
Reads the next Tcl list from the file given by fileId and dis-
cards the terminating newline character. This command differs
from the gets command, in that it reads Tcl lists rather than
lines. If the list contains newlines or binary data, then that
newline or bytes of zero will be returned as part of the result.
Only a newline not quoted as part of the list indicates the end
of the list. There is no corresponding command for outputting
lists, as puts will do this correctly.
If varName is specified, then the line is placed in the variable
by that name and the return value is a count of the number of
characters read (not including the newline). If the end of the
file is reached before reading any characters then -1 is
returned and varName is set to an empty string. If varName is
specified and an error occurs, what ever data was read will be
returned in the variable, however the resulting string may not
be a valid list.
If varName is not specified then the return value will be the
line (minus the newline character) or an empty string if the end
of the file is reached before reading any characters. An empty
string will also be returned if a line contains no characters
except the newline, so eof may have to be used to determine what
really happened.
The lgets command maybe used to read and write lists containing
binary data, however translation must be set to lf or the data
maybe corrupted.
If lgets is currently supported on non-blocking files.
pipe ?fileId_var_r fileId_var_w?
Create a pipe. If fileId_var_r and fileId_var_r are specified,
then pipe will set the a variable named fileId_var_r to contain
the fileId of the side of the pipe that was opened for reading,
and fileId_var_w will contain the fileId of the side of the pipe
that was opened for writing.
If the fileId variables are not specified, then a list contain-
ing the read and write fileIdw is returned as the result of the
command.
read_file ?-nonewline? fileName
read_file fileName numBytes
This proecure reads the file fileName and returns the contents
as a string. If -nonewline is specified, then the last charac-
ter of the file is discarded if it is a newline. The second
form specifies exactly how many bytes will be read and returned,
unless there are fewer than numBytes bytes left in the file; in
this case, all the remaining bytes are returned.
select readfileIds ?writefileIds? ?exceptfileIds? ?timeout?
This command allows an Extended Tcl program to wait on zero or
more files being ready for for reading, writing, have an excep-
tional condition pending, or for a timeout period to expire.
readFileIds, writeFileIds, exceptFileIds are each lists of
fileIds, as returned from open, to query. An empty list ({})
may be specified if a category is not used.
The files specified by the readFileIds list are checked to see
if data is available for reading. The writeFileIds are checked
if the specified files are clear for writing. The exceptFileIds
are checked to see if an exceptional condition has occurred
(typically, an error). The write and exception checking is most
useful on devices, however, the read checking is very useful
when communicating with multiple processes through pipes.
Select considers data pending in the stdio input buffer for read
files as being ready for reading, the files do. not have to be
unbuffered.
Timeout is a floating point timeout value, in seconds. If an
empty list is supplied (or the parameter is omitted), then no
timeout is set. If the value is zero, then the select command
functions as a poll of the files, returning immediately even if
none are ready.
If the timeout period expires with none of the files becoming
ready, then the command returns an empty list. Otherwise the
command returns a list of three elements, each of those elements
is a list of the fileIds that are ready in the read, write and
exception classes. If none are ready in a class, then that ele-
ment will be the null list. For example:
select {file3 file4 file5} {file6 file7} {} 10.5
could return
{file3 file4} {file6} {}
or perhaps
file3 {} {}
On Windows 95/NT, only sockets can be used with the select com-
mand. Pipes, as returned by the open command, are not sup-
ported.
write_file fileName string ?string...?
This procedure writes the specified strings to the named file.
NETWORK PROGRAMMING SUPPORT
TclX provides functionality to complement the Tcl socket command. The
host_info command is used to get information about a host by name or IP
address. In addition, the fstat and fcntl commands provide options of
querying and controlling connected sockets. To obtain the host name of
the system the local system, use the id host command.
host_info addresses host
host_info official_name host
host_info aliases host
Obtain information about a internet host. The argument host can
be either a host name or an IP address.
The following subcommands are recognized:
addresses
Return the list of IP addresses for host.
official_name
Return official name for host.
aliases
Return the list of aliases for host. (Note that these
are IP number aliases, not DNS CNAME aliases. See ifcon-
fig(2).)
FILE SCANNING COMMANDS
These commands provide a facility to scan files, matching lines of the
file against regular expressions and executing Tcl code on a match.
With this facility you can use Tcl to do the sort of file processing
that is traditionally done with awk. And since Tcl's approach is more
declarative, some of the scripts that can be rather difficult to write
in awk are simple to code in Tcl.
File scanning in Tcl centers around the concept of a scan context. A
scan context contains one or more match statements, which associate
regular expressions to scan for with Tcl code to be executed when the
expressions are matched.
scancontext ?option?
This command manages file scan contexts. A scan context is a
collection of regular expressions and commands to execute when
that regular expression matches a line of the file. A context
may also have a single default match, to be applied against
lines that do not match any of the regular expressions. Multi-
ple scan contexts may be defined and they may be reused on mul-
tiple files. A scan context is identified by a context handle.
The scancontext command takes the following forms:
scancontext create
Create a new scan context. The scanmatch command is used to
define patterns in the context. A contexthandle is returned,
which the Tcl programmer uses to refer to the newly created scan
context in calls to the Tcl file scanning commands.
scancontext delete contexthandle
Delete the scan context identified by contexthandle, and free
all of the match statements and compiled regular expressions
associated with the specified context.
scancontext copyfile contexthandle ?filehandle?
Set or return the file handle that unmatched lines are copied
to. (See scanfile). If filehandle is omitted, the copy file
handle is returned. If no copy file is associated with the con-
text, {} is returned. If a file handle is specified, it becomes
the copy file for this context. If filehandle is {}, then it
removes any copy file specification for the context.
scanfile ?-copyfile copyFileId? contexthandle fileId
Scan the file specified by fileId, starting from the current
file position. Check all patterns in the scan context specified
by contexthandle against it, executing the match commands corre-
sponding to patterns matched.
If the optional -copyfile argument is specified, the next argu-
ment is a file ID to which all lines not matched by any pattern
(excluding the default pattern) are to be written. If the copy
file is specified with this flag, instead of using the scancon-
text copyfile command, the file is disassociated from the scan
context at the end of the scan.
This command does not work on files containing binary data
(bytes of zero).
scanmatch ?-nocase? contexthandle ?regexp? commands
Specify Tcl commands, to be evaluated when regexp is matched by
a scanfile command. The match is added to the scan context
specified by contexthandle. Any number of match statements may
be specified for a give context. Regexp is a regular expression
(see the regexp command). If -nocase is specified as the first
argument, the pattern is matched regardless of alphabetic case.
If regexp is not specified, then a default match is specified
for the scan context. The default match will be executed when a
line of the file does not match any of the regular expressions
in the current scancontext.
The array matchInfo is available to the Tcl code that is exe-
cuted when an expression matches (or defaults). It contains
information about the file being scanned and where within it the
expression was matched.
matchInfo is local to the top level of the match command unless
declared global at that level by the Tcl global command. If it
is to be used as a global, it must be declared global before
scanfile is called (since scanfile sets the matchInfo before the
match code is executed, a subsequent global will override the
local variable). The following array entries are available:
matchInfo(line)
Contains the text of the line of the file that was
matched.
matchInfo(offset)
The byte offset into the file of the first character of
the line that was matched.
matchInfo(linenum)
The line number of the line that was matched. This is
relative to the first line scanned, which is usually, but
not necessarily, the first line of the file. The first
line is line number one.
matchInfo(context)
The context handle of the context that this scan is asso-
ciated with.
matchInfo(handle)
The file id (handle) of the file currently being scanned.
matchInfo(copyHandle)
The file id (handle) of the file specified by the -copy-
file option. The element does not exist if -copyfile was
not specified.
matchInfo(submatch0)
Will contain the characters matching the first parenthe-
sized subexpression. The second will be contained in
submatch1, etc.
matchInfo(subindex0)
Will contain the a list of the starting and ending
indices of the string matching the first parenthesized
subexpression. The second will be contained in
subindex1, etc.
All scanmatch patterns that match a line will be processed in
the order in which their specifications were added to the scan
context. The remainder of the scanmatch pattern-command pairs
may be skipped for a file line if a continue is executed by the
Tcl code of a preceding, matched pattern.
If a return is executed in the body of the match command, the
scanfile command currently in progress returns, with the value
passed to return as its return value.
MATH COMMANDS
Several extended math commands commands make many additional math func-
tions available in TclX. In addition, a set of procedures provide com-
mand access to the math functions supported by the expr command.
The following procedures provide command interfaces to the expr math
functions. They take the same arguments as the expr functions and may
take expressions as arguments.
abs acos asin atan2
atan ceil cos cosh
double exp floor fmod
hypot int log10 log
pow round sin sinh
sqrt tan tanh
max num1 ?..numN?
expr max(num1, num2)
Returns the argument that has the highest numeric value. Each
argument may be any integer or floating point value.
This functionality is also available as a math function max in
the Tcl expr command.
min num1 ?..numN?
expr min(num1, num2)
Returns the argument that has the lowest numeric value. Each
argument may be any integer or floating point value.
This functionality is also available as a math function min in
the Tcl expr command.
random limit | seed ?seedval?
Generate a pseudorandom integer number greater than or equal to
zero and less than limit. If seed is specified, then the com-
mand resets the random number generator to a starting point
derived from the seedval. This allows one to reproduce pseudo-
random number sequences for testing purposes. If seedval is
omitted, then the seed is set to a value based on current system
state and the current time, providing a reasonably interesting
and ever-changing seed.
LIST MANIPULATION COMMANDS
Extended Tcl provides additional list manipulation commands and proce-
dures.
intersect lista listb
Procedure to return the logical intersection of two lists. The
returned list will be sorted.
intersect3 lista listb
Procedure to intersects two lists, returning a list containing
three lists: The first list returned is everything in lista
that wasn't in listb. The second list contains the intersection
of the two lists, and the third list contains all the elements
that were in listb but weren't in lista. The returned lists
will be sorted.
lassign list var ?var...?
Assign successive elements of a list to specified variables. If
there are more variable names than fields, the remaining vari-
ables are set to the empty string. If there are more elements
than variables, a list of the unassigned elements is returned.
For example,
lassign {dave 100 200 {Dave Foo}} name uid gid longName
Assigns name to ``dave'', uid to ``100'', gid to ``200'', and
longName to ``Dave Foo''.
lcontain list element
Determine if the element is a list element of list. If the ele-
ment is contained in the list, 1 is returned, otherwise, 0 is
returned.
lempty list
Determine if the specified list is empty. If empty, 1 is
returned, otherwise, 0 is returned. This command is an alterna-
tive to comparing a list to an empty string, however it checks
for a string of all whitespaces, which is an empty list.
lmatch ?mode? list pattern
Search the elements of list, returning a list of all elements
matching pattern. If none match, an empty list is returned.
The mode argument indicates how the elements of the list are to
be matched against pattern and it must have one of the following
values:
-exact The list element must contain exactly the same string as
pattern.
-glob Pattern is a glob-style pattern which is matched against
each list element using the same rules as the string
match command.
-regexp
Pattern is treated as a regular expression and matched
against each list element using the same rules as the
regexp command.
If mode is omitted then it defaults to -glob.
Only the -exact comparison will work on binary data.
lrmdups list
Procedure to remove duplicate elements from a list. The
returned list will be sorted.
lvarcat var string ?string...?
This command treats each string argument as a list and concate-
nates them to the end of the contents of var, forming a a single
list. The list is stored back into var and also returned as the
result. if var does not exist, it is created.
lvarpop var ?indexExpr? ?string?
The lvarpop command pops (deletes) the element indexed by the
expression indexExpr from the list contained in the variable
var. If index is omitted, then 0 is assumed. If string, is
specified, then the deleted element is replaced by string. The
replaced or deleted element is returned. Thus ``lvarpop argv
0'' returns the first element of argv, setting argv to contain
the remainder of the string.
If the expression indexExpr starts with the string end, then end
is replaced with the index of the last element in the list. If
the expression starts with len, then len is replaced with the
length of the list.
lvarpush var string ?indexExpr?
The lvarpush command pushes (inserts) string as an element in
the list contained in the variable var. The element is inserted
before position indexExpr in the list. If index is omitted, then
0 is assumed. If var does not exists, it is created.
If the expression indexExpr starts with the string end, then end
is replaced with the index of the last element in the list. If
the expression starts with len, then len is replaced with the
length of the list. Note the a value of end means insert the
string before the last element.
union lista listb
Procedure to return the logical union of the two specified
lists. Any duplicate elements are removed.
KEYED LISTS
Extended Tcl defines a special type of list referred to as keyed lists.
These lists provided a structured data type built upon standard Tcl
lists. This provides a functionality similar to structs in the C pro-
gramming language.
A keyed list is a list in which each element contains a key and value
pair. These element pairs are stored as lists themselves, where the
key is the first element of the list, and the value is the second. The
key-value pairs are referred to as fields. This is an example of a
keyed list:
{{NAME {Frank Zappa}} {JOB {musician and composer}}}
If the variable person contained the above list, then keylget person
NAME would return {Frank Zappa}. Executing the command:
keylset person ID 106
would make person contain
{{ID 106} {NAME {Frank Zappa}} {JOB {musician and composer}}
Fields may contain subfields; `.' is the separator character. Sub-
fields are actually fields where the value is another keyed list. Thus
the following list has the top level fields ID and NAME, and subfields
NAME.FIRST and NAME.LAST:
{ID 106} {NAME {{FIRST Frank} {LAST Zappa}}}
There is no limit to the recursive depth of subfields, allowing one to
build complex data structures.
Keyed lists are constructed and accessed via a number of commands. All
keyed list management commands take the name of the variable containing
the keyed list as an argument (i.e. passed by reference), rather than
passing the list directly.
keyldel listvar key
Delete the field specified by key from the keyed list in the
variable listvar. This removes both the key and the value from
the keyed list.
keylget listvar ?key? ?retvar | {}?
Return the value associated with key from the keyed list in the
variable listvar. If retvar is not specified, then the value
will be returned as the result of the command. In this case, if
key is not found in the list, an error will result.
If retvar is specified and key is in the list, then the value is
returned in the variable retvar and the command returns 1 if the
key was present within the list. If key isn't in the list, the
command will return 0, and retvar will be left unchanged. If {}
is specified for retvar, the value is not returned, allowing the
Tcl programmer to determine if a key is present in a keyed list
without setting a variable as a side-effect.
If key is omitted, then a list of all the keys in the keyed list
is returned.
keylkeys listvar ?key?
Return the a list of the keys in the keyed list in the variable
listvar. If keys is specified, then it is the name of a key
field who's subfield keys are to be retrieve.
keylset listvar key value ?key2 value2 ...?
Set the value associated with key, in the keyed list contained
in the variable listvar, to value. If listvar does not exists,
it is created. If key is not currently in the list, it will be
added. If it already exists, value replaces the existing value.
Multiple keywords and values may be specified, if desired.
STRING AND CHARACTER MANIPULATION COMMANDS
The commands provide additional functionality to classify characters,
convert characters between character and numeric values, index into a
string, determine the length of a string, extract a range of character
from a string, replicate a string a number of times, and transliterate
a string (similar to the Unix tr program).
ccollate ?-local? string1 string2
This command compares two strings. If returns -1 if string1 is
less than string2, 0 if they are equal and 1 if string1 is
greater than string2.
If -local is specified, the strings are compared according to
the collation environment of the current locale.
This command does not work with binary or UTF data.
cconcat ?string1? ?string2? ?...?
Concatenate the arguments, returning the resulting string.
While string concatenation is normally performed by the parser,
it is occasionally useful to have a command that returns a
string. The is generally useful when a command to evaluate is
required. No separators are inserted between the strings.
This command is UTF-aware.
cequal string string
This command compares two strings for equality. It returns 1 if
string1 and string2 are the identical and 0 if they are not.
This command is a short-cut for string compare and avoids the
problems with string expressions being treated unintentionally
as numbers.
This command is UTF-aware and will also work on binary data.
cindex string indexExpr
Returns the character indexed by the expression indexExpr (zero
based) from string.
If the expression indexExpr starts with the string end, then end
is replaced with the index of the last character in the string.
If the expression starts with len, then len is replaced with the
length of the string.
This command is UTF-aware.
clength string
Returns the length of string in characters. This command is a
shortcut for:
string length string
This command is UTF-aware.
crange string firstExpr lastExpr
Returns a range of characters from string starting at the char-
acter indexed by the expression firstExpr (zero-based) until the
character indexed by the expression lastExpr.
If the expression firstExpr or lastExpr starts with the string
end, then end is replaced with the index of the last character
in the string. If the expression starts with len, then len is
replaced with the length of the string.
This command is UTF-aware.
csubstr string firstExpr lengthExpr
Returns a range of characters from string starting at the char-
acter indexed by the expression firstExpr (zero-based) for
lengthExpr characters.
If the expression firstExpr or lengthExpr starts with the string
end, then end is replaced with the index of the last character
in the string. If the expression starts with len, then len is
replaced with the length of the string.
This command is UTF-aware.
ctoken strvar separators
Parse a token out of a character string. The string to parse is
contained in the variable named strvar. The string separators
contains all of the valid separator characters for tokens in the
string. All leading separators are skipped and the first token
is returned. The variable strvar will be modified to contain
the remainder of the string following the token.
This command does not work with binary data.
ctype ?-failindex var? class string
ctype determines whether all characters in string are of the
specified class. It returns 1 if they are all of class, and 0
if they are not, or if the string is empty. This command also
provides another method (besides format and scan) of converting
between an ASCII character and its numeric value. The following
ctype commands are available:
ctype ?-failindex var? alnum string
Tests that all characters are alphabetic or numeric char-
acters as defined by the character set.
ctype ?-failindex var? alpha string
Tests that all characters are alphabetic characters as
defined by the character set.
ctype ?-failindex var? ascii string
Tests that all characters are an ASCII character (a non-
negative number less than 0200).
ctype char number
Converts the numeric value, string, to an ASCII charac-
ter. Number must be in the range 0 through the maximum
Unicode values.
ctype ?-failindex var? cntrl string
Tests that all characters are ``control characters'' as
defined by the character set.
ctype ?-failindex var? digit string
Tests that all characters are valid decimal digits, i.e.
0 through 9.
ctype ?-failindex var? graph string
Tests that all characters within are any character for
which ctype print is true, except for space characters.
ctype ?-failindex var? lower string
Tests that all characters are lowercase letters as
defined by the character set.
ctype ord character
Convert a character into its decimal numeric value. The
first character of the string is converted to its numeric
Unicode value.
ctype ?-failindex var? space string
Tests that all characters are either a space, horizontal-
tab, carriage return, newline, vertical-tab, or form-
feed.
ctype ?-failindex var? print string
Tests that all characters are a space or any character
for which ctype alnum or ctype punct is true or other
``printing character'' as defined by the character set.
ctype ?-failindex var? punct string
Tests that all characters are made up of any of the char-
acters other than the ones for which alnum, cntrl, or
space is true.
ctype ?-failindex var? upper string
Tests that all characters are uppercase letters as
defined by the character set.
ctype ?-failindex var? xdigit string
Tests that all characters are valid hexadecimal digits,
that is 0 through 9, a through f or A through F.
If -failindex is specified, then the index into string of the
first character that did not match the class is returned in var.
replicate string countExpr
Returns string, replicated the number of times indicated by the
expression countExpr.
This command is UTF-aware and will work with binary data.
translit inrange outrange string
Translate characters in string, changing characters occurring in
inrange to the corresponding character in outrange. Inrange and
outrange may be list of characters or a range in the form `A-M'.
For example:
translit a-z A-Z foobar
This command currently only supports characters in ASCII range; UTF-8 characters
out of this range will generate an error.
XPG/3 MESSAGE CATALOG COMMANDS
These commands provide a Tcl interface to message catalogs that are
compliant with the X/Open Portability Guide, Version 3 (XPG/3).
Tcl programmers can use message catalogs to create applications that
are language-independent. Through the use of message catalogs,
prompts, messages, menus and so forth can exist for any number of lan-
guages, and they can altered, and new languages added, without affect-
ing any Tcl or C source code, greatly easing the maintenance difficul-
ties incurred by supporting multiple languages.
A default text message is passed to the command that fetches entries
from message catalogs. This allows the Tcl programmer to create mes-
sage catalogs containing messages in various languages, but still have
a set of default messages available regardless of the presence of any
message catalogs, and allow the programs to press on without difficulty
when no catalogs are present.
Thus, the normal approach to using message catalogs is to ignore errors
on catopen, in which case catgets will return the default message that
was specified in the call.
The Tcl message catalog commands normally ignore most errors. If it is
desirable to detect errors, a special option is provided. This is nor-
mally used only during debugging, to insure that message catalogs are
being used. If your Unix implementation does not have XPG/3 message
catalog support, stubs will be compiled in that will create a version
of catgets that always returns the default string. This allows for
easy porting of software to environments that don't have support for
message catalogs.
Message catalogs are global to the process, an application with multi-
ple Tcl interpreters within the same process may pass and share message
catalog handles.
catopen ?-fail | -nofail? catname
Open the message catalog catname. This may be a relative path
name, in which case the NLSPATH environment variable is searched
to find an absolute path to the message catalog. A handle in
the form msgcatN is returned. Normally, errors are ignored, and
in the case of a failed call to catopen, a handle is returned to
an unopened message catalog. (This handle may still be passed
to catgets and catclose, causing catgets to simply return the
default string, as described above. If the -fail option is
specified, an error is returned if the open fails. The option
-nofail specifies the default behavior of not returning an error
when catopen fails to open a specified message catalog. If the
handle from a failed catopen is passed to catgets, the default
string is returned.
catgets catHandle setnum msgnum defaultstr
Retrieve a message form a message catalog. CatHandle should be a
Tcl message catalog handle that was returned by catopen. Setnum
is the message set number, and msgnum is the message number. If
the message catalog was not opened, or the message set or mes-
sage number cannot be found, then the default string, default-
str, is returned.
catclose ?-fail | -nofail? cathandle
Close the message catalog specified by cathandle. Normally,
errors are ignored. If -fail is specified, any errors closing
the message catalog file are returned. The option -nofail spec-
ifies the default behavior of not returning an error. The use
of -fail only makes sense if it was also specified in the call
to catopen.
EXTENDED TCL SHELL
tcl ?-qn? ?-f? script? | ?-c command? ?args?
The tcl starts the interactive TclX command interpreter. The TclX
shell provides an environment for writing, debugging and executing Tcl
scripts. The functionality of the TclX shell can be easily obtained by
any application that includes TclX.
The tcl command, issued without any arguments, invokes an interactive
Tcl shell, allowing the user to interact directly with Tcl, executing
any Tcl commands at will and viewing their results.
If script is specified, then the script is executed non-interactively
with any additional arguments, args, being supplied in the global Tcl
variable `argv'. If command is supplied, then this command (or semi-
colon-separated series of commands) is executed, with `argv' containing
any args.
The TclX shell is intended as an environment for Tcl program develop-
ment and execution. While it is not a full-featured interactive shell,
it provides a comfortable environment for the interactive development
of Tcl code.
The following command line flags are recognized by the Tcl shell com-
mand line parser:
-q Quick initialization flag. The Tcl initiaization file is not
evaluated and the auto_path variable is not set. Tcl auto-load
libraries will not be available.
-n No procedure call stack dump. The procedure call stack will not
be displayed when an error occurs, only the error message. Use-
ful in the #! line of already debugged scripts.
-f Takes the next argument as a script for Tcl to source, rather
than entering interactive mode. The -f flag is optional. Nor-
mally the first argument that does not start with a `-' is taken
as the script to execute unless the `-c' option is specified.
Any following arguments are passed to the script via argv, thus
any other Tcl shell command-line flags must precede this option.
-c Take the next argument as a Tcl command to execute. It may con-
tain series of commands to execute, separated by `;'. Any fol-
lowing arguments are passed in argv, thus, as with -f, any other
Tcl shell flags must precede this option.
-- Mark the end of the arguments to the Tcl shell. All arguments
following this are passed in the Tcl variable argv. This is
useful to pass arguments without attempting to execute a Tcl
script.
The result string returned by a command executed from the Tcl shell
command line is normally echoed back to the user. If an error occurs,
then the string result is displayed, along with the error message. The
error message will be preceded by the string ``Error:''.
The set command is a special case. If the command is called to set a
variable (i.e. with two arguments), then the result will not be echoed.
If only one argument, the name of a variable, is supplied to set, then
the result will be echoed.
If an unknown Tcl command is entered from the command line, then the
Unix command path, specified in the environment variable PATH, will be
searched for a command of the same name. If the command is found, it
will be executed with any arguments remaining on the Tcl command line
being passed as arguments to the command. This feature is provided to
enhance the interactive environment for developing Tcl scripts.
Automatic execution of programs in this manner is only supported from
the command line, not in script files or in procedures, to reduce con-
fusion and mistakes while programming in Tcl. Scripts should use the
Tcl exec or system commands to run Unix commands.
The following variables are set and/or used by the Tcl shell.
argv0 Contains the name of the Tcl program specified on the command
line or the name that the Tcl shell was invoked under if no pro-
gram was specified. argc Contains a count of the number of argv
arguments (0 if none). argv A list containing the arguments
passed in from the command line, excluding arguments used by the
Tcl shell. The first element is the first passed argument, not
the program name.
tcl_interactive
Set to 1 if Tcl shell is invoked interactively, or 0 if the Tcl
shell is directly executing a script. Normally checked by
scripts so that they can function as a standalone application if
specified on the command line, but merely load in and not exe-
cute if loaded during an interactive invocation of Tcl.
auto_path
Path to search to locate Tcl autoload libraries. Used by the
both the Tcl and TclX library autoloading facility.
tclx_library
Path to the TclX runtime library. If your running the TclX
shell or an application based on it (like wishx). The TclX ini-
tialization file normally adds this to the auto_path.
tkx_library
Path to the TkX runtime library. This is set only if your
application has called Tkx_Init. The TkX initialization file
normally adds this to the auto_path.
tcl_prompt1
Contains code to run to output the prompt used when interac-
tively prompting for commands.
tcl_prompt2
Contains code to run to output the prompt used when interac-
tively prompting for continuation of an incomplete command.
TCLXENV
Array that contains information used internally by various Tcl
procedures that are part of the TclX shell. Don't change this
array unless you know what your doing. tclx_errorHandler mes-
sage
The tclx_errorHandler command doesn't exist as built-in part of
TclX. Instead, individual applications or users can define
a tclx_errorHandler command (e.g. as a Tcl procedure) if they
wish to handle uncaught errors. The procedure will be passed a
single argument of the error message, with errorCode and error-
Info having values reflecting the error that occurred.
The tclx_errorHandler command is called when an error that is
not caught returns to the top level command evaluation in the
TclX shell or wishx. The difference between tclx_errorHandler
and bgerror is that tclx_errorHandler is called during the syn-
chronous execution of a script while bgerror is called as a
result of an uncaught error in an event handler. In a non-event
oriented Tcl script tclx_errorHandler will be called on all
errors that are not caught and bgerror is not used. In a wishx
script or event oriented script executed with the TclX shell,
tclx_errorHandler will be called on uncaught errors during the
execution of the main script that set up the event oriented pro-
gram. Once the event loop is entered, bgerror will be called on
uncaught errors.
This procedure is not called in response to commands entered via
an interactive command loop, only from the evaluation of scripts
or Tcl commands passed via the command line. If the procedure
returns normally, the program will just exit without any error
being issued by the shell. Generally the procedure should exit
with a non-zero exit code once the error has been processed. It
is not possible to continue executing the code in which the
error occurred. This is useful for logging errorInfo or e-mail-
ing it to the maintainer.
mainloop
This procedure sets up a top-level event loop. Events are pro-
cessed until there are no more active event sources, at which
time the process exits. It is used to build event oriented pro-
grams using the TclX shell in a style similar to that used with
wish. If the global variable tcl_interactive exists and has a
true value an interactive command handler is started as well.
If the command handler is terminated by an EOF, the process will
be exited.
This commands is not useful in wishx, as it automatically enters
an event loop after processing a script.
HELP FACILITY
The help facility allows one to look up help pages which where
extracted from the standard Tcl manual pages and Tcl scripts during Tcl
installation. Help files are structured as a multilevel tree of sub-
jects and help pages. Help files are found by searching directories
named help in the directories listed in the auto_path variable. All of
the files in the list of help directories form a virtual root of the
help tree. This method allows multiple applications to provide help
trees without having the files reside in the same directory.
The help facility can be accessed in two ways, as interactive commands
in the Extended Tcl shell or as an interactive Tk-based program (if you
have built Extended Tcl with Tk).
To run the Tk-based interactive help program:
tclhelp ?addpaths?
Where addpaths are additional paths to search for help directories. By
default, only the auto_path used by tclhelp is search. This will
result in help on Tcl, Extended Tcl and Tk.
The following interactive Tcl commands and options are provided with
the help package:
help
Help, without arguments, lists of all the help subjects and
pages under the current help subject.
help subject
Displays all of help pages and lower level subjects (if any
exist) under the subject subject.
help subject/helppage
Display the specified help page. The help output is passed
through a simple pager if output exceeds 23 lines, pausing wait-
ing for a return to be entered. If any other character is
entered, the output is terminated.
helpcd ?subject?
Change the current subject, which is much like the Unix current
directory. If subject is not specified, return to the top-level
of the help tree. Help subject path names may also include
``..'' elements.
helppwd
Displays the current help subject.
help help | ?
Displays help on the help facility at any directory level.
apropos pattern
This command locates subjects by searching their one-line
descriptions for a pattern. Apropos is useful when you can
remember part of the name or description of a command, and want
to search through the one-line summaries for matching lines.
Full regular expressions may be specified (see the regexp com-
mand).
TCL LOADABLE LIBRARIES AND PACKAGES
Extended Tcl supports standard Tcl tclIndex libraries and package
libraries. A package library file can contain multiple independent Tcl
packages. A package is a named collection of related Tcl procedures
and initialization code.
The package library file is just a regular Unix text file, editable
with your favorite text editor, containing packages of Tcl source code.
The package library file name must have the suffix .tlib. An index
file with the same prefix name and the suffix .tndx resides the same
directory as the .tlib file. The .tndx will be automatically created
whenever it is out of date or missing (provided there is write access
to the directory).
The variable auto_path contains a list of directories that are searched
for libraries. The first time an unknown command trap is take, the
indexes for the libraries are loaded into memory. If the auto_path
variable is changed during execution of a program, it will be re-
searched. Only the first package of a given name found during the exe-
cution of a program is loaded. This can be overridden with loadli-
bindex command.
The start of a package is delimited by:
#@package: package_name proc1 ?..procN?
These lines must start in column one. Everything between the #@pack-
age: keyword and the next #@package: keyword or a #@packend keyword, or
the end of the file, becomes part of the named package. The specified
procedures, proc1..procN, are the entry points of the package. When a
command named in a package specification is executed and detected as an
unknown command, all code in the specified package will be sourced.
This package should define all of the procedures named on the package
line, define any support procedures required by the package and do any
package-specific initialization. Packages declarations maybe continued
on subsequent lines using standard Tcl backslash line continuations.
The #@packend keyword is useful to make sure only the minimum required
section of code is sourced. Thus for example a large comment block at
the beginning of the next file won't be loaded.
Care should be taken in defining package_name, as the first package
found in the path by with a given name is loaded. This can be useful
in developing new version of packages installed on the system.
For example, in a package source file, the presence of the following
line:
#@package: directory_stack pushd popd dirs
says that the text lines following that line in the package file up to
the next package line or the end of the file is a package named direc-
tory_stack and that an attempt to execute either pushd, popd or dirs
when the routine is not already defined will cause the directory_stack
portion of the package file to be loaded.
PACKAGE LIBRARY MANAGEMENT COMMANDS
Several commands are available for building and managing package
libraries. Commands that are extended versions of the standard Tcl
library commands are listed here. All of the standard Tcl library man-
agement commands and variables are also supported.
auto_commands ?-loaders?
Lists the names of all known loadable procedures and commands
procedures. If -loaders is specified, the command that will be
executed to load the command will also be returned.
buildpackageindex libfilelist
Build index files for package libraries. The argument lib-
filelist is a list of package libraries. Each name must end
with the suffix .tlib. A corresponding .tndx file will be
built. The user must have write access to the directory con-
taining each library.
convert_lib tclIndex packagelib ?ignore?
Convert a Ousterhout style tclIndex index file and associate
source files into a package library packagelib. If packagelib
does not have a .tlib extension, one will be added. Any files
specified in tclIndex that are in the list ignore will be
skipped. Files listed in ignore should just be the base file
names, not full paths.
loadlibindex libfile.tlib
Load the package library index of the library file libfile
(which must have the suffix .tlib). Package library indexes
along the auto_path are loaded automatically on the first
demand_load; this command is provided to explicitly load
libraries that are not in the path. If the index file (with a
.tndx suffix) does not exists or is out of date, it will be
rebuilt if the user has directory permissions to create it. If a
package with the same name as a package in libfile.tlib has
already been loaded, its definition will be overridden by the
new package. However, if any procedure has actually been used
from the previously defined package, the procedures from lib-
file.tlib will not be loaded.
auto_packages ?-location?
Returns a list of the names of all defined packages. If -loca-
tion is specified, a list of pairs of package name and the .tlib
path name, offset and length of the package within the library.
auto_load_file file
Source a file, as with the source command, except search
auto_path for the file.
searchpath path file
Search all directories in the specified path, which is a Tcl
list, for the specified file. Returns the full path name of the
file, or an empty string if the requested file could not be
found.
Tcl TclX(TCL)