void zCom::increment(int steps) { long start; unsigned short size; unsigned long buffnum; VerseKey *tmpkey = &getVerseKey(); findOffset(tmpkey->Testament(), tmpkey->TestamentIndex(), &start, &size, &buffnum); SWKey lastgood = *tmpkey; while (steps) { long laststart = start; unsigned short lastsize = size; SWKey lasttry = *tmpkey; (steps > 0) ? ++(*key) : --(*key); tmpkey = &getVerseKey(); if ((error = key->Error())) { *key = lastgood; break; } long index = tmpkey->TestamentIndex(); findOffset(tmpkey->Testament(), index, &start, &size, &buffnum); 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; }
void RawFiles::setEntry(const char *inbuf, long len) { FileDesc *datafile; long start; unsigned short size; VerseKey *key = &getVerseKey(); len = (len<0)?strlen(inbuf):len; findOffset(key->Testament(), key->TestamentIndex(), &start, &size); if (size) { SWBuf tmpbuf; entryBuf = path; entryBuf += '/'; readText(key->Testament(), start, size, tmpbuf); entryBuf += tmpbuf; } else { SWBuf tmpbuf; entryBuf = path; entryBuf += '/'; tmpbuf = getNextFilename(); doSetText(key->Testament(), key->TestamentIndex(), tmpbuf); entryBuf += tmpbuf; } datafile = FileMgr::getSystemFileMgr()->open(entryBuf, FileMgr::CREAT|FileMgr::WRONLY|FileMgr::TRUNC); if (datafile->getFd() > 0) { datafile->write(inbuf, len); } FileMgr::getSystemFileMgr()->close(datafile); }
SWBuf &RawFiles::getRawEntryBuf() { FileDesc *datafile; long start = 0; unsigned short size = 0; VerseKey *key = &getVerseKey(); findOffset(key->Testament(), key->TestamentIndex(), &start, &size); entryBuf = ""; if (size) { SWBuf tmpbuf = path; tmpbuf += '/'; readText(key->Testament(), start, size, entryBuf); tmpbuf += entryBuf; entryBuf = ""; datafile = FileMgr::getSystemFileMgr()->open(tmpbuf.c_str(), FileMgr::RDONLY); if (datafile->getFd() > 0) { size = datafile->seek(0, SEEK_END); char *tmpBuf = new char [ size + 1 ]; memset(tmpBuf, 0, size + 1); datafile->seek(0, SEEK_SET); datafile->read(tmpBuf, size); entryBuf = tmpBuf; delete [] tmpBuf; // preptext(entrybuf); } FileMgr::getSystemFileMgr()->close(datafile); } return entryBuf; }
bool zCom::hasEntry(const SWKey *k) const { long start; unsigned short size; unsigned long buffnum; VerseKey *vk = &getVerseKey(k); findOffset(vk->Testament(), vk->TestamentIndex(), &start, &size, &buffnum); return size; }
void zCom::linkEntry(const SWKey *inkey) { VerseKey *destkey = &getVerseKey(); const VerseKey *srckey = &getVerseKey(inkey); doLinkEntry(destkey->Testament(), destkey->TestamentIndex(), srckey->TestamentIndex()); if (inkey != srckey) // free our key if we created a VerseKey delete srckey; }
void zCom::setEntry(const char *inbuf, long len) { VerseKey *key = &getVerseKey(); // see if we've jumped across blocks since last write if (lastWriteKey) { if (!sameBlock(lastWriteKey, key)) { flushCache(); } delete lastWriteKey; } doSetText(key->Testament(), key->TestamentIndex(), inbuf, len); lastWriteKey = (VerseKey *)key->clone(); // must delete }
/****************************************************************************** * zCom::getRawEntry - Returns the correct verse when char * cast * is requested * * RET: string buffer with verse */ SWBuf &zCom::getRawEntryBuf() { long start = 0; unsigned short size = 0; unsigned long buffnum; VerseKey *key = &getVerseKey(); findOffset(key->Testament(), key->TestamentIndex(), &start, &size, &buffnum); entrySize = size; // support getEntrySize call entryBuf = ""; zReadText(key->Testament(), start, size, buffnum, entryBuf); rawFilter(entryBuf, key); // if (!isUnicode()) prepText(entryBuf); return entryBuf; }
SWBuf &HREFCom::getRawEntryBuf() { long start; unsigned short size; VerseKey *key = 0; key = &getVerseKey(); findOffset(key->Testament(), key->TestamentIndex(), &start, &size); entrySize = size; // support getEntrySize call SWBuf tmpbuf; readText(key->Testament(), start, size, tmpbuf); entryBuf = prefix; entryBuf += tmpbuf.c_str(); prepText(entryBuf); if (key != this->key) delete key; return entryBuf; }
void RawFiles::deleteEntry() { VerseKey *key = &getVerseKey(); doSetText(key->Testament(), key->TestamentIndex(), ""); }