Intial commit
This commit is contained in:
346
tcl7.3/README
Normal file
346
tcl7.3/README
Normal file
@@ -0,0 +1,346 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user