Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/std/thing b/doc/std/thing
new file mode 100644
index 0000000..445b462
--- /dev/null
+++ b/doc/std/thing
@@ -0,0 +1,205 @@
+STANDARD KLASSE:
+ "/std/thing"
+
+BENUTZUNG:
+ inherit "/std/thing";
+
+ #include <thing.h>
+ #include <properties.h>
+
+PROPERTIES:
+ <thing/commands>
+ P_COMMANDS -- Befehle assoziiert mit dem Objekt
+ <thing/description>
+ P_NAME -- Name
+ P_NAME_ADJ -- Namensadjektiv
+ P_SHORT -- Kurzbeschreibung
+ P_LONG -- Langbeschreibung
+ P_IDS -- Identifikatoren (Feld von Zeichenketten)
+ P_ADJECTIVES -- Adjektive zur Beschreibung
+ <thing/language>
+ P_ARTICLE -- Artikel des Objekts
+ P_GENDER -- Geschlecht des Objekts
+ <thing/moving>
+ P_NODROP -- Kann nicht fallengelassen werden
+ P_NOGET -- Kann nicht genommen werden
+ <thing/properties>
+ P_UID -- User ID
+ P_EUID -- Effektive User ID
+ <thing/restrictions>
+ P_WEIGHT -- Gewicht des Objekts
+ P_TOTAL_WEIGHT -- Gewicht inklusive des Inhalts
+
+MAKROS:
+ <thing/properties>
+ F_VALUE -- Propertywert
+ F_MODE -- Propertymodus umschalten
+ F_MODE_AS -- Propertymodus setzen
+ F_MODE_AD -- Propertymodus loeschen
+ SAVE -- Property wird gespeichert
+ PROTECTED -- Property is geschuetzt
+ SECURED -- Property kann nie mehr geaendert werden
+ NOSETMETHOD -- Property besitzt keine Setzfunktion
+ F_SET_METHOD -- Funktion zum setzen der Property
+ F_QUERY_METHOD -- Funktion zum lesen der Property
+ <thing/language>
+ MALE, FEMALE, NEUTER -- Geschlechter
+ WER, WESSEN, WEM, WEN -- Fall
+ RAW -- fuer Namen ohne Artikel
+ SINGULAR, PLURAL -- Zeiten
+
+FUNKTIONEN:
+ "/std/thing/commands":
+ varargs void AddCmd(mixed cmd, mixed func, int flag);
+ varargs void RemoveCmd(mixed cmd);
+ "/std/thing/description":
+ varargs int id(string str, int lvl);
+ void AddId(mixed str);
+ void AddAdjective(mixed str);
+ string name(int casus,int demon);
+ "/std/thing/language":
+ varargs string QueryArticle(int casus, int dem, int force);
+ varargs int SuggestArticle(string id);
+ varargs string QueryPossPronoun(mixed what, int casus,
+ int number);
+ string QueryPronoun(int casus);
+ varargs string QueryDu(int casus,int gender, int zahl);
+ string QueryGenderString();
+ varargs string DeclAdj(string adj, int casus, int demon);
+ "/std/thing/properties":
+ varargs mixed Set(string name, mixed Value, int Type);
+ varargs mixed Query(string name, int Type);
+ mixed SetProp(string name, mixed Value);
+ mixed QueryProp(string name);
+ void SetProperties(mapping props);
+ mapping QueryProperties();
+ "/std/thing/moving":
+ int move(mixed dest,int method);
+ varargs int remove();
+
+ERLAEUTERUNG:
+ "/std/thing" ist eine generelle Klasse fuer Objekte aller Art.
+ Es bietet generelle Funktionalitaet zur Erstellung von neuen
+ Klassen und Objekten. Sie kann mittels der zur Verfuegung
+ stehenden Funktionen konfiguriert werden:
+
+ ** "/std/thing/commands":
+ varargs void AddCmd(mixed cmd, mixed func, int flag);
+ Um dem Objekt die Moeglichkeit zu geben, auf Befehle zu reagieren,
+ kann mit AddCmd() Kommandos definiert werden, die eine bestimmte
+ Funktion (func) aufrufen. flag entscheidet darueber, ob das Kommando
+ (cmd) abgekuerzt werden kann (flag = 1) oder nicht (flag = 0).
+
+ varargs void RemoveCmd(mixed cmd);
+ Man kann die Kommandos jederzeit wieder mit der Funktion RemoveCmd()
+ entfernen.
+
+ ** "/std/thing/description":
+ varargs int id(string str, int lvl);
+ Die Funktion id() behandelt die Identifikatoren eines Objektes,
+ welche in der Property P_IDS gespeichert sind. Jedesmal, wenn ein
+ Objekt durch Kommandos wie "nimm", "lass fallen" etc referenziert
+ werden soll, wird id() mit dem Namen des Objektes aufgerufen. Dabei
+ werden dann die Elemente von P_IDS mit str verglichen und das Ergeb-
+ nis (WAHR/FALSCH == 1/0) zurueckgegeben. lvl ist fuer die Behandlung
+ von Lebewesen notwendig, siehe living.
+
+ void AddId(mixed str);
+ Mittels dieser Funktion kann ein oder mehrere neue Identifikatoren
+ der Liste der bestehenden, Standard ist "ding", hinzugefuegt werden.
+
+ void AddAdjective(mixed str);
+ Um den Objekten die Moeglichkeit zu geben, sich besser zu beschreiben
+ oder zur besseren Identifizierung, kann man mit AddAdjective() dem
+ Objekt naeher beschreibende Adjektive hinzufuegen. Diese sind in
+ P_ADJECTIVES gespeichert.
+
+ string name(int casus,int demon);
+ Diese Funktion liefert den Namen des Objektes mit allen zusaetzlichen
+ Attributen im gewuenschten Fall (casus), demonstrativ (demon = 1)
+ oder nicht demonstrativ (demon = 0).
+
+ ** "/std/thing/language":
+ varargs string QueryArticle(int casus, int dem, int force);
+ Artikel im passenden Fall sowie demonst. bzw undemonst. zurueck-
+ geben. force ueberschreibt das SetArticle-Flag.
+
+ varargs int SuggestArticle(string id);
+ Empfehle einen Artikel fuer das Objekt, getestet wird, ob ausser
+ diesem Objekt sich ein anderes Objekt mit der id im selben
+ Raum befindet.
+
+ varargs string QueryPossPronoun(mixed what, int casus, int number);
+ Gib ein Pronomen zurueck, das ausdrueckt, das ein Objekt diesem
+ Objekt gehoert. Dabei ist what das Geschlecht des Objektes.
+
+ string QueryPronoun( casus );
+ Er/Sie/Es u.ae. zurueckgeben.
+
+ varargs string QueryDu(int casus,int gender, int zahl);
+ Du im passenden Fall zurueckgeben (siehe QueryArticle()).
+
+ string QueryGenderString();
+ Gibt das Geschlecht in Worten zurueck.
+
+ varargs string DeclAdj(string adj, int casus, int demon);
+ Dekliniere Adjektive adj mit Casus casus.
+
+ ** "/std/thing/properties":
+ varargs mixed Set(string name, mixed Value, int Type);
+ Setze einen Wert einer Property direkt, wobei der Typ des Wertes
+ (Value) durch F_VALUE, F_MODE, F_SET_METHOD, F_QUERY_METHOD (Type)
+ angegeben wird.
+ F_VALUE -- darf ein beliebiger Wert sein
+ F_MODE -- muss eine Zahl sein (SAVE, PROTECTED, SECURED,
+ NOSETMETHOD)
+ F_SET_METHOD, F_QUERY_METHOD -- 0 oder eine Closure
+
+ varargs mixed Query(string name, int Type);
+ Lies den Wert einer Property aus. Dabei gibt Type an, welchen Wert
+ (F_VALUE, F_MODE, F_SET_METHOD, F_QUERY_METHOD) man auslesen will.
+
+ mixed SetProp(string name, mixed Value);
+ Setze den Wert einer Property. Dabei wird, falls vorhanden, der Wert
+ noch durch die F_SET_METHOD behandelt (z.B. Typueberpruefung).
+ Dies sollte die Standardmethode zum Setzen einer Property sein!
+
+ mixed QueryProp(string name);
+ Lies den Wert einer Property, wobei der eigentliche Wert durch die,
+ falls vorhanden, F_QUERY_METHOD behandelt wird. Als Beispiel dient
+ hier die Behandlung des Gesamtgewichts, welches durch Abfragen von
+ P_TOTAL_WEIGHT ausgelesen werden kann; hierbei errechnet die
+ F_QUERY_METHOD von P+_TOTAL_WEIGHT erst das totale Gewicht.
+ Dies sollte die Standardmethode sein um eine Property auszulesen!
+
+ void SetProperties(mapping props);
+ Diese Funktion kann die in props gespeicherten Properties im Objekt
+ unterbringen. Dabei werden schon vorher als PROTECTED oder SECURED
+ gekennzeichnete Properties NICHT ueberschrieben.
+
+ mapping QueryProperties();
+ Liefert ein mapping, welches von SetProperties() behandelt werden
+ kann.
+
+ ** "/std/thing/moving":
+ int move(mixed dest,int method);
+ Jedesmal, wenn ein Objekt bewegt werden soll, wird die Funktion
+ move() aufgerufen, welche dann das eigentliche Bewegen ausfuehrt.
+ Dazu muss der Funktion ein Ziel (dest) als Zeichenkette oder als
+ Objekt und eine Methode der Bewegung uebergeben werden.
+
+ varargs int remove();
+ Wird ein Objekt zerstoert, wird die Funktion remove() aufgerufen.
+ Rueckgabewert 1 bedeutet Erfolg und 0 Misserfolg der Zerstoerung.
+
+VERERBUNGSBAUM:
+ thing
+ |-thing/commands
+ |-thing/description
+ |-thing/language
+ |-thing/moving
+ |-thing/properties
+ `-thing/restrictions
+
+SIEHE AUCH:
+ properties, closures