Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/std/room/doors.c b/std/room/doors.c
new file mode 100644
index 0000000..e05f009
--- /dev/null
+++ b/std/room/doors.c
@@ -0,0 +1,162 @@
+// MorgenGrauen MUDlib
+//
+// room/doors.c -- new doors, managed by doormaster
+//
+// $Id: doors.c 9134 2015-02-02 19:26:03Z Zesstra $
+
+#pragma strong_types
+#pragma save_types
+#pragma pedantic
+#pragma range_check
+#pragma no_clone
+
+#include <config.h>
+#include <properties.h>
+#include <defines.h>
+#include <language.h>
+#include <doorroom.h>
+#define NEED_PROTOTYPES
+#include <thing/properties.h>
+#include <room/exits.h>
+
+protected void create()
+{
+  if (object_name(this_object()) == __FILE__[0..<3])
+  {
+    set_next_reset(-1);
+    return;
+  }
+  SetProp(P_DOOR_INFOS,0);
+}
+
+protected void create_super() {
+  set_next_reset(-1);
+}
+
+varargs int NewDoor(string|string* cmds, string dest, string|string* ids,
+                    mapping|<int|string|string*>* props)
+{
+/*
+  cmds: Befehl(e), um durch die Tuer zu gehen (String oder Array von Strings)
+  dest: Zielraum
+  ids:  Id(s) der Tuer, default "tuer" (String, Array von Strings oder 0)
+  props: besondere Eigenschaften der Tuer (optional)
+  Array mit Paaren Nummer der Eigenschaft, Inhalt
+  definierte Properties sind:
+  D_FLAGS:  Flags wie bei Sir's Tueren
+  default: DOOR_CLOSED | DOOR_RESET_CL
+  Bei Schluesseln wird getestet, ob der String, den
+  QueryDoorKey zurueckliefert, gleich
+  "raumname1:raumname2" ist, wobei raumname1,2 die
+  kompletten Filenamen der beiden Raeume in sortierter
+  Reihenfolge sind.
+  D_LONG:   lange Beschreibung der Tuer
+  default: "Eine Tuer.\n"
+  D_SHORT:  kurze Beschreibung der Tuer, wird an die Raumbeschreibung
+  angefuegt, wobei %s durch geoeffnet bzw. geschlossen
+  ersetzt wird.
+  default: "Eine %se Tuer. "
+  D_NAME:   Name, der beim Oeffnen/Schliessen und bei Fehlermeldungen
+  angezeigt wird.
+  default: "Tuer"
+  D_GENDER: default: FEMALE
+  D_FUNC:   Funktion, die im Raum aufgerufen werden soll, wenn die
+  Tuer erfolgreich durchschritten wird.
+  default: 0
+  D_MSGS:   Falls String: ausgegebene Richtung fuer move
+  Falls Array: ({direction, textout, textin}) fuer move
+  default: 0
+
+  Beispiel:
+  NewDoor("norden","/players/rochus/room/test2","portal",
+  ({D_NAME,"Portal",
+  D_GENDER,NEUTER,
+  D_SHORT,"Im Norden siehst Du ein %ses Portal. ",
+  D_LONG,"Das Portal ist einfach nur gigantisch.\n"
+  }));
+
+*/
+
+  if (!cmds || !dest) return 0;
+  return call_other(DOOR_MASTER,"NewDoor",cmds,dest,ids,props);
+}
+
+void init()
+{
+  mixed *info;
+  string *cmds;
+  int i,j;
+
+  if (!pointerp(info=(mixed *)QueryProp(P_DOOR_INFOS))) return;
+  add_action("oeffnen","oeffne");
+  add_action("schliessen","schliesse");
+  add_action("schliessen","schliess");
+  for (i=sizeof(info)-1;i>=0;i--) {
+    cmds=(string *)(info[i][D_CMDS]);
+    for (j=sizeof(cmds)-1;j>=0;j--)
+      add_action("go_door",cmds[j]);
+    // Befehle IMMER anfuegen, gechecked wird sowieso erst beim Durchgehen.
+  }
+}
+
+void reset()
+{
+  if (QueryProp(P_DOOR_INFOS))
+    call_other(DOOR_MASTER,"reset_doors");
+}
+
+int oeffnen (string str)
+{
+  if (!str || !QueryProp(P_DOOR_INFOS))
+    return 0;
+  return (int) call_other(DOOR_MASTER,"oeffnen",str);
+}
+
+int schliessen (string str)
+{
+  if (!str || !QueryProp(P_DOOR_INFOS))
+    return 0;
+  return (int) call_other(DOOR_MASTER,"schliessen",str);
+}
+
+varargs int
+go_door (string str)
+{
+  if (!QueryProp(P_DOOR_INFOS))
+    return 0;
+  if (call_other(DOOR_MASTER,"go_door",query_verb()))
+    return 1;
+  return 0;
+}
+
+int set_doors(string *cmds,int open)
+{
+  int j;
+  
+  if (!previous_object())
+    return 0;
+  if (object_name(previous_object())!=DOOR_MASTER)
+    return 0;
+  // Andere sollen nicht rumpfuschen.
+  if (!this_player()) return 0;
+  if (environment(this_player())!=this_object())
+    return 0;
+  // Ist sowieso keiner da...
+  if (!pointerp(cmds))
+    return 0;
+  if (open)
+    AddSpecialExit(cmds,"go_door");
+  else
+    RemoveSpecialExit(cmds);
+  for (j=sizeof(cmds)-1;j>=0;j--)
+    add_action("go_door",cmds[j]);
+  return 1;
+}
+
+/* Fuer Tueren, die flexible Langbeschreibungen haben, wird ein 
+ * SpecialDetail eingefuehrt.
+ */
+
+string special_detail_doors(string key){
+  return DOOR_MASTER->special_detail_doors(key);
+}