Automatisch erzeugte Manpages.

Damit nicht jeder sphinx auf dem Rechner haben muss,
behalten wir bis auf weiteres die aus den .rst
erzeugten Manpoages auch im Repo.

Change-Id: Id556c0d11cf5f79659d8350952ce1c014d81ea44
diff --git a/doc/sefun/CountUp b/doc/sefun/CountUp
index 5515780..9e55d69 100644
--- a/doc/sefun/CountUp
+++ b/doc/sefun/CountUp
@@ -1,25 +1,40 @@
-FUNKTION:
-	public varargs string CountUp( string *s, string sep, string lastsep );
 
-ARGUMENTE:
-	*s
-	  Array von Strings mit Woertern.
-  sep
-    String, der zwischen den Woerten in der Aufzaehlung eingefuegt wird.
-    Standard: ", "
-  lastsep
-    String, der zwischen dem vorletzten und letzten Element eingefuegt wird.
-    Standard: " und "
+CountUp()
+*********
 
-BESCHREIBUNG:
-	Die Woerter Wort_1 bis Wort_n aus dem Stringaray werden als
-	Aufzaehlung in der Form
-	  Wort_1<sep>Wort_2, ... Wort_n-1<lastsep>Wort_n
-	zusammengesetzt. Mit Standardwerten also:
-	  Wort_1, Wort_2, ... Wort_n-1 und Wort_n
 
-RUeCKGABEWERT:
-	String als Aufzaehlung der einzelnen Woerter.
+FUNKTION
+========
 
-----------------------------------------------------------------------------
+   public varargs string CountUp( string *s, string sep, string lastsep );
+
+
+ARGUMENTE
+=========
+
+         *s
+           Array von Strings mit Woertern.
+   sep
+     String, der zwischen den Woerten in der Aufzaehlung eingefuegt wird.
+     Standard: ", "
+   lastsep
+     String, der zwischen dem vorletzten und letzten Element eingefuegt wird.
+     Standard: " und "
+
+
+BESCHREIBUNG
+============
+
+   Die Woerter Wort_1 bis Wort_n aus dem Stringaray werden als
+   Aufzaehlung in der Form
+     Wort_1<sep>Wort_2, ... Wort_n-1<lastsep>Wort_n
+   zusammengesetzt. Mit Standardwerten also:
+     Wort_1, Wort_2, ... Wort_n-1 und Wort_n
+
+
+RUeCKGABEWERT
+=============
+
+   String als Aufzaehlung der einzelnen Woerter.
+
 15.03.2008, Zesstra
diff --git a/doc/sefun/_notify_fail b/doc/sefun/_notify_fail
index 84aa4de..a9801ef 100644
--- a/doc/sefun/_notify_fail
+++ b/doc/sefun/_notify_fail
@@ -1,18 +1,35 @@
+
+_notify_fail()
+**************
+
 simul_efun::_notify_fail(E)
-FUNKTION:
-     void _notify_fail(string str)
 
-ARGUMENTE:
-     str
-	umgebrochener Fehlermeldungsstring
 
-BESCHREIBUNG:
-     Identisches Verhalten zu notify_fail(E), bis darauf, dass bei bereits
-     gesetzter Fehlermeldung _keine_ neue Fehlermeldung gesetzt wird.
+FUNKTION
+========
 
-SIEHE AUCH:
-     notify_fail(E), P_ACTUAL_NOTIFY_FAIL
-     add_action(E), AddCmd(L), AddAction(L),
-     query_verb(E)
+   void _notify_fail(string str)
+
+
+ARGUMENTE
+=========
+
+   str
+      umgebrochener Fehlermeldungsstring
+
+
+BESCHREIBUNG
+============
+
+   Identisches Verhalten zu notify_fail(E), bis darauf, dass bei bereits
+   gesetzter Fehlermeldung _keine_ neue Fehlermeldung gesetzt wird.
+
+
+SIEHE AUCH
+==========
+
+   notify_fail(E), P_ACTUAL_NOTIFY_FAIL
+   add_action(E), AddCmd(L), AddAction(L),
+   query_verb(E)
 
 24 Maerz 2004 Gloinson
diff --git a/doc/sefun/break_string b/doc/sefun/break_string
index 52d4d7b..8e3017d 100644
--- a/doc/sefun/break_string
+++ b/doc/sefun/break_string
@@ -1,90 +1,112 @@
-FUNKTION:
-    string break_string(string str)
-    string break_string(string str, int width)
-    string break_string(string str, int width, string indent)
-    string break_string(string str, int width, int space)
-    string break_string(string str, int width, string indent, int flags)
-    string break_string(string str, int width, int space, int flags)
 
-ARGUMENTE:
-    str    - umzubrechender String
-    width  - optional: maximale Zeilenlaenge (default 78)
-    indent - optional: String, der vor jeder umgebrochenen Zeile erscheint
-    space  - optional: Anzahl der Leerzeichen vor jeder umgebrochenen Zeile
-    flags  - optional: hiermit laesst sich das Verhalten von break_string()
-             aendern; moegliche Flags siehe Punkt 'Beschreibung'
+break_string()
+**************
 
-BESCHREIBUNG:
-    In der ersten Form wird der String 'str' durch Einfuegen von "\n" so um-
-    gebrochen, dass bei einer anschliessenden Ausgabe keine Zeile laenger
-    als 'width' Zeichen ist. Eventuell schon in 'str' vorhandene "\n" werden
-    dabei vorher entfernt.
 
-    Gibt man zusaetzlich noch einen String 'indent' an, so wird dieser vor
-    jede der umgebrochenen Zeilen gesetzt.
+FUNKTION
+========
 
-    Analog wird bei der Angabe der Zahl 'space' ein String mit 'space' Leer-
-    zeichen vor jede umgebrochene Zeile gesetzt.
+   string break_string(string str)
+   string break_string(string str, int width)
+   string break_string(string str, int width, string indent)
+   string break_string(string str, int width, int space)
+   string break_string(string str, int width, string indent, int flags)
+   string break_string(string str, int width, int space, int flags)
 
-    Zusaetzlich gibt es folgende optionale Flags, die man beliebig kombinieren
-    kann:
 
-        BS_LEAVE_MY_LFS  -  schon im Text vorhandene "\n" werden beibehalten
-        BS_SINGLE_SPACE  -  doppelte Leerzeichen sowie Leerzeichen nach Zeilen-
-                            umbruechen werden entfernt
-        BS_BLOCK         -  der Text wird im Blocksatz formatiert
-        BS_NO_PARINDENT  -  bei Blocksatz mit vorgegebenen Zeilenumbruechen
-                            (BS_BLOCK|BS_LEAVE_MY_LFS) werden Zeilen nach "\n"
-                            normalerweise mit einem Leerzeichen begonnen.
-                            Um das Einfuegen des fuehrenden Leerzeichens zu
-                            unterdruecken, muss BS_NO_PARINDENT angegeben werden
-        BS_INDENT_ONCE   -  die erste Zeile des Textes wird mit vorangestelltem
-                            'indent' ausgegeben; alle folgenden Zeilen bekommen
-                            einen Leerstring vorangestellt
-        BS_PREPEND_INDENT - der Ident wird dem Text vorangestellt sofern der 
-                            Indent + Text laenger als eine Zeile ist. Der Text
-			    wird um ein Leerzeichen eingerueckt, was mittels
-                            BS_NO_PARINDENT verhindert werden kann.
+ARGUMENTE
+=========
 
-RUECKGABEWERT:
-    Der umgebrochene Text.
+   str    - umzubrechender String
+   width  - optional: maximale Zeilenlaenge (default 78)
+   indent - optional: String, der vor jeder umgebrochenen Zeile erscheint
+   space  - optional: Anzahl der Leerzeichen vor jeder umgebrochenen Zeile
+   flags  - optional: hiermit laesst sich das Verhalten von break_string()
+            aendern; moegliche Flags siehe Punkt 'Beschreibung'
 
-    Laufzeit-Fehler, wenn der Indent laenger ist als die vorgegebene Breite.
 
-BEISPIELE:
-    write(break_string("Dies ist ein laengerer Text. Nur so als Beispiel.",27));
+BESCHREIBUNG
+============
 
-        => Dies ist ein laengerer
-           Text. Nur so als Beispiel.
+   In der ersten Form wird der String 'str' durch Einfuegen von "\n" so um-
+   gebrochen, dass bei einer anschliessenden Ausgabe keine Zeile laenger
+   als 'width' Zeichen ist. Eventuell schon in 'str' vorhandene "\n" werden
+   dabei vorher entfernt.
 
-    write(break_string("Mit indent sieht das so aus", 30, "Wargon sagt: "));
+   Gibt man zusaetzlich noch einen String 'indent' an, so wird dieser vor
+   jede der umgebrochenen Zeilen gesetzt.
 
-        => Wargon sagt: Mit indent sieht
-           Wargon sagt: das so aus
+   Analog wird bei der Angabe der Zahl 'space' ein String mit 'space' Leer-
+   zeichen vor jede umgebrochene Zeile gesetzt.
 
-    write(break_string("Mit indent sieht das so aus", 30, "Wargon sagt: ",
-                        BS_INDENT_ONCE));
+   Zusaetzlich gibt es folgende optionale Flags, die man beliebig kombinieren
+   kann:
 
-        => Wargon sagt: Mit indent sieht
-                        das so aus
+       BS_LEAVE_MY_LFS  -  schon im Text vorhandene "\n" werden beibehalten
+       BS_SINGLE_SPACE  -  doppelte Leerzeichen sowie Leerzeichen nach Zeilen-
+                           umbruechen werden entfernt
+       BS_BLOCK         -  der Text wird im Blocksatz formatiert
+       BS_NO_PARINDENT  -  bei Blocksatz mit vorgegebenen Zeilenumbruechen
+                           (BS_BLOCK|BS_LEAVE_MY_LFS) werden Zeilen nach "\n"
+                           normalerweise mit einem Leerzeichen begonnen.
+                           Um das Einfuegen des fuehrenden Leerzeichens zu
+                           unterdruecken, muss BS_NO_PARINDENT angegeben werden
+       BS_INDENT_ONCE   -  die erste Zeile des Textes wird mit vorangestelltem
+                           'indent' ausgegeben; alle folgenden Zeilen bekommen
+                           einen Leerstring vorangestellt
+       BS_PREPEND_INDENT - der Ident wird dem Text vorangestellt sofern der
+                           Indent + Text laenger als eine Zeile ist. Der Text
+                           wird um ein Leerzeichen eingerueckt, was mittels
+                           BS_NO_PARINDENT verhindert werden kann.
 
-    write(break_string("Mit Leerzeichen sieht das so aus", 30, 2));
 
-        =>   Mit Leerzeichen sieht das so
-             aus...
+RUECKGABEWERT
+=============
 
-    write(break_string("Ich will es\naber vorformatiert!",60,
-                        "Wargon sagt: ", BS_LEAVE_MY_LFS));
+   Der umgebrochene Text.
 
-        => Wargon sagt: Ich will es
-           Wargon sagt: aber vorformatiert!
+   Laufzeit-Fehler, wenn der Indent laenger ist als die vorgegebene Breite.
 
-    write(break_string("Ich will es\naber vorformatiert!",30,
-                        "Wargon sagt: ", BS_PREPEND_INDENT));
 
-        => Wargon sagt:
-            Ich will es aber 
-            vorformatiert!
+BEISPIELE
+=========
 
-SIEHE AUCH:
-    senderwiederholung
+   write(break_string("Dies ist ein laengerer Text. Nur so als Beispiel.",27));
+
+       => Dies ist ein laengerer
+          Text. Nur so als Beispiel.
+
+   write(break_string("Mit indent sieht das so aus", 30, "Wargon sagt: "));
+
+       => Wargon sagt: Mit indent sieht
+          Wargon sagt: das so aus
+
+   write(break_string("Mit indent sieht das so aus", 30, "Wargon sagt: ",
+                       BS_INDENT_ONCE));
+
+       => Wargon sagt: Mit indent sieht
+                       das so aus
+
+   write(break_string("Mit Leerzeichen sieht das so aus", 30, 2));
+
+       =>   Mit Leerzeichen sieht das so
+            aus...
+
+   write(break_string("Ich will es\naber vorformatiert!",60,
+                       "Wargon sagt: ", BS_LEAVE_MY_LFS));
+
+       => Wargon sagt: Ich will es
+          Wargon sagt: aber vorformatiert!
+
+   write(break_string("Ich will es\naber vorformatiert!",30,
+                       "Wargon sagt: ", BS_PREPEND_INDENT));
+
+       => Wargon sagt:
+           Ich will es aber
+           vorformatiert!
+
+
+SIEHE AUCH
+==========
+
+   senderwiederholung
diff --git a/doc/sefun/broken_count_bits b/doc/sefun/broken_count_bits
index 09e56b8..de01e96 100644
--- a/doc/sefun/broken_count_bits
+++ b/doc/sefun/broken_count_bits
@@ -1,29 +1,48 @@
+
+broken_count_bits()
+*******************
+
+
 SYNOPSIS
-        int count_bits (string str)
+========
+
+   int count_bits (string str)
+
 
 DESTRIPTION
-        Count the number of set bits in bitstring <str> and return the number
-        as result.
+===========
+
+   Count the number of set bits in bitstring <str> and return the number
+   as result.
+
 
 NOTE
-	Bitstrings store 6 Bits per Character. Consequently, the functions for
-	manipulating bitstrings (see below) do generally not work on most
-	strings. An exception is this (s)efun. It accepts strings which are
-	not correct bitstrings (like getuid(PL)), BUT: It does NOT work
-	correctly on them! The results are NOT the correct number of bits!
-	Additionally, count_bits() in LDMud rejects such strings with an error
-	instead of returning false results, as all the other functions for
-	bitstrings do as well.
+====
+
+   Bitstrings store 6 Bits per Character. Consequently, the functions for
+   manipulating bitstrings (see below) do generally not work on most
+   strings. An exception is this (s)efun. It accepts strings which are
+   not correct bitstrings (like getuid(PL)), BUT: It does NOT work
+   correctly on them! The results are NOT the correct number of bits!
+   Additionally, count_bits() in LDMud rejects such strings with an error
+   instead of returning false results, as all the other functions for
+   bitstrings do as well.
+
 
 EXAMPLES
-        string s;
+========
 
-        s = set_bit("", 3); s = set_bit(s, 15);
+   string s;
 
-        count_bits(s) --> returns 2
+   s = set_bit("", 3); s = set_bit(s, 15);
+
+   count_bits(s) --> returns 2
+
 
 SEE ALSO
-        clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
-        or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
+========
+
+   clear_bit(E), set_bit(E), test_bit(E), next_bit(E), last_bit(E),
+   or_bits(E), xor_bits(E), invert_bits(E), copy_bits(E)
 
 19.12.2006, Zesstra
diff --git a/doc/sefun/cindent b/doc/sefun/cindent
index 72119b3..e0e16af 100644
--- a/doc/sefun/cindent
+++ b/doc/sefun/cindent
@@ -1,9 +1,22 @@
-SYNOPSIS:
-        int cindent(string file)
 
-DESCRIPTION:
-        Indent a file using an LPC-enhanced version of the GNU indent
-	program, which is modelled after the Berkeley indent(1).
+cindent()
+*********
 
-SEE ALSO:
-	ed(E)
+
+SYNOPSIS
+========
+
+   int cindent(string file)
+
+
+DESCRIPTION
+===========
+
+   Indent a file using an LPC-enhanced version of the GNU indent
+   program, which is modelled after the Berkeley indent(1).
+
+
+SEE ALSO
+========
+
+   ed(E)
diff --git a/doc/sefun/debug_info b/doc/sefun/debug_info
index 18747b0..02e02b8 100644
--- a/doc/sefun/debug_info
+++ b/doc/sefun/debug_info
@@ -1,490 +1,508 @@
-DEPRECATED
-SYNOPSIS
-        #include <debug_info.h>
 
-        mixed debug_info(int flag)
-        mixed debug_info(int flag, mixed arg)
-        mixed debug_info(int flag, mixed arg2, mixed arg3)
+debug_info()
+************
+
+
+DEPRECATED
+==========
+
+
+SYNOPSIS
+========
+
+   #include <debug_info.h>
+
+   mixed debug_info(int flag)
+   mixed debug_info(int flag, mixed arg)
+   mixed debug_info(int flag, mixed arg2, mixed arg3)
+
 
 BESCHREIBUNG
-        Sammelt entsprechend den Angaben in <flag> gewisse intere Debuginfos
-        des Treibers. <flag> kann dabei folgende in debug_info.h definierte
-        Werte enthalten:
+============
 
-        DINFO_OBJECT   (0): Angezeigt werden Informationen zum in <arg>
-            spezifizierten Objekt, zum Beispiel heart_beat,
-            enable_commands etc. Die Funktion liefert 0 zurueck.
+   Sammelt entsprechend den Angaben in <flag> gewisse intere Debuginfos
+   des Treibers. <flag> kann dabei folgende in debug_info.h definierte
+   Werte enthalten:
 
-        DINFO_MEMORY   (1): Angezeigt werden Informationen zu
-            Speicherbelegung und -ausnutzung des in <arg> spezifizierten
-            Objekts, zum Beispiel Anzahl Strings, Variablen, geerbte Files,
-            Objektgroesse etc. Die Funktion liefert 0 zurueck.
+   DINFO_OBJECT   (0): Angezeigt werden Informationen zum in <arg>
+       spezifizierten Objekt, zum Beispiel heart_beat,
+       enable_commands etc. Die Funktion liefert 0 zurueck.
 
-        DINFO_OBJLIST  (2): debug_info() liefert Objekte aus der globalen
-            Objektliste. Wenn <arg2> nicht angegeben wird, wird das erste
-            Element aus der Objektliste gelierfert, wenn <arg2> eine Zahl n
-            ist, das n-te Element. Ist <arg2> ein Objekt, werden die
-            nachfolgenden Objekte in der Objektliste zurueck geliefert.
-            Das optionale Argument <arg3> bezeichnet die Anzahl zurueck
-            gelieferter Objekte. Wenn <arg3> 0 ist, wird ein einzelnes
-            Objekt zurueck geliefert. Wenn <arg3> eine Zahl m enthaelt, wird
-            ein Array mit hoechstens m Elementen zurueck geliefert. Auf
-            diese Weise kann ein Array mit saemtlichen Objekten im Spiel
-            erzeugt werden, wenn fuer <arg3> __INT_MAX__ gesetzt wird (eine
-            entsprechende maximale Arraygroesse vorausgesetzt).
+   DINFO_MEMORY   (1): Angezeigt werden Informationen zu
+       Speicherbelegung und -ausnutzung des in <arg> spezifizierten
+       Objekts, zum Beispiel Anzahl Strings, Variablen, geerbte Files,
+       Objektgroesse etc. Die Funktion liefert 0 zurueck.
 
-        DINFO_MALLOC   (3): Entsprichend der Eingabe des 'malloc'-Kommandos.
-            Es muessen keine weiteren Argumente angegeben werden.
+   DINFO_OBJLIST  (2): debug_info() liefert Objekte aus der globalen
+       Objektliste. Wenn <arg2> nicht angegeben wird, wird das erste
+       Element aus der Objektliste gelierfert, wenn <arg2> eine Zahl n
+       ist, das n-te Element. Ist <arg2> ein Objekt, werden die
+       nachfolgenden Objekte in der Objektliste zurueck geliefert.
+       Das optionale Argument <arg3> bezeichnet die Anzahl zurueck
+       gelieferter Objekte. Wenn <arg3> 0 ist, wird ein einzelnes
+       Objekt zurueck geliefert. Wenn <arg3> eine Zahl m enthaelt, wird
+       ein Array mit hoechstens m Elementen zurueck geliefert. Auf
+       diese Weise kann ein Array mit saemtlichen Objekten im Spiel
+       erzeugt werden, wenn fuer <arg3> __INT_MAX__ gesetzt wird (eine
+       entsprechende maximale Arraygroesse vorausgesetzt).
 
-        DINFO_STATUS   (4): Angezeigt wird die Statusinformation des Drivers.
-            Optional kann das Argument <arg> die Werte 0, "tables", "swap",
-            "malloc" oder andere vom Driver akzeptierte Argumente enthalten.
-            Das Resultat ist ein druckbarer String, der die Statusinformation
-            enthaelt, oder 0, wenn ein ungueltiges Argument angegeben wurde.
+   DINFO_MALLOC   (3): Entsprichend der Eingabe des 'malloc'-Kommandos.
+       Es muessen keine weiteren Argumente angegeben werden.
 
-        DINFO_DUMP     (5): Die durch <arg2> angeforderte Information wird
-            in ein File geschrieben, das man mit <arg3> angeben kann. Wird
-            <arg3> nicht angegeben, wird eine Standarddatei verwendet.
-            debug_info() ueberprueft mittels master->valid_write(), ob es
-            das File schreiben kann. Falls bereits eine entsprechende Datei
-            existiert, wird diese ueberschrieben. Die Funktion liefert 1
-            bei Erfolg, 0 sonst.
+   DINFO_STATUS   (4): Angezeigt wird die Statusinformation des Drivers.
+       Optional kann das Argument <arg> die Werte 0, "tables", "swap",
+       "malloc" oder andere vom Driver akzeptierte Argumente enthalten.
+       Das Resultat ist ein druckbarer String, der die Statusinformation
+       enthaelt, oder 0, wenn ein ungueltiges Argument angegeben wurde.
 
-            <arg2> == "objects": liefert Informationen ueber alle Objekte im
-                Spiel und schreibt diese standardmaessig in die Datei
-                /OBJ_DUMP, dem valid_write() wird 'objdump' uebergeben.
-                Die Datei enthaelt fuer jedes Objekt eine Zeile, in der
-                jeweils folgende Informationen aufgelistet sind:
-                  - Name des Objekts (object_name)
-                  - Groesse im Speicher, gemeinsamer genutzter Speicher nur
-                    einmal gezaehlt
-                  - Groesse im Speicher, wenn es keine gemeinsam genutzte
-                    Daten geben wuerde
-                  - Anzahl Referenzen
-                  - 'HB', wenn das Objekt einen heart_beat hat, sonst nichts.
-                  - der Name der Umgebung oder '--', wenn das Objekt keine
-                    Umgebung hat
-                  - in Klammern die Anzahl der durch das Objekt verursachten
-                    Verarbeitungsschritten (execution ticks)
-                  - der Swap-Status:
-                      > nichts, wenn das Objekt nicht geswapt wurde
-                      > 'PROG SWAPPED', wenn nur das Programm geswapt wurde
-                      > 'VAR SWAPPED', wenn nur die Variablen geswapt wurden
-                      > 'SWAPPED', wenn beide geswapt wurden
-                  - die Zeit, zu der das Objekt geladen wurde.
+   DINFO_DUMP     (5): Die durch <arg2> angeforderte Information wird
+       in ein File geschrieben, das man mit <arg3> angeben kann. Wird
+       <arg3> nicht angegeben, wird eine Standarddatei verwendet.
+       debug_info() ueberprueft mittels master->valid_write(), ob es
+       das File schreiben kann. Falls bereits eine entsprechende Datei
+       existiert, wird diese ueberschrieben. Die Funktion liefert 1
+       bei Erfolg, 0 sonst.
 
-            <arg2> == "destructed": liefert Informationen ueber alle
-                zerstoerten Objekte und schreibt diese standardmaessig in
-                die Datei /DEST_OBJ_DUMP, dem valid_write() wird 'objdump'
-                uebergeben. Die Datei enthaelt fuer jedes Objekt eine Zeile,
-                in der jeweils folgende Informationen aufgelistet sind:
-                  - Name des Objekts (object_name)
-                  - Anzahl der Referenzen
-                  - 'NEW', wenn das Objekt in diesem Verarbeitungszyklus
-                    zerstoert wurde, nichts wenn es bereits fruehre zerstoert
-                    worden war.
+       <arg2> == "objects": liefert Informationen ueber alle Objekte im
+           Spiel und schreibt diese standardmaessig in die Datei
+           /OBJ_DUMP, dem valid_write() wird 'objdump' uebergeben.
+           Die Datei enthaelt fuer jedes Objekt eine Zeile, in der
+           jeweils folgende Informationen aufgelistet sind:
+             - Name des Objekts (object_name)
+             - Groesse im Speicher, gemeinsamer genutzter Speicher nur
+               einmal gezaehlt
+             - Groesse im Speicher, wenn es keine gemeinsam genutzte
+               Daten geben wuerde
+             - Anzahl Referenzen
+             - 'HB', wenn das Objekt einen heart_beat hat, sonst nichts.
+             - der Name der Umgebung oder '--', wenn das Objekt keine
+               Umgebung hat
+             - in Klammern die Anzahl der durch das Objekt verursachten
+               Verarbeitungsschritten (execution ticks)
+             - der Swap-Status:
+                 > nichts, wenn das Objekt nicht geswapt wurde
+                 > 'PROG SWAPPED', wenn nur das Programm geswapt wurde
+                 > 'VAR SWAPPED', wenn nur die Variablen geswapt wurden
+                 > 'SWAPPED', wenn beide geswapt wurden
+             - die Zeit, zu der das Objekt geladen wurde.
 
-            <arg2> == "opcodes": liefert Nutzungsinformationen ueber die
-                opcodes. Standardmaessig wird in die Datei /OPC_DUMP
-                geschrieben. valid_write() wird 'opcdump' uebergeben.
+       <arg2> == "destructed": liefert Informationen ueber alle
+           zerstoerten Objekte und schreibt diese standardmaessig in
+           die Datei /DEST_OBJ_DUMP, dem valid_write() wird 'objdump'
+           uebergeben. Die Datei enthaelt fuer jedes Objekt eine Zeile,
+           in der jeweils folgende Informationen aufgelistet sind:
+             - Name des Objekts (object_name)
+             - Anzahl der Referenzen
+             - 'NEW', wenn das Objekt in diesem Verarbeitungszyklus
+               zerstoert wurde, nichts wenn es bereits fruehre zerstoert
+               worden war.
 
-            <arg2> == "memory": liefert eine Liste aller allokierten
-                Speicherbloecke.
-                Standardmaessig wird in die Datei /MEMORY_DUMP geschrieben;
-                valid_write() wird 'memdump' uebergeben.  Existiert die
-                Datei bereits, werden die neuen Daten angehaengt.
-                Wenn der Allokator einen Speicherabzug nicht unterstuetzt,
-                wird keine Datei geschrieben und immer 0 zurueckgegeben.
-                Diese Funktion ist am nuetzlichsten wenn der Allokator
-                mit MALLOC_TRACE und MALLOC_LPC_TRACE kompiliert
-                wurde.
+       <arg2> == "opcodes": liefert Nutzungsinformationen ueber die
+           opcodes. Standardmaessig wird in die Datei /OPC_DUMP
+           geschrieben. valid_write() wird 'opcdump' uebergeben.
+
+       <arg2> == "memory": liefert eine Liste aller allokierten
+           Speicherbloecke.
+           Standardmaessig wird in die Datei /MEMORY_DUMP geschrieben;
+           valid_write() wird 'memdump' uebergeben.  Existiert die
+           Datei bereits, werden die neuen Daten angehaengt.
+           Wenn der Allokator einen Speicherabzug nicht unterstuetzt,
+           wird keine Datei geschrieben und immer 0 zurueckgegeben.
+           Diese Funktion ist am nuetzlichsten wenn der Allokator
+           mit MALLOC_TRACE und MALLOC_LPC_TRACE kompiliert
+           wurde.
 
 
-        DINFO_DATA    (6): Liefert Rohdaten ueber gewisse, durch <arg2>
-            spezifizierte Aspekte des Treibers. Das Resultat der Funktion ist
-            ein Array mit der Information oder 0, falls <arg2> keinen
-            gueltigen Wert enthalten hat.
-            Ist <arg3> eine Zahl, die kleiner ist als die Anzahl Elemente im
-            Resultat-Array, liefert die Funktion nur das entsprechende
-            Element zurueck.
-            Zulaessige Werte fuer <arg2> sind: DID_STATUS, DID_SWAP und
-            DID_MALLOC.
+   DINFO_DATA    (6): Liefert Rohdaten ueber gewisse, durch <arg2>
+       spezifizierte Aspekte des Treibers. Das Resultat der Funktion ist
+       ein Array mit der Information oder 0, falls <arg2> keinen
+       gueltigen Wert enthalten hat.
+       Ist <arg3> eine Zahl, die kleiner ist als die Anzahl Elemente im
+       Resultat-Array, liefert die Funktion nur das entsprechende
+       Element zurueck.
+       Zulaessige Werte fuer <arg2> sind: DID_STATUS, DID_SWAP und
+       DID_MALLOC.
 
