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