Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/secure/wahlmaschine.c b/secure/wahlmaschine.c
new file mode 100644
index 0000000..8705f87
--- /dev/null
+++ b/secure/wahlmaschine.c
@@ -0,0 +1,252 @@
+// da dieses Objekt in /secure liegt und ROOTID inne hat, muessen besondere
+// Sicherheitsvorkehrungen getroffen werden. Insbesondere duerfen keine Files
+// aus /std/ inheritet werden, da es fuer diese Files keiner ROOTID bedarf.
+
+#include <properties.h>
+#include <defines.h>
+#include "/secure/wizlevels.h"
+
+static string in_use;
+
+string thema;
+string *moeglichkeiten;
+string *ergebnis;
+
+#undef SAY
+
+private void SAY( string str )
+{
+  write ( str );
+  write_file("/log/WAHL", str);
+}
+
+void create()
+{
+  if (clonep(ME)) destruct(ME);
+  if (ergebnis) return;
+  seteuid(getuid());
+  in_use=0;
+  ergebnis=({({}),({})});
+  moeglichkeiten=({});
+  restore_object("wahl/wahl");
+  move_object(ME, "/gilden/abenteurer");
+}
+
+varargs string name(int casus, int demon)
+{
+  if (demon==RAW) return "Wahlmaschine";
+  switch(casus) {
+    case WEM:
+    case WESSEN:
+      if (demon==1)
+        return "der Wahlmaschine";
+      return "einer Wahlmaschine";
+    default:
+      if (demon==1)
+        return "die Wahlmaschine";
+      return "eine Wahlmaschine";
+  }
+}
+
+varargs string Name(int casus, int demon)
+{   return capitalize(name(casus, demon));  }
+
+
+public string QueryPronoun(int casus)
+{
+  switch(casus)
+  {
+    case WER:
+      return "sie";
+      break;
+    case WEM: 
+      return "ihr";
+  }
+  return "sie";
+}                                                                                                                   
+
+string short()
+{  return "Eine Wahlmaschine.\n";  }
+
+string long()
+{
+  return "Eine Wahlmaschine. Mit ihr koennen geheime Wahlen durchgefuehrt werden.\n"+
+    "Aktuelles Thema: "+(stringp(thema) ? thema : "keines")+"\n";
+}
+
+mixed Query(mixed param)
+{
+   if (!stringp(param)) return 0;
+   switch (param) {
+     case P_NOGET:   return 1;
+     case P_GENDER:  return FEMALE;
+     case P_NAME:    return "Wahlmaschine";
+   }
+   return 0;
+}
+
+mixed QueryProp(mixed param)
+{  return Query(param);  }
+
+int Set(mixed param)
+{  return -1;  }
+
+int SetProp(mixed param)
+{  return -1;  }
+
+varargs int id(string str, int lvl)
+{  return (member(({"maschine", "waehler", "wahlmaschine"}), str)!=-1);  }
+
+// ab hier kommt der eigentliche Code der Wahlmaschine
+
+void init()
+{
+  add_action("waehle", "waehl",1);
+  add_action("auswertung","auswertung");
+  add_action("wahlthema", "wahlthema");
+  add_action("moeglichkeit","moeglichkeit");
+}
+
+void save_me()
+{  save_object("wahl/wahl");  }
+
+static int waehle()
+{
+  int i;
+  mixed second;
+
+  if (!RPL) return 0;
+  if (RPL->QueryProp(P_LEVEL)<10) {
+    notify_fail("Man kann erst ab Stufe 10 mitwaehlen :(\n");
+    return 0;
+  }
+  if (RPL->QueryProp(P_TESTPLAYER)) {
+    notify_fail("Testspieler sind von der Wahl ausgeschlossen.\n");
+    return 0;
+  }
+  if ((second=RPL->QueryProp(P_SECOND)) &&
+      (!stringp(second) || (file_size("/save/"+lower_case(second[0..0])+"/"+lower_case(second)+".o")<=0))) {
+    notify_fail("Nicht richtig markierte Zweities sind von der Wahl ausgeschlossen.\n");
+    return 0;
+  }
+  if (in_use)
+  {
+    write(in_use+" waehlt gerade, warte also bitte einen Augenblick.\n");
+    return 1;
+  }
+  in_use=capitalize(getuid(RPL));
+  say(in_use+" tritt an die Wahlmaschine.\n");
+  write(long());
+  write("Das steht zur Auswahl:\n");
+  for (i=0;i<sizeof(moeglichkeiten);i++)
+    write(sprintf(" -- %d.) %s\n",i+1,moeglichkeiten[i]));
+  write("Triff nun Deine Wahl (sie ist UNSICHTBAR): ");
+  input_to("waehle_2",1);
+  return 1;
+}
+
+private int falsch()
+{
+  write("Diese Auswahl ist ungueltig. Versuchs bitte gleich nochmal.\n");
+  say(in_use+" hat ausgewaehlt.\n");
+  in_use=0;
+  return 1;
+}
+
+static int waehle_2(string str)
+{
+  int i;
+  mixed name;
+
+  if (!str) return falsch();
+  
+  name=RPL->QueryProp(P_SECOND);
+  if (!stringp(name))
+    name=getuid(RPL);
+  else name=lower_case(name);
+            
+  if (member_array(str, moeglichkeiten)==-1) {
+    if ( !sscanf( str, "%d", i ) ) return falsch();
+    if ( i<1 || i>sizeof(moeglichkeiten) ) return falsch();
+    ergebnis=insert_alist(name,moeglichkeiten[i-1],ergebnis);
+  }
+  else ergebnis=insert_alist(name,str,ergebnis);
+  write("Ok.\n");
+  save_me();
+  say(in_use+" hat ausgewaehlt.\n");
+  in_use=0;
+  return 1;
+}
+
+static int auswertung()
+{
+  int i,j,max,all;
+  mapping stimmen, data;
+  mixed names;
+
+  if (!ARCH_SECURITY || process_call()) return 0;
+
+  rm("/log/WAHL");
+
+  data = mkmapping(ergebnis[0], ergebnis[1]);
+  names = m_indices(data);
+  stimmen = ([]);
+
+  SAY("\n\n\nWahlergebnisse zum Thema: "+thema+"\n");
+  SAY("\nGewaehlt haben folgende Personen: \n");
+  SAY(break_string(CountUp(map(sort_array(names, #'>/*'*/), #'capitalize/*'*/)), 78));
+  SAY("\n");
+
+  while(sizeof(names)) {
+    stimmen[data[names[0]]]++;
+    names[0..0] = ({});
+    all++;
+  }
+
+  SAY("*****************************************\n");
+  SAY("Ergebnis:\n");
+  for (i=0;i<sizeof(moeglichkeiten);i++)
+    SAY(sprintf(" -- %2d.) %20s: %3d (%' '3.2f%%)\n", i+1, moeglichkeiten[i],
+                stimmen[moeglichkeiten[i]], 1.0 * stimmen[moeglichkeiten[i]] * 100.0 / (1.0 * all)));
+  SAY(sprintf("Gesamtstimmen: %d\n", sizeof(m_indices(data))));
+  return 1;
+}
+
+static int wahlthema(string str)
+{
+  if (!ARCH_SECURITY || process_call()) {
+    write("NOT allowed");
+    return 0;
+  }
+  if (!(str=this_interactive()->_unparsed_args())) return 0;
+  thema=str;
+  say(RPL->name(WER)+" setzt ein neues Abstimmungsthema fest.\n");
+  ergebnis=({({}),({})});
+  moeglichkeiten=({});
+  write("Ok.\n");
+  save_me();
+  return 1;
+}
+
+static int moeglichkeit(string str)
+{
+  if (!ARCH_SECURITY || process_call()) {
+    write("NOT allowed");
+    return 0;
+  }
+  if (!(str=RPL->_unparsed_args())) return 0;
+  if (member_array(str, moeglichkeiten) != -1) {
+    write("Schon drin.\n");
+    return 1;
+  }
+  moeglichkeiten+=({str});
+  write("Ok.\n");
+  save_me();
+  return 1;
+}
+
+mixed _internal()
+{
+  if (!ARCH_SECURITY || process_call()) return 0;
+  return ergebnis;
+}