-            <arg2> == DID_STATUS (0): Liefert die "status" und "status table"
-                Information. Folgende Indizes sind definiert:
-                  - int DID_ST_BOOT_TIME
-                        die Zeit (time()), zu der das Mud gestartet wurde
-                  - int DID_ST_ACTIONS
-                  - int DID_ST_ACTIONS_SIZE
-                        die Anzahl und Groesse im Speicher der allozierten
-                        Actions.
-                  - int DID_ST_SHADOWS
-                  - int DID_ST_SHADOWS_SIZE
-                        Anzahl und Groesse im Speicher aller allozierten
-                        Shadows.
-                  - int DID_ST_OBJECTS
-                  - int DID_ST_OBJECTS_SIZE
-                        Anzahl und Groesse im Speicher aller Objekte.
-                  - int DID_ST_OBJECTS_SWAPPED
-                  - int DID_ST_OBJECTS_SWAP_SIZE
-                        Anzahl und Groesse im Speicher der geswapten
-                        Variablenbloecke der Objekte
-                  - int DID_ST_OBJECTS_LIST
-                        Anzahl Objekte in der Objektliste
-                  - int DID_ST_OBJECTS_NEWLY_DEST
-                        Anzahl der frisch zerstoerten Objekte (d.h. Objekte,
-                        die in diesem Verarbeitungszyklus zerstoert wurden)
-                  - int DID_ST_OBJECTS_DESTRUCTED
-                        Anzahl der zerstoerten, aber noch immer referenzierten
-                        Objekte, ohne die unter DID_ST_OBJECTS_NEWLY_DEST
-                        bereits gezaehlten.
-                  - int DID_ST_OBJECTS_PROCESSED
-                        Anzahl der gelisteten Objekte, die im letzten
-                        Verarbeitungszyklus verarbeitet wurden.
-                  - float DID_ST_OBJECTS_AVG_PROC
-                        Durchschnittlicher Anteil der pro Zyklus verarbeiteten
-                        Objekte, ausgedrueckt in Prozent (0 .. 1.0)
-                  - int DID_ST_OTABLE
-                        Anzahl eingetragener Objekte in der Objekttabelle
-                  - int DID_ST_OTABLE_SLOTS
-                        Anzahl von Hashplaetzen, die von jeder Objekttabelle
-                        bereitgestellt werden
-                  - int DID_ST_OTABLE_SIZE
-                        Durch die Objekttabelle belegter Speicher
-                  - int DID_ST_HBEAT_OBJS
-                        Anzahl Objekte mit einem heart_beat()
-                  - int DID_ST_HBEAT_CALLS
-                        Anzahl aktiver heart_beat() Zyklen bisher (d.h.
-                        Zyklen, in denen mindestens eine heart_beat() Funktion
-                        aufgerufen wurde)
-                  - int DID_ST_HBEAT_CALLS_TOTAL
-                        Gesamtzahl von heart_beat() Zyklen bisher.
-                  - int DID_ST_HBEAT_SLOTS
-                  - int DID_ST_HBEAT_SIZE
-                        Anzahl und Groesse aller allozierten Eintraege in der
-                        heart_beat() Tabelle.
-                  - int DID_ST_HBEAT_PROCESSED
-                        Anzahl heart_beat()s im letzten Zyklus
-                  - float DID_ST_HBEAT_AVG_PROC
-                        Durchschnittlicher Anteil der pro Zyklus aufgerufenen
-                        heart_beat()s, ausgedrueckt in Prozent (0 .. 1.0)
-                  - int DID_ST_CALLOUTS
-                        Anzahl und Groesse aller laufenden call_out()s
-                  - int DID_ST_ARRAYS
-                  - int DID_ST_ARRAYS_SIZE
-                        Anzahl und Groesse aller Arrays
-                  - int DID_ST_MAPPINGS
-                  - int DID_ST_MAPPINGS_SIZE
-                        Anzahl und Groesse aller Mappings
-                  - int DID_ST_PROGS
-                  - int DID_ST_PROGS_SIZE
-                        Anzahl und Groesse aller Programme
-                  - int DID_ST_PROGS_SWAPPED
-                  - int DID_ST_PROGS_SWAP_SIZE
-                        Anzahl und Groesse der geswapten Programme
-                  - int DID_ST_USER_RESERVE
-                  - int DID_ST_MASTER_RESERVE
-                  - int DID_ST_SYSTEM_RESERVE
-                        Momentane Groesse der drei Speicherreserven
-                  - int DID_ST_ADD_MESSAGE
-                  - int DID_ST_PACKETS
-                  - int DID_ST_PACKET_SIZE
-                        Anzahl Aufrufe von add_message(), Anzahl und Groesse
-                        der versendeten Pakete.
-                        Wenn der Driver nicht mit COMM_STAT kompiliert wurde,
-                        liefern alle drei Werte immer -1 zurueck.
-                  - int DID_ST_APPLY
-                  - int DID_ST_APPLY_HITS
-                        Anzahl Aufrufen von apply_low(), und wie viele davon
-                        Cache-Treffer waren. Wenn der Driver nicht mit
-                        APPLY_CACHE_STAT kompiliert wurde, liefern beide
-                        Werte immer -1.
-                  - int DID_ST_STRINGS
-                  - int DID_ST_STRING_SIZE
-                        Anzahl unterschiedlicher Strings in der Stringtabelle,
-                        sowie ihre Groesse
-                  - int DID_ST_STR_TABLE_SIZE
-                        Groesse der String Tabelle
-                  - int DID_ST_STR_REQ
-                  - int DID_ST_STR_REQ_SIZE
-                        Gesamte Anzahl von String Allokationen, und ihre
-                        Groesse
-                  - int DID_ST_STR_SEARCHES
-                  - int DID_ST_STR_SEARCH_LEN
-                        Anzahl Suchvorgaenge in der Stringtabelle und die
-                        Gesamtlaenge des Suchstrings
-                  - int DID_ST_STR_FOUND
-                        Anzahl erfolgreicher Suchvorgaenge
-                  - int DID_ST_STR_ENTRIES
-                        Anzahl Eintraege (Hash Ketten) in der String Tabelle
-                  - int DID_ST_STR_ADDED
-                        Anzahl zur String Tabelle bisher hinzugefuegter
-                        Strings
-                  - int DID_ST_STR_DELETED
-                        Anzahl aus der String Tabelle bisher geloeschter
-                        Strings
-                  - int DID_ST_STR_COLLISIONS
-                        Anzahl zu einer existierenden Hash Kette hinzugefuegte
-                        Strings
-                  - int DID_ST_RX_CACHED
-                        Anzahl gecacheter regulaerer Ausdruecke (regular
-                        expressions)
-                  - int DID_ST_RX_TABLE
-                  - int DID_ST_RX_TABLE_SIZE
-                        Anzahl Plaetze in der Regexp Cache Tabelle und
-                        Speicherbedarf der gecacheten Ausdruecke
-                  - int DID_ST_RX_REQUESTS
-                        Anzahl Anfragen fuer neue regexps
-                  - int DID_ST_RX_REQ_FOUND
-                        Anzahl gefundener regexps in der regexp Cache Tabelle
-                  - int DID_ST_RX_REQ_COLL
-                        Anzahl angefragter regexps, die mit einer bestehenden
-                        regexp kollidierten
-                  - int DID_ST_MB_FILE
-                        Die Groesse des 'File' Speicherpuffers
-                  - int DID_ST_MB_SWAP
-                        Die Groesse des 'Swap' Speicherpuffers
+       <arg2> == DID_STATUS (0): Liefert die "status" und "status table"
+           Information. Folgende Indizes sind definiert:
+             - int DID_ST_BOOT_TIME
+                   die Zeit (time()), zu der das Mud gestartet wurde
+             - int DID_ST_ACTIONS
+             - int DID_ST_ACTIONS_SIZE
+                   die Anzahl und Groesse im Speicher der allozierten
+                   Actions.
+             - int DID_ST_SHADOWS
+             - int DID_ST_SHADOWS_SIZE
+                   Anzahl und Groesse im Speicher aller allozierten
+                   Shadows.
+             - int DID_ST_OBJECTS
+             - int DID_ST_OBJECTS_SIZE
+                   Anzahl und Groesse im Speicher aller Objekte.
+             - int DID_ST_OBJECTS_SWAPPED
+             - int DID_ST_OBJECTS_SWAP_SIZE
+                   Anzahl und Groesse im Speicher der geswapten
+                   Variablenbloecke der Objekte
+             - int DID_ST_OBJECTS_LIST
+                   Anzahl Objekte in der Objektliste
+             - int DID_ST_OBJECTS_NEWLY_DEST
+                   Anzahl der frisch zerstoerten Objekte (d.h. Objekte,
+                   die in diesem Verarbeitungszyklus zerstoert wurden)
+             - int DID_ST_OBJECTS_DESTRUCTED
+                   Anzahl der zerstoerten, aber noch immer referenzierten
+                   Objekte, ohne die unter DID_ST_OBJECTS_NEWLY_DEST
+                   bereits gezaehlten.
+             - int DID_ST_OBJECTS_PROCESSED
+                   Anzahl der gelisteten Objekte, die im letzten
+                   Verarbeitungszyklus verarbeitet wurden.
+             - float DID_ST_OBJECTS_AVG_PROC
+                   Durchschnittlicher Anteil der pro Zyklus verarbeiteten
+                   Objekte, ausgedrueckt in Prozent (0 .. 1.0)
+             - int DID_ST_OTABLE
+                   Anzahl eingetragener Objekte in der Objekttabelle
+             - int DID_ST_OTABLE_SLOTS
+                   Anzahl von Hashplaetzen, die von jeder Objekttabelle
+                   bereitgestellt werden
+             - int DID_ST_OTABLE_SIZE
+                   Durch die Objekttabelle belegter Speicher
+             - int DID_ST_HBEAT_OBJS
+                   Anzahl Objekte mit einem heart_beat()
+             - int DID_ST_HBEAT_CALLS
+                   Anzahl aktiver heart_beat() Zyklen bisher (d.h.
+                   Zyklen, in denen mindestens eine heart_beat() Funktion
+                   aufgerufen wurde)
+             - int DID_ST_HBEAT_CALLS_TOTAL
+                   Gesamtzahl von heart_beat() Zyklen bisher.
+             - int DID_ST_HBEAT_SLOTS
+             - int DID_ST_HBEAT_SIZE
+                   Anzahl und Groesse aller allozierten Eintraege in der
+                   heart_beat() Tabelle.
+             - int DID_ST_HBEAT_PROCESSED
+                   Anzahl heart_beat()s im letzten Zyklus
+             - float DID_ST_HBEAT_AVG_PROC
+                   Durchschnittlicher Anteil der pro Zyklus aufgerufenen
+                   heart_beat()s, ausgedrueckt in Prozent (0 .. 1.0)
+             - int DID_ST_CALLOUTS
+                   Anzahl und Groesse aller laufenden call_out()s
+             - int DID_ST_ARRAYS
+             - int DID_ST_ARRAYS_SIZE
+                   Anzahl und Groesse aller Arrays
+             - int DID_ST_MAPPINGS
+             - int DID_ST_MAPPINGS_SIZE
+                   Anzahl und Groesse aller Mappings
+             - int DID_ST_PROGS
+             - int DID_ST_PROGS_SIZE
+                   Anzahl und Groesse aller Programme
+             - int DID_ST_PROGS_SWAPPED
+             - int DID_ST_PROGS_SWAP_SIZE
+                   Anzahl und Groesse der geswapten Programme
+             - int DID_ST_USER_RESERVE
+             - int DID_ST_MASTER_RESERVE
+             - int DID_ST_SYSTEM_RESERVE
+                   Momentane Groesse der drei Speicherreserven
+             - int DID_ST_ADD_MESSAGE
+             - int DID_ST_PACKETS
+             - int DID_ST_PACKET_SIZE
+                   Anzahl Aufrufe von add_message(), Anzahl und Groesse
+                   der versendeten Pakete.
+                   Wenn der Driver nicht mit COMM_STAT kompiliert wurde,
+                   liefern alle drei Werte immer -1 zurueck.
+             - int DID_ST_APPLY
+             - int DID_ST_APPLY_HITS
+                   Anzahl Aufrufen von apply_low(), und wie viele davon
+                   Cache-Treffer waren. Wenn der Driver nicht mit
+                   APPLY_CACHE_STAT kompiliert wurde, liefern beide
+                   Werte immer -1.
+             - int DID_ST_STRINGS
+             - int DID_ST_STRING_SIZE
+                   Anzahl unterschiedlicher Strings in der Stringtabelle,
+                   sowie ihre Groesse
+             - int DID_ST_STR_TABLE_SIZE
+                   Groesse der String Tabelle
+             - int DID_ST_STR_REQ
+             - int DID_ST_STR_REQ_SIZE
+                   Gesamte Anzahl von String Allokationen, und ihre
+                   Groesse
+             - int DID_ST_STR_SEARCHES
+             - int DID_ST_STR_SEARCH_LEN
+                   Anzahl Suchvorgaenge in der Stringtabelle und die
+                   Gesamtlaenge des Suchstrings
+             - int DID_ST_STR_FOUND
+                   Anzahl erfolgreicher Suchvorgaenge
+             - int DID_ST_STR_ENTRIES
+                   Anzahl Eintraege (Hash Ketten) in der String Tabelle
+             - int DID_ST_STR_ADDED
+                   Anzahl zur String Tabelle bisher hinzugefuegter
+                   Strings
+             - int DID_ST_STR_DELETED
+                   Anzahl aus der String Tabelle bisher geloeschter
+                   Strings
+             - int DID_ST_STR_COLLISIONS
+                   Anzahl zu einer existierenden Hash Kette hinzugefuegte
+                   Strings
+             - int DID_ST_RX_CACHED
+                   Anzahl gecacheter regulaerer Ausdruecke (regular
+                   expressions)
+             - int DID_ST_RX_TABLE
+             - int DID_ST_RX_TABLE_SIZE
+                   Anzahl Plaetze in der Regexp Cache Tabelle und
+                   Speicherbedarf der gecacheten Ausdruecke
+             - int DID_ST_RX_REQUESTS
+                   Anzahl Anfragen fuer neue regexps
+             - int DID_ST_RX_REQ_FOUND
+                   Anzahl gefundener regexps in der regexp Cache Tabelle
+             - int DID_ST_RX_REQ_COLL
+                   Anzahl angefragter regexps, die mit einer bestehenden
+                   regexp kollidierten
+             - int DID_ST_MB_FILE
+                   Die Groesse des 'File' Speicherpuffers
+             - int DID_ST_MB_SWAP
+                   Die Groesse des 'Swap' Speicherpuffers
 
-            <arg2> == DID_SWAP (1): Liefert "status swap"-Information:
-                  - int DID_SW_PROGS
-                  - int DID_SW_PROG_SIZE
-                        Anzahl und Groesse der geswappten Programmbloecke
-                  - int DID_SW_PROG_UNSWAPPED
-                  - int DID_SW_PROG_U_SIZE
-                        Anzahl und Groesse der nicht geswappten Bloecke
-                  - int DID_SW_VARS
-                  - int DID_SW_VAR_SIZE
-                        Anzahl und Groesse der geswappten Variablenbloecke
-                  - int DID_SW_FREE
-                  - int DID_SW_FREE_SIZE
-                        Anzahl und Groesse der freien Bloecke in der
-                        Auslagerungsdatei
-                  - int DID_SW_FILE_SIZE
-                        Groesse der Auslagerungsdatei
-                  - int DID_SW_REUSED
-                        Gesamter wiederverwendeter Speicherplatz in der
-                        Auslagerungsdatei
-                  - int DID_SW_SEARCHES
-                  - int DID_SW_SEARCH_LEN
-                        Anzahl und Gesamtlaenge der Suchvorgaenge nach
-                        wiederverwendbaren Bloecken in der Auslagerungsdatei
-                  - int DID_SW_F_SEARCHES
-                  - int DID_SW_F_SEARCH_LEN
-                        Anzahl und Gesamtlaenge der Suchvorgaenge nach einem
-                        Block, der frei gemacht werden kann.
-                  - int DID_SW_COMPACT
-                        TRUE wenn der Swapper im Compact-Modus laeuft
-                  - int DID_SW_RECYCLE_FREE
-                        TRUE wenn der Swapper gerade einen freien Block
-                        wiederverwendet
+       <arg2> == DID_SWAP (1): Liefert "status swap"-Information:
+             - int DID_SW_PROGS
+             - int DID_SW_PROG_SIZE
+                   Anzahl und Groesse der geswappten Programmbloecke
+             - int DID_SW_PROG_UNSWAPPED
+             - int DID_SW_PROG_U_SIZE
+                   Anzahl und Groesse der nicht geswappten Bloecke
+             - int DID_SW_VARS
+             - int DID_SW_VAR_SIZE
+                   Anzahl und Groesse der geswappten Variablenbloecke
+             - int DID_SW_FREE
+             - int DID_SW_FREE_SIZE
+                   Anzahl und Groesse der freien Bloecke in der
+                   Auslagerungsdatei
+             - int DID_SW_FILE_SIZE
+                   Groesse der Auslagerungsdatei
+             - int DID_SW_REUSED
+                   Gesamter wiederverwendeter Speicherplatz in der
+                   Auslagerungsdatei
+             - int DID_SW_SEARCHES
+             - int DID_SW_SEARCH_LEN
+                   Anzahl und Gesamtlaenge der Suchvorgaenge nach
+                   wiederverwendbaren Bloecken in der Auslagerungsdatei
+             - int DID_SW_F_SEARCHES
+             - int DID_SW_F_SEARCH_LEN
+                   Anzahl und Gesamtlaenge der Suchvorgaenge nach einem
+                   Block, der frei gemacht werden kann.
+             - int DID_SW_COMPACT
+                   TRUE wenn der Swapper im Compact-Modus laeuft
+             - int DID_SW_RECYCLE_FREE
+                   TRUE wenn der Swapper gerade einen freien Block
+                   wiederverwendet
 
-            <arg2> == DID_MEMORY (2): Liefert die "status malloc"-Information:
-                  - string DID_MEM_NAME
-                        Der Name des Allokators: "sysmalloc", "smalloc",
-                        "slaballoc"
-                  - int DID_MEM_SBRK
-                  - int DID_MEM_SBRK_SIZE
-                        Anzahl und Groesse der Speicherbloecke, die vom
-                        Betriebssystem angefordert wurden (smalloc, slaballoc)
-                  - int DID_MEM_LARGE
-                  - int DID_MEM_LARGE_SIZE
-                  - int DID_MEM_LFREE
-                  - int DID_MEM_LFREE_SIZE
-                        Anzahl und Groesse der grossen allozierten bzw.
-                        freien Bloecke (smalloc, slaballoc)
-                  - int DID_MEM_LWASTED
-                  - int DID_MEM_LWASTED_SIZE
-                        Anzahl und Groesse der unbrauchbaren grossen
-                        Speicherfragmente (smalloc, slaballoc)
-                  - int DID_MEM_CHUNK
-                  - int DID_MEM_CHUNK_SIZE
-                        Anzahl und Groesse kleiner Speicherbloecke (chunk
-                        blocks; smalloc, slaballoc)
-                  - int DID_MEM_SMALL
-                  - int DID_MEM_SMALL_SIZE
-                  - int DID_MEM_SFREE
-                  - int DID_MEM_SFREE_SIZE
-                        Anzahl und groesse der allozierten bzw. freien
-                        kleinen Speicherbloecke (smalloc, slaballoc)
-                  - int DID_MEM_SWASTED
-                  - int DID_MEM_SWASTED_SIZE
-                        Anzahl und Groesse der unbrauchbar kleinen
-                        Speicherfragmente (smalloc, slaballoc)
-                  - int DID_MEM_MINC_CALLS
-                  - int DID_MEM_MINC_SUCCESS
-                  - int DID_MEM_MINC_SIZE
-                        Anzahl Aufrufe von malloc_increment(), Anzahl der
-                        erfolgreichen Aufrufe und die Groesse des auf diese
-                        Art allozierten Speichers (smalloc, slaballoc)
-                  - int DID_MEM_PERM
-                  - int DID_MEM_PERM_SIZE
-                        Anzahl und Groesse permanenter (non-GCable)
-                        Allokationen (smalloc, slaballoc)
-                  - int DID_MEM_CLIB
-                  - int DID_MEM_CLIB_SIZE
-                        Anzahl und Groesse der Allokationen durch Clib
-                        Funktionen (nur smalloc, slaballoc mit SBRK_OK)
-                  - int DID_MEM_OVERHEAD
-                        Overhead fuer jede Allokation (smalloc, slaballoc)
-                  - int DID_MEM_ALLOCATED
-                        Der Speicher, der durch die Speicherverwaltung
-                        alloziert wurde, inklusive den Overhead fuer die
-                        Speicherverwaltung (smalloc, slaballoc)
-                  - int DID_MEM_USED
-                        Der Speicher, der durch den Driver belegt ist, ohne
-                        den durch die Speicherverwaltung belegten Speicher
-                        (smalloc, slaballoc)
-                  - int DID_MEM_TOTAL_UNUSED
-                        Der Speicher, der vom System zur Verfuegung gestellt,
-                        aber vom Treiber nicht benoetigt wird.
-                  - int DID_MEM_AVL_NODES          (smalloc, slaballoc)
-                        Anzahl der AVL-Knoten, die zur Verwaltung der
-                        freien grossen Speicherbloecke verwendet werden
-                        (nur smalloc). Dieser Wert kann in Zukunft
-                        wieder verschwinden.
-                  - mixed * DID_MEM_EXT_STATISTICS (smalloc, slaballoc)
-                        Detaillierte Statistiken des Allokators sofern
-                        diese aktiviert wurden; 0 anderenfalls.
+       <arg2> == DID_MEMORY (2): Liefert die "status malloc"-Information:
+             - string DID_MEM_NAME
+                   Der Name des Allokators: "sysmalloc", "smalloc",
+                   "slaballoc"
+             - int DID_MEM_SBRK
+             - int DID_MEM_SBRK_SIZE
+                   Anzahl und Groesse der Speicherbloecke, die vom
+                   Betriebssystem angefordert wurden (smalloc, slaballoc)
+             - int DID_MEM_LARGE
+             - int DID_MEM_LARGE_SIZE
+             - int DID_MEM_LFREE
+             - int DID_MEM_LFREE_SIZE
+                   Anzahl und Groesse der grossen allozierten bzw.
+                   freien Bloecke (smalloc, slaballoc)
+             - int DID_MEM_LWASTED
+             - int DID_MEM_LWASTED_SIZE
+                   Anzahl und Groesse der unbrauchbaren grossen
+                   Speicherfragmente (smalloc, slaballoc)
+             - int DID_MEM_CHUNK
+             - int DID_MEM_CHUNK_SIZE
+                   Anzahl und Groesse kleiner Speicherbloecke (chunk
+                   blocks; smalloc, slaballoc)
+             - int DID_MEM_SMALL
+             - int DID_MEM_SMALL_SIZE
+             - int DID_MEM_SFREE
+             - int DID_MEM_SFREE_SIZE
+                   Anzahl und groesse der allozierten bzw. freien
+                   kleinen Speicherbloecke (smalloc, slaballoc)
+             - int DID_MEM_SWASTED
+             - int DID_MEM_SWASTED_SIZE
+                   Anzahl und Groesse der unbrauchbar kleinen
+                   Speicherfragmente (smalloc, slaballoc)
+             - int DID_MEM_MINC_CALLS
+             - int DID_MEM_MINC_SUCCESS
+             - int DID_MEM_MINC_SIZE
+                   Anzahl Aufrufe von malloc_increment(), Anzahl der
+                   erfolgreichen Aufrufe und die Groesse des auf diese
+                   Art allozierten Speichers (smalloc, slaballoc)
+             - int DID_MEM_PERM
+             - int DID_MEM_PERM_SIZE
+                   Anzahl und Groesse permanenter (non-GCable)
+                   Allokationen (smalloc, slaballoc)
+             - int DID_MEM_CLIB
+             - int DID_MEM_CLIB_SIZE
+                   Anzahl und Groesse der Allokationen durch Clib
+                   Funktionen (nur smalloc, slaballoc mit SBRK_OK)
+             - int DID_MEM_OVERHEAD
+                   Overhead fuer jede Allokation (smalloc, slaballoc)
+             - int DID_MEM_ALLOCATED
+                   Der Speicher, der durch die Speicherverwaltung
+                   alloziert wurde, inklusive den Overhead fuer die
+                   Speicherverwaltung (smalloc, slaballoc)
+             - int DID_MEM_USED
+                   Der Speicher, der durch den Driver belegt ist, ohne
+                   den durch die Speicherverwaltung belegten Speicher
+                   (smalloc, slaballoc)
+             - int DID_MEM_TOTAL_UNUSED
+                   Der Speicher, der vom System zur Verfuegung gestellt,
+                   aber vom Treiber nicht benoetigt wird.
+             - int DID_MEM_AVL_NODES          (smalloc, slaballoc)
+                   Anzahl der AVL-Knoten, die zur Verwaltung der
+                   freien grossen Speicherbloecke verwendet werden
+                   (nur smalloc). Dieser Wert kann in Zukunft
+                   wieder verschwinden.
+             - mixed * DID_MEM_EXT_STATISTICS (smalloc, slaballoc)
+                   Detaillierte Statistiken des Allokators sofern
+                   diese aktiviert wurden; 0 anderenfalls.
 
-                        Dieser Wert kann in Zukunft wieder verschwinden.
+                   Dieser Wert kann in Zukunft wieder verschwinden.
 
-                        Das Array enthaelt NUM+2 Eintraege, wobei NUM
-                        Anzahl der verschiedenen 'kleinen'
-                        Blockgroessen ist. Eintrag [NUM] beschreibt
-                        die uebergrossen 'kleinen' Bloecke, Eintrag
-                        [NUM+1] beschreibt summarisch die 'grossen'
-                        Bloecke. Jeder Eintrag ist ein Array mit
-                        diesen Feldern:
+                   Das Array enthaelt NUM+2 Eintraege, wobei NUM
+                   Anzahl der verschiedenen 'kleinen'
+                   Blockgroessen ist. Eintrag [NUM] beschreibt
+                   die uebergrossen 'kleinen' Bloecke, Eintrag
+                   [NUM+1] beschreibt summarisch die 'grossen'
+                   Bloecke. Jeder Eintrag ist ein Array mit
+                   diesen Feldern:
 
-                        int DID_MEM_ES_MAX_ALLOC:
-                          Maximale Anzahl allokierter Bloecke dieser
-                          Groesse.
+                   int DID_MEM_ES_MAX_ALLOC:
+                     Maximale Anzahl allokierter Bloecke dieser
+                     Groesse.
 
-                        int DID_MEM_ES_CUR_ALLOC:
-                          Derzeitige Anzahl allokierter Bloecke dieser
-                          Groesse.
-                          Current number of allocated blocks of this size.
+                   int DID_MEM_ES_CUR_ALLOC:
+                     Derzeitige Anzahl allokierter Bloecke dieser
+                     Groesse.
+                     Current number of allocated blocks of this size.
 
-                        int DID_MEM_ES_MAX_FREE:
-                          Maximale Anzahl freier Bloecke dieser
-                          Groesse.
+                   int DID_MEM_ES_MAX_FREE:
+                     Maximale Anzahl freier Bloecke dieser
+                     Groesse.
 
-                        int DID_MEM_ES_CUR_FREE:
-                          Derzeitige Anzahl freier Bloecke dieser
-                          Groesse.
+                   int DID_MEM_ES_CUR_FREE:
+                     Derzeitige Anzahl freier Bloecke dieser
+                     Groesse.
 
-                        float DID_MEM_ES_AVG_XALLOC:
-                          Durchschnittliche Zahl von Allokationen pro
-                          Sekunde.
+                   float DID_MEM_ES_AVG_XALLOC:
+                     Durchschnittliche Zahl von Allokationen pro
+                     Sekunde.
 
-                        float DID_MEM_ES_AVG_XFREE:
-                          Durchschnittliche Zahl von Deallokationen pro
-                          Sekunde.
+                   float DID_MEM_ES_AVG_XFREE:
+                     Durchschnittliche Zahl von Deallokationen pro
+                     Sekunde.
 
-                      Die Durchschnittsstatistiken schliessen interne
-                      Umsortierungen der Blocklisten nicht ein.
+                 Die Durchschnittsstatistiken schliessen interne
+                 Umsortierungen der Blocklisten nicht ein.
 
 
-        DINFO_TRACE    (7): Liefert die 'trace' Information aus dem
-            Call Stack entsprechend der Spezifikation in <arg2>. Das Resultat
-            ist entweder ein Array (dessen Format nachstehend erlaeutert ist)
-            oder ein druckbarer String. Wird <arg2> weggelasen entspricht
-            dies DIT_CURRENT.
+   DINFO_TRACE    (7): Liefert die 'trace' Information aus dem
+       Call Stack entsprechend der Spezifikation in <arg2>. Das Resultat
+       ist entweder ein Array (dessen Format nachstehend erlaeutert ist)
+       oder ein druckbarer String. Wird <arg2> weggelasen entspricht
+       dies DIT_CURRENT.
 
-            <arg2> == DIT_CURRENT (0): Momentaner Call Trace
-                   == DIT_ERROR   (1): Letzter Fehler Trace (caught oder
-                        uncaught)
-                   == DIT_UNCAUGHT_ERROR (2): Letzer Fehler Trace, der nicht
-                        gefangen werden konnte (uncaught)
+       <arg2> == DIT_CURRENT (0): Momentaner Call Trace
+              == DIT_ERROR   (1): Letzter Fehler Trace (caught oder
+                   uncaught)
+              == DIT_UNCAUGHT_ERROR (2): Letzer Fehler Trace, der nicht
+                   gefangen werden konnte (uncaught)
 
-            Die Information wird in Form eines Array uebergeben.
+       Die Information wird in Form eines Array uebergeben.
 
