Tcl-DP, Version 3.1
February 17, 1994

This is to announce the official release of Tcl-DP, version 3.1.  You
can get Tcl-DP 3.1 from mm-ftp.cs.berkeley.edu [128.32.149.117] in the
/pub/multimedia/Tcl-DP directory.  Below are the major changes since 
version 3.0 and the README.

1. 12/21/93 (new feature) Modified dp_RDO and dp_RPC error return
   protocol so that it correctly sets the value of the errorInfo
   environment variable to the stack trace of the remote interpreter.
   If a version 3.1 server returns an error to a version 3.1 client, this 
   protocol change may cause problems when an RPC evaluation in the 3.1
   server generate an error.   I put a patch in the code fixes that provides
   backwards compatibilty most of the time.

2. 12/21/93 (bug fix) Set the default -onerror value for dp_RDO to
   tkerror.  Errors can be ignored by using "-onerror none" as a
   parameter to dp_RDO.  In previous releases, errors were ignored
   by default using dp_RDO.  For backwards compatibility, change all
   calls of the form
              dp_RDO <file> <args>
           to
              dp_RDO <file> -onerror none <args>
   *** POTENTIAL INCOMPATIBILITY ***

3. 1/1/94 (new feature) Added dp_whenidle command to provide a tcl
   interface to Tk_DoWhenIdle().
   
4. 1/5/94 (bug fix) Fixed many problems associated with partially received
   packets.

5. 1/21/94 (bug fix) Fixed dpnetwork.c to use fcntl() system call to
   set non-blocking mode rather than ioctl(FIONBIO), since the latter
   is not standard. (courtesy Brett McCoy, brtmac@ksu.ksu.edu)

6. 1/21/94 (porting problem fixed) Changed dpnetworkInit.c to dpnetInit.c
   because some unix systems don't like the long filename.

7. 1/21/94 (porting problem fixed) Added autoconfigure option to check
   for sys/un.h and define the symbol UNIX_SOCKET only if this file is
   present.  The effect of this is to make it so that systems that
   don't support unix domain sockets (e.g., SCO unix) can still use
   Tcl-DP.  #ifdef'd dpnetwork.c accordingly.  The same patch was made
   to detect the if the writev() system call is supported.  If not,
   it's emulated. (Courtesy Keith Amann <v043332@otis1.stortek.com>)

8. 1/28/94 (new feature) Added -linger and -reuseAddr options
   to dp_socketOption.  When used in dp_MakeRPCServer this allows
   local resuse of addresses. (Courtesy Lou-Salkind@deshaw.com and
   Gordon Chaffee <chaffee@bugs-bunny.CS.Berkeley.EDU>)

9. 2/7/94 (porting problems fixed) Many bug fixes for 64 bit integer
   machines provided by Maurice LeBrun <mjl@dino.ph.utexas.edu>.  This
   includes a port to the Cray.

10. 2/7/94 (improved tests) Old oo.test and rpc.test launched a server
   in the background to connect to, waiting a specified amount of time
   before proceeding.  On a heavily loaded machine it may not be a long
   enough wait.  Added a loop which repeatedly tries to connect (up to
   5 times, each separated by a 2 second wait).  Also, modified
   udp.test to return proper values for the Cray-2, Cray C90, and
   PA_RISC1.1 (HP700).  (Courtesy Maurice LeBrun <mjl@dino.ph.utexas.edu>).

11. 2/12/94 (improved tests) Removed hardwired file handles in the test
   suite.  This should make the test suite less system dependent.

------------------------------- README ---------------------------------

             Tcl Distributed Programming (Tcl-DP)
               (Version 3.1; February 17, 1994)

		     Lawrence A. Rowe
               Computer Science Division-EECS
             University of California at Berkeley

		      Brian C. Smith
		Department of Computer Science
		    Cornell University

