Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/obsolete/add_verb b/doc/obsolete/add_verb
new file mode 100644
index 0000000..ca71933
--- /dev/null
+++ b/doc/obsolete/add_verb
@@ -0,0 +1,27 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ void add_verb(string str)
+
+DESCRIPTION:
+ This function is connected to the add_action() function. It
+ will set up the command str to trigger a call to the function
+ set up by the previous call to add_action().
+
+ This function is now obsolete as the verb can be given directly
+ with add_action(). add_verb() remains for compatibility.
+
+ [marion Sun Jan 19 1992 Don't use it. This file is retained
+ because of somewhat nostalgic reasons.]
+
+HISTORY
+ Removed in LDMud 3.3 and LP "03.02.1@150",
+ obsoleted by add_action().
+
+SEE ALSO:
+ add_action(E), query_verb(E), add_xverb(E), remove_action(E)
+
+29.10.2006 Zesstra
\ No newline at end of file
diff --git a/doc/obsolete/add_xverb b/doc/obsolete/add_xverb
new file mode 100644
index 0000000..bc81dbb
--- /dev/null
+++ b/doc/obsolete/add_xverb
@@ -0,0 +1,28 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ void add_xverb(string str)
+
+DESCRIPTION
+ This function is connected to the add_action() function. It
+ will set up the command str to trigger a call to the function
+ set up by the previous call to add_action().
+
+ add_xverb() differs from add_verb() in that only leading
+ characters of the input line must match with str. It basically
+ is the same as setting flag in add_action().
+
+ [marion Sun Jan 19 1992 Don't use it. This file is retained
+ because of somewhat nostalgic reasons.]
+
+HISTORY
+ Removed in LDMud 3.3 and LP "03.02.1@150",
+ obsoleted by add_action().
+
+SEE ALSO
+ add_action(E), query_verb(E), add_verb(E)
+
+29.10.2006 Zesstra
\ No newline at end of file
diff --git a/doc/obsolete/allocate_mapping b/doc/obsolete/allocate_mapping
new file mode 100644
index 0000000..22e1252
--- /dev/null
+++ b/doc/obsolete/allocate_mapping
@@ -0,0 +1,33 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ mapping m_allocate(int size, int width)
+
+DESCRIPTION:
+ Reserve memory for a mapping.
+
+ size is the number of entries (i.e. keys) to reserve, width is
+ the number of data items per entry. If the optional width is
+ omitted, 1 is used as default.
+
+ This is useful only when you are going to construct a mapping
+ whose approximate size you know beforehand, to save on malloc
+ overhead. If you don't fill in data for all the allocated
+ elements, any leftovers will be freed after the current
+ function execution ended. It is also useful if you want the
+ mapping to have a certain width even if you don't provide
+ all the data items for the keys yet.
+
+HISTORY
+ Renamed to 'm_allocate()' in LDMud 3.2.6 and LP "03.02.1@150".
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150"
+
+SEE ALSO:
+ mappings(LPC), walk_mapping(E), get_type_info(E)
+
+29.10.2006 Zesstra
\ No newline at end of file
diff --git a/doc/obsolete/assoc b/doc/obsolete/assoc
new file mode 100644
index 0000000..bd5a945
--- /dev/null
+++ b/doc/obsolete/assoc
@@ -0,0 +1,31 @@
+OPTIONAL, VERALTET
+SYNOPSIS
+ int assoc(mixed key, mixed *keys);
+ mixed assoc(mixed key, mixed *alist [, mixed fail]);
+ mixed assoc(mixed key, mixed *keys, mixed *data [, mixed fail]);
+
+BESCHREIBUNG
+ Alle drei Aufrufe suchen nach einem <key> in einem <alist> (einem
+ Array von zwei Arrays gleicher Groesse) oder in einem geordneten
+ Array <keys>. Der Versuch, in einem anderen Konstrukt zu suchen,
+ fuehrt zu einem unvorhersehbaren Ergebnis.
+
+ Komplexitaet: O( lg(n) ), wobei <n> die Anzahl Keys ist.
+
+ 1. Form: Key-Suche
+ <key> wird im Array <keys> gesucht. Das Resultat ist der Index,
+ in dem <key> gefunden wurde. Wird <key> nicht gefunden, liefert
+ assoc() -1.
+
+ 2. Form: Suche in Alist.
+ <key> wird in der <alist> gesucht, das Resultat sind die Werte,
+ die zu <key> gehoeren, wenn <key> gefunden wird. Wenn <key> nicht
+ gefunden wird, wird 0 zurueck geliefert oder <fail>, falls
+ angegeben.
+
+ Damit das Sinn macht, muss <data> so geordnet sein, dass es zu <key>
+ passt. Diese Form der Suche ist deshalb vorwiegend fuer
+ multidimensionale Alists geeignet.
+
+SIEHE AUCH
+ alists(LPC), insert_alist(E), order_alist(E)
diff --git a/doc/obsolete/copy_mapping b/doc/obsolete/copy_mapping
new file mode 100644
index 0000000..ea25eab
--- /dev/null
+++ b/doc/obsolete/copy_mapping
@@ -0,0 +1,36 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ mapping copy(mapping)
+
+DESCRIPTION:
+ Create a shallow copy of <arg> and return it. For arrays and mappings
+ this means that a new array or mapping is created with copies of the
+ original content. Embedded arrays and mappings are copied by reference!
+
+EXAMPLE
+ mixed *a, *b;
+
+ a = ({ 1, ({ 21, 22 }) });
+ b = copy(a);
+ a[0] = -1; a[1][0] = -21;
+ --> a is now ({ -1, ({ -21, 22 }) })
+ b is now ({ 1, ({ -21, 22 }) })
+
+WARNING
+ Keep in mind, that a copy of a mapping, that contains arrays/mappings,
+ contains references to these Mappings/Arrays, not real copies. If you
+ don't take care, you can a) change the original mappings while working
+ on the copy and b) create recursive mappings, that leak memory.
+
+HISTORY
+ Superseeded by the copy() efun.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO:
+ mappings(LPC)
+
+26. September 2006, Zesstra
\ No newline at end of file
diff --git a/doc/obsolete/creator b/doc/obsolete/creator
new file mode 100644
index 0000000..44c320e
--- /dev/null
+++ b/doc/obsolete/creator
@@ -0,0 +1,22 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ string creator(object ob)
+
+DESCRIPTION
+ This functions is not available in native mode, which uses
+ user-ids instead.
+ Returns the creator (i.e. the name of the wizard or domain) of
+ the object. Default for ob is this_object().
+
+HISTORY
+ Since 3.2.1@47, this efun is an alias for getuid().
+
+SEE ALSO
+ getuid(E), native(C), uids(C)
+
+Zesstra, 04.02.2007
+
diff --git a/doc/obsolete/creator_file b/doc/obsolete/creator_file
new file mode 100644
index 0000000..c4fe6ef
--- /dev/null
+++ b/doc/obsolete/creator_file
@@ -0,0 +1,32 @@
+
+ *****************************************************************
+ * ACHTUNG: WIRD VOM DRIVER NICHT MEHR GERUFEN! NICHT VERWENDEN! *
+ *****************************************************************
+
+SYNOPSIS
+ string creator_file(mixed ob)
+
+DESCRIPTION
+ Return the name of the creator of a newly created object, i.e.
+ the name of the user that is responsible for the LPC source
+ file the object was loaded from. If the function returns 0,
+ the object can't be loaded and is destructed again
+ immediately.
+
+ In !compat mode, the returned string serves as the initial uid
+ (``cuid'') of the object. Objects whose cuid is the
+ backbone-id will then get the uid of the currently active user
+ as their userid instead.
+
+ Under compat mode this function is called as well.
+
+ If this function is not provided by the master object, no
+ other object can be loaded.
+
+HISTORY
+ Dropped in 3.2.1, replaced by the _UID driver hooks.
+
+SEE ALSO
+ uids(C), creator(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/define_include_dirs b/doc/obsolete/define_include_dirs
new file mode 100644
index 0000000..4436308
--- /dev/null
+++ b/doc/obsolete/define_include_dirs
@@ -0,0 +1,24 @@
+
+ *****************************************************************
+ * ACHTUNG: WIRD VOM DRIVER NICHT MEHR GERUFEN! NICHT VERWENDEN! *
+ *****************************************************************
+
+SYNOPSIS
+ string *define_include_dirs(void)
+
+DESCRIPTION
+ Return an array of string patterns giving the absolut paths
+ where to search an include file. The patterns have to have a
+ %s at the place where the name given in the #include statement
+ has to be inserted.
+
+EXAMPLE
+ define_include_dirs() { return ({ "sys/%s", "lib/%s" }); }
+
+HISTORY
+ Dropped in 3.2.1, replaced by H_INCLUDE_DIRS hook.
+
+SEE ALSO
+ master(M)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/efun308 b/doc/obsolete/efun308
new file mode 100644
index 0000000..9ebb42d
--- /dev/null
+++ b/doc/obsolete/efun308
@@ -0,0 +1,27 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ void efun308(object item, object env)
+
+DESCRIPTION
+ The item is moved into its new environment env, which may be 0.
+ This efun is to be used in the move_object() hook, as it does
+ nothing else than moving the item - no calls to init() or such.
+
+ Don't use it in your own objects!
+
+HISTORY
+ Introduced in 3.2.1@1
+ renamed to 'set_environment()' in LDMud 3.2.6 and LP "03.02.1@150".
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO
+ remove(A), init(A), move_object(E), transfer(E), hooks(C),
+ native(C)
+
+29.10.2006 Zesstra
\ No newline at end of file
diff --git a/doc/obsolete/exclude_array b/doc/obsolete/exclude_array
new file mode 100644
index 0000000..9457e03
--- /dev/null
+++ b/doc/obsolete/exclude_array
@@ -0,0 +1,27 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ mixed *exclude_array(mixed *arr, int from, int to)
+
+DESCRIPTION:
+ Deletes an section from an array.
+
+ Please use the slicing operator:
+ arr = arr[0..from-1]+arr[to+1..<1]
+ or even better:
+ arr[from..to] = ({});
+
+ This efun is temporarily a simulated efun until is finally
+ droppped.
+
+HISTORY
+ Removed in LDMud 3.3.
+
+SEE ALSO
+ [](E)
+
+16.12.2008 Zesstra
+
diff --git a/doc/obsolete/extract b/doc/obsolete/extract
new file mode 100644
index 0000000..de40e00
--- /dev/null
+++ b/doc/obsolete/extract
@@ -0,0 +1,26 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ string extract(string str, int from, int to)
+ string extract(string str, int from)
+
+DESCRIPTION
+ DO NOT USE THIS EFUN ANYMORE! IT HAS BEEN REMOVED FROM THE DRIVER.
+
+ Extract a substring from a string.
+ This is the old notation for str[from..to] and supported
+ only for hysterical raisins.
+
+ In LDMud this efun is temporarily a simulated efun until is finally
+ droppped.
+
+HISTORY
+ Removed in LDMud 3.3.
+
+SEE ALSO
+ [](E)
+
+11.11.2006 Zesstra
diff --git a/doc/obsolete/file_name b/doc/obsolete/file_name
new file mode 100644
index 0000000..81f42dc
--- /dev/null
+++ b/doc/obsolete/file_name
@@ -0,0 +1,36 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ string object_name()
+ string object_name(object ob)
+
+DESCRIPTION:
+ Get the file name of an object or if no argument is given of the current
+ object. If the object is a cloned object, then it will not have a
+ corresponding file name, but rather a new name based on the original
+ file name.
+ The returned name always begins with '/' (absolute path),
+ except when the parser runs in COMPAT (-o) mode.
+
+EXAMPLES:
+ find_object(object_name(ob)) == ob
+ This is guaranteed to be true for all objects ob that are not
+ destructed.
+
+ sizeof(explode(object_name(ob), "#")) == 1
+ This is always true if ob is a blue print.
+
+HISTORY
+ In LDMud 3.2.6 renamed to object_name(), this old name is
+ available as alias.
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO:
+ find_object(E)
+
+29.10.2006 Zesstra
\ No newline at end of file
diff --git a/doc/obsolete/filter_array b/doc/obsolete/filter_array
new file mode 100644
index 0000000..772cb03
--- /dev/null
+++ b/doc/obsolete/filter_array
@@ -0,0 +1,151 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+filter_array(E)
+
+FUNKTION:
+ mixed *filter_array(mixed *arr, string fun, string|object ob
+ [, mixed extra, ...])
+ mixed *filter_array(mixed *arr, closure cl [, mixed extra, ...])
+ mixed *filter_array(mixed *arr, mapping map)
+
+PARAMETER:
+ arr - zu filterndes Array
+ fun/cl - zu rufende Methode/Closure
+ map - filterndes Mapping
+ ob - Objekt/Dateiname, an dem Methode gerufen werden soll
+ extra - weitere Parameter fuer Methode/Closure
+
+BESCHREIBUNG:
+ Filtert die Elemente aus 'arr' durch die Methode 'fun', die Closure 'cl'
+ oder das Mapping 'map' in ein neues Array.
+ Fuer jedes Element aus 'arr' wird 'fun' oder 'cl' mit dem Element als
+ erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen
+ bzw. 'map' mit dem Element indiziert.
+
+ Wenn der Aufruf
+ ob->fun(element [, extra1, extra2, ...]) bzw.
+ funcall(cl, element [, extra1, extra2, ...])
+ als Rueckgabewert !=0 zurueckgibt oder das Element als Schluessel im
+ Mapping enthalten ist:
+ member(map, element) == 1
+ dann wird das Element in das neue Array aufgenommen, sonst nicht.
+
+
+ Verwendung von Methoden:
+ Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
+ oder Objekts angegeben wird, wird this_object() angenommen.
+
+ Verwendung von Closures:
+ Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
+ werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
+ 'private' oder/und 'static' deklariert sein, muessen aber zu dem
+ Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
+
+RUeCKGABEWERT:
+ Gefiltertes Array mit Filterbedingung erfuellenden Elementen.
+
+BEMERKUNGEN:
+ (1) Achtung, die Elemente in 'arr' werden nicht tief kopiert, sind sie
+ also selbst Arrays oder Mappings, so fuehrt eine spaetere Aenderung im
+ Rueckgabe-Arrays zur Aenderung im Ursprungsarray:
+
+ int *i, *j;
+ i=({({1,2,3}),({4,5,6})});
+ j=filter_array(i, #'sizeof); // filtert leere Arrays heraus
+ j[0][0]=8;
+
+ fuehrt zu: i==j==({({8,2,3}),({4,5,6})});
+
+ (2) Das Kopieren in das Rueckgabemapping erfolgt fuer jedes Element nach
+ Ausfuehrung der Filtermethode. Aenderungen der Werte im Array in dieser
+ Methode (globale Variable/Uebergabe als Referenz an filter_array)
+ schlagen sich also im Rueckgabearray nieder.
+
+BEISPIEL:
+ ### Filtere alle Lebewesen in einem Raum in ein Array ###
+ filter_array(all_inventory(this_object()),#'living);
+
+
+ ### Filtere alle tauben Spieler im Raum in ein Array ###
+ static int filter_isdeaf(object who) {
+ return(living(who) && who->QueryProp(P_DEAF));
+ }
+ ...
+ filter_array(all_inventory(this_object()), #'filter_isdeaf);
+
+
+ ### Filtern von Idlern (>=1 Sekunde idle) ###
+ // Folgend identische Resultate, aber andere Ansaetze:
+
+ #1: nutzt die Efun query_idle() als Lfun-Closure (ideal hier)
+ idle_usr = filter_array(users(), #'query_idle );
+
+ #2,3: mit Filtermethode
+ int check_if_idle(object user) {
+ return query_idle(user);
+ }
+ #2: filtert mittels der Lfun im selben Objekt die Idler in das
+ Rueckgabearrays
+ idle_usr = filter_array(users(), "check_if_idle");
+ idle_usr = filter_array(users(), "check_if_idle", this_object());
+
+ #3: ruft die Lfun check_if_idle() als Lfun-Closure (Funktionspointer)
+ idle_usr = filter_array(users(), #'check_if_idle );
+
+ #4: nutzt eine Lambda-Closure (langsamer, nicht fuer alle leserlich)
+ idle_usr = filter_array(users(), lambda(({'u}), ({#'query_idle, 'u})));
+
+
+ ### Filtern von Idlern (>=20 Sekunden idle) mit Extraparameter ###
+ // Folgend identische Resultate, aber andere Ansaetze:
+
+ #1: die Efun koennen wir nicht mehr direkt nutzen, weil sie
+ diesen Parameter nicht unterstuetzt
+ // idle_usr = filter_array(users(), #'query_idle );
+
+ #2,3: mit Filtermethode ... mit neuem Parameter
+ int check_if_idle(object user, int length) {
+ return query_idle(user)>length;
+ }
+ #2: filtert mittels der Lfun im selben Objekt die Idler in das
+ Rueckgabearrays ... mit drittem Parameter!
+ idle_usr = filter_array(users(), "check_if_idle", this_object(), 20);
+
+ #3: ruft die Lfun check_if_idle() als Lfun-Closure (Funktionspointer)
+ idle_usr = filter_array(users(), #'check_if_idle, 20);
+
+ #4: nutzt eine Lambda-Closure (langsamer, nicht fuer alle leserlich)
+ idle_usr =
+ filter_array(users(),
+ lambda(({'u, 'l}), ({#'>,({#'query_idle, 'u}),'l})),
+ 20);
+
+AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
+ int i;
+ mixed *ret; mixed *input;
+
+ ret=allocate(0);
+ i=sizeof(input);
+ while(i--)
+ if(ob->fun(input[i] [, extra1, extra2, ...]))
+ // if(funcall(cl, input[i] [, extra1, extra2, ...]))
+ // if(member(map, input[i]))
+ ret+=({input[i]});
+HISTORY
+ Since LDMud 3.2.6 obsoleted by efun filter().
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SIEHE AUCH:
+ Arrays: fmap_array(E)
+ Objektarrays: filter_objects(E), map_objects(E)
+ Mappings: filter(E), map(E)
+
+ Sonstiges: sort_array(E), unique_array()
+ alist, transpose_array(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/filter_array.eng b/doc/obsolete/filter_array.eng
new file mode 100644
index 0000000..6737929
--- /dev/null
+++ b/doc/obsolete/filter_array.eng
@@ -0,0 +1,60 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+filter_array(E)
+SYNOPSIS
+ mixed *filter_array(mixed *arr, string fun, string|object ob
+ [, mixed extra, ...])
+ mixed *filter_array(mixed *arr, closure cl [, mixed extra, ...])
+ mixed *filter_array(mixed *arr, mapping map [, mixed extra, ...])
+
+DESCRIPTION
+ Returns an array holding the items of arr filtered through
+ ob->fun(element, extra, ...), the closure cl, or the mapping map.
+ The function 'fun' in 'ob' resp. the closure 'cl' is called
+ for each element in arr with that element as parameter. The
+ extra and following parameters are in each call if given.
+ The mapping 'map' is likewise indexed by each element.
+ If ob->fun(arr[index], extra) returns != 0 resp.
+ map[arr[index]] exists, the element is included in the
+ returned array.
+
+ If arr is not an array, an error occurs.
+
+ The extra argument(s) are optional and must not be protected
+ references like &(i[0]).
+ If <ob> is omitted, or neither a string nor an object, it
+ defaults to this_object().
+
+ Since 3.2.1@36, the second arg can also be a mapping. Then
+ only the elements of the array which belong to the map (as
+ keys) will be returned (i.e. map[arr[index]] != 0).
+
+EXAMPLE
+ int check_if_idle(object user) { return query_idle(user); }
+
+ ...
+
+ object *idle_users;
+
+ idle_users = filter_array(users(), "check_if_idle");
+ /* equivalent but smaller and faster */
+ idle_users = filter_array(users(), #'query_idle );
+
+ Now idle_users contains all users that have been idle for more
+ than 1 second.
+
+HISTORY
+ Since LDMud 3.2.6 obsoleted by efun filter().
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO:
+ Similar filter: filter_array(E), filter_object(E), filter(E)
+ Mapping: map(E), map_objects(E), map(E)
+ Related: sort_aray(E), unique_array(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/filter_mapping b/doc/obsolete/filter_mapping
new file mode 100644
index 0000000..a70c724
--- /dev/null
+++ b/doc/obsolete/filter_mapping
@@ -0,0 +1,126 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+filter_mapping(E)
+
+FUNKTION:
+ mapping filter(mapping map, string fun, string|object ob
+ [, mixed extra, ...])
+ mapping filter(mapping map, closure cl [, mixed extra, ...])
+
+PARAMETER:
+ map - zu filterndes Mapping
+ fun/cl - zu rufende Methode/Closure
+ ob - Objekt/Dateiname, an dem Methode gerufen werden soll
+ extra - weitere Parameter fuer Methode/Closure
+
+BESCHREIBUNG:
+ Filtert die Elemente (jeweils Schluessel) aus 'map' durch die
+ Methode 'fun' oder die Closure 'cl' in ein neues Mapping.
+ Fuer jedes Element aus 'map' wird 'fun' oder 'cl' mit dem Schluessel als
+ erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen.
+
+ Wenn der Aufruf
+ ob->fun(element [, extra1, extra2, ...]) bzw.
+ funcall(cl, element [, extra1, extra2, ...])
+ als Rueckgabewert !=0 zurueckgibt dann wird der Schluessel+Werte in das
+ neue Array aufgenommen, sonst nicht.
+
+ Wenn auf die Werte zugegriffen werden muss, kann das Mapping 'map'
+ zusaetzlich als 'extra'-Parameter uebergeben werden. Alternativ kann man
+ walk_mapping() benutzen und das Rueckgabemapping selbst erstellen.
+
+
+ Verwendung von Methoden:
+ Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
+ oder Objekts angegeben wird, wird this_object() angenommen.
+
+ Verwendung von Closures:
+ Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
+ werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
+ 'private' oder/und 'static' deklariert sein, muessen aber zu dem
+ Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
+
+RUeCKGABEWERT:
+ Gefiltertes Mapping mit Filterbedingung erfuellenden Elementen.
+
+BEMERKUNGEN:
+ (1) Achtung, die Elemente in 'map' werden nicht tief kopiert, sind sie
+ also selbst Arrays oder Mappings, so fuehrt eine spaetere Aenderung im
+ Rueckgabe-Mapping zur Aenderung im Ursprungsmapping:
+
+ mapping m,n;
+ m=([1:({1,2}),0:({2,3,4})]);
+ n=filter(m, #'!); // filtert alle Keys !=0 heraus
+ n[0][0]=8;
+
+ fuehrt zu: n=([0:({8,3,4})])
+ m=([0:({8,3,4}),1:({1,2})])
+
+ (2) Das Kopieren in das Rueckgabemapping erfolgt fuer jedes Element nach
+ Ausfuehrung der Filtermethode. Aenderungen der Werte im Mapping in dieser
+ Methode (globale Variable/Uebergabe als Referenz an filter)
+ schlagen sich also im Rueckgabemapping nieder.
+
+BEISPIELE:
+ ### erfundene Liste mit Spielern saeubern ... ###
+ mapping x=([ [/human:liafar]: 20,
+ [/dwarf:mesirii]: 50,
+ [/elf:zarniya]: 40,
+ [/feline:turbo]: 30]);
+
+ int is_badguy(object who) {
+ if(who->InFight()) return 1;
+ return 0;
+ }
+
+ mapping result=filter(x, #'is_badguy);
+ // 'result' enthaelt nur noch kaempfende Spieler
+
+ ### erfundene Liste ueber ihre Werte saeubern ###
+ int is_badguy(object who, mapping m) {
+ if(m[x]<30) return 1;
+ return 0;
+ }
+
+ mapping result=filter(x, #'is_badguy, &x); // Referenz
+ // 'result' enthaelt nur Spieler mit Werten >= 30
+
+AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
+ int i, width;
+ mapping ret; mapping input;
+ mixed *index;
+
+ width=get_type_info(input)[1];
+ ret=m_allocate(0, width);
+ index=m_indices(input);
+ i=sizeof(index);
+ while(i--)
+ if(ob->fun(index[i] [, extra1, extra2, ...]))
+ // if(funcall(cl, index[i] [, extra1, extra2, ...]))
+ {
+ int j;
+ j=width;
+
+ while(j--)
+ ret[index[i],j]=input[index[i],j];
+ }
+
+HISTORY
+ Since LDMud 3.2.6 obsoleted by efun filter_indices().
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SIEHE AUCH:
+ Arrays: filter_array(E), map(E)
+ Objektarrays: filter_objects(E), map_objects(E)
+ Mappings: map(E)
+
+ Sonstiges: walk_mapping(E), m_contains(E)
+ member()
+ m_indices(E), m_values(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/get_root_uid b/doc/obsolete/get_root_uid
new file mode 100644
index 0000000..c1de324
--- /dev/null
+++ b/doc/obsolete/get_root_uid
@@ -0,0 +1,20 @@
+
+ **********************************************************
+ * ACHTUNG: WIRD VOM DRIVER NICHT MEHR GERUFEN! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ string get_root_uid(void)
+
+DESCRIPTION
+ Return the string to be used as root-uid.
+ Under !native, the function is expendable.
+
+HISTORY
+ In 3.2.1@40, get_root_uid() was renamed to get_master_uid()
+ and got a new semantic.
+
+SEE ALSO
+ get_bb_uid(M), get_master_uid(M), uids(C), creator_file(M), creator(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/initialisation b/doc/obsolete/initialisation
new file mode 100644
index 0000000..e270376
--- /dev/null
+++ b/doc/obsolete/initialisation
@@ -0,0 +1,48 @@
+OBSOLETE
+CONCEPT
+ initialisation
+
+DESCRIPTION
+ There are two different flavours of initialisations,
+ selectable in config.h at driver compile time:
+
+ i) #undef INITIALIZATION_BY___INIT
+ ------------------------------------
+
+ Initialisation is done at compile time. This is fast and costs
+ no extra code in the program. Allowed expressions currently
+ include integer literals, string literals, integer operators,
+ string addition, bracketing, array constructors, the empty
+ mapping and order_alist() .
+ When an object with initialised variables is cloned or
+ inherited, all initialised variables are copied from the
+ blueprint. A special application of this feature is to have
+ an initialised non-empty array or a mapping; it will be shared
+ by all clones or inheriting objects unless an assignment to
+ the variable - as opposed to an assignment to an element of
+ the array/mapping - is done in all clones etc. To prevent
+ unauthorised chenges in initialised arrays/mappings, you can
+ declare the variables as ``private static'' or use a nomask
+ reset/create that checks for undesired inheritance.
+
+ ii) #define INITIALIZATION_BY___INIT
+ -------------------------------------
+
+ Creates a function named __INIT() for all variable
+ initialisations and for calls to __INIT() in all inherited
+ objects, and runs this function at object creation time.
+ Any efun can be used in the expressions for variable
+ initialisations, even ones with severe side effects, like
+ destruct() or shutdown() . The code created for __INIT() is a
+ little worse than a medium-skilled lpc-programmer would
+ generate, because it is scattered all over the program.
+ It is possible (though discouraged) to overload __INIT() with
+ selfwritten functions.
+
+HISTORY
+ Since LDMud 3.3, order_alist() is no longer accepted without
+ INITIALIZATION_BY___INIT.
+ LDMud 3.3.378 replaced this static choice of initialisation
+ methods by compile-time pragmas.
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/intersect_alist b/doc/obsolete/intersect_alist
new file mode 100644
index 0000000..4bbbccb
--- /dev/null
+++ b/doc/obsolete/intersect_alist
@@ -0,0 +1,14 @@
+OPTIONAL
+SYNOPSIS
+ mixed * intersect_alist (mixed * list1, mixed * list2)
+
+DESCRIPTION
+ Does a fast set intersection on alist key vectors (NOT on full alists!).
+ The operator '&' does set intersection on arrays in general.
+
+EXAMPLE
+ new_list = intersect_alist(list1, list2);
+
+SEE ALSO
+ filter(E), assoc(E), insert_alist(E), map(E),
+ member_array(E), order_alist(E), sort_array(E), unique_array(E)
diff --git a/doc/obsolete/is_clone b/doc/obsolete/is_clone
new file mode 100644
index 0000000..d25b9d4
--- /dev/null
+++ b/doc/obsolete/is_clone
@@ -0,0 +1,41 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+FUNKTION:
+ is_clone(mixed ob)
+
+ARGUMENTE:
+ ob - Das zu pruefende Objekt
+
+BESCHREIBUNG:
+ is_clone stellt fest, ob ob ein geclontes Objekt ist oder nicht.
+
+RUECKGABEWERT:
+ 1, wenn ob ein geclontes Objekt ist, ansonsten 0.
+
+HINWEIS:
+ Dies ist eine Simul Efun, die inzwischen ueberflussig ist und nur aus
+ Kompatibilitaetsgruenden noch existiert. Bitte die Efun 'clonep' verwenden!
+
+BEISPIELE:
+ inherit "std/thing";
+
+ #include <properties.h>
+
+ create()
+ {
+ if (!is_clone(this_object())) {
+ set_next_reset(-1);
+ return;
+ }
+
+ :: create();
+ ...
+ }
+
+siehe auch: clonep
+
+Zesstra, 04.02.2007
+
diff --git a/doc/obsolete/m_sizeof b/doc/obsolete/m_sizeof
new file mode 100644
index 0000000..2326b47
--- /dev/null
+++ b/doc/obsolete/m_sizeof
@@ -0,0 +1,21 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ int sizeof(mapping map)
+
+DESCRIPTION:
+ Return the number of indices in mapping 'map'.
+
+HISTORY
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO:
+ mappingp(E), mkmapping(E), m_indices,(E) m_values(E),
+ m_delete(E), widthof(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/m_width b/doc/obsolete/m_width
new file mode 100644
index 0000000..a6fc7a6
--- /dev/null
+++ b/doc/obsolete/m_width
@@ -0,0 +1,15 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ int widthof(mapping map)
+
+DESCRIPTION:
+ Return the number of values per index in mapping 'map'. It means
+ the width of the mapping 'map'.
+
+SEE ALSO:
+ mappingp(E), mkmapping(E), m_indices,(E) m_values(E),
+ m_delete(E), sizeof(E)
diff --git a/doc/obsolete/map_array b/doc/obsolete/map_array
new file mode 100644
index 0000000..41329db
--- /dev/null
+++ b/doc/obsolete/map_array
@@ -0,0 +1,90 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+map_array(E)
+
+FUNKTION:
+ mixed *map(mixed *arr, string fun, object ob [, mixed extra])
+ mixed *map(mixed *arr, closure cl [, mixed extra])
+
+PARAMETER:
+ arr - zu mappendes Array
+ fun/cl - zu rufende Methode/Closure
+ ob - Objekt/Dateiname, an dem Methode gerufen werden soll
+ extra - weitere Parameter fuer Methode/Closure
+
+BESCHREIBUNG:
+ Mapped die Elemente aus 'arr' durch die Methode 'fun' oder die Closure 'cl'
+ in ein neues Array.
+ Fuer jedes Element aus 'arr' wird 'fun' oder 'cl' mit dem Element als
+ erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen
+ bzw. 'map' mit dem Element indiziert.
+
+ Der Rueckgabewert der Methode/Closure wird in an der Indexposition des
+ Elementes in das neue Array eingetragen.
+
+ Verwendung von Methoden:
+ Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
+ oder Objekts angegeben wird, wird this_object() angenommen.
+
+ Verwendung von Closures:
+ Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
+ werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
+ 'private' oder/und 'static' deklariert sein, muessen aber zu dem
+ Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
+
+RUeCKGABEWERT:
+ Array mit Rueckgabewerten der Methode/Closure.
+
+BEISPIELE:
+ ### ersetze Strings durch ihre Grosschreibung ###
+ map(({"abc","cde"}), #'capitalize); == ({"Abc","Cde"})
+
+
+ ### ersetze in einem Spielerobjektarray die Objekte durch ihre UID ###
+ // Folgend identische Resultate, aber andere Ansaetze:
+
+ #1: mit der Efun etuid direkt (ideal hier)
+ map(users(), #'getuid);
+
+ #2,3: mit Mapmethode
+ string make_uid(object o) {
+ return getuid(o);
+ }
+ #2: als LFun-Aufruf der Mapmethode
+ map(users(), "make_uid");
+ map(users(), "make_uid", this_object());
+
+ #3: als Lfun-Closure-Aufruf der Mapmethode
+ map(users(), #'make_uid);
+
+ #4: mit Lambda-Closure (langsamer, nicht fuer alle leserlich)
+ map(users(), lambda(({'x}), ({#'getuid, 'x})));
+
+AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
+ int i;
+ mixed *ret; mixed *input;
+
+ i=sizeof(input);
+ ret=allocate(i);
+ while(i--)
+ ret[i]=ob->fun(input[i] [, extra1, extra2, ...]));
+ // ret[i]=funcall(cl, input[i] [, extra1, extra2, ...]);
+
+HISTORY
+ Since LDMud 3.2.6 obsoleted by map().
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SIEHE AUCH:
+ Arrays: filter_array(E)
+ Objektarrays: filter_objects(E), map_objects(E)
+ Mappings: filter(E), map(E)
+
+ Sonstiges: sort_array(E), unique_array()
+ alist, transpose_array(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/map_mapping b/doc/obsolete/map_mapping
new file mode 100644
index 0000000..22c84c0
--- /dev/null
+++ b/doc/obsolete/map_mapping
@@ -0,0 +1,86 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+map_mapping(E)
+
+FUNKTION:
+ mapping map(mapping m, string fun, object ob [, mixed extra])
+ mapping map(mapping m, closure cl [, mixed extra])
+
+PARAMETER:
+ arr - zu mappendes Array
+ fun/cl - zu rufende Methode/Closure
+ ob - Objekt/Dateiname, an dem Methode gerufen werden soll
+ extra - weitere Parameter fuer Methode/Closure
+
+BESCHREIBUNG:
+ Mapped die Elemente (jeweils Schluessel) aus 'map' durch die Methode
+ 'fun' oder die Closure 'cl' in ein neues Mapping.
+ Fuer jedes Element aus 'map' wird 'fun' oder 'cl' mit dem Schluessel als
+ erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen.
+
+ Der Rueckgabewert der Methode/Closure wird in fuer den Schluessel als
+ Datenwert in das neue Mapping eingetragen.
+
+ ACHTUNG: Alle anderen Daten bei Mapping mit Breite>1 verfallen!
+
+ Verwendung von Methoden:
+ Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
+ oder Objekts angegeben wird, wird this_object() angenommen.
+
+ Verwendung von Closures:
+ Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
+ werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
+ 'private' oder/und 'static' deklariert sein, muessen aber zu dem
+ Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
+
+RUeCKGABEWERT:
+ Mapping mit Schluessel:Rueckgabewerten der Methode/Closure.
+
+BEISPIELE:
+ // ersetze in einem Mapping die Datenwerte durch das Doppelte,
+ // nutze dabei die Datenwerte des Altmappings durch Uebergabe als
+ // extra-Parameter
+
+ // Anmerkung: Das geht mit walk_mapping() eleganter!
+
+ int do_double(string key, mapping m, int mult) {
+ return m[key]*mult;
+ }
+
+ mapping x, y;
+ x=(["a":2, "b":3]);
+ y=map((["a":2, "b":3]), #'do_double, &x, 3);
+
+ y == (["a":6,"b":9])
+
+AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
+ int i;
+ mapping ret; mapping input;
+ mixed *index;
+
+ ret=m_allocate(0, 1);
+ index=m_indices(input);
+ i=sizeof(index);
+ while(i--)
+ ret[index[i]]=ob->fun(index[i] [, extra1, extra2, ...]))
+ // ret[index[i]]=funcall(cl, index[i] [, extra1, extra2, ...]);
+
+HISTORY
+ Since LDMud 3.2.6 obsoleted by map_indices().
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SIEHE AUCH:
+ Arrays: filter_array(E), map(E)
+ Objektarrays: filter_objects(E), map_objects(E)
+ Mappings: filter(E)
+
+ Sonstiges: walk_mapping(E), m_contains(E)
+ member()
+ m_indices(E), m_values(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/mapping_contains b/doc/obsolete/mapping_contains
new file mode 100644
index 0000000..88df897
--- /dev/null
+++ b/doc/obsolete/mapping_contains
@@ -0,0 +1,24 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ int m_contains(mixed &data1, ..., &dataN, map, key)
+
+DESCRIPTION:
+ If the mapping contains the key map, the corresponding values
+ are assigned to the data arguments, which massed be passed by
+ reference, and 1 is returned. If key is not in map, 0 is
+ returned and the data args are left unchanged.
+
+HISTORY
+ Renamed to 'm_contains()' in LDMud 3.2.6.
+ Since LDMud 3.2.9, not available if driver is compiled without
+ USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO:
+ mappings(LPC), member(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/member_array b/doc/obsolete/member_array
new file mode 100644
index 0000000..1b948e6
--- /dev/null
+++ b/doc/obsolete/member_array
@@ -0,0 +1,30 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ int member_array(mixed item, mixed *arr)
+ int member_array(mixed item, string arr)
+
+DESCRIPTION:
+ DO NOT USE THIS EFUN - IT HAS BEEN REMOVED FROM THE DRIVER!
+ Returns the index of the first occurence of item in array arr,
+ or occurence of a character in a string. If not found, then -1
+ is returned.
+
+ If you want to search through an alist, use assoc() because
+ member_array() is good for unsorted but assoc() is faster for
+ sorted arrays.
+
+ In LDMud this efun is temporarily a simulated efun until is finally
+ droppped.
+
+HISTORY
+ Superseeded by member().
+ Removed in LDMud 3.3.
+
+SEE ALSO:
+ alists(LPC), mappings(LPC), assoc(E), slice_array(E)
+
+11.11.2006 Zesstra
diff --git a/doc/obsolete/obsolete b/doc/obsolete/obsolete
new file mode 100644
index 0000000..f6e805e
--- /dev/null
+++ b/doc/obsolete/obsolete
@@ -0,0 +1,12 @@
+NAME
+ obsolete
+
+DESCRIPTION
+ This directory contains descriptions for features removed from
+ the game driver, since they can come in handy when reworking
+ old LPC code.
+
+SEE ALSO
+ applied(A), efun(E), master(M), concepts(C), lpc(LPC), driver(D)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/order_alist b/doc/obsolete/order_alist
new file mode 100644
index 0000000..32b1c20
--- /dev/null
+++ b/doc/obsolete/order_alist
@@ -0,0 +1,36 @@
+VERALTET
+SYNOPSIS
+ mixed *order_alist(mixed *keys, mixed *data, ...);
+ mixed *order_alist(mixed *list);
+
+BESCHREIBUNG
+ Diese Funktion erzeugt eine Alist.
+
+ Gibt man zwei oder mehr Argumente an, muss das erste Argument
+ ein Array von Keys enthalten, die nachfolgenden Argumente
+ sind Arrays von Datenelementen. Alle <data> Argumente muessen
+ die gleiche Groesse (also die gleiche Anzahl Elemente) wie <keys>
+ haben.
+
+ Gibt man nur ein Argument <list> an, so muss es sich dabei um ein
+ Array handeln, das als erste Element ein Array von Keys und als
+ weitere Elemente Arrays mit Datenelementen enthaelt. Alle Elemente
+ von <list> muessen die gleiche Groesse haben.
+
+ order_alist() liefert ein Array zurueck, das das sortierte <keys>
+ Array und die gleich sortierten <data> Arrays enthaelt. Auf die
+ <data> Arrays wird die gleiche Permutation wie auf das <key> Array
+ angewendet.
+
+ Die Komplexitaet ist O(n*lg(n)+n*m), wobei n die Anzahl Elemente im
+ <keys> Array darstellt, m die Anzahl <data> Arrays + 1.
+
+ Die Dimensionen der Arrays werden gegenueber LISP genau umgekehrt
+ verwendet, um ein schnelleres Suchen zu ermoeglichen.
+
+ Keys muessen vom Typ Integer, String oder Object sein. Die Typen
+ koennen auch gemischt sein.
+
+SIEHE AUCH
+ alists(LPC), mappings(LPC), insert_alist(E), assoc(E),
+ transpose_array(E)
diff --git a/doc/obsolete/parse_command b/doc/obsolete/parse_command
new file mode 100644
index 0000000..2039161
--- /dev/null
+++ b/doc/obsolete/parse_command
@@ -0,0 +1,72 @@
+int parse_command(string str, mixed source, string pattern, var1, var2 ...);
+
+Parses commands given in "str" against the pattern in "pattern" and
+returns 1 if it matches. "source" is either an object or an array of objects.
+This is essentially a 'hotted' sscanf and it has a similar syntax, although
+parse_command works on word basis where sscanf works on character basis.
+
+.ip str
+Given command
+.ip source
+Either an array holding the accessible objects, or
+an object from which to recurse and create
+the list of accessible objects, normally
+ob = environment(this_player()) .
+
+.ip pattern
+Parse pattern as list of words and formats:
+.nf
+ Syntax:
+ 'word' obligatory text (One word)
+ [word] optional text (One word)
+ / Alternative marker
+ %o Single item, object
+ %l Single living object
+ %s Any text (multiple words)
+ %w Any word
+ %p Preposition
+ %i Any items
+ %d Number 0- or tx(0-99)
+.fi
+Example string: " 'get' / 'take' %i " .
+Items as in %o and %i can on many forms, some examples:
+.nf
+ apple, two apples, twentyfirst apple
+ apples, all apples, all green apples, all green ones
+.fi
+
+.ip varN
+This is the list of result variables as in sscanf.
+One variable is needed for each %_.
+The return types of different %_ is:
+.nf
+ %o Returns an object
+ %l Returns an object
+ %s Returns a string of words
+ %w Returns a string of one word
+ %p Can on entry hold a list of word in array
+ or an empty variable
+ Returns:
+ if empty variable: a string
+ if array: array[0]=matched word
+ %i Returns a special array on the form:
+ [0] = (int) given numeric prefix
+ =0: all or a pluralform given
+ >0: numeral given: two, three, four...
+ <0: order given: second, third ...
+ [1..n] (object) Objectpointers
+ A list of the POSSIBLE objects that can match
+ the given %i. No choosing of third or such.
+ %d Returns a number
+.fi
+.lp
+Example:
+
+a=parse_command("take apple",environment(this_player()),
+ " 'get' / 'take' %i ",items);
+
+HISTORY
+ LDMud 3.3.258 and LP "03.02.1@150" removed the compat-mode
+ parse_command().
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/query_imp_port b/doc/obsolete/query_imp_port
new file mode 100644
index 0000000..b6a7c3d
--- /dev/null
+++ b/doc/obsolete/query_imp_port
@@ -0,0 +1,21 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ int query_udp_port(void)
+
+DESCRIPTION:
+ Returns the port number that is used for the inter mud
+ protocol.
+
+HISTORY
+ LDMud 3.2.9 renamed this efun to query_udp_port(). This version
+ is available if the driver is compiled with USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO:
+ send_udp(E), receive_udp(M)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/receive_imp b/doc/obsolete/receive_imp
new file mode 100644
index 0000000..b42e78f
--- /dev/null
+++ b/doc/obsolete/receive_imp
@@ -0,0 +1,25 @@
+
+ **********************************************************
+ * ACHTUNG: WIRD VOM DRIVER NICHT MEHR GERUFEN! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ void receive_udp(string host, string msg, int hostport)
+
+DESCRIPTION
+ Handle a received IMP 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.
+
+HISTORY
+ The 'hostport' argument was added in 3.2.1.
+ LDMud 3.2.9 renamed this method to receive_udp(); this old version
+ is supported if the driver is compiled with USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO
+ send_udp(E), query_udp_port(E)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/send_imp b/doc/obsolete/send_imp
new file mode 100644
index 0000000..c0f8e40
--- /dev/null
+++ b/doc/obsolete/send_imp
@@ -0,0 +1,23 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS:
+ int send_udp(string host, int port, string message)
+
+DESCRIPTION:
+ Sends The message in an UDP packet to the given host and port
+ number. Causes a privilege violation.
+ Returns 1 on success, 0 on failure.
+
+HISTORY
+ LDMud 3.2.9 renamed this efun to send_udp(), and also changed the
+ privilege violation string and the apply names. This old version
+ is available if the driver is compiled with USE_DEPRECATED.
+ Removed in LDMud 3.3 and LP "03.02.1@150".
+
+SEE ALSO:
+ receive_udp(M)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/set_auto_include_string b/doc/obsolete/set_auto_include_string
new file mode 100644
index 0000000..5a3823d
--- /dev/null
+++ b/doc/obsolete/set_auto_include_string
@@ -0,0 +1,28 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ void set_auto_include_string (string arg)
+
+DESCRIPTION
+
+ The arg will be automatically included into every compiled LPC
+ object. This is useful to enforce global definitions, e.g.
+ ``#pragma combine_strings'' or ``#pragma strict_types''. The
+ calling object needs to be privileged by the master object.
+
+ Note that the auto-include-string is cleared when the master
+ object is reloaded.
+
+HISTORY
+ LDMud 3.2.9 replaced this efun with driver hook H_AUTO_INCLUDE.
+ This old version is available if the driver is compiled
+ with USE_DEPRECATED.
+ Removed in LDMud 3.3.
+
+SEE ALSO
+ set_driver_hook(E), privilege_violation(M), pragma(LPC), master(M)
+
+29.10.2006 Zesstra
diff --git a/doc/obsolete/slice_array b/doc/obsolete/slice_array
new file mode 100644
index 0000000..620bdc9
--- /dev/null
+++ b/doc/obsolete/slice_array
@@ -0,0 +1,27 @@
+
+ **********************************************************
+ * ACHTUNG: EFUN EXISTIERT NICHT MEHR! NICHT VERWENDEN! *
+ **********************************************************
+
+SYNOPSIS
+ mixed *slice_array(mixed *array, int from, int to)
+
+DESCRIPTION
+ DO NOT USE THIS EFUN ANYMORE. IT HAS BEEN REMOVED FROM THE DRIVER.
+
+ Returns an array that is a slice of the array <arr> from the
+ index <from> to the index <to>.
+
+ This is the old notation for arr[from..to] and supported
+ only for hysterical raisins.
+
+ In LDMud this efun is temporarily a simulated efun until is finally
+ droppped.
+
+HISTORY
+ Removed in LDMud 3.3.
+
+SEE ALSO
+ [](E)
+
+11.11.2006 Zesstra