MOO-cows Mailing List Archive


ALPHA-TEST release of LambdaMOO version 1.8.0alpha5

I have made one more in a long line of *alpha-test* releases of version 1.8.0
of the LambdaMOO server in the usual place:

This is still an ALPHA TEST release of the server and, although it's almost
certainly a great deal more stable than previous alpha releases, there are
almost certainly some more server-crashing, database-losing bugs remaining, so

Please continue to send your bug reports to the main MOO-Cows mailing list.
I still expect to make at least one more test release before the final,
production-approved one.

Here's the ChangeLog.txt entry for this release:
Version 1.8.0alpha5, 11 January 1996
-- Removed test that caused commands from disconnected users to be discarded.
   (Thanks to Nate Massey for asking the question that led to this.)
-- If $do_command() returns false without suspending (signalling that the
   server should carry on with its normal command parsing and dispatch), the
   resulting input task will have the same task_id() value as the $do_command()
   task did.  (Thanks to Nate Massey for the suggestion.)
-- Added configuration code to cope with the C function crypt() not existing;
   in such a case, the crypt() built-in function simply returns the first
   argument, unchanged.  (Thanks again to Nate Massey for the suggestion.)
-- Fixed bogus-memory freeing bug in add_verb().  (Thanks to Mark Blanchard for
   reporting this and to Purify for finding it.)
-- Fixed missing declaration of strlen() in parser.y.  (Thanks again to Mark
   Blanchard for the report.)
-- Fixed bug where the wrong permissions are used by built-in functions who ask
   after they've already called some MOO function.  (Thanks to Brian Buchanan
   for finding this.)
-- Added new built-in function `buffered_output_length([CONN])', where CONN is
   an active connection and the result is the number of bytes currently
   buffered up for output.  If CONN is not provided, this returns the maximum
   number of bytes that will be buffered up for output on any connection.
   (Thanks to Martian for the impetus for this and to Gustavo Glusman and Jaime
   Prilusky for inspiration on the interface.)
-- Made it easier for server code to get the result of a suspended task, by
   adding an `result' argument to resume_from_previous_vm().  (Thanks to Jin-su
   Ahn for pointing out this irregularity in the code.)
-- Fixed problem with non-flushing notify() calls when the string to be output
   is larger than MAX_QUEUED_OUTPUT; this always failed, even when there wasn't
   any other output in the buffer.  Now, if the buffer is currently empty, any
   line of output, no matter how large, will be accepted.
-- Added facility for doing fully-general binary I/O on connections.  If you
   call `set_connection_option(CONN, "binary", 1)', then both input from and
   output to that connection can contain arbitrary bytes.  On input, any byte
   that isn't an ASCII printing character, the space character, or the TAB
   character will be represented as the four-character substring "~NNN", where
   NNN is the octal representation of the byte; the input character `~' is
   represented by the two-character substring "~~".  Call this representation
   of bytes "binary strings".  Input from a connection in binary mode is *not*
   broken into lines at all; it is delivered to either the read() function or
   the built-in command parser in whatever size chunks come back from the
   operating system.  For output to a connection in binary mode, the second
   argument to `notify()' must be a binary string; if it is malformed, E_INVARG
   is raised.  Of course, the call `set_connection_option(CONN, "binary", 0)'
   sets the connection back into the normal MOO I/O mode.
-- For convenience in manipulating binary strings, two new built-in functions
   are provided:
	decode_binary(BIN_STRING [, FULLY]) => LIST
	    Returns a list of strings and/or numbers representing the bytes in
	    BIN_STRING in order.  If FULLY is false or omitted, the list
	    contains a number only for each non-printing, non-space, non-tab
	    byte; all other characters are grouped into the longest possible
	    contiguous substrings.  If FULLY is provided and true, the list
	    contains only numbers, one for each byte represented in BIN_STRING.
	    Raises E_INVARG if BIN_STRING is malformed.
		decode_binary("foo") => {"foo"}
		decode_binary("~~foo") => {"~foo"}
		decode_binary("foo~015~012") => {"foo", 10, 13}
						=> {"foo", 10, "bar", 10, "baz}
		decode_binary("foo~015~012", 1) => {102, 111, 111, 13, 10}
	encode_binary(@ARGS) => BIN_STRING
	    ARGS must be a list of numbers between 0 and 255, strings, and
	    lists of this same form.  Translates each number and string in turn
	    into its binary string equivalent, returning the concatenation of
	    all these substrings into a single binary string.
		encode_binary("~foo") => "~~foo"
		encode_binary({"foo", 13, 10}, {"bar", 13, 10})
					=> "foo~015~012bar~015~012"
		encode_binary("foo", 13, 10, "bar", 13, 10)
					=> "foo~015~012bar~015~012"
-- Fixed two places missed in a change made in 1.7.9alpha1;
   $user_disconnected() is now called for un-logged-in connections that either
   time out or are the target of a call to boot_player().  (Thanks to Brian
   Buchanan for pointing out the discrepancy.)
-- Fixed memory-smash bug in the renumber() built-in function.  (Thanks again
   to Brian Buchanan for reporting this and to Purify for making it easy to
   find the problem.)


Home | Subject Index | Thread Index