Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/doc/lfun/AddDetail b/doc/lfun/AddDetail
new file mode 100644
index 0000000..229197b
--- /dev/null
+++ b/doc/lfun/AddDetail
@@ -0,0 +1,91 @@
+AddDetail()
+
+FUNKTION:
+    void AddDetail(string|string* keys,
+                   string|string*|mapping|closure desc);
+
+DEFINIERT IN:
+    /std/thing/description.c
+
+ARGUMENTE:
+    keys
+      String oder Array von Strings mit den Namen der Details.
+    desc
+      String, Mapping, String-Array oder Closure mit/zur Beschreibung.
+
+BESCHREIBUNG:
+    Die Beschreibung der Details <keys> wird gesetzt. Wie die Details
+    bei der Untersuchung aussehen, haengt im wesentlichen vom Typ der
+    Beschreibung <desc> ab:
+      <desc> ist ein String.
+        Beim Untersuchen wird dieser String zurueckgegeben.
+      <desc> ist ein String-Array.
+        Beim Untersuchen wird zufaellig einer der Strings zurueckgegeben.
+      <desc> ist ein Mapping.
+        Das Mapping muss folgenden Aufbau haben:
+          ([0:        "Defaulttext",
+            "rasse1": "r1text", ...]).
+
+        Falls fuer die Rasse des das Detail untersuchenden Spielers ein
+        Eintrag im Mapping existiert, wird der entsprechende Text
+        zurueckgegeben, ansonsten der Defaulttext. Auf diese Weise sind
+        rassenabhaengige Details moeglich. Siehe auch die Beispiele.
+      <desc> ist eine Closure.
+        In diesem Fall wird die Closure ausgefuehrt und das Ergebnis
+        zurueckgegeben. Die Closure bekommt dabei den Namen des Details
+        als Parameter uebergeben.
+
+    Fuer Details koennen Forscherpunkte eingetragen werden.
+
+BEISPIELE:
+    Ein schlichtes Detail:
+
+      AddDetail(({"sofa","couch"}), "Eine kleine Couch.\n");
+
+    Laengere Details sollten hierbei nicht per Hand umgebrochen werden,
+    sondern man kann hierzu die Funktion break_string() nutzen:
+
+      AddDetail("detail", break_string(
+        "Du wolltest es ja nicht anders, jetzt musst Du Dir dieses "
+        "fuerchterlich lange Detail durchlesen!!!", 78));
+
+    Noetige Zeilenumbrueche bei Zeilenlaengen groesser 77 werden so
+    automatisch generiert.
+    Ein rassenabhaengiges Detail:
+
+      AddDetail(({"bett","bettchen"}),
+        ([0      :"Eine kleines Bett.\n", // Der Defaulttext
+          "zwerg":                        // Die Rasse klein schreiben
+                "Das Bett laedt geradezu zu einem Nickerchen ein.\n"]));
+
+    Und nun ein Detail mit Closure (diese Version ersetzt das Verhalten
+     von AddSpecialDetail).
+
+      int hebel_betaetigt;
+      ...
+      string hebel(string str); // Funktion bekannt machen (Prototyping)
+      ...
+      AddDetail(({"hebel","schalter"}), #'hebel);
+      ...
+      string hebel(string key) {
+        if(hebel_betaetigt)
+          return "Der "+capitalize(key)+" steht auf EIN.\n";
+        else
+          return "Der "+capitalize(key)+" steht auf AUS.\n";
+      }
+
+    Man erhaelt verschiedene Ergebnisse beim Untersuchen, je nachdem
+    ob das Flag hebel_betaetigt gesetzt ist oder nicht.
+
+SIEHE AUCH:
+    Setzen:    AddReadDetail(), AddSmells(), AddSounds(),
+               AddTouchDetail()
+    Loeschen:  RemoveDetail(), RemoveReadDetail(), RemoveSmells(),
+               RemoveSounds(), RemoveTouchDetail()
+    Daten:     P_DETAILS, P_READ_DETAILS, P_SMELLS, P_SOUNDS,
+               P_TOUCH_DETAILS, P_SPECIAL_DETAILS
+    Veraltet:  AddSpecialDetail(), RemoveSpecialDetail(), P_READ_MSG
+    Sonstiges: GetDetail(), break_string()
+
+20.01.2015, Zesstra
+