Update tcl/tk for tcl-dp

This commit is contained in:
Mario Fetka 2024-05-27 16:40:40 +02:00
parent 07611c0ac3
commit b2af3b41bd
1145 changed files with 272273 additions and 68034 deletions

View File

@ -4,9 +4,9 @@ WORLD_ROOT=${PWD}
ARCHIE_ROOT="${WORLD_ROOT}/archie"
PROSPERO_ROOT="${WORLD_ROOT}/prospero"
BERKDB_ROOT="${WORLD_ROOT}/berkdb"
TCL_ROOT="${WORLD_ROOT}/tcl7.3"
TCL_ROOT="${WORLD_ROOT}/tcl7.6"
TCLDP_ROOT="${WORLD_ROOT}/tcl-dp/unix"
TK_ROOT="${WORLD_ROOT}/tk3.6"
TK_ROOT="${WORLD_ROOT}/tk4.2"
SOLOS=$(uname -s)
SOLVER=$(uname -r)
SYSTYPE="${SOLOS}-${SOLVER}"
@ -34,18 +34,43 @@ echo " Tk Root : ${TK_ROOT}"
echo " System Type : ${SYSTYPE}"
echo " Dist Dir : ${DISTDIR}"
cd ${TCL_ROOT}
echo ""
echo "===================================================================="
echo " Building ${TCL_ROOT}/unix"
echo "===================================================================="
echo ""
cd ${TCL_ROOT}/unix
./configure --prefix=${DISTDIR}
make install
cd ${WORLD_ROOT}
cd ${TK_ROOT}
echo ""
echo "===================================================================="
echo " Building ${TK_ROOT}/unix"
echo "===================================================================="
echo ""
cd ${TK_ROOT}/unix
./configure --prefix=${DISTDIR}
make install
cd ${WORLD_ROOT}
echo ""
echo "===================================================================="
echo " Building ${TCLDP_ROOT}"
echo "===================================================================="
echo ""
cd ${TCLDP_ROOT}
./configure --prefix=${DISTDIR}
./configure --with-tcl=${TCL_ROOT} --prefix=${DISTDIR}
make install
cd ${WORLD_ROOT}
echo ""
echo "===================================================================="
echo " Building ${BERKDB_ROOT}/PORT/${SYSTYPE}"
echo "===================================================================="
echo ""
cd ${BERKDB_ROOT}/PORT/${SYSTYPE}
CC=gcc make
cd ${WORLD_ROOT}

View File

@ -1,255 +0,0 @@
#
# This file is a Makefile for Tcl. If it has the name "Makefile.in"
# then it is a template for a Makefile; to generate the actual Makefile,
# run "./configure", which is a configuration script generated by the
# "autoconf" program (constructs like "@foo@" will get replaced in the
# actual Makefile.
#----------------------------------------------------------------
# Things you can change to personalize the Makefile for your own
# site (you can make these changes in either Makefile.in or
# Makefile, but changes to Makefile will get lost if you re-run
# the configuration script).
#----------------------------------------------------------------
# Default top-level directories in which to install architecture-
# specific files (exec_prefix) and machine-independent files such
# as scripts (prefix). The values specified here may be overridden
# at configure-time with the --exec-prefix and --prefix options
# to the "configure" script.
exec_prefix = /usr/local
prefix = /usr/local
# Directory in which to install the library of Tcl scripts (note:
# you can set the TCL_LIBRARY environment variable at run-time to
# override the compiled-in location):
TCL_LIBRARY = $(prefix)/lib/tcl
# Directory in which to install the archive libtcl.a:
LIB_DIR = $(exec_prefix)/lib
# Directory in which to install the program tclsh:
BIN_DIR = $(exec_prefix)/bin
# Directory in which to install the include file tcl.h:
INCLUDE_DIR = $(prefix)/include
# Top-level directory for manual entries:
MAN_DIR = $(prefix)/man
# Directory in which to install manual entry for tclsh:
MAN1_DIR = $(MAN_DIR)/man1
# Directory in which to install manual entries for Tcl's C library
# procedures:
MAN3_DIR = $(MAN_DIR)/man3
# Directory in which to install manual entries for the built-in
# Tcl commands:
MANN_DIR = $(MAN_DIR)/mann
# To change the compiler switches, for example to change from -O
# to -g, change the following line:
CFLAGS = -O
# To disable ANSI-C procedure prototypes reverse the comment characters
# on the following lines:
PROTO_FLAGS =
#PROTO_FLAGS = -DNO_PROTOTYPE
# Mathematical functions like sin and atan2 are enabled for expressions
# by default. To disable them, reverse the comment characters on the
# following pairs of lines:
MATH_FLAGS =
#MATH_FLAGS = -DTCL_NO_MATH
MATH_LIBS = -lm
#MATH_LIBS =
# To compile for non-UNIX systems (so that only the non-UNIX-specific
# commands are available), reverse the comment characters on the
# following pairs of lines. In addition, you'll have to provide your
# own replacement for the "panic" procedure (see panic.c for what
# the current one does).
GENERIC_FLAGS =
#GENERIC_FLAGS = -DTCL_GENERIC_ONLY
UNIX_OBJS = panic.o tclEnv.o tclGlob.o tclMain.o tclUnixAZ.o \
tclUnixStr.o tclUnixUtil.o
#UNIX_OBJS =
# To enable memory debugging reverse the comment characters on the following
# lines. Warning: if you enable memory debugging, you must do it
# *everywhere*, including all the code that calls Tcl, and you must use
# ckalloc and ckfree everywhere instead of malloc and free.
MEM_DEBUG_FLAGS =
#MEM_DEBUG_FLAGS = -DTCL_MEM_DEBUG
# Some versions of make, like SGI's, use the following variable to
# determine which shell to use for executing commands:
SHELL = /bin/sh
#----------------------------------------------------------------
# The information below is modified by the configure script when
# Makefile is generated from Makefile.in. You shouldn't normally
# modify any of this stuff by hand.
#----------------------------------------------------------------
COMPAT_OBJS = @LIBOBJS@
AC_FLAGS = @DEFS@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
RANLIB = @RANLIB@
SRC_DIR = @srcdir@
VPATH = @srcdir@
#----------------------------------------------------------------
# The information below should be usable as is. The configure
# script won't modify it and you shouldn't need to modify it
# either.
#----------------------------------------------------------------
CC = @CC@
CC_SWITCHES = ${CFLAGS} -I. -I${SRC_DIR} ${AC_FLAGS} ${MATH_FLAGS} \
${GENERIC_FLAGS} ${PROTO_FLAGS} ${MEM_DEBUG_FLAGS} \
-DTCL_LIBRARY=\"${TCL_LIBRARY}\"
GENERIC_OBJS = regexp.o tclAsync.o tclBasic.o tclCkalloc.o \
tclCmdAH.o tclCmdIL.o tclCmdMZ.o tclExpr.o tclGet.o \
tclHash.o tclHistory.o tclLink.o tclParse.o tclProc.o \
tclUtil.o tclVar.o
OBJS = ${GENERIC_OBJS} ${UNIX_OBJS} ${COMPAT_OBJS}
all: libtcl.a tclsh
libtcl.a: ${OBJS}
rm -f libtcl.a
ar cr libtcl.a ${OBJS}
$(RANLIB) libtcl.a
tclsh: tclAppInit.o libtcl.a
${CC} ${CC_SWITCHES} tclAppInit.o libtcl.a ${MATH_LIBS} -o tclsh
tcltest: tclTest.o libtcl.a
${CC} ${CC_SWITCHES} tclTest.o libtcl.a ${MATH_LIBS} -o tcltest
test: tcltest
@cwd=`pwd`; \
cd $(SRC_DIR); TCL_LIBRARY=`pwd`/library; export TCL_LIBRARY; \
cd $$cwd; ( echo cd $(SRC_DIR)/tests\; source all ) | ./tcltest
install: install-binaries install-libraries install-man
install-binaries: libtcl.a tclsh
@for i in $(LIB_DIR) $(BIN_DIR) ; \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@echo "Installing libtcl.a"
@$(INSTALL_DATA) libtcl.a $(LIB_DIR)
@$(RANLIB) $(LIB_DIR)/libtcl.a
@echo "Installing tclsh"
@$(INSTALL_PROGRAM) tclsh $(BIN_DIR)
install-libraries:
@for i in $(prefix)/lib $(INCLUDE_DIR) $(TCL_LIBRARY) ; \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@echo "Installing tcl.h"
@$(INSTALL_DATA) $(SRC_DIR)/tcl.h $(INCLUDE_DIR)
@cd $(SRC_DIR)/library; for i in *.tcl tclIndex; \
do \
echo "Installing library/$$i"; \
$(INSTALL_DATA) $$i $(TCL_LIBRARY); \
done;
install-man:
@for i in $(MAN_DIR) $(MAN1_DIR) $(MAN3_DIR) $(MANN_DIR) ; \
do \
if [ ! -d $$i ] ; then \
echo "Making directory $$i"; \
mkdir $$i; \
chmod 755 $$i; \
else true; \
fi; \
done;
@cd $(SRC_DIR)/doc; for i in *.1; \
do \
echo "Installing doc/$$i"; \
rm -f $(MAN1_DIR)/$$i; \
sed -e '/man\.macros/r man.macros' -e '/man\.macros/d' \
$$i > $(MAN1_DIR)/$$i; \
chmod 444 $(MAN1_DIR)/$$i; \
done;
@cd $(SRC_DIR)/doc; for i in *.3; \
do \
echo "Installing doc/$$i"; \
rm -f $(MAN3_DIR)/$$i; \
sed -e '/man\.macros/r man.macros' -e '/man\.macros/d' \
$$i > $(MAN3_DIR)/$$i; \
chmod 444 $(MAN3_DIR)/$$i; \
done;
@cd $(SRC_DIR)/doc; for i in *.n; \
do \
echo "Installing doc/$$i"; \
rm -f $(MANN_DIR)/$$i; \
sed -e '/man\.macros/r man.macros' -e '/man\.macros/d' \
$$i > $(MANN_DIR)/$$i; \
chmod 444 $(MANN_DIR)/$$i; \
done;
Makefile: $(SRC_DIR)/Makefile.in
$(SHELL) config.status
clean:
rm -f *.a *.o core errs *~ \#* TAGS *.E a.out errors tclsh tcltest
distclean: clean
rm -f Makefile config.status
getcwd.o: $(SRC_DIR)/compat/getcwd.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/getcwd.c
opendir.o: $(SRC_DIR)/compat/opendir.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/opendir.c
strerror.o: $(SRC_DIR)/compat/strerror.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/strerror.c
strstr.o: $(SRC_DIR)/compat/strstr.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/strstr.c
strtod.o: $(SRC_DIR)/compat/strtod.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/strtod.c
strtol.o: $(SRC_DIR)/compat/strtol.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/strtol.c
strtoul.o: $(SRC_DIR)/compat/strtoul.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/strtoul.c
tmpnam.o: $(SRC_DIR)/compat/tmpnam.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/tmpnam.c
waitpid.o: $(SRC_DIR)/compat/waitpid.c
$(CC) -c $(CC_SWITCHES) $(SRC_DIR)/compat/waitpid.c
.c.o:
$(CC) -c $(CC_SWITCHES) $<
${OBJS}: $(SRC_DIR)/tcl.h $(SRC_DIR)/tclInt.h
${UNIX_OBJS}: $(SRC_DIR)/tclUnix.h
tclCmdIL.o: $(SRC_DIR)/patchlevel.h

View File

