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; }
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); }
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; }
int main(int argc, char **argv) { long pos, offset; int num1, num2, rangemax; char startflag = 0; short size; checkparams(argc, argv); openfiles(argv[1]); testmnt = key1.Testament(); num1 = key1.Chapter(); num2 = key1.Verse(); pos = 0; write(bfp, &pos, 4); /* Book offset for testament intros */ pos = 4; write(cfp, &pos, 4); /* Chapter offset for testament intro */ /* Right now just zero out intros until parsing correctly */ pos = 0; size = 0; write(vfp, &pos, 4); /* Module intro */ write(vfp, &size, 2); write(vfp, &pos, 4); /* Testament intro */ write(vfp, &size, 2); while(!findbreak(fp, &offset, &num1, &num2, &rangemax, &size)) { if (!startflag) { startflag = 1; } else { if (num2 < key2.Verse()) { // new chapter if (num1 <= key2.Chapter()) { // new book key2.Verse(1); key2.Chapter(1); key2.Book(key2.Book()+1); } printf("Found Chapter Break: %d ('%s')\n", num1, (const char *)key2); chapoffset = offset; chapsize = size; // continue; } } key2.Verse(1); key2.Chapter(num1); key2.Verse(num2); key3 = key2; // key3 += (rangemax - key3.Verse()); writeidx(key1, key2, key3, offset, size); } close(vfp); close(cfp); close(bfp); close(fp); return 0; }
void writeidx(VerseKey &key1, VerseKey &key2, VerseKey &key3, long offset, short size) { long pos; short tmp; for (; ((key1 <= key3) && (key1.Error() != KEYERR_OUTOFBOUNDS) && (key1.Testament() == testmnt)); key1+=1) { if (key1.Verse() == 1) { // new chapter if (key1.Chapter() == 1) { // new book pos = lseek(cfp, 0, SEEK_CUR); write(bfp, &pos, 4); pos = lseek(vfp, 0, SEEK_CUR); /* Book intro (cps) */ write(cfp, &pos, 4); write(vfp, &chapoffset, 4); /* Book intro (vss) set to same as chap for now(it should be chap 1 which usually contains the book into anyway)*/ write(vfp, &chapsize, 2); } pos = lseek(vfp, 0, SEEK_CUR); write(cfp, &pos, 4); write(vfp, &chapoffset, 4); /* Chapter intro */ write(vfp, &chapsize, 2); } if (key1 >= key2) { write(vfp, &offset, 4); write(vfp, &size, 2); } else { pos = 0; tmp = 0; write(vfp, &pos, 4); write(vfp, &tmp, 2); } } }
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; }
/****************************************************************************** * 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 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 }
void RawFiles::deleteEntry() { VerseKey *key = &getVerseKey(); doSetText(key->Testament(), key->TestamentIndex(), ""); }
int main(int argc, char **argv) { SWMgr mymgr; RawText::createModule("."); RawText mod("."); VerseKey vk; vk.Headings(1); vk.AutoNormalize(0); vk.Persist(1); mod.setKey(vk); vk.Verse(0); vk.Chapter(0); vk.Book(0); vk.Testament(0); mod << "Module heading text"; vk.Verse(0); vk.Chapter(0); vk.Book(0); vk.Testament(1); mod << "OT heading text"; vk.Testament(1); vk.Book(1); vk.Chapter(0); vk.Verse(0); mod << "Gen heading text"; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(0); mod << "Gen 1 heading text"; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(1); mod << "Gen 1:1 text"; vk.Testament(0); vk.Book(0); vk.Chapter(0); vk.Verse(0); std::cout << "Module heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(0); vk.Chapter(0); vk.Verse(0); std::cout << "OT heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(1); vk.Chapter(0); vk.Verse(0); std::cout << "Gen heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(0); std::cout << "Gen 1 heading text ?= " << (const char*)mod << std::endl; vk.Testament(1); vk.Book(1); vk.Chapter(1); vk.Verse(1); std::cout << "Gen 1:1 text ?= " << (const char*)mod << std::endl; /* old introtest SWModule *mhc = mymgr.Modules["MHC"]; if (mhc) { VerseKey vk; vk.Headings(1); vk.AutoNormalize(0); vk.Persist(1); vk = "jas 0:0"; std::cout << vk << ":\n"; mhc->setKey(vk); std::cout << (const char *) mhc->Key() << ":\n"; std::cout << (const char *) *mhc << "\n"; } */ return 0; }