view docs/scripts/html/code/SDFilesToHTML.html @ 0:4816e4a8ae95 draft default tip

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:23:18 -0500
parents
children
line wrap: on
line source

<html>
<head>
<title>MayaChemTools:Code:SDFilesToHTML.pl</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../css/MayaChemToolsCode.css">
</head>
<body leftmargin="20" rightmargin="20" topmargin="10" bottommargin="10">
<br/>
<center>
<a href="http://www.mayachemtools.org" title="MayaChemTools Home"><img src="../../../images/MayaChemToolsLogo.gif" border="0" alt="MayaChemTools"></a>
</center>
<br/>
<pre>
   1 #!/usr/bin/perl -w
   2 <span class="c">#</span>
   3 <span class="c"># $RCSfile: SDFilesToHTML.pl,v $</span>
   4 <span class="c"># $Date: 2015/02/28 20:46:20 $</span>
   5 <span class="c"># $Revision: 1.50 $</span>
   6 <span class="c">#</span>
   7 <span class="c"># Author: Manish Sud &lt;msud@san.rr.com&gt;</span>
   8 <span class="c">#</span>
   9 <span class="c"># Copyright (C) 2015 Manish Sud. All rights reserved.</span>
  10 <span class="c">#</span>
  11 <span class="c"># This file is part of MayaChemTools.</span>
  12 <span class="c">#</span>
  13 <span class="c"># MayaChemTools is free software; you can redistribute it and/or modify it under</span>
  14 <span class="c"># the terms of the GNU Lesser General Public License as published by the Free</span>
  15 <span class="c"># Software Foundation; either version 3 of the License, or (at your option) any</span>
  16 <span class="c"># later version.</span>
  17 <span class="c">#</span>
  18 <span class="c"># MayaChemTools is distributed in the hope that it will be useful, but without</span>
  19 <span class="c"># any warranty; without even the implied warranty of merchantability of fitness</span>
  20 <span class="c"># for a particular purpose.  See the GNU Lesser General Public License for more</span>
  21 <span class="c"># details.</span>
  22 <span class="c">#</span>
  23 <span class="c"># You should have received a copy of the GNU Lesser General Public License</span>
  24 <span class="c"># along with MayaChemTools; if not, see &lt;http://www.gnu.org/licenses/&gt; or</span>
  25 <span class="c"># write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,</span>
  26 <span class="c"># Boston, MA, 02111-1307, USA.</span>
  27 <span class="c">#</span>
  28 
  29 <span class="k">use</span> <span class="w">strict</span><span class="sc">;</span>
  30 <span class="k">use</span> <span class="w">FindBin</span><span class="sc">;</span> <span class="k">use</span> <span class="w">lib</span> <span class="q">&quot;$FindBin::Bin/../lib&quot;</span><span class="sc">;</span>
  31 <span class="k">use</span> <span class="w">Getopt::Long</span><span class="sc">;</span>
  32 <span class="k">use</span> <span class="w">File::Basename</span><span class="sc">;</span>
  33 <span class="k">use</span> <span class="w">File::Spec</span><span class="sc">;</span>
  34 <span class="k">use</span> <span class="w">Text::ParseWords</span><span class="sc">;</span>
  35 <span class="k">use</span> <span class="w">Benchmark</span><span class="sc">;</span>
  36 <span class="k">use</span> <span class="w">Cwd</span><span class="sc">;</span>
  37 <span class="k">use</span> <span class="w">FileUtil</span><span class="sc">;</span>
  38 <span class="k">use</span> <span class="w">SDFileUtil</span><span class="sc">;</span>
  39 <span class="k">use</span> <span class="w">TextUtil</span><span class="sc">;</span>
  40 <span class="k">use</span> <span class="w">HTMLUtil</span><span class="sc">;</span>
  41 
  42 <span class="k">my</span><span class="s">(</span><span class="i">$ScriptName</span><span class="cm">,</span> <span class="i">%Options</span><span class="cm">,</span> <span class="i">$StartTime</span><span class="cm">,</span> <span class="i">$EndTime</span><span class="cm">,</span> <span class="i">$TotalTime</span><span class="s">)</span><span class="sc">;</span>
  43 
  44 <span class="c"># Autoflush STDOUT</span>
  45 <span class="i">$|</span> = <span class="n">1</span><span class="sc">;</span>
  46 
  47 <span class="c"># Starting message...</span>
  48 <span class="i">$ScriptName</span> = <span class="i">basename</span><span class="s">(</span><span class="i">$0</span><span class="s">)</span><span class="sc">;</span>
  49 <span class="k">print</span> <span class="q">&quot;\n$ScriptName: Starting...\n\n&quot;</span><span class="sc">;</span>
  50 <span class="i">$StartTime</span> = <span class="w">new</span> <span class="w">Benchmark</span><span class="sc">;</span>
  51 
  52 <span class="c"># Get the options and setup script...</span>
  53 <span class="i">SetupScriptUsage</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
  54 <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">help</span>} || <span class="i">@ARGV</span> &lt; <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
  55   <span class="k">die</span> <span class="i">GetUsageFromPod</span><span class="s">(</span><span class="q">&quot;$FindBin::Bin/$ScriptName&quot;</span><span class="s">)</span><span class="sc">;</span>
  56 <span class="s">}</span>
  57 
  58 <span class="k">my</span><span class="s">(</span><span class="i">@SDFilesList</span><span class="s">)</span><span class="sc">;</span>
  59 <span class="i">@SDFilesList</span> = <span class="i">ExpandFileNames</span><span class="s">(</span>\<span class="i">@ARGV</span><span class="cm">,</span> <span class="q">&quot;sdf sd&quot;</span><span class="s">)</span><span class="sc">;</span>
  60 
  61 <span class="c">#Make sure appropriate mode specific option values are specified...</span>
  62 <span class="k">print</span> <span class="q">&quot;Processing options...\n&quot;</span><span class="sc">;</span>
  63 <span class="k">my</span><span class="s">(</span><span class="i">%OptionsInfo</span><span class="s">)</span><span class="sc">;</span>
  64 <span class="i">ProcessOptions</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
  65 
  66 <span class="c"># Collect information about SD files...</span>
  67 <span class="k">print</span> <span class="q">&quot;Checking input SD file(s)...\n&quot;</span><span class="sc">;</span>
  68 <span class="k">my</span><span class="s">(</span><span class="i">%SDFilesInfo</span><span class="s">)</span><span class="sc">;</span>
  69 <span class="i">RetrieveSDFilesInfo</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
  70 <span class="i">SetupMultipleTablesAndMiscInfo</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
  71 
  72 <span class="c"># Generate output files...</span>
  73 <span class="k">my</span><span class="s">(</span><span class="i">$FileIndex</span><span class="s">)</span><span class="sc">;</span>
  74 <span class="k">if</span> <span class="s">(</span><span class="i">@SDFilesList</span> &gt; <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
  75   <span class="k">print</span> <span class="q">&quot;\nProcessing SD files...\n&quot;</span><span class="sc">;</span>
  76 <span class="s">}</span>
  77 <span class="k">for</span> <span class="i">$FileIndex</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#SDFilesList</span><span class="s">)</span> <span class="s">{</span>
  78   <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$FileIndex</span>]<span class="s">)</span> <span class="s">{</span>
  79     <span class="k">print</span> <span class="q">&quot;\nProcessing file $SDFilesList[$FileIndex]...\n&quot;</span><span class="sc">;</span>
  80     <span class="i">GenerateHTMLTable</span><span class="s">(</span><span class="i">$FileIndex</span><span class="s">)</span><span class="sc">;</span>
  81   <span class="s">}</span>
  82 <span class="s">}</span>
  83 <span class="k">print</span> <span class="q">&quot;\n$ScriptName:Done...\n\n&quot;</span><span class="sc">;</span>
  84 
  85 <span class="i">$EndTime</span> = <span class="w">new</span> <span class="w">Benchmark</span><span class="sc">;</span>
  86 <span class="i">$TotalTime</span> = <span class="w">timediff</span> <span class="s">(</span><span class="i">$EndTime</span><span class="cm">,</span> <span class="i">$StartTime</span><span class="s">)</span><span class="sc">;</span>
  87 <span class="k">print</span> <span class="q">&quot;Total time: &quot;</span><span class="cm">,</span> <span class="i">timestr</span><span class="s">(</span><span class="i">$TotalTime</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;\n&quot;</span><span class="sc">;</span>
  88 
  89 <span class="c">###############################################################################</span>
  90 
  91 <span class="c"># Generate HTML table(s)...</span>
<a name="GenerateHTMLTable-"></a>  92 <span class="k">sub </span><span class="m">GenerateHTMLTable</span> <span class="s">{</span>
  93   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
  94 
  95   <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}[<span class="i">$Index</span>]<span class="s">)</span> <span class="s">{</span>
  96     <span class="i">GenerateMultipleHTMLTables</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
  97   <span class="s">}</span>
  98   <span class="k">else</span> <span class="s">{</span>
  99     <span class="i">GenerateOneHTMLTable</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
 100   <span class="s">}</span>
 101 <span class="s">}</span>
 102 
 103 <span class="c"># Generate one HTML table...</span>
<a name="GenerateOneHTMLTable-"></a> 104 <span class="k">sub </span><span class="m">GenerateOneHTMLTable</span> <span class="s">{</span>
 105   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 106   <span class="k">my</span><span class="s">(</span><span class="i">$SDFile</span><span class="cm">,</span> <span class="i">$TopHTMLDir</span><span class="cm">,</span> <span class="i">$HTMLFile</span><span class="cm">,</span> <span class="i">$StartCmpdNum</span><span class="cm">,</span> <span class="i">$EndCmpdNum</span><span class="cm">,</span> <span class="i">$CSSFile</span><span class="cm">,</span> <span class="i">$CSSRef</span><span class="cm">,</span> <span class="i">$CSSFilePath</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="s">)</span><span class="sc">;</span>
 107 
 108   <span class="i">$HTMLFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
 109   <span class="i">$SDFile</span> = <span class="i">$SDFilesList</span>[<span class="i">$Index</span>]<span class="sc">;</span>
 110 
 111   <span class="c"># Setup data directories...</span>
 112   <span class="s">(</span><span class="i">$TopHTMLDir</span><span class="s">)</span> = <span class="i">SetupDataDirs</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
 113 
 114   <span class="c"># Setup stylesheet file...</span>
 115   <span class="i">$CSSRef</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 116   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">stylesheet</span>} =~ <span class="q">/^new$/i</span><span class="s">)</span> <span class="s">{</span>
 117     <span class="i">$CSSFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;.css&quot;</span><span class="sc">;</span> <span class="i">$CSSRef</span> = <span class="q">&quot;.\/&quot;</span> . <span class="q">&quot;$CSSFile&quot;</span><span class="sc">;</span>
 118     <span class="i">$CSSFilePath</span> = <span class="q">&quot;$TopHTMLDir&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="i">$CSSFile</span><span class="sc">;</span>
 119     <span class="i">GenerateStyleSheetFile</span><span class="s">(</span><span class="i">$CSSFilePath</span><span class="s">)</span><span class="sc">;</span>
 120   <span class="s">}</span>
 121   <span class="k">elsif</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">stylesheet</span>} =~ <span class="q">/^old$/i</span><span class="s">)</span> <span class="s">{</span>
 122     <span class="i">$CSSRef</span> = <span class="i">$Options</span>{<span class="w">stylesheetname</span>}<span class="sc">;</span>
 123   <span class="s">}</span>
 124 
 125   <span class="c"># Set HTML file location...</span>
 126   <span class="i">$HTMLFile</span> = <span class="q">&quot;$TopHTMLDir&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
 127 
 128   <span class="k">print</span> <span class="q">&quot;Generating HTML file $HTMLFile...\n&quot;</span><span class="sc">;</span>
 129   <span class="k">open</span> <span class="w">HTMLFILE</span><span class="cm">,</span> <span class="q">&quot;&gt;$HTMLFile&quot;</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Can&#39;t open $HTMLFile: $! \n&quot;</span><span class="sc">;</span>
 130   <span class="k">open</span> <span class="w">SDFILE</span><span class="cm">,</span> <span class="q">&quot;$SDFile&quot;</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Can&#39;t open $SDFile: $! \n&quot;</span><span class="sc">;</span>
 131 
 132   <span class="c"># Write out HTML page header...</span>
 133   <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLPageHeader</span><span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">HTMLTitle</span>}[<span class="i">$Index</span>]<span class="cm">,</span> <span class="i">$CSSRef</span><span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerJSFileRef</span>}<span class="s">)</span><span class="sc">;</span>
 134 
 135   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerJSFileRef</span>}<span class="s">)</span> <span class="s">{</span>
 136     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupStrViewerJSInitCmd</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerCodeBase</span>}<span class="s">)</span><span class="sc">;</span>
 137   <span class="s">}</span>
 138 
 139   <span class="c"># Setup page title...</span>
 140   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">TitleDisplay</span>}<span class="s">)</span> <span class="s">{</span>
 141     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLPageTitle</span><span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">HTMLTitle</span>}[<span class="i">$Index</span>]<span class="s">)</span><span class="sc">;</span>
 142   <span class="s">}</span>
 143   <span class="k">else</span> <span class="s">{</span>
 144     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLEmptyLines</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 145   <span class="s">}</span>
 146 
 147   <span class="c"># Start the table...</span>
 148   <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLAlignmentBegin</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 149   <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLTableHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">TableBorder</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TableCellPadding</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TableCellSpacing</span>}<span class="s">)</span><span class="sc">;</span>
 150 
 151   <span class="c"># Generate table rows...</span>
 152   <span class="i">$StartCmpdNum</span> = <span class="n">1</span><span class="sc">;</span>
 153   <span class="i">$EndCmpdNum</span> = <span class="i">$SDFilesInfo</span>{<span class="w">CmpdCount</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
 154   <span class="i">$TableNum</span> = <span class="n">1</span><span class="sc">;</span>
 155   <span class="i">GenerateTableRows</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$StartCmpdNum</span><span class="cm">,</span> <span class="i">$EndCmpdNum</span><span class="cm">,</span> \<span class="i">*SDFILE</span><span class="cm">,</span> \<span class="i">*HTMLFILE</span><span class="s">)</span><span class="sc">;</span>
 156 
 157   <span class="c"># Finish up the table...</span>
 158   <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLTableEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 159   <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLAlignmentEnd</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 160 
 161   <span class="c"># Write out HTML page end...</span>
 162   <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLPageEnd</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">FooterMsg</span>}<span class="s">)</span><span class="sc">;</span>
 163 
 164   <span class="k">close</span> <span class="w">HTMLFILE</span><span class="sc">;</span>
 165   <span class="k">close</span> <span class="w">SDFILE</span><span class="sc">;</span>
 166 <span class="s">}</span>
 167 
 168 <span class="c"># Generate multiple tables...</span>
<a name="GenerateMultipleHTMLTables-"></a> 169 <span class="k">sub </span><span class="m">GenerateMultipleHTMLTables</span> <span class="s">{</span>
 170   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 171   <span class="k">my</span><span class="s">(</span><span class="i">$TopHTMLDir</span><span class="cm">,</span> <span class="i">$SubHTMLDir</span><span class="cm">,</span> <span class="i">$SDFile</span><span class="cm">,</span> <span class="i">$HTMLFile</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$TableCount</span><span class="cm">,</span> <span class="i">$TableIndex</span><span class="cm">,</span> <span class="i">$TableStartCmpdNum</span><span class="cm">,</span> <span class="i">$TableEndCmpdNum</span><span class="cm">,</span> <span class="i">$PrintMsg</span><span class="cm">,</span> <span class="i">$CSSFile</span><span class="cm">,</span> <span class="i">$CSSRef</span><span class="cm">,</span> <span class="i">$CSSFilePath</span><span class="cm">,</span> <span class="i">$NewStyleSheet</span><span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="cm">,</span> <span class="i">$StrViewerJSFileRef</span><span class="s">)</span><span class="sc">;</span>
 172 
 173   <span class="c"># Open SD file...</span>
 174   <span class="i">$SDFile</span> = <span class="i">$SDFilesList</span>[<span class="i">$Index</span>]<span class="sc">;</span>
 175   <span class="k">open</span> <span class="w">SDFILE</span><span class="cm">,</span> <span class="q">&quot;$SDFile&quot;</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Can&#39;t open $SDFile: $! \n&quot;</span><span class="sc">;</span>
 176 
 177   <span class="c"># Set up data directories to hold various html files...</span>
 178   <span class="s">(</span><span class="i">$TopHTMLDir</span><span class="cm">,</span> <span class="i">$SubHTMLDir</span><span class="s">)</span> = <span class="i">SetupDataDirs</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
 179 
 180   <span class="c"># Create stylesheet file...</span>
 181   <span class="i">$CSSRef</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 182   <span class="i">$NewStyleSheet</span> = <span class="n">0</span><span class="sc">;</span>
 183   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">stylesheet</span>} =~ <span class="q">/^new$/i</span><span class="s">)</span> <span class="s">{</span>
 184     <span class="i">$NewStyleSheet</span> = <span class="n">1</span><span class="sc">;</span>
 185     <span class="i">$CSSFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;.css&quot;</span><span class="sc">;</span>
 186     <span class="i">$CSSFilePath</span> = <span class="q">&quot;$TopHTMLDir&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="i">$CSSFile</span><span class="sc">;</span>
 187     <span class="i">GenerateStyleSheetFile</span><span class="s">(</span><span class="i">$CSSFilePath</span><span class="s">)</span><span class="sc">;</span>
 188   <span class="s">}</span>
 189   <span class="k">elsif</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">stylesheet</span>} =~ <span class="q">/^old$/i</span><span class="s">)</span> <span class="s">{</span>
 190     <span class="i">$CSSRef</span> = <span class="i">$Options</span>{<span class="w">stylesheetname</span>}<span class="sc">;</span>
 191   <span class="s">}</span>
 192 
 193   <span class="i">$PrintMsg</span> = <span class="n">1</span><span class="sc">;</span>
 194   <span class="c"># Generate HTML files for all the tables...</span>
 195   <span class="i">$TableCount</span> = <span class="i">$SDFilesInfo</span>{<span class="w">TableCount</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
 196   <span class="k">for</span> <span class="i">$TableNum</span> <span class="s">(</span><span class="n">1</span> .. <span class="i">$TableCount</span><span class="s">)</span> <span class="s">{</span>
 197     <span class="i">$TableIndex</span> = <span class="i">$TableNum</span> - <span class="n">1</span><span class="sc">;</span>
 198     <span class="i">$HTMLFile</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}[<span class="i">$TableIndex</span>]<span class="sc">;</span>
 199     <span class="i">$TableStartCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$TableIndex</span>]<span class="sc">;</span>
 200     <span class="i">$TableEndCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$TableIndex</span>]<span class="sc">;</span>
 201 
 202     <span class="c"># Setup file name...</span>
 203     <span class="k">if</span> <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 204       <span class="i">$HTMLFile</span> = <span class="q">&quot;$TopHTMLDir&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
 205       <span class="k">print</span> <span class="q">&quot;Generating HTML file $HTMLFile...\n&quot;</span><span class="sc">;</span>
 206     <span class="s">}</span>
 207     <span class="k">else</span> <span class="s">{</span>
 208       <span class="i">$HTMLFile</span> = <span class="q">&quot;$SubHTMLDir&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
 209       <span class="k">if</span> <span class="s">(</span><span class="i">$PrintMsg</span><span class="s">)</span> <span class="s">{</span>
 210         <span class="i">$PrintMsg</span> = <span class="n">0</span><span class="sc">;</span>
 211         <span class="k">if</span> <span class="s">(</span><span class="i">$TableCount</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
 212           <span class="k">print</span> <span class="q">&quot;Generating HTML file $HTMLFile...\n&quot;</span><span class="sc">;</span>
 213         <span class="s">}</span>
 214         <span class="k">else</span> <span class="s">{</span>
 215           <span class="k">print</span> <span class="q">&quot;Generating &quot;</span><span class="cm">,</span> <span class="s">(</span><span class="i">$TableCount</span> - <span class="n">1</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot; other HTML files: $SubHTMLDir\/$SDFilesInfo{HTMLRoot}[$Index]\*.html...\n&quot;</span><span class="sc">;</span>
 216         <span class="s">}</span>
 217       <span class="s">}</span>
 218     <span class="s">}</span>
 219     <span class="c"># Setup stylesheet reference...</span>
 220     <span class="k">if</span> <span class="s">(</span><span class="i">$NewStyleSheet</span><span class="s">)</span> <span class="s">{</span>
 221       <span class="i">$CSSRef</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="q">&quot;.\/&quot;</span> <span class="co">:</span> <span class="q">&quot;..\/&quot;</span><span class="sc">;</span>
 222       <span class="i">$CSSRef</span> .= <span class="i">$CSSFile</span><span class="sc">;</span>
 223     <span class="s">}</span>
 224 
 225     <span class="k">open</span> <span class="w">HTMLFILE</span><span class="cm">,</span> <span class="q">&quot;&gt;$HTMLFile&quot;</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Can&#39;t open $HTMLFile: $! \n&quot;</span><span class="sc">;</span>
 226     <span class="c"># Write out HTML page header...</span>
 227     <span class="i">$StrViewerJSFileRef</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerJSFileRef</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerJSFileRef</span>}<span class="sc">;</span>
 228     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLPageHeader</span><span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">HTMLTitle</span>}[<span class="i">$Index</span>]<span class="cm">,</span> <span class="i">$CSSRef</span><span class="cm">,</span> <span class="i">$StrViewerJSFileRef</span><span class="s">)</span><span class="sc">;</span>
 229 
 230     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerJSFileRef</span>}<span class="s">)</span> <span class="s">{</span>
 231       <span class="i">$StrViewerCodeBase</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerCodeBase</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerCodeBase</span>}<span class="sc">;</span>
 232       <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupStrViewerJSInitCmd</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>}<span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="s">)</span><span class="sc">;</span>
 233     <span class="s">}</span>
 234 
 235     <span class="c"># Set up the navigation links for this table...</span>
 236     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">NavLinksAtTop</span>}<span class="s">)</span> <span class="s">{</span>
 237       <span class="i">WriteNavigationLinks</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> \<span class="i">*HTMLFILE</span><span class="s">)</span><span class="sc">;</span>
 238     <span class="s">}</span>
 239     <span class="c"># Setup page title...</span>
 240     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">TitleDisplay</span>}<span class="s">)</span> <span class="s">{</span>
 241       <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLPageTitle</span><span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">HTMLTitle</span>}[<span class="i">$Index</span>]<span class="s">)</span><span class="sc">;</span>
 242     <span class="s">}</span>
 243     <span class="k">else</span> <span class="s">{</span>
 244       <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLEmptyLines</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 245     <span class="s">}</span>
 246 
 247     <span class="c"># Start the table...</span>
 248     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLAlignmentBegin</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 249     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLTableHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">TableBorder</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TableCellPadding</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TableCellSpacing</span>}<span class="s">)</span><span class="sc">;</span>
 250 
 251     <span class="c"># Generate table content...</span>
 252     <span class="i">GenerateTableRows</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$TableStartCmpdNum</span><span class="cm">,</span> <span class="i">$TableEndCmpdNum</span><span class="cm">,</span> \<span class="i">*SDFILE</span><span class="cm">,</span> \<span class="i">*HTMLFILE</span><span class="s">)</span><span class="sc">;</span>
 253 
 254     <span class="c"># Finish up the table...</span>
 255     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLTableEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 256     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLAlignmentEnd</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 257 
 258     <span class="c"># Set up the navigation links for this table...</span>
 259     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">NavLinksAtBottom</span>}<span class="s">)</span> <span class="s">{</span>
 260       <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLEmptyLines</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 261       <span class="i">WriteNavigationLinks</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> \<span class="i">*HTMLFILE</span><span class="s">)</span><span class="sc">;</span>
 262     <span class="s">}</span>
 263 
 264     <span class="c"># Write out HTML page end...</span>
 265     <span class="k">print</span> <span class="i">HTMLFILE</span> <span class="i">SetupHTMLPageEnd</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">FooterMsg</span>}<span class="s">)</span><span class="sc">;</span>
 266     <span class="k">close</span> <span class="w">HTMLFILE</span><span class="sc">;</span>
 267   <span class="s">}</span>
 268   <span class="k">close</span> <span class="w">SDFILE</span><span class="sc">;</span>
 269 
 270 <span class="s">}</span>
 271 
 272 <span class="c"># Generate table content...</span>
