Update Doku aus Driversourcen

Change-Id: I455f0813b970151089b3dc1b8d9407eea323cdd1
diff --git a/doc/master/compile_object b/doc/master/compile_object
index 1b55658..b9425bd 100644
--- a/doc/master/compile_object
+++ b/doc/master/compile_object
@@ -1,11 +1,11 @@
 SYNOPSIS
-	object compile_object(string filename)
+        object compile_object(string filename)
 
 DESCRIPTION
-	This function is caled if the interpreter cannot find the
-	file for an object to be loaded. The master object has now
-	the opportunity to return an object that will then serve as if
-	compiled from the given filename.
+        This function is caled if the interpreter cannot find the
+        file for an object to be loaded. The master object has now
+        the opportunity to return an object that will then serve as if
+        compiled from the given filename.
 
-	If 0 is returned, the usual ``Could not load descr for'' error
-	will occur.
+        If 0 is returned, the usual "Could not load descr for" error
+        will occur.
diff --git a/doc/master/connect b/doc/master/connect
index a1c7315..d98f5d5 100644
--- a/doc/master/connect
+++ b/doc/master/connect
@@ -1,13 +1,26 @@
 SYNOPSIS
-	object connect(void)
+        object connect(void)
 
 DESCRIPTION
-	Return a login object that the requested connection should be
-	bound to. Note that the connection is not bound yet.
+        Return a login object that the requested connection should be
+        bound to.
 
-	The lfun logon() will be applied to the login object after
-	binding the connection to it. That lfun has to return != 0 to
-	indicate success.
+        Note that the connection is at this time bound to the master object,
+        and will be re-bound to the returned object.
+
+        The lfun logon() will be applied to the login object after
+        binding the connection to it. That lfun has to return != 0 to
+        indicate success.
+
+        If connect() initiates a secure connection without setting a callback,
+        and the connection is still handshaking at the time connect() returns,
+        the driver will delay the call to logon() until the handshake either
+        succeeds or fails.
+
+HISTORY
+        LDMud 3.2.13/3.3.713 streamlined the handling of secure connections
+        during logon.
 
 SEE ALSO
-	logon(A), disconnect(M), interactive(E), exec(E)
+        logon(A), disconnect(M), interactive(E), exec(E),
+        net_connect(E), tls_init_connection(E)
diff --git a/doc/master/dangling_lfun_closure b/doc/master/dangling_lfun_closure
index 6bfaeb5..0bd881f 100644
--- a/doc/master/dangling_lfun_closure
+++ b/doc/master/dangling_lfun_closure
@@ -1,26 +1,30 @@
 SYNOPSIS
-	void dangling_lfun_closure()
+        void dangling_lfun_closure()
 
 DESCRIPTION
-	Handle a dangling lfun-closure.
+        Handle a dangling lfun-closure.
 
-	This is called when the gamedriver executes a closure using a
-	vanished lfun. A proper handling is to raise a runtime error.
+        This is called when the gamedriver executes a closure using a
+        vanished lfun, with previous_object() showing the originating
+        object. A proper handling is to raise a runtime error.
 
-	Technical:
-	  Upon replacing programs (see efun replace_program()), any
-	  existing lambda closures of the object are adjusted to the
-	  new environment. If a closure uses a lfun which vanished in
-	  the replacement process, the reference to this lfun is
-	  replaced by a reference to this function. The error will
-	  then occur when the execution of the adjusted lambda reaches
-	  the point of the lfun reference. There are two reasons for
-	  the delayed handling. First is that the program replacement
-	  and with it the closure adjustment happens at the end of a
-	  backend cycle, outside of any execution thread: noone would
-	  see the error at this time.  Second, smart closures might
-	  know/recognize the program replacement  and skip the call to
-	  the vanished lfun.
+        Technical:
+          Upon replacing programs (see efun replace_program()), any
+          existing lambda closures of the object are adjusted to the
+          new environment. If a closure uses a lfun which vanished in
+          the replacement process, the reference to the lfun is
+          replaced by an alien-lfun closure referencing to this function.
+          The error will then occur when the execution of the adjusted lambda
+          reaches the point of the lfun reference. There are two reasons for
+          the delayed handling. First is that the program replacement and with
+          it the closure adjustment happens at the end of a backend cycle,
+          outside of any execution thread: noone would see the error at this
+          time. Second, smart closures might know/recognize the program
+          replacement and skip the call to the vanished lfun.
+
+HISTORY
+        Since LDMud 3.2.9, all references to dangling_lfun_closure() are
+        created as alien-lfun closures.
 
 SEE ALSO
-	closures(LPC)
+        closures(LPC)
diff --git a/doc/master/disconnect b/doc/master/disconnect
index f7a9f3d..5f54c5f 100644
--- a/doc/master/disconnect
+++ b/doc/master/disconnect
@@ -1,13 +1,27 @@
 SYNOPSIS
-	void disconnect(object ob)
+        void disconnect(object ob, string remaining)
 
 DESCRIPTION
-	Handle the loss of the IP connection for the (formerly)
-	interactive object ob. The connection can be lost because the
-	the underlying transport connection was lost (``netdead''), or
-	because of a call to exec() or remove_interactive(). The
-	connection will be unbound upon return from this call.
+        Handle the loss of the IP connection for the (formerly)
+        interactive object <ob>. The connection can be lost because the
+        the underlying transport connection was lost ('netdead'), or
+        because of a call to exec() or remove_interactive().
+
+        <remaining> is a string holding the remaining unread input data from
+        the connection, if any. This data is unprocessed just as it was
+        received.
+
+        The connection will be unbound upon return from this call, so
+        for the time of this call, interactive(ob) will still
+        return TRUE even if the actual network connection has already
+        been lost.
+
+        This method is not called if the object has been destructed
+        already.
+
+HISTORY
+        LDMud 3.3.713 added the second argument for the remaining input data.
 
 SEE ALSO
-	connect(M), remove_player(M), remove_interactive(E), exec(E),
-	interactive(E)
+        connect(M), remove_player(M), remove_interactive(E), exec(E),
+        interactive(E)
diff --git a/doc/master/epilog b/doc/master/epilog
index eb51d75..b065d26 100644
--- a/doc/master/epilog
+++ b/doc/master/epilog
@@ -1,24 +1,16 @@
 SYNOPSIS
-	void epilog(void)		/* compat in 3.2 */
-	string *epilog(int eflag)	/* !compat or 3.2.1 */
+        string *epilog(int eflag)
 
 DESCRIPTION
-	Perform final actions before opening the system to users.
-	The semantics of this function differ for compat and !compat
-	mode, and between 3.2 and 3.2.1.
+        Perform final actions before opening the system to users.
 
-	Compat in 3.2: the objects from the INIT_FILE (#defined to
-	"room/init_file" at compile time in the parser) are already
-	loaded at this time. Normally there is nothing left to do for
-	this function.
+        The argument is the number of -e options that were
+        given to the parser on the commandline. Normally it is just 0
+        or 1. The function should return an array of strings, which
+        traditionally denote the objects to be preloaded with
+        master->preload(). Any other return value is interpreted as
+        "no object to preload". The resulting strings will be passed
+        one at a time as arguments to preload().
 
-	!Compat and 3.2.1: the argument is the number of -e options that were
-	given to the parser on the commandline. Normally it is just 0
-	or 1. The function should return an array of strings, which
-	traditionally denote the objects to be preloaded with
-	master->preload(). Any other return value is interpreted as
-	``no object to preload''. The resulting strings will be passed
-	one at a time as arguments to preload().
-
-SEE ALSO	
-	preload(M), master(M)
+SEE ALSO
+        preload(M), master(M)
diff --git a/doc/master/external_master_reload b/doc/master/external_master_reload
index 57913f0..8768506 100644
--- a/doc/master/external_master_reload
+++ b/doc/master/external_master_reload
@@ -1,10 +1,10 @@
 SYNOPSIS
-	void external_master_reload()
+        void external_master_reload()
 
 DESCRIPTION
-	Master was reloaded on external request by SIGUSR1.
-	It will be called after inaugurate_master() of course.
-	If you plan to do additional magic here, you're welcome.
+        Master was reloaded on external request by SIGUSR1.
+        It will be called after inaugurate_master() of course.
+        If you plan to do additional magic here, you're welcome.
 
 SEE ALSO
-	inaugurate_master(M)
+        inaugurate_master(M)
diff --git a/doc/master/flag b/doc/master/flag
index e04e91d..dccb52b 100644
--- a/doc/master/flag
+++ b/doc/master/flag
@@ -1,41 +1,41 @@
 SYNOPSIS
-	void flag(string arg)
+        void flag(string arg)
 
 DESCRIPTION
-	Evaluate an argument given as option '-f' to the driver.
-	If several '-f' options are given, this function will be
-	called sequentially with all given arguments.
-	This function can be used to pass the master commands via
-	arguments to the driver. This is useful when building a new
-	mudlib from scratch. It is called only when the system is
-	started.
+        Evaluate an argument given as option '-f' to the driver.
+        If several '-f' options are given, this function will be
+        called sequentially with all given arguments.
+        This function can be used to pass the master commands via
+        arguments to the driver. This is useful when building a new
+        mudlib from scratch. It is called only when the system is
+        started.
 
 EXAMPLE
-	// The code given implements these commands:
-	//  '-fcall <ob> <fun> <arg>': call function <fun> in object <ob> with
-	//				argument <arg>.
-	//  '-fshutdown': shutdown the system immediately.
-	// Thus, starting the driver as
-	//	 'parse "-fcall foo bar Yow!" -fshutdown' would
-	// first do foo->bar("Yow!") and then shut down the system.
+        // The code given implements these commands:
+        //  '-fcall <ob> <fun> <arg>': call function <fun> in object <ob> with
+        //                                argument <arg>.
+        //  '-fshutdown': shutdown the system immediately.
+        // Thus, starting the driver as
+        //         'parse "-fcall foo bar Yow!" -fshutdown' would
+        // first do foo->bar("Yow!") and then shut down the system.
 