@ -1,346 +0,0 @@
Tcl
by John Ousterhout
University of California at Berkeley
ouster@cs.berkeley.edu
1. Introduction
---------------
This directory contains the sources and documentation for Tcl, an
embeddable tool command language. The information here corresponds
to release 7.3.
2. Documentation
----------------
The best way to get started with Tcl is to read the draft of my
upcoming book on Tcl and Tk, which can be retrieved using anonymous
FTP from the directory "ucb/tcl" on ftp.cs.berkeley.edu. Part I of the
book provides an introduction to writing Tcl scripts and Part III
describes how to write C code that uses the Tcl C library procedures.
The "doc" subdirectory in this release contains a complete set of manual
entries for Tcl. Files with extension ".1" are for programs (for
example, tclsh.1); files with extension ".3" are for C library procedures;
and files with extension ".n" describe Tcl commands. The file "doc/Tcl.n"
gives a quick summary of the Tcl language syntax. To print any of the man
pages, cd to the "doc" directory and invoke your favorite variant of
troff using the normal -man macros, for example
ditroff -man Tcl.n
to print Tcl.n. If Tcl has been installed correctly and your "man"
program supports it, you should be able to access the Tcl manual entries
using the normal "man" mechanisms, such as
man Tcl
3. Compiling and installing Tcl
-------------------------------
This release should compile and run "out of the box" on any UNIX-like
system that approximates POSIX, BSD, or System V. I know that it runs
on workstations from Sun, DEC, H-P, IBM, and Silicon Graphics, and on
PC's running SCO UNIX and Xenix. To compile Tcl, do the following:
(a) Type "./configure" in this directory. This runs a configuration
script created by GNU autoconf, which configures Tcl for your
system and creates a Makefile. The configure script allows you
to customize the Tcl configuration for your site; for details on
how you can do this, see the file "configure.info".
(b) Type "make". This will create a library archive called "libtcl.a"
and an interpreter application called "tclsh" that allows you to type
Tcl commands interactively or execute script files.
(c) If the make fails then you'll have to personalize the Makefile
for your site or possibly modify the distribution in other ways.
First check the file "porting.notes" to see if there are hints
for compiling on your system. If you need to modify Makefile,
there are comments at the beginning of it that describe the things
you might want to change and how to change them.
(d) Type "make install" to install Tcl binaries and script files in
standard places. You'll need write permission on /usr/local to
do this. See the Makefile for details on where things get
installed.
(e) At this point you can play with Tcl by invoking the "tclsh"
program and typing Tcl commands. However, if you haven't installed
Tcl then you'll first need to set your TCL_LIBRARY variable to
hold the full path name of the "library" subdirectory.
If you have trouble compiling Tcl, I'd suggest looking at the file
"porting.notes". It contains information that people have sent me about
changes they had to make to compile Tcl in various environments. I make
no guarantees that this information is accurate, complete, or up-to-date,
but you may find it useful. If you get Tcl running on a new configuration,
I'd be happy to receive new information to add to "porting.notes". I'm
also interested in hearing how to change the configuration setup so that
Tcl compiles on additional platforms "out of the box".
4. Test suite
-------------
There is a relatively complete test suite for all of the Tcl core in
the subdirectory "tests". To use it just type "make test" in this
directory. You should then see a printout of the test files processed.
If any errors occur, you'll see a much more substantial printout for
each error. See the README file in the "tests" directory for more
information on the test suite.
5. Summary of changes in recent releases
----------------------------------------
Tcl 7.3 is a minor release that includes only one change relative to
Tcl 7.1 (it fixes a portability problem that prevented tclMain.c from
compiling on some machines due to a missing R_OK definition). Tcl 7.3
should be completely compatible with Tcl 7.1 and Tcl 7.0.
Tcl 7.2 was a mistake; it was withdrawn shortly after it was released.
Tcl 7.1 is a minor release that consists almost entirely of bug fixes.
The only feature change is to allow no arguments in invocations of "list"
and "concat". 7.1 should be completely compatible with 7.0.
Tcl 7.0 is a major new release that includes several new features
and a few incompatible changes. For a complete list of all changes
to Tcl in chronological order, see the file "changes". Those changes
likely to cause compatibility problems with existing C code or Tcl
scripts are specially marked. The most important changes are
summarized below.
Tcl configuration and installation has improved in several ways:
1. GNU autoconf is now used for configuring Tcl prior to compilation.
2. The "tclTest" program no longer exists. It has been replaced by
"tclsh", which is a true shell-like program based around Tcl (tclTest
didn't really work very well as a shell). There's a new program
"tcltest" which is the same as "tclsh" except that it includes a
few extra Tcl commands for testing purposes.
3. A new procedure Tcl_AppInit has been added to separate all of the
application-specific initialization from the Tcl main program. This
should make it easier to build new Tcl applications that include
extra packages.
4. There are now separate manual entries for each of the built-in
commands. The manual entry "Tcl.n", which used to describe all of
the built-ins plus many other things, now contains a terse but
complete description of the Tcl language syntax.
Here is a list of all incompatibilities that affect Tcl scripts:
1. There have been several changes to backslash processing:
- Unknown backslash sequences such as "\*" are now replaced with
the following character (such as "*"); Tcl used to treat the
backslash as an ordinary character in these cases, so both the
backslash and the following character would be passed through.
- Backslash-newline now eats up any white space after the newline,
replacing the whole sequence with a single space character. Tcl
used to just remove the backslash and newline.
- The obsolete sequences \Cx, \Mx, \CMx, and \e no longer get
special treatment.
- The "format" command no longer does backslash processing on
its input string.
You can invoke the shell command below to locate backslash uses that
may potentially behave differently under Tcl 7.0. This command
will print all of the lines from the script files "*.tcl" that may
not work correctly under Tcl 7.0:
egrep '(\\$)|(\\[^][bfnrtv\0-9{}$ ;"])' *.tcl
In some cases the command may print lines that are actually OK.
2. The "glob" command now returns only the names of files that
actually exist, and it only returns names ending in "/" for
directories.
3. When Tcl prints floating-point numbers (e.g. in the "expr" command)
it ensures that the numbers contain a "." or "e" so that they don't
look like integers.
4. The "regsub" command now overwrites its result variable in all cases.
If there is no match, then the source string is copied to the result.
5. The "exec", "glob", "regexp", and "regsub" commands now include a
"--" switch; if the first non-switch argument starts with a "-" then
there must be a "--" switch or the non-switch argument will be treated
as a switch.
6. The keyword "UNIX" in the variable "errorCode" has been changed to
"POSIX".
7. The "format" and "scan" commands no longer support capitalized
conversion specifiers such as "%D" that aren't supported by ANSI
sprintf and sscanf.
Here is a list of all of the incompatibilities that affect C code that
uses the Tcl library procedures. If you use an ANSI C compiler then
any potential problems will be detected when you compile your code: if
your code compiles cleanly then you don't need to worry about anything.
1. Tcl_TildeString now takes a dynamic string as an argument, which is
used to hold the result.
2. tclHash.h has been eliminated; its contents are now in tcl.h.
3. The Tcl_History command has been eliminated: the "history" command
is now automatically part of the interpreter.
4. The Tcl_Fork and Tcl_WaitPids procedures have been deleted (just
use fork and waitpid instead).
5. The "flags" and "termPtr" arguments to Tcl_Eval have been eliminated,
as has the "noSep" argument to Tcl_AppendElement and the TCL_NO_SPACE
flag for Tcl_SetVar and Tcl_SetVar2.
6. The Tcl_CmdBuf structure has been eliminated, along with the procedures
Tcl_CreateCmdBuf, Tcl_DeleteCmdBuf, and Tcl_AssembleCmd. Use dynamic
strings instead.
7. Tcl_UnsetVar and Tcl_UnsetVar2 now return TCL_OK or TCL_ERROR instead
of 0 or -1.
8. Tcl_UnixError has been renamed to Tcl_PosixError.
9. Tcl no longer redefines the library procedures "setenv", "putenv",
and "unsetenv" by default. You have to set up special configuration
in the Makefile if you want this.
Below is a sampler of the most important new features in Tcl 7.0. Refer
to the "changes" file for a complete list.
1. The "expr" command supports transcendental and other math functions,
plus it allows you to type expressions in multiple arguments. Its
numerics have also been improved in several ways (e.g. support for
NaN).
2. The "format" command now supports XPG3 %n$ conversion specifiers.
3. The "exec" command supports many new kinds of redirection such as
>> and >&, plus it allows you to leave out the space between operators
like < and the file name. For processes put into the background,
"exec" returns a list of process ids.
4. The "lsearch" command now supports regular expressions and exact
matching.
5. The "lsort" command has several new switches to control the
sorting process (e.g. numerical sort, user-provided sort function,
reverse sort, etc.).
6. There's a new command "pid" that can be used to return the current
process ids or the process ids from an open file that refers to a
pipeline.
7. There's a new command "switch" that should now be used instead
of "case". It supports regular expressions and exact matches, and
also uses single patterns instead of pattern lists. "Case" is
now deprecated, although it's been retained for compatibility.
8. A new dynamic string library has been added to make it easier to
build up strings and lists of arbitrary length. See the manual entry
"DString.3".
9. Variable handling has been improved in several ways: you can
now use whole-array traces to create variables on demand, you can
delete variables during traces, you can upvar to array elements,
and you can retarget an upvar variable to stop through a sequence
of variables. Also, there's a new library procedure Tcl_LinkVar
that can be used to associate a C variable with a Tcl variable and
keep them in sync.
10. New library procedures Tcl_SetCommandInfo and Tcl_GetCommandInfo
allow you to set and get the clientData and callback procedure for
a command.
11. Added "-errorinfo" and "-errorcode" options to "return" command;
they allow much better error handling.
12. Made prompts in tclsh user-settable via "tcl_prompt1" and
"tcl_prompt2" variables.
13. Added low-level support that is needed to handle signals: see
Tcl_AsyncCreate, etc.
6. Tcl newsgroup
-----------------
There is a network news group "comp.lang.tcl" intended for the exchange
of information about Tcl, Tk, and related applications. Feel free to use
the newsgroup both for general information questions and for bug reports.
I read the newsgroup and will attempt to fix bugs and problems reported
to it.
7. Tcl contributed archive
--------------------------
Many people have created exciting packages and applications based on Tcl
and made them freely available to the Tcl community. An archive of these
contributions is kept on the machine harbor.ecn.purdue.edu. You can
access the archive using anonymous FTP; the Tcl contributed archive is
in the directory "pub/tcl". The archive also contains an FAQ ("frequently
asked questions") document that provides solutions to problems that
are commonly encountered by TCL newcomers.
8. Support and bug fixes
------------------------
I'm very interested in receiving bug reports and suggestions for
improvements. Bugs usually get fixed quickly (particularly if they
are serious), but enhancements may take a while and may not happen at
all unless there is widespread support for them (I'm trying to slow
the rate at which Tcl turns into a kitchen sink). It's almost impossible
to make incompatible changes to Tcl at this point.
The Tcl community is too large for me to provide much individual
support for users. If you need help I suggest that you post questions
to comp.lang.tcl. I read the newsgroup and will attempt to answer
esoteric questions for which no-one else is likely to know the answer.
In addition, Tcl support and training are available commercially from
NeoSoft. For more information, send e-mail to "info@neosoft.com".
9. Tcl release organization
---------------------------
Each Tcl release is identified by two numbers separated by a dot, e.g.
6.7 or 7.0. If a new release contains changes that are likely to break
existing C code or Tcl scripts then the major release number increments
and the minor number resets to zero: 6.0, 7.0, etc. If a new release
contains only bug fixes and compatible changes, then the minor number
increments without changing the major number, e.g. 7.1, 7.2, etc. If
you have C code or Tcl scripts that work with release X.Y, then they
should also work with any release X.Z as long as Z > Y.
Beta releases have an additional suffix of the form bx. For example,
Tcl 7.0b1 is the first beta release of Tcl version 7.0, Tcl 7.0b2 is
the second beta release, and so on. A beta release is an initial
version of a new release, used to fix bugs and bad features before
declaring the release stable. Each new release will be preceded by
one or more beta releases. I hope that lots of people will try out
the beta releases and report problems back to me. I'll make new beta
releases to fix the problems, until eventually there is a beta release
that appears to be stable. Once this occurs I'll remove the beta
suffix so that the last beta release becomes the official release.
If a new release contains incompatibilities (e.g. 7.0) then I can't
promise to maintain compatibility among its beta releases. For example,
release 7.0b2 may not be backward compatible with 7.0b1. I'll try
to minimize incompatibilities between beta releases, but if a major
problem turns up then I'll fix it even if it introduces an
incompatibility. Once the official release is made then there won't
be any more incompatibilities until the next release with a new major
version number.
10. Compiling on non-UNIX systems
--------------------------------
The Tcl features that depend on system calls peculiar to UNIX (stat,
fork, exec, times, etc.) are now separate from the main body of Tcl,
which only requires a few generic library procedures such as malloc
and strcpy. Thus it should be relatively easy to compile Tcl for
non-UNIX machines such as MACs and DOS PC's, although a number of
UNIX-specific commands will be absent (e.g. exec, time, and glob).
See the comments at the top of Makefile for information on how to
compile without the UNIX features.

View File

@ -1,958 +0,0 @@
Recent user-visible changes to Tcl:
1. No more [command1] [command2] construct for grouping multiple
commands on a single command line.
2. Semi-colon now available for grouping commands on a line.
3. For a command to span multiple lines, must now use backslash-return
at the end of each line but the last.
4. "Var" command has been changed to "set".
5. Double-quotes now available as an argument grouping character.
6. "Return" may be used at top-level.
7. More backslash sequences available now. In particular, backslash-newline
may be used to join lines in command files.
8. New or modified built-in commands: case, return, for, glob, info,
print, return, set, source, string, uplevel.
9. After an error, the variable "errorInfo" is filled with a stack
trace showing what was being executed when the error occurred.
10. Command abbreviations are accepted when parsing commands, but
are not recommended except for purely-interactive commands.
11. $, set, and expr all complain now if a non-existent variable is
referenced.
12. History facilities exist now. See Tcl.man and Tcl_RecordAndEval.man.
13. Changed to distinguish between empty variables and those that don't
exist at all. Interfaces to Tcl_GetVar and Tcl_ParseVar have changed
(NULL return value is now possible). *** POTENTIAL INCOMPATIBILITY ***
14. Changed meaning of "level" argument to "uplevel" command (1 now means
"go up one level", not "go to level 1"; "#1" means "go to level 1").
*** POTENTIAL INCOMPATIBILITY ***
15. 3/19/90 Added "info exists" option to see if variable exists.
16. 3/19/90 Added "noAbbrev" variable to prohibit command abbreviations.
17. 3/19/90 Added extra errorInfo option to "error" command.
18. 3/21/90 Double-quotes now only affect space: command, variable,
and backslash substitutions still occur inside double-quotes.
*** POTENTIAL INCOMPATIBILITY ***
19. 3/21/90 Added support for \r.
20. 3/21/90 List, concat, eval, and glob commands all expect at least
one argument now. *** POTENTIAL INCOMPATIBILITY ***
21. 3/22/90 Added "?:" operators to expressions.
22. 3/25/90 Fixed bug in Tcl_Result that caused memory to get trashed.
------------------- Released version 3.1 ---------------------
23. 3/29/90 Fixed bug that caused "file a.b/c ext" to return ".b/c".
24. 3/29/90 Semi-colon is not treated specially when enclosed in
double-quotes.
------------------- Released version 3.2 ---------------------
25. 4/16/90 Rewrote "exec" not to use select or signals anymore.
Should be more Sys-V compatible, and no slower in the normal case.
26. 4/18/90 Rewrote "glob" to eliminate GNU code (there's no GNU code
left in Tcl, now), and added Tcl_TildeSubst procedure. Added automatic
tilde-substitution in many commands, including "glob".
------------------- Released version 3.3 ---------------------
27. 7/11/90 Added "Tcl_AppendResult" procedure.
28. 7/20/90 "History" with no options now defaults to "history info"
rather than to "history redo". Although this is a backward incompatibility,
it should only be used interactively and thus shouldn't present any
compatibility problems with scripts.
29. 7/20/90 Added "Tcl_GetInteger", "Tcl_GetDouble", and "Tcl_GetBoolean"
procedures.
30. 7/22/90 Removed "Tcl_WatchInterp" procedure: doesn't seem to be
necessary, since the same effect can be achieved with the deletion
callbacks on individual commands. *** POTENTIAL INCOMPATIBILITY ***
31. 7/23/90 Added variable tracing: Tcl_TraceVar, Tcl_UnTraceVar,
and Tcl_VarTraceInfo procedures, "trace" command.
32. 8/9/90 Mailed out list of all bug fixes since 3.3 release.
33. 8/29/90 Fixed bugs in Tcl_Merge relating to backslashes and
semi-colons. Mailed out patch.
34. 9/3/90 Fixed bug in tclBasic.c: quotes weren't quoting ]'s.
Mailed out patch.
35. 9/19/90 Rewrote exec to always use files both for input and
output to the process. The old pipe-based version didn't work if
the exec'ed process forked a child and then exited: Tcl waited
around for stdout to get closed, which didn't happen until the
grandchild exited.
36. 11/5/90 ERR_IN_PROGRESS flag wasn't being cleared soon enough
in Tcl_Eval, allowing error messages from different commands to
pile up in $errorInfo. Fixed by re-arranging code in Tcl_Eval that
re-initializes result and ERR_IN_PROGRESS flag. Didn't mail out
patch: changes too complicated to describe.
37. 12/19/90 Added Tcl_VarEval procedure as a convenience for
assembling and executing Tcl commands.
38. 1/29/91 Fixed core leak in Tcl_AddErrorInfo. Also changed procedure
and Tcl_Eval so that first call to Tcl_AddErrorInfo need not come from
Tcl_Eval.
----------------- Released version 5.0 with Tk ------------------
39. 4/3/91 Removed change bars from manual entries, leaving only those
that came after version 3.3 was released.
40. 5/17/91 Changed tests to conform to Mary Ann May-Pumphrey's approach.
41. 5/23/91 Massive revision to Tcl parser to simplify the implementation
of string and floating-point support in expressions. Newlines inside
[] are now treated as command separators rather than word separators
(this makes newline treatment consistent throughout Tcl).
*** POTENTIAL INCOMPATIBILITY ***
42. 5/23/91 Massive rewrite of expression code to support floating-point
values and simple string comparisons. The C interfaces to expression
routines have changed (Tcl_Expr is replaced by Tcl_ExprLong, Tcl_ExprDouble,
etc.), but all old Tcl expression strings should be accepted by the new
expression code.
*** POTENTIAL INCOMPATIBILITY ***
43. 5/23/91 Modified tclHistory.c to check for negative "keep" value.
44. 5/23/91 Modified Tcl_Backslash to handle backslash-newline. It now
returns 0 to indicate that a backslash sequence should be replaced by
no character at all.
*** POTENTIAL INCOMPATIBILITY ***
45. 5/29/91 Modified to use ANSI C function prototypes. Must set
"USE_ANSI" switch when compiling to get prototypes.
46. 5/29/91 Completed test suite by providing tests for all of the
built-in Tcl commands.
47. 5/29/91 Changed Tcl_Concat to eliminate leading and trailing
white-space in each of the things it concatenates and to ignore
elements that are empty or have only white space in them. This
produces cleaner output from the "concat" command.
*** POTENTIAL INCOMPATIBILITY ***
48. 5/31/91 Changed "set" command and Tcl_SetVar procedure to return
new value of variable.
49. 6/1/91 Added "while" and "cd" commands.
50. 6/1/91 Changed "exec" to delete the last character of program
output if it is a newline. In most cases this makes it easier to
process program-generated output.
*** POTENTIAL INCOMPATIBILITY ***
51. 6/1/91 Made sure that pointers are never used after freeing them.
52. 6/1/91 Fixed bug in TclWordEnd where it wasn't dealing with
[] inside quotes correctly.
53. 6/8/91 Fixed exec.test to accept return values of either 1 or
255 from "false" command.
54. 7/6/91 Massive overhaul of variable management. Associative
arrays now available, along with "unset" command (and Tcl_UnsetVar
procedure). Variable traces have been completely reworked:
interfaces different both from Tcl and C, and multiple traces may
exist on same variable. Can no longer redefine existing local
variable to be global. Calling sequences have changed slightly
for Tcl_GetVar and Tcl_SetVar ("global" is now "flags"). Tcl_SetVar
can fail and return a NULL result. New forms of variable-manipulation
procedures: Tcl_GetVar2, Tcl_SetVar2, etc. Syntax of variable
$-notation changed to support array indexing.
*** POTENTIAL INCOMPATIBILITY ***
55. 7/6/91 Added new list-manipulation procedures: Tcl_ScanElement,
Tcl_ConvertElement, Tcl_AppendElement.
56. 7/12/91 Created new procedure Tcl_EvalFile, which does most of the
work of the "source" command.
57. 7/20/91 Major reworking of "exec" command to allow pipelines,
more redirection, background. Added new procedures Tcl_Fork,
Tcl_WaitPids, Tcl_DetachPids, and Tcl_CreatePipeline. The old
"< input" notation has been replaced by "<< input" ("<" is for
redirection from a file). Also handles error returns and abnormal
terminations (e.g. signals) differently.
*** POTENTIAL INCOMPATIBILITY ***
58. 7/21/91 Added "append" and "lappend" commands.
59. 7/22/91 Reworked error messages and manual entries to use
?x? as the notation for an optional argument x, instead of [x]. The
bracket notation was often confused with the use of brackets for
command substitution. Also modified error messages to be more
consistent.
60. 7/23/91 Tcl_DeleteCommand now returns an indication of whether
or not the command actually existed, and the "rename" command uses
this information to return an error if an attempt is made to delete
a non-existent command.
*** POTENTIAL INCOMPATIBILITY ***
61. 7/25/91 Added new "errorCode" mechanism, along with procedures
Tcl_SetErrorCode, Tcl_UnixError, and Tcl_ResetResult. Renamed
Tcl_Return to Tcl_SetResult, but left a #define for Tcl_Return to
avoid compatibility problems.
62. 7/26/91 Extended "case" command with alternate syntax where all
patterns and commands are together in a single list argument: makes
it easier to write multi-line case statements.
63. 7/27/91 Changed "print" command to perform tilde-substitution on
the file name.
64. 7/27/91 Added "tolower", "toupper", "trim", "trimleft", and "trimright"
options to "string" command.
65. 7/29/91 Added "atime", "mtime", "size", and "stat" options to "file"
command.
66. 8/1/91 Added "split" and "join" commands.
67. 8/11/91 Added commands for file I/O, including "open", "close",
"read", "gets", "puts", "flush", "eof", "seek", and "tell".
68. 8/14/91 Switched to use a hash table for command lookups. Command
abbreviations no longer have direct support in the Tcl interpreter, but
it should be possible to simulate them with the auto-load features
described below. The "noAbbrev" variable is no longer used by Tcl.
*** POTENTIAL INCOMPATIBILITY ***
68.5 8/15/91 Added support for "unknown" command, which can be used to
complete abbreviations, auto-load library files, auto-exec shell
commands, etc.
69. 8/15/91 Added -nocomplain switch to "glob" command.
70. 8/20/91 Added "info library" option and TCL_LIBRARY #define. Also
added "info script" option.
71. 8/20/91 Changed "file" command to take "option" argument as first
argument (before file name), for consistency with other Tcl commands.
*** POTENTIAL INCOMPATIBILITY ***
72. 8/20/91 Changed format of information in $errorInfo variable:
comments such as
("while" body line 1)
are now on separate lines from commands being executed.
*** POTENTIAL INCOMPATIBILITY ***
73. 8/20/91 Changed Tcl_AppendResult so that it (eventually) frees
large buffers that it allocates.
74. 8/21/91 Added "linsert", "lreplace", "lsearch", and "lsort"
commands.
75. 8/28/91 Added "incr" and "exit" commands.
76. 8/30/91 Added "regexp" and "regsub" commands.
77. 9/4/91 Changed "dynamic" field in interpreters to "freeProc" (procedure
address). This allows for alternative storage managers.
*** POTENTIAL INCOMPATIBILITY ***
78. 9/6/91 Added "index", "length", and "range" options to "string"
command. Added "lindex", "llength", and "lrange" commands.
79. 9/8/91 Removed "index", "length", "print" and "range" commands.
"Print" is redundant with "puts", but less general, and the other
commands are replaced with the new commands described in change 78
above.
*** POTENTIAL INCOMPATIBILITY ***
80. 9/8/91 Changed history revision to occur even when history command
is nested; needed in order to allow "history" to be invoked from
"unknown" procedure.
81. 9/13/91 Changed "panic" not to use vfprintf (it's uglier and less
general now, but makes it easier to run Tcl on systems that don't
have vfprintf). Also changed "strerror" not to redeclare sys_errlist.
82. 9/19/91 Lots of changes to improve portability to different UNIX
systems, including addition of "config" script to adapt Tcl to the
configuration of the system it's being compiled on.
83. 9/22/91 Added "pwd" command.
84. 9/22/91 Renamed manual pages so that their filenames are no more
than 14 characters in length, moved to "doc" subdirectory.
85. 9/24/91 Redid manual entries so they contain the supplemental
macros that they need; can just print with "troff -man" or "man"
now.
86. 9/26/91 Created initial version of script library, including
a version of "unknown" that does auto-loading, auto-execution, and
abbreviation expansion. This library is used by tclTest
automatically. See the "library" manual entry for details.
----------------- Released version 6.0, 9/26/91 ------------------
87. 9/30/91 Made "string tolower" and "string toupper" check case
before converting: on some systems, "tolower" and "toupper" assume
that character already has particular case.
88. 9/30/91 Fixed bug in Tcl_SetResult: wasn't always setting freeProc
correctly when called with NULL value. This tended to cause memory
allocation errors later.
89. 10/3/91 Added "upvar" command.
90. 10/4/91 Changed "format" so that internally it converts %D to %ld,
%U to %lu, %O to %lo, and %F to %f. This eliminates some compatibility
problems on some machines without affecting behavior.
91. 10/10/91 Fixed bug in "regsub" that caused core dumps with the -all
option when the last match wasn't at the end of the string.
92. 10/17/91 Fixed problems with backslash sequences: \r support was
incomplete and \f and \v weren't supported at all.
93. 10/24/91 Added Tcl_InitHistory procedure.
94. 10/24/91 Changed "regexp" to store "-1 -1" in subMatchVars that
don't match, rather than returning an error.
95. 10/27/91 Modified "regexp" to return actual strings in matchVar
and subMatchVars instead of indices. Added "-indices" switch to cause
indices to be returned.
*** POTENTIAL INCOMPATIBILITY ***
96. 10/27/91 Fixed bug in "scan" where it used hardwired constants for
sizes of floats and doubles instead of using "sizeof".
97. 10/31/91 Fixed bug in tclParse.c where parse-related error messages
weren't being storage-managed correctly, causing spurious free's.
98. 10/31/91 Form feed and vertical tab characters are now considered
to be space characters by the parser.
99. 10/31/91 Added TCL_LEAVE_ERR_MSG flag to procedures like Tcl_SetVar.
100. 11/7/91 Fixed bug in "case" where "in" argument couldn't be omitted
if all case branches were embedded in a single list.
101. 11/7/91 Switched to use "pid_t" and "uid_t" and other official
POSIC types and function prototypes.
----------------- Released version 6.1, 11/7/91 ------------------
102. 12/2/91 Modified Tcl_ScanElement and Tcl_ConvertElement in several
ways. First, allowed caller to request that only backslashes be used
(no braces). Second, made Tcl_ConvertElement more aggressive in using
backslashes for braces and quotes.
103. 12/5/91 Added "type", "lstat", and "readlink" options to "file"
command, plus added new "type" element to output of "stat" and "lstat"
options.
104. 12/10/91 Manual entries had first lines that caused "man" program
to try weird preprocessor. Added blank comment lines to fix problem.
105. 12/16/91 Fixed a few bugs in auto_mkindex proc: wasn't handling
errors properly, and hadn't been upgraded for new "regexp" syntax.
106. 1/2/92 Fixed bug in "file" command where it didn't properly handle
a file names containing tildes where the indicated user doesn't exist.
107. 1/2/92 Fixed lots of cases in tclUnixStr.c where two different
errno symbols (e.g. EWOULDBLOCK and EAGAIN) have the same number; Tcl
will only use one of them.
108. 1/2/92 Lots of changes to configuration script to handle many more
systems more gracefully. E.g. should now detect the bogus strtoul that
comes with AIX and substitute Tcl's own version instead.
----------------- Released version 6.2, 1/10/92 ------------------
109. 1/20/92 Config didn't have code to actually use "uid_t" variable
to set TCL_UIT_T #define.
110. 2/10/92 Tcl_Eval didn't properly reset "numLevels" variable when
too-deep recursion occurred.
111. 2/29/92 Added "on" and "off" to keywords accepted by Tcl_GetBoolean.
112. 3/19/92 Config wasn't installing default version of strtod.c for
systems that don't have one in libc.a.
113. 3/23/92 Fixed bug in tclExpr.c where numbers with leading "."s,
like 0.75, couldn't be properly substituted into expressions with
variable or command substitution.
114. 3/25/92 Fixed bug in tclUnixAZ.c where "gets" command wasn't
checking to make sure that it was able to write the variable OK.
115. 4/16/92 Fixed bug in tclUnixAZ.c where "read" command didn't
compute file size right for device files.
116. 4/23/92 Fixed but in tclCmdMZ.c where "trace vinfo" was overwriting
the trace command.
----------------- Released version 6.3, 5/1/92 ------------------
117. 5/1/92 Added Tcl_GlobalEval.
118. 6/1/92 Changed auto-load facility to source files at global level.
119. 6/8/92 Tcl_ParseVar wasn't always setting termPtr after errors, which
sometimes caused core dumps.
120. 6/21/92 Fixed bug in initialization of regexp pattern cache. This
bug caused segmentation violations in regexp commands under some conditions.
121. 6/22/92 Changed implementation of "glob" command to eliminate
trailing slashes on directory names: they confuse some systems. There
shouldn't be any user-visible changes in functionality except for names
in error messages not having trailing slashes.
122. 7/2/92 Fixed bug that caused 'string match ** ""' to return 0.
123. 7/2/92 Fixed bug in Tcl_CreateCmdBuf where it wasn't initializing
the buffer to an empty string.
124. 7/6/92 Fixed bug in "case" command where it used NULL pattern string
after errors in the "default" clause.
125. 7/25/92 Speeded up auto_load procedure: don't reread all the index
files unless the path has changed.
126. 8/3/92 Changed tclUnix.h to define MAXPATHLEN from PATH_MAX, not
_POSIX_PATH_MAX.
----------------- Released version 6.4, 8/7/92 ------------------
127. 8/10/92 Changed tclBasic.c so that comment lines can be continued by
putting a backslash before the newline.
128. 8/21/92 Modified "unknown" to allow the source-ing of a file for
an auto-load to trigger other nested auto-loads, as long as there isn't
any recursion on the same command name.
129. 8/25/92 Modified "format" command to allow " " and "+" flags, and
allow flags in any order.
130. 9/14/92 Modified Tcl_ParseVar so that it doesn't actually attempt
to look up the variable if "noEval" mode is in effect in the interpreter
(it just parses the name). This avoids the errors that used to occur
in statements like "expr {[info exists foo] && $foo}".
131. 9/14/92 Fixed bug in "uplevel" command where it didn't output the
correct error message if a level was specified but no command.
132. 9/14/92 Renamed manual entries to have extensions like .3 and .n,
and added "install" target to Makefile.
133. 9/18/92 Modified "unknown" command to emulate !!, !<num>, and
^<old>^<new> csh history substitutions.
134. 9/21/92 Made the config script cleverer about figuring out which
switches to pass to "nm".
135. 9/23/92 Fixed tclVar.c to be sure to copy flags when growing variables.
Used to forget about traces in progress and make extra recursive calls
on trace procs.
136. 9/28/92 Fixed bug in auto_reset where it was unsetting variables
that might not exist.
137. 10/7/92 Changed "parray" library procedure to print any array
accessible to caller, local or global.
138. 10/15/92 Fixed bug where propagation of new environment variable
values among interpreters took N! time if there exist N interpreters.
139. 10/16/92 Changed auto_reset procedure so that it also deletes any
existing procedures that are in the auto_load index (the assumption is
that they should be re-loaded to get the latest versions).
140. 10/21/92 Fixed bug that caused lists to be incorrectly generated
for elements that contained backslash-newline sequences.
141. 12/9/92 Added support for TCL_LIBRARY environment variable: use
it as library location if it's present.
142. 12/9/92 Added "info complete" command, Tcl_CommandComplete procedure.
143. 12/16/92 Changed the Makefile to check to make sure "config" has been
run (can't run config directly from the Makefile because it modifies the
Makefile; thus make has to be run again after running config).
----------------- Released version 6.5, 12/17/92 ------------------
144. 12/21/92 Changed config to look in several places for libc file.
145. 12/23/92 Added "elseif" support to if. Also, "then", "else", and
"elseif" may no longer be abbreviated.
*** POTENTIAL INCOMPATIBILITY ***
146. 12/28/92 Changed "puts" and "read" to support initial "-nonewline"
switch instead of additional "nonewline" argument. The old form is
still supported, but it is discouraged and is no longer documented.
Also changed "puts" to make the file argument default to stdout: e.g.
"puts foo" will print foo on standard output.
147. 1/6/93 Fixed bug whereby backslash-newline wasn't working when
typed interactively, or in "info complete".
148. 1/22/93 Fixed bugs in "lreplace" and "linsert" where close
quotes were being lost from last element before replacement or
insertion.
149. 1/29/93 Fixed bug in Tcl_AssembleCmd where it wasn't requiring
a newline at the end of a line before considering a command to be
complete. The bug caused some very long lines in script files to
be processed as multiple separate commands.
150. 1/29/93 Various changes in Makefile to add more configuration
options, simplify installation, fix bugs (e.g. don't use -f switch
for cp), etc.
151. 1/29/93 Changed "name1" and "name2" identifiers to "part1" and
"part2" to avoid name conflicts with stupid C++ implementations that
use "name1" and "name2" in a reserved way.
152. 2/1/93 Added "putenv" procedure to replace the standard system
version so that it will work correctly with Tcl's environment handling.
----------------- Released version 6.6, 2/5/93 ------------------
153. 2/10/93 Fixed bugs in config script: missing "endif" in libc loop,
and tried to use strncasecmp.c instead of strcasecmp.c.
154. 2/10/93 Makefile improvements: added RANLIB variable for easier
Sys-V configuration, added SHELL variable for SGI systems.
----------------- Released version 6.7, 2/11/93 ------------------
153. 2/6/93 Changes in backslash processing:
- \Cx, \Mx, \CMx, \e sequences no longer special
- \<newline> also eats up any space after the newline, replacing
the whole sequence with a single space character
- Hex sequences like \x24 are now supported, along with ANSI C's \a.
- "format" no longer does backslash processing on its format string
- there is no longer any special meaning to a 0 return value from
Tcl_Backslash
- unknown backslash sequences, like (e.g. \*), are replaced with
the following character (e.g. *), instead of just treating the
backslash as an ordinary character.
*** POTENTIAL INCOMPATIBILITY ***
154. 2/6/93 Updated all copyright notices. The meaning hasn't changed
at all but the wording does a better job of protecting U.C. from
liability (according to U.C. lawyers, anyway).
155. 2/6/93 Changed "regsub" so that it overwrites the result variable
in all cases, even if there is no match.
*** POTENTIAL INCOMPATIBILITY ***
156. 2/8/93 Added support for XPG3 %n$ conversion specifiers to "format"
command.
157. 2/17/93 Fixed bug in Tcl_Eval where errors due to infinite
recursion could result in core dumps.
158. 2/17/93 Improved the auto-load mechanism to deal gracefully (i.e.
return an error) with a situation where a library file that supposedly
defines a procedure doesn't actually define it.
159. 2/17/93 Renamed Tcl_UnixError procedure to Tcl_PosixError, and
changed errorCode variable usage to use POSIX as keyword instead of
UNIX.
*** POTENTIAL INCOMPATIBILITY ***
160. 2/19/93 Changes to exec and process control:
- Added support for >>, >&, >>&, |&, <@, >@, and >&@ forms of redirection.
- When exec puts processes into background, it returns a list of
their pids as result.
- Added support for <file, >file, etc. (i.e. no space between
">" and file name.
- Added -keepnewline option.
- Deleted Tcl_Fork and Tcl_WaitPids procedures (just use fork and
waitpid instead).
- Added waitpid compatibility procedure for systems that don't have
it.
- Added Tcl_ReapDetachedProcs procedure.
- Changed "exec" to return an error if there is stderr output, even
if the command returns a 0 exit status (it's always been documented
this way, but the implementation wasn't correct).
- If a process returns a non-zero exit status but doesn't generate
any diagnostic output, then Tcl generates an error message for it.
*** POTENTIAL INCOMPATIBILITY ***
161. 2/25/93 Fixed two memory-management problems having to do with
managing the old result during variable trace callbacks.
162. 3/1/93 Added dynamic string library: Tcl_DStringInit, Tcl_DStringAppend,
Tcl_DStringFree, Tcl_DStringResult, etc.
163. 3/1/93 Modified glob command to only return the names of files that
exist, and to only return names ending in "/" if the file is a directory.
*** POTENTIAL INCOMPATIBILITY ***
164. 3/19/93 Modified not to use system calls like "read" directly,
but instead to use special Tcl procedures that retry automatically
if interrupted by signals.
165. 4/3/93 Eliminated "noSep" argument to Tcl_AppendElement, plus
TCL_NO_SPACE flag for Tcl_SetVar and Tcl_SetVar2.
*** POTENTIAL INCOMPATIBILITY ***
166. 4/3/93 Eliminated "flags" and "termPtr" arguments to Tcl_Eval.
*** POTENTIAL INCOMPATIBILITY ***
167. 4/3/93 Changes to expressions:
- The "expr" command now accepts multiple arguments, which are
concatenated together with space separators.
- Integers aren't automatically promoted to floating-point if they
overflow the word size: errors are generated instead.
- Tcl can now handle "NaN" and other special values if the underlying
library procedures handle them.
- When printing floating-point numbers, Tcl ensures that there is a "."
or "e" in the number, so it can't be treated as an integer accidentally.
The procedure Tcl_PrintDouble is available to provide this function
in other contexts. Also, the variable "tcl_precision" can be used
to set the precision for printing (must be a decimal number giving
digits of precision).
- Expressions now support transcendental and other functions, e.g. sin,
acos, hypot, ceil, and round. Can add new math functions with
Tcl_CreateMathFunc().
- Boolean expressions can now have any of the string values accepted
by Tcl_GetBoolean, such as "yes" or "no".
*** POTENTIAL INCOMPATIBILITY ***
168. 4/5/93 Changed Tcl_UnsetVar and Tcl_UnsetVar2 to return TCL_OK
or TCL_ERROR instead of 0 or -1.
*** POTENTIAL INCOMPATIBILITY ***
169. 4/5/93 Eliminated Tcl_CmdBuf structure and associated procedures;
can use Tcl_DStrings instead.
*** POTENTIAL INCOMPATIBILITY ***
170. 4/8/93 Changed interface to Tcl_TildeSubst to use a dynamic
string for buffer space. This makes the procedure re-entrant and
thread-safe, whereas it wasn't before.
*** POTENTIAL INCOMPATIBILITY ***
171. 4/14/93 Eliminated tclHash.h, and moved everything from it to
tcl.h
*** POTENTIAL INCOMPATIBILITY ***
172. 4/15/93 Eliminated Tcl_InitHistory, made "history" command always
be part of interpreter.
*** POTENTIAL INCOMPATIBILITY ***
173. 4/16/93 Modified "file" command so that "readable" option always
exists, even on machines that don't support symbolic links (always returns
same error as if the file wasn't a symbolic link).
174. 4/26/93 Fixed bugs in "regsub" where ^ patterns didn't get handled
right (pretended not to match when it really did, and looped infinitely
if -all was specified).
175. 4/29/93 Various improvements in the handling of variables:
- Can create variables and array elements during a read trace.
- Can delete variables during traces (note: unset traces will be
invoked when this happens).
- Can upvar to array elements.
- Can retarget an upvar to another variable by re-issuing the
upvar command with a different "other" variable.
176. 5/3/93 Added Tcl_GetCommandInfo, which returns info about a Tcl
command such as whether it exists and its ClientData. Also added
Tcl_SetCommandInfo, which allows any of this information to be modified
and also allows a command's delete procedure to have a different
ClientData value than its command procedure.
177. 5/5/93 Added Tcl_RegExpMatch procedure.
178. 5/6/93 Fixed bug in "scan" where it didn't properly handle
%% conversion specifiers. Also changed "scan" to use Tcl_PrintDouble
for printing real values.
179. 5/7/93 Added "-exact", "-glob", and "-regexp" options to "lsearch"
command to allow different kinds of pattern matching.
180. 5/7/93 Added many new switches to "lsort" to control the sorting
process: "-ascii", "-integer", "-real", "-command", "-increasing",
and "-decreasing".
181. 5/10/93 Changes to file I/O:
- Modified "open" command to support a list of POSIX access flags
like {WRONLY CREAT TRUNC} in addition to current fopen-style
access modes. Also added "permissions" argument to set permissions
of newly-created files.
- Fixed Scott Bolte's bug (can close stdin etc. in application and
then re-open them with Tcl commands).
- Exported access to Tcl's file table with new procedures Tcl_EnterFile
and Tcl_GetOpenFile.
182. 5/15/93 Added new "pid" command, which can be used to retrieve
either the current process id or a list of the process ids in a
pipeline opened with "open |..."
183. 6/3/93 Changed to use GNU autoconfig for configuration instead of
the home-brew "config" script. Also made many other configuration-related
changes, such as using <unistd.h> instead of explicitly declaring system
calls in tclUnix.h.
184. 6/4/93 Fixed bug where core-dumps could occur if a procedure
redefined itself (the memory for the procedure's body could get
reallocated in the middle of evaluating the body); implemented
simple reference count mechanism.
185. 6/5/93 Changed tclIndex file format in two ways: (a) it's now
eval-ed instead of parsed, which makes it 3-4x faster; (b) the entries
in auto_index are now commands to evaluate, which allows commands to
be loaded in different ways such as dynamic-loading of C code. The
old tclIndex file format is still supported.
186. 6/7/93 Eliminated tclTest program, added new "tclsh" program
that is more like wish (allows script files to be invoked automatically
using "#!/usr/local/bin/tclsh", makes arguments available to script,
etc.). Added support for Tcl_AppInit plus default version; this
allows new Tcl applications to be created without modifying the
main program for tclsh.
187. 6/7/93 Fixed bug in TclWordEnd that kept backslash-newline from
working correctly in some cases during interactive input.
188. 6/9/93 Added Tcl_LinkVar and related procedures, which automatically
keep a Tcl variable in sync with a C variable.
189. 6/16/93 Increased maximum nesting depth from 100 to 1000.
190. 6/16/93 Modified "trace var" command so that error messages from
within traces are returned properly as the result of the variable
access, instead of the generic "access disallowed by trace command"
message.
191. 6/16/93 Added Tcl_CallWhenDeleted to provide callbacks when an
interpreter is deleted (same functionality as Tcl_WatchInterp, which
used to exist in versions before 6.0).
193. 6/16/93 Added "-code" argument to "return" command; it's there
primarily for completeness, so that procedures implementing control
constructs can reflect exceptional conditions back to their callers.
194. 6/16/93 Split up Tcl.n to make separate manual entries for each
Tcl command. Tcl.n now contains a summary of the language syntax.
195. 6/17/93 Added new "switch" command to replace "case": allows
alternate forms of pattern matching (exact, glob, regexp), replaces
pattern lists with single patterns (but you can use "-" bodies to
share one body among several patterns), eliminates "in" noise word.
"Case" command is now obsolete.
196. 6/17/93 Changed the "exec", "glob", "regexp", and "regsub" commands
to include a "--" switch. All initial arguments starting with "-" are now
treated as switches unless a "--" switch is present to end the list.
*** POTENTIAL INCOMPATIBILITY ***
197. 6/17/93 Changed auto-exec so that the subprocess gets stdin, stdout,
and stderr from the parent. This allows truly interactive sub-processes
(e.g. vi) to be auto-exec'ed from a tcl shell command line.
198. 6/18/93 Added patchlevel.h, for use in coordinating future patch
releases, and also added "info patchlevel" command to make the patch
level available to Tcl scripts.
199. 6/19/93 Modified "glob" command so that a leading "//" in a name
gets left as is (this is needed for systems like Apollos where "//" is
the super-root; Tcl used to collapse the two slashes into a single
slash).
200. 7/7/93 Added Tcl_SetRecursionLimit procedure so that the maximum
allowable nesting depth can be controlled for an interpreter from C.
----------------- Released version 7.0 Beta 1, 7/9/93 ------------------
201. 7/12/93 Modified Tcl_GetInt and tclExpr.c so that full-precision
unsigned integers can be specified without overflow errors.
202. 7/12/93 Configuration changes: eliminate leading blank line in
configure script; provide separate targets in Makefile for installing
binary and non-binary information; check for size_t and a few other
potentially missing typedefs; don't put tclAppInit.o into libtcl.a;
better checks for matherr support.
203. 7/14/93 Changed tclExpr.c to check the termination pointer before
errno after strtod calls, to avoid problems with some versions of
strtod that set errno in unexpected ways.
204. 7/16/93 Changed "scan" command to be more ANSI-conformant:
eliminated %F, %D, etc., added code to ignore "l", "h", and "L"
modifiers but always convert %e, %f, and %g with implicit "l";
also added support for %u and %i. Also changed "format" command
to eliminate %D, %U, %O, and add %i.
*** POTENTIAL INCOMPATIBILITY ***
205. 7/17/93 Changed "uplevel" and "upvar" so that they can be used
from global level to global level: this used to generate an error.
206. 7/19/93 Renamed "setenv", "putenv", and "unsetenv" procedures
to avoid conflicts with system procedures with the same names. If
you want Tcl's procedures to override the system procedures, do it
in the Makefile (instructions are in the Makefile).
*** POTENTIAL INCOMPATIBILITY ***
----------------- Released version 7.0 Beta 2, 7/21/93 ------------------
207. 7/21/93 Fixed bug in tclVar.c where freed memory was accidentally
used if a procedure returned an element of a local array.
208. 7/22/93 Fixed bug in "unknown" where it didn't properly handle
errors occurring in the "auto_load" procedure, leaving its state
inconsistent.
209. 7/23/93 Changed exec's ">2" redirection operator to "2>" for
consistency with sh. This is incompatible with earlier beta releases
of 7.0 but not with pre-7.0 releases, which didn't support either
operator.
210. 7/28/93 Changed backslash-newline handling so that the resulting
space character *is* treated as a word separator unless the backslash
sequence is in quotes or braces. This is incompatible with 7.0b1
and 7.0b2 but is more compatible with pre-7.0 versions that the b1
and b2 releases were.
211. 7/28/93 Eliminated Tcl_LinkedVarWritable, added TCL_LINK_READ_ONLY to
Tcl_LinkVar to accomplish same purpose. This change is incompatible
with earlier beta releases, but not with releases before Tcl 7.0.
212. 7/29/93 Renamed regexp C functions so they won't clash with POSIX
regexp functions that use the same name.
213. 8/3/93 Added "-errorinfo" and "-errorcode" options to "return"
command: these allow for much better handling of the errorInfo
and errorCode variables in some cases.
214. 8/12/93 Changed "expr" so that % always returns a remainder with
the same sign as the divisor and absolute value smaller than the
divisor.
215. 8/14/93 Turned off auto-exec in "unknown" unless the command
was typed interactively. This means you must use "exec" when
invoking subprocesses, unless it's a command that's typed interactively.
*** POTENTIAL INCOMPATIBILITY ***
216. 8/14/93 Added support for tcl_prompt1 and tcl_prompt2 variables
to tclMain.c: makes prompts user-settable.
217. 8/14/93 Added asynchronous handlers (Tcl_AsyncCreate etc.) so
that signals can be taken cleanly by Tcl applications.
218. 8/16/93 Moved information about open files from the interpreter
structure to global variables so that a file can be opened in one
interpreter and read or written in another.
219. 8/16/93 Removed ENV_FLAGS from Makefile, so that there's no
official support for overriding setenv, unsetenv, and putenv.
220. 8/20/93 Various configuration improvements: coerce chars
to unsigned chars before using macros like isspace; source ~/.tclshrc
file during initialization if it exists and program is running
interactively; allow there to be directories in auto_path that don't
exist or don't have tclIndex files (ignore them); added Tcl_Init
procedure and changed Tcl_AppInit to call it.
221. 8/21/93 Fixed bug in expr where "+", "-", and " " were all
getting treated as integers with value 0.
222. 8/26/93 Added "tcl_interactive" variable to tclsh.
223. 8/27/93 Added procedure Tcl_FilePermissions to return whether a
given file can be read or written or both. Modified Tcl_EnterFile
to take a permissions mask rather than separate read and write arguments.
224. 8/28/93 Fixed performance bug in "glob" command (unnecessary call
to "access" for each file caused a 5-10x slow-down for big directories).
----------------- Released version 7.0 Beta 3, 8/28/93 ------------------
225. 9/9/93 Renamed regexp.h to tclRegexp.h to avoid conflicts with system
include file by same name.
226. 9/9/93 Added Tcl_DontCallWhenDeleted.
227. 9/16/93 Changed not to call exit C procedure directly; instead
always invoke "exit" Tcl command so that application can redefine the
command to do additional cleanup.
228. 9/17/93 Changed auto-exec to handle names that contain slashes
(i.e. don't use PATH for them).
229. 9/23/93 Fixed bug in "read" and "gets" commands where they didn't
clear EOF conditions.
----------------- Released version 7.0, 9/29/93 ------------------
230. 10/7/93 "Scan" command wasn't properly aligning things in memory,
so segmentation faults could arise under some circumstances.
231. 10/7/93 Fixed bug in Tcl_ConvertElement where it forgot to
backslash leading curly brace when creating lists.
232. 10/7/93 Eliminated dependency of tclMain.c on tclInt.h and
tclUnix.h, so that people can copy the file out of the Tcl source
directory to make modified private versions.
233. 10/8/93 Fixed bug in auto-loader that reversed the priority order
of entries in auto_path for new-style index files. Now things are
back to the way they were before 3.0: first in auto_path is always
highest priority.
234. 10/13/93 Fixed bug where Tcl_CommandComplete didn't recognize
comments and treat them as such. Thus if you typed the line
# {
interactively, Tcl would think that the command wasn't complete and
wait for more input before evaluating the script.
235. 10/14/93 Fixed bug where "regsub" didn't set the output variable
if the input string was empty.
236. 10/23/93 Fixed bug where Tcl_CreatePipeline didn't close off enough
file descriptors in child processes, causing children not to exit
properly in some cases.
237. 10/28/93 Changed "list" and "concat" commands not to generate
errors if given zero arguments, but instead to just return an empty
string.
----------------- Released version 7.1, 11/4/93 ------------------
Note: there is no 7.2 release. It was flawed and was thus withdrawn
shortly after it was released.
238. 11/10/93 TclMain.c didn't compile on some systems because of
R_OK in call to "access". Changed to eliminate call to "access".
----------------- Released version 7.3, 11/26/93 ------------------

View File

@ -1,37 +0,0 @@
/*
* dirent.h --
*
* This file is a replacement for <dirent.h> in systems that
* support the old BSD-style <sys/dir.h> with a "struct direct".
*
* Copyright (c) 1991 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* $Header: /user6/ouster/tcl/compat/RCS/dirent.h,v 1.2 93/03/19 15:25:03 ouster Exp $ SPRITE (Berkeley)
*/
#ifndef _DIRENT
#define _DIRENT
#include <sys/dir.h>
#define dirent direct
#endif /* _DIRENT */

View File

@ -1,30 +0,0 @@
/*
* float.h --
*
* This is a dummy header file to #include in Tcl when there
* is no float.h in /usr/include. Right now this file is empty:
* Tcl contains #ifdefs to deal with the lack of definitions;
* all it needs is for the #include statement to work.
*
* Copyright (c) 1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* $Header: /user6/ouster/tcl/compat/RCS/float.h,v 1.1 93/04/15 16:10:39 ouster Exp $ SPRITE (Berkeley)
*/

View File

@ -1,63 +0,0 @@
/*
* getcwd.c --
*
* This file provides an implementation of the getcwd procedure
* that uses getwd, for systems with getwd but without getcwd.
*
* Copyright (c) 1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef lint
static char rcsid[] = "$Header: /user6/ouster/tcl/compat/RCS/getcwd.c,v 1.2 93/07/12 14:00:59 ouster Exp $ SPRITE (Berkeley)";
#endif /* not lint */
#include "tclInt.h"
#include "tclUnix.h"
extern char *getwd _ANSI_ARGS_((char *pathname));
char *
getcwd(buf, size)
char *buf; /* Where to put path for current directory. */
size_t size; /* Number of bytes at buf. */
{
char realBuffer[MAXPATHLEN+1];
int length;
if (getwd(realBuffer) == NULL) {
/*
* There's not much we can do besides guess at an errno to
* use for the result (the error message in realBuffer isn't
* much use...).
*/
errno = EACCES;
return NULL;
}
length = strlen(realBuffer);
if (length >= size) {
errno = ERANGE;
return NULL;
}
strcpy(buf, realBuffer);
return buf;
}

View File

@ -1,34 +0,0 @@
/*
* limits.h --
*
* This is a dummy header file to #include in Tcl when there
* is no limits.h in /usr/include. There are only a few
* definitions here; also see tclUnix.h, which already
* #defines some of the things here if they're not arleady
* defined.
*
* Copyright (c) 1991 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* $Header: /user6/ouster/tcl/compat/RCS/limits.h,v 1.3 93/04/08 16:03:59 ouster Exp $ SPRITE (Berkeley)
*/
#define LONG_MIN 0x80000000
#define LONG_MAX 0x7fffffff

View File

@ -1,484 +0,0 @@
/*
* strerror.c --
*
* Source code for the "strerror" library routine.
*
* Copyright (c) 1991-1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef lint
static char rcsid[] = "$Header: /user6/ouster/tcl/compat/RCS/strerror.c,v 1.8 93/10/28 16:32:16 ouster Exp $ SPRITE (Berkeley)";
#endif /* not lint */
#include "tclInt.h"
#include "tclUnix.h"
extern int sys_nerr;
extern char *sys_errlist[];
/*
*----------------------------------------------------------------------
*
* strerror --
*
* Map an integer error number into a printable string.
*
* Results:
* The return value is a pointer to a string describing
* error. The first character of string isn't capitalized.
*
* Side effects:
* Each call to this procedure may overwrite the value returned
* by the previous call.
*
*----------------------------------------------------------------------
*/
char *
strerror(error)
int error; /* Integer identifying error (must be
* one of the officially-defined Sprite
* errors, as defined in errno.h). */
{
static char msg[50];
#ifndef NO_SYS_ERRLIST
if ((error <= sys_nerr) && (error > 0)) {
return sys_errlist[error];
}
#else
switch (error) {
#ifdef E2BIG
case E2BIG: return "argument list too long";
#endif
#ifdef EACCES
case EACCES: return "permission denied";
#endif
#ifdef EADDRINUSE
case EADDRINUSE: return "address already in use";
#endif
#ifdef EADDRNOTAVAIL
case EADDRNOTAVAIL: return "can't assign requested address";
#endif
#ifdef EADV
case EADV: return "advertise error";
#endif
#ifdef EAFNOSUPPORT
case EAFNOSUPPORT: return "address family not supported by protocol family";
#endif
#ifdef EAGAIN
case EAGAIN: return "no more processes";
#endif
#ifdef EALIGN
case EALIGN: return "EALIGN";
#endif
#ifdef EALREADY
case EALREADY: return "operation already in progress";
#endif
#ifdef EBADE
case EBADE: return "bad exchange descriptor";
#endif
#ifdef EBADF
case EBADF: return "bad file number";
#endif
#ifdef EBADFD
case EBADFD: return "file descriptor in bad state";
#endif
#ifdef EBADMSG
case EBADMSG: return "not a data message";
#endif
#ifdef EBADR
case EBADR: return "bad request descriptor";
#endif
#ifdef EBADRPC
case EBADRPC: return "RPC structure is bad";
#endif
#ifdef EBADRQC
case EBADRQC: return "bad request code";
#endif
#ifdef EBADSLT
case EBADSLT: return "invalid slot";
#endif
#ifdef EBFONT
case EBFONT: return "bad font file format";
#endif
#ifdef EBUSY
case EBUSY: return "mount device busy";
#endif
#ifdef ECHILD
case ECHILD: return "no children";
#endif
#ifdef ECHRNG
case ECHRNG: return "channel number out of range";
#endif
#ifdef ECOMM
case ECOMM: return "communication error on send";
#endif
#ifdef ECONNABORTED
case ECONNABORTED: return "software caused connection abort";
#endif
#ifdef ECONNREFUSED
case ECONNREFUSED: return "connection refused";
#endif
#ifdef ECONNRESET
case ECONNRESET: return "connection reset by peer";
#endif
#if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
case EDEADLK: return "resource deadlock avoided";
#endif
#ifdef EDEADLOCK
case EDEADLOCK: return "resource deadlock avoided";
#endif
#ifdef EDESTADDRREQ
case EDESTADDRREQ: return "destination address required";
#endif
#ifdef EDIRTY
case EDIRTY: return "mounting a dirty fs w/o force";
#endif
#ifdef EDOM
case EDOM: return "math argument out of range";
#endif
#ifdef EDOTDOT
case EDOTDOT: return "cross mount point";
#endif
#ifdef EDQUOT
case EDQUOT: return "disk quota exceeded";
#endif
#ifdef EDUPPKG
case EDUPPKG: return "duplicate package name";
#endif
#ifdef EEXIST
case EEXIST: return "file already exists";
#endif
#ifdef EFAULT
case EFAULT: return "bad address in system call argument";
#endif
#ifdef EFBIG
case EFBIG: return "file too large";
#endif
#ifdef EHOSTDOWN
case EHOSTDOWN: return "host is down";
#endif
#ifdef EHOSTUNREACH
case EHOSTUNREACH: return "host is unreachable";
#endif
#ifdef EIDRM
case EIDRM: return "identifier removed";
#endif
#ifdef EINIT
case EINIT: return "initialization error";
#endif
#ifdef EINPROGRESS
case EINPROGRESS: return "operation now in progress";
#endif
#ifdef EINTR
case EINTR: return "interrupted system call";
#endif
#ifdef EINVAL
case EINVAL: return "invalid argument";
#endif
#ifdef EIO
case EIO: return "I/O error";
#endif
#ifdef EISCONN
case EISCONN: return "socket is already connected";
#endif
#ifdef EISDIR
case EISDIR: return "illegal operation on a directory";
#endif
#ifdef EISNAME
case EISNAM: return "is a name file";
#endif
#ifdef ELBIN
case ELBIN: return "ELBIN";
#endif
#ifdef EL2HLT
case EL2HLT: return "level 2 halted";
#endif
#ifdef EL2NSYNC
case EL2NSYNC: return "level 2 not synchronized";
#endif
#ifdef EL3HLT
case EL3HLT: return "level 3 halted";
#endif
#ifdef EL3RST
case EL3RST: return "level 3 reset";
#endif
#ifdef ELIBACC
case ELIBACC: return "can not access a needed shared library";
#endif
#ifdef ELIBBAD
case ELIBBAD: return "accessing a corrupted shared library";
#endif
#ifdef ELIBEXEC
case ELIBEXEC: return "can not exec a shared library directly";
#endif
#ifdef ELIBMAX
case ELIBMAX: return
"attempting to link in more shared libraries than system limit";
#endif
#ifdef ELIBSCN
case ELIBSCN: return ".lib section in a.out corrupted";
#endif
#ifdef ELNRNG
case ELNRNG: return "link number out of range";
#endif
#ifdef ELOOP
case ELOOP: return "too many levels of symbolic links";
#endif
#ifdef EMFILE
case EMFILE: return "too many open files";
#endif
#ifdef EMLINK
case EMLINK: return "too many links";
#endif
#ifdef EMSGSIZE
case EMSGSIZE: return "message too long";
#endif
#ifdef EMULTIHOP
case EMULTIHOP: return "multihop attempted";
#endif
#ifdef ENAMETOOLONG
case ENAMETOOLONG: return "file name too long";
#endif
#ifdef ENAVAIL
case ENAVAIL: return "not available";
#endif
#ifdef ENET
case ENET: return "ENET";
#endif
#ifdef ENETDOWN
case ENETDOWN: return "network is down";
#endif
#ifdef ENETRESET
case ENETRESET: return "network dropped connection on reset";
#endif
#ifdef ENETUNREACH
case ENETUNREACH: return "network is unreachable";
#endif
#ifdef ENFILE
case ENFILE: return "file table overflow";
#endif
#ifdef ENOANO
case ENOANO: return "anode table overflow";
#endif
#if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
case ENOBUFS: return "no buffer space available";
#endif
#ifdef ENOCSI
case ENOCSI: return "no CSI structure available";
#endif
#ifdef ENODATA
case ENODATA: return "no data available";
#endif
#ifdef ENODEV
case ENODEV: return "no such device";
#endif
#ifdef ENOENT
case ENOENT: return "no such file or directory";
#endif
#ifdef ENOEXEC
case ENOEXEC: return "exec format error";
#endif
#ifdef ENOLCK
case ENOLCK: return "no locks available";
#endif
#ifdef ENOLINK
case ENOLINK: return "link has be severed";
#endif
#ifdef ENOMEM
case ENOMEM: return "not enough memory";
#endif
#ifdef ENOMSG
case ENOMSG: return "no message of desired type";
#endif
#ifdef ENONET
case ENONET: return "machine is not on the network";
#endif
#ifdef ENOPKG
case ENOPKG: return "package not installed";
#endif
#ifdef ENOPROTOOPT
case ENOPROTOOPT: return "bad proocol option";
#endif
#ifdef ENOSPC
case ENOSPC: return "no space left on device";
#endif
#ifdef ENOSR
case ENOSR: return "out of stream resources";
#endif
#ifdef ENOSTR
case ENOSTR: return "not a stream device";
#endif
#ifdef ENOSYM
case ENOSYM: return "unresolved symbol name";
#endif
#ifdef ENOSYS
case ENOSYS: return "function not implemented";
#endif
#ifdef ENOTBLK
case ENOTBLK: return "block device required";
#endif
#ifdef ENOTCONN
case ENOTCONN: return "socket is not connected";
#endif
#ifdef ENOTDIR
case ENOTDIR: return "not a directory";
#endif
#ifdef ENOTEMPTY
case ENOTEMPTY: return "directory not empty";
#endif
#ifdef ENOTNAM
case ENOTNAM: return "not a name file";
#endif
#ifdef ENOTSOCK
case ENOTSOCK: return "socket operation on non-socket";
#endif
#ifdef ENOTTY
case ENOTTY: return "inappropriate device for ioctl";
#endif
#ifdef ENOTUNIQ
case ENOTUNIQ: return "name not unique on network";
#endif
#ifdef ENXIO
case ENXIO: return "no such device or address";
#endif
#ifdef EOPNOTSUPP
case EOPNOTSUPP: return "operation not supported on socket";
#endif
#ifdef EPERM
case EPERM: return "not owner";
#endif
#ifdef EPFNOSUPPORT
case EPFNOSUPPORT: return "protocol family not supported";
#endif
#ifdef EPIPE
case EPIPE: return "broken pipe";
#endif
#ifdef EPROCLIM
case EPROCLIM: return "too many processes";
#endif
#ifdef EPROCUNAVAIL
case EPROCUNAVAIL: return "bad procedure for program";
#endif
#ifdef EPROGMISMATCH
case EPROGMISMATCH: return "program version wrong";
#endif
#ifdef EPROGUNAVAIL
case EPROGUNAVAIL: return "RPC program not available";
#endif
#ifdef EPROTO
case EPROTO: return "protocol error";
#endif
#ifdef EPROTONOSUPPORT
case EPROTONOSUPPORT: return "protocol not suppored";
#endif
#ifdef EPROTOTYPE
case EPROTOTYPE: return "protocol wrong type for socket";
#endif
#ifdef ERANGE
case ERANGE: return "math result unrepresentable";
#endif
#if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
case EREFUSED: return "EREFUSED";
#endif
#ifdef EREMCHG
case EREMCHG: return "remote address changed";
#endif
#ifdef EREMDEV
case EREMDEV: return "remote device";
#endif
#ifdef EREMOTE
case EREMOTE: return "pathname hit remote file system";
#endif
#ifdef EREMOTEIO
case EREMOTEIO: return "remote i/o error";
#endif
#ifdef EREMOTERELEASE
case EREMOTERELEASE: return "EREMOTERELEASE";
#endif
#ifdef EROFS
case EROFS: return "read-only file system";
#endif
#ifdef ERPCMISMATCH
case ERPCMISMATCH: return "RPC version is wrong";
#endif
#ifdef ERREMOTE
case ERREMOTE: return "object is remote";
#endif
#ifdef ESHUTDOWN
case ESHUTDOWN: return "can't send afer socket shutdown";
#endif
#ifdef ESOCKTNOSUPPORT
case ESOCKTNOSUPPORT: return "socket type not supported";
#endif
#ifdef ESPIPE
case ESPIPE: return "invalid seek";
#endif
#ifdef ESRCH
case ESRCH: return "no such process";
#endif
#ifdef ESRMNT
case ESRMNT: return "srmount error";
#endif
#ifdef ESTALE
case ESTALE: return "stale remote file handle";
#endif
#ifdef ESUCCESS
case ESUCCESS: return "Error 0";
#endif
#ifdef ETIME
case ETIME: return "timer expired";
#endif
#ifdef ETIMEDOUT
case ETIMEDOUT: return "connection timed out";
#endif
#ifdef ETOOMANYREFS
case ETOOMANYREFS: return "too many references: can't splice";
#endif
#ifdef ETXTBSY
case ETXTBSY: return "text file or pseudo-device busy";
#endif
#ifdef EUCLEAN
case EUCLEAN: return "structure needs cleaning";
#endif
#ifdef EUNATCH
case EUNATCH: return "protocol driver not attached";
#endif
#ifdef EUSERS
case EUSERS: return "too many users";
#endif
#ifdef EVERSION
case EVERSION: return "version mismatch";
#endif
#if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
case EWOULDBLOCK: return "operation would block";
#endif
#ifdef EXDEV
case EXDEV: return "cross-domain link";
#endif
#ifdef EXFULL
case EXFULL: return "message tables full";
#endif
}
#endif /* ! NO_SYS_ERRLIST */
sprintf(msg, "unknown error (%d)", error);
return msg;
}

1015
tcl7.3/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,182 +0,0 @@
dnl This file is an input file used by the GNU "autoconf" program to
dnl generate the file "configure", which is run during Tcl installation
dnl to configure the system for the local environment.
AC_INIT(tcl.h)
AC_PROG_INSTALL
AC_PROG_RANLIB
CC=${CC-cc}
AC_SUBST(CC)
#--------------------------------------------------------------------
# Supply substitutes for missing POSIX library procedures, or
# set flags so Tcl uses alternate procedures.
#--------------------------------------------------------------------
AC_REPLACE_FUNCS(getcwd opendir strerror strstr)
AC_REPLACE_FUNCS(strtol tmpnam waitpid)
AC_FUNC_CHECK(gettimeofday, , AC_DEFINE(NO_GETTOD))
AC_FUNC_CHECK(getwd, , AC_DEFINE(NO_GETWD))
AC_FUNC_CHECK(wait3, , AC_DEFINE(NO_WAIT3))
#--------------------------------------------------------------------
# Supply substitutes for missing POSIX header files. Special
# notes:
# - Sprite's dirent.h exists but is bogus.
# - stdlib.h doesn't define strtol, strtoul, or
# strtod insome versions of SunOS
# - some versions of string.h don't declare procedures such
# as strstr
#--------------------------------------------------------------------
AC_UNISTD_H
AC_COMPILE_CHECK(dirent.h, [#include <sys/types.h>
#include <dirent.h>], [
DIR *d;
struct dirent *entryPtr;
char *p;
d = opendir("foobar");
entryPtr = readdir(d);
p = entryPtr->d_name;
closedir(d);
], tcl_ok=1, tcl_ok=0)
AC_HEADER_EGREP([Sprite version.* NOT POSIX], tcl_ok=0)
if test $tcl_ok = 0; then
AC_DEFINE(NO_DIRENT_H)
fi
AC_HEADER_CHECK(errno.h, , AC_DEFINE(NO_ERRNO_H))
AC_HEADER_CHECK(float.h, , AC_DEFINE(NO_FLOAT_H))
AC_HEADER_CHECK(limits.h, , AC_DEFINE(NO_LIMITS_H))
AC_HEADER_CHECK(stdlib.h, tcl_ok=1, tcl_ok=0)
AC_HEADER_EGREP(strtol, stdlib.h, , tcl_ok=0)
AC_HEADER_EGREP(strtoul, stdlib.h, , tcl_ok=0)
AC_HEADER_EGREP(strtod, stdlib.h, , tcl_ok=0)
if test $tcl_ok = 0; then
AC_DEFINE(NO_STDLIB_H)
fi
AC_HEADER_CHECK(string.h, tcl_ok=1, tcl_ok=0)
AC_HEADER_EGREP(strstr, string.h, , tcl_ok=0)
AC_HEADER_EGREP(strerror, string.h, , tcl_ok=0)
if test $tcl_ok = 0; then
AC_DEFINE(NO_STRING_H)
fi
AC_HEADER_CHECK(sys/time.h, , AC_DEFINE(NO_SYS_TIME_H))
AC_HEADER_CHECK(sys/wait.h, , AC_DEFINE(NO_SYS_WAIT_H))
#--------------------------------------------------------------------
# On some systems strstr is broken: it returns a pointer even
# even if the original string is empty.
#--------------------------------------------------------------------
AC_TEST_PROGRAM([
extern int strstr();
int main()
{
exit(strstr("\0test", "test") ? 1 : 0);
}
], , [LIBOBJS="$LIBOBJS strstr.o"])
#--------------------------------------------------------------------
# Check for strtoul function. This is tricky because under some
# versions of AIX strtoul returns an incorrect terminator
# pointer for the string "0".
#--------------------------------------------------------------------
AC_FUNC_CHECK(strtoul, tcl_ok=1, tcl_ok=0)
AC_TEST_PROGRAM([
extern int strtoul();
int main()
{
char *string = "0";
char *term;
int value;
value = strtoul(string, &term, 0);
if ((value != 0) || (term != (string+1))) {
exit(1);
}
exit(0);
}], , tcl_ok=0)
if test $tcl_ok = 0; then
LIBOBJS="$LIBOBJS strtoul.o"
fi
#--------------------------------------------------------------------
# Check for the strtod function. This is tricky because under
# some versions of Linux it mis-parses the string "+".
#--------------------------------------------------------------------
AC_FUNC_CHECK(strtod, tcl_ok=1, tcl_ok=0)
AC_TEST_PROGRAM([
extern double strtod();
int main()
{
char *string = "+";
char *term;
double value;
value = strtod(string, &term);
if (term != string) {
exit(1);
}
exit(0);
}], , tcl_ok=0)
if test $tcl_ok = 0; then
LIBOBJS="$LIBOBJS strtod.o"
fi
#--------------------------------------------------------------------
# Check for various typedefs and provide substitutes if
# they don't exist.
#--------------------------------------------------------------------
AC_MODE_T
AC_PID_T
AC_SIZE_T
AC_UID_T
#--------------------------------------------------------------------
# If a system doesn't have an opendir function (man, that's old!)
# then we have to supply a different version of dirent.h which
# is compatible with the substitute version of opendir that's
# provided. This version only works with V7-style directories.
#--------------------------------------------------------------------
AC_FUNC_CHECK(opendir, , AC_DEFINE(USE_DIRENT2_H))
#--------------------------------------------------------------------
# Check for the existence of sys_errlist (this is only needed if
# there's no strerror, but I don't know how to conditionalize the
# check).
#--------------------------------------------------------------------
AC_COMPILE_CHECK(sys_errlist, , [
extern char *sys_errlist[];
extern int sys_nerr;
sys_errlist[sys_nerr-1][0] = 0;
], , AC_DEFINE(NO_SYS_ERRLIST))
#--------------------------------------------------------------------
# The check below checks whether <sys/wait.h> defines the type
# "union wait" correctly. It's needed because of weirdness in
# HP-UX where "union wait" is defined in both the BSD and SYS-V
# environments. Checking the usability of WIFEXITED seems to do
# the trick.
#--------------------------------------------------------------------
AC_COMPILE_CHECK([union wait], [#include <sys/types.h>
#include <sys/wait.h>], [
union wait x;
WIFEXITED(x); /* Generates compiler error if WIFEXITED
* uses an int. */
], , AC_DEFINE(NO_UNION_WAIT))
#--------------------------------------------------------------------
# Check to see whether the system supports the matherr function
# and its associated type "struct exception".
#--------------------------------------------------------------------
AC_COMPILE_CHECK([matherr support], [#include <math.h>], [
struct exception x;
x.type = DOMAIN;
x.type = SING;
], [LIBOBJS="$LIBOBJS tclMtherr.o"; AC_DEFINE(NEED_MATHERR)])
AC_OUTPUT(Makefile)

View File

@ -1,81 +0,0 @@
This file provides more information about the "configure" script
and how you can personalize it for your local environment.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation, and
creates the Makefile. It also creates a file `config.status'
that you can run in the future to recreate the current configuration.
Running `configure' takes a minute or two. While it is running, it
prints some messages that tell what it is doing. If you don't want to
see the messages, run `configure' with its standard output redirected
to `/dev/null'; for example, `./configure >/dev/null'.
To compile the package in a different directory from the one
containing the source code, you must use a version of make that
supports the VPATH variable, such as GNU make. `cd' to the directory
where you want the object files and executables to go and run
`configure'. `configure' automatically checks for the source code in
the directory that `configure' is in and in `..'. If for some reason
`configure' is not in the source code directory that you are
configuring, then it will report that it can't find the source code.
In that case, run `configure' with the option `--srcdir=DIR', where
DIR is the directory that contains the source code.
By default, `make install' will install the package's files in
/usr/local/bin, /usr/local/lib, /usr/local/man, etc. You can specify
an installation prefix other than /usr/local by giving `configure' the
option `--prefix=PATH'. Alternately, you can do so by giving a value
for the `prefix' variable when you run `make', e.g.,
make prefix=/usr/gnu
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If
you give `configure' the option `--exec_prefix=PATH' or set the
`make' variable `exec_prefix' to PATH, the package will use PATH as
the prefix for installing programs and libraries. Data files and
documentation will still use the regular prefix. Normally, all files
are installed using the regular prefix.
You can tell `configure' to figure out the configuration for your
system, and record it in `config.status', without actually configuring
the package (creating `Makefile's and perhaps a configuration header
file). To do this, give `configure' the `--no-create' option. Later,
you can run `./config.status' to actually configure the package. This
option is useful mainly in `Makefile' rules for updating `config.status'
and `Makefile'. You can also give `config.status' the `--recheck'
option, which makes it re-run `configure' with the same arguments you
used before. This is useful if you change `configure'.
`configure' ignores any other arguments that you give it.
If your system requires unusual options for compilation or linking
that `configure' doesn't know about, you can give `configure' initial
values for some variables by setting them in the environment. In
Bourne-compatible shells, you can do that on the command line like
this:
CC='gcc -traditional' DEFS=-D_POSIX_SOURCE ./configure
The `make' variables that you might want to override with environment
variables when running `configure' are:
(For these variables, any value given in the environment overrides the
value that `configure' would choose:)
CC C compiler program.
Default is `cc', or `gcc' if `gcc' is in your PATH.
INSTALL Program to use to install files.
Default is `install' if you have it, `cp' otherwise.
(For these variables, any value given in the environment is added to
the value that `configure' chooses:)
DEFS Configuration options, in the form `-Dfoo -Dbar ...'
LIBS Libraries to link with, in the form `-lfoo -lbar ...'
If you need to do unusual things to compile the package, we encourage
you to figure out how `configure' could check whether to do them, and
mail diffs or instructions to the address given in the README so we
can include them in the next release.
The file `configure.in' is used as a template to create `configure' by
a program called `autoconf'. You will only need it if you want to
regenerate `configure' using a newer version of `autoconf'.

View File

@ -1,68 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/AppInit.3,v 1.2 93/06/07 15:11:46 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_AppInit tclc 7.0
.BS
.SH NAME
Tcl_AppInit \- Perform application-specific initialization
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
\fBTcl_AppInit\fR(\fIinterp\fR)
.SH ARGUMENTS
.AS Tcl_Interp *interp
.AP Tcl_Interp *interp in
Interpreter for the application.
.BE
.SH DESCRIPTION
.PP
\fBTcl_AppInit\fR is a procedure that is invoked by the main programs
for Tcl applications such as \fBtclsh\fR and \fBwish\fR.
Its purpose is to allow new Tcl applications to be created without
modifying existing main programs such as those for \fBtclsh\fR
and \fBwish\fR.
To create a new application simply write a new version of
\fBTcl_AppInit\fR to replace the default version provided by Tcl,
then link your new \fBTcl_AppInit\fR with the Tcl library, which
contains the main program from \fBtclsh\fR (be sure to specify the
switch ``\fB\-u _main\fR'' to the linker to force it to use the
version of \fBmain\fR from the Tcl library).
.PP
\fBTcl_AppInit\fR is invoked after other initialization in
\fBmain\fR and before entering the main loop to process commands.
Here are some examples of things that \fBTcl_AppInit\fR might do:
.IP [1]
Call initialization procedures for various packages used by
the application.
Each initialization procedure adds new commands to \fIinterp\fR
for its package and performs other package-specific initialization.
.IP [2]
Process command-line arguments, which can be accessed from the
Tcl variables \fBargv\fR and \fBargv0\fR in \fIinterp\fR.
.IP [3]
Invoke a startup script to initialize the application.
.SH KEYWORDS
application, argument, command, initialization, interpreter

View File

@ -1,58 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/Backslash.3,v 1.12 93/04/01 09:25:22 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_Backslash tclc
.BS
.SH NAME
Tcl_Backslash \- parse a backslash sequence
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
char
\fBTcl_Backslash\fR(\fIsrc, countPtr\fR)
.SH ARGUMENTS
.AS char *countPtr
.AP char *src in
Pointer to a string starting with a backslash.
.AP int *countPtr out
If \fIcountPtr\fR isn't NULL, \fI*countPtr\fR gets filled
in with number of characters in the backslash sequence, including
the backslash character.
.BE
.SH DESCRIPTION
.PP
This is a utility procedure used by several of the Tcl
commands. It parses a backslash sequence and returns
the single character corresponding to the sequence.
\fBTcl_Backslash\fR modifies \fI*countPtr\fR to contain the number
of characters in the backslash sequence.
.PP
See the Tcl manual entry for information on the valid
backslash sequences.
All of the sequences described in the Tcl
manual entry are supported by \fBTcl_Backslash\fR.
.SH KEYWORDS
backslash, parse

View File

@ -1,49 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/CmdCmplt.3,v 1.1 93/04/05 10:04:55 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_CmdComplete tclc
.BS
.SH NAME
Tcl_CmdComplete \- Check for unmatched braces in a Tcl command
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
int
\fBTcl_CommandComplete\fR(\fIcmd\fR)
.SH ARGUMENTS
.AS char *cmd
.AP char *cmd in
Command string to test for completeness.
.BE
.SH DESCRIPTION
.PP
\fBTcl_CommandComplete\fR takes a Tcl command string
as argument and determines whether it contains one or more
complete commands (i.e. there are no unclosed quotes, braces,
brackets, or variable references).
If the command string is complete then it returns 1; otherwise it returns 0.
.SH KEYWORDS
complete command, partial command

View File

@ -1,61 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/CrtInterp.3,v 1.7 93/04/01 09:25:24 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_CreateInterp tclc
.BS
.SH NAME
Tcl_CreateInterp, Tcl_DeleteInterp \- create and delete Tcl command interpreters
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
Tcl_Interp *
\fBTcl_CreateInterp\fR()
.sp
\fBTcl_DeleteInterp\fR(\fIinterp\fR)
.SH ARGUMENTS
.AS Tcl_Interp *interp
.AP Tcl_Interp *interp in
Token for interpreter to be destroyed.
.BE
.SH DESCRIPTION
.PP
\fBTcl_CreateInterp\fR creates a new interpreter structure and returns
a token for it. The token is required in calls to most other Tcl
procedures, such as \fBTcl_CreateCommand\fR, \fBTcl_Eval\fR, and
\fBTcl_DeleteInterp\fR.
Clients are only allowed to access a few of the fields of
Tcl_Interp structures; see the Tcl_Interp
and \fBTcl_CreateCommand\fR man pages for details.
The new interpreter is initialized with no defined variables and only
the built-in Tcl commands. To bind in additional commands, call
\fBTcl_CreateCommand\fR.
.PP
\fBTcl_DeleteInterp\fR destroys a command interpreter and releases all of
the resources associated with it, including variables, procedures,
and application-specific command bindings. After \fBTcl_DeleteInterp\fR
returns the caller should never again use the \fIinterp\fR token.
.SH KEYWORDS
command, create, delete, interpreter

View File

@ -1,114 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/CrtPipelin.3,v 1.7 93/04/09 11:53:47 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_CreatePipeline tclc
.BS
.SH NAME
Tcl_CreatePipeline \- create one or more child processes, with I/O redirection
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
int
\fBTcl_CreatePipeline\fR(\fIinterp, argc, argv, pidArrayPtr, inPipePtr, outPipePtr, errFilePtr\fR)
.SH ARGUMENTS
.AS Tcl_Interp **pidArrayPtr
.AP Tcl_Interp *interp in
Interpreter to use for error reporting.
.AP int argc in
Number of strings in \fIargv\fR array.
.AP char **argv in
Array of strings describing command(s) and I/O redirection.
.AP int **pidArrayPtr out
The value at \fI*pidArrayPtr\fR is modified to hold a pointer to
an array of process identifiers. The array is dynamically
allocated and must be freed by the caller.
.AP int *inPipePtr out
If this argument is NULL then standard input for the first command
in the pipeline comes from the current standard input.
If \fIinPipePtr\fR is not NULL then \fBTcl_CreatePipeline\fR will
create a pipe, arrange for it to be used for standard input
to the first command,
and store a file id for writing to that pipe at \fI*inPipePtr\fR.
If the command specified its own input using redirection, then
no pipe is created and -1 is stored at \fI*inPipePtr\fR.
.AP int *outPipePtr out
If this argument is NULL then standard output for the last command
in the pipeline goes to the current standard output.
If \fIoutPipePtr\fR is not NULL then \fBTcl_CreatePipeline\fR will
create a pipe, arrange for it to be used for standard output from
the last command, and store a file id for reading from that
pipe at \fI*outPipePtr\fR.
If the command specified its own output using redirection then
no pipe is created and -1 is stored at \fI*outPipePtr\fR.
.AP int *errFilePtr out
If this argument is NULL then error output for all the commands
in the pipeline will go to the current standard error file.
If \fIerrFilePtr\fR is not NULL, error output from all the commands
in the pipeline will go to a temporary file created by
\fBTcl_CreatePipeline\fR.
A file id to read from that file will be stored at \fI*errFilePtr\fR.
The file will already have been removed, so closing the file
descriptor at \fI*errFilePtr\fR will cause the file to be flushed
completely.
.BE
.SH DESCRIPTION
.PP
\fBTcl_CreatePipeline\fR processes the \fIargv\fR array and sets
up one or more child processes in a pipeline configuration.
\fBTcl_CreatePipeline\fR handles pipes specified with ``|'',
input redirection specified with ``<'' or ``<<'', and output
redirection specified with ``>''; see the documentation for
the \fBexec\fR command for details on these specifications.
The return value from \fBTcl_CreatePipeline\fR is a count of
the number of child processes created; the process identifiers
for those processes are stored in a \fImalloc\fR-ed array and
a pointer to that array is stored at \fI*pidArrayPtr\fR.
It is the caller's responsibility to free the array when finished
with it.
.PP
If the \fIinPipePtr\fR, \fIoutPipePtr\fR, and \fIerrFilePtr\fR
arguments are NULL then the pipeline's standard input, standard
output, and standard error are taken from the corresponding
streams of the process. Non-NULL values may be specified for
these arguments to use pipes for standard input and standard
output and a file for standard error. \fBTcl_CreatePipeline\fR
will create the requested pipes or file and return file identifiers
that may be used to read or write them. It is the caller's
responsibility to close all of these files when they are no
longer needed. If \fIargv\fR specifies redirection for standard
input or standard output, then pipes will not be created even
if requested by the \fIinPipePtr\fR and \fIoutPipePtr\fR
arguments.
.PP
If an error occurs in \fBTcl_CreatePipeline\fR (e.g. ``|'' or
``<'' was the last argument in \fIargv\fR, or it wasn't possible
to fork off a child), then -1 is returned
and \fIinterp->result\fR is set to an error message.
.SH "SEE ALSO"
\fBTcl_DetachPids\fR, \fBTcl_ReapDetachedProcs\fR
.SH KEYWORDS
background, child, detach, fork, process, status, wait

View File

@ -1,98 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/EnterFile.3,v 1.4 93/08/27 13:20:42 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_EnterFile tclc 7.0
.BS
.SH NAME
Tcl_EnterFile, Tcl_GetOpenFile, Tcl_FilePermissions \- manipulate the table of open files
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
\fBTcl_EnterFile\fR(\fIinterp, file, permissions\fR)
.sp
int
\fBTcl_GetOpenFile\fR(\fIinterp, string, write, checkUsage, filePtr\fR)
.sp
int
\fBTcl_FilePermissions(\fIfile\fR)
.SH ARGUMENTS
.AS Tcl_Interp checkUsage
.AP Tcl_Interp *interp in
Tcl interpreter from which file is to be accessed.
.AP FILE *file in
Handle for file that is to become accessible in \fIinterp\fR.
.AP int permissions in
OR-ed combination of TCL_FILE_READABLE and TCL_FILE_WRITABLE;
indicates whether \fIfile\fR was opened for reading or writing or both.
.AP char *string in
String identifying file, such as \fBstdin\fR or \fBfile4\fR.
.AP int write in
Non-zero means the file will be used for writing, zero means it will
be used for reading.
.AP int checkUsage in
If non-zero, then an error will be generated if the file wasn't opened
for the access indicated by \fIwrite\fR.
.AP FILE **filePtr out
Points to word in which to store pointer to FILE structure for
the file given by \fIstring\fR.
.BE
.SH DESCRIPTION
.PP
These procedures provide access to Tcl's file naming mechanism.
\fBTcl_EnterFile\fR enters an open file into Tcl's file table so
that it can be accessed using Tcl commands like \fBgets\fR,
\fBputs\fR, \fBseek\fR, and \fBclose\fR.
It returns in \fIinterp->result\fR an identifier such as \fBfile4\fR
that can be used to refer to the file in subsequent Tcl commands.
\fBTcl_EnterFile\fR is typically used to implement new Tcl commands
that open sockets, pipes, or other kinds of files not already supported
by the built-in commands.
.PP
\fBTcl_GetOpenFile\fR takes as argument a file identifier of the form
returned by the \fBopen\fR command or \fBTcl_EnterFile\fR and
returns at \fI*filePtr\fR a pointer to the FILE structure for
the file.
The \fIwrite\fR argument indicates whether the FILE pointer will
be used for reading or writing.
In some cases, such as a file that connects to a pipeline of
subprocesses, different FILE pointers will be returned for reading
and writing.
\fBTcl_GetOpenFile\fR normally returns TCL_OK.
If an error occurs in \fBTcl_GetOpenFile\fR (e.g. \fIstring\fR didn't
make any sense or \fIcheckUsage\fR was set and the file wasn't opened
for the access specified by \fIwrite\fR) then TCL_ERROR is returned
and \fIinterp->result\fR will contain an error message.
If \fIcheckUsage\fR is zero and the file wasn't opened for the
access specified by \fIwrite\fR, then the FILE pointer returned
at \fI*filePtr\fR may not correspond to \fIwrite\fR.
.PP
\fBTcl_FilePermissions\fR returns an OR-ed combination of the
mask bits TCL_FILE_READABLE and TCL_FILE_WRITABLE; these indicate
whether the given file was opened for reading or writing or both.
If \fIfile\fR does not refer to a file in Tcl's file table then
\-1 is returned.
.SH KEYWORDS
file table, permissions, pipeline, read, write

View File

@ -1,60 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/RecordEval.3,v 1.9 93/04/16 15:02:27 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_RecordAndEval tclc
.BS
.SH NAME
Tcl_RecordAndEval \- save command on history list before evaluating
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
int
\fBTcl_RecordAndEval\fR(\fIinterp, cmd, eval\fR)
.SH ARGUMENTS
.AS Tcl_Interp *interp;
.AP Tcl_Interp *interp in
Tcl interpreter in which to evaluate command.
.AP char *cmd in
Command (or sequence of commands) to execute.
.AP int eval in
0 means evaluate \fIcmd\fR, TCL_NO_EVAL means record it but don't
evaluate it.
.BE
.SH DESCRIPTION
.PP
\fBTcl_RecordAndEval\fR is invoked to record a command as an event
on the history list and then execute it.
It returns a completion code such as TCL_OK just like \fBTcl_Eval\fR
and it leaves information in \fIinterp->result\fR.
If you don't want the command recorded on the history list then
you should invoke \fBTcl_Eval\fR instead of \fBTcl_RecordAndEval\fR.
Normally \fBTcl_RecordAndEval\fR is only called with top-level
commands typed by the user, since the purpose of history is to
allow the user to re-issue recently-invoked commands.
If the \fIeval\fR argument is TCL_NO_EVAL then the command is
recorded without being evaluated.
.SH KEYWORDS
command, event, execute, history, interpreter, record

View File

@ -1,57 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/RegExp.3,v 1.1 93/05/05 17:06:04 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_RegExpMatch tclc 7.0
.BS
.SH NAME
Tcl_RegExpMatch \- Test whether a string matches a regular expression
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
int
\fBTcl_RegExpMatch\fR(\fIinterp\fR, \fIstring\fR, \fIregexp\fR)
.SH ARGUMENTS
.AS Tcl_Interp *interp
.AP Tcl_Interp *interp in
Tcl interpreter to use for error reporting.
.AP char *string in
String to test.
.AP char *regexp in
Regular expression to match against \fIstring\fR.
.BE
.SH DESCRIPTION
.PP
\fBTcl_RegExpMatch\fR determines whether its \fIstring\fR argument
matches \fIregexp\fR, where \fIregexp\fR is interpreted
as a regular expression using the same rules as for the
\fBregexp\fR Tcl command.
If there is a match then \fBTcl_RegExpMatch\fR returns 1.
If there is no match then \fBTcl_RegExpMatch\fR returns 0.
If an error occurs in the matching process (e.g. \fIregexp\fR
is not a valid regular expression) then \fBTcl_RegExpMatch\fR
returns \-1 and leaves an error message in \fIinterp->result\fR.
.SH KEYWORDS
match, regular expression, string

View File

@ -1,52 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/StrMatch.3,v 1.7 93/04/01 09:25:35 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_StringMatch tclc
.BS
.SH NAME
Tcl_StringMatch \- test whether a string matches a pattern
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
int
\fBTcl_StringMatch\fR(\fIstring\fR, \fIpattern\fR)
.SH ARGUMENTS
.AP char *string in
String to test.
.AP char *pattern in
Pattern to match against string. May contain special
characters from the set *?\e[].
.BE
.SH DESCRIPTION
.PP
This utility procedure determines whether a string matches
a given pattern. If it does, then \fBTcl_StringMatch\fR returns
1. Otherwise \fBTcl_StringMatch\fR returns 0. The algorithm
used for matching is the same algorithm used in the ``string match''
Tcl command and is similar to the algorithm used by the C-shell
for file name matching; see the Tcl manual entry for details.
.SH KEYWORDS
match, pattern, string

View File

@ -1,85 +0,0 @@
'\"
'\" Copyright (c) 1989-1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/TildeSubst.3,v 1.10 93/04/08 14:00:43 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS Tcl_TildeSubst tclc 7.0
.BS
.SH NAME
Tcl_TildeSubst \- replace tilde with home directory in a file name
.SH SYNOPSIS
.nf
\fB#include <tcl.h>\fR
.sp
char *
.VS
\fBTcl_TildeSubst\fR(\fIinterp\fR, \fIname\fR, \fIbufferPtr)
.VE
.SH ARGUMENTS
.AS Tcl_DString *bufferPtr
.AP Tcl_Interp *interp in
Interpreter in which to report an error, if any.
.AP char *name in
File name, which may start with a ``~''.
.AP Tcl_DString *bufferPtr
.VS
If needed, this dynamic string is used to store the new file name.
At the time of the call it should be uninitialized or empty. The
caller must eventually call \fBTcl_DStringFree\fR to free up
anything stored here.
.VE
.BE
.SH DESCRIPTION
.PP
This utility procedure does tilde substition. If \fIname\fR doesn't
start with a ``~'' character, then the procedure returns \fIname\fR.
If \fIname\fR does start with a tilde, then \fBTcl_TildeSubst\fR
returns a new string identical to \fIname\fR except that the first
element of \fIname\fR is replaced with the location of the home
directory for the given user. The substitution is carried out in
the same way that it would be done by \fIcsh\fR. If the tilde is
followed immediately by a slash, then the \fB$HOME\fR environment
variable is substituted. Otherwise the characters between the
tilde and the next slash are taken as a user name, which is
looked up in the password file; the user's home directory is
retrieved from the password file and substituted.
.PP
If
.VS
\fBTcl_TildeSubst\fR has to do tilde substitution then it uses
the dynamic string at \fI*bufferPtr\fR to hold the new string it
generates. After \fBTcl_TildeSubst\fR returns, the caller must
eventually invoke \fBTcl_DStringFree\fR to free up any information
placed in \fI*bufferPtr\fR. The caller need not know whether or
not \fBTcl_TildeSubst\fR actually used the string; \fBTcl_TildeSubst\fR
initializes \fI*bufferPtr\fR even if it doesn't use it, so the call to
\fBTcl_DStringFree\fR will be safe in either case.
.VE
.PP
If an error occurs (e.g. because there was no user by the given
name) then NULL is returned and an error message will be left
at \fIinterp->result\fR. It is assumed that \fIinterp->result\fR
has been initialized in the standard way when \fBTcl_TildeSubst\fR
is invoked.
.SH KEYWORDS
file name, home directory, tilde, user

View File

@ -1,45 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/append.n,v 1.1 93/04/14 16:52:54 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS append tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
append \- Append to variable
.SH SYNOPSIS
\fBappend \fIvarName value \fR?\fIvalue value ...\fR?
.BE
.SH DESCRIPTION
.PP
Append all of the \fIvalue\fR arguments to the current value
of variable \fIvarName\fR. If \fIvarName\fR doesn't exist,
it is given a value equal to the concatenation of all the
\fIvalue\fR arguments.
This command provides an efficient way to build up long
variables incrementally.
For example, ``\fBappend a $b\fR'' is much more efficient than
``\fBset a $a$b\fR'' if \fB$a\fR is long.
.SH KEYWORDS
append, variable

View File

@ -1,41 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/break.n,v 1.1 93/04/14 16:52:56 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS break tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
break \- Abort looping command
.SH SYNOPSIS
\fBbreak\fR
.BE
.SH DESCRIPTION
.PP
This command may be invoked only inside the body of a looping command
such as \fBfor\fR or \fBforeach\fR or \fBwhile\fR.
It returns a TCL_BREAK code to signal the innermost containing
loop command to return immediately.
.SH KEYWORDS
abort, break, loop

View File

@ -1,50 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/catch.n,v 1.1 93/04/14 16:52:57 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS catch tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
catch \- Evaluate script and trap exceptional returns
.SH SYNOPSIS
\fBcatch\fI script \fR?\fIvarName\fR?
.BE
.SH DESCRIPTION
.PP
The \fBcatch\fR command may be used to prevent errors from aborting
command interpretation. \fBCatch\fR calls the Tcl interpreter recursively
to execute \fIscript\fR, and always returns a TCL_OK code, regardless of
any errors that might occur while executing \fIscript\fR. The return
value from \fBcatch\fR is a decimal string giving the
code returned by the Tcl interpreter after executing \fIscript\fR.
This will be \fB0\fR (TCL_OK) if there were no errors in \fIscript\fR;
otherwise
it will have a non-zero value corresponding to one of the exceptional
return codes (see tcl.h for the definitions of code values). If the
\fIvarName\fR argument is given, then it gives the name of a variable;
\fBcatch\fR will set the variable to the string returned
from \fIscript\fR (either a result or an error message).
.SH KEYWORDS
catch, error

View File

@ -1,43 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/cd.n,v 1.1 93/04/14 16:52:58 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS cd tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
cd \- Change working directory
.SH SYNOPSIS
\fBcd \fR?\fIdirName\fR?
.BE
.SH DESCRIPTION
.PP
Change the current working directory to \fIdirName\fR, or to the
home directory (as specified in the HOME environment variable) if
\fIdirName\fR is not given.
If \fIdirName\fR starts with a tilde, then tilde-expansion is
done as described for \fBTcl_TildeSubst\fR.
Returns an empty string.
.SH KEYWORDS
working directory

View File

@ -1,46 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/close.n,v 1.1 93/04/16 17:23:28 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS close tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
close \- Close an open file
.SH SYNOPSIS
\fBclose \fIfileId\fR
.BE
.SH DESCRIPTION
.PP
Closes the file given by \fIfileId\fR.
\fIFileId\fR must be the return value from a previous invocation
of the \fBopen\fR command; after this command, it should not be
used anymore.
If \fIfileId\fR refers to a command pipeline instead of a file,
then \fBclose\fR waits for the children to complete.
The normal result of this command is an empty string, but errors
are returned if there are problems in closing the file or waiting
for children to complete.
.SH KEYWORDS
close, file

View File

@ -1,57 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/concat.n,v 1.2 93/10/28 16:19:07 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS concat tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
concat \- Join lists together
.SH SYNOPSIS
.VS
\fBconcat\fI \fR?\fIarg arg ...\fR?
.VE
.BE
.SH DESCRIPTION
.PP
This command treats each argument as a list and concatenates them
into a single list.
It also eliminates leading and trailing spaces in the \fIarg\fR's
and adds a single separator space between \fIarg\fR's.
It permits any number of arguments. For example,
the command
.DS
\fBconcat a b {c d e} {f {g h}}\fR
.DE
will return
.DS
\fBa b c d e f {g h}\fR
.DE
as its result.
.PP
.VS
If no \fIarg\fRs are supplied, the result is an empty string.
.VE
.SH KEYWORDS
concatenate, join, lists

View File

@ -1,43 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/continue.n,v 1.1 93/04/16 17:23:30 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS continue tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
continue \- Skip to the next iteration of a loop
.SH SYNOPSIS
\fBcontinue\fR
.BE
.SH DESCRIPTION
.PP
This command may be invoked only inside the body of a looping command
such as \fBfor\fR or \fBforeach\fR or \fBwhile\fR.
It returns a TCL_CONTINUE code
to signal the innermost containing loop command to skip the
remainder of the loop's body
but continue with the next iteration of the loop.
.SH KEYWORDS
continue, iteration, loop

View File

@ -1,43 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/eof.n,v 1.1 93/04/16 17:23:31 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS eof tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
eof \- Check for end-of-file condition on open file
.SH SYNOPSIS
\fBeof \fIfileId\fR
.BE
.SH DESCRIPTION
.PP
Returns 1 if an end-of-file condition has occurred on \fIfileId\fR,
0 otherwise.
\fIFileId\fR must have been the return
value from a previous call to \fBopen\fR, or it may be \fBstdin\fR,
\fBstdout\fR, or \fBstderr\fR to refer to one of the standard I/O
channels.
.SH KEYWORDS
end, file

View File

@ -1,43 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/eval.n,v 1.1 93/05/10 17:10:16 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS eval tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
eval \- Evaluate a Tcl script
.SH SYNOPSIS
\fBeval \fIarg \fR?\fIarg ...\fR?
.BE
.SH DESCRIPTION
.PP
\fBEval\fR takes one or more arguments, which together comprise a Tcl
script containing one or more commands.
\fBEval\fR concatenates all its arguments in the same
fashion as the \fBconcat\fR command, passes the concatenated string to the
Tcl interpreter recursively, and returns the result of that
evaluation (or any error generated by it).
.SH KEYWORDS
concatenate, evaluate, script

View File

@ -1,198 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/exec.n,v 1.6 93/07/23 15:13:34 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS exec tcl 7.0
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
exec \- Invoke subprocess(es)
.SH SYNOPSIS
\fBexec \fR?\fIswitches\fR? \fIarg \fR?\fIarg ...\fR?
.BE
.SH DESCRIPTION
.PP
This command treats its arguments as the specification
of one or more subprocesses to execute.
The arguments take the form of a standard shell pipeline
where each \fIarg\fR becomes one word of a command, and
each distinct command becomes a subprocess.
.PP
If the initial arguments to \fBexec\fR start with \fB\-\fR then
.VS
they are treated as command-line switches and are not part
of the pipeline specification. The following switches are
currently supported:
.TP 13
\fB\-keepnewline
Retains a trailing newline in the pipeline's output.
Normally a trailing newline will be deleted.
.TP 13
\fB\-\|\-\fR
Marks the end of switches. The argument following this one will
be treated as the first \fIarg\fR even if it starts with a \fB\-.
.VE
.PP
If an \fIarg\fR (or pair of \fIarg\fR's) has one of the forms
described below then it is used by \fBexec\fR to control the
flow of input and output among the subprocess(es).
Such arguments will not be passed to the subprocess(es). In forms
.VS
such as ``< \fIfileName\fR'' \fIfileName\fR may either be in a
separate argument from ``<'' or in the same argument with no
intervening space (i.e. ``<\fIfileName\fR'').
.VE
.TP 15
|\fR
Separates distinct commands in the pipeline. The standard output
of the preceding command will be piped into the standard input
of the next command.
.TP 15
|&\fR
Separates distinct commands in the pipeline. Both standard output
and standard error of the preceding command will be piped into
the standard input of the next command.
This form of redirection overrides forms such as 2> and >&.
.TP 15
<\0\fIfileName\fR
The file named by \fIfileName\fR is opened and used as the standard
input for the first command in the pipeline.
.TP 15
<@\0\fIfileId\fR
.VS
\fIFileId\fR must be the identifier for an open file, such as the return
value from a previous call to \fBopen\fR.
It is used as the standard input for the first command in the pipeline.
\fIFileId\fR must have been opened for reading.
.VE
.TP 15
<<\0\fIvalue\fR
\fIValue\fR is passed to the first command as its standard input.
.TP 15
>\0\fIfileName\fR
Standard output from the last command is redirected to the file named
\fIfileName\fR, overwriting its previous contents.
.TP 15
2>\0\fIfileName\fR
.VS
Standard error from all commands in the pipeline is redirected to the
file named \fIfileName\fR, overwriting its previous contents.
.TP 15
>&\0\fIfileName\fR
Both standard output from the last command and standard error from all
commands are redirected to the file named \fIfileName\fR, overwriting
its previous contents.
.VE
.TP 15
>>\0\fIfileName\fR
Standard output from the last command is
redirected to the file named \fIfileName\fR, appending to it rather
than overwriting it.
.TP 15
2>>\0\fIfileName\fR
.VS
Standard error from all commands in the pipeline is
redirected to the file named \fIfileName\fR, appending to it rather
than overwriting it.
.TP 15
>>&\0\fIfileName\fR
Both standard output from the last command and standard error from
all commands are redirected to the file named \fIfileName\fR,
appending to it rather than overwriting it.
.TP 15
>@\0\fIfileId\fR
\fIFileId\fR must be the identifier for an open file, such as the return
value from a previous call to \fBopen\fR.
Standard output from the last command is redirected to \fIfileId\fR's
file, which must have been opened for writing.
.TP 15
2>@\0\fIfileId\fR
\fIFileId\fR must be the identifier for an open file, such as the return
value from a previous call to \fBopen\fR.
Standard error from all commands in the pipeline is
redirected to \fIfileId\fR's file.
The file must have been opened for writing.
.TP 15
>&@\0\fIfileId\fR
\fIFileId\fR must be the identifier for an open file, such as the return
value from a previous call to \fBopen\fR.
Both standard output from the last command and standard error from
all commands are redirected to \fIfileId\fR's file.
The file must have been opened for writing.
.VE
.PP
If standard output has not been redirected then the \fBexec\fR
command returns the standard output from the last command
in the pipeline.
If any of the commands in the pipeline exit abnormally or
are killed or suspended, then \fBexec\fR will return an error
and the error message will include the pipeline's output followed by
error messages describing the abnormal terminations; the
\fBerrorCode\fR variable will contain additional information
about the last abnormal termination encountered.
If any of the commands writes to its standard error file and that
standard error isn't redirected,
then \fBexec\fR will return an error; the error message
will include the pipeline's standard output, followed by messages
about abnormal terminations (if any), followed by the standard error
output.
.PP
If the last character of the result or error message
is a newline then that character is normally deleted
from the result or error message.
This is consistent with other Tcl return values, which don't
normally end with newlines.
.VS
However, if \fB\-keepnewline\fR is specified then the trailing
newline is retained.
.VE
.PP
If standard input isn't redirected with ``<'' or ``<<''
or ``<@'' then the standard input for the first command in the
pipeline is taken from the application's current standard input.
.PP
If the last \fIarg\fR is ``&'' then the pipeline will be
executed in background.
.VS
In this case the \fBexec\fR command will return a list whose
elements are the process identifiers for all of the subprocesses
in the pipeline.
.VE
The standard output from the last command in the pipeline will
go to the application's standard output if it hasn't been
redirected, and error output from all of
the commands in the pipeline will go to the application's
standard error file unless redirected.
.PP
The first word in each command is taken as the command name;
tilde-substitution is performed on it, and if the result contains
no slashes then the directories
in the PATH environment variable are searched for
an executable by the given name.
If the name contains a slash then it must refer to an executable
reachable from the current directory.
No ``glob'' expansion or other shell-like substitutions
are performed on the arguments to commands.
.SH KEYWORDS
execute, pipeline, redirection, subprocess

View File

@ -1,41 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/exit.n,v 1.2 93/06/17 13:31:30 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS exit tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
exit \- End the application
.SH SYNOPSIS
\fBexit \fR?\fIreturnCode\fR?
.BE
.SH DESCRIPTION
.PP
Terminate the process, returning \fIreturnCode\fR to the
system as the exit status.
If \fIreturnCode\fR isn't specified then it defaults
to 0.
.SH KEYWORDS
exit, process

View File

@ -1,146 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/file.n,v 1.1 93/05/03 17:09:38 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS file tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
file \- Manipulate file names and attributes
.SH SYNOPSIS
\fBfile \fIoption\fR \fIname\fR ?\fIarg arg ...\fR?
.BE
.SH DESCRIPTION
.PP
This command provides several operations on a file's name or attributes.
\fIName\fR is the name of a file;
if it starts with a tilde, then tilde substitution is done before
executing the command (see the manual entry for \fBTcl_TildeSubst\fR
for details).
\fIOption\fR indicates what to do with the file name. Any unique
abbreviation for \fIoption\fR is acceptable. The valid options are:
.TP
\fBfile \fBatime \fIname\fR
Returns a decimal string giving the time at which file \fIname\fR
was last accessed. The time is measured in the standard POSIX
fashion as seconds from a fixed starting time (often January 1, 1970).
If the file doesn't exist or its access time cannot be queried then an
error is generated.
.TP
\fBfile \fBdirname \fIname\fR
Returns all of the characters in \fIname\fR up to but not including
the last slash character. If there are no slashes in \fIname\fR
then returns ``.''. If the last slash in \fIname\fR is its first
character, then return ``/''.
.TP
\fBfile \fBexecutable \fIname\fR
Returns \fB1\fR if file \fIname\fR is executable by
the current user, \fB0\fR otherwise.
.TP
\fBfile \fBexists \fIname\fR
Returns \fB1\fR if file \fIname\fR exists and the current user has
search privileges for the directories leading to it, \fB0\fR otherwise.
.TP
\fBfile \fBextension \fIname\fR
Returns all of the characters in \fIname\fR after and including the
last dot in \fIname\fR. If there is no dot in \fIname\fR then returns
the empty string.
.TP
\fBfile \fBisdirectory \fIname\fR
Returns \fB1\fR if file \fIname\fR is a directory,
\fB0\fR otherwise.
.TP
\fBfile \fBisfile \fIname\fR
Returns \fB1\fR if file \fIname\fR is a regular file,
\fB0\fR otherwise.
.TP
\fBfile lstat \fIname varName\fR
Same as \fBstat\fR option (see below) except uses the \fIlstat\fR
kernel call instead of \fIstat\fR. This means that if \fIname\fR
refers to a symbolic link the information returned in \fIvarName\fR
is for the link rather than the file it refers to. On systems that
don't support symbolic links this option behaves exactly the same
as the \fBstat\fR option.
.TP
\fBfile \fBmtime \fIname\fR
Returns a decimal string giving the time at which file \fIname\fR
was last modified. The time is measured in the standard POSIX
fashion as seconds from a fixed starting time (often January 1, 1970).
If the file doesn't exist or its modified time cannot be queried then an
error is generated.
.TP
\fBfile \fBowned \fIname\fR
Returns \fB1\fR if file \fIname\fR is owned by the current user,
\fB0\fR otherwise.
.TP
\fBfile \fBreadable \fIname\fR
Returns \fB1\fR if file \fIname\fR is readable by
the current user, \fB0\fR otherwise.
.TP
\fBfile readlink \fIname\fR
Returns the value of the symbolic link given by \fIname\fR (i.e. the
name of the file it points to). If
\fIname\fR isn't a symbolic link or its value cannot be read, then
an error is returned. On systems that don't support symbolic links
this option is undefined.
.TP
\fBfile \fBrootname \fIname\fR
Returns all of the characters in \fIname\fR up to but not including
the last ``.'' character in the name. If \fIname\fR doesn't contain
a dot, then returns \fIname\fR.
.TP
\fBfile \fBsize \fIname\fR
Returns a decimal string giving the size of file \fIname\fR in bytes.
If the file doesn't exist or its size cannot be queried then an
error is generated.
.TP
\fBfile \fBstat \fIname varName\fR
Invokes the \fBstat\fR kernel call on \fIname\fR, and uses the
variable given by \fIvarName\fR to hold information returned from
the kernel call.
\fIVarName\fR is treated as an array variable,
and the following elements of that variable are set: \fBatime\fR,
\fBctime\fR, \fBdev\fR, \fBgid\fR, \fBino\fR, \fBmode\fR, \fBmtime\fR,
\fBnlink\fR, \fBsize\fR, \fBtype\fR, \fBuid\fR.
Each element except \fBtype\fR is a decimal string with the value of
the corresponding field from the \fBstat\fR return structure; see the
manual entry for \fBstat\fR for details on the meanings of the values.
The \fBtype\fR element gives the type of the file in the same form
returned by the command \fBfile type\fR.
This command returns an empty string.
.TP
\fBfile \fBtail \fIname\fR
Returns all of the characters in \fIname\fR after the last slash.
If \fIname\fR contains no slashes then returns \fIname\fR.
.TP
\fBfile \fBtype \fIname\fR
Returns a string giving the type of file \fIname\fR, which will be
one of \fBfile\fR, \fBdirectory\fR, \fBcharacterSpecial\fR,
\fBblockSpecial\fR, \fBfifo\fR, \fBlink\fR, or \fBsocket\fR.
.TP
\fBfile \fBwritable \fIname\fR
Returns \fB1\fR if file \fIname\fR is writable by
the current user, \fB0\fR otherwise.
.SH KEYWORDS
attributes, directory, file, name, stat

View File

@ -1,43 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/flush.n,v 1.1 93/05/03 17:09:40 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS flush tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
flush \- Flush buffered output for a file
.SH SYNOPSIS
\fBflush \fIfileId\fR
.BE
.SH DESCRIPTION
.PP
Flushes any output that has been buffered for \fIfileId\fR.
\fIFileId\fR must have been the return
value from a previous call to \fBopen\fR, or it may be
\fBstdout\fR or \fBstderr\fR to access one of the standard I/O streams;
it must refer to a file that was opened for writing.
The command returns an empty string.
.SH KEYWORDS
buffer, file, flush, output

View File

@ -1,47 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/foreach.n,v 1.1 93/05/03 17:09:42 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS foreach tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
foreach \- Iterate over all elements in a list
.SH SYNOPSIS
\fBforeach \fIvarname list body\fR
.BE
.SH DESCRIPTION
.PP
In this command \fIvarname\fR is the name of a variable, \fIlist\fR
is a list of values to assign to \fIvarname\fR, and \fIbody\fR is a
Tcl script.
For each element of \fIlist\fR (in order
from left to right), \fBforeach\fR assigns the contents of the
field to \fIvarname\fR as if the \fBlindex\fR command had been used
to extract the field, then calls the Tcl interpreter to execute
\fIbody\fR. The \fBbreak\fR and \fBcontinue\fR statements may be
invoked inside \fIbody\fR, with the same effect as in the \fBfor\fR
command. \fBForeach\fR returns an empty string.
.SH KEYWORDS
foreach, iteration, list, looping

View File

@ -1,61 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/gets.n,v 1.2 93/10/04 16:01:09 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS gets tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
gets \- Read a line from a file
.SH SYNOPSIS
\fBgets \fIfileId\fR ?\fIvarName\fR?
.BE
.SH DESCRIPTION
.PP
This command reads the next line from the file given by \fIfileId\fR
and discards the terminating newline character.
If \fIvarName\fR 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 \fIvarName\fR is set to an
empty string.
If \fIvarName\fR 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 \fBeof\fR may have to be used to determine
what really happened.
If the last character in the file is not a newline character then
\fBgets\fR behaves as if there were an additional newline character
at the end of the file.
\fIFileId\fR must be \fBstdin\fR or the return value from a previous
call to \fBopen\fR; it must refer to a file that was opened
for reading.
.VS
Any existing end-of-file or error condition on the file is cleared at
the beginning of the \fBgets\fR command.
.VE
.SH KEYWORDS
file, line, read

View File

@ -1,43 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/global.n,v 1.1 93/05/03 17:09:46 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS global tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
global \- Access global variables
.SH SYNOPSIS
\fBglobal \fIvarname \fR?\fIvarname ...\fR?
.BE
.SH DESCRIPTION
.PP
This command is ignored unless a Tcl procedure is being interpreted.
If so then it declares the given \fIvarname\fR's to be global variables
rather than local ones. For the duration of the current procedure
(and only while executing in the current procedure), any reference to
any of the \fIvarname\fRs will refer to the global variable by the same
name.
.SH KEYWORDS
global, procedure, variable

View File

@ -1,44 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/incr.n,v 1.1 93/05/03 17:34:02 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS incr tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
incr \- Increment the value of a variable
.SH SYNOPSIS
\fBincr \fIvarName \fR?\fIincrement\fR?
.BE
.SH DESCRIPTION
.PP
Increments the value stored in the variable whose name is \fIvarName\fR.
The value of the variable must be an integer.
If \fIincrement\fR is supplied then its value (which must be an
integer) is added to the value of variable \fIvarName\fR; otherwise
1 is added to \fIvarName\fR.
The new value is stored as a decimal string in variable \fIvarName\fR
and also returned as result.
.SH KEYWORDS
add, increment, variable, value

View File

@ -1,42 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/join.n,v 1.1 93/05/03 17:34:03 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS join tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
join \- Create a string by joining together list elements
.SH SYNOPSIS
\fBjoin \fIlist \fR?\fIjoinString\fR?
.BE
.SH DESCRIPTION
.PP
The \fIlist\fR argument must be a valid Tcl list.
This command returns the string
formed by joining all of the elements of \fIlist\fR together with
\fIjoinString\fR separating each adjacent pair of elements.
The \fIjoinString\fR argument defaults to a space character.
.SH KEYWORDS
element, join, list, separator

View File

@ -1,48 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/lappend.n,v 1.1 93/05/03 17:34:04 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS lappend tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
lappend \- Append list elements onto a variable
.SH SYNOPSIS
\fBlappend \fIvarName value \fR?\fIvalue value ...\fR?
.BE
.SH DESCRIPTION
.PP
This command treats the variable given by \fIvarName\fR as a list
and appends each of the \fIvalue\fR arguments to that list as a separate
element, with spaces between elements.
If \fIvarName\fR doesn't exist, it is created as a list with elements
given by the \fIvalue\fR arguments.
\fBLappend\fR is similar to \fBappend\fR except that the \fIvalue\fRs
are appended as list elements rather than raw text.
This command provides a relatively efficient way to build up
large lists. For example, ``\fBlappend a $b\fR'' is much
more efficient than ``\fBset a [concat $a [list $b]]\fR'' when
\fB$a\fR is long.
.SH KEYWORDS
append, element, list, variable

View File

@ -1,46 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/lindex.n,v 1.1 93/05/03 17:34:05 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS lindex tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
lindex \- Retrieve an element from a list
.SH SYNOPSIS
\fBlindex \fIlist index\fR
.BE
.SH DESCRIPTION
.PP
This command treats \fIlist\fR as a Tcl list and returns the
\fIindex\fR'th element from it (0 refers to the first element of the list).
In extracting the element, \fIlindex\fR observes the same rules
concerning braces and quotes and backslashes as the Tcl command
interpreter; however, variable
substitution and command substitution do not occur.
If \fIindex\fR is negative or greater than or equal to the number
of elements in \fIvalue\fR, then an empty
string is returned.
.SH KEYWORDS
element, index, list

View File

@ -1,45 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/linsert.n,v 1.1 93/05/03 17:34:05 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS linsert tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
linsert \- Insert elements into a list
.SH SYNOPSIS
\fBlinsert \fIlist index element \fR?\fIelement element ...\fR?
.BE
.SH DESCRIPTION
.PP
This command produces a new list from \fIlist\fR by inserting all
of the \fIelement\fR arguments just before the \fIindex\fRth
element of \fIlist\fR. Each \fIelement\fR argument will become
a separate element of the new list. If \fIindex\fR is less than
or equal to zero, then the new elements are inserted at the
beginning of the list. If \fIindex\fR is greater than or equal
to the number of elements in the list, then the new elements are
appended to the list.
.SH KEYWORDS
element, insert, list

View File

@ -1,62 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/list.n,v 1.2 93/10/28 16:19:11 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS list tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
list \- Create a list
.SH SYNOPSIS
.VS
\fBlist \fR?\fIarg arg ...\fR?
.VE
.BE
.SH DESCRIPTION
.PP
This command returns a list comprised of all the \fIarg\fRs,
.VS
or an empty string if no \fIarg\fRs are specified.
.VE
Braces and backslashes get added as necessary, so that the \fBindex\fR command
may be used on the result to re-extract the original arguments, and also
so that \fBeval\fR may be used to execute the resulting list, with
\fIarg1\fR comprising the command's name and the other \fIarg\fRs comprising
its arguments. \fBList\fR produces slightly different results than
\fBconcat\fR: \fBconcat\fR removes one level of grouping before forming
the list, while \fBlist\fR works directly from the original arguments.
For example, the command
.DS
\fBlist a b {c d e} {f {g h}}
.DE
will return
.DS
\fBa b {c d e} {f {g h}}
.DE
while \fBconcat\fR with the same arguments will return
.DS
\fBa b c d e f {g h}\fR
.DE
.SH KEYWORDS
element, list

View File

@ -1,39 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/llength.n,v 1.1 93/05/03 17:34:07 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS llength tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
llength \- Count the number of elements in a list
.SH SYNOPSIS
\fBllength \fIlist\fR
.BE
.SH DESCRIPTION
.PP
Treats \fIlist\fR as a list and returns a decimal string giving
the number of elements in it.
.SH KEYWORDS
element, list, length

View File

@ -1,51 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/lrange.n,v 1.1 93/05/03 17:34:07 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS lrange tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
lrange \- Return one or more adjacent elements from a list
.SH SYNOPSIS
\fBlrange \fIlist first last
.BE
.SH DESCRIPTION
.PP
\fIList\fR must be a valid Tcl list. This command will
return a new list consisting of elements
\fIfirst\fR through \fIlast\fR, inclusive.
\fILast\fR may be \fBend\fR (or any
abbreviation of it) to refer to the last element of the list.
If \fIfirst\fR is less than zero, it is treated as if it were zero.
If \fIlast\fR is greater than or equal to the number of elements
in the list, then it is treated as if it were \fBend\fR.
If \fIfirst\fR is greater than \fIlast\fR then an empty string
is returned.
Note: ``\fBlrange \fIlist first first\fR'' does not always produce the
same result as ``\fBlindex \fIlist first\fR'' (although it often does
for simple fields that aren't enclosed in braces); it does, however,
produce exactly the same results as ``\fBlist [lindex \fIlist first\fB]\fR''
.SH KEYWORDS
element, list, range, sublist

View File

@ -1,55 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/lreplace.n,v 1.1 93/05/03 17:34:08 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS lreplace tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
lreplace \- Replace elements in a list with new elements
.SH SYNOPSIS
\fBlreplace \fIlist first last \fR?\fIelement element ...\fR?
.BE
.SH DESCRIPTION
.PP
\fBLreplace\fR returns a new list formed by replacing one or more elements of
\fIlist\fR with the \fIelement\fR arguments.
\fIFirst\fR gives the index in \fIlist\fR of the first element
to be replaced.
If \fIfirst\fR is less than zero then it refers to the first
element of \fIlist\fR; the element indicated by \fIfirst\fR
must exist in the list.
\fILast\fR gives the index in \fIlist\fR of the last element
to be replaced; it must be greater than or equal to \fIfirst\fR.
\fILast\fR may be \fBend\fR (or any abbreviation of it) to indicate
that all elements between \fIfirst\fR and the end of the list should
be replaced.
The \fIelement\fR arguments specify zero or more new arguments to
be added to the list in place of those that were deleted.
Each \fIelement\fR argument will become a separate element of
the list.
If no \fIelement\fR arguments are specified, then the elements
between \fIfirst\fR and \fIlast\fR are simply deleted.
.SH KEYWORDS
element, list, replace

View File

@ -1,182 +0,0 @@
.\" The definitions below are for supplemental macros used in Tcl/Tk
.\" manual entries.
.\"
.\" .HS name section [date [version]]
.\" Replacement for .TH in other man pages. See below for valid
.\" section names.
.\"
.\" .AP type name in/out [indent]
.\" Start paragraph describing an argument to a library procedure.
.\" type is type of argument (int, etc.), in/out is either "in", "out",
.\" or "in/out" to describe whether procedure reads or modifies arg,
.\" and indent is equivalent to second arg of .IP (shouldn't ever be
.\" needed; use .AS below instead)
.\"
.\" .AS [type [name]]
.\" Give maximum sizes of arguments for setting tab stops. Type and
.\" name are examples of largest possible arguments that will be passed
.\" to .AP later. If args are omitted, default tab stops are used.
.\"
.\" .BS
.\" Start box enclosure. From here until next .BE, everything will be
.\" enclosed in one large box.
.\"
.\" .BE
.\" End of box enclosure.
.\"
.\" .VS
.\" Begin vertical sidebar, for use in marking newly-changed parts
.\" of man pages.
.\"
.\" .VE
.\" End of vertical sidebar.
.\"
.\" .DS
.\" Begin an indented unfilled display.
.\"
.\" .DE
.\" End of indented unfilled display.
.\"
'\" # Heading for Tcl/Tk man pages
.de HS
.ds ^3 \\0
.if !"\\$3"" .ds ^3 \\$3
.if '\\$2'cmds' .TH \\$1 1 \\*(^3 \\$4
.if '\\$2'lib' .TH \\$1 3 \\*(^3 \\$4
.if '\\$2'tcl' .TH \\$1 n \\*(^3 Tcl "Tcl Built-In Commands"
.if '\\$2'tk' .TH \\$1 n \\*(^3 Tk "Tk Commands"
.if '\\$2'tclc' .TH \\$1 3 \\*(^3 Tcl "Tcl Library Procedures"
.if '\\$2'tkc' .TH \\$1 3 \\*(^3 Tk "Tk Library Procedures"
.if '\\$2'tclcmds' .TH \\$1 1 \\*(^3 Tk "Tcl Applications"
.if '\\$2'tkcmds' .TH \\$1 1 \\*(^3 Tk "Tk Applications"
.if t .wh -1.3i ^B
.nr ^l \\n(.l
.ad b
..
'\" # Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
. ie !"\\$2"" .TP \\n()Cu
. el .TP 15
.\}
.ie !"\\$3"" \{\
.ta \\n()Au \\n()Bu
\&\\$1 \\fI\\$2\\fP (\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1 \\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\" # define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
'\" # BS - start boxed text
'\" # ^y = starting y location
'\" # ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\" # BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\" Draw four-sided box normally, but don't draw top of
.\" box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\" # VS - start vertical sidebar
'\" # ^Y = starting y location
'\" # ^v = 1 (for troff; for nroff this doesn't matter)
.de VS
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\" # VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\" # Special macro to handle page bottom: finish off current
'\" # box/sidebar if in box/sidebar mode, then invoked standard
'\" # page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\" Draw three-sided box if this is the box's first page,
.\" draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\" # DS - begin display
.de DS
.RS
.nf
.sp
..
'\" # DE - end display
.de DE
.fi
.RE
.sp .5
..

View File

@ -1,138 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/open.n,v 1.1 93/05/10 17:10:32 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS open tcl 7.0
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
open \- Open a file
.SH SYNOPSIS
.VS
\fBopen \fIfileName\fR ?\fIaccess\fR? ?\fIpermissions\fR?
.VE
.BE
.SH DESCRIPTION
.PP
This command opens a file and returns an identifier
that may be used in future invocations
of commands like \fBread\fR, \fBputs\fR, and \fBclose\fR.
\fIFileName\fR gives the name of the file to open; if it starts with
a tilde then tilde substitution is performed as described for
\fBTcl_TildeSubst\fR.
If the first character of \fIfileName\fR is ``|'' then the
remaining characters of \fIfileName\fR are treated as a command
pipeline to invoke, in the same style as for \fBexec\fR.
In this case, the identifier returned by \fBopen\fR may be used
to write to the command's input pipe or read from its output pipe.
.PP
The \fIaccess\fR argument indicates the way in which the file
(or command pipeline) is to be accessed.
.VS
It may take two forms, either a string in the form that would be
passed to the \fBfopen\fR library procedure or a list of POSIX
access flags.
It defaults to ``\fBr\fR''.
In the first form \fIaccess\fR may have any of the following values:
.VE
.TP 15
\fBr\fR
Open the file for reading only; the file must already exist.
.TP 15
\fBr+\fR
Open the file for both reading and writing; the file must
already exist.
.TP 15
\fBw\fR
Open the file for writing only. Truncate it if it exists. If it doesn't
exist, create a new file.
.TP 15
\fBw+\fR
Open the file for reading and writing. Truncate it if it exists.
If it doesn't exist, create a new file.
.TP 15
\fBa\fR
Open the file for writing only. The file must already exist, and the file
is positioned so that new data is appended to the file.
.TP 15
\fBa+\fR
Open the file for reading and writing. If the file doesn't exist,
create a new empty file.
Set the initial access position to the end of the file.
.PP
In the second form, \fIaccess\fR consists of a list of any of the
.VS
following flags, all of which have the standard POSIX meanings.
One of the flags must be either \fBRDONLY\fR, \fBWRONLY\fR or \fBRDWR\fR.
.TP 15
\fBRDONLY\fR
Open the file for reading only.
.TP 15
\fBWRONLY\fR
Open the file for writing only.
.TP 15
\fBRDWR\fR
Open the file for both reading and writing.
.TP 15
\fBAPPEND\fR
Set the file pointer to the end of the file prior to each write.
.TP 15
\fBCREAT\fR
Create the file if it doesn't already exist (without this flag it
is an error for the file not to exist).
.TP 15
\fBEXCL\fR
If \fBCREAT\fR is specified also, an error is returned if the
file already exists.
.TP 15
\fBNOCTTY\fR
If the file is a terminal device, this flag prevents the file from
becoming the controlling terminal of the process.
.TP 15
\fBNONBLOCK\fR
Prevents the process from blocking while opening the file.
For details refer to your system documentation on the \fBopen\fR system
call's \fBO_NONBLOCK\fR flag.
.TP 15
\fBTRUNC\fR
If the file exists it is truncated to zero length.
.PP
If a new file is created as part of opening it, \fIpermissions\fR
(an integer) is used to set the permissions for the new file in
conjunction with the process's file mode creation mask.
\fIPermissions\fR defaults to 0666.
.VE
.PP
If a file is opened for both reading and writing then \fBseek\fR
must be invoked between a read and a write, or vice versa (this
restriction does not apply to command pipelines opened with \fBopen\fR).
When \fIfileName\fR specifies a command pipeline and a write-only access
is used, then standard output from the pipeline is directed to the
current standard output unless overridden by the command.
When \fIfileName\fR specifies a command pipeline and a read-only access
is used, then standard input from the pipeline is taken from the
current standard input unless overridden by the command.
.SH KEYWORDS
access mode, append, controlling terminal, create, file,
non-blocking, open, permissions, pipeline, process

View File

@ -1,47 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/pid.n,v 1.1 93/05/15 16:19:40 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS pid tcl 7.0
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
pid \- Retrieve process id(s)
.SH SYNOPSIS
\fBpid \fR?\fIfileId\fR?
.BE
.SH DESCRIPTION
.PP
If the \fIfileId\fR argument is given then it should normally
refer to a process pipeline created with the \fBopen\fR command.
In this case the \fBpid\fR command will return a list whose elements
are the process identifiers of all the processes in the pipeline,
in order.
The list will be empty if \fIfileId\fR refers to an open file
that isn't a process pipeline.
If no \fIfileId\fR argument is given then \fBpid\fR returns the process
identifier of the current process.
All process identifiers are returned as decimal strings.
.SH KEYWORDS
file, pipeline, process identifier

View File

@ -1,50 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/puts.n,v 1.1 93/05/10 17:10:19 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS puts tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
puts \- Write to a file
.SH SYNOPSIS
\fBputs \fR?\fB\-nonewline\fR? ?\fIfileId\fR? \fIstring\fR
.BE
.SH DESCRIPTION
.PP
Writes the characters given by \fIstring\fR to the file given
by \fIfileId\fR.
\fIFileId\fR must have been the return
value from a previous call to \fBopen\fR, or it may be
\fBstdout\fR or \fBstderr\fR to refer to one of the standard I/O
channels; it must refer to a file that was opened for
writing.
If no \fIfileId\fR is specified then it defaults to \fBstdout\fR.
\fBPuts\fR normally outputs a newline character after \fIstring\fR,
but this feature may be suppressed by specifying the \fB\-nonewline\fR
switch.
Output to files is buffered internally by Tcl; the \fBflush\fR
command may be used to force buffered characters to be output.
.SH KEYWORDS
file, newline, output, write

View File

@ -1,38 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/pwd.n,v 1.1 93/05/10 17:10:19 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS pwd tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
pwd \- Return the current working directory
.SH SYNOPSIS
\fBpwd\fR
.BE
.SH DESCRIPTION
.PP
Returns the path name of the current working directory.
.SH KEYWORDS
working directory

View File

@ -1,54 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/read.n,v 1.2 93/10/04 16:01:04 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS read tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
read \- Read from a file
.SH SYNOPSIS
\fBread \fR?\fB\-nonewline\fR? \fIfileId\fR
.br
\fBread \fIfileId numBytes\fR
.BE
.SH DESCRIPTION
.PP
In the first form, all of the remaining bytes are read from the file
given by \fIfileId\fR; they are returned as the result of the command.
If the \fB\-nonewline\fR switch is specified then the last
character of the file is discarded if it is a newline.
In the second form, the extra argument specifies how many bytes to read;
exactly this many bytes will be read and returned, unless there are fewer than
\fInumBytes\fR bytes left in the file; in this case, all the remaining
bytes are returned.
\fIFileId\fR must be \fBstdin\fR or the return
value from a previous call to \fBopen\fR; it must
refer to a file that was opened for reading.
.VS
Any existing end-of-file or error condition on the file is cleared at
the beginning of the \fBread\fR command.
.VE
.SH KEYWORDS
file, read

View File

@ -1,41 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/rename.n,v 1.1 93/06/07 16:48:22 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS rename tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
rename \- Rename or delete a command
.SH SYNOPSIS
\fBrename \fIoldName newName\fR
.BE
.SH DESCRIPTION
.PP
Rename the command that used to be called \fIoldName\fR so that it
is now called \fInewName\fR. If \fInewName\fR is an empty string
then \fIoldName\fR is deleted. The \fBrename\fR command
returns an empty string as result.
.SH KEYWORDS
command, delete, rename

View File

@ -1,64 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/seek.n,v 1.1 93/06/07 16:48:27 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS seek tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
seek \- Change the access position for an open file
.SH SYNOPSIS
\fBseek \fIfileId offset \fR?\fIorigin\fR?
.BE
.SH DESCRIPTION
.PP
Change the current access position for \fIfileId\fR.
\fIFileId\fR must have been the return
value from a previous call to \fBopen\fR, or it may be \fBstdin\fR,
\fBstdout\fR, or \fBstderr\fR to refer to one of the standard I/O
channels.
The \fIoffset\fR and \fIorigin\fR arguments specify the position at
which the next read or write will occur for \fIfileId\fR.
\fIOffset\fR must be an integer (which may be negative) and \fIorigin\fR
must be one of the following:
.TP
\fBstart\fR
The new access position will be \fIoffset\fR bytes from the start
of the file.
.TP
\fBcurrent\fR
The new access position will be \fIoffset\fR bytes from the current
access position; a negative \fIoffset\fR moves the access position
backwards in the file.
.TP
\fBend\fR
The new access position will be \fIoffset\fR bytes from the end of
the file. A negative \fIoffset\fR places the access position before
the end-of-file, and a positive \fIoffset\fR places the access position
after the end-of-file.
.LP
The \fIorigin\fR argument defaults to \fBstart\fR.
This command returns an empty string.
.SH KEYWORDS
access position, file, seek

View File

@ -1,47 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/source.n,v 1.1 93/06/07 16:48:28 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS source tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
source \- Evaluate a file as a Tcl script
.SH SYNOPSIS
\fBsource \fIfileName\fR
.BE
.SH DESCRIPTION
.PP
Read file \fIfileName\fR and pass the contents to the Tcl interpreter
as a script to evaluate in the normal fashion. The return
value from \fBsource\fR is the return value of the last command executed
from the file. If an error occurs in evaluating the contents of the
file then the \fBsource\fR command will return that error.
If a \fBreturn\fR command is invoked from within the file then the remainder of
the file will be skipped and the \fBsource\fR command will return
normally with the result from the \fBreturn\fR command.
If \fIfileName\fR starts with a tilde, then it is tilde-substituted
as described in the \fBTcl_TildeSubst\fR manual entry.
.SH KEYWORDS
file, script

View File

@ -1,57 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/split.n,v 1.1 93/06/16 16:48:25 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS split tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
split \- Split a string into a proper Tcl list
.SH SYNOPSIS
\fBsplit \fIstring \fR?\fIsplitChars\fR?
.BE
.SH DESCRIPTION
.PP
Returns a list created by splitting \fIstring\fR at each character
that is in the \fIsplitChars\fR argument.
Each element of the result list will consist of the
characters from \fIstring\fR that lie between instances of the
characters in \fIsplitChars\fR.
Empty list elements will be generated if \fIstring\fR contains
adjacent characters in \fIsplitChars\fR, or if the first or last
character of \fIstring\fR is in \fIsplitChars\fR.
If \fIsplitChars\fR is an empty string then each character of
\fIstring\fR becomes a separate element of the result list.
\fISplitChars\fR defaults to the standard white-space characters.
For example,
.DS
\fBsplit "comp.unix.misc" .\fR
.DE
returns \fB"comp unix misc"\fR and
.DS
\fBsplit "Hello world" {}\fR
.DE
returns \fB"H e l l o { } w o r l d"\fR.
.SH KEYWORDS
list, split, string

View File

@ -1,43 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/tell.n,v 1.1 93/06/16 16:48:30 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS tell tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
tell \- Return current access position for an open file
.SH SYNOPSIS
\fBtell \fIfileId\fR
.BE
.SH DESCRIPTION
.PP
Returns a decimal string giving the current access position in
\fIfileId\fR.
\fIFileId\fR must have been the return
value from a previous call to \fBopen\fR, or it may be \fBstdin\fR,
\fBstdout\fR, or \fBstderr\fR to refer to one of the standard I/O
channels.
.SH KEYWORDS
access position, file

View File

@ -1,46 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/time.n,v 1.1 93/06/16 16:48:29 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS time tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
time \- Time the execution of a script
.SH SYNOPSIS
\fBtime \fIscript\fR ?\fIcount\fR?
.BE
.SH DESCRIPTION
.PP
This command will call the Tcl interpreter \fIcount\fR
times to evaluate \fIscript\fR (or once if \fIcount\fR isn't
specified). It will then return a string of the form
.DS
\fB503 microseconds per iteration\fR
.DE
which indicates the average amount of time required per iteration,
in microseconds.
Time is measured in elapsed time, not CPU time.
.SH KEYWORDS
script, time

View File

@ -1,55 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/unknown.n,v 1.2 93/10/13 17:19:06 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS unknown tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
unknown \- Handle attempts to use non-existent commands
.SH SYNOPSIS
\fBunknown \fIcmdName \fR?\fIarg arg ...\fR?
.BE
.SH DESCRIPTION
.PP
This command doesn't actually exist as part of Tcl, but Tcl will
invoke it if it does exist.
If the Tcl interpreter encounters a command name for which there
is not a defined command, then Tcl checks for the existence of
a command named \fBunknown\fR.
If there is no such command, then the interpreter returns an
error.
If the \fBunknown\fR command exists, then it is invoked with
arguments consisting of the fully-substituted name and arguments
for the original non-existent command.
The \fBunknown\fR command typically does things like searching
through library directories for a command procedure with the name
\fIcmdName\fR, or expanding abbreviated command names to full-length,
or automatically executing unknown commands as sub-processes.
In some cases (such as expanding abbreviations) \fBunknown\fR will
change the original command slightly and then (re-)execute it.
The result of the \fBunknown\fR command is used as the result for
the original non-existent command.
.SH KEYWORDS
error, non-existent command

View File

@ -1,47 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/unset.n,v 1.1 93/06/16 16:48:28 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS unset tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
unset \- Delete variables
.SH SYNOPSIS
\fBunset \fIname \fR?\fIname name ...\fR?
.BE
.SH DESCRIPTION
.PP
This command removes one or more variables.
Each \fIname\fR is a variable name, specified in any of the
ways acceptable to the \fBset\fR command.
If a \fIname\fR refers to an element of an array then that
element is removed without affecting the rest of the array.
If a \fIname\fR consists of an array name with no parenthesized
index, then the entire array is deleted.
The \fBunset\fR command returns an empty string as result.
An error occurs if any of the variables doesn't exist, and any variables
after the non-existent one are not deleted.
.SH KEYWORDS
remove, variable

View File

@ -1,50 +0,0 @@
'\"
'\" Copyright (c) 1993 The Regents of the University of California.
'\" All rights reserved.
'\"
'\" Permission is hereby granted, without written agreement and without
'\" license or royalty fees, to use, copy, modify, and distribute this
'\" documentation for any purpose, provided that the above copyright
'\" notice and the following two paragraphs appear in all copies.
'\"
'\" IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
'\" FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
'\" ARISING OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
'\" CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'\"
'\" THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
'\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
'\" AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
'\" ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
'\" PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
'\"
'\" $Header: /user6/ouster/tcl/man/RCS/while.n,v 1.1 93/06/16 16:48:27 ouster Exp $ SPRITE (Berkeley)
'\"
.so man.macros
.HS while tcl
.BS
'\" Note: do not modify the .SH NAME line immediately below!
.SH NAME
while \- Execute script repeatedly as long as a condition is met
.SH SYNOPSIS
\fBwhile \fItest body
.BE
.SH DESCRIPTION
.PP
The \fIwhile\fR command evaluates \fItest\fR as an expression
(in the same way that \fBexpr\fR evaluates its argument).
The value of the expression must a proper boolean
value; if it is a true value
then \fIbody\fR is executed by passing it to the Tcl interpreter.
Once \fIbody\fR has been executed then \fItest\fR is evaluated
again, and the process repeats until eventually \fItest\fR
evaluates to a false boolean value. \fBContinue\fR
commands may be executed inside \fIbody\fR to terminate the current
iteration of the loop, and \fBbreak\fR
commands may be executed inside \fIbody\fR to cause immediate
termination of the \fBwhile\fR command. The \fBwhile\fR command
always returns an empty string.
.SH KEYWORDS
boolean value, loop, test, while

View File

@ -1,259 +0,0 @@
# init.tcl --
#
# Default system startup file for Tcl-based applications. Defines
# "unknown" procedure and auto-load facilities.
#
# $Header: /user6/ouster/tcl/library/RCS/init.tcl,v 1.28 93/10/08 09:11:21 ouster Exp $ SPRITE (Berkeley)
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
set auto_path [info library]
# unknown:
# Invoked when a Tcl command is invoked that doesn't exist in the
# interpreter:
#
# 1. See if the autoload facility can locate the command in a
# Tcl script file. If so, load it and execute it.
# 2. See if the command exists as an executable UNIX program.
# If so, "exec" the command.
# 3. If the command was invoked at top-level:
# (a) see if the command requests csh-like history substitution
# in one of the common forms !!, !<number>, or ^old^new. If
# so, emulate csh's history substitution.
# (b) see if the command is a unique abbreviation for another
# command. If so, invoke the command.
proc unknown args {
global auto_noexec auto_noload env unknown_pending tcl_interactive;
set name [lindex $args 0]
if ![info exists auto_noload] {
#
# Make sure we're not trying to load the same proc twice.
#
if [info exists unknown_pending($name)] {
unset unknown_pending($name)
if {[array size unknown_pending] == 0} {
unset unknown_pending
}
return -code error "self-referential recursion in \"unknown\" for command \"$name\"";
}
set unknown_pending($name) pending;
set ret [catch {auto_load $name} msg]
unset unknown_pending($name);
if {$ret != 0} {
return -code $ret "error while autoloading \"$name\": $msg"
}
if ![array size unknown_pending] {
unset unknown_pending
}
if $msg {
return [uplevel $args]
}
}
if {([info level] == 1) && ([info script] == "") && $tcl_interactive} {
if ![info exists auto_noexec] {
if [auto_execok $name] {
return [uplevel exec >&@stdout <@stdin $args]
}
}
if {$name == "!!"} {
return [uplevel {history redo}]
}
if [regexp {^!(.+)$} $name dummy event] {
return [uplevel [list history redo $event]]
}
if [regexp {^\^([^^]*)\^([^^]*)\^?$} $name dummy old new] {
return [uplevel [list history substitute $old $new]]
}
set cmds [info commands $name*]
if {[llength $cmds] == 1} {
return [uplevel [lreplace $args 0 0 $cmds]]
}
if {[llength $cmds] != 0} {
if {$name == ""} {
return -code error "empty command name \"\""
} else {
return -code error \
"ambiguous command name \"$name\": [lsort $cmds]"
}
}
}
return -code error "invalid command name \"$name\""
}
# auto_load:
# Checks a collection of library directories to see if a procedure
# is defined in one of them. If so, it sources the appropriate
# library file to create the procedure. Returns 1 if it successfully
# loaded the procedure, 0 otherwise.
proc auto_load cmd {
global auto_index auto_oldpath auto_path env errorInfo errorCode
if [info exists auto_index($cmd)] {
uplevel #0 $auto_index($cmd)
return 1
}
if [catch {set path $auto_path}] {
if [catch {set path $env(TCLLIBPATH)}] {
if [catch {set path [info library]}] {
return 0
}
}
}
if [info exists auto_oldpath] {
if {$auto_oldpath == $path} {
return 0
}
}
set auto_oldpath $path
catch {unset auto_index}
for {set i [expr [llength $path] - 1]} {$i >= 0} {incr i -1} {
set dir [lindex $path $i]
set f ""
if [catch {set f [open $dir/tclIndex]}] {
continue
}
set error [catch {
set id [gets $f]
if {$id == "# Tcl autoload index file, version 2.0"} {
eval [read $f]
} elseif {$id == "# Tcl autoload index file: each line identifies a Tcl"} {
while {[gets $f line] >= 0} {
if {([string index $line 0] == "#")
|| ([llength $line] != 2)} {
continue
}
set name [lindex $line 0]
set auto_index($name) "source $dir/[lindex $line 1]"
}
} else {
error "$dir/tclIndex isn't a proper Tcl index file"
}
} msg]
if {$f != ""} {
close $f
}
if $error {
error $msg $errorInfo $errorCode
}
}
if [info exists auto_index($cmd)] {
uplevel #0 $auto_index($cmd)
if {[info commands $cmd] != ""} {
return 1
}
}
return 0
}
# auto_execok:
# Returns 1 if there's an executable in the current path for the
# given name, 0 otherwise. Builds an associative array auto_execs
# that caches information about previous checks, for speed.
proc auto_execok name {
global auto_execs env
if [info exists auto_execs($name)] {
return $auto_execs($name)
}
set auto_execs($name) 0
if {[string first / $name] >= 0} {
if {[file executable $name] && ![file isdirectory $name]} {
set auto_execs($name) 1
}
return $auto_execs($name)
}
foreach dir [split $env(PATH) :] {
if {[file executable $dir/$name] && ![file isdirectory $dir/$name]} {
set auto_execs($name) 1
return 1
}
}
return 0
}
# auto_reset:
# Destroy all cached information for auto-loading and auto-execution,
# so that the information gets recomputed the next time it's needed.
# Also delete any procedures that are listed in the auto-load index
# except those related to auto-loading.
proc auto_reset {} {
global auto_execs auto_index auto_oldpath
foreach p [info procs] {
if {[info exists auto_index($p)] && ($p != "unknown")
&& ![string match auto_* $p]} {
rename $p {}
}
}
catch {unset auto_execs}
catch {unset auto_index}
catch {unset auto_oldpath}
}
# auto_mkindex:
# Regenerate a tclIndex file from Tcl source files. Takes as argument
# the name of the directory in which the tclIndex file is to be placed,
# floowed by any number of glob patterns to use in that directory to
# locate all of the relevant files.
proc auto_mkindex {dir args} {
global errorCode errorInfo
set oldDir [pwd]
cd $dir
set dir [pwd]
append index "# Tcl autoload index file, version 2.0\n"
append index "# This file is generated by the \"auto_mkindex\" command\n"
append index "# and sourced to set up indexing information for one or\n"
append index "# more commands. Typically each line is a command that\n"
append index "# sets an element in the auto_index array, where the\n"
append index "# element name is the name of a command and the value is\n"
append index "# a script that loads the command.\n\n"
foreach file [eval glob $args] {
set f ""
set error [catch {
set f [open $file]
while {[gets $f line] >= 0} {
if [regexp {^proc[ ]+([^ ]*)} $line match procName] {
append index "set [list auto_index($procName)]"
append index " \"source \$dir/$file\"\n"
}
}
close $f
} msg]
if $error {
set code $errorCode
set info $errorInfo
catch {close $f}
cd $oldDir
error $msg $info $code
}
}
set f [open tclIndex w]
puts $f $index nonewline
close $f
cd $oldDir
}

View File

@ -1,43 +0,0 @@
# parray:
# Print the contents of a global array on stdout.
#
# $Header: /user6/ouster/tcl/library/RCS/parray.tcl,v 1.5 93/02/06 16:33:45 ouster Exp $ SPRITE (Berkeley)
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
proc parray a {
upvar 1 $a array
if [catch {array size array}] {
error "\"$a\" isn't an array"
}
set maxl 0
foreach name [lsort [array names array]] {
if {[string length $name] > $maxl} {
set maxl [string length $name]
}
}
set maxl [expr {$maxl + [string length $a] + 2}]
foreach name [lsort [array names array]] {
set nameString [format %s(%s) $a $name]
puts stdout [format "%-*s = %s" $maxl $nameString $array($name)]
}
}

View File

@ -1,14 +0,0 @@
# Tcl autoload index file, version 2.0
# This file is generated by the "auto_mkindex" command
# and sourced to set up indexing information for one or
# more commands. Typically each line is a command that
# sets an element in the auto_index array, where the
# element name is the name of a command and the value is
# a script that loads the command.
set auto_index(unknown) "source $dir/init.tcl"
set auto_index(auto_load) "source $dir/init.tcl"
set auto_index(auto_execok) "source $dir/init.tcl"
set auto_index(auto_reset) "source $dir/init.tcl"
set auto_index(auto_mkindex) "source $dir/init.tcl"
set auto_index(parray) "source $dir/parray.tcl"

View File

@ -1,69 +0,0 @@
/*
* panic.c --
*
* Source code for the "panic" library procedure for Tcl;
* individual applications will probably override this with
* an application-specific panic procedure.
*
* Copyright (c) 1988-1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef lint
static char rcsid[] = "$Header: /user6/ouster/tcl/RCS/panic.c,v 1.5 93/07/12 14:01:35 ouster Exp $ SPRITE (Berkeley)";
#endif
#include <stdio.h>
#ifdef NO_STDLIB_H
# include "compat/stdlib.h"
#else
# include <stdlib.h>
#endif
/*
*----------------------------------------------------------------------
*
* panic --
*
* Print an error message and kill the process.
*
* Results:
* None.
*
* Side effects:
* The process dies, entering the debugger if possible.
*
*----------------------------------------------------------------------
*/
/* VARARGS ARGSUSED */
void
panic(format, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)
char *format; /* Format string, suitable for passing to
* fprintf. */
char *arg1, *arg2, *arg3; /* Additional arguments (variable in number)
* to pass to fprintf. */
char *arg4, *arg5, *arg6, *arg7, *arg8;
{
(void) fprintf(stderr, format, arg1, arg2, arg3, arg4, arg5, arg6,
arg7, arg8);
(void) fflush(stderr);
abort();
}

View File

@ -1,11 +0,0 @@
/*
* patchlevel.h --
*
* This file does nothing except define a "patch level" for Tcl.
* The patch level is an integer that increments with each new
* release or patch release. It's used to make sure that Tcl
* patches are applied in the correct order and only to appropriate
* sources.
*/
#define TCL_PATCH_LEVEL 106

View File

@ -1,631 +0,0 @@
/*
* tcl.h --
*
* This header file describes the externally-visible facilities
* of the Tcl interpreter.
*
* Copyright (c) 1987-1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* $Header: /user6/ouster/tcl/RCS/tcl.h,v 1.131 93/11/21 14:50:35 ouster Exp $ SPRITE (Berkeley)
*/
#ifndef _TCL
#define _TCL
#ifndef BUFSIZ
#include <stdio.h>
#endif
#define TCL_VERSION "7.3"
#define TCL_MAJOR_VERSION 7
#define TCL_MINOR_VERSION 3
/*
* Definitions that allow this header file to be used either with or
* without ANSI C features like function prototypes.
*/
#undef _ANSI_ARGS_
#undef CONST
#if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus)
# define _USING_PROTOTYPES_ 1
# define _ANSI_ARGS_(x) x
# define CONST const
# ifdef __cplusplus
# define VARARGS (...)
# else
# define VARARGS ()
# endif
#else
# define _ANSI_ARGS_(x) ()
# define CONST
#endif
#ifdef __cplusplus
# define EXTERN extern "C"
#else
# define EXTERN extern
#endif
/*
* Macro to use instead of "void" for arguments that must have
* type "void *" in ANSI C; maps them to type "char *" in
* non-ANSI systems.
*/
#ifndef VOID
# ifdef __STDC__
# define VOID void
# else
# define VOID char
# endif
#endif
/*
* Miscellaneous declarations (to allow Tcl to be used stand-alone,
* without the rest of Sprite).
*/
#ifndef NULL
#define NULL 0
#endif
#ifndef _CLIENTDATA
# ifdef __STDC__
typedef void *ClientData;
# else
typedef int *ClientData;
# endif /* __STDC__ */
#define _CLIENTDATA
#endif
/*
* Data structures defined opaquely in this module. The definitions
* below just provide dummy types. A few fields are made visible in
* Tcl_Interp structures, namely those for returning string values.
* Note: any change to the Tcl_Interp definition below must be mirrored
* in the "real" definition in tclInt.h.
*/
typedef struct Tcl_Interp{
char *result; /* Points to result string returned by last
* command. */
void (*freeProc) _ANSI_ARGS_((char *blockPtr));
/* Zero means result is statically allocated.
* If non-zero, gives address of procedure
* to invoke to free the result. Must be
* freed by Tcl_Eval before executing next
* command. */
int errorLine; /* When TCL_ERROR is returned, this gives
* the line number within the command where
* the error occurred (1 means first line). */
} Tcl_Interp;
typedef int *Tcl_Trace;
typedef struct Tcl_AsyncHandler_ *Tcl_AsyncHandler;
/*
* When a TCL command returns, the string pointer interp->result points to
* a string containing return information from the command. In addition,
* the command procedure returns an integer value, which is one of the
* following:
*
* TCL_OK Command completed normally; interp->result contains
* the command's result.
* TCL_ERROR The command couldn't be completed successfully;
* interp->result describes what went wrong.
* TCL_RETURN The command requests that the current procedure
* return; interp->result contains the procedure's
* return value.
* TCL_BREAK The command requests that the innermost loop
* be exited; interp->result is meaningless.
* TCL_CONTINUE Go on to the next iteration of the current loop;
* interp->result is meaningless.
*/
#define TCL_OK 0
#define TCL_ERROR 1
#define TCL_RETURN 2
#define TCL_BREAK 3
#define TCL_CONTINUE 4
#define TCL_RESULT_SIZE 200
/*
* Argument descriptors for math function callbacks in expressions:
*/
typedef enum {TCL_INT, TCL_DOUBLE, TCL_EITHER} Tcl_ValueType;
typedef struct Tcl_Value {
Tcl_ValueType type; /* Indicates intValue or doubleValue is
* valid, or both. */
int intValue; /* Integer value. */
double doubleValue; /* Double-precision floating value. */
} Tcl_Value;
/*
* Procedure types defined by Tcl:
*/
typedef int (Tcl_AsyncProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int code));
typedef void (Tcl_CmdDeleteProc) _ANSI_ARGS_((ClientData clientData));
typedef int (Tcl_CmdProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int argc, char *argv[]));
typedef void (Tcl_CmdTraceProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int level, char *command, Tcl_CmdProc *proc,
ClientData cmdClientData, int argc, char *argv[]));
typedef void (Tcl_FreeProc) _ANSI_ARGS_((char *blockPtr));
typedef void (Tcl_InterpDeleteProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp));
typedef int (Tcl_MathProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, Tcl_Value *args, Tcl_Value *resultPtr));
typedef char *(Tcl_VarTraceProc) _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, char *part1, char *part2, int flags));
/*
* The structure returned by Tcl_GetCmdInfo and passed into
* Tcl_SetCmdInfo:
*/
typedef struct Tcl_CmdInfo {
Tcl_CmdProc *proc; /* Procedure that implements command. */
ClientData clientData; /* ClientData passed to proc. */
Tcl_CmdDeleteProc *deleteProc; /* Procedure to call when command
* is deleted. */
ClientData deleteData; /* Value to pass to deleteProc (usually
* the same as clientData). */
} Tcl_CmdInfo;
/*
* The structure defined below is used to hold dynamic strings. The only
* field that clients should use is the string field, and they should
* never modify it.
*/
#define TCL_DSTRING_STATIC_SIZE 200
typedef struct Tcl_DString {
char *string; /* Points to beginning of string: either
* staticSpace below or a malloc'ed array. */
int length; /* Number of non-NULL characters in the
* string. */
int spaceAvl; /* Total number of bytes available for the
* string and its terminating NULL char. */
char staticSpace[TCL_DSTRING_STATIC_SIZE];
/* Space to use in common case where string
* is small. */
} Tcl_DString;
#define Tcl_DStringLength(dsPtr) ((dsPtr)->length)
#define Tcl_DStringValue(dsPtr) ((dsPtr)->string)
/*
* Definitions for the maximum number of digits of precision that may
* be specified in the "tcl_precision" variable, and the number of
* characters of buffer space required by Tcl_PrintDouble.
*/
#define TCL_MAX_PREC 17
#define TCL_DOUBLE_SPACE (TCL_MAX_PREC+10)
/*
* Flag values passed to Tcl_Eval (see the man page for details; also
* see tclInt.h for additional flags that are only used internally by
* Tcl):
*/
#define TCL_BRACKET_TERM 1
/*
* Flag that may be passed to Tcl_ConvertElement to force it not to
* output braces (careful! if you change this flag be sure to change
* the definitions at the front of tclUtil.c).
*/
#define TCL_DONT_USE_BRACES 1
/*
* Flag value passed to Tcl_RecordAndEval to request no evaluation
* (record only).
*/
#define TCL_NO_EVAL -1
/*
* Special freeProc values that may be passed to Tcl_SetResult (see
* the man page for details):
*/
#define TCL_VOLATILE ((Tcl_FreeProc *) -1)
#define TCL_STATIC ((Tcl_FreeProc *) 0)
#define TCL_DYNAMIC ((Tcl_FreeProc *) free)
/*
* Flag values passed to variable-related procedures.
*/
#define TCL_GLOBAL_ONLY 1
#define TCL_APPEND_VALUE 2
#define TCL_LIST_ELEMENT 4
#define TCL_TRACE_READS 0x10
#define TCL_TRACE_WRITES 0x20
#define TCL_TRACE_UNSETS 0x40
#define TCL_TRACE_DESTROYED 0x80
#define TCL_INTERP_DESTROYED 0x100
#define TCL_LEAVE_ERR_MSG 0x200
/*
* Types for linked variables:
*/
#define TCL_LINK_INT 1
#define TCL_LINK_DOUBLE 2
#define TCL_LINK_BOOLEAN 3
#define TCL_LINK_STRING 4
#define TCL_LINK_READ_ONLY 0x80
/*
* Permission flags for files:
*/
#define TCL_FILE_READABLE 1
#define TCL_FILE_WRITABLE 2
/*
* The following declarations either map ckalloc and ckfree to
* malloc and free, or they map them to procedures with all sorts
* of debugging hooks defined in tclCkalloc.c.
*/
#ifdef TCL_MEM_DEBUG
EXTERN char * Tcl_DbCkalloc _ANSI_ARGS_((unsigned int size,
char *file, int line));
EXTERN int Tcl_DbCkfree _ANSI_ARGS_((char *ptr,
char *file, int line));
EXTERN char * Tcl_DbCkrealloc _ANSI_ARGS_((char *ptr,
unsigned int size, char *file, int line));
EXTERN int Tcl_DumpActiveMemory _ANSI_ARGS_((char *fileName));
EXTERN void Tcl_ValidateAllMemory _ANSI_ARGS_((char *file,
int line));
# define ckalloc(x) Tcl_DbCkalloc(x, __FILE__, __LINE__)
# define ckfree(x) Tcl_DbCkfree(x, __FILE__, __LINE__)
# define ckrealloc(x,y) Tcl_DbCkrealloc((x), (y),__FILE__, __LINE__)
#else
# define ckalloc(x) malloc(x)
# define ckfree(x) free(x)
# define ckrealloc(x,y) realloc(x,y)
# define Tcl_DumpActiveMemory(x)
# define Tcl_ValidateAllMemory(x,y)
#endif /* TCL_MEM_DEBUG */
/*
* Macro to free up result of interpreter.
*/
#define Tcl_FreeResult(interp) \
if ((interp)->freeProc != 0) { \
if ((interp)->freeProc == (Tcl_FreeProc *) free) { \
ckfree((interp)->result); \
} else { \
(*(interp)->freeProc)((interp)->result); \
} \
(interp)->freeProc = 0; \
}
/*
* Forward declaration of Tcl_HashTable. Needed by some C++ compilers
* to prevent errors when the forward reference to Tcl_HashTable is
* encountered in the Tcl_HashEntry structure.
*/
#ifdef __cplusplus
struct Tcl_HashTable;
#endif
/*
* Structure definition for an entry in a hash table. No-one outside
* Tcl should access any of these fields directly; use the macros
* defined below.
*/
typedef struct Tcl_HashEntry {
struct Tcl_HashEntry *nextPtr; /* Pointer to next entry in this
* hash bucket, or NULL for end of
* chain. */
struct Tcl_HashTable *tablePtr; /* Pointer to table containing entry. */
struct Tcl_HashEntry **bucketPtr; /* Pointer to bucket that points to
* first entry in this entry's chain:
* used for deleting the entry. */
ClientData clientData; /* Application stores something here
* with Tcl_SetHashValue. */
union { /* Key has one of these forms: */
char *oneWordValue; /* One-word value for key. */
int words[1]; /* Multiple integer words for key.
* The actual size will be as large
* as necessary for this table's
* keys. */
char string[4]; /* String for key. The actual size
* will be as large as needed to hold
* the key. */
} key; /* MUST BE LAST FIELD IN RECORD!! */
} Tcl_HashEntry;
/*
* Structure definition for a hash table. Must be in tcl.h so clients
* can allocate space for these structures, but clients should never
* access any fields in this structure.
*/
#define TCL_SMALL_HASH_TABLE 4
typedef struct Tcl_HashTable {
Tcl_HashEntry **buckets; /* Pointer to bucket array. Each
* element points to first entry in
* bucket's hash chain, or NULL. */
Tcl_HashEntry *staticBuckets[TCL_SMALL_HASH_TABLE];
/* Bucket array used for small tables
* (to avoid mallocs and frees). */
int numBuckets; /* Total number of buckets allocated
* at **bucketPtr. */
int numEntries; /* Total number of entries present
* in table. */
int rebuildSize; /* Enlarge table when numEntries gets
* to be this large. */
int downShift; /* Shift count used in hashing
* function. Designed to use high-
* order bits of randomized keys. */
int mask; /* Mask value used in hashing
* function. */
int keyType; /* Type of keys used in this table.
* It's either TCL_STRING_KEYS,
* TCL_ONE_WORD_KEYS, or an integer
* giving the number of ints in a
*/
Tcl_HashEntry *(*findProc) _ANSI_ARGS_((struct Tcl_HashTable *tablePtr,
char *key));
Tcl_HashEntry *(*createProc) _ANSI_ARGS_((struct Tcl_HashTable *tablePtr,
char *key, int *newPtr));
} Tcl_HashTable;
/*
* Structure definition for information used to keep track of searches
* through hash tables:
*/
typedef struct Tcl_HashSearch {
Tcl_HashTable *tablePtr; /* Table being searched. */
int nextIndex; /* Index of next bucket to be
* enumerated after present one. */
Tcl_HashEntry *nextEntryPtr; /* Next entry to be enumerated in the
* the current bucket. */
} Tcl_HashSearch;
/*
* Acceptable key types for hash tables:
*/
#define TCL_STRING_KEYS 0
#define TCL_ONE_WORD_KEYS 1
/*
* Macros for clients to use to access fields of hash entries:
*/
#define Tcl_GetHashValue(h) ((h)->clientData)
#define Tcl_SetHashValue(h, value) ((h)->clientData = (ClientData) (value))
#define Tcl_GetHashKey(tablePtr, h) \
((char *) (((tablePtr)->keyType == TCL_ONE_WORD_KEYS) ? (h)->key.oneWordValue \
: (h)->key.string))
/*
* Macros to use for clients to use to invoke find and create procedures
* for hash tables:
*/
#define Tcl_FindHashEntry(tablePtr, key) \
(*((tablePtr)->findProc))(tablePtr, key)
#define Tcl_CreateHashEntry(tablePtr, key, newPtr) \
(*((tablePtr)->createProc))(tablePtr, key, newPtr)
/*
* Exported Tcl variables:
*/
EXTERN int tcl_AsyncReady;
EXTERN char * tcl_RcFileName;
/*
* Exported Tcl procedures:
*/
EXTERN void Tcl_AsyncMark _ANSI_ARGS_((Tcl_AsyncHandler async));
EXTERN Tcl_AsyncHandler Tcl_AsyncCreate _ANSI_ARGS_((Tcl_AsyncProc *proc,
ClientData clientData));
EXTERN void Tcl_AsyncDelete _ANSI_ARGS_((Tcl_AsyncHandler async));
EXTERN int Tcl_AsyncInvoke _ANSI_ARGS_((Tcl_Interp *interp,
int code));
EXTERN void Tcl_AppendElement _ANSI_ARGS_((Tcl_Interp *interp,
char *string));
EXTERN void Tcl_AppendResult _ANSI_ARGS_(VARARGS);
EXTERN int Tcl_AppInit _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN void Tcl_AddErrorInfo _ANSI_ARGS_((Tcl_Interp *interp,
char *message));
EXTERN char Tcl_Backslash _ANSI_ARGS_((char *src,
int *readPtr));
EXTERN void Tcl_CallWhenDeleted _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_InterpDeleteProc *proc,
ClientData clientData));
EXTERN int Tcl_CommandComplete _ANSI_ARGS_((char *cmd));
EXTERN char * Tcl_Concat _ANSI_ARGS_((int argc, char **argv));
EXTERN int Tcl_ConvertElement _ANSI_ARGS_((char *src,
char *dst, int flags));
EXTERN void Tcl_CreateCommand _ANSI_ARGS_((Tcl_Interp *interp,
char *cmdName, Tcl_CmdProc *proc,
ClientData clientData,
Tcl_CmdDeleteProc *deleteProc));
EXTERN Tcl_Interp * Tcl_CreateInterp _ANSI_ARGS_((void));
EXTERN void Tcl_CreateMathFunc _ANSI_ARGS_((Tcl_Interp *interp,
char *name, int numArgs, Tcl_ValueType *argTypes,
Tcl_MathProc *proc, ClientData clientData));
EXTERN int Tcl_CreatePipeline _ANSI_ARGS_((Tcl_Interp *interp,
int argc, char **argv, int **pidArrayPtr,
int *inPipePtr, int *outPipePtr,
int *errFilePtr));
EXTERN Tcl_Trace Tcl_CreateTrace _ANSI_ARGS_((Tcl_Interp *interp,
int level, Tcl_CmdTraceProc *proc,
ClientData clientData));
EXTERN void Tcl_DeleteHashEntry _ANSI_ARGS_((
Tcl_HashEntry *entryPtr));
EXTERN void Tcl_DeleteHashTable _ANSI_ARGS_((
Tcl_HashTable *tablePtr));
EXTERN char * Tcl_DStringAppend _ANSI_ARGS_((Tcl_DString *dsPtr,
char *string, int length));
EXTERN char * Tcl_DStringAppendElement _ANSI_ARGS_((
Tcl_DString *dsPtr, char *string));
EXTERN void Tcl_DStringEndSublist _ANSI_ARGS_((Tcl_DString *dsPtr));
EXTERN void Tcl_DStringFree _ANSI_ARGS_((Tcl_DString *dsPtr));
EXTERN void Tcl_DStringInit _ANSI_ARGS_((Tcl_DString *dsPtr));
EXTERN void Tcl_DStringResult _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_DString *dsPtr));
EXTERN void Tcl_DStringStartSublist _ANSI_ARGS_((
Tcl_DString *dsPtr));
EXTERN void Tcl_DStringTrunc _ANSI_ARGS_((Tcl_DString *dsPtr,
int length));
EXTERN int Tcl_DeleteCommand _ANSI_ARGS_((Tcl_Interp *interp,
char *cmdName));
EXTERN void Tcl_DeleteInterp _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN void Tcl_DeleteTrace _ANSI_ARGS_((Tcl_Interp *interp,
Tcl_Trace trace));
EXTERN void Tcl_DetachPids _ANSI_ARGS_((int numPids, int *pidPtr));
EXTERN void Tcl_DontCallWhenDeleted _ANSI_ARGS_((
Tcl_Interp *interp, Tcl_InterpDeleteProc *proc,
ClientData clientData));
EXTERN void Tcl_EnterFile _ANSI_ARGS_((Tcl_Interp *interp,
FILE *file, int permissions));
EXTERN char * Tcl_ErrnoId _ANSI_ARGS_((void));
EXTERN int Tcl_Eval _ANSI_ARGS_((Tcl_Interp *interp, char *cmd));
EXTERN int Tcl_EvalFile _ANSI_ARGS_((Tcl_Interp *interp,
char *fileName));
EXTERN int Tcl_ExprBoolean _ANSI_ARGS_((Tcl_Interp *interp,
char *string, int *ptr));
EXTERN int Tcl_ExprDouble _ANSI_ARGS_((Tcl_Interp *interp,
char *string, double *ptr));
EXTERN int Tcl_ExprLong _ANSI_ARGS_((Tcl_Interp *interp,
char *string, long *ptr));
EXTERN int Tcl_ExprString _ANSI_ARGS_((Tcl_Interp *interp,
char *string));
EXTERN int Tcl_FilePermissions _ANSI_ARGS_((FILE *file));
EXTERN Tcl_HashEntry * Tcl_FirstHashEntry _ANSI_ARGS_((
Tcl_HashTable *tablePtr,
Tcl_HashSearch *searchPtr));
EXTERN int Tcl_GetBoolean _ANSI_ARGS_((Tcl_Interp *interp,
char *string, int *boolPtr));
EXTERN int Tcl_GetCommandInfo _ANSI_ARGS_((Tcl_Interp *interp,
char *cmdName, Tcl_CmdInfo *infoPtr));
EXTERN int Tcl_GetDouble _ANSI_ARGS_((Tcl_Interp *interp,
char *string, double *doublePtr));
EXTERN int Tcl_GetInt _ANSI_ARGS_((Tcl_Interp *interp,
char *string, int *intPtr));
EXTERN int Tcl_GetOpenFile _ANSI_ARGS_((Tcl_Interp *interp,
char *string, int write, int checkUsage,
FILE **filePtr));
EXTERN char * Tcl_GetVar _ANSI_ARGS_((Tcl_Interp *interp,
char *varName, int flags));
EXTERN char * Tcl_GetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
char *part1, char *part2, int flags));
EXTERN int Tcl_GlobalEval _ANSI_ARGS_((Tcl_Interp *interp,
char *command));
EXTERN char * Tcl_HashStats _ANSI_ARGS_((Tcl_HashTable *tablePtr));
EXTERN int Tcl_Init _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN void Tcl_InitHashTable _ANSI_ARGS_((Tcl_HashTable *tablePtr,
int keyType));
EXTERN void Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN int Tcl_LinkVar _ANSI_ARGS_((Tcl_Interp *interp,
char *varName, char *addr, int type));
EXTERN char * Tcl_Merge _ANSI_ARGS_((int argc, char **argv));
EXTERN Tcl_HashEntry * Tcl_NextHashEntry _ANSI_ARGS_((
Tcl_HashSearch *searchPtr));
EXTERN char * Tcl_ParseVar _ANSI_ARGS_((Tcl_Interp *interp,
char *string, char **termPtr));
EXTERN char * Tcl_PosixError _ANSI_ARGS_((Tcl_Interp *interp));
EXTERN void Tcl_PrintDouble _ANSI_ARGS_((Tcl_Interp *interp,
double value, char *dst));
EXTERN void Tcl_ReapDetachedProcs _ANSI_ARGS_((void));
EXTERN int Tcl_RecordAndEval _ANSI_ARGS_((Tcl_Interp *interp,
char *cmd, int flags));
EXTERN int Tcl_RegExpMatch _ANSI_ARGS_((Tcl_Interp *interp,
char *string, char *pattern));
EXTERN void Tcl_ResetResult _ANSI_ARGS_((Tcl_Interp *interp));
#define Tcl_Return Tcl_SetResult
EXTERN int Tcl_ScanElement _ANSI_ARGS_((char *string,
int *flagPtr));
EXTERN int Tcl_SetCommandInfo _ANSI_ARGS_((Tcl_Interp *interp,
char *cmdName, Tcl_CmdInfo *infoPtr));
EXTERN void Tcl_SetErrorCode _ANSI_ARGS_(VARARGS);
EXTERN int Tcl_SetRecursionLimit _ANSI_ARGS_((Tcl_Interp *interp,
int depth));
EXTERN void Tcl_SetResult _ANSI_ARGS_((Tcl_Interp *interp,
char *string, Tcl_FreeProc *freeProc));
EXTERN char * Tcl_SetVar _ANSI_ARGS_((Tcl_Interp *interp,
char *varName, char *newValue, int flags));
EXTERN char * Tcl_SetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
char *part1, char *part2, char *newValue,
int flags));
EXTERN char * Tcl_SignalId _ANSI_ARGS_((int sig));
EXTERN char * Tcl_SignalMsg _ANSI_ARGS_((int sig));
EXTERN int Tcl_SplitList _ANSI_ARGS_((Tcl_Interp *interp,
char *list, int *argcPtr, char ***argvPtr));
EXTERN int Tcl_StringMatch _ANSI_ARGS_((char *string,
char *pattern));
EXTERN char * Tcl_TildeSubst _ANSI_ARGS_((Tcl_Interp *interp,
char *name, Tcl_DString *bufferPtr));
EXTERN int Tcl_TraceVar _ANSI_ARGS_((Tcl_Interp *interp,
char *varName, int flags, Tcl_VarTraceProc *proc,
ClientData clientData));
EXTERN int Tcl_TraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
char *part1, char *part2, int flags,
Tcl_VarTraceProc *proc, ClientData clientData));
EXTERN void Tcl_UnlinkVar _ANSI_ARGS_((Tcl_Interp *interp,
char *varName));
EXTERN int Tcl_UnsetVar _ANSI_ARGS_((Tcl_Interp *interp,
char *varName, int flags));
EXTERN int Tcl_UnsetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
char *part1, char *part2, int flags));
EXTERN void Tcl_UntraceVar _ANSI_ARGS_((Tcl_Interp *interp,
char *varName, int flags, Tcl_VarTraceProc *proc,
ClientData clientData));
EXTERN void Tcl_UntraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
char *part1, char *part2, int flags,
Tcl_VarTraceProc *proc, ClientData clientData));
EXTERN int Tcl_VarEval _ANSI_ARGS_(VARARGS);
EXTERN ClientData Tcl_VarTraceInfo _ANSI_ARGS_((Tcl_Interp *interp,
char *varName, int flags,
Tcl_VarTraceProc *procPtr,
ClientData prevClientData));
EXTERN ClientData Tcl_VarTraceInfo2 _ANSI_ARGS_((Tcl_Interp *interp,
char *part1, char *part2, int flags,
Tcl_VarTraceProc *procPtr,
ClientData prevClientData));
#endif /* _TCL */

