summaryrefslogtreecommitdiff
path: root/src/modules/genbook
diff options
context:
space:
mode:
authorTeus Benschop <teusjannette@gmail.com>2018-11-10 20:58:48 +0700
committerTeus Benschop <teusjannette@gmail.com>2018-11-10 20:58:48 +0700
commitd5be8eb6b5193a123cbc87ac86bb0a923967e79b (patch)
tree02ce37145e1d2a7153c679880b8ed1ec146d4095 /src/modules/genbook
Import sword_1.8.1+dfsg.orig.tar.gz
[dgit import orig sword_1.8.1+dfsg.orig.tar.gz]
Diffstat (limited to 'src/modules/genbook')
-rw-r--r--src/modules/genbook/Makefile5
-rw-r--r--src/modules/genbook/Makefile.am5
-rw-r--r--src/modules/genbook/rawgenbook/Makefile4
-rw-r--r--src/modules/genbook/rawgenbook/Makefile.am4
-rw-r--r--src/modules/genbook/rawgenbook/rawgenbook.cpp226
-rw-r--r--src/modules/genbook/swgenbook.cpp100
6 files changed, 344 insertions, 0 deletions
diff --git a/src/modules/genbook/Makefile b/src/modules/genbook/Makefile
new file mode 100644
index 0000000..1a2d00d
--- /dev/null
+++ b/src/modules/genbook/Makefile
@@ -0,0 +1,5 @@
+
+root := ../../..
+
+all:
+ make -C ${root}
diff --git a/src/modules/genbook/Makefile.am b/src/modules/genbook/Makefile.am
new file mode 100644
index 0000000..02f6ab1
--- /dev/null
+++ b/src/modules/genbook/Makefile.am
@@ -0,0 +1,5 @@
+genbookdir = $(top_srcdir)/src/modules/genbook
+
+libsword_la_SOURCES += $(genbookdir)/swgenbook.cpp
+
+include ../src/modules/genbook/rawgenbook/Makefile.am
diff --git a/src/modules/genbook/rawgenbook/Makefile b/src/modules/genbook/rawgenbook/Makefile
new file mode 100644
index 0000000..aab8056
--- /dev/null
+++ b/src/modules/genbook/rawgenbook/Makefile
@@ -0,0 +1,4 @@
+root := ../../../..
+
+all:
+ make -C ${root}
diff --git a/src/modules/genbook/rawgenbook/Makefile.am b/src/modules/genbook/rawgenbook/Makefile.am
new file mode 100644
index 0000000..a176d75
--- /dev/null
+++ b/src/modules/genbook/rawgenbook/Makefile.am
@@ -0,0 +1,4 @@
+rawgenbookdir = $(top_srcdir)/src/modules/genbook/rawgenbook
+
+libsword_la_SOURCES += $(rawgenbookdir)/rawgenbook.cpp
+
diff --git a/src/modules/genbook/rawgenbook/rawgenbook.cpp b/src/modules/genbook/rawgenbook/rawgenbook.cpp
new file mode 100644
index 0000000..41cd6e4
--- /dev/null
+++ b/src/modules/genbook/rawgenbook/rawgenbook.cpp
@@ -0,0 +1,226 @@
+/******************************************************************************
+ *
+ * rawgenbook.cpp - code for class 'RawGenBook'- a module that reads raw
+ * text files: ot and nt using indexs ??.bks ??.cps ??.vss
+ *
+ * $Id: rawgenbook.cpp 3439 2016-10-23 08:32:02Z scribe $
+ *
+ * Copyright 2002-2013 CrossWire Bible Society (http://www.crosswire.org)
+ * CrossWire Bible Society
+ * P. O. Box 2528
+ * Tempe, AZ 85280-2528
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ */
+
+
+
+#include <stdio.h>
+#include <fcntl.h>
+
+#include <rawgenbook.h>
+#include <rawstr.h>
+#include <utilstr.h>
+#include <filemgr.h>
+#include <sysdata.h>
+#include <treekeyidx.h>
+#include <versetreekey.h>
+
+SWORD_NAMESPACE_START
+
+/******************************************************************************
+ * RawGenBook Constructor - Initializes data for instance of RawGenBook
+ *
+ * ENT: iname - Internal name for module
+ * idesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+RawGenBook::RawGenBook(const char *ipath, const char *iname, const char *idesc, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang, const char *keyType)
+ : SWGenBook(iname, idesc, idisp, enc, dir, mark, ilang) {
+
+ char *buf = new char [ strlen (ipath) + 20 ];
+
+ path = 0;
+ stdstr(&path, ipath);
+ verseKey = !strcmp("VerseKey", keyType);
+
+ if (verseKey) setType("Biblical Texts");
+
+ if ((path[strlen(path)-1] == '/') || (path[strlen(path)-1] == '\\'))
+ path[strlen(path)-1] = 0;
+
+ delete key;
+ key = createKey();
+
+
+ sprintf(buf, "%s.bdt", path);
+ bdtfd = FileMgr::getSystemFileMgr()->open(buf, FileMgr::RDWR, true);
+
+ delete [] buf;
+
+}
+
+
+/******************************************************************************
+ * RawGenBook Destructor - Cleans up instance of RawGenBook
+ */
+
+RawGenBook::~RawGenBook() {
+
+ FileMgr::getSystemFileMgr()->close(bdtfd);
+
+ if (path)
+ delete [] path;
+
+}
+
+
+bool RawGenBook::isWritable() const {
+ return ((bdtfd->getFd() > 0) && ((bdtfd->mode & FileMgr::RDWR) == FileMgr::RDWR));
+}
+
+
+/******************************************************************************
+ * RawGenBook::getRawEntry - Returns the correct verse when char * cast
+ * is requested
+ *
+ * RET: string buffer with verse
+ */
+
+SWBuf &RawGenBook::getRawEntryBuf() const {
+
+ __u32 offset = 0;
+ __u32 size = 0;
+
+ const TreeKey &key = getTreeKey();
+
+ int dsize;
+ key.getUserData(&dsize);
+ entryBuf = "";
+ if (dsize > 7) {
+ memcpy(&offset, key.getUserData(), 4);
+ offset = swordtoarch32(offset);
+
+ memcpy(&size, key.getUserData() + 4, 4);
+ size = swordtoarch32(size);
+
+ entrySize = size; // support getEntrySize call
+
+ entryBuf.setFillByte(0);
+ entryBuf.setSize(size);
+ bdtfd->seek(offset, SEEK_SET);
+ bdtfd->read(entryBuf.getRawData(), size);
+
+ rawFilter(entryBuf, 0); // hack, decipher
+ rawFilter(entryBuf, &key);
+
+// if (!isUnicode())
+ SWModule::prepText(entryBuf);
+ }
+
+ return entryBuf;
+}
+
+
+void RawGenBook::setEntry(const char *inbuf, long len) {
+
+ __u32 offset = (__u32)archtosword32(bdtfd->seek(0, SEEK_END));
+ __u32 size = 0;
+ TreeKeyIdx *key = ((TreeKeyIdx *)&(getTreeKey()));
+
+ char userData[8];
+
+ if (len < 0)
+ len = strlen(inbuf);
+
+ bdtfd->write(inbuf, len);
+
+ size = (__u32)archtosword32(len);
+ memcpy(userData, &offset, 4);
+ memcpy(userData+4, &size, 4);
+ key->setUserData(userData, 8);
+ key->save();
+}
+
+
+void RawGenBook::linkEntry(const SWKey *inkey) {
+ TreeKeyIdx *srckey = 0;
+ TreeKeyIdx *key = ((TreeKeyIdx *)&(getTreeKey()));
+ // see if we have a VerseKey * or decendant
+ SWTRY {
+ srckey = SWDYNAMIC_CAST(TreeKeyIdx, inkey);
+ }
+ SWCATCH ( ... ) {}
+ // if we don't have a VerseKey * decendant, create our own
+ if (!srckey) {
+ srckey = (TreeKeyIdx *)createKey();
+ (*srckey) = *inkey;
+ }
+
+ key->setUserData(srckey->getUserData(), 8);
+ key->save();
+
+ if (inkey != srckey) // free our key if we created a VerseKey
+ delete srckey;
+}
+
+
+/******************************************************************************
+ * RawGenBook::deleteEntry - deletes this entry
+ *
+ * RET: *this
+ */
+
+void RawGenBook::deleteEntry() {
+ TreeKeyIdx *key = ((TreeKeyIdx *)&(getTreeKey()));
+ key->remove();
+}
+
+
+char RawGenBook::createModule(const char *ipath) {
+ char *path = 0;
+ char *buf = new char [ strlen (ipath) + 20 ];
+ FileDesc *fd;
+ signed char retval;
+
+ stdstr(&path, ipath);
+
+ if ((path[strlen(path)-1] == '/') || (path[strlen(path)-1] == '\\'))
+ path[strlen(path)-1] = 0;
+
+ sprintf(buf, "%s.bdt", path);
+ FileMgr::removeFile(buf);
+ fd = FileMgr::getSystemFileMgr()->open(buf, FileMgr::CREAT|FileMgr::WRONLY, FileMgr::IREAD|FileMgr::IWRITE);
+ fd->getFd();
+ FileMgr::getSystemFileMgr()->close(fd);
+
+ retval = TreeKeyIdx::create(path);
+ delete [] path;
+ return retval;
+}
+
+
+SWKey *RawGenBook::createKey() const {
+ TreeKey *tKey = new TreeKeyIdx(path);
+ if (verseKey) { SWKey *vtKey = new VerseTreeKey(tKey); delete tKey; return vtKey; }
+ return tKey;
+}
+
+bool RawGenBook::hasEntry(const SWKey *k) const {
+ TreeKey &key = getTreeKey(k);
+
+ int dsize;
+ key.getUserData(&dsize);
+ return (dsize > 7) && key.popError() == '\x00';
+}
+
+SWORD_NAMESPACE_END
diff --git a/src/modules/genbook/swgenbook.cpp b/src/modules/genbook/swgenbook.cpp
new file mode 100644
index 0000000..fef41ad
--- /dev/null
+++ b/src/modules/genbook/swgenbook.cpp
@@ -0,0 +1,100 @@
+/******************************************************************************
+ *
+ * swgenbook.cpp - Implementation of SWGenBook class
+ *
+ * $Id: swgenbook.cpp 2893 2013-07-16 03:07:02Z scribe $
+ *
+ * Copyright 2002-2013 CrossWire Bible Society (http://www.crosswire.org)
+ * CrossWire Bible Society
+ * P. O. Box 2528
+ * Tempe, AZ 85280-2528
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ */
+
+
+#include <swgenbook.h>
+#include <versetreekey.h>
+
+SWORD_NAMESPACE_START
+
+/******************************************************************************
+ * SWGenBook Constructor - Initializes data for instance of SWGenBook
+ *
+ * ENT: imodname - Internal name for module
+ * imoddesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+SWGenBook::SWGenBook(const char *imodname, const char *imoddesc, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang) : SWModule(imodname, imoddesc, idisp, (char *)"Generic Books", enc, dir, mark, ilang) {
+ tmpTreeKey = 0;
+}
+
+
+/******************************************************************************
+ * SWGenBook Destructor - Cleans up instance of SWGenBook
+ */
+
+SWGenBook::~SWGenBook() {
+ delete tmpTreeKey;
+}
+
+
+TreeKey &SWGenBook::getTreeKey(const SWKey *k) const {
+ const SWKey* thiskey = k?k:this->key;
+
+ TreeKey *key = 0;
+
+ SWTRY {
+ key = SWDYNAMIC_CAST(TreeKey, (thiskey));
+ }
+ SWCATCH ( ... ) {}
+
+ if (!key) {
+ ListKey *lkTest = 0;
+ SWTRY {
+ lkTest = SWDYNAMIC_CAST(ListKey, thiskey);
+ }
+ SWCATCH ( ... ) { }
+ if (lkTest) {
+ SWTRY {
+ key = SWDYNAMIC_CAST(TreeKey, lkTest->getElement());
+ if (!key) {
+ VerseTreeKey *tkey = 0;
+ SWTRY {
+ tkey = SWDYNAMIC_CAST(VerseTreeKey, lkTest->getElement());
+ }
+ SWCATCH ( ... ) {}
+ if (tkey) key = tkey->getTreeKey();
+ }
+ }
+ SWCATCH ( ... ) { }
+ }
+ }
+ if (!key) {
+ VerseTreeKey *tkey = 0;
+ SWTRY {
+ tkey = SWDYNAMIC_CAST(VerseTreeKey, (thiskey));
+ }
+ SWCATCH ( ... ) {}
+ if (tkey) key = tkey->getTreeKey();
+ }
+
+ if (!key) {
+ delete tmpTreeKey;
+ tmpTreeKey = (TreeKey *)createKey();
+ (*tmpTreeKey) = *(thiskey);
+ return (*tmpTreeKey);
+ }
+ else return *key;
+}
+
+SWORD_NAMESPACE_END