<a name="GenerateTableRows-"></a> 273 <span class="k">sub </span><span class="m">GenerateTableRows</span> <span class="s">{</span>
 274   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$StartCmpdNum</span><span class="cm">,</span> <span class="i">$EndCmpdNum</span><span class="cm">,</span> <span class="i">$SDFileRef</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 275 
 276   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StructuresOnlyMode</span>}<span class="s">)</span> <span class="s">{</span>
 277     <span class="i">WriteRowStructures</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$StartCmpdNum</span><span class="cm">,</span> <span class="i">$EndCmpdNum</span><span class="cm">,</span> <span class="i">$SDFileRef</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 278   <span class="s">}</span>
 279   <span class="k">else</span> <span class="s">{</span>
 280     <span class="i">WriteColLabels</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$SDFileRef</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 281     <span class="i">WriteRowValues</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$StartCmpdNum</span><span class="cm">,</span> <span class="i">$EndCmpdNum</span><span class="cm">,</span> <span class="i">$SDFileRef</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 282   <span class="s">}</span>
 283 <span class="s">}</span>
 284 
 285 <span class="c"># Create stylesheet file...</span>
<a name="GenerateStyleSheetFile-"></a> 286 <span class="k">sub </span><span class="m">GenerateStyleSheetFile</span> <span class="s">{</span>
 287   <span class="k">my</span><span class="s">(</span><span class="i">$CSSFile</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 288     <span class="k">print</span> <span class="q">&quot;Generating stylesheet file $CSSFile...\n&quot;</span><span class="sc">;</span>
 289     <span class="k">open</span> <span class="w">CSSFILE</span><span class="cm">,</span> <span class="q">&quot;&gt;$CSSFile&quot;</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Can&#39;t open $CSSFile: $! \n&quot;</span><span class="sc">;</span>
 290     <span class="k">print</span> <span class="i">CSSFILE</span> <span class="i">SetupHTMLStyleSheetTags</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 291     <span class="k">close</span> <span class="w">CSSFILE</span><span class="sc">;</span>
 292 <span class="s">}</span>
 293 
 294 <span class="c"># Write out table header using column labels...</span>
<a name="WriteColLabels-"></a> 295 <span class="k">sub </span><span class="m">WriteColLabels</span> <span class="s">{</span>
 296   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$SDFileRef</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 297 
 298   <span class="k">my</span><span class="s">(</span><span class="i">@ColLabels</span><span class="cm">,</span> <span class="i">$Label</span><span class="s">)</span><span class="sc">;</span>
 299   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">TableRowHeaderTags</span>}<span class="sc">;</span>
 300 
 301   <span class="c"># Write out structure label...</span>
 302   <span class="i">$Label</span> = <span class="q">&quot;Structure&quot;</span><span class="sc">;</span>
 303   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowHeaderValue</span><span class="s">(</span><span class="i">$Label</span><span class="s">)</span><span class="sc">;</span>
 304 
 305   <span class="c"># Write out field values..</span>
 306   <span class="i">@ColLabels</span> = <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SpecifiedDataFieldLabels</span>}[<span class="i">$Index</span>]}<span class="sc">;</span>
 307   <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@ColLabels</span><span class="s">)</span> <span class="s">{</span>
 308     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowHeaderValue</span><span class="s">(</span><span class="i">$Label</span><span class="s">)</span><span class="sc">;</span>
 309   <span class="s">}</span>
 310   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 311 <span class="s">}</span>
 312 
 313 <span class="c"># Write out the rows value...</span>
<a name="WriteRowValues-"></a> 314 <span class="k">sub </span><span class="m">WriteRowValues</span> <span class="s">{</span>
 315   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$StartCmpdNum</span><span class="cm">,</span> <span class="i">$EndCmpdNum</span><span class="cm">,</span> <span class="i">$SDFileRef</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 316   <span class="k">my</span><span class="s">(</span><span class="i">$BackgroundColor</span><span class="cm">,</span> <span class="i">$FontColor</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">@CmpdLines</span><span class="cm">,</span> <span class="i">$Label</span><span class="cm">,</span> <span class="i">%DataFieldValues</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 317 
 318   <span class="i">$RowNum</span> = <span class="n">0</span><span class="sc">;</span>
 319   <span class="k">for</span> <span class="i">$CmpdNum</span> <span class="s">(</span><span class="i">$StartCmpdNum</span> .. <span class="i">$EndCmpdNum</span><span class="s">)</span> <span class="s">{</span>
 320     <span class="i">$RowNum</span>++<span class="sc">;</span>
 321     <span class="i">$CmpdString</span> = <span class="i">ReadCmpdString</span><span class="s">(</span><span class="i">$SDFileRef</span><span class="s">)</span><span class="sc">;</span>
 322     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ShadeRowsStatus</span>}<span class="s">)</span> <span class="s">{</span>
 323       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="s">(</span><span class="i">$RowNum</span> % <span class="n">2</span><span class="s">)</span> ? <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledOddRowHeaderTags</span>} <span class="co">:</span> <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledEvenRowHeaderTags</span>}<span class="sc">;</span>
 324     <span class="s">}</span>
 325     <span class="k">else</span> <span class="s">{</span>
 326       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowHeaderTags</span>}<span class="sc">;</span>
 327     <span class="s">}</span>
 328     <span class="i">@CmpdLines</span> = <span class="k">split</span> <span class="q">&quot;\n&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 329     <span class="i">%DataFieldValues</span> = <span class="i">GetCmpdDataHeaderLabelsAndValues</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 330 
 331     <span class="c"># Setup structure column...</span>
 332     <span class="i">SetupStructureColumn</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 333     <span class="c"># Write out field values..</span>
 334     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SpecifiedDataFieldLabels</span>}[<span class="i">$Index</span>]}<span class="s">)</span> <span class="s">{</span>
 335       <span class="i">$Value</span> = <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$DataFieldValues</span>{<span class="i">$Label</span>}<span class="s">)</span><span class="s">)</span> ? <span class="i">$DataFieldValues</span>{<span class="i">$Label</span>} <span class="co">:</span> <span class="q">&quot;&quot;</span><span class="sc">;</span>
 336       <span class="i">$BackgroundColor</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span> <span class="i">$FontColor</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 337       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">HighlightStatus</span>}<span class="s">)</span> <span class="s">{</span>
 338         <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldLabelsMap</span>}{<span class="i">$Label</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 339           <span class="s">(</span><span class="i">$BackgroundColor</span><span class="cm">,</span> <span class="i">$FontColor</span><span class="s">)</span> = <span class="i">GetValueHighlightColors</span><span class="s">(</span><span class="i">$Label</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 340         <span class="s">}</span>
 341       <span class="s">}</span>
 342       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="i">$BackgroundColor</span><span class="cm">,</span> <span class="i">$FontColor</span><span class="s">)</span><span class="sc">;</span>
 343     <span class="s">}</span>
 344     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 345   <span class="s">}</span>
 346 <span class="s">}</span>
 347 
 348 <span class="c"># Write only structures...</span>
<a name="WriteRowStructures-"></a> 349 <span class="k">sub </span><span class="m">WriteRowStructures</span> <span class="s">{</span>
 350   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$StartCmpdNum</span><span class="cm">,</span> <span class="i">$EndCmpdNum</span><span class="cm">,</span> <span class="i">$SDFileRef</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 351   <span class="k">my</span><span class="s">(</span><span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$StartRowFlag</span><span class="cm">,</span> <span class="i">$ColNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$RowBgColor</span><span class="cm">,</span> <span class="i">$RowStartTags</span><span class="cm">,</span> <span class="i">$ColumnHeaderTags</span><span class="cm">,</span> <span class="i">$ColumnEndTags</span><span class="cm">,</span> <span class="i">$CmpdDataFieldValue</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileRef</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 352 
 353   <span class="i">$StartRowFlag</span> = <span class="n">1</span><span class="sc">;</span> <span class="i">$ColNum</span> = <span class="n">0</span><span class="sc">;</span> <span class="i">$RowNum</span> = <span class="n">0</span><span class="sc">;</span>
 354   <span class="i">$ColumnHeaderTags</span> = <span class="i">SetupHTMLTableColumnHeader</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 355   <span class="i">$ColumnEndTags</span> = <span class="i">SetupHTMLTableColumnEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 356 
 357   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StructuresOnlyMode</span>} &amp;&amp; !<span class="i">$OptionsInfo</span>{<span class="w">TableBorder</span>} &amp;&amp; <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">OddRowsShadeColor</span>} =~ <span class="q">/^(#ffffff|white)$/i</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 358     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowColor</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">RowVAlignment</span>}<span class="s">)</span><span class="sc">;</span>
 359     <span class="i">$Value</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&quot;</span><span class="s">)</span><span class="sc">;</span>
 360     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="q">&quot;colspan&quot;</span><span class="cm">,</span> <span class="q">&quot;$OptionsInfo{StrTableCols}&quot;</span><span class="s">)</span><span class="sc">;</span>
 361     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 362   <span class="s">}</span>
 363 
 364   <span class="k">for</span> <span class="i">$CmpdNum</span> <span class="s">(</span><span class="i">$StartCmpdNum</span> .. <span class="i">$EndCmpdNum</span><span class="s">)</span> <span class="s">{</span>
 365     <span class="i">$CmpdString</span> = <span class="i">ReadCmpdString</span><span class="s">(</span><span class="i">$SDFileRef</span><span class="s">)</span><span class="sc">;</span>
 366     <span class="k">if</span> <span class="s">(</span><span class="i">$StartRowFlag</span><span class="s">)</span> <span class="s">{</span>
 367       <span class="i">$StartRowFlag</span> = <span class="n">0</span><span class="sc">;</span>
 368       <span class="i">$RowNum</span>++<span class="sc">;</span>
 369       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ShadeRowsStatus</span>}<span class="s">)</span> <span class="s">{</span>
 370         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="s">(</span><span class="i">$RowNum</span> % <span class="n">2</span><span class="s">)</span> ? <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledOddRowHeaderTags</span>} <span class="co">:</span> <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledEvenRowHeaderTags</span>}<span class="sc">;</span>
 371       <span class="s">}</span>
 372       <span class="k">else</span> <span class="s">{</span>
 373         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowHeaderTags</span>}<span class="sc">;</span>
 374       <span class="s">}</span>
 375     <span class="s">}</span>
 376     <span class="i">$ColNum</span>++<span class="sc">;</span>
 377 
 378     <span class="i">$CmpdDataFieldValue</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 379     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataField</span>}<span class="s">)</span> <span class="s">{</span>
 380       <span class="k">my</span><span class="s">(</span><span class="i">$CmpdDataField</span><span class="cm">,</span> <span class="i">@CmpdLines</span><span class="cm">,</span> <span class="i">%DataFieldValues</span><span class="s">)</span><span class="sc">;</span>
 381       <span class="i">$CmpdDataField</span> = <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataField</span>}<span class="sc">;</span>
 382       <span class="i">@CmpdLines</span> = <span class="k">split</span> <span class="q">&quot;\n&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 383       <span class="i">%DataFieldValues</span> = <span class="i">GetCmpdDataHeaderLabelsAndValues</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 384       <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$DataFieldValues</span>{<span class="i">$CmpdDataField</span>}<span class="s">)</span> &amp;&amp; <span class="k">length</span><span class="s">(</span><span class="i">$DataFieldValues</span>{<span class="i">$CmpdDataField</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 385         <span class="i">$CmpdDataFieldValue</span> = <span class="i">$DataFieldValues</span>{<span class="i">$CmpdDataField</span>}<span class="sc">;</span>
 386         <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldLabel</span>} =~ <span class="q">/^yes$/i</span><span class="s">)</span> <span class="s">{</span>
 387           <span class="i">$CmpdDataFieldValue</span> = <span class="q">&quot;${CmpdDataField}: ${CmpdDataFieldValue}&quot;</span><span class="sc">;</span>
 388         <span class="s">}</span>
 389         <span class="c"># Make sure it&#39;s not to looong...</span>
 390         <span class="k">if</span> <span class="s">(</span><span class="k">length</span><span class="s">(</span><span class="i">$CmpdDataFieldValue</span><span class="s">)</span> &gt; <span class="n">30</span><span class="s">)</span> <span class="s">{</span>
 391           <span class="i">$CmpdDataFieldValue</span> = <span class="k">substr</span><span class="s">(</span><span class="i">$CmpdDataFieldValue</span><span class="cm">,</span> <span class="n">0</span><span class="cm">,</span> <span class="n">30</span><span class="s">)</span> . <span class="q">&quot;...&quot;</span><span class="sc">;</span>
 392         <span class="s">}</span>
 393       <span class="s">}</span>
 394     <span class="s">}</span>
 395     <span class="k">if</span> <span class="s">(</span><span class="i">$CmpdDataFieldValue</span><span class="s">)</span> <span class="s">{</span>
 396       <span class="i">$RowBgColor</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 397       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ShadeRowsStatus</span>}<span class="s">)</span> <span class="s">{</span>
 398         <span class="i">$RowBgColor</span> = <span class="s">(</span><span class="i">$RowNum</span> % <span class="n">2</span><span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">OddRowsShadeColor</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">EvenRowsShadeColor</span>}<span class="sc">;</span>
 399       <span class="s">}</span>
 400       <span class="i">$RowStartTags</span> = <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldAlignment</span>}<span class="cm">,</span> <span class="i">$RowBgColor</span><span class="cm">,</span> <span class="q">&quot;middle&quot;</span><span class="s">)</span><span class="sc">;</span>
 401       <span class="c"># Start  a new table in current column...</span>
 402       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ColumnHeaderTags</span><span class="sc">;</span>
 403       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLAlignmentBegin</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 404       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableHeader</span><span class="s">(</span><span class="n">0</span><span class="cm">,</span> <span class="n">0</span><span class="cm">,</span> <span class="n">0</span><span class="s">)</span><span class="sc">;</span>
 405 
 406       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldPosition</span>} =~ <span class="q">/^top$/i</span> <span class="s">)</span> <span class="s">{</span>
 407         <span class="c"># Add an empty row...</span>
 408         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$RowStartTags</span><span class="sc">;</span>
 409         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&quot;</span><span class="s">)</span><span class="sc">;</span>
 410         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 411 
 412         <span class="c"># Display the label value...</span>
 413         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$RowStartTags</span><span class="sc">;</span>
 414         <span class="i">$CmpdHTMLFileRef</span> = <span class="i">SetupCompoundSummaryFileAndLink</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="s">)</span><span class="sc">;</span>
 415         <span class="i">$Value</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;$CmpdDataFieldValue&quot;</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileRef</span><span class="cm">,</span> <span class="q">&quot;Compound Summary&quot;</span><span class="s">)</span><span class="sc">;</span>
 416         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 417         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 418       <span class="s">}</span>
 419       <span class="c"># Display the structure...</span>
 420       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="cm">,</span> <span class="i">$RowBgColor</span><span class="cm">,</span> <span class="q">&quot;middle&quot;</span><span class="s">)</span><span class="sc">;</span>
 421       <span class="i">SetupStructureDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 422       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 423 
 424       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldPosition</span>} =~ <span class="q">/^bottom$/i</span> <span class="s">)</span> <span class="s">{</span>
 425         <span class="c"># Display the label value...</span>
 426         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$RowStartTags</span><span class="sc">;</span>
 427         <span class="i">$CmpdHTMLFileRef</span> = <span class="i">SetupCompoundSummaryFileAndLink</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="s">)</span><span class="sc">;</span>
 428         <span class="i">$Value</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;$CmpdDataFieldValue&quot;</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileRef</span><span class="cm">,</span> <span class="q">&quot;Compound Summary&quot;</span><span class="s">)</span><span class="sc">;</span>
 429         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 430         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 431 
 432         <span class="c"># Add an empty row...</span>
 433         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$RowStartTags</span><span class="sc">;</span>
 434         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&quot;</span><span class="s">)</span><span class="sc">;</span>
 435         <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 436       <span class="s">}</span>
 437 
 438       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 439       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLAlignmentEnd</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 440       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ColumnEndTags</span><span class="sc">;</span>
 441     <span class="s">}</span>
 442     <span class="k">else</span> <span class="s">{</span>
 443       <span class="i">SetupStructureDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 444     <span class="s">}</span>
 445 
 446     <span class="k">if</span> <span class="s">(</span><span class="i">$ColNum</span> == <span class="i">$OptionsInfo</span>{<span class="w">StrTableCols</span>}<span class="s">)</span> <span class="s">{</span>
 447       <span class="c"># Finish up the current row and get ready for starting a new row...</span>
 448       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 449       <span class="i">$ColNum</span> = <span class="n">0</span><span class="sc">;</span>
 450       <span class="i">$StartRowFlag</span> = <span class="n">1</span><span class="sc">;</span>
 451     <span class="s">}</span>
 452   <span class="s">}</span>
 453   <span class="k">if</span> <span class="s">(</span>!<span class="i">$StartRowFlag</span><span class="s">)</span> <span class="s">{</span>
 454     <span class="c"># Finish up an existing row...</span>
 455     <span class="k">my</span><span class="s">(</span><span class="i">$ColIndex</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 456     <span class="i">$Value</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 457     <span class="k">for</span> <span class="i">$ColIndex</span> <span class="s">(</span><span class="i">$ColNum</span> .. <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrTableCols</span>} - <span class="n">1</span><span class="s">)</span> <span class="s">)</span> <span class="s">{</span>
 458       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 459     <span class="s">}</span>
 460     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 461   <span class="s">}</span>
 462 <span class="s">}</span>
 463 
 464 <span class="c"># Setup structure column...</span>
<a name="SetupStructureColumn-"></a> 465 <span class="k">sub </span><span class="m">SetupStructureColumn</span> <span class="s">{</span>
 466   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 467 
 468   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">DisplayStructure</span>}<span class="s">)</span> <span class="s">{</span>
 469     <span class="i">SetupStructureDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 470   <span class="s">}</span>
 471   <span class="k">else</span> <span class="s">{</span>
 472     <span class="i">SetupStructureLink</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 473   <span class="s">}</span>
 474 <span class="s">}</span>
 475 
 476 <span class="c"># Setup structure display for compound summary page...</span>
<a name="SetupStructureDisplayForCmpdSummaryPage-"></a> 477 <span class="k">sub </span><span class="m">SetupStructureDisplayForCmpdSummaryPage</span> <span class="s">{</span>
 478   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 479   <span class="k">my</span><span class="s">(</span><span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="s">)</span><span class="sc">;</span>
 480 
 481   <span class="c"># Use table num 0 to force usage of &quot;../mol&quot; prefix for all MOL file references. Row num</span>
 482   <span class="c"># doesn&#39;t matter...</span>
 483   <span class="i">$TableNum</span> = <span class="n">0</span><span class="sc">;</span>
 484   <span class="i">$RowNum</span> = <span class="n">1</span><span class="sc">;</span>
 485 
 486   <span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>} = <span class="n">1</span><span class="sc">;</span>
 487 
 488   <span class="c"># Setup size and bgcolor parameters for linking structures...</span>
 489   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">width</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrLinkWidth</span>}<span class="sc">;</span>
 490   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">height</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrLinkHeight</span>}<span class="sc">;</span>
 491   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrLinkBgColorSpecified</span>}<span class="sc">;</span>
 492 
 493   <span class="i">SetupStructureDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 494 
 495   <span class="c"># Reset size and bgcolor parameters back to displaying structures in tables...</span>
 496   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">width</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrWidth</span>}<span class="sc">;</span>
 497   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">height</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrHeight</span>}<span class="sc">;</span>
 498   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>} ? <span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>} <span class="co">:</span> <span class="q">&quot;&quot;</span><span class="sc">;</span>
 499 
 500   <span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>} = <span class="n">0</span><span class="sc">;</span>
 501 <span class="s">}</span>
 502 
 503 
 504 <span class="c"># Setup structure column display...</span>
<a name="SetupStructureDisplay-"></a> 505 <span class="k">sub </span><span class="m">SetupStructureDisplay</span> <span class="s">{</span>
 506   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 507   <span class="k">my</span><span class="s">(</span><span class="i">$Nothing</span><span class="s">)</span><span class="sc">;</span>
 508 
 509  <span class="j">STRVIEWERTYPE:</span> <span class="s">{</span>
 510     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^JME$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">SetupJMEDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
 511     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^Jmol$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">SetupJmolDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
 512     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^Chime$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">SetupChimeDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
 513     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^(Chem3DActiveX|ChemDrawActiveX|ChemDrawPlugIn)$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">SetupCambridgeSoftDisplay</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>}<span class="cm">,</span> <span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
 514     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^MarvinView$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">SetupMarvinDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
 515     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^ViewerActiveX$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">SetupViewerAccelrysActiveXDisplay</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
 516     <span class="i">$Nothing</span> = <span class="n">1</span><span class="sc">;</span>
 517   <span class="s">}</span>
 518 <span class="s">}</span>
 519 
 520 <span class="c"># Setup JME display...</span>
<a name="SetupJMEDisplay-"></a> 521 <span class="k">sub </span><span class="m">SetupJMEDisplay</span> <span class="s">{</span>
 522   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 523   <span class="k">my</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$AppletBGColor</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$ValueTag</span><span class="cm">,</span> <span class="i">$AppletName</span><span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="s">)</span><span class="sc">;</span>
 524 
 525   <span class="i">$Value</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 526   <span class="s">(</span><span class="i">$MolString</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 527   <span class="k">if</span> <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$MolString</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 528     <span class="i">$AppletBGColor</span> = <span class="i">SetupStructureBGColor</span><span class="s">(</span><span class="i">$RowNum</span><span class="s">)</span><span class="sc">;</span>
 529     <span class="i">$MolString</span> .= <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="sc">;</span>
 530 
 531     <span class="c"># JME viewer doesn&#39;t appear to support &quot;bgcolor&quot; param. So, always use white background for</span>
 532     <span class="c"># structure cell...</span>
 533     <span class="i">$AppletName</span> = <span class="q">&quot;JME&quot;</span> . <span class="i">$CmpdNum</span><span class="sc">;</span>
 534     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">name</span>} = <span class="i">$AppletName</span><span class="sc">;</span>
 535     <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 536       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 537         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$AppletBGColor</span><span class="sc">;</span>
 538       <span class="s">}</span>
 539     <span class="s">}</span>
 540     <span class="i">$StrViewerCodeBase</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerCodeBase</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerCodeBase</span>}<span class="sc">;</span>
 541     <span class="i">$Value</span> = <span class="i">SetupStrViewerJMEApplet</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 542     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="i">$SDFilesInfo</span>{<span class="w">White</span>}<span class="s">)</span><span class="sc">;</span>
 543   <span class="s">}</span>
 544   <span class="k">else</span> <span class="s">{</span>
 545     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 546   <span class="s">}</span>
 547   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 548     <span class="i">$ValueTag</span> = <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$ValueTag</span><span class="cm">,</span> <span class="s">(</span><span class="q">&quot;class&quot;</span><span class="cm">,</span> <span class="q">&quot;box&quot;</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
 549   <span class="s">}</span>
 550   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ValueTag</span><span class="sc">;</span>
 551 <span class="s">}</span>
 552 
 553 <span class="c"># Setup Marvin display...</span>
<a name="SetupMarvinDisplay-"></a> 554 <span class="k">sub </span><span class="m">SetupMarvinDisplay</span> <span class="s">{</span>
 555   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 556   <span class="k">my</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$AppletBGColor</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$ValueTag</span><span class="cm">,</span> <span class="i">$AppletName</span><span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="s">)</span><span class="sc">;</span>
 557 
 558   <span class="i">$Value</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 559   <span class="s">(</span><span class="i">$MolString</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 560   <span class="k">if</span> <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$MolString</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 561     <span class="i">$AppletBGColor</span> = <span class="i">SetupStructureBGColor</span><span class="s">(</span><span class="i">$RowNum</span><span class="s">)</span><span class="sc">;</span>
 562     <span class="i">$MolString</span> .= <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="sc">;</span>
 563 
 564     <span class="i">$AppletName</span> = <span class="q">&quot;MView&quot;</span> . <span class="i">$CmpdNum</span><span class="sc">;</span>
 565     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">name</span>} = <span class="i">$AppletName</span><span class="sc">;</span>
 566     <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 567       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 568         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$AppletBGColor</span><span class="sc">;</span>
 569       <span class="s">}</span>
 570     <span class="s">}</span>
 571     <span class="i">$StrViewerCodeBase</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerCodeBase</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerCodeBase</span>}<span class="sc">;</span>
 572     <span class="i">$Value</span> = <span class="i">SetupStrViewerMarvinViewApplet</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 573     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 574   <span class="s">}</span>
 575   <span class="k">else</span> <span class="s">{</span>
 576     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 577   <span class="s">}</span>
 578   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 579     <span class="i">$ValueTag</span> = <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$ValueTag</span><span class="cm">,</span> <span class="s">(</span><span class="q">&quot;class&quot;</span><span class="cm">,</span> <span class="q">&quot;box&quot;</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
 580   <span class="s">}</span>
 581   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ValueTag</span><span class="sc">;</span>
 582 <span class="s">}</span>
 583 
 584 <span class="c"># Setup Jmol display...</span>
