Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/std/virtual/v_compiler.c b/std/virtual/v_compiler.c
new file mode 100644
index 0000000..80eb370
--- /dev/null
+++ b/std/virtual/v_compiler.c
@@ -0,0 +1,165 @@
+// MorgenGrauen MUDlib
+//
+// virtual/v_compiler.c -- a general virtual compiler object
+//
+// $Id: v_compiler.c 9142 2015-02-04 22:17:29Z Zesstra $
+
+// principle:
+//  - inherit this object into your own 'virtual_compiler.c'
+//  - customize Validate() and CustomizeObject() for you own sake
+//  
+//  * Validate() checks if a room filename given as argument (without path)
+//    is valid and returns this filename with stripped '.c'!!
+//  * CustomizeObject() uses the previous_object()->Function() strategy to
+//    customize the standard object (for example to set a description)
+//
+// Properties: P_STD_OBJECT, P_COMPILER_PATH
+
+#pragma strict_types
+#pragma save_types
+#pragma range_check
+#pragma no_clone
+#pragma pedantic
+
+inherit "/std/thing/properties";
+
+//#define NEED_PROTOTYPES
+
+#include <thing/properties.h>
+#include <defines.h>
+#include <v_compiler.h>
+#include <exploration.h>
+#include <sys_debug.h>
+#include <living/description.h> //fuer P_PARA
+
+// Der VC braucht das 'alte' object_name()-basierte BLUE_NAME, da sonst das
+// Konfigurieren der von einem VC-Objekt geclonten Clones via
+// CustomizeObject() nicht funktioniert (load_name() ermittelt den Namen des
+// VC-Standardobjektes)
+#ifdef BLUE_NAME
+#undef BLUE_NAME
+#endif
+#define BLUE_NAME(ob) (explode(object_name(ob),"#")[0])
+
+private nosave string last_loaded_file;
+private nosave mapping objects;
+
+void create()
+{
+  ::create();
+  seteuid(getuid());
+  SetProp(P_STD_OBJECT, "/std/room");
+  SetProp(P_COMPILER_PATH, sprintf("/%s/",
+        implode(old_explode(object_name(this_object()), "/")[0..<2], "/")));
+  SetProp(P_PARA, ({}) ); // keine Para-VC-Objekte
+  objects = ([]);
+}
+
+// von den erbenen VCs zu ueberschreiben...
+// TODO: aus Standardobjekt entfernen, weil durch P_PARA und QueryValidObject
+// obsolet. 
+int NoParaObjects() { return 0; }
+
+string Validate(string file)
+{
+  if(!file) return 0;
+  if(file[<2..] == ".c") file = file[0..<3];
+  EPMASTER->PrepareVCQuery(file);
+  return file;
+}
+
+// Die Funktion bekommt einen Objektnamen uebergeben und muss entscheiden, ob
+// dieser VC dafuer zustaendig ist, das Objekt zu generieren. Jeder Wert != 0
+// zaehlt als 'zustaendig'. Es ist eine Art generalisiertem Validate(). Fuer
+// maximale Nuetzlichkeit muss diese Funktion von den erbenden VCs
+// ueberschrieben werden.
+public int QueryValidObject(string oname) {
+    string fname, path, *pelem;
+    int para;
+    mixed ppara;
+
+    //erstmal Validate fragen
+    pelem=explode(oname,"/");
+    fname=pelem[<1];
+    if (!fname=Validate(fname))
+        return(0); //nicht zustaendig
+    // nicht im richtigen Pfad?
+    path=sprintf("%s/",implode(pelem[0..<2],"/"));
+    if (path!=QueryProp(P_COMPILER_PATH))
+        return(0);
+    // Para-Objekt?
+    if (sscanf(fname,"%s^%d",fname,para) > 1) {
+        if (NoParaObjects())
+            return(0); //direkt zurueck, keine Para-Objekte
+        // bestimmte Para-Dimensionen explizit erlaubt? (Wenn P_PARA nicht
+        // gesetzt ist, sind alle erlaubt!)
+        if (ppara=QueryProp(P_PARA)) {
+            if (pointerp(ppara) && member(ppara,para)!=-1)
+                return(1);
+            else if (intp(para) && ppara==para)
+                return(1);
+            // P_PARA gesetzt, aber gewuenschtes Para nicht enthalten...
+            else return(0);
+        }
+    }
+    return(1); //fall-through, offenbar zustaendig.
+}
+
+mixed CustomizeObject()
+{
+  string file;
+
+  if(!clonep(previous_object()))
+    return Validate(explode(BLUE_NAME(previous_object()), "/")[<1]);
+  if(stringp(last_loaded_file)) file = last_loaded_file;
+  else file = Validate(explode(BLUE_NAME(previous_object()), "/")[<1]);
+  if(!file) return 0;
+  last_loaded_file = 0;
+  return file;
+}
+
+// add a new object to the object list if it compiles
+private mixed AddObject(string file)
+{
+  object ob;
+  string err;
+
+  // clean up the object list
+  objects = filter_indices(objects, function int (string f) {
+      return (objectp(objects[f])); } );
+
+  last_loaded_file = file;
+  // register new object
+  if(ob = clone_object(QueryProp(P_STD_OBJECT)))
+    objects[file] = ob;
+  return ob;
+}
+
+// try to create an object for the wanted file
+mixed compile_object(string file)
+{
+  // validate if the file name is a correct one
+  if(file = Validate(file))
+    return AddObject(file);
+  return 0;
+}  
+
+// return all cloned virtual objects
+mixed QueryObjects()
+{
+  return m_values(objects)-({0});
+}
+
+// clean up rooms that have not been destructed yet
+int remove() {
+
+  if(!mappingp(objects)) return 0;
+
+  //for(ob = QueryObjects(); sizeof(ob); ob = ob[1..])
+  foreach(object ob: QueryObjects()) {
+      ob->remove();
+      if(objectp(ob)) destruct(ob);
+  }
+  return 1;
+}
+