Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/obj/tools/projekttool.c b/obj/tools/projekttool.c
new file mode 100644
index 0000000..f61a9dd
--- /dev/null
+++ b/obj/tools/projekttool.c
@@ -0,0 +1,212 @@
+//
+// Projecttool
+//
+
+#include "/p/service/mandragon/projektbrett/projectmaster.h"
+#include "/secure/wizlevels.h"
+#include <moving.h>
+
+inherit "/std/thing";
+string hilfe;
+static int changetime;
+static int suppressinfos;
+
+void create()
+{
+	if (!IS_CLONE(TO)) return;
+	::create();
+	if (!find_object(PROJECTMASTER)) call_other(PROJECTMASTER,"???");
+        
+	SetProp(P_NAME,"Schreibfeder");
+	SetProp(P_NODROP,"Du moechtest Deine Feder dann doch lieber behalten.\n");
+	SetProp(P_NEVERDROP,1);
+	SetProp(P_GENDER,FEMALE);
+	SetProp(P_SHORT,"Eine kleine magische Schreibfeder");
+        if (!changetime) changetime=1;
+        hilfe=BS("-----------------------------------------------------------------------------\n"
+                 "Diese Feder ermoeglicht es Dir nicht nur, von ueberall her auf die "
+                 "allseits beliebten Schwarzen Bretter fuer Projekte zuzugreifen, "
+                 "sondern ermoeglicht es Dir auch, selber Projekte dort zu "
+                 "veroeffentlichen.\n"
+                 "Folgende Kommandos koennen Dir dabei helfen:\n\n"
+                 "federhilfe              - Diese Uebersicht\n"
+                 "federdoku               - Dokumentation aller Befehle\n"
+                 "projekthilfe            - Uebersicht ueber die Brettbefehle\n"
+                 "AddProject              - Projekt anlegen\n"
+                 "RemoveProject <Nummer>  - Projekt entfernen\n"
+                 "ModifyProject <Nummer>  - Projekt aendern\n"
+                 "projektinfos ein|an|aus - Aenderungen (nicht mehr) anzeigen\n\n"
+                 "Bei Fragen, Bugs und/oder Typos wende Dich bitte vertrauensvoll an den\n"
+                 "Mandragon Deiner Wahl.\n"
+                 "---------------------------------------------------------------------------");
+	SetProp(P_LONG,
+		BS("Diese kleine, weisse, magisch glaenzende Feder liegt sanft " +
+	           "in Deiner Hand. Du spuerst foermlich, wie sie danach dringt, " +
+		   "Neues zu schaffen und die Welt zu vergroessern.\n\n")+hilfe);
+        AddId(({"schreibfeder","feder","projekttool"}));
+	AddCmd("federhilfe","hilfe_fun");
+	AddCmd("projekthilfe","board_help");
+	AddCmd("projektliste","board_list");
+        AddCmd("federdoku","doku_fun");
+	AddCmd(({"projektdetail","projektdetails"}),"board_long");
+	AddCmd(({"addproject","AddProject","ap"}),"addproj_fun");
+	AddCmd(({"removeproject","RemoveProject","rp"}),"remproj_fun");
+	AddCmd(({"modifyproject","ModifyProject","mp"}),"modproj_fun");
+        AddCmd("projektinfos","watch_fun");
+	TO->move(TP,M_NOCHECK);
+	return;
+}
+
+void _set_autoloadobj(mixed val)
+{
+  if (intp(val)) changetime=time();
+  else if (pointerp(val)&&sizeof(val)==2)
+  {
+    changetime=val[0];
+    suppressinfos=val[1];
+  }
+  return;
+}
+
+int *_query_autoloadobj() { return ({ changetime, suppressinfos }); }
+
+int doku_fun(string arg)
+{
+  TP->More(PROJECTDOKU,1);
+  return 1;
+}
+
+int board_help(string arg)
+{
+  PROJECTMASTER->BoardHelp();
+  return 1;
+}
+
+int board_list(string arg)
+{
+  arg=TP->_unparsed_args(1);
+  if (!sizeof(arg)) (PROJECTMASTER)->ShowList();
+  else PROJECTMASTER->ParseArgs(arg);
+  changetime=time();
+  return 1;
+}
+
+int board_long(string arg)
+{
+  int number;
+  arg=TP->_unparsed_args(1);
+  notify_fail("Syntax: projektdetail <PROJEKTNUMMER>\n");
+  if (!sizeof(arg)) return 0;
+  if (!(number=to_int(arg))||(arg!=to_string(number))) return 0;
+  notify_fail("Projektnummern koennen nur Zahlen groesser Null sein.\n");
+  if (number<1) return 0;
+  PROJECTMASTER->ShowLong(number);
+  return 1;
+}
+
+int hilfe_fun(string arg)
+{
+  tell_object(TP,hilfe);
+  return 1;
+}
+
+int board_fun(string arg)
+{
+  PROJECTMASTER->ParseArgs(TP->_unparsed_args(1));
+  return 1;
+}
+
+int addproj_fun(string arg)
+{
+  if (!IS_LEARNER(TP))
+  {
+    tell_object(TP,"Wie bist DU denn an die Feder gekommen?\n");
+    TO->remove();
+    return 1;
+  }
+  PROJECTMASTER->ChangeData(0);
+  return 1;
+}
+
+int remproj_fun(string arg)
+{
+  if (!IS_LEARNER(TP))
+  {
+    tell_object(TP,"Wie bist DU denn an die Feder gekommen?\n");
+    TO->remove();
+    return 1;
+  }
+  notify_fail("Syntax: removeproject NUMMER\n");
+  if (!sizeof(arg)||!intp(to_int(arg))||(arg!=to_string(to_int(arg)))) return 0;
+  PROJECTMASTER->DeleteData(to_int(arg));
+  return 1;
+}
+
+int modproj_fun(string arg)
+{
+  if (!IS_LEARNER(TP))
+  {
+    tell_object(TP,"Wie bist DU denn an die Feder gekommen?\n");
+    TO->remove();
+    return 1;
+  }
+  notify_fail("Syntax: modifyproject NUMMER\n");
+  if (!arg||!intp(to_int(arg))||(arg!=to_string(to_int(arg)))) return 0;
+  notify_fail("Es gibt kein Projekt mit der Nummer 0.\n");
+  if (to_int(arg)==0) return 0;
+  PROJECTMASTER->ChangeData(to_int(arg));
+  return 1;
+}
+
+int watch_fun(string arg)
+{
+  if (!IS_LEARNER(TP))
+  {
+    tell_object(TP,"Wie bist DU denn an die Feder gekommen?\n");
+    TO->remove();
+    return 1;
+  }
+  if (!sizeof(arg))
+  {
+    tell_object(TP,BS(sprintf("Du bekommst derzeit %sInformationen "
+                              "ueber Aenderungen am Projektbrett.",
+                              suppressinfos?"keine ":"")));
+    return 1;
+  }
+  notify_fail("Syntax: projektinfos <ein|an|aus>\n");
+  if (arg!="ein"&&arg!="an"&&arg!="aus") return 0;
+  if (arg=="aus")
+  {
+    suppressinfos=1;
+    tell_object(TP,BS("Du wirst jetzt keine Meldungen mehr ueber "
+                      "Aenderungen am Projektbrett erhalten.\n"));
+    return 1;
+  }
+  suppressinfos=0;
+  tell_object(TP,BS("Du bekommst ab sofort Meldungen ueber Aenderungen "
+                    "am Projektbrett.\n"));
+  return 1;
+}
+
+void init()
+{
+  if (!IS_LEARNER(TP)) {
+    if (find_call_out("remove") == -1)
+      call_out("remove",0);
+  }
+  else ::init();
+  return;
+}
+
+void reset()
+{
+  if (!environment())
+  {
+    destruct(TO);
+    return;
+  }
+  if (!suppressinfos&&changetime<(PROJECTMASTER->ChangeTime()))
+    tell_object(environment(),"Intuitiv spuerst Du, dass sich "
+                "die Aushaenge am Projektbrett geaendert haben.\n");
+  return;
+}