Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/std/container/description.c b/std/container/description.c
new file mode 100644
index 0000000..c4f7b5c
--- /dev/null
+++ b/std/container/description.c
@@ -0,0 +1,103 @@
+// MorgenGrauen MUDlib
+//
+// container/description.c -- standard description for containers
+//
+// $Id: description.c 8755 2014-04-26 13:13:40Z Zesstra $
+
+inherit "/std/thing/description";
+
+#pragma strict_types
+#pragma save_types
+#pragma range_check
+#pragma no_clone
+#pragma pedantic
+
+#define NEED_PROTOTYPES
+
+#include <container.h>
+#include <properties.h>
+#include <defines.h>
+#include <wizlevels.h>
+
+
+void create()
+{
+ ::create();
+ SetProp(P_TRANSPARENT, 1);
+ AddId("Container");
+}
+
+varargs string long(int mode) {
+ string descr, inv_descr;
+
+ descr = process_string(QueryProp(P_LONG));
+ if(!QueryProp(P_TRANSPARENT)) return descr;
+
+ inv_descr = make_invlist(PL, all_inventory(ME), mode );
+ if ( inv_descr != "" )
+ descr += capitalize(QueryPronoun(WER)) + " enthaelt:\n" + inv_descr;
+ return descr;
+}
+
+// flags: 1 - wizard, 2 - don't collect equal objects '
+// flags: 4 - don't append infos for wizards
+private void stringenize(mixed obj, int flags, mixed objs, mixed info)
+{
+ string id, tmp;
+ int idx;
+
+ if ( (!(flags & 4) && (flags & 1))) {
+ //wenn Magier und Magierinfos angehaengt werden sollen:
+ tmp = capitalize(obj->short()||"")[0..<2]
+ + " ["+object_name(obj)+"]";
+ }
+ else if (obj->QueryProp(P_INVIS)) {
+ //keine Ausgabe bzw. leerer String, wird dann von collect rausgeschmissen
+ tmp="";
+ }
+ else {
+ //Spieler, Magier ohne P_WANTS_TO_LEARN etc.
+ tmp = capitalize(obj->short()||"")[0..<2];
+ }
+ //wenn wizard und 'dont collect equal objects': id ist object_name()
+ if(flags & 3 || living(obj))
+ id = object_name(obj);
+ //sonst nehmen wir den Namen der Blueprint ->zusammenfassen der Objekte
+ else
+ id = BLUE_NAME(obj) + tmp;
+ // Anzahl des jeweiligen Objekts (anhand von id) zaehlen.
+ if((idx = member(objs, id)) == -1)
+ {
+ objs += ({ id });
+ info += ({ ({ tmp, 1, obj}) });
+ }
+ else
+ info[idx][1]++;
+}
+
+private string collect(mixed obj)
+{
+ //bekommt ein Array ({name,anzahl,objekt})
+ //Objekte ohne Namen (P_SHORT==0 oder P_INVIS) wegwerfen
+ if(!sizeof(obj[0])) return 0;
+ // Objektname + (Anzahl) zurueckgeben.
+ return obj[0] + (obj[1] > 1 ? " ("+obj[1]+")" : "");
+}
+
+// flags: 1 - return array, 2 - don't collect equal objects '
+// flags: 4 - don't append infos for wizards
+varargs mixed make_invlist(object viewer, mixed inv, int flags)
+{
+ int iswiz;
+ mixed objs, info;
+
+ iswiz = IS_LEARNER( viewer ) && viewer->QueryProp(P_WANTS_TO_LEARN);
+ objs = ({}); info = ({});
+ map(inv, #'stringenize/*'*/, iswiz | (flags & 2) | (flags & 4), &objs, &info);
+ if(flags & 1) return info;
+ inv = map(info, #'collect/*'*/) - ({ 0 });
+ if(!sizeof(inv)) return "";
+ return sprintf("%"+(sizeof(inv) > 6 ? "#" : "=")+"-78s",
+ implode(inv, "\n")) + "\n";
+}
+