Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/doc/efun/say b/doc/efun/say
new file mode 100644
index 0000000..6f0958f
--- /dev/null
+++ b/doc/efun/say
@@ -0,0 +1,98 @@
+SYNOPSIS
+        void say(string str);
+        void say(string str, object exclude);
+        void say(string str, object *excludes);
+
+        void say(mixed *|mapping|struct|object msg);
+        void say(mixed *|mapping|struct|object msg, object exclude);
+        void say(mixed *|mapping|struct|object msg, object *excludes);
+
+BESCHREIBUNG
+        Es bestehen zwei Hauptanwendungen fuer say():
+
+        Wenn das erste Argument ein String <str> ist, wird er an alle
+        lebendigen Objekte im aktuellen Raum gesendet, ausser zum Objekt,
+        das die Funktion aufgerufen hat.
+
+        Ist die Nachricht ein String, wird der Text an interaktive Objekte
+        direkt ausgegeben, fuer andere Objekte wird die lfun catch_tell()
+        in diesen aufgerufen.
+        Falls ein Lewebesen die Funktion catch_tell() definiert (-> shadow),
+        so wird der Text hier ausgewertet und nicht an den User ausgegeben.
+
+        Wenn das zweite Argument, die Nachricht, kein String ist, wird in
+        allen Lebewesen, die den Text erhalten, catch_msg() anstatt
+        catch_tell() aufgerufen.
+
+        Mit dem Array <*exclude> kann man verhindern, dass die Nachricht an
+        die darin enthaltenen Objekte gesendet wird. Der Sender muss nicht
+        noch einmal aufgefuehrt werden.
+        Das ist sinnvoll, wenn zB eine Spielergruppe Ausloeser einer Meldung
+        ist und diese selbst nicht erhalten soll.
+
+        Das aufrufende Objekt wird nach folgenden Regeln bestimmt:
+          - Wenn say() aus einem lebendigen Objekt aufgerufen wird, gilt
+            dieses als das aufrufende Objekt.
+          - Wenn say() aus einem nicht-lebendigen Objekt als Resultat einer
+            Handlung eines Benutzers aufgerufen wird (das heisst,
+            this_player() ist gueltig), gilt this_player() als aufrufendes
+            Objekt.
+          - In allen anderen Faellen (Aufruf aus reset zB) gilt das Objekt,
+            das say() aufgerufen hat, als aufrufendes Objekt.
+
+BEMERKUNGEN
+        - fuer laengere Meldungen sollte break_string() verwendet werden
+        - wird in einem catch_msg() der Wert von <msg> veraendert, erhalten
+          alle nachfolgenden Objekte das veraenderte <msg> (Referenz!)
+
+        - say(<str>) ist verhaltensgleich zu
+          tell_room(environment(), <str>, ({this_player()||this_object()}))
+
+BEISPIELE
+        // Folgende Aufrufe sind gleich, wenn sie durch ein Spielerkommando
+        // in einem nicht lebendigen Objekt aufgeloest werden:
+
+            say("Hi!\n");
+            say("Hi!\n", this_player());
+
+        // Das folgende Beispiel zeigt, wie say() zusammen mit catch_tell()
+        // funktioniert. Das zweite Objekt darf nicht lebendig sein, damit
+        // write() an den aktuellen Benutzer geht.
+
+        Objekt 1 (living):
+            void catch_tell(string str) {
+                write("Empfangen: "+str+"\n");
+            }
+
+        Objekt 2 (nicht living):
+            void func() {
+                ...
+                say("HiHo!\n");
+                ...
+            }
+
+        // Ein etwas komplexeres Beispiel zeigt das Zusammenspiel von say()
+        // und catch_msg(). Auch hier wird ein nicht-lebendiges Objekt
+        // verwendet, das die Nachricht ausgibt, sodass das 'wer' in
+        // catch_msg() auf den aktuellen Benutzer zeigt.
+
+        Object 1 (living):
+            void catch_msg(mixed *arr, object who) {
+                foreach(mixed element: arr)
+                    tell_object(who, sprintf("%O\n", element));
+            }
+
+        Object 2 (nicht living):
+            void func() {
+                ...
+                say( ({ "Hello", "there!" }) );
+                ...
+            }
+
+SIEHE AUCH
+        Aehnlich:   tell_room(E), write(E), shout(E), tell_object(E),
+                    printf(E)
+        Verwandt:   catch_tell(E), catch_msg(A)
+        Sonstiges:  object_name(E)
+
+7.Aug 2007 Gloinson
\ No newline at end of file