-            Die Fehlertraces werden nur geaendert, wenn ein entsprechender
-            Fehler auftritt; ausserdem werden sie bei einem GC (Garbage
-            Collection) geloescht. Nach einem Fehler, der nicht gefangen
-            werden konnte (uncaught error), weisen beide Traces auf das
-            gleiche Array, sodass der ==-Operator gilt.
+       Die Fehlertraces werden nur geaendert, wenn ein entsprechender
+       Fehler auftritt; ausserdem werden sie bei einem GC (Garbage
+       Collection) geloescht. Nach einem Fehler, der nicht gefangen
+       werden konnte (uncaught error), weisen beide Traces auf das
+       gleiche Array, sodass der ==-Operator gilt.
 
-            Wenn das Array mehr als ein Element enthaelt, ist das erste
-            Element 0 oder der Name des Objekts, dessen heart_beat() den
-            laufenden Zyklus begonnen hat; alle nachfolgenden Elemente
-            bezeichnen den Call Stack, beginnen mit der hoechsten
-            aufgerufenen Funktion.
+       Wenn das Array mehr als ein Element enthaelt, ist das erste
+       Element 0 oder der Name des Objekts, dessen heart_beat() den
+       laufenden Zyklus begonnen hat; alle nachfolgenden Elemente
+       bezeichnen den Call Stack, beginnen mit der hoechsten
+       aufgerufenen Funktion.
 
-            Alle Eintraege im Array sind wiederum Arrays mit folgenden
-            Elementen:
-              - int[TRACE_TYPE]: Der Typ der aufrufenden Funktion
-                    TRACE_TYPE_SYMBOL (0): ein Funktionssymbol (sollte nicht
-                                           vorkommen)
-                    TRACE_TYPE_SEFUN  (1): eine simul-efun
-                    TRACE_TYPE_EFUN   (2): eine Efun Closure
-                    TRACE_TYPE_LAMBDA (3): eine lambda Closure
-                    TRACE_TYPE_LFUN   (4): eine normale Lfun
-              - int[TRACE_NAME]
-                    _TYPE_EFUN    : entweder der Name der Funktion oder der
-                                    Code einer Operator-Closure
-                    _TYPE_LAMBDA  : die numerische Lambda-ID
-                    _TYPE_LFUN    : der Name der Lfun
-              - string[TRACE_PROGRAM]:  Der Name des Programms mit dem Code
-              - string[TRACE_OBJECT]:   Der Name des Objekts, fuer das der
-                                        Code ausgefuehrt wurde
-              - int[TRACE_LOC]:
-                    _TYPE_LAMBDA  : Der Offset des Programms seit Beginn des
-                                    Closure-Codes
-                    _TYPE_LFUN    : Die Zeilennummer.
+       Alle Eintraege im Array sind wiederum Arrays mit folgenden
+       Elementen:
+         - int[TRACE_TYPE]: Der Typ der aufrufenden Funktion
+               TRACE_TYPE_SYMBOL (0): ein Funktionssymbol (sollte nicht
+                                      vorkommen)
+               TRACE_TYPE_SEFUN  (1): eine simul-efun
+               TRACE_TYPE_EFUN   (2): eine Efun Closure
+               TRACE_TYPE_LAMBDA (3): eine lambda Closure
+               TRACE_TYPE_LFUN   (4): eine normale Lfun
+         - int[TRACE_NAME]
+               _TYPE_EFUN    : entweder der Name der Funktion oder der
+                               Code einer Operator-Closure
+               _TYPE_LAMBDA  : die numerische Lambda-ID
+               _TYPE_LFUN    : der Name der Lfun
+         - string[TRACE_PROGRAM]:  Der Name des Programms mit dem Code
+         - string[TRACE_OBJECT]:   Der Name des Objekts, fuer das der
+                                   Code ausgefuehrt wurde
+         - int[TRACE_LOC]:
+               _TYPE_LAMBDA  : Der Offset des Programms seit Beginn des
+                               Closure-Codes
+               _TYPE_LFUN    : Die Zeilennummer.
 
-            <arg2> == DIT_STR_CURRENT (3): Liefert Informationen ueber den
-                momentanen Call Trace als druckbarer String.
+       <arg2> == DIT_STR_CURRENT (3): Liefert Informationen ueber den
+           momentanen Call Trace als druckbarer String.
 
-            <arg2> == DIT_CURRENT_DEPTH (4): Liefert die Zahl der Frames auf
-                dem Control Stack (Rekursionstiefe).
+       <arg2> == DIT_CURRENT_DEPTH (4): Liefert die Zahl der Frames auf
+           dem Control Stack (Rekursionstiefe).
 
-        DINFO_EVAL_NUMBER (8): gibt die Nummer der aktuellen Berechnung
-            zurueck. Diese Nummer wird fuer jeden vom driver initiierten
-            Aufruf von LPC-Code erhoeht, also bei Aufruf von:
-              - Kommandos (die per add_action hinzugefuegt wurden)
-              - heart_beat, reset, clean_up
-              - Aufrufe durch call_out oder input_to
-              - master applies, die auf externe Ereignisse zurueckgehen
-              - driver hooks genauso
-              - Rueckrufen von send_erq
-              - logon in interaktiven Objekten
+   DINFO_EVAL_NUMBER (8): gibt die Nummer der aktuellen Berechnung
+       zurueck. Diese Nummer wird fuer jeden vom driver initiierten
+       Aufruf von LPC-Code erhoeht, also bei Aufruf von:
+         - Kommandos (die per add_action hinzugefuegt wurden)
+         - heart_beat, reset, clean_up
+         - Aufrufe durch call_out oder input_to
+         - master applies, die auf externe Ereignisse zurueckgehen
+         - driver hooks genauso
+         - Rueckrufen von send_erq
+         - logon in interaktiven Objekten
 
-           Dieser Zaehler kann z.B. benutzt werden, um zu verhindern, dass
-           bestimmte Aktionen mehrfach innerhalb eines heart_beat()
-           ausgefuehrt werden. Eine andere Anwendungsmoeglichkeit sind
-           Zeitstempel zur Sortierung zur Sortierung von Ereignissen.
+      Dieser Zaehler kann z.B. benutzt werden, um zu verhindern, dass
+      bestimmte Aktionen mehrfach innerhalb eines heart_beat()
+      ausgefuehrt werden. Eine andere Anwendungsmoeglichkeit sind
+      Zeitstempel zur Sortierung zur Sortierung von Ereignissen.
 
-           Es ist zu beachten, dass der Zaehler ueberlaufen kann, insbesondere
-           auf 32-bit-Systemen. Er kann demzufolge auch negativ werden.
+      Es ist zu beachten, dass der Zaehler ueberlaufen kann, insbesondere
+      auf 32-bit-Systemen. Er kann demzufolge auch negativ werden.
 
 
 GESCHICHTE
-        Seit 3.2.7 liefert DINFO_STATUS die Information zurueck, anstatt sie
-            nur auszugeben.
-        DINFO_DUMP wurde in 3.2.7 eingefuehrt.
-        LDMud 3.2.8 fuegte die Datengroesse des Objekts zum Resultat von
-            DINFO_MEMORY hinzu, ausserdem die DINFO_DATA Abfrage und die
-            verschiedenen DID_MEM_WASTED Statistiken.
-        LDMud 3.2.9 fuegte DINFO_TRACE, das Indizierungs-Feature von
-            DINFO_DATA, den 'destructed'-DINFO_DUMP, die DID_MEM_CLIB*,
-            die DID_MEM_PERM*, ausserdem DID_ST_OBJECTS_NEWLY_DEST,
-            DID_ST_OBJECTS_DEST, DID_MEM_OVERHEAD, DID_MEM_ALLOCATED,
-            DID_MEM_USED, DID_MEM_TOTAL_UNUSED, DID_ST_HBEAT_CALLS_TOTAL
-            und die found / added / collision Stringstatistiken.
-        LDMud 3.2.10 fuegte die Erzeugungszeit zu DINFO_DUMP:"objects" hinzu,
-            entfernte DID_MEM_UNUSED aus DINFO_DATA:DID_MEMORY, fuegte
-            DINFO_DATA:DID_STATUS DID_ST_BOOT_TIME, DID_ST_MB_FILE und
-            DID_ST_MB_SWAP hinzu und entfernte DID_ST_CALLOUT_SLOTS daraus,
-            fuegte das dritte Argument zu DINFO_OBJLIST hinzu, und veraenderte
-            die Bedeutung von DID_ST_CALLOUT_SIZE und DID_ST_HBEAT_SIZE
-            bzw. _SLOTS.
-        LDMud 3.3.533 fuegte DID_MEM_AVL_NODES zu DINFO_DATA:DID_MEMORY
-            hinzu.
-        LDMud 3.3.603 fuegte DID_MEM_EXT_STATISTICS zu DINFO_DATA:DID_MEMORY
-            hinzu.
-        LDMud 3.3.718 fuegte DIT_CURRENT_DEPTH to DINFO_TRACE hinzu.
-        LDMud 3.3.719 fuegte DINFO_EVAL_NUMBER hinzu.
+==========
+
+   Seit 3.2.7 liefert DINFO_STATUS die Information zurueck, anstatt sie
+       nur auszugeben.
+   DINFO_DUMP wurde in 3.2.7 eingefuehrt.
+   LDMud 3.2.8 fuegte die Datengroesse des Objekts zum Resultat von
+       DINFO_MEMORY hinzu, ausserdem die DINFO_DATA Abfrage und die
+       verschiedenen DID_MEM_WASTED Statistiken.
+   LDMud 3.2.9 fuegte DINFO_TRACE, das Indizierungs-Feature von
+       DINFO_DATA, den 'destructed'-DINFO_DUMP, die DID_MEM_CLIB*,
+       die DID_MEM_PERM*, ausserdem DID_ST_OBJECTS_NEWLY_DEST,
+       DID_ST_OBJECTS_DEST, DID_MEM_OVERHEAD, DID_MEM_ALLOCATED,
+       DID_MEM_USED, DID_MEM_TOTAL_UNUSED, DID_ST_HBEAT_CALLS_TOTAL
+       und die found / added / collision Stringstatistiken.
+   LDMud 3.2.10 fuegte die Erzeugungszeit zu DINFO_DUMP:"objects" hinzu,
+       entfernte DID_MEM_UNUSED aus DINFO_DATA:DID_MEMORY, fuegte
+       DINFO_DATA:DID_STATUS DID_ST_BOOT_TIME, DID_ST_MB_FILE und
+       DID_ST_MB_SWAP hinzu und entfernte DID_ST_CALLOUT_SLOTS daraus,
+       fuegte das dritte Argument zu DINFO_OBJLIST hinzu, und veraenderte
+       die Bedeutung von DID_ST_CALLOUT_SIZE und DID_ST_HBEAT_SIZE
+       bzw. _SLOTS.
+   LDMud 3.3.533 fuegte DID_MEM_AVL_NODES zu DINFO_DATA:DID_MEMORY
+       hinzu.
+   LDMud 3.3.603 fuegte DID_MEM_EXT_STATISTICS zu DINFO_DATA:DID_MEMORY
+       hinzu.
+   LDMud 3.3.718 fuegte DIT_CURRENT_DEPTH to DINFO_TRACE hinzu.
+   LDMud 3.3.719 fuegte DINFO_EVAL_NUMBER hinzu.
+
 
 SIEHE AUCH
-        trace(E), traceprefix(E), malloc(D), status(D), dumpallobj(D)
+==========
+
+   trace(E), traceprefix(E), malloc(D), status(D), dumpallobj(D)
diff --git a/doc/sefun/deep_present b/doc/sefun/deep_present
index 78c0983..c3f673a 100644
--- a/doc/sefun/deep_present
+++ b/doc/sefun/deep_present
@@ -1,21 +1,40 @@
-FUNKTION:
-        object deep_present(string what)
-        object deep_present(object what)
-        object deep_present(string what, object ob)
-        object deep_present(object what, object ob)
 
-ARGUMENTE:
-        what - Objekt oder ID des Objektes, nach dem gesucht werden soll
-        ob - Objekt, in dem gesucht werden soll
+deep_present()
+**************
 
-BESCHREIBUNG:
-        deep_present() sucht in this_object() (oder in ob, falls angegeben)
-        nach dem Objekt what oder einem Objekt, das auf what anspricht.
-        Im Gegensatz zu present() wird aber das komplette Inventory berueck-
-        sichtigt (also zB. auch der Inhalt von Beuteln).
 
-RUECKGABEWERT:
-        das gefundene Objekt oder 0
+FUNKTION
+========
 
-SIEHE AUCH:
-        present(E)
+   object deep_present(string what)
+   object deep_present(object what)
+   object deep_present(string what, object ob)
+   object deep_present(object what, object ob)
+
+
+ARGUMENTE
+=========
+
+   what - Objekt oder ID des Objektes, nach dem gesucht werden soll
+   ob - Objekt, in dem gesucht werden soll
+
+
+BESCHREIBUNG
+============
+
+   deep_present() sucht in this_object() (oder in ob, falls angegeben)
+   nach dem Objekt what oder einem Objekt, das auf what anspricht.
+   Im Gegensatz zu present() wird aber das komplette Inventory berueck-
+   sichtigt (also zB. auch der Inhalt von Beuteln).
+
+
+RUECKGABEWERT
+=============
+
+   das gefundene Objekt oder 0
+
+
+SIEHE AUCH
+==========
+
+   present(E)
diff --git a/doc/sefun/dtime b/doc/sefun/dtime
index 6624642..dac7dd0 100644
--- a/doc/sefun/dtime
+++ b/doc/sefun/dtime
@@ -1,24 +1,49 @@
-FUNKTION:
-	string dtime(int time)
 
-ARGUMENTE:
-	time - Umzuwandelndes Datum in Sekunden seit 1.1.1970, 0:0:0h
+dtime()
+*******
 
-BESCHREIBUNG:
-	Wandelt das Datum time in einen deutschsprachigen String der Form
-	"<wtag>, <tag>. <mon> <jahr>, <std>:<min>:<sek>" um.
 
-RUECKGABEWERT:
-	Der String mit dem umgewandelten Datum.
+FUNKTION
+========
 
-BEMERKUNGEN:
-	Als time wird meistens das Ergebnis von time() benutzt.
-  strftime() stellt eine wesentlich flexiblere Moeglichkeit der Ausgabe von
-  Zeiten dar.
+   string dtime(int time)
 
-BEISPIELE:
-	datum = dtime(time());
-        => datum = "Mon,  6. Mar 1994, 15:00:08"
 
-SIEHE AUCH:
-	ctime(E), strftime(E), time(E)
+ARGUMENTE
+=========
+
+   time - Umzuwandelndes Datum in Sekunden seit 1.1.1970, 0:0:0h
+
+
+BESCHREIBUNG
+============
+
+   Wandelt das Datum time in einen deutschsprachigen String der Form
+   "<wtag>, <tag>. <mon> <jahr>, <std>:<min>:<sek>" um.
+
+
+RUECKGABEWERT
+=============
+
+   Der String mit dem umgewandelten Datum.
+
+
+BEMERKUNGEN
+===========
+
+         Als time wird meistens das Ergebnis von time() benutzt.
+   strftime() stellt eine wesentlich flexiblere Moeglichkeit der Ausgabe von
+   Zeiten dar.
+
+
+BEISPIELE
+=========
+
+   datum = dtime(time());
+   => datum = "Mon,  6. Mar 1994, 15:00:08"
+
+
+SIEHE AUCH
+==========
+
+   ctime(E), strftime(E), time(E)
diff --git a/doc/sefun/dump_netdead b/doc/sefun/dump_netdead
index c73b2c0..b5b480a 100644
--- a/doc/sefun/dump_netdead
+++ b/doc/sefun/dump_netdead
@@ -1,13 +1,29 @@
-FUNKTION:
-        string *dump_netdead()
 
-BESCHREIBUNG:
-        Gibt ein Array mit den Namen aller zur Zeit netztoten Spieler
-        zurueck.
+dump_netdead()
+**************
 
-RUECKGABEWERT:
-        Ein Stringarray mit den Namen der netztoten Spieler.
-        gibt.
 
-SIEHE AUCH:
-        find_netdead(E)
+FUNKTION
+========
+
+   string *dump_netdead()
+
+
+BESCHREIBUNG
+============
+
+   Gibt ein Array mit den Namen aller zur Zeit netztoten Spieler
+   zurueck.
+
+
+RUECKGABEWERT
+=============
+
+   Ein Stringarray mit den Namen der netztoten Spieler.
+   gibt.
+
+
+SIEHE AUCH
+==========
+
+   find_netdead(E)
diff --git a/doc/sefun/enable_commands b/doc/sefun/enable_commands
index 6508b5f..593fb31 100644
--- a/doc/sefun/enable_commands
+++ b/doc/sefun/enable_commands
@@ -1,26 +1,42 @@
+
+enable_commands()
+*****************
+
+
 SYNOPSIS
-        void enable_commands();
+========
+
+   void enable_commands();
+
 
 BESCHREIBUNG
-        Erlaubt dem Objekt, Kommandos zu verwenden, die normalerweise Usern
-        zugaenglich sind. Der Aufruf markiert das Objekt als "living". Dies
-        wird fuer Spieler und alle von /std/npc abgeleiteten Objekte
-        bereits von der Mudlib erledigt und sollte nicht nochmals gemacht
-        werden.
+============
 
-        Diese Funktion darf nicht ausserhalb von create() (oder reset(0) im
-        Compat-Modus) aufgerufen werden, weil der Kommandogeber auf dieses
-        Objekt gesetzt wird.
+   Erlaubt dem Objekt, Kommandos zu verwenden, die normalerweise Usern
+   zugaenglich sind. Der Aufruf markiert das Objekt als "living". Dies
+   wird fuer Spieler und alle von /std/npc abgeleiteten Objekte
+   bereits von der Mudlib erledigt und sollte nicht nochmals gemacht
+   werden.
+
+   Diese Funktion darf nicht ausserhalb von create() (oder reset(0) im
+   Compat-Modus) aufgerufen werden, weil der Kommandogeber auf dieses
+   Objekt gesetzt wird.
+
 
 BEISPIEL
-        void create()
-        {
-            enable_commands();
-            ...
-        }
+========
 
-        Dies markiert das Objekt als "living".
+   void create()
+   {
+       enable_commands();
+       ...
+   }
+
+   Dies markiert das Objekt als "living".
+
 
 SIEHE AUCH
-        command(E), living(E), disable_commands(E), native(C), hooks(C)
-        set_living_name(E)
+==========
+
+   command(E), living(E), disable_commands(E), native(C), hooks(C)
+   set_living_name(E)
diff --git a/doc/sefun/file_time b/doc/sefun/file_time
index 6c24baa..ddaefce 100644
--- a/doc/sefun/file_time
+++ b/doc/sefun/file_time
@@ -1,5 +1,13 @@
-FUNKTION:
-	int file_time(string filename);
 
-Liefert den Zeitpunkt der letzten Modifikation des Files in Sekunden seit
-dem 1.1.1970, 0:00. Kann per ctime() in ein lesbares Format gebracht werden.
+file_time()
+***********
+
+
+FUNKTION
+========
+
+   int file_time(string filename);
+
+Liefert den Zeitpunkt der letzten Modifikation des Files in Sekunden
+seit dem 1.1.1970, 0:00. Kann per ctime() in ein lesbares Format
+gebracht werden.
diff --git a/doc/sefun/find_living b/doc/sefun/find_living
index 106dd63..5930695 100644
--- a/doc/sefun/find_living
+++ b/doc/sefun/find_living
@@ -1,22 +1,42 @@
-SYNOPSIS:
-        object find_living(string str)
 
-BESCHREIBUNG:
-        Findet das erste "lebende" Objekt, welches per set_living_name() den
-        Namen <str> setzte.
-        
-        Das Objekt muss ausserdem per enable_commands() als Lebewesen
-        markiert worden sein. Dies ist fuer alle von /std/npc erbenden NPCs
-        _automatisch_ der Fall und sollte daher nicht nochmal explizit gemacht
-        werden.
+find_living()
+*************
 
-BEISPIEL:
-        object ob;
-        ob = find_living("Public Enemy");
 
-SIEHE AUCH:
-        find_player(E), enable_commands(E), set_living_name(E)
+SYNOPSIS
+========
 
-LETZTE AeNDERUNG:
+   object find_living(string str)
+
+
+BESCHREIBUNG
+============
+
+   Findet das erste "lebende" Objekt, welches per set_living_name() den
+   Namen <str> setzte.
+
+
+
+   Das Objekt muss ausserdem per enable_commands() als Lebewesen
+   markiert worden sein. Dies ist fuer alle von /std/npc erbenden NPCs
+   _automatisch_ der Fall und sollte daher nicht nochmal explizit gemacht
+   werden.
+
+
+BEISPIEL
+========
+
+   object ob;
+   ob = find_living("Public Enemy");
+
+
+SIEHE AUCH
+==========
+
+   find_player(E), enable_commands(E), set_living_name(E)
+
+
+LETZTE AeNDERUNG
+================
+
 09.10.2011, Zesstra
-
diff --git a/doc/sefun/find_livings b/doc/sefun/find_livings
index cc9228f..7f8f9b1 100644
--- a/doc/sefun/find_livings
+++ b/doc/sefun/find_livings
@@ -1,24 +1,49 @@
-FUNKTION:
-        object *find_livings(string name)
 
-ARGUMENTE:
-        name - der living_name der gesuchten Lebewesen
+find_livings()
+**************
 
-BESCHREIBUNG:
-        Diese Funktion liefert ein Array mit allen Lebewesen, die den gleichen
-        living_name haben.
 
-RUECKGABEWERT:
-        Array mit den Lebewesen oder 0, wenn es kein Lebewesen diesen Namens
-        gibt.
+FUNKTION
+========
 
-BEISPIELE:
-        ob = find_livings("herkules");
-        => ob = ({ [/human:herkules], 
-                   [/d/inseln/wargon/luftschloss/mon/herkules] })
+   object *find_livings(string name)
 
-SIEHE AUCH:
-        find_living(E), set_living_name(E), find_player(E), find_netdead(E)
 
-LETZTE AENDERUNG:
+ARGUMENTE
+=========
+
+   name - der living_name der gesuchten Lebewesen
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion liefert ein Array mit allen Lebewesen, die den gleichen
+   living_name haben.
+
+
+RUECKGABEWERT
+=============
+
+   Array mit den Lebewesen oder 0, wenn es kein Lebewesen diesen Namens
+   gibt.
+
+
+BEISPIELE
+=========
+
+   ob = find_livings("herkules");
+   => ob = ({ [/human:herkules],
+              [/d/inseln/wargon/luftschloss/mon/herkules] })
+
+
+SIEHE AUCH
+==========
+
+   find_living(E), set_living_name(E), find_player(E), find_netdead(E)
+
+
+LETZTE AENDERUNG
+================
+
 19. Okt. 2015, Arathorn
diff --git a/doc/sefun/find_netdead b/doc/sefun/find_netdead
index d44ee9e..8686436 100644
--- a/doc/sefun/find_netdead
+++ b/doc/sefun/find_netdead
@@ -1,25 +1,46 @@
-FUNKTION:
-        object find_netdead(string name)
 
-ARGUMENTE:
-        name - Name des gesuchten Spielers
-
-BESCHREIBUNG:
-        Falls der Spieler name netztot ist, liefert diese Funktion das Spieler-
-        objekt zurueck.
-
-        Akzeptiert auch die UUID statt einer UID. In diesem Fall erfolgt aber
-        nur eine Pruefung, ob die UID des gefundenen Spielers zur angegebenen
-        UUID passt (d.h. "jof_-1" wuerde dann ggf. auch das Spielerobjekt Jof
-        zurueckliefern, wenn das die UUID "Jof_1234" hat).
+find_netdead()
+**************
 
 
-RUECKGABEWERT:
-        Der netztote Spieler oder 0, falls es keinen Netztoten diesen Namens
-        gibt.
+FUNKTION
+========
 
-SIEHE AUCH:
-        find_living(E), find_player(E)
+   object find_netdead(string name)
 
-LETZT AeNDERUNG:
+
+ARGUMENTE
+=========
+
+   name - Name des gesuchten Spielers
+
+
+BESCHREIBUNG
+============
+
+   Falls der Spieler name netztot ist, liefert diese Funktion das Spieler-
+   objekt zurueck.
+
+   Akzeptiert auch die UUID statt einer UID. In diesem Fall erfolgt aber
+   nur eine Pruefung, ob die UID des gefundenen Spielers zur angegebenen
+   UUID passt (d.h. "jof_-1" wuerde dann ggf. auch das Spielerobjekt Jof
+   zurueckliefern, wenn das die UUID "Jof_1234" hat).
+
+
+RUECKGABEWERT
+=============
+
+   Der netztote Spieler oder 0, falls es keinen Netztoten diesen Namens
+   gibt.
+
+
+SIEHE AUCH
+==========
+
+   find_living(E), find_player(E)
+
+
+LETZT AeNDERUNG
+===============
+
 06.01.2009, Zesstra
diff --git a/doc/sefun/find_player b/doc/sefun/find_player
index 57c85f3..048b105 100644
--- a/doc/sefun/find_player
+++ b/doc/sefun/find_player
@@ -1,42 +1,60 @@
-FUNKTION:
-        object find_player(string uid)
 
-BESCHREIBUNG:
-        Findet den Spieler mit dem Namen bzw. der User-ID <uid>.
-        
-        Akzeptiert auch die UUID statt einer UID. In diesem Fall erfolgt aber
-        nur eine Pruefung, ob die UID des gefundenen Spielers zur angegebenen
-        UUID passt (d.h. "jof_-1" wuerde dann ggf. auch das Spielerobjekt Jof
-        zurueckliefern, wenn das die UUID "Jof_1234" hat).
+find_player()
+*************
 
-        Rueckgabewert ist das Spielerobjekt (wenn Spieler anwesend),
-        ansonsten 0.
 
-BEISPIEL:
+FUNKTION
+========
 
-        object ob;
-        ob = find_player("deepthought");
+   object find_player(string uid)
 
-        if(ob)
-          tell_object(ob,"Tach Du!\n");
 
-        oder auch 
+BESCHREIBUNG
+============
 
-        if(ob = find_player("deepthought"))
-          tell_object(ob,"Tach Du!\n");
+   Findet den Spieler mit dem Namen bzw. der User-ID <uid>.
 
-ANMERKUNGEN:
 
-        Via find_player() werden auch unsichtbare Magier gefunden. In 
-        Objekten, die fuer Spieler gedacht sind, muss dies dann extra
-        per Abfrage auf if(ob->QueryProp(P_INVIS)) getestet werden.
 
-        Netztote Spieler und Monster werden nicht gefunden da find_player
-        den Namen aus set_living_name() verwendet, der in player.c ge-
-        setzt wird.
-        
-SIEHE AUCH:
-        find_living(E), set_living_name(E), find_object(E), find_netdead(E)
+   Akzeptiert auch die UUID statt einer UID. In diesem Fall erfolgt aber
+   nur eine Pruefung, ob die UID des gefundenen Spielers zur angegebenen
+   UUID passt (d.h. "jof_-1" wuerde dann ggf. auch das Spielerobjekt Jof
+   zurueckliefern, wenn das die UUID "Jof_1234" hat).
 
-----------------------------------------------------------------------------
-Letzte Aenderung: 06.01.2009, Zesstra 
+   Rueckgabewert ist das Spielerobjekt (wenn Spieler anwesend),
+   ansonsten 0.
+
+
+BEISPIEL
+========
+
+   object ob;
+   ob = find_player("deepthought");
+
+   if(ob)
+     tell_object(ob,"Tach Du!\n");
+
+   oder auch
+
+   if(ob = find_player("deepthought"))
+     tell_object(ob,"Tach Du!\n");
+
+
+ANMERKUNGEN
+===========
+
+   Via find_player() werden auch unsichtbare Magier gefunden. In
+   Objekten, die fuer Spieler gedacht sind, muss dies dann extra
+   per Abfrage auf if(ob->QueryProp(P_INVIS)) getestet werden.
+
+   Netztote Spieler und Monster werden nicht gefunden da find_player
+   den Namen aus set_living_name() verwendet, der in player.c ge-
+   setzt wird.
+
+
+SIEHE AUCH
+==========
+
+   find_living(E), set_living_name(E), find_object(E), find_netdead(E)
+
+Letzte Aenderung: 06.01.2009, Zesstra
diff --git a/doc/sefun/getuuid b/doc/sefun/getuuid
index 5b34343..63ea31e 100644
--- a/doc/sefun/getuuid
+++ b/doc/sefun/getuuid
@@ -1,17 +1,29 @@
-SYNOPSIS:
-    string getuuid(object ob)
 
-DESCRIPTION:
-    Liefert eine eindeutige (get unique uid) UID fuer einen Spieler.
-    Wird zusammengesetzt aus der UID des Spielers und seinem
-    Erstlogin-Datum.
+getuuid()
+*********
 
-    Nach einer Selbstloeschung und neuem Login erhaelt der Spieler eine
-    neue UUID, bei einer Restaurierung behaelt er seine alte UUID.
 
-    Wenn die Funktion ohne Parameter aufgerufen wird, wird per Default
-    this_object() genommen.
-    
+SYNOPSIS
+========
 
