Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/secure/simul_efun/object_info.c b/secure/simul_efun/object_info.c
new file mode 100644
index 0000000..ed7c009
--- /dev/null
+++ b/secure/simul_efun/object_info.c
@@ -0,0 +1,106 @@
+/* This sefun is to provide the old semantics of the efun object_info().
+ * Feel free to add it to your mudlibs, if you have much code relying on that.
+ */
+
+#if __EFUN_DEFINED__(driver_info) /* Newer version is there */
+
+#include <objectinfo.h>
+#include <object_info.h>
+
+mixed object_info(object ob, int what, varargs int* index)
+{
+    mixed * result;
+
+    if (sizeof(index) > 1)
+        raise_error("Too many arguments to object_info\n");
+
+    switch(what)
+    {
+        default:
+            raise_error(sprintf("Illegal value %d for object_info().\n", what));
+
+        case OINFO_BASIC:
+        {
+            result = allocate(OIB_MAX);
+
+            result[OIB_HEART_BEAT]        = efun::object_info(ob, OC_HEART_BEAT);
+            result[OIB_IS_WIZARD]         = 0;   /* Not supported anymore. */
+            result[OIB_ENABLE_COMMANDS]   = efun::object_info(ob, OC_COMMANDS_ENABLED);
+            result[OIB_CLONE]             = efun::clonep(ob);
+            result[OIB_DESTRUCTED]        = 0;   /* Not possible anymore. */
+            result[OIB_SWAPPED]           = efun::object_info(ob, OI_SWAPPED);
+            result[OIB_ONCE_INTERACTIVE]  = efun::object_info(ob, OI_ONCE_INTERACTIVE);
+            result[OIB_RESET_STATE]       = efun::object_info(ob, OI_RESET_STATE);
+            result[OIB_WILL_CLEAN_UP]     = efun::object_info(ob, OI_WILL_CLEAN_UP);
+            result[OIB_LAMBDA_REFERENCED] = efun::object_info(ob, OI_LAMBDA_REFERENCED);
+            result[OIB_SHADOW]            = efun::object_info(ob, OI_SHADOW_PREV) && 1;
+            result[OIB_REPLACED]          = efun::object_info(ob, OI_REPLACED);
+            result[OIB_NEXT_RESET]        = efun::object_info(ob, OI_NEXT_RESET_TIME);
+            result[OIB_TIME_OF_REF]       = efun::object_info(ob, OI_LAST_REF_TIME);
+            result[OIB_REF]               = efun::object_info(ob, OI_OBJECT_REFS);
+            result[OIB_GIGATICKS]         = efun::object_info(ob, OI_GIGATICKS);
+            result[OIB_TICKS]             = efun::object_info(ob, OI_TICKS);
+            result[OIB_SWAP_NUM]          = efun::object_info(ob, OI_SWAP_NUM);
+            result[OIB_PROG_SWAPPED]      = efun::object_info(ob, OI_PROG_SWAPPED);
+            result[OIB_VAR_SWAPPED]       = efun::object_info(ob, OI_VAR_SWAPPED);
+            result[OIB_NAME]              = efun::object_name(ob);
+            result[OIB_LOAD_NAME]         = efun::load_name(ob);
+            result[OIB_NEXT_ALL]          = efun::object_info(ob, OI_OBJECT_NEXT);
+            result[OIB_PREV_ALL]          = efun::object_info(ob, OI_OBJECT_PREV);
+            result[OIB_NEXT_CLEANUP]      = efun::object_info(ob, OI_NEXT_CLEANUP_TIME);
+            break;
+        }
+
+        case OINFO_POSITION:
+        {
+            result = allocate(OIP_MAX);
+
+            result[OIP_NEXT] = efun::object_info(ob, OI_OBJECT_NEXT);
+            result[OIP_PREV] = efun::object_info(ob, OI_OBJECT_PREV);
+            result[OIP_POS]  = efun::object_info(ob, OI_OBJECT_POS);
+            break;
+        }
+
+        case OINFO_MEMORY:
+        {
+            result = allocate(OIM_MAX);
+
+            result[OIM_REF]                = efun::object_info(ob, OI_PROG_REFS);
+            result[OIM_NAME]               = efun::program_name(ob);
+            result[OIM_PROG_SIZE]          = efun::object_info(ob, OI_PROG_SIZE);
+            result[OIM_NUM_FUNCTIONS]      = efun::object_info(ob, OI_NUM_FUNCTIONS);
+            result[OIM_SIZE_FUNCTIONS]     = efun::object_info(ob, OI_SIZE_FUNCTIONS);
+            result[OIM_NUM_VARIABLES]      = efun::object_info(ob, OI_NUM_VARIABLES);
+            result[OIM_SIZE_VARIABLES]     = efun::object_info(ob, OI_SIZE_VARIABLES);
+            result[OIM_NUM_STRINGS]        = efun::object_info(ob, OI_NUM_STRINGS);
+            result[OIM_SIZE_STRINGS]       = efun::object_info(ob, OI_SIZE_STRINGS);
+            result[OIM_SIZE_STRINGS_DATA]  = efun::object_info(ob, OI_SIZE_STRINGS_DATA);
+            result[OIM_SIZE_STRINGS_TOTAL] = efun::object_info(ob, OI_SIZE_STRINGS_DATA_TOTAL);
+            result[OIM_NUM_INHERITED]      = efun::object_info(ob, OI_NUM_INHERITED);
+            result[OIM_SIZE_INHERITED]     = efun::object_info(ob, OI_SIZE_INHERITED);
+            result[OIM_TOTAL_SIZE]         = efun::object_info(ob, OI_PROG_SIZE_TOTAL);
+            result[OIM_DATA_SIZE]          = efun::object_info(ob, OI_DATA_SIZE);
+            result[OIM_TOTAL_DATA_SIZE]    = efun::object_info(ob, OI_DATA_SIZE_TOTAL);
+            result[OIM_NO_INHERIT]         = efun::object_info(ob, OI_NO_INHERIT);
+            result[OIM_NO_CLONE]           = efun::object_info(ob, OI_NO_CLONE);
+            result[OIM_NO_SHADOW]          = efun::object_info(ob, OI_NO_SHADOW);
+            result[OIM_NUM_INCLUDES]       = efun::object_info(ob, OI_NUM_INCLUDED);
+            result[OIM_SHARE_VARIABLES]    = efun::object_info(ob, OI_SHARE_VARIABLES);
+            break;
+        }
+    }
+
+    if (sizeof(index))
+    {
+        int idx = index[0];
+        if (idx < 0 || idx >= sizeof(result))
+            raise_error(sprintf("Illegal index for object_info(): %d, expected 0..%d\n",
+                idx, sizeof(result)-1));
+
+        return result[idx];
+    }
+    else
+        return result;
+}
+
+#endif