<a name="SetupJmolDisplay-"></a> 585 <span class="k">sub </span><span class="m">SetupJmolDisplay</span> <span class="s">{</span>
 586   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 587   <span class="k">my</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$AppletBGColor</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$ValueTag</span><span class="cm">,</span> <span class="i">$AppletName</span><span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="s">)</span><span class="sc">;</span>
 588 
 589   <span class="i">$Value</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span> <span class="i">$ValueTag</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 590   <span class="s">(</span><span class="i">$MolString</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 591   <span class="k">if</span> <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$MolString</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 592     <span class="i">$AppletBGColor</span> = <span class="i">SetupStructureBGColor</span><span class="s">(</span><span class="i">$RowNum</span><span class="s">)</span><span class="sc">;</span>
 593     <span class="i">$MolString</span> .= <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="sc">;</span>
 594 
 595     <span class="c"># Make sure MolName line is not empty; otherwise, JMol doesn&#39;t display structure...</span>
 596     <span class="k">my</span><span class="s">(</span><span class="i">@MolLines</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;\n&quot;</span><span class="cm">,</span> <span class="i">$MolString</span><span class="sc">;</span>
 597     <span class="k">if</span> <span class="s">(</span><span class="i">IsEmpty</span><span class="s">(</span><span class="i">$MolLines</span>[<span class="n">0</span>]<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 598       <span class="i">$MolLines</span>[<span class="n">0</span>] = <span class="q">&quot;Cmpd${CmpdNum}&quot;</span><span class="sc">;</span>
 599       <span class="i">$MolString</span> = <span class="k">join</span> <span class="q">&quot;\n&quot;</span><span class="cm">,</span> <span class="i">@MolLines</span><span class="sc">;</span>
 600     <span class="s">}</span>
 601 
 602     <span class="c"># Setup the applet...</span>
 603     <span class="i">$AppletName</span> = <span class="q">&quot;Jmol&quot;</span> . <span class="i">$CmpdNum</span><span class="sc">;</span>
 604     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">name</span>} = <span class="i">$AppletName</span><span class="sc">;</span>
 605     <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 606       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 607         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$AppletBGColor</span><span class="sc">;</span>
 608       <span class="s">}</span>
 609     <span class="s">}</span>
 610     <span class="i">$StrViewerCodeBase</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerCodeBase</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerCodeBase</span>}<span class="sc">;</span>
 611     <span class="i">$Value</span> = <span class="i">SetupStrViewerJmolApplet</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$StrViewerCodeBase</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 612     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 613   <span class="s">}</span>
 614   <span class="k">else</span> <span class="s">{</span>
 615     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 616   <span class="s">}</span>
 617   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 618     <span class="i">$ValueTag</span> = <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$ValueTag</span><span class="cm">,</span> <span class="s">(</span><span class="q">&quot;class&quot;</span><span class="cm">,</span> <span class="q">&quot;box&quot;</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
 619   <span class="s">}</span>
 620   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ValueTag</span><span class="sc">;</span>
 621 <span class="s">}</span>
 622 
 623 <span class="c"># Setup Chime display...</span>
<a name="SetupChimeDisplay-"></a> 624 <span class="k">sub </span><span class="m">SetupChimeDisplay</span> <span class="s">{</span>
 625   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 626   <span class="k">my</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$BGColor</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$ValueTag</span><span class="cm">,</span> <span class="i">$MolFileRef</span><span class="s">)</span><span class="sc">;</span>
 627 
 628   <span class="i">$Value</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 629   <span class="s">(</span><span class="i">$MolString</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 630   <span class="k">if</span> <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$MolString</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 631     <span class="i">$BGColor</span> = <span class="i">SetupStructureBGColor</span><span class="s">(</span><span class="i">$RowNum</span><span class="s">)</span><span class="sc">;</span>
 632     <span class="i">$MolString</span> .= <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="sc">;</span>
 633     <span class="c"># Write out MOL file...</span>
 634     <span class="i">$MolFileRef</span> = <span class="i">SetupMOLFile</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$MolString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="s">)</span><span class="sc">;</span>
 635     <span class="c"># Setup the applet...</span>
 636     <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 637       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 638         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$BGColor</span><span class="sc">;</span>
 639       <span class="s">}</span>
 640     <span class="s">}</span>
 641     <span class="i">$Value</span> = <span class="i">SetupStrViewerChimePlugIn</span><span class="s">(</span><span class="i">$MolFileRef</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 642     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 643   <span class="s">}</span>
 644   <span class="k">else</span> <span class="s">{</span>
 645     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 646   <span class="s">}</span>
 647   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 648     <span class="i">$ValueTag</span> = <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$ValueTag</span><span class="cm">,</span> <span class="s">(</span><span class="q">&quot;class&quot;</span><span class="cm">,</span> <span class="q">&quot;box&quot;</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
 649   <span class="s">}</span>
 650   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ValueTag</span><span class="sc">;</span>
 651 <span class="s">}</span>
 652 
 653 <span class="c"># Setup displays for various viewers available from CambridgeSoft...</span>
<a name="SetupCambridgeSoftDisplay-"></a> 654 <span class="k">sub </span><span class="m">SetupCambridgeSoftDisplay</span> <span class="s">{</span>
 655   <span class="k">my</span><span class="s">(</span><span class="i">$ViewerType</span><span class="cm">,</span> <span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 656   <span class="k">my</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$BGColor</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$ValueTag</span><span class="cm">,</span> <span class="i">$MolFileRef</span><span class="cm">,</span> <span class="i">$Name</span><span class="s">)</span><span class="sc">;</span>
 657 
 658   <span class="i">$Value</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 659   <span class="s">(</span><span class="i">$MolString</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 660   <span class="k">if</span> <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$MolString</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 661     <span class="i">$BGColor</span> = <span class="i">SetupStructureBGColor</span><span class="s">(</span><span class="i">$RowNum</span><span class="s">)</span><span class="sc">;</span>
 662     <span class="i">$MolString</span> .= <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="sc">;</span>
 663     <span class="c"># Write out MOL file...</span>
 664     <span class="i">$MolFileRef</span> = <span class="i">SetupMOLFile</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$MolString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="s">)</span><span class="sc">;</span>
 665     <span class="c"># Setup the viewer...</span>
 666     <span class="i">$Name</span> = <span class="q">&quot;CS&quot;</span> . <span class="i">$CmpdNum</span><span class="sc">;</span>
 667     <span class="k">if</span> <span class="s">(</span><span class="i">$ViewerType</span> =~ <span class="q">/^Chem3DActiveX$/</span><span class="s">)</span> <span class="s">{</span>
 668       <span class="c"># Use white background for Chem3D and cell; otherwise, it doesn&#39;t look good:</span>
 669       <span class="c"># cell size is larger than Chem3D window size and different colors don&#39;t work</span>
 670       <span class="i">$BGColor</span> = <span class="i">$SDFilesInfo</span>{<span class="w">White</span>}<span class="sc">;</span>
 671       <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">name</span>} = <span class="i">$Name</span><span class="sc">;</span>
 672       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 673         <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 674           <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$BGColor</span><span class="sc">;</span>
 675         <span class="s">}</span>
 676       <span class="s">}</span>
 677       <span class="i">$Value</span> = <span class="i">SetupStrViewerChem3DActiveX</span><span class="s">(</span><span class="i">$MolFileRef</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 678       <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="i">$BGColor</span><span class="s">)</span><span class="sc">;</span>
 679     <span class="s">}</span>
 680     <span class="k">elsif</span> <span class="s">(</span><span class="i">$ViewerType</span> =~ <span class="q">/^ChemDrawActiveX$/i</span><span class="s">)</span> <span class="s">{</span>
 681       <span class="c"># BGColor is not supported. So, make it all white...</span>
 682       <span class="i">$BGColor</span> = <span class="i">$SDFilesInfo</span>{<span class="w">White</span>}<span class="sc">;</span>
 683       <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">name</span>} = <span class="i">$Name</span><span class="sc">;</span>
 684       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 685         <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 686           <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$BGColor</span><span class="sc">;</span>
 687         <span class="s">}</span>
 688       <span class="s">}</span>
 689       <span class="i">$Value</span> = <span class="i">SetupStrViewerChemDrawActiveX</span><span class="s">(</span><span class="i">$MolFileRef</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 690       <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="i">$BGColor</span><span class="s">)</span><span class="sc">;</span>
 691     <span class="s">}</span>
 692     <span class="k">elsif</span> <span class="s">(</span><span class="i">$ViewerType</span> =~ <span class="q">/^ChemDrawPlugIn$/i</span><span class="s">)</span> <span class="s">{</span>
 693       <span class="c"># BGColor is not supported. So, make it all white...</span>
 694       <span class="i">$BGColor</span> = <span class="i">$SDFilesInfo</span>{<span class="w">White</span>}<span class="sc">;</span>
 695       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 696         <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 697           <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$BGColor</span><span class="sc">;</span>
 698         <span class="s">}</span>
 699       <span class="s">}</span>
 700       <span class="i">$Value</span> = <span class="i">SetupStrViewerChemDrawPlugIn</span><span class="s">(</span><span class="i">$MolFileRef</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 701       <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span> <span class="i">$BGColor</span><span class="s">)</span><span class="sc">;</span>
 702     <span class="s">}</span>
 703   <span class="s">}</span>
 704   <span class="k">else</span> <span class="s">{</span>
 705     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 706   <span class="s">}</span>
 707   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 708     <span class="i">$ValueTag</span> = <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$ValueTag</span><span class="cm">,</span> <span class="s">(</span><span class="q">&quot;class&quot;</span><span class="cm">,</span> <span class="q">&quot;box&quot;</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
 709   <span class="s">}</span>
 710   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ValueTag</span><span class="sc">;</span>
 711 <span class="s">}</span>
 712 
 713 <span class="c"># Setup Accelrys Viewer ActiveX display...</span>
<a name="SetupViewerAccelrysActiveXDisplay-"></a> 714 <span class="k">sub </span><span class="m">SetupViewerAccelrysActiveXDisplay</span> <span class="s">{</span>
 715   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 716   <span class="k">my</span><span class="s">(</span><span class="i">$MolString</span><span class="cm">,</span> <span class="i">$BGColor</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$ValueTag</span><span class="cm">,</span> <span class="i">$Name</span><span class="cm">,</span> <span class="i">$MolFileRef</span><span class="s">)</span><span class="sc">;</span>
 717 
 718   <span class="i">$Value</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 719   <span class="s">(</span><span class="i">$MolString</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 720   <span class="k">if</span> <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$MolString</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 721     <span class="i">$BGColor</span> = <span class="i">SetupStructureBGColor</span><span class="s">(</span><span class="i">$RowNum</span><span class="s">)</span><span class="sc">;</span>
 722     <span class="i">$MolString</span> .= <span class="q">&quot;$SDFilesInfo{MolEndTag}&quot;</span><span class="sc">;</span>
 723     <span class="c"># Write out MOL file. Accelrys ActiveX viewer doesn&#39;t load mol files with relative path names.</span>
 724     <span class="c"># So, set up a complete path name for now; however, it may lead to issues during web</span>
 725     <span class="c"># deployment.</span>
 726     <span class="k">my</span><span class="s">(</span><span class="i">$CompletePath</span><span class="s">)</span> = <span class="n">1</span><span class="sc">;</span>
 727     <span class="i">$MolFileRef</span> = <span class="i">SetupMOLFile</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$MolString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$CompletePath</span><span class="s">)</span><span class="sc">;</span>
 728     <span class="c"># Setup the viewer...</span>
 729     <span class="i">$Name</span> = <span class="q">&quot;ViewerActiveX&quot;</span> . <span class="i">$CmpdNum</span><span class="sc">;</span>
 730     <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 731       <span class="k">if</span> <span class="s">(</span>!<span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>}<span class="s">)</span> <span class="s">{</span>
 732         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>} = <span class="i">$BGColor</span><span class="sc">;</span>
 733       <span class="s">}</span>
 734     <span class="s">}</span>
 735     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">name</span>} = <span class="i">$Name</span><span class="sc">;</span>
 736     <span class="i">$Value</span> = <span class="i">SetupStrViewerAccelrysActiveX</span><span class="s">(</span><span class="i">$MolFileRef</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}}<span class="s">)</span><span class="sc">;</span>
 737     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 738   <span class="s">}</span>
 739   <span class="k">else</span> <span class="s">{</span>
 740     <span class="i">$ValueTag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 741   <span class="s">}</span>
 742   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>}<span class="s">)</span> <span class="s">{</span>
 743     <span class="i">$ValueTag</span> = <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$ValueTag</span><span class="cm">,</span> <span class="s">(</span><span class="q">&quot;class&quot;</span><span class="cm">,</span> <span class="q">&quot;box&quot;</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
 744   <span class="s">}</span>
 745   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$ValueTag</span><span class="sc">;</span>
 746 <span class="s">}</span>
 747 
 748 
 749 <span class="c"># Setup structure background color...</span>
<a name="SetupStructureBGColor-"></a> 750 <span class="k">sub </span><span class="m">SetupStructureBGColor</span> <span class="s">{</span>
 751   <span class="k">my</span><span class="s">(</span><span class="i">$RowNum</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 752   <span class="k">my</span><span class="s">(</span><span class="i">$BGColor</span><span class="s">)</span><span class="sc">;</span>
 753 
 754   <span class="i">$BGColor</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 755   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ShadeRowsStatus</span>}<span class="s">)</span> <span class="s">{</span>
 756     <span class="i">$BGColor</span> =  <span class="s">(</span><span class="i">$RowNum</span> % <span class="n">2</span><span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">OddRowsShadeColor</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">EvenRowsShadeColor</span>}<span class="sc">;</span>
 757   <span class="s">}</span>
 758   <span class="k">else</span> <span class="s">{</span>
 759     <span class="i">$BGColor</span> = <span class="i">$SDFilesInfo</span>{<span class="w">White</span>}<span class="sc">;</span>
 760   <span class="s">}</span>
 761   <span class="k">return</span> <span class="i">$BGColor</span><span class="sc">;</span>
 762 <span class="s">}</span>
 763 
 764 <span class="c"># Setup  MDL MOL file...</span>
<a name="SetupMOLFile-"></a> 765 <span class="k">sub </span><span class="m">SetupMOLFile</span> <span class="s">{</span>
 766   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$MolString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$CompletePath</span><span class="s">)</span><span class="sc">;</span>
 767   <span class="k">my</span><span class="s">(</span><span class="i">$SubMolDir</span><span class="cm">,</span> <span class="i">$MolFileName</span><span class="cm">,</span> <span class="i">$MolFile</span><span class="cm">,</span> <span class="i">$MolFileRef</span><span class="s">)</span><span class="sc">;</span>
 768 
 769   <span class="i">$CompletePath</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 770   <span class="k">if</span> <span class="s">(</span><span class="i">@_</span> == <span class="n">5</span><span class="s">)</span> <span class="s">{</span>
 771     <span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$MolString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$CompletePath</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 772   <span class="s">}</span>
 773   <span class="k">else</span> <span class="s">{</span>
 774     <span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$MolString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 775   <span class="s">}</span>
 776 
 777   <span class="i">$SubMolDir</span> = <span class="i">$SDFilesInfo</span>{<span class="w">SubMolDir</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
 778   <span class="i">$MolFileName</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;Cmpd&quot;</span> . <span class="i">$CmpdNum</span> . <span class="q">&quot;.mol&quot;</span><span class="sc">;</span>
 779   <span class="i">$MolFile</span> = <span class="i">$SubMolDir</span> . <span class="q">&quot;\/&quot;</span> . <span class="i">$MolFileName</span><span class="sc">;</span>
 780 
 781   <span class="k">open</span> <span class="w">MOLFILE</span><span class="cm">,</span> <span class="q">&quot;&gt;$MolFile&quot;</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Can&#39;t open $MolFile: $! \n&quot;</span><span class="sc">;</span>
 782   <span class="k">print</span> <span class="i">MOLFILE</span> <span class="q">&quot;$MolString\n&quot;</span><span class="sc">;</span>
 783   <span class="k">close</span> <span class="w">MOLFILE</span><span class="sc">;</span>
 784 
 785   <span class="k">if</span> <span class="s">(</span><span class="i">$CompletePath</span><span class="s">)</span> <span class="s">{</span>
 786     <span class="k">my</span><span class="s">(</span><span class="i">$CWD</span><span class="cm">,</span> <span class="i">$NewCWD</span><span class="s">)</span><span class="sc">;</span>
 787     <span class="i">$CWD</span> = <span class="i">cwd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 788     <span class="i">$NewCWD</span> = <span class="i">ConvertCygwinPath</span><span class="s">(</span><span class="i">$CWD</span><span class="s">)</span><span class="sc">;</span>
 789     <span class="i">$MolFileRef</span> = <span class="i">$NewCWD</span> . <span class="q">&quot;\/&quot;</span> . <span class="i">$SDFilesInfo</span>{<span class="w">TopHTMLDir</span>}[<span class="i">$Index</span>] .  <span class="q">&quot;\/mol\/$MolFileName&quot;</span> <span class="sc">;</span>
 790   <span class="s">}</span>
 791   <span class="k">else</span> <span class="s">{</span>
 792     <span class="i">$MolFileRef</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="q">&quot;.\/mol\/$MolFileName&quot;</span> <span class="co">:</span> <span class="q">&quot;..\/mol\/$MolFileName&quot;</span><span class="sc">;</span>
 793   <span class="s">}</span>
 794 
 795   <span class="k">return</span> <span class="i">$MolFileRef</span><span class="sc">;</span>
 796 <span class="s">}</span>
 797 
 798 <span class="c"># Setup a link to structure and other available information...</span>
<a name="SetupStructureLink-"></a> 799 <span class="k">sub </span><span class="m">SetupStructureLink</span> <span class="s">{</span>
 800   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$RowNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 801   <span class="k">my</span><span class="s">(</span><span class="i">$CmpdHTMLFileRef</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 802 
 803   <span class="i">$CmpdHTMLFileRef</span> = <span class="i">SetupCompoundSummaryFileAndLink</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="s">)</span><span class="sc">;</span>
 804 
 805   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinktype</span>} =~ <span class="q">/^button$/i</span><span class="s">)</span> <span class="s">{</span>
 806     <span class="i">$Value</span> = <span class="i">SetupHTMLButtonRef</span><span class="s">(</span><span class="q">&quot;View&quot;</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 807   <span class="s">}</span>
 808   <span class="k">else</span> <span class="s">{</span>
 809     <span class="i">$Value</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;View&quot;</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileRef</span><span class="s">)</span><span class="sc">;</span>
 810   <span class="s">}</span>
 811   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 812 <span class="s">}</span>
 813 
 814 <span class="c"># Setup HTML compound summary file and link...</span>