-SEE ALSO:
-        getuid(E)
+   string getuuid(object ob)
+
+
+DESCRIPTION
+===========
+
+   Liefert eine eindeutige (get unique uid) UID fuer einen Spieler.
+   Wird zusammengesetzt aus der UID des Spielers und seinem
+   Erstlogin-Datum.
+
+   Nach einer Selbstloeschung und neuem Login erhaelt der Spieler eine
+   neue UUID, bei einer Restaurierung behaelt er seine alte UUID.
+
+   Wenn die Funktion ohne Parameter aufgerufen wird, wird per Default
+   this_object() genommen.
+
+
+SEE ALSO
+========
+
+   getuid(E)
diff --git a/doc/sefun/iso2ascii b/doc/sefun/iso2ascii
index fe7757a..bd64d73 100644
--- a/doc/sefun/iso2ascii
+++ b/doc/sefun/iso2ascii
@@ -1,17 +1,32 @@
-FUNKTION:
-	public string iso2ascii( string str );
 
-ARGUMENTE:
-	str
-	  String, in welchem Zeichen ersetzt werden sollen.
+iso2ascii()
+***********
 
-BESCHREIBUNG:
-	In dem String werden alle Nicht-ASCII-Zeichen durch ASCII-Zeichen
-	ersetzt, und zwar Umlaute in der bekannten Form und alle anderen
-	durch ein Fragezeichen.
 
-RUeCKGABEWERT:
-	String mit ASCII-Zeichen.
+FUNKTION
+========
 
-----------------------------------------------------------------------------
+   public string iso2ascii( string str );
+
+
+ARGUMENTE
+=========
+
+   str
+     String, in welchem Zeichen ersetzt werden sollen.
+
+
+BESCHREIBUNG
+============
+
+   In dem String werden alle Nicht-ASCII-Zeichen durch ASCII-Zeichen
+   ersetzt, und zwar Umlaute in der bekannten Form und alle anderen
+   durch ein Fragezeichen.
+
+
+RUeCKGABEWERT
+=============
+
+   String mit ASCII-Zeichen.
+
 Last modified: Fri Jul  6 19:36:09 2001 by Patryn
diff --git a/doc/sefun/log_file b/doc/sefun/log_file
index 6cdab31..a3f3cab 100644
--- a/doc/sefun/log_file
+++ b/doc/sefun/log_file
@@ -1,35 +1,59 @@
-FUNKTION:
-	int log_file(string file, string text)
-  int log_file(string file, string text, int size_to_break)
 
-ARGUMENTE:
-	file - Name der Datei, in die geschrieben werden soll
-	text - Der Text, der geschrieben werden soll
-	size_to_break - Groesse, ab der ein neues File begonnen wird (optional)
+log_file()
+**********
 
-BESCHREIBUNG:
-	log_file schreibt den Text text in die Datei /log/file.
-	Sollte file schon mit einem /log/ beginnen, wird kein erneutes /log/ davor
-	eingefuegt.
 
-RUECKGABEWERT:
-	1 bei Erfolg oder 0, falls ein Fehler beim Schreiben auftrat.
+FUNKTION
+========
 
-BEMERKUNGEN:
-	Wenn die Groesse von file vor dem Schreiben 50000 Bytes ueberschreitet,
-	wird sie in file.old umbenannt. Eine schon vorhandene Datei file.old
-	wird dabei geloescht. Der Text wird nach dem Umbenennen geschrieben.
-	Wird 'size_to_break' angegeben und ist dies > 0, wird dieser Wert (in 
-	Bytes) statt der 50000 Bytes zum Rotieren des Logfiles benutzt.
+         int log_file(string file, string text)
+   int log_file(string file, string text, int size_to_break)
 
-BEISPIELE:
-	log_file( "report/wargon.rep", "TYPO von bla in blubb:\ntest\n");
-	In /log/report/wargon.rep finde ich nun die neueste Typomeldung... ;)
-	log_file( "/log/report/wargon.rep", "TYPO von bla in blubb:\ntest\n");
-	Gleiches Ergebnis. ;-)
 
-SIEHE AUCH:
-	write_file(E)
+ARGUMENTE
+=========
+
+   file - Name der Datei, in die geschrieben werden soll
+   text - Der Text, der geschrieben werden soll
+   size_to_break - Groesse, ab der ein neues File begonnen wird (optional)
+
+
+BESCHREIBUNG
+============
+
+   log_file schreibt den Text text in die Datei /log/file.
+   Sollte file schon mit einem /log/ beginnen, wird kein erneutes /log/ davor
+   eingefuegt.
+
+
+RUECKGABEWERT
+=============
+
+   1 bei Erfolg oder 0, falls ein Fehler beim Schreiben auftrat.
+
+
+BEMERKUNGEN
+===========
+
+   Wenn die Groesse von file vor dem Schreiben 50000 Bytes ueberschreitet,
+   wird sie in file.old umbenannt. Eine schon vorhandene Datei file.old
+   wird dabei geloescht. Der Text wird nach dem Umbenennen geschrieben.
+   Wird 'size_to_break' angegeben und ist dies > 0, wird dieser Wert (in
+   Bytes) statt der 50000 Bytes zum Rotieren des Logfiles benutzt.
+
+
+BEISPIELE
+=========
+
+   log_file( "report/wargon.rep", "TYPO von bla in blubb:\ntest\n");
+   In /log/report/wargon.rep finde ich nun die neueste Typomeldung... ;)
+   log_file( "/log/report/wargon.rep", "TYPO von bla in blubb:\ntest\n");
+   Gleiches Ergebnis. ;-)
+
+
+SIEHE AUCH
+==========
+
+   write_file(E)
 
 29.01.2017, Zesstra
-
diff --git a/doc/sefun/lowerchar b/doc/sefun/lowerchar
index 0ec62bf..8e6cfdd 100644
--- a/doc/sefun/lowerchar
+++ b/doc/sefun/lowerchar
@@ -1,20 +1,42 @@
-FUNKTION:
-	int lowerchar(int char)
 
-ARGUMENTE:
-	char - Das umzuwandelnde Zeichen
+lowerchar()
+***********
 
-BESCHREIBUNG:
-	Wenn char ein Grossbuchstabe ist, so wird es in einen Kleinbuchstaben
-	umgewandelt. Andere Zeichen werden von dieser Funktion nicht beein-
-        flusst.
 
-RUECKGABEWERT:
-	Das umgewandelte Zeichen.
+FUNKTION
+========
 
-BEISPIELE:
-	printf("%c\n", lowerchar('A')); => a
-	printf("%c\n", lowerchar('1')); => 1
+   int lowerchar(int char)
 
-SIEHE AUCH:
-	lower_case(E), lowerstring(E), upperstring(E), capitalize(E)
+
+ARGUMENTE
+=========
+
+   char - Das umzuwandelnde Zeichen
+
+
+BESCHREIBUNG
+============
+
+   Wenn char ein Grossbuchstabe ist, so wird es in einen Kleinbuchstaben
+   umgewandelt. Andere Zeichen werden von dieser Funktion nicht beein-
+   flusst.
+
+
+RUECKGABEWERT
+=============
+
+   Das umgewandelte Zeichen.
+
+
+BEISPIELE
+=========
+
+   printf("%c\n", lowerchar('A')); => a
+   printf("%c\n", lowerchar('1')); => 1
+
+
+SIEHE AUCH
+==========
+
+   lower_case(E), lowerstring(E), upperstring(E), capitalize(E)
diff --git a/doc/sefun/lowerstring b/doc/sefun/lowerstring
index 30748fc..a483224 100644
--- a/doc/sefun/lowerstring
+++ b/doc/sefun/lowerstring
@@ -1,20 +1,45 @@
-FUNKTION:
-	string lowerstring(string str)
 
-ARGUMENTE:
-	str - Der umzuwandelnde String.
+lowerstring()
+*************
 
-BESCHREIBUNG:
-	Alle Grossbuchstaben in str werden in Kleinbuchstaben umgewandelt.
 
-RUECKGABEWERT:
-	Der umgewandelte String.
+FUNKTION
+========
 
-BEMERKUNGEN:
-	lowerstring ist mit lower_case identisch!
+   string lowerstring(string str)
 
-BEISPIELE:
-	s = lowerstring("So, McLaud...\n"); => s = "so, mclaud...\n"
 
-SIEHE AUCH:
-	lower_case(E), lowerchar(E), upperstring(E), capitalize(E)
+ARGUMENTE
+=========
+
+   str - Der umzuwandelnde String.
+
+
+BESCHREIBUNG
+============
+
+   Alle Grossbuchstaben in str werden in Kleinbuchstaben umgewandelt.
+
+
+RUECKGABEWERT
+=============
+
+   Der umgewandelte String.
+
+
+BEMERKUNGEN
+===========
+
+   lowerstring ist mit lower_case identisch!
+
+
+BEISPIELE
+=========
+
+   s = lowerstring("So, McLaud...\n"); => s = "so, mclaud...\n"
+
+
+SIEHE AUCH
+==========
+
+   lower_case(E), lowerchar(E), upperstring(E), capitalize(E)
diff --git a/doc/sefun/m_copy_delete b/doc/sefun/m_copy_delete
index cb1c97b..9aa90f2 100644
--- a/doc/sefun/m_copy_delete
+++ b/doc/sefun/m_copy_delete
@@ -1,43 +1,68 @@
-FUNKTION:
-	mapping m_copy_delete(mapping map, mixed key)
 
-ARGUMENTE:
-	map - das Mapping, aus dem geloescht werden soll.
-	key - der zu loeschende Eintrag
+m_copy_delete()
+***************
 
-BESCHREIBUNG:
-	Aus dem Mapping map wird der Eintrag key geloescht (wenn er in map vor-
-	handen ist). map wird dabei nicht veraendert.
 
-RUECKGABEWERT:
-	Eine (flache !) Kopie von map ohne den Eintrag key, d.h. enthaltene
-	Mappings/Arrays werden nicht kopiert.
+FUNKTION
+========
 
-BEMERKUNGEN:
-	Das urspruengliche Mapping wird bei dieser Operation nicht veraendert!
-	Wenn man nur einen Wert aus dem Mapping loeschen will und die Kopie nicht
-	braucht, bietet sich efun::m_delete(mapping,key) sehr an, da die Erstellung
-  einer Kopie sehr aufwendig sein kann.
+   mapping m_copy_delete(mapping map, mixed key)
 
-BEISPIELE:
-	mapping m1, m2;
 
-        m1 = ([ "a":1, "b":2, "c":3 ]);
+ARGUMENTE
+=========
 
-        m2 = m_copy_delete(m1, "b");
-           => m1 = ([ "a":1, "b":2, "c":3 ])
-	      m2 = ([ "a":1, "c":3 ])
+   map - das Mapping, aus dem geloescht werden soll.
+   key - der zu loeschende Eintrag
 
-        m_copy_delete(m1, "a");
-           => (es hat sich nichts geaendert)
 
-        m1 = m_copy_delete(m1, "a");
-           => m1 = ([ "b":2, "c":3 ])
+BESCHREIBUNG
+============
 
-        Im letzten Fall sollte aber besser efun::m_delete(m1, "a") benutzt 
-        werden, da ansonsten das Mapping unnoetig kopiert wird und Rechen-
-        leistung frisst. 
+   Aus dem Mapping map wird der Eintrag key geloescht (wenn er in map vor-
+   handen ist). map wird dabei nicht veraendert.
 
-SIEHE AUCH:
-  efun::m_delete(E), mappingp(E), mkmapping(E), m_indices,(E) m_values(E),
-  sizeof(E), widthof(E)
+
+RUECKGABEWERT
+=============
+
+   Eine (flache !) Kopie von map ohne den Eintrag key, d.h. enthaltene
+   Mappings/Arrays werden nicht kopiert.
+
+
+BEMERKUNGEN
+===========
+
+         Das urspruengliche Mapping wird bei dieser Operation nicht veraendert!
+         Wenn man nur einen Wert aus dem Mapping loeschen will und die Kopie nicht
+         braucht, bietet sich efun::m_delete(mapping,key) sehr an, da die Erstellung
+   einer Kopie sehr aufwendig sein kann.
+
+
+BEISPIELE
+=========
+
+   mapping m1, m2;
+
+   m1 = ([ "a":1, "b":2, "c":3 ]);
+
+   m2 = m_copy_delete(m1, "b");
+      => m1 = ([ "a":1, "b":2, "c":3 ])
+         m2 = ([ "a":1, "c":3 ])
+
+   m_copy_delete(m1, "a");
+      => (es hat sich nichts geaendert)
+
+   m1 = m_copy_delete(m1, "a");
+      => m1 = ([ "b":2, "c":3 ])
+
+   Im letzten Fall sollte aber besser efun::m_delete(m1, "a") benutzt
+   werden, da ansonsten das Mapping unnoetig kopiert wird und Rechen-
+   leistung frisst.
+
+
+SIEHE AUCH
+==========
+
+   efun::m_delete(E), mappingp(E), mkmapping(E), m_indices,(E) m_values(E),
+   sizeof(E), widthof(E)
diff --git a/doc/sefun/match_living b/doc/sefun/match_living
index 44801a8..5cb347b 100644
--- a/doc/sefun/match_living
+++ b/doc/sefun/match_living
@@ -1,30 +1,52 @@
+
+match_living()
+**************
+
 match_living(sefun)
-FUNKTION:
-     varargs mixed match_living( string str, int players_only,
-				 string *exclude)
-
-ARGUMENTE:
-     string str		- Kuerzel, nach dem die living_names durchsucht
-			  werden soll
-     int players_only	- 1, um nur Spieler (Interactives) zu suchen
-     string *exlude	- welche Namen sollen ignoriert werden
 
 
-BESCHREIBUNG:
-     Sucht alle Lebewesen, deren Namen mit str beginnen.
+FUNKTION
+========
 
-RUECKGABEWERT:
-     Ein String, falls es ein Lebewesen mit dem Namen str gibt (der Name
-     muss genau passen).
-     -1, wenn es mehrere Lebewesen gibt, deren Namen mit str beginnen.
-     -2, wenn es kein Lebewesen gibt, dessen Name mit str beginnt.
+   varargs mixed match_living( string str, int players_only,
+                               string *exclude)
 
-BEISPIELE:
-     match_living("wargon"); => "wargon", wenn Wargon eingeloggt ist.
-     match_living("war");    => "wargon", wenn es kein anderes Lebewesen
-                                gibt, dessen Name mit "war" beginnt.
 
-SIEHE AUCH:
-     find_living(E), find_player(E), find_netdead(E)
+ARGUMENTE
+=========
+
+   string str         - Kuerzel, nach dem die living_names durchsucht
+                        werden soll
+   int players_only   - 1, um nur Spieler (Interactives) zu suchen
+   string *exlude     - welche Namen sollen ignoriert werden
+
+
+BESCHREIBUNG
+============
+
+   Sucht alle Lebewesen, deren Namen mit str beginnen.
+
+
+RUECKGABEWERT
+=============
+
+   Ein String, falls es ein Lebewesen mit dem Namen str gibt (der Name
+   muss genau passen).
+   -1, wenn es mehrere Lebewesen gibt, deren Namen mit str beginnen.
+   -2, wenn es kein Lebewesen gibt, dessen Name mit str beginnt.
+
+
+BEISPIELE
+=========
+
+   match_living("wargon"); => "wargon", wenn Wargon eingeloggt ist.
+   match_living("war");    => "wargon", wenn es kein anderes Lebewesen
+                              gibt, dessen Name mit "war" beginnt.
+
+
+SIEHE AUCH
+==========
+
+   find_living(E), find_player(E), find_netdead(E)
 
 27. Mai 2004 Gloinson
diff --git a/doc/sefun/md5 b/doc/sefun/md5
index 1e65090..f48dcc8 100644
--- a/doc/sefun/md5
+++ b/doc/sefun/md5
@@ -1,30 +1,52 @@
+
+md5()
+*****
+
+
 DEPRECATED
+==========
+
+
 SYNOPSIS
-        string md5 (string arg [ , int iterations ] )
-        string md5 (int *  arg [ , int iterations ] )
+========
+
+   string md5 (string arg [ , int iterations ] )
+   string md5 (int *  arg [ , int iterations ] )
+
 
 BESCHREIBUNG
-        Berechnet den MD5-Hashwert von <arg>.
-        Das Argument kann ein String, oder ein Array von Zahlen sein (von
-        welchen nur das unterste Byte betrachted wird).
+============
 
-        Das Ergebnis wird als 32-stelliger Hexadezimalwert geliefert.
+   Berechnet den MD5-Hashwert von <arg>.
+   Das Argument kann ein String, oder ein Array von Zahlen sein (von
+   welchen nur das unterste Byte betrachted wird).
 
-        Ist das <iterations> Argument eine Zahl groesser 0, berechnet der
-        Driver den Digest mit diese Anzahl an Wiederholungen. Fehlt die
-        Angabe, fuehrt der Driver die Digest-Berechnung einmal aus.
+   Das Ergebnis wird als 32-stelliger Hexadezimalwert geliefert.
+
+   Ist das <iterations> Argument eine Zahl groesser 0, berechnet der
+   Driver den Digest mit diese Anzahl an Wiederholungen. Fehlt die
+   Angabe, fuehrt der Driver die Digest-Berechnung einmal aus.
+
 
 BEISPIEL
-        string s;
+========
 
-        s = md5("Hallo");
-        s = md5( ({ 'H', 'e', 'l', 'l', 'o' }) )
-        s = md5( ({ 'H', 'e', 'l', 'l', 'o' }), 2 )
+   string s;
+
+   s = md5("Hallo");
+   s = md5( ({ 'H', 'e', 'l', 'l', 'o' }) )
+   s = md5( ({ 'H', 'e', 'l', 'l', 'o' }), 2 )
+
 
 AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.9
-        LDMud 3.2.12 fuehrte Zaehlenarrays als Argument ein, also auch
-          die Anzahl der Wiederholungen.
+===========
+
+   Eingefuehrt in LDMud 3.2.9
+   LDMud 3.2.12 fuehrte Zaehlenarrays als Argument ein, also auch
+     die Anzahl der Wiederholungen.
+
 
 SIEHE AUCH
-        crypt(E), md5_crypt(E), sha1(E), hash(E), hmac(E)
+==========
+
+   crypt(E), md5_crypt(E), sha1(E), hash(E), hmac(E)
diff --git a/doc/sefun/mkdirp b/doc/sefun/mkdirp
index a05d4e6..2bb9d06 100644
--- a/doc/sefun/mkdirp
+++ b/doc/sefun/mkdirp
@@ -1,21 +1,42 @@
-FUNKTION:
-        int mkdirp(string dir)
 
-ARGUMENTE:
-        dir - Name des zu erstellenden Verzeichnisses (absolut)
+mkdirp()
+********
 
-BESCHREIBUNG:
-        Erzeugt das Verzeichnis <dir>. Dies muss als abs. Pfad angegeben
-        werden.
-        Wenn noetig, wird die ganze Verzeichnishierarchie rekursiv erstellt.
-        
-RUECKGABEWERT:
-        0 - Verzeichnis konnte nicht erstellt werden
-        1 - Verzeichnis wurde erstellt oder existierte bereits
 
-SIEHE AUCH:
-        mkdir(E)
+FUNKTION
+========
 
-LETZT AeNDERUNG:
+   int mkdirp(string dir)
+
+
+ARGUMENTE
+=========
+
+   dir - Name des zu erstellenden Verzeichnisses (absolut)
+
+
+BESCHREIBUNG
+============
+
+   Erzeugt das Verzeichnis <dir>. Dies muss als abs. Pfad angegeben
+   werden.
+   Wenn noetig, wird die ganze Verzeichnishierarchie rekursiv erstellt.
+
+
+RUECKGABEWERT
+=============
+
+   0 - Verzeichnis konnte nicht erstellt werden
+   1 - Verzeichnis wurde erstellt oder existierte bereits
+
+
+SIEHE AUCH
+==========
+
+   mkdir(E)
+
+
+LETZT AeNDERUNG
+===============
+
 26.01.2013, Zesstra
-
diff --git a/doc/sefun/notify_fail b/doc/sefun/notify_fail
index 1970367..85b700a 100644
--- a/doc/sefun/notify_fail
+++ b/doc/sefun/notify_fail
@@ -1,85 +1,107 @@
-FUNKTION:
-     #include <notify_fail.h>
 
-     varargs void notify_fail(string str, int prio)
-     varargs void notify_fail(closure cl, int prio)
+notify_fail()
+*************
 
-ARGUMENTE:
-     str   Meldung die an den Spieler anstatt des 'Wie bitte' ausgegeben
-           werden soll
-     cl    Closure, die bei Fehlschlag ausgefuehrt werden soll
-     prio  Prioritaet dieses Objekts bei diesem Setzen der Meldung
 
-BESCHREIBUNG:
-     Merkt sich den angegebenen str und gibt ihn im Falle einer inkorrekten
-     Eingabe des Spielers anstatt eines 'Wie bitte' aus.
+FUNKTION
+========
 
-     Gedacht ist notify_fail, um dem Spieler eine bessere Hilfestellung
-     bei Kommandos / Eingaben zu geben, um ihn u.U. auf die richtige
-     Syntax hinzuweisen.
+   #include <notify_fail.h>
 
-     Wird notify_fail mehrfach (durch verschiedene Objekte o.ae.) auf-
-     gerufen, wird der letzte erfolgreiche Aufruf gewertet. Eine Meldung wird
-     dann tatsaechlich gesetzt, wenn die Prioritaet dieses Objekts gleich
-     gross oder groesser ist als die Prioritaet des Objekts, was das bisher
-     gueltige notify_fail() gesetzt hat. Folgende Prioritaeten sind
-     vordefiniert und werden automatisch ermittelt:
-     NF_NL_OWN    100         // eigenes Objekt (soul) ueberschreibt kaum was
-     NF_NL_THING  100000
-     NF_NL_ROOM   1000000     // Raeume ueberschreiben sonstigen Krams
-     NF_NL_LIVING 10000000    // Lebewesen ueberschreiben auch Raeume
-     2 weitere vordefinierte koennen von Magier angegeben werden:
-     NF_NL_NONE   -1          // wird von allem ueberschrieben
-     NF_NL_MAX    __INT_MAX__ // hoechste Prioritaet, ueberschreibt alles
+   varargs void notify_fail(string str, int prio)
+   varargs void notify_fail(closure cl, int prio)
 
-     Wird eine Closure als Argument gegeben, wird sie im Fehlerfall
-     (also erst wenn ein Kommando endgueltig fehlgeschlagen hat)
-     ausgefuehrt und hat die Fehlermeldung als Resultat
-     zurueckzugeben. Die Closure erhaelt als Argument den
-     originalen Befehlsgeber; in der Regel dies ist this_player(),
-     was aber vom MODIFY_CMD hook geaendert werden kann.
 
-     notify_fail() erkennt verschachtelte Kommandos (siehe Efun
-     command()), und ein notify_fail() in einem Unterkommando
-     hat keinen Einfluss auf das uebergeordnete Kommando.
+ARGUMENTE
+=========
 
-BEMERKUNGEN:
-     - solange man sich nicht absolut sicher ist, dass ein bestimmtes Objekt
-       mit dem Kommando gemeint ist (Identifikation ueber id()), sollte man
-       - notify_fail(str); return 0;
-       nutzen anstatt mit
-       - write(str) return 1;
-       die Kommandoauswertung abzubrechen (und anderen Objekten die Chance
-       zu nehmen das Kommando zu erfuellen)
-     - Kommandos werden uebrigens oft erst vom betretenen Raum, dann von den
-       Objekten abgearbeitet (je nachdem wann diese dazukamen)
-     - die Prioritaet wird momentan nicht gespeichert, sie ist nur beim Setzen
-       relevant. Will spaeter ein anderes Objekt eine Meldung setzen, wird
-       fuer das eigene Objekt die Standardprioritaet ermittelt, auch wenn man
-       eine andere hier uebergeben hat
-     - Die NF_NL_* sind in /sys/notify_fail.h defniert.
+   str   Meldung die an den Spieler anstatt des 'Wie bitte' ausgegeben
+         werden soll
+   cl    Closure, die bei Fehlschlag ausgefuehrt werden soll
+   prio  Prioritaet dieses Objekts bei diesem Setzen der Meldung
 
-BEISPIELE:
-     Ein Raum erwartet die korrekte Eingabe von 'iss suppe':
 
