Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/std/room/description.c b/std/room/description.c
new file mode 100644
index 0000000..60d3b28
--- /dev/null
+++ b/std/room/description.c
@@ -0,0 +1,222 @@
+// MorgenGrauen MUDlib
+//
+// room/description.c -- room description handling
+//
+// $Id: description.c 9468 2016-02-19 21:07:04Z Gloinson $
+
+#pragma strong_types
+#pragma save_types
+#pragma pedantic
+#pragma range_check
+#pragma no_clone
+
+inherit "/std/container/description";
+
+#define NEED_PROTOTYPES
+
+#include <properties.h>
+#include <defines.h>
+#include <wizlevels.h>
+#include <language.h>
+#include <doorroom.h>
+
+void create()
+{
+  ::create();
+  SetProp(P_NAME, "Raum");
+  SetProp(P_INT_SHORT,"<namenloser Raum>");
+  SetProp(P_INT_LONG,0);
+  SetProp(P_ROOM_MSG, ({}) );
+  SetProp(P_FUNC_MSG, 0);
+  SetProp(P_MSG_PROB, 30);
+  AddId(({"raum", "hier"}));
+}
+
+void init()
+{
+  // Wenn P_ROOM_MSG gesetzt oder P_FUNC_MSG und kein Callout laeuft,
+  // Callout starten.
+  mixed roommsg = QueryProp(P_ROOM_MSG);
+  if( ( (roommsg && sizeof(roommsg)) ||
+        QueryProp(P_FUNC_MSG) ) &&
+      (find_call_out("WriteRoomMessage")==-1))
+    call_out("WriteRoomMessage", random(QueryProp(P_MSG_PROB)));
+}
+
+varargs void AddRoomMessage(string *mesg, int prob, mixed func)
+{
+  if (mesg && !pointerp(mesg))
+    raise_error(sprintf(
+      "AddRoomMessage(): wrong argument type, expected Array or 0, "
+      "got %.20O",mesg));
+
+   SetProp(P_ROOM_MSG, mesg);
+
+  if (prob>0)
+    SetProp(P_MSG_PROB, prob);
+
+  if (func)
+    SetProp(P_FUNC_MSG, func);
+}
+
+static void WriteRoomMessage()
+{
+  int tim, msgid;
+  string *room_msg,func;
+  mixed *func_msg;
+
+  room_msg = (string *)QueryProp(P_ROOM_MSG);
+  func_msg = QueryProp(P_FUNC_MSG);
+  if ((!room_msg || !sizeof(room_msg)) && !func_msg)
+    return;
+
+  if (room_msg&&sizeof(room_msg))
+  {
+    msgid = random(sizeof(room_msg));
+    // Defaultwerte sind fuer Altcode schwierig
+    send_room(this_object(), room_msg[msgid],
+              MT_LOOK|MT_LISTEN|MT_FEEL|MT_SMELL|
+              MSG_DONT_STORE|MSG_DONT_BUFFER|MSG_DONT_WRAP);
+  }
+
+  if (func_msg)
+  {
+    if (stringp(func_msg))
+      func=(string)func_msg;
+    else
+      func=func_msg[random(sizeof(func_msg))];
+    if (func && function_exists(func))
+      call_other (this_object(), func, msgid);
+  }
+
+  while (remove_call_out("WriteRoomMessage")!=-1);
+  tim=QueryProp(P_MSG_PROB);
+  if(this_object() && sizeof(filter(
+       deep_inventory(this_object()), #'interactive))) //')))
+    call_out("WriteRoomMessage", (tim<15 ? 15 : tim));
+}
+
+varargs string int_long(mixed viewer,mixed viewpoint,int flags)
+{
+  string descr, inv_descr;
+
+  flags &= 3;
+  if( IS_LEARNER(viewer) && viewer->QueryProp( P_WANTS_TO_LEARN ) )
+    descr = "[" + object_name(ME) + "]\n";
+  else
+    descr = "";
+
+  descr += process_string(QueryProp(P_INT_LONG)||"");
+  
+  // ggf. Tueren hinzufuegen.
+  if (QueryProp(P_DOOR_INFOS)) {
+    string tmp=((string)call_other(DOOR_MASTER,"look_doors"));
+    if (stringp(tmp) && sizeof(tmp))
+        descr += tmp;
+  }
+  
+  // ggf. Ausgaenge hinzufuegen.
+  if ( viewer->QueryProp(P_SHOW_EXITS) && (!QueryProp(P_HIDE_EXITS) 
+	|| pointerp(QueryProp(P_HIDE_EXITS))) )
+    descr += GetExits(viewer) || "";
+
+  // Viewpoint (Objekt oder Objektarray) sind nicht sichtbar
+  inv_descr = (string) make_invlist(viewer, all_inventory(ME) 
+		  - (pointerp(viewpoint)?viewpoint:({viewpoint})) ,flags);
+
+  if ( inv_descr != "" )
+    descr += inv_descr;
+
+  if(environment() && (inv_descr=QueryProp(P_TRANSPARENT)))
+  {
+    if(stringp(inv_descr)) descr += inv_descr;
+    else                   descr += "Ausserhalb siehst Du:\n";
+            
+    descr += environment()->int_short(viewer,ME);
+  }
+                  
+  return descr;
+}
+
+string int_short(mixed viewer,mixed viewpoint)
+{
+  string descr, inv_descr;
+
+  descr = process_string( QueryProp(P_INT_SHORT)||"");
+  if( IS_LEARNER(viewer) && viewer->QueryProp( P_WANTS_TO_LEARN ) )
+    descr += " [" + object_name(ME) + "].\n";
+  else
+    descr += ".\n";
+
+  if ( ( viewer->QueryProp(P_SHOW_EXITS)
+         || ( environment(viewer) == ME && !viewer->QueryProp(P_BRIEF) ) )
+       && (!QueryProp(P_HIDE_EXITS) || pointerp(QueryProp(P_HIDE_EXITS))) )
+    descr += GetExits(viewer) || "";
+  
+  // Viewpoint (Objekt oder Objektarray) sind nicht sichtbar
+  inv_descr = (string) make_invlist( viewer, all_inventory(ME) 
+		  - (pointerp(viewpoint)?viewpoint:({viewpoint})) );
+
+  if ( inv_descr != "" )
+    descr += inv_descr;
+
+  return descr;
+}
+
+/** Roommessages abschalten, wenn keine Interactives mehr da sind.
+  */
+// TODO: Irgendwann das varargs loswerden, wenn in der restlichen Mudlib
+// TODO::exit() 'richtig' ueberschrieben wird.
+varargs void exit(object liv, object dest) {
+  // fall erbende Objekte das liv nicht uebergeben. Pruefung nur auf
+  // previous_object(). Wenn Magier da noch irgendwelche Spielchen mit
+  // call_other() & Co treiben, haben wir Pech gehabt, macht aber nicht viel,
+  // weil die Raummeldungen dann im naechsten callout abgeschaltet werden.
+  if (!living(liv=previous_object())) return;
+
+  object *interactives = filter(all_inventory(), #'interactive);
+  // liv wurde noch nicht bewegt, ggf. beruecksichtigen.
+  if ( !sizeof(interactives) ||
+      (interactive(liv) && sizeof(interactives) < 2) )
+    while (remove_call_out("WriteRoomMessage")!=-1);
+}
+
+static string _query_int_long() {return Query(P_INT_LONG, F_VALUE);}
+
+
+// Querymethode fuer P_DOMAIN - gibt die Region an, in der Raum liegt, sofern
+// er unter /d/ liegt...
+static string _query_lib_p_domain()
+{
+  string fn = object_name();
+  if (strstr(fn, "/d/") == 0)
+  {
+    return capitalize(explode(fn, "/")[2]);
+  }
+
+  return "unbekannt";
+}
+
+<string|string*>* _set_harbour_name( <string|string*>* desc) 
+{
+  if ( sizeof(desc)!=2 )
+  {
+    raise_error(sprintf("Unacceptable data in P_HARBOUR, sizeof() was %d, "
+      "expected 2.", sizeof(desc)));
+  }
+  else if ( !stringp(desc[0]) )
+  {
+    raise_error("Wrong data type in P_HARBOUR[0]: expected 'string'.");
+  }
+  else if ( pointerp(desc[1]) && sizeof(desc[1])<1 )
+  {
+    raise_error("Insufficient data in P_HARBOUR[1]: expected 'string*', "
+      "got '({})'.");
+  }
+  else if ( stringp(desc[1]) )
+  {
+    desc[1] = ({desc[1]});
+  }
+  return Set(P_HARBOUR, desc, F_VALUE);
+}
+