View File

@ -1,95 +0,0 @@
/*
* tclAppInit.c --
*
* Provides a default version of the Tcl_AppInit procedure.
*
* Copyright (c) 1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef lint
static char rcsid[] = "$Header: /user6/ouster/tcl/RCS/tclAppInit.c,v 1.6 93/08/26 14:34:55 ouster Exp $ SPRITE (Berkeley)";
#endif /* not lint */
#include "tcl.h"
/*
* The following variable is a special hack that allows applications
* to be linked using the procedure "main" from the Tcl library. The
* variable generates a reference to "main", which causes main to
* be brought in from the library (and all of Tcl with it).
*/
extern int main();
int *tclDummyMainPtr = (int *) main;
/*
*----------------------------------------------------------------------
*
* Tcl_AppInit --
*
* This procedure performs application-specific initialization.
* Most applications, especially those that incorporate additional
* packages, will have their own version of this procedure.
*
* Results:
* Returns a standard Tcl completion code, and leaves an error
* message in interp->result if an error occurs.
*
* Side effects:
* Depends on the startup script.
*
*----------------------------------------------------------------------
*/
int
Tcl_AppInit(interp)
Tcl_Interp *interp; /* Interpreter for application. */
{
/*
* Call the init procedures for included packages. Each call should
* look like this:
*
* if (Mod_Init(interp) == TCL_ERROR) {
* return TCL_ERROR;
* }
*
* where "Mod" is the name of the module.
*/
if (Tcl_Init(interp) == TCL_ERROR) {
return TCL_ERROR;
}
/*
* Call Tcl_CreateCommand for application-specific commands, if
* they weren't already created by the init procedures called above.
*/
/*
* Specify a user-specific startup file to invoke if the application
* is run interactively. Typically the startup file is "~/.apprc"
* where "app" is the name of the application. If this line is deleted
* then no user-specific startup file will be run under any conditions.
*/
tcl_RcFileName = "~/.tclshrc";
return TCL_OK;
}