This directory contains a freely distributable extension to Tcl/Tk
called Tcl Distributed Programming (Tcl-DP).  Tcl-DP adds TCP and IP
connection management, remote procedure call (RPC), and distributed
object protocols to Tcl/Tk.  A C interface to the RPC primitives is
also provided.  Unlike the "send" command of Tk, Tcl-DP does not
require that Tcl/Tk processes that want to communicate share an X
server because Tcl-DP is built directly upon TCP/IP.

BACKGROUND

Tcl stands for the Tool Command Language, a freely distributable,
embeddable scripting language package.  Tk is an freely distributable X
windows interface toolkit and widget library implemented by a
collection of new commands added to Tcl.  Information about Tcl/Tk is
available by anonymous ftp from sprite.berkeley.edu [128.32.150.27].
Tcl-DP was originally developed for Tcl 6.5 and Tk 3.0.  Tcl-DP Version
3.1 is compatible with Tcl 7.3 and Tk 3.6.

This distribution contains the source code for Tcl-DP, man pages that
describe the commands, and several examples that illustrate how to use
Tcl-DP to build simple distributed applications.  Tcl-DP is available
by anonymous ftp from toe.berkeley.edu [128.32.149.117] in the
/pub/multimedia/Tcp-DP directory.

The Makefile creates a library, libdpnetwork.a, that can be linked with
your application programs.  To use Tcl-DP, you must initialize your Tcl
interpreters with the Tdp_Init C procedure (see dp.h and tkAppInit.c).
After initialization, all distributed programming can be done with Tcl
commands.

In the examples subdirectory, several sample applications are supplied
that use Tcl-DP.  As you can see from the examples, the distributed
programming mechanisms of Tcl-DP are very simple.  A dp_RPC command,
for example, sends a Tcl command to a remote process, which evaluates
the command in the destination Tcl interpreter and returns the result
as the value of the dp_RPC command.

The services subdirectory contains an extended example of Tcl-DP.  It
contains Tcl-DP scripts to implement a name server, a daemon to which
server applications can advertise their location, and from which client
applications can locate the servers.  See services/README.

COMPILING/USING TCL-DP

To compile the dpwish program:

+) If you do not already have Tcl 7.3 and Tk 3.6, get a copy and follow
the instructions to build the system.  Tcl-DP 3.1 may not work with
earlier versions of Tcl/Tk.  Although not required, we recommend that
you place tcl-dp3.1 in a sibling directory to tcl7.3 and tk3.6, and
then make a symlink from tcl-dp3.1 to tcl-dp.

+) In the tcl-dp directory (i.e., where this README resides), type
"./configure".  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 Tk configuration for
your site; for details on how you can do this, see the file
"configure.info".

+) Type "make".  This will create a library archive called
"libdpnetwork.a" and a Tcl-DP extended wish called "dpwish."

+) Type "make install" to install Tcl-DP's binaries, library files,
and manual pages in standard places.  In the default configuration
information will be installed in /usr/local so you'll need write
permission on this directory.

To learn how to use Tcl-DP:

+) Read the README file in the examples subdirectory and play with
the example applications.

+) Read the Tcl-DP man page (Tcl-DP.l), and the other man pages 
in the doc subdirectory.

To report bugs, bug fixes, descriptions of interesting Tcl-DP 
applications, and suggested improvements:

+) Send email to tcl-dp@roger-rabbit.CS.Berkeley.EDU or
tcl-dp-bugs@roger-rabbit.CS.Berkeley.EDU

or

+) Post an article in the comp.lang.tcl newsgroup.

We extend our thanks to everyone who helped to create, debug, and
distribute this software.  Although there are too many people to mention
at this point, the following people deserve special attention:

  John Ousterhout, creator of Tcl/Tk; 
  Pekka Nikander, creator of tcpConnect;
  Tim MacKenzie, creator of tclRawTCP;
  Lou Salkind, ported Tcl-DP to Tcl 7.0/Tk 3.3
  R Lindsay Todd, developed security mechanism
  Craig Federighi, developed extended name server code
  Maurice LeBrun, port for cray and other 64 bit machines.
