Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/tools/hausmeister.c b/d/seher/haeuser/tools/hausmeister.c
new file mode 100644
index 0000000..b39de0e
--- /dev/null
+++ b/d/seher/haeuser/tools/hausmeister.c
@@ -0,0 +1,247 @@
+#include "../haus.h"
+
+inherit "std/thing";
+inherit "/p/service/wargon/sm/statemachine";
+
+#include "/p/service/wargon/sm/statemachine.h"
+#include <properties.h>
+#include <moving.h>
+
+#define STATE_IDLE       0
+#define STATE_GENERATING 1
+
+#define SIG_INIT      0
+#define SIG_GENERATE  1
+#define SIG_DONE      2
+
+private string dump(int haus, int final);
+private void enterGenerating(string ow, object env, int nr, int fin, int all);
+private void doGenerating(string ow, object env, int nr, int fin, int all);
+
+create()
+{
+  if (!clonep(this_object())) return;
+  thing::create();
+  statemachine::create();
+  
+  SetProp( P_NAME, "Hausmeister");
+  SetProp( P_SHORT, "Ein Hausmeister" );
+  SetProp( P_LONG,
+     "Dies ist der Hausmeister aller Seherhaeuser. Er hilft Wurzel bei der\n"
+    +"Verwaltung der Haeuser.\n"
+    +"Der Hausmeister hat einen blauen Kittel an und eine Abrissbirne gezueckt.\n" );
+  SetProp( P_GENDER,MALE);
+  SetProp( P_NOGET, 1);
+
+  AddId( "hausmeister" );
+
+  AddState(STATE_IDLE, 0, 0);
+  AddState(STATE_GENERATING, #'doGenerating, 0);
+
+  AddTransition(SM_INVALID, SIG_INIT, STATE_IDLE);
+  AddTransition(STATE_IDLE, SIG_GENERATE, STATE_GENERATING, #'enterGenerating);
+  AddTransition(STATE_GENERATING, SIG_GENERATE, STATE_GENERATING, #'enterGenerating);
+  AddTransition(STATE_GENERATING, SIG_DONE, STATE_IDLE);
+
+  StateTransition(SIG_INIT);
+  
+  AddCmd( "generiere", "generieren" );
+  AddCmd( ({ "reiss", "reisse" }), "abreissen" );
+  AddCmd( "verlege", "verlegen" );
+}
+
+static int
+bewege(mixed dest, int flags, string msg1, string msg2)
+{
+  int ret;
+
+  tell_room(environment(), capitalize(name(WER))+" "+msg1+".\n");
+  if ((ret = move(dest, flags)) == 1)
+    tell_room(environment(), capitalize(name(WER))+" "+msg2+".\n");
+
+  return ret;
+}
+
+static int generieren(string str)
+{
+  object env;
+  int nr, fin, all;
+  string ow, *parm;
+
+  env = environment(this_player());
+
+  notify_fail( "Syntax: generiere <name> [<nr>] [soft | ganz]\n" );
+
+  if (!str || str == "")
+    return 0;
+
+  parm = old_explode(str, " ");
+  fin = 1;
+
+  switch (sizeof(parm)) {
+    case 3:
+      if (parm[2] == "soft")
+	fin = 0;
+    case 2:
+      if (parm[1] == "soft")
+	fin = 0;
+      else if (parm[1] == "ganz") {
+	ow = parm[0];
+	nr = (VERWALTER)->HausProp(ow, HP_ROOMS);
+	str = ow+"raum"+nr;
+	all = 1;
+	break;
+      }
+      else {
+	nr = to_int(parm[1]);
+	str = parm[0]+"raum"+parm[1];
+	ow = parm[0];
+	break;
+      }
+    case 1:
+      ow = parm[0];
+      nr = -1;
+      str = ow+"haus";
+      break;
+    default:
+      return 0;
+  }
+  if (file_size(HAUSSAVEPATH+ow+".o")<0) {
+    write( "Es gibt kein '"+str+"'!\n");
+    return 1;
+  }
+  StateTransition(SIG_GENERATE, ({ow, env, nr, fin, all }) );
+  return 1;
+}
+
+static void enterGenerating(string ow, object env, int nr, int fin, int all)
+{
+  string str;
+  
+  if (nr >= 0)
+    str = ow+"raum"+nr;
+  else
+    str = ow+"haus";
+
+  bewege(PATH+str, M_NOCHECK, "geht zur Arbeit", "kommt an");
+  tell_room(environment(),
+            Name(WER)+" zueckt einen Block, sieht sich alles genau an und macht\n"
+            +"sich hin und wieder Notizen. Dann nickt er zufrieden und steckt seinen\n"
+            "Block wieder weg.\n" );
+}
+
+static void doGenerating(string ow, object env, int nr, int fin, int all)
+{
+  object gen;
+  string str, out;
+
+  gen = clone_object(PATH+"tools/generator");
+  out = gen->dump(environment(), fin, ({ ow, env, nr, fin, all }));
+  
+  if (nr >= 0)
+    str = ow+"raum"+nr;
+  else
+    str = ow+"haus";
+
+  bewege(env, M_NOCHECK, "geht zu seinem Auftraggeber zurueck", "kommt an");
+  write( "Der Hausmeister sagt: Ich habe '"+str+"' in die Datei\n"
+	+"Der Hausmeister sagt: '"+out+"' geschrieben, Chef!\n");
+}
+
+void
+GenerationDone(string ow, object env, int nr, int fin, int all)
+{
+  if (all)
+  {
+    if (nr > 0)
+    {
+      call_out("StateTransition", 1,
+               SIG_GENERATE, ({ ow, env, nr-1, fin, 1 }) );
+    }
+    else
+    {
+      call_out("StateTransition", 1,
+               SIG_GENERATE, ({ ow, env, -1, fin, 0 }) );
+    }
+  }
+  else
+  {
+    StateTransition(SIG_DONE, ({ ow, env, -1, fin, 0 }) );
+  }
+}
+
+static int abreissen(string str)
+{
+  object haus, env;
+  string ich, msg;
+
+  if (!str || str == "" || sscanf(str, "%s ab",str) != 1) {
+    notify_fail( "Syntax: reisse <name> ab\n" );
+    return 0;
+  }
+  str = lower_case(str);
+  if (!(haus = VERWALTER->FindeHaus(str))) {
+    write( capitalize(str)+" hat kein Haus!\n" );
+    return 1;
+  }
+  ich = capitalize(name(WER));
+  env = environment();
+  bewege(environment(haus), M_NOCHECK, "geht zur Arbeit", "kommt an");
+  msg = haus->Name(WER);
+
+  if (VERWALTER->LoescheHaus(str) == -1) {
+    tell_room(environment(), ich+" versucht vergeblich, ein Haus abzureissen.\n" );
+    msg = "Der Abrissversuch ist fehlgeschlagen, Chef!\n";
+  }
+  else {
+    tell_room(environment(), ich+" betaetigt eine Sirene.\n"+msg+" wird von "+name(WEM)+" eingeebnet.\n");
+    msg = msg+" ist abgerissen, Chef!\n";
+    if (haus) haus->remove();
+  }
+  bewege(env, M_NOCHECK, "geht zu seinem Auftraggeber zurueck", "kommt an");
+  write( "Der Hausmeister sagt: "+msg);
+  return 1;
+}
+
+static int verlegen(string str)
+{
+  string name, von, nach;
+  object haus;
+  int ret;
+
+  if (!str || sscanf(str, "%s nach %s", name, nach) != 2) {
+    notify_fail( "Syntax: verlege <name> nach <ziel>\n" );
+    return 0;
+  }
+  if (nach == "hier")
+    nach = object_name(environment(this_player()));
+
+  name = lower_case(name);
+
+  if (!(haus = VERWALTER->FindeHaus(name))) {
+    write( "Der Hausmeister sagt: "+capitalize(name)+" hat kein Haus!\n" );
+    return 1;
+  }
+  von = object_name(environment(haus));
+  ret = VERWALTER->VerlegeHaus(name, von, nach);
+  write( "Der Hausmeister sagt: " );
+  switch(ret) {
+    case -111:
+      write( "Das hast Du nicht zu bestimmen!\n" );
+      break;
+    case -3:
+      write( "Der Zielraum laesst sich nicht laden! Verlegen abgebrochen!\n" );
+      break;
+    case -4:
+      write( "Im Zielraum kann nicht gebaut werden!\n" );
+      break;
+    case -5:
+      write( "Im Haus von "+capitalize(name)+" gibt es noch Ausgaenge in andere Haeuser!\n");
+      break;
+    case 1:
+      write( "OK, Chef, ich habe das Haus verlegt!\n" );
+      break;
+  }
+  return 1;
+}
+