-	{
-	  string obj, fun, rest;
+        {
+          string obj, fun, rest;
 
-	  if (arg == "shutdown")
-	  {
-	    shutdown();
-	    return;
-	  }
-	  if (sscanf(arg, "call %s %s %s", obj, fun, rest) >= 2)
-	  {
-	    write(obj+"->"+fun+"(\""+rest+"\") = ");
-	    write(call_other(obj, fun, rest));
-	    write("\n");
-	    return;
-	  }
-	  write("master: Unknown flag "+arg+"\n");
-	}
+          if (arg == "shutdown")
+          {
+            shutdown();
+            return;
+          }
+          if (sscanf(arg, "call %s %s %s", obj, fun, rest) >= 2)
+          {
+            write(obj+"->"+fun+"(\""+rest+"\") = ");
+            write(call_other(obj, fun, rest));
+            write("\n");
+            return;
+          }
+          write("master: Unknown flag "+arg+"\n");
+        }
 
 SEE ALSO
-	master(M)
+        master(M)
diff --git a/doc/master/get_bb_uid b/doc/master/get_bb_uid
index 5a4dc8b..2be9c89 100644
--- a/doc/master/get_bb_uid
+++ b/doc/master/get_bb_uid
@@ -1,18 +1,18 @@
 SYNOPSIS
-	string get_bb_uid(void)
+        string get_bb_uid(void)
 
 DESCRIPTION
-	Is called to get the ``backbone id''. Objects whose creator is
-	the backbone id are ``trusted'', and will automagically get
-	the uid and euid of the object that caused to load or clone
-	them.
+        This method is called when efun process_string() is used without a
+        current object (e.g. from notify_fail method). The current object
+        will be set to the current command giver, and will receive the euid
+        returned from this function.
 
-	The backbone id is also temporary given to objects while being
-	called via process_string().
+        If strict-euids, this function must exist and return a string.
+        Otherwise the function is optional and/or may return 0.
 
 HISTORY
-	Since 3.2.1, get_bb_uid() is needed just for process_string()
-	if no this_object() is present.
+        Since 3.2.1, get_bb_uid() is needed just for process_string()
+        if no this_object() is present.
 
 SEE ALSO
-	uids(C), creator_file(M), creator(E), get_root_id(M)
+        uids(C), creator_file(M), creator(E), get_master_uid(M)
diff --git a/doc/master/get_ed_buffer_save_file_name b/doc/master/get_ed_buffer_save_file_name
index 50a23c3..e13e66b 100644
--- a/doc/master/get_ed_buffer_save_file_name
+++ b/doc/master/get_ed_buffer_save_file_name
@@ -1,22 +1,22 @@
 SYNOPSIS
-	string get_ed_buffer_save_object_name(string edited_file)
+        string get_ed_buffer_save_file_name(string edited_file)
 
 DESCRIPTION
-	This function is called when an interactive user object is
-	destructed or looses connection through remove_interactive()
-	while editing with ed() the file edite_file (emergency save).
-	this_player() is set to the object that loosing connection.
-	The function should return a file name for the emergency save
-	file.
+        This function is called when an interactive user object is
+        destructed or loses connection through remove_interactive()
+        while editing with ed() the file edited_file (emergency save).
+        this_player() is set to the object that lost connection.
+        The function should return a file name for the emergency save
+        file.
 
 EXAMPLE
-	string get_ed_buffer_save_object_name(string file) {
-	  return "/players/"+getuid(this_player())+"/.dead_ed_files/"
-		 + explode(file, "/")[<1];
-	}
+        string get_ed_buffer_save_file_name(string file) {
+          return "/players/"+getuid(this_player())+"/.dead_ed_files/"
+                 + explode(file, "/")[<1];
+        }
 
-	This breaks up file into its components and stores it in the
-	user's emergency save directory under the file's basename.
+        This breaks up file into its components and stores it in the
+        user's emergency save directory under the file's basename.
 
 SEE ALSO
-	ed(E), destruct(E), remove_interactive(E), valid_write(M)
+        ed(E), destruct(E), remove_interactive(E), valid_write(M)
diff --git a/doc/master/get_master_uid b/doc/master/get_master_uid
index a0c6737..3cc7985 100644
--- a/doc/master/get_master_uid
+++ b/doc/master/get_master_uid
@@ -1,12 +1,12 @@
 SYNOPSIS
-	string get_master_uid(void)
+        string get_master_uid(void)
 
 DESCRIPTION
-	Return the string to be used as root-uid.
-	Under !native, the function is expendable.
+        Return the string to be used as root-uid.
+        Under !strict_euids, the function is expendable.
 
 HISTORY
-	Introduced in 3.2.1@40 replacing get_root_uid().
+        Introduced in 3.2.1@40 replacing get_root_uid().
 
 SEE ALSO
-	get_bb_uid(M), get_master_uid(M), uids(C), creator_file(M), creator(E)
+        get_bb_uid(M), get_master_uid(M), uids(C), creator_file(M), creator(E)
diff --git a/doc/master/get_simul_efun b/doc/master/get_simul_efun
index 88adba0..ac6f582 100644
--- a/doc/master/get_simul_efun
+++ b/doc/master/get_simul_efun
@@ -1,24 +1,20 @@
 SYNOPSIS
-	mixed get_     simul_efun(void)      // 3.2
-	string|string* get_simul_efun(void)  // 3.2.1
+        string|string* get_simul_efun(void)
 
 DESCRIPTION
-	Load the simul_efun object(s) and return one or more paths of it.
-// Note that the object(s) must be loaded by this function!
-//
-// When you return an array of strings, the first string is taken as path
-// to the simul_efun object, and all other paths are used for backup
-// simul_efun objects to call simul_efuns that are not present in the
-// main simul_efun object. This allows to remove simul_efuns at runtime 
-// without getting errors from old compiled programs that still use the 
-// obsolete simul_efuns. A side use of this mechanism is to provide 
-// a 'spare' simul_efun object in case the normal one fails to load.
-//
-	Should return either the object_name of the simul_efun object as
-	a string, or an array containing as first element a string
-	with the file name of the simul_efun object and the following
-	elements strings with file names of alternate simul_efun
-	objects that will be used if the first one cannot be loaded.
+        Load the simul_efun object(s) and return one or more paths of it.
+
+        Note that the object(s) must be loaded by this function!
+
+        When you return an array of strings, the first string is taken as path
+        to the simul_efun object, and all other paths are used for backup
+        simul_efun objects to call simul_efuns that are not present in the
+        main simul_efun object. This allows the removal of simul_efuns at
+        runtime without getting errors from old compiled programs that still
+        use the obsolete simul_efuns.
+
+        The additional simul-efun objects can not serve as backups for
+        the primary one!
 
 SEE ALSO
-	simul_efun(C)
+        simul_efun(C)
diff --git a/doc/master/get_wiz_name b/doc/master/get_wiz_name
index 6056965..81befb7 100644
--- a/doc/master/get_wiz_name
+++ b/doc/master/get_wiz_name
@@ -1,13 +1,12 @@
 SYNOPSIS
-	string get_wiz_name(string file)
+        string get_wiz_name(string file)
 
 DESCRIPTION
-	Argument is a file name, which we want to get the owner of.
-	This used for the wizlist, to determine who gets the score for
-	the file being used.
+        Argument is a file name, which we want to get the owner of.
+        This used for the wizlist, to determine who gets the score for
+        the file being used.
 
-	For 3.2.1, it is used only to score errors to the right wizard.
+        This call is used only to score errors to the right wizard.
 
 SEE ALSO
-	wizlist(E), get_wiz_info(E), query_real_name(A),
-	query_creator(M), getuid(E)
+        wizlist(E), get_wiz_info(E), query_creator(M), getuid(E)
diff --git a/doc/master/heart_beat_error b/doc/master/heart_beat_error
index d4d15f2..11985b8 100644
--- a/doc/master/heart_beat_error
+++ b/doc/master/heart_beat_error
@@ -1,24 +1,30 @@
 SYNOPSIS
-	mixed heart_beat_error(object culprit, string err, string prg,
-			       string curobj, int line)
+        mixed heart_beat_error(object culprit, string err, string prg,
+                               string curobj, int line, int caught)
 
 DESCRIPTION
-	This function is called when a runtime error occurs while
-	executing the heart_beat() function of the object culprit. prg
-	is program where the actual error happened, in object curobj
-	at the given line.
+        This function is called when a runtime error occurs while
+        executing the heart_beat() function of the object culprit. prg
+        is program where the actual error happened, in object curobj
+        at the given line.
 
-	At time of call, the heart_beat has been turned off.
-	Return anything != 0 to restart the heart_beat in culprit.
+        At time of call, the heart_beat has been turned off.
+        Return anything != 0 to restart the heart_beat in culprit.
 
-	If culprit is a user, it should at least get the message ``You
-	have no heartbeat''. A more advanced handling would destruct
-	the offending object curobj and and allow the heartbeat to
-	restart.
+        If culprit is a user, it should at least get the message "You
+        have no heartbeat". A more advanced handling would destruct
+        the offending object curobj and and allow the heartbeat to
+        restart.
 
-	Note that prg denotes the program actually executed (which
-	might be an inherited one) whereas curobj is just the
-	offending object.
+        If the error is caught on a higher level, <caught> is non-zero;
+        otherwise it is 0.
+
+        Note that prg denotes the program actually executed (which
+        might be an inherited one) whereas curobj is just the
+        offending object.
+
+HISTORY
+        LDMud 3.2.12/3.3.705 added the <caught> argument.
 
 SEE ALSO
