diff --git a/doc/lfun/access_rights b/doc/lfun/access_rights
index 9859761..7a99a99 100644
--- a/doc/lfun/access_rights
+++ b/doc/lfun/access_rights
@@ -1,75 +1,98 @@
+
 access_rights()
+***************
 
-FUNKTION:
-    int access_rights(string euid, string file);
 
-DEFINIERT IN:
-    access_rights.c (muss man selber schreiben)
+FUNKTION
+========
 
-PARAMETER:
-    euid
-        Die euid desjenigen, der auf das Verzeichnis schreiben will
-    file
-        Name der Datei, auf die zugegriffen werden soll
+   int access_rights(string euid, string file);
 
-BESCHREIBUNG:
-    access_rights() wird immer dann aufgerufen, wenn jemand, der nicht
-    sowieso schon schreibberechtigt ist, in die Datei/das Verzeichnis file
-    schreiben oder loeschen will.
 
-    Anhand von euid kann man dann entscheiden, ob der Schreibzugriff erlaubt
-    wird oder nicht.
+DEFINIERT IN
+============
 
-RUECKGABEWERT:
-    0, wenn der Zugriff verweigert wird,
-    1, wenn der Zugriff erlaubt wird.
+   access_rights.c (muss man selber schreiben)
 
-BEISPIELE:
-    /* /d/inseln/wargon/access_rights.c */
 
-    int access_rights(string euid, string file)
-    {
-      string dir, rest;
+PARAMETER
+=========
 
-      // Catweazle darf auf alles zugreifen (*argl* ;^)
-      if (euid == "catweazle")
-        return 1;
+   euid
+       Die euid desjenigen, der auf das Verzeichnis schreiben will
+   file
+       Name der Datei, auf die zugegriffen werden soll
 
-      // Rechte auf einzelne Verzeichnisse ermitteln:
-      if (sscanf(file, "%s/%s", dir, rest) != 2)
-        rest = file;
 
-      // Jof und Boing duerfen an Tarko Reub rumpfuschen:
-      if (dir == "tarko" && (euid == "jof" || euid == "boing"))
-        return 1;
+BESCHREIBUNG
+============
 
-      // Anthea darf die Karten von Aurora und der Piratenhoehle bearbeiten:
-      if (dir == "MAPS" && 
-          member( ({"Aurora", "Piratenhoehle" }), rest) >= 0 && 
-          euid == "anthea")
-        return 1;
+   access_rights() wird immer dann aufgerufen, wenn jemand, der nicht
+   sowieso schon schreibberechtigt ist, in die Datei/das Verzeichnis file
+   schreiben oder loeschen will.
 
-      // alle anderen duerfen nicht!
-      return 0;
-    }
+   Anhand von euid kann man dann entscheiden, ob der Schreibzugriff erlaubt
+   wird oder nicht.
 
-BEMERKUNGEN:
-    file ist immer relativ zu dem Verzeichnis, in dem das access_rights.c
-    liegt! Will also jemand auf /d/inseln/wargon/tarko/macros.h schreiben,
-    wird file "tarko/macros.h" uebergeben.
 
-    In Verzeichnissen von Magiern mit einem Level >= ELDER_LVL wird das
-    access_rights.c NICHT ausgewertet (da damit andere Magier zB. an
-    Erzmagierrechte gelangen koennten).
+RUECKGABEWERT
+=============
 
-    Es wird immer nur EIN access_rights.c ausgewertet, naemlich das in der
-    tiefsten Verzeichnisebene.
+   0, wenn der Zugriff verweigert wird,
+   1, wenn der Zugriff erlaubt wird.
 
-    Man kann sowohl in seinen Regionsverzeichnissen als auch in seinen
-    Homeverzeichnissen access_rights.c-Dateien anlegen.
 
-    GANZ WICHTIG!!!
-    Fuer die Dateien, die evtl. von anderen angelegt werden, ist man immer
-    noch selbst verantwortlich! Wenn jemand also ein Gebiet bei Dir an-
-    schliesst, muss es erst von den verantwortlichen Regionsmagiern abgesegnet
-    sein!
+BEISPIELE
+=========
+
+   /* /d/inseln/wargon/access_rights.c */
+
+   int access_rights(string euid, string file)
+   {
+     string dir, rest;
+
+     // Catweazle darf auf alles zugreifen (*argl* ;^)
+     if (euid == "catweazle")
+       return 1;
+
+     // Rechte auf einzelne Verzeichnisse ermitteln:
+     if (sscanf(file, "%s/%s", dir, rest) != 2)
+       rest = file;
+
+     // Jof und Boing duerfen an Tarko Reub rumpfuschen:
+     if (dir == "tarko" && (euid == "jof" || euid == "boing"))
+       return 1;
+
+     // Anthea darf die Karten von Aurora und der Piratenhoehle bearbeiten:
+     if (dir == "MAPS" &&
+         member( ({"Aurora", "Piratenhoehle" }), rest) >= 0 &&
+         euid == "anthea")
+       return 1;
+
+     // alle anderen duerfen nicht!
+     return 0;
+   }
+
+
+BEMERKUNGEN
+===========
+
+   file ist immer relativ zu dem Verzeichnis, in dem das access_rights.c
+   liegt! Will also jemand auf /d/inseln/wargon/tarko/macros.h schreiben,
+   wird file "tarko/macros.h" uebergeben.
+
+   In Verzeichnissen von Magiern mit einem Level >= ELDER_LVL wird das
+   access_rights.c NICHT ausgewertet (da damit andere Magier zB. an
+   Erzmagierrechte gelangen koennten).
+
+   Es wird immer nur EIN access_rights.c ausgewertet, naemlich das in der
+   tiefsten Verzeichnisebene.
+
+   Man kann sowohl in seinen Regionsverzeichnissen als auch in seinen
+   Homeverzeichnissen access_rights.c-Dateien anlegen.
+
+   GANZ WICHTIG!!!
+   Fuer die Dateien, die evtl. von anderen angelegt werden, ist man immer
+   noch selbst verantwortlich! Wenn jemand also ein Gebiet bei Dir an-
+   schliesst, muss es erst von den verantwortlichen Regionsmagiern abgesegnet
+   sein!
