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 *
+* *
+* *
+* *
+* *
+* *
+***********************************