<a name="SetupCompoundSummaryFileAndLink-"></a> 815 <span class="k">sub </span><span class="m">SetupCompoundSummaryFileAndLink</span> <span class="s">{</span>
 816   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 817   <span class="k">my</span><span class="s">(</span><span class="i">$CmpdHTMLFile</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileName</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileRef</span><span class="cm">,</span> <span class="i">$CSSRef</span><span class="cm">,</span> <span class="i">@CmpdLines</span><span class="cm">,</span> <span class="i">$Label</span><span class="cm">,</span> <span class="i">@DataFieldLabels</span><span class="cm">,</span> <span class="i">%DataFieldValues</span><span class="cm">,</span> <span class="i">$Value</span><span class="cm">,</span> <span class="i">$Tag</span><span class="s">)</span><span class="sc">;</span>
 818 
 819   <span class="c"># Setup compound file names...</span>
 820   <span class="i">$CmpdHTMLFileName</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;Cmpd&quot;</span> . <span class="i">$CmpdNum</span> . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
 821   <span class="i">$CmpdHTMLFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">SubHTMLDir</span>}[<span class="i">$Index</span>] . <span class="q">&quot;\/&quot;</span> . <span class="i">$CmpdHTMLFileName</span><span class="sc">;</span>
 822 
 823   <span class="c"># Setup stylesheet reference....</span>
 824   <span class="i">$CSSRef</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
 825   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">stylesheet</span>} =~ <span class="q">/^old$/i</span><span class="s">)</span> <span class="s">{</span>
 826     <span class="i">$CSSRef</span> = <span class="i">$Options</span>{<span class="w">stylesheetname</span>}<span class="sc">;</span>
 827   <span class="s">}</span>
 828   <span class="k">else</span> <span class="s">{</span>
 829     <span class="i">$CSSRef</span> = <span class="q">&quot;..\/&quot;</span> . <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;.css&quot;</span><span class="sc">;</span>
 830   <span class="s">}</span>
 831 
 832   <span class="c"># Write out compound data in a new HTML file. For summary page, usage of even and odd row shade color</span>
 833   <span class="c"># is reversed: it causes structure background to be white by default...</span>
 834   <span class="k">open</span> <span class="w">CMPDHTMLFILE</span><span class="cm">,</span> <span class="q">&quot;&gt;$CmpdHTMLFile&quot;</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Can&#39;t open $CmpdHTMLFile: $! \n&quot;</span><span class="sc">;</span>
 835   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLPageHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrLinkTitle</span>}<span class="cm">,</span> <span class="i">$CSSRef</span><span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerJSFileRef</span>}<span class="s">)</span><span class="sc">;</span>
 836 
 837   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerJSFileRef</span>}<span class="s">)</span> <span class="s">{</span>
 838     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupStrViewerJSInitCmd</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerCodeBase</span>}<span class="s">)</span><span class="sc">;</span>
 839   <span class="s">}</span>
 840 
 841   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrLinkTitleDisplay</span>}<span class="s">)</span> <span class="s">{</span>
 842     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLPageTitle</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrLinkTitle</span>}<span class="cm">,</span> <span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 843   <span class="s">}</span>
 844   <span class="k">else</span> <span class="s">{</span>
 845     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLEmptyLines</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 846   <span class="s">}</span>
 847   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLAlignmentBegin</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 848 
 849   <span class="c"># Setup structure display ...</span>
 850   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableHeader</span><span class="s">(</span><span class="n">0</span><span class="cm">,</span> <span class="n">5</span><span class="cm">,</span> <span class="n">2</span><span class="s">)</span><span class="sc">;</span>
 851 
 852   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="cm">,</span> <span class="q">&quot;#ffffff&quot;</span><span class="cm">,</span> <span class="q">&quot;middle&quot;</span><span class="s">)</span><span class="sc">;</span>
 853 
 854   <span class="i">SetupStructureDisplayForCmpdSummaryPage</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> \<span class="i">*CMPDHTMLFILE</span><span class="s">)</span><span class="sc">;</span>
 855   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 856 
 857   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinkmode</span>} =~ <span class="q">/^plain$/i</span><span class="s">)</span> <span class="s">{</span>
 858     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">StrLinkShadeColor</span>}<span class="s">)</span><span class="sc">;</span>
 859     <span class="i">$Tag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&quot;</span><span class="s">)</span><span class="sc">;</span>
 860     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$Tag</span><span class="sc">;</span>
 861     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 862   <span class="s">}</span>
 863 
 864   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="q">&quot;left&quot;</span><span class="cm">,</span> <span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="q">&quot;middle&quot;</span><span class="s">)</span><span class="sc">;</span>
 865   <span class="c"># Start a new table with two columns, one each for data field labels and values, in</span>
 866   <span class="c"># current column...</span>
 867   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableColumnHeader</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 868   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLAlignmentBegin</span><span class="s">(</span><span class="q">&quot;left&quot;</span><span class="s">)</span><span class="sc">;</span>
 869   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableHeader</span><span class="s">(</span><span class="n">0</span><span class="cm">,</span> <span class="n">5</span><span class="cm">,</span> <span class="n">2</span><span class="s">)</span><span class="sc">;</span>
 870 
 871   <span class="c"># Setup table for other available data...</span>
 872   <span class="k">my</span><span class="s">(</span><span class="i">$CmpdRowHeaderTags</span><span class="s">)</span><span class="sc">;</span>
 873   <span class="i">$CmpdRowHeaderTags</span> = <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="q">&quot;left&quot;</span><span class="cm">,</span> <span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="q">&quot;middle&quot;</span><span class="s">)</span><span class="sc">;</span>
 874 
 875   <span class="i">@CmpdLines</span> = <span class="k">split</span> <span class="q">&quot;\n&quot;</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 876 
 877   <span class="i">@DataFieldLabels</span> = <span class="i">GetCmpdDataHeaderLabels</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 878   <span class="i">%DataFieldValues</span> = <span class="i">GetCmpdDataHeaderLabelsAndValues</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 879 
 880   <span class="k">my</span><span class="s">(</span><span class="i">$LabelWrapLength</span><span class="cm">,</span> <span class="i">$ValueWrapLength</span><span class="cm">,</span> <span class="i">$LabelColWidth</span><span class="s">)</span><span class="sc">;</span>
 881   <span class="i">$LabelWrapLength</span> = <span class="n">30</span><span class="sc">;</span> <span class="i">$ValueWrapLength</span> = <span class="n">60</span><span class="sc">;</span> <span class="i">$LabelColWidth</span> = <span class="n">40</span><span class="sc">;</span>
 882 
 883   <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@DataFieldLabels</span><span class="s">)</span> <span class="s">{</span>
 884     <span class="i">$Value</span> =  <span class="i">$DataFieldValues</span>{<span class="i">$Label</span>}<span class="sc">;</span>
 885     <span class="i">$Label</span> .= <span class="q">&quot;:&quot;</span><span class="sc">;</span>
 886     <span class="k">if</span> <span class="s">(</span><span class="i">$Label</span> &amp;&amp; <span class="s">(</span><span class="k">length</span><span class="s">(</span><span class="i">$Label</span><span class="s">)</span> &gt; <span class="i">$LabelWrapLength</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 887       <span class="i">$Label</span> = <span class="i">WrapText</span><span class="s">(</span><span class="i">$Label</span><span class="cm">,</span>  <span class="i">$LabelWrapLength</span><span class="cm">,</span> <span class="q">&quot;&lt;br&gt;&quot;</span><span class="s">)</span><span class="sc">;</span>
 888     <span class="s">}</span>
 889     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$CmpdRowHeaderTags</span><span class="sc">;</span>
 890     <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinkmode</span>} =~ <span class="q">/^plain$/i</span><span class="s">)</span> <span class="s">{</span>
 891       <span class="i">$Tag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Label</span><span class="cm">,</span> <span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 892     <span class="s">}</span>
 893     <span class="k">else</span> <span class="s">{</span>
 894       <span class="i">$Tag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Label</span><span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">StrLinkShadeColor</span>}<span class="s">)</span><span class="sc">;</span>
 895     <span class="s">}</span>
 896     <span class="i">$Tag</span> = <span class="i">InsertHTMLTags</span><span class="s">(</span><span class="i">$Tag</span><span class="cm">,</span> <span class="q">&quot;width&quot;</span><span class="cm">,</span> <span class="q">&quot;$LabelColWidth&quot;</span><span class="s">)</span><span class="sc">;</span>
 897     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$Tag</span><span class="sc">;</span>
 898 
 899     <span class="k">if</span> <span class="s">(</span><span class="i">$Value</span> &amp;&amp; <span class="s">(</span><span class="k">length</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span> &gt;=<span class="i">$ValueWrapLength</span><span class="s">)</span> &amp;&amp; <span class="i">$Value</span> !~ <span class="q">/a href/i</span><span class="s">)</span> <span class="s">{</span>
 900       <span class="i">$Value</span> =~ <span class="q">s/(\r\n)|(\r)|\n//g</span><span class="sc">;</span>
 901       <span class="i">$Value</span> = <span class="i">WrapText</span><span class="s">(</span><span class="i">$Value</span><span class="cm">,</span>  <span class="i">$ValueWrapLength</span><span class="cm">,</span> <span class="q">&quot;&lt;br&gt;&quot;</span><span class="s">)</span><span class="sc">;</span>
 902     <span class="s">}</span>
 903     <span class="i">$Tag</span> = <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 904     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$Tag</span><span class="sc">;</span>
 905     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 906   <span class="s">}</span>
 907 
 908   <span class="c"># Finish up table holding numerical data...</span>
 909   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 910   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLAlignmentEnd</span><span class="s">(</span><span class="q">&quot;left&quot;</span><span class="s">)</span><span class="sc">;</span>
 911   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableColumnEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 912   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
 913 
 914   <span class="c"># Finish up main table...</span>
 915   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLTableEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 916   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLAlignmentEnd</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 917 
 918   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrLinkNavigation</span>} &amp;&amp; <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">CmpdCount</span>}[<span class="i">$Index</span>] &gt; <span class="n">1</span><span class="s">)</span> <span class="s">)</span> <span class="s">{</span>
 919     <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLEmptyLines</span><span class="s">(</span><span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 920     <span class="i">WriteCompoundSummaryNavigationLinks</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$CmpdNum</span><span class="cm">,</span> \<span class="i">*CMPDHTMLFILE</span><span class="s">)</span><span class="sc">;</span>
 921   <span class="s">}</span>
 922 
 923   <span class="k">print</span> <span class="i">CMPDHTMLFILE</span> <span class="i">SetupHTMLPageEnd</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">FooterMsg</span>}<span class="s">)</span><span class="sc">;</span>
 924   <span class="k">close</span> <span class="w">CMPDHTMLFILE</span><span class="sc">;</span>
 925 
 926   <span class="c"># Add a link to compound&#39;s HTML file in table cell...</span>
 927   <span class="i">$CmpdHTMLFileRef</span> = <span class="s">(</span><span class="i">$TableNum</span> == <span class="n">1</span><span class="s">)</span> ? <span class="q">&quot;.\/html\/&quot;</span> <span class="co">:</span> <span class="q">&quot;.\/&quot;</span><span class="sc">;</span>
 928   <span class="i">$CmpdHTMLFileRef</span> .= <span class="i">$CmpdHTMLFileName</span><span class="sc">;</span>
 929 
 930   <span class="k">return</span> <span class="i">$CmpdHTMLFileRef</span><span class="sc">;</span>
 931 <span class="s">}</span>
 932 
 933 <span class="c"># Write navigation link information for compound summary page...</span>
<a name="WriteCompoundSummaryNavigationLinks-"></a> 934 <span class="k">sub </span><span class="m">WriteCompoundSummaryNavigationLinks</span> <span class="s">{</span>
 935   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$CurTableNum</span><span class="cm">,</span> <span class="i">$CurCmpdNum</span><span class="cm">,</span> <span class="i">$CmpdHTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 936   <span class="k">my</span><span class="s">(</span><span class="i">$FirstTableNum</span><span class="cm">,</span> <span class="i">$CurTableIndex</span><span class="cm">,</span> <span class="i">$FirstCmpdNum</span><span class="cm">,</span> <span class="i">$LastCmpdNum</span><span class="cm">,</span> <span class="i">$PreviousCmpdNum</span><span class="cm">,</span> <span class="i">$NextCmpdNum</span><span class="cm">,</span> <span class="i">$HTMLFile</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="i">$HTMLRefValue</span><span class="s">)</span><span class="sc">;</span>
 937 
 938   <span class="i">$FirstTableNum</span> = <span class="n">1</span><span class="sc">;</span>
 939   <span class="i">$FirstCmpdNum</span> = <span class="n">1</span><span class="sc">;</span>
 940 
 941   <span class="i">$CurTableIndex</span> = <span class="i">$CurTableNum</span> - <span class="n">1</span><span class="sc">;</span>
 942 
 943   <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}[<span class="i">$Index</span>]<span class="s">)</span> <span class="s">{</span>
 944     <span class="k">my</span><span class="s">(</span><span class="i">$FirstTableIndex</span><span class="cm">,</span> <span class="i">$LastTableNum</span><span class="cm">,</span> <span class="i">$LastTableIndex</span><span class="s">)</span><span class="sc">;</span>
 945     <span class="i">$FirstTableIndex</span> = <span class="i">$FirstTableNum</span> - <span class="n">1</span><span class="sc">;</span>
 946     <span class="i">$LastTableNum</span> = <span class="i">$SDFilesInfo</span>{<span class="w">TableCount</span>}[<span class="i">$Index</span>]<span class="sc">;</span> <span class="i">$LastTableIndex</span> = <span class="i">$LastTableNum</span> - <span class="n">1</span><span class="sc">;</span>
 947     <span class="i">$LastCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$LastTableIndex</span>]<span class="sc">;</span>
 948   <span class="s">}</span>
 949   <span class="k">else</span> <span class="s">{</span>
 950     <span class="i">$LastCmpdNum</span> = <span class="i">$SDFilesInfo</span>{<span class="w">CmpdCount</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
 951   <span class="s">}</span>
 952 
 953   <span class="i">$PreviousCmpdNum</span> = <span class="s">(</span><span class="i">$CurCmpdNum</span> == <span class="i">$FirstCmpdNum</span><span class="s">)</span> ? <span class="n">0</span> <span class="co">:</span> <span class="s">(</span><span class="i">$CurCmpdNum</span> - <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 954   <span class="i">$NextCmpdNum</span> = <span class="s">(</span><span class="i">$CurCmpdNum</span> == <span class="i">$LastCmpdNum</span><span class="s">)</span> ? <span class="n">0</span> <span class="co">:</span> <span class="s">(</span><span class="i">$CurCmpdNum</span> + <span class="n">1</span><span class="s">)</span><span class="sc">;</span>
 955 
 956   <span class="k">my</span><span class="s">(</span><span class="i">$InactiveLinkNumColor</span><span class="cm">,</span> <span class="i">$InactiveLinkFontBold</span><span class="s">)</span> = <span class="s">(</span><span class="q">&quot;#8e2323&quot;</span><span class="cm">,</span> <span class="q">&quot;1&quot;</span><span class="s">)</span><span class="sc">;</span>
 957   <span class="k">my</span><span class="s">(</span><span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span> = <span class="s">(</span><span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="q">&quot;0&quot;</span><span class="s">)</span><span class="sc">;</span>
 958   <span class="k">my</span><span class="s">(</span><span class="i">$BorderWidth</span><span class="cm">,</span> <span class="i">$CellPadding</span><span class="cm">,</span> <span class="i">$CellSpacing</span><span class="s">)</span> = <span class="s">(</span><span class="n">0</span><span class="cm">,</span> <span class="n">2</span><span class="cm">,</span> <span class="n">2</span><span class="s">)</span><span class="sc">;</span>
 959 
 960   <span class="c"># Start link table...</span>
 961   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLAlignmentBegin</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
 962   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLDivBegin</span><span class="s">(</span><span class="q">&quot;tablenav&quot;</span><span class="s">)</span><span class="sc">;</span>
 963   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span>  <span class="i">SetupHTMLTableHeader</span><span class="s">(</span><span class="i">$BorderWidth</span><span class="cm">,</span> <span class="i">$CellPadding</span><span class="cm">,</span> <span class="i">$CellSpacing</span><span class="s">)</span><span class="sc">;</span>
 964   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowHeaderTags</span>}<span class="sc">;</span>
 965 
 966   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;Compounds: &quot;</span><span class="s">)</span><span class="sc">;</span>
 967 
 968   <span class="c"># Setup a link to first compound...</span>
 969   <span class="k">if</span> <span class="s">(</span><span class="i">$CurCmpdNum</span> != <span class="i">$FirstCmpdNum</span><span class="s">)</span> <span class="s">{</span>
 970     <span class="i">$HTMLFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;Cmpd&quot;</span> . <span class="i">$FirstCmpdNum</span> . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
 971     <span class="i">$HTMLRefFile</span> = <span class="q">&quot;./${HTMLFile}&quot;</span><span class="sc">;</span>
 972     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;First&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;First Compound&quot;</span><span class="s">)</span><span class="sc">;</span>
 973     <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
 974   <span class="s">}</span>
 975 
 976   <span class="c"># Setup a link to previous compund</span>
 977   <span class="k">if</span> <span class="s">(</span><span class="i">$PreviousCmpdNum</span><span class="s">)</span> <span class="s">{</span>
 978     <span class="i">$HTMLFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;Cmpd&quot;</span> . <span class="i">$PreviousCmpdNum</span> . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
 979     <span class="i">$HTMLRefFile</span> = <span class="q">&quot;./${HTMLFile}&quot;</span><span class="sc">;</span>
 980     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;Previous&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;Previous Compound&quot;</span><span class="s">)</span><span class="sc">;</span>
 981     <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
 982   <span class="s">}</span>
 983 
 984   <span class="c"># Setup a link to compound table...</span>
 985   <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}[<span class="i">$Index</span>]<span class="s">)</span> <span class="s">{</span>
 986     <span class="i">$HTMLFile</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}[<span class="i">$CurTableIndex</span>]<span class="sc">;</span>
 987   <span class="s">}</span>
 988   <span class="k">else</span> <span class="s">{</span>
 989     <span class="i">$HTMLFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
 990   <span class="s">}</span>
 991   <span class="i">$HTMLRefFile</span> = <span class="s">(</span><span class="s">(</span><span class="i">$CurTableNum</span> == <span class="i">$FirstTableNum</span><span class="s">)</span> ? <span class="q">&quot;../&quot;</span> <span class="co">:</span> <span class="q">&quot;./&quot;</span><span class="s">)</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
 992   <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;Table&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;Table With This Compound&quot;</span><span class="s">)</span><span class="sc">;</span>
 993   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
 994 
 995   <span class="c"># Setup a link to next compound...</span>
 996   <span class="k">if</span> <span class="s">(</span><span class="i">$NextCmpdNum</span><span class="s">)</span> <span class="s">{</span>
 997     <span class="i">$HTMLFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;Cmpd&quot;</span> . <span class="i">$NextCmpdNum</span> . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
 998     <span class="i">$HTMLRefFile</span> = <span class="q">&quot;./${HTMLFile}&quot;</span><span class="sc">;</span>
 999     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;Next&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;Next Compound&quot;</span><span class="s">)</span><span class="sc">;</span>