-     int iss_cmd(string str){
-       // zu Anfang der Funktion das notify_fail definieren
-       notify_fail("Moechtest Du vielleicht von der Suppe essen?\n");
+BESCHREIBUNG
+============
 
-       // Spieler hat nur 'iss' ohne Parameter eingegeben oder einen anderen
-       // Parameter angegeben ... Abbruch!
-       // Falls kein weiteres Objekt das Kommando erfuellt oder das
-       // notify_fail() mit einer eigenen Meldung ueberschreibt, wird obige
-       // Meldung an den Spieler ausgegeben.
+   Merkt sich den angegebenen str und gibt ihn im Falle einer inkorrekten
+   Eingabe des Spielers anstatt eines 'Wie bitte' aus.
 
-       if(!str || str!="suppe") return 0;
-       // ab hier ist die Eingabe dann wirklich 'suppe' und die Funktion
-       // kann beliebig fortgefuehrt werden
-       ...
-       return   1;
+   Gedacht ist notify_fail, um dem Spieler eine bessere Hilfestellung
+   bei Kommandos / Eingaben zu geben, um ihn u.U. auf die richtige
+   Syntax hinzuweisen.
 
-SIEHE AUCH:
-     add_action(E), AddCmd(L), AddAction(L),
-     query_verb(E), query_notify_fail(E)
+   Wird notify_fail mehrfach (durch verschiedene Objekte o.ae.) auf-
+   gerufen, wird der letzte erfolgreiche Aufruf gewertet. Eine Meldung wird
+   dann tatsaechlich gesetzt, wenn die Prioritaet dieses Objekts gleich
+   gross oder groesser ist als die Prioritaet des Objekts, was das bisher
+   gueltige notify_fail() gesetzt hat. Folgende Prioritaeten sind
+   vordefiniert und werden automatisch ermittelt:
+   NF_NL_OWN    100         // eigenes Objekt (soul) ueberschreibt kaum was
+   NF_NL_THING  100000
+   NF_NL_ROOM   1000000     // Raeume ueberschreiben sonstigen Krams
+   NF_NL_LIVING 10000000    // Lebewesen ueberschreiben auch Raeume
+   2 weitere vordefinierte koennen von Magier angegeben werden:
+   NF_NL_NONE   -1          // wird von allem ueberschrieben
+   NF_NL_MAX    __INT_MAX__ // hoechste Prioritaet, ueberschreibt alles
+
+   Wird eine Closure als Argument gegeben, wird sie im Fehlerfall
+   (also erst wenn ein Kommando endgueltig fehlgeschlagen hat)
+   ausgefuehrt und hat die Fehlermeldung als Resultat
+   zurueckzugeben. Die Closure erhaelt als Argument den
+   originalen Befehlsgeber; in der Regel dies ist this_player(),
+   was aber vom MODIFY_CMD hook geaendert werden kann.
+
+   notify_fail() erkennt verschachtelte Kommandos (siehe Efun
+   command()), und ein notify_fail() in einem Unterkommando
+   hat keinen Einfluss auf das uebergeordnete Kommando.
+
+
+BEMERKUNGEN
+===========
+
+   - solange man sich nicht absolut sicher ist, dass ein bestimmtes Objekt
+     mit dem Kommando gemeint ist (Identifikation ueber id()), sollte man
+     - notify_fail(str); return 0;
+     nutzen anstatt mit
+     - write(str) return 1;
+     die Kommandoauswertung abzubrechen (und anderen Objekten die Chance
+     zu nehmen das Kommando zu erfuellen)
+   - Kommandos werden uebrigens oft erst vom betretenen Raum, dann von den
+     Objekten abgearbeitet (je nachdem wann diese dazukamen)
+   - die Prioritaet wird momentan nicht gespeichert, sie ist nur beim Setzen
+     relevant. Will spaeter ein anderes Objekt eine Meldung setzen, wird
+     fuer das eigene Objekt die Standardprioritaet ermittelt, auch wenn man
+     eine andere hier uebergeben hat
+   - Die NF_NL_* sind in /sys/notify_fail.h defniert.
+
+
+BEISPIELE
+=========
+
+   Ein Raum erwartet die korrekte Eingabe von 'iss suppe':
+
+   int iss_cmd(string str){
+     // zu Anfang der Funktion das notify_fail definieren
+     notify_fail("Moechtest Du vielleicht von der Suppe essen?\n");
+
+     // Spieler hat nur 'iss' ohne Parameter eingegeben oder einen anderen
+     // Parameter angegeben ... Abbruch!
+     // Falls kein weiteres Objekt das Kommando erfuellt oder das
+     // notify_fail() mit einer eigenen Meldung ueberschreibt, wird obige
+     // Meldung an den Spieler ausgegeben.
+
+     if(!str || str!="suppe") return 0;
+     // ab hier ist die Eingabe dann wirklich 'suppe' und die Funktion
+     // kann beliebig fortgefuehrt werden
+     ...
+     return   1;
+
+
+SIEHE AUCH
+==========
+
+   add_action(E), AddCmd(L), AddAction(L),
+   query_verb(E), query_notify_fail(E)
 
 8.Aug 2007 Gloinson
diff --git a/doc/sefun/object_info b/doc/sefun/object_info
index 3945651..bee892e 100644
--- a/doc/sefun/object_info
+++ b/doc/sefun/object_info
@@ -1,129 +1,148 @@
-DEPRECATED
-SYNOPSIS
-        #include <objectinfo.h>
 
-        mixed * object_info(object ob, int what)
-        mixed * object_info(object ob, int what, int index)
+object_info()
+*************
+
+
+DEPRECATED
+==========
+
+
+SYNOPSIS
+========
+
+   #include <objectinfo.h>
+
+   mixed * object_info(object ob, int what)
+   mixed * object_info(object ob, int what, int index)
+
 
 DESCRIPTION
-        Returns some internal information about object <ob>, collected
-        in an array. Argument <what> determines which information is
-        returned.
+===========
 
-        The result is usually an array. However, if <index> is specified,
-        the result is the value from position <index> of the array which
-        would have been returned normally.
+   Returns some internal information about object <ob>, collected
+   in an array. Argument <what> determines which information is
+   returned.
 
-        The possible values of <what>, and the indices of the returned
-        arrays are defined in the include file <objectinfo.h>, and may
-        change in future versions of the driver!
+   The result is usually an array. However, if <index> is specified,
+   the result is the value from position <index> of the array which
+   would have been returned normally.
+
+   The possible values of <what>, and the indices of the returned
+   arrays are defined in the include file <objectinfo.h>, and may
+   change in future versions of the driver!
 
 
-        <what> == OINFO_BASIC:
+   <what> == OINFO_BASIC:
 
-          This call returns basic information about <ob>:
+     This call returns basic information about <ob>:
 
-          int [OIB_HEART_BEAT]:       1 if <ob> has a heart_beat, 0 else.
-          int [OIB_IS_WIZARD]:        1 if <ob> has the wizard flag set,
-                                        0 else.
-            This entry is always 0 when set_is_wizard() is not available.
-          int [OIB_ENABLE_COMMANDS]:  1 if <ob> can give commands, 0 else.
-          int [OIB_CLONE]:            1 if <ob> is a clone, 0 else.
-          int [OIB_DESTRUCTED]:       1 if <ob> is destructed, 0 else.
-          int [OIB_SWAPPED]:          1 if <ob> is swapped, 0 else.
-          int [OIB_ONCE_INTERACTIVE]: 1 if <ob> was once interactive, 0 else.
-          int [OIB_RESET_STATE]:      1 if <ob> is (still) reset, 0 else.
-          int [OIB_WILL_CLEAN_UP]:    1 if <ob> will call clean_up(), 0 else.
-          int [OIB_LAMBDA_REFERENCED]: 1 if <ob> has lambdas, 0 else.
-          int [OIB_SHADOW]:           1 if <ob> has a shadow structure tied
-                                        to it, 0 if not.
-          int [OIB_REPLACED]:         1 if the program for <ob> was replaced,
-                                      0 else.
-          int [OIB_NEXT_RESET]:   time of the next reset
-          int [OIB_TIME_OF_REF]:  time of the last call to <ob>
-          int [OIB_NEXT_CLEANUP]: time of the next data cleanup
-          int [OIB_REF]:          number of references to <ob>
-          int [OIB_GIGATICKS] and [OIB_TICKS]: together, these numbers
-            give the accumulated evaluation cost spend in <ob>
-          int [OIB_SWAP_NUM]:     the swap number for <ob>s program,
-                                  or -1 if not swapped.
-          int [OIB_PROG_SWAPPED]: 1 if <ob>'s program is swapped, 0 else.
-          int [OIB_VAR_SWAPPED]:  1 if <ob>'s variables are swapped, 0 else.
-          int [OIB_NAME]:         <ob>'s object name.
-          int [OIB_LOAD_NAME]:    <ob>'s load name.
-          object [OIB_NEXT_ALL]:  next object in the object list.
-          object [OIB_PREV_ALL]:  previous object in the object list.
+     int [OIB_HEART_BEAT]:       1 if <ob> has a heart_beat, 0 else.
+     int [OIB_IS_WIZARD]:        1 if <ob> has the wizard flag set,
+                                   0 else.
+       This entry is always 0 when set_is_wizard() is not available.
+     int [OIB_ENABLE_COMMANDS]:  1 if <ob> can give commands, 0 else.
+     int [OIB_CLONE]:            1 if <ob> is a clone, 0 else.
+     int [OIB_DESTRUCTED]:       1 if <ob> is destructed, 0 else.
+     int [OIB_SWAPPED]:          1 if <ob> is swapped, 0 else.
+     int [OIB_ONCE_INTERACTIVE]: 1 if <ob> was once interactive, 0 else.
+     int [OIB_RESET_STATE]:      1 if <ob> is (still) reset, 0 else.
+     int [OIB_WILL_CLEAN_UP]:    1 if <ob> will call clean_up(), 0 else.
+     int [OIB_LAMBDA_REFERENCED]: 1 if <ob> has lambdas, 0 else.
+     int [OIB_SHADOW]:           1 if <ob> has a shadow structure tied
+                                   to it, 0 if not.
+     int [OIB_REPLACED]:         1 if the program for <ob> was replaced,
+                                 0 else.
+     int [OIB_NEXT_RESET]:   time of the next reset
+     int [OIB_TIME_OF_REF]:  time of the last call to <ob>
+     int [OIB_NEXT_CLEANUP]: time of the next data cleanup
+     int [OIB_REF]:          number of references to <ob>
+     int [OIB_GIGATICKS] and [OIB_TICKS]: together, these numbers
+       give the accumulated evaluation cost spend in <ob>
+     int [OIB_SWAP_NUM]:     the swap number for <ob>s program,
+                             or -1 if not swapped.
+     int [OIB_PROG_SWAPPED]: 1 if <ob>'s program is swapped, 0 else.
+     int [OIB_VAR_SWAPPED]:  1 if <ob>'s variables are swapped, 0 else.
+     int [OIB_NAME]:         <ob>'s object name.
+     int [OIB_LOAD_NAME]:    <ob>'s load name.
+     object [OIB_NEXT_ALL]:  next object in the object list.
+     object [OIB_PREV_ALL]:  previous object in the object list.
 
 
-        <what> == OINFO_POSITION:
+   <what> == OINFO_POSITION:
 
-          This call returns information about <ob>'s position in the
-          global list of objects:
+     This call returns information about <ob>'s position in the
+     global list of objects:
 
-          object [OIP_NEXT]: next object in the object list.
-          object [OIP_PREV]: previous object in the object list.
-          int    [OIP_POS]:  position of <ob> in list, counting from 0 up.
+     object [OIP_NEXT]: next object in the object list.
+     object [OIP_PREV]: previous object in the object list.
+     int    [OIP_POS]:  position of <ob> in list, counting from 0 up.
 
-          This call can be expensive in computing time.
+     This call can be expensive in computing time.
 
 
-        <what> == OINFO_MEMORY:
+   <what> == OINFO_MEMORY:
 
-          This call returns information about the program <ob> uses:
+     This call returns information about the program <ob> uses:
 
-          int    [OIM_REF]:            number of references to the program.
-          string [OIM_NAME]:           name of program.
-          int    [OIM_PROG_SIZE]:      size of the program.
-          int    [OIM_NUM_FUNCTIONS]:  number of functions in the program.
-          int    [OIM_SIZE_FUNCTIONS]: size needed for the function structs.
-          int    [OIM_NUM_VARIABLES]:  number of variables in the program.
-          int    [OIM_SIZE_VARIABLES]: size needed for the variable structs.
-          int    [OIM_NUM_STRINGS]:    number of strings in the program.
-          int    [OIM_SIZE_STRINGS]:   size needed for the string pointers.
-          int    [OIM_SIZE_STRINGS_DATA]: size needed for the string data,
-                                       scaled down according to the extend of
-                                       data sharing.
-          int    [OIM_SIZE_STRINGS_TOTAL]: unmodified size needed for the
-                                       string data.
-          int    [OIM_NUM_INCLUDES]:   number of included files in the program.
-          int    [OIM_NUM_INHERITED]:  number of inherited programs.
-          int    [OIM_SIZE_INHERITED]: size needed for the inherit structs.
-          int    [OIM_TOTAL_SIZE]:     total size of the program.
-          int    [OIM_DATA_SIZE]:      total size of the values held in the
-                                       object's variables, scaled down
-                                       according to the extend of data
-                                       sharing.
-          int    [OIM_DATA_SIZE_TOTAL]: unmodified total size of the values
-                                       held in the object's variables
-          int    [OIM_NO_INHERIT]:     1 if the program can't be inherited.
-          int    [OIM_NO_CLONE]:       1 if the program/blueprint can't be
-                                       cloned.
-          int    [OIM_NO_SHADOW]:      1 if the program's functions can't be
-                                       shadowed.
-          int    [OIM_SHARE_VARIABLES]:  1 if clones of this program share
-                                       their initial variable values with
-                                       the blueprint.
+     int    [OIM_REF]:            number of references to the program.
+     string [OIM_NAME]:           name of program.
+     int    [OIM_PROG_SIZE]:      size of the program.
+     int    [OIM_NUM_FUNCTIONS]:  number of functions in the program.
+     int    [OIM_SIZE_FUNCTIONS]: size needed for the function structs.
+     int    [OIM_NUM_VARIABLES]:  number of variables in the program.
+     int    [OIM_SIZE_VARIABLES]: size needed for the variable structs.
+     int    [OIM_NUM_STRINGS]:    number of strings in the program.
+     int    [OIM_SIZE_STRINGS]:   size needed for the string pointers.
+     int    [OIM_SIZE_STRINGS_DATA]: size needed for the string data,
+                                  scaled down according to the extend of
+                                  data sharing.
+     int    [OIM_SIZE_STRINGS_TOTAL]: unmodified size needed for the
+                                  string data.
+     int    [OIM_NUM_INCLUDES]:   number of included files in the program.
+     int    [OIM_NUM_INHERITED]:  number of inherited programs.
+     int    [OIM_SIZE_INHERITED]: size needed for the inherit structs.
+     int    [OIM_TOTAL_SIZE]:     total size of the program.
+     int    [OIM_DATA_SIZE]:      total size of the values held in the
+                                  object's variables, scaled down
+                                  according to the extend of data
+                                  sharing.
+     int    [OIM_DATA_SIZE_TOTAL]: unmodified total size of the values
+                                  held in the object's variables
+     int    [OIM_NO_INHERIT]:     1 if the program can't be inherited.
+     int    [OIM_NO_CLONE]:       1 if the program/blueprint can't be
+                                  cloned.
+     int    [OIM_NO_SHADOW]:      1 if the program's functions can't be
+                                  shadowed.
+     int    [OIM_SHARE_VARIABLES]:  1 if clones of this program share
+                                  their initial variable values with
+                                  the blueprint.
 
-          This call swaps in the program if necessary.
-          Note that the OIM_SIZE_xxx entries only give the size spent on
-          the structures and pointers, not the size of the variable data,
-          function code, and strings themselves.
+     This call swaps in the program if necessary.
+     Note that the OIM_SIZE_xxx entries only give the size spent on
+     the structures and pointers, not the size of the variable data,
+     function code, and strings themselves.
+
 
 HISTORY
-        Introduced in LDMud 3.2.6.
-        Changes in LDMud 3.2.7:
-          - new basic result OIB_REPLACED.
-          - basic result OIB_IS_WIZARD is always 0 if set_is_wizard()
-              is not available.
-          - basic result OIB_APPROVED is gone.
-        LDMud 3.2.8 added OIM_DATA_SIZE to the result of OINFO_MEMORY.
-        LDMud 3.2.9 added the index mechanism, OIM_NUM_INCLUDES,
-          OIM_NO_INHERIT, OIM_NO_SHADOW, OIM_NO_CLONE, OIM_SIZE_STRINGS_DATA,
-          OIM_SIZE_STRINGS_TOTAL, and OIM_DATA_SIZE_TOTAL to the result
-          of OINFO_MEMORY.
-        LDMud 3.3.378 added the OIM_SHARE_VARIABLES to the result
-          of OINFO_MEMORY.
-        LDMud 3.3.654 added the OIB_NEXT_CLEANUP to the result of OINFO_BASIC.
+=======
+
+   Introduced in LDMud 3.2.6.
+   Changes in LDMud 3.2.7:
+     - new basic result OIB_REPLACED.
+     - basic result OIB_IS_WIZARD is always 0 if set_is_wizard()
+         is not available.
+     - basic result OIB_APPROVED is gone.
+   LDMud 3.2.8 added OIM_DATA_SIZE to the result of OINFO_MEMORY.
+   LDMud 3.2.9 added the index mechanism, OIM_NUM_INCLUDES,
+     OIM_NO_INHERIT, OIM_NO_SHADOW, OIM_NO_CLONE, OIM_SIZE_STRINGS_DATA,
+     OIM_SIZE_STRINGS_TOTAL, and OIM_DATA_SIZE_TOTAL to the result
+     of OINFO_MEMORY.
+   LDMud 3.3.378 added the OIM_SHARE_VARIABLES to the result
+     of OINFO_MEMORY.
+   LDMud 3.3.654 added the OIB_NEXT_CLEANUP to the result of OINFO_BASIC.
+
 
 SEE ALSO
-        debug_info(E)
+========
+
+   debug_info(E)
diff --git a/doc/sefun/obsolete/exclude_alist b/doc/sefun/obsolete/exclude_alist
index a967a14..5d1aace 100644
--- a/doc/sefun/obsolete/exclude_alist
+++ b/doc/sefun/obsolete/exclude_alist
@@ -1,4 +1,11 @@
-SYNOPSIS:
-	mixed *exclude_alist(int i, mixed *alist)
+
+exclude_alist()
+***************
+
+
+SYNOPSIS
+========
+
+   mixed *exclude_alist(int i, mixed *alist)
 
 Remove element i from alist.
diff --git a/doc/sefun/obsolete/remove_alist b/doc/sefun/obsolete/remove_alist
index cf9bc61..fceac4f 100644
--- a/doc/sefun/obsolete/remove_alist
+++ b/doc/sefun/obsolete/remove_alist
@@ -1,3 +1,7 @@
-mixed *remove_alist(mixed key, mixed *alist)
+
+remove_alist()
+**************
+
+mixed >>*<<remove_alist(mixed key, mixed >>*<<alist)
 
 Removes element associated by key key from alist.
diff --git a/doc/sefun/old_explode b/doc/sefun/old_explode
index 6b13d8e..357e838 100644
--- a/doc/sefun/old_explode
+++ b/doc/sefun/old_explode
@@ -1,28 +1,53 @@
-FUNKTION:
-	string *old_explode(string str, string del)
 
-ARGUMENTE:
-	str - Der String, der aufgespaltet werden soll.
-	del - Der String, nach dem str aufgespalten werden soll.
+old_explode()
+*************
 
-BESCHREIBUNG:
-	Durch Ausschneiden von del wird der String str in ein Array von Strings
-	zerlegt. Dieses Array wird anschliessend zuruckgegeben.
 
-RUECKGABEWERT:
-	Das Array mit den Bestandteilen der Zerlegung.
+FUNKTION
+========
 
-BEMERKUNGEN:
-	Das Verhalten von old_explode() entspricht dem dem explode()-Verhalten,
-	das in /doc/efun/explode als "altes" Verhalten bezeichnet wird, d.h.
-	Leerstrings an Anfang und Ende des zerlegten Strings werden entfernt!
+   string *old_explode(string str, string del)
 
-BEISPIELE:
-	strs = explode( "nimm alles", " "); => strs = ({ "nimm", "alles" })
-	strs = explode( "abc", "abc" );     => strs = ({ })
-	strs = explode( "ein test", "" );   => strs = ({ "ein test" })
-	strs = explode( "a b", "a");        => strs = ({ " b" });
 
-SIEHE AUCH:
-	explode(E), new_explode(E), efun::explode(E), sscanf(E)
-        implode(E), regexplode(E)
+ARGUMENTE
+=========
+
+   str - Der String, der aufgespaltet werden soll.
+   del - Der String, nach dem str aufgespalten werden soll.
+
+
+BESCHREIBUNG
+============
+
+   Durch Ausschneiden von del wird der String str in ein Array von Strings
+   zerlegt. Dieses Array wird anschliessend zuruckgegeben.
+
+
+RUECKGABEWERT
+=============
+
+   Das Array mit den Bestandteilen der Zerlegung.
+
+
+BEMERKUNGEN
+===========
+
+   Das Verhalten von old_explode() entspricht dem dem explode()-Verhalten,
+   das in /doc/efun/explode als "altes" Verhalten bezeichnet wird, d.h.
+   Leerstrings an Anfang und Ende des zerlegten Strings werden entfernt!
+
+
+BEISPIELE
+=========
+
+   strs = explode( "nimm alles", " "); => strs = ({ "nimm", "alles" })
+   strs = explode( "abc", "abc" );     => strs = ({ })
+   strs = explode( "ein test", "" );   => strs = ({ "ein test" })
+   strs = explode( "a b", "a");        => strs = ({ " b" });
+
+
+SIEHE AUCH
+==========
+
+   explode(E), new_explode(E), efun::explode(E), sscanf(E)
+   implode(E), regexplode(E)
diff --git a/doc/sefun/process_call b/doc/sefun/process_call
index c00a039..cd43faf 100644
--- a/doc/sefun/process_call
+++ b/doc/sefun/process_call
@@ -1,21 +1,38 @@
+
+process_call()
+**************
+
 simul_efun::process_call(E)
-FUNKTION:
-     int process_call()
 
-BESCHREIBUNG:
-     Gibt zurueck, ob die Ausfuehrung zum derzeitigen Zeitpunkt durch
-     process_string() ausgerufen wurde.
 
-BEISPIELE:
-     process_string("@@current_long@@");
-     ...
-     string current_long() {
-      if(process_call())
-       return("Dieser String wurde durch ein process_string eingefuegt.");
-      else return("Du hast die Funktion direkt gerufen!");
-     }
+FUNKTION
+========
 
-SIEHE AUCH:
-     notify_fail(E), process_string(E), replace_personal(E)
+   int process_call()
+
+
+BESCHREIBUNG
+============
+
+   Gibt zurueck, ob die Ausfuehrung zum derzeitigen Zeitpunkt durch
+   process_string() ausgerufen wurde.
+
+
+BEISPIELE
+=========
+
+   process_string("@@current_long@@");
+   ...
+   string current_long() {
+    if(process_call())
+     return("Dieser String wurde durch ein process_string eingefuegt.");
+    else return("Du hast die Funktion direkt gerufen!");
+   }
+
+
+SIEHE AUCH
+==========
+
+   notify_fail(E), process_string(E), replace_personal(E)
 
 28. Maerz 2004 Gloinson
diff --git a/doc/sefun/process_string b/doc/sefun/process_string
index 75c9290..fbc7018 100644
--- a/doc/sefun/process_string
+++ b/doc/sefun/process_string
@@ -1,57 +1,77 @@
+
+process_string()
+****************
+
 process_string(E)
-FUNKTION:
-     string process_string(string str)
-     string process_string(closure cl)
-
-BESCHREIBUNG:
-     Durchsucht den String str nach Vorkommnissen von Substrings, die "Wert
-     durch Funktionsaufruf zu ersetzen" andeuten. Die Form ist: @@, gefolgt
-     durch einen impliziten Funktionsaufruf.
-
-     Der zu ersetzenden Substring hat die Form:
-     @@function[:filename][|argument1|argument2]@@
-
-     Die entsprechende Funktion muss einen String zurueckgeben, oder der
-     process_string() uebergebene String str wird nicht modifiziert.
-
-     process_string() arbeitet nicht rekursiv, object_name und argument sind
-     optionale Werte.
-
-     Falls eine Closure angegeben wurde, wird diese lediglich gerufen
-     und nicht gefiltert.
-
-ANMERKUNGEN:
-     - Die Funktion, die gerufen werden soll, _muss_ mit einem Buchstaben
-		   anfangen, '_' ist nicht moeglich!
-     - folgendes Properties und Details werden bei der Abfrage ueber
-       process_string() gefiltert:
-       P_LONG, P_SHORT, P_READ_MSG, AddReadDetail()-Details und NPC-Chats
-       P_INT_LONG ueber int_long(), P_INT_SHORT ueber int_short()
-     - die Nutzung kann zu Sicherheitsproblemen fuehren, siehe auch
-       process_call()
-
-BEISPIEL:
-     // komplette Ersetzung ...
-     SetProp(P_LONG,"@@current_long@@");
-     ...
-     string current_long() {
-      if(x) return(break_string("Die Beschreibung."));
-      else return(break_string("Die andere Beschreibung."));
-     }
-
-     -> bei Abfrage: "Die Beschreibung." oder "Die andere Beschreibung."
 
 
-     // Teilersetzung
-     SetProp(P_SHORT, "Ein @@farbenfun|huebsch@@ Ding");
-     ...
-     string farbenfun(string str) {
-      return(str+" "+"gelbes");
-     }
+FUNKTION
+========
 
-     -> bei Abfrage: "Ein huebsch gelbes Ding."
+   string process_string(string str)
+   string process_string(closure cl)
 
-SIEHE AUCH:
-     notify_fail(E), process_call(E), replace_personal(E)
+
+BESCHREIBUNG
+============
+
+   Durchsucht den String str nach Vorkommnissen von Substrings, die "Wert
+   durch Funktionsaufruf zu ersetzen" andeuten. Die Form ist: @@, gefolgt
+   durch einen impliziten Funktionsaufruf.
+
+   Der zu ersetzenden Substring hat die Form:
+   @@function[:filename][|argument1|argument2]@@
+
+   Die entsprechende Funktion muss einen String zurueckgeben, oder der
+   process_string() uebergebene String str wird nicht modifiziert.
+
+   process_string() arbeitet nicht rekursiv, object_name und argument sind
+   optionale Werte.
+
+   Falls eine Closure angegeben wurde, wird diese lediglich gerufen
+   und nicht gefiltert.
+
+
+ANMERKUNGEN
+===========
+
+   - Die Funktion, die gerufen werden soll, _muss_ mit einem Buchstaben
+                 anfangen, '_' ist nicht moeglich!
+   - folgendes Properties und Details werden bei der Abfrage ueber
+     process_string() gefiltert:
+     P_LONG, P_SHORT, P_READ_MSG, AddReadDetail()-Details und NPC-Chats
+     P_INT_LONG ueber int_long(), P_INT_SHORT ueber int_short()
+   - die Nutzung kann zu Sicherheitsproblemen fuehren, siehe auch
+     process_call()
+
+
+BEISPIEL
+========
+
+   // komplette Ersetzung ...
+   SetProp(P_LONG,"@@current_long@@");
+   ...
+   string current_long() {
+    if(x) return(break_string("Die Beschreibung."));
+    else return(break_string("Die andere Beschreibung."));
+   }
+
+   -> bei Abfrage: "Die Beschreibung." oder "Die andere Beschreibung."
+
+
+   // Teilersetzung
+   SetProp(P_SHORT, "Ein @@farbenfun|huebsch@@ Ding");
+   ...
+   string farbenfun(string str) {
+    return(str+" "+"gelbes");
+   }
+
+   -> bei Abfrage: "Ein huebsch gelbes Ding."
+
+
+SIEHE AUCH
+==========
+
+   notify_fail(E), process_call(E), replace_personal(E)
 
 22. Nov. 2006 Arathorn
diff --git a/doc/sefun/query_editing b/doc/sefun/query_editing
index 010c98e..32358ed 100644
--- a/doc/sefun/query_editing
+++ b/doc/sefun/query_editing
@@ -1,13 +1,29 @@
+
+query_editing()
+***************
+
+
 DEPRECATED
+==========
+
+
 SYNOPSIS
-        mixed query_editing(object ob);
+========
+
+   mixed query_editing(object ob);
+
 
 BESCHREIBUNG
-        Liefert 1, wenn <ob> interaktiv ist (das heisst, es gibt einen realen
-        Benutzer mit einer Socketverbindung zum Mud) und gerade mit ed() eine
-        Datei bearbeitet. Wenn ed() mit einem Funktionsnamen als zweites
-        Argument aufgerufen wird, wird das Objekt, aus dem ed() aufgerufen
-        wurde, geliefert, sonst 0.
+============
+
+   Liefert 1, wenn <ob> interaktiv ist (das heisst, es gibt einen realen
+   Benutzer mit einer Socketverbindung zum Mud) und gerade mit ed() eine
+   Datei bearbeitet. Wenn ed() mit einem Funktionsnamen als zweites
+   Argument aufgerufen wird, wird das Objekt, aus dem ed() aufgerufen
+   wurde, geliefert, sonst 0.
+
 
 SIEHE AUCH
-        ed(E)
+==========
+
+   ed(E)
diff --git a/doc/sefun/query_idle b/doc/sefun/query_idle
index 7c0a0a5..7deccee 100644
--- a/doc/sefun/query_idle
+++ b/doc/sefun/query_idle
@@ -1,8 +1,21 @@
+
+query_idle()
+************
+
+
 SYNOPSIS
-        int query_idle(object ob);
+========
+
+   int query_idle(object ob);
+
 
 BESCHREIBUNG
-        Gibt an, seit wie vielen Sekunden ein Player Objekt <ob> idle ist.
+============
+
+   Gibt an, seit wie vielen Sekunden ein Player Objekt <ob> idle ist.
+
 
 SIEHE AUCH
-        interactive(E)
+==========
+
+   interactive(E)
diff --git a/doc/sefun/query_input_pending b/doc/sefun/query_input_pending
index 8033cec..c40c355 100644
--- a/doc/sefun/query_input_pending
+++ b/doc/sefun/query_input_pending
@@ -1,11 +1,27 @@
+
+query_input_pending()
+*********************
+
+
 DEPRECATED
+==========
+
+
 SYNOPSIS
-        object query_input_pending(object ob);
+========
+
+   object query_input_pending(object ob);
+
 
 BESCHREIBUNG
-        Wenn <ob> interaktiv und ein input_to() haengig ist, so liefert die
-        Efun das Objekt zurueck, welches den input_to() aufgerfuen hat. Ist
-        kein input_to() haengig, liefert die Funktion 0.
+============
+
+   Wenn <ob> interaktiv und ein input_to() haengig ist, so liefert die
+   Efun das Objekt zurueck, welches den input_to() aufgerfuen hat. Ist
+   kein input_to() haengig, liefert die Funktion 0.
+
 
 SIEHE AUCH
-        input_to(E), find_input_to(E), input_to_info(E), remove_input_to(E)
+==========
+
+   input_to(E), find_input_to(E), input_to_info(E), remove_input_to(E)
diff --git a/doc/sefun/query_ip_name b/doc/sefun/query_ip_name
index d16298f..76de80f 100644
--- a/doc/sefun/query_ip_name
+++ b/doc/sefun/query_ip_name
@@ -1,12 +1,28 @@
+
+query_ip_name()
+***************
+
+
 GESCHUETZT
+==========
+
+
 SYNOPSIS
-        string query_ip_name(object ob);
+========
+
+   string query_ip_name(object ob);
+
 
 BESCHREIBUNG
-        Liefert den IP-Namen des Users <ob> oder des aktuellen Benutzers, wenn
-        <ob> nicht angegeben wurde. Der IP-Name wird durch den asynchronen
-        Prozess hname ermittelt. Wenn der IP-Name nicht ermittelt werden kann,
-        liefert query_ip_name() die IP-Nummer zurueck.
+============
+
+   Liefert den IP-Namen des Users <ob> oder des aktuellen Benutzers, wenn
+   <ob> nicht angegeben wurde. Der IP-Name wird durch den asynchronen
+   Prozess hname ermittelt. Wenn der IP-Name nicht ermittelt werden kann,
+   liefert query_ip_name() die IP-Nummer zurueck.
+
 
 SIEHE AUCH
-        query_ip_number(E)
+==========
+
+   query_ip_number(E)
diff --git a/doc/sefun/query_ip_number b/doc/sefun/query_ip_number
index a462aba..d09bc88 100644
--- a/doc/sefun/query_ip_number
+++ b/doc/sefun/query_ip_number
@@ -1,24 +1,43 @@
+
+query_ip_number()
+*****************
+
+
 GESCHUETZT
+==========
+
+
 SYNOPSIS
-        string query_ip_number(object ob);
-        string query_ip_number(mixed & ob);
+========
+
+   string query_ip_number(object ob);
+   string query_ip_number(mixed & ob);
+
 
 BESCHREIBUNG
-        Liefert die IP-Nummer des Benutzers <ob> oder des aktuellen Benutzers,
-        wenn <ob> nicht angegeben wurde.
+============
 
-        Wenn <ob> als Referenz angegeben wird (dann muss es ein gueltiges
-        Objekt sein), wird dieses bei der Ausgabe auf die struct sockaddr_in
-        gesetzt. struct sockaddr_in ist ein Integer-Array, mit einem Integer
-        pro Adressbyte:
+   Liefert die IP-Nummer des Benutzers <ob> oder des aktuellen Benutzers,
+   wenn <ob> nicht angegeben wurde.
 
-            ob[0 .. 1] : sin_family
-            ob[2 .. 3] : sin_port
-            ob[4 .. 7] : sin_addr
-            ob[8 ..15] : nicht definiert.
+   Wenn <ob> als Referenz angegeben wird (dann muss es ein gueltiges
+   Objekt sein), wird dieses bei der Ausgabe auf die struct sockaddr_in
+   gesetzt. struct sockaddr_in ist ein Integer-Array, mit einem Integer
+   pro Adressbyte:
+
+       ob[0 .. 1] : sin_family
+       ob[2 .. 3] : sin_port
+       ob[4 .. 7] : sin_addr
+       ob[8 ..15] : nicht definiert.
+
 
 AENDERUNGEN
-        Die Rueckgabe von struct sockaddr_in wurde in 3.2.1@81 eingefuehrt.
+===========
+
+   Die Rueckgabe von struct sockaddr_in wurde in 3.2.1@81 eingefuehrt.
+
 
 SIEHE AUCH
-        query_ip_name(E)
+==========
+
+   query_ip_name(E)
diff --git a/doc/sefun/query_limits b/doc/sefun/query_limits
index 954577a..8af988f 100644
--- a/doc/sefun/query_limits
+++ b/doc/sefun/query_limits
@@ -1,56 +1,82 @@
-DEPRECATED
-SYNOPSIS
-        #include <sys/rtlimits.h>
 
-        int *query_limits();
-        int *query_limits(int default);
+query_limits()
+**************
+
+
+DEPRECATED
+==========
+
+
+SYNOPSIS
+========
+
+   #include <sys/rtlimits.h>
+
+   int *query_limits();
+   int *query_limits(int default);
+
 
 BESCHREIBUNG
-        Liefert ein Array mit den momentan gueltigen Laufzeit Limiten bzw.
-        die standardmaessigen Laufzeit Limiten, wenn <default> wahr ist.
-        Die Eintraege im gelieferten Array bedeuten:
+============
 
-        int[LIMIT_EVAL]:        die maximalen Eval Kosten
-        int[LIMIT_ARRAY]:       die maximale Anzahl Array Eintraege
-        int[LIMIT_MAPPING]:     die maximale Anzahl Mapping Eintraege
-        int[LIMIT_BYTE]:        die maximale Anzahl Bytes, die mit read_bytes()
-                                /write_bytes() bearbeitet werden koennen
-        int[LIMIT_FILE]:        die maximale Anzahl Bytes, die mit read_file()
-                                /write_file() bearbeitet werden koennen
-        int[LIMIT_CALLOUTS]:    die maximale Anzahl gleichzeitiger call_out()s
-        int[LIMIT_COST]:        wie die aktuellen Kosten einzurechnen sind
+   Liefert ein Array mit den momentan gueltigen Laufzeit Limiten bzw.
+   die standardmaessigen Laufzeit Limiten, wenn <default> wahr ist.
+   Die Eintraege im gelieferten Array bedeuten:
 
-        Ausser fuer LIMIT_COST ein Limit von '0' (auch LIMIT_UNLIMITED)
-        bedeutet 'keine Limit'.
+   int[LIMIT_EVAL]:        die maximalen Eval Kosten
+   int[LIMIT_ARRAY]:       die maximale Anzahl Array Eintraege
+   int[LIMIT_MAPPING]:     die maximale Anzahl Mapping Eintraege
+   int[LIMIT_BYTE]:        die maximale Anzahl Bytes, die mit read_bytes()
+                           /write_bytes() bearbeitet werden koennen
+   int[LIMIT_FILE]:        die maximale Anzahl Bytes, die mit read_file()
+                           /write_file() bearbeitet werden koennen
+   int[LIMIT_CALLOUTS]:    die maximale Anzahl gleichzeitiger call_out()s
+   int[LIMIT_COST]:        wie die aktuellen Kosten einzurechnen sind
 
-        LIMIT_COST hat diese Bedeutungen:
-          
-          wert > 0: Maximal <wert> fuer als Kosten fuer die aktuelle Ausfuehrung
-                    verwendet, ungeachtet wie lange sie tatsaechlich dauert.
-               = 0: ist die derzeite LIMIT_EVAL groesser als die vorherige
-                    LIMIT_EVAL, kostet die aktuelle Ausfuehrung nur 10
-                    Ticks; andernfalls werden die gesamten Kosten angerechnet.
-                < 0: (-wert)% der aktuellen Ausfuehrungskosten werden
-                     angerechnet.
+   Ausser fuer LIMIT_COST ein Limit von '0' (auch LIMIT_UNLIMITED)
+   bedeutet 'keine Limit'.
 
-BEMERKUNGEN:
-        "Aktuelle Kosten" bei LIMIT_COST hat im Falle der Benutzung von
-        limited() die Bedeutung von "im limited verbrauchte Kosten", steuert
-        also, wieviel der im Durchlaufen der Funktion im limited()
-        verbrauchten Ticks mit dem Ende von limited() angezogen wird.
+   LIMIT_COST hat diese Bedeutungen:
+
+
+
+     wert > 0: Maximal <wert> fuer als Kosten fuer die aktuelle Ausfuehrung
+               verwendet, ungeachtet wie lange sie tatsaechlich dauert.
+          = 0: ist die derzeite LIMIT_EVAL groesser als die vorherige
+               LIMIT_EVAL, kostet die aktuelle Ausfuehrung nur 10
+               Ticks; andernfalls werden die gesamten Kosten angerechnet.
+           < 0: (-wert)% der aktuellen Ausfuehrungskosten werden
+                angerechnet.
+
+
+BEMERKUNGEN
+===========
+
+   "Aktuelle Kosten" bei LIMIT_COST hat im Falle der Benutzung von
+   limited() die Bedeutung von "im limited verbrauchte Kosten", steuert
+   also, wieviel der im Durchlaufen der Funktion im limited()
+   verbrauchten Ticks mit dem Ende von limited() angezogen wird.
+
 
 BEISPIELE
-        query_limits()
-        --> liefert die momentan gueltigen Laufzeit Limiten.
-        query_limits(1)
-        --> liefert die standardmaessigen Laufzeit Limiten.
+=========
+
+   query_limits()
+   --> liefert die momentan gueltigen Laufzeit Limiten.
+   query_limits(1)
+   --> liefert die standardmaessigen Laufzeit Limiten.
+
 
 AENDERUNGEN
-        Eingefuehrt in LDMud 3.2.7.
-        LIMIT_CALLOUTS wurde in LDMud 3.2.9 eingefuehrt.
+===========
+
+   Eingefuehrt in LDMud 3.2.7.
+   LIMIT_CALLOUTS wurde in LDMud 3.2.9 eingefuehrt.
+
 
 SIEHE AUCH
-        limited(E), set_limits(E)
+==========
+
+   limited(E), set_limits(E)
 
 16.05.2007, Zesstra
-
diff --git a/doc/sefun/query_mud_port b/doc/sefun/query_mud_port
index 2e5c6d2..de4c1e2 100644
--- a/doc/sefun/query_mud_port
+++ b/doc/sefun/query_mud_port
@@ -1,23 +1,39 @@
+
+query_mud_port()
+****************
+
+
 DEPRECATED
+==========
+
+
 SYNOPSIS
-        int query_mud_port(void)
-        int query_mud_port(object user)
-        int query_mud_port(int num)
+========
+
+   int query_mud_port(void)
+   int query_mud_port(object user)
+   int query_mud_port(int num)
+
 
 DESCRIPTION
-        Returns the port number the parser uses for user connections.
+===========
 
-        If no argument is given, the port for this_player() is
-        returned. If this_player() is not existing or not interactive,
-        the first port number open for connections is returned.
+   Returns the port number the parser uses for user connections.
 
-        If an user object is given, the port used for its connection
-        is returned.
-        If a positive number is given, the <num>th port number the
-        parser uses for connections is returned (given that there are
-        that many ports).
-        If -1 is given, the number of ports open for connections is
-        returned.
+   If no argument is given, the port for this_player() is
+   returned. If this_player() is not existing or not interactive,
+   the first port number open for connections is returned.
+
+   If an user object is given, the port used for its connection
+   is returned.
+   If a positive number is given, the <num>th port number the
+   parser uses for connections is returned (given that there are
+   that many ports).
+   If -1 is given, the number of ports open for connections is
+   returned.
+
 
 SEE ALSO
-        query_udp_port(E)
+========
+
+   query_udp_port(E)
diff --git a/doc/sefun/query_next_reset b/doc/sefun/query_next_reset
index 03bbd7e..528ae56 100644
--- a/doc/sefun/query_next_reset
+++ b/doc/sefun/query_next_reset
@@ -1,27 +1,47 @@
+
+query_next_reset()
+******************
+
 simul_efun::query_next_reset(E)
-FUNKTION:
-     varargs int query_next_reset(object ob)
 
-ARGUMENTE:
-     ob - das interessierende Objekt; wenn nicht angegeben, wird 
-          this_object() verwendet
 
-BESCHREIBUNG:
-     Diese sefun gibt den Zeitpunkt des naechsten Resets des Objektes ob 
-     zurueck. Die Angabe erfolgt in Sekunden, die seit dem 01. Januar 1970 
-     00:00:00 GMT verstrichen sind, analog zu time().
+FUNKTION
+========
 
-     In der Regel erfolgt der Reset im naechsten Backend-Zyklus nach dem 
-     Faelligkeitszeitpunkt,  d.h. momentan in den nachfolgenden 2s.
-     Allerdings kann dies auch mal nen Zyklus laenger dauern (4s), wenn der
-     Driver viel zu tun hat.
+   varargs int query_next_reset(object ob)
 
-BEMERKUNGEN:
-     Diese sefun ist object_info()-Abfragen vorzuziehen, da die Parameter und
-     Rueckgabewerte von object_info() bei verschiedenen Gamedriverversionen
-     variieren koennen.
 
-SIEHE AUCH:
-     call_out(E), object_info(E), reset(L), set_next_reset(E), time(E)
+ARGUMENTE
+=========
+
+   ob - das interessierende Objekt; wenn nicht angegeben, wird
+        this_object() verwendet
+
+
+BESCHREIBUNG
+============
+
+   Diese sefun gibt den Zeitpunkt des naechsten Resets des Objektes ob
+   zurueck. Die Angabe erfolgt in Sekunden, die seit dem 01. Januar 1970
+   00:00:00 GMT verstrichen sind, analog zu time().
+
+   In der Regel erfolgt der Reset im naechsten Backend-Zyklus nach dem
+   Faelligkeitszeitpunkt,  d.h. momentan in den nachfolgenden 2s.
+   Allerdings kann dies auch mal nen Zyklus laenger dauern (4s), wenn der
+   Driver viel zu tun hat.
+
+
+BEMERKUNGEN
+===========
+
+   Diese sefun ist object_info()-Abfragen vorzuziehen, da die Parameter und
+   Rueckgabewerte von object_info() bei verschiedenen Gamedriverversionen
+   variieren koennen.
+
+
+SIEHE AUCH
+==========
+
+   call_out(E), object_info(E), reset(L), set_next_reset(E), time(E)
 
 28.07.2014 Arathorn
diff --git a/doc/sefun/query_once_interactive b/doc/sefun/query_once_interactive
index c794223..bfb8b55 100644
--- a/doc/sefun/query_once_interactive
+++ b/doc/sefun/query_once_interactive
@@ -1,8 +1,21 @@
+
+query_once_interactive()
+************************
+
+
 SYNOPSIS
-        int query_once_interactive(object obj);
+========
+
+   int query_once_interactive(object obj);
+
 
 BESCHREIBUNG
-        Wahr, wenn <obj> interaktiv ist oder dies einmal war.
+============
+
+   Wahr, wenn <obj> interaktiv ist oder dies einmal war.
+
 
 SIEHE AUCH
-        remove_interactive(E)
+==========
+
+   remove_interactive(E)
diff --git a/doc/sefun/query_shadowing b/doc/sefun/query_shadowing
index 3ce5d6a..aadf109 100644
--- a/doc/sefun/query_shadowing
+++ b/doc/sefun/query_shadowing
@@ -1,18 +1,38 @@
+
+query_shadowing()
+*****************
+
+
 DEPRECATED
+==========
+
 query_shadowing(E)
-FUNKTION:
-     object query_shadowing(object obj)
 
-BESCHREIBUNG:
-     Die Funktion gibt das derzeit vom Objekt <obj> beschattete Objekt
-     victim oder 0 zurueck.
 
-BEISPIELE:
-     // B beschattet A
-     query_shadowing(find_object(B)) == A
+FUNKTION
+========
 
-SIEHE AUCH:
-     Generell:	     shadow(E), unshadow(E)
-     Rechte:	     query_allow_shadow(M), query_prevent_shadow(L)
+   object query_shadowing(object obj)
 
-23.02.2016, Zesstra
\ No newline at end of file
+
+BESCHREIBUNG
+============
+
+   Die Funktion gibt das derzeit vom Objekt <obj> beschattete Objekt
+   victim oder 0 zurueck.
+
+
+BEISPIELE
+=========
+
+   // B beschattet A
+   query_shadowing(find_object(B)) == A
+
+
+SIEHE AUCH
+==========
+
+   Generell:       shadow(E), unshadow(E)
+   Rechte:         query_allow_shadow(M), query_prevent_shadow(L)
+
+23.02.2016, Zesstra
diff --git a/doc/sefun/query_snoop b/doc/sefun/query_snoop
index 4da8838..94e598a 100644
--- a/doc/sefun/query_snoop
+++ b/doc/sefun/query_snoop
@@ -1,10 +1,26 @@
+
+query_snoop()
+*************
+
+
 DEPRECATED
+==========
+
+
 SYNOPSIS
-        object query_snoop(object victim)
+========
+
+   object query_snoop(object victim)
+
 
 DESCRIPTION
-        Returns the user who currently snoops victim. The calling
-        object must be privileged by the master object.
+===========
+
+   Returns the user who currently snoops victim. The calling
+   object must be privileged by the master object.
+
 
 SEE ALSO
-        snoop(E)
+========
+
+   snoop(E)
diff --git a/doc/sefun/query_wiz_grp b/doc/sefun/query_wiz_grp
index c45cfe1..fe01fbd 100644
--- a/doc/sefun/query_wiz_grp
+++ b/doc/sefun/query_wiz_grp
@@ -1,15 +1,34 @@
-FUNKTION:
-        query_wiz_grp(string wiz)
-        query_wiz_grp(object wiz)
 
-ARGUMENTE:
-        wiz - Spieler, dessen Magierlevelgruppe ermittelt werden soll
+query_wiz_grp()
+***************
 
-BESCHREIBUNG:
-        Diese Funktion ermittelt die Magiergruppe, der der Spieler wiz angehoert.
 
-RUECKGABEWERT:
-        Die Magierlevelgruppe des Spielers.
+FUNKTION
+========
 
-SIEHE AUCH:
-        /secure/wizlevels.h
+   query_wiz_grp(string wiz)
+   query_wiz_grp(object wiz)
+
+
+ARGUMENTE
+=========
+
+   wiz - Spieler, dessen Magierlevelgruppe ermittelt werden soll
+
+
+BESCHREIBUNG
+============
+
+   Diese Funktion ermittelt die Magiergruppe, der der Spieler wiz angehoert.
+
+
+RUECKGABEWERT
+=============
+
+   Die Magierlevelgruppe des Spielers.
+
+
+SIEHE AUCH
+==========
+
+   /secure/wizlevels.h
diff --git a/doc/sefun/query_wiz_level b/doc/sefun/query_wiz_level
index 03e89cb..3645035 100644
--- a/doc/sefun/query_wiz_level
+++ b/doc/sefun/query_wiz_level
@@ -1,43 +1,70 @@
-FUNKTION:
-	int query_wiz_level(object ob)
-	int query_wiz_level(string ob)
 
-ARGUMENTE:
-	ob - Der Spieler/das Objekt, dessen Magierlevel ermittelt werden soll.
-       Es kann auch eine UID (z.B. "zesstra", "d.inseln.zesstra") als String
-       uebergeben werden.
+query_wiz_level()
+*****************
 
-BESCHREIBUNG:
-	query_wiz_level() liefert den Magierlevel des Objekts ob zurueck.
-	Normale Spieler haben einen Magierlevel von 0, Seher normalerweise
-  einen von 1 (auf jeden Fall < 10).
-  Objekte bekommen folgende Level:
-  /d/           - 25
-  /p/           - 21
-  /obj/         - 0
-  /std/         - 0
-  /gilden/      - 30
-  /spellbooks/  - 30
-  /players/     - entsprechend Magier, 20 - 111
-  /secure/      - 100
 
-RUECKGABEWERT:
-	Der Magierlevel des Spielers/Objekts.
+FUNKTION
+========
 
-BEMERKUNGEN:
-	Wird als Parameter ein String mit einem Spielernamen uebergeben, so 
-	kann auch der Magierlevel eines nicht eingeloggten Spielers heraus-
-	gefunden werden.
+   int query_wiz_level(object ob)
+   int query_wiz_level(string ob)
 
-BEISPIELE:
-	lv = query_wiz_level(find_player("jof"))
-	   => lv = 111, falls Jof eingeloggt ist.
-	lv = query_wiz_level("jof")
-           => lv = 111 in jedem Fall.
 
-SIEHE AUCH:
-	/secure/wizlevels.h
+ARGUMENTE
+=========
 
-LETZTE AeNDERUNG:
+    ob - Der Spieler/das Objekt, dessen Magierlevel ermittelt werden soll.
+   Es kann auch eine UID (z.B. "zesstra", "d.inseln.zesstra") als String
+   uebergeben werden.
+
+
+BESCHREIBUNG
+============
+
+         query_wiz_level() liefert den Magierlevel des Objekts ob zurueck.
+         Normale Spieler haben einen Magierlevel von 0, Seher normalerweise
+   einen von 1 (auf jeden Fall < 10).
+   Objekte bekommen folgende Level:
+   /d/           - 25
+   /p/           - 21
+   /obj/         - 0
+   /std/         - 0
+   /gilden/      - 30
+   /spellbooks/  - 30
+   /players/     - entsprechend Magier, 20 - 111
+   /secure/      - 100
+
+
+RUECKGABEWERT
+=============
+
+   Der Magierlevel des Spielers/Objekts.
+
+
+BEMERKUNGEN
+===========
+
+   Wird als Parameter ein String mit einem Spielernamen uebergeben, so
+   kann auch der Magierlevel eines nicht eingeloggten Spielers heraus-
+   gefunden werden.
+
+
+BEISPIELE
+=========
+
+   lv = query_wiz_level(find_player("jof"))
+      => lv = 111, falls Jof eingeloggt ist.
+   lv = query_wiz_level("jof")
+      => lv = 111 in jedem Fall.
+
+
+SIEHE AUCH
+==========
+
+   /secure/wizlevels.h
+
+
+LETZTE AeNDERUNG
+================
+
 15.10.2007, Zesstra
-
diff --git a/doc/sefun/read_data b/doc/sefun/read_data
index b0707ac..1756890 100644
--- a/doc/sefun/read_data
+++ b/doc/sefun/read_data
@@ -1,18 +1,34 @@
+
+read_data()
+***********
+
+
 SYNOPSIS
-        string read_data(string file, int start, int anzahl)
+========
+
+   string read_data(string file, int start, int anzahl)
+
 
 BESCHREIBUNG
-        Diese Funktion macht genau das, was read_file() tut (also siehe dort),
-        allerdings stellt sie sicher, dass <file> immer mit einem /data/
-        beginnt (setzt es also notfalls davor).
-        Es wird also immer irgendwo unterhalb von /data/ gelesen.
+============
+
+   Diese Funktion macht genau das, was read_file() tut (also siehe dort),
+   allerdings stellt sie sicher, dass <file> immer mit einem /data/
+   beginnt (setzt es also notfalls davor).
+   Es wird also immer irgendwo unterhalb von /data/ gelesen.
+
 
 BEISPIEL
-        # read_data("/d/ebene/zesstra/blupp");
-        -> liest das File /data/d/ebene/zesstra/blupp.
-        # read_data("/data/d/ebene/zesstra/blupp");
-        -> tut dasselbe.
+========
+
+   # read_data("/d/ebene/zesstra/blupp");
+   -> liest das File /data/d/ebene/zesstra/blupp.
+   # read_data("/data/d/ebene/zesstra/blupp");
+   -> tut dasselbe.
+
 
 SIEHE AUCH
-        write_data()
-        read_file(E), write_file(E), read_bytes(E), write_file(E)
+==========
+
+   write_data()
+   read_file(E), write_file(E), read_bytes(E), write_file(E)
diff --git a/doc/sefun/replace_personal b/doc/sefun/replace_personal
index 2a18dc7..3804be3 100644
--- a/doc/sefun/replace_personal
+++ b/doc/sefun/replace_personal
@@ -1,84 +1,113 @@
-FUNKTION:
-     varargs string replace_personal(string str, mixed *obs [, int caps]);
 
-DEFINIERT IN:
-     /secure/simul_efun.c
+replace_personal()
+******************
 
-ARGUMENTE:
-     str    - zu bearbeitender String
-     obs    - Liste von Objekt1, Objekt2, ..., Objekt9
-              (Objekte oder Strings)
-     caps   - 1 fuer Grossschreibung des Ersetzten nach Satzenden (.,?,!,")
-              0 sonst
 
-BESCHREIBUNG:
-     Ersetzt in Strings
-     @WERx, @WESSENx, @WEMx, @WENx durch
-        Objectx->name(<casus>, 1);
-     @WERUx, @WESSENUx, @WEMUx, @WENUx durch
-        Objectx->name(<casus>);
-     @WERQPx, @WESSENQPx, @WEMQPx, @WENQPx durch
-        Objectx->QueryPronoun(<casus>);
-     @WERQAx, @WESSENQAx, @WEMQAx, @WENQAx durch
-        Objectx->QueryArticle(<casus>, 1, 1);
-     @WERQPPGNx, @WESSENQPPGNx, @WEMQPPGNx, @WENQPPGNx durch
-        Objectx->QueryPossPronoun(<gender>, <casus>, <number>);
-     oder den entsprechenden String bei "Objektx".            
+FUNKTION
+========
 
-BEMERKUNGEN:
-     x steht fuer die Position des Objekts/Strings in *obs, beginnend bei 1.
-     
-     Besonderheiten beim Possessivpronomen (@WERQPPGNx):
-     G muss durch das Geschlecht (M, F oder N) und N durch den Numerus (S 
-     oder P) ersetzt werden. 
-     Alle Angaben, auch der CASUS, beziehen sich dabei auf das Objekt, welches
-     besessen wird, nicht auf den Besitzer! Dieser ist bereits durch x 
-     bestimmt.
-     
-RUeCKGABEWERT:
-     durchersetzter String 
-     
-Beispiele:
+   varargs string replace_personal(string str, mixed *obs [, int caps]);
 
-     replace_personal("@WER1", ({find_player("gloinson")}))
-     == "Gloinson"
-     
-     replace_personal("@WEMQP1", ({find_player("gloinson")}))
-     == "ihm"     
-     
-     // unbestimmter und bestimmter Artikel:
-     replace_personal("@WER1 zueckt @WENU2 und verhaut @WEN3.", 
-                      ({find_player("gloinson"),
-                        find_object("/obj/mpa"), 
-                        find_object("/obj/wanderer")}))
-     == "Gloinson zueckt eine Zeitung und verhaut den Wanderer."
-     
-     // Beim Possessivpronomen beziehen sich WEN, F und P (Akkusativ,
-     // Femininum, Plural) auf die Taschen, nicht auf Kessa:
-     replace_personal("@WER1 steckt @WESSEN2 Turnschuhe in @WENQPPFP1 "
-                      "Taschen.", 
-                      ({find_player("kessa"), 
-                        find_player("gloinson")}))
-     == "Kessa steckt Gloinsons Turnschuhe in ihre Taschen."
 
-     // Ein Beispiel mit laengerem *obs:
-     replace_personal("@WER1 zieht @WENQPPMP1 neuen Turnschuhe an. @WER2 ist "
-                      "so beeindruckt, dass @WERQP2 @WEMQP1 @WENU3 auf die "
-                      "@WEN4 haut und die Schuhe in @WEMQPPFS2 Tasche "
-                      "verschwinden laesst. @WERU5 schaut zu und kichert "
-                      "irre. Wenn das @WER6 gesehen haette!",
-                      ({find_player("gloinson"), 
-                        find_player("kessa"),
-                        find_object("/obj/mpa"),                        
-                        "Birne",
-                        find_object("/obj/wanderer"),
-                        find_netdead("jof")}),1)
-     == "Gloinson zieht seine neuen Turnschuhe an. Kessa ist so beeindruckt, "
-        "dass sie ihm eine Zeitung auf die Birne haut und die Schuhe in ihrer "
-        "Tasche verschwinden laesst. Ein Wanderer schaut zu und kichert "
-        "irre. Wenn das Jof gesehen haette!"
+DEFINIERT IN
+============
 
-SIEHE AUCH:
-     AddCmd(L)
+   /secure/simul_efun.c
 
-05. September 2015, Arathorn
+
+ARGUMENTE
+=========
+
+   str    - zu bearbeitender String
+   obs    - Liste von Objekt1, Objekt2, ..., Objekt9
+            (Objekte oder Strings)
+   caps   - 1 fuer Grossschreibung des Ersetzten nach Satzenden (.,?,!,")
+            0 sonst
+
+
+BESCHREIBUNG
+============
+
+   Ersetzt in Strings
+   @WERx, @WESSENx, @WEMx, @WENx durch
+      Objectx->name(<casus>, 1);
+   @WERUx, @WESSENUx, @WEMUx, @WENUx durch
+      Objectx->name(<casus>);
+   @WERQPx, @WESSENQPx, @WEMQPx, @WENQPx durch
+      Objectx->QueryPronoun(<casus>);
+   @WERQAx, @WESSENQAx, @WEMQAx, @WENQAx durch
+      Objectx->QueryArticle(<casus>, 1, 1);
+   @WERQPPGNx, @WESSENQPPGNx, @WEMQPPGNx, @WENQPPGNx durch
+      Objectx->QueryPossPronoun(<gender>, <casus>, <number>);
+   oder den entsprechenden String bei "Objektx".
+
+
+BEMERKUNGEN
+===========
+
+   x steht fuer die Position des Objekts/Strings in *obs, beginnend bei 1.
+
+
+
+   Besonderheiten beim Possessivpronomen (@WERQPPGNx):
+   G muss durch das Geschlecht (M, F oder N) und N durch den Numerus (S
+   oder P) ersetzt werden.
+   Alle Angaben, auch der CASUS, beziehen sich dabei auf das Objekt, welches
+   besessen wird, nicht auf den Besitzer! Dieser ist bereits durch x
+   bestimmt.
+
+
+RUeCKGABEWERT
+=============
+
+   durchersetzter String
+
+Beispiele
+
+   replace_personal("@WER1", ({find_player("gloinson")})) ==
+   "Gloinson"
+
+   replace_personal("@WEMQP1", ({find_player("gloinson")})) == "ihm"
+
+   // unbestimmter und bestimmter Artikel: replace_personal("@WER1
+   zueckt @WENU2 und verhaut @WEN3.",
+
+      ({find_player("gloinson"),
+         find_object("/obj/mpa"), find_object("/obj/wanderer")}))
+
+   == "Gloinson zueckt eine Zeitung und verhaut den Wanderer."
+
+   // Beim Possessivpronomen beziehen sich WEN, F und P (Akkusativ, //
+   Femininum, Plural) auf die Taschen, nicht auf Kessa:
+   replace_personal("@WER1 steckt @WESSEN2 Turnschuhe in @WENQPPFP1 "
+
+      "Taschen.", ({find_player("kessa"),
+
+         find_player("gloinson")}))
+
+   == "Kessa steckt Gloinsons Turnschuhe in ihre Taschen."
+
+   // Ein Beispiel mit laengerem >>*<<obs: replace_personal("@WER1
+   zieht @WENQPPMP1 neuen Turnschuhe an. @WER2 ist "
+
+      "so beeindruckt, dass @WERQP2 @WEMQP1 @WENU3 auf die " "@WEN4
+      haut und die Schuhe in @WEMQPPFS2 Tasche " "verschwinden laesst.
+      @WERU5 schaut zu und kichert " "irre. Wenn das @WER6 gesehen
+      haette!", ({find_player("gloinson"),
+
+         find_player("kessa"), find_object("/obj/mpa"), "Birne",
+         find_object("/obj/wanderer"), find_netdead("jof")}),1)
+
+   == "Gloinson zieht seine neuen Turnschuhe an. Kessa ist so
+   beeindruckt, "
+      "dass sie ihm eine Zeitung auf die Birne haut und die Schuhe in
+      ihrer " "Tasche verschwinden laesst. Ein Wanderer schaut zu und
+      kichert " "irre. Wenn das Jof gesehen haette!"
+
+
+SIEHE AUCH
+==========
+
+   AddCmd(L)
+
+5. September 2015, Arathorn
diff --git a/doc/sefun/restore_object b/doc/sefun/restore_object
index eac5e01..631252d 100644
--- a/doc/sefun/restore_object
+++ b/doc/sefun/restore_object
@@ -1,18 +1,31 @@
+
+restore_object()
+****************
+
+
 SYNOPSIS
