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;
+}