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;
+}