Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/std/shells/magier/todo.c b/std/shells/magier/todo.c
new file mode 100644
index 0000000..f4120e7
--- /dev/null
+++ b/std/shells/magier/todo.c
@@ -0,0 +1,222 @@
+// $Id: todo.c 9142 2015-02-04 22:17:29Z Zesstra $
+#pragma strict_types
+#pragma save_types
+#pragma range_check
+#pragma no_clone
+#pragma pedantic
+
+#include <wizlevels.h>
+#include <defines.h>
+#define NEED_PROTOTYPES
+#include <magier.h>
+#include <player.h>
+
+#define SAVEFILENAME sprintf("/players/%s/.todoliste",getuid())
+
+private nosave status todo_initialized;
+private nosave mixed *todo_data;
+mixed *todo_data_public;
+static mixed _query_localcmds()
+{
+  return ({
+    ({"todo","_todo",0,WIZARD_LVL})});
+}
+
+private void todo_save()
+{
+
+  int i,j;
+  string a,b;
+  a=SAVEFILENAME+".o";
+  rm(a);
+  if (j=sizeof(todo_data))
+  {
+#if !__EFUN_DEFINED__(save_value)   
+    write_file(a,"#0:0\ntodo_data_public ({");
+    for (i=0;i<j;i++)
+    {
+      b=regreplace(todo_data[i][1],"\"","\\\"",1);
+      b=regreplace(b,"\n","\\n",1);
+      write_file(a,sprintf("({%d,\"%s\",}),",
+                           todo_data[i][0],b));
+    }
+    write_file(a,"})\n");
+#else
+    todo_data_public=todo_data;
+    write_file(a,save_value(todo_data_public));
+    todo_data_public=0;
+#endif
+  }
+  return;
+
+}
+
+static void initialize()
+{
+  if(!IS_WIZARD(this_object())) return;
+  if (!restore_object(SAVEFILENAME)) todo_data=({});
+  else
+    {
+      todo_data=todo_data_public;
+      todo_data_public=0;
+    }
+  return;
+}
+
+static void _todo_neu2(string input,string carry)
+{
+  if (input=="q"||(input=="."&&!sizeof(carry)))
+  {
+    printf("Abbruch!");
+    return;
+  }
+  if (input!=".")
+  {
+    printf("]");
+    input_to("_todo_neu2",0,carry+input+"\n");
+    return;
+  }
+  todo_data+=({ ({ time(), carry }) });
+  todo_save();
+  printf("Eintrag angelegt. Laufende Nummer ist %d.\n",sizeof(todo_data));
+  return;
+}
+
+private int _todo_neu(string cmdline)
+{
+  if (cmdline!="neu") return 0;
+  printf("Was musst Du noch machen? (Abbruch mit 'q', "
+         "Ende mit '.')\n]");
+  input_to("_todo_neu2",0,"");
+  return 1;
+}
+
+private int _todo_loeschen(string cmdline)
+{
+  int nr;
+  if (!sscanf(cmdline,"loeschen %d",nr))
+    return notify_fail("Welchen Eintrag moechtest Du loeschen?\n"),0;
+  if (!sizeof(todo_data))
+    return notify_fail("Deine Todo-Liste hat ja ueberhaupt keinen "
+                       "Eintrag!\n"),0;
+  if (nr>sizeof(todo_data))
+  {
+    printf("Deine Todo-Liste hat nur %d Eintra%s.\n",sizeof(todo_data),
+           (sizeof(todo_data)==1?"g":"ege"));
+    return 1;
+  }
+  todo_data[nr-1]=0;
+  todo_data-=({0});
+  todo_save();
+  printf("Eintrag Nummer %d wurde geloescht. Da hast Du ja ordentlich "
+         "was geschafft...\noder geschickt delegiert ;-)\n",nr);
+  return 1;
+}
+
+private int _todo_anzeigen(string cmdline)
+{
+  int nr1,nr2;
+  string output;
+  if (!sizeof(todo_data))
+    return notify_fail("Deine Todo-Liste hat keine Eintraege.\n"),0;
+  switch(sscanf(cmdline,"anzeigen %d bis %d",nr1,nr2)) 
+  {
+  case 0: nr1=1; nr2=sizeof(todo_data); break;
+  case 1: nr2=nr1; break;
+  case 2: break;
+  }
+  if (nr1<0) nr1=sizeof(todo_data)+nr1+1;
+  if (nr2<0) nr2=sizeof(todo_data)+nr2+1;
+  if (nr1<1||nr2<1||nr1>sizeof(todo_data)||nr2>sizeof(todo_data))
+    return notify_fail(sprintf("Deine Todo-Liste hat (gluecklicherweise) "
+                               "nur %d Eintra%s.\n",sizeof(todo_data),
+                               (sizeof(todo_data)>1?"ege":"g"))),0;
+  output="\n-----------------------------------------------------------------------------\n";
+  if (nr1>nr2) // Rueckwaerts
+  {
+    while(nr1>=nr2)
+      output+=sprintf("Eintrag Nr. %d von %s:\n%s\n\n",nr1--,
+           dtime(todo_data[nr1][0]),break_string(todo_data[nr1][1],78,5,
+                                       BS_LEAVE_MY_LFS));
+  }
+  else
+  {
+    nr1--;
+    while (nr1<nr2)
+      output+=sprintf("\nEintrag Nr. %d von %s:\n%s\n",(nr1+1),
+           dtime(todo_data[nr1][0]),break_string(todo_data[nr1++][1],78,5,
+                                       BS_LEAVE_MY_LFS));
+  }
+  More(output+"-----------------------------------------------------------------------------\n");
+  return 1;
+}
+
+private int _todo_verschieben(string cmdline)
+{
+  int from;
+  mixed to,dummy;
+  if (!(sscanf(cmdline,"verschieben %d nach %d",from,to)==2||
+        sscanf(cmdline,"verschieben %d nach %s",from,to)==2))
+    return 0;
+  from--;
+  if (stringp(to))
+  {
+    switch(to)
+    {
+      case "oben": to=from-1; break;
+      case "unten": to=from+1; break;
+      default: return 0;
+    }
+  }
+  else to--;
+  if (to==from) return notify_fail("Da ist der Eintrag ja schon!\n"),0;
+  if (from<0||from>=sizeof(todo_data)) return notify_fail(
+        "Wie willst Du einen nicht existenten Eintrag verschieben?\n"),0;
+  if (to<0||to>=sizeof(todo_data)) return notify_fail(
+        "Dahin kannst Du den Eintrag nicht verschieben.\n"),0;
+  dummy=todo_data[from];
+  if (to>from)
+    while (from++<to) todo_data[from-1]=todo_data[from];
+  else
+    while(from-->to) todo_data[from+1]=todo_data[from];
+  todo_data[to]=dummy;
+  printf("Eintrag wurde verschoben.\n");
+  return 1;
+}
+
+private int _todo_hilfe()
+{
+  printf(
+  "-------------------------------------------------------------------------------\n\n"
+  " Die Todo-Liste laesst sich mit den folgenden Befehlen steuern:\n\n"
+  " todo neu                                - Legt einen neuen Eintrag an.\n"
+  " todo loeschen <nummer>                  - Loescht einen Eintrag.\n"
+  " todo anzeigen [<nummer> [bis <nummer>]] - Zeigt die Todo-Liste an.\n"
+  " todo verschieben <nummer> nach <ziel>   - Verschiebt einen Eintrag.\n\n"
+  " <ziel> kann eine Zahl oder die Worte 'oben' oder 'unten' sein.\n"
+  "-------------------------------------------------------------------------------\n");
+  return 1;
+}
+
+
+static int _todo(string cmdline)
+{
+  string *args;
+  
+  cmdline=_unparsed_args(1);
+  notify_fail("Falsche Syntax. 'todo hilfe' zeigt eine Hilfe an.\n");
+  if (sizeof(cmdline))
+  {
+    args=explode(cmdline," ");
+    switch(args[0])
+    {
+      case "neu":         return _todo_neu(cmdline);
+      case "loeschen":    return _todo_loeschen(cmdline);
+      case "anzeigen":    return _todo_anzeigen(cmdline);
+      case "verschieben": return _todo_verschieben(cmdline);
+      case "hilfe":       return _todo_hilfe();
+     default:            return 0;
+    }
+  }
+  return 0;
+}