-	set_heart_beat(E), heart_beat(A), runtime_error(M)
+        set_heart_beat(E), heart_beat(A), runtime_error(M)
diff --git a/doc/master/inaugurate_master b/doc/master/inaugurate_master
index 85c9526..2cf612b 100644
--- a/doc/master/inaugurate_master
+++ b/doc/master/inaugurate_master
@@ -1,30 +1,29 @@
 SYNOPSIS
-	void inaugurate_master(int arg)
+        void inaugurate_master(int arg)
 
 DESCRIPTION
-	This function is called in the master object after it has been
-	created and is fully functional. Note that the create()
-	function is of little use in the master object, because at the
-	time it is called there is no simul_efun object yet, and the
-	interpreter does not know anything about the user-ids and
-	access permissions.
+        This function is called in the master object after it has been
+        created and is fully functional. Note that the create()
+        function is of little use in the master object, because at the
+        time it is called there is no simul_efun object yet, and the
+        interpreter does not know anything about the user-ids and
+        access permissions.
 
-	The argument <arg> denotes why this function is called:
-	  arg = 0: the mud just started, this is the first master of all.
-	      = 1: the master was destructed and then reactivated
-	           (because a new one couldn't be loaded).
-	      = 2: the master was destructed and then reactivated, but
-	           additionally lost all variable contents.
-	      = 3: this is a reloaded master.
+        The argument <arg> denotes why this function is called:
+          arg = 0: the mud just started, this is the first master of all.
+              = 1: the master was destructed and then reactivated
+                   (because a new one couldn't be loaded).
+              = 2: the master was destructed and then reactivated, but
+                   additionally lost all variable contents.
+              = 3: this is a reloaded master.
 
-	This function has at least to set up the driverhooks to use
-	(in 3.2.1). Also, any mudwho or wizlist handling has to be
-	initialized here.
+        This function has to at least set up the driverhooks to use
+        (in 3.2.1). Also, any mudwho or wizlist handling has to be
+        initialized here.
 
-	Besides that, do whatever you feel you need to do, 
-	e.g. set_auto_include_string(), or give the master a decent euid.
+        Besides that, do whatever you feel you need to do,
+        e.g. set_auto_include_string(), or give the master a decent euid.
 
 SEE ALSO
-	initialisation(M), create(M), simul_efun(C), get_bb_id(M),
-	get_root_id(M), get_master_uid(M), flag(M),
-	reactivate_destructed_master(M)
+        initialisation(M), create(A), simul_efun(C), get_master_uid(M),
+        flag(M), reactivate_destructed_master(M)
diff --git a/doc/master/initialisation b/doc/master/initialisation
index e08d34a..89def0a 100644
--- a/doc/master/initialisation
+++ b/doc/master/initialisation
@@ -1,16 +1,15 @@
 SYNOPSIS
-	Initialization of the master object (since 3.2.1).
+        Initialization of the master object.
 
-	As since 3.2.1 the lfuns which are called to initialize
-	objects after a load are defined through driver hooks, and
-	these hooks are cleared prior to a master (re)load, the first
-	function called is inaugurate_master(). Anyway it's not very
-	sensible to do anything earlier as the master is not
-	recognized as such at that time, and so a number of
-	(important) things would not work.
-	Which lfun is called during runtime to reset the master is also
-	depending on the driverhook settings. Arbitrary actions may be done
-	on a reset.
+DESCRIPTION
+        As the lfuns which are called to initialize objects after a load
+        are defined through driver hooks, and these hooks are cleared
+        prior to a master (re)load, the first function called is
+        inaugurate_master(). It's not very sensible to do anything earlier
+        as the master is not recognized as such at that time, and so a
+        number of (important) things would not work. Which lfun is called
+        during runtime to reset the master also depends on the driverhook
+        settings. Arbitrary actions may be done on a reset.
 
 SEE ALSO
-	inaugurate_master(M)
+        inaugurate_master(M)
diff --git a/doc/master/log_error b/doc/master/log_error
index afc3385..9a0fd0c 100644
--- a/doc/master/log_error
+++ b/doc/master/log_error
@@ -1,11 +1,16 @@
 SYNOPSIS
-	void log_error(string file, string err)
+        void log_error(string file, string err, int warn)
 
 DESCRIPTION
-	Announce a compiler-time error in the named file. Whenever the
-	LPC compiler detects an error, this function is called. It
-	should at least log the error in a file, and also announce it
-	to the active user.
+        Announce a compiler-time error (warn == 0) or warning (warn != 0)
+        in the named file.
+
+        Whenever the LPC compiler detects an error or issues a warning,
+        this function is called. It should at least log the error in a file,
+        and also announce it to the active user.
+
+HISTORY
+        LDMud 3.2.8 added the 'warn' argument and the warnings in general.
 
 SEE ALSO
-	runtime_error(M)
+        runtime_error(M)
diff --git a/doc/master/low_memory b/doc/master/low_memory
new file mode 100644
index 0000000..0621925
--- /dev/null
+++ b/doc/master/low_memory
@@ -0,0 +1,56 @@
+SYNOPSIS
+        void low_memory(int what, int limitvalue, int memory, int reservestate)
+
+DESCRIPTION
+        This efun is called when there is a (potential) low-memory situation.
+        Two different limits for the amount of allocated memory can be
+        configured: a soft limit and a hard limit. If the soft limit is
+        exceeded, the driver calls low_memory() but does nothing else.
+        If the hard limit is exceeded, the driver calls low_memory() as well,
+        but initiates a garbage collection directly after the call. The efun
+        is called as well directly before a user-initiated garbage collection
+        is started.
+
+        <what> denotes the type of limit which was exceeded:
+        - NO_MALLOC_LIMIT_EXCEEDED   (0)
+            No limit was exceeded, but a garbage collection was requested by a
+            call to garbage_collection() and it will begin right after
+            low_memory() returns.
+        - SOFT_MALLOC_LIMIT_EXCEEDED (1)
+            The soft limit was exceeded.
+        - HARD_MALLOC_LIMIT_EXCEEDED (2)
+            The hard limit was exceeded. A garbage collection will begin right
+            after low_memory() returns.
+
+        <limit> specifies the numerical value of the limit which was exceeded.
+        It is 0 in case of NO_MALLOC_LIMIT_EXCEEDED.
+
+        <memory> specifies the amount of allocated memory right now.
+
+        <reservestate> specifies the current state of the memory reserves of
+        the driver. The states of the 3 different reserves are OR'ed together.
+        - USER_RESERVE_AVAILABLE   (1)
+          The user reserve is available.
+        - MASTER_RESERVE_AVAILABLE (2)
+          The master reserve is available.
+        - SYSTEM_RESERVE_AVAILABLE (4)
+          The system reserve is available.
+
+        This efun might be used to inform users about the garbage collection
+        and the expected long lag.
+
+        Another possibility is to initiate a garbage collection deliberately
+        at a suitable time (e.g. during the following night) after the soft
+        limit was hit.
+
+REMARKS
+        If in a low_memory condition when the memory reserves have been used
+        already and they could not be re-allocated after a garbage collection
+        slow_shut_down() is called instead of calling this function again.
+
+HISTORY
+        Introduced in 3.3.719
+
+SEE ALSO
+        debug_info(E), garbage_collection(E), slow_shut_down(M), memory(C)
+        malloc(D)
diff --git a/doc/master/make_path_absolute b/doc/master/make_path_absolute
index e0a0019..6093b1a 100644
--- a/doc/master/make_path_absolute
+++ b/doc/master/make_path_absolute
@@ -1,10 +1,10 @@
 SYNOPSIS
-	string make_path_absolute(string str)
+        string make_path_absolute(string str)
 
 DESCRIPTION
-	Absolutize a relative filename str given to the editor. Should
-	return the full pathname of the file to use. Any non-string
-	result will act as ``bad file name''.
+        Absolutize a relative filename str given to the editor. Should
+        return the full pathname of the file to use. Any non-string
+        result will act as "bad file name".
 
 SEE ALSO
-	ed(E), valid_write(M)
+        ed(E), valid_write(M)
diff --git a/doc/master/master b/doc/master/master
index 7d88855..f94f1f7 100644
--- a/doc/master/master
+++ b/doc/master/master
@@ -1,30 +1,30 @@
 NAME
-	master
+        master
 
 DESCRIPTION
-	This directory contains descriptions for the functions that
-	Amylaar's version of the LPC parser, expects to find in the
-	master object (similar to lfuns, but for the master object
-	only). The name of the master object is hardcoded in the
-	parser (to "secure/master").
+        This directory contains descriptions for the functions that
+        Amylaar's version of the LPC parser, expects to find in the
+        master object (similar to lfuns, but for the master object
+        only). The name of the master object is hardcoded in the
+        parser (to "secure/master").
 
-	The master is the gateway between the interpreter and the
-	mudlib to perform actions with mudlib specific effects. Calls
-	to the master by the interpreter have an automatic catch() in
-	effect.
+        The master is the gateway between the interpreter and the
+        mudlib to perform actions with mudlib specific effects. Calls
+        to the master by the interpreter have an automatic catch() in
+        effect. Functions to be called by the driver can be public
+        or static, but not private.
 
-	Note that the master is loaded first of all objects. Thus you
-	shouldn't inherit an other object, nor is the compiler able to
-	search include files (read: they must be specified with full
-	path).
+        Note that the master is loaded first of all objects. Thus you
+        shouldn't inherit an other object, nor is the compiler able to
+        search include files (read: they must be specified with full
+        path).
 
-	Amylaar says: actually, you can inherit, but the file will be
-	loaded then before the master, which isn't good for most
-	files.
+        Amylaar says: actually, you can inherit, but the file will be
+        loaded then before the master, which isn't good for most
+        files.
 
-	Refer to 'master-3.2' and 'master-3.2.1' for the surveys of
-	the masters internals. 
+        Refer to 'master-all' for the survey of the masters internals.
 
 SEE ALSO
-	master-3.2(M), master-3.2.1(M)
-	efun(E), applied(A), concepts(C), driver(D), lpc(LPC)
+        master-all(M)
+        efun(E), applied(A), concepts(C), driver(D), lpc(LPC)
diff --git a/doc/master/master-all b/doc/master/master-all
new file mode 100644
index 0000000..0a325bc
--- /dev/null
+++ b/doc/master/master-all
@@ -0,0 +1,234 @@
+NAME
+        master for LDMud 3.3
+
+DESCRIPTION
+        This directory contains descriptions for the functions that
+        LDMud expects to find in the master object (similar to lfuns,
+        but for the master object only). The name of the master object
+        is hardcoded in the parser, but can also be specified on
+        the commandline (usually to "secure/master").
+
+        The master is the gateway between the interpreter and the
+        mudlib to perform actions with mudlib specific effects. Calls
+        to the master by the interpreter have an automatic catch() in
+        effect. Functions to be called by the driver can be public
+        or static, but not private.
+
+        Note that the master is loaded first of all objects. Thus you
+        shouldn't inherit an other object, nor is the compiler able to
+        search include files (read: they must be specified with full
+        path).
+
+        Amylaar says: actually, you can inherit, but the file will be
+        loaded then before the master, which isn't good for most
+        files.
+
+        A short survey of the things that happen at system startup
+        time:
+
+        The Initialisation functions are called after (re)loading the
+        master to establish the most basic operation parameters.
+
+        The initialisation of the mud on startup follows this schedule:
+          - The interpreter evaluates the commandline options and
+            initializes itself.
+          - The master is loaded, but since the driverhooks are not set yet,
+            no standard initialisation lfun is called.
+          - get_master_uid() is called. If the result is valid, it becomes the
+            masters uid.
+          - inaugurate_master() is called.
+          - flag() is called for each given '-f' commandline option.
+          - get_simul_efun() is called.
+          - the WIZLIST is read in.
+          - epilog() is called. If it returns an array of strings,
+            they are given one at a time as argument to preload().
+            Traditionally, these strings are the filenames of the objects to
+            pre-load, which preload() then does.
+          - The interpreter sets up the IP communication and enters
+            the backend loop.
+
+        If the master is reloaded during system operation, these
+        actions are taken:
+          - The master is loaded, and its initialisation lfun is
+            called according to the settings of the driverhooks (if set).
+          - Any auto-include string and all driverhooks are cleared.
+          - get_master_uid() is called. If the result is valid, it becomes the
+            masters uid and euid.
+          - inaugurate_master() is called.
+
+        If the master was destructed, but couldn't be reloaded, the old
+        master object could be reactivated. In that case:
+          - reactivate_destructed_master() is called.
+          - inaugurate_master() is called.
+
+
+        Security hint: most of these functions are not useful to be
+        called directly from other objects and can be made private or
+        static. Unlike create(), these functions that are applied to
+        the master object are found by the interpreter even if not
+        publicly accessible.
+
+
+
+        A short reference to all expected master functions...
+        ----------------------------------------------------------------
+            Initialisation
+
+        void inaugurate_master ()
+          Perform mudlib specific setup of the master.
+
+        string get_master_uid ()
+          Return the string to be used as uid (and -euid) of a
+          (re)loaded master.
+
+        void flag (string arg)
+          Evaluate an argument given as option '-f' to the driver.
+
+        string *epilog (int eflag)
+          Perform final actions before opening the system to users.
+
+        void preload (string file)
+          Preload a given object.
+
+        void external_master_reload ()
+          Called after a reload of the master on external request.
+
+        void reactivate_destructed_master (int removed)
+          Reactivate a formerly destructed master.
+
+        string|string * get_simul_efun ()
+          Load the simul_efun object and return one or more paths of it.
+
+        ----------------------------------------------------------------
+            Handling of user connections
+
+        object connect ()
+          Handle the request for a new connection.
+
+        void disconnect (object obj)
+          Handle the loss of an IP connection.
+
+        void remove_player (object user)
+          Remove a user object from the system.
+
+        void stale_erq (closure callback)
+          Notify the loss of the erq demon.
+
+        -----------------------------------------------------------------
+            Runtime Support
+
+        object compile_object (string filename)
+          Compile a virtual object.
+
+        mixed include_file (string file, string compiled_file, int sys_include)
+          Return the full pathname for an included file. // 3.2.8 and later
+
+        mixed inherit_file (string file, string compiled_file)
+          Return the full pathname for an inherited object. // 3.2.8 and later
+
+        string get_wiz_name (string file)
+          Return the author of a file.
+
+        string printf_obj_name (object obj)  // 3.2.6 and later
+        string object_name (object obj)      // 3.2.1 .. 3.2.5
+          Return a printable name for an object.
+
+        mixed prepare_destruct (object obj)
+          Prepare the destruction of the given object.
+
+        void quota_demon (void)
+          Handle quotas in times of memory shortage.
+
+        void receive_imp (string host, string msg, int port)
+          Handle a received IMP message.
+
+        void slow_shut_down (int minutes)
+          Schedule a shutdown for the near future.
+
+        void notify_shutdown ()
+          Notify the master about an immediate shutdown.
+
+        -----------------------------------------------------------------
+            Error Handling
+
+        void dangling_lfun_closure ()
+          Handle a dangling lfun-closure.
+
+        void log_error (string file, string err, int warn)
+          Announce a compiler-time error or warning.
+
+        mixed heart_beat_error (object culprit, string err,
+                                string prg, string curobj, int line)
+          Announce an error in the heart_beat() function.
+
+        void runtime_error (string err, string prg, string curobj, int line)
+          Announce a runtime error.
+
+        void runtime_warning (string msg, string curobj, string prg, int line)
+          Announce a runtime warning.
+
+        -----------------------------------------------------------------
+            Security and Permissions
+
+        int privilege_violation (string op, mixed who, mixed arg3, mixed arg4)
+          Validate the execution of a privileged operation.
+
+        int query_allow_shadow (object victim)
+          Validate a shadowing.
+
+        int valid_exec (string name)
+          Validate the rebinding of an IP connection by usage of efun
+          exec().
+
+        int valid_query_snoop (object obj)
+          Validate if the snoopers of an object may be revealed by
+          usage of the efun query_snoop().
+
+        int valid_snoop (object snoopee, object snooper)
+          Validate the start/stop of a snoop.
+
+        ------------------------------------------------------------------
+            Userids and depending Security
+
+        string get_bb_uid()
+          Return the string to be used as root-uid.
+
+        int|string valid_read (string path, string euid, string fun, object caller)
+        int|string valid_write (string path, string euid, string fun, object caller)
+          Validate a reading/writing file operation.
+
+        -----------------------------------------------------------------
+            ed() Support
+
+        string make_path_absolute (string str)
+          Absolutize a relative filename given to the editor.
+
+        int save_ed_setup (object who, int code)
+          Save individual settings of ed for a wizard.
+
+        int retrieve_ed_setup (object who)
+          Retrieve individual settings of ed for a wizard.
+
+        string get_ed_buffer_save_file_name (string file)
+          Return a filename for the ed buffer to be saved into.
+
+        ----------------------------------------------------------------
+            parse_command() Support  (!compat, SUPPLY_PARSE_COMMAND defined)
+
+        string *parse_command_id_list ()
+          Return generic singular ids.
+
+        string *parse_command_plural_id_list ()
+          Return generic plural ids.
+
+        string *parse_command_adjectiv_id_list ()
+          Return generic adjective ids.
+
+        string *parse_command_prepos_list ()
+          Return common prepositions.
+
+        string parse_command_all_word()
+          Return the one(!) 'all' word.
+
+SEE ALSO
+        master(M), efun(E), applied(A), concepts(C), driver(D), lpc(LPC)
diff --git a/doc/master/notify_shutdown b/doc/master/notify_shutdown
index d23cd98..7fd24cc 100644
--- a/doc/master/notify_shutdown
+++ b/doc/master/notify_shutdown
@@ -11,7 +11,7 @@
         done when remove_player() is called because the udp connectivity is
         already gone then.
 
-        If the gamedriver shuts down normally , this is the last function
+        If the gamedriver shuts down normally, this is the last function
         called before the mud shuts down the udp connections and the accepting
         socket for new players.
 
diff --git a/doc/master/parse_command_adjectiv_id_list b/doc/master/parse_command_adjectiv_id_list
new file mode 100644
index 0000000..a27d475
--- /dev/null
+++ b/doc/master/parse_command_adjectiv_id_list
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string *parse_command_adjectiv_id_list(void)
+
+DESCRIPTION
+        Used by parse_command(). Return an array of common
+        adjectives in the installation's native language.
+
+EXAMPLE
+        string * parse_command_adjectiv_id_list() {
+            return ({ "iffish" });
+        }
+
+SEE ALSO
+        parse_command(E)
diff --git a/doc/master/parse_command_all_word b/doc/master/parse_command_all_word
index b57ab05..bf182f0 100644
--- a/doc/master/parse_command_all_word
+++ b/doc/master/parse_command_all_word
@@ -1,9 +1,14 @@
 SYNOPSIS
-	string *parse_command_all_word(void)
+        string parse_command_all_word(void)
 
 DESCRIPTION
-	Used by parse_command(). Return the word for ``all'' in the
-	installations native language.
+        Used by parse_command(). Return the word for "all" in the
+        installation's native language.
+
+EXAMPLE
+        string parse_command_all_word() {
+            return "all";
+        }
 
 SEE ALSO
-	parse_command(E)
+        parse_command(E)
diff --git a/doc/master/parse_command_id_list b/doc/master/parse_command_id_list
new file mode 100644
index 0000000..a7b1a33
--- /dev/null
+++ b/doc/master/parse_command_id_list
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string *parse_command_id_list(void)
+
+DESCRIPTION
+        Used by parse_command(). Return an array of common
+        singular 'thing' ids in the installation's native language.
+
+EXAMPLE
+        string *parse_command_id_list() {
+            return ({ "one", "thing" });
+        }
+
+SEE ALSO
+        parse_command(E)
diff --git a/doc/master/parse_command_plural_id_list b/doc/master/parse_command_plural_id_list
new file mode 100644
index 0000000..5beab22
--- /dev/null
+++ b/doc/master/parse_command_plural_id_list
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string *parse_command_plural_id_list(void)
+
+DESCRIPTION
+        Used by parse_command(). Return an array of common
+        plural 'thing' ids in the installation's native language.
+
+EXAMPLE
+        string *parse_command_pural_id_list() {
+            return: ({ "ones", "things", "them" });
+        }
+
+SEE ALSO
+        parse_command(E)
diff --git a/doc/master/parse_command_prepos_list b/doc/master/parse_command_prepos_list
index 24706ce..0f71a61 100644
--- a/doc/master/parse_command_prepos_list
+++ b/doc/master/parse_command_prepos_list
@@ -1,9 +1,14 @@
 SYNOPSIS
-	string *parse_command_prepos_list(void)
+        string *parse_command_prepos_list(void)
 
 DESCRIPTION
-	Used by parse_command(). Return an array of common
-	prepositions in the installations native language.
+        Used by parse_command(). Return an array of common
+        prepositions in the installation's native language.
+
+EXAMPLE
+        string *parse_command_prepos_list() {
+            return ({ "in", "on", "under", "behind", "beside" });
+        }
 
 SEE ALSO
-	parse_command(E)
+        parse_command(E)
diff --git a/doc/master/preload b/doc/master/preload
index 95f27d7..1eea4a4 100644
--- a/doc/master/preload
+++ b/doc/master/preload
@@ -1,18 +1,18 @@
 SYNOPSIS
-	void preload(string file)
+        void preload(string file)
 
 DESCRIPTION
-	Load the object with the given file name, that was returned by
-	epilog(). It is task of the epilog()/preload() pair to ensure
-	the validity of the given strings (e.g. filtering out comments
-	and blank lines). For preload itself a call_other(file, "???")
-	s sufficient, but it should be guarded by a catch() to avoid
-	premature blockings. Also it is wise to change the master's
-	euid from root_uid to something less privileged for the time
-	of the preload.
+        Load the object with the given file name (which was returned by
+        epilog()). It is the task of the epilog()/preload() pair to ensure
+        the validity of the given strings (e.g. filtering out comments
+        and blank lines). For preload itself a call_other(file, "???")
+        is sufficient, but it should be guarded by a catch() to avoid
+        premature blockings. Also it is wise to change the master's
+        euid from root_uid to something less privileged for the time
+        of the preload.
 
-	You can of course do anything else with the passed strings -
-	preloading is just the traditional task.
+        You can of course do anything else with the passed strings -
+        preloading is just the traditional task.
 
 SEE ALSO
-	epilog(M), master(M)
+        epilog(M), master(M)
diff --git a/doc/master/prepare_destruct b/doc/master/prepare_destruct
index 3121b88..f24391f 100644
--- a/doc/master/prepare_destruct
+++ b/doc/master/prepare_destruct
@@ -1,22 +1,31 @@
 SYNOPSIS
-	mixed prepare_destruct(object obj)
+        mixed prepare_destruct(object obj)
 
 DESCRIPTION
-	Prepare the destruction of the object obj. Return 0 if the
-	object is ready for destruction, any other value will abort
-	the attempt. If a string is returned, an error with the string
-	as message will be issued.
+        Prepare the destruction of the object obj. Return 0 if the
+        object is ready for destruction; any other value will abort
+        the attempt. If a string is returned, an error with the string
+        as message will be issued.
 
-	The interpreter calls this function whenever an object shall
-	be destructed. It expects, that this function cleans the
-	inventory of the object, or the destruct will fail.
-	Furthermore, the function could notify the former inventory
-	objects that their holder is under destruction (useful to move
-	users out of rooms which re updated); and it could announce
-	systemwide the destruction(quitting) of users.
+        The interpreter calls this function whenever an object shall
+        be destructed. It expects that this function cleans the
+        inventory of the object, or the destruct will fail. It is also
+        recommended to clean up all shadows on obj at this point.
 
-	Strange things will happen if the mastor object does not
-	provide this function.
+        Furthermore, the function could notify the former inventory
+        objects that their holder is under destruction (useful to move
+        users out of rooms which are updated); and it could announce
+        systemwide the destruction(quitting) of users.
+
+        Another use for this apply is to take care of any other
+        'cleanup' work needed to be done, like adjusting weights,
+        light levels, and such. Alternatively and traditionally this
+        is done by calling an lfun 'remove()' in the object, which
+        then calls the efun destruct() after performing all the
+        adjustments.
+
+        Strange things will happen if the master object does not
+        provide this function.
 
 SEE ALSO
-	remove_player(M), destruct(E)
+        remove_player(M), destruct(E)
diff --git a/doc/master/printf_obj_name b/doc/master/printf_obj_name
new file mode 100644
index 0000000..401e446
--- /dev/null
+++ b/doc/master/printf_obj_name
@@ -0,0 +1,14 @@
+SYNOPSIS
+        string printf_obj_name(object ob)
+
+DESCRIPTION
+        Return a printable name for an object. This function is called
+        by sprintf() to print a meaningful name in addition to the
+        normal object_name().
+
+HISTORY
+        Renamed in LDMud 3.2.6 from object_name() due to the introduction
+        of an efun with this name.
+
+SEE ALSO
+        sprintf(E), object_name(E)
diff --git a/doc/master/privilege_violation b/doc/master/privilege_violation
index 957a4b9..2918663 100644
--- a/doc/master/privilege_violation
+++ b/doc/master/privilege_violation
@@ -1,63 +1,106 @@
 SYNOPSIS
-	int privilege_violation(string op, mixed who, mixed arg3, mixed arg4)
+        int privilege_violation(string op, mixed who, mixed arg, mixed arg2, mixed arg3)
 
 DESCRIPTION
-	Validate the execution of a privileged operation.
-	op denotes the requested operation, who is the object
-	requesting the operation (object_name or object pointer), arg3
-	and arg4 are additional arguments, depending on the operation.
+        Validate the execution of a privileged operation.
+        op denotes the requested operation, who is the object
+        requesting the operation (file_name or object pointer), <arg>
+        and <arg2> are additional arguments, depending on the operation.
 
-	The function should return >0 to grant the privilege, 0 to
-	indicate that the caller was probably misleaded and the error
-	might be fixed, and anything else to indicate a real
-	violation, that will be handled as run time error.
+        The function should return >0 to grant the privilege, 0 to
+        indicate that the caller was probably misled and the error
+        might be fixed, and anything else to indicate a real
+        violation that will be handled as run time error.
 
-	The privileged operations are:
-	attach_erq_demon  Attach the erq demon to object <arg> with
-	                  flag <args>. 
-	bind_lambda	  Bind a lambda-closure to object arg3.
-	call_out_info	  Return an array with all call_out
-			  informations.
-	nomask simul_efun Attempt to get an efun <arg> via efun:: when
-	                  it is shadowed by a nomask type simul_efun.
-	rename_object	  The object who tries to rename the object
-			  arg3 to the name arg4.
-	send_udp	  Send UDP-data to host arg3.
-	set_auto_include_string Set the string automatically included
-			  by the compiler into every object.
-	get_extra_wizinfo Get the additional wiz-list info for user
-			  arg3.
-	set_extra_wizinfo Set the additional wiz-list info for user
-			  arg3.
-	set_extra_wizinfo_size Set the size of the additional user
-			  info in the wiz-list to arg3.
-	set_driver_hook   : Set hook <arg> to <arg2>.
-	set_this_object	  Set this_object() to arg3.
-	shadow_add_action Add an action to function arg4 that is
-			  shadowed by the object arg3.
-	symbol_variable	  Attempt to make a symbol from a hidden
-			  inherited variable. arg3 is the object in
-			  question, arg4 the number of the variable in
-			  the variable table.
-	wizlist_info	  Return an array with all wiz-list
-			  information.
+        The privileged operations are:
+        attach_erq_demon       : Attach the erq demon to object <arg> with
+                                 flag <arg2>.
+        bind_lambda            : Bind a lambda-closure to object <arg>.
+        call_out_info          : Return an array with all call_out
+                                 informations.
+        configure_interactive  : Set option <arg2> with value <arg3> as
+                                 default (<arg>==0) or for object <arg>.
+        configure_object       : Set option <arg2> with value <arg3> for
+                                 object <arg>.
+        configure_driver       : Set option <arg1> to value(s) <arg2>.
+        enable_telnet          : Enable/disable telnet (<arg2>) for object
+                                 <arg>.
+        execute_command        : Execute command string <arg2> for the object
+                                 <arg>.
+        erq                    : At the request <arg2> is to be sent to the
+                               : erq-demon by the object <who>.
+        garbage_collection     : Object <who> calls the efun
+                                 garbage_collection() with <arg> as filename
+                                 and <arg2> as flag.
+        input_to               : Object <who> redirects the next input from
+                                 commandgiver <arg>, using <arg2> as value
+                                 for the flags. This is used for flag values
+                                 including the 'no bang' option.
+        limited                : Execute <arg> with reduced/changed limits
+                                 1<arg2> (as return by query_limits()).
+        mysql                  : Object <who> attempted to execute mySQL efun
+                                 <arg>.
+        pgsql                  : Object <who> attempted to execute Postgres efun
+                                 <arg>.
+        net_connect            : Attempt to open a connection to host <arg>,
+                                 port <arg2>.
+        nomask simul_efun      : Attempt to get an efun <arg> via efun:: when
+                                 it is shadowed by a nomask type simul_efun.
+        rename_object          : The object <who> tries to rename the object
+                                 <arg> to the name <arg2>.
+        send_udp               : Send UDP-data to host <arg>.
+        get_extra_wizinfo      : Get the additional wiz-list info for user
+                                 <arg>.
+        set_extra_wizinfo      : Set the additional wiz-list info for user
+                                 <arg>.
+        set_extra_wizinfo_size : Set the size of the additional user
+                                 info in the wiz-list to <arg>.
+        set_driver_hook        : Set hook <arg> to <arg2>.
+        set_limits             : Set limits to <arg> (as returned by
+                                 query_limits()).
+        set_max_commands       : Set the max. number of commands interactive
+                                 object <arg> can issue per second to <arg2>.
+        set_this_object        : Set this_object() to <arg>.
+        shadow_add_action      : Add an action to function <arg2> of object
+                                 <arg> from the shadow <who> which is shadowing
+                                 <arg>.
+        shutdown               : Object <who> calls the efun shutdown with <arg>
+                                 as argument.
+        sqlite_pragma          : Execute pragma statement in SQLite.
+        symbol_variable        : Attempt to make a symbol from a hidden
+                                 inherited variable. <arg> is the object in
+                                 question, <arg2> the number of the variable in
+                                 the variable table.
+        variable_list          : An attempt to return the variable values of
+                                 object <arg> is made from a different object
+                                 <who>.
+        wizlist_info           : Return an array with all wiz-list
+                                 information.
 
-	call_out_info() can return the arguments to functions and
-	lambda closures to be called by call_out(); you should
-	consider that read access to closures, mappings and arrays
-	means write access and/or other privileges. 
-	wizlist_info() will return an array which holds, among others,
-	the extra wizlist field. While a toplevel array, if found,
-	will be copied, this does not apply to nested arrays or to any
-	mappings. You might also have some sensitive closures there.
-	send_udp() should be watched as it could be abused to mess up
-	the IMP.
-	The xxx_extra_wizinfo operations are necessary for a proper
-	wizlist and should therefore be restricted to admins.
-	All other operations are potential sources for direct security
-	breaches - any use of them should be scrutinized closely.
+        call_out_info() can return the arguments to functions and
+        lambda closures to be called by call_out(); you should
+        consider that read access to closures, mappings and arrays
+        means write access and/or other privileges.
+        wizlist_info() will return an array which holds, among others,
+        the extra wizlist field. While a toplevel array, if found,
+        will be copied, this does not apply to nested arrays or to any
+        mappings. You might also have some sensitive closures there.
+        send_udp() should be watched as it could be abused.
+        The xxx_extra_wizinfo operations are necessary for a proper
+        wizlist and should therefore be restricted to admins.
+        All other operations are potential sources for direct security
+        breaches - any use of them should be scrutinized closely.
 
-SEE ALSO	
-	simul_efun(C), call_out_info(E), shadow(E), add_action(E),
-	wizlist(E), set_this_object(E), rename_object(E),
-	bind_lambda(E), send_udp(E), set_auto_include_string(E)
+HISTORY
+        LDMud 3.2.10 added the "enable_telnet", "net_connect",
+           "set_max_commands" and "variable_list" violations.
+        LDMud 3.3.563 added the passing of the limits to the "limited"
+           and "set_limits".
+        LDMud 3.2.11/3.3.640 added the "mysql" violation.
+        LDMud 3.3.717 added the "sqlite_pragma" violation.
+
+SEE ALSO
+        net_connect(E), send_erq(E), set_this_object(E), rename_object(E),
+        simul_efun(C), call_out_info(E), shadow(E), add_action(E),
+        bind_lambda(E), send_udp(E), input_to(E), execute_command(E),
+        variable_list(E), enable_telnet(E), mysql(C)
diff --git a/doc/master/query_allow_shadow b/doc/master/query_allow_shadow
index 47d2e95..a331a47 100644
--- a/doc/master/query_allow_shadow
+++ b/doc/master/query_allow_shadow
@@ -1,23 +1,14 @@
-query_allow_shadow(M)
-FUNKTION:
-     int query_allow_shadow(object victim)
+SYNOPSIS
+        int query_allow_shadow(object victim)
 
-DEFINITION:
-     /secure/master.c
+DESCRIPTION
+        Return 1 if previous_object() is allowed to use efun shadow()
+        on object victim, 0 if it is not.
 
-BESCHREIBUNG:
-     Gibt 1 zurueck, wenn das Objekt victim von previous_object() beschattet 
-     werden darf, 0 sonst.
+        The function should deny shadowing on all root objects, else
+        it might query the victim for clearance. Most installations
+        seem to use victim->prevent_shadow(previous_object()) to
+        check if the victim denies being shadowed.
 
-     Die Funktion prueft, ob das Objekt victim ein Root-Objekt ist, oder
-     ob es beim Aufruf von query_prevent_shadow() 1 zurueckgibt.
-
-BEMERKUNGEN:
-     Wird automatisch bei shadow() ausgefuehrt.
-
-SIEHE AUCH:
-     Rechte:	     query_prevent_shadow(L)
-     Generell:	     shadow(E), unshadow(E)
-     Informationen:  query_shadowing(E)
-
-20. Mai 2004 Gloinson
\ No newline at end of file
+SEE ALSO
+        shadow(E)
diff --git a/doc/master/quota_demon b/doc/master/quota_demon
index f7f8d95..08f76fd 100644
--- a/doc/master/quota_demon
+++ b/doc/master/quota_demon
@@ -1,18 +1,18 @@
 SYNOPSIS
-	void quota_demon(void)
+        void quota_demon(void)
 
 DESCRIPTION
-	Handle quotas in times of memory shortage.
+        Handle quotas in times of memory shortage.
 
-	This function is called during the final phase of a garbage
-	collection if the reserved user area couldn't be reallocated.
-	This function (or a called demon) has now the opportunity to
-	remove some (still active) objects from the system. If this does
-	not free enough memory to reallocate the user reserve,
-	slow_shut_down() will be called to start Armageddon.
+        This function is called during the final phase of a garbage
+        collection if the reserved user area couldn't be reallocated.
+        This function (or a called demon) has now the opportunity to
+        remove some (still active) objects from the system. If this does
+        not free enough memory to reallocate the user reserve,
+        slow_shut_down() will be called to start Armageddon.
 
-	Up to now, the wizlist lacks various informations needed to
-	detect the memory-hungriest users.
+        Up to now, the wizlist lacks various informations needed to
+        detect the memory-hungriest users.
 
 SEE ALSO
-	slow_shut_down(M), wizlist(E)
+        slow_shut_down(M)
diff --git a/doc/master/reactivate_destructed_master b/doc/master/reactivate_destructed_master
index e90d2a1..64f68b5 100644
--- a/doc/master/reactivate_destructed_master
+++ b/doc/master/reactivate_destructed_master
@@ -1,15 +1,15 @@
 SYNOPSIS
-	void reactivate_destructed_master(int flag)
+        void reactivate_destructed_master(int flag)
 
 DESCRIPTION
-	This function is called in an already destructed master object
-	if no new master object could be loaded. flag will be 1 if the
-	old master object could be reclaimed form the list of objects
-	that were marked for destruction but not yet terminated. If
-	flag is 0, all variables of the object have been set to 0 and
-	must be re-initialized.
+        This function is called in an already destructed master object
+        if no new master object could be loaded. flag will be 1 if the
+        old master object could be reclaimed from the list of objects
+        that were marked for destruction but not yet terminated. If
+        flag is 0, all variables of the object have been set to 0 and
+        must be re-initialized.
 
-	After this function, inaugurate_master() will be applied again.
+        After this function, inaugurate_master() will be applied again.
 
 SEE ALSO
-	destruct(E), inaugurate_master(M), master(M)
+        destruct(E), inaugurate_master(M), master(M)
diff --git a/doc/master/receive_udp b/doc/master/receive_udp
index a1b58c5..60cb80f 100644
--- a/doc/master/receive_udp
+++ b/doc/master/receive_udp
@@ -1,17 +1,16 @@
 SYNOPSIS
-	void receive_udp(string host, string msg, int hostport)
+        void receive_udp(string host, bytes msg, int hostport)
 
 DESCRIPTION
-	Handle a received IMP message.
+        Handle a received UDP message.
 
-	This function is called for every message received on the IMP
-	port. Usually it is passed on to some object that handles
-	inter mud communications.
+        This function is called for every message received on the UDP
+        port. Usually it is passed on to some object that handles
+        inter-mud communications.
 
 HISTORY
-	The 'hostport' argument was added in 3.2.1.
+        The 'hostport' argument was added in 3.2.1.
+        LDMud 3.2.9 renamed this method from receive_imp().
 
 SEE ALSO
-	send_udp(E), query_udp_port(E)
-
-29.10.2006 Zesstra
+        send_udp(E), query_udp_port(E)
diff --git a/doc/master/remove_player b/doc/master/remove_player
index b70a1fb..10ffd22 100644
--- a/doc/master/remove_player
+++ b/doc/master/remove_player
@@ -1,14 +1,14 @@
 SYNOPSIS
-	void remove_player(object ob)
+        void remove_player(object ob)
 
 DESCRIPTION
-	Remove an interactive user object ob from the system. This
-	function is called by the interpreter to expell remaining
-	users from the system on shutdown in a polite way. If this
-	functions fails to quit/destruct the user, he will be
-	destructed the hard way by the interpreter.
+        Remove an interactive user object ob from the system. This
+        function is called by the interpreter to expell remaining
+        users from the system on shutdown in a polite way. If this
+        functions fails to quit/destruct the user, he will be
+        destructed the hard way by the interpreter.
 
-	This function must not cause runtime errors.
+        This function must not cause runtime errors.
 
 SEE ALSO
-	remove_interactive(E), slow_shut_down(M)
+        remove_interactive(E), slow_shut_down(M)
diff --git a/doc/master/retrieve_ed_setup b/doc/master/retrieve_ed_setup
index 4d92ef0..77213d0 100644
--- a/doc/master/retrieve_ed_setup
+++ b/doc/master/retrieve_ed_setup
@@ -1,9 +1,9 @@
 SYNOPSIS
-	int retrieve_ed_setup(object command_giver)
+        int retrieve_ed_setup(object command_giver)
 
 DESCRIPTION
-	Should return an integer that gives the ed setup flags for the
-	user that is denoted by command_giver.
+        Should return an integer that gives the ed setup flags for the
+        user that is denoted by command_giver.
 
 SEE ALSO
-	save_ed_setup(M)
+        save_ed_setup(M)
diff --git a/doc/master/runtime_error b/doc/master/runtime_error
index d109df8..835d6a5 100644
--- a/doc/master/runtime_error
+++ b/doc/master/runtime_error
@@ -1,16 +1,57 @@
 SYNOPSIS
-	void runtime_error(string err, string prg, string curobj, int line)
+        void runtime_error( string err, string prg, string curobj, int line
+                          , mixed culprit, int caught)
 
 DESCRIPTION
-	This function has to announce a runtime error to the active
-	user. If the user has enough privileges, it might give him the
-	full error message together with the source line. Else it
-	should issue a decent message ("Your sensitive mind notices a
-	wrongness in the fabric of space").
+        This function has to announce a runtime error to the active
+        user. If the user has enough privileges, it might give him the
+        full error message together with the source line. Else it
+        should issue a decent message ("Your sensitive mind notices a
+        wrongness in the fabric of space").
 
-	Note that prg denotes the program actually executed (which
-	might be an inherited one) whereas curobj is just the
-	offending object.
+        <err> is the error message, <prg> is the program executed (which
+        might be an inherited program), <curobj> is the current object at
+        the time of the error. <line> is the linenumber within the program.
+
+        If the error is a normal runtime error, <culprit> is -1. Otherwise,
+        the error occurred during a heartbeat and <culprit> is the object which
+        heart_beat() function was executed. Also, in case of a heartbeat error,
+        the heartbeat for the <culprit> has been turned off.
+
+        If the error is caught on a higher level, <caught> is non-zero;
+        otherwise it is 0.
+
+        Note that any of the the objects or programs might be destructed, ie.
+        might be passed as 0.
+
+        One common pitfall in the implementation of runtime_error() is
+        that runtime_error() itself could run out of evaluation ticks,
+        causing a runtime error itself. The workaround is to use
+        limited() like this:
+
+          static void
+          handle_runtime_error ( string err, string prg, string curobj
+                               , int line)
+          { ... the actual error handler ... }
+
+          static void
+          call_runtime_error (string err, string prg, string curobj, int line)
+          {
+              limited(#'handle_runtime_error, ({ 200000 }), err, prg, curobj
+                     , line);
+          }
+
+          void
+          runtime_error (string err, string prg, string curobj, int line)
+          {
+              limited(#'call_runtime_error, ({ LIMIT_UNLIMITED })
+                     , err, prg, curobj, line);
+          }
+
+HISTORY
+        LDMud 3.2.9 added the <culprit> argument.
+        LDMud 3.2.12/3.3.705 added the <caught> argument.
 
 SEE ALSO
-	log_error(M), heart_beat_error(M), raise_error(E)
+        log_error(M), heart_beat_error(M), runtime_warning(M),
+        raise_error(E), expand_define(E)
diff --git a/doc/master/runtime_warning b/doc/master/runtime_warning
index 80864ab..82e6226 100644
--- a/doc/master/runtime_warning
+++ b/doc/master/runtime_warning
@@ -11,7 +11,7 @@
               (the object itself might already be destructed), or 0 if there
               is none.
         <prog>, <line> determine the name of the program and the line where
-              the error occured if the current object exists, otherwise
+              the error occurred if the current object exists, otherwise
               they are 0.
         <inside_catch> : != 0 if the warning occurs inside a catch().
 
diff --git a/doc/master/save_ed_setup b/doc/master/save_ed_setup
index feaaf71..3e5d0db 100644
--- a/doc/master/save_ed_setup
+++ b/doc/master/save_ed_setup
@@ -1,33 +1,33 @@
 SYNOPSIS
-	int save_ed_setup(object who, int code)
+        int save_ed_setup(object who, int code)
 
 DESCRIPTION
-	Save individual option settings of the builtin ed, encoded
-	into code, for the user denoted by who. These functions are
-	located in the master object so that the local gods can decide
-	what strategy they want to use. suggestions:
-	A setup file for every user.
-		advantages:	transparent to the user
-				independent of user count
-		disadvantage:	extra file access at ed invocation
-	An array in the master object, users are searched by member_array
-		advantage:	easy to implement
-		disadvantage:	performance degradation with high user counts
-	An AVL-tree to access users by name
-		advantage:	can fit any need
-		disadvantage:	hard to implement, will need more
-				overhead on small and medium
-				installations than it can ever make
-				good by lg(usercount) complexity
-	Dedicated flags in every user object.
-		advantages:	easy to implement
-				independent of user count
-				Will also work for nusers w/o file
-				access privileges.
-		disadvantage:	care has to be taken to avoid
-				collision with other uses of the flags
-				in the user object
+        Save individual option settings of the builtin ed, encoded
+        into code, for the user denoted by who. These functions are
+        located in the master object so that the local gods can decide
+        what strategy they want to use. suggestions:
+        A setup file for every user.
+                advantages:        transparent to the user
+                                   independent of user count
+                disadvantage:      extra file access at ed invocation
+        An array in the master object, users are searched by member_array
+                advantage:         easy to implement
+                disadvantage:      performance degradation with high user counts
+        An AVL-tree to access users by name
+                advantage:         can fit any need
+                disadvantage:      hard to implement, will need more
+                                     overhead on small and medium
+                                     installations than it can ever make
+                                     good by lg(usercount) complexity
+        Dedicated flags in every user object.
+                advantages:        easy to implement
+                                   independent of user count
+                                   Will also work for nusers w/o file
+                                     access privileges.
+                disadvantage:      care has to be taken to avoid
+                                     collision with other uses of the flags
+                                     in the user object
 
 SEE ALSO
-	ed(E), retrieve_ed_setup(M), valid_write(M),
-	get_ed_buffer_save_object_name(M)
+        ed(E), retrieve_ed_setup(M), valid_write(M),
+        get_ed_buffer_save_file_name(M)
diff --git a/doc/master/slow_shut_down b/doc/master/slow_shut_down
index 9a7fe8d..3c72869 100644
--- a/doc/master/slow_shut_down
+++ b/doc/master/slow_shut_down
@@ -1,40 +1,44 @@
 SYNOPSIS
-	void slow_shut_down(int minutes)
+        void slow_shut_down(int minutes)
 
 DESCRIPTION
-	Schedule a shutdown for the near future. minutes is the
-	desired time in minutes till the shutdown:
-	 six, if just the user reserve has been put into use.
-	 one, if the (smaller) master reserve has been put into use as
-	      well.
+        Schedule a shutdown for the near future. minutes is the
+        desired time in minutes till the shutdown:
+         six, if just the user reserve has been put into use.
+         one, if the (smaller) master reserve has been put into use as
+              well.
 
-	The interpreter calls this function when it runs low on
-	memory. At this time, it has freed its reserve, but since it
-	won't last long, the interpreter needs to be shut down. The
-	delay is to give the users the opportunity to finish their
-	current tasks, but don't take the 'minutes' for granted, just
-	deduce the urgency from it. 
-	It is possible that the driver may reallocate some memory
-	after the function has been called, and then run again into a
-	low memory situation, calling this function again.
-	This function might load an 'Armageddon' object and tell it
-	what to do. It is the Armageddon object then which performs
-	the shutdown.
+        The interpreter calls this function when it runs low on
+        memory. At this time, it has freed its reserve, but since it
+        won't last long, the interpreter needs to be shut down. The
+        delay is to give the users the opportunity to finish their
+        current tasks, but don't take the 'minutes' for granted, just
+        deduce the urgency from it.
 
-	Technical: The memory handling of the interpreter includes
-	three reserved areas: user, system and master. All three are
-	there to insure that the system shuts down gracefully when the
-	memory runs out: the user area to give the users time to
-	quit normally, the others to enable emergency-logouts when the
-	user reserve is used up as well.
-	The areas are allocated at start of the interpreter, and
-	released when no more memory could be obtained from the host.
-	In such a case, one of the remaining areas is freed (so the
-	operation can continue a short while) and a garbage collection
-	is initiated. If the garbage collection recycles enough memory
-	(either true garbage or by the aid of the quota_demon) to
-	reallocate the areas, all is fine, else the system shut down
-	is invoked by a call to this function. 
+        It is possible that the driver may reallocate some memory
+        after the function has been called, and then run again into a
+        low memory situation, calling this function again.
+
+        This function might load an 'Armageddon' object and tell it
+        what to do. It is the Armageddon object then which performs
+        the shutdown.
+
+        Technical: The memory handling of the interpreter includes
+        three reserved areas: user, system and master. All three are
+        there to insure that the system shuts down gracefully when the
+        memory runs out: the user area to give the users time to
+        quit normally, the others to enable emergency-logouts when the
+        user reserve is used up as well.
+
+        The areas are allocated at start of the interpreter, and
+        released when no more memory could be obtained from the host.
+        In such a case, one of the remaining areas is freed (so the
+        operation can continue a short while) and a garbage collection
+        is initiated. If the garbage collection recycles enough memory
+        (either true garbage or by the aid of the quota_demon) to
+        reallocate the areas, all is fine, else the system shut down
+        is invoked by a call to this function.
 
 SEE ALSO
-	quota_demon(M), notify_shutdown(M), shutdown(E), malloc(D), memory(C)
+        quota_demon(M), notify_shutdown(M), shutdown(E), malloc(D), memory(C)
+        low_memory(M)
diff --git a/doc/master/stale_erq b/doc/master/stale_erq
index a05ca31..8a5bcff 100644
--- a/doc/master/stale_erq
+++ b/doc/master/stale_erq
@@ -1,17 +1,17 @@
 SYNOPSIS
-	void stale_erq (closure callback)
+        void stale_erq (closure callback)
 
 DESCRIPTION
-	Notify the loss of the erq demon.
-	Argument is the callback closure set for an erq request.
+        Notify the loss of the erq demon.
+        Argument is the callback closure set for an erq request.
 
-	If the erq connection dies prematurely, the driver will call
-	this lfun for every pending request with set callback. This
-	function should notify the originating object that the answer
-	will never arrive. 
+        If the erq connection dies prematurely, the driver will call
+        this lfun for every pending request with set callback. This
+        function should notify the originating object that the answer
+        will never arrive.
 
 HISTORY
-	Introduced in 3.2.1@61.
+        Introduced in 3.2.1@61.
 
 SEE ALSO
-	erq(C)
+        erq(C)
diff --git a/doc/master/valid_exec b/doc/master/valid_exec
index 2c0b67b..04f2c62 100644
--- a/doc/master/valid_exec
+++ b/doc/master/valid_exec
@@ -1,15 +1,15 @@
 SYNOPSIS
-	int valid_exec(string name, object ob, object obfrom)
+        int valid_exec(string name, object ob, object obfrom)
 
 DESCRIPTION
-	Validate the rebinding of an IP connection by usage of efun
-	exec(). Arguments are the <name> of the _program_ attempting
-	to rebind the connection, the object <ob> to receive the
-	connection, and the object <obfrom> giving the connection.
-	Note that the program name is not the object_name() of the
-	object, and has no leading slash.
+        Validate the rebinding of an IP connection by usage of efun
+        exec(). Arguments are the <name> of the _program_ attempting
+        to rebind the connection, the object <ob> to receive the
+        connection, and the object <obfrom> giving the connection.
+        Note that the program name is not the file_name() of the
+        object, and has no leading slash.
 
-	Return 0 to disallow the action, any other value to allow it.
+        Return 0 to disallow the action, any other value to allow it.
 
 SEE ALSO
-	exec(E)
+        exec(E)
diff --git a/doc/master/valid_query_snoop b/doc/master/valid_query_snoop
index e92378a..9be180f 100644
--- a/doc/master/valid_query_snoop
+++ b/doc/master/valid_query_snoop
@@ -1,12 +1,12 @@
 SYNOPSIS
-	valid_query_snoop(object ob)
+        int valid_query_snoop(object ob)
 
 DESCRIPTION
-	Should return 1 if previous_object() (the one that called the
-	efun query_snoop()) is allowed to query wether ob is being
-	snooped, 0 if not.
+        Should return 1 if previous_object() (the one that called the
+        efun query_snoop()) is allowed to query whether ob is being
+        snooped, 0 if not.
 
-	The master object is always allowed to use query_snoop().
+        The master object is always allowed to use query_snoop().
 
 SEE ALSO
-	valid_snoop(M), query_snoop(E), snoop(E)
+        valid_snoop(M), query_snoop(E), snoop(E)
diff --git a/doc/master/valid_read b/doc/master/valid_read
index 2dafbae..45f0bb6 100644
--- a/doc/master/valid_read
+++ b/doc/master/valid_read
@@ -1,32 +1,40 @@
 SYNOPSIS
-	string valid_read(string path, string uid, string func, object ob)
+        string valid_read(string path, string uid, string func, object ob)
 
 DESCRIPTION
-	This function is called to check if the object ob with the
-	user-id uid has read permissions for the file given by path
-	for the operation named by func. It should return 0 if
-	permission is denied, or the normalized path if permission is
-	granted. You can also return 1 to indicate that the path can
-	be used unchanged.
+        This function is called to check if the object ob with the
+        user-id uid has read permissions for the file given by path
+        for the operation named by func. It should return 0 if
+        permission is denied, or the normalized path if permission is
+        granted. You can also return 1 to indicate that the path can
+        be used unchanged.
 
-	The returned pathname must not contain ``..'', a leading /
-	will be stripped by the interpreter.
+        The returned pathname must not contain "..", a leading /
+        will be stripped by the interpreter. By default, the returned
+        path must also not contain space characters; if the driver
+        is instructed to allow them, the preprocessor macro
+        __FILENAME_SPACES__ is defined.
 
-	Func denotes the efun call or other operation that caused
-	valid_read() to be called:
-	ed_start (check if the file to be edited is readable),
-	file_size,
-	get_dir,
-	print_file (efun cat()),
-	read_bytes,
-	read_file,
-	restore_object,
-	tail.
+        Func denotes the efun call or other operation that caused
+        valid_read() to be called:
 
-	Note that this function is called in compat mode as well. If
-	you need to be compatible with the old 2.4.5-mudlib, redirect
-	these calls to the valid_read/valid_write in the user
-	object.
+          copy_file
+          ed_start (check if the file to be edited is readable),
+          file_size,
+          get_dir,
+          print_file (efun cat()),
+          read_bytes,
+          read_file,
+          restore_object,
+          tail.
+
+        For restore_object(), the <path> passed is the filename as given
+        in the efun call.
+
+        This function is called in compat mode as well. If
+        you need to be compatible with the old 2.4.5-mudlib, redirect
+        these calls to the valid_read/valid_write in the user
+        object.
 
 SEE ALSO
-	valid_write(M), make_path_absolute(M)
+        valid_write(M), make_path_absolute(M)
diff --git a/doc/master/valid_snoop b/doc/master/valid_snoop
index 5bff987..0b8d195 100644
--- a/doc/master/valid_snoop
+++ b/doc/master/valid_snoop
@@ -1,8 +1,8 @@
 SYNOPSIS
-	int valid_snoop(object me, object you)
+        int valid_snoop(object me, object you)
 
 DESCRIPTION
-	Should return 1 if me is allowed to snoop you, 0 if not.
+        Should return 1 if me is allowed to snoop you, 0 if not.
 
 SEE ALSO
-	snoop(E), query_snoop(E), valid_query_snoop(M)
+        snoop(E), query_snoop(E), valid_query_snoop(M)
diff --git a/doc/master/valid_trace b/doc/master/valid_trace
new file mode 100644
index 0000000..a3776e8
--- /dev/null
+++ b/doc/master/valid_trace
@@ -0,0 +1,16 @@
+SYNOPSIS
+        int valid_trace(string what, int|string arg)
+
+DESCRIPTION
+        Check if the interactive user is allowed to use tracing.
+
+        The argument <what> denotes the action for which permission is to be
+        checked, <arg> is the argument given to the traceing efun:
+
+        "trace"        Is the user allowed to use tracing?
+                       <arg> is the tracelevel argument given.
+        "traceprefix"  Is the user allowed to set a traceprefix?
+                       <arg> is the prefix given.
+
+SEE ALSO
+        trace(E), showsmallnewmalloced(D), malloc(D), status(D), memory(C)
diff --git a/doc/master/valid_write b/doc/master/valid_write
index 31fe43b..3f73ca3 100644
--- a/doc/master/valid_write
+++ b/doc/master/valid_write
@@ -1,33 +1,52 @@
 SYNOPSIS
-	string valid_write(string path, string uid, string func, object ob)
+        string valid_write(string path, string uid, string func, object ob)
 
 DESCRIPTION
-	This function is called to check if the object ob with the
-	user-id uid has write permissions to the file given by path
-	for the operation named by func. It should return 0 if
-	permission is denied, or the normalized path if permission is
-	granted. You can also return 1 to indicate that the path can
-	be used unchanged.
+        This function is called to check if the object ob with the
+        user-id uid has write permissions to the file given by path
+        for the operation named by func. It should return 0 if
+        permission is denied, or the normalized path if permission is
+        granted. You can also return 1 to indicate that the path can
+        be used unchanged.
 
-	The returned pathname must not contain ``..'', a leading /
-	will be stripped by the interpreter.
+        The returned pathname must not contain "..", a leading /
+        will be stripped by the interpreter. By default, the returned
+        path must also not contain space characters; if the driver
+        is instructed to allow them, the preprocessor macro
+        __FILENAME_SPACES__ is defined.
 
-	Func denotes the efun call or other operation that caused
-	valid_write() to be called:
-	cindent,
-	do_rename (efun rename(), for the old and then for the new name),
-	ed_start (whenever the builtin ed tries to write to a file),
-	mkdir,
-	remove_file (efun rm()),
-	rmdir,
-	save_object,
-	write_bytes,
-	write_file.
+        Func denotes the efun call or other operation that caused
+        valid_write() to be called:
 
-	Note that this function is called in compat mode as well. If
-	you need to be compatible with the old 2.4.5-mudlib, redirect
-	these calls to the valid_read/valid_write in the user
-	object.
+          copy_file          : for the target file or directory name
+          rename_from        : efun rename(), for the original name
+          rename_to          : efun rename(), for the new name
+          ed_start           : whenever the builtin ed tries to write to a file
+          garbage_collection
+          mkdir
+          memdump
+          objdump
+          opcdump
+          remove_file        : efun rm()
+          rmdir
+          save_object
+          write_bytes
+          write_file
+
+        For save_object(), the <path> passed is the filename as given
+        in the efun call. If for this efun a filename ending in ".c" is
+        returned, the ".c" will be stripped from the filename.
+
+        This function is called in compat mode as well. If
+        you need to be compatible with the old 2.4.5-mudlib, redirect
+        these calls to the valid_read/valid_write in the user
+        object.
+
+HISTORY
+        LDMud 3.2.8 adds operation "copy_file", and replaces "do_rename"
+        by "rename_from" and "rename_to".
+        LDMud 3.2.9 adds operation "garbage_collection".
+        LDMud 3.3.526 adds operation "memdump".
 
 SEE ALSO
-	valid_read(M), make_path_absolute(M)
+        valid_read(M), make_path_absolute(M)