diff options
author | Teus Benschop <teusjannette@gmail.com> | 2018-11-10 20:58:48 +0700 |
---|---|---|
committer | Teus Benschop <teusjannette@gmail.com> | 2018-11-10 20:58:48 +0700 |
commit | d5be8eb6b5193a123cbc87ac86bb0a923967e79b (patch) | |
tree | 02ce37145e1d2a7153c679880b8ed1ec146d4095 /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/Makefile | 5 | ||||
-rw-r--r-- | src/modules/genbook/Makefile.am | 5 | ||||
-rw-r--r-- | src/modules/genbook/rawgenbook/Makefile | 4 | ||||
-rw-r--r-- | src/modules/genbook/rawgenbook/Makefile.am | 4 | ||||
-rw-r--r-- | src/modules/genbook/rawgenbook/rawgenbook.cpp | 226 | ||||
-rw-r--r-- | src/modules/genbook/swgenbook.cpp | 100 |
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 |