Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/items/buch/buch.c b/items/buch/buch.c
new file mode 100644
index 0000000..681d45b
--- /dev/null
+++ b/items/buch/buch.c
@@ -0,0 +1,194 @@
+/*
+  17.04.2007 Ennox angepasst fuer Blinde, automatisches filtern oder eigenes
+  Verzeichnis fuer blindenfreundliche Version einzelner Seiten per 
+  buchdir_noascii
+ */
+inherit "std/thing";
+
+#include <properties.h>
+#include <language.h>
+
+#define TP this_player()
+#define TPN this_player()->name()
+
+int offen = 0;
+int seite = 0;
+
+int getseitzahl();
+
+void create() {
+  if (!clonep(this_object())) return;
+  ::create();
+  SetProp(P_SHORT, "Ein Buch");
+  SetProp(P_LONG,
+	"Du haeltst ein leinengebundenes Buch in Deinen Haenden. Der Titel heisst:\n"+
+	"@@buchinfo@@.\n");
+  SetProp(P_NAME,"Buch");
+  AddId("buch");
+  SetProp(P_GENDER, NEUTER);
+  SetProp(P_WEIGHT,80);
+  SetProp(P_NOBUY, 1);
+  AddCmd("lies|lese&@ID", "lies", "Was willst Du lesen ? Syntax: LIES <ETWAS>.\n");
+  AddCmd("oeffne&@ID","oeffne","Was willst Du oeffnen?");
+  AddCmd("schliesse|schliess@ID","schliesse","Was willst Du schliessen?");
+  AddCmd("blaettere","blaettere");
+}
+
+static int oeffne() {
+  if (offen) 
+    write("Es ist schon geoeffnet.\n");
+  else {
+    offen=1;
+    seite=1;
+    write("Du oeffnest das Buch auf Seite 1.\n");
+    say(TPN + " oeffnet ein Buch.\n",TP);
+  }
+  return 1;
+}
+
+static int schliesse() {
+  if (!offen) 
+    write("Es ist schon geschlossen.\n");
+  else {
+    offen=0;
+    seite=0;
+    write("Du schliesst das Buch wieder.\n");
+    say(TPN + " schliesst ein Buch wieder.\n",TP);
+  }
+  return 1;
+}
+
+static int blaettere(string str) {
+  if (!offen || !stringp(str)) return 0;
+  int zu_seite;
+  if (sscanf(str,"zu seite %d",zu_seite)!=1) return 0;
+  int seitenzahl = getseitzahl();
+  if (zu_seite < 1 || zu_seite > seitenzahl) return 0;
+  write("Du blaetterst zu Seite "+zu_seite+".\n");
+  say(TPN + "blaettert in einem Buch.\n");
+  seite=zu_seite;
+  return 1;
+}
+
+
+string buchinfo() {
+  return "'Standardbuch oder Wie man ein standardisiertes Buch schreibt'";
+}
+
+int getseitzahl() {
+  return 3;
+}
+
+string buchdir() {
+  return "/items/buch/";
+}
+// Zeigt gewuenschte Seite an, mit clear werden grafische
+// Seiten aufgespalten und ohne Rahmen gezeigt
+
+void zeige_seite(string file, status clear) {
+  if (!clear) {
+    TP->more(file,1);
+    return;
+  }
+  string text=read_file(file);
+  if (!stringp(text)) return;
+  
+  string* pages=({"",""});
+  string* lines=explode(text,"\n");
+  int len, count=sizeof(lines)-1;
+  string line;
+
+  for (int i=1;i<count;i++) {
+    line=lines[i];
+    len=sizeof(line);
+    if (len>50) {
+      pages[0]+=line[1..len/2-2]+"\n";
+      pages[1]+=line[len/2+2..<2]+"\n";
+    }
+    else
+      pages[0]+=line[1..<2]+"\n";
+  }
+  TP->More((pages[0]+pages[1]));
+}
+
+// Schaut ob es die Seiten-Datei mit dir/seite01 oder dir/seite1 findet
+string find_file(string dir, string file, int page) {
+  string filename=dir+file+(page? (page<10 ? "0"+page : page ) : "");
+  if (file_size(filename)>=0) return filename;
+  filename=dir+file+(page? page : "");
+  if (file_size(filename)>=0) return filename;
+  return 0;
+}
+
+// wenn keine geradzahlige seite vorhanden, dann wird ungerade angezeigt
+string find_page(string dir, string file, int page) {
+  string filename=find_file(dir,file,page);
+  // eigentlich nur ungerade seiten gefordert
+  if (!filename && seite%2==0) {
+    return find_file(dir,file,page+1);
+  }
+  return filename;
+}
+
+// wenn _noascii Verzeichnis wird zuerst dort gesucht, wenn flag
+// noascii gesetzt ist, da die files dann aufbereitet sind, wird das
+// flag geloescht
+string find_page_noascii(string dir, string file, int page, status noascii) {
+  if (noascii) {
+    string noascii_dir=dir[..<2]+"_noascii/";
+    if (file_size(noascii_dir)==-2) {
+      string filename=find_page(noascii_dir,file,page);
+      if (stringp(filename)) {
+	noascii=0;
+	return filename;
+      }
+    }
+  }
+  return find_page(dir,file,page);
+}
+
+void lesseite(int seite) {
+  string dir=buchdir();
+  status noascii=0;
+  if (TP->QueryProp(P_NO_ASCII_ART)) {
+    noascii=1;
+  }
+  string buch_file=find_page_noascii(dir,seite ? "seite" : "titel",seite,&noascii);
+  if (!buch_file) {
+    write("Buchdaten nicht gefunden!\n");
+    return;
+  }
+  zeige_seite(buch_file,noascii);
+}
+void lesbuch() {
+  lesseite(seite);
+  seite+=2;
+  if (seite > getseitzahl()) {
+    offen=0;
+    seite=0;
+    write("Du hast das Buch ausgelesen und schliesst es.\n");
+    say(TPN + " hat ein Buch ausgelesen und schliesst es.\n",TP);
+  } else {
+    write("Du blaetterst um.\n");
+    say(TPN + " blaettert um.\n",TP);
+  }
+}
+
+void titel() {
+  lesseite(0);
+}
+
+static int lies(string str) {
+  string was;
+  notify_fail("Zu welcher Seite willst Du blaettern?\n");
+  if(!str) return 0;
+  if(sscanf(str,"%s",was)!=1) return 0;
+  if (!id(str)) return 0;
+  say(TPN + " liest in einem Buch.\n",TP);
+  if (offen) {
+    lesbuch();
+  } else {
+    titel();
+  }
+  return 1;
+}
diff --git a/items/buch/buch.info b/items/buch/buch.info
new file mode 100644
index 0000000..ec6f171
--- /dev/null
+++ b/items/buch/buch.info
@@ -0,0 +1,59 @@
+***********************************
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+*        Das Standardbuch         *
+*                                 *
+*              oder               *
+*                                 *
+*  Wie man ein standardisiertes   *
+*                                 *
+*          Buch schreibt          *
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+***********************************
+@seite@
+***********************************#************** - 1 - **************
+*                                 *#*           KEINE PANIK!          *
+*                                 *#*                                 *
+*                                 *#* Wenn   man  ein   gewoehnliches *
+*                                 *#* Buch  schreiben will,  ist  das *
+*                                 *#* Schwierigste,  dem Text  dieses *
+*                                 *#* Format zu geben. Daran kann man *
+*                                 *#* sich aber auch gewoehnen.       *
+*                                 *#*                                 *
+*                                 *#* Das  Buch besteht aus dem file, *
+*                                 *#* das  dieses Buch  erzeugt,  und *
+*                                 *#* einem  directory,  in  dem  die *
+*                                 *#* Seiten  enthalten  sind.  Dabei *
+*                                 *#* hat  die  Titelseite den  Namem *
+*                                 *#* 'titel' und die Seiten beginnen *
+*                                 *#* mit  'seite1', 'seite3', ... Es *
+*                                 *#* gibt  hierbei nur ungerade Sei- *
+*                                 *#* tennummern.                     *
+***********************************#***********************************
+@seite@
+************** - 2 - **************#************** - 3 - **************
+* Im  file wird einfach /obj/buch *#* Verbesserungsvorschlaege   sind *
+* inherited  und  dann meist  nur *#* ausdruecklich erwuenscht!       *
+* drei Funktionen geaendert:      *#*                                 *
+*                                 *#*                                 *
+* buchdir() : in dieser Funktion  *#*                                 *
+*   wird das directory angegeben, *#*                                 *
+*   in dem das Buch enthalten ist *#*                                 *
+*                                 *#*                                 *
+* getseitzahl() : diese Funktion  *#*                                 *
+*   uebergibt die Seitenzahl des  *#*                                 *
+*   Buchs                         *#*                                 *
+*                                 *#*                                 *
+* buchinfo() : diese Funktion     *#*                                 *
+*   uebergibt das Aussehen des    *#*                                 *
+*   Buchs, das man mit 'unter-    *#*                                 *
+*   suche buch' bekommt           *#*                                 *
+*                                 *#*                                 *
+***********************************#***********************************
diff --git a/items/buch/buch1.c b/items/buch/buch1.c
new file mode 100644
index 0000000..180c1c0
--- /dev/null
+++ b/items/buch/buch1.c
@@ -0,0 +1,99 @@
+#pragma strong_types,save_types,rtt_checks
+
+inherit "/std/thing";
+
+#include <properties.h>
+#include <language.h>
+#include <defines.h>
+#include <sys_debug.h>
+
+#define P_SEITENZAHL "seitenzahl"
+#define P_SEITE      "buchseite"
+#define P_BUCH       "buchdir"
+
+string *load(string file) { return explode(read_file(file), "@seite@\n"); }
+
+protected void create()
+{
+  if (!clonep(this_object())) return;
+  ::create();
+  SetProp(P_SHORT, "Ein Buch");
+  SetProp(P_SEITE, 0);
+  SetProp(P_BUCH, "/items/buch/buch.info");
+  SetProp(P_SEITENZAHL, sizeof(load(QueryProp(P_BUCH))));
+  SetProp(P_SHORT, "Wie man ein Buch schreibt!");
+  SetProp(P_LONG,
+	"Du haeltst ein leinengebundenes Buch in Deinen Haenden. Der Titel lautet:\n"
+  +QueryProp(P_SHORT)+"\n");
+  SetProp(P_NAME,"Buch");
+  AddId("buch");
+  SetProp(P_GENDER, NEUTER);
+  SetProp(P_WEIGHT,80);
+  SetProp(P_NOBUY, 1);
+  AddCmd(({"lies","lese"}), "lies");
+  AddCmd("oeffne","oeffne");
+  AddCmd("schliesse","schliesse");
+  AddCmd("blaettere","blaettere");
+}
+
+int oeffne(string str) {
+  if (!str || !id(str)) return 0;
+  if (QueryProp(P_SEITE)) write("Es ist schon geoeffnet.\n");
+  else {
+	  SetProp(P_SEITE, 1);
+	  write("Du oeffnest das Buch auf Seite 1.\n");
+	  say(PL->name() + " oeffnet ein Buch.\n",PL);
+  }
+  return 1;
+}
+
+int schliesse(string str) {
+  string was;
+
+  if (!str || !id(str)) return 0;
+  if (!QueryProp(P_SEITE)) write("Es ist schon geschlossen.\n");
+  else {
+    SetProp(P_SEITE, 0);
+	  write("Du schliesst das Buch wieder.\n");
+	  say(PL->name() + " schliesst ein Buch wieder.\n",PL);
+  }
+  return 1;
+}
+
+int blaettere(string str) {
+  int seite;
+
+  notify_fail("Zu welcher Seite moechtest Du blaettern?\n");
+  if (!str || !(seite = QueryProp(P_SEITE))) return 0;
+  if (sscanf(str,"zu seite %d", seite)<1 &&
+      ((seite < 1) || (seite > sizeof(load(QueryProp(P_BUCH)))))) return 0;
+  write("Du blaetterst zu Seite "+seite+".\n");
+  say(PL->name() + "blaettert in einem Buch.\n");
+  SetProp(P_SEITE, seite);
+  return 1;
+}
+
+int lies(string str)
+{
+  string was;
+  int seite;
+
+  notify_fail("Was willst Du lesen ? Syntax: LIES <ETWAS>.\n");
+  if(!str || !id(str) || sscanf(str,"%s",was)!=1) return 0;
+  say(PL->name() + " liest in einem Buch.\n",PL);
+
+  seite = QueryProp(P_SEITE);
+	PL->More(load(QueryProp(P_BUCH))[seite++]);
+  if (!QueryProp(P_SEITE)) return 1;
+	if (seite >= sizeof(load(QueryProp(P_BUCH)))) {
+    SetProp(P_SEITE, 0);
+		write("Du hast das Buch ausgelesen und schliesst es.\n");
+		say(PL->name() + " hat ein Buch ausgelesen und schliesst es.\n",PL);
+	} else {
+    SetProp(P_SEITE, seite);
+	  write("Du blaetterst um.\n");
+		say(PL->name() + " blaettert um.\n",PL);
+  }
+	return 1;
+}
+
diff --git a/items/buch/seite1 b/items/buch/seite1
new file mode 100644
index 0000000..37fc810
--- /dev/null
+++ b/items/buch/seite1
@@ -0,0 +1,19 @@
+***********************************#************** - 1 - **************
+*                                 *#*           KEINE PANIK!          *
+*                                 *#*                                 *
+*                                 *#* Wenn   man  ein   gewoehnliches *
+*                                 *#* Buch  schreiben will,  ist  das *
+*                                 *#* Schwierigste,  dem Text  dieses *
+*                                 *#* Format zu geben. Daran kann man *
+*                                 *#* sich aber auch gewoehnen.       *
+*                                 *#*                                 *
+*                                 *#* Das  Buch besteht aus dem file, *
+*                                 *#* das  dieses Buch  erzeugt,  und *
+*                                 *#* einem  directory,  in  dem  die *
+*                                 *#* Seiten  enthalten  sind.  Dabei *
+*                                 *#* hat  die  Titelseite den  Namem *
+*                                 *#* 'titel' und die Seiten beginnen *
+*                                 *#* mit  'seite1', 'seite3', ... Es *
+*                                 *#* gibt  hierbei nur ungerade Sei- *
+*                                 *#* tennummern.                     *
+***********************************#***********************************
diff --git a/items/buch/seite3 b/items/buch/seite3
new file mode 100644
index 0000000..9513e0e
--- /dev/null
+++ b/items/buch/seite3
@@ -0,0 +1,19 @@
+************** - 2 - **************#************** - 3 - **************
+* Im  file wird einfach /std/buch *#* Verbesserungsvorschlaege   sind *
+* inherited  und  dann meist  nur *#* ausdruecklich erwuenscht!       *
+* drei Funktionen geaendert:      *#*                                 *
+*                                 *#*                                 *
+* buchdir() : in dieser Funktion  *#*                                 *
+*   wird das directory angegeben, *#*                                 *
+*   in dem das Buch enthalten ist *#*                                 *
+*                                 *#*                                 *
+* getseitzahl() : diese Funktion  *#*                                 *
+*   uebergibt die Seitenzahl des  *#*                                 *
+*   Buchs                         *#*                                 *
+*                                 *#*                                 *
+* buchinfo() : diese Funktion     *#*                                 *
+*   uebergibt das Aussehen des    *#*                                 *
+*   Buchs, das man mit 'unter-    *#*                                 *
+*   suche buch' bekommt           *#*                                 *
+*                                 *#*                                 *
+***********************************#***********************************
diff --git a/items/buch/titel b/items/buch/titel
new file mode 100644
index 0000000..a81c9ca
--- /dev/null
+++ b/items/buch/titel
@@ -0,0 +1,19 @@
+***********************************
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+*        Das Standardbuch         *
+*                                 *
+*              oder               *
+*                                 *
+*  Wie man ein standardisiertes   *
+*                                 *
+*          Buch schreibt          *
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+*                                 *
+***********************************