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
