Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/doc/efun/sprintf b/doc/efun/sprintf
new file mode 100644
index 0000000..3cb6970
--- /dev/null
+++ b/doc/efun/sprintf
@@ -0,0 +1,147 @@
+SYNOPSIS

+        string sprintf(string fmt, ...)

+

+BESCHREIBUNG

+        Mit dieser Funktion kann man auf einfache Weise aus dem Inhalt

+        von Variablen einen String bauen; und dies effektiver als

+        mit der ueblichen "Du hast "+anzahl+" Punkt(e)"-Methode.

+

+        Die Funktion bekommt als erstes Argument einen Formatstring fmt,

+        der Informationen darueber enthaelt, wie die weiteren beliebigen

+        Argumente in den Ergebnisstring eingebaut werden sollen.

+        Die meisten Zeichen gelangen vom Formatstring unveraendert in

+        den Ausgabestring. Die Regeln zum Einbau eines Arguments werden

+        immer mit '%' eingeleitet. Moechte man ein '%' in die Ausgabe

+        bringen, so muss man im Formatstring "%%" verwenden.

+

+        Ein einfaches Beispiel ist erg=sprintf("%s %d", str, i);

+        '%' leitet einen Argumentformatstring (AFS) ein. Das 's' schliesst

+        ihn ab und besagt, dass ein String eingebaut werden soll. Das

+        folgende Leerzeichen wird unveraendert uebernommen. '%' leitet

+        wieder einen neuen Formatstring ein, wobei 'd' eine Ganzzahl

+        bezeichnet (eine Variable von Typ int).

+        Dies ist ein allerdings nur ein sehr einfaches Beispiel.

+

+        Jeder Argumentformatstring kennzeichnet also, auf welche Art

+        ein Argument in das Ergebnis eingebaut werden soll. Der erste

+        AFS ist fuer das zweite Argument der Funktion, der zweite AFS

+        fuer das dritte Argument u.s.w. (das erste Argument der Funktion

+        ist ja der Formatstring selbst).

+

+        Jeder AFS beginnt mit einem '%' und endet mit einem der

+        folgenden Zeichen (Argumenttyp-Kennzeichner):

+        Zeichen    Argumenttyp    Bemerkung

+        's'        string

+        'c'        integer        als ASCII-Zeichen

+        'd' 'i'    integer        Dezimalschreibweise

+        'o'        integer        Oktalschreibweise

+        'b' 'B'    integer        Binaerschreibweise

+        'x' 'X'    integer        Hexadezimalschreibweise

+        'e' 'E'    float          Exponentialschreibweise

+        'f' 'F'    float          Gleitkommadarstellung

+        'g' 'G'    float          Gleitkommadarstellung

+        'O'        mixed          Gibt fuer Debugging alles irgendwie

+                                  lesbar aus, auch Arrays und Mappings

+        'Q'        mixed          Wie 'O', gibt jedoch Sonderzeichen in

+                                  Strings in der LPC-Notation aus

+        

+        Zwischen dem '%' und dem Argumenttyp-Kennzeichner kann man

+        noch mehrere Modifikatoren setzen, die das Verhalten

+        beeinflussen.

+        Hier eine Uebersicht. n steht hier fuer eine Ganzzahl, also

+        zum Beispiel "12".

+        Modifikator  Bedeutung

+        n            Minimale Stringlaenge, die fuer dieses Argument

+                     verwendet werden soll. Fehlende Zeichen werden mit

+                     einem Fuellzeichen aufgefuellt. Beginnt n mit einer

+                     '0' (etwa "08") so ist das Fuellzeichen '0' sonst

+                     ist es per Default ' '. (sogenannte 'Feldbreite')

+        .n           Bei Ganzzahlen die Maxanzahl der Stellen, bei Gleit-

+                     kommazahlen die Maximalzahl der Nachkommastellen.

+                     Bei (einfachen) Strings die Maximallaenge.

+        :n           Ist dasselbe wie n.n - setzt also beide Werte auf

+                     dieselbe Zahl.

+        'X'          Als Fuellzeichen wird X genutzt. X koennen dabei

+                     auch mehrere Zeichen sein, etwa fuehrt '-=' zu

+                     Fuellungen der Art "-=-=-=-=". Um mit Hochkommas

+                     zu fuellen ist '\\'' anzugeben. Rueckwaerts-

+                     schraegstrich entsprechend mit '\\\\'.

+        <Space>      Vor positive Zahlen wird ein Leerzeichen gefuegt.

+        +            Vor positive Zahlen wird ein '+' gefuegt.

