Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/tools/haustool.c b/d/seher/haeuser/tools/haustool.c
new file mode 100644
index 0000000..50f6e1e
--- /dev/null
+++ b/d/seher/haeuser/tools/haustool.c
@@ -0,0 +1,182 @@
+#include "../haus.h"
+#include <properties.h>
+#include <moving.h>
+#include <wizlevels.h>
+
+inherit "std/secure_thing";
+
+private int secure()
+{
+  return (this_interactive() && (IS_ARCH(this_interactive()) ||
+				 getuid(this_interactive()) == "wurzel"));
+}
+
+create()
+{
+  if (!clonep(this_object())) return;
+  ::create();
+
+  SetProp(P_SHORT, "Ein Adressverzeichnis" );
+  SetProp(P_LONG,
+     "Mit diesem Adressverzeichnis koennen die richtigen Leute Ordnung in den\n"
+    +"Wust der Seherhausangelegenheiten bringen.\n"
+    +"Die richtigen Leute?\n"
+    +"Ja: Man muss schon Erzmagier sein oder Wurzel heissen! ;)\n"
+    +"Du kannst es uebrigens lesen!\n" );
+  SetProp(P_NAME, "Adressverzeichnis");
+  SetProp(P_READ_MSG,
+     "Es stehen folgende Befehle zur Verfuegung:\n"
+    +"checked <name> [+/-] <nr>\n"
+    +"rep\n"
+    +"mkmail <name>\n"
+    );
+  SetProp(P_GENDER, NEUTER);
+  SetProp(P_WEIGHT, 100);
+  SetProp(P_AUTOLOADOBJ, 1);
+  SetProp(P_NEVERDROP, 1);
+  SetProp(P_NODROP, 1);
+
+  AddId( ({ "verzeichnis", "adressverzeichnis", "haustool" }) );
+
+  AddCmd("checked", "checked");
+  AddCmd("rep", "report");
+  AddCmd("mkmail", "mkmail");
+}
+
+#define CHECKED PATH+"log/CHECKED"
+static int
+checked(string str)
+{
+  mapping drin;
+  string name, *lines, *ind, pm;
+  int nr, i;
+  closure hp;
+
+  if (!secure())
+    return 0;
+
+  notify_fail("Syntax: checked <name> [+/-] <nr>\n" );
+  if (!str || str == "")
+    return 0;
+
+  if (file_size(CHECKED) > 0)
+    lines = explode(read_file(CHECKED), "\n") - ({""});
+  else
+    lines = ({});
+
+  for (drin = ([]), i=sizeof(lines)-1; i>=0; i--) {
+    if (sscanf(lines[i], "%s%t%d", name, nr) == 2)
+      drin += ([ name : nr-1 ]);
+  }
+  lines = ({ });
+  pm = "";
+  hp = symbol_function("HausProp", VERWALTER);
+
+  if (sscanf(str, "%s %d", name, nr)==2 || sscanf(str, "%s %s %d", name, pm, nr) == 3) {
+    if (!funcall(hp, name, HP_ENV)) {
+      write(capitalize(name)+" hat gar kein Haus!\n");
+      return 1;
+    }
+    if (nr < 0) {
+      write("Zum Abziehen nimm bitte 'checked <name> - <nr>'!\n");
+      return 1;
+    }
+    if (member(drin, name))
+      i = drin[name];
+    switch(pm) {
+      case "+":
+	if (i+nr > funcall(hp, name, HP_ROOMS)) {
+	  printf("%d Raeume? Wie soll das gehen?\n", i+nr);
+	  return 1;
+	}
+	drin[name] += nr;
+	break;
+      case "-":
+	if (i-nr < 0) {
+	  write("Soviele Raeume kannst Du "+capitalize(name)+" gar nicht abziehen...\n");
+	  return 1;
+	}
+	drin[name] -= nr;
+	break;
+      default:
+	if (nr > funcall(hp, name, HP_ROOMS)) {
+	  printf("%s nat keine %d Raeume!\n",capitalize(name),nr);
+	  return 1;
+	}
+	drin[name] = nr;
+    }
+    rm(CHECKED);
+    for (i=sizeof(ind=sort_array(m_indices(drin),#'<))-1; i>=0; i--)
+      write_file(CHECKED, sprintf("%s %d\n",ind[i], 1+drin[ind[i]]));
+    return 1;
+  }
+  else
+    return 0;
+}
+
+static int
+report()
+{
+  string *rep, *head, name;
+  int i, lp, nr;
+
+  if (file_size("/log/report/wurzel.rep")<=0) {
+    write("Kein wurzel.rep (Jippieh! ;)\n");
+    return 1;
+  }
+
+  rep = old_explode(read_file("/log/report/wurzel.rep"),"\n");
+  lp = sizeof(PATH)-1;
+
+  for (i=sizeof(rep)-2; i>=0; i-=2) {
+    head = old_explode(rep[i], " ");
+    if (head[4][0..lp] == PATH) {
+      name = old_explode(head[4],"/")[<1];
+      nr = to_int(name[<1..<1]);
+      name = name[0..<6];
+      head[2] = capitalize(head[2]);
+      write_file(PATH+"rep/"+name,
+		 sprintf("%s in Raum %d:\n%s\n",
+			 implode(head[0..2]," "),nr,rep[i+1]));
+    }
+    else
+      write_file(PATH+"rep/wurzel.rep",sprintf("%s\n%s\n", rep[i], rep[i+1]));
+  }
+  return 1;
+}
+
+static int
+mkmail(string str)
+{
+  string f,fm;
+
+  if (!str || str == "") {
+    notify_fail( "Syntax: mkmail <name>\n");
+    return 0;
+  }
+
+  if (!(f=(VERWALTER)->HausProp(str, HP_ENV))) {
+    printf("%s hat kein Haus!\n", str);
+    return 1;
+  }
+  fm = PATH+str+".mail";
+
+  write_file(fm, "\
+  Huhu!\n\
+\n\
+Da Du Magier bist, brauchst Du auch kein Seherhaus mehr. Damit Deine\n\
+Beschreibungen aber nicht verloren sind, findest Du die Files Deines\n\
+Hauses in /players/"+str+"/seherhaus/.\n\
+\n\
+Soll Dein Haus weiterhin an der jetzigen Stelle stehen bleiben\n\
+("+f+"),\n\
+so klaere das bitte mit dem dort zustaendigen Magier sowie den zustaen-\n\
+digen Regionsmagiern (weil es sich jetzt um den Anschluss von Files an\n\
+ein Gebiet handelt).\n\
+\n\
+!! Das Haus wird auf jeden Fall nach Ende der Haussperre abgerissen !!\n\
+\n\
+  Wargon.\n");
+
+  return 1;
+}