This file was written for release 1.2 of DGD.

DGD is a rewrite from scratch of the LPMud server.  It runs on Windows, MacOS,
BeOS and many versions of Unix.  Binaries and source for the latest stable
release of DGD can be found at:

    ftp://ftp.imaginary.com/pub/LPC/servers/DGD/

DGD's home page is at:

    http://www.dworkin.nl/dgd/

Please report bugs to <felix@dworkin.nl>.


This distribution is organized as follows:

bin		Installation binaries will be created here (Unix & BeOS).
doc		Documentation, currently still very incomplete.
mud		A minimal mudlib called the kernel library, which is
		distributed together with, but not part of DGD.  The kernel
		library is in the public domain.
src		Where the source of DGD resides, and where you issue your
		`make' command on Unix or BeOS.
src/host/*	Subdirectories for various platform-dependent files.  For
		historical reasons, files for Windows are in src/host/pc.
tmp		The place where temporary files, such as the swap file, are
		created by DGD.

See the file doc/Platforms for help on compiling DGD on various platforms.
Also consult the src/host/*/README file for your platform, if there is one.


The following significant changes have been made since version 1.1 (for
a full list, consult the file src/Changelog):

 - A generic string parser has been added, which parses strings using a
   context-free grammar and regular expressions; see the file doc/parser.
 - Functions can now be `atomic'.  An error that occurs while executing an
   atomic function will roll back all changes made by that function,
   including calls to other functions.  Calls to atomic functions can be
   safely nested.  There is one limitation: file writing operations are not
   possible from atomically executed code.
 - A new typechecking mode has been added, selected by setting the config
   variable `typechecking' to 2.  This introduces the constant `nil' as
   a value distinct of integer 0.  String, object, array and mapping values
   will be initialized as nil.  The kfuns allocate(), allocate_int() and
   allocate_float() allocate an array of nil values, integer 0 values, and
   floating point 0.0 values, respectively.
 - `varargs' can now be used in the argument list of a function, to specify
   that only the following arguments are optional, rather than all of them.
   In typechecking mode 2, this is the only allowed use of varargs.
 - Callouts can now have millisecond delays, using a float delay argument.
   A callout with a delay of 0 will be executed immediately after termination
   of the current thread.
 - A new kfun millitime() was added.
 - Blocking of user input is now possible with the new block_input() kfun.
 - New kfuns query_ip_name() and send_datagram() were added.
 - ANSI C equivalent math functions have been implemented as kfuns.
 - New kfuns hash_crc16() and hash_md5() were added.
 - DGD has been made restartable without quitting on Windows, Mac and BeOS.


DGD 1.2 has changed behaviour in one significant way: the semantics of
send_message() have changed, and the function message_done() is now
called in the user object whenever the output buffer has drained --
not just after a message couldn't be sent completely right away.  One
effect of this is that the kernel library that came with DGD 1.1 may
not work with later versions.  This is because the standard user object
in the old version of the kernel library does not have a message_done()
function.  To get it to work, add the following function to
/kernel/lib/user.c:

    int message_done()
    {
	return MODE_NOCHANGE;
    }


*WARNING*

It is possible to use statedumps created by DGD 1.1 with 1.2.  However, you
must first make sure that there are no partially upgraded objects in the
statedump that DGD 1.1 (or any version prior to 1.1.97) created.

A partially upgraded object is a clone whose master object has been
recompiled, but which itself hasn't been upgraded yet.  DGD 1.2 handles
these objects differently, and attempting to use it on a statedump with
old-style partially upgraded objects will result in crashes and trashed
statedumps.

Getting rid of partially upgraded objects is very simple: when restoring
state from a statedump file, DGD automatically upgrades any left-over
partially upgraded objects.  So, if you have a statedump file that might
contain a partially upgraded object, restart your old DGD with it, and
then let it create a new statedump immediately, or at least without
recompiling any objects in the meantime.  The resulting statedump file
will be guaranteed free of partially upgraded objects, and can safely be
used by DGD 1.2.

It is <not> possible to restore a statedump created by DGD 1.2 with any
earlier version.