View File

@ -1,952 +0,0 @@
/*
* tclCmdAH.c --
*
* This file contains the top-level command routines for most of
* the Tcl built-in commands whose names begin with the letters
* A to H.
*
* Copyright (c) 1987-1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef lint
static char rcsid[] = "$Header: /user6/ouster/tcl/RCS/tclCmdAH.c,v 1.93 93/10/28 16:19:20 ouster Exp $ SPRITE (Berkeley)";
#endif
#include "tclInt.h"
/*
*----------------------------------------------------------------------
*
* Tcl_BreakCmd --
*
* This procedure is invoked to process the "break" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_BreakCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
if (argc != 1) {
Tcl_AppendResult(interp, "wrong # args: should be \"",
argv[0], "\"", (char *) NULL);
return TCL_ERROR;
}
return TCL_BREAK;
}
/*
*----------------------------------------------------------------------
*
* Tcl_CaseCmd --
*
* This procedure is invoked to process the "case" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_CaseCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int i, result;
int body;
char *string;
int caseArgc, splitArgs;
char **caseArgv;
if (argc < 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"",
argv[0], " string ?in? patList body ... ?default body?\"",
(char *) NULL);
return TCL_ERROR;
}
string = argv[1];
body = -1;
if (strcmp(argv[2], "in") == 0) {
i = 3;
} else {
i = 2;
}
caseArgc = argc - i;
caseArgv = argv + i;
/*
* If all of the pattern/command pairs are lumped into a single
* argument, split them out again.
*/
splitArgs = 0;
if (caseArgc == 1) {
result = Tcl_SplitList(interp, caseArgv[0], &caseArgc, &caseArgv);
if (result != TCL_OK) {
return result;
}
splitArgs = 1;
}
for (i = 0; i < caseArgc; i += 2) {
int patArgc, j;
char **patArgv;
register char *p;
if (i == (caseArgc-1)) {
interp->result = "extra case pattern with no body";
result = TCL_ERROR;
goto cleanup;
}
/*
* Check for special case of single pattern (no list) with
* no backslash sequences.
*/
for (p = caseArgv[i]; *p != 0; p++) {
if (isspace(UCHAR(*p)) || (*p == '\\')) {
break;
}
}
if (*p == 0) {
if ((*caseArgv[i] == 'd')
&& (strcmp(caseArgv[i], "default") == 0)) {
body = i+1;
}
if (Tcl_StringMatch(string, caseArgv[i])) {
body = i+1;
goto match;
}
continue;
}
/*
* Break up pattern lists, then check each of the patterns
* in the list.
*/
result = Tcl_SplitList(interp, caseArgv[i], &patArgc, &patArgv);
if (result != TCL_OK) {
goto cleanup;
}
for (j = 0; j < patArgc; j++) {
if (Tcl_StringMatch(string, patArgv[j])) {
body = i+1;
break;
}
}
ckfree((char *) patArgv);
if (j < patArgc) {
break;
}
}
match:
if (body != -1) {
result = Tcl_Eval(interp, caseArgv[body]);
if (result == TCL_ERROR) {
char msg[100];
sprintf(msg, "\n (\"%.50s\" arm line %d)", caseArgv[body-1],
interp->errorLine);
Tcl_AddErrorInfo(interp, msg);
}
goto cleanup;
}
/*
* Nothing matched: return nothing.
*/
result = TCL_OK;
cleanup:
if (splitArgs) {
ckfree((char *) caseArgv);
}
return result;
}
/*
*----------------------------------------------------------------------
*
* Tcl_CatchCmd --
*
* This procedure is invoked to process the "catch" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_CatchCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int result;
if ((argc != 2) && (argc != 3)) {
Tcl_AppendResult(interp, "wrong # args: should be \"",
argv[0], " command ?varName?\"", (char *) NULL);
return TCL_ERROR;
}
result = Tcl_Eval(interp, argv[1]);
if (argc == 3) {
if (Tcl_SetVar(interp, argv[2], interp->result, 0) == NULL) {
Tcl_SetResult(interp, "couldn't save command result in variable",
TCL_STATIC);
return TCL_ERROR;
}
}
Tcl_ResetResult(interp);
sprintf(interp->result, "%d", result);
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ConcatCmd --
*
* This procedure is invoked to process the "concat" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_ConcatCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
if (argc >= 2) {
interp->result = Tcl_Concat(argc-1, argv+1);
interp->freeProc = (Tcl_FreeProc *) free;
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ContinueCmd --
*
* This procedure is invoked to process the "continue" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_ContinueCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
if (argc != 1) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
"\"", (char *) NULL);
return TCL_ERROR;
}
return TCL_CONTINUE;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ErrorCmd --
*
* This procedure is invoked to process the "error" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_ErrorCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Interp *iPtr = (Interp *) interp;
if ((argc < 2) || (argc > 4)) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" message ?errorInfo? ?errorCode?\"", (char *) NULL);
return TCL_ERROR;
}
if ((argc >= 3) && (argv[2][0] != 0)) {
Tcl_AddErrorInfo(interp, argv[2]);
iPtr->flags |= ERR_ALREADY_LOGGED;
}
if (argc == 4) {
Tcl_SetVar2(interp, "errorCode", (char *) NULL, argv[3],
TCL_GLOBAL_ONLY);
iPtr->flags |= ERROR_CODE_SET;
}
Tcl_SetResult(interp, argv[1], TCL_VOLATILE);
return TCL_ERROR;
}
/*
*----------------------------------------------------------------------
*
* Tcl_EvalCmd --
*
* This procedure is invoked to process the "eval" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_EvalCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int result;
char *cmd;
if (argc < 2) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" arg ?arg ...?\"", (char *) NULL);
return TCL_ERROR;
}
if (argc == 2) {
result = Tcl_Eval(interp, argv[1]);
} else {
/*
* More than one argument: concatenate them together with spaces
* between, then evaluate the result.
*/
cmd = Tcl_Concat(argc-1, argv+1);
result = Tcl_Eval(interp, cmd);
ckfree(cmd);
}
if (result == TCL_ERROR) {
char msg[60];
sprintf(msg, "\n (\"eval\" body line %d)", interp->errorLine);
Tcl_AddErrorInfo(interp, msg);
}
return result;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ExprCmd --
*
* This procedure is invoked to process the "expr" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_ExprCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Tcl_DString buffer;
int i, result;
if (argc < 2) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" arg ?arg ...?\"", (char *) NULL);
return TCL_ERROR;
}
if (argc == 2) {
return Tcl_ExprString(interp, argv[1]);
}
Tcl_DStringInit(&buffer);
Tcl_DStringAppend(&buffer, argv[1], -1);
for (i = 2; i < argc; i++) {
Tcl_DStringAppend(&buffer, " ", 1);
Tcl_DStringAppend(&buffer, argv[i], -1);
}
result = Tcl_ExprString(interp, buffer.string);
Tcl_DStringFree(&buffer);
return result;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ForCmd --
*
* This procedure is invoked to process the "for" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_ForCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int result, value;
if (argc != 5) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" start test next command\"", (char *) NULL);
return TCL_ERROR;
}
result = Tcl_Eval(interp, argv[1]);
if (result != TCL_OK) {
if (result == TCL_ERROR) {
Tcl_AddErrorInfo(interp, "\n (\"for\" initial command)");
}
return result;
}
while (1) {
result = Tcl_ExprBoolean(interp, argv[2], &value);
if (result != TCL_OK) {
return result;
}
if (!value) {
break;
}
result = Tcl_Eval(interp, argv[4]);
if ((result != TCL_OK) && (result != TCL_CONTINUE)) {
if (result == TCL_ERROR) {
char msg[60];
sprintf(msg, "\n (\"for\" body line %d)", interp->errorLine);
Tcl_AddErrorInfo(interp, msg);
}
break;
}
result = Tcl_Eval(interp, argv[3]);
if (result == TCL_BREAK) {
break;
} else if (result != TCL_OK) {
if (result == TCL_ERROR) {
Tcl_AddErrorInfo(interp, "\n (\"for\" loop-end command)");
}
return result;
}
}
if (result == TCL_BREAK) {
result = TCL_OK;
}
if (result == TCL_OK) {
Tcl_ResetResult(interp);
}
return result;
}
/*
*----------------------------------------------------------------------
*
* Tcl_ForeachCmd --
*
* This procedure is invoked to process the "foreach" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_ForeachCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int listArgc, i, result;
char **listArgv;
if (argc != 4) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" varName list command\"", (char *) NULL);
return TCL_ERROR;
}
/*
* Break the list up into elements, and execute the command once
* for each value of the element.
*/
result = Tcl_SplitList(interp, argv[2], &listArgc, &listArgv);
if (result != TCL_OK) {
return result;
}
for (i = 0; i < listArgc; i++) {
if (Tcl_SetVar(interp, argv[1], listArgv[i], 0) == NULL) {
Tcl_SetResult(interp, "couldn't set loop variable", TCL_STATIC);
result = TCL_ERROR;
break;
}
result = Tcl_Eval(interp, argv[3]);
if (result != TCL_OK) {
if (result == TCL_CONTINUE) {
result = TCL_OK;
} else if (result == TCL_BREAK) {
result = TCL_OK;
break;
} else if (result == TCL_ERROR) {
char msg[100];
sprintf(msg, "\n (\"foreach\" body line %d)",
interp->errorLine);
Tcl_AddErrorInfo(interp, msg);
break;
} else {
break;
}
}
}
ckfree((char *) listArgv);
if (result == TCL_OK) {
Tcl_ResetResult(interp);
}
return result;
}
/*
*----------------------------------------------------------------------
*
* Tcl_FormatCmd --
*
* This procedure is invoked to process the "format" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_FormatCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
register char *format; /* Used to read characters from the format
* string. */
char newFormat[40]; /* A new format specifier is generated here. */
int width; /* Field width from field specifier, or 0 if
* no width given. */
int precision; /* Field precision from field specifier, or 0
* if no precision given. */
int size; /* Number of bytes needed for result of
* conversion, based on type of conversion
* ("e", "s", etc.) and width from above. */
char *oneWordValue = NULL; /* Used to hold value to pass to sprintf, if
* it's a one-word value. */
double twoWordValue; /* Used to hold value to pass to sprintf if
* it's a two-word value. */
int useTwoWords; /* 0 means use oneWordValue, 1 means use
* twoWordValue. */
char *dst = interp->result; /* Where result is stored. Starts off at
* interp->resultSpace, but may get dynamically
* re-allocated if this isn't enough. */
int dstSize = 0; /* Number of non-null characters currently
* stored at dst. */
int dstSpace = TCL_RESULT_SIZE;
/* Total amount of storage space available
* in dst (not including null terminator. */
int noPercent; /* Special case for speed: indicates there's
* no field specifier, just a string to copy. */
int argIndex; /* Index of argument to substitute next. */
int gotXpg = 0; /* Non-zero means that an XPG3 %n$-style
* specifier has been seen. */
int gotSequential = 0; /* Non-zero means that a regular sequential
* (non-XPG3) conversion specifier has been
* seen. */
int useShort; /* Value to be printed is short (half word). */
char *end; /* Used to locate end of numerical fields. */
/*
* This procedure is a bit nasty. The goal is to use sprintf to
* do most of the dirty work. There are several problems:
* 1. this procedure can't trust its arguments.
* 2. we must be able to provide a large enough result area to hold
* whatever's generated. This is hard to estimate.
* 2. there's no way to move the arguments from argv to the call
* to sprintf in a reasonable way. This is particularly nasty
* because some of the arguments may be two-word values (doubles).
* So, what happens here is to scan the format string one % group
* at a time, making many individual calls to sprintf.
*/
if (argc < 2) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" formatString ?arg arg ...?\"", (char *) NULL);
return TCL_ERROR;
}
argIndex = 2;
for (format = argv[1]; *format != 0; ) {
register char *newPtr = newFormat;
width = precision = useTwoWords = noPercent = useShort = 0;
/*
* Get rid of any characters before the next field specifier.
*/
if (*format != '%') {
register char *p;
oneWordValue = p = format;
while ((*format != '%') && (*format != 0)) {
*p = *format;
p++;
format++;
}
size = p - oneWordValue;
noPercent = 1;
goto doField;
}
if (format[1] == '%') {
oneWordValue = format;
size = 1;
noPercent = 1;
format += 2;
goto doField;
}
/*
* Parse off a field specifier, compute how many characters
* will be needed to store the result, and substitute for
* "*" size specifiers.
*/
*newPtr = '%';
newPtr++;
format++;
if (isdigit(UCHAR(*format))) {
int tmp;
/*
* Check for an XPG3-style %n$ specification. Note: there
* must not be a mixture of XPG3 specs and non-XPG3 specs
* in the same format string.
*/
tmp = strtoul(format, &end, 10);
if (*end != '$') {
goto notXpg;
}
format = end+1;
gotXpg = 1;
if (gotSequential) {
goto mixedXPG;
}
argIndex = tmp+1;
if ((argIndex < 2) || (argIndex >= argc)) {
goto badIndex;
}
goto xpgCheckDone;
}
notXpg:
gotSequential = 1;
if (gotXpg) {
goto mixedXPG;
}
xpgCheckDone:
while ((*format == '-') || (*format == '#') || (*format == '0')
|| (*format == ' ') || (*format == '+')) {
*newPtr = *format;
newPtr++;
format++;
}
if (isdigit(UCHAR(*format))) {
width = strtoul(format, &end, 10);
format = end;
} else if (*format == '*') {
if (argIndex >= argc) {
goto badIndex;
}
if (Tcl_GetInt(interp, argv[argIndex], &width) != TCL_OK) {
goto fmtError;
}
argIndex++;
format++;
}
if (width != 0) {
sprintf(newPtr, "%d", width);
while (*newPtr != 0) {
newPtr++;
}
}
if (*format == '.') {
*newPtr = '.';
newPtr++;
format++;
}
if (isdigit(UCHAR(*format))) {
precision = strtoul(format, &end, 10);
format = end;
} else if (*format == '*') {
if (argIndex >= argc) {
goto badIndex;
}
if (Tcl_GetInt(interp, argv[argIndex], &precision) != TCL_OK) {
goto fmtError;
}
argIndex++;
format++;
}
if (precision != 0) {
sprintf(newPtr, "%d", precision);
while (*newPtr != 0) {
newPtr++;
}
}
if (*format == 'l') {
format++;
} else if (*format == 'h') {
useShort = 1;
*newPtr = 'h';
newPtr++;
format++;
}
*newPtr = *format;
newPtr++;
*newPtr = 0;
if (argIndex >= argc) {
goto badIndex;
}
switch (*format) {
case 'i':
newPtr[-1] = 'd';
case 'd':
case 'o':
case 'u':
case 'x':
case 'X':
if (Tcl_GetInt(interp, argv[argIndex], (int *) &oneWordValue)
!= TCL_OK) {
goto fmtError;
}
size = 40;
break;
case 's':
oneWordValue = argv[argIndex];
size = strlen(argv[argIndex]);
break;
case 'c':
if (Tcl_GetInt(interp, argv[argIndex], (int *) &oneWordValue)
!= TCL_OK) {
goto fmtError;
}
size = 1;
break;
case 'e':
case 'E':
case 'f':
case 'g':
case 'G':
if (Tcl_GetDouble(interp, argv[argIndex], &twoWordValue)
!= TCL_OK) {
goto fmtError;
}
useTwoWords = 1;
size = 320;
if (precision > 10) {
size += precision;
}
break;
case 0:
interp->result =
"format string ended in middle of field specifier";
goto fmtError;
default:
sprintf(interp->result, "bad field specifier \"%c\"", *format);
goto fmtError;
}
argIndex++;
format++;
/*
* Make sure that there's enough space to hold the formatted
* result, then format it.
*/
doField:
if (width > size) {
size = width;
}
if ((dstSize + size) > dstSpace) {
char *newDst;
int newSpace;
newSpace = 2*(dstSize + size);
newDst = (char *) ckalloc((unsigned) newSpace+1);
if (dstSize != 0) {
memcpy((VOID *) newDst, (VOID *) dst, dstSize);
}
if (dstSpace != TCL_RESULT_SIZE) {
ckfree(dst);
}
dst = newDst;
dstSpace = newSpace;
}
if (noPercent) {
memcpy((VOID *) (dst+dstSize), (VOID *) oneWordValue, size);
dstSize += size;
dst[dstSize] = 0;
} else {
if (useTwoWords) {
sprintf(dst+dstSize, newFormat, twoWordValue);
} else if (useShort) {
/*
* The double cast below is needed for a few machines
* (e.g. Pyramids as of 1/93) that don't like casts
* directly from pointers to shorts.
*/
sprintf(dst+dstSize, newFormat, (short) (int) oneWordValue);
} else {
sprintf(dst+dstSize, newFormat, (char *) oneWordValue);
}
dstSize += strlen(dst+dstSize);
}
}
interp->result = dst;
if (dstSpace != TCL_RESULT_SIZE) {
interp->freeProc = (Tcl_FreeProc *) free;
} else {
interp->freeProc = 0;
}
return TCL_OK;
mixedXPG:
interp->result = "cannot mix \"%\" and \"%n$\" conversion specifiers";
goto fmtError;
badIndex:
if (gotXpg) {
interp->result = "\"%n$\" argument index out of range";
} else {
interp->result = "not enough arguments for all format specifiers";
}
fmtError:
if (dstSpace != TCL_RESULT_SIZE) {
ckfree(dst);
}
return TCL_ERROR;
}