-        mixed restore_object(string name);
+========
+
+   mixed restore_object(string name);
+
 
 BESCHREIBUNG
-        Diese Simul-Efun unterscheidet sich in einigen Details von der
-        Driver-Efun restore_object() (s. auch dort! Wichtig!).
+============
 
-        1. diese sefun restauriert auch die mit F_SAVE markierten Properties
-        eines Objektes, sofern das Savefile von sefun save_object erstellt
-        wurde (was die efun des Driver nicht tut!).
-        2. Sofern ein Pfad angegeben wird und dieser NICHT mit /data/ beginnt,
-        wird das Savefile als erstes immer unter /data/+name gesucht. Erst wenn es
-        dort nicht gefunden wird, wird unter name gesucht.
+   Diese Simul-Efun unterscheidet sich in einigen Details von der
+   Driver-Efun restore_object() (s. auch dort! Wichtig!).
+
+   1. diese sefun restauriert auch die mit F_SAVE markierten Properties
+   eines Objektes, sofern das Savefile von sefun save_object erstellt
+   wurde (was die efun des Driver nicht tut!).
+   2. Sofern ein Pfad angegeben wird und dieser NICHT mit /data/ beginnt,
+   wird das Savefile als erstes immer unter /data/+name gesucht. Erst wenn es
+   dort nicht gefunden wird, wird unter name gesucht.
+
 
 SIEHE AUCH
