<!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>rawfiles.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>rawfiles.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/******************************************************************************</font> 00002 <font class="comment"> * rawfiles.cpp - code for class 'RawFiles'- a module that produces HTML HREFs</font> 00003 <font class="comment"> * pointing to actual text desired. Uses standard</font> 00004 <font class="comment"> * files: ot and nt using indexs ??.bks ??.cps ??.vss</font> 00005 <font class="comment"> */</font> 00006 00007 00008 <font class="preprocessor">#include <ctype.h></font> 00009 <font class="preprocessor">#include <stdio.h></font> 00010 <font class="preprocessor">#include <fcntl.h></font> 00011 00012 <font class="preprocessor">#ifndef __GNUC__</font> 00013 <font class="preprocessor"></font><font class="preprocessor">#include <io.h></font> 00014 <font class="preprocessor">#else</font> 00015 <font class="preprocessor"></font><font class="preprocessor">#include <unistd.h></font> 00016 <font class="preprocessor">#endif</font> 00017 <font class="preprocessor"></font> 00018 <font class="preprocessor">#include <string.h></font> 00019 <font class="preprocessor">#include <utilfuns.h></font> 00020 <font class="preprocessor">#include <rawverse.h></font> 00021 <font class="preprocessor">#include <rawfiles.h></font> 00022 <font class="preprocessor">#include <filemgr.h></font> 00023 00024 <font class="preprocessor">#ifndef O_BINARY // O_BINARY is needed in Borland C++ 4.53</font> 00025 <font class="preprocessor"></font><font class="preprocessor">#define O_BINARY 0 // If it hasn't been defined than we probably</font> 00026 <font class="preprocessor"></font><font class="preprocessor">#endif // don't need it.</font> 00027 <font class="preprocessor"></font> 00028 00029 <font class="comment">/******************************************************************************</font> 00030 <font class="comment"> * RawFiles Constructor - Initializes data for instance of RawFiles</font> 00031 <font class="comment"> *</font> 00032 <font class="comment"> * ENT: iname - Internal name for module</font> 00033 <font class="comment"> * idesc - Name to display to user for module</font> 00034 <font class="comment"> * idisp - Display object to use for displaying</font> 00035 <font class="comment"> */</font> 00036 00037 RawFiles::RawFiles(<font class="keyword">const</font> <font class="keywordtype">char</font> *ipath, <font class="keyword">const</font> <font class="keywordtype">char</font> *iname, <font class="keyword">const</font> <font class="keywordtype">char</font> *idesc, <a class="code" href="class_s_w_display.html">SWDisplay</a> *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, <font class="keyword">const</font> <font class="keywordtype">char</font>* ilang) : RawVerse(ipath, O_RDWR), <a class="code" href="class_s_w_com.html">SWCom</a>(iname, idesc, idisp, enc, dir, mark, ilang) 00038 { 00039 } 00040 00041 00042 <font class="comment">/******************************************************************************</font> 00043 <font class="comment"> * RawFiles Destructor - Cleans up instance of RawFiles</font> 00044 <font class="comment"> */</font> 00045 00046 RawFiles::~RawFiles() 00047 { 00048 } 00049 00050 00051 <font class="comment">/******************************************************************************</font> 00052 <font class="comment"> * RawFiles::operator char * - Returns the correct verse when char * cast</font> 00053 <font class="comment"> * is requested</font> 00054 <font class="comment"> *</font> 00055 <font class="comment"> * RET: string buffer with verse</font> 00056 <font class="comment"> */</font> 00057 00058 <font class="keywordtype">char</font> *RawFiles::getRawEntry() { 00059 FileDesc *datafile; 00060 <font class="keywordtype">long</font> start = 0; 00061 <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> size = 0; 00062 <font class="keywordtype">char</font> *tmpbuf; 00063 <a class="code" href="class_verse_key.html">VerseKey</a> *key = 0; 00064 00065 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00066 <font class="preprocessor"></font> <font class="keywordflow">try</font> { 00067 <font class="preprocessor">#endif</font> 00068 <font class="preprocessor"></font> key = SWDYNAMIC_CAST(<a class="code" href="class_verse_key.html">VerseKey</a>, this->key); 00069 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00070 <font class="preprocessor"></font> } 00071 <font class="keywordflow">catch</font> ( ... ) {} 00072 <font class="preprocessor">#endif</font> 00073 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!key) 00074 key = <font class="keyword">new</font> <a class="code" href="class_verse_key.html">VerseKey</a>(this->key); 00075 00076 findoffset(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), key-><a class="code" href="class_verse_key.html#a34">Index</a>(), &start, &size); 00077 00078 <font class="keywordflow">if</font> (entrybuf) 00079 <font class="keyword">delete</font> [] entrybuf; 00080 00081 <font class="keywordflow">if</font> (size) { 00082 tmpbuf = <font class="keyword">new</font> <font class="keywordtype">char</font> [ (size + 2) + strlen(path) + 5 ]; 00083 sprintf(tmpbuf,<font class="stringliteral">"%s/"</font>,path); 00084 gettext(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), start, (size + 2), tmpbuf+strlen(tmpbuf)); 00085 datafile = FileMgr::systemFileMgr.open(tmpbuf, O_RDONLY|O_BINARY); 00086 <font class="keyword">delete</font> [] tmpbuf; 00087 <font class="keywordflow">if</font> (datafile->getFd() > 0) { 00088 size = lseek(datafile->getFd(), 0, SEEK_END); 00089 entrybuf = <font class="keyword">new</font> <font class="keywordtype">char</font> [ size * FILTERPAD ]; 00090 memset(entrybuf, 0, size * FILTERPAD); 00091 lseek(datafile->getFd(), 0, SEEK_SET); 00092 read(datafile->getFd(), entrybuf, size); 00093 <font class="comment">// preptext(entrybuf);</font> 00094 } 00095 <font class="keywordflow">else</font> { 00096 entrybuf = <font class="keyword">new</font> <font class="keywordtype">char</font> [2]; 00097 entrybuf[0] = 0; 00098 entrybuf[1] = 0; 00099 } 00100 FileMgr::systemFileMgr.close(datafile); 00101 } 00102 <font class="keywordflow">else</font> { 00103 entrybuf = <font class="keyword">new</font> <font class="keywordtype">char</font> [2]; 00104 entrybuf[0] = 0; 00105 entrybuf[1] = 0; 00106 } 00107 00108 <font class="keywordflow">if</font> (key != this->key) 00109 <font class="keyword">delete</font> key; 00110 00111 <font class="keywordflow">return</font> entrybuf; 00112 } 00113 00114 00115 <font class="comment">/******************************************************************************</font> 00116 <font class="comment"> * RawFiles::operator << (char *)- Update the modules current key entry with</font> 00117 <font class="comment"> * provided text</font> 00118 <font class="comment"> *</font> 00119 <font class="comment"> * RET: *this</font> 00120 <font class="comment"> */</font> 00121 00122 <a class="code" href="class_s_w_module.html">SWModule</a> &RawFiles::operator <<(<font class="keyword">const</font> <font class="keywordtype">char</font> *inbuf) { 00123 FileDesc *datafile; 00124 <font class="keywordtype">long</font> start; 00125 <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> size; 00126 <font class="keywordtype">char</font> *tmpbuf; 00127 <a class="code" href="class_verse_key.html">VerseKey</a> *key = 0; 00128 00129 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00130 <font class="preprocessor"></font> <font class="keywordflow">try</font> { 00131 <font class="preprocessor">#endif</font> 00132 <font class="preprocessor"></font> key = SWDYNAMIC_CAST(<a class="code" href="class_verse_key.html">VerseKey</a>, this->key); 00133 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00134 <font class="preprocessor"></font> } 00135 <font class="keywordflow">catch</font> ( ... ) {} 00136 <font class="preprocessor">#endif</font> 00137 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!key) 00138 key = <font class="keyword">new</font> <a class="code" href="class_verse_key.html">VerseKey</a>(this->key); 00139 00140 findoffset(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), key-><a class="code" href="class_verse_key.html#a34">Index</a>(), &start, &size); 00141 00142 <font class="keywordflow">if</font> (size) { 00143 tmpbuf = <font class="keyword">new</font> <font class="keywordtype">char</font> [ (size + 2) + strlen(path) + 1 ]; 00144 sprintf(tmpbuf, <font class="stringliteral">"%s/"</font>, path); 00145 gettext(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), start, (size + 2), tmpbuf+strlen(tmpbuf)); 00146 } 00147 <font class="keywordflow">else</font> { 00148 tmpbuf = <font class="keyword">new</font> <font class="keywordtype">char</font> [ 16 + strlen(path) + 1 ]; 00149 sprintf(tmpbuf, <font class="stringliteral">"%s/%s"</font>, path, getnextfilename()); 00150 settext(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), key-><a class="code" href="class_verse_key.html#a34">Index</a>(), tmpbuf+strlen(path)+1); 00151 } 00152 datafile = FileMgr::systemFileMgr.open(tmpbuf, O_CREAT|O_WRONLY|O_BINARY|O_TRUNC); 00153 <font class="keyword">delete</font> [] tmpbuf; 00154 <font class="keywordflow">if</font> (datafile->getFd() > 0) { 00155 write(datafile->getFd(), inbuf, strlen(inbuf)); 00156 } 00157 FileMgr::systemFileMgr.close(datafile); 00158 00159 <font class="keywordflow">if</font> (key != this->key) 00160 <font class="keyword">delete</font> key; 00161 00162 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 00163 } 00164 00165 00166 <font class="comment">/******************************************************************************</font> 00167 <font class="comment"> * RawFiles::operator << (SWKey *)- Link the modules current key entry with</font> 00168 <font class="comment"> * another module entry</font> 00169 <font class="comment"> *</font> 00170 <font class="comment"> * RET: *this</font> 00171 <font class="comment"> */</font> 00172 00173 <a class="code" href="class_s_w_module.html">SWModule</a> &RawFiles::operator <<(<font class="keyword">const</font> <a class="code" href="class_s_w_key.html">SWKey</a> *inkey) { 00174 00175 <font class="keywordtype">long</font> start; 00176 <font class="keywordtype">unsigned</font> <font class="keywordtype">short</font> size; 00177 <font class="keywordtype">char</font> *tmpbuf; 00178 <font class="keyword">const</font> <a class="code" href="class_verse_key.html">VerseKey</a> *key = 0; 00179 00180 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00181 <font class="preprocessor"></font> <font class="keywordflow">try</font> { 00182 <font class="preprocessor">#endif</font> 00183 <font class="preprocessor"></font> key = SWDYNAMIC_CAST(<a class="code" href="class_verse_key.html">VerseKey</a>, inkey); 00184 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00185 <font class="preprocessor"></font> } 00186 <font class="keywordflow">catch</font> ( ... ) {} 00187 <font class="preprocessor">#endif</font> 00188 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!key) 00189 key = <font class="keyword">new</font> <a class="code" href="class_verse_key.html">VerseKey</a>(this->key); 00190 00191 findoffset(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), key-><a class="code" href="class_verse_key.html#a34">Index</a>(), &start, &size); 00192 00193 <font class="keywordflow">if</font> (size) { 00194 tmpbuf = <font class="keyword">new</font> <font class="keywordtype">char</font> [ size + 2]; 00195 gettext(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), start, size + 2, tmpbuf); 00196 00197 <font class="keywordflow">if</font> (key != inkey) 00198 <font class="keyword">delete</font> key; 00199 key = 0; 00200 00201 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00202 <font class="preprocessor"></font> <font class="keywordflow">try</font> { 00203 <font class="preprocessor">#endif</font> 00204 <font class="preprocessor"></font> key = SWDYNAMIC_CAST(<a class="code" href="class_verse_key.html">VerseKey</a>, inkey); 00205 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00206 <font class="preprocessor"></font> } 00207 <font class="keywordflow">catch</font> ( ... ) {} 00208 <font class="preprocessor">#endif</font> 00209 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!key) 00210 key = <font class="keyword">new</font> <a class="code" href="class_verse_key.html">VerseKey</a>(this->key); 00211 settext(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), key-><a class="code" href="class_verse_key.html#a34">Index</a>(), tmpbuf); 00212 } 00213 00214 <font class="keywordflow">if</font> (key != inkey) 00215 <font class="keyword">delete</font> key; 00216 00217 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 00218 } 00219 00220 00221 <font class="comment">/******************************************************************************</font> 00222 <font class="comment"> * RawFiles::deleteEntry - deletes this entry</font> 00223 <font class="comment"> *</font> 00224 <font class="comment"> * RET: *this</font> 00225 <font class="comment"> */</font> 00226 00227 <font class="keywordtype">void</font> RawFiles::deleteEntry() { 00228 00229 <a class="code" href="class_verse_key.html">VerseKey</a> *key = 0; 00230 00231 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00232 <font class="preprocessor"></font> <font class="keywordflow">try</font> { 00233 <font class="preprocessor">#endif</font> 00234 <font class="preprocessor"></font> key = SWDYNAMIC_CAST(<a class="code" href="class_verse_key.html">VerseKey</a>, this->key); 00235 <font class="preprocessor">#ifndef _WIN32_WCE</font> 00236 <font class="preprocessor"></font> } 00237 <font class="keywordflow">catch</font> ( ... ) {} 00238 <font class="preprocessor">#endif</font> 00239 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!key) 00240 key = <font class="keyword">new</font> <a class="code" href="class_verse_key.html">VerseKey</a>(this->key); 00241 00242 settext(key-><a class="code" href="class_verse_key.html#a22">Testament</a>(), key-><a class="code" href="class_verse_key.html#a34">Index</a>(), <font class="stringliteral">""</font>); 00243 00244 <font class="keywordflow">if</font> (key != this->key) 00245 <font class="keyword">delete</font> key; 00246 } 00247 00248 00249 <font class="comment">/******************************************************************************</font> 00250 <font class="comment"> * RawFiles::getnextfilename - generates a valid filename in which to store</font> 00251 <font class="comment"> * an entry</font> 00252 <font class="comment"> *</font> 00253 <font class="comment"> * RET: filename</font> 00254 <font class="comment"> */</font> 00255 00256 <font class="keywordtype">char</font> *RawFiles::getnextfilename() { 00257 <font class="keyword">static</font> <font class="keywordtype">char</font> incfile[255]; 00258 <font class="keywordtype">long</font> number; 00259 FileDesc *datafile; 00260 00261 sprintf(incfile, <font class="stringliteral">"%s/incfile"</font>, path); 00262 datafile = FileMgr::systemFileMgr.open(incfile, O_RDONLY|O_BINARY); 00263 <font class="keywordflow">if</font> (read(datafile->getFd(), &number, 4) != 4) 00264 number = 0; 00265 number++; 00266 FileMgr::systemFileMgr.close(datafile); 00267 00268 datafile = FileMgr::systemFileMgr.open(incfile, O_CREAT|O_WRONLY|O_BINARY|O_TRUNC); 00269 write(datafile->getFd(), &number, 4); 00270 FileMgr::systemFileMgr.close(datafile); 00271 sprintf(incfile, <font class="stringliteral">"%.7ld"</font>, number-1); 00272 <font class="keywordflow">return</font> incfile; 00273 } 00274 00275 00276 <font class="keywordtype">char</font> RawFiles::createModule (<font class="keyword">const</font> <font class="keywordtype">char</font> *path) { 00277 <font class="keywordtype">char</font> *incfile = <font class="keyword">new</font> <font class="keywordtype">char</font> [ strlen (path) + 16 ]; 00278 <font class="keyword">static</font> <font class="keywordtype">long</font> zero = 0; 00279 FileDesc *datafile; 00280 00281 sprintf(incfile, <font class="stringliteral">"%s/incfile"</font>, path); 00282 datafile = FileMgr::systemFileMgr.open(incfile, O_CREAT|O_WRONLY|O_BINARY|O_TRUNC); 00283 <font class="keyword">delete</font> [] incfile; 00284 write(datafile->getFd(), &zero, 4); 00285 FileMgr::systemFileMgr.close(datafile); 00286 00287 <font class="keywordflow">return</font> RawVerse::createModule (path); 00288 } 00289 00290 00291 </pre></div><hr><address align="right"><small>Generated on Thu Jun 20 22:13:00 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>