Subject: LambdaMOO Server Release 1.7.0

From: Pavel Curtis <[email-masked]>
Date: Fri, 23 Oct 1992 16:48:20 -0700

At long last, I have finally gotten the server sufficiently in shape to allow
the release of version 1.7.0, which is now available for anonymous FTP from
host `parcftp.xerox.com', directory `pub/MOO', file `LambdaMOO-1.7.0.tar.Z'.

There are many changes and improvements over the last release 1.6.1; I have
enclosed the relevant portion of the change log below.

NOTE that there are some *incompatible* changes in this release; the change log
(ChangeLog.txt in the release) describes the changes and semi-automatic methods
for converting existing databases.

This release of the server is believed to be relatively straightforward to use
on *any* UNIX system, and should automatically configure itself to cope with
the eccentricities of each individual one.  Naturally, this broad claim is
surely wrong, so please let me know of failures and I'll do what I can to make
things better.

The 1.7.0 version of the LambdaMOO Programmer's Manual, and a brand-new version
of the LambdaCore database, will be released tomorrow (barring disaster).

	Pavel/Haakon

>From ChangeLog.txt:

Version 1.7.0, 23 October 1992
-- Fixed behavior of index(), rindex(), match(), and rmatch() on empty pattern
   and/or subject strings. (Version 1.6.3)
-- Added the prefix `> ' to all log messages generated by the server_log()
   built-in function, so that they can be distinguished from server-generated
   messages.
-- Added a compile-time option (OUT_OF_BAND_PREFIX) enabling a method of
   entering commands that bypass both normal command parsing and any pending
   read()ing task.  If OUT_OF_BAND_PREFIX is #define'd (in config.h) as a
   non-empty string, then any lines of player input that begin with that prefix
   will be parsed into a list of words and those words passed as arguments in a
   server task invoking #0:do_out_of_band_command.  This is intended for use by
   fancy MOO clients that need to send reliably-understood messages to the
   server, such as window-event notifications.
-- Added output to the `.program' built-in command, stating that it is obsolete
   and will be replaced `soon' (i.e., in the next release).
-- Rearranged the per-system configuration procedure for compiling the server;
   now it should be easier for people to understand just what needs to be done
   for their particular system.  The user changes in the Makefile are now
   confined to specfying details of the compiler; all other kinds of options
   are handled by editing the `config.h' file, which has been radically
   reorganized.
-- Renamed a few files (notably parse_command.[ch]) to fit within the
   14-character limit imposed on certain systems.  (Version 1.6.4)
-- Implemented reference counting on string and list values, replacing the old,
   CPU-intensive deep copying method of storage management.
-- Added subrange assignment for strings and lists.  Added indexed assignment
   for strings.  (Version 1.6.5)
-- Fixed bug whereby a read()ing task with no more input to consume was never
   resumed if the connection being read was subsequently closed, from either
   side.  Now the read() call raises E_INVARG, just as it would if the read()
   were begun when the connection was already closed and no more input was left
   to consume.
-- Added TYPE_CLEAR value to properties, which cause property lookup on the
   parent.  Added built in functions `clear_property()' and
   `is_clear_property()' to assist in TYPE_CLEAR property manipulation.
-- Added hash-lookup for properties and changed property definition
   representation to be arrays instead of linked-lists, both to speed up
   property lookup. (1.6.6)
-- Added support for multiple complete networking implementations.  The first
   use of this flexibility is a new SINGLE_USER option, which creates a version
   of the server that accepts only one connection at a time and uses the
   server's own standard input and output streams for it.
-- Added a new built-in property on objects, the `f' (for `fertile') bit; it
   replaces the use of the `r' bit to allow children to be made of the object
   by either create() or chparent().  That is, now those operations check that
   the `f' bit is set and disregard the setting of the `r' bit. (Version 1.6.7)
   ******** Before upgrading an existing MOO to use this version of the server,
   * NOTE * you should make sure that no object in your database already has a
   ******** property named `f'; the following MOO program, run by a wizard,
   will perform this check:
		for i in [0..tonum(max_object())]
		  o = toobj(i);
		  if (ticks_left() < 1000 || seconds_left() < 2)
		    notify(player, tostr("Checking ", o, " ..."));
		    suspend(0);
		  endif
		  if (valid(o) && "f" in properties(o))
		    notify(player, tostr("*** ", o.name, " (", o,
				         ") has an `f' property!"));
		  endif
		endfor
   After eliminating all such properties from the database and restarting with
   this version of the server, you should, as a wizard, run the following MOO
   code to initialize the `f' bits of all of the objects:
		for i in [0..tonum(max_object())]
		  o = toobj(i);
		  if (ticks_left() < 1000 || seconds_left() < 2)
		    notify(player, tostr("Fixing ", o, ".f ..."));
		    suspend(0);
		  endif
		  if (valid(o))
		    o.f = o.r;
		  endif
		endfor
-- Reorganized the files so that all database modifying procedures were in one
   of four modules. (Version 1.6.8)
-- Reorganized existing network protocol and multiplexing wait implementations
   into a pluggable modular form. (Version 1.6.9)
-- Fixed bug in the interpreter that could pass a garbage program counter to
   the line-number-finding code, used in printing error tracebacks.  The l-n-f
   code responded semi-robustly by printing a message in the server log and
   returning a line number of zero. (Version 1.6.10)
-- Fixed bug whereby passing negative numbers to random() failed to evoke an
   E_INVARG error.
-- Fixed a bug in MOO-code compilation that led to real nastiness if there were
   more than 255 literals in a single verb.
-- Incorporated several new networking implementations, allowing for use by a
   single-user (using the standard input and output streams of the server
   itself), and by multiple users on either System V or BSD-style UNIX systems,
   either with or without TCP/IP networking.  (Version 1.6.11)
-- Fixed a bug in built-in function management that caused max() and min() to
   always raise E_TYPE on some systems.
-- Added a new automatic configuration system to the server distribution, so
   that people do not, in general, need to know much of anything about their
   local system in order to compile the server.  (Version 1.6.12)
-- Fixed a misfeature of substitute whereby it was not possible to include a
   percent-sign in the string that was to survive into the output.  Now, `%%'
   is replaced by `%' in the output.  (Version 1.7.0)