Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/std/container/inventory.c b/std/container/inventory.c
new file mode 100644
index 0000000..0a057b7
--- /dev/null
+++ b/std/container/inventory.c
@@ -0,0 +1,128 @@
+// MorgenGrauen MUDlib
+//
+// container/inventory.c -- Umgang mit besonderen Objekten im Inventory
+//
+// $Id: inventory.c 6379 2007-07-20 22:32:02Z Zesstra $
+
+#pragma strict_types
+#pragma save_types
+//#pragma range_check
+#pragma no_clone
+#pragma pedantic
+
+#define NEED_PROTOTYPES
+
+#include <thing.h>
+#include <properties.h>
+#include <sensitive.h>
+
+#define ME this_object()
+
+void RemoveSensitiveObjectFromList(object ob, string list) {
+ mixed a,b,c;
+ int i,f;
+
+ if (!pointerp(a=QueryProp(SENS_PROP_PREFIX+list)))
+ return;
+ f=1;
+ for (i=sizeof(a)-1;i>=0;i--)
+ if (!pointerp(b=a[i]) ||
+ !sizeof(b) ||
+ !objectp(c=b[0]) ||
+ environment(c)!=ME ||
+ c==ob)
+ a[i]=f=0;
+ if (f)
+ return;
+ a-=({0});
+ if (!sizeof(a))
+ a=0;
+ SetProp(SENS_PROP_PREFIX+list,a);
+}
+
+void RemoveSensitiveObject(object ob) {
+ RemoveSensitiveObjectFromList(ob,SENSITIVE_INVENTORY);
+ RemoveSensitiveObjectFromList(ob,SENSITIVE_INVENTORY_TRIGGER);
+}
+
+varargs void InsertSensitiveObjectToList(object ob, string list, string key,
+ int threshold, mixed *opt) {
+ mixed a;
+ int i;
+
+ if (!pointerp(a=QueryProp(SENS_PROP_PREFIX+list)))
+ a=({});
+ for (i=sizeof(a)-1;i>=0;i--)
+ if (a[i][SENS_OBJECT]==ob && a[i][SENS_KEY]==key)
+ return;
+ a+=({({ob,symbol_function(SENS_TRIGGER_PREFIX+list,ob),
+ key,threshold,opt})});
+ SetProp(SENS_PROP_PREFIX+list,a);
+}
+
+void InsertSensitiveObject(object ob, mixed arg) {
+ int i;
+ mixed x;
+ mapping map_ldfied;
+
+ if (!pointerp(arg))
+ return;
+ for (i=sizeof(arg)-1;i>=0;i--)
+ if (pointerp(x=arg[i]) &&
+ sizeof(x)>=3 &&
+ stringp(x[0]) &&
+ stringp(x[1]) &&
+ intp(x[2])) {
+ InsertSensitiveObjectToList(ob,x[0],x[1],x[2],x[3..]);
+ call_other(ME,SENS_INSERT_PREFIX+x[0],ob,x[1],x[2],x[3..]);
+ }
+}
+
+varargs void insert_sensitive_inv(object ob, string key,
+ int threshold, mixed *opt) {
+ // Diese Funktion sucht, ob beim Hinzufuegen eines sensitiven Objekts
+ // schon ein Objekt da ist, dass dieses ausloest.
+ // z.B. (dynamit, feuer, 100, opt_dynamit) sorgt fuer
+ // dynamit->trigger_sensitive_inv(fackel,feuer,120,opt_fackel,opt_dynamit)
+ // wenn eine Fackel vorher mit Wert 120 eingetragen war.
+ mixed a,x;
+ int i;
+
+ if (!pointerp(a=QueryProp(P_SENSITIVE_INVENTORY_TRIGGER)) ||
+ !objectp(ob))
+ return;
+ for (i=sizeof(a)-1;i>=0;i--)
+ if (pointerp(x=a[i]) &&
+ x[SENS_KEY]==key &&
+ x[SENS_THRESHOLD]>threshold && // Ist der Ausloeser gross genug?
+ objectp(x[SENS_OBJECT]) &&
+ environment(x[SENS_OBJECT])==environment(ob))
+ ob->trigger_sensitive_inv(x[SENS_OBJECT],x[SENS_KEY],x[SENS_THRESHOLD],
+ x[SENS_OPT],opt);
+ // Zuerst Trigger-Optionen, dann Optionen des sensitiven Objekts
+}
+
+varargs void insert_sensitive_inv_trigger(object ob, string key,
+ int threshold, mixed *opt) {
+ // Diese Funktion sucht, ob ein sensitives Objekt im Inventory ist,
+ // das durch dieses Objekt ausgeloest wird.
+ // z.B. (fackel, feuer, 120, opt_fackel) sorgt fuer
+ // dynamit->trigger_sensitive_inv(fackel,feuer,120,opt_fackel,opt_dynamit)
+ // wenn Dynamit mit Wert<120 eingetragen war
+ mixed a,x;
+ int i;
+
+ if (!pointerp(a=QueryProp(P_SENSITIVE_INVENTORY)) ||
+ !objectp(ob))
+ return;
+ for (i=sizeof(a)-1;i>=0;i--)
+ if (pointerp(x=a[i]) &&
+ x[SENS_KEY]==key &&
+ x[SENS_THRESHOLD]<threshold && // Ausloeser gross genug?
+ objectp(x[SENS_OBJECT]) &&
+ environment(x[SENS_OBJECT])==environment(ob) &&
+ closurep(x[SENS_CLOSURE]))
+ funcall(x[SENS_CLOSURE],
+ ob,key,threshold,opt,x[SENS_OPT]);
+ // Zuerst Trigger-Optionen, dann Optionen des sensitiven Objekts
+}