-        save_object(E), restore_object(E), save_value(E)
-29.01.2017, Zesstra
+==========
 
+   save_object(E), restore_object(E), save_value(E)
+
+29.01.2017, Zesstra
diff --git a/doc/sefun/save_object b/doc/sefun/save_object
index 9614685..fc8175f 100644
--- a/doc/sefun/save_object
+++ b/doc/sefun/save_object
@@ -1,22 +1,35 @@
+
+save_object()
+*************
+
+
 SYNOPSIS
-        mixed save_object(string name);
+========
+
+   mixed save_object(string name);
+
 
 BESCHREIBUNG
-        Diese Simul-Efun unterscheidet sich in einigen Details von der
-        Driver-Efun save_object() (s. auch dort! Wichtig!).
-        1. diese sefun speichert auch die mit F_SAVE markierten Properties
-        eines Objektes ab (was die efun des Driver nicht tut!).
-        2. Sofern ein Pfad angegeben wird und dieser NICHT mit /data/ beginnt,
-        wird /data/ vorangestellt, d.h. das Savefile wird immer unter /data/
-        erstellt.
-        3. das Format, in dem gespeichert wird, kann bei der sefun nicht
-        ausgewaehlt werden (ist aber auch nicht noetig!), sondern ein
-        mudlib-weiter Standard wird benutzt.
-        4. will man nicht in einem File speichern, sondern das, was im File
-        stehen wurde, als String zurueckhaben, muss man 0 als 'name'
-        uebergeben.
+============
+
+   Diese Simul-Efun unterscheidet sich in einigen Details von der
+   Driver-Efun save_object() (s. auch dort! Wichtig!).
+   1. diese sefun speichert auch die mit F_SAVE markierten Properties
+   eines Objektes ab (was die efun des Driver nicht tut!).
+   2. Sofern ein Pfad angegeben wird und dieser NICHT mit /data/ beginnt,
+   wird /data/ vorangestellt, d.h. das Savefile wird immer unter /data/
+   erstellt.
+   3. das Format, in dem gespeichert wird, kann bei der sefun nicht
+   ausgewaehlt werden (ist aber auch nicht noetig!), sondern ein
+   mudlib-weiter Standard wird benutzt.
+   4. will man nicht in einem File speichern, sondern das, was im File
+   stehen wurde, als String zurueckhaben, muss man 0 als 'name'
+   uebergeben.
+
 
 SIEHE AUCH
-        save_object(E), restore_object(E), save_value(E)
-29.01.2017, Zesstra
+==========
 
+   save_object(E), restore_object(E), save_value(E)
+
+29.01.2017, Zesstra
diff --git a/doc/sefun/send_room b/doc/sefun/send_room
index 24b05fa..7ddf43d 100644
--- a/doc/sefun/send_room
+++ b/doc/sefun/send_room
@@ -1,30 +1,42 @@
-FUNKTION:
+
+send_room()
+***********
+
+
+FUNKTION
+========
+
 varargs void send_room(object|string room, string msg, int msg_type,
-                       string msg_action, string msg_prefix,
-                       object *exclude, object origin)
+   string msg_action, string msg_prefix, object >>*<<exclude, object
+   origin)
 
-BESCHREIBUNG:
-        Sendet msg an alle Objekte in room durch Aufruf von ReceiveMsg() mit
-        den uebergebenen Argumenten.
-        Zur Bedeutung der Argumente siehe Manpage von ReceiveMsg().
 
-        Wenn das Raumobjekt mit seinem Namen angegeben ist, wird das Objekt
-        unter diesem Namen gesucht und und geladen, falls notwendig.
+BESCHREIBUNG
+============
 
-        Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an
-        die darin enthaltenen Objekte gesendet wird.
-        Das ist sinnvoll, wenn zB ein Spieler Ausloeser einer Meldung ist
-        und diese selbst nicht erhalten soll.
+   Sendet msg an alle Objekte in room durch Aufruf von ReceiveMsg() mit
+   den uebergebenen Argumenten.
+   Zur Bedeutung der Argumente siehe Manpage von ReceiveMsg().
 
-        origin gibt an, welches Objekt die Meldung ausloest (muss nicht das
-        sendende Objekt selber) und wird vor allem fuer die Ignorierepruefung
-        verwendet. Default ist das sendende Objekt.
+   Wenn das Raumobjekt mit seinem Namen angegeben ist, wird das Objekt
+   unter diesem Namen gesucht und und geladen, falls notwendig.
 
-        Letztendlich ist die sefun vergleichbar zu tell_room().
+   Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an
+   die darin enthaltenen Objekte gesendet wird.
+   Das ist sinnvoll, wenn zB ein Spieler Ausloeser einer Meldung ist
+   und diese selbst nicht erhalten soll.
+
+   origin gibt an, welches Objekt die Meldung ausloest (muss nicht das
+   sendende Objekt selber) und wird vor allem fuer die Ignorierepruefung
+   verwendet. Default ist das sendende Objekt.
+
+   Letztendlich ist die sefun vergleichbar zu tell_room().
+
 
 SIEHE AUCH
-        ReceiveMsg(L)
-        tell_object(E), tell_room(E), say(E), write(E)
+==========
+
+   ReceiveMsg(L)
+   tell_object(E), tell_room(E), say(E), write(E)
 
 13.03.2016, Zesstra
-
diff --git a/doc/sefun/set_heart_beat b/doc/sefun/set_heart_beat
index 837759e..a304181 100644
--- a/doc/sefun/set_heart_beat
+++ b/doc/sefun/set_heart_beat
@@ -1,23 +1,41 @@
+
+set_heart_beat()
+****************
+
+
 SYNOPSIS
-        int set_heart_beat(int flag);
+========
+
+   int set_heart_beat(int flag);
+
 
 BESCHREIBUNG
-        Schaltet den Heartbeat ein (1) oder aus (0). Der Treiber wendet die
-        Lfun heart_beat() auf das aktuelle Objekt alle __HEARTBEAT_INTERVAL__
-        Sekunden an, wenn der Heartbeat eingeschaltet ist. Ein Shadow
-        auf der Lfun wird ignoriert.
-        
-        Der Heartbeat sollte immer ausgeschaltet werden, wenn er nicht
-        gebraucht wird. Das reduziert die Systemauslastung.
+============
 
-        Liefert '1' bei Erfolg, '0' bei Fehler.
+   Schaltet den Heartbeat ein (1) oder aus (0). Der Treiber wendet die
+   Lfun heart_beat() auf das aktuelle Objekt alle __HEARTBEAT_INTERVAL__
+   Sekunden an, wenn der Heartbeat eingeschaltet ist. Ein Shadow
+   auf der Lfun wird ignoriert.
 
-        Das Abschalten eines bereits abgeschalteten Heartbeats (und umgekehrt
-        das Einschalten eines bereits eingeschalteten Heartbeats) zaehlt
-        als Fehler.
+
+
+   Der Heartbeat sollte immer ausgeschaltet werden, wenn er nicht
+   gebraucht wird. Das reduziert die Systemauslastung.
+
+   Liefert '1' bei Erfolg, '0' bei Fehler.
+
+   Das Abschalten eines bereits abgeschalteten Heartbeats (und umgekehrt
+   das Einschalten eines bereits eingeschalteten Heartbeats) zaehlt
+   als Fehler.
+
 
 BEMERKUNGEN
-        __HEARTBEAT_INTERVAL__ ist in MG = 2 Sekunden
+===========
+
+   __HEARTBEAT_INTERVAL__ ist in MG = 2 Sekunden
+
 
 SIEHE AUCH
-        heart_beat(A), call_out(E)
+==========
+
+   heart_beat(A), call_out(E)
diff --git a/doc/sefun/set_light b/doc/sefun/set_light
index 62390c4..b9dfc9c 100644
--- a/doc/sefun/set_light
+++ b/doc/sefun/set_light
@@ -1,17 +1,32 @@
-SYNOPSIS:
-        int set_light(int n)
 
-DESCRIPTION:
-        An object is by default dark. It can be set to not dark by
-        calling set_light(1). The environment will then also get this
-        light. The returned value is the total number of lights in
-        this room. So if you call set_light(0) it will return the
-        light level of the current object.
-        
-        Note that the value of the argument is added to the light of
-        the current object.
+set_light()
+***********
 
-BUGS:
-	This handling of light by the parser is inappropriate for most
-	purposes: If you put a burning candle into a safe, the safe
-	will start to emit light.
+
+SYNOPSIS
+========
+
+   int set_light(int n)
+
+
+DESCRIPTION
+===========
+
+   An object is by default dark. It can be set to not dark by
+   calling set_light(1). The environment will then also get this
+   light. The returned value is the total number of lights in
+   this room. So if you call set_light(0) it will return the
+   light level of the current object.
+
+
+
+   Note that the value of the argument is added to the light of
+   the current object.
+
+
+BUGS
+====
+
+   This handling of light by the parser is inappropriate for most
+   purposes: If you put a burning candle into a safe, the safe
+   will start to emit light.
diff --git a/doc/sefun/set_living_name b/doc/sefun/set_living_name
index 360a3ce..e588e6e 100644
--- a/doc/sefun/set_living_name
+++ b/doc/sefun/set_living_name
@@ -1,25 +1,41 @@
-SYNOPSIS:
-        void set_living_name(string name)
 
-BESCHREIBUNG:
-        Setzt einen "Lebewesennamen" fuer das Objekt, indem Name und Objekt in
-        eine Tabelle eingetragen werden, welche von find_living() durchsucht 
-        wird. Nach Setzen des Namens kann das Objekt per find_living() 
-        gefunden werden.
+set_living_name()
+*****************
 
-        Das Objekt muss ausserdem per enable_commands() als Lebewesen
-        markiert worden sein. Dies ist fuer alle von /std/npc erbenden NPCs
-        _automatisch_ der Fall und sollte daher nicht nochmal explizit gemacht
-        werden.
 
-        Alle von /std/npc erbenden NPCs setzen ebenfalls automatisch einen
-        LivingName, der lower_case(P_NAME) entspricht.
+SYNOPSIS
+========
 
-        Ein Objekt kann nur einen Namen haben, mit dem es per find_living()
-        gesucht werden kann.
+   void set_living_name(string name)
 
-SIEHE AUCH:
-        find_living(E), find_livings(E), find_player(E), enable_commands(E)
 
-LETZTE AeNDERNG:
+BESCHREIBUNG
+============
+
+   Setzt einen "Lebewesennamen" fuer das Objekt, indem Name und Objekt in
+   eine Tabelle eingetragen werden, welche von find_living() durchsucht
+   wird. Nach Setzen des Namens kann das Objekt per find_living()
+   gefunden werden.
+
+   Das Objekt muss ausserdem per enable_commands() als Lebewesen
+   markiert worden sein. Dies ist fuer alle von /std/npc erbenden NPCs
+   _automatisch_ der Fall und sollte daher nicht nochmal explizit gemacht
+   werden.
+
+   Alle von /std/npc erbenden NPCs setzen ebenfalls automatisch einen
+   LivingName, der lower_case(P_NAME) entspricht.
+
+   Ein Objekt kann nur einen Namen haben, mit dem es per find_living()
+   gesucht werden kann.
+
+
+SIEHE AUCH
+==========
+
+   find_living(E), find_livings(E), find_player(E), enable_commands(E)
+
+
+LETZTE AeNDERNG
+===============
+
 19.10.2015, Arathorn
diff --git a/doc/sefun/set_object_heart_beat b/doc/sefun/set_object_heart_beat
index a7ba4ef..caecca2 100644
--- a/doc/sefun/set_object_heart_beat
+++ b/doc/sefun/set_object_heart_beat
@@ -1,15 +1,34 @@
-FUNKTION:
-        int set_object_heart_beat(object ob, int on)
 
-ARGUMENTE:
-        ob - Objekt, dessen heart_beat veraendert werden soll
-        on - Soll der heart_beat ein- oder ausgeschaltet werden?
+set_object_heart_beat()
+***********************
 
-BESCHREIBUNG:
-        Der heart_beat des Objektes wird ein- (on=1) oder aus- (on=0) geschaltet.
 
-RUECKGABEWERT:
-        1, wenn das Setzen geklappt hat, ansonsten 0.
+FUNKTION
+========
 
-SIEHE AUCH:
-        set_heart_beat(E), heart_beat(L), call_out(E)
+   int set_object_heart_beat(object ob, int on)
+
+
+ARGUMENTE
+=========
+
+   ob - Objekt, dessen heart_beat veraendert werden soll
+   on - Soll der heart_beat ein- oder ausgeschaltet werden?
+
+
+BESCHREIBUNG
+============
+
+   Der heart_beat des Objektes wird ein- (on=1) oder aus- (on=0) geschaltet.
+
+
+RUECKGABEWERT
+=============
+
+   1, wenn das Setzen geklappt hat, ansonsten 0.
+
+
+SIEHE AUCH
+==========
+
+   set_heart_beat(E), heart_beat(L), call_out(E)
diff --git a/doc/sefun/sha1 b/doc/sefun/sha1
index 00bb6cc..ef3b10e 100644
--- a/doc/sefun/sha1
+++ b/doc/sefun/sha1
@@ -1,22 +1,44 @@
+
+sha1()
+******
+
+
 DEPRECATED
+==========
+
+
 SYNOPSIS
-        string sha1 (string arg)
-        string sha1 (int *  arg)
+========
+
+   string sha1 (string arg)
+   string sha1 (int *  arg)
+
 
 BESCHREIBUNG
-        Berechnet den SHA1-Hashwert von <arg>.
-        Das Argument kann ein String, oder ein Array von Zahlen sein (von
-        welchen nur das unterste Byte betrachted wird).
+============
+
+   Berechnet den SHA1-Hashwert von <arg>.
+   Das Argument kann ein String, oder ein Array von Zahlen sein (von
+   welchen nur das unterste Byte betrachted wird).
+
 
 BEISPIEL
-        string s;
+========
 