View File

@ -1,455 +0,0 @@
/*
* tclGlob.c --
*
* This file provides procedures and commands for file name
* manipulation, such as tilde expansion and globbing.
*
* Copyright (c) 1990-1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef lint
static char rcsid[] = "$Header: /user6/ouster/tcl/RCS/tclGlob.c,v 1.36 93/10/14 15:14:08 ouster Exp $ SPRITE (Berkeley)";
#endif /* not lint */
#include "tclInt.h"
#include "tclUnix.h"
/*
* The structure below is used to keep track of a globbing result
* being built up (i.e. a partial list of file names). The list
* grows dynamically to be as big as needed.
*/
typedef struct {
char *result; /* Pointer to result area. */
int totalSpace; /* Total number of characters allocated
* for result. */
int spaceUsed; /* Number of characters currently in use
* to hold the partial result (not including
* the terminating NULL). */
int dynamic; /* 0 means result is static space, 1 means
* it's dynamic. */
} GlobResult;
/*
* Declarations for procedures local to this file:
*/
static int DoGlob _ANSI_ARGS_((Tcl_Interp *interp, char *dir,
char *rem));
/*
*----------------------------------------------------------------------
*
* DoGlob --
*
* This recursive procedure forms the heart of the globbing
* code. It performs a depth-first traversal of the tree
* given by the path name to be globbed.
*
* Results:
* The return value is a standard Tcl result indicating whether
* an error occurred in globbing. After a normal return the
* result in interp will be set to hold all of the file names
* given by the dir and rem arguments. After an error the
* result in interp will hold an error message.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
static int
DoGlob(interp, dir, rem)
Tcl_Interp *interp; /* Interpreter to use for error
* reporting (e.g. unmatched brace). */
char *dir; /* Name of a directory at which to
* start glob expansion. This name
* is fixed: it doesn't contain any
* globbing chars. */
char *rem; /* Path to glob-expand. */
{
/*
* When this procedure is entered, the name to be globbed may
* already have been partly expanded by ancestor invocations of
* DoGlob. The part that's already been expanded is in "dir"
* (this may initially be empty), and the part still to expand
* is in "rem". This procedure expands "rem" one level, making
* recursive calls to itself if there's still more stuff left
* in the remainder.
*/
Tcl_DString newName; /* Holds new name consisting of
* dir plus the first part of rem. */
register char *p;
register char c;
char *openBrace, *closeBrace, *name, *dirName;
int gotSpecial, baseLength;
int result = TCL_OK;
struct stat statBuf;
/*
* Make sure that the directory part of the name really is a
* directory. If the directory name is "", use the name "."
* instead, because some UNIX systems don't treat "" like "."
* automatically. Keep the "" for use in generating file names,
* otherwise "glob foo.c" would return "./foo.c".
*/
if (*dir == '\0') {
dirName = ".";
} else {
dirName = dir;
}
if ((stat(dirName, &statBuf) != 0) || !S_ISDIR(statBuf.st_mode)) {
return TCL_OK;
}
Tcl_DStringInit(&newName);
/*
* First, find the end of the next element in rem, checking
* along the way for special globbing characters.
*/
gotSpecial = 0;
openBrace = closeBrace = NULL;
for (p = rem; ; p++) {
c = *p;
if ((c == '\0') || ((openBrace == NULL) && (c == '/'))) {
break;
}
if ((c == '{') && (openBrace == NULL)) {
openBrace = p;
}
if ((c == '}') && (openBrace != NULL) && (closeBrace == NULL)) {
closeBrace = p;
}
if ((c == '*') || (c == '[') || (c == '\\') || (c == '?')) {
gotSpecial = 1;
}
}
/*
* If there is an open brace in the argument, then make a recursive
* call for each element between the braces. In this case, the
* recursive call to DoGlob uses the same "dir" that we got.
* If there are several brace-pairs in a single name, we just handle
* one here, and the others will be handled in recursive calls.
*/
if (openBrace != NULL) {
char *element;
if (closeBrace == NULL) {
Tcl_ResetResult(interp);
interp->result = "unmatched open-brace in file name";
result = TCL_ERROR;
goto done;
}
Tcl_DStringAppend(&newName, rem, openBrace-rem);
baseLength = newName.length;
for (p = openBrace; *p != '}'; ) {
element = p+1;
for (p = element; ((*p != '}') && (*p != ',')); p++) {
/* Empty loop body. */
}
Tcl_DStringAppend(&newName, element, p-element);
Tcl_DStringAppend(&newName, closeBrace+1, -1);
result = DoGlob(interp, dir, newName.string);
if (result != TCL_OK) {
goto done;
}
newName.length = baseLength;
}
goto done;
}
/*
* Start building up the next-level name with dir plus a slash if
* needed to separate it from the next file name.
*/
Tcl_DStringAppend(&newName, dir, -1);
if ((dir[0] != 0) && (newName.string[newName.length-1] != '/')) {
Tcl_DStringAppend(&newName, "/", 1);
}
baseLength = newName.length;
/*
* If there were any pattern-matching characters, then scan through
* the directory to find all the matching names.
*/
if (gotSpecial) {
DIR *d;
struct dirent *entryPtr;
char savedChar;
d = opendir(dirName);
if (d == NULL) {
Tcl_ResetResult(interp);
Tcl_AppendResult(interp, "couldn't read directory \"",
dirName, "\": ", Tcl_PosixError(interp), (char *) NULL);
result = TCL_ERROR;
goto done;
}
/*
* Temporarily store a null into rem so that the pattern string
* is now null-terminated.
*/
savedChar = *p;
*p = 0;
while (1) {
entryPtr = readdir(d);
if (entryPtr == NULL) {
break;
}
/*
* Don't match names starting with "." unless the "." is
* present in the pattern.
*/
if ((*entryPtr->d_name == '.') && (*rem != '.')) {
continue;
}
if (Tcl_StringMatch(entryPtr->d_name, rem)) {
newName.length = baseLength;
Tcl_DStringAppend(&newName, entryPtr->d_name, -1);
if (savedChar == 0) {
Tcl_AppendElement(interp, newName.string);
} else {
result = DoGlob(interp, newName.string, p+1);
if (result != TCL_OK) {
break;
}
}
}
}
closedir(d);
*p = savedChar;
goto done;
}
/*
* The current element is a simple one with no fancy features. Add
* it to the new name. If there are more elements still to come,
* then recurse to process them.
*/
Tcl_DStringAppend(&newName, rem, p-rem);
if (*p != 0) {
result = DoGlob(interp, newName.string, p+1);
goto done;
}
/*
* There are no more elements in the pattern. Check to be sure the
* file actually exists, then add its name to the list being formed
* in interp-result.
*/
name = newName.string;
if (*name == 0) {
name = ".";
}
if (access(name, F_OK) != 0) {
goto done;
}
Tcl_AppendElement(interp, name);
done:
Tcl_DStringFree(&newName);
return result;
}
/*
*----------------------------------------------------------------------
*
* Tcl_TildeSubst --
*
* Given a name starting with a tilde, produce a name where
* the tilde and following characters have been replaced by
* the home directory location for the named user.
*
* Results:
* The result is a pointer to a static string containing
* the new name. If there was an error in processing the
* tilde, then an error message is left in interp->result
* and the return value is NULL. The result may be stored
* in bufferPtr; the caller must call Tcl_DStringFree(bufferPtr)
* to free the name.
*
* Side effects:
* Information may be left in bufferPtr.
*
*----------------------------------------------------------------------
*/
char *
Tcl_TildeSubst(interp, name, bufferPtr)
Tcl_Interp *interp; /* Interpreter in which to store error
* message (if necessary). */
char *name; /* File name, which may begin with "~/"
* (to indicate current user's home directory)
* or "~<user>/" (to indicate any user's
* home directory). */
Tcl_DString *bufferPtr; /* May be used to hold result. Must not hold
* anything at the time of the call, and need
* not even be initialized. */
{
char *dir;
register char *p;
Tcl_DStringInit(bufferPtr);
if (name[0] != '~') {
return name;
}
if ((name[1] == '/') || (name[1] == '\0')) {
dir = getenv("HOME");
if (dir == NULL) {
Tcl_ResetResult(interp);
Tcl_AppendResult(interp, "couldn't find HOME environment ",
"variable to expand \"", name, "\"", (char *) NULL);
return NULL;
}
Tcl_DStringAppend(bufferPtr, dir, -1);
Tcl_DStringAppend(bufferPtr, name+1, -1);
} else {
struct passwd *pwPtr;
for (p = &name[1]; (*p != 0) && (*p != '/'); p++) {
/* Null body; just find end of name. */
}
Tcl_DStringAppend(bufferPtr, name+1, p - (name+1));
pwPtr = getpwnam(bufferPtr->string);
if (pwPtr == NULL) {
endpwent();
Tcl_ResetResult(interp);
Tcl_AppendResult(interp, "user \"", bufferPtr->string,
"\" doesn't exist", (char *) NULL);
return NULL;
}
Tcl_DStringFree(bufferPtr);
Tcl_DStringAppend(bufferPtr, pwPtr->pw_dir, -1);
Tcl_DStringAppend(bufferPtr, p, -1);
endpwent();
}
return bufferPtr->string;
}
/*
*----------------------------------------------------------------------
*
* Tcl_GlobCmd --
*
* This procedure is invoked to process the "glob" Tcl command.
* See the user documentation for details on what it does.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* See the user documentation.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
int
Tcl_GlobCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int i, result, noComplain, firstArg;
if (argc < 2) {
notEnoughArgs:
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" ?switches? name ?name ...?\"", (char *) NULL);
return TCL_ERROR;
}
noComplain = 0;
for (firstArg = 1; (firstArg < argc) && (argv[firstArg][0] == '-');
firstArg++) {
if (strcmp(argv[firstArg], "-nocomplain") == 0) {
noComplain = 1;
} else if (strcmp(argv[firstArg], "--") == 0) {
firstArg++;
break;
} else {
Tcl_AppendResult(interp, "bad switch \"", argv[firstArg],
"\": must be -nocomplain or --", (char *) NULL);
return TCL_ERROR;
}
}
if (firstArg >= argc) {
goto notEnoughArgs;
}
for (i = firstArg; i < argc; i++) {
char *thisName;
Tcl_DString buffer;
thisName = Tcl_TildeSubst(interp, argv[i], &buffer);
if (thisName == NULL) {
return TCL_ERROR;
}
if (*thisName == '/') {
if (thisName[1] == '/') {
/*
* This is a special hack for systems like those from Apollo
* where there is a super-root at "//": need to treat the
* double-slash as a single name.
*/
result = DoGlob(interp, "//", thisName+2);
} else {
result = DoGlob(interp, "/", thisName+1);
}
} else {
result = DoGlob(interp, "", thisName);
}
Tcl_DStringFree(&buffer);
if (result != TCL_OK) {
return result;
}
}
if ((*interp->result == 0) && !noComplain) {
char *sep = "";
Tcl_AppendResult(interp, "no files matched glob pattern",
(argc == 2) ? " \"" : "s \"", (char *) NULL);
for (i = firstArg; i < argc; i++) {
Tcl_AppendResult(interp, sep, argv[i], (char *) NULL);
sep = " ";
}
Tcl_AppendResult(interp, "\"", (char *) NULL);
return TCL_ERROR;
}
return TCL_OK;
}

