Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/virtual_compiler.c b/d/seher/haeuser/virtual_compiler.c
new file mode 100644
index 0000000..d5d1ab8
--- /dev/null
+++ b/d/seher/haeuser/virtual_compiler.c
@@ -0,0 +1,164 @@
+/** Letzte Aenderung:
+// 01.04.2008 - Objekte des VC werden jetzt im memory gespeichert
+// - Kleinere Aenderungen im Code.
+// 01.01.2007 - Grundlegende Ueberarbeitung, Vanion
+// - Verwaltung der Objekte in einer Liste
+// Dadurch kann ls die VC-Objekte darstellen
+// - Genauere Ueberpruefung der Dateinamen auf
+// Korrektheit. Falls ein illegaler Zugriff
+// stattfindet, wirds geloggt.
+//
+*/
+
+#pragma strict_types
+#pragma no_clone
+#pragma no_shadow
+#pragma no_inherit
+#pragma verbose_errors
+#pragma combine_strings
+#pragma pedantic
+#pragma warn_deprecated
+
+#include "haus.h"
+#include <thing/properties.h>
+#include <wizlevels.h>
+
+#define MEMORY "/secure/memory"
+
+private nosave mapping objects;
+private nosave int show_clone_list;
+
+/**
+ Initialisierung
+*/
+void create()
+{
+ seteuid(getuid());
+
+ // Zeiger auf Cloneliste holen
+ if (call_other(MEMORY,"HaveRights")) {
+ // Objektpointer laden
+ objects = (mixed) call_other(MEMORY,"Load","objects");
+
+ // Hats geklappt?
+ if (!mappingp(objects))
+ // vermutlich noch nicht initialisiert.
+ // Zeiger erzeugen
+ objects = ([]);
+ call_other(MEMORY,"Save","objects",objects); // Und in den Memory schreiben
+ } else {
+ // Wenn ich keinen Zeiger habe, muss ich halt einen lokalen nehmen.
+
+ objects = ([]);
+ }
+
+ show_clone_list = 0;
+}
+
+/**
+ Die Funktion wird vom GameDriver aufgerufen. Wenn die Namen-
+ konventionen passen, erzeugt compile_object ein passendes Objekt
+ und gibt es zurueck
+ \param name Name des zu ladenden Objekts
+ \return Das geladene und initialisierte Objekt
+*/
+object compile_object(string name)
+{
+ object ob;
+
+ if (name[<6..<3] == "haus" )
+ {
+ ob = (object) (VERWALTER)->_LadeHaus(name[0..<7]);
+ }
+ else if (name[<7..<4] == "raum" )
+ {
+ ob = (object) (VERWALTER)->_LadeRaum(name[0..<8], to_int(name[<3..<3]));
+ }
+ else
+ {
+ log_file("seher/haeuser/vc_load_error",
+ dtime(time())+"\n Falscher Objektname: "+name+"\n"+
+ " PO: "+object_name(previous_object(1))+",\n"+
+ " PPO: "+object_name(previous_object(2))+",\n"+
+ " TI: "+object_name(this_interactive())+".\n\n");
+ return 0;
+ }
+
+ // Objekt speichern (fuer ls)
+ if (objectp(ob)) objects[name] = ob;
+
+ return ob;
+}
+
+/**
+ Soll die Liste der Objekte zum VC per QueryObjects ausgegeben werden oder nicht?
+*/
+
+int ToggleCloneList()
+{
+ show_clone_list ^= 1;
+ tell_object(this_player(), "Die Clone List wird nun "+
+ (show_clone_list?"":"nicht mehr ")+"angezeigt.\n");
+}
+
+/**
+ return all cloned virtual objects, wird zum Beispiel fuer "ls" benutzt.
+*/
+mixed QueryObjects()
+{
+ if (show_clone_list)
+ return m_values(objects)-({0});
+ else
+ return ({});
+}
+
+/**
+ Nur EM und Maintainer duerfen die sicheren Funktionen nutzen
+*/
+int secure()
+{
+ if (ARCH_SECURITY || IS_MAINTAINER(this_interactive()))
+ return 1;
+ else
+ return 0;
+}
+
+/*
+/**
+ Die Funktion versucht, die Clones dieses VCs aus der Objekt List
+ zu regenerieren
+*/
+/*
+int regenerate_clone_list()
+{
+ if (sizeof(objects)==0)
+ HDEBUG("Tbd: regenerate_clone_list im vc");
+
+ return 1;
+}
+*/
+
+/**
+ Die Funktion zerstoert alle bereits geclonten Seherhausobjekte
+ Das gibt wirklich nur irre wenige Momente, wo das nicht schlecht ist.
+*/
+int desctruct_all_my_clones()
+{
+ mixed ob;
+
+ if (!secure()) return 0;
+
+ if(!mappingp(objects)) return 0;
+
+ for(ob = QueryObjects(); sizeof(ob); ob = ob[1..])
+ {
+ if(objectp(ob[0]))
+ {
+ ob[0]->remove();
+ if(objectp(ob[0])) destruct(ob[0]);
+ }
+ }
+
+ return 1;
+}
+