-        s = sha1("Hello");
-        s = sha1( ({ 'H', 'e', 'l', 'l', 'o' })
+   string s;
+
+   s = sha1("Hello");
+   s = sha1( ({ 'H', 'e', 'l', 'l', 'o' })
+
 
 HISTORY
-        Eingefuehrt in LDMud 3.3.523.
-        LDMud 3.3.712 fuehrte Zaehlenarrays als Argument ein.
+=======
+
+   Eingefuehrt in LDMud 3.3.523.
+   LDMud 3.3.712 fuehrte Zaehlenarrays als Argument ein.
+
 
 SIEHE AUCH
-        crypt(E), md5(E)
+==========
+
+   crypt(E), md5(E)
diff --git a/doc/sefun/shadow b/doc/sefun/shadow
index 9309dea..2b7032c 100644
--- a/doc/sefun/shadow
+++ b/doc/sefun/shadow
@@ -1,143 +1,162 @@
-FUNKTION:
-     object shadow(object ob, int flag)
 
-ARGUMENTE:
-     object ob		- das vom shadow betroffene Objekt
-     int flag		- 0 fuer eine Shadow-Existenzabfrage
-                      1 fuer Shadow durch previous_object()
-
-BESCHREIBUNG:
-     Wenn <flag> nicht 0 ist, wird das aktuelle Objekt dem Objekt obj
-     als Shadow uebergeworfen. Bei Erfolg wird das geshadowte Objekt
-     zurueckgegeben, sonst 0.
-     Wenn <flag> 0 ist, wird entweder 0 oder das geshadowte Objekt
-     zurueck gegeben.
-
-     Wenn ein Objekt A ein Objekt B beschattet, werden alle call_other() fuer
-     B auf A umgeleitet. Wenn die an B gerufene Funktion in A existiert, so
-     wird sie in A gerufen, bei Nichtexistenz in B.
-     A ist das einzige Objekt, welche die beschatteten Funktionen mit 
-     call_other() in B aufrufen kann, selbst B kann nicht per call_other() 
-     diese Funktion rufen.
-     Alle intern verwendeten Funktionen arbeiten jedoch weiterhin normal.
-
-     Das aufrufende Objekt muss vom Master-Objekt die Erlaubnis haben,
-     als Shadow zu wirken.
-
-     Es gibt folgende Kriterien fuer eine erfolgreiche Beschattung:
-     - das zu beschattende Objekt ob:
-       - ist weder ein access_rights-Objekt noch ein ROOT-Objekt
-       - gibt beim Aufruf von query_prevent_shadow(beschatter) eine 0
-         zurueck
-       - beschattet selbst niemanden
-       - hat kein '#pragma no_shadow' gesetzt
-     - der Beschatter:
-       - wird nicht selbst (direkt) beschattet
-       - beschattet noch niemanden (sonst folgt direkter Abbruch)
-       - hat kein environment()
-       - definiert/beschattet keine Methode, die im beschatteten Objekt ob 
-         als nomask definiert ist
-
-     Beschattet man ein Objekt A mit einem Objekt B und dann das Objekt A
-     zusaetzlich mit einem Objekt C, so wird eine Beschattungshierarchie
-     erstellt:
-
-     B macht shadow(A, 1)
-     B->A
-     C macht shadow(A, 1)
-     C->B->A
-
-BEISPIELE:
-     // wenn: B beschattet A, dann
-     shadow(find_object(A), 0) == B
+shadow()
+********
 
 
-     // 3 Objekte beschatten in Hierarchie (liegt auch im Pfad)
-     --- aa.c ---
-     void fun() {
-         printf("%O [a] fun()\n", this_object());
-     }
+FUNKTION
+========
 
-     void fun3() {
-         printf("%O [a] fun3()\n", this_object());
-     }
+   object shadow(object ob, int flag)
 
-     --- bb.c ---
-     int fun() {
-         printf("%O [b] fun()\n", this_object());
-         find_object("/doc/beispiele/shadow/aa")->fun();
-     }
 
-     void fun2() {
-         printf("%O [b] fun2()\n", this_object());
-         find_object("/doc/beispiele/shadow/aa")->fun3();
-         this_object()->fun3();
-     }
+ARGUMENTE
+=========
 
-     void do_shadow(object target) { shadow(target, 1); }
+   object ob          - das vom shadow betroffene Objekt
+   int flag           - 0 fuer eine Shadow-Existenzabfrage
+                    1 fuer Shadow durch previous_object()
 
-     --- cc.c ---
-     int fun() {
-         printf("%O [c] fun()\n", this_object());
-         find_object("/doc/beispiele/shadow/aa")->fun();
-     }
 
-     void fun3() {
-         printf("%O [c] fun3()\n", this_object());
-     }
+BESCHREIBUNG
+============
 
-     void do_shadow(object target) { shadow(target, 1); }
+   Wenn <flag> nicht 0 ist, wird das aktuelle Objekt dem Objekt obj
+   als Shadow uebergeworfen. Bei Erfolg wird das geshadowte Objekt
+   zurueckgegeben, sonst 0.
+   Wenn <flag> 0 ist, wird entweder 0 oder das geshadowte Objekt
+   zurueck gegeben.
 
-     // darauf arbeitender Code
+   Wenn ein Objekt A ein Objekt B beschattet, werden alle call_other() fuer
+   B auf A umgeleitet. Wenn die an B gerufene Funktion in A existiert, so
+   wird sie in A gerufen, bei Nichtexistenz in B.
+   A ist das einzige Objekt, welche die beschatteten Funktionen mit
+   call_other() in B aufrufen kann, selbst B kann nicht per call_other()
+   diese Funktion rufen.
+   Alle intern verwendeten Funktionen arbeiten jedoch weiterhin normal.
 
-     object a, b, c;
+   Das aufrufende Objekt muss vom Master-Objekt die Erlaubnis haben,
+   als Shadow zu wirken.
 
-     destruct("/doc/beispiele/shadow/aa");
-     a = load_object("/doc/beispiele/shadow/aa");
-     destruct("/doc/beispiele/shadow/bb");
-     b = load_object("/doc/beispiele/shadow/bb");
-     destruct("/doc/beispiele/shadow/cc");
-     c = load_object("/doc/beispiele/shadow/cc");
+   Es gibt folgende Kriterien fuer eine erfolgreiche Beschattung:
+   - das zu beschattende Objekt ob:
+     - ist weder ein access_rights-Objekt noch ein ROOT-Objekt
+     - gibt beim Aufruf von query_prevent_shadow(beschatter) eine 0
+       zurueck
+     - beschattet selbst niemanden
+     - hat kein '#pragma no_shadow' gesetzt
+   - der Beschatter:
+     - wird nicht selbst (direkt) beschattet
+     - beschattet noch niemanden (sonst folgt direkter Abbruch)
+     - hat kein environment()
+     - definiert/beschattet keine Methode, die im beschatteten Objekt ob
+       als nomask definiert ist
 
-     b->do_shadow(a);
-     c->do_shadow(a);
-     printf("--- a->fun() ---\n");
-     a->fun();
-     printf("--- b->fun() ---\n");
-     b->fun();
-     printf("--- c->fun() ---\n");
-     c->fun();
-     printf("--- b->fun2() ---\n");
-     b->fun2();
+   Beschattet man ein Objekt A mit einem Objekt B und dann das Objekt A
+   zusaetzlich mit einem Objekt C, so wird eine Beschattungshierarchie
+   erstellt:
 
-     // ... und seine Ausgabe:
+   B macht shadow(A, 1)
+   B->A
+   C macht shadow(A, 1)
+   C->B->A
 
-     --- a->fun() ---
-     /doc/beispiele/shadow/cc [c] fun()
-     /doc/beispiele/shadow/bb [b] fun()
-     /doc/beispiele/shadow/aa [a] fun()
-     --- b->fun() ---
-     /doc/beispiele/shadow/cc [c] fun()
-     /doc/beispiele/shadow/bb [b] fun()
-     /doc/beispiele/shadow/aa [a] fun()
-     --- c->fun() ---
-     /doc/beispiele/shadow/cc [c] fun()
-     /doc/beispiele/shadow/bb [b] fun()
-     /doc/beispiele/shadow/aa [a] fun()
-     --- b->fun2() ---
-     /doc/beispiele/shadow/bb [b] fun2()
-     /doc/beispiele/shadow/aa [a] fun3()
-     /doc/beispiele/shadow/cc [c] fun3()
 
-     // Der erste Aufruf von b::fun2() in a findet sofort a::fun3()! Der
-     // Driver nimmt an, dass alle Shadows ab c bei Rufen von b nach a
-     // schon ihre Chance hatten.
-     // Der zweite Aufruf allerdings ist auf b und wird beim Durchgeben
-     // an a von c uebernommen.
+BEISPIELE
+=========
 
-SIEHE AUCH:
-     Generell:	     shadow(E)
-     Rechte:	     query_allow_shadow(M), query_prevent_shadow(L)
-     Informationen:  query_shadowing(E)
+   // wenn: B beschattet A, dann
+   shadow(find_object(A), 0) == B
 
-8.Aug 2007 Gloinson
\ No newline at end of file
+
+   // 3 Objekte beschatten in Hierarchie (liegt auch im Pfad)
+   --- aa.c ---
+   void fun() {
+       printf("%O [a] fun()\n", this_object());
+   }
+
+   void fun3() {
+       printf("%O [a] fun3()\n", this_object());
+   }
+
+   --- bb.c ---
+   int fun() {
+       printf("%O [b] fun()\n", this_object());
+       find_object("/doc/beispiele/shadow/aa")->fun();
+   }
+
+   void fun2() {
+       printf("%O [b] fun2()\n", this_object());
+       find_object("/doc/beispiele/shadow/aa")->fun3();
+       this_object()->fun3();
+   }
+
+   void do_shadow(object target) { shadow(target, 1); }
+
+   --- cc.c ---
+   int fun() {
+       printf("%O [c] fun()\n", this_object());
+       find_object("/doc/beispiele/shadow/aa")->fun();
+   }
+
+   void fun3() {
+       printf("%O [c] fun3()\n", this_object());
+   }
+
+   void do_shadow(object target) { shadow(target, 1); }
+
+   // darauf arbeitender Code
+
+   object a, b, c;
+
+   destruct("/doc/beispiele/shadow/aa");
+   a = load_object("/doc/beispiele/shadow/aa");
+   destruct("/doc/beispiele/shadow/bb");
+   b = load_object("/doc/beispiele/shadow/bb");
+   destruct("/doc/beispiele/shadow/cc");
+   c = load_object("/doc/beispiele/shadow/cc");
+
+   b->do_shadow(a);
+   c->do_shadow(a);
+   printf("--- a->fun() ---\n");
+   a->fun();
+   printf("--- b->fun() ---\n");
+   b->fun();
+   printf("--- c->fun() ---\n");
+   c->fun();
+   printf("--- b->fun2() ---\n");
+   b->fun2();
+
+   // ... und seine Ausgabe:
+
+   --- a->fun() ---
+   /doc/beispiele/shadow/cc [c] fun()
+   /doc/beispiele/shadow/bb [b] fun()
+   /doc/beispiele/shadow/aa [a] fun()
+   --- b->fun() ---
+   /doc/beispiele/shadow/cc [c] fun()
+   /doc/beispiele/shadow/bb [b] fun()
+   /doc/beispiele/shadow/aa [a] fun()
+   --- c->fun() ---
+   /doc/beispiele/shadow/cc [c] fun()
+   /doc/beispiele/shadow/bb [b] fun()
+   /doc/beispiele/shadow/aa [a] fun()
+   --- b->fun2() ---
+   /doc/beispiele/shadow/bb [b] fun2()
+   /doc/beispiele/shadow/aa [a] fun3()
+   /doc/beispiele/shadow/cc [c] fun3()
+
+   // Der erste Aufruf von b::fun2() in a findet sofort a::fun3()! Der
+   // Driver nimmt an, dass alle Shadows ab c bei Rufen von b nach a
+   // schon ihre Chance hatten.
+   // Der zweite Aufruf allerdings ist auf b und wird beim Durchgeben
+   // an a von c uebernommen.
+
+
+SIEHE AUCH
+==========
+
+   Generell:       shadow(E)
+   Rechte:         query_allow_shadow(M), query_prevent_shadow(L)
+   Informationen:  query_shadowing(E)
+
+8.Aug 2007 Gloinson
diff --git a/doc/sefun/shout b/doc/sefun/shout
index ead266f..0d38abb 100644
--- a/doc/sefun/shout
+++ b/doc/sefun/shout
@@ -1,69 +1,93 @@
-FUNKTION:
-     varargs void shout( string text, mixed where )
 
-DEFINIERT IN:
-     /secure/simul_efun.c
+shout()
+*******
 
-ARGUMENTE:
-     text
-          Der Text, der ausgegeben werden soll
 
-     where [optional]
-          Wo soll man den Text ueberall hoeren koennen?
+FUNKTION
+========
 
-BESCHREIBUNG:
-     Der Text 'text' wird an alle Spieler in einem Gebiet ausgegeben.
-     Wird der Parameter 'where' weggelassen bzw. ist er null, so geht der
-     Text an alle Spieler im Mud. Das catch_tell() von NPCs wird nicht
-     ausgeloest.
+   varargs void shout( string text, mixed where )
 
-     Ist 'where' eine Zahl != 0, so wird der Text nur an Spieler ausgegeben,
-     die sich im selben Gebiet aufhalten wie this_player(). Dabei wird die
-     Zugehoerigkeit zum selben Gebiet an den ersten zwei Ebenen des Pfades
-     der Raeume festgemacht. Befindet sich this_player() z.B. in
-     "/d/ebene/irgendwo", so geht der Text an alle Spieler, deren Aufenthalts-
-     orte in "/d/ebene/*" liegen.
 
-     Fuer 'where' kann auch direkt ein Pfad angegeben werden. So wuerde ein
-     'shout( txt, "/players/" )' an alle Spieler gehen, die sich in
-     (eigentlich nicht erwuenschten) Raeumen in /players/* befinden.
+DEFINIERT IN
+============
 
-     Um mit einem Aufruf gleich mehrere Pfade abzudecken, kann auch ein Array
-     von Strings uebergeben werden. Alle Pfade werden als 'regular expression'
-     interpretiert. Dadurch ist es moeglich, die Zielraeume auf einfache Art
-     sehr genau einzuschraenken.
+   /secure/simul_efun.c
 
-     HINWEIS: Bitte ueberleg vor jedem shout() genau, ob es wirklich noetig
-     ist, dass _jeder_ etwas davon mitbekommt oder ob es nicht vielleicht
-     sinnvoller ist, das Zielgebiet etwas einzuschraenken. Im Zweifelsfall
-     sollte der zustaendige RM aufpassen, dass die Spieler nicht durch allzu
-     zahlreiche shouts belaestigt werden.
 
-RUeCKGABEWERT:
-     keiner
+ARGUMENTE
+=========
 
-BEISPIELE:
-     shout( "Du spuerst, wie ein Zittern durch das MorgenGrauen geht.\n" );
-        Der allseits bekannte Text wird an alle Spieler im MG ausgegeben.
+   text
+        Der Text, der ausgegeben werden soll
 
-     shout( "Du hoerst eine gewaltige Explosion.\n", 1 );
-        Von der Explosion bekommen alle Spieler in derselben Gegend etwas mit,
-        aber nicht am anderen Ende des Muds.
+   where [optional]
+        Wo soll man den Text ueberall hoeren koennen?
 
-     shout( "Irgendwo ist ein Baum umgefallen.\n", "/d/vland/" );
-        ... gibt eine Meldung aus, die keinen wirklich interessiert. Aber es
-        trifft eh nur Leute in einem unwichtigen Teil des MorgenGrauen. ;-)
 
-     shout( "Aufwachen Du Idler!\n", "/players/.*/workroom" );
-        Mit Hilfe von regular expressions kann man recht einfach z.B. alle
-        Workrooms auf einmal adressieren.
+BESCHREIBUNG
+============
 
-     shout( "Halloooooo, Echoooooo!\n", ({ "/d/gebirge/", "/d/ebene/" }) );
-        Wenn der Spieler hoch oben auf dem Berg laut genug ruft, hoert man
-        ihn auch noch weit in der Ebene.
+   Der Text 'text' wird an alle Spieler in einem Gebiet ausgegeben.
+   Wird der Parameter 'where' weggelassen bzw. ist er null, so geht der
+   Text an alle Spieler im Mud. Das catch_tell() von NPCs wird nicht
+   ausgeloest.
 
-SIEHE AUCH:
-     write(), say(), tell_object(), tell_room(), regexp()
+   Ist 'where' eine Zahl != 0, so wird der Text nur an Spieler ausgegeben,
+   die sich im selben Gebiet aufhalten wie this_player(). Dabei wird die
+   Zugehoerigkeit zum selben Gebiet an den ersten zwei Ebenen des Pfades
+   der Raeume festgemacht. Befindet sich this_player() z.B. in
+   "/d/ebene/irgendwo", so geht der Text an alle Spieler, deren Aufenthalts-
+   orte in "/d/ebene/*" liegen.
 
-----------------------------------------------------------------------------
+   Fuer 'where' kann auch direkt ein Pfad angegeben werden. So wuerde ein
+   'shout( txt, "/players/" )' an alle Spieler gehen, die sich in
+   (eigentlich nicht erwuenschten) Raeumen in /players/* befinden.
+
+   Um mit einem Aufruf gleich mehrere Pfade abzudecken, kann auch ein Array
+   von Strings uebergeben werden. Alle Pfade werden als 'regular expression'
+   interpretiert. Dadurch ist es moeglich, die Zielraeume auf einfache Art
+   sehr genau einzuschraenken.
+
+   HINWEIS: Bitte ueberleg vor jedem shout() genau, ob es wirklich noetig
+   ist, dass _jeder_ etwas davon mitbekommt oder ob es nicht vielleicht
+   sinnvoller ist, das Zielgebiet etwas einzuschraenken. Im Zweifelsfall
+   sollte der zustaendige RM aufpassen, dass die Spieler nicht durch allzu
+   zahlreiche shouts belaestigt werden.
+
+
+RUeCKGABEWERT
+=============
+
+   keiner
+
+
+BEISPIELE
+=========
+
+   shout( "Du spuerst, wie ein Zittern durch das MorgenGrauen geht.\n" );
+      Der allseits bekannte Text wird an alle Spieler im MG ausgegeben.
+
+   shout( "Du hoerst eine gewaltige Explosion.\n", 1 );
+      Von der Explosion bekommen alle Spieler in derselben Gegend etwas mit,
+      aber nicht am anderen Ende des Muds.
+
+   shout( "Irgendwo ist ein Baum umgefallen.\n", "/d/vland/" );
+      ... gibt eine Meldung aus, die keinen wirklich interessiert. Aber es
+      trifft eh nur Leute in einem unwichtigen Teil des MorgenGrauen. ;-)
+
+   shout( "Aufwachen Du Idler!\n", "/players/.*/workroom" );
+      Mit Hilfe von regular expressions kann man recht einfach z.B. alle
+      Workrooms auf einmal adressieren.
+
+   shout( "Halloooooo, Echoooooo!\n", ({ "/d/gebirge/", "/d/ebene/" }) );
+      Wenn der Spieler hoch oben auf dem Berg laut genug ruft, hoert man
+      ihn auch noch weit in der Ebene.
+
+
+SIEHE AUCH
+==========
+
+   write(), say(), tell_object(), tell_room(), regexp()
+
 Last modified: Sun Nov 28 03:00:00 1999 by Tiamak
diff --git a/doc/sefun/time2string b/doc/sefun/time2string
index 4dae719..4acd1a2 100644
--- a/doc/sefun/time2string
+++ b/doc/sefun/time2string
@@ -1,53 +1,75 @@
-FUNKTION:
-	string time2string( string format, int time )
-	
-ARGUMENTE:
-	format: String, der das Format der Zeitausgabe festlegt.
-	time: Eine Anzahl von Sekunden, die ausgegeben werden soll.
 
-ERGEBNIS:
-	Zeit in String-Form.
+time2string()
+*************
 
-BESCHREIBUNG:
-	Der Formatstring wird zurueckgegeben, wobei bestimmte Ersetzungs-
-	symbole durch passende Daten, die aus der Zeit berechnet werden,
-	ersetzt werden. Die Ersetzungssymbole funktionieren aehnlich
-	denen aus 'printf' bekannten Symbolen. Insbesondere kann eine
-	Feldbreite mit angegeben werden.
 
-	Folgende Ersetzungssymbole sind erlaubt:
-	%%	wird durch ein Prozent (%) ersetzt.
-	%n, %w, %d, %h, %m, %s
-		  werden durch die Anzahl der Monate, Wochen, Tage, Stunden, Minuten oder
-      Sekunden ersetzt. Die Funktion erkennt, welches die groesste benutzte
-		  Zeiteinheit ist und rechnet die keineren so um, dass sie zwischen 0 und
-      jeweiligen Maximum der Zeiteinheit liegen (59, 23 etc.) liegen.
- 	%N	wird durch die Worte 'Woche' oder 'Wochen' ersetzt,
-      je nachdem welchen Wertd %n haette.
- 	%W	wird durch die Worte 'Woche' oder 'Wochen' ersetzt,
-		  je nachdem welchen Wert %w haette.
-	%D	wird durch die Worte 'Tag' oder 'Tage' ersetzt,
-		  je nachdem welchen Wert %d haette.
-	%H,%M,%S
-		  werden durch die Worte 'Stunde(n)', 'Minute(n)' bzw. 'Sekunde(n)'
-      ersetzt.
-	%X	wird durch die groesste Zeiteinheit ersetzt, die nicht Null ist. Wenn
-      bei %X die Feldbreite 0 angegeben wird (also %0X), dann wird nicht der
-      ausgeschriebene Name, sonder eine Abkuerzung fuer die Zeiteinheit
-      ausgegeben. (Das sind dann 'd','h','m' oder 's'.)
-	%x	wird durch den numerischen Wert dieser Zeiteinheit
-		  ersetzt.
-			
-BEISPIELE:
-	time2string( "%m %M", 60 ) -> "1 Minute"
-	time2string( "%m %M", 120 ) -> "2 Minuten"
-	time2string( "%s %S", 125 ) -> "125 Sekunden"
-	time2string( "%m %M und %s %S" ) -> "2 Minuten und 5 Sekunden"
-	time2string( "%d:%02h:%02m:%02s", 10000 ) -> "0:02:46:40"
-	time2string( "%x %X", 3600 ) -> "1 Stunde"
-	time2string( "%x %0X", 3600 ) -> "1 h"
-	time2string( "%x %X", 360000 ) -> "4 Tage"
-	time2string( "%x %0X", 360000 ) -> "4 d"
+FUNKTION
+========
 
-SIEHE AUCH:
-	sprintf(E)
+   string time2string( string format, int time )
+
+
+ARGUMENTE
+=========
+
+   format: String, der das Format der Zeitausgabe festlegt.
+   time: Eine Anzahl von Sekunden, die ausgegeben werden soll.
+
+
+ERGEBNIS
+========
+
+   Zeit in String-Form.
+
+
+BESCHREIBUNG
+============
+
+     Der Formatstring wird zurueckgegeben, wobei bestimmte Ersetzungs-
+     symbole durch passende Daten, die aus der Zeit berechnet werden,
+     ersetzt werden. Die Ersetzungssymbole funktionieren aehnlich
+     denen aus 'printf' bekannten Symbolen. Insbesondere kann eine
+     Feldbreite mit angegeben werden.
+
+     Folgende Ersetzungssymbole sind erlaubt:
+     %%      wird durch ein Prozent (%) ersetzt.
+     %n, %w, %d, %h, %m, %s
+               werden durch die Anzahl der Monate, Wochen, Tage, Stunden, Minuten oder
+   Sekunden ersetzt. Die Funktion erkennt, welches die groesste benutzte
+               Zeiteinheit ist und rechnet die keineren so um, dass sie zwischen 0 und
+   jeweiligen Maximum der Zeiteinheit liegen (59, 23 etc.) liegen.
+     %N      wird durch die Worte 'Woche' oder 'Wochen' ersetzt,
+   je nachdem welchen Wertd %n haette.
+     %W      wird durch die Worte 'Woche' oder 'Wochen' ersetzt,
+               je nachdem welchen Wert %w haette.
+     %D      wird durch die Worte 'Tag' oder 'Tage' ersetzt,
+               je nachdem welchen Wert %d haette.
+     %H,%M,%S
+               werden durch die Worte 'Stunde(n)', 'Minute(n)' bzw. 'Sekunde(n)'
+   ersetzt.
+     %X      wird durch die groesste Zeiteinheit ersetzt, die nicht Null ist. Wenn
+   bei %X die Feldbreite 0 angegeben wird (also %0X), dann wird nicht der
+   ausgeschriebene Name, sonder eine Abkuerzung fuer die Zeiteinheit
+   ausgegeben. (Das sind dann 'd','h','m' oder 's'.)
+     %x      wird durch den numerischen Wert dieser Zeiteinheit
+               ersetzt.
+
+
+BEISPIELE
+=========
+
+   time2string( "%m %M", 60 ) -> "1 Minute"
+   time2string( "%m %M", 120 ) -> "2 Minuten"
+   time2string( "%s %S", 125 ) -> "125 Sekunden"
+   time2string( "%m %M und %s %S" ) -> "2 Minuten und 5 Sekunden"
+   time2string( "%d:%02h:%02m:%02s", 10000 ) -> "0:02:46:40"
+   time2string( "%x %X", 3600 ) -> "1 Stunde"
+   time2string( "%x %0X", 3600 ) -> "1 h"
+   time2string( "%x %X", 360000 ) -> "4 Tage"
+   time2string( "%x %0X", 360000 ) -> "4 d"
+
+
+SIEHE AUCH
+==========
+
+   sprintf(E)
diff --git a/doc/sefun/update_actions b/doc/sefun/update_actions
index b28cf9f..b25c07c 100644
--- a/doc/sefun/update_actions
+++ b/doc/sefun/update_actions
@@ -1,38 +1,63 @@
-FUNKTION:
-        void update_actions()
 
-ARGUMENTE:
-        keine
+update_actions()
+****************
 
-BESCHREIBUNG:
-        Falls eine Aktion ein add_action() ausgeloest hat, werden mit dieser
-        Funktion die neuen Befehle bei allen Lebewesen im aufrufenden Objekt
-        bzw. in der Umgebung des aufrufenden Objektes aktiv.
 
-RUECKGABEWERT:
-        keiner
+FUNKTION
+========
 
-BEMERKUNGEN:
-        Diese Funktion wird eigentlich nur benoetigt, wenn man mit add_action()
-        anstelle von AddCmd() arbeitet (zB. bei Objekten, die nicht
-        /std/thing/commands inheriten).
+   void update_actions()
 
-BEISPIELE:
-        /* Normalerweise sollte man es SO gerade nicht machen. Stattdessen
-         * sollte die "kletter"-Funktion pruefen, ob die Luke geoeffnet ist, 
-         * und sich im Fehlerfall beschweren.
-         * So aber dient es als schoenes Beispiel fuer update_actions() ;)
-         */
-        int oeffne(string str)
-        {
-          if( str == "luke" ) {
-            write( "Du oeffnest die Luke. Du kannst jetzt nach unten klettern.\n");
-            add_action("kletter", "kletter", 1);
-            update_actions();
-            return 1;
-          }
-          return 0;
-        }
 
-SIEHE AUCH:
-  add_action(E), AddCmd(L), RemoveCmd(L)
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Falls eine Aktion ein add_action() ausgeloest hat, werden mit dieser
+   Funktion die neuen Befehle bei allen Lebewesen im aufrufenden Objekt
+   bzw. in der Umgebung des aufrufenden Objektes aktiv.
+
+
+RUECKGABEWERT
+=============
+
+   keiner
+
+
+BEMERKUNGEN
+===========
+
+   Diese Funktion wird eigentlich nur benoetigt, wenn man mit add_action()
+   anstelle von AddCmd() arbeitet (zB. bei Objekten, die nicht
+   /std/thing/commands inheriten).
+
+
+BEISPIELE
+=========
+
+   /* Normalerweise sollte man es SO gerade nicht machen. Stattdessen
+    * sollte die "kletter"-Funktion pruefen, ob die Luke geoeffnet ist,
+    * und sich im Fehlerfall beschweren.
+    * So aber dient es als schoenes Beispiel fuer update_actions() ;)
+    */
+   int oeffne(string str)
+   {
+     if( str == "luke" ) {
+       write( "Du oeffnest die Luke. Du kannst jetzt nach unten klettern.\n");
+       add_action("kletter", "kletter", 1);
+       update_actions();
+       return 1;
+     }
+     return 0;
+   }
+
+
+SIEHE AUCH
+==========
+
+   add_action(E), AddCmd(L), RemoveCmd(L)
diff --git a/doc/sefun/upperstring b/doc/sefun/upperstring
index 665ed16..416c90d 100644
--- a/doc/sefun/upperstring
+++ b/doc/sefun/upperstring
@@ -1,17 +1,39 @@
-FUNKTION:
-	string upperstring(string str)
 
-ARGUMENTE:
-	str - Der umzuwandelnde String.
+upperstring()
+*************
 
-BESCHREIBUNG:
-	Alle Kleinbuchstaben in str werden in Grossbuchstaben umgewandelt.
 
-RUECKGABEWERT:
-	Der umgewandelte String.
+FUNKTION
+========
 
-BEISPIELE:
-	s = upperstring( "Na, Sterblicher!\n") => s = "NA, STERBLICHER!\n"
+   string upperstring(string str)
 
-SIEHE AUCH:
-	lowerstring(E), lower_case(E), capitalize(E)
+
+ARGUMENTE
+=========
+
+   str - Der umzuwandelnde String.
+
+
+BESCHREIBUNG
+============
+
+   Alle Kleinbuchstaben in str werden in Grossbuchstaben umgewandelt.
+
+
+RUECKGABEWERT
+=============
+
+   Der umgewandelte String.
+
+
+BEISPIELE
+=========
+
+   s = upperstring( "Na, Sterblicher!\n") => s = "NA, STERBLICHER!\n"
+
+
+SIEHE AUCH
+==========
+
+   lowerstring(E), lower_case(E), capitalize(E)
diff --git a/doc/sefun/uptime b/doc/sefun/uptime
index ee7a536..4c007a3 100644
--- a/doc/sefun/uptime
+++ b/doc/sefun/uptime
@@ -1,16 +1,37 @@
-FUNKTION:
-        string uptime()
 
-ARGUMENTE:
-        keine
+uptime()
+********
 
-BESCHREIBUNG:
-        Liefert die aktuelle Uptime des MorgenGrauens.
 
-RUECKGABEWERT:
-        Die Uptime als Zeitstring.
+FUNKTION
+========
 
-BEISPIELE:
-        ut = uptime() => ut = "14 Tage, 9 Stunden, 3 Minuten und 7 Sekunden."
+   string uptime()
 
-SIEHE AUCH:
+
+ARGUMENTE
+=========
+
+   keine
+
+
+BESCHREIBUNG
+============
+
+   Liefert die aktuelle Uptime des MorgenGrauens.
+
+
+RUECKGABEWERT
+=============
+
+   Die Uptime als Zeitstring.
+
+
+BEISPIELE
+=========
+
+   ut = uptime() => ut = "14 Tage, 9 Stunden, 3 Minuten und 7 Sekunden."
+
+
+SIEHE AUCH
+==========
diff --git a/doc/sefun/wizlist b/doc/sefun/wizlist
index a2ba7bd..f81b9b8 100644
--- a/doc/sefun/wizlist
+++ b/doc/sefun/wizlist
@@ -1,66 +1,84 @@
-SYNOPSIS:
-  varargs void wizlist(string name, int sortkey ) 	
 
-DESCRIPTION:
-  wizlist() liefert eine Liste mit verschiedenen Verbrauchsdaten 
-	zu Magiern. Es werden dabei normalerweise 21 Eintraege ausgegeben:
-  10 vor <name>, <name> selbst und 10 nach <name>.
+wizlist()
+*********
 
-  Die Liste ist dabei folgendermassen aufgebaut:
 
-	1. WL_NAME
-	   Gesammelt werden die Daten pro UID. Hierbei zaehlt aber jede EUID, nicht
-     nur die von Magiern.
-     Das heisst, Objekte unter /d/polar/vanion/eispalast
-	   werden nicht unter "vanion" sondern unter "d.polar.vanion"
-	   abgerechnet.
+SYNOPSIS
+========
 
-	2. WL_COMMANDS
-     Anzahl der diesem Objekt zugeordneten commands.
+   varargs void wizlist(string name, int sortkey )
 
-	3. WL_COMMANDS * 100 / total_cmd 
-     Prozentualer Anteil an den gesamt verbrauchten commands.
 
-	4. WL_COST (links in der eckigen Klammer)
-     Anzahl der verbrauchten eval ticks. Dies ist zeitlich gewichtet, d.h.
-     nimmt im Lauf der Zeit ab, wenn nichts mehr dazu kommt.
+DESCRIPTION
+===========
 
-  5. WL_TOTAL_GIGACOST (rechts in der eckigen Klammer)
-     Anzahl der insgesamt verbrauchten eval ticks in Giga-Ticks.
-     Nicht zeitlich gewichtet.
+   wizlist() liefert eine Liste mit verschiedenen Verbrauchsdaten
+         zu Magiern. Es werden dabei normalerweise 21 Eintraege ausgegeben:
+   10 vor <name>, <name> selbst und 10 nach <name>.
 
-	6. WL_HEART_BEATS
-     Anzahl der ausgeloesten heart beats.
-  
-  7. WL_ARRAY_TOTAL
+   Die Liste ist dabei folgendermassen aufgebaut:
 
-  8. WL_MAPPING_TOTAL
+         1. WL_NAME
+            Gesammelt werden die Daten pro UID. Hierbei zaehlt aber jede EUID, nicht
+      nur die von Magiern.
+      Das heisst, Objekte unter /d/polar/vanion/eispalast
+            werden nicht unter "vanion" sondern unter "d.polar.vanion"
+            abgerechnet.
 
-PARAMETERS: 
-  Wird name angegeben, wird erzwungen, dass die erwaehnte EUID mit
-  in der Liste dargestellt wird. Wird name nicht angegeben, wird es
-  automatisch auf this_player()->query_real_name() gesetzt.
+         2. WL_COMMANDS
+      Anzahl der diesem Objekt zugeordneten commands.
 
-  Wird als name "TOP100" angegeben, wird die Top-100-Liste ausgegeben.
+         3. WL_COMMANDS * 100 / total_cmd
+      Prozentualer Anteil an den gesamt verbrauchten commands.
 
-  Wird als name "ALL" angegeben, wird die vollstaendige Liste aus-
-  gegeben.
+         4. WL_COST (links in der eckigen Klammer)
+      Anzahl der verbrauchten eval ticks. Dies ist zeitlich gewichtet, d.h.
+      nimmt im Lauf der Zeit ab, wenn nichts mehr dazu kommt.
 
-  Durch Angabe von sortkey kann die Liste nach einer der Spalten 
-  sortiert werden. Gueltige Werte sind die in /sys/wizlist.h ange-
-  gebenen Defines.
-	
-EXAMPLE: 
-  > xeval wizlist("vanion", WL_HEART_BEATS)
-      Erzwingt Vanions Eintrag in der Liste und sortiert die Liste anhand
-      der durch die EUIDs ausgefuehrten heart beats.
+   5. WL_TOTAL_GIGACOST (rechts in der eckigen Klammer)
+      Anzahl der insgesamt verbrauchten eval ticks in Giga-Ticks.
+      Nicht zeitlich gewichtet.
 
-  > xeval wizlist("ALL", WL_EVAL_COST)
+         6. WL_HEART_BEATS
+      Anzahl der ausgeloesten heart beats.
+
+
+
+   7. WL_ARRAY_TOTAL
+
+   8. WL_MAPPING_TOTAL
+
+PARAMETERS:
+   Wird name angegeben, wird erzwungen, dass die erwaehnte EUID mit in
+   der Liste dargestellt wird. Wird name nicht angegeben, wird es
+   automatisch auf this_player()->query_real_name() gesetzt.
+
+   Wird als name "TOP100" angegeben, wird die Top-100-Liste
+   ausgegeben.
+
+   Wird als name "ALL" angegeben, wird die vollstaendige Liste aus-
+   gegeben.
+
+   Durch Angabe von sortkey kann die Liste nach einer der Spalten
+   sortiert werden. Gueltige Werte sind die in /sys/wizlist.h ange-
+   gebenen Defines.
+
+EXAMPLE
+   > xeval wizlist("vanion", WL_HEART_BEATS)
+      Erzwingt Vanions Eintrag in der Liste und sortiert die Liste
+      anhand der durch die EUIDs ausgefuehrten heart beats.
+
+   > xeval wizlist("ALL", WL_EVAL_COST)
       Zeigt die komplette Liste nach eval ticks-Verbauch sortiert an.
 
-SEE ALSO:
-      wizlist_info(E)
 
-LAST UPDATED:
-  09.05.2015, Zesstra
+SEE ALSO
+========
 
+   wizlist_info(E)
+
+
+LAST UPDATED
+============
+
+   09.05.2015, Zesstra
diff --git a/doc/sefun/wizlist_info b/doc/sefun/wizlist_info
index 2a5c127..0c86434 100644
--- a/doc/sefun/wizlist_info
+++ b/doc/sefun/wizlist_info
@@ -1,39 +1,58 @@
-GESCHUETZT
-SYNOPSIS
-        #include <sys/wizlist.h>
 
-        *mixed wizlist_info();
+wizlist_info()
+**************
+
+
+GESCHUETZT
+==========
+
+
+SYNOPSIS
+========
+
+   #include <sys/wizlist.h>
+
+   *mixed wizlist_info();
+
 
 BESCHREIBUNG
-        Liefert ein Array mit Eintraegen aus der Wizlist (der internen
-        Magierliste). Die Benutzung muss durch das Masterobjekt erlaubt
-        werden.
+============
 
-        Das Resultat ist ein Array mit einem Eintrag fuer jeden Magier (uid).
-        Jeder Eintrag enthaelt wiederum ein Array mit folgenden Elementen:
+   Liefert ein Array mit Eintraegen aus der Wizlist (der internen
+   Magierliste). Die Benutzung muss durch das Masterobjekt erlaubt
+   werden.
 
-            string  w[WL_NAME]          Name des Magiers
-            int w[WL_COMMANDS]          Gewichtete Anzahl Kommandi, die von
-                                        Objekten dieses Gottes ausgefuehrt
-                                        wurden
-            int w[WL_COSTE]             Gewichtete Summe der Eval-Kosten
-            int w[WL_GIGACOST]          Gewichtete Summe der Eval-Kosten
-            int W[WL_TOTAL_COST]        Totale Summe der Eval-Kosten
-            int w[WL_TOTAL_GIGACOST]    Totale Summe der Eval-Kosten
-            int w[WL_HEART_BEAT]        Gewichtete Anzahl der heat_beat()s
-            int w[WL_CALL_OUT]          Reserviert fuer call_out()s
-                                        (bisher nicht implementiert)
-            int w[WL_ARRAY_TOTAL]       Totale Groesse aller Arrays in
-                                        Elementen
-            mixed w[WL_EXTRA]           Die eigentliche Wizlist-Info
+   Das Resultat ist ein Array mit einem Eintrag fuer jeden Magier (uid).
+   Jeder Eintrag enthaelt wiederum ein Array mit folgenden Elementen:
 
-        Die "gewichteten" Werte verfallen pro Stunde um 10%.
+       string  w[WL_NAME]          Name des Magiers
+       int w[WL_COMMANDS]          Gewichtete Anzahl Kommandi, die von
+                                   Objekten dieses Gottes ausgefuehrt
+                                   wurden
+       int w[WL_COSTE]             Gewichtete Summe der Eval-Kosten
+       int w[WL_GIGACOST]          Gewichtete Summe der Eval-Kosten
+       int W[WL_TOTAL_COST]        Totale Summe der Eval-Kosten
+       int w[WL_TOTAL_GIGACOST]    Totale Summe der Eval-Kosten
+       int w[WL_HEART_BEAT]        Gewichtete Anzahl der heat_beat()s
+       int w[WL_CALL_OUT]          Reserviert fuer call_out()s
+                                   (bisher nicht implementiert)
+       int w[WL_ARRAY_TOTAL]       Totale Groesse aller Arrays in
+                                   Elementen
+       mixed w[WL_EXTRA]           Die eigentliche Wizlist-Info
+
+   Die "gewichteten" Werte verfallen pro Stunde um 10%.
+
 
 AENDERUNGEN
-        LDMud 3.2.10 trennte das alte WL_EVAL_COST in WL_COST und WL_GIGACOST,
-        um laengeren Uptimes gerecht zu werden. Ausserdem wurde
-        WL_TOTAL_COST und WL_TOTAL_GIGACOST eingefuehrt.
+===========
+
+   LDMud 3.2.10 trennte das alte WL_EVAL_COST in WL_COST und WL_GIGACOST,
+   um laengeren Uptimes gerecht zu werden. Ausserdem wurde
+   WL_TOTAL_COST und WL_TOTAL_GIGACOST eingefuehrt.
+
 
 SIEHE AUCH
-        privilege_violation(M), set_extra_wizinfo_size(E),
-        get_extra_wizinfo(E), set_extra_wizinfo(E)
+==========
+
+   privilege_violation(M), set_extra_wizinfo_size(E),
+   get_extra_wizinfo(E), set_extra_wizinfo(E)
diff --git a/doc/sefun/write_data b/doc/sefun/write_data
index 5a205d5..b8f0d4f 100644
--- a/doc/sefun/write_data
+++ b/doc/sefun/write_data
@@ -1,23 +1,39 @@
+
+write_data()
+************
+
+
 SYNOPSIS
-        string write_data(string file, int start, int anzahl)
+========
+
+   string write_data(string file, int start, int anzahl)
+
 
 BESCHREIBUNG
-        Diese Funktion macht genau das, was write_file() tut (also siehe dort),
-        allerdings stellt sie sicher, dass <file> immer mit einem /data/
-        beginnt (setzt es also notfalls davor).
-        Es wird also immer irgendwo unterhalb von /data/ geschrieben.
+============
 
-        Die Benutzung dieser sefun wird dringend empfohlen, falls Daten
-        ausserhalb von Spielerobjekten gepeichert werden, damit Daten und
-        Code getrennt abgelegt sind. Dies vereinfacht z.B. die
-        Datensicherung.
+   Diese Funktion macht genau das, was write_file() tut (also siehe dort),
+   allerdings stellt sie sicher, dass <file> immer mit einem /data/
+   beginnt (setzt es also notfalls davor).
+   Es wird also immer irgendwo unterhalb von /data/ geschrieben.
+
+   Die Benutzung dieser sefun wird dringend empfohlen, falls Daten
+   ausserhalb von Spielerobjekten gepeichert werden, damit Daten und
+   Code getrennt abgelegt sind. Dies vereinfacht z.B. die
+   Datensicherung.
+
 
 BEISPIEL
-        # write_file("/d/ebene/zesstra/blupp", "Testdaten.\n");
-        -> schreibt in das File /data/d/ebene/zesstra/blupp.
-        # write_file("/data/d/ebene/zesstra/blupp", "Testdaten.\n");
-        -> tut dasselbe.
+========
+
+   # write_file("/d/ebene/zesstra/blupp", "Testdaten.\n");
+   -> schreibt in das File /data/d/ebene/zesstra/blupp.
+   # write_file("/data/d/ebene/zesstra/blupp", "Testdaten.\n");
+   -> tut dasselbe.
+
 
 SIEHE AUCH
-        read_data()
-        read_file(E), write_file(E), read_bytes(E), write_file(E)
+==========
+
+   read_data()
+   read_file(E), write_file(E), read_bytes(E), write_file(E)