Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/secure/awmaster.c b/secure/awmaster.c
new file mode 100644
index 0000000..cccdb1d
--- /dev/null
+++ b/secure/awmaster.c
@@ -0,0 +1,433 @@
+// MorgenGrauen MUDlib
+//
+// awmaster.c -- Armours- and Weapons-Master
+//
+#pragma strict_types
+#pragma no_clone
+#pragma no_shadow
+#pragma no_inherit
+#pragma verbose_errors
+#pragma combine_strings
+#pragma pedantic
+#pragma range_check
+#pragma warn_deprecated
+
+#include <combat.h>
+#include <language.h>
+#include <properties.h>
+#include <wizlevels.h>
+
+#define SAVEFILE  "/secure/ARCH/awmaster"
+#define ADUMPFILE "/log/ARCH/RUESTUNGEN"
+#define DDUMPFILE "/log/ARCH/DAMAGERS"
+#define WDUMPFILE "/log/ARCH/WAFFEN"
+
+#define AWF_PUTON  1
+#define AWF_PUTOFF 2
+#define AWF_BOOST  4
+#define AWF_ZAUBER 8
+#define AWF_RESIST 16
+
+#define AWM_TYPE      0
+#define AWM_CLASS     1
+#define AWM_EFF_CLASS 2
+#define AWM_FLAGS     3
+#define AWM_WEIGHT    4
+#define AWM_VALUE     5
+#define AWM_HANDS     6
+#define AWM_D_TYPE    7
+#define AWM_X_CLASS   8
+#define AWM_TIME      9
+
+mapping armours,weapons,damagers;
+private int save_me_soon;
+
+private int allowed()
+{
+  if (previous_object() && geteuid(previous_object())==ROOTID)
+    return 1;
+  if (!process_call() && previous_object() && this_interactive() && ARCH_SECURITY)
+    return 1;
+  return 0;
+}
+
+void create()
+{
+    seteuid(getuid(this_object()));
+
+    if (!restore_object(SAVEFILE))
+    {
+        armours = ([]);
+        weapons = ([]);
+        damagers = ([]);
+    }
+    if (widthof(damagers) == 1) {
+      mapping tmp = damagers;
+      damagers = m_allocate(sizeof(tmp),2);
+      foreach(string r, int flag: tmp) {
+        damagers[r,0]=flag;
+      }
+    }
+}
+
+void save_me(int now)
+{
+  if (now)
+    save_object(SAVEFILE);
+  else
+    save_me_soon=1;
+}
+
+void reset() {
+  if (save_me_soon)
+  {
+    save_me_soon=0;
+    save_me(1);
+  }
+}
+
+public varargs int remove(int silent) {
+  save_me(1);
+  destruct(this_object());
+  return 1;
+}
+
+int xflags(object ob){
+    int re;
+    mapping m;
+    if (!ob || !objectp(ob))
+        return 0;
+    re=0;
+    if (((object)ob->QueryProp(P_WEAR_FUNC))==ob  ||
+        ((object)ob->QueryProp(P_WIELD_FUNC))==ob )
+        re += AWF_PUTON;
+    if (((object)ob->QueryProp(P_REMOVE_FUNC))==ob  ||
+        ((object)ob->QueryProp(P_UNWIELD_FUNC))==ob )
+        re += AWF_PUTOFF;
+    if (((object)ob->QueryProp(P_DEFEND_FUNC))==ob ||
+        ((object)ob->QueryProp(P_HIT_FUNC))==ob    )
+        re += AWF_BOOST;
+    // ists nen Mapping und nicht leer?
+    if (mappingp(m=(mapping)ob->QueryProp(P_RESISTANCE_STRENGTHS))
+        && sizeof(m))
+        re += AWF_RESIST;
+    return re;
+}
+
+void RegisterArmour()
+{   object  ob;
+    string  id;
+    int     flag,h;
+
+    if (!objectp(ob=previous_object()) || 
+      member(inherit_list(ob),"/std/armour.c")==-1)
+      return;
+    id = explode(object_name(ob),"#")[0];
+    if (member(armours,id))
+    {
+        armours[id][AWM_TIME]=time();
+        flag=0;
+        if ((h=(int)ob->QueryProp(P_AC)) > armours[id][AWM_CLASS])
+        {
+            armours[id][AWM_CLASS]=h;
+            flag=1;
+        }
+        if ((h=(int)ob->QueryProp(P_EFFECTIVE_AC)) > armours[id][AWM_EFF_CLASS])
+        {
+            armours[id][AWM_EFF_CLASS]=h;
+            flag=1;
+        }
+        if ((h=(int)ob->QueryProp(P_NR_HANDS)) < armours[id][AWM_HANDS])
+        {
+            armours[id][AWM_HANDS]=h;
+            flag=1;
+        }
+        if ((h=xflags(ob)) != armours[id][AWM_FLAGS])
+        {
+            armours[id][AWM_FLAGS]=h;
+            flag=1;
+        }
+    }
+    else
+    {
+      armours += ([ id : 
+        ([
+            AWM_TYPE      : ob->QueryProp(P_ARMOUR_TYPE) ,
+            AWM_CLASS     : ob->QueryProp(P_AC) ,
+            AWM_EFF_CLASS : ob->QueryProp(P_EFFECTIVE_AC) ,
+            AWM_FLAGS     : xflags(ob),
+            AWM_WEIGHT    : ob->QueryProp(P_WEIGHT) ,
+            AWM_VALUE     : ob->QueryProp(P_VALUE) ,
+            AWM_HANDS     : ob->QueryProp(P_NR_HANDS) , // Fuer Schilde
+            AWM_D_TYPE    : ob->QueryProp(P_DAM_TYPE) ,
+            AWM_X_CLASS   : ob->QueryProp(P_EFFECTIVE_WC) ||
+                            ob->QueryProp(P_WC),
+            AWM_TIME      : time()
+        ]) ]);
+    }
+    save_me(0);
+}
+
+void RegisterWeapon()
+{   object  ob;
+    string  id;
+    int     flag,h;
+
+    if (!objectp(ob=previous_object()) ||
+      member(inherit_list(ob),"/std/weapon.c")==-1)
+      return;
+    id = explode(object_name(ob),"#")[0];
+    if (member(weapons,id))
+    {
+        weapons[id][AWM_TIME] = time();
+        flag=0;
+        if ((h=(int)ob->QueryProp(P_WC)) > weapons[id][AWM_CLASS])
+        {
+            weapons[id][AWM_CLASS]=h;
+            flag=1;
+        }
+        if ((h=(int)ob->QueryProp(P_EFFECTIVE_WC)) > weapons[id][AWM_EFF_CLASS])
+        {
+            weapons[id][AWM_EFF_CLASS]=h;
+            flag=1;
+        }
+        if ((h=(int)ob->QueryProp(P_NR_HANDS)) < weapons[id][AWM_HANDS])
+        {
+            weapons[id][AWM_HANDS]=h;
+            flag=1;
+        }
+        if ((h=xflags(ob)) != weapons[id][AWM_FLAGS])
+        {
+            weapons[id][AWM_FLAGS]=h;
+            flag=1;
+        }
+    }
+    else
+    {
+      weapons += ([ id :
+        ([
+            AWM_TYPE      : ob->QueryProp(P_WEAPON_TYPE) ,
+            AWM_CLASS     : ob->QueryProp(P_WC) ,
+            AWM_EFF_CLASS : ob->QueryProp(P_EFFECTIVE_WC) ,
+            AWM_FLAGS     : xflags(ob),
+            AWM_WEIGHT    : ob->QueryProp(P_WEIGHT) ,
+            AWM_VALUE     : ob->QueryProp(P_VALUE) ,
+            AWM_HANDS     : ob->QueryProp(P_NR_HANDS) ,
+            AWM_D_TYPE    : ob->QueryProp(P_DAM_TYPE) ,
+            AWM_X_CLASS   : ob->QueryProp(P_EFFECTIVE_AC) || 
+                            ob->QueryProp(P_AC),
+            AWM_TIME      : time()
+        ]) ]);
+    }
+    save_me(0);
+}
+
+void RegisterDamager(object dam_ob,int old_dam, int new_dam)
+{   object ob;
+    int flag;
+    string fn;
+
+    if (!objectp(ob=previous_object()) ||
+      (member(inherit_list(ob),"/std/weapon.c")==-1 &&
+       member(inherit_list(ob),"/std/armour.c")==-1 ))
+      return;
+    if (old_dam>new_dam) // Repair
+        flag=2;
+    else if (new_dam>old_dam) // Damage
+        flag=1;
+    else
+        return;
+    if (!objectp(dam_ob))
+        return;
+    if (!(fn=old_explode(object_name(dam_ob),"#")[0]) || !stringp(fn))
+        return;
+    damagers[fn,0]=damagers[fn,0]|flag;
+    damagers[fn,1]=time(); 
+    save_me(0);
+}
+
+string dtdump(mixed arg)
+{   string re;
+    int i,w;
+
+    if (stringp(arg))
+        return capitalize(arg);
+    if (!pointerp(arg) || !stringp(arg[0]))
+        return "<NONE>";
+    if ((i=sizeof(arg))==1)
+        return capitalize(arg[0]);
+    w = (31-i)/i;
+    if (w--<1)
+        return "<MANY>";
+    for (re="",--i;i>=0;i--)
+    {
+        if (!stringp(arg[i]))
+            re += "-";
+        else
+            re += capitalize(arg[i][0..w]);
+        if (i)
+            re += "|";
+    }
+    return re;
+}
+
+int Dump(mixed what, int sortidx)
+{   string  file,*ind;
+    mapping dump;
+
+    if (!allowed())
+        return -1;
+
+    if (!what)
+    {
+        write("Nimm doch mal einen richtigen Parameter!\n");
+        return 0;
+    }
+    if (stringp(what) && sizeof(what)>0)
+    {
+        what==what[0..0];
+        if (what=="a")
+            what=1;
+        else if (what=="w")
+            what=2;
+        else if (what=="d")
+            what=3;
+        else
+        {
+            write("Nimm doch mal einen richtigen Parameter!\n");
+            return 0;
+        }
+    }
+    if (!intp(what) || what<1 || what>3)
+    {
+        write("Nimm doch mal einen richtigen Parameter!\n");
+        return 0;
+    }
+    if (what==3) // Die 'damagers' haben ein anderes Ausgabeformat
+    {
+        printf("AWM: Dumping 'damagers' to '%s'\n",DDUMPFILE);
+        if (sizeof(damagers) < 1) {
+            write("AWM: Dump aborted, mapping empty.\n");
+            return 1;
+        }
+        if (file_size(DDUMPFILE)>1)
+            rm(DDUMPFILE);
+        
+        // nach letzter Aktualisierung sortieren.
+        mixed sorted = sort_array(m_indices(damagers),
+            function int (string a, string b) {
+                return damagers[a,1] < damagers[b,1];
+            } );
+
+        string ausgabe = sprintf(
+            "--- Damagers-Dump --- %s --- %s ---\n\n"+
+            "%:15s D R [Filename]\n",
+            dtime(time()),capitalize(getuid(this_interactive())),
+            "Datum/Zeit");
+        foreach(string rue : sorted) {
+            ausgabe += sprintf("%:15s %1s %1s %s\n",
+                strftime("%y%m%d-%H:%M:%S",damagers[rue,1]),
+                (damagers[rue,0]&1?"+":"-"),
+                (damagers[rue,0]&2?"+":"-"),
+                rue);
+        }
+        
+        write_file(DDUMPFILE, ausgabe);
+        return 1;
+    }
+    if (what==2)
+        what=0;
+    file=(what?ADUMPFILE:WDUMPFILE);
+
+    printf("AWM: Dumping '%s' to '%s'\n",
+        (what?"armours":"weapons"),file);
+    
+    dump=(what?armours:weapons);
+    
+    if (sortidx) {
+      ind = sort_array(m_indices(dump),
+          function int (string a, string b)
+          {return dump[a][sortidx] < dump[b][sortidx];} );
+    }
+    else
+      ind = sort_array(m_indices(dump),#'>);
+    
+    if (sizeof(ind) < 1)
+    {
+        write("AWM: Dump aborted, mapping empty.\n");
+        return 1;
+    }
+
+    if (file_size(file)>1)
+        rm(file);
+    
+    string ausgabe = sprintf(
+        "--- %s-Dump --- %s --- %s ---\n\n"+
+        "[Filename], Datum/Zeit\n"+
+        "    ____Typ___ CLS ECL XCL NFBR WGHT. VALUE H %30.30'_'|s\n",
+        (what?"Ruestungs":"Waffen"),dtime(time()),
+        capitalize(getuid(this_interactive())),"DamType(s)");
+
+    foreach(string index : ind)
+    {
+        ausgabe += sprintf(
+            "[%s] %s\n    %10s %3d %3d %3d %1s%1s%1s%1s %5d %5d %1d %-30.30s\n",
+            index, strftime("%y%m%d-%H:%M:%S",dump[index][AWM_TIME]),
+            dump[index][AWM_TYPE],
+            dump[index][AWM_CLASS],
+            dump[index][AWM_EFF_CLASS],
+            dump[index][AWM_X_CLASS],
+           (dump[index][AWM_FLAGS]&AWF_PUTON?"+":"-"),
+           (dump[index][AWM_FLAGS]&AWF_PUTOFF?"+":"-"),
+           (dump[index][AWM_FLAGS]&AWF_BOOST?"+":"-"),
+           (dump[index][AWM_FLAGS]&AWF_RESIST?"+":"-"),
+            dump[index][AWM_WEIGHT],
+            dump[index][AWM_VALUE],
+            dump[index][AWM_HANDS],
+            dtdump(dump[index][AWM_D_TYPE]) );
+    }
+    write_file(file,ausgabe);
+    write("AWM: Done.\n");
+    return 1;
+}
+
+int Unregister(string what)
+{
+    if (!allowed())
+        return -1;
+    if (!what)
+    {
+        write("Du solltest schon einen Filenamen angeben!\n");
+        return 0;
+    } 
+    if (member(armours,what))
+    {
+        m_delete(armours,what);
+        write("Unregistered "+what+" from 'armours'.\n");
+        return 1;
+    }
+    if (member(weapons,what))
+    {
+        m_delete(weapons,what);
+        write("Unregistered "+what+" from 'weapons'.\n");
+        return 1;
+    }
+    if (member(damagers,what))
+    {
+        m_delete(damagers,what);
+        write("Unregistered "+what+" from 'damagers'.\n");
+        return 1;
+    }
+    save_me(0);
+    return 0;
+}
+
+int ResetDamagers()
+{
+    if (!allowed())
+        return -1;
+    damagers = m_allocate(0,2);
+    save_me(1);
+    return 1;
+}
+