1000     <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
1001   <span class="s">}</span>
1002 
1003   <span class="c"># Setup a link to last compund</span>
1004   <span class="k">if</span> <span class="s">(</span><span class="i">$CurCmpdNum</span> != <span class="i">$LastCmpdNum</span><span class="s">)</span> <span class="s">{</span>
1005     <span class="i">$HTMLFile</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="q">&quot;Cmpd&quot;</span> . <span class="i">$LastCmpdNum</span> . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
1006     <span class="i">$HTMLRefFile</span> = <span class="q">&quot;./${HTMLFile}&quot;</span><span class="sc">;</span>
1007     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;Last&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;Last Compound&quot;</span><span class="s">)</span><span class="sc">;</span>
1008     <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
1009   <span class="s">}</span>
1010 
1011   <span class="c"># Setup current table info text....</span>
1012   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&amp;nbsp&quot;</span><span class="s">)</span><span class="sc">;</span>
1013   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&amp;nbsp&quot;</span><span class="s">)</span><span class="sc">;</span>
1014   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;Showing $CurCmpdNum of $LastCmpdNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1015 
1016   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
1017 
1018   <span class="c"># End link table...</span>
1019   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLTableEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1020   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLDivEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1021   <span class="k">print</span> <span class="i">$CmpdHTMLFileRef</span> <span class="i">SetupHTMLAlignmentEnd</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
1022 <span class="s">}</span>
1023 
1024 <span class="c"># Setup navigation link information for each table.</span>
1025 <span class="c">#</span>
1026 <span class="c"># All table sets besides first and last have these links: FirstTable, Previous, Current-1,Current,Current+1,  Next, and LastTable</span>
1027 <span class="c"># First set: Current, Next, and LastTable</span>
1028 <span class="c"># Last set: FirstTable, Previous and Current.</span>
1029 <span class="c">#</span>
<a name="WriteNavigationLinks-"></a>1030 <span class="k">sub </span><span class="m">WriteNavigationLinks</span> <span class="s">{</span>
1031   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$CurTableNum</span><span class="cm">,</span> <span class="i">$HTMLFileRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
1032   <span class="k">my</span><span class="s">(</span><span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$StartTableNum</span><span class="cm">,</span> <span class="i">$EndTableNum</span><span class="cm">,</span> <span class="i">$TableIndex</span><span class="cm">,</span> <span class="i">$BorderWidth</span><span class="cm">,</span> <span class="i">$CellPadding</span><span class="cm">,</span> <span class="i">$CellSpacing</span><span class="cm">,</span><span class="i">$HTMLFile</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="i">$RelativeFileDir</span><span class="cm">,</span> <span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="cm">,</span> <span class="i">$FirstTableIndex</span><span class="cm">,</span> <span class="i">$LastTableNum</span><span class="cm">,</span> <span class="i">$LastTableIndex</span><span class="cm">,</span> <span class="i">$TableStartCmpdNum</span><span class="cm">,</span> <span class="i">$TableEndCmpdNum</span><span class="cm">,</span> <span class="i">$LastCmpdNum</span><span class="cm">,</span> <span class="i">$BGColor</span><span class="cm">,</span> <span class="i">$LinksOffSet</span><span class="s">)</span><span class="sc">;</span>
1033 
1034   <span class="i">$LinksOffSet</span> = <span class="n">10</span><span class="sc">;</span>
1035 
1036   <span class="i">$FirstTableNum</span> = <span class="n">1</span><span class="sc">;</span> <span class="i">$FirstTableIndex</span> = <span class="i">$FirstTableNum</span> - <span class="n">1</span><span class="sc">;</span>
1037   <span class="i">$LastTableNum</span> = <span class="i">$SDFilesInfo</span>{<span class="w">TableCount</span>}[<span class="i">$Index</span>]<span class="sc">;</span> <span class="i">$LastTableIndex</span> = <span class="i">$LastTableNum</span> - <span class="n">1</span><span class="sc">;</span>
1038   <span class="i">$LastCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$LastTableIndex</span>]<span class="sc">;</span>
1039 
1040   <span class="c"># Figure out which links to display for a particular table...</span>
1041   <span class="i">$StartTableNum</span> = <span class="i">$CurTableNum</span> - <span class="i">$LinksOffSet</span> + <span class="n">1</span><span class="sc">;</span>
1042   <span class="i">$StartTableNum</span> = <span class="s">(</span><span class="i">$StartTableNum</span> &lt; <span class="i">$FirstTableNum</span><span class="s">)</span> ? <span class="i">$FirstTableNum</span> <span class="co">:</span> <span class="i">$StartTableNum</span><span class="sc">;</span>
1043   <span class="k">if</span> <span class="s">(</span><span class="i">$CurTableNum</span> &lt; <span class="i">$LinksOffSet</span><span class="s">)</span> <span class="s">{</span>
1044     <span class="i">$EndTableNum</span> = <span class="i">$LinksOffSet</span><span class="sc">;</span>
1045   <span class="s">}</span>
1046   <span class="k">else</span> <span class="s">{</span>
1047     <span class="i">$EndTableNum</span> = <span class="i">$CurTableNum</span> + <span class="i">$LinksOffSet</span> - <span class="n">1</span><span class="sc">;</span>
1048   <span class="s">}</span>
1049   <span class="i">$EndTableNum</span> = <span class="s">(</span><span class="i">$EndTableNum</span> &gt; <span class="i">$LastTableNum</span><span class="s">)</span> ? <span class="i">$LastTableNum</span> <span class="co">:</span> <span class="i">$EndTableNum</span><span class="sc">;</span>
1050 
1051   <span class="k">my</span><span class="s">(</span><span class="i">$InactiveLinkNumColor</span><span class="cm">,</span> <span class="i">$InactiveLinkFontBold</span><span class="s">)</span> = <span class="s">(</span><span class="q">&quot;#8e2323&quot;</span><span class="cm">,</span> <span class="q">&quot;1&quot;</span><span class="s">)</span><span class="sc">;</span>
1052   <span class="k">my</span><span class="s">(</span><span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span> = <span class="s">(</span><span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="q">&quot;1&quot;</span><span class="s">)</span><span class="sc">;</span>
1053 
1054   <span class="c"># Start link table...</span>
1055   <span class="i">$BorderWidth</span> = <span class="n">0</span><span class="sc">;</span> <span class="i">$CellPadding</span> = <span class="n">2</span><span class="sc">;</span> <span class="i">$CellSpacing</span> = <span class="n">2</span><span class="sc">;</span>
1056   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLAlignmentBegin</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
1057   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLDivBegin</span><span class="s">(</span><span class="q">&quot;tablenav&quot;</span><span class="s">)</span><span class="sc">;</span>
1058   <span class="k">print</span> <span class="i">$HTMLFileRef</span>  <span class="i">SetupHTMLTableHeader</span><span class="s">(</span><span class="i">$BorderWidth</span><span class="cm">,</span> <span class="i">$CellPadding</span><span class="cm">,</span> <span class="i">$CellSpacing</span><span class="s">)</span><span class="sc">;</span>
1059   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowHeaderTags</span>}<span class="sc">;</span>
1060 
1061   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">NavLinksTableInfo</span>} &amp;&amp; <span class="i">$OptionsInfo</span>{<span class="w">NavLinksCmpdInfo</span>}<span class="s">)</span> <span class="s">{</span>
1062     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;Showing table $CurTableNum of $LastTableNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1063     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&amp;nbsp&quot;</span><span class="s">)</span><span class="sc">;</span>
1064     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&amp;nbsp&quot;</span><span class="s">)</span><span class="sc">;</span>
1065   <span class="s">}</span>
1066 
1067   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;Tables: &quot;</span><span class="s">)</span><span class="sc">;</span>
1068   <span class="c"># Setup a link to first table...</span>
1069   <span class="k">if</span> <span class="s">(</span><span class="i">$StartTableNum</span> != <span class="i">$FirstTableNum</span><span class="s">)</span> <span class="s">{</span>
1070     <span class="i">$HTMLFile</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}[<span class="i">$FirstTableIndex</span>]<span class="sc">;</span>
1071     <span class="i">$HTMLRefFile</span> = <span class="i">GetRelativeFileDir</span><span class="s">(</span><span class="i">$CurTableNum</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="s">)</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
1072     <span class="i">$TableStartCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$FirstTableIndex</span>]<span class="sc">;</span>
1073     <span class="i">$TableEndCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$FirstTableIndex</span>]<span class="sc">;</span>
1074     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;First&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;First Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1075     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
1076   <span class="s">}</span>
1077 
1078   <span class="c"># Setup link to previous table...</span>
1079   <span class="k">if</span> <span class="s">(</span><span class="i">$CurTableNum</span> != <span class="i">$FirstTableNum</span><span class="s">)</span> <span class="s">{</span>
1080     <span class="k">my</span><span class="s">(</span><span class="i">$PreviousTableNum</span><span class="cm">,</span> <span class="i">$PreviousTableIndex</span><span class="s">)</span><span class="sc">;</span>
1081     <span class="i">$PreviousTableNum</span> = <span class="i">$CurTableNum</span> - <span class="n">1</span><span class="sc">;</span> <span class="i">$PreviousTableIndex</span> = <span class="i">$PreviousTableNum</span> - <span class="n">1</span><span class="sc">;</span>
1082     <span class="i">$HTMLFile</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}[<span class="i">$PreviousTableIndex</span>]<span class="sc">;</span>
1083     <span class="i">$HTMLRefFile</span> = <span class="i">GetRelativeFileDir</span><span class="s">(</span><span class="i">$CurTableNum</span><span class="cm">,</span> <span class="i">$PreviousTableNum</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="s">)</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
1084     <span class="i">$TableStartCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$PreviousTableIndex</span>]<span class="sc">;</span>
1085     <span class="i">$TableEndCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$PreviousTableIndex</span>]<span class="sc">;</span>
1086     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;Previous&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;Previous Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1087     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
1088   <span class="s">}</span>
1089 
1090   <span class="k">for</span> <span class="i">$TableNum</span> <span class="s">(</span><span class="i">$StartTableNum</span> .. <span class="i">$EndTableNum</span><span class="s">)</span> <span class="s">{</span>
1091     <span class="i">$TableIndex</span> = <span class="i">$TableNum</span> - <span class="n">1</span><span class="sc">;</span>
1092     <span class="i">$HTMLFile</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}[<span class="i">$TableIndex</span>]<span class="sc">;</span>
1093     <span class="k">if</span> <span class="s">(</span><span class="i">$TableNum</span> == <span class="i">$CurTableNum</span><span class="s">)</span> <span class="s">{</span>
1094       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$InactiveLinkNumColor</span><span class="cm">,</span> <span class="i">$InactiveLinkFontBold</span><span class="s">)</span><span class="sc">;</span>
1095     <span class="s">}</span>
1096     <span class="k">else</span> <span class="s">{</span>
1097       <span class="c"># Setup the link...</span>
1098       <span class="k">my</span><span class="s">(</span><span class="i">$RefTitle</span><span class="s">)</span><span class="sc">;</span>
1099       <span class="i">$TableStartCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$TableIndex</span>]<span class="sc">;</span>
1100       <span class="i">$TableEndCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$TableIndex</span>]<span class="sc">;</span>
1101       <span class="i">$RefTitle</span> = <span class="i">AddNumberSuffix</span><span class="s">(</span><span class="i">$TableNum</span><span class="s">)</span> . <span class="q">&quot; Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum&quot;</span><span class="sc">;</span>
1102       <span class="i">$HTMLRefFile</span> = <span class="i">GetRelativeFileDir</span><span class="s">(</span><span class="i">$CurTableNum</span><span class="cm">,</span> <span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="s">)</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
1103       <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="i">$TableNum</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="i">$RefTitle</span><span class="s">)</span><span class="sc">;</span>
1104       <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="s">)</span><span class="sc">;</span>
1105     <span class="s">}</span>
1106   <span class="s">}</span>
1107 
1108   <span class="c"># Setup link to next table...</span>
1109   <span class="k">if</span> <span class="s">(</span><span class="i">$CurTableNum</span> != <span class="i">$LastTableNum</span><span class="s">)</span> <span class="s">{</span>
1110     <span class="k">my</span><span class="s">(</span><span class="i">$NextTableNum</span><span class="cm">,</span> <span class="i">$NextTableIndex</span><span class="s">)</span><span class="sc">;</span>
1111     <span class="i">$NextTableNum</span> = <span class="i">$CurTableNum</span> + <span class="n">1</span><span class="sc">;</span> <span class="i">$NextTableIndex</span> = <span class="i">$NextTableNum</span> - <span class="n">1</span><span class="sc">;</span>
1112     <span class="i">$HTMLFile</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}[<span class="i">$NextTableIndex</span>]<span class="sc">;</span>
1113     <span class="i">$HTMLRefFile</span> = <span class="i">GetRelativeFileDir</span><span class="s">(</span><span class="i">$CurTableNum</span><span class="cm">,</span> <span class="i">$NextTableNum</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="s">)</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
1114     <span class="i">$TableStartCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$NextTableIndex</span>]<span class="sc">;</span>
1115     <span class="i">$TableEndCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$NextTableIndex</span>]<span class="sc">;</span>
1116     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;Next&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;Next Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1117     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
1118   <span class="s">}</span>
1119 
1120   <span class="c"># Setup link to last table...</span>
1121   <span class="k">if</span> <span class="s">(</span><span class="i">$EndTableNum</span> != <span class="i">$LastTableNum</span><span class="s">)</span> <span class="s">{</span>
1122     <span class="i">$HTMLFile</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}[<span class="i">$LastTableIndex</span>]<span class="sc">;</span>
1123     <span class="i">$HTMLRefFile</span> = <span class="i">GetRelativeFileDir</span><span class="s">(</span><span class="i">$CurTableNum</span><span class="cm">,</span> <span class="i">$LastTableNum</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="s">)</span> . <span class="i">$HTMLFile</span><span class="sc">;</span>
1124     <span class="i">$TableStartCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$LastTableIndex</span>]<span class="sc">;</span>
1125     <span class="i">$TableEndCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$LastTableIndex</span>]<span class="sc">;</span>
1126     <span class="i">$HTMLRefValue</span> = <span class="i">SetupHTMLHRef</span><span class="s">(</span><span class="q">&quot;Last&quot;</span><span class="cm">,</span> <span class="i">$HTMLRefFile</span><span class="cm">,</span> <span class="q">&quot;Last Table Containing Compounds $TableStartCmpdNum To $TableEndCmpdNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1127     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="i">$HTMLRefValue</span><span class="cm">,</span> <span class="i">$LinkBGColor</span><span class="cm">,</span> <span class="i">$LinkTextColor</span><span class="cm">,</span> <span class="i">$LinkFontBold</span><span class="s">)</span><span class="sc">;</span>
1128   <span class="s">}</span>
1129   <span class="c"># Setup current table info text....</span>
1130   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&amp;nbsp&quot;</span><span class="s">)</span><span class="sc">;</span>
1131   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;&amp;nbsp&quot;</span><span class="s">)</span><span class="sc">;</span>
1132   <span class="i">$TableStartCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$CurTableNum</span> - <span class="n">1</span>]<span class="sc">;</span>
1133   <span class="i">$TableEndCmpdNum</span> = <span class="i">$</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}[<span class="i">$CurTableNum</span> - <span class="n">1</span>]<span class="sc">;</span>
1134   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">NavLinksCmpdInfo</span>}<span class="s">)</span> <span class="s">{</span>
1135     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;Showing compounds $TableStartCmpdNum to $TableEndCmpdNum of $LastCmpdNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1136   <span class="s">}</span>
1137   <span class="k">else</span> <span class="s">{</span>
1138     <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableRowDataValue</span><span class="s">(</span><span class="q">&quot;Showing table $CurTableNum of $LastTableNum&quot;</span><span class="s">)</span><span class="sc">;</span>
1139   <span class="s">}</span>
1140 
1141   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>}<span class="sc">;</span>
1142   <span class="c"># End link table...</span>
1143   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLTableEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1144   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLDivEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1145   <span class="k">print</span> <span class="i">$HTMLFileRef</span> <span class="i">SetupHTMLAlignmentEnd</span><span class="s">(</span><span class="q">&quot;center&quot;</span><span class="s">)</span><span class="sc">;</span>
1146 <span class="s">}</span>
1147 
1148 <span class="c"># Generate relative directory path...</span>
<a name="GetRelativeFileDir-"></a>1149 <span class="k">sub </span><span class="m">GetRelativeFileDir</span> <span class="s">{</span>
1150   <span class="k">my</span><span class="s">(</span><span class="i">$FromTableNum</span><span class="cm">,</span> <span class="i">$ToTableNum</span><span class="cm">,</span> <span class="i">$FirstTableNum</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
1151   <span class="k">my</span><span class="s">(</span><span class="i">$RelativeFileDir</span><span class="s">)</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1152 
1153   <span class="k">if</span> <span class="s">(</span><span class="i">$FromTableNum</span> == <span class="i">$FirstTableNum</span><span class="s">)</span> <span class="s">{</span>
1154     <span class="i">$RelativeFileDir</span> = <span class="s">(</span><span class="i">$ToTableNum</span> == <span class="i">$FirstTableNum</span><span class="s">)</span> ? <span class="q">&quot;.\/&quot;</span> <span class="co">:</span> <span class="q">&quot;.\/html\/&quot;</span><span class="sc">;</span>
1155   <span class="s">}</span>
1156   <span class="k">else</span> <span class="s">{</span>
1157     <span class="i">$RelativeFileDir</span> = <span class="s">(</span><span class="i">$ToTableNum</span> == <span class="i">$FirstTableNum</span><span class="s">)</span> ? <span class="q">&quot;..\/&quot;</span> <span class="co">:</span> <span class="q">&quot;.\/&quot;</span><span class="sc">;</span>
1158   <span class="s">}</span>
1159   <span class="k">return</span> <span class="i">$RelativeFileDir</span><span class="sc">;</span>
1160 <span class="s">}</span>
1161 
1162 <span class="c"># Based on hightlight stype, return appropriate colors for background or text...</span>
<a name="GetValueHighlightColors-"></a>1163 <span class="k">sub </span><span class="m">GetValueHighlightColors</span> <span class="s">{</span>
1164   <span class="k">my</span><span class="s">(</span><span class="i">$Label</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
1165   <span class="k">my</span><span class="s">(</span><span class="i">$DataType</span><span class="cm">,</span> <span class="i">$Criterion</span><span class="cm">,</span> <span class="i">$CriterionValue</span><span class="cm">,</span> <span class="i">$BgColor</span><span class="cm">,</span> <span class="i">$FontColor</span><span class="cm">,</span> <span class="i">$ValueOk</span><span class="cm">,</span> <span class="i">$Nothing</span><span class="s">)</span><span class="sc">;</span>
1166 
1167   <span class="i">$BgColor</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span> <span class="i">$FontColor</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1168   <span class="i">$DataType</span> = <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldTypesMap</span>}{<span class="i">$Label</span>}<span class="sc">;</span>
1169   <span class="i">$Criterion</span> = <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldCriteriaMap</span>}{<span class="i">$Label</span>}<span class="sc">;</span>
1170   <span class="i">$CriterionValue</span> = <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldValueMap</span>}{<span class="i">$Label</span>}<span class="sc">;</span>
1171 
1172   <span class="i">$ValueOk</span> = <span class="n">0</span><span class="sc">;</span>
1173   <span class="k">if</span> <span class="s">(</span><span class="i">$DataType</span> =~ <span class="q">/^numeric$/i</span><span class="s">)</span> <span class="s">{</span>
1174   <span class="j">NUMSWITCH:</span> <span class="s">{</span>
1175       <span class="k">if</span> <span class="s">(</span><span class="i">$Criterion</span> =~ <span class="q">/^ge$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$ValueOk</span> = <span class="s">(</span><span class="i">$Value</span> &gt;= <span class="i">$CriterionValue</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span> <span class="k">last</span> <span class="j">NUMSWITCH</span><span class="sc">;</span> <span class="s">}</span>
1176       <span class="k">if</span> <span class="s">(</span><span class="i">$Criterion</span> =~ <span class="q">/^le$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$ValueOk</span> = <span class="s">(</span><span class="i">$Value</span> &lt;= <span class="i">$CriterionValue</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span> <span class="k">last</span> <span class="j">NUMSWITCH</span><span class="sc">;</span> <span class="s">}</span>
1177       <span class="k">if</span> <span class="s">(</span><span class="i">$Criterion</span> =~ <span class="q">/^eq$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$ValueOk</span> = <span class="s">(</span><span class="i">$Value</span> == <span class="i">$CriterionValue</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span> <span class="k">last</span> <span class="j">NUMSWITCH</span><span class="sc">;</span> <span class="s">}</span>
1178       <span class="i">$Nothing</span> = <span class="n">1</span><span class="sc">;</span>
1179     <span class="s">}</span>
1180   <span class="s">}</span>
1181   <span class="k">else</span> <span class="s">{</span>
1182   <span class="j">TEXTSWITCH:</span> <span class="s">{</span>
1183       <span class="k">if</span> <span class="s">(</span><span class="i">$Criterion</span> =~ <span class="q">/^ge$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$ValueOk</span> = <span class="s">(</span><span class="i">$Value</span> <span class="k">ge</span> <span class="i">$CriterionValue</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span> <span class="k">last</span> <span class="j">TEXTSWITCH</span><span class="sc">;</span> <span class="s">}</span>
1184       <span class="k">if</span> <span class="s">(</span><span class="i">$Criterion</span> =~ <span class="q">/^le$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$ValueOk</span> = <span class="s">(</span><span class="i">$Value</span> <span class="k">le</span> <span class="i">$CriterionValue</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span> <span class="k">last</span> <span class="j">TEXTSWITCH</span><span class="sc">;</span> <span class="s">}</span>
1185       <span class="k">if</span> <span class="s">(</span><span class="i">$Criterion</span> =~ <span class="q">/^eq$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$ValueOk</span> = <span class="s">(</span><span class="i">$Value</span> <span class="k">eq</span> <span class="i">$CriterionValue</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span> <span class="k">last</span> <span class="j">TEXTSWITCH</span><span class="sc">;</span> <span class="s">}</span>
1186       <span class="i">$Nothing</span> = <span class="n">1</span><span class="sc">;</span>
1187     <span class="s">}</span>
1188   <span class="s">}</span>
1189   <span class="i">$BgColor</span> = <span class="i">$ValueOk</span> ? <span class="i">$OptionsInfo</span>{<span class="w">ValueOkColor</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">ValueNotOkColor</span>}<span class="sc">;</span>
1190   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">highlightstyle</span>} =~ <span class="q">/^text$/i</span><span class="s">)</span> <span class="s">{</span>
1191     <span class="i">$BgColor</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1192     <span class="i">$FontColor</span> = <span class="i">$ValueOk</span> ? <span class="i">$OptionsInfo</span>{<span class="w">ValueOkColor</span>} <span class="co">:</span> <span class="i">$OptionsInfo</span>{<span class="w">ValueNotOkColor</span>}<span class="sc">;</span>
1193   <span class="s">}</span>
1194   <span class="k">return</span> <span class="s">(</span><span class="i">$BgColor</span><span class="cm">,</span> <span class="i">$FontColor</span><span class="s">)</span><span class="sc">;</span>
1195 <span class="s">}</span>
1196 
1197 <span class="c">#Make sure appropriate mode specific option values are specified...</span>
<a name="ProcessOptions-"></a>1198 <span class="k">sub </span><span class="m">ProcessOptions</span> <span class="s">{</span>
1199 
1200   <span class="i">%OptionsInfo</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1201 
1202   <span class="i">$OptionsInfo</span>{<span class="w">TitleDisplay</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">titledisplay</span>} =~ <span class="q">/^yes$/i</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
1203 
1204   <span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>} = <span class="q">&quot;left&quot;</span><span class="sc">;</span> <span class="i">$OptionsInfo</span>{<span class="w">RowVAlignment</span>} = <span class="q">&quot;middle&quot;</span><span class="sc">;</span>
1205   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">align</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1206     <span class="k">my</span> <span class="s">(</span><span class="i">@AlignValues</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">align</span>}<span class="sc">;</span>
1207     <span class="k">if</span> <span class="s">(</span><span class="i">@AlignValues</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1208       <span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>} = <span class="i">$AlignValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1209       <span class="i">$OptionsInfo</span>{<span class="w">RowVAlignment</span>} = <span class="i">$AlignValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1210     <span class="s">}</span>
1211     <span class="k">elsif</span> <span class="s">(</span><span class="i">@AlignValues</span> == <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
1212       <span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>} = <span class="i">$AlignValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1213     <span class="s">}</span>
1214     <span class="k">else</span> <span class="s">{</span>
1215       <span class="k">die</span> <span class="q">&quot;Error: Invalid number of values, &quot;</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@AlignValues</span><span class="s">)</span> <span class="cm">,</span> <span class="q">&quot;, specified by \&quot;-a --align\&quot; option.\nIt must contain only one or two values.\n&quot;</span><span class="sc">;</span>
1216     <span class="s">}</span>
1217     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>} !~ <span class="q">/^(left|center|right)$/i</span><span class="s">)</span> <span class="s">{</span>
1218       <span class="k">die</span> <span class="q">&quot;Error: The horizontal alignment value specified, $Options{align}, for option \&quot;-a --align\&quot; is not valid. Allowed values: left, center, or right\n&quot;</span><span class="sc">;</span>
1219     <span class="s">}</span>
1220     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">RowVAlignment</span>} !~ <span class="q">/^(top|middle|bottom)$/i</span><span class="s">)</span> <span class="s">{</span>
1221       <span class="k">die</span> <span class="q">&quot;Error: The horizontal alignment value specified, $Options{align}, for option \&quot;-a --align\&quot; is not valid. Allowed values: top, middle, or bottom\n&quot;</span><span class="sc">;</span>
1222     <span class="s">}</span>
1223   <span class="s">}</span>
1224 
1225   <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowHAlignment</span>} = <span class="q">&quot;center&quot;</span><span class="sc">;</span> <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowVAlignment</span>} = <span class="q">&quot;middle&quot;</span><span class="sc">;</span>
1226   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">headeralign</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1227     <span class="k">my</span> <span class="s">(</span><span class="i">@AlignValues</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">headeralign</span>}<span class="sc">;</span>
1228     <span class="k">if</span> <span class="s">(</span><span class="i">@AlignValues</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1229       <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowHAlignment</span>} = <span class="i">$AlignValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1230       <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowVAlignment</span>} = <span class="i">$AlignValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1231     <span class="s">}</span>
1232     <span class="k">elsif</span> <span class="s">(</span><span class="i">@AlignValues</span> == <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
1233       <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowHAlignment</span>} = <span class="i">$AlignValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1234     <span class="s">}</span>
1235     <span class="k">else</span> <span class="s">{</span>
1236       <span class="k">die</span> <span class="q">&quot;Error: Invalid number of values, &quot;</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@AlignValues</span><span class="s">)</span> <span class="cm">,</span> <span class="q">&quot;, specified by \&quot;--headeralign\&quot; option.\nIt must contain only one or two value.\n&quot;</span><span class="sc">;</span>
1237     <span class="s">}</span>
1238     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowHAlignment</span>} !~ <span class="q">/^(left|center|right)$/i</span><span class="s">)</span> <span class="s">{</span>
1239       <span class="k">die</span> <span class="q">&quot;Error: The horizontal alignment value specified, $Options{headeralign}, for option \&quot;--headeralign\&quot; is not valid. Allowed values: left, center, or right\n&quot;</span><span class="sc">;</span>
1240     <span class="s">}</span>
1241     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowVAlignment</span>} !~ <span class="q">/^(top|middle|bottom)$/i</span><span class="s">)</span> <span class="s">{</span>
1242       <span class="k">die</span> <span class="q">&quot;Error: The horizontal alignment value specified, $Options{headeralign}, for option \&quot;-a --headeralign\&quot; is not valid. Allowed values: top, middle, or bottom\n&quot;</span><span class="sc">;</span>
1243     <span class="s">}</span>
1244   <span class="s">}</span>
1245 
1246   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">border</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1247     <span class="i">$OptionsInfo</span>{<span class="w">TableBorder</span>} = <span class="i">$Options</span>{<span class="w">border</span>}<span class="sc">;</span>
1248   <span class="s">}</span>
1249   <span class="k">else</span> <span class="s">{</span>
1250     <span class="i">$OptionsInfo</span>{<span class="w">TableBorder</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">mode</span>} =~ <span class="q">/^(plain|highlight)$/i</span><span class="s">)</span> || <span class="i">$Options</span>{<span class="w">mode</span>} =~ <span class="q">/^structuresonly$/i</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
1251   <span class="s">}</span>
1252   <span class="i">$OptionsInfo</span>{<span class="w">TableCellPadding</span>} = <span class="i">$Options</span>{<span class="w">cellpadding</span>}<span class="sc">;</span>
1253   <span class="i">$OptionsInfo</span>{<span class="w">TableCellSpacing</span>} = <span class="i">$Options</span>{<span class="w">cellspacing</span>}<span class="sc">;</span>
1254   <span class="i">$OptionsInfo</span>{<span class="w">FooterMsg</span>} = <span class="i">$Options</span>{<span class="w">footer</span>} ? <span class="i">$Options</span>{<span class="w">footer</span>} <span class="co">:</span> <span class="q">&quot;&quot;</span><span class="sc">;</span>
1255 
1256   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">headercolor</span>}<span class="s">)</span> <span class="s">{</span>
1257     <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowColor</span>} = <span class="i">$Options</span>{<span class="w">headercolor</span>}<span class="sc">;</span>
1258   <span class="s">}</span>
1259   <span class="k">else</span> <span class="s">{</span>
1260     <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowColor</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">mode</span>} =~ <span class="q">/^plain$/i</span><span class="s">)</span> ? <span class="q">&quot;&quot;</span> <span class="co">:</span> <span class="q">&quot;#e0e9eb&quot;</span><span class="sc">;</span>
1261   <span class="s">}</span>
1262 
1263   <span class="i">$OptionsInfo</span>{<span class="w">NavLinksAtBottom</span>} = <span class="n">1</span><span class="sc">;</span> <span class="i">$OptionsInfo</span>{<span class="w">NavLinksAtTop</span>} = <span class="n">0</span><span class="sc">;</span>
1264   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">displaylinks</span>} =~ <span class="q">/^(both|top)$/i</span><span class="s">)</span> <span class="s">{</span>
1265     <span class="i">$OptionsInfo</span>{<span class="w">NavLinksAtTop</span>} = <span class="n">1</span><span class="sc">;</span>
1266   <span class="s">}</span>
1267   <span class="i">$OptionsInfo</span>{<span class="w">NavLinksTableInfo</span>} = <span class="n">1</span><span class="sc">;</span> <span class="i">$OptionsInfo</span>{<span class="w">NavLinksCmpdInfo</span>} = <span class="n">0</span><span class="sc">;</span>
1268   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">displaylinksinfo</span>} =~ <span class="q">/^both$/i</span><span class="s">)</span> <span class="s">{</span>
1269     <span class="i">$OptionsInfo</span>{<span class="w">NavLinksCmpdInfo</span>} = <span class="n">1</span><span class="sc">;</span>
1270     <span class="i">$OptionsInfo</span>{<span class="w">NavLinksTableInfo</span>} = <span class="n">1</span><span class="sc">;</span>
1271   <span class="s">}</span>
1272   <span class="k">elsif</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">displaylinksinfo</span>} =~ <span class="q">/^compound$/i</span><span class="s">)</span> <span class="s">{</span>
1273     <span class="i">$OptionsInfo</span>{<span class="w">NavLinksCmpdInfo</span>} = <span class="n">1</span><span class="sc">;</span>
1274     <span class="i">$OptionsInfo</span>{<span class="w">NavLinksTableInfo</span>} = <span class="n">0</span><span class="sc">;</span>
1275   <span class="s">}</span>
1276 
1277   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">stylesheet</span>} =~ <span class="q">/^old$/i</span> <span class="s">)</span> <span class="s">{</span>
1278     <span class="k">if</span> <span class="s">(</span>!<span class="i">$Options</span>{<span class="w">stylesheetname</span>}<span class="s">)</span> <span class="s">{</span>
1279       <span class="k">die</span> <span class="q">&quot;Error: No stylesheet name specified using \&quot;--stylesheetname\&quot; option: It is required for \&quot;old\&quot; value of \&quot;-s --stylesheet\&quot; option. \n&quot;</span><span class="sc">;</span>
1280     <span class="s">}</span>
1281   <span class="s">}</span>
1282 
1283   <span class="k">my</span><span class="s">(</span><span class="i">@ColorValues</span><span class="s">)</span><span class="sc">;</span>
1284   <span class="i">$OptionsInfo</span>{<span class="w">ShadeRowsStatus</span>} = <span class="n">0</span><span class="sc">;</span>
1285   <span class="i">$OptionsInfo</span>{<span class="w">OddRowsShadeColor</span>} = <span class="q">&quot;#ffffff&quot;</span><span class="sc">;</span>
1286   <span class="i">$OptionsInfo</span>{<span class="w">EvenRowsShadeColor</span>} = <span class="q">&quot;#e0e9eb&quot;</span><span class="sc">;</span>
1287   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">shadecolor</span>}<span class="s">)</span> <span class="s">{</span>
1288     <span class="c"># Make sure only one value is specified...</span>
1289     <span class="i">@ColorValues</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">shadecolor</span>}<span class="sc">;</span>
1290     <span class="k">if</span> <span class="s">(</span><span class="i">@ColorValues</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1291       <span class="i">$OptionsInfo</span>{<span class="w">OddRowsShadeColor</span>} = <span class="i">$ColorValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1292       <span class="i">$OptionsInfo</span>{<span class="w">EvenRowsShadeColor</span>} = <span class="i">$ColorValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1293     <span class="s">}</span>
1294     <span class="k">else</span> <span class="s">{</span>
1295       <span class="k">die</span> <span class="q">&quot;Error: Invalid number of values, &quot;</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@ColorValues</span><span class="s">)</span> <span class="cm">,</span> <span class="q">&quot;, specified by \&quot;--shadecolor\&quot; option.\nIt must contain only two value.\n&quot;</span><span class="sc">;</span>
1296     <span class="s">}</span>
1297   <span class="s">}</span>
1298   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">mode</span>} =~ <span class="q">/^(shade|shadedhighlight|shadedstructuresonly)$/i</span><span class="s">)</span> <span class="s">{</span>
1299     <span class="i">$OptionsInfo</span>{<span class="w">ShadeRowsStatus</span>} = <span class="n">1</span><span class="sc">;</span>
1300   <span class="s">}</span>
1301 
1302   <span class="i">$OptionsInfo</span>{<span class="w">SettingUpCmpdSummaryPage</span>} = <span class="n">0</span><span class="sc">;</span>
1303   <span class="i">$OptionsInfo</span>{<span class="w">StrLinkShadeColor</span>} = <span class="s">(</span><span class="k">exists</span> <span class="i">$Options</span>{<span class="w">strlinkshadecolor</span>}<span class="s">)</span> ? <span class="i">$Options</span>{<span class="w">strlinkshadecolor</span>} <span class="co">:</span> <span class="q">&quot;#e0e9eb&quot;</span><span class="sc">;</span>
1304   <span class="i">$OptionsInfo</span>{<span class="w">DisplayStructure</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">structure</span>} =~ <span class="q">/^display$/i</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
1305   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} = <span class="i">$Options</span>{<span class="w">strviewertype</span>}<span class="sc">;</span>
1306   <span class="i">$OptionsInfo</span>{<span class="w">StrLinkNavigation</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinknavigation</span>} =~ <span class="q">/^yes$/i</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
1307   <span class="i">$OptionsInfo</span>{<span class="w">StrLinkTitleDisplay</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinktitledisplay</span>} =~ <span class="q">/^yes$/i</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
1308   <span class="i">$OptionsInfo</span>{<span class="w">StrLinkTitle</span>} = <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinktitle</span>}<span class="s">)</span> &amp;&amp; <span class="k">length</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinktitle</span>}<span class="s">)</span><span class="s">)</span> ? <span class="q">&quot;$Options{strlinktitle}&quot;</span> <span class="co">:</span> <span class="q">&quot;Compound Summary&quot;</span><span class="sc">;</span>
1309 
1310   <span class="k">my</span><span class="s">(</span><span class="i">$StrViewerEmbedUsingJS</span><span class="s">)</span> = <span class="s">(</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">strviewerembed</span>} =~ <span class="q">/^javascript$/i</span><span class="s">)</span> &amp;&amp; <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^(Jmol|MarvinView|ChemDrawPlugIn|ChemDrawActiveX|Chem3DActiveX)$/i</span> <span class="s">)</span><span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
1311 
1312   <span class="i">$OptionsInfo</span>{<span class="w">StrTableRows</span>} = <span class="n">6</span><span class="sc">;</span> <span class="i">$OptionsInfo</span>{<span class="w">StrTableCols</span>} = <span class="n">4</span><span class="sc">;</span>
1313   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strtablesize</span>}<span class="s">)</span> <span class="s">{</span>
1314     <span class="k">my</span><span class="s">(</span><span class="i">@StrTableSizeValues</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">strtablesize</span>}<span class="sc">;</span>
1315     <span class="k">if</span> <span class="s">(</span><span class="i">@StrTableSizeValues</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1316       <span class="i">$OptionsInfo</span>{<span class="w">StrTableRows</span>} = <span class="i">$StrTableSizeValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1317       <span class="i">$OptionsInfo</span>{<span class="w">StrTableCols</span>} = <span class="i">$StrTableSizeValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1318       <span class="k">if</span> <span class="s">(</span>!<span class="i">IsPositiveInteger</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrTableRows</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1319         <span class="k">die</span> <span class="q">&quot;Error: The first value specified, $OptionsInfo{StrTableRows},  for option \&quot;--strtablesize\&quot; is not valid: Allowed integer values: &gt; 0.\n&quot;</span><span class="sc">;</span>
1320       <span class="s">}</span>
1321       <span class="k">if</span> <span class="s">(</span>!<span class="i">IsPositiveInteger</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrTableCols</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1322         <span class="k">die</span> <span class="q">&quot;Error: The first value specified, $OptionsInfo{StrTableCols},  for option \&quot;--strtablesize\&quot; is not valid: Allowed integer values: &gt; 0.\n&quot;</span><span class="sc">;</span>
1323       <span class="s">}</span>
1324     <span class="s">}</span>
1325     <span class="k">else</span> <span class="s">{</span>
1326       <span class="k">die</span> <span class="q">&quot;Error: Invalid number of values, &quot;</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@StrTableSizeValues</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;, specified by \&quot;--strtablesize\&quot; option.\nIt must contain only two value for structuresonly \&quot;-m --mode\&quot; option.\n&quot;</span><span class="sc">;</span>
1327     <span class="s">}</span>
1328   <span class="s">}</span>
1329 
1330   <span class="c"># Setup applet information...</span>
1331   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>} = <span class="i">GetMayaChemToolsLibDirName</span><span class="s">(</span><span class="s">)</span> . <span class="q">&quot;/Jmol&quot;</span><span class="sc">;</span>
1332   <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerCodeBase</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>}<span class="sc">;</span>
1333   <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerCodeBase</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>}<span class="sc">;</span>
1334 
1335   <span class="k">my</span><span class="s">(</span><span class="i">$StrViewerAppletArchive</span><span class="cm">,</span> <span class="i">$StrViewerAppletCode</span><span class="s">)</span> = <span class="i">SetupDefaultAppletArchiveAndCode</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>}<span class="s">)</span><span class="sc">;</span>
1336   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strviewerconfig</span>}<span class="s">)</span> <span class="s">{</span>
1337     <span class="k">my</span><span class="s">(</span><span class="i">@StrViewerConfigParts</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">strviewerconfig</span>}<span class="sc">;</span>
1338     <span class="k">if</span> <span class="s">(</span><span class="i">@StrViewerConfigParts</span> &gt;=<span class="n">1</span> &amp;&amp; <span class="i">@StrViewerConfigParts</span> &lt;= <span class="n">3</span><span class="s">)</span> <span class="s">{</span>
1339       <span class="k">if</span> <span class="s">(</span><span class="i">@StrViewerConfigParts</span> == <span class="n">3</span><span class="s">)</span> <span class="s">{</span>
1340         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>} = <span class="i">$StrViewerConfigParts</span>[<span class="n">0</span>]<span class="sc">;</span>
1341         <span class="i">$StrViewerAppletArchive</span> = <span class="i">$StrViewerConfigParts</span>[<span class="n">1</span>]<span class="sc">;</span>
1342         <span class="i">$StrViewerAppletCode</span> = <span class="i">$StrViewerConfigParts</span>[<span class="n">2</span>]<span class="sc">;</span>
1343       <span class="s">}</span>
1344       <span class="k">elsif</span> <span class="s">(</span><span class="i">@StrViewerConfigParts</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1345         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>} = <span class="i">$StrViewerConfigParts</span>[<span class="n">0</span>]<span class="sc">;</span>
1346         <span class="i">$StrViewerAppletArchive</span> = <span class="i">$StrViewerConfigParts</span>[<span class="n">1</span>]<span class="sc">;</span>
1347         <span class="k">my</span><span class="s">(</span><span class="i">$AppletArchive</span><span class="cm">,</span> <span class="i">$AppletCode</span><span class="s">)</span> = <span class="i">SetupDefaultAppletArchiveAndCode</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>}<span class="s">)</span><span class="sc">;</span>
1348         <span class="i">$StrViewerAppletCode</span> = <span class="i">$AppletCode</span><span class="sc">;</span>
1349       <span class="s">}</span>
1350       <span class="k">else</span> <span class="s">{</span>
1351         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>} = <span class="i">$StrViewerConfigParts</span>[<span class="n">0</span>]<span class="sc">;</span>
1352         <span class="s">(</span><span class="i">$StrViewerAppletArchive</span><span class="cm">,</span> <span class="i">$StrViewerAppletCode</span><span class="s">)</span> = <span class="i">SetupDefaultAppletArchiveAndCode</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>}<span class="s">)</span><span class="sc">;</span>
1353       <span class="s">}</span>
1354     <span class="s">}</span>
1355     <span class="k">else</span> <span class="s">{</span>
1356       <span class="k">die</span> <span class="q">&quot;Error: Invalid number of values, &quot;</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@StrViewerConfigParts</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;, specified by \&quot;--strviewerconfig\&quot; option.\nNumver of allowed values:1 to 3 \n&quot;</span><span class="sc">;</span>
1357     <span class="s">}</span>
1358   <span class="s">}</span>
1359   <span class="k">else</span> <span class="s">{</span>
1360     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^(JME|MarvinView)$/i</span> <span class="s">)</span> <span class="s">{</span>
1361       <span class="k">die</span> <span class="q">&quot;Error: No codebase specified using \&quot;--strviewerconfig\&quot; option for $OptionsInfo{StrViewerType} structure viewer\n&quot;</span><span class="sc">;</span>
1362     <span class="s">}</span>
1363     <span class="k">if</span> <span class="s">(</span><span class="i">$StrViewerEmbedUsingJS</span> &amp;&amp; <span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} !~ <span class="q">/^Jmol$/i</span><span class="s">)</span> <span class="s">{</span>
1364       <span class="k">die</span> <span class="q">&quot;Error: No codebase specified using \&quot;--strviewerconfig\&quot; option for javascript value of \&quot;--strviewerembed\&quot; option for $OptionsInfo{StrViewerType} structure viewer \n&quot;</span><span class="sc">;</span>
1365     <span class="s">}</span>
1366   <span class="s">}</span>
1367 
1368   <span class="k">if</span> <span class="s">(</span><span class="k">-d</span> <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>}<span class="s">)</span> <span class="s">{</span>
1369     <span class="c"># Change local code base direcrory name to a relative directory name based on the</span>
1370     <span class="c"># current directory containing SD file; otherwise, Java applets and JavaScripts don&#39;t</span>
1371     <span class="c"># get loaded into Firefox and Chrome browsers.</span>
1372     <span class="c">#</span>
1373     <span class="c"># For top and sub HTML directories, add prefix &quot;../&quot; and &quot;../../&quot; to relative path...</span>
1374     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>} = <span class="w">File::Spec</span><span class="w">-&gt;abs2rel</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>}<span class="cm">,</span> <span class="i">Cwd::cwd</span><span class="s">(</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
1375 
1376     <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerCodeBase</span>} = <span class="q">&quot;../&quot;</span> . <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>}<span class="sc">;</span>
1377     <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerCodeBase</span>} = <span class="q">&quot;../../&quot;</span> . <span class="i">$OptionsInfo</span>{<span class="w">StrViewerCodeBase</span>}<span class="sc">;</span>
1378   <span class="s">}</span>
1379 
1380   <span class="c"># Setup structure viewer parameter information...</span>
1381   <span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1382   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strviewerparams</span>}<span class="s">)</span> <span class="s">{</span>
1383     <span class="k">my</span><span class="s">(</span><span class="i">@ParamsSplit</span><span class="cm">,</span> <span class="i">@ParamPairSplit</span><span class="cm">,</span> <span class="i">$ParamPair</span><span class="s">)</span><span class="sc">;</span>
1384     <span class="c">#@ParamsSplit = split &quot; &quot;, $Options{strviewerparams};</span>
1385     <span class="i">@ParamsSplit</span> = <span class="i">quotewords</span><span class="s">(</span><span class="q">&quot; &quot;</span><span class="cm">,</span> <span class="n">0</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">strviewerparams</span>}<span class="s">)</span><span class="sc">;</span>
1386     <span class="k">for</span> <span class="i">$ParamPair</span> <span class="s">(</span><span class="i">@ParamsSplit</span><span class="s">)</span> <span class="s">{</span>
1387       <span class="i">@ParamPairSplit</span> = <span class="k">split</span> <span class="q">&quot;=&quot;</span><span class="cm">,</span> <span class="i">$ParamPair</span><span class="sc">;</span>
1388       <span class="k">if</span> <span class="s">(</span><span class="i">@ParamPairSplit</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1389         <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="i">$ParamPairSplit</span>[<span class="n">0</span>]} = <span class="i">$ParamPairSplit</span>[<span class="n">1</span>]<span class="sc">;</span>
1390       <span class="s">}</span>
1391       <span class="k">else</span> <span class="s">{</span>
1392         <span class="k">die</span> <span class="q">&quot;Error: Invalid value, $ParamPair, specified by \&quot;--strviewerparams\&quot; option.\nValid values: name=value\n&quot;</span><span class="sc">;</span>
1393       <span class="s">}</span>
1394     <span class="s">}</span>
1395   <span class="s">}</span>
1396 
1397   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^(JME|Jmol|MarvinView)$/i</span> <span class="s">)</span> <span class="s">{</span>
1398     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">name</span>} = <span class="i">$StrViewerAppletCode</span><span class="sc">;</span>
1399     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">archive</span>} = <span class="i">$StrViewerAppletArchive</span><span class="sc">;</span>
1400     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">code</span>} = <span class="i">$StrViewerAppletCode</span><span class="sc">;</span>
1401   <span class="s">}</span>
1402   <span class="i">$OptionsInfo</span>{<span class="w">StrWidth</span>} = <span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">width</span>}<span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">width</span>} <span class="co">:</span> <span class="n">250</span><span class="sc">;</span>
1403   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">width</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrWidth</span>}<span class="sc">;</span>
1404   <span class="i">$OptionsInfo</span>{<span class="w">StrHeight</span>} = <span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">height</span>}<span class="s">)</span> ? <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">height</span>} <span class="co">:</span> <span class="n">170</span><span class="sc">;</span>
1405   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">height</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrHeight</span>}<span class="sc">;</span>
1406 
1407   <span class="i">$OptionsInfo</span>{<span class="w">StrLinkWidth</span>} = <span class="n">500</span><span class="sc">;</span>
1408   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkwidth</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1409     <span class="i">$OptionsInfo</span>{<span class="w">StrLinkWidth</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkwidth</span>}<span class="sc">;</span>
1410     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkwidth</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1411   <span class="s">}</span>
1412   <span class="i">$OptionsInfo</span>{<span class="w">StrLinkHeight</span>} = <span class="n">295</span><span class="sc">;</span>
1413   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkheight</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1414     <span class="i">$OptionsInfo</span>{<span class="w">StrLinkHeight</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkheight</span>}<span class="sc">;</span>
1415     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkheight</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1416   <span class="s">}</span>
1417 
1418   <span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1419   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1420     <span class="i">$OptionsInfo</span>{<span class="w">StrBgColorSpecified</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">bgcolor</span>}<span class="sc">;</span>
1421   <span class="s">}</span>
1422 
1423   <span class="i">$OptionsInfo</span>{<span class="w">StrLinkBgColorSpecified</span>} = <span class="q">&quot;#ffffff&quot;</span><span class="sc">;</span>
1424   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkbgcolor</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1425     <span class="i">$OptionsInfo</span>{<span class="w">StrLinkBgColorSpecified</span>} = <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkbgcolor</span>}<span class="sc">;</span>
1426     <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">strlinkbgcolor</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1427   <span class="s">}</span>
1428 
1429   <span class="c"># Setup Java Script usage...</span>
1430   <span class="i">$OptionsInfo</span>{<span class="w">StrViewerJSFileRef</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1431   <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerJSFileRef</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1432   <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerJSFileRef</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1433 
1434   <span class="k">if</span> <span class="s">(</span><span class="i">$StrViewerEmbedUsingJS</span><span class="s">)</span> <span class="s">{</span>
1435     <span class="k">my</span> <span class="s">(</span><span class="i">$StrViewerJSFileName</span><span class="s">)</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1436     <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strviewerjsfile</span>}<span class="s">)</span> <span class="s">{</span>
1437       <span class="i">$StrViewerJSFileName</span> = <span class="i">$Options</span>{<span class="w">strviewerjsfile</span>}<span class="sc">;</span>
1438     <span class="s">}</span>
1439     <span class="k">else</span> <span class="s">{</span>
1440       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^Jmol$/i</span><span class="s">)</span> <span class="s">{</span>
1441         <span class="i">$StrViewerJSFileName</span> = <span class="q">&quot;Jmol.js&quot;</span><span class="sc">;</span>
1442       <span class="s">}</span>
1443       <span class="k">elsif</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^MarvinView$/i</span><span class="s">)</span> <span class="s">{</span>
1444         <span class="i">$StrViewerJSFileName</span> = <span class="q">&quot;marvin.js&quot;</span><span class="sc">;</span>
1445       <span class="s">}</span>
1446       <span class="k">elsif</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^(ChemDrawPlugIn|ChemDrawActiveX)$/i</span><span class="s">)</span> <span class="s">{</span>
1447         <span class="i">$StrViewerJSFileName</span> = <span class="q">&quot;chemdraw.js&quot;</span><span class="sc">;</span>
1448       <span class="s">}</span>
1449       <span class="k">elsif</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^Chem3DActiveX$/i</span><span class="s">)</span> <span class="s">{</span>
1450         <span class="i">$StrViewerJSFileName</span> = <span class="q">&quot;chem3d.js&quot;</span><span class="sc">;</span>
1451       <span class="s">}</span>
1452     <span class="s">}</span>
1453     <span class="k">if</span> <span class="s">(</span><span class="i">$StrViewerJSFileName</span><span class="s">)</span> <span class="s">{</span>
1454       <span class="i">$OptionsInfo</span>{<span class="w">StrViewerParams</span>}{<span class="w">usejavascript</span>} = <span class="i">$StrViewerJSFileName</span><span class="sc">;</span>
1455       <span class="i">$OptionsInfo</span>{<span class="w">StrViewerJSFileRef</span>} = <span class="q">&quot;$OptionsInfo{StrViewerCodeBase}&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="q">&quot;$StrViewerJSFileName&quot;</span><span class="sc">;</span>
1456       <span class="i">$OptionsInfo</span>{<span class="w">TopHTMLDirStrViewerJSFileRef</span>} = <span class="q">&quot;$OptionsInfo{TopHTMLDirStrViewerCodeBase}&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="q">&quot;$StrViewerJSFileName&quot;</span><span class="sc">;</span>
1457       <span class="i">$OptionsInfo</span>{<span class="w">SubHTMLDirStrViewerJSFileRef</span>} = <span class="q">&quot;$OptionsInfo{SubHTMLDirStrViewerCodeBase}&quot;</span> . <span class="q">&quot;\/&quot;</span> . <span class="q">&quot;$StrViewerJSFileName&quot;</span><span class="sc">;</span>
1458     <span class="s">}</span>
1459   <span class="s">}</span>
1460 
1461   <span class="c"># Check any other user specified parametrs applicable to all structure viewers...</span>
1462 
1463   <span class="i">$OptionsInfo</span>{<span class="w">StructuresOnlyMode</span>} = <span class="n">0</span><span class="sc">;</span>
1464   <span class="i">$OptionsInfo</span>{<span class="w">MaxCmpdsPerTable</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">structure</span>} =~ <span class="q">/^display$/i</span><span class="s">)</span> ? <span class="n">15</span> <span class="co">:</span> <span class="n">50</span><span class="sc">;</span>
1465   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span> <span class="i">$Options</span>{<span class="w">numcmpds</span>}<span class="s">)</span> <span class="s">{</span>
1466     <span class="i">$OptionsInfo</span>{<span class="w">MaxCmpdsPerTable</span>} = <span class="i">$Options</span>{<span class="w">numcmpds</span>}<span class="sc">;</span>
1467   <span class="s">}</span>
1468   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">mode</span>} =~ <span class="q">/^(structuresonly|shadedstructuresonly)$/i</span><span class="s">)</span> <span class="s">{</span>
1469     <span class="i">$OptionsInfo</span>{<span class="w">MaxCmpdsPerTable</span>} = <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">MaxCmpdsPerTable</span>} &gt; <span class="n">0</span><span class="s">)</span> ? <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrTableRows</span>} * <span class="i">$OptionsInfo</span>{<span class="w">StrTableCols</span>}<span class="s">)</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
1470     <span class="i">$OptionsInfo</span>{<span class="w">StructuresOnlyMode</span>} = <span class="n">1</span><span class="sc">;</span>
1471   <span class="s">}</span>
1472   <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataField</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1473   <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldLabel</span>} = <span class="q">&quot;no&quot;</span><span class="sc">;</span>
1474   <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldPosition</span>} = <span class="q">&quot;bottom&quot;</span><span class="sc">;</span>
1475   <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldAlignment</span>} = <span class="q">&quot;center&quot;</span><span class="sc">;</span>
1476   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">cmpddatafield</span>}<span class="s">)</span> &amp;&amp; <span class="k">length</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">cmpddatafield</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1477     <span class="k">my</span> <span class="s">(</span><span class="i">@CmpdDataFieldValues</span><span class="s">)</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">cmpddatafield</span>}<span class="sc">;</span>
1478     <span class="k">if</span> <span class="s">(</span><span class="i">@CmpdDataFieldValues</span> == <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
1479       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataField</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1480     <span class="s">}</span>
1481     <span class="k">elsif</span> <span class="s">(</span><span class="i">@CmpdDataFieldValues</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1482       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataField</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1483       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldLabel</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1484     <span class="s">}</span>
1485     <span class="k">elsif</span> <span class="s">(</span><span class="i">@CmpdDataFieldValues</span> == <span class="n">3</span><span class="s">)</span> <span class="s">{</span>
1486       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataField</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1487       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldLabel</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1488       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldPosition</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">2</span>]<span class="sc">;</span>
1489     <span class="s">}</span>
1490     <span class="k">elsif</span> <span class="s">(</span><span class="i">@CmpdDataFieldValues</span> == <span class="n">4</span><span class="s">)</span> <span class="s">{</span>
1491       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataField</span>}  = <span class="i">$CmpdDataFieldValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1492       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldLabel</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1493       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldPosition</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">2</span>]<span class="sc">;</span>
1494       <span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldAlignment</span>} = <span class="i">$CmpdDataFieldValues</span>[<span class="n">3</span>]<span class="sc">;</span>
1495     <span class="s">}</span>
1496     <span class="k">else</span> <span class="s">{</span>
1497       <span class="k">die</span> <span class="q">&quot;Error: Invalid number of values, &quot;</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@CmpdDataFieldValues</span><span class="s">)</span> <span class="cm">,</span> <span class="q">&quot;, specified by \&quot;--cmpddatafield\&quot; option.\nIt must contain only one, two, three, or four values.\n&quot;</span><span class="sc">;</span>
1498     <span class="s">}</span>
1499     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldLabel</span>} !~ <span class="q">/^(yes|no)$/</span> <span class="s">)</span> <span class="s">{</span>
1500       <span class="k">die</span> <span class="q">&quot;Error: The label value specified, $Options{cmpddatafield}, for option \&quot;--cmpddatafield\&quot; is not valid. Allowed values: yes or no\n&quot;</span><span class="sc">;</span>
1501     <span class="s">}</span>
1502     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldPosition</span>} !~ <span class="q">/^(top|bottom)$/</span> <span class="s">)</span> <span class="s">{</span>
1503       <span class="k">die</span> <span class="q">&quot;Error: The position value specified, $Options{cmpddatafield}, for option \&quot;--cmpddatafield\&quot; is not valid. Allowed values: top or bottom\n&quot;</span><span class="sc">;</span>
1504     <span class="s">}</span>
1505     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CmpdDataFieldAlignment</span>} !~ <span class="q">/^(left|center|right)$/</span> <span class="s">)</span> <span class="s">{</span>
1506       <span class="k">die</span> <span class="q">&quot;Error: The alignment value specified, $Options{cmpddatafield}, for option \&quot;--cmpddatafield\&quot; is not valid. Allowed values: left, center, or right\n&quot;</span><span class="sc">;</span>
1507     <span class="s">}</span>
1508   <span class="s">}</span>
1509 
1510   <span class="c"># Process data fields to be displayed in tables...</span>
1511   <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedDataFields</span>} = <span class="k">exists</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">datafields</span>}<span class="s">)</span> ? <span class="i">$Options</span>{<span class="w">datafields</span>} <span class="co">:</span> <span class="q">&quot;All&quot;</span><span class="sc">;</span>
1512 
1513   <span class="i">$OptionsInfo</span>{<span class="w">ValueOkColor</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span> <span class="i">$OptionsInfo</span>{<span class="w">ValueNotOkColor</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span> <span class="i">$OptionsInfo</span>{<span class="w">HighlightStatus</span>} = <span class="n">0</span><span class="sc">;</span>
1514   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">mode</span>} =~ <span class="q">/^(highlight|shadedhighlight)$/i</span><span class="s">)</span> <span class="s">{</span>
1515     <span class="k">my</span><span class="s">(</span><span class="i">$HighlightMode</span><span class="cm">,</span> <span class="i">$HighlightBy</span><span class="s">)</span><span class="sc">;</span>
1516     <span class="i">$HighlightMode</span> = <span class="i">$Options</span>{<span class="w">mode</span>}<span class="sc">;</span> <span class="i">$HighlightBy</span> = <span class="i">$Options</span>{<span class="w">highlightby</span>}<span class="sc">;</span>
1517 
1518     <span class="i">$OptionsInfo</span>{<span class="w">HighlightStatus</span>} = <span class="n">1</span><span class="sc">;</span>
1519     <span class="i">$OptionsInfo</span>{<span class="w">ValueOkColor</span>} = <span class="q">&quot;#0fff0f&quot;</span><span class="sc">;</span>
1520     <span class="i">$OptionsInfo</span>{<span class="w">ValueNotOkColor</span>} = <span class="q">&quot;#ff0f0f&quot;</span><span class="sc">;</span>
1521     <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">highlightstyle</span>} =~ <span class="q">/^text$/i</span><span class="s">)</span> <span class="s">{</span>
1522       <span class="i">$OptionsInfo</span>{<span class="w">ValueOkColor</span>} = <span class="q">&quot;#0fbb0f&quot;</span><span class="sc">;</span>
1523       <span class="i">$OptionsInfo</span>{<span class="w">ValueNotOkColor</span>} = <span class="q">&quot;#ff0f0f&quot;</span><span class="sc">;</span>
1524     <span class="s">}</span>
1525     <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">highlightcolor</span>}<span class="s">)</span> <span class="s">{</span>
1526       <span class="c"># Make sure two values are specified...</span>
1527       <span class="i">@ColorValues</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">highlightcolor</span>}<span class="sc">;</span>
1528       <span class="k">if</span> <span class="s">(</span><span class="i">@ColorValues</span> == <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
1529         <span class="i">$OptionsInfo</span>{<span class="w">ValueOkColor</span>} = <span class="i">$ColorValues</span>[<span class="n">0</span>]<span class="sc">;</span>
1530         <span class="i">$OptionsInfo</span>{<span class="w">ValueNotOkColor</span>} = <span class="i">$ColorValues</span>[<span class="n">1</span>]<span class="sc">;</span>
1531       <span class="s">}</span>
1532       <span class="k">else</span> <span class="s">{</span>
1533         <span class="k">die</span> <span class="q">&quot;Error: Invalid number of values, &quot;</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@ColorValues</span><span class="s">)</span><span class="cm">,</span> <span class="q">&quot;, specified by \&quot;--highlightcolor\&quot; option.\nIt must contain only two value for $HighlightMode value specified using \&quot;-m --mode\&quot; option.\n&quot;</span><span class="sc">;</span>
1534       <span class="s">}</span>
1535     <span class="s">}</span>
1536     <span class="k">if</span> <span class="s">(</span>!<span class="i">$Options</span>{<span class="w">highlight</span>}<span class="s">)</span> <span class="s">{</span>
1537       <span class="k">die</span> <span class="q">&quot;Error: Specify columns to be highlighted using \&quot;--hightlight\&quot; option\n&quot;</span><span class="sc">;</span>
1538     <span class="s">}</span>
1539     <span class="c"># Retrieve quartet values from &quot;hightlight&quot; option...</span>
1540     <span class="k">my</span><span class="s">(</span><span class="i">@HighlightValueQuartets</span><span class="s">)</span><span class="sc">;</span>
1541 
1542     <span class="i">@HighlightValueQuartets</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1543     <span class="i">@HighlightValueQuartets</span> = <span class="k">split</span> <span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$Options</span>{<span class="w">highlight</span>}<span class="sc">;</span>
1544     <span class="k">if</span> <span class="s">(</span><span class="s">(</span><span class="i">@HighlightValueQuartets</span> % <span class="n">4</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1545       <span class="k">die</span> <span class="q">&quot;Error: Quartets not found in values specified using \&quot;--highlight\&quot; option for $HighlightMode \&quot;-m --mode\&quot;\n&quot;</span><span class="sc">;</span>
1546     <span class="s">}</span>
1547     <span class="c"># Process quartets...</span>
1548     <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$Label</span><span class="cm">,</span> <span class="i">$DataType</span><span class="cm">,</span> <span class="i">$Criterion</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
1549 
1550     <span class="i">@</span>{<span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldLabels</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1551     <span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldLabelsMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1552     <span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldTypesMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1553     <span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldCriteriaMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1554     <span class="i">%</span>{<span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldValueMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1555 
1556     <span class="k">for</span> <span class="s">(</span><span class="i">$Index</span> = <span class="n">0</span><span class="sc">;</span> <span class="i">$Index</span> &lt; <span class="i">@HighlightValueQuartets</span><span class="sc">;</span> <span class="i">$Index</span> = <span class="i">$Index</span> + <span class="n">4</span><span class="s">)</span> <span class="s">{</span>
1557       <span class="i">$Label</span> = <span class="i">$HighlightValueQuartets</span>[<span class="i">$Index</span>]<span class="sc">;</span>
1558       <span class="i">$DataType</span> = <span class="i">$HighlightValueQuartets</span>[<span class="i">$Index</span> + <span class="n">1</span>]<span class="sc">;</span>
1559       <span class="i">$Criterion</span> = <span class="i">$HighlightValueQuartets</span>[<span class="i">$Index</span> + <span class="n">2</span>]<span class="sc">;</span>
1560       <span class="i">$Value</span> = <span class="i">$HighlightValueQuartets</span>[<span class="i">$Index</span> + <span class="n">3</span>]<span class="sc">;</span>
1561       <span class="k">if</span> <span class="s">(</span><span class="i">$DataType</span> !~ <span class="q">/^(numeric|text)$/i</span><span class="s">)</span> <span class="s">{</span>
1562         <span class="k">die</span> <span class="q">&quot;Error: Invalid column data type, $DataType, specified in quartet, \&quot;$Label,$DataType,$Criterion,$Value\&quot;, using \&quot;--hightlight\&quot; option: Valid values: numeric or text\n&quot;</span><span class="sc">;</span>
1563       <span class="s">}</span>
1564       <span class="k">if</span> <span class="s">(</span><span class="i">$Criterion</span> !~ <span class="q">/^(eq|le|ge)$/i</span><span class="s">)</span> <span class="s">{</span>
1565         <span class="k">die</span> <span class="q">&quot;Error: Invalid criterion value, $Criterion, specified in quartet, \&quot;$Label,$DataType,$Criterion,$Value\&quot;, using \&quot;--hightlight\&quot; option: Valid values: le, ge, or eq\n&quot;</span><span class="sc">;</span>
1566       <span class="s">}</span>
1567       <span class="k">if</span> <span class="s">(</span><span class="i">$DataType</span> =~ <span class="q">/^numeric$/i</span><span class="s">)</span> <span class="s">{</span>
1568         <span class="k">if</span> <span class="s">(</span>!<span class="i">IsFloat</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1569           <span class="k">die</span> <span class="q">&quot;Error: Invalid criterion value, $Value, specified in quartet, \&quot;$Label,$DataType,$Criterion,$Value\&quot;, using \&quot;--hightlight\&quot; option: Numeric value required for numeric data type\n&quot;</span><span class="sc">;</span>
1570         <span class="s">}</span>
1571       <span class="s">}</span>
1572       <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldLabelsMap</span>}{<span class="i">$Label</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1573         <span class="k">die</span> <span class="q">&quot;Error: Invalid field label value, $Label, in quartet, \&quot;$Label,$DataType,$Criterion,$Value\&quot;, using \&quot;--hightlight\&quot; option: Multiple occurences of label.  \n&quot;</span><span class="sc">;</span>
1574       <span class="s">}</span>
1575       <span class="k">push</span> <span class="i">@</span>{<span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldLabels</span>}}<span class="cm">,</span> <span class="i">$Label</span><span class="sc">;</span>
1576       <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldLabelsMap</span>}{<span class="i">$Label</span>} = <span class="i">$Label</span><span class="sc">;</span>
1577       <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldTypesMap</span>}{<span class="i">$Label</span>} = <span class="i">$DataType</span><span class="sc">;</span>
1578       <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldCriteriaMap</span>}{<span class="i">$Label</span>} = <span class="i">$Criterion</span><span class="sc">;</span>
1579       <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedHighlightDataFieldValueMap</span>}{<span class="i">$Label</span>} = <span class="i">$Value</span><span class="sc">;</span>
1580     <span class="s">}</span>
1581   <span class="s">}</span>
1582 <span class="s">}</span>
1583 
1584 <span class="c"># Set up default archive and code values for a specific applet...</span>
<a name="SetupDefaultAppletArchiveAndCode-"></a>1585 <span class="k">sub </span><span class="m">SetupDefaultAppletArchiveAndCode</span> <span class="s">{</span>
1586   <span class="k">my</span><span class="s">(</span><span class="i">$ViewerType</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
1587   <span class="k">my</span><span class="s">(</span><span class="i">$Archive</span><span class="cm">,</span> <span class="i">$Code</span><span class="cm">,</span> <span class="i">$Nothing</span><span class="s">)</span><span class="sc">;</span>
1588 
1589  <span class="j">STRVIEWERTYPE:</span> <span class="s">{</span>
1590     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^JME$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$Archive</span> = <span class="q">&quot;JME.jar&quot;</span><span class="sc">;</span> <span class="i">$Code</span> = <span class="q">&quot;JME&quot;</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
1591     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^Jmol$/i</span><span class="s">)</span> <span class="s">{</span><span class="i">$Archive</span> = <span class="q">&quot;JmolApplet.jar&quot;</span><span class="sc">;</span> <span class="i">$Code</span> = <span class="q">&quot;JmolApplet&quot;</span><span class="sc">;</span>  <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
1592     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^MarvinView$/i</span><span class="s">)</span> <span class="s">{</span> <span class="i">$Archive</span> = <span class="q">&quot;marvin.jar&quot;</span><span class="sc">;</span> <span class="i">$Code</span> = <span class="q">&quot;MView&quot;</span><span class="sc">;</span> <span class="k">last</span> <span class="j">STRVIEWERTYPE</span><span class="sc">;</span> <span class="s">}</span>
1593     <span class="i">$Nothing</span> = <span class="n">1</span><span class="sc">;</span>
1594   <span class="s">}</span>
1595   <span class="k">return</span> <span class="s">(</span><span class="i">$Archive</span><span class="cm">,</span> <span class="i">$Code</span><span class="s">)</span><span class="sc">;</span>
1596 <span class="s">}</span>
1597 
1598 <span class="c"># Retrieve information about input SD files...</span>
<a name="RetrieveSDFilesInfo-"></a>1599 <span class="k">sub </span><span class="m">RetrieveSDFilesInfo</span> <span class="s">{</span>
1600   <span class="k">my</span><span class="s">(</span><span class="i">$SDFile</span><span class="cm">,</span> <span class="i">$FileDir</span><span class="cm">,</span> <span class="i">$FileName</span><span class="cm">,</span> <span class="i">$HTMLFile</span><span class="cm">,</span> <span class="i">$CSSFile</span><span class="cm">,</span> <span class="i">$HTMLRoot</span><span class="cm">,</span> <span class="i">$HTMLTitle</span><span class="cm">,</span> <span class="i">$FileExt</span><span class="cm">,</span> <span class="i">$Index</span><span class="cm">,</span> <span class="i">$TopHTMLDir</span><span class="s">)</span><span class="sc">;</span>
1601 
1602   <span class="i">%SDFilesInfo</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1603 
1604   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1605   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">CmpdCount</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1606   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SpecifiedDataFieldLabels</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1607 
1608   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1609   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">HTMLTitle</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1610   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1611 
1612   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TopHTMLDir</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1613   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SubHTMLDir</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1614   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SubMolDir</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1615 
1616 
1617   <span class="j">FILELIST:</span> <span class="k">for</span> <span class="i">$Index</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#SDFilesList</span><span class="s">)</span> <span class="s">{</span>
1618     <span class="i">$SDFile</span> = <span class="i">$SDFilesList</span>[<span class="i">$Index</span>]<span class="sc">;</span>
1619 
1620     <span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$Index</span>] = <span class="n">0</span><span class="sc">;</span>
1621     <span class="i">$SDFilesInfo</span>{<span class="w">CmpdCount</span>}[<span class="i">$Index</span>] = <span class="n">0</span><span class="sc">;</span>
1622     <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1623     <span class="i">$SDFilesInfo</span>{<span class="w">HTMLTitle</span>}[<span class="i">$Index</span>] = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1624     <span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}[<span class="i">$Index</span>] = <span class="n">0</span><span class="sc">;</span>
1625     <span class="i">$SDFilesInfo</span>{<span class="w">TopHTMLDir</span>}[<span class="i">$Index</span>] = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1626     <span class="i">$SDFilesInfo</span>{<span class="w">SubHTMLDir</span>}[<span class="i">$Index</span>] = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1627     <span class="i">$SDFilesInfo</span>{<span class="w">SubMolDir</span>}[<span class="i">$Index</span>] = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1628 
1629     <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SpecifiedDataFieldLabels</span>}[<span class="i">$Index</span>]} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1630 
1631     <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="k">-e</span> <span class="i">$SDFile</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1632       <span class="k">warn</span> <span class="q">&quot;Warning: Ignoring file $SDFile: It doesn&#39;t exist\n&quot;</span><span class="sc">;</span>
1633       <span class="k">next</span> <span class="j">FILELIST</span><span class="sc">;</span>
1634     <span class="s">}</span>
1635     <span class="k">if</span> <span class="s">(</span>!<span class="i">CheckFileType</span><span class="s">(</span><span class="i">$SDFile</span><span class="cm">,</span> <span class="q">&quot;sd sdf&quot;</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1636       <span class="k">warn</span> <span class="q">&quot;Warning: Ignoring file $SDFile: It&#39;s not a SD file\n&quot;</span><span class="sc">;</span>
1637       <span class="k">next</span> <span class="j">FILELIST</span><span class="sc">;</span>
1638     <span class="s">}</span>
1639     <span class="s">(</span><span class="i">$FileDir</span><span class="cm">,</span> <span class="i">$FileName</span><span class="cm">,</span> <span class="i">$FileExt</span><span class="s">)</span> = <span class="i">ParseFileName</span><span class="s">(</span><span class="i">$SDFile</span><span class="s">)</span><span class="sc">;</span>
1640 
1641     <span class="k">if</span> <span class="s">(</span>!<span class="k">open</span> <span class="w">SDFILE</span><span class="cm">,</span> <span class="q">&quot;$SDFile&quot;</span><span class="s">)</span> <span class="s">{</span>
1642       <span class="k">warn</span> <span class="q">&quot;Warning: Ignoring file $SDFile: Couldn&#39;t open it: $! \n&quot;</span><span class="sc">;</span>
1643       <span class="k">next</span> <span class="j">FILELIST</span><span class="sc">;</span>
1644     <span class="s">}</span>
1645     <span class="c"># Count number of compounds and collect all possible data field labels...</span>
1646     <span class="k">my</span><span class="s">(</span><span class="i">$CmpdCount</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">@DataFieldLabels</span><span class="cm">,</span> <span class="i">@CommonDataFieldLabels</span><span class="s">)</span><span class="sc">;</span>
1647     <span class="i">$CmpdCount</span> = <span class="n">0</span><span class="sc">;</span>
1648     <span class="i">@DataFieldLabels</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1649     <span class="i">@CommonDataFieldLabels</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1650     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SpecifiedDataFields</span>} =~ <span class="q">/^(All|Common)$/i</span> <span class="s">)</span> <span class="s">{</span>
1651       <span class="k">my</span><span class="s">(</span><span class="i">$DataFieldLabelsRef</span><span class="cm">,</span> <span class="i">$CommonDataFieldLabelsRef</span><span class="s">)</span><span class="sc">;</span>
1652       <span class="s">(</span><span class="i">$CmpdCount</span><span class="cm">,</span> <span class="i">$DataFieldLabelsRef</span><span class="cm">,</span> <span class="i">$CommonDataFieldLabelsRef</span><span class="s">)</span> = <span class="i">GetAllAndCommonCmpdDataHeaderLabels</span><span class="s">(</span>\<span class="i">*SDFILE</span><span class="s">)</span><span class="sc">;</span>
1653       <span class="k">push</span> <span class="i">@DataFieldLabels</span><span class="cm">,</span> <span class="i">@</span>{<span class="i">$DataFieldLabelsRef</span>}<span class="sc">;</span>
1654       <span class="k">push</span> <span class="i">@CommonDataFieldLabels</span><span class="cm">,</span> <span class="i">@</span>{<span class="i">$CommonDataFieldLabelsRef</span>}<span class="sc">;</span>
1655     <span class="s">}</span>
1656     <span class="k">else</span> <span class="s">{</span>
1657       <span class="k">while</span> <span class="s">(</span><span class="i">$CmpdString</span> = <span class="i">ReadCmpdString</span><span class="s">(</span>\<span class="i">*SDFILE</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1658         <span class="i">$CmpdCount</span>++<span class="sc">;</span>
1659       <span class="s">}</span>
1660     <span class="s">}</span>
1661     <span class="k">close</span> <span class="w">SDFILE</span><span class="sc">;</span>
1662 
1663     <span class="i">$FileDir</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span> <span class="i">$FileName</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span> <span class="i">$FileExt</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1664     <span class="s">(</span><span class="i">$FileDir</span><span class="cm">,</span> <span class="i">$FileName</span><span class="cm">,</span> <span class="i">$FileExt</span><span class="s">)</span> = <span class="i">ParseFileName</span><span class="s">(</span><span class="i">$SDFile</span><span class="s">)</span><span class="sc">;</span>
1665     <span class="i">$HTMLRoot</span> = <span class="i">$FileName</span><span class="sc">;</span>
1666     <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">root</span>} &amp;&amp; <span class="s">(</span><span class="i">@SDFilesList</span> == <span class="n">1</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1667       <span class="k">my</span> <span class="s">(</span><span class="i">$RootFileDir</span><span class="cm">,</span> <span class="i">$RootFileName</span><span class="cm">,</span> <span class="i">$RootFileExt</span><span class="s">)</span> = <span class="i">ParseFileName</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">root</span>}<span class="s">)</span><span class="sc">;</span>
1668       <span class="k">if</span> <span class="s">(</span><span class="i">$RootFileName</span> &amp;&amp; <span class="i">$RootFileExt</span><span class="s">)</span> <span class="s">{</span>
1669         <span class="i">$HTMLRoot</span> = <span class="i">$RootFileName</span><span class="sc">;</span>
1670       <span class="s">}</span>
1671       <span class="k">else</span> <span class="s">{</span>
1672         <span class="i">$HTMLRoot</span> = <span class="i">$Options</span>{<span class="w">root</span>}<span class="sc">;</span>
1673       <span class="s">}</span>
1674     <span class="s">}</span>
1675     <span class="i">$HTMLTitle</span> = <span class="i">$HTMLRoot</span><span class="sc">;</span>
1676     <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">title</span>} &amp;&amp; <span class="s">(</span><span class="i">@SDFilesList</span> == <span class="n">1</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1677       <span class="i">$HTMLTitle</span> = <span class="i">$Options</span>{<span class="w">title</span>}<span class="sc">;</span>
1678     <span class="s">}</span>
1679     <span class="i">$HTMLFile</span> = <span class="k">lc</span><span class="s">(</span><span class="i">$HTMLRoot</span><span class="s">)</span> . <span class="q">&quot;-html&quot;</span><span class="sc">;</span>
1680     <span class="k">if</span> <span class="s">(</span>!<span class="i">$Options</span>{<span class="w">overwrite</span>}<span class="s">)</span> <span class="s">{</span>
1681       <span class="k">if</span> <span class="s">(</span><span class="k">-d</span> <span class="i">$HTMLFile</span><span class="s">)</span> <span class="s">{</span>
1682         <span class="k">warn</span> <span class="q">&quot;Warning: Ignoring file $SDFile: The directory $HTMLFile already exists\n&quot;</span><span class="sc">;</span>
1683         <span class="k">next</span> <span class="j">FILELIST</span><span class="sc">;</span>
1684       <span class="s">}</span>
1685     <span class="s">}</span>
1686     <span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$Index</span>] = <span class="n">1</span><span class="sc">;</span>
1687     <span class="i">$SDFilesInfo</span>{<span class="w">CmpdCount</span>}[<span class="i">$Index</span>] = <span class="i">$CmpdCount</span><span class="sc">;</span>
1688     <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] = <span class="q">&quot;$HTMLRoot&quot;</span><span class="sc">;</span>
1689     <span class="i">$SDFilesInfo</span>{<span class="w">HTMLTitle</span>}[<span class="i">$Index</span>] = <span class="q">&quot;$HTMLTitle&quot;</span><span class="sc">;</span>
1690     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">MaxCmpdsPerTable</span>} == <span class="n">0</span> || <span class="i">$CmpdCount</span> &lt;= <span class="i">$OptionsInfo</span>{<span class="w">MaxCmpdsPerTable</span>}<span class="s">)</span> <span class="s">{</span>
1691       <span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}[<span class="i">$Index</span>] = <span class="n">0</span><span class="sc">;</span>
1692     <span class="s">}</span>
1693     <span class="k">else</span> <span class="s">{</span>
1694       <span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}[<span class="i">$Index</span>] = <span class="n">1</span><span class="sc">;</span>
1695     <span class="s">}</span>
1696     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SpecifiedDataFields</span>} =~ <span class="q">/^All$/i</span> <span class="s">)</span> <span class="s">{</span>
1697       <span class="k">push</span> <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SpecifiedDataFieldLabels</span>}[<span class="i">$Index</span>]}<span class="cm">,</span> <span class="i">@DataFieldLabels</span><span class="sc">;</span>
1698     <span class="s">}</span>
1699     <span class="k">elsif</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">SpecifiedDataFields</span>} =~ <span class="q">/^Common$/i</span><span class="s">)</span> <span class="s">{</span>
1700       <span class="k">push</span> <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SpecifiedDataFieldLabels</span>}[<span class="i">$Index</span>]}<span class="cm">,</span> <span class="i">@CommonDataFieldLabels</span><span class="sc">;</span>
1701     <span class="s">}</span>
1702     <span class="k">else</span> <span class="s">{</span>
1703       <span class="k">push</span> <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">SpecifiedDataFieldLabels</span>}[<span class="i">$Index</span>]}<span class="cm">,</span> <span class="k">split</span><span class="s">(</span><span class="q">&quot;,&quot;</span><span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">SpecifiedDataFields</span>}<span class="s">)</span><span class="sc">;</span>
1704     <span class="s">}</span>
1705 
1706     <span class="c"># Setup HTML data directories paths...</span>
1707     <span class="i">$TopHTMLDir</span> = <span class="k">lc</span><span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>]<span class="s">)</span> . <span class="q">&quot;-html&quot;</span><span class="sc">;</span>
1708     <span class="i">$SDFilesInfo</span>{<span class="w">TopHTMLDir</span>}[<span class="i">$Index</span>] = <span class="q">&quot;$TopHTMLDir&quot;</span><span class="sc">;</span>
1709     <span class="i">$SDFilesInfo</span>{<span class="w">SubHTMLDir</span>}[<span class="i">$Index</span>] = <span class="q">&quot;$TopHTMLDir\/html&quot;</span><span class="sc">;</span>
1710     <span class="i">$SDFilesInfo</span>{<span class="w">SubMolDir</span>}[<span class="i">$Index</span>] = <span class="q">&quot;$TopHTMLDir\/mol&quot;</span><span class="sc">;</span>
1711   <span class="s">}</span>
1712 <span class="s">}</span>
1713 
1714 <span class="c"># Setup information...</span>
<a name="SetupMultipleTablesAndMiscInfo-"></a>1715 <span class="k">sub </span><span class="m">SetupMultipleTablesAndMiscInfo</span> <span class="s">{</span>
1716   <span class="i">SetupMultipleTablesInfo</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1717   <span class="i">SetupMiscInfo</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1718 <span class="s">}</span>
1719 
1720 <span class="c"># Setup navigation link information for multiple tables...</span>
<a name="SetupMultipleTablesInfo-"></a>1721 <span class="k">sub </span><span class="m">SetupMultipleTablesInfo</span> <span class="s">{</span>
1722   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$LinesPerTable</span><span class="s">)</span><span class="sc">;</span>
1723 
1724   <span class="i">$LinesPerTable</span> = <span class="i">$OptionsInfo</span>{<span class="w">MaxCmpdsPerTable</span>}<span class="sc">;</span>
1725 
1726   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableCount</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1727   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1728   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1729   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1730 
1731   <span class="k">for</span> <span class="i">$Index</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#SDFilesList</span><span class="s">)</span> <span class="s">{</span>
1732     <span class="i">$SDFilesInfo</span>{<span class="w">TableCount</span>}[<span class="i">$Index</span>] = <span class="n">1</span><span class="sc">;</span>
1733     <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1734     <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1735     <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1736 
1737     <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$Index</span>]<span class="s">)</span> <span class="s">{</span>
1738       <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">MultipleHTMLTables</span>}[<span class="i">$Index</span>]<span class="s">)</span> <span class="s">{</span>
1739         <span class="k">my</span><span class="s">(</span><span class="i">$TableIndex</span><span class="cm">,</span> <span class="i">$TotalLines</span><span class="cm">,</span> <span class="i">$TableCount</span><span class="cm">,</span> <span class="i">$TableStartLineNum</span><span class="cm">,</span> <span class="i">$TableEndLineNum</span><span class="cm">,</span> <span class="i">$Name</span><span class="s">)</span><span class="sc">;</span>
1740 
1741         <span class="i">$TotalLines</span> = <span class="i">$SDFilesInfo</span>{<span class="w">CmpdCount</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
1742         <span class="i">$TableCount</span> = <span class="s">(</span><span class="i">$TotalLines</span> % <span class="i">$LinesPerTable</span><span class="s">)</span> ? <span class="s">(</span><span class="k">int</span><span class="s">(</span><span class="i">$TotalLines</span>/<span class="i">$LinesPerTable</span><span class="s">)</span> + <span class="n">1</span><span class="s">)</span> <span class="co">:</span> <span class="s">(</span><span class="i">$TotalLines</span>/<span class="i">$LinesPerTable</span><span class="s">)</span><span class="sc">;</span>
1743         <span class="i">$SDFilesInfo</span>{<span class="w">TableCount</span>}[<span class="i">$Index</span>] = <span class="i">$TableCount</span><span class="sc">;</span>
1744         <span class="k">for</span> <span class="i">$TableIndex</span> <span class="s">(</span><span class="n">1</span> .. <span class="i">$TableCount</span><span class="s">)</span> <span class="s">{</span>
1745           <span class="i">$TableStartLineNum</span> = <span class="s">(</span><span class="i">$TableIndex</span> - <span class="n">1</span><span class="s">)</span> * <span class="i">$LinesPerTable</span> + <span class="n">1</span><span class="sc">;</span>
1746           <span class="i">$TableEndLineNum</span> = <span class="s">(</span><span class="i">$TableIndex</span> == <span class="i">$TableCount</span><span class="s">)</span> ? <span class="i">$TotalLines</span> <span class="co">:</span> <span class="s">(</span><span class="i">$TableIndex</span> * <span class="i">$LinesPerTable</span><span class="s">)</span><span class="sc">;</span>
1747           <span class="k">push</span> <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableStartCmpdNum</span>}[<span class="i">$Index</span>]}<span class="cm">,</span> <span class="i">$TableStartLineNum</span><span class="sc">;</span>
1748           <span class="k">push</span> <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableEndCmpdNum</span>}[<span class="i">$Index</span>]}<span class="cm">,</span> <span class="i">$TableEndLineNum</span><span class="sc">;</span>
1749 
1750           <span class="c"># Setup HTML file names for all the tables...</span>
1751           <span class="i">$Name</span> = <span class="q">&quot;Cmpd&quot;</span> . <span class="q">&quot;$TableStartLineNum&quot;</span> . <span class="q">&quot;To&quot;</span> . <span class="q">&quot;$TableEndLineNum&quot;</span><span class="sc">;</span>
1752           <span class="k">if</span> <span class="s">(</span><span class="i">$TableIndex</span> == <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
1753             <span class="i">$Name</span> = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1754           <span class="s">}</span>
1755           <span class="i">$Name</span> = <span class="i">$SDFilesInfo</span>{<span class="w">HTMLRoot</span>}[<span class="i">$Index</span>] . <span class="i">$Name</span> . <span class="q">&quot;.html&quot;</span><span class="sc">;</span>
1756           <span class="k">push</span> <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">TableHTMLFiles</span>}[<span class="i">$Index</span>]}<span class="cm">,</span> <span class="i">$Name</span><span class="sc">;</span>
1757         <span class="s">}</span>
1758         <span class="c">#print &quot;$SDFilesList[$Index]: $TableCount -  @{$SDFilesInfo{TableStartCmpdNum}[$Index]} - @{$SDFilesInfo{TableEndCmpdNum}[$Index]} -  @{$SDFilesInfo{TableHTMLFiles}[$Index]}\n&quot;;</span>
1759       <span class="s">}</span>
1760     <span class="s">}</span>
1761   <span class="s">}</span>
1762 <span class="s">}</span>
1763 
1764 <span class="c"># Setup HTML tags and other information...</span>
<a name="SetupMiscInfo-"></a>1765 <span class="k">sub </span><span class="m">SetupMiscInfo</span> <span class="s">{</span>
1766   <span class="i">$SDFilesInfo</span>{<span class="w">RowHeaderTags</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1767   <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1768   <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledOddRowHeaderTags</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1769   <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledEvenRowHeaderTags</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1770   <span class="i">$SDFilesInfo</span>{<span class="w">TableRowHeaderTags</span>} = <span class="q">&quot;&quot;</span><span class="sc">;</span>
1771 
1772   <span class="i">$SDFilesInfo</span>{<span class="w">RowHeaderTags</span>} = <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>}<span class="cm">,</span> <span class="q">&quot;&quot;</span><span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">RowVAlignment</span>}<span class="s">)</span><span class="sc">;</span>
1773   <span class="i">$SDFilesInfo</span>{<span class="w">RowEndTags</span>} = <span class="i">SetupHTMLTableRowEnd</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1774 
1775   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ShadeRowsStatus</span>}<span class="s">)</span> <span class="s">{</span>
1776     <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledOddRowHeaderTags</span>} = <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">OddRowsShadeColor</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">RowVAlignment</span>}<span class="s">)</span><span class="sc">;</span>
1777     <span class="i">$SDFilesInfo</span>{<span class="w">BgFilledEvenRowHeaderTags</span>} = <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">RowHAlignment</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">EvenRowsShadeColor</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">RowVAlignment</span>}<span class="s">)</span><span class="sc">;</span>
1778   <span class="s">}</span>
1779 
1780   <span class="i">$SDFilesInfo</span>{<span class="w">TableRowHeaderTags</span>} = <span class="i">SetupHTMLTableRowHeader</span><span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowHAlignment</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowColor</span>}<span class="cm">,</span> <span class="i">$OptionsInfo</span>{<span class="w">TableHeaderRowVAlignment</span>}<span class="s">)</span><span class="sc">;</span>
1781 
1782   <span class="i">$SDFilesInfo</span>{<span class="w">MolEndTag</span>} = <span class="q">&quot;M  END&quot;</span><span class="sc">;</span>
1783   <span class="i">$SDFilesInfo</span>{<span class="w">White</span>} = <span class="q">qq(#ffffff)</span><span class="sc">;</span>
1784 <span class="s">}</span>
1785 
1786 <span class="c"># Setup various data directories to hold HTML and other related files...</span>
<a name="SetupDataDirs-"></a>1787 <span class="k">sub </span><span class="m">SetupDataDirs</span> <span class="s">{</span>
1788   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
1789   <span class="k">my</span><span class="s">(</span><span class="i">$TopHTMLDir</span><span class="cm">,</span> <span class="i">$SubHTMLDir</span><span class="cm">,</span> <span class="i">$SubMolDir</span><span class="cm">,</span> <span class="i">$CreateTopHTMLDir</span><span class="cm">,</span> <span class="i">$CreateSubHTMLDir</span><span class="cm">,</span> <span class="i">$CreateSubMolDir</span><span class="s">)</span><span class="sc">;</span>
1790 
1791   <span class="i">$TopHTMLDir</span> = <span class="i">$SDFilesInfo</span>{<span class="w">TopHTMLDir</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
1792   <span class="i">$SubHTMLDir</span> = <span class="i">$SDFilesInfo</span>{<span class="w">SubHTMLDir</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
1793   <span class="i">$SubMolDir</span> = <span class="i">$SDFilesInfo</span>{<span class="w">SubMolDir</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
1794 
1795   <span class="c"># Clean up existing directories...</span>
1796   <span class="k">if</span> <span class="s">(</span><span class="k">-d</span> <span class="i">$TopHTMLDir</span><span class="s">)</span> <span class="s">{</span>
1797     <span class="k">unlink</span> <span class="q">&quot;&lt;$TopHTMLDir/*.html&gt;&quot;</span><span class="sc">;</span>
1798     <span class="k">unlink</span> <span class="q">&quot;&lt;$TopHTMLDir/*.css&gt;&quot;</span><span class="sc">;</span>
1799   <span class="s">}</span>
1800   <span class="k">if</span> <span class="s">(</span><span class="k">-d</span> <span class="i">$SubHTMLDir</span><span class="s">)</span> <span class="s">{</span>
1801     <span class="k">unlink</span> <span class="q">&quot;&lt;$SubHTMLDir/*.html&gt;&quot;</span><span class="sc">;</span>
1802   <span class="s">}</span>
1803   <span class="k">if</span> <span class="s">(</span><span class="k">-d</span> <span class="i">$SubMolDir</span><span class="s">)</span> <span class="s">{</span>
1804     <span class="k">unlink</span> <span class="q">&quot;&lt;$SubMolDir/*.mol&gt;&quot;</span><span class="sc">;</span>
1805   <span class="s">}</span>
1806 
1807   <span class="c"># What directories need to be created...</span>
1808   <span class="i">$CreateTopHTMLDir</span> = <span class="s">(</span><span class="k">-d</span> <span class="i">$TopHTMLDir</span><span class="s">)</span> ? <span class="n">0</span> <span class="co">:</span> <span class="n">1</span><span class="sc">;</span>
1809   <span class="i">$CreateSubHTMLDir</span> = <span class="s">(</span><span class="k">-d</span> <span class="i">$SubHTMLDir</span><span class="s">)</span> ? <span class="n">0</span> <span class="co">:</span> <span class="n">1</span><span class="sc">;</span>
1810   <span class="i">$CreateSubMolDir</span> = <span class="n">0</span><span class="sc">;</span>
1811   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">StrViewerType</span>} =~ <span class="q">/^(Jmol|Chime|Chem3DActiveX|ChemDrawActiveX|ChemDrawPlugIn|ViewerActiveX)$/i</span><span class="s">)</span> <span class="s">{</span>
1812     <span class="i">$CreateSubMolDir</span> = <span class="s">(</span><span class="k">-d</span> <span class="i">$SubMolDir</span><span class="s">)</span> ? <span class="n">0</span> <span class="co">:</span> <span class="n">1</span><span class="sc">;</span>
1813   <span class="s">}</span>
1814 
1815   <span class="c"># Create appropriate directories...</span>
1816   <span class="k">if</span> <span class="s">(</span><span class="i">$CreateTopHTMLDir</span><span class="s">)</span> <span class="s">{</span>
1817     <span class="k">mkdir</span> <span class="i">$TopHTMLDir</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Couldn&#39;t mkdir $TopHTMLDir: $! \n&quot;</span><span class="sc">;</span>
1818   <span class="s">}</span>
1819   <span class="k">if</span> <span class="s">(</span><span class="i">$CreateSubHTMLDir</span><span class="s">)</span> <span class="s">{</span>
1820     <span class="k">mkdir</span> <span class="i">$SubHTMLDir</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Couldn&#39;t mkdir $SubHTMLDir: $! \n&quot;</span><span class="sc">;</span>
1821   <span class="s">}</span>
1822   <span class="k">else</span> <span class="s">{</span>
1823     <span class="k">unlink</span> <span class="q">&lt;$SubHTMLDir/*.html&gt;</span><span class="sc">;</span>
1824   <span class="s">}</span>
1825   <span class="k">if</span> <span class="s">(</span><span class="i">$CreateSubMolDir</span><span class="s">)</span> <span class="s">{</span>
1826     <span class="k">mkdir</span> <span class="i">$SubMolDir</span> <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Couldn&#39;t mkdir $SubMolDir: $! \n&quot;</span><span class="sc">;</span>
1827   <span class="s">}</span>
1828   <span class="k">return</span> <span class="s">(</span><span class="i">$TopHTMLDir</span><span class="cm">,</span> <span class="i">$SubHTMLDir</span><span class="cm">,</span> <span class="i">$SubMolDir</span><span class="s">)</span><span class="sc">;</span>
1829 <span class="s">}</span>
1830 
1831 <span class="c"># Setup script usage  and retrieve command line arguments specified using various options...</span>
<a name="SetupScriptUsage-"></a>1832 <span class="k">sub </span><span class="m">SetupScriptUsage</span> <span class="s">{</span>
1833 
1834   <span class="c"># Retrieve all the options...</span>
1835   <span class="i">%Options</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
1836 
1837   <span class="i">$Options</span>{<span class="w">mode</span>} = <span class="q">&quot;shade&quot;</span><span class="sc">;</span>
1838   <span class="i">$Options</span>{<span class="w">highlightstyle</span>} = <span class="q">&quot;background&quot;</span><span class="sc">;</span>
1839 
1840   <span class="i">$Options</span>{<span class="w">cellpadding</span>} = <span class="n">2</span><span class="sc">;</span>
1841   <span class="i">$Options</span>{<span class="w">cellspacing</span>} = <span class="n">1</span><span class="sc">;</span>
1842 
1843   <span class="i">$Options</span>{<span class="w">displaylinks</span>} = <span class="q">&quot;both&quot;</span><span class="sc">;</span>
1844   <span class="i">$Options</span>{<span class="w">displaylinksinfo</span>} = <span class="q">&quot;both&quot;</span><span class="sc">;</span>
1845   <span class="i">$Options</span>{<span class="w">stylesheet</span>} = <span class="q">&quot;new&quot;</span><span class="sc">;</span>
1846 
1847   <span class="i">$Options</span>{<span class="w">structure</span>} = <span class="q">&quot;display&quot;</span><span class="sc">;</span>
1848   <span class="i">$Options</span>{<span class="w">strlinktype</span>} = <span class="q">&quot;href&quot;</span><span class="sc">;</span>
1849   <span class="i">$Options</span>{<span class="w">strlinkmode</span>} = <span class="q">&quot;plain&quot;</span><span class="sc">;</span>
1850   <span class="i">$Options</span>{<span class="w">strlinknavigation</span>} = <span class="q">&quot;yes&quot;</span><span class="sc">;</span>
1851   <span class="i">$Options</span>{<span class="w">strlinktitledisplay</span>} = <span class="q">&quot;no&quot;</span><span class="sc">;</span>
1852 
1853   <span class="i">$Options</span>{<span class="w">strviewertype</span>} = <span class="q">&quot;Jmol&quot;</span><span class="sc">;</span>
1854   <span class="i">$Options</span>{<span class="w">strviewerembed</span>} = <span class="q">&quot;direct&quot;</span><span class="sc">;</span>
1855 
1856   <span class="i">$Options</span>{<span class="w">titledisplay</span>} = <span class="q">&quot;yes&quot;</span><span class="sc">;</span>
1857 
1858   <span class="k">if</span> <span class="s">(</span>!<span class="i">GetOptions</span><span class="s">(</span>\<span class="i">%Options</span><span class="cm">,</span> <span class="q">&quot;align|a=s&quot;</span><span class="cm">,</span> <span class="q">&quot;border|b=i&quot;</span><span class="cm">,</span> <span class="q">&quot;cellpadding=i&quot;</span><span class="cm">,</span> <span class="q">&quot;cellspacing=i&quot;</span><span class="cm">,</span> <span class="q">&quot;cmpddatafield|c=s&quot;</span><span class="cm">,</span> <span class="q">&quot;datafields=s&quot;</span><span class="cm">,</span> <span class="q">&quot;footer=s&quot;</span><span class="cm">,</span> <span class="q">&quot;displaylinks|d=s&quot;</span><span class="cm">,</span> <span class="q">&quot;displaylinksinfo=s&quot;</span><span class="cm">,</span> <span class="q">&quot;help|h&quot;</span><span class="cm">,</span> <span class="q">&quot;headeralign=s&quot;</span><span class="cm">,</span> <span class="q">&quot;headercolor=s&quot;</span><span class="cm">,</span> <span class="q">&quot;highlight=s&quot;</span><span class="cm">,</span> <span class="q">&quot;highlightcolor=s&quot;</span><span class="cm">,</span> <span class="q">&quot;highlightstyle=s&quot;</span><span class="cm">,</span> <span class="q">&quot;mode|m=s&quot;</span><span class="cm">,</span> <span class="q">&quot;numcmpds|n=i&quot;</span><span class="cm">,</span> <span class="q">&quot;overwrite|o&quot;</span><span class="cm">,</span> <span class="q">&quot;root|r=s&quot;</span><span class="cm">,</span> <span class="q">&quot;shadecolor=s&quot;</span><span class="cm">,</span> <span class="q">&quot;stylesheet=s&quot;</span><span class="cm">,</span> <span class="q">&quot;stylesheetname=s&quot;</span><span class="cm">,</span> <span class="q">&quot;structure|s=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strlinkmode=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strlinknavigation=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strlinkshadecolor=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strlinktitle=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strlinktitledisplay=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strlinktype=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strviewertype=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strviewerconfig=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strviewerparams=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strviewerembed=s&quot;</span><span class="cm">,</span>  <span class="q">&quot;strviewerjsfile=s&quot;</span><span class="cm">,</span> <span class="q">&quot;strtablesize=s&quot;</span><span class="cm">,</span> <span class="q">&quot;title|t=s&quot;</span><span class="cm">,</span> <span class="q">&quot;titledisplay=s&quot;</span><span class="cm">,</span> <span class="q">&quot;workingdir|w=s&quot;</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1859     <span class="k">die</span> <span class="q">&quot;\nTo get a list of valid options and their values, use \&quot;$ScriptName -h\&quot; or\n\&quot;perl -S $ScriptName -h\&quot; command and try again...\n&quot;</span><span class="sc">;</span>
1860   <span class="s">}</span>
1861 
1862   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">workingdir</span>}<span class="s">)</span> <span class="s">{</span>
1863     <span class="k">if</span> <span class="s">(</span>! <span class="k">-d</span> <span class="i">$Options</span>{<span class="w">workingdir</span>}<span class="s">)</span> <span class="s">{</span>
1864       <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{workingdir}, for option \&quot;-w --workingdir\&quot; is not a directory name.\n&quot;</span><span class="sc">;</span>
1865     <span class="s">}</span>
1866     <span class="k">chdir</span> <span class="i">$Options</span>{<span class="w">workingdir</span>} <span class="k">or</span> <span class="k">die</span> <span class="q">&quot;Error: Couldn&#39;t chdir $Options{workingdir}: $! \n&quot;</span><span class="sc">;</span>
1867   <span class="s">}</span>
1868   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">displaylinks</span>} !~ <span class="q">/^(top|bottom|both)$/i</span><span class="s">)</span> <span class="s">{</span>
1869     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{displaylinks}, for option \&quot;-d --displaylinks\&quot; is not valid. Allowed values: top, bottom, or both\n&quot;</span><span class="sc">;</span>
1870   <span class="s">}</span>
1871   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">displaylinksinfo</span>} !~ <span class="q">/^(compound|table|both)$/i</span><span class="s">)</span> <span class="s">{</span>
1872     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{displaylinksinfo}, for option \&quot;--displaylinksinfo\&quot; is not valid. Allowed values: compound, table, or both\n&quot;</span><span class="sc">;</span>
1873   <span class="s">}</span>
1874   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">highlightstyle</span>} !~ <span class="q">/^(background|text)$/i</span><span class="s">)</span> <span class="s">{</span>
1875     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{highlightstyle}, for option \&quot;--highlightstyle\&quot; is not valid. Allowed values: background or text\n&quot;</span><span class="sc">;</span>
1876   <span class="s">}</span>
1877   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">mode</span>} !~ <span class="q">/^(plain|shade|highlight|shadedhighlight|structuresonly|shadedstructuresonly)$/i</span><span class="s">)</span> <span class="s">{</span>
1878     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{mode}, for option \&quot;-m --mode\&quot; is not valid. Allowed values: plain, shade, hightlight, shadedhighlight, structuresonly, or shadedstructuresonly\n&quot;</span><span class="sc">;</span>
1879   <span class="s">}</span>
1880   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">stylesheet</span>} !~ <span class="q">/^(old|new|none)$/i</span><span class="s">)</span> <span class="s">{</span>
1881     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{stylesheet}, for option \&quot;-s --stylesheet\&quot; is not valid. Allowed values: old, new, or none\n&quot;</span><span class="sc">;</span>
1882   <span class="s">}</span>
1883   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">structure</span>} !~ <span class="q">/^(display|link)$/i</span><span class="s">)</span> <span class="s">{</span>
1884     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{structure}, for option \&quot;-s --structure\&quot; is not valid. Allowed values: display or link\n&quot;</span><span class="sc">;</span>
1885   <span class="s">}</span>
1886   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinkmode</span>} !~ <span class="q">/^(plain|shade)$/i</span><span class="s">)</span> <span class="s">{</span>
1887     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{strlinkmode}, for option \&quot;--strlinkmode\&quot; is not valid. Allowed values: plain or shade\n&quot;</span><span class="sc">;</span>
1888   <span class="s">}</span>
1889   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinktype</span>} !~ <span class="q">/^(href|button)$/i</span><span class="s">)</span> <span class="s">{</span>
1890     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{strlinktype}, for option \&quot;--strlinktype\&quot; is not valid. Allowed values: href or button\n&quot;</span><span class="sc">;</span>
1891   <span class="s">}</span>
1892   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinknavigation</span>} !~ <span class="q">/^(yes|no)$/i</span><span class="s">)</span> <span class="s">{</span>
1893     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{strlinknavigation}, for option \&quot;--strlinknavigation\&quot; is not valid. Allowed values: yes or no\n&quot;</span><span class="sc">;</span>
1894   <span class="s">}</span>
1895   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strlinktitledisplay</span>} !~ <span class="q">/^(yes|no)$/i</span><span class="s">)</span> <span class="s">{</span>
1896     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{strlinktitledisplay}, for option \&quot;--strlinktitledisplay\&quot; is not valid. Allowed values: yes or no\n&quot;</span><span class="sc">;</span>
1897   <span class="s">}</span>
1898   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strviewertype</span>} !~ <span class="q">/^(JME|Jmol|Chime|MarvinView|ChemDrawPlugIn|Chem3DActiveX|ChemDrawActiveX|ViewerActiveX)$/i</span><span class="s">)</span> <span class="s">{</span>
1899     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{strviewertype}, for option \&quot;--strviewertype\&quot; is not valid. Allowed values: Chem3DActiveX, ChemDrawActiveX, ChemDrawPlugIn, Chime, JME, Jmol, MarvinView, or ViewerActiveX.\n&quot;</span><span class="sc">;</span>
1900   <span class="s">}</span>
1901   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">strviewerembed</span>} !~ <span class="q">/^(direct|javascript)$/i</span><span class="s">)</span> <span class="s">{</span>
1902     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{strviewerembed},  for option \&quot;--strviewerembed\&quot; is not valid. Allowed values: direct or javascript \n&quot;</span><span class="sc">;</span>
1903   <span class="s">}</span>
1904   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span> <span class="i">$Options</span>{<span class="w">numcmpds</span>} &amp;&amp; <span class="i">$Options</span>{<span class="w">numcmpds</span>} &lt; <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
1905     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{numcmpds},  for option \&quot;-n --numcmpds\&quot; is not valid. Allowed values: &gt;= 0 \n&quot;</span><span class="sc">;</span>
1906   <span class="s">}</span>
1907   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">titledisplay</span>} !~ <span class="q">/^(yes|no)$/i</span><span class="s">)</span> <span class="s">{</span>
1908     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{titledisplay}, for option \&quot;--titledisplay\&quot; is not valid. Allowed values: yes or no\n&quot;</span><span class="sc">;</span>
1909   <span class="s">}</span>
1910   <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$Options</span>{<span class="w">border</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
1911     <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">border</span>} &lt; <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
1912       <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{border},  for option \&quot;--border\&quot; is not valid. Allowed values: &gt;= 0 \n&quot;</span><span class="sc">;</span>
1913     <span class="s">}</span>
1914   <span class="s">}</span>
1915   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">cellpadding</span>} &lt; <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
1916     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{cellpadding},  for option \&quot;--cellpadding\&quot; is not valid. Allowed values: &gt;= 0 \n&quot;</span><span class="sc">;</span>
1917   <span class="s">}</span>
1918   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">cellspacing</span>} &lt; <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
1919     <span class="k">die</span> <span class="q">&quot;Error: The value specified, $Options{cellspacing},  for option \&quot;--cellspacing\&quot; is not valid. Allowed values: &gt;= 0 \n&quot;</span><span class="sc">;</span>
1920   <span class="s">}</span>
1921 <span class="s">}</span>
1922 
<a name="EOF-"></a></pre>
<p>&nbsp;</p>
<br />
<center>
<img src="../../../images/h2o2.png">
</center>
</body>
</html>