<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>zverse.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.15 -->
<center>
<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center>
<hr><h1>zverse.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/******************************************************************************</font>
00002 <font class="comment"> * zverse.h - code for class 'zVerse'- a module that reads raw text</font>
00003 <font class="comment"> * files: ot and nt using indexs ??.bks ??.cps ??.vss</font>
00004 <font class="comment"> * and provides lookup and parsing functions based on</font>
00005 <font class="comment"> * class VerseKey for compressed modules</font>
00006 <font class="comment"> */</font>
00007
00008
00009 <font class="preprocessor">#include <ctype.h></font>
00010 <font class="preprocessor">#include <stdio.h></font>
00011 <font class="preprocessor">#include <fcntl.h></font>
00012 <font class="preprocessor">#include <errno.h></font>
00013 <font class="preprocessor">#include <stdlib.h></font>
00014
00015 <font class="preprocessor">#ifndef __GNUC__</font>
00016 <font class="preprocessor"></font><font class="preprocessor">#include <io.h></font>
00017 <font class="preprocessor">#else</font>
00018 <font class="preprocessor"></font><font class="preprocessor">#include <unistd.h></font>
00019 <font class="preprocessor">#endif</font>
00020 <font class="preprocessor"></font>
00021 <font class="preprocessor">#include <string.h></font>
00022 <font class="preprocessor">#include <utilfuns.h></font>
00023 <font class="preprocessor">#include <versekey.h></font>
00024 <font class="preprocessor">#include <zverse.h></font>
00025 <font class="preprocessor">#include <sysdata.h></font>
00026
00027
00028 <font class="preprocessor">#ifndef O_BINARY</font>
00029 <font class="preprocessor"></font><font class="preprocessor">#define O_BINARY 0</font>
00030 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00031 <font class="preprocessor"></font>
00032
00033 <font class="comment">/******************************************************************************</font>
00034 <font class="comment"> * zVerse Statics</font>
00035 <font class="comment"> */</font>
00036
00037 <font class="keywordtype">int</font> zVerse::instance = 0;
00038
00039 <font class="keyword">const</font> <font class="keywordtype">char</font> zVerse::uniqueIndexID[] = {<font class="charliteral">'X'</font>, <font class="charliteral">'r'</font>, <font class="charliteral">'v'</font>, <font class="charliteral">'c'</font>, <font class="charliteral">'b'</font>};
00040
00041 <font class="comment">/******************************************************************************</font>
00042 <font class="comment"> * zVerse Constructor - Initializes data for instance of zVerse</font>
00043 <font class="comment"> *</font>
00044 <font class="comment"> * ENT: ipath - path of the directory where data and index files are located.</font>
00045 <font class="comment"> * be sure to include the trailing separator (e.g. '/' or '\')</font>
00046 <font class="comment"> * (e.g. 'modules/texts/rawtext/webster/')</font>
00047 <font class="comment"> * fileMode - open mode for the files (O_RDONLY, etc.)</font>
00048 <font class="comment"> * blockType - verse, chapter, book, etc.</font>
00049 <font class="comment"> */</font>
00050
00051 zVerse::zVerse(<font class="keyword">const</font> <font class="keywordtype">char</font> *ipath, <font class="keywordtype">int</font> fileMode, <font class="keywordtype">int</font> blockType, SWCompress *icomp)
00052 {
00053 <font class="keywordtype">char</font> buf[127];
00054
00055 nl = <font class="charliteral">'\n'</font>;
00056 path = 0;
00057 cacheBufIdx = -1;
00058 cacheTestament = 0;
00059 cacheBuf = 0;
00060 dirtyCache = <font class="keyword">false</font>;
00061 stdstr(&path, ipath);
00062
00063 <font class="keywordflow">if</font> ((path[strlen(path)-1] == <font class="charliteral">'/'</font>) || (path[strlen(path)-1] == <font class="charliteral">'\\'</font>))
00064 path[strlen(path)-1] = 0;
00065
00066 compressor = (icomp) ? icomp : <font class="keyword">new</font> SWCompress();
00067
00068 <font class="keywordflow">if</font> (fileMode == -1) { <font class="comment">// try read/write if possible</font>
00069 fileMode = O_RDWR;
00070 }
00071
00072 sprintf(buf, <font class="stringliteral">"%s/ot.%czs"</font>, path, uniqueIndexID[blockType]);
00073 idxfp[0] = FileMgr::systemFileMgr.open(buf, fileMode|O_BINARY, <font class="keyword">true</font>);
00074
00075 sprintf(buf, <font class="stringliteral">"%s/nt.%czs"</font>, path, uniqueIndexID[blockType]);
00076 idxfp[1] = FileMgr::systemFileMgr.open(buf, fileMode|O_BINARY, <font class="keyword">true</font>);
00077
00078 sprintf(buf, <font class="stringliteral">"%s/ot.%czz"</font>, path, uniqueIndexID[blockType]);
00079 textfp[0] = FileMgr::systemFileMgr.open(buf, fileMode|O_BINARY, <font class="keyword">true</font>);
00080
00081 sprintf(buf, <font class="stringliteral">"%s/nt.%czz"</font>, path, uniqueIndexID[blockType]);
00082 textfp[1] = FileMgr::systemFileMgr.open(buf, fileMode|O_BINARY, <font class="keyword">true</font>);
00083
00084 sprintf(buf, <font class="stringliteral">"%s/ot.%czv"</font>, path, uniqueIndexID[blockType]);
00085 compfp[0] = FileMgr::systemFileMgr.open(buf, fileMode|O_BINARY, <font class="keyword">true</font>);
00086
00087 sprintf(buf, <font class="stringliteral">"%s/nt.%czv"</font>, path, uniqueIndexID[blockType]);
00088 compfp[1] = FileMgr::systemFileMgr.open(buf, fileMode|O_BINARY, <font class="keyword">true</font>);
00089
00090 <a class="code" href="class_verse_key.html#r3">instance</a>++;
00091 }
00092
00093
00094 <font class="comment">/******************************************************************************</font>
00095 <font class="comment"> * zVerse Destructor - Cleans up instance of zVerse</font>
00096 <font class="comment"> */</font>
00097
00098 zVerse::~zVerse()
00099 {
00100 <font class="keywordtype">int</font> loop1;
00101
00102 <font class="keywordflow">if</font> (cacheBuf) {
00103 flushCache();
00104 free(cacheBuf);
00105 }
00106
00107 <font class="keywordflow">if</font> (path)
00108 <font class="keyword">delete</font> [] path;
00109
00110 <font class="keywordflow">if</font> (compressor)
00111 <font class="keyword">delete</font> compressor;
00112
00113 --<a class="code" href="class_verse_key.html#r3">instance</a>;
00114
00115 <font class="keywordflow">for</font> (loop1 = 0; loop1 < 2; loop1++) {
00116 FileMgr::systemFileMgr.close(idxfp[loop1]);
00117 FileMgr::systemFileMgr.close(textfp[loop1]);
00118 FileMgr::systemFileMgr.close(compfp[loop1]);
00119 }
00120 }
00121
00122
00123 <font class="comment">/******************************************************************************</font>
00124 <font class="comment"> * zVerse::findoffset - Finds the offset of the key verse from the indexes</font>
00125 <font class="comment"> *</font>
00126 <font class="comment"> *</font>
00127 <font class="comment"> *</font>
00128 <font class="comment"> * ENT: testmt - testament to find (0 - Bible/module introduction)</font>
00129 <font class="comment"> * book - book to find (0 - testament introduction)</font>
00130 <font class="comment"> * chapter - chapter to find (0 - book introduction)</font>
00131 <font class="comment"> * verse - verse to find (0 - chapter introduction)</font>
00132 <font class="comment"> * start - address to store the starting offset</font>
00133 <font class="comment"> * size - address to store the size of the entry</font>
00134 <font class="comment"> */</font>
00135
00136 <font class="keywordtype">void</font> zVerse::findoffset(<font class="keywordtype">char</font> testmt, <font class="keywordtype">long</font> idxoff, <font class="keywordtype">long</font> *start, <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> *size)
00137 {
00138 <font class="comment">// set start to offset in</font>
00139 <font class="comment">// set size to</font>
00140 <font class="comment">// set</font>
00141 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> ulBuffNum=0; <font class="comment">// buffer number</font>
00142 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> ulVerseStart=0; <font class="comment">// verse offset within buffer</font>
00143 <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> usVerseSize=0; <font class="comment">// verse size</font>
00144 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> ulCompOffset=0; <font class="comment">// compressed buffer start</font>
00145 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> ulCompSize=0; <font class="comment">// buffer size compressed</font>
00146 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> ulUnCompSize=0; <font class="comment">// buffer size uncompressed</font>
00147 <font class="keywordtype">char</font> *pcCompText=NULL; <font class="comment">// compressed text</font>
00148
00149 *start = *size = 0;
00150 <font class="comment">//printf ("Finding offset %ld\n", idxoff);</font>
00151 idxoff *= 10;
00152 <font class="keywordflow">if</font> (!testmt) {
00153 testmt = ((idxfp[0]) ? 1:2);
00154 }
00155
00156 <font class="comment">// assert we have and valid file descriptor</font>
00157 <font class="keywordflow">if</font> (compfp[testmt-1]->getFd() < 1)
00158 <font class="keywordflow">return</font>;
00159
00160 <font class="keywordtype">long</font> newOffset = lseek(compfp[testmt-1]->getFd(), idxoff, SEEK_SET);
00161 <font class="keywordflow">if</font> (newOffset == idxoff) {
00162 <font class="keywordflow">if</font> (read(compfp[testmt-1]->getFd(), &ulBuffNum, 4) != 4) {
00163 printf (<font class="stringliteral">"Error reading ulBuffNum\n"</font>);
00164 <font class="keywordflow">return</font>;
00165 }
00166 }
00167 <font class="keywordflow">else</font> <font class="keywordflow">return</font>;
00168
00169 ulBuffNum = swordtoarch32(ulBuffNum);
00170
00171 <font class="keywordflow">if</font> (read(compfp[testmt-1]->getFd(), &ulVerseStart, 4) < 2)
00172 {
00173 printf (<font class="stringliteral">"Error reading ulVerseStart\n"</font>);
00174 <font class="keywordflow">return</font>;
00175 }
00176 <font class="keywordflow">if</font> (read(compfp[testmt-1]->getFd(), &usVerseSize, 2) < 2)
00177 {
00178 printf (<font class="stringliteral">"Error reading usVerseSize\n"</font>);
00179 <font class="keywordflow">return</font>;
00180 }
00181
00182 *start = swordtoarch32(ulVerseStart);
00183 *size = swordtoarch16(usVerseSize);
00184
00185 <font class="keywordflow">if</font> (*size) {
00186 <font class="keywordflow">if</font> (((long) ulBuffNum == cacheBufIdx) && (testmt == cacheTestament) && (cacheBuf)) {
00187 <font class="comment">// have the text buffered</font>
00188 <font class="keywordflow">return</font>;
00189 }
00190
00191 <font class="comment">//printf ("Got buffer number{%ld} versestart{%ld} versesize{%d}\n", ulBuffNum, ulVerseStart, usVerseSize);</font>
00192
00193
00194 <font class="keywordflow">if</font> (lseek(idxfp[testmt-1]->getFd(), ulBuffNum*12, SEEK_SET)!=(long) ulBuffNum*12)
00195 {
00196 printf (<font class="stringliteral">"Error seeking compressed file index\n"</font>);
00197 <font class="keywordflow">return</font>;
00198 }
00199 <font class="keywordflow">if</font> (read(idxfp[testmt-1]->getFd(), &ulCompOffset, 4)<4)
00200 {
00201 printf (<font class="stringliteral">"Error reading ulCompOffset\n"</font>);
00202 <font class="keywordflow">return</font>;
00203 }
00204 <font class="keywordflow">if</font> (read(idxfp[testmt-1]->getFd(), &ulCompSize, 4)<4)
00205 {
00206 printf (<font class="stringliteral">"Error reading ulCompSize\n"</font>);
00207 <font class="keywordflow">return</font>;
00208 }
00209 <font class="keywordflow">if</font> (read(idxfp[testmt-1]->getFd(), &ulUnCompSize, 4)<4)
00210 {
00211 printf (<font class="stringliteral">"Error reading ulUnCompSize\n"</font>);
00212 <font class="keywordflow">return</font>;
00213 }
00214
00215 ulCompOffset = swordtoarch32(ulCompOffset);
00216 ulCompSize = swordtoarch32(ulCompSize);
00217 ulUnCompSize = swordtoarch32(ulUnCompSize);
00218
00219 <font class="keywordflow">if</font> (lseek(textfp[testmt-1]->getFd(), ulCompOffset, SEEK_SET)!=(long)ulCompOffset)
00220 {
00221 printf (<font class="stringliteral">"Error: could not seek to right place in compressed text\n"</font>);
00222 <font class="keywordflow">return</font>;
00223 }
00224 pcCompText = <font class="keyword">new</font> <font class="keywordtype">char</font>[ulCompSize];
00225
00226 <font class="keywordflow">if</font> (read(textfp[testmt-1]->getFd(), pcCompText, ulCompSize)<(long)ulCompSize)
00227 {
00228 printf (<font class="stringliteral">"Error reading compressed text\n"</font>);
00229 <font class="keywordflow">return</font>;
00230 }
00231 compressor->zBuf(&ulCompSize, pcCompText);
00232
00233 <font class="keywordflow">if</font> (cacheBuf) {
00234 flushCache();
00235 free(cacheBuf);
00236 }
00237
00238 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> len = 0;
00239 compressor->Buf(0, &len);
00240 cacheBuf = (<font class="keywordtype">char</font> *)calloc(len + 1, 1);
00241 memcpy(cacheBuf, compressor->Buf(), len);
00242
00243 cacheTestament = testmt;
00244 cacheBufIdx = ulBuffNum;
00245 }
00246 }
00247
00248
00249 <font class="comment">/******************************************************************************</font>
00250 <font class="comment"> * zVerse::swgettext - gets text at a given offset</font>
00251 <font class="comment"> *</font>
00252 <font class="comment"> * ENT: testmt - testament file to search in (0 - Old; 1 - New)</font>
00253 <font class="comment"> * start - starting offset where the text is located in the file</font>
00254 <font class="comment"> * size - size of text entry + 1 (null)</font>
00255 <font class="comment"> * buf - buffer to store text</font>
00256 <font class="comment"> *</font>
00257 <font class="comment"> */</font>
00258
00259 <font class="keywordtype">void</font> zVerse::swgettext(<font class="keywordtype">char</font> testmt, <font class="keywordtype">long</font> start, <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> size, <font class="keywordtype">char</font> *inbuf)
00260 {
00261 memset(inbuf, 0, size);
00262 <font class="keywordflow">if</font> (size > 2) {
00263 strncpy(inbuf, &(cacheBuf[start]), size-2);
00264 }
00265 }
00266
00267
00268 <font class="comment">/******************************************************************************</font>
00269 <font class="comment"> * zVerse::settext - Sets text for current offset</font>
00270 <font class="comment"> *</font>
00271 <font class="comment"> * ENT: testmt - testament to find (0 - Bible/module introduction)</font>
00272 <font class="comment"> * idxoff - offset into .vss</font>
00273 <font class="comment"> * buf - buffer to store</font>
00274 <font class="comment"> * len - length of buffer (0 - null terminated)</font>
00275 <font class="comment"> */</font>
00276
00277 <font class="keywordtype">void</font> zVerse::settext(<font class="keywordtype">char</font> testmt, <font class="keywordtype">long</font> idxoff, <font class="keyword">const</font> <font class="keywordtype">char</font> *buf, <font class="keywordtype">long</font> len)
00278 {
00279 <font class="keywordflow">if</font> (!testmt)
00280 testmt = ((idxfp[0]) ? 1:2);
00281 <font class="keywordflow">if</font> ((!dirtyCache) || (cacheBufIdx < 0)) {
00282 cacheBufIdx = lseek(idxfp[testmt-1]->getFd(), 0, SEEK_END) / 12;
00283 cacheTestament = testmt;
00284 <font class="keywordflow">if</font> (cacheBuf)
00285 free(cacheBuf);
00286 cacheBuf = (<font class="keywordtype">char</font> *)calloc(len ? len : strlen(buf)+1, 1);
00287 }
00288 <font class="keywordflow">else</font> cacheBuf = (<font class="keywordtype">char</font> *)((cacheBuf)?realloc(cacheBuf, strlen(cacheBuf)+(len ? len : strlen(buf)+1)):calloc((len ? len : strlen(buf)+1), 1));
00289
00290 dirtyCache = <font class="keyword">true</font>;
00291
00292 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> start, outstart;
00293 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> outBufIdx = cacheBufIdx;
00294 <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> size;
00295 <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> outsize;
00296
00297 idxoff *= 10;
00298 size = outsize = len ? len : strlen(buf);
00299
00300 start = strlen(cacheBuf);
00301
00302 <font class="keywordflow">if</font> (!size)
00303 start = outBufIdx = 0;
00304
00305 outBufIdx = archtosword32(outBufIdx);
00306 outstart = archtosword32(start);
00307 outsize = archtosword16(size);
00308
00309 lseek(compfp[testmt-1]->getFd(), idxoff, SEEK_SET);
00310 write(compfp[testmt-1]->getFd(), &outBufIdx, 4);
00311 write(compfp[testmt-1]->getFd(), &outstart, 4);
00312 write(compfp[testmt-1]->getFd(), &outsize, 2);
00313 strcat(cacheBuf, buf);
00314 }
00315
00316
00317 <font class="keywordtype">void</font> zVerse::flushCache() {
00318 <font class="keywordflow">if</font> (dirtyCache) {
00319 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> idxoff;
00320 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> start, outstart;
00321 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> size, outsize;
00322 <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font> zsize, outzsize;
00323
00324 idxoff = cacheBufIdx * 12;
00325 size = outsize = zsize = outzsize = strlen(cacheBuf);
00326 <font class="keywordflow">if</font> (size) {
00327 <font class="comment">// if (compressor) {</font>
00328 <font class="comment">// delete compressor;</font>
00329 <font class="comment">// compressor = new LZSSCompress();</font>
00330 <font class="comment">// }</font>
00331 compressor->Buf(cacheBuf);
00332 compressor->zBuf(&zsize);
00333 outzsize = zsize;
00334
00335 start = outstart = lseek(textfp[cacheTestament-1]->getFd(), 0, SEEK_END);
00336
00337 outstart = archtosword32(start);
00338 outsize = archtosword32(size);
00339 outzsize = archtosword32(zsize);
00340
00341 write(textfp[cacheTestament-1]->getFd(), compressor->zBuf(&zsize), zsize);
00342
00343 lseek(idxfp[cacheTestament-1]->getFd(), idxoff, SEEK_SET);
00344 write(idxfp[cacheTestament-1]->getFd(), &outstart, 4);
00345 write(idxfp[cacheTestament-1]->getFd(), &outzsize, 4);
00346 write(idxfp[cacheTestament-1]->getFd(), &outsize, 4);
00347 }
00348 dirtyCache = <font class="keyword">false</font>;
00349 }
00350 }
00351
00352 <font class="comment">/******************************************************************************</font>
00353 <font class="comment"> * RawVerse::linkentry - links one entry to another</font>
00354 <font class="comment"> *</font>
00355 <font class="comment"> * ENT: testmt - testament to find (0 - Bible/module introduction)</font>
00356 <font class="comment"> * destidxoff - dest offset into .vss</font>
00357 <font class="comment"> * srcidxoff - source offset into .vss</font>
00358 <font class="comment"> */</font>
00359
00360 <font class="keywordtype">void</font> zVerse::linkentry(<font class="keywordtype">char</font> testmt, <font class="keywordtype">long</font> destidxoff, <font class="keywordtype">long</font> srcidxoff) {
00361 <font class="keywordtype">long</font> bufidx;
00362 <font class="keywordtype">long</font> start;
00363 <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> size;
00364
00365 destidxoff *= 10;
00366 srcidxoff *= 10;
00367
00368 <font class="keywordflow">if</font> (!testmt)
00369 testmt = ((idxfp[1]) ? 1:2);
00370
00371 <font class="comment">// get source</font>
00372 lseek(compfp[testmt-1]->getFd(), srcidxoff, SEEK_SET);
00373 read(compfp[testmt-1]->getFd(), &bufidx, 4);
00374 read(compfp[testmt-1]->getFd(), &start, 4);
00375 read(compfp[testmt-1]->getFd(), &size, 2);
00376
00377 <font class="comment">// write dest</font>
00378 lseek(compfp[testmt-1]->getFd(), destidxoff, SEEK_SET);
00379 write(compfp[testmt-1]->getFd(), &bufidx, 4);
00380 write(compfp[testmt-1]->getFd(), &start, 4);
00381 write(compfp[testmt-1]->getFd(), &size, 2);
00382 }
00383
00384
00385 <font class="comment">/******************************************************************************</font>
00386 <font class="comment"> * RawVerse::CreateModule - Creates new module files</font>
00387 <font class="comment"> *</font>
00388 <font class="comment"> * ENT: path - directory to store module files</font>
00389 <font class="comment"> * RET: error status</font>
00390 <font class="comment"> */</font>
00391
00392 <font class="keywordtype">char</font> zVerse::createModule(<font class="keyword">const</font> <font class="keywordtype">char</font> *ipath, <font class="keywordtype">int</font> blockBound)
00393 {
00394 <font class="keywordtype">char</font> *path = 0;
00395 <font class="keywordtype">char</font> *buf = <font class="keyword">new</font> <font class="keywordtype">char</font> [ strlen (ipath) + 20 ];
00396 FileDesc *fd, *fd2;
00397
00398 stdstr(&path, ipath);
00399
00400 <font class="keywordflow">if</font> ((path[strlen(path)-1] == <font class="charliteral">'/'</font>) || (path[strlen(path)-1] == <font class="charliteral">'\\'</font>))
00401 path[strlen(path)-1] = 0;
00402
00403 sprintf(buf, <font class="stringliteral">"%s/ot.%czs"</font>, path, uniqueIndexID[blockBound]);
00404 unlink(buf);
00405 fd = FileMgr::systemFileMgr.open(buf, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
00406 fd->getFd();
00407 FileMgr::systemFileMgr.close(fd);
00408
00409 sprintf(buf, <font class="stringliteral">"%s/nt.%czs"</font>, path, uniqueIndexID[blockBound]);
00410 unlink(buf);
00411 fd = FileMgr::systemFileMgr.open(buf, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
00412 fd->getFd();
00413 FileMgr::systemFileMgr.close(fd);
00414
00415 sprintf(buf, <font class="stringliteral">"%s/ot.%czz"</font>, path, uniqueIndexID[blockBound]);
00416 unlink(buf);
00417 fd = FileMgr::systemFileMgr.open(buf, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
00418 fd->getFd();
00419 FileMgr::systemFileMgr.close(fd);
00420
00421 sprintf(buf, <font class="stringliteral">"%s/nt.%czz"</font>, path, uniqueIndexID[blockBound]);
00422 unlink(buf);
00423 fd2 = FileMgr::systemFileMgr.open(buf, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
00424 fd2->getFd();
00425 FileMgr::systemFileMgr.close(fd);
00426
00427 sprintf(buf, <font class="stringliteral">"%s/ot.%czv"</font>, path, uniqueIndexID[blockBound]);
00428 unlink(buf);
00429 fd = FileMgr::systemFileMgr.open(buf, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
00430 fd->getFd();
00431
00432 sprintf(buf, <font class="stringliteral">"%s/nt.%czv"</font>, path, uniqueIndexID[blockBound]);
00433 unlink(buf);
00434 fd2 = FileMgr::systemFileMgr.open(buf, O_CREAT|O_WRONLY|O_BINARY, S_IREAD|S_IWRITE);
00435 fd2->getFd();
00436
00437 <a class="code" href="class_verse_key.html">VerseKey</a> vk;
00438 vk.<a class="code" href="class_verse_key.html#a32">Headings</a>(1);
00439 <font class="keywordtype">long</font> offset = 0;
00440 <font class="keywordtype">short</font> size = 0;
00441 <font class="keywordflow">for</font> (vk = TOP; !vk.<a class="code" href="class_s_w_key.html#a6">Error</a>(); vk++) {
00442 write((vk.<a class="code" href="class_verse_key.html#a22">Testament</a>() == 1) ? fd->getFd() : fd2->getFd(), &offset, 4); <font class="comment">//compBufIdxOffset</font>
00443 write((vk.<a class="code" href="class_verse_key.html#a22">Testament</a>() == 1) ? fd->getFd() : fd2->getFd(), &offset, 4);
00444 write((vk.<a class="code" href="class_verse_key.html#a22">Testament</a>() == 1) ? fd->getFd() : fd2->getFd(), &size, 2);
00445 }
00446
00447 FileMgr::systemFileMgr.close(fd);
00448 FileMgr::systemFileMgr.close(fd2);
00449
00450 <font class="keyword">delete</font> [] path;
00451 <font class="comment">/*</font>
00452 <font class="comment"> RawVerse rv(path);</font>
00453 <font class="comment"> VerseKey mykey("Rev 22:21");</font>
00454 <font class="comment">*/</font>
00455
00456 <font class="keywordflow">return</font> 0;
00457 }
00458
00459
00460 <font class="comment">/******************************************************************************</font>
00461 <font class="comment"> * zVerse::preptext - Prepares the text before returning it to external</font>
00462 <font class="comment"> * objects</font>
00463 <font class="comment"> *</font>
00464 <font class="comment"> * ENT: buf - buffer where text is stored and where to store the prep'd</font>
00465 <font class="comment"> * text.</font>
00466 <font class="comment"> */</font>
00467
00468 <font class="keywordtype">void</font> zVerse::preptext(<font class="keywordtype">char</font> *buf)
00469 {
00470 <font class="keywordtype">char</font> *to, *from, space = 0, cr = 0, realdata = 0, nlcnt = 0;
00471
00472 <font class="keywordflow">for</font> (to = from = buf; *from; from++) {
00473 <font class="keywordflow">switch</font> (*from) {
00474 <font class="keywordflow">case</font> 10:
00475 <font class="keywordflow">if</font> (!realdata)
00476 <font class="keywordflow">continue</font>;
00477 space = (cr) ? 0 : 1;
00478 cr = 0;
00479 nlcnt++;
00480 <font class="keywordflow">if</font> (nlcnt > 1) {
00481 <font class="comment">// *to++ = nl;</font>
00482 *to++ = nl;
00483 <font class="comment">// nlcnt = 0;</font>
00484 }
00485 <font class="keywordflow">continue</font>;
00486 <font class="keywordflow">case</font> 13:
00487 <font class="keywordflow">if</font> (!realdata)
00488 <font class="keywordflow">continue</font>;
00489 *to++ = nl;
00490 space = 0;
00491 cr = 1;
00492 <font class="keywordflow">continue</font>;
00493 }
00494 realdata = 1;
00495 nlcnt = 0;
00496 <font class="keywordflow">if</font> (space) {
00497 space = 0;
00498 <font class="keywordflow">if</font> (*from != <font class="charliteral">' '</font>) {
00499 *to++ = <font class="charliteral">' '</font>;
00500 from--;
00501 <font class="keywordflow">continue</font>;
00502 }
00503 }
00504 *to++ = *from;
00505 }
00506 *to = 0;
00507
00508 <font class="keywordflow">if</font> (to > buf) {
00509 <font class="keywordflow">for</font> (to--; to > buf; to--) { <font class="comment">// remove trailing excess</font>
00510 <font class="keywordflow">if</font> ((*to == 10) || (*to == <font class="charliteral">' '</font>))
00511 *to = 0;
00512 <font class="keywordflow">else</font> <font class="keywordflow">break</font>;
00513 }
00514 }
00515 }
</pre></div><hr><address align="right"><small>Generated on Thu Jun 20 22:13:01 2002 for The Sword Project by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0
width=110 height=53></a>1.2.15 </small></address>
</body>
</html>