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)