+        -            Der Wert wird linksbuendig in das fuer dieses Argument

+                     vorgesehene Feld eingefuegt (Standard ist rechts-

+                     buendig). Bei Strings wird meistens diese Ausrichtung

+                     die sinnvollste sein.

+        |            Der Wert wird zentriert in das Feld eingefuegt.

+                     (Siehe Modifikator n, Feldbreite)

+        $            Blocksatz. Benoetigt eine Feldbreite, funktioniert nur

+                     bei Strings (auch im Spaltenmodus).

+        =            Spaltenmodus (siehe unten).

+        #            Fuer Strings: Tabellenmodus (siehe unten).

+                     Fuer '%O'/'%Q': kompakte Ausgabe.

+        @            Arraymodus (siehe unten).

+        *            Ein Stern kann immer dort eingesetzt werden, wo

+                     hier weiter oben ein n fuer eine Ganzzahl steht.

+                     Der Wert der Zahl muss dann als weiterer Parameter

+                     an die Funktion uebergeben werden.

+

+BEISPIELE

+        Mit den bis jetzt erwaehnten Moeglichkeiten kann man zB machen:

+

+        sprintf("%d (dec) == %o (octal) == %x (hex)", 20, 20, 20);

+        => "20 (dec) == 24 (octal) == 14 (hex)"

+

+        sprintf("Du drehst den Knopf um %.3f Umdrehungen", 12.3456);

+        => "Du drehst den Knopf um 12.345 Umdrehungen"

+

+        sprintf("Du liest %|'*':9s", "Fiona");

+        => "Du liest **Fiona**"

+

+        sprintf("Auf dem Zettelstueck steht: %-.*s...", 7, "Hallo Du da");

+        => "Auf dem Zettelstueck steht: Hallo D...

+

+ERWEITERTE MODI

+        Mit dem Modifikatoren = # und @ stehen maechtige Werkzeuge zur

+        Verfuegung. Mit ein wenig Ueberlegung kann man sich oft viele

+        Zeilen Code ersparen.

+        Arraymodus (@):

+          sprintf("%@s", arr_of_string);

+          Der Argumentformatstring (allerdings ohne das @) wird sooft

+          hintereinandergereiht, wieviele Elemente das Array hat.

+          Jeder AFS wird dann fuer ein Element des Arrays benutzt.

+          sprintf("%@s", ({"aaa","bbb"})) ist somit dasselbe wie

+          sprintf("%s%s", "aaa", "bbb"). Allerdings passt es sich

+          immer an die Elementzahl der uebergebenden Arrays an.

+          Dies ist nuetzlich um Ergebnisse von map() oder aehnlich

+          auszugeben.

+          sprintf("%@s", map_objects(all_inventory(), "short"));

+          Der Argumenttyp-Kennzeichner muss hierbei immer dem Typen

+          eines Elementes des Arrays entsprechen.

+        Spaltenmodus (=):

+          Diese Funktion bricht Text um. Die Feldbreite muss angegeben

+          werden. Wird neben der Feldbreite auch eine maximale String-

+          laenge angegeben, so wird die letztere fuer die Breite des

+          Umbrechens verwendet, die Feldbreite wird mit Fuellzeichen

+          aufgefuellt.

+          sprintf("%=-20s", str); bricht den String str 'wordwrap'end

+          auf 20 Zeichen Laenge um. sprintf("%=-*s", len, str);

+          ist schon eine einfache break_string() Variante.

+        Tabellenmodus (#):

+          Diese Funktion gibt Strings tabellenartig aus. Die Teilstrings

+          muessen mit \n getrennt als ein String als Argument uebergeben

+          werden. Die Feldbreite muss angegeben werden und bezeichnet

+          die (maximale) Gesamtbreite der Tabelle.

+          Die Anzahl der Spalten der Tabelle wird moeglichst optimal

+          bestimmt, und ist fuer alle Spalten gleich. Wird ein

+          Wert als 'Praezision' angegeben, so ist dies die Anzahl von

+          Spalten, die verwendet werden soll.

+          sprintf("%#30.4s", str) erzeugt eine Tabelle, die maximal

+          30 Zeichen breit ist und 4 Spalten enthaelt.

+          sprintf("%#30s", str) legt die Spaltenzahl dynamisch anhand

+          der Einzelstringlaengen fest, so dass der laengste String

+          noch genau in die Tabelle passt.

+          Wenn string* worte die in die Tabelle einzubettenden Worte

+          enthaelt, so muss str=implode(worte,"\n") sein.

+

+SIEHE AUCH:

+        printf(E)