1
/******************************************************************************
2
* rawtext.cpp - code for class 'RawGenBook'- a module that reads raw text files:
3
* ot and nt using indexs ??.bks ??.cps ??.vss
17
#include <rawgenbook.h>
26
/******************************************************************************
27
* RawGenBook Constructor - Initializes data for instance of RawGenBook
29
* ENT: iname - Internal name for module
30
* idesc - Name to display to user for module
31
* idisp - Display object to use for displaying
34
RawGenBook::RawGenBook(const char *ipath, const char *iname, const char *idesc, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang)
35
: SWGenBook(iname, idesc, idisp, enc, dir, mark, ilang) {
36
int fileMode = O_RDWR;
37
char *buf = new char [ strlen (ipath) + 20 ];
43
if ((path[strlen(path)-1] == '/') || (path[strlen(path)-1] == '\\'))
44
path[strlen(path)-1] = 0;
50
sprintf(buf, "%s.bdt", path);
51
bdtfd = FileMgr::systemFileMgr.open(buf, fileMode|O_BINARY, true);
58
/******************************************************************************
59
* RawGenBook Destructor - Cleans up instance of RawGenBook
62
RawGenBook::~RawGenBook() {
64
FileMgr::systemFileMgr.close(bdtfd);
72
/******************************************************************************
73
* RawGenBook::getRawEntry - Returns the correct verse when char * cast
76
* RET: string buffer with verse
79
SWBuf &RawGenBook::getRawEntryBuf() {
86
key = SWDYNAMIC_CAST(TreeKeyIdx, (this->key));
91
key = (TreeKeyIdx *)CreateKey();
92
(*key) = *(this->key);
96
key->getUserData(&dsize);
99
memcpy(&offset, key->getUserData(), 4);
100
offset = swordtoarch32(offset);
102
memcpy(&size, key->getUserData() + 4, 4);
103
size = swordtoarch32(size);
105
entrySize = size; // support getEntrySize call
107
entryBuf.setFillByte(0);
108
entryBuf.setSize(size);
109
lseek(bdtfd->getFd(), offset, SEEK_SET);
110
read(bdtfd->getFd(), entryBuf.getRawData(), size);
112
rawFilter(entryBuf, 0); // hack, decipher
113
rawFilter(entryBuf, key);
116
RawStr::prepText(entryBuf);
119
if (key != this->key) // free our key if we created a VerseKey
126
void RawGenBook::setEntry(const char *inbuf, long len) {
128
__u32 offset = archtosword32(lseek(bdtfd->getFd(), 0, SEEK_END));
130
TreeKeyIdx *key = ((TreeKeyIdx *)this->key);
137
write(bdtfd->getFd(), inbuf, len);
139
size = archtosword32(len);
140
memcpy(userData, &offset, 4);
141
memcpy(userData+4, &size, 4);
142
key->setUserData(userData, 8);
147
void RawGenBook::linkEntry(const SWKey *inkey) {
148
TreeKeyIdx *srckey = 0;
149
TreeKeyIdx *key = ((TreeKeyIdx *)this->key);
150
// see if we have a VerseKey * or decendant
152
srckey = SWDYNAMIC_CAST(TreeKeyIdx, inkey);
155
// if we don't have a VerseKey * decendant, create our own
157
srckey = (TreeKeyIdx *)CreateKey();
161
key->setUserData(srckey->getUserData(), 8);
164
if (inkey != srckey) // free our key if we created a VerseKey
169
/******************************************************************************
170
* RawGenBook::deleteEntry - deletes this entry
175
void RawGenBook::deleteEntry() {
176
TreeKeyIdx *key = ((TreeKeyIdx *)this->key);
181
char RawGenBook::createModule(const char *ipath) {
183
char *buf = new char [ strlen (ipath) + 20 ];
187
stdstr(&path, ipath);
189
if ((path[strlen(path)-1] == '/') || (path[strlen(path)-1] == '\\'))
190
path[strlen(path)-1] = 0;
192
sprintf(buf, "%s.bdt", path);
194
fd = FileMgr::systemFileMgr.open(buf, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
196
FileMgr::systemFileMgr.close(fd);
198
retval = TreeKeyIdx::create(path);
204
SWKey *RawGenBook::CreateKey() {
205
TreeKeyIdx *newKey = new TreeKeyIdx(path);