View File

@ -1,786 +0,0 @@
/*
* tclTest.c --
*
* This file contains C command procedures for a bunch of additional
* Tcl commands that are used for testing out Tcl's C interfaces.
* These commands are not normally included in Tcl applications;
* they're only used for testing.
*
* Copyright (c) 1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef lint
static char rcsid[] = "$Header: /user6/ouster/tcl/RCS/tclTest.c,v 1.15 93/09/09 16:46:52 ouster Exp $ SPRITE (Berkeley)";
#endif /* not lint */
#include "tclInt.h"
#include "tclUnix.h"
/*
* The following variable is a special hack that allows applications
* to be linked using the procedure "main" from the Tcl library. The
* variable generates a reference to "main", which causes main to
* be brought in from the library (and all of Tcl with it).
*/
extern int main();
int *tclDummyMainPtr = (int *) main;
/*
* Dynamic string shared by TestdcallCmd and DelCallbackProc; used
* to collect the results of the various deletion callbacks.
*/
static Tcl_DString delString;
static Tcl_Interp *delInterp;
/*
* One of the following structures exists for each asynchronous
* handler created by the "testasync" command".
*/
typedef struct TestAsyncHandler {
int id; /* Identifier for this handler. */
Tcl_AsyncHandler handler; /* Tcl's token for the handler. */
char *command; /* Command to invoke when the
* handler is invoked. */
struct TestAsyncHandler *nextPtr; /* Next is list of handlers. */
} TestAsyncHandler;
static TestAsyncHandler *firstHandler = NULL;
/*
* The variable below is a token for an asynchronous handler for
* interrupt signals, or NULL if none exists.
*/
static Tcl_AsyncHandler intHandler;
/*
* The dynamic string below is used by the "testdstring" command
* to test the dynamic string facilities.
*/
static Tcl_DString dstring;
/*
* Forward declarations for procedures defined later in this file:
*/
static int AsyncHandlerProc _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int code));
static void CmdDelProc1 _ANSI_ARGS_((ClientData clientData));
static void CmdDelProc2 _ANSI_ARGS_((ClientData clientData));
static int CmdProc1 _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int argc, char **argv));
static int CmdProc2 _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int argc, char **argv));
static void DelCallbackProc _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp));
static int IntHandlerProc _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, int code));
static void IntProc();
static int TestasyncCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestcmdinfoCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestdcallCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestdstringCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestlinkCmd _ANSI_ARGS_((ClientData dummy,
Tcl_Interp *interp, int argc, char **argv));
static int TestMathFunc _ANSI_ARGS_((ClientData clientData,
Tcl_Interp *interp, Tcl_Value *args,
Tcl_Value *resultPtr));
/*
*----------------------------------------------------------------------
*
* Tcl_AppInit --
*
* This procedure performs application-specific initialization.
* Most applications, especially those that incorporate additional
* packages, will have their own version of this procedure.
*
* Results:
* Returns a standard Tcl completion code, and leaves an error
* message in interp->result if an error occurs.
*
* Side effects:
* Depends on the startup script.
*
*----------------------------------------------------------------------
*/
int
Tcl_AppInit(interp)
Tcl_Interp *interp; /* Interpreter for application. */
{
/*
* Call the init procedures for included packages. Each call should
* look like this:
*
* if (Mod_Init(interp) == TCL_ERROR) {
* return TCL_ERROR;
* }
*
* where "Mod" is the name of the module.
*/
if (Tcl_Init(interp) == TCL_ERROR) {
return TCL_ERROR;
}
/*
* Create additional commands and math functions for testing Tcl.
*/
Tcl_CreateCommand(interp, "testasync", TestasyncCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testcmdinfo", TestcmdinfoCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testdcall", TestdcallCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_DStringInit(&dstring);
Tcl_CreateCommand(interp, "testdstring", TestdstringCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateCommand(interp, "testlink", TestlinkCmd, (ClientData) 0,
(Tcl_CmdDeleteProc *) NULL);
Tcl_CreateMathFunc(interp, "T1", 0, (Tcl_ValueType *) NULL, TestMathFunc,
(ClientData) 123);
Tcl_CreateMathFunc(interp, "T2", 0, (Tcl_ValueType *) NULL, TestMathFunc,
(ClientData) 345);
/*
* Specify a user-specific startup file to invoke if the application
* is run interactively. If this line is deleted then no user-specific
* startup file will be run under any conditions.
*/
tcl_RcFileName = "~/.tclshrc";
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* TestasyncCmd --
*
* This procedure implements the "testasync" command. It is used
* to test the asynchronous handler facilities of Tcl.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* Creates, deletes, and invokes handlers.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
static int
TestasyncCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
TestAsyncHandler *asyncPtr, *prevPtr;
int id, code;
static int nextId = 1;
if (argc < 2) {
wrongNumArgs:
interp->result = "wrong # args";
return TCL_ERROR;
}
if (strcmp(argv[1], "create") == 0) {
if (argc != 3) {
goto wrongNumArgs;
}
asyncPtr = (TestAsyncHandler *) ckalloc(sizeof(TestAsyncHandler));
asyncPtr->id = nextId;
nextId++;
asyncPtr->handler = Tcl_AsyncCreate(AsyncHandlerProc,
(ClientData) asyncPtr);
asyncPtr->command = ckalloc((unsigned) (strlen(argv[2]) + 1));
strcpy(asyncPtr->command, argv[2]);
asyncPtr->nextPtr = firstHandler;
firstHandler = asyncPtr;
sprintf(interp->result, "%d", asyncPtr->id);
} else if (strcmp(argv[1], "delete") == 0) {
if (argc == 2) {
while (firstHandler != NULL) {
asyncPtr = firstHandler;
firstHandler = asyncPtr->nextPtr;
Tcl_AsyncDelete(asyncPtr->handler);
ckfree(asyncPtr->command);
ckfree((char *) asyncPtr);
}
return TCL_OK;
}
if (argc != 3) {
goto wrongNumArgs;
}
if (Tcl_GetInt(interp, argv[2], &id) != TCL_OK) {
return TCL_ERROR;
}
for (prevPtr = NULL, asyncPtr = firstHandler; asyncPtr != NULL;
prevPtr = asyncPtr, asyncPtr = asyncPtr->nextPtr) {
if (asyncPtr->id != id) {
continue;
}
if (prevPtr == NULL) {
firstHandler = asyncPtr->nextPtr;
} else {
prevPtr->nextPtr = asyncPtr->nextPtr;
}
Tcl_AsyncDelete(asyncPtr->handler);
ckfree(asyncPtr->command);
ckfree((char *) asyncPtr);
break;
}
} else if (strcmp(argv[1], "int") == 0) {
if (argc != 2) {
goto wrongNumArgs;
}
intHandler = Tcl_AsyncCreate(IntHandlerProc, (ClientData) interp);
signal(SIGINT, IntProc);
} else if (strcmp(argv[1], "mark") == 0) {
if (argc != 5) {
goto wrongNumArgs;
}
if ((Tcl_GetInt(interp, argv[2], &id) != TCL_OK)
|| (Tcl_GetInt(interp, argv[4], &code) != TCL_OK)) {
return TCL_ERROR;
}
for (asyncPtr = firstHandler; asyncPtr != NULL;
asyncPtr = asyncPtr->nextPtr) {
if (asyncPtr->id == id) {
Tcl_AsyncMark(asyncPtr->handler);
break;
}
}
Tcl_SetResult(interp, argv[3], TCL_VOLATILE);
return code;
} else {
Tcl_AppendResult(interp, "bad option \"", argv[1],
"\": must be create, delete, int, or mark",
(char *) NULL);
return TCL_ERROR;
}
return TCL_OK;
}
static int
AsyncHandlerProc(clientData, interp, code)
ClientData clientData; /* Pointer to TestAsyncHandler structure. */
Tcl_Interp *interp; /* Interpreter in which command was
* executed, or NULL. */
int code; /* Current return code from command. */
{
TestAsyncHandler *asyncPtr = (TestAsyncHandler *) clientData;
char *listArgv[4];
char string[20], *cmd;
sprintf(string, "%d", code);
listArgv[0] = asyncPtr->command;
listArgv[1] = interp->result;
listArgv[2] = string;
listArgv[3] = NULL;
cmd = Tcl_Merge(3, listArgv);
code = Tcl_Eval(interp, cmd);
ckfree(cmd);
return code;
}
static void
IntProc()
{
Tcl_AsyncMark(intHandler);
}
static int
IntHandlerProc(clientData, interp, code)
ClientData clientData; /* Interpreter in which to invoke command. */
Tcl_Interp *interp; /* Interpreter in which command was
* executed, or NULL. */
int code; /* Current return code from command. */
{
char *listArgv[4];
char string[20], *cmd;
interp = (Tcl_Interp *) clientData;
listArgv[0] = Tcl_GetVar(interp, "sigIntCmd", TCL_GLOBAL_ONLY);
if (listArgv[0] == NULL) {
return code;
}
listArgv[1] = interp->result;
sprintf(string, "%d", code);
listArgv[2] = string;
listArgv[3] = NULL;
cmd = Tcl_Merge(3, listArgv);
code = Tcl_Eval(interp, cmd);
ckfree(cmd);
return code;
}
/*
*----------------------------------------------------------------------
*
* TestdcallCmd --
*
* This procedure implements the "testdcall" command. It is used
* to test Tcl_CallWhenDeleted.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* Creates and deletes interpreters.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
static int
TestdcallCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int i, id;
delInterp = Tcl_CreateInterp();
Tcl_DStringInit(&delString);
for (i = 1; i < argc; i++) {
if (Tcl_GetInt(interp, argv[i], &id) != TCL_OK) {
return TCL_ERROR;
}
if (id < 0) {
Tcl_DontCallWhenDeleted(delInterp, DelCallbackProc,
(ClientData) (-id));
} else {
Tcl_CallWhenDeleted(delInterp, DelCallbackProc,
(ClientData) id);
}
}
Tcl_DeleteInterp(delInterp);
Tcl_DStringResult(interp, &delString);
return TCL_OK;
}
/*
* The deletion callback used by TestdcallCmd:
*/
static void
DelCallbackProc(clientData, interp)
ClientData clientData; /* Numerical value to append to
* delString. */
Tcl_Interp *interp; /* Interpreter being deleted. */
{
int id = (int) clientData;
char buffer[10];
sprintf(buffer, "%d", id);
Tcl_DStringAppendElement(&delString, buffer);
if (interp != delInterp) {
Tcl_DStringAppendElement(&delString, "bogus interpreter argument!");
}
}
/*
*----------------------------------------------------------------------
*
* TestcmdinfoCmd --
*
* This procedure implements the "testcmdinfo" command. It is used
* to test Tcl_GetCmdInfo, Tcl_SetCmdInfo, and command creation
* and deletion.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* Creates and deletes various commands and modifies their data.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
static int
TestcmdinfoCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Tcl_CmdInfo info;
if (argc != 3) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" option cmdName\"", (char *) NULL);
return TCL_ERROR;
}
if (strcmp(argv[1], "create") == 0) {
Tcl_CreateCommand(interp, argv[2], CmdProc1, (ClientData) "original",
CmdDelProc1);
} else if (strcmp(argv[1], "delete") == 0) {
Tcl_DStringInit(&delString);
Tcl_DeleteCommand(interp, argv[2]);
Tcl_DStringResult(interp, &delString);
} else if (strcmp(argv[1], "get") == 0) {
if (Tcl_GetCommandInfo(interp, argv[2], &info) ==0) {
interp->result = "??";
return TCL_OK;
}
if (info.proc == CmdProc1) {
Tcl_AppendResult(interp, "CmdProc1", " ",
(char *) info.clientData, (char *) NULL);
} else if (info.proc == CmdProc2) {
Tcl_AppendResult(interp, "CmdProc2", " ",
(char *) info.clientData, (char *) NULL);
} else {
Tcl_AppendResult(interp, "unknown", (char *) NULL);
}
if (info.deleteProc == CmdDelProc1) {
Tcl_AppendResult(interp, " CmdDelProc1", " ",
(char *) info.deleteData, (char *) NULL);
} else if (info.deleteProc == CmdDelProc2) {
Tcl_AppendResult(interp, " CmdDelProc2", " ",
(char *) info.deleteData, (char *) NULL);
} else {
Tcl_AppendResult(interp, " unknown", (char *) NULL);
}
} else if (strcmp(argv[1], "modify") == 0) {
info.proc = CmdProc2;
info.clientData = (ClientData) "new_command_data";
info.deleteProc = CmdDelProc2;
info.deleteData = (ClientData) "new_delete_data";
if (Tcl_SetCommandInfo(interp, argv[2], &info) == 0) {
interp->result = "0";
} else {
interp->result = "1";
}
} else {
Tcl_AppendResult(interp, "bad option \"", argv[1],
"\": must be create, delete, get, or modify",
(char *) NULL);
return TCL_ERROR;
}
return TCL_OK;
}
/*ARGSUSED*/
static int
CmdProc1(clientData, interp, argc, argv)
ClientData clientData; /* String to return. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Tcl_AppendResult(interp, "CmdProc1 ", (char *) clientData,
(char *) NULL);
return TCL_OK;
}
/*ARGSUSED*/
static int
CmdProc2(clientData, interp, argc, argv)
ClientData clientData; /* String to return. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
Tcl_AppendResult(interp, "CmdProc2 ", (char *) clientData,
(char *) NULL);
return TCL_OK;
}
static void
CmdDelProc1(clientData)
ClientData clientData; /* String to save. */
{
Tcl_DStringInit(&delString);
Tcl_DStringAppend(&delString, "CmdDelProc1 ", -1);
Tcl_DStringAppend(&delString, (char *) clientData, -1);
}
static void
CmdDelProc2(clientData)
ClientData clientData; /* String to save. */
{
Tcl_DStringInit(&delString);
Tcl_DStringAppend(&delString, "CmdDelProc2 ", -1);
Tcl_DStringAppend(&delString, (char *) clientData, -1);
}
/*
*----------------------------------------------------------------------
*
* TestdstringCmd --
*
* This procedure implements the "testdstring" command. It is used
* to test the dynamic string facilities of Tcl.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* Creates, deletes, and invokes handlers.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
static int
TestdstringCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
int count;
if (argc < 2) {
wrongNumArgs:
interp->result = "wrong # args";
return TCL_ERROR;
}
if (strcmp(argv[1], "append") == 0) {
if (argc != 4) {
goto wrongNumArgs;
}
if (Tcl_GetInt(interp, argv[3], &count) != TCL_OK) {
return TCL_ERROR;
}
Tcl_DStringAppend(&dstring, argv[2], count);
} else if (strcmp(argv[1], "element") == 0) {
if (argc != 3) {
goto wrongNumArgs;
}
Tcl_DStringAppendElement(&dstring, argv[2]);
} else if (strcmp(argv[1], "end") == 0) {
if (argc != 2) {
goto wrongNumArgs;
}
Tcl_DStringEndSublist(&dstring);
} else if (strcmp(argv[1], "free") == 0) {
if (argc != 2) {
goto wrongNumArgs;
}
Tcl_DStringFree(&dstring);
} else if (strcmp(argv[1], "get") == 0) {
if (argc != 2) {
goto wrongNumArgs;
}
interp->result = Tcl_DStringValue(&dstring);
} else if (strcmp(argv[1], "length") == 0) {
if (argc != 2) {
goto wrongNumArgs;
}
sprintf(interp->result, "%d", Tcl_DStringLength(&dstring));
} else if (strcmp(argv[1], "result") == 0) {
if (argc != 2) {
goto wrongNumArgs;
}
Tcl_DStringResult(interp, &dstring);
} else if (strcmp(argv[1], "trunc") == 0) {
if (argc != 3) {
goto wrongNumArgs;
}
if (Tcl_GetInt(interp, argv[2], &count) != TCL_OK) {
return TCL_ERROR;
}
Tcl_DStringTrunc(&dstring, count);
} else if (strcmp(argv[1], "start") == 0) {
if (argc != 2) {
goto wrongNumArgs;
}
Tcl_DStringStartSublist(&dstring);
} else {
Tcl_AppendResult(interp, "bad option \"", argv[1],
"\": must be append, element, end, free, get, length, ",
"result, trunc, or start", (char *) NULL);
return TCL_ERROR;
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* TestlinkCmd --
*
* This procedure implements the "testlink" command. It is used
* to test Tcl_LinkVar and related library procedures.
*
* Results:
* A standard Tcl result.
*
* Side effects:
* Creates and deletes various variable links, plus returns
* values of the linked variables.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
static int
TestlinkCmd(dummy, interp, argc, argv)
ClientData dummy; /* Not used. */
Tcl_Interp *interp; /* Current interpreter. */
int argc; /* Number of arguments. */
char **argv; /* Argument strings. */
{
static int intVar = 43;
static int boolVar = 4;
static double realVar = 1.23;
static char *stringVar = NULL;
char buffer[TCL_DOUBLE_SPACE];
int writable, flag;
if (argc < 2) {
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
" option ?arg arg arg?\"", (char *) NULL);
return TCL_ERROR;
}
if (strcmp(argv[1], "create") == 0) {
if (Tcl_GetBoolean(interp, argv[2], &writable) != TCL_OK) {
return TCL_ERROR;
}
flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "int", (char *) &intVar,
TCL_LINK_INT | flag) != TCL_OK) {
return TCL_ERROR;
}
if (Tcl_GetBoolean(interp, argv[3], &writable) != TCL_OK) {
return TCL_ERROR;
}
flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "real", (char *) &realVar,
TCL_LINK_DOUBLE | flag) != TCL_OK) {
return TCL_ERROR;
}
if (Tcl_GetBoolean(interp, argv[4], &writable) != TCL_OK) {
return TCL_ERROR;
}
flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "bool", (char *) &boolVar,
TCL_LINK_BOOLEAN | flag) != TCL_OK) {
return TCL_ERROR;
}
if (Tcl_GetBoolean(interp, argv[5], &writable) != TCL_OK) {
return TCL_ERROR;
}
flag = (writable != 0) ? 0 : TCL_LINK_READ_ONLY;
if (Tcl_LinkVar(interp, "string", (char *) &stringVar,
TCL_LINK_STRING | flag) != TCL_OK) {
return TCL_ERROR;
}
} else if (strcmp(argv[1], "delete") == 0) {
Tcl_UnlinkVar(interp, "int");
Tcl_UnlinkVar(interp, "real");
Tcl_UnlinkVar(interp, "bool");
Tcl_UnlinkVar(interp, "string");
} else if (strcmp(argv[1], "get") == 0) {
sprintf(buffer, "%d", intVar);
Tcl_AppendElement(interp, buffer);
Tcl_PrintDouble(interp, realVar, buffer);
Tcl_AppendElement(interp, buffer);
sprintf(buffer, "%d", boolVar);
Tcl_AppendElement(interp, buffer);
Tcl_AppendElement(interp, (stringVar == NULL) ? "-" : stringVar);
} else if (strcmp(argv[1], "set") == 0) {
if (argc != 6) {
Tcl_AppendResult(interp, "wrong # args: should be \"",
argv[0], " ", argv[1],
"intValue realValue boolValue stringValue\"", (char *) NULL);
return TCL_ERROR;
}
if (argv[2][0] != 0) {
if (Tcl_GetInt(interp, argv[2], &intVar) != TCL_OK) {
return TCL_ERROR;
}
}
if (argv[3][0] != 0) {
if (Tcl_GetDouble(interp, argv[3], &realVar) != TCL_OK) {
return TCL_ERROR;
}
}
if (argv[4][0] != 0) {
if (Tcl_GetInt(interp, argv[4], &boolVar) != TCL_OK) {
return TCL_ERROR;
}
}
if (argv[5][0] != 0) {
if (stringVar != NULL) {
ckfree(stringVar);
}
if (strcmp(argv[5], "-") == 0) {
stringVar = NULL;
} else {
stringVar = ckalloc((unsigned) (strlen(argv[5]) + 1));
strcpy(stringVar, argv[5]);
}
}
} else {
Tcl_AppendResult(interp, "bad option \"", argv[1],
"\": should be create, delete, get, or set",
(char *) NULL);
return TCL_ERROR;
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* TestMathFunc --
*
* This is a user-defined math procedure to test out math procedures
* with no arguments.
*
* Results:
* A normal Tcl completion code.
*
* Side effects:
* None.
*
*----------------------------------------------------------------------
*/
/* ARGSUSED */
static int
TestMathFunc(clientData, interp, args, resultPtr)
ClientData clientData; /* Integer value to return. */
Tcl_Interp *interp; /* Not used. */
Tcl_Value *args; /* Not used. */
Tcl_Value *resultPtr; /* Where to store result. */
{
resultPtr->type = TCL_INT;
resultPtr->intValue = (int) clientData;
return TCL_OK;
}

View File

@ -1,285 +0,0 @@
/*
* tclUnix.h --
*
* This file reads in UNIX-related header files and sets up
* UNIX-related macros for Tcl's UNIX core. It should be the
* only file that contains #ifdefs to handle different flavors
* of UNIX. This file sets up the union of all UNIX-related
* things needed by any of the Tcl core files. This file
* depends on configuration #defines in tclConfig.h
*
* Much of the material in this file was originally contributed
* by Karl Lehenbauer, Mark Diekhans and Peter da Silva.
*
* Copyright (c) 1991-1993 The Regents of the University of California.
* All rights reserved.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* $Header: /user6/ouster/tcl/RCS/tclUnix.h,v 1.46 93/10/28 16:32:28 ouster Exp $ SPRITE (Berkeley)
*/
#ifndef _TCLUNIX
#define _TCLUNIX
#include <errno.h>
#include <fcntl.h>
#include <pwd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#ifdef USE_DIRENT2_H
# include "compat/dirent2.h"
#else
# ifdef NO_DIRENT_H
# include "compat/dirent.h"
# else
# include <dirent.h>
# endif
#endif
#include <sys/file.h>
#include <sys/stat.h>
#ifndef NO_SYS_TIME_H
# include <sys/time.h>
#else
# include <time.h>
#endif
#ifndef NO_SYS_WAIT_H
# include <sys/wait.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#else
# include "compat/unistd.h"
#endif
/*
* Not all systems declare the errno variable in errno.h. so this
* file does it explicitly. The list of system error messages also
* isn't generally declared in a header file anywhere.
*/
extern int errno;
/*
* The type of the status returned by wait varies from UNIX system
* to UNIX system. The macro below defines it:
*/
#ifdef AIX
# define WAIT_STATUS_TYPE pid_t
#else
#ifndef NO_UNION_WAIT
# define WAIT_STATUS_TYPE union wait
#else
# define WAIT_STATUS_TYPE int
#endif
#endif
/*
* Supply definitions for macros to query wait status, if not already
* defined in header files above.
*/
#ifndef WIFEXITED
# define WIFEXITED(stat) (((*((int *) &(stat))) & 0xff) == 0)
#endif
#ifndef WEXITSTATUS
# define WEXITSTATUS(stat) (((*((int *) &(stat))) >> 8) & 0xff)
#endif
#ifndef WIFSIGNALED
# define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) & 0x00ff)))
#endif
#ifndef WTERMSIG
# define WTERMSIG(stat) ((*((int *) &(stat))) & 0x7f)
#endif
#ifndef WIFSTOPPED
# define WIFSTOPPED(stat) (((*((int *) &(stat))) & 0xff) == 0177)
#endif
#ifndef WSTOPSIG
# define WSTOPSIG(stat) (((*((int *) &(stat))) >> 8) & 0xff)
#endif
/*
* Supply macros for seek offsets, if they're not already provided by
* an include file.
*/
#ifndef SEEK_SET
# define SEEK_SET 0
#endif
#ifndef SEEK_CUR
# define SEEK_CUR 1
#endif
#ifndef SEEK_END
# define SEEK_END 2
#endif
/*
* The stuff below is needed by the "time" command. If this
* system has no gettimeofday call, then must use times and the
* CLK_TCK #define (from sys/param.h) to compute elapsed time.
* Unfortunately, some systems only have HZ and no CLK_TCK, and
* some might not even have HZ.
*/
#ifdef NO_GETTOD
# include <sys/times.h>
# include <sys/param.h>
# ifndef CLK_TCK
# ifdef HZ
# define CLK_TCK HZ
# else
# define CLK_TCK 60
# endif
# endif
#endif
/*
* Define access mode constants if they aren't already defined.
*/
#ifndef F_OK
# define F_OK 00
#endif
#ifndef X_OK
# define X_OK 01
#endif
#ifndef W_OK
# define W_OK 02
#endif
#ifndef R_OK
# define R_OK 04
#endif
/*
* On systems without symbolic links (i.e. S_IFLNK isn't defined)
* define "lstat" to use "stat" instead.
*/
#ifndef S_IFLNK
# define lstat stat
#endif
/*
* Define macros to query file type bits, if they're not already
* defined.
*/
#ifndef S_ISREG
# ifdef S_IFREG
# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
# else
# define S_ISREG(m) 0
# endif
# endif
#ifndef S_ISDIR
# ifdef S_IFDIR
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
# else
# define S_ISDIR(m) 0
# endif
# endif
#ifndef S_ISCHR
# ifdef S_IFCHR
# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
# else
# define S_ISCHR(m) 0
# endif
# endif
#ifndef S_ISBLK
# ifdef S_IFBLK
# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
# else
# define S_ISBLK(m) 0
# endif
# endif
#ifndef S_ISFIFO
# ifdef S_IFIFO
# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
# else
# define S_ISFIFO(m) 0
# endif
# endif
#ifndef S_ISLNK
# ifdef S_IFLNK
# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
# else
# define S_ISLNK(m) 0
# endif
# endif
#ifndef S_ISSOCK
# ifdef S_IFSOCK
# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
# else
# define S_ISSOCK(m) 0
# endif
# endif
/*
* Make sure that MAXPATHLEN is defined.
*/
#ifndef MAXPATHLEN
# ifdef PATH_MAX
# define MAXPATHLEN PATH_MAX
# else
# define MAXPATHLEN 2048
# endif
#endif
/*
* Make sure that L_tmpnam is defined.
*/
#ifndef L_tmpnam
# define L_tmpnam 100
#endif
/*
* Substitute Tcl's own versions for several system calls. The
* Tcl versions retry automatically if interrupted by signals.
* (see tclUnixUtil.c).
*/
#define open(a,b,c) TclOpen(a,b,c)
#define read(a,b,c) TclRead(a,b,c)
#define waitpid(a,b,c) TclWaitpid(a,b,c)
#define write(a,b,c) TclWrite(a,b,c)
EXTERN int TclOpen _ANSI_ARGS_((char *path, int oflag, int mode));
EXTERN int TclRead _ANSI_ARGS_((int fd, VOID *buf, size_t numBytes));
EXTERN int TclWaitpid _ANSI_ARGS_((pid_t pid, int *statPtr, int options));
EXTERN int TclWrite _ANSI_ARGS_((int fd, VOID *buf, size_t numBytes));
/*
* Variables provided by the C library:
*/
#if defined(_sgi) || defined(__sgi)
#define environ _environ
#endif
extern char **environ;
#endif /* _TCLUNIX */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,121 +0,0 @@
# Commands covered: cd, pwd
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/cd.test,v 1.21 93/10/07 17:21:21 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
catch {exec rm -rf cd.dir}
exec mkdir cd.dir
exec cat << "Sample text" > cd.dir/test.file
set cwd [exec pwd]
test cd-1.1 {simple pwd check} {
pwd
} $cwd
cd cd.dir
if $atBerkeley {
test cd-2.1 {changing directories} {
list [exec pwd]
} $cwd/cd.dir
test cd-2.2 {changing directories} {
pwd
} $cwd/cd.dir
}
test cd-2.3 {changing directories} {
exec cat test.file
} "Sample text"
cd ..
test cd-2.4 {changing directories} {
exec pwd
} $cwd
test cd-2.5 {changing directories} {
pwd
} $cwd
test cd-2.6 {changing directories} {
exec cat cd.dir/test.file
} "Sample text"
# The tests below seem to fail on lots of machines for a variety
# of reasons, such as the auto-mounter, home directories that are
# symbolic links, etc.
if $atBerkeley {
set home [exec sh -c "cd; pwd"]
test cd-2.7 {changing directories} {
cd ~
set x [list [exec pwd] [pwd]]
cd $cwd
set x
} "$home $home"
test cd-2.8 {changing directories} {
cd
set x [list [exec pwd] [pwd]]
cd $cwd
set x
} "$home $home"
}
test cd-3.1 {cd return value} {
cd .
} {}
test cd-4.1 {errors in cd command} {
list [catch {cd 1 2} msg] $msg $errorCode
} {1 {wrong # args: should be "cd dirName"} NONE}
test cd-4.2 {errors in cd command} {
string tolower [list [catch {cd _bad_dir} msg] $msg $errorCode]
} {1 {couldn't change working directory to "_bad_dir": no such file or directory} {posix enoent {no such file or directory}}}
test cd-4.3 {errors in cd command} {
string tolower [list [catch {cd cd.dir/test.file} msg] $msg $errorCode]
} {1 {couldn't change working directory to "cd.dir/test.file": not a directory} {posix enotdir {not a directory}}}
test cd-4.4 {errors in cd command} {
set home $env(HOME)
unset env(HOME)
set x [list [catch cd msg] $msg]
set env(HOME) $home
set x
} {1 {couldn't find HOME environment variable to expand "~"}}
test cd-5.1 {errors in pwd command} {
list [catch {pwd a} msg] $msg
} {1 {wrong # args: should be "pwd"}}
if $atBerkeley {
exec mkdir cd.dir/child
cd cd.dir/child
exec chmod 111 ..
if {$user != "root"} {
test cd-5.2 {errors in pwd command} {
catch pwd msg
} 1
}
cd $cwd
exec chmod 775 cd.dir
}
catch {exec rm -rf cd.dir}
format ""

View File

@ -1,53 +0,0 @@
# Commands covered: concat
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/concat.test,v 1.6 93/10/28 16:13:57 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
test concat-1.1 {simple concatenation} {
concat a b c d e f g
} {a b c d e f g}
test concat-1.2 {merging lists together} {
concat a {b c d} {e f g h}
} {a b c d e f g h}
test concat-1.3 {merge lists, retain sub-lists} {
concat a {b {c d}} {{e f}} g h
} {a b {c d} {e f} g h}
test concat-1.4 {special characters} {
concat a\{ {b \{c d} \{d
} "a{ b \\{c d {d"
test concat-2.1 {error: no arguments} {
list [catch concat msg] $msg
} {0 {}}
test concat-3.1 {pruning off extra white space} {
concat {} {a b c}
} {a b c}
test concat-3.2 {pruning off extra white space} {
concat x y " a b c \n\t " " " " def "
} {x y a b c def}

View File

@ -1,54 +0,0 @@
# Commands covered: none
#
# This file contains a collection of tests for Tcl_CallWhenDeleted.
# Sourcing this file into Tcl runs the tests and generates output for
# errors. No output means no errors were found.
#
# Copyright (c) 1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/dcall.test,v 1.3 93/09/09 16:43:05 ouster Exp $ (Berkeley)
if {[info commands testdcall] == {}} {
puts "This application hasn't been compiled with the \"testdcall\""
puts "command, so I can't test Tcl_CallWhenDeleted."
return
}
if {[string compare test [info procs test]] == 1} then {source defs}
test dcall-1.1 {deletion callbacks} {
testdcall 1 2 3
} {1 2 3}
test dcall-1.2 {deletion callbacks} {
testdcall
} {}
test dcall-1.3 {deletion callbacks} {
testdcall 20 21 22 -22
} {20 21}
test dcall-1.4 {deletion callbacks} {
testdcall 20 21 22 -20
} {21 22}
test dcall-1.5 {deletion callbacks} {
testdcall 20 21 22 -21
} {20 22}
test dcall-1.6 {deletion callbacks} {
testdcall 20 21 22 -21 -22 -20
} {}

View File

@ -1,94 +0,0 @@
# This file contains support code for the Tcl test suite. It is
# normally sourced by the individual files in the test suite before
# they run their tests. This improved approach to testing was designed
# and initially implemented by Mary Ann May-Pumphrey of Sun Microsystems.
set VERBOSE 0
set TESTS {}
set auto_noexec 1
set auto_noload 1
catch {rename unknown ""}
# If tests are being run as root, issue a warning message and set a
# variable to prevent some tests from running at all.
set user {}
catch {set user [exec whoami]}
if {$user == "root"} {
puts stdout "Warning: you're executing as root. I'll have to"
puts stdout "skip some of the tests, since they'll fail as root."
}
# Some of the tests don't work on some system configurations due to
# configuration quirks, not due to Tcl problems; in order to prevent
# false alarms, these tests are only run in the master source directory
# at Berkeley. The presence of a file "Berkeley" in this directory is
# used to indicate that these tests should be run.
set atBerkeley [file exists Berkeley]
proc print_verbose {test_name test_description contents_of_test code answer} {
puts stdout "\n"
puts stdout "==== $test_name $test_description"
puts stdout "==== Contents of test case:"
puts stdout "$contents_of_test"
if {$code != 0} {
if {$code == 1} {
puts stdout "==== Test generated error:"
puts stdout $answer
} elseif {$code == 2} {
puts stdout "==== Test generated return exception; result was:"
puts stdout $answer
} elseif {$code == 3} {
puts stdout "==== Test generated break exception"
} elseif {$code == 4} {
puts stdout "==== Test generated continue exception"
} else {
puts stdout "==== Test generated exception $code; message was:"
puts stdout $answer
}
} else {
puts stdout "==== Result was:"
puts stdout "$answer"
}
}
proc test {test_name test_description contents_of_test passing_results} {
global VERBOSE
global TESTS
if {[string compare $TESTS ""] != 0} then {
set ok 0
foreach test $TESTS {
if [string match $test $test_name] then {
set ok 1
break
}
}
if !$ok then return
}
set code [catch {uplevel $contents_of_test} answer]
if {$code != 0} {
print_verbose $test_name $test_description $contents_of_test \
$code $answer
} elseif {[string compare $answer $passing_results] == 0} then {
if $VERBOSE then {
print_verbose $test_name $test_description $contents_of_test \
$code $answer
puts stdout "++++ $test_name PASSED"
}
} else {
print_verbose $test_name $test_description $contents_of_test $code \
$answer
puts stdout "---- Result should have been:"
puts stdout "$passing_results"
puts stdout "---- $test_name FAILED"
}
}
proc dotests {file args} {
global TESTS
set savedTests $TESTS
set TESTS $args
source $file
set TESTS $savedTests
}

View File

@ -1,326 +0,0 @@
# Commands covered: file
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/file.test,v 1.22 93/04/16 16:46:42 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
# rootname and ext
test file-1.1 {rootname and extension options} {file ext abc.def} .def
test file-1.2 {rootname and extension options} {file ro abc.def} abc
test file-1.3 {rootname and extension options} {file extension a/b/c.d} .d
test file-1.4 {rootname and extension options} {file rootname a/b/c.d} a/b/c
test file-1.5 {rootname and extension options} {file extension a/b.c/d} {}
test file-1.6 {rootname and extension options} {file rootname a/b.c/d} a/b.c/d
set num 7
foreach outer { {} a .a a. a.a } {
foreach inner { {} a .a a. a.a } {
set thing [format %s/%s $outer $inner]
test file-1.$num {rootname and extension options} {
format %s%s [file rootname $thing] [file ext $thing]
} $thing
set num [expr $num+1]
}
}
# dirname and tail
test file-2.1 {dirname and tail options} {file dirname .def} .
test file-2.2 {dirname and tail options} {file tail abc.def} abc.def
test file-2.3 {dirname and tail options} {file d a/b/c.d} a/b
test file-2.4 {dirname and tail options} {file ta a/b/c.d} c.d
test file-2.5 {dirname and tail options} {file dirname a/b.c/d} a/b.c
test file-2.6 {dirname and tail options} {file tail a/b.c/d} d
set num 7
foreach outer { a .a a. a.a } {
foreach inner { {} a .a a. a.a } {
set thing [format %s/%s $outer $inner]
test file-2.$num {dirname and tail options} {
format %s/%s [file dirname $thing] [file tail $thing]
} $thing
set num [expr $num+1]
}
}
# exists
catch {exec chmod 777 dir.file}
catch {exec rm -f dir.file/gorp.file}
catch {exec rm -f gorp.file}
catch {exec rmdir dir.file}
catch {exec rm -f link.file}
test file-3.1 {exists option} {file exists gorp.file} 0
test file-3.2 {exists option} {file exists dir.file/gorp.file} 0
exec cat > gorp.file << abcde
exec mkdir dir.file
exec cat > dir.file/gorp.file << 12345
test file-3.3 {exists option} {file exists gorp.file} 1
test file-3.4 {exists option} {file exi dir.file/gorp.file} 1
# The test below has to be done in /tmp rather than the current
# directory in order to guarantee (?) a local file system: some
# NFS file systems won't do the stuff below correctly.
catch {exec rm /tmp/tcl.foo.dir/file}
catch {exec rmdir /tmp/tcl.foo.dir}
exec mkdir /tmp/tcl.foo.dir
exec cat > /tmp/tcl.foo.dir/file << 12345
exec chmod 000 /tmp/tcl.foo.dir
if {$user != "root"} {
test file-3.5 {exists option} {file exists /tmp/tcl.foo.dir/file} 0
}
exec chmod 775 /tmp/tcl.foo.dir
exec rm /tmp/tcl.foo.dir/file
exec rmdir /tmp/tcl.foo.dir
# executable
exec chmod 000 dir.file
if {$user != "root"} {
test file-4.1 {executable option} {file executable gorp.file} 0
}
exec chmod 775 gorp.file
test file-4.2 {executable option} {file exe gorp.file} 1
# isdirectory
test file-5.1 {isdirectory option} {file isdirectory gorp.file} 0
test file-5.2 {isdirectory option} {file isd dir.file} 1
# isfile
test file-6.1 {isfile option} {file isfile gorp.file} 1
test file-6.2 {isfile option} {file isfile dir.file} 0
# isowned
test file-7.1 {owned option} {file owned gorp.file} 1
if {$user != "root"} {
test file-7.2 {owned option} {file owned /} 0
}
# readable
exec chmod 444 gorp.file
test file-8.1 {readable option} {file readable gorp.file} 1
exec chmod 333 gorp.file
if {$user != "root"} {
test file-8.2 {readable option} {file reada gorp.file} 0
}
# writable
exec chmod 555 gorp.file
if {$user != "root"} {
test file-9.1 {writable option} {file writable gorp.file} 0
}
exec chmod 222 gorp.file
test file-9.2 {writable option} {file w gorp.file} 1
# stat
exec cat > gorp.file << "Test string"
exec chmod 765 gorp.file
test file-10.1 {stat option} {
catch {unset stat}
file stat gorp.file stat
lsort [array names stat]
} {atime ctime dev gid ino mode mtime nlink size type uid}
test file-10.2 {stat option} {
catch {unset stat}
file stat gorp.file stat
list $stat(nlink) $stat(size) [expr $stat(mode)&0777] $stat(type)
} {1 11 501 file}
test file-10.3 {stat option} {
string tolower [list [catch {file stat _bogus_ stat} msg] \
$msg $errorCode]
} {1 {couldn't stat "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
test file-10.4 {stat option} {
list [catch {file stat _bogus_} msg] $msg $errorCode
} {1 {wrong # args: should be "file stat name varName"} NONE}
test file-10.5 {stat option} {
list [catch {file stat _bogus_ a b} msg] $msg $errorCode
} {1 {wrong # args: should be "file stat name varName"} NONE}
test file-10.6 {stat option} {
catch {unset x}
set x 44
list [catch {file stat gorp.file x} msg] $msg $errorCode
} {1 {can't set "x(dev)": variable isn't array} NONE}
catch {unset stat}
# mtime, and size (I've given up trying to find a test for "atime": there
# seem to be too many quirks in the way file systems handle this to come
# up with a reproducible test).
test file-11.1 {mtime and atime and size options} {
catch {unset stat}
file stat gorp.file stat
list [expr {[file mtime gorp.file] == $stat(mtime)}] \
[expr {[file atime gorp.file] == $stat(atime)}] \
[file size gorp.file]
} {1 1 11}
test file-11.2 {mtime option} {
set old [file mtime gorp.file]
exec sleep 2
set f [open gorp.file w]
puts $f "More text"
close $f
set new [file mtime gorp.file]
expr {($new > $old) && ($new <= ($old+5))}
} {1}
test file-11.3 {size option} {
set oldsize [file size gorp.file]
set f [open gorp.file a]
puts $f "More text"
close $f
expr {[file size gorp.file] - $oldsize}
} {10}
test file-11.4 {errors in atime option} {
list [catch {file atime _bogus_ x} msg] $msg $errorCode
} {1 {wrong # args: should be "file atime name"} NONE}
test file-11.5 {errors in atime option} {
string tolower [list [catch {file atime _bogus_} msg] \
$msg $errorCode]
} {1 {couldn't stat "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
test file-11.6 {errors in mtime option} {
list [catch {file mtime _bogus_ x} msg] $msg $errorCode
} {1 {wrong # args: should be "file mtime name"} NONE}
test file-11.7 {errors in mtime option} {
string tolower [list [catch {file mtime _bogus_} msg] $msg \
$errorCode]
} {1 {couldn't stat "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
test file-11.8 {errors in size option} {
list [catch {file size _bogus_ x} msg] $msg $errorCode
} {1 {wrong # args: should be "file size name"} NONE}
test file-11.9 {errors in size option} {
string tolower [list [catch {file size _bogus_} msg] $msg \
$errorCode]
} {1 {couldn't stat "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
# type
test file-12.1 {type option} {
file type dir.file
} directory
test file-12.2 {type option} {
file type gorp.file
} file
if $atBerkeley {
exec ln -s a/b/c link.file
test file-12.3 {type option} {
file type link.file
} link
exec rm link.file
}
test file-12.4 {errors in type option} {
list [catch {file type a b} msg] $msg $errorCode
} {1 {wrong # args: should be "file type name"} NONE}
test file-12.5 {errors in type option} {
string tolower [list [catch {file type _bogus_} msg] $msg $errorCode]
} {1 {couldn't stat "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
# lstat and readlink: run these tests only at Berkeley, since not all
# sites will have symbolic links
if $atBerkeley {
exec ln -s gorp.file link.file
test file-13.1 {lstat option} {
catch {unset stat}
file lstat link.file stat
lsort [array names stat]
} {atime ctime dev gid ino mode mtime nlink size type uid}
test file-13.1 {lstat option} {
catch {unset stat}
file lstat link.file stat
list $stat(nlink) [expr $stat(mode)&0777] $stat(type)
} {1 511 link}
test file-13.3 {errors in lstat option} {
string tolower [list [catch {file lstat _bogus_ stat} msg] \
$msg $errorCode]
} {1 {couldn't lstat "_bogus_": no such file or directory} {posix enoent {no such file or directory}}}
test file-13.4 {errors in lstat option} {
list [catch {file lstat _bogus_} msg] $msg $errorCode
} {1 {wrong # args: should be "file lstat name varName"} NONE}
test file-13.5 {errors in lstat option} {
list [catch {file lstat _bogus_ a b} msg] $msg $errorCode
} {1 {wrong # args: should be "file lstat name varName"} NONE}
test file-13.6 {errors in lstat option} {
catch {unset x}
set x 44
list [catch {file lstat gorp.file x} msg] $msg $errorCode
} {1 {can't set "x(dev)": variable isn't array} NONE}
catch {unset stat}
test file-14.1 {readlink option} {
file readlink link.file
} gorp.file
test file-14.2 {errors in readlink option} {
list [catch {file readlink a b} msg] $msg $errorCode
} {1 {wrong # args: should be "file readlink name"} NONE}
test file-14.3 {errors in readlink option} {
list [catch {file readlink _bogus_} msg] $msg $errorCode
} {1 {couldn't readlink "_bogus_": no such file or directory} {POSIX ENOENT {no such file or directory}}}
exec rm link.file
}
# Error conditions
test file-15.1 {error conditions} {
list [catch file msg] $msg
} {1 {wrong # args: should be "file option name ?arg ...?"}}
test file-15.2 {error conditions} {
list [catch {file x} msg] $msg
} {1 {wrong # args: should be "file option name ?arg ...?"}}
test file-15.3 {error conditions} {
list [catch {file exists x too} msg] $msg
} {1 {wrong # args: should be "file exists name"}}
test file-15.4 {error conditions} {
list [catch {file gorp x} msg] $msg
} {1 {bad option "gorp": should be atime, dirname, executable, exists, extension, isdirectory, isfile, lstat, mtime, owned, readable, readlink, root, size, stat, tail, type, or writable}}
test file-15.5 {error conditions} {
list [catch {file ex x} msg] $msg
} {1 {bad option "ex": should be atime, dirname, executable, exists, extension, isdirectory, isfile, lstat, mtime, owned, readable, readlink, root, size, stat, tail, type, or writable}}
test file-15.6 {error conditions} {
list [catch {file is x} msg] $msg
} {1 {bad option "is": should be atime, dirname, executable, exists, extension, isdirectory, isfile, lstat, mtime, owned, readable, readlink, root, size, stat, tail, type, or writable}}
test file-15.7 {error conditions} {
list [catch {file read x} msg] $msg
} {1 {bad option "read": should be atime, dirname, executable, exists, extension, isdirectory, isfile, lstat, mtime, owned, readable, readlink, root, size, stat, tail, type, or writable}}
test file-15.8 {error conditions} {
list [catch {file s x} msg] $msg
} {1 {bad option "s": should be atime, dirname, executable, exists, extension, isdirectory, isfile, lstat, mtime, owned, readable, readlink, root, size, stat, tail, type, or writable}}
test file-15.9 {error conditions} {
list [catch {file t x} msg] $msg
} {1 {bad option "t": should be atime, dirname, executable, exists, extension, isdirectory, isfile, lstat, mtime, owned, readable, readlink, root, size, stat, tail, type, or writable}}
test file-15.10 {error conditions} {
list [catch {file rootname ~woohgy} msg] $msg
} {1 {user "woohgy" doesn't exist}}
exec chmod 777 dir.file
exec rm dir.file/gorp.file gorp.file
exec rmdir dir.file

View File

@ -1,153 +0,0 @@
# Commands covered: glob
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/glob.test,v 1.23 93/08/28 15:57:40 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
# First, create some subdirectories to use for testing.
exec rm -rf globTest
exec mkdir globTest globTest/a1 globTest/a2 globTest/a3
exec mkdir globTest/a1/b1 globTest/a1/b2 globTest/a2/b3
exec cat << abc > globTest/x1.c
exec cat << abc > globTest/y1.c
exec cat << abc > globTest/z1.c
exec cat << abc > "globTest/weird name.c"
exec cat << abc > globTest/.1
exec cat << abc > globTest/a1/b1/x2.c
exec cat << abc > globTest/a1/b2/y2.c
test glob-1.1 {simple globbing} {
lsort [glob globTest/x1.c globTest/y1.c globTest/foo]
} {globTest/x1.c globTest/y1.c}
test glob-1.2 {simple globbing} {
glob {}
} .
test glob-2.1 {globbing with braces} {
glob -nocomplain "{a1,a2}"
} {}
test glob-2.2 {globbing with braces} {
lsort [glob globTest/{a,b,x,y}1.c]
} {globTest/x1.c globTest/y1.c}
test glob-2.3 {globbing with braces} {
lsort [glob {globTest/{x1,y2,weird name}.c}]
} {{globTest/weird name.c} globTest/x1.c}
test glob-2.4 {globbing with braces} {
lsort [glob globTest/{x1.c,a1/*}]
} {globTest/a1/b1 globTest/a1/b2 globTest/x1.c}
test glob-3.1 {asterisks, question marks, and brackets} {
lsort [glob g*/*.c]
} {{globTest/weird name.c} globTest/x1.c globTest/y1.c globTest/z1.c}
test glob-3.2 {asterisks, question marks, and brackets} {
lsort [glob globTest/?1.c]
} {globTest/x1.c globTest/y1.c globTest/z1.c}
test glob-3.3 {asterisks, question marks, and brackets} {
lsort [glob */*/*/*.c]
} {globTest/a1/b1/x2.c globTest/a1/b2/y2.c}
test glob-3.4 {asterisks, question marks, and brackets} {
lsort [glob globTest/*]
} {globTest/a1 globTest/a2 globTest/a3 {globTest/weird name.c} globTest/x1.c globTest/y1.c globTest/z1.c}
test glob-3.5 {asterisks, question marks, and brackets} {
lsort [glob globTest/.*]
} {globTest/. globTest/.. globTest/.1}
test glob-3.6 {asterisks, question marks, and brackets} {
lsort [glob globTest/*/*]
} {globTest/a1/b1 globTest/a1/b2 globTest/a2/b3}
test glob-3.7 {asterisks, question marks, and brackets} {
lsort [glob {globTest/[xyab]1.*}]
} {globTest/x1.c globTest/y1.c}
test glob-3.8 {asterisks, question marks, and brackets} {
lsort [glob globTest/*/]
} {globTest/a1/ globTest/a2/ globTest/a3/}
# The tests immediately below can only be run at Berkeley, where
# the file-system structure is well-known.
if $atBerkeley {
test glob-4.1 {tildes} {glob ~/.csh*} "/users/ouster/.cshrc"
test glob-4.2 {tildes} {glob ~ouster/.csh*} "/users/ouster/.cshrc"
}
test glob-5.1 {error conditions} {
list [catch {glob} msg] $msg
} {1 {wrong # args: should be "glob ?switches? name ?name ...?"}}
test glob-5.2 {error conditions} {
list [catch {glob globTest/\{} msg] $msg
} {1 {unmatched open-brace in file name}}
test glob-5.3 {error conditions} {
list [catch {glob globTest/*/gorp} msg] $msg
} {1 {no files matched glob pattern "globTest/*/gorp"}}
test glob-5.4 {error conditions} {
list [catch {glob goo/* x*z foo?q} msg] $msg
} {1 {no files matched glob patterns "goo/* x*z foo?q"}}
test glob-5.5 {error conditions} {
list [catch {lsort [glob globTest/*.c goo/*]} msg] $msg
} {0 {{globTest/weird name.c} globTest/x1.c globTest/y1.c globTest/z1.c}}
test glob-5.6 {error conditions} {
list [catch {glob ~no-one} msg] $msg
} {1 {user "no-one" doesn't exist}}
test glob-5.7 {error conditions} {
set home $env(HOME)
unset env(HOME)
set x [list [catch {glob ~/*} msg] $msg]
set env(HOME) $home
set x
} {1 {couldn't find HOME environment variable to expand "~/*"}}
test glob-5.8 {error conditions} {
list [catch {glob globTest/{a1,a2}/\{} msg] $msg
} {1 {unmatched open-brace in file name}}
test glob-5.9 {error conditions} {
list [catch {glob globTest/*/\{} msg] $msg
} {1 {unmatched open-brace in file name}}
exec chmod 000 globTest
if {$user != "root"} {
test glob-6.1 {setting errorCode variable} {
string tolower [list [catch {glob globTest/*} msg] $msg $errorCode]
} {1 {couldn't read directory "globtest": permission denied} {posix eacces {permission denied}}}
}
exec chmod 755 globTest
test glob-7.1 {-nocomplain switch} {
list [catch {glob -nocomplai} msg] $msg
} {1 {bad switch "-nocomplai": must be -nocomplain or --}}
test glob-7.2 {-nocomplain switch} {
list [catch {glob -nocomplain} msg] $msg
} {1 {wrong # args: should be "glob ?switches? name ?name ...?"}}
test glob-7.3 {-nocomplain switch} {
list [catch {glob -nocomplain goo/*} msg] $msg
} {0 {}}
test glob-7.4 {-- switch} {
list [catch {glob -- -nocomplain} msg] $msg
} {1 {no files matched glob patterns "-nocomplain"}}
test glob-7.5 {bogus switch} {
list [catch {glob -gorp} msg] $msg
} {1 {bad switch "-gorp": must be -nocomplain or --}}
exec rm -rf globTest

View File

@ -1,52 +0,0 @@
# Commands covered: join
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/join.test,v 1.4 93/02/06 16:01:33 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
test join-1.1 {basic join commands} {
join {a b c} xyz
} axyzbxyzc
test join-1.2 {basic join commands} {
join {a b c} {}
} abc
test join-1.3 {basic join commands} {
join {} xyz
} {}
test join-1.4 {basic join commands} {
join {12 34 56}
} {12 34 56}
test join-2.1 {join errors} {
list [catch join msg] $msg $errorCode
} {1 {wrong # args: should be "join list ?joinString?"} NONE}
test join-2.2 {join errors} {
list [catch {join a b c} msg] $msg $errorCode
} {1 {wrong # args: should be "join list ?joinString?"} NONE}
test join-2.3 {join errors} {
list [catch {join "a \{ c" 111} msg] $msg $errorCode
} {1 {unmatched open brace in list} NONE}

View File

@ -1,49 +0,0 @@
# Commands covered: llength
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/llength.test,v 1.2 93/02/06 16:01:45 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
test llength-1.1 {length of list} {
llength {a b c d}
} 4
test llength-1.2 {length of list} {
llength {a b c {a b {c d}} d}
} 5
test llength-1.3 {length of list} {
llength {}
} 0
test llength-2.1 {error conditions} {
list [catch {llength} msg] $msg
} {1 {wrong # args: should be "llength list"}}
test llength-2.2 {error conditions} {
list [catch {llength 123 2} msg] $msg
} {1 {wrong # args: should be "llength list"}}
test llength-2.3 {error conditions} {
list [catch {llength "a b c \{"} msg] $msg
} {1 {unmatched open brace in list}}

View File

@ -1,662 +0,0 @@
# Commands covered: open, close, gets, puts, read, seek, tell, eof, flush
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/open.test,v 1.19 93/10/18 08:52:24 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
catch {exec rm -f test1 test2 test3}
exec cat > test1 << "Two lines: this one\nand this one\n"
exec cat > test2 << "line1\nline2\nline3\nline4\nline5\n"
test open-1.1 {open command (files only)} {
set f [open test1]
set x [gets $f]
close $f
set x
} {Two lines: this one}
test open-1.2 {open command (files only)} {
set f [open test1]
set f2 [open test2]
set f3 [open test1]
set f4 [open test1]
set x [list [gets $f] [gets $f2] [gets $f3] [gets $f4] \
[gets $f] [gets $f2]]
close $f
close $f2
close $f3
close $f4
set x
} {{Two lines: this one} line1 {Two lines: this one} {Two lines: this one} {and this one} line2}
test open-1.3 {open command (files only)} {
set f [open test3 w]
puts $f xyz
close $f
exec cat test3
} "xyz"
test open-1.4 {open command (files only)} {
set f [open test3 w]
puts $f xyz
close $f
set f [open test3 a]
puts $f 123
close $f
exec cat test3
} "xyz\n123"
test open-1.5 {open command (files only)} {
set f [open test3 w]
puts $f xyz\n123
close $f
set f [open test3 r+]
set x [gets $f]
seek $f 0 current
puts $f 456
close $f
list $x [exec cat test3]
} "xyz {xyz
456}"
test open-1.6 {open command (files only)} {
set f [open test3 w]
puts $f xyz\n123
close $f
set f [open test3 w+]
puts $f xyzzy
seek $f 2
set x [gets $f]
close $f
list $x [exec cat test3]
} "zzy xyzzy"
test open-1.7 {open command (files only)} {
set f [open test3 w]
puts $f xyz\n123
close $f
set f [open test3 a+]
puts $f xyzzy
flush $f
set x [tell $f]
seek $f -4 cur
set y [gets $f]
close $f
list $x [exec cat test3] $y
} {14 {xyz
123
xyzzy} zzy}
test open-2.1 {errors in open command} {
list [catch {open} msg] $msg
} {1 {wrong # args: should be "open filename ?access? ?permissions?"}}
test open-2.2 {errors in open command} {
list [catch {open a b c d} msg] $msg
} {1 {wrong # args: should be "open filename ?access? ?permissions?"}}
test open-2.3 {errors in open command} {
list [catch {open test1 x} msg] $msg
} {1 {illegal access mode "x"}}
test open-2.4 {errors in open command} {
list [catch {open test1 rw} msg] $msg
} {1 {illegal access mode "rw"}}
test open-2.5 {errors in open command} {
list [catch {open test1 r+1} msg] $msg
} {1 {illegal access mode "r+1"}}
test open-2.6 {errors in open command} {
string tolower [list [catch {open _non_existent_} msg] $msg $errorCode]
} {1 {couldn't open "_non_existent_": no such file or directory} {posix enoent {no such file or directory}}}
if {![file exists ~/_test_] && [file writable ~]} {
test open-3.1 {tilde substitution in open} {
set f [open ~/_test_ w]
puts $f "Some text"
close $f
set x [file exists $env(HOME)/_test_]
exec rm -f $env(HOME)/_test_
set x
} 1
}
test open-3.2 {tilde substitution in open} {
set home $env(HOME)
unset env(HOME)
set x [list [catch {open ~/foo} msg] $msg]
set env(HOME) $home
set x
} {1 {couldn't find HOME environment variable to expand "~/foo"}}
test open-4.1 {file id parsing errors} {
list [catch {eof gorp} msg] $msg $errorCode
} {1 {bad file identifier "gorp"} NONE}
test open-4.2 {file id parsing errors} {
list [catch {eof filex} msg] $msg
} {1 {bad file identifier "filex"}}
test open-4.3 {file id parsing errors} {
list [catch {eof file12a} msg] $msg
} {1 {bad file identifier "file12a"}}
test open-4.4 {file id parsing errors} {
list [catch {eof file123} msg] $msg
} {1 {file "file123" isn't open}}
test open-4.5 {file id parsing errors} {
list [catch {eof file1} msg] $msg
} {0 0}
test open-4.5 {file id parsing errors} {
list [catch {eof stdin} msg] $msg
} {0 0}
test open-4.6 {file id parsing errors} {
list [catch {eof stdout} msg] $msg
} {0 0}
test open-4.7 {file id parsing errors} {
list [catch {eof stderr} msg] $msg
} {0 0}
test open-4.8 {file id parsing errors} {
list [catch {eof stderr1} msg] $msg
} {1 {bad file identifier "stderr1"}}
set f [open test1]
close $f
set expect "1 {file \"$f\" isn't open}"
test open-4.9 {file id parsing errors} {
list [catch {eof $f} msg] $msg
} $expect
test open-5.1 {close command (files only)} {
list [catch {close} msg] $msg $errorCode
} {1 {wrong # args: should be "close fileId"} NONE}
test open-5.2 {close command (files only)} {
list [catch {close a b} msg] $msg $errorCode
} {1 {wrong # args: should be "close fileId"} NONE}
test open-5.3 {close command (files only)} {
list [catch {close gorp} msg] $msg $errorCode
} {1 {bad file identifier "gorp"} NONE}
test open-5.4 {close command (files only)} {
list [catch {close file4} msg] \
[string range $msg [string first {" } $msg] end] $errorCode
} {1 {" isn't open} NONE}
test open-6.1 {puts command} {
list [catch {puts} msg] $msg $errorCode
} {1 {wrong # args: should be "puts" ?-nonewline? ?fileId? string} NONE}
test open-6.2 {puts command} {
list [catch {puts a b c d} msg] $msg $errorCode
} {1 {wrong # args: should be "puts" ?-nonewline? ?fileId? string} NONE}
test open-6.3 {puts command} {
list [catch {puts a b nonewlinx} msg] $msg $errorCode
} {1 {bad argument "nonewlinx": should be "nonewline"} NONE}
test open-6.4 {puts command} {
list [catch {puts gorp "New text"} msg] $msg $errorCode
} {1 {bad file identifier "gorp"} NONE}
test open-6.5 {puts command} {
set f [open test3]
set x [list [catch {puts $f "New text"} msg] \
[string range $msg [string first " " $msg] end] $errorCode]
close $f
set x
} {1 { wasn't opened for writing} NONE}
test open-6.6 {puts command} {
set f [open test3 w]
puts -nonewline $f "Text1"
puts -nonewline $f " Text 2"
puts $f " Text 3"
close $f
exec cat test3
} {Text1 Text 2 Text 3}
test open-7.1 {gets command} {
list [catch {gets} msg] $msg $errorCode
} {1 {wrong # args: should be "gets fileId ?varName?"} NONE}
test open-7.2 {gets command} {
list [catch {gets a b c} msg] $msg $errorCode
} {1 {wrong # args: should be "gets fileId ?varName?"} NONE}
test open-7.3 {gets command} {
list [catch {gets a} msg] $msg $errorCode
} {1 {bad file identifier "a"} NONE}
test open-7.4 {gets command} {
set f [open test3 w]
set x [list [catch {gets $f} msg] \
[string range $msg [string first " " $msg] end] $errorCode]
close $f
set x
} {1 { wasn't opened for reading} NONE}
set f [open test3 w]
puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
puts $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
close $f
test open-7.5 {gets command with long line} {
set f [open test3]
set x [gets $f]
close $f
set x
} {abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ}
test open-7.6 {gets command with long line} {
set f [open test3]
set x [gets $f y]
close $f
list $x $y
} {260 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ}
test open-7.7 {gets command and end of file} {
set f [open test3 w]
puts -nonewline $f "Test1\nTest2"
close $f
set f [open test3]
set x {}
set y {}
lappend x [gets $f y] $y
set y {}
lappend x [gets $f y] $y
set y {}
lappend x [gets $f y] $y
close $f
set x
} {5 Test1 5 Test2 -1 {}}
set f [open test3 w]
puts $f "Line 1"
puts $f "Line 2"
close $f
test open-7.8 {gets command and bad variable} {
catch {unset x}
set x 24
set f [open test3 r]
set result [list [catch {gets $f x(0)} msg] $msg]
close $f
set result
} {1 {can't set "x(0)": variable isn't array}}
test open-8.1 {read command} {
list [catch {read} msg] $msg $errorCode
} {1 {wrong # args: should be "read fileId ?numBytes?" or "read ?-nonewline? fileId"} NONE}
test open-8.2 {read command} {
list [catch {read -nonewline} msg] $msg $errorCode
} {1 {bad file identifier "-nonewline"} NONE}
test open-8.3 {read command} {
list [catch {read a b c} msg] $msg $errorCode
} {1 {wrong # args: should be "read fileId ?numBytes?" or "read ?-nonewline? fileId"} NONE}
test open-8.4 {read command} {
list [catch {read -nonew file4} msg] $msg $errorCode
} {1 {bad file identifier "-nonew"} NONE}
test open-8.5 {read command} {
list [catch {read stdin foo} msg] $msg $errorCode
} {1 {bad argument "foo": should be "nonewline"} NONE}
test open-8.6 {read command} {
list [catch {read file10} msg] $msg $errorCode
} {1 {file "file10" isn't open} NONE}
test open-8.7 {read command} {
set f [open test3 w]
set x [list [catch {read $f} msg] \
[string range $msg [string first " " $msg] end] $errorCode]
close $f
set x
} {1 { wasn't opened for reading} NONE}
test open-8.8 {read command} {
set f [open test1]
set x [list [catch {read $f 12z} msg] $msg $errorCode]
close $f
set x
} {1 {expected integer but got "12z"} NONE}
test open-898 {read command} {
set f [open test1]
set x [list [catch {read $f z} msg] $msg $errorCode]
close $f
set x
} {1 {bad argument "z": should be "nonewline"} NONE}
test open-8.10 {read command} {
set f [open test1]
set x [list [read $f 1] [read $f 2] [read $f]]
close $f
set x
} {T wo { lines: this one
and this one
}}
test open-8.11 {read command, with over-large count} {
set f [open test1]
set x [read $f 100]
close $f
set x
} {Two lines: this one
and this one
}
test open-8.12 {read command, -nonewline switch} {
set f [open test1]
set x [read -nonewline $f]
close $f
set x
} {Two lines: this one
and this one}
test open-9.1 {seek command} {
list [catch {seek foo} msg] $msg $errorCode
} {1 {wrong # args: should be "seek fileId offset ?origin?"} NONE}
test open-9.2 {seek command} {
list [catch {seek foo a b c} msg] $msg $errorCode
} {1 {wrong # args: should be "seek fileId offset ?origin?"} NONE}
test open-9.3 {seek command} {
list [catch {seek foo 0} msg] $msg $errorCode
} {1 {bad file identifier "foo"} NONE}
test open-9.4 {seek command} {
set f [open test2]
set x [list [catch {seek $f xyz} msg] $msg $errorCode]
close $f
set x
} {1 {expected integer but got "xyz"} NONE}
test open-9.5 {seek command} {
set f [open test2]
set x [list [catch {seek $f 100 gorp} msg] $msg $errorCode]
close $f
set x
} {1 {bad origin "gorp": should be start, current, or end} NONE}
set f [open test3 w]
puts -nonewline $f "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
close $f
test open-9.6 {seek command} {
set f [open test3]
set x [read $f 1]
seek $f 3
lappend x [read $f 1]
seek $f 0 start
lappend x [read $f 1]
seek $f 10 current
lappend x [read $f 1]
seek $f -2 end
lappend x [read $f 1]
seek $f 50 end
lappend x [read $f 1]
seek $f 1
lappend x [read $f 1]
close $f
set x
} {a d a l Y {} b}
test open-10.1 {tell command} {
list [catch {tell} msg] $msg $errorCode
} {1 {wrong # args: should be "tell fileId"} NONE}
test open-10.2 {tell command} {
list [catch {tell a b} msg] $msg $errorCode
} {1 {wrong # args: should be "tell fileId"} NONE}
test open-10.3 {tell command} {
list [catch {tell a} msg] $msg $errorCode
} {1 {bad file identifier "a"} NONE}
test open-10.4 {tell command} {
set f [open test2]
set x [tell $f]
read $f 3
lappend x [tell $f]
seek $f 2
lappend x [tell $f]
seek $f 10 current
lappend x [tell $f]
seek $f 0 end
lappend x [tell $f]
close $f
set x
} {0 3 2 12 30}
test open-11.1 {eof command} {
list [catch {eof} msg] $msg $errorCode
} {1 {wrong # args: should be "eof fileId"} NONE}
test open-11.2 {eof command} {
list [catch {eof a b} msg] $msg $errorCode
} {1 {wrong # args: should be "eof fileId"} NONE}
test open-11.3 {eof command} {
list [catch {eof file100} msg] $msg $errorCode
} {1 {file "file100" isn't open} NONE}
test open-11.4 {eof command} {
set f [open test1]
set x [eof $f]
lappend x [eof $f]
gets $f
lappend x [eof $f]
gets $f
lappend x [eof $f]
gets $f
lappend x [eof $f]
lappend x [eof $f]
close $f
set x
} {0 0 0 0 1 1}
test open-12.1 {flush command} {
list [catch {flush} msg] $msg $errorCode
} {1 {wrong # args: should be "flush fileId"} NONE}
test open-12.2 {flush command} {
list [catch {flush a b} msg] $msg $errorCode
} {1 {wrong # args: should be "flush fileId"} NONE}
test open-12.3 {flush command} {
list [catch {flush a} msg] $msg $errorCode
} {1 {bad file identifier "a"} NONE}
test open-12.4 {flush command} {
set f [open test3]
set x [list [catch {flush $f} msg] \
[string range $msg [string first " " $msg] end] $errorCode]
close $f
set x
} {1 { wasn't opened for writing} NONE}
test open-12.5 {flush command} {
set f [open test3 w]
puts $f "Line 1"
puts $f "Line 2"
set f2 [open test3]
set x {}
lappend x [read -nonewline $f2]
close $f2
flush $f
set f2 [open test3]
lappend x [read -nonewline $f2]
close $f2
close $f
set x
} {{} {Line 1
Line 2}}
test open-13.1 {I/O to command pipelines} {
list [catch {open "| cat < test1 > test3" w} msg] $msg $errorCode
} {1 {can't write input to command: standard input was redirected} NONE}
test open-13.2 {I/O to command pipelines} {
list [catch {open "| echo > test3" r} msg] $msg $errorCode
} {1 {can't read output from command: standard output was redirected} NONE}
test open-13.3 {I/O to command pipelines} {
list [catch {open "| echo > test3" r+} msg] $msg $errorCode
} {1 {can't read output from command: standard output was redirected} NONE}
test open-13.4 {writing to command pipelines} {
exec rm test3
set f [open "| cat | cat > test3" w]
puts $f "Line 1"
puts $f "Line 2"
close $f
exec cat test3
} {Line 1
Line 2}
test open-13.5 {reading from command pipelines} {
set f [open "| cat test2" r]
set x [list [gets $f] [gets $f] [gets $f]]
close $f
set x
} {line1 line2 line3}
test open-13.6 {both reading and writing from/to command pipelines} {
set f [open "| cat -u" r+]
puts $f "Line1"
flush $f
set x [gets $f]
close $f
set x
} {Line1}
test open-13.7 {errors in command pipelines} {
set f [open "|gorp"]
list [catch {close $f} msg] $msg [lindex $errorCode 0] [lindex $errorCode 2]
} {1 {couldn't find "gorp" to execute} CHILDSTATUS 1}
test open-13.8 {errors in command pipelines} {
set f [open "|gorp" w]
exec sleep 1
puts $f output
set x [list [catch {flush $f} msg] [concat \
[string range $msg 0 [string first {"} $msg]] \
[string range $msg [string first : $msg] end]] $errorCode]
catch {close $f}
string tolower $x
} {1 {error flushing " : broken pipe} {posix epipe {broken pipe}}}
test open-13.9 {errors in command pipelines} {
set f [open "|gorp" w]
list [catch {close $f} msg] $msg \
[lindex $errorCode 0] [lindex $errorCode 2]
} {1 {couldn't find "gorp" to execute} CHILDSTATUS 1}
test open-13.10 {errors in command pipelines} {
set f [open "|gorp" w]
exec sleep 1
puts $f output
string tolower [list [catch {close $f} msg] [concat \
[string range $msg 0 [string first {"} $msg]] \
[string range $msg [string first : $msg] end]] \
[lindex $errorCode 0] [lindex $errorCode 2]]
} {1 {error closing " : broken pipe
couldn't find "gorp" to execute} childstatus 1}
test open-14.1 {POSIX open access modes: RDONLY} {
set f [open test1 RDONLY]
set x [list [gets $f] [catch {puts $f Test} msg] $msg]
close $f
# The regsub is needed to avoid false errors if the file
# number varies from system to system.
regsub {"file."} $x {"file"} x
set x
} {{Two lines: this one} 1 {"file" wasn't opened for writing}}
test open-14.2 {POSIX open access modes: RDONLY} {
catch {exec rm -f test3}
string tolower [list [catch {open test3 RDONLY} msg] $msg]
} {1 {couldn't open "test3": no such file or directory}}
test open-14.3 {POSIX open access modes: WRONLY} {
catch {exec rm -f test3}
string tolower [list [catch {open test3 WRONLY} msg] $msg]
} {1 {couldn't open "test3": no such file or directory}}
test open-14.4 {POSIX open access modes: WRONLY} {
exec echo xyzzy > test3
set f [open test3 WRONLY]
puts -nonewline $f "ab"
seek $f 0 current
set x [list [catch {gets $f} msg] $msg]
close $f
lappend x [exec cat test3]
# The regsub is needed to avoid false errors if the file
# number varies from system to system.
regsub {"file."} $x {"file"} x
set x
} {1 {"file" wasn't opened for reading} abzzy}
test open-14.5 {POSIX open access modes: RDWR} {
catch {exec rm -f test3}
string tolower [list [catch {open test3 RDWR} msg] $msg]
} {1 {couldn't open "test3": no such file or directory}}
test open-14.6 {POSIX open access modes: RDWR} {
exec echo xyzzy > test3
set f [open test3 RDWR]
puts -nonewline $f "ab"
seek $f 0 current
set x [gets $f]
close $f
lappend x [exec cat test3]
} {zzy abzzy}
test open-14.7 {POSIX open access modes: CREAT} {
catch {exec rm -f test3}
set f [open test3 {WRONLY CREAT} 0600]
file stat test3 stats
set x [format "0%o" [expr $stats(mode)&0777]]
puts $f "line 1"
close $f
lappend x [exec cat test3]
} {0600 {line 1}}
if $atBerkeley {
test open-14.8 {POSIX open access modes: CREAT} {
catch {exec rm -f test3}
set f [open test3 {WRONLY CREAT}]
close $f
file stat test3 stats
format "0%o" [expr $stats(mode)&0777]
} 0664
}
test open-14.9 {POSIX open access modes: CREAT} {
exec echo xyzzy > test3
set f [open test3 {WRONLY CREAT}]
puts -nonewline $f "ab"
close $f
exec cat test3
} abzzy
test open-14.10 {POSIX open access modes: APPEND} {
exec echo xyzzy > test3
set f [open test3 {WRONLY APPEND}]
puts $f "new line"
seek $f 0
puts $f "abc"
close $f
exec cat test3
} {xyzzy
new line
abc}
test open-14.11 {POSIX open access modes: EXCL} {
exec echo xyzzy > test3
set msg [list [catch {open test3 {WRONLY CREAT EXCL}} msg] $msg]
regsub " already " $msg " " msg
string tolower $msg
} {1 {couldn't open "test3": file exists}}
test open-14.12 {POSIX open access modes: EXCL} {
catch {exec rm -f test3}
set x [catch {set f [open test3 {WRONLY CREAT EXCL}]}]
puts $f "A test line"
close $f
lappend x [exec cat test3]
} {0 {A test line}}
test open-14.13 {POSIX open access modes: TRUNC} {
exec echo xyzzy > test3
set f [open test3 {WRONLY TRUNC}]
puts $f abc
close $f
exec cat test3
} {abc}
if $atBerkeley {
test open-14.14 {POSIX open access modes: NOCTTY} {
catch {exec rm -f test3}
list [catch {open test3 {WRONLY NOCTTY CREAT}} msg] $msg
} {1 {access mode "NOCTTY" not supported by this system}}
test open-14.15 {POSIX open access modes: NONBLOCK} {
catch {exec rm -f test3}
set f [open test3 {WRONLY NONBLOCK CREAT}]
puts $f "NONBLOCK test"
close $f
exec cat test3
} {NONBLOCK test}
}
test open-14.16 {POSIX open access modes: errors} {
concat [catch {open test3 "FOO \{BAR BAZ"} msg] $msg\n$errorInfo
} "1 unmatched open brace in list
unmatched open brace in list
while processing open access modes \"FOO {BAR BAZ\"
invoked from within
\"open test3 \"FOO \\{BAR BAZ\"\""
test open-14.17 {POSIX open access modes: errors} {
list [catch {open test3 {FOO BAR BAZ}} msg] $msg
} {1 {invalid access mode "FOO": must be RDONLY, WRONLY, RDWR, APPEND, CREAT EXCL, NOCTTY, NONBLOCK, or TRUNC}}
test open-14.18 {POSIX open access modes: errors} {
list [catch {open test3 {TRUNC CREAT}} msg] $msg
} {1 {access mode must include either RDONLY, WRONLY, or RDWR}}
catch {exec rm -f test1 test2 test3}
concat {}

View File

@ -1,58 +0,0 @@
# Commands covered: pid
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/pid.test,v 1.1 93/05/15 16:06:39 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
catch {exec rm -f test1}
test open-1.1 {pid command} {
regexp {^[0-9]+$} [pid]
} 1
test open-1.2 {pid command} {
set f [open {| echo foo | cat > /dev/null} w]
set pids [pid $f]
close $f
list [llength $pids] [regexp {^[0-9]+$} [lindex $pids 0]] \
[regexp {^[0-9]+$} [lindex $pids 1]] \
[expr {[lindex $pids 0] == [lindex $pids 1]}]
} {2 1 1 0}
test open-1.3 {pid command} {
set f [open test1 w]
set pids [pid $f]
close $f
set pids
} {}
test open-1.4 {pid command} {
list [catch {pid a b} msg] $msg
} {1 {wrong # args: should be "pid ?fileId?"}}
test open-1.5 {pid command} {
list [catch {pid gorp} msg] $msg
} {1 {bad file identifier "gorp"}}
catch {exec rm -f test1}
concat {}

View File

@ -1,78 +0,0 @@
# Commands covered: rename
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/rename.test,v 1.5 93/02/06 15:54:23 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
catch {rename r2 {}}
proc r1 {} {return "procedure r1"}
rename r1 r2
test rename-1.1 {simple renaming} {
r2
} {procedure r1}
test rename-1.2 {simple renaming} {
list [catch r1 msg] $msg
} {1 {invalid command name: "r1"}}
rename r2 {}
test rename-1.3 {simple renaming} {
list [catch r2 msg] $msg
} {1 {invalid command name: "r2"}}
# The test below is tricky because it renames a built-in command.
# It's possible that the test procedure uses this command, so must
# restore the command before calling test again.
rename list l.new
set a [catch list msg1]
set b [l.new a b c]
rename l.new list
set c [catch l.new msg2]
set d [list 111 222]
test 2.1 {renaming built-in command} {
list $a $msg1 $b $c $msg2 $d
} {1 {invalid command name: "list"} {a b c} 1 {invalid command name: "l.new"} {111 222}}
test rename-3.1 {error conditions} {
list [catch {rename r1} msg] $msg $errorCode
} {1 {wrong # args: should be "rename oldName newName"} NONE}
test rename-3.2 {error conditions} {
list [catch {rename r1 r2 r3} msg] $msg $errorCode
} {1 {wrong # args: should be "rename oldName newName"} NONE}
test rename-3.3 {error conditions} {
proc r1 {} {}
proc r2 {} {}
list [catch {rename r1 r2} msg] $msg
} {1 {can't rename to "r2": command already exists}}
test rename-3.4 {error conditions} {
catch {rename r1 {}}
catch {rename r2 {}}
list [catch {rename r1 r2} msg] $msg
} {1 {can't rename "r1": command doesn't exist}}
test rename-3.5 {error conditions} {
catch {rename _non_existent_command {}}
list [catch {rename _non_existent_command {}} msg] $msg
} {1 {can't delete "_non_existent_command": command doesn't exist}}

View File

@ -1,95 +0,0 @@
# Commands covered: source
#
# This file contains a collection of tests for one or more of the Tcl
# built-in commands. Sourcing this file into Tcl runs the tests and
# generates output for errors. No output means no errors were found.
#
# Copyright (c) 1991-1993 The Regents of the University of California.
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
# OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
# CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Header: /user6/ouster/tcl/tests/RCS/source.test,v 1.8 93/02/17 13:22:56 ouster Exp $ (Berkeley)
if {[string compare test [info procs test]] == 1} then {source defs}
test source-1.1 {source command} {
set x "old x value"
set y "old y value"
set z "old z value"
exec cat << {
set x 22
set y 33
set z 44
} > source.file
source source.file
list $x $y $z
} {22 33 44}
test source-1.2 {source command} {
exec cat << {list result} > source.file
source source.file
} result
test source-2.1 {source error conditions} {
list [catch {source} msg] $msg
} {1 {wrong # args: should be "source fileName"}}
test source-2.2 {source error conditions} {
list [catch {source a b} msg] $msg
} {1 {wrong # args: should be "source fileName"}}
test source-2.3 {source error conditions} {
exec cat << {
set x 146
error "error in sourced file"
set y $x
} > source.file
list [catch {source source.file} msg] $msg $errorInfo
} {1 {error in sourced file} {error in sourced file
while executing
"error "error in sourced file""
(file "source.file" line 3)
invoked from within
"source source.file"}}
test source-2.4 {source error conditions} {
exec cat << {break} > source.file
catch {source source.file}
} 3
test source-2.5 {source error conditions} {
exec cat << {continue} > source.file
catch {source source.file}
} 4
test source-2.6 {source error conditions} {
string tolower [list [catch {source _non_existent_} msg] $msg $errorCode]
} {1 {couldn't read file "_non_existent_": no such file or directory} {posix enoent {no such file or directory}}}
test source-3.1 {return in middle of source file} {
exec cat << {
set x new-x
return allDone
set y new-y
} > source.file
set x old-x
set y old-y
set z [source source.file]
list $x $y $z
} {new-x old-y allDone}
catch {exec rm source.file}
# Generate null final value
concat {}

248
tcl7.6/README Normal file
View File

@ -0,0 +1,248 @@
Tcl
SCCS: @(#) README 1.38 96/10/07 11:33:23
1. Introduction
---------------
This directory and its descendants contain the sources and documentation
for Tcl, an embeddable scripting language. The information here
corresponds to release 7.6. This is a relatively minor release with bug
fixes and a few new features, mostly to improve portability. Tcl 7.6
should be backwards compatible with Tcl 7.5 scripts, but there are two
incompatible changes, one in the C APIs for custom channel drivers and
the other affecting start-up file names under Windows. See below for
more details.
2. Documentation
----------------
The best way to get started with Tcl is to read one of the introductory
books on Tcl:
Tcl and the Tk Toolkit, by John Ousterhout,
Addison-Wesley, 1994, ISBN 0-201-63337-X
Practical Programming in Tcl and Tk, by Brent Welch,
Prentice-Hall, 1995, ISBN 0-13-182007-9
Exploring Expect, by Don Libes,
O'Reilly and Associates, 1995, ISBN 1-56592-090-2
The "doc" subdirectory in this release contains a complete set of reference
manual entries for Tcl. Files with extension ".1" are for programs (for
example, tclsh.1); files with extension ".3" are for C library procedures;
and files with extension ".n" describe Tcl commands. The file "doc/Tcl.n"
gives a quick summary of the Tcl language syntax. To print any of the man
pages, cd to the "doc" directory and invoke your favorite variant of
troff using the normal -man macros, for example
ditroff -man Tcl.n
to print Tcl.n. If Tcl has been installed correctly and your "man"
program supports it, you should be able to access the Tcl manual entries
using the normal "man" mechanisms, such as
man Tcl
There is also an official home for Tcl and Tk on the Web:
http://www.sunlabs.com/research/tcl
These Web pages include release updates, reports on bug fixes and porting
issues, HTML versions of the manual pages, and pointers to many other
Tcl/Tk Web pages at other sites. Check them out!
3. Compiling and installing Tcl
-------------------------------
This release contains everything you should need to compile and run
Tcl under UNIX, Macintoshes, and PCs (either Windows NT, Windows 95,
or Win 3.1 with Win32s).
Before trying to compile Tcl you should do the following things:
(a) Check for a binary release. Pre-compiled binary releases are
available now for PCs, Macintoshes, and several flavors of UNIX.
Binary releases are much easier to install than source releases.
To find out whether a binary release is available for your platform,
check the home page for the Sun Tcl/Tk project
(http://www.sunlabs.com/research/tcl) and also check in the FTP
directory from which you retrieved the base distribution. Some
of the binary releases are available freely, while others are for
sale.
(b) Make sure you have the most recent patch release. Look in the
FTP directory from which you retrieved this distribution to see
if it has been updated with patches. Patch releases fix bugs
without changing any features, so you should normally use the
latest patch release for the version of Tcl that you want.
Patch releases are available in two forms. A file like
tcl7.6p1.tar.Z is a complete release for patch level 1 of Tcl
version 7.6. If there is a file with a higher patch level than
this release, just fetch the file with the highest patch level
and use it.
Patches are also available in the form of patch files that just
contain the changes from one patch level to another. These
files will have names like tcl7.6p1.patch, tcl7.6p2.patch, etc. They
may also have .gz or .Z extensions to indicate compression. To
use one of these files, you apply it to an existing release with
the "patch" program. Patches must be applied in order:
tcl7.6p1.patch must be applied to an unpatched Tcl 7.6 release
to produce a Tcl 7.6p1 release; tcl7.6p2.patch can then be
applied to Tcl7.6p1 to produce Tcl 7.6p2, and so on. To apply an
uncompressed patch file such as tcl7.6p1.patch, invoke a shell
command like the following from the directory containing this
file:
patch -p < tcl7.6p1.patch
If the patch file has a .gz extension, invoke a command like the
following:
gunzip -c tcl7.6p1.patch.gz | patch -p
If the patch file has a .Z extension, it was compressed with
compress. To apply it, invoke a command like the following:
zcat tcl7.6p1.patch.Z | patch -p
If you're applying a patch to a release that has already been
compiled, then before applying the patch you should cd to the
"unix" subdirectory and type "make distclean" to restore the
directory to a pristine state.
Once you've done this, change to the "unix" subdirectory if you're
compiling under UNIX, "win" if you're compiling under Windows, or
"mac" if you're compiling on a Macintosh. Then follow the instructions
in the README file in that directory for compiling Tcl, installing it,
and running the test suite.
4. Summary of changes in Tcl 7.6
--------------------------------
Here are the most significant changes in Tcl 7.6. In addition to these
changes, there are numerous small bug fixes. See the file "changes" for
a complete list of all changes.
1. New file manipulation commands. There are new options to the
"file" command for copying files ("file copy"), deleting files and
directories ("file delete"), creating directories ("file mkdir"),
and renaming files ("file rename").
2. The implementation of "exec" has been improved greatly for Windows
95 and Windows NT.
3. The package loader has been modified to look for packages not only
in the auto_path directories but also in their immediate descendants.
This makes it much easier to install and uninstall packages. There
is now a new variable, tcl_pkgPath, which contains directories in
which packages are normally installed, and these directories are
automatically included in auto_path.
4. There is a new memory allocator for the Macintosh version, which
should be more efficient than the old one.
Tcl 7.6 contains two incompatible changes:
1. The C interfaces to channel drivers have been revised to eliminate
the use of Tcl_File handles in the interfaces. Instead, there are
new interface procedures channelReadyProc, watchChannelProc, and
getFileProc. This change does not affect Tcl scripts; it will only
affect you if you have written a custom channel driver.
2. Under Windows, tclsh now looks for the start-up file "tclshrc.tcl"
instead of "tclsh.rc". This is more consistent with wish and uses
the right extension.
5. Tcl newsgroup
-----------------
There is a network news group "comp.lang.tcl" intended for the exchange
of information about Tcl, Tk, and related applications. Feel free to use
the newsgroup both for general information questions and for bug reports.
We read the newsgroup and will attempt to fix bugs and problems reported
to it.
When using comp.lang.tcl, please be sure that your e-mail return address
is correctly set in your postings. This allows people to respond directly
to you, rather than the entire newsgroup, for answers that are not of
general interest. A bad e-mail return address may prevent you from
getting answers to your questions. You may have to reconfigure your news
reading software to ensure that it is supplying valid e-mail addresses.
6. Tcl contributed archive
--------------------------
Many people have created exciting packages and applications based on Tcl
and/or Tk and made them freely available to the Tcl community. An archive
of these contributions is kept on the machine ftp.neosoft.com. You
can access the archive using anonymous FTP; the Tcl contributed archive is
in the directory "/pub/tcl". The archive also contains several FAQ
("frequently asked questions") documents that provide solutions to problems
that are commonly encountered by TCL newcomers.
7. Support and bug fixes
------------------------
We're very interested in receiving bug reports and suggestions for
improvements. We prefer that you send this information to the
comp.lang.tcl newsgroup rather than to any of us at Sun. We'll see
anything on comp.lang.tcl, and in addition someone else who reads
comp.lang.tcl may be able to offer a solution. The normal turn-around
time for bugs is 3-6 weeks. Enhancements may take longer and may not
happen at all unless there is widespread support for them (we're
trying to slow the rate at which Tcl turns into a kitchen sink). It's
very difficult to make incompatible changes to Tcl at this point, due
to the size of the installed base.
When reporting bugs, please provide a short tclsh script that we can
use to reproduce the bug. Make sure that the script runs with a
bare-bones tclsh and doesn't depend on any extensions or other
programs, particularly those that exist only at your site. Also,
please include three additional pieces of information with the
script:
(a) how do we use the script to make the problem happen (e.g.
what things do we click on, in what order)?
(b) what happens when you do these things (presumably this is
undesirable)?
(c) what did you expect to happen instead?
The Tcl community is too large for us to provide much individual
support for users. If you need help we suggest that you post questions
to comp.lang.tcl. We read the newsgroup and will attempt to answer
esoteric questions for which no-one else is likely to know the answer.
In addition, Tcl support and training are available commercially from
NeoSoft (info@neosoft.com), Computerized Processes Unlimited
(gwl@cpu.com), and Data Kinetics (education@dkl.com).
8. Tcl version numbers
----------------------
Each Tcl release is identified by two numbers separated by a dot, e.g.
6.7 or 7.0. If a new release contains changes that are likely to break
existing C code or Tcl scripts then the major release number increments
and the minor number resets to zero: 6.0, 7.0, etc. If a new release
contains only bug fixes and compatible changes, then the minor number
increments without changing the major number, e.g. 7.1, 7.2, etc. If
you have C code or Tcl scripts that work with release X.Y, then they
should also work with any release X.Z as long as Z > Y.
Alpha and beta releases have an additional suffix of the form a2 or b1.
For example, Tcl 7.0b1 is the first beta release of Tcl version 7.0,
Tcl 7.0b2 is the second beta release, and so on. A beta release is an
initial version of a new release, used to fix bugs and bad features before
declaring the release stable. An alpha release is like a beta release,
except it's likely to need even more work before it's "ready for prime
time". New releases are normally preceded by one or more alpha and beta
releases. We hope that lots of people will try out the alpha and beta
releases and report problems. We'll make new alpha/beta releases to fix
the problems, until eventually there is a beta release that appears to
be stable. Once this occurs we'll make the final release.
We can't promise to maintain compatibility among alpha and beta releases.
For example, release 7.1b2 may not be backward compatible with 7.1b1, even
though the final 7.1 release will be backward compatible with 7.0. This
allows us to change new features as we find problems during beta testing.
We'll try to minimize incompatibilities between beta releases, but if
a major problem turns up then we'll fix it even if it introduces an
incompatibility. Once the official release is made then there won't
be any more incompatibilities until the next release with a new major
version number.
Patch releases have a suffix such as p1 or p2. These releases contain
bug fixes only. A patch release (e.g Tcl 7.6p2) should be completely
compatible with the base release from which it is derived (e.g. Tcl
7.6), and you should normally use the highest available patch release.

2400
tcl7.6/changes Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,3 +4,5 @@ systems. Typically, files from this directory are used to compile
Tcl when a system doesn't contain the corresponding files or when
they are known to be incorrect. When the whole world becomes POSIX-
compliant this directory should be unnecessary.
sccsid = SCCS: @(#) README 1.3 96/02/16 08:56:51

23
tcl7.6/compat/dirent.h Normal file
View File

@ -0,0 +1,23 @@
/*
* dirent.h --
*
* This file is a replacement for <dirent.h> in systems that
* support the old BSD-style <sys/dir.h> with a "struct direct".
*
* Copyright (c) 1991 The Regents of the University of California.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* SCCS: @(#) dirent.h 1.4 96/02/15 14:43:50
*/
#ifndef _DIRENT
#define _DIRENT
#include <sys/dir.h>
#define dirent direct
#endif /* _DIRENT */

View File

@ -5,26 +5,12 @@
* in the POSIX style ("struct dirent").
*
* Copyright (c) 1991 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, provided that the
* above copyright notice and the following two paragraphs appear in
* all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* $Header: /user6/ouster/tcl/compat/RCS/dirent2.h,v 1.2 93/03/19 15:25:09 ouster Exp $ SPRITE (Berkeley)
* SCCS: @(#) dirent2.h 1.4 96/02/15 14:43:51
*/
#ifndef _DIRENT

65
tcl7.6/compat/dlfcn.h Normal file
View File

@ -0,0 +1,65 @@
/*
* dlfcn.h --
*
* This file provides a replacement for the header file "dlfcn.h"
* on systems where dlfcn.h is missing. It's primary use is for
* AIX, where Tcl emulates the dl library.
*
* This file is subject to the following copyright notice, which is
* different from the notice used elsewhere in Tcl but rougly
* equivalent in meaning.
*
* Copyright (c) 1992,1993,1995,1996, Jens-Uwe Mager, Helios Software GmbH
* Not derived from licensed software.
*
* Permission is granted to freely use, copy, modify, and redistribute
* this software, provided that the author is not construed to be liable
* for any results of using the software, alterations are clearly marked
* as such, and this notice is not modified.
*
* SCCS: @(#) dlfcn.h 1.4 96/09/17 09:05:59
*/
/*
* @(#)dlfcn.h 1.4 revision of 95/04/25 09:36:52
* This is an unpublished work copyright (c) 1992 HELIOS Software GmbH
* 30159 Hannover, Germany
*/
#ifndef __dlfcn_h__
#define __dlfcn_h__
#ifndef _TCL
#include <tcl.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* Mode flags for the dlopen routine.
*/
#define RTLD_LAZY 1 /* lazy function call binding */
#define RTLD_NOW 2 /* immediate function call binding */
#define RTLD_GLOBAL 0x100 /* allow symbols to be global */
/*
* To be able to intialize, a library may provide a dl_info structure
* that contains functions to be called to initialize and terminate.
*/
struct dl_info {
void (*init) _ANSI_ARGS_((void));
void (*fini) _ANSI_ARGS_((void));
};
VOID *dlopen _ANSI_ARGS_((const char *path, int mode));
VOID *dlsym _ANSI_ARGS_((void *handle, const char *symbol));
char *dlerror _ANSI_ARGS_((void));
int dlclose _ANSI_ARGS_((void *handle));
#ifdef __cplusplus
}
#endif
#endif /* __dlfcn_h__ */

38
tcl7.6/compat/fixstrtod.c Normal file
View File

@ -0,0 +1,38 @@
/*
* fixstrtod.c --
*
* Source code for the "fixstrtod" procedure. This procedure is
* used in place of strtod under Solaris 2.4, in order to fix
* a bug where the "end" pointer gets set incorrectly.
*
* Copyright (c) 1995 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* SCCS: @(#) fixstrtod.c 1.5 96/02/15 12:08:21
*/
#include <stdio.h>
#undef strtod
/*
* Declare strtod explicitly rather than including stdlib.h, since in
* somes systems (e.g. SunOS 4.1.4) stdlib.h doesn't declare strtod.
*/
extern double strtod();
double
fixstrtod(string, endPtr)
char *string;
char **endPtr;
{
double d;
d = strtod(string, endPtr);
if ((endPtr != NULL) && (*endPtr != string) && ((*endPtr)[-1] == 0)) {
*endPtr -= 1;
}
return d;
}

16
tcl7.6/compat/float.h Normal file
View File

@ -0,0 +1,16 @@
/*
* float.h --
*
* This is a dummy header file to #include in Tcl when there
* is no float.h in /usr/include. Right now this file is empty:
* Tcl contains #ifdefs to deal with the lack of definitions;
* all it needs is for the #include statement to work.
*
* Copyright (c) 1993 The Regents of the University of California.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* SCCS: @(#) float.h 1.3 96/02/15 14:43:52
*/

47
tcl7.6/compat/getcwd.c Normal file
View File

@ -0,0 +1,47 @@
/*
* getcwd.c --
*
* This file provides an implementation of the getcwd procedure
* that uses getwd, for systems with getwd but without getcwd.
*
* Copyright (c) 1993 The Regents of the University of California.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* SCCS: @(#) getcwd.c 1.5 96/02/15 12:08:20
*/
#include "tclInt.h"
#include "tclPort.h"
extern char *getwd _ANSI_ARGS_((char *pathname));
char *
getcwd(buf, size)
char *buf; /* Where to put path for current directory. */
size_t size; /* Number of bytes at buf. */
{
char realBuffer[MAXPATHLEN+1];
int length;
if (getwd(realBuffer) == NULL) {
/*
* There's not much we can do besides guess at an errno to
* use for the result (the error message in realBuffer isn't
* much use...).
*/
errno = EACCES;
return NULL;
}
length = strlen(realBuffer);
if (length >= size) {
errno = ERANGE;
return NULL;
}
strcpy(buf, realBuffer);
return buf;
}

32
tcl7.6/compat/gettod.c Normal file
View File

@ -0,0 +1,32 @@
/*
* gettod.c --
*
* This file provides the gettimeofday function on systems
* that only have the System V ftime function.
*
* Copyright (c) 1995 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* SCCS: @(#) gettod.c 1.2 96/02/15 12:08:26
*/
#include "tcl.h"
#include "tclPort.h"
#include <sys/timeb.h>
#undef timezone
int
gettimeofday(tp, tz)
struct timeval *tp;
struct timezone *tz;
{
struct timeb t;
ftime(&t);
tp->tv_sec = t.time;
tp->tv_usec = t. millitm * 1000;
return 0;
}

View File

@ -0,0 +1,39 @@
This software is copyrighted by the Regents of the University of
California, Sun Microsystems, Inc., and other parties. The following
terms apply to all files associated with the software unless explicitly
disclaimed in individual files.
The authors hereby grant permission to use, copy, modify, distribute,
and license this software and its documentation for any purpose, provided
that existing copyright notices are retained in all copies and that this
notice is included verbatim in any distributions. No written agreement,
license, or royalty fee is required for any of the authorized uses.
Modifications to this software may be copyrighted by their authors
and need not follow the licensing terms described here, provided that
the new terms are clearly indicated on the first page of each file where
they apply.
IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE
IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
MODIFICATIONS.
GOVERNMENT USE: If you are acquiring this software on behalf of the
U.S. government, the Government shall have only "Restricted Rights"
in the software and related documentation as defined in the Federal
Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
are acquiring the software on behalf of the Department of Defense, the
software shall be classified as "Commercial Computer Software" and the
Government shall have only "Restricted Rights" as defined in Clause
252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the
authors grant the U.S. Government and others acting in its behalf
permission to use and distribute the software in accordance with the
terms specified in this license.

22
tcl7.6/compat/limits.h Normal file
View File

@ -0,0 +1,22 @@
/*
* limits.h --
*
* This is a dummy header file to #include in Tcl when there
* is no limits.h in /usr/include. There are only a few
* definitions here; also see tclPort.h, which already
* #defines some of the things here if they're not arleady
* defined.
*
* Copyright (c) 1991 The Regents of the University of California.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* SCCS: @(#) limits.h 1.7 96/02/15 14:43:55
*/
#define LONG_MIN 0x80000000
#define LONG_MAX 0x7fffffff
#define INT_MIN 0x80000000
#define INT_MAX 0x7fffffff

View File

@ -6,10 +6,12 @@
* origin of this code is unclear, but it seems to have come
* originally from Larry Wall.
*
*
* SCCS: @(#) opendir.c 1.3 96/02/15 12:08:21
*/
#include "tclInt.h"
#include "tclUnix.h"
#include "tclPort.h"
#undef DIRSIZ
#define DIRSIZ(dp) \

Some files were not shown because too many files have changed in this diff Show More