aboutsummaryrefslogtreecommitdiffstats
path: root/doc/api-documentation/html/swmgr_8cpp-source.html
diff options
context:
space:
mode:
authordanglassey <danglassey>2002-08-14 09:57:17 +0000
committerdanglassey <danglassey>2002-08-14 09:57:17 +0000
commitc9458897ebbb739d8db83c80e06512d8a612f743 (patch)
treef8c5381045887e34388cc6b26cfccc254bf766dc /doc/api-documentation/html/swmgr_8cpp-source.html
downloadsword-sf-cvs-c9458897ebbb739d8db83c80e06512d8a612f743.tar.gz
*** empty log message ***
Diffstat (limited to 'doc/api-documentation/html/swmgr_8cpp-source.html')
-rw-r--r--doc/api-documentation/html/swmgr_8cpp-source.html1069
1 files changed, 1069 insertions, 0 deletions
diff --git a/doc/api-documentation/html/swmgr_8cpp-source.html b/doc/api-documentation/html/swmgr_8cpp-source.html
new file mode 100644
index 0000000..ba8d877
--- /dev/null
+++ b/doc/api-documentation/html/swmgr_8cpp-source.html
@@ -0,0 +1,1069 @@
+<!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>swmgr.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> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center>
+<hr><h1>swmgr.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/******************************************************************************</font>
+00002 <font class="comment"> * swmgr.cpp - implementaion of class SWMgr used to interact with an install</font>
+00003 <font class="comment"> * base of sword modules.</font>
+00004 <font class="comment"> *</font>
+00005 <font class="comment"> * $Id: swmgr_8cpp-source.html,v 1.3 2002/06/20 20:23:10 mgruner Exp $</font>
+00006 <font class="comment"> *</font>
+00007 <font class="comment"> * Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)</font>
+00008 <font class="comment"> * CrossWire Bible Society</font>
+00009 <font class="comment"> * P. O. Box 2528</font>
+00010 <font class="comment"> * Tempe, AZ 85280-2528</font>
+00011 <font class="comment"> *</font>
+00012 <font class="comment"> * This program is free software; you can redistribute it and/or modify it</font>
+00013 <font class="comment"> * under the terms of the GNU General Public License as published by the</font>
+00014 <font class="comment"> * Free Software Foundation version 2.</font>
+00015 <font class="comment"> *</font>
+00016 <font class="comment"> * This program is distributed in the hope that it will be useful, but</font>
+00017 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font>
+00018 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font>
+00019 <font class="comment"> * General Public License for more details.</font>
+00020 <font class="comment"> *</font>
+00021 <font class="comment"> */</font>
+00022
+00023 <font class="preprocessor">#include &lt;stdio.h&gt;</font>
+00024 <font class="preprocessor">#include &lt;stdlib.h&gt;</font>
+00025 <font class="preprocessor">#include &lt;fcntl.h&gt;</font>
+00026
+00027 <font class="preprocessor">#ifndef __GNUC__</font>
+00028 <font class="preprocessor"></font><font class="preprocessor">#include &lt;io.h&gt;</font>
+00029 <font class="preprocessor">#else</font>
+00030 <font class="preprocessor"></font><font class="preprocessor">#include &lt;unistd.h&gt;</font>
+00031 <font class="preprocessor">#include &lt;unixstr.h&gt;</font>
+00032 <font class="preprocessor">#endif</font>
+00033 <font class="preprocessor"></font><font class="preprocessor">#include &lt;sys/stat.h&gt;</font>
+00034 <font class="preprocessor">#ifndef _MSC_VER</font>
+00035 <font class="preprocessor"></font><font class="preprocessor">#include &lt;iostream.h&gt;</font>
+00036 <font class="preprocessor">#endif</font>
+00037 <font class="preprocessor"></font><font class="preprocessor">#include &lt;dirent.h&gt;</font>
+00038
+00039 <font class="preprocessor">#include &lt;swmgr.h&gt;</font>
+00040 <font class="preprocessor">#include &lt;rawtext.h&gt;</font>
+00041 <font class="preprocessor">#include &lt;rawgenbook.h&gt;</font>
+00042 <font class="preprocessor">#include &lt;rawcom.h&gt;</font>
+00043 <font class="preprocessor">#include &lt;hrefcom.h&gt;</font>
+00044 <font class="preprocessor">#include &lt;rawld.h&gt;</font>
+00045 <font class="preprocessor">#include &lt;rawld4.h&gt;</font>
+00046 <font class="preprocessor">#include &lt;utilfuns.h&gt;</font>
+00047 <font class="preprocessor">#include &lt;gbfplain.h&gt;</font>
+00048 <font class="preprocessor">#include &lt;thmlplain.h&gt;</font>
+00049 <font class="preprocessor">#include &lt;gbfstrongs.h&gt;</font>
+00050 <font class="preprocessor">#include &lt;gbffootnotes.h&gt;</font>
+00051 <font class="preprocessor">#include &lt;gbfheadings.h&gt;</font>
+00052 <font class="preprocessor">#include &lt;gbfmorph.h&gt;</font>
+00053 <font class="preprocessor">#include &lt;thmlstrongs.h&gt;</font>
+00054 <font class="preprocessor">#include &lt;thmlfootnotes.h&gt;</font>
+00055 <font class="preprocessor">#include &lt;thmlheadings.h&gt;</font>
+00056 <font class="preprocessor">#include &lt;thmlmorph.h&gt;</font>
+00057 <font class="preprocessor">#include &lt;thmllemma.h&gt;</font>
+00058 <font class="preprocessor">#include &lt;thmlscripref.h&gt;</font>
+00059 <font class="preprocessor">#include &lt;cipherfil.h&gt;</font>
+00060 <font class="preprocessor">#include &lt;rawfiles.h&gt;</font>
+00061 <font class="preprocessor">#include &lt;ztext.h&gt;</font>
+00062 <font class="preprocessor">#include &lt;zld.h&gt;</font>
+00063 <font class="preprocessor">#include &lt;zcom.h&gt;</font>
+00064 <font class="preprocessor">#include &lt;lzsscomprs.h&gt;</font>
+00065 <font class="preprocessor">#include &lt;utf8greekaccents.h&gt;</font>
+00066 <font class="preprocessor">#include &lt;utf8cantillation.h&gt;</font>
+00067 <font class="preprocessor">#include &lt;utf8hebrewpoints.h&gt;</font>
+00068 <font class="preprocessor">#include &lt;greeklexattribs.h&gt;</font>
+00069 <font class="preprocessor">#include &lt;swfiltermgr.h&gt;</font>
+00070
+00071
+00072
+00073 <font class="preprocessor">#ifdef ICU</font>
+00074 <font class="preprocessor"></font><font class="preprocessor">#include &lt;utf8transliterator.h&gt;</font>
+00075 <font class="preprocessor">#endif</font>
+00076 <font class="preprocessor"></font>
+00077 <font class="preprocessor">#ifndef EXCLUDEZLIB</font>
+00078 <font class="preprocessor"></font><font class="preprocessor">#include &lt;zipcomprs.h&gt;</font>
+00079 <font class="preprocessor">#endif</font>
+00080 <font class="preprocessor"></font>
+<a name="l00081"></a><a class="code" href="class_s_w_mgr.html#p0">00081</a> <font class="keywordtype">bool</font> <a class="code" href="class_s_w_mgr.html#p0">SWMgr::debug</a> = <font class="keyword">false</font>;
+00082
+00083 <font class="preprocessor">#ifdef GLOBCONFPATH</font>
+00084 <font class="preprocessor"></font><font class="keyword">const</font> <font class="keywordtype">char</font> *SWMgr::globalConfPath = GLOBCONFPATH;
+00085 <font class="preprocessor">#else</font>
+00086 <font class="preprocessor"></font><font class="keyword">const</font> <font class="keywordtype">char</font> *SWMgr::globalConfPath = <font class="stringliteral">"/etc/sword.conf:/usr/local/etc/sword.conf"</font>;
+00087 <font class="preprocessor">#endif</font>
+00088 <font class="preprocessor"></font>
+00089 <font class="keywordtype">void</font> SWMgr::init() {
+00090 SWFilter *tmpFilter = 0;
+00091 configPath = 0;
+00092 <a class="code" href="class_s_w_mgr.html#m3">prefixPath</a> = 0;
+00093 configType = 0;
+00094 myconfig = 0;
+00095 mysysconfig = 0;
+00096 homeConfig = 0;
+00097
+00098
+00099 cipherFilters.clear();
+00100 optionFilters.clear();
+00101 cleanupFilters.clear();
+00102
+00103 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_g_b_f_strongs.html">GBFStrongs</a>();
+00104 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"GBFStrongs"</font>, tmpFilter));
+00105 cleanupFilters.push_back(tmpFilter);
+00106
+00107 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_g_b_f_footnotes.html">GBFFootnotes</a>();
+00108 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"GBFFootnotes"</font>, tmpFilter));
+00109 cleanupFilters.push_back(tmpFilter);
+00110
+00111 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_g_b_f_morph.html">GBFMorph</a>();
+00112 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"GBFMorph"</font>, tmpFilter));
+00113 cleanupFilters.push_back(tmpFilter);
+00114
+00115 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_g_b_f_headings.html">GBFHeadings</a>();
+00116 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"GBFHeadings"</font>, tmpFilter));
+00117 cleanupFilters.push_back(tmpFilter);
+00118
+00119 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_th_m_l_strongs.html">ThMLStrongs</a>();
+00120 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"ThMLStrongs"</font>, tmpFilter));
+00121 cleanupFilters.push_back(tmpFilter);
+00122
+00123 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_th_m_l_footnotes.html">ThMLFootnotes</a>();
+00124 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"ThMLFootnotes"</font>, tmpFilter));
+00125 cleanupFilters.push_back(tmpFilter);
+00126
+00127 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_th_m_l_morph.html">ThMLMorph</a>();
+00128 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"ThMLMorph"</font>, tmpFilter));
+00129 cleanupFilters.push_back(tmpFilter);
+00130
+00131 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_th_m_l_headings.html">ThMLHeadings</a>();
+00132 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"ThMLHeadings"</font>, tmpFilter));
+00133 cleanupFilters.push_back(tmpFilter);
+00134
+00135 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_th_m_l_lemma.html">ThMLLemma</a>();
+00136 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"ThMLLemma"</font>, tmpFilter));
+00137 cleanupFilters.push_back(tmpFilter);
+00138
+00139 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_th_m_l_scripref.html">ThMLScripref</a>();
+00140 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"ThMLScripref"</font>, tmpFilter));
+00141 cleanupFilters.push_back(tmpFilter);
+00142
+00143 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_u_t_f8_greek_accents.html">UTF8GreekAccents</a>();
+00144 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"UTF8GreekAccents"</font>, tmpFilter));
+00145 cleanupFilters.push_back(tmpFilter);
+00146
+00147 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_u_t_f8_hebrew_points.html">UTF8HebrewPoints</a>();
+00148 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"UTF8HebrewPoints"</font>, tmpFilter));
+00149 cleanupFilters.push_back(tmpFilter);
+00150
+00151 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_u_t_f8_cantillation.html">UTF8Cantillation</a>();
+00152 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"UTF8Cantillation"</font>, tmpFilter));
+00153 cleanupFilters.push_back(tmpFilter);
+00154
+00155 tmpFilter = <font class="keyword">new</font> <a class="code" href="class_greek_lex_attribs.html">GreekLexAttribs</a>();
+00156 optionFilters.insert(FilterMap::value_type(<font class="stringliteral">"GreekLexAttribs"</font>, tmpFilter));
+00157 cleanupFilters.push_back(tmpFilter);
+00158
+00159 <font class="comment">/* UTF8Transliterator needs to be handled differently because it should always available as an option, for all modules</font>
+00160 <font class="comment">#ifdef ICU</font>
+00161 <font class="comment"> tmpFilter = new UTF8Transliterator();</font>
+00162 <font class="comment"> optionFilters.insert(FilterMap::value_type("UTF8Transliterator", tmpFilter));</font>
+00163 <font class="comment"> cleanupFilters.push_back(tmpFilter);</font>
+00164 <font class="comment">#endif</font>
+00165 <font class="comment">*/</font>
+00166 gbfplain = <font class="keyword">new</font> <a class="code" href="class_g_b_f_plain.html">GBFPlain</a>();
+00167 cleanupFilters.push_back(gbfplain);
+00168
+00169 thmlplain = <font class="keyword">new</font> <a class="code" href="class_th_m_l_plain.html">ThMLPlain</a>();
+00170 cleanupFilters.push_back(thmlplain);
+00171 }
+00172
+00173
+<a name="l00174"></a><a class="code" href="class_s_w_mgr.html#a1">00174</a> <a class="code" href="class_s_w_mgr.html#a0">SWMgr::SWMgr</a>(SWFilterMgr *filterMgr) {
+00175 commonInit(0, 0, <font class="keyword">true</font>, filterMgr);
+00176 }
+00177
+00178
+<a name="l00179"></a><a class="code" href="class_s_w_mgr.html#a0">00179</a> <a class="code" href="class_s_w_mgr.html#a0">SWMgr::SWMgr</a>(<a class="code" href="class_s_w_config.html">SWConfig</a> *iconfig, <a class="code" href="class_s_w_config.html">SWConfig</a> *isysconfig, <font class="keywordtype">bool</font> autoload, SWFilterMgr *filterMgr) {
+00180 commonInit(iconfig, isysconfig, autoload, filterMgr);
+00181 }
+00182
+00183
+00184 <font class="keywordtype">void</font> SWMgr::commonInit(<a class="code" href="class_s_w_config.html">SWConfig</a> * iconfig, <a class="code" href="class_s_w_config.html">SWConfig</a> * isysconfig, <font class="keywordtype">bool</font> autoload, SWFilterMgr *filterMgr) {
+00185 this-&gt;filterMgr = filterMgr;
+00186 <font class="keywordflow">if</font> (filterMgr)
+00187 filterMgr-&gt;setParentMgr(<font class="keyword">this</font>);
+00188
+00189 init();
+00190
+00191 <font class="keywordflow">if</font> (iconfig) {
+00192 <a class="code" href="class_s_w_mgr.html#m0">config</a> = iconfig;
+00193 myconfig = 0;
+00194 }
+00195 <font class="keywordflow">else</font> <a class="code" href="class_s_w_mgr.html#m0">config</a> = 0;
+00196 <font class="keywordflow">if</font> (isysconfig) {
+00197 sysconfig = isysconfig;
+00198 mysysconfig = 0;
+00199 }
+00200 <font class="keywordflow">else</font> sysconfig = 0;
+00201
+00202 <font class="keywordflow">if</font> (autoload)
+00203 <a class="code" href="class_s_w_mgr.html#a5">Load</a>();
+00204 }
+00205
+00206
+<a name="l00207"></a><a class="code" href="class_s_w_mgr.html#a2">00207</a> <a class="code" href="class_s_w_mgr.html#a0">SWMgr::SWMgr</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *iConfigPath, <font class="keywordtype">bool</font> autoload, SWFilterMgr *filterMgr) {
+00208
+00209 string path;
+00210
+00211 this-&gt;filterMgr = filterMgr;
+00212 <font class="keywordflow">if</font> (filterMgr)
+00213 filterMgr-&gt;setParentMgr(<font class="keyword">this</font>);
+00214
+00215 init();
+00216
+00217 path = iConfigPath;
+00218 <font class="keywordflow">if</font> ((iConfigPath[strlen(iConfigPath)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (iConfigPath[strlen(iConfigPath)-1] != <font class="charliteral">'/'</font>))
+00219 path += <font class="stringliteral">"/"</font>;
+00220 <font class="keywordflow">if</font> (FileMgr::existsFile(path.c_str(), <font class="stringliteral">"mods.conf"</font>)) {
+00221 stdstr(&amp;<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00222 path += <font class="stringliteral">"mods.conf"</font>;
+00223 stdstr(&amp;configPath, path.c_str());
+00224 }
+00225 <font class="keywordflow">else</font> {
+00226 <font class="keywordflow">if</font> (FileMgr::existsDir(path.c_str(), <font class="stringliteral">"mods.d"</font>)) {
+00227 stdstr(&amp;<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00228 path += <font class="stringliteral">"mods.d"</font>;
+00229 stdstr(&amp;configPath, path.c_str());
+00230 configType = 1;
+00231 }
+00232 }
+00233
+00234 <a class="code" href="class_s_w_mgr.html#m0">config</a> = 0;
+00235 sysconfig = 0;
+00236
+00237 <font class="keywordflow">if</font> (autoload &amp;&amp; configPath)
+00238 <a class="code" href="class_s_w_mgr.html#a5">Load</a>();
+00239 }
+00240
+00241
+<a name="l00242"></a><a class="code" href="class_s_w_mgr.html#a3">00242</a> <a class="code" href="class_s_w_mgr.html#a3">SWMgr::~SWMgr</a>() {
+00243
+00244 DeleteMods();
+00245
+00246 <font class="keywordflow">for</font> (FilterList::iterator it = cleanupFilters.begin(); it != cleanupFilters.end(); it++)
+00247 <font class="keyword">delete</font> (*it);
+00248
+00249 <font class="keywordflow">if</font> (homeConfig)
+00250 <font class="keyword">delete</font> homeConfig;
+00251
+00252 <font class="keywordflow">if</font> (myconfig)
+00253 <font class="keyword">delete</font> myconfig;
+00254
+00255 <font class="keywordflow">if</font> (prefixPath)
+00256 <font class="keyword">delete</font> [] <a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>;
+00257
+00258 <font class="keywordflow">if</font> (configPath)
+00259 <font class="keyword">delete</font> [] configPath;
+00260
+00261 <font class="keywordflow">if</font> (filterMgr)
+00262 <font class="keyword">delete</font> filterMgr;
+00263 }
+00264
+00265
+00266 <font class="keywordtype">void</font> SWMgr::findConfig(<font class="keywordtype">char</font> *configType, <font class="keywordtype">char</font> **prefixPath, <font class="keywordtype">char</font> **configPath) {
+00267 string path;
+00268 ConfigEntMap::iterator entry;
+00269
+00270 <font class="keywordtype">char</font> *envsworddir = getenv (<font class="stringliteral">"SWORD_PATH"</font>);
+00271 <font class="keywordtype">char</font> *envhomedir = getenv (<font class="stringliteral">"HOME"</font>);
+00272
+00273 *configType = 0;
+00274
+00275 <font class="preprocessor">#ifndef _MSC_VER</font>
+00276 <font class="preprocessor"></font> <font class="comment">// check working directory</font>
+00277 <font class="keywordflow">if</font> (debug)
+00278 cerr &lt;&lt; <font class="stringliteral">"Checking working directory for mods.conf..."</font>;
+00279 <font class="preprocessor">#endif</font>
+00280 <font class="preprocessor"></font>
+00281 <font class="keywordflow">if</font> (FileMgr::existsFile(<font class="stringliteral">"."</font>, <font class="stringliteral">"mods.conf"</font>)) {
+00282
+00283 <font class="preprocessor">#ifndef _MSC_VER</font>
+00284 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00285 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00286 <font class="preprocessor">#endif</font>
+00287 <font class="preprocessor"></font>
+00288 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, <font class="stringliteral">"./"</font>);
+00289 stdstr(configPath, <font class="stringliteral">"./mods.conf"</font>);
+00290 <font class="keywordflow">return</font>;
+00291 }
+00292
+00293 <font class="preprocessor">#ifndef _MSC_VER</font>
+00294 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00295 cerr &lt;&lt; <font class="stringliteral">"\nChecking working directory for mods.d..."</font>;
+00296 <font class="preprocessor">#endif</font>
+00297 <font class="preprocessor"></font>
+00298 <font class="keywordflow">if</font> (FileMgr::existsDir(<font class="stringliteral">"."</font>, <font class="stringliteral">"mods.d"</font>)) {
+00299
+00300 <font class="preprocessor">#ifndef _MSC_VER</font>
+00301 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00302 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00303 <font class="preprocessor">#endif</font>
+00304 <font class="preprocessor"></font>
+00305 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, <font class="stringliteral">"./"</font>);
+00306 stdstr(configPath, <font class="stringliteral">"./mods.d"</font>);
+00307 *configType = 1;
+00308 <font class="keywordflow">return</font>;
+00309 }
+00310
+00311
+00312 <font class="comment">// check environment variable SWORD_PATH</font>
+00313 <font class="preprocessor">#ifndef _MSC_VER</font>
+00314 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00315 cerr &lt;&lt; <font class="stringliteral">"\nChecking SWORD_PATH..."</font>;
+00316 <font class="preprocessor">#endif</font>
+00317 <font class="preprocessor"></font>
+00318 <font class="keywordflow">if</font> (envsworddir != NULL) {
+00319
+00320 <font class="preprocessor">#ifndef _MSC_VER</font>
+00321 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00322 cerr &lt;&lt; <font class="stringliteral">"found ("</font> &lt;&lt; envsworddir &lt;&lt; <font class="stringliteral">")\n"</font>;
+00323 <font class="preprocessor">#endif</font>
+00324 <font class="preprocessor"></font>
+00325 path = envsworddir;
+00326 <font class="keywordflow">if</font> ((envsworddir[strlen(envsworddir)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (envsworddir[strlen(envsworddir)-1] != <font class="charliteral">'/'</font>))
+00327 path += <font class="stringliteral">"/"</font>;
+00328
+00329 <font class="preprocessor">#ifndef _MSC_VER</font>
+00330 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00331 cerr &lt;&lt; <font class="stringliteral">"\nChecking $SWORD_PATH for mods.conf..."</font>;
+00332 <font class="preprocessor">#endif</font>
+00333 <font class="preprocessor"></font>
+00334 <font class="keywordflow">if</font> (FileMgr::existsFile(path.c_str(), <font class="stringliteral">"mods.conf"</font>)) {
+00335
+00336 <font class="preprocessor">#ifndef _MSC_VER</font>
+00337 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00338 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00339 <font class="preprocessor">#endif</font>
+00340 <font class="preprocessor"></font>
+00341 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00342 path += <font class="stringliteral">"mods.conf"</font>;
+00343 stdstr(configPath, path.c_str());
+00344 <font class="keywordflow">return</font>;
+00345 }
+00346
+00347 <font class="preprocessor">#ifndef _MSC_VER</font>
+00348 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00349 cerr &lt;&lt; <font class="stringliteral">"\nChecking $SWORD_PATH for mods.d..."</font>;
+00350 <font class="preprocessor">#endif</font>
+00351 <font class="preprocessor"></font>
+00352 <font class="keywordflow">if</font> (FileMgr::existsDir(path.c_str(), <font class="stringliteral">"mods.d"</font>)) {
+00353
+00354 <font class="preprocessor">#ifndef _MSC_VER</font>
+00355 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00356 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00357 <font class="preprocessor">#endif</font>
+00358 <font class="preprocessor"></font>
+00359 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00360 path += <font class="stringliteral">"mods.d"</font>;
+00361 stdstr(configPath, path.c_str());
+00362 *configType = 1;
+00363 <font class="keywordflow">return</font>;
+00364 }
+00365 }
+00366
+00367
+00368 <font class="comment">// check for systemwide globalConfPath</font>
+00369
+00370 <font class="preprocessor">#ifndef _MSC_VER</font>
+00371 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00372 cerr &lt;&lt; <font class="stringliteral">"\nParsing "</font> &lt;&lt; globalConfPath &lt;&lt; <font class="stringliteral">"..."</font>;
+00373 <font class="preprocessor">#endif</font>
+00374 <font class="preprocessor"></font>
+00375 <font class="keywordtype">char</font> *globPaths = 0;
+00376 <font class="keywordtype">char</font> *gfp;
+00377 stdstr(&amp;globPaths, globalConfPath);
+00378 <font class="keywordflow">for</font> (gfp = strtok(globPaths, <font class="stringliteral">":"</font>); gfp; gfp = strtok(0, <font class="stringliteral">":"</font>)) {
+00379
+00380 <font class="preprocessor"> #ifndef _MSC_VER</font>
+00381 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00382 cerr &lt;&lt; <font class="stringliteral">"\nChecking for "</font> &lt;&lt; gfp &lt;&lt; <font class="stringliteral">"..."</font>;
+00383 <font class="preprocessor">#endif</font>
+00384 <font class="preprocessor"></font>
+00385 <font class="keywordflow">if</font> (FileMgr::existsFile(gfp))
+00386 <font class="keywordflow">break</font>;
+00387 }
+00388
+00389 <font class="keywordflow">if</font> (gfp) {
+00390
+00391 <font class="preprocessor">#ifndef _MSC_VER</font>
+00392 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00393 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00394 <font class="preprocessor">#endif</font>
+00395 <font class="preprocessor"></font>
+00396 <a class="code" href="class_s_w_config.html">SWConfig</a> etcconf(gfp);
+00397 <font class="keywordflow">if</font> ((entry = etcconf.<a class="code" href="class_s_w_config.html#m1">Sections</a>[<font class="stringliteral">"Install"</font>].find(<font class="stringliteral">"DataPath"</font>)) != etcconf.<a class="code" href="class_s_w_config.html#m1">Sections</a>[<font class="stringliteral">"Install"</font>].end()) {
+00398 path = (*entry).second;
+00399 <font class="keywordflow">if</font> (((*entry).second.c_str()[strlen((*entry).second.c_str())-1] != <font class="charliteral">'\\'</font>) &amp;&amp; ((*entry).second.c_str()[strlen((*entry).second.c_str())-1] != <font class="charliteral">'/'</font>))
+00400 path += <font class="stringliteral">"/"</font>;
+00401
+00402 <font class="preprocessor">#ifndef _MSC_VER</font>
+00403 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00404 cerr &lt;&lt; <font class="stringliteral">"DataPath in "</font> &lt;&lt; gfp &lt;&lt; <font class="stringliteral">" is set to: "</font> &lt;&lt; path;
+00405 <font class="preprocessor">#endif</font>
+00406 <font class="preprocessor"></font>
+00407 <font class="preprocessor">#ifndef _MSC_VER</font>
+00408 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00409 cerr &lt;&lt; <font class="stringliteral">"\nChecking for mods.conf in DataPath "</font>;
+00410 <font class="preprocessor">#endif</font>
+00411 <font class="preprocessor"></font> <font class="keywordflow">if</font> (FileMgr::existsFile(path.c_str(), <font class="stringliteral">"mods.conf"</font>)) {
+00412
+00413 <font class="preprocessor">#ifndef _MSC_VER</font>
+00414 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00415 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00416 <font class="preprocessor">#endif</font>
+00417 <font class="preprocessor"></font>
+00418 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00419 path += <font class="stringliteral">"mods.conf"</font>;
+00420 stdstr(configPath, path.c_str());
+00421 <font class="keyword">delete</font> [] globPaths;
+00422 <font class="keywordflow">return</font>;
+00423 }
+00424
+00425 <font class="preprocessor">#ifndef _MSC_VER</font>
+00426 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00427 cerr &lt;&lt; <font class="stringliteral">"\nChecking for mods.d in DataPath "</font>;
+00428 <font class="preprocessor">#endif</font>
+00429 <font class="preprocessor"></font>
+00430 <font class="keywordflow">if</font> (FileMgr::existsDir(path.c_str(), <font class="stringliteral">"mods.d"</font>)) {
+00431
+00432 <font class="preprocessor">#ifndef _MSC_VER</font>
+00433 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00434 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00435 <font class="preprocessor">#endif</font>
+00436 <font class="preprocessor"></font>
+00437 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00438 path += <font class="stringliteral">"mods.d"</font>;
+00439 stdstr(configPath, path.c_str());
+00440 *configType = 1;
+00441 <font class="keyword">delete</font> [] globPaths;
+00442 <font class="keywordflow">return</font>;
+00443 }
+00444 }
+00445 }
+00446
+00447 <font class="keyword">delete</font> [] globPaths;
+00448
+00449 <font class="comment">// check ~/.sword/</font>
+00450
+00451 <font class="preprocessor">#ifndef _MSC_VER</font>
+00452 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00453 cerr &lt;&lt; <font class="stringliteral">"\nChecking home directory for ~/.sword/mods.conf"</font> &lt;&lt; path;
+00454 <font class="preprocessor">#endif</font>
+00455 <font class="preprocessor"></font>
+00456 <font class="keywordflow">if</font> (envhomedir != NULL) {
+00457 path = envhomedir;
+00458 <font class="keywordflow">if</font> ((envhomedir[strlen(envhomedir)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (envhomedir[strlen(envhomedir)-1] != <font class="charliteral">'/'</font>))
+00459 path += <font class="stringliteral">"/"</font>;
+00460 path += <font class="stringliteral">".sword/"</font>;
+00461 <font class="keywordflow">if</font> (FileMgr::existsFile(path.c_str(), <font class="stringliteral">"mods.conf"</font>)) {
+00462
+00463 <font class="preprocessor">#ifndef _MSC_VER</font>
+00464 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00465 cerr &lt;&lt; <font class="stringliteral">" found\n"</font>;
+00466 <font class="preprocessor">#endif</font>
+00467 <font class="preprocessor"></font>
+00468 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00469 path += <font class="stringliteral">"mods.conf"</font>;
+00470 stdstr(configPath, path.c_str());
+00471 <font class="keywordflow">return</font>;
+00472 }
+00473
+00474 <font class="preprocessor">#ifndef _MSC_VER</font>
+00475 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00476 cerr &lt;&lt; <font class="stringliteral">"\nChecking home directory for ~/.sword/mods.d"</font> &lt;&lt; path;
+00477 <font class="preprocessor">#endif</font>
+00478 <font class="preprocessor"></font>
+00479 <font class="keywordflow">if</font> (FileMgr::existsDir(path.c_str(), <font class="stringliteral">"mods.d"</font>)) {
+00480
+00481 <font class="preprocessor">#ifndef _MSC_VER</font>
+00482 <font class="preprocessor"></font><font class="keywordflow">if</font> (debug)
+00483 cerr &lt;&lt; <font class="stringliteral">"found\n"</font>;
+00484 <font class="preprocessor">#endif</font>
+00485 <font class="preprocessor"></font>
+00486 stdstr(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00487 path += <font class="stringliteral">"mods.d"</font>;
+00488 stdstr(configPath, path.c_str());
+00489 *configType = 2;
+00490 <font class="keywordflow">return</font>;
+00491 }
+00492 }
+00493 }
+00494
+00495
+00496 <font class="keywordtype">void</font> SWMgr::loadConfigDir(<font class="keyword">const</font> <font class="keywordtype">char</font> *ipath)
+00497 {
+00498 DIR *dir;
+00499 <font class="keyword">struct </font>dirent *ent;
+00500 string newmodfile;
+00501
+00502 <font class="keywordflow">if</font> ((dir = opendir(ipath))) {
+00503 rewinddir(dir);
+00504 <font class="keywordflow">while</font> ((ent = readdir(dir))) {
+00505 <font class="keywordflow">if</font> ((strcmp(ent-&gt;d_name, <font class="stringliteral">"."</font>)) &amp;&amp; (strcmp(ent-&gt;d_name, <font class="stringliteral">".."</font>))) {
+00506 newmodfile = ipath;
+00507 <font class="keywordflow">if</font> ((ipath[strlen(ipath)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (ipath[strlen(ipath)-1] != <font class="charliteral">'/'</font>))
+00508 newmodfile += <font class="stringliteral">"/"</font>;
+00509 newmodfile += ent-&gt;d_name;
+00510 <font class="keywordflow">if</font> (config) {
+00511 <a class="code" href="class_s_w_config.html">SWConfig</a> tmpConfig(newmodfile.c_str());
+00512 *<a class="code" href="class_s_w_mgr.html#m0">config</a> += tmpConfig;
+00513 }
+00514 <font class="keywordflow">else</font> <a class="code" href="class_s_w_mgr.html#m0">config</a> = myconfig = <font class="keyword">new</font> <a class="code" href="class_s_w_config.html">SWConfig</a>(newmodfile.c_str());
+00515 }
+00516 }
+00517 closedir(dir);
+00518 <font class="keywordflow">if</font> (!<a class="code" href="class_s_w_mgr.html#m0">config</a>) { <font class="comment">// if no .conf file exist yet, create a default</font>
+00519 newmodfile = ipath;
+00520 <font class="keywordflow">if</font> ((ipath[strlen(ipath)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (ipath[strlen(ipath)-1] != <font class="charliteral">'/'</font>))
+00521 newmodfile += <font class="stringliteral">"/"</font>;
+00522 newmodfile += <font class="stringliteral">"globals.conf"</font>;
+00523 <a class="code" href="class_s_w_mgr.html#m0">config</a> = myconfig = <font class="keyword">new</font> <a class="code" href="class_s_w_config.html">SWConfig</a>(newmodfile.c_str());
+00524 }
+00525 }
+00526 }
+00527
+00528
+00529 <font class="comment">/***********************************************************************</font>
+00530 <font class="comment"> * SWMgr::Load - loads actual modules</font>
+00531 <font class="comment"> *</font>
+00532 <font class="comment"> * RET: status - 0 = ok; -1 no config found; 1 = no modules installed</font>
+00533 <font class="comment"> *</font>
+00534 <font class="comment"> */</font>
+00535
+<a name="l00536"></a><a class="code" href="class_s_w_mgr.html#a5">00536</a> <font class="keywordtype">signed</font> <font class="keywordtype">char</font> <a class="code" href="class_s_w_mgr.html#a5">SWMgr::Load</a>() {
+00537 <font class="keywordtype">signed</font> <font class="keywordtype">char</font> ret = 0;
+00538
+00539 <font class="keywordflow">if</font> (!<a class="code" href="class_s_w_mgr.html#m0">config</a>) { <font class="comment">// If we weren't passed a config object at construction, find a config file</font>
+00540 <font class="keywordflow">if</font> (!configPath) <font class="comment">// If we weren't passed a config path at construction...</font>
+00541 findConfig(&amp;configType, &amp;<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, &amp;configPath);
+00542 <font class="keywordflow">if</font> (configPath) {
+00543 <font class="keywordflow">if</font> (configType)
+00544 loadConfigDir(configPath);
+00545 <font class="keywordflow">else</font> <a class="code" href="class_s_w_mgr.html#m0">config</a> = myconfig = <font class="keyword">new</font> <a class="code" href="class_s_w_config.html">SWConfig</a>(configPath);
+00546 }
+00547 }
+00548
+00549 <font class="keywordflow">if</font> (config) {
+00550 SectionMap::iterator Sectloop, Sectend;
+00551 ConfigEntMap::iterator Entryloop, Entryend;
+00552
+00553 DeleteMods();
+00554
+00555 <font class="keywordflow">for</font> (Sectloop = <a class="code" href="class_s_w_mgr.html#m0">config</a>-&gt;<a class="code" href="class_s_w_config.html#m1">Sections</a>.lower_bound(<font class="stringliteral">"Globals"</font>), Sectend = <a class="code" href="class_s_w_mgr.html#m0">config</a>-&gt;<a class="code" href="class_s_w_config.html#m1">Sections</a>.upper_bound(<font class="stringliteral">"Globals"</font>); Sectloop != Sectend; Sectloop++) { <font class="comment">// scan thru all 'Globals' sections</font>
+00556 <font class="keywordflow">for</font> (Entryloop = (*Sectloop).second.lower_bound(<font class="stringliteral">"AutoInstall"</font>), Entryend = (*Sectloop).second.upper_bound(<font class="stringliteral">"AutoInstall"</font>); Entryloop != Entryend; Entryloop++) <font class="comment">// scan thru all AutoInstall entries</font>
+00557 <a class="code" href="class_s_w_mgr.html#a4">InstallScan</a>((*Entryloop).second.c_str()); <font class="comment">// Scan AutoInstall entry directory for new modules and install</font>
+00558 }
+00559 <font class="keywordflow">if</font> (configType) { <font class="comment">// force reload on config object because we may have installed new modules</font>
+00560 <font class="keyword">delete</font> myconfig;
+00561 <a class="code" href="class_s_w_mgr.html#m0">config</a> = myconfig = 0;
+00562 loadConfigDir(configPath);
+00563 }
+00564 <font class="keywordflow">else</font> <a class="code" href="class_s_w_mgr.html#m0">config</a>-&gt;<a class="code" href="class_s_w_config.html#a2">Load</a>();
+00565
+00566 CreateMods();
+00567
+00568 <font class="comment">// augment config with ~/.sword/mods.d if it exists ---------------------</font>
+00569 <font class="keywordtype">char</font> *envhomedir = getenv (<font class="stringliteral">"HOME"</font>);
+00570 <font class="keywordflow">if</font> (envhomedir != NULL &amp;&amp; configType != 2) { <font class="comment">// 2 = user only</font>
+00571 string path = envhomedir;
+00572 <font class="keywordflow">if</font> ((envhomedir[strlen(envhomedir)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (envhomedir[strlen(envhomedir)-1] != <font class="charliteral">'/'</font>))
+00573 path += <font class="stringliteral">"/"</font>;
+00574 path += <font class="stringliteral">".sword/"</font>;
+00575 <font class="keywordflow">if</font> (FileMgr::existsDir(path.c_str(), <font class="stringliteral">"mods.d"</font>)) {
+00576 <font class="keywordtype">char</font> *savePrefixPath = 0;
+00577 <font class="keywordtype">char</font> *saveConfigPath = 0;
+00578 <a class="code" href="class_s_w_config.html">SWConfig</a> *saveConfig = 0;
+00579 stdstr(&amp;savePrefixPath, <a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>);
+00580 stdstr(&amp;<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, path.c_str());
+00581 path += <font class="stringliteral">"mods.d"</font>;
+00582 stdstr(&amp;saveConfigPath, configPath);
+00583 stdstr(&amp;configPath, path.c_str());
+00584 saveConfig = <a class="code" href="class_s_w_mgr.html#m0">config</a>;
+00585 <a class="code" href="class_s_w_mgr.html#m0">config</a> = myconfig = 0;
+00586 loadConfigDir(configPath);
+00587
+00588 CreateMods();
+00589
+00590 stdstr(&amp;<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>, savePrefixPath);
+00591 <font class="keyword">delete</font> []savePrefixPath;
+00592 stdstr(&amp;configPath, saveConfigPath);
+00593 <font class="keyword">delete</font> []saveConfigPath;
+00594 (*saveConfig) += *<a class="code" href="class_s_w_mgr.html#m0">config</a>;
+00595 homeConfig = myconfig;
+00596 <a class="code" href="class_s_w_mgr.html#m0">config</a> = myconfig = saveConfig;
+00597 }
+00598 }
+00599 <font class="comment">// -------------------------------------------------------------------------</font>
+00600 <font class="keywordflow">if</font> ( !<a class="code" href="class_s_w_mgr.html#m2">Modules</a>.size() ) <font class="comment">// config exists, but no modules</font>
+00601 ret = 1;
+00602
+00603 }
+00604 <font class="keywordflow">else</font> {
+00605 SWLog::systemlog-&gt;LogError(<font class="stringliteral">"SWMgr: Can't find 'mods.conf' or 'mods.d'. Try setting:\n\tSWORD_PATH=&lt;directory containing mods.conf&gt;\n\tOr see the README file for a full description of setup options (%s)"</font>, (configPath) ? configPath : <font class="stringliteral">"&lt;configPath is null&gt;"</font>);
+00606 ret = -1;
+00607 }
+00608
+00609 <font class="keywordflow">return</font> ret;
+00610 }
+00611
+00612 <a class="code" href="class_s_w_module.html">SWModule</a> *SWMgr::CreateMod(string name, string driver, ConfigEntMap &amp;section)
+00613 {
+00614 string description, datapath, misc1;
+00615 ConfigEntMap::iterator entry;
+00616 <a class="code" href="class_s_w_module.html">SWModule</a> *newmod = 0;
+00617 string lang, sourceformat, encoding;
+00618 <font class="keywordtype">signed</font> <font class="keywordtype">char</font> direction, enc, markup;
+00619
+00620 description = ((entry = section.find(<font class="stringliteral">"Description"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00621 lang = ((entry = section.find(<font class="stringliteral">"Lang"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">"en"</font>;
+00622 sourceformat = ((entry = section.find(<font class="stringliteral">"SourceType"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00623 encoding = ((entry = section.find(<font class="stringliteral">"Encoding"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00624 datapath = <a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>;
+00625 <font class="keywordflow">if</font> ((<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>[strlen(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>[strlen(<a class="code" href="class_s_w_mgr.html#m3">prefixPath</a>)-1] != <font class="charliteral">'/'</font>))
+00626 datapath += <font class="stringliteral">"/"</font>;
+00627 misc1 += ((entry = section.find(<font class="stringliteral">"DataPath"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00628 <font class="keywordtype">char</font> *buf = <font class="keyword">new</font> <font class="keywordtype">char</font> [ strlen(misc1.c_str()) + 1 ];
+00629 <font class="keywordtype">char</font> *buf2 = buf;
+00630 strcpy(buf, misc1.c_str());
+00631 <font class="comment">// for (; ((*buf2) &amp;&amp; ((*buf2 == '.') || (*buf2 == '/') || (*buf2 == '\\'))); buf2++);</font>
+00632 <font class="keywordflow">for</font> (; ((*buf2) &amp;&amp; ((*buf2 == <font class="charliteral">'/'</font>) || (*buf2 == <font class="charliteral">'\\'</font>))); buf2++);
+00633 <font class="keywordflow">if</font> (*buf2)
+00634 datapath += buf2;
+00635 <font class="keyword">delete</font> [] buf;
+00636
+00637 section[<font class="stringliteral">"AbsoluteDataPath"</font>] = datapath;
+00638
+00639 <font class="keywordflow">if</font> (!stricmp(sourceformat.c_str(), <font class="stringliteral">"GBF"</font>))
+00640 markup = FMT_GBF;
+00641 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp(sourceformat.c_str(), <font class="stringliteral">"ThML"</font>))
+00642 markup = FMT_THML;
+00643 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp(sourceformat.c_str(), <font class="stringliteral">"OSIS"</font>))
+00644 markup = FMT_OSIS;
+00645 <font class="keywordflow">else</font>
+00646 markup = FMT_PLAIN;
+00647
+00648 <font class="keywordflow">if</font> (!stricmp(encoding.c_str(), <font class="stringliteral">"SCSU"</font>))
+00649 enc = ENC_SCSU;
+00650 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp(encoding.c_str(), <font class="stringliteral">"UTF-8"</font>)) {
+00651 enc = ENC_UTF8;
+00652 }
+00653 <font class="keywordflow">else</font> enc = ENC_LATIN1;
+00654
+00655 <font class="keywordflow">if</font> ((entry = section.find(<font class="stringliteral">"Direction"</font>)) == section.end()) {
+00656 direction = DIRECTION_LTR;
+00657 }
+00658 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp((*entry).second.c_str(), <font class="stringliteral">"rtol"</font>)) {
+00659 direction = DIRECTION_RTL;
+00660 }
+00661 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp((*entry).second.c_str(), <font class="stringliteral">"bidi"</font>)) {
+00662 direction = DIRECTION_BIDI;
+00663 }
+00664 <font class="keywordflow">else</font> {
+00665 direction = DIRECTION_LTR;
+00666 }
+00667
+00668 <font class="keywordflow">if</font> ((!stricmp(driver.c_str(), <font class="stringliteral">"zText"</font>)) || (!stricmp(driver.c_str(), <font class="stringliteral">"zCom"</font>))) {
+00669 SWCompress *compress = 0;
+00670 <font class="keywordtype">int</font> blockType = CHAPTERBLOCKS;
+00671 misc1 = ((entry = section.find(<font class="stringliteral">"BlockType"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">"CHAPTER"</font>;
+00672 <font class="keywordflow">if</font> (!stricmp(misc1.c_str(), <font class="stringliteral">"VERSE"</font>))
+00673 blockType = VERSEBLOCKS;
+00674 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp(misc1.c_str(), <font class="stringliteral">"CHAPTER"</font>))
+00675 blockType = CHAPTERBLOCKS;
+00676 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp(misc1.c_str(), <font class="stringliteral">"BOOK"</font>))
+00677 blockType = BOOKBLOCKS;
+00678
+00679 misc1 = ((entry = section.find(<font class="stringliteral">"CompressType"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">"LZSS"</font>;
+00680 <font class="preprocessor">#ifndef EXCLUDEZLIB</font>
+00681 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!stricmp(misc1.c_str(), <font class="stringliteral">"ZIP"</font>))
+00682 compress = <font class="keyword">new</font> ZipCompress();
+00683 <font class="keywordflow">else</font>
+00684 <font class="preprocessor">#endif</font>
+00685 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!stricmp(misc1.c_str(), <font class="stringliteral">"LZSS"</font>))
+00686 compress = <font class="keyword">new</font> LZSSCompress();
+00687
+00688 <font class="keywordflow">if</font> (compress) {
+00689 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"zText"</font>))
+00690 newmod = <font class="keyword">new</font> zText(datapath.c_str(), name.c_str(), description.c_str(), blockType, compress, 0, enc, direction, markup, lang.c_str());
+00691 <font class="keywordflow">else</font> newmod = <font class="keyword">new</font> zCom(datapath.c_str(), name.c_str(), description.c_str(), blockType, compress, 0, enc, direction, markup, lang.c_str());
+00692 }
+00693 }
+00694
+00695 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"RawText"</font>)) {
+00696 newmod = <font class="keyword">new</font> RawText(datapath.c_str(), name.c_str(), description.c_str(), 0, enc, direction, markup, lang.c_str());
+00697 }
+00698
+00699 <font class="comment">// backward support old drivers</font>
+00700 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"RawGBF"</font>)) {
+00701 newmod = <font class="keyword">new</font> RawText(datapath.c_str(), name.c_str(), description.c_str(), 0, enc, direction, markup, lang.c_str());
+00702 }
+00703
+00704 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"RawCom"</font>)) {
+00705 newmod = <font class="keyword">new</font> RawCom(datapath.c_str(), name.c_str(), description.c_str(), 0, enc, direction, markup, lang.c_str());
+00706 }
+00707
+00708 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"RawFiles"</font>)) {
+00709 newmod = <font class="keyword">new</font> RawFiles(datapath.c_str(), name.c_str(), description.c_str(), 0, enc, direction, markup, lang.c_str());
+00710 }
+00711
+00712 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"HREFCom"</font>)) {
+00713 misc1 = ((entry = section.find(<font class="stringliteral">"Prefix"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00714 newmod = <font class="keyword">new</font> HREFCom(datapath.c_str(), misc1.c_str(), name.c_str(), description.c_str());
+00715 }
+00716
+00717 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"RawLD"</font>))
+00718 newmod = <font class="keyword">new</font> RawLD(datapath.c_str(), name.c_str(), description.c_str(), 0, enc, direction, markup, lang.c_str());
+00719
+00720 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"RawLD4"</font>))
+00721 newmod = <font class="keyword">new</font> RawLD4(datapath.c_str(), name.c_str(), description.c_str(), 0, enc, direction, markup, lang.c_str());
+00722
+00723 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"zLD"</font>)) {
+00724 SWCompress *compress = 0;
+00725 <font class="keywordtype">int</font> blockCount;
+00726 misc1 = ((entry = section.find(<font class="stringliteral">"BlockCount"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">"200"</font>;
+00727 blockCount = atoi(misc1.c_str());
+00728 blockCount = (blockCount) ? blockCount : 200;
+00729
+00730 misc1 = ((entry = section.find(<font class="stringliteral">"CompressType"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">"LZSS"</font>;
+00731 <font class="preprocessor">#ifndef EXCLUDEZLIB</font>
+00732 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!stricmp(misc1.c_str(), <font class="stringliteral">"ZIP"</font>))
+00733 compress = <font class="keyword">new</font> ZipCompress();
+00734 <font class="keywordflow">else</font>
+00735 <font class="preprocessor">#endif</font>
+00736 <font class="preprocessor"></font> <font class="keywordflow">if</font> (!stricmp(misc1.c_str(), <font class="stringliteral">"LZSS"</font>))
+00737 compress = <font class="keyword">new</font> LZSSCompress();
+00738
+00739 <font class="keywordflow">if</font> (compress) {
+00740 newmod = <font class="keyword">new</font> zLD(datapath.c_str(), name.c_str(), description.c_str(), blockCount, compress, 0, enc, direction, markup, lang.c_str());
+00741 }
+00742 }
+00743
+00744 <font class="keywordflow">if</font> (!stricmp(driver.c_str(), <font class="stringliteral">"RawGenBook"</font>)) {
+00745 newmod = <font class="keyword">new</font> RawGenBook(datapath.c_str(), name.c_str(), description.c_str(), 0, enc, direction, markup, lang.c_str());
+00746 }
+00747 <font class="comment">// if a specific module type is set in the config, use this</font>
+00748 <font class="keywordflow">if</font> ((entry = section.find(<font class="stringliteral">"Type"</font>)) != section.end())
+00749 newmod-&gt;<a class="code" href="class_s_w_module.html#a17">Type</a>(entry-&gt;second.c_str());
+00750
+00751 newmod-&gt;<a class="code" href="class_s_w_module.html#a5">setConfig</a>(&amp;section);
+00752 <font class="keywordflow">return</font> newmod;
+00753 }
+00754
+00755
+00756 <font class="keywordtype">void</font> SWMgr::AddGlobalOptions(<a class="code" href="class_s_w_module.html">SWModule</a> *module, ConfigEntMap &amp;section, ConfigEntMap::iterator start, ConfigEntMap::iterator end) {
+00757 <font class="keywordflow">for</font> (;start != end; start++) {
+00758 FilterMap::iterator it;
+00759 it = optionFilters.find((*start).second);
+00760 <font class="keywordflow">if</font> (it != optionFilters.end()) {
+00761 module-&gt;<a class="code" href="class_s_w_module.html#a54">AddOptionFilter</a>((*it).second); <font class="comment">// add filter to module and option as a valid option</font>
+00762 OptionsList::iterator loop;
+00763 <font class="keywordflow">for</font> (loop = options.begin(); loop != options.end(); loop++) {
+00764 <font class="keywordflow">if</font> (!strcmp((*loop).c_str(), (*it).second-&gt;getOptionName()))
+00765 <font class="keywordflow">break</font>;
+00766 }
+00767 <font class="keywordflow">if</font> (loop == options.end()) <font class="comment">// if we have not yet included the option</font>
+00768 options.push_back((*it).second-&gt;getOptionName());
+00769 }
+00770 }
+00771 <font class="keywordflow">if</font> (filterMgr)
+00772 filterMgr-&gt;AddGlobalOptions(module, section, start, end);
+00773 }
+00774
+00775
+00776 <font class="keywordtype">void</font> SWMgr::AddLocalOptions(<a class="code" href="class_s_w_module.html">SWModule</a> *module, ConfigEntMap &amp;section, ConfigEntMap::iterator start, ConfigEntMap::iterator end)
+00777 {
+00778 <font class="keywordflow">for</font> (;start != end; start++) {
+00779 FilterMap::iterator it;
+00780 it = optionFilters.find((*start).second);
+00781 <font class="keywordflow">if</font> (it != optionFilters.end()) {
+00782 module-&gt;<a class="code" href="class_s_w_module.html#a54">AddOptionFilter</a>((*it).second); <font class="comment">// add filter to module</font>
+00783 }
+00784 }
+00785
+00786 <font class="keywordflow">if</font> (filterMgr)
+00787 filterMgr-&gt;AddLocalOptions(module, section, start, end);
+00788 }
+00789
+00790
+<a name="l00791"></a><a class="code" href="class_s_w_mgr.html#b11">00791</a> <font class="keywordtype">void</font> <a class="code" href="class_s_w_mgr.html#b11">SWMgr::AddRawFilters</a>(<a class="code" href="class_s_w_module.html">SWModule</a> *module, ConfigEntMap &amp;section) {
+00792 string sourceformat, cipherKey;
+00793 ConfigEntMap::iterator entry;
+00794
+00795 cipherKey = ((entry = section.find(<font class="stringliteral">"CipherKey"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00796 <font class="keywordflow">if</font> (!cipherKey.empty()) {
+00797 SWFilter *cipherFilter = <font class="keyword">new</font> CipherFilter(cipherKey.c_str());
+00798 cipherFilters.insert(FilterMap::value_type(module-&gt;<a class="code" href="class_s_w_module.html#a15">Name</a>(), cipherFilter));
+00799 cleanupFilters.push_back(cipherFilter);
+00800 module-&gt;<a class="code" href="class_s_w_module.html#a51">AddRawFilter</a>(cipherFilter);
+00801 }
+00802
+00803 <font class="keywordflow">if</font> (filterMgr)
+00804 filterMgr-&gt;AddRawFilters(module, section);
+00805 }
+00806
+00807
+<a name="l00808"></a><a class="code" href="class_s_w_mgr.html#b8">00808</a> <font class="keywordtype">void</font> <a class="code" href="class_s_w_mgr.html#b8">SWMgr::AddEncodingFilters</a>(<a class="code" href="class_s_w_module.html">SWModule</a> *module, ConfigEntMap &amp;section) {
+00809
+00810 <font class="keywordflow">if</font> (filterMgr)
+00811 filterMgr-&gt;AddEncodingFilters(module, section);
+00812 }
+00813
+00814
+<a name="l00815"></a><a class="code" href="class_s_w_mgr.html#b9">00815</a> <font class="keywordtype">void</font> <a class="code" href="class_s_w_mgr.html#b9">SWMgr::AddRenderFilters</a>(<a class="code" href="class_s_w_module.html">SWModule</a> *module, ConfigEntMap &amp;section) {
+00816 string sourceformat;
+00817 ConfigEntMap::iterator entry;
+00818
+00819 sourceformat = ((entry = section.find(<font class="stringliteral">"SourceType"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00820
+00821 <font class="comment">// Temporary: To support old module types</font>
+00822 <font class="comment">// TODO: Remove at 1.6.0 release?</font>
+00823 <font class="keywordflow">if</font> (sourceformat.empty()) {
+00824 sourceformat = ((entry = section.find(<font class="stringliteral">"ModDrv"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00825 <font class="keywordflow">if</font> (!stricmp(sourceformat.c_str(), <font class="stringliteral">"RawGBF"</font>))
+00826 sourceformat = <font class="stringliteral">"GBF"</font>;
+00827 <font class="keywordflow">else</font> sourceformat = <font class="stringliteral">""</font>;
+00828 }
+00829
+00830 <font class="comment">// process module - eg. follows</font>
+00831 <font class="comment">// if (!stricmp(sourceformat.c_str(), "GBF")) {</font>
+00832 <font class="comment">// module-&gt;AddRenderFilter(gbftortf);</font>
+00833 <font class="comment">// }</font>
+00834
+00835 <font class="keywordflow">if</font> (filterMgr)
+00836 filterMgr-&gt;AddRenderFilters(module, section);
+00837
+00838 }
+00839
+00840
+<a name="l00841"></a><a class="code" href="class_s_w_mgr.html#b10">00841</a> <font class="keywordtype">void</font> <a class="code" href="class_s_w_mgr.html#b10">SWMgr::AddStripFilters</a>(<a class="code" href="class_s_w_module.html">SWModule</a> *module, ConfigEntMap &amp;section)
+00842 {
+00843 string sourceformat;
+00844 ConfigEntMap::iterator entry;
+00845
+00846 sourceformat = ((entry = section.find(<font class="stringliteral">"SourceType"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00847 <font class="comment">// Temporary: To support old module types</font>
+00848 <font class="keywordflow">if</font> (sourceformat.empty()) {
+00849 sourceformat = ((entry = section.find(<font class="stringliteral">"ModDrv"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00850 <font class="keywordflow">if</font> (!stricmp(sourceformat.c_str(), <font class="stringliteral">"RawGBF"</font>))
+00851 sourceformat = <font class="stringliteral">"GBF"</font>;
+00852 <font class="keywordflow">else</font> sourceformat = <font class="stringliteral">""</font>;
+00853 }
+00854
+00855 <font class="keywordflow">if</font> (!stricmp(sourceformat.c_str(), <font class="stringliteral">"GBF"</font>)) {
+00856 module-&gt;<a class="code" href="class_s_w_module.html#a49">AddStripFilter</a>(gbfplain);
+00857 }
+00858 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!stricmp(sourceformat.c_str(), <font class="stringliteral">"ThML"</font>)) {
+00859 module-&gt;<a class="code" href="class_s_w_module.html#a49">AddStripFilter</a>(thmlplain);
+00860 }
+00861
+00862 <font class="keywordflow">if</font> (filterMgr)
+00863 filterMgr-&gt;AddStripFilters(module, section);
+00864
+00865 }
+00866
+00867
+00868 <font class="keywordtype">void</font> SWMgr::CreateMods() {
+00869 SectionMap::iterator it;
+00870 ConfigEntMap::iterator start;
+00871 ConfigEntMap::iterator end;
+00872 ConfigEntMap::iterator entry;
+00873 <a class="code" href="class_s_w_module.html">SWModule</a> *newmod;
+00874 string driver, misc1;
+00875 <font class="keywordflow">for</font> (it = <a class="code" href="class_s_w_mgr.html#m0">config</a>-&gt;<a class="code" href="class_s_w_config.html#m1">Sections</a>.begin(); it != <a class="code" href="class_s_w_mgr.html#m0">config</a>-&gt;<a class="code" href="class_s_w_config.html#m1">Sections</a>.end(); it++) {
+00876 ConfigEntMap &amp;section = (*it).second;
+00877 newmod = 0;
+00878
+00879 driver = ((entry = section.find(<font class="stringliteral">"ModDrv"</font>)) != section.end()) ? (*entry).second : (string)<font class="stringliteral">""</font>;
+00880 <font class="keywordflow">if</font> (!driver.empty()) {
+00881 newmod = CreateMod((*it).first, driver, section);
+00882 <font class="keywordflow">if</font> (newmod) {
+00883 start = (*it).second.lower_bound(<font class="stringliteral">"GlobalOptionFilter"</font>);
+00884 end = (*it).second.upper_bound(<font class="stringliteral">"GlobalOptionFilter"</font>);
+00885 AddGlobalOptions(newmod, section, start, end);
+00886
+00887 start = (*it).second.lower_bound(<font class="stringliteral">"LocalOptionFilter"</font>);
+00888 end = (*it).second.upper_bound(<font class="stringliteral">"LocalOptionFilter"</font>);
+00889 AddLocalOptions(newmod, section, start, end);
+00890
+00891 <a class="code" href="class_s_w_mgr.html#b11">AddRawFilters</a>(newmod, section);
+00892 <a class="code" href="class_s_w_mgr.html#b10">AddStripFilters</a>(newmod, section);
+00893 <a class="code" href="class_s_w_mgr.html#b9">AddRenderFilters</a>(newmod, section);
+00894 <a class="code" href="class_s_w_mgr.html#b8">AddEncodingFilters</a>(newmod, section);
+00895
+00896 <a class="code" href="class_s_w_mgr.html#m2">Modules</a>.insert(ModMap::value_type(newmod-&gt;<a class="code" href="class_s_w_module.html#a15">Name</a>(), newmod));
+00897 }
+00898 }
+00899 }
+00900 }
+00901
+00902
+00903 <font class="keywordtype">void</font> SWMgr::DeleteMods() {
+00904
+00905 ModMap::iterator it;
+00906
+00907 <font class="keywordflow">for</font> (it = <a class="code" href="class_s_w_mgr.html#m2">Modules</a>.begin(); it != <a class="code" href="class_s_w_mgr.html#m2">Modules</a>.end(); it++)
+00908 <font class="keyword">delete</font> (*it).second;
+00909
+00910 <a class="code" href="class_s_w_mgr.html#m2">Modules</a>.clear();
+00911 }
+00912
+00913
+<a name="l00914"></a><a class="code" href="class_s_w_mgr.html#a4">00914</a> <font class="keywordtype">void</font> <a class="code" href="class_s_w_mgr.html#a4">SWMgr::InstallScan</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *dirname)
+00915 {
+00916 DIR *dir;
+00917 <font class="keyword">struct </font>dirent *ent;
+00918 <font class="keywordtype">int</font> conffd = 0;
+00919 string newmodfile;
+00920 string targetName;
+00921
+00922 <font class="keywordflow">if</font> (!access(dirname, 04)) {
+00923 <font class="keywordflow">if</font> ((dir = opendir(dirname))) {
+00924 rewinddir(dir);
+00925 <font class="keywordflow">while</font> ((ent = readdir(dir))) {
+00926 <font class="keywordflow">if</font> ((strcmp(ent-&gt;d_name, <font class="stringliteral">"."</font>)) &amp;&amp; (strcmp(ent-&gt;d_name, <font class="stringliteral">".."</font>))) {
+00927 newmodfile = dirname;
+00928 <font class="keywordflow">if</font> ((dirname[strlen(dirname)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (dirname[strlen(dirname)-1] != <font class="charliteral">'/'</font>))
+00929 newmodfile += <font class="stringliteral">"/"</font>;
+00930 newmodfile += ent-&gt;d_name;
+00931 <font class="keywordflow">if</font> (configType) {
+00932 <font class="keywordflow">if</font> (<a class="code" href="class_s_w_mgr.html#m0">config</a> &gt; 0)
+00933 close(conffd);
+00934 targetName = configPath;
+00935 <font class="keywordflow">if</font> ((configPath[strlen(configPath)-1] != <font class="charliteral">'\\'</font>) &amp;&amp; (configPath[strlen(configPath)-1] != <font class="charliteral">'/'</font>))
+00936 targetName += <font class="stringliteral">"/"</font>;
+00937 targetName += ent-&gt;d_name;
+00938 conffd = open(targetName.c_str(), O_WRONLY|O_CREAT, S_IREAD|S_IWRITE);
+00939 }
+00940 <font class="keywordflow">else</font> {
+00941 <font class="keywordflow">if</font> (conffd &lt; 1) {
+00942 conffd = open(<a class="code" href="class_s_w_mgr.html#m0">config</a>-&gt;<a class="code" href="class_s_w_config.html#m0">filename</a>.c_str(), O_WRONLY|O_APPEND);
+00943 <font class="keywordflow">if</font> (conffd &gt; 0)
+00944 lseek(conffd, 0L, SEEK_END);
+00945 }
+00946 }
+00947 AddModToConfig(conffd, newmodfile.c_str());
+00948 unlink(newmodfile.c_str());
+00949 }
+00950 }
+00951 <font class="keywordflow">if</font> (conffd &gt; 0)
+00952 close(conffd);
+00953 closedir(dir);
+00954 }
+00955 }
+00956 }
+00957
+00958
+00959 <font class="keywordtype">char</font> SWMgr::AddModToConfig(<font class="keywordtype">int</font> conffd, <font class="keyword">const</font> <font class="keywordtype">char</font> *fname)
+00960 {
+00961 <font class="keywordtype">int</font> modfd;
+00962 <font class="keywordtype">char</font> ch;
+00963
+00964 SWLog::systemlog-&gt;LogTimedInformation(<font class="stringliteral">"Found new module [%s]. Installing..."</font>, fname);
+00965 modfd = open(fname, O_RDONLY);
+00966 ch = <font class="charliteral">'\n'</font>;
+00967 write(conffd, &amp;ch, 1);
+00968 <font class="keywordflow">while</font> (read(modfd, &amp;ch, 1) == 1)
+00969 write(conffd, &amp;ch, 1);
+00970 ch = <font class="charliteral">'\n'</font>;
+00971 write(conffd, &amp;ch, 1);
+00972 close(modfd);
+00973 <font class="keywordflow">return</font> 0;
+00974 }
+00975
+00976
+<a name="l00977"></a><a class="code" href="class_s_w_mgr.html#a6">00977</a> <font class="keywordtype">void</font> <a class="code" href="class_s_w_mgr.html#a6">SWMgr::setGlobalOption</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *option, <font class="keyword">const</font> <font class="keywordtype">char</font> *value)
+00978 {
+00979 <font class="keywordflow">for</font> (FilterMap::iterator it = optionFilters.begin(); it != optionFilters.end(); it++) {
+00980 <font class="keywordflow">if</font> ((*it).second-&gt;getOptionName()) {
+00981 <font class="keywordflow">if</font> (!stricmp(option, (*it).second-&gt;getOptionName()))
+00982 (*it).second-&gt;setOptionValue(value);
+00983 }
+00984 }
+00985 }
+00986
+00987
+<a name="l00988"></a><a class="code" href="class_s_w_mgr.html#a7">00988</a> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_s_w_mgr.html#a7">SWMgr::getGlobalOption</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *option)
+00989 {
+00990 <font class="keywordflow">for</font> (FilterMap::iterator it = optionFilters.begin(); it != optionFilters.end(); it++) {
+00991 <font class="keywordflow">if</font> ((*it).second-&gt;getOptionName()) {
+00992 <font class="keywordflow">if</font> (!stricmp(option, (*it).second-&gt;getOptionName()))
+00993 <font class="keywordflow">return</font> (*it).second-&gt;getOptionValue();
+00994 }
+00995 }
+00996 <font class="keywordflow">return</font> 0;
+00997 }
+00998
+00999
+<a name="l01000"></a><a class="code" href="class_s_w_mgr.html#a8">01000</a> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_s_w_mgr.html#a8">SWMgr::getGlobalOptionTip</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *option)
+01001 {
+01002 <font class="keywordflow">for</font> (FilterMap::iterator it = optionFilters.begin(); it != optionFilters.end(); it++) {
+01003 <font class="keywordflow">if</font> ((*it).second-&gt;getOptionName()) {
+01004 <font class="keywordflow">if</font> (!stricmp(option, (*it).second-&gt;getOptionName()))
+01005 <font class="keywordflow">return</font> (*it).second-&gt;getOptionTip();
+01006 }
+01007 }
+01008 <font class="keywordflow">return</font> 0;
+01009 }
+01010
+01011
+<a name="l01012"></a><a class="code" href="class_s_w_mgr.html#a9">01012</a> OptionsList <a class="code" href="class_s_w_mgr.html#a9">SWMgr::getGlobalOptions</a>()
+01013 {
+01014 <font class="keywordflow">return</font> options;
+01015 }
+01016
+01017
+01018 OptionsList SWMgr::getGlobalOptionValues(<font class="keyword">const</font> <font class="keywordtype">char</font> *option)
+01019 {
+01020 OptionsList options;
+01021 <font class="keywordflow">for</font> (FilterMap::iterator it = optionFilters.begin(); it != optionFilters.end(); it++) {
+01022 <font class="keywordflow">if</font> ((*it).second-&gt;getOptionName()) {
+01023 <font class="keywordflow">if</font> (!stricmp(option, (*it).second-&gt;getOptionName())) {
+01024 options = (*it).second-&gt;getOptionValues();
+01025 <font class="keywordflow">break</font>; <font class="comment">// just find the first one. All option filters with the same option name should expect the same values</font>
+01026 }
+01027 }
+01028 }
+01029 <font class="keywordflow">return</font> options;
+01030 }
+01031
+01032
+<a name="l01033"></a><a class="code" href="class_s_w_mgr.html#a11">01033</a> <font class="keywordtype">signed</font> <font class="keywordtype">char</font> <a class="code" href="class_s_w_mgr.html#a11">SWMgr::setCipherKey</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *modName, <font class="keyword">const</font> <font class="keywordtype">char</font> *key) {
+01034 FilterMap::iterator it;
+01035 ModMap::iterator it2;
+01036
+01037 <font class="comment">// check for filter that already exists</font>
+01038 it = cipherFilters.find(modName);
+01039 <font class="keywordflow">if</font> (it != cipherFilters.end()) {
+01040 ((CipherFilter *)(*it).second)-&gt;getCipher()-&gt;setCipherKey(key);
+01041 <font class="keywordflow">return</font> 0;
+01042 }
+01043 <font class="comment">// check if module exists</font>
+01044 <font class="keywordflow">else</font> {
+01045 it2 = <a class="code" href="class_s_w_mgr.html#m2">Modules</a>.find(modName);
+01046 <font class="keywordflow">if</font> (it2 != <a class="code" href="class_s_w_mgr.html#m2">Modules</a>.end()) {
+01047 SWFilter *cipherFilter = <font class="keyword">new</font> CipherFilter(key);
+01048 cipherFilters.insert(FilterMap::value_type(modName, cipherFilter));
+01049 cleanupFilters.push_back(cipherFilter);
+01050 (*it2).second-&gt;AddRawFilter(cipherFilter);
+01051 <font class="keywordflow">return</font> 0;
+01052 }
+01053 }
+01054 <font class="keywordflow">return</font> -1;
+01055 }
+</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>