summaryrefslogtreecommitdiff
path: root/src/modules/comments
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/comments')
-rw-r--r--src/modules/comments/hrefcom/hrefcom.cpp29
-rw-r--r--src/modules/comments/rawcom/rawcom.cpp215
-rw-r--r--src/modules/comments/rawfiles/rawfiles.cpp112
-rw-r--r--src/modules/comments/swcom.cpp41
-rw-r--r--src/modules/comments/zcom/zcom.cpp198
5 files changed, 221 insertions, 374 deletions
diff --git a/src/modules/comments/hrefcom/hrefcom.cpp b/src/modules/comments/hrefcom/hrefcom.cpp
index a80e5b6..42b2745 100644
--- a/src/modules/comments/hrefcom/hrefcom.cpp
+++ b/src/modules/comments/hrefcom/hrefcom.cpp
@@ -15,11 +15,11 @@
#include <unistd.h>
#endif
-#include <string.h>
#include <utilfuns.h>
#include <rawverse.h>
#include <hrefcom.h>
+SWORD_NAMESPACE_START
/******************************************************************************
* HREFCom Constructor - Initializes data for instance of HREFCom
@@ -55,10 +55,9 @@ HREFCom::~HREFCom()
* RET: string buffer with verse
*/
-char *HREFCom::getRawEntry() {
+SWBuf &HREFCom::getRawEntryBuf() {
long start;
unsigned short size;
- char *tmpbuf;
VerseKey *key = 0;
#ifndef _WIN32_WCE
@@ -72,26 +71,20 @@ char *HREFCom::getRawEntry() {
if (!key)
key = new VerseKey(this->key);
- findoffset(key->Testament(), key->Index(), &start, &size);
+ findOffset(key->Testament(), key->Index(), &start, &size);
entrySize = size; // support getEntrySize call
- unsigned long newsize = ((size + 2) + strlen(prefix)) * FILTERPAD;
- if (newsize > entrybufallocsize) {
- if (entrybuf)
- delete [] entrybuf;
- entrybuf = new char [ newsize ];
- entrybufallocsize = newsize;
- }
- tmpbuf = new char [ size + 10 ];
-
- gettext(key->Testament(), start, size + 2, tmpbuf);
- sprintf(entrybuf, "%s%s", prefix, tmpbuf);
- preptext(entrybuf);
+ SWBuf tmpbuf;
- delete [] tmpbuf;
+ readText(key->Testament(), start, size, tmpbuf);
+ entryBuf = prefix;
+ entryBuf += tmpbuf.c_str();
+ prepText(entryBuf);
if (key != this->key)
delete key;
- return entrybuf;
+ return entryBuf;
}
+
+SWORD_NAMESPACE_END
diff --git a/src/modules/comments/rawcom/rawcom.cpp b/src/modules/comments/rawcom/rawcom.cpp
index ca93c64..e34af2e 100644
--- a/src/modules/comments/rawcom/rawcom.cpp
+++ b/src/modules/comments/rawcom/rawcom.cpp
@@ -14,11 +14,11 @@
#include <unistd.h>
#endif
-#include <string.h>
#include <utilfuns.h>
#include <rawverse.h>
#include <rawcom.h>
+SWORD_NAMESPACE_START
/******************************************************************************
* RawCom Constructor - Initializes data for instance of RawCom
@@ -44,206 +44,98 @@ RawCom::~RawCom()
/******************************************************************************
- * RawCom::operator char * - Returns the correct verse when char * cast
+ * RawCom::getRawEntry() - Returns the correct verse when char * cast
* is requested
*
* RET: string buffer with verse
*/
-char *RawCom::getRawEntry() {
+SWBuf &RawCom::getRawEntryBuf() {
long start = 0;
unsigned short size = 0;
- VerseKey *key = 0;
+ VerseKey *key = &getVerseKey();
-#ifndef _WIN32_WCE
- try {
-#endif
- key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- if (!key)
- key = new VerseKey(this->key);
-
-
- findoffset(key->Testament(), key->Index(), &start, &size);
+ findOffset(key->Testament(), key->Index(), &start, &size);
entrySize = size; // support getEntrySize call
- unsigned long newsize = (size + 2) * FILTERPAD;
- if (newsize > entrybufallocsize) {
- if (entrybuf)
- delete [] entrybuf;
- entrybuf = new char [ newsize ];
- entrybufallocsize = newsize;
- }
- *entrybuf = 0;
-
- gettext(key->Testament(), start, (size + 2), entrybuf);
-
- rawFilter(entrybuf, size, key);
+ entryBuf = "";
+ readText(key->Testament(), start, size, entryBuf);
- if (!isUnicode())
- preptext(entrybuf);
+ rawFilter(entryBuf, 0); // hack, decipher
+ rawFilter(entryBuf, key);
- if (key != this->key)
- delete key;
+// if (!isUnicode())
+ prepText(entryBuf);
- return entrybuf;
+ return entryBuf;
}
/******************************************************************************
- * RawCom::operator += - Increments module key a number of entries
+ * RawCom::increment - Increments module key a number of entries
*
- * ENT: increment - Number of entries to jump forward
+ * ENT: steps - Number of entries to jump forward
*
* RET: *this
*/
-SWModule &RawCom::operator +=(int increment)
-{
+void RawCom::increment(int steps) {
long start;
unsigned short size;
- VerseKey *tmpkey = 0;
-
-#ifndef _WIN32_WCE
- try {
-#endif
- tmpkey = SWDYNAMIC_CAST(VerseKey, key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- if (!tmpkey)
- tmpkey = new VerseKey(key);
+ VerseKey *tmpkey = &getVerseKey();
- findoffset(tmpkey->Testament(), tmpkey->Index(), &start, &size);
+ findOffset(tmpkey->Testament(), tmpkey->Index(), &start, &size);
SWKey lastgood = *tmpkey;
- while (increment) {
+ while (steps) {
long laststart = start;
unsigned short lastsize = size;
SWKey lasttry = *tmpkey;
- (increment > 0) ? (*key)++ : (*key)--;
- if (tmpkey != key)
- delete tmpkey;
- tmpkey = 0;
-#ifndef _WIN32_WCE
- try {
-#endif
- tmpkey = SWDYNAMIC_CAST(VerseKey, key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- if (!tmpkey)
- tmpkey = new VerseKey(key);
+ (steps > 0) ? (*key)++ : (*key)--;
+ tmpkey = &getVerseKey();
if ((error = key->Error())) {
*key = lastgood;
break;
}
long index = tmpkey->Index();
- findoffset(tmpkey->Testament(), index, &start, &size);
- if ((((laststart != start) || (lastsize != size))||(!skipConsecutiveLinks)) && (start >= 0) && (size)) {
- increment += (increment < 0) ? 1 : -1;
+ findOffset(tmpkey->Testament(), index, &start, &size);
+ if (
+ (((laststart != start) || (lastsize != size)) // we're a different entry
+// && (start > 0)
+ && (size)) // and we actually have a size
+ ||(!skipConsecutiveLinks)) { // or we don't want to skip consecutive links
+ steps += (steps < 0) ? 1 : -1;
lastgood = *tmpkey;
}
}
error = (error) ? KEYERR_OUTOFBOUNDS : 0;
-
- if (tmpkey != key)
- delete tmpkey;
-
- return *this;
}
-SWModule &RawCom::setentry(const char *inbuf, long len) {
- VerseKey *key = 0;
- // see if we have a VerseKey * or decendant
-#ifndef _WIN32_WCE
- try {
-#endif
- key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- // if we don't have a VerseKey * decendant, create our own
- if (!key)
- key = new VerseKey(this->key);
-
- settext(key->Testament(), key->Index(), inbuf, len);
-
- if (this->key != key) // free our key if we created a VerseKey
- delete key;
- return *this;
-}
-
-SWModule &RawCom::operator <<(const char *inbuf) {
- VerseKey *key = 0;
- // see if we have a VerseKey * or decendant
-#ifndef _WIN32_WCE
- try {
-#endif
- key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- // if we don't have a VerseKey * decendant, create our own
- if (!key)
- key = new VerseKey(this->key);
-
- settext(key->Testament(), key->Index(), inbuf);
-
- if (this->key != key) // free our key if we created a VerseKey
- delete key;
-
- return *this;
+void RawCom::setEntry(const char *inbuf, long len) {
+ VerseKey *key = &getVerseKey();
+ doSetText(key->Testament(), key->Index(), inbuf, len);
}
-SWModule &RawCom::operator <<(const SWKey *inkey) {
- VerseKey *destkey = 0;
+void RawCom::linkEntry(const SWKey *inkey) {
+ VerseKey *destkey = &getVerseKey();
const VerseKey *srckey = 0;
- // see if we have a VerseKey * or decendant
-#ifndef _WIN32_WCE
- try {
-#endif
- destkey = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- // if we don't have a VerseKey * decendant, create our own
- if (!destkey)
- destkey = new VerseKey(this->key);
// see if we have a VerseKey * or decendant
-#ifndef _WIN32_WCE
try {
-#endif
srckey = SWDYNAMIC_CAST(VerseKey, inkey);
-#ifndef _WIN32_WCE
}
catch ( ... ) {}
-#endif
// if we don't have a VerseKey * decendant, create our own
if (!srckey)
srckey = new VerseKey(inkey);
- linkentry(destkey->Testament(), destkey->Index(), srckey->Index());
-
- if (this->key != destkey) // free our key if we created a VerseKey
- delete destkey;
+ doLinkEntry(destkey->Testament(), destkey->Index(), srckey->Index());
if (inkey != srckey) // free our key if we created a VerseKey
delete srckey;
-
- return *this;
}
@@ -255,21 +147,38 @@ SWModule &RawCom::operator <<(const SWKey *inkey) {
void RawCom::deleteEntry() {
- VerseKey *key = 0;
+ VerseKey *key = &getVerseKey();
+ doSetText(key->Testament(), key->Index(), "");
+}
-#ifndef _WIN32_WCE
+
+VerseKey &RawCom::getVerseKey() {
+ static VerseKey tmpVK;
+ VerseKey *key;
+ // see if we have a VerseKey * or decendant
try {
-#endif
key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
}
- catch ( ... ) {}
-#endif
- if (!key)
- key = new VerseKey(this->key);
+ catch ( ... ) { }
+ if (!key) {
+ ListKey *lkTest = 0;
+ try {
+ lkTest = SWDYNAMIC_CAST(ListKey, this->key);
+ }
+ catch ( ... ) { }
+ if (lkTest) {
+ try {
+ key = SWDYNAMIC_CAST(VerseKey, lkTest->GetElement());
+ }
+ catch ( ... ) { }
+ }
+ }
+ if (!key) {
+ tmpVK = *(this->key);
+ return tmpVK;
+ }
+ else return *key;
+}
- settext(key->Testament(), key->Index(), "");
- if (key != this->key)
- delete key;
-}
+SWORD_NAMESPACE_END
diff --git a/src/modules/comments/rawfiles/rawfiles.cpp b/src/modules/comments/rawfiles/rawfiles.cpp
index c8e9388..9ffa00f 100644
--- a/src/modules/comments/rawfiles/rawfiles.cpp
+++ b/src/modules/comments/rawfiles/rawfiles.cpp
@@ -15,7 +15,6 @@
#include <unistd.h>
#endif
-#include <string.h>
#include <utilfuns.h>
#include <rawverse.h>
#include <rawfiles.h>
@@ -25,6 +24,7 @@
#define O_BINARY 0 // If it hasn't been defined than we probably
#endif // don't need it.
+SWORD_NAMESPACE_START
/******************************************************************************
* RawFiles Constructor - Initializes data for instance of RawFiles
@@ -49,13 +49,13 @@ RawFiles::~RawFiles()
/******************************************************************************
- * RawFiles::operator char * - Returns the correct verse when char * cast
+ * RawFiles::getRawEntry - Returns the correct verse when char * cast
* is requested
*
* RET: string buffer with verse
*/
-char *RawFiles::getRawEntry() {
+SWBuf &RawFiles::getRawEntryBuf() {
FileDesc *datafile;
long start = 0;
unsigned short size = 0;
@@ -73,148 +73,125 @@ char *RawFiles::getRawEntry() {
if (!key)
key = new VerseKey(this->key);
- findoffset(key->Testament(), key->Index(), &start, &size);
-
- if (entrybuf)
- delete [] entrybuf;
+ findOffset(key->Testament(), key->Index(), &start, &size);
+ entryBuf = "";
if (size) {
- tmpbuf = new char [ (size + 2) + strlen(path) + 5 ];
- sprintf(tmpbuf,"%s/",path);
- gettext(key->Testament(), start, (size + 2), tmpbuf+strlen(tmpbuf));
- datafile = FileMgr::systemFileMgr.open(tmpbuf, O_RDONLY|O_BINARY);
- delete [] tmpbuf;
+ SWBuf tmpbuf = path;
+ tmpbuf += '/';
+ readText(key->Testament(), start, size, entryBuf);
+ tmpbuf += entryBuf;
+ entryBuf = "";
+ datafile = FileMgr::systemFileMgr.open(tmpbuf.c_str(), O_RDONLY|O_BINARY);
if (datafile->getFd() > 0) {
size = lseek(datafile->getFd(), 0, SEEK_END);
- entrybuf = new char [ size * FILTERPAD ];
- memset(entrybuf, 0, size * FILTERPAD);
+ char *tmpBuf = new char [ size + 1 ];
+ memset(tmpBuf, 0, size + 1);
lseek(datafile->getFd(), 0, SEEK_SET);
- read(datafile->getFd(), entrybuf, size);
- preptext(entrybuf);
- }
- else {
- entrybuf = new char [2];
- entrybuf[0] = 0;
- entrybuf[1] = 0;
+ read(datafile->getFd(), tmpBuf, size);
+ entryBuf = tmpBuf;
+ delete [] tmpBuf;
+// preptext(entrybuf);
}
FileMgr::systemFileMgr.close(datafile);
}
- else {
- entrybuf = new char [2];
- entrybuf[0] = 0;
- entrybuf[1] = 0;
- }
if (key != this->key)
delete key;
- return entrybuf;
+ return entryBuf;
}
/******************************************************************************
- * RawFiles::operator << (char *)- Update the modules current key entry with
+ * RawFiles::setEntry(char *)- Update the modules current key entry with
* provided text
- *
- * RET: *this
*/
-SWModule &RawFiles::operator <<(const char *inbuf) {
+void RawFiles::setEntry(const char *inbuf, long len) {
FileDesc *datafile;
long start;
unsigned short size;
- char *tmpbuf;
VerseKey *key = 0;
-#ifndef _WIN32_WCE
+ len = (len<0)?strlen(inbuf):len;
try {
-#endif
key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
}
catch ( ... ) {}
-#endif
if (!key)
key = new VerseKey(this->key);
- findoffset(key->Testament(), key->Index(), &start, &size);
+ findOffset(key->Testament(), key->Index(), &start, &size);
if (size) {
- tmpbuf = new char [ (size + 2) + strlen(path) + 1 ];
- sprintf(tmpbuf, "%s/", path);
- gettext(key->Testament(), start, (size + 2), tmpbuf+strlen(tmpbuf));
+ SWBuf tmpbuf;
+ entryBuf = path;
+ entryBuf += '/';
+ readText(key->Testament(), start, size, tmpbuf);
+ entryBuf += tmpbuf;
}
else {
- tmpbuf = new char [ 16 + strlen(path) + 1 ];
- sprintf(tmpbuf, "%s/%s", path, getnextfilename());
- settext(key->Testament(), key->Index(), tmpbuf+strlen(path)+1);
+ SWBuf tmpbuf;
+ entryBuf = path;
+ entryBuf += '/';
+ tmpbuf = getNextFilename();
+ doSetText(key->Testament(), key->Index(), tmpbuf);
+ entryBuf += tmpbuf;
}
- datafile = FileMgr::systemFileMgr.open(tmpbuf, O_CREAT|O_WRONLY|O_BINARY|O_TRUNC);
- delete [] tmpbuf;
+ datafile = FileMgr::systemFileMgr.open(entryBuf, O_CREAT|O_WRONLY|O_BINARY|O_TRUNC);
if (datafile->getFd() > 0) {
- write(datafile->getFd(), inbuf, strlen(inbuf));
+ write(datafile->getFd(), inbuf, len);
}
FileMgr::systemFileMgr.close(datafile);
if (key != this->key)
delete key;
-
- return *this;
}
/******************************************************************************
- * RawFiles::operator << (SWKey *)- Link the modules current key entry with
+ * RawFiles::linkEntry(SWKey *)- Link the modules current key entry with
* another module entry
*
* RET: *this
*/
-SWModule &RawFiles::operator <<(const SWKey *inkey) {
+void RawFiles::linkEntry(const SWKey *inkey) {
long start;
unsigned short size;
char *tmpbuf;
const VerseKey *key = 0;
-#ifndef _WIN32_WCE
try {
-#endif
key = SWDYNAMIC_CAST(VerseKey, inkey);
-#ifndef _WIN32_WCE
}
catch ( ... ) {}
-#endif
if (!key)
key = new VerseKey(this->key);
- findoffset(key->Testament(), key->Index(), &start, &size);
+ findOffset(key->Testament(), key->Index(), &start, &size);
if (size) {
- tmpbuf = new char [ size + 2];
- gettext(key->Testament(), start, size + 2, tmpbuf);
+ SWBuf tmpbuf;
+ readText(key->Testament(), start, size + 2, tmpbuf);
if (key != inkey)
delete key;
key = 0;
-#ifndef _WIN32_WCE
try {
-#endif
key = SWDYNAMIC_CAST(VerseKey, inkey);
-#ifndef _WIN32_WCE
}
catch ( ... ) {}
-#endif
if (!key)
key = new VerseKey(this->key);
- settext(key->Testament(), key->Index(), tmpbuf);
+ doSetText(key->Testament(), key->Index(), tmpbuf.c_str());
}
if (key != inkey)
delete key;
-
- return *this;
}
@@ -239,7 +216,7 @@ void RawFiles::deleteEntry() {
if (!key)
key = new VerseKey(this->key);
- settext(key->Testament(), key->Index(), "");
+ doSetText(key->Testament(), key->Index(), "");
if (key != this->key)
delete key;
@@ -247,13 +224,13 @@ void RawFiles::deleteEntry() {
/******************************************************************************
- * RawFiles::getnextfilename - generates a valid filename in which to store
+ * RawFiles::getNextfilename - generates a valid filename in which to store
* an entry
*
* RET: filename
*/
-char *RawFiles::getnextfilename() {
+char *RawFiles::getNextFilename() {
static char incfile[255];
long number;
FileDesc *datafile;
@@ -289,3 +266,4 @@ char RawFiles::createModule (const char *path) {
+SWORD_NAMESPACE_END
diff --git a/src/modules/comments/swcom.cpp b/src/modules/comments/swcom.cpp
index 1feb0cf..3f2b940 100644
--- a/src/modules/comments/swcom.cpp
+++ b/src/modules/comments/swcom.cpp
@@ -5,6 +5,7 @@
#include <swcom.h>
+SWORD_NAMESPACE_START
/******************************************************************************
* SWCom Constructor - Initializes data for instance of SWCom
@@ -28,3 +29,43 @@ SWCom::SWCom(const char *imodname, const char *imoddesc, SWDisplay *idisp, SWTex
SWCom::~SWCom()
{
}
+
+
+long SWCom::Index() const {
+ VerseKey *key = 0;
+ try {
+ key = SWDYNAMIC_CAST(VerseKey, this->key);
+ }
+ catch ( ... ) {}
+ if (!key)
+ key = new VerseKey(this->key);
+
+ entryIndex = key->NewIndex();
+
+ if (key != this->key)
+ delete key;
+
+ return entryIndex;
+}
+
+long SWCom::Index(long iindex) {
+ VerseKey *key = 0;
+ try {
+ key = SWDYNAMIC_CAST(VerseKey, this->key);
+ }
+ catch ( ... ) {}
+ if (!key)
+ key = new VerseKey(this->key);
+
+ key->Testament(1);
+ key->Index(iindex);
+
+ if (key != this->key) {
+ this->key->copyFrom(*key);
+ delete key;
+ }
+
+ return Index();
+}
+
+SWORD_NAMESPACE_END
diff --git a/src/modules/comments/zcom/zcom.cpp b/src/modules/comments/zcom/zcom.cpp
index c53fd1e..744a509 100644
--- a/src/modules/comments/zcom/zcom.cpp
+++ b/src/modules/comments/zcom/zcom.cpp
@@ -14,11 +14,11 @@
#include <unistd.h>
#endif
-#include <string.h>
#include <utilfuns.h>
#include <zverse.h>
#include <zcom.h>
+SWORD_NAMESPACE_START
/******************************************************************************
* zCom Constructor - Initializes data for instance of zCom
@@ -49,51 +49,28 @@ zCom::~zCom() {
}
/******************************************************************************
- * zCom::operator char * - Returns the correct verse when char * cast
+ * zCom::getRawEntry - Returns the correct verse when char * cast
* is requested
*
* RET: string buffer with verse
*/
-char *zCom::getRawEntry() {
+SWBuf &zCom::getRawEntryBuf() {
long start = 0;
unsigned short size = 0;
- VerseKey *key = 0;
+ VerseKey *key = &getVerseKey();
-#ifndef _WIN32_WCE
- try {
-#endif
- key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- // if we don't have a VerseKey * decendant, create our own
- if (!key)
- key = new VerseKey(this->key);
-
- findoffset(key->Testament(), key->Index(), &start, &size);
+ findOffset(key->Testament(), key->Index(), &start, &size);
entrySize = size; // support getEntrySize call
- unsigned long newsize = (size + 2) * FILTERPAD;
- if (newsize > entrybufallocsize) {
- if (entrybuf)
- delete [] entrybuf;
- entrybuf = new char [ newsize ];
- entrybufallocsize = newsize;
- }
- *entrybuf = 0;
+ entryBuf = "";
+ zReadText(key->Testament(), start, size, entryBuf);
- swgettext(key->Testament(), start, (size + 2), entrybuf);
+ rawFilter(entryBuf, key);
- rawFilter(entrybuf, size, key);
+// if (!isUnicode())
+ prepText(entryBuf);
- if (!isUnicode())
- preptext(entrybuf);
-
- if (this->key != key) // free our key if we created a VerseKey
- delete key;
-
- return entrybuf;
+ return entryBuf;
}
@@ -115,21 +92,8 @@ bool zCom::sameBlock(VerseKey *k1, VerseKey *k2) {
return true;
}
-SWModule &zCom::setentry(const char *inbuf, long len) {
- VerseKey *key = 0;
- // see if we have a VerseKey * or decendant
-#ifndef _WIN32_WCE
- try {
-#endif
- key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- // if we don't have a VerseKey * decendant, create our own
- if (!key)
- key = new VerseKey(this->key);
-
+void zCom::setEntry(const char *inbuf, long len) {
+ VerseKey *key = &getVerseKey();
// see if we've jumped across blocks since last write
if (lastWriteKey) {
@@ -139,60 +103,30 @@ SWModule &zCom::setentry(const char *inbuf, long len) {
delete lastWriteKey;
}
- settext(key->Testament(), key->Index(), inbuf, len);
+ doSetText(key->Testament(), key->Index(), inbuf, len);
lastWriteKey = (VerseKey *)key->clone(); // must delete
-
- if (this->key != key) // free our key if we created a VerseKey
- delete key;
-
- return *this;
-}
-
-SWModule &zCom::operator <<(const char *inbuf) {
- return setentry(inbuf, 0);
}
-SWModule &zCom::operator <<(const SWKey *inkey) {
- VerseKey *destkey = 0;
+void zCom::linkEntry(const SWKey *inkey) {
+ VerseKey *destkey = &getVerseKey();
const VerseKey *srckey = 0;
- // see if we have a VerseKey * or decendant
-#ifndef _WIN32_WCE
- try {
-#endif
- destkey = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- // if we don't have a VerseKey * decendant, create our own
- if (!destkey)
- destkey = new VerseKey(this->key);
// see if we have a VerseKey * or decendant
-#ifndef _WIN32_WCE
try {
-#endif
srckey = (const VerseKey *) SWDYNAMIC_CAST(VerseKey, inkey);
-#ifndef _WIN32_WCE
}
catch ( ... ) {
}
-#endif
// if we don't have a VerseKey * decendant, create our own
if (!srckey)
srckey = new VerseKey(inkey);
- linkentry(destkey->Testament(), destkey->Index(), srckey->Index());
-
- if (this->key != destkey) // free our key if we created a VerseKey
- delete destkey;
+ doLinkEntry(destkey->Testament(), destkey->Index(), srckey->Index());
if (inkey != srckey) // free our key if we created a VerseKey
delete srckey;
-
- return *this;
}
/******************************************************************************
@@ -203,88 +137,80 @@ SWModule &zCom::operator <<(const SWKey *inkey) {
void zCom::deleteEntry() {
- VerseKey *key = 0;
-
-#ifndef _WIN32_WCE
- try {
-#endif
- key = SWDYNAMIC_CAST(VerseKey, this->key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- if (!key)
- key = new VerseKey(this->key);
-
- settext(key->Testament(), key->Index(), "");
-
- if (key != this->key)
- delete key;
+ VerseKey *key = &getVerseKey();
+ doSetText(key->Testament(), key->Index(), "");
}
/******************************************************************************
- * zCom::operator += - Increments module key a number of entries
+ * zCom::increment - Increments module key a number of entries
*
* ENT: increment - Number of entries to jump forward
*
* RET: *this
*/
-SWModule &zCom::operator +=(int increment) {
+void zCom::increment(int steps) {
long start;
unsigned short size;
- VerseKey *tmpkey = 0;
-
-#ifndef _WIN32_WCE
- try {
-#endif
- tmpkey = SWDYNAMIC_CAST(VerseKey, key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- if (!tmpkey)
- tmpkey = new VerseKey(key);
+ VerseKey *tmpkey = &getVerseKey();
- findoffset(tmpkey->Testament(), tmpkey->Index(), &start, &size);
+ findOffset(tmpkey->Testament(), tmpkey->Index(), &start, &size);
SWKey lastgood = *tmpkey;
- while (increment) {
+ while (steps) {
long laststart = start;
unsigned short lastsize = size;
SWKey lasttry = *tmpkey;
- (increment > 0) ? (*key)++ : (*key)--;
- if (tmpkey != key)
- delete tmpkey;
- tmpkey = 0;
-#ifndef _WIN32_WCE
- try {
-#endif
- tmpkey = SWDYNAMIC_CAST(VerseKey, key);
-#ifndef _WIN32_WCE
- }
- catch ( ... ) {}
-#endif
- if (!tmpkey)
- tmpkey = new VerseKey(key);
+ (steps > 0) ? (*key)++ : (*key)--;
+ tmpkey = &getVerseKey();
if ((error = key->Error())) {
*key = lastgood;
break;
}
long index = tmpkey->Index();
- findoffset(tmpkey->Testament(), index, &start, &size);
- if ((((laststart != start) || (lastsize != size))||(!skipConsecutiveLinks)) && (start >= 0) && (size)) {
- increment += (increment < 0) ? 1 : -1;
+ findOffset(tmpkey->Testament(), index, &start, &size);
+ if (
+ (((laststart != start) || (lastsize != size)) // we're a different entry
+// && (start > 0)
+ && (size)) // and we actually have a size
+ ||(!skipConsecutiveLinks)) { // or we don't want to skip consecutive links
+ steps += (steps < 0) ? 1 : -1;
lastgood = *tmpkey;
}
}
error = (error) ? KEYERR_OUTOFBOUNDS : 0;
+}
- if (tmpkey != key)
- delete tmpkey;
- return *this;
+VerseKey &zCom::getVerseKey() {
+ static VerseKey tmpVK;
+ VerseKey *key;
+ // see if we have a VerseKey * or decendant
+ try {
+ key = SWDYNAMIC_CAST(VerseKey, this->key);
+ }
+ catch ( ... ) { }
+ if (!key) {
+ ListKey *lkTest = 0;
+ try {
+ lkTest = SWDYNAMIC_CAST(ListKey, this->key);
+ }
+ catch ( ... ) { }
+ if (lkTest) {
+ try {
+ key = SWDYNAMIC_CAST(VerseKey, lkTest->GetElement());
+ }
+ catch ( ... ) { }
+ }
+ }
+ if (!key) {
+ tmpVK = *(this->key);
+ return tmpVK;
+ }
+ else return *key;
}
+
+SWORD_NAMESPACE_END