c2012-11-17 16:29 UTC+0100 Viktor Szakats (vszakats syenar.net)

* website/samples.html
  - website/samples/dosshell.html
  - website/samples/dosshell.prg.html
  - website/samples/screenshots/dosshell_linux.png
  - website/samples/screenshots/dosshell_w32.png
  + website/samples/osshell.html
  + website/samples/osshell.prg.html
  + website/samples/screenshots/osshell_linux.png
  + website/samples/screenshots/osshell_w32.png
  - website/samples/dates4.html
  - website/samples/dates4.prg.html
  - website/samples/testcgi.html
  - website/samples/testcgi.prg.html
  - website/samples/screenshots/testcgi.gif
    * synced files with /tests dir
This commit is contained in:
Viktor Szakats
2012-11-17 15:30:46 +00:00
parent aa368a8b59
commit a78ac57942
11 changed files with 24 additions and 813 deletions

View File

@@ -16,6 +16,23 @@
The license applies to all entries newer than 2009-04-28.
*/
c2012-11-17 16:29 UTC+0100 Viktor Szakats (vszakats syenar.net)
* website/samples.html
- website/samples/dosshell.html
- website/samples/dosshell.prg.html
- website/samples/screenshots/dosshell_linux.png
- website/samples/screenshots/dosshell_w32.png
+ website/samples/osshell.html
+ website/samples/osshell.prg.html
+ website/samples/screenshots/osshell_linux.png
+ website/samples/screenshots/osshell_w32.png
- website/samples/dates4.html
- website/samples/dates4.prg.html
- website/samples/testcgi.html
- website/samples/testcgi.prg.html
- website/samples/screenshots/testcgi.gif
* synced files with /tests dir
2012-11-17 14:56 UTC+0100 Viktor Szakats (vszakats syenar.net)
* contrib/hbodbc/hbodbc.hbp
* contrib/hbodbc/odbc.c

View File

@@ -96,11 +96,10 @@
<li><a href="samples/codebloc.html" class="blue_link">Codeblock support sample (codebloc.prg)</a></li>
<li><a href="samples/codebl.html" class="blue_link">Codeblock advanced sample (codebl.prg)</a></li>
<li><a href="samples/dates3.html" class="blue_link">Manipulation of date values (dates3.prg)</a></li>
<li><a href="samples/dates4.html" class="blue_link">Dates values with hbct.lib & hbmisc.lib (dates4.prg)</a></li>
<li><a href="samples/byref.html" class="blue_link">Manipulating variables by reference (byref.prg) </a></li>
<li><a href="samples/parseini.html" class="blue_link">Test for Ini file reading/writing (parseini.prg)</a></li>
<li><a href="samples/initexit.html" class="blue_link">INIT and EXIT functions support (initexit.prg)</a><a href="samples/byref.html" class="blue_link"></a></li>
<li><a href="samples/dosshell.html" class="blue_link">Run command: About to shell to DOS (dosshell.prg)</a></li>
<li><a href="samples/osshell.html" class="blue_link">Run command: About to shell to OS (osshell.prg)</a></li>
<li><a href="samples/longdev.html" class="blue_link">Testing long string handling support (longdev.prg)</a></li>
<li><a href="samples/mousetst.html" class="blue_link">Mouse sample support (mousetst.prg) </a></li>
</ul></td>
@@ -274,7 +273,6 @@
<td >&nbsp;</td>
<td valign="top"><ul>
<li><a href="samples/testhtml.html" class="blue_link">Harbour Test of a HTML-Generator class (testhtml.prg)</a></li>
<li><a href="samples/testcgi.html" class="blue_link">Harbour Test of a CGI/HTML-Generator class (testcgi.prg)</a></li>
</ul></td>
<td >&nbsp;</td>
</tr>

View File

@@ -1,124 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Harbour Project - Samples -&gt; dates3</title>
<link href="../css/styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../menu/stmenu.js"></script></head>
<body>
<table width="740" border="0" align="center" cellpadding="0" cellspacing="1" bordercolor="#000000">
<tr>
<td valign="top" bgcolor="#000000"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="229" valign="top" background="../images/header_03.png" bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="6%"><img src="../images/header_01.jpg" width="287" height="164" /></td>
<td width="94%"><img src="../images/header_02.jpg" width="448" height="164" /></td>
</tr>
</table></td>
</tr>
<tr>
<td background="../images/menu-bg.gif"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="95%" height="65" valign="top" background="../images/menu-bg2.png"><script type="text/javascript" src="../menu/harbour-menu.js"></script></td>
<td width="5%" height="65" valign="middle">&nbsp;</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr valign="bottom">
<td width="2%" class="tabela_box_trans_TL">&nbsp;</td>
<td colspan="2"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="96%" height="26" valign="bottom" class="title">Manipulation of date values</td>
<td width="1%" rowspan="2" align="center" valign="middle"><a href="../samples.html"><img src="../images/more-samples.png" width="60" height="60" border="0" /></a></td>
</tr>
<tr>
<td width="99%" valign="top">Example of dates with several functions of hbct.lib &amp; hbmisc.lib </td>
</tr>
</table></td>
</tr>
<tr>
<td >&nbsp;</td>
<td width="96%" valign="top" class="sample_subtitle">&nbsp;</td>
<td width="2%" >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top" class="sample_subtitle">Files:</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top"><ul>
<li><a href="dates3.prg.html" class="blue_link">tests/dates3.prg</a></li>
</ul></td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top" class="sample_subtitle">Screenshot:</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top"><div align="center"><img src="screenshots/dates3_w32.png" width="440" height="340" /></div></td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top">&nbsp;</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top" class="sample_subtitle">How to compile:</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top">To learn how to compile/link this example see our specific section on this <a href="../samples.html#compile" class="blue_link">link</a>.</td>
<td >&nbsp;</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
</tr>
<tr>
<td height="32" background="../images/footer.gif"><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="33%" class="footer"><a href="/" class="whitelink">Copyright © 1999-<script type="text/javascript">copyright_year()</script> The Harbour Project.</a></td>
<td width="33%" class="footer"><div align="center"><a href="/legalnotes.html" class="whitelink">Terms of Service</a> | <a href="/contact.html" class="whitelink">Contact Us</a></div></td>
<td width="33%" class="footer"><div align="right">Design
by <a href="mailto: vailtom@gmail.com" class="whitelink">Vailton Renato</a> </div>
<div align="right"></div></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>

View File

@@ -1,59 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>dates4.prg</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.6000.16386" name=GENERATOR>
<STYLE type=text/css>
<!--
body { color: #000000; background-color: #FFFFFF; }
.any1-activedot { color: #800080; }
.any1-comment { color: #008080; }
.any1-constant { color: #800080; }
.any1-escapeampersand { color: #00FF00; font-weight: bold; }
.any1-function { color: #808000; }
.any1-identifier { color: #000000; }
.any1-number { color: #FF0000; }
.any1-preprocessor { }
.any1-reservedword { color: #800000; }
.any1-space { }
.any1-string { color: #0000FF; }
.any1-symbol { }
.any1-variable { color: #808000; }
-->
</STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<PRE><CODE><SPAN style="FONT: 10pt Courier New"><SPAN class=any1-comment>// Testing Harbour dates management.
</SPAN><SPAN class=any1-constant>#include</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-string>"set.ch"
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> s_cNewLine
</SPAN><SPAN class=any1-reservedword>function</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>main</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> i
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> dDate := </SPAN><SPAN class=any1-function>date</SPAN><SPAN class=any1-symbol>()
s_cNewLine := </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-function>set</SPAN><SPAN class=any1-symbol>( _SET_DATEFORMAT, </SPAN><SPAN class=any1-string>"dd/mm/yyyy"</SPAN><SPAN class=any1-space> )
</SPAN><SPAN class=any1-reservedword>for</SPAN><SPAN class=any1-space> i := </SPAN><SPAN class=any1-number>7</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>to</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-number>49</SPAN><SPAN class=any1-space> step </SPAN><SPAN class=any1-number>7
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>CheckDate</SPAN><SPAN class=any1-symbol>( dDate )
dDate += i
</SPAN><SPAN class=any1-reservedword>next
return</SPAN><SPAN class=any1-space> nil
</SPAN><SPAN class=any1-reservedword>function</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>CheckDate</SPAN><SPAN class=any1-symbol>( dDate )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Testing date:"</SPAN><SPAN class=any1-symbol>, dDate , s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Days in month..:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>daysinmonth</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Day of year....:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>doy</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Begin of month.:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>bom</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"End of month...:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>eom</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Week of month..:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>wom</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Week of year...:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>woy</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Begin of year..:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>boy</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"End of year....:"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-variable>eoy</SPAN><SPAN class=any1-symbol>( dDate ), s_cNewLine )
</SPAN><SPAN class=any1-variable>__Accept</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Press ENTER to continue..."</SPAN><SPAN class=any1-space> )
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-space> ), </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-space> ) )
</SPAN><SPAN class=any1-reservedword>return</SPAN><SPAN class=any1-space> nil</SPAN></SPAN></CODE></PRE>
</BODY></HTML>

View File

@@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Harbour Project - Samples -&gt; dosshell</title>
<title>Harbour Project - Samples -&gt; osshell</title>
<link href="../css/styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../menu/stmenu.js"></script></head>
<body>
@@ -64,7 +64,7 @@
<tr>
<td >&nbsp;</td>
<td valign="top"><ul>
<li><a href="dosshell.prg.html" class="blue_link">tests/dosshell.prg</a></li>
<li><a href="osshell.prg.html" class="blue_link">tests/osshell.prg</a></li>
</ul></td>
<td >&nbsp;</td>
</tr>
@@ -81,11 +81,11 @@
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top"><div align="center"><span class="read_more"><img src="screenshots/dosshell_w32.png" width="580" height="340" /><br />
dosshell sample running on Windows Vista<br />
<td valign="top"><div align="center"><span class="read_more"><img src="screenshots/osshell_w32.png" width="580" height="340" /><br />
osshell sample running on Windows Vista<br />
<br />
<img src="screenshots/dosshell_linux.png" width="545" height="131" /><br />
dosshell sample running on Linux<br />
<img src="screenshots/osshell_linux.png" width="545" height="131" /><br />
osshell sample running on Linux<br />
<br />
Note: To get the same result on Linux, you could execute a command &quot;run bash&quot;<br />
to forcing the beginning of a new shell. <br />

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -1,127 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Harbour Project - Samples -&gt; testcgi</title>
<link href="../css/styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../menu/stmenu.js"></script></head>
<body>
<table width="740" border="0" align="center" cellpadding="0" cellspacing="1" bordercolor="#000000">
<tr>
<td valign="top" bgcolor="#000000"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="229" valign="top" background="../images/header_03.png" bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="6%"><img src="../images/header_01.jpg" width="287" height="164" /></td>
<td width="94%"><img src="../images/header_02.jpg" width="448" height="164" /></td>
</tr>
</table></td>
</tr>
<tr>
<td background="../images/menu-bg.gif"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="95%" height="65" valign="top" background="../images/menu-bg2.png"><script type="text/javascript" src="../menu/harbour-menu.js"></script></td>
<td width="5%" height="65" valign="middle">&nbsp;</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr valign="bottom">
<td width="2%" class="tabela_box_trans_TL">&nbsp;</td>
<td colspan="2"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="96%" height="26" valign="bottom" class="title">Harbour Test of a CGI/HTML-Generator class</td>
<td width="1%" rowspan="2" align="center" valign="middle"><a href="../samples.html"><img src="../images/more-samples.png" width="60" height="60" border="0" /></a></td>
</tr>
<tr>
<td width="99%" valign="top">This example shows how to work with Web pages using a custom class to manipulate data coming from a file and returns it to web browser. </td>
</tr>
</table></td>
</tr>
<tr>
<td >&nbsp;</td>
<td width="96%" valign="top" class="sample_subtitle">&nbsp;</td>
<td width="2%" >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top" class="sample_subtitle">Files:</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top"><ul>
<li><a href="testcgi.prg.html" class="blue_link">tests/testcgi.prg</a></li>
<li><a href="function.cfm.html" class="blue_link">tests/function.cfm</a></li>
<li><div class="sample_link_missing">tests/list.txt (missing)</div>
</li>
</ul></td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top" class="sample_subtitle">Screenshot:</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top"><div align="center"><img src="screenshots/testcgi.gif" width="500" height="517" /></div></td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top">&nbsp;</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top" class="sample_subtitle">How to compile:</td>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
<td valign="top">To learn how to compile/link this example see our specific section on this <a href="../samples.html#compile" class="blue_link">link</a>.</td>
<td >&nbsp;</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
</tr>
<tr>
<td height="32" background="../images/footer.gif"><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="33%" class="footer"><a href="/" class="whitelink">Copyright © 1999-<script type="text/javascript">copyright_year()</script> The Harbour Project.</a></td>
<td width="33%" class="footer"><div align="center"><a href="/legalnotes.html" class="whitelink">Terms of Service</a> | <a href="/contact.html" class="whitelink">Contact Us</a></div></td>
<td width="33%" class="footer"><div align="right">Design
by <a href="mailto: vailtom@gmail.com" class="whitelink">Vailton Renato</a> </div>
<div align="right"></div></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>

View File

@@ -1,494 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>testcgi.prg</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.6000.16386" name=GENERATOR>
<STYLE type=text/css>
<!--
body { color: #000000; background-color: #FFFFFF; }
.any1-activedot { color: #800080; }
.any1-comment { color: #008080; }
.any1-constant { color: #800080; }
.any1-escapeampersand { color: #00FF00; font-weight: bold; }
.any1-function { color: #808000; }
.any1-identifier { color: #000000; }
.any1-number { color: #FF0000; }
.any1-preprocessor { }
.any1-reservedword { color: #800000; }
.any1-space { }
.any1-string { color: #0000FF; }
.any1-symbol { }
.any1-variable { color: #808000; }
-->
</STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<PRE><CODE><SPAN style="FONT: 10pt Courier New"><SPAN class=any1-comment>/*
*
* Harbour Test of a CGI/HTML-Generator class.
*
* 1999/05/30 First implementation.
*
* Tips: - Use ShowResults to make dynamic html (to test dynamic
* results, put the exe file on CGI-BIN dir or equivalent);
* - Use SaveToFile to make static html page
*
* 1999/05/31 Initial CGI functionality.
* 1999/06/01 Translated %nn to correct chars.
* 1999/06/02 Dynamic TAG matching routines (inspired on Delphi).
* First attempt to convert Delphi's ISAPI dll of WebSites'
* Function List
* (See http://www.flexsys-ci.com/harbour-project/functions.htm)
* 1999/06/11 List can be viewed online at
* http://www.flexsys-ci.com/cgi-bin/testcgi.exe
* 1999/07/29 Changed qOut() calls to OutStd() calls.
*
*/
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_SERVER_SOFTWARE </SPAN><SPAN class=any1-number>01
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_SERVER_NAME </SPAN><SPAN class=any1-number>02
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_GATEWAY_INTERFACE </SPAN><SPAN class=any1-number>03
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_SERVER_PROTOCOL </SPAN><SPAN class=any1-number>04
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_SERVER_PORT </SPAN><SPAN class=any1-number>05
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_REQUEST_METHOD </SPAN><SPAN class=any1-number>06
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_HTTP_ACCEPT </SPAN><SPAN class=any1-number>07
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_HTTP_USER_AGENT </SPAN><SPAN class=any1-number>08
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_HTTP_REFERER </SPAN><SPAN class=any1-number>09
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_PATH_INFO </SPAN><SPAN class=any1-number>10
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_PATH_TRANSLATED </SPAN><SPAN class=any1-number>11
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_SCRIPT_NAME </SPAN><SPAN class=any1-number>12
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_QUERY_STRING </SPAN><SPAN class=any1-number>13
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_REMOTE_HOST </SPAN><SPAN class=any1-number>14
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_REMOTE_ADDR </SPAN><SPAN class=any1-number>15
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_REMOTE_USER </SPAN><SPAN class=any1-number>16
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_AUTH_TYPE </SPAN><SPAN class=any1-number>17
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_CONTENT_TYPE </SPAN><SPAN class=any1-number>18
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_CONTENT_LENGTH </SPAN><SPAN class=any1-number>19
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> CGI_ANNOTATION_SERVER </SPAN><SPAN class=any1-number>20
</SPAN><SPAN class=any1-constant>#define</SPAN><SPAN class=any1-space> IF_BUFFER </SPAN><SPAN class=any1-number>65535
</SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>Main</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> oHTML := </SPAN><SPAN class=any1-variable>THTML</SPAN><SPAN class=any1-symbol>():</SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> hFile, nPos, cString, cBuf, i, cTable, cLine
oHTML:</SPAN><SPAN class=any1-variable>SetHTMLFile</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"function.cfm"</SPAN><SPAN class=any1-space> )
hFile := </SPAN><SPAN class=any1-function>fOpen</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"list.txt"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>0</SPAN><SPAN class=any1-space> )
cString := </SPAN><SPAN class=any1-function>space</SPAN><SPAN class=any1-symbol>( IF_BUFFER )
cBuf := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> cTable := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// Builds dynamic table replacement
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>WHILE</SPAN><SPAN class=any1-space> hFile != -</SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> .AND. (nPos := </SPAN><SPAN class=any1-function>fRead</SPAN><SPAN class=any1-symbol>( hFile, @cString, IF_BUFFER )) &gt; </SPAN><SPAN class=any1-number>0
</SPAN><SPAN class=any1-space> i := </SPAN><SPAN class=any1-number>1
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>DO</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>WHILE</SPAN><SPAN class=any1-space> i &lt;= nPos
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cString, i, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ) = </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-number>13</SPAN><SPAN class=any1-space> )
i := i + </SPAN><SPAN class=any1-number>1
</SPAN><SPAN class=any1-space> cLine := cBuf
cBuf := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>left</SPAN><SPAN class=any1-symbol>( cLine, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ) &lt;&gt; </SPAN><SPAN class=any1-string>';'
</SPAN><SPAN class=any1-space> cTable += </SPAN><SPAN class=any1-string>'&lt;TR&gt;'</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-symbol>)+</SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>13</SPAN><SPAN class=any1-symbol>) + ;
</SPAN><SPAN class=any1-string>'&lt;TD WIDTH="50%"&gt;&lt;FONT SIZE="2" FACE="Tahoma"&gt;'</SPAN><SPAN class=any1-space> + ;
</SPAN><SPAN class=any1-variable>ParseString</SPAN><SPAN class=any1-symbol>( cLine, </SPAN><SPAN class=any1-string>';'</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ) + </SPAN><SPAN class=any1-string>'&lt;/FONT&gt;&lt;/TD&gt;'</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-symbol>)+</SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>13</SPAN><SPAN class=any1-symbol>) + ;
</SPAN><SPAN class=any1-string>'&lt;TD WIDTH="16%"&gt;'</SPAN><SPAN class=any1-space> + ;
</SPAN><SPAN class=any1-reservedword>if</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-variable>ParseString</SPAN><SPAN class=any1-symbol>( cLine, </SPAN><SPAN class=any1-string>';'</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-space> ) = </SPAN><SPAN class=any1-string>'R'</SPAN><SPAN class=any1-symbol>, ;
</SPAN><SPAN class=any1-string>'&lt;CENTER&gt;&lt;IMG SRC="images/purple-m.gif"&gt;'</SPAN><SPAN class=any1-symbol>, ;
</SPAN><SPAN class=any1-string>'&amp;nbsp'</SPAN><SPAN class=any1-space> ) + ;
</SPAN><SPAN class=any1-string>'&lt;/TD&gt;'</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-symbol>)+</SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>13</SPAN><SPAN class=any1-symbol>) + ;
</SPAN><SPAN class=any1-string>'&lt;TD WIDTH="16%"&gt;'</SPAN><SPAN class=any1-space> + ;
</SPAN><SPAN class=any1-reservedword>if</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-variable>ParseString</SPAN><SPAN class=any1-symbol>( cLine, </SPAN><SPAN class=any1-string>';'</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-space> ) = </SPAN><SPAN class=any1-string>'S'</SPAN><SPAN class=any1-symbol>, ;
</SPAN><SPAN class=any1-string>'&lt;CENTER&gt;&lt;IMG SRC="images/purple-m.gif"&gt;'</SPAN><SPAN class=any1-symbol>, ;
</SPAN><SPAN class=any1-string>'&amp;nbsp'</SPAN><SPAN class=any1-space> ) + ;
</SPAN><SPAN class=any1-string>'&lt;/TD&gt;'</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-symbol>)+</SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>13</SPAN><SPAN class=any1-symbol>) + ;
</SPAN><SPAN class=any1-string>'&lt;TD WIDTH="16%"&gt;'</SPAN><SPAN class=any1-space> + ;
</SPAN><SPAN class=any1-reservedword>if</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-variable>ParseString</SPAN><SPAN class=any1-symbol>( cLine, </SPAN><SPAN class=any1-string>';'</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-space> ) = </SPAN><SPAN class=any1-string>'N'</SPAN><SPAN class=any1-symbol>, ;
</SPAN><SPAN class=any1-string>'&lt;CENTER&gt;&lt;IMG SRC="images/purple-m.gif"&gt;'</SPAN><SPAN class=any1-symbol>, ;
</SPAN><SPAN class=any1-string>'&amp;nbsp'</SPAN><SPAN class=any1-space> ) + ;
</SPAN><SPAN class=any1-string>'&lt;/TD&gt;'</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-symbol>)+</SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>(</SPAN><SPAN class=any1-number>13</SPAN><SPAN class=any1-symbol>) + ;
</SPAN><SPAN class=any1-string>'&lt;/TR&gt;'
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ELSE
</SPAN><SPAN class=any1-space> cBuf := cBuf + </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cString, i, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> )
</SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> i++
</SPAN><SPAN class=any1-reservedword>ENDDO
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDDO
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>fClose</SPAN><SPAN class=any1-symbol>( hFile )
oHTML:</SPAN><SPAN class=any1-variable>AddReplaceTag</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Functions"</SPAN><SPAN class=any1-symbol>, cTable )
oHTML:</SPAN><SPAN class=any1-variable>Generate</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-comment>// Uncomment the following if you don't have a Web Server to test
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// this sample
// oHTML:SaveToFile( "test.htm" )
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// If the above is uncommented, you may comment this line:
</SPAN><SPAN class=any1-space> oHTML:</SPAN><SPAN class=any1-variable>ShowResult</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( NIL )
</SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>ParseString</SPAN><SPAN class=any1-symbol>( cString, cDelim, nRet )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> cBuf, aElem, nPosFim, nSize, i
nSize := </SPAN><SPAN class=any1-function>len</SPAN><SPAN class=any1-symbol>( cString ) - </SPAN><SPAN class=any1-function>len</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-function>StrTran</SPAN><SPAN class=any1-symbol>( cString, cDelim, </SPAN><SPAN class=any1-string>''</SPAN><SPAN class=any1-space> ) ) + </SPAN><SPAN class=any1-number>1
</SPAN><SPAN class=any1-space> aElem := </SPAN><SPAN class=any1-function>array</SPAN><SPAN class=any1-symbol>( nSize )
cBuf := cString
i := </SPAN><SPAN class=any1-number>1
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FOR</SPAN><SPAN class=any1-space> i := </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>TO</SPAN><SPAN class=any1-space> nSize
nPosFim := </SPAN><SPAN class=any1-function>at</SPAN><SPAN class=any1-symbol>( cDelim, cBuf )
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> nPosFim &gt; </SPAN><SPAN class=any1-number>0
</SPAN><SPAN class=any1-space> aElem[i] := </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cBuf, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>, nPosFim - </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> )
</SPAN><SPAN class=any1-reservedword>ELSE
</SPAN><SPAN class=any1-space> aElem[i] := cBuf
</SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> cBuf := </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cBuf, nPosFim + </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>len</SPAN><SPAN class=any1-symbol>( cBuf ) )
</SPAN><SPAN class=any1-reservedword>NEXT</SPAN><SPAN class=any1-space> i
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( aElem[ nRet ] )
</SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>Hex2Dec</SPAN><SPAN class=any1-symbol>( cHex )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> aHex := { { </SPAN><SPAN class=any1-string>"0"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>00</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"1"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>01</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"2"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>02</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"3"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>03</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"4"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>04</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"5"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>05</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"6"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>06</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"7"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>07</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"8"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>08</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"9"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>09</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"A"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>10</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"B"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>11</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"C"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>12</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"D"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>13</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"E"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>14</SPAN><SPAN class=any1-space> }, ;
{ </SPAN><SPAN class=any1-string>"F"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>15</SPAN><SPAN class=any1-space> } }
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> nRet
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> nRes
nRet := </SPAN><SPAN class=any1-function>ascan</SPAN><SPAN class=any1-symbol>( aHex, {| x | </SPAN><SPAN class=any1-function>upper</SPAN><SPAN class=any1-symbol>( x[</SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>] ) = </SPAN><SPAN class=any1-function>upper</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-function>left</SPAN><SPAN class=any1-symbol>( cHex, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ) ) } )
nRes := aHex[nRet, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-symbol>] * </SPAN><SPAN class=any1-number>16
</SPAN><SPAN class=any1-space> nRet := </SPAN><SPAN class=any1-function>ascan</SPAN><SPAN class=any1-symbol>( aHex, {| x | </SPAN><SPAN class=any1-function>upper</SPAN><SPAN class=any1-symbol>( x[</SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>] ) = </SPAN><SPAN class=any1-function>upper</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-function>right</SPAN><SPAN class=any1-symbol>( cHex, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ) ) } )
nRes += aHex[nRet, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-symbol>]
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( nRes )
</SPAN><SPAN class=any1-comment>/*-------------------------------------------------------------------------*/
</SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> THTML
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> oClass
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> oClass == NIL
oClass = </SPAN><SPAN class=any1-variable>HBClass</SPAN><SPAN class=any1-symbol>():</SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"THTML"</SPAN><SPAN class=any1-space> )
oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cTitle"</SPAN><SPAN class=any1-space> ) </SPAN><SPAN class=any1-comment>// Page Title
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cBody"</SPAN><SPAN class=any1-space> ) </SPAN><SPAN class=any1-comment>// HTML Body Handler
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cBGColor"</SPAN><SPAN class=any1-space> ) </SPAN><SPAN class=any1-comment>// Background Color
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cLinkColor"</SPAN><SPAN class=any1-space> ) </SPAN><SPAN class=any1-comment>// Link Color
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cvLinkColor"</SPAN><SPAN class=any1-space> ) </SPAN><SPAN class=any1-comment>// Visited Link Color
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cContent"</SPAN><SPAN class=any1-space> ) </SPAN><SPAN class=any1-comment>// Page Content Handler
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"aCGIContents"</SPAN><SPAN class=any1-space> )
oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"aQueryFields"</SPAN><SPAN class=any1-space> )
oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"cHTMLFile"</SPAN><SPAN class=any1-space> )
oClass:</SPAN><SPAN class=any1-variable>AddData</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"aReplaceTags"</SPAN><SPAN class=any1-space> )
oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"New"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// New Method
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SetTitle"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>SetTitle</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Set Page Title
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"AddHead"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>AddHead</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Add &lt;H1&gt; Header
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"AddLink"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>AddLink</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Add Hyperlink
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"AddPara"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>AddPara</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Add Paragraph
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SaveToFile"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>SaveToFile</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Saves Content to File
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"ShowResult"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>ShowResult</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Show Result - SEE Fcn
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Generate"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>Generate</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Generate HTML
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SetHTMLFile"</SPAN><SPAN class=any1-symbol>,@</SPAN><SPAN class=any1-variable>SetHTMLFile</SPAN><SPAN class=any1-symbol>() ) </SPAN><SPAN class=any1-comment>// Sets source HTML file
</SPAN><SPAN class=any1-space> oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"ProcessCGI"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>ProcessCGI</SPAN><SPAN class=any1-symbol>() )
oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"GetCGIParam"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>GetCGIParam</SPAN><SPAN class=any1-symbol>() )
oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"QueryFields"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>QueryFields</SPAN><SPAN class=any1-symbol>() )
oClass:</SPAN><SPAN class=any1-variable>AddMethod</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"AddReplaceTag"</SPAN><SPAN class=any1-symbol>, @</SPAN><SPAN class=any1-variable>AddReplaceTag</SPAN><SPAN class=any1-symbol>() )
oClass:</SPAN><SPAN class=any1-function>Create</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( oClass:</SPAN><SPAN class=any1-variable>Instance</SPAN><SPAN class=any1-symbol>() )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>New</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
::cTitle := </SPAN><SPAN class=any1-string>"Untitled"
</SPAN><SPAN class=any1-space> ::cBGColor := </SPAN><SPAN class=any1-string>"#FFFFFF"
</SPAN><SPAN class=any1-space> ::cLinkColor := </SPAN><SPAN class=any1-string>"#0000FF"
</SPAN><SPAN class=any1-space> ::cvLinkColor := </SPAN><SPAN class=any1-string>"#FF0000"
</SPAN><SPAN class=any1-space> ::cContent := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> ::cBody := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> ::aCGIContents := {}
::aQueryFields := {}
::aReplaceTags := {}
::cHTMLFile := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>SetTitle</SPAN><SPAN class=any1-symbol>( cTitle )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
::cTitle := cTitle
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>AddLink</SPAN><SPAN class=any1-symbol>( cLinkTo, cLinkName )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
::cBody := ::cBody + ;
</SPAN><SPAN class=any1-string>"&lt;A HREF='"</SPAN><SPAN class=any1-space> + cLinkTo + </SPAN><SPAN class=any1-string>"'&gt;"</SPAN><SPAN class=any1-space> + cLinkName + </SPAN><SPAN class=any1-string>"&lt;/A&gt;"
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>AddHead</SPAN><SPAN class=any1-symbol>( cDescr )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-comment>// Why this doesn't work?
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// ::cBody += ...
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// ???
</SPAN><SPAN class=any1-space> ::cBody := ::cBody + ;
</SPAN><SPAN class=any1-string>"&lt;H1&gt;"</SPAN><SPAN class=any1-space> + cDescr + </SPAN><SPAN class=any1-string>"&lt;/H1&gt;"
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( NIL )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>AddPara</SPAN><SPAN class=any1-symbol>( cPara, cAlign )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
::cBody := ::cBody + ;
</SPAN><SPAN class=any1-string>"&lt;P ALIGN='"</SPAN><SPAN class=any1-space> + cAlign + </SPAN><SPAN class=any1-string>"'&gt;"</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
cPara + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
</SPAN><SPAN class=any1-string>"&lt;/P&gt;"
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>Generate</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> cFile, i, hFile, nPos, cRes := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> lFlag := </SPAN><SPAN class=any1-activedot>.f.
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// Is this a meta file or hand generated script?
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>empty</SPAN><SPAN class=any1-symbol>( ::cHTMLFile )
::cContent := ;
</SPAN><SPAN class=any1-string>"&lt;HTML&gt;&lt;HEAD&gt;"</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
</SPAN><SPAN class=any1-string>"&lt;TITLE&gt;"</SPAN><SPAN class=any1-space> + ::cTitle + </SPAN><SPAN class=any1-string>"&lt;/TITLE&gt;"</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
</SPAN><SPAN class=any1-string>"&lt;BODY link='"</SPAN><SPAN class=any1-space> + ::cLinkColor + </SPAN><SPAN class=any1-string>"' "</SPAN><SPAN class=any1-space> + ;
</SPAN><SPAN class=any1-string>"vlink='"</SPAN><SPAN class=any1-space> + ::cvLinkColor + </SPAN><SPAN class=any1-string>"'&gt;"</SPAN><SPAN class=any1-space> + + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
::cBody + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
</SPAN><SPAN class=any1-string>"&lt;/BODY&gt;&lt;/HTML&gt;"
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ELSE
</SPAN><SPAN class=any1-space> ::cContent := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// Does cHTMLFile exists?
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> !</SPAN><SPAN class=any1-function>File</SPAN><SPAN class=any1-symbol>( ::cHTMLFile )
::cContent := </SPAN><SPAN class=any1-string>"&lt;H1&gt;Server Error&lt;/H1&gt;&lt;P&gt;&lt;I&gt;No such file: "</SPAN><SPAN class=any1-space> + ;
::cHTMLFile
</SPAN><SPAN class=any1-reservedword>ELSE
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>// Read from file
</SPAN><SPAN class=any1-space> hFile := </SPAN><SPAN class=any1-function>fOpen</SPAN><SPAN class=any1-symbol>( ::cHTMLFile, </SPAN><SPAN class=any1-number>0</SPAN><SPAN class=any1-space> )
cFile := </SPAN><SPAN class=any1-function>space</SPAN><SPAN class=any1-symbol>( IF_BUFFER )
</SPAN><SPAN class=any1-reservedword>DO</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>WHILE</SPAN><SPAN class=any1-space> (nPos := </SPAN><SPAN class=any1-function>fRead</SPAN><SPAN class=any1-symbol>( hFile, @cFile, IF_BUFFER )) &gt; </SPAN><SPAN class=any1-number>0
</SPAN><SPAN class=any1-space> cFile := </SPAN><SPAN class=any1-function>left</SPAN><SPAN class=any1-symbol>( cFile, nPos )
cRes += cFile
cFile := </SPAN><SPAN class=any1-function>space</SPAN><SPAN class=any1-symbol>( IF_BUFFER )
</SPAN><SPAN class=any1-reservedword>ENDDO
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>fClose</SPAN><SPAN class=any1-symbol>( hFile )
</SPAN><SPAN class=any1-comment>// Replace matched tags
</SPAN><SPAN class=any1-space> i := </SPAN><SPAN class=any1-number>1
</SPAN><SPAN class=any1-space> ::cContent := cRes
</SPAN><SPAN class=any1-comment>/* TODO: Replace this DO WHILE with FOR..NEXT */
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>DO</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>WHILE</SPAN><SPAN class=any1-space> i &lt;= </SPAN><SPAN class=any1-function>len</SPAN><SPAN class=any1-symbol>( ::aReplaceTags )
::cContent := </SPAN><SPAN class=any1-function>strtran</SPAN><SPAN class=any1-symbol>( ::cContent, ;
</SPAN><SPAN class=any1-string>"&lt;#"</SPAN><SPAN class=any1-space> + ::aReplaceTags[i, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>] + </SPAN><SPAN class=any1-string>"&gt;"</SPAN><SPAN class=any1-symbol>, ::aReplaceTags[i, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-symbol>] )
i++
</SPAN><SPAN class=any1-reservedword>ENDDO
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>/* TODO: Clear remaining (not matched) tags */
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-comment>/*
cRes := ""
FOR i := 1 TO Len( ::cContent )
IF SubStr( ::cContent, i, 1 ) == "&lt;" .AND. ;
SubStr( ::cContent, i + 1, 1 ) == "#"
lFlag := .t.
ELSEIF SubStr( ::cContent, i, 1 ) == "&gt;" .AND. lFlag
lFlag := .f.
ELSEIF ! lFlag
cRes += SubStr( ::cContent, i, 1 )
ENDIF
NEXT
::cContent := cRes
*/
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>ShowResult</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-function>OutStd</SPAN><SPAN class=any1-symbol>( ;
</SPAN><SPAN class=any1-string>"HTTP/1.0 200 OK"</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
</SPAN><SPAN class=any1-string>"CONTENT-TYPE: TEXT/HTML"</SPAN><SPAN class=any1-space> + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + </SPAN><SPAN class=any1-variable>hb_eol</SPAN><SPAN class=any1-symbol>() + ;
::cContent )
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>SaveToFile</SPAN><SPAN class=any1-symbol>( cFile )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> hFile := </SPAN><SPAN class=any1-function>fCreate</SPAN><SPAN class=any1-symbol>( cFile )
</SPAN><SPAN class=any1-function>fWrite</SPAN><SPAN class=any1-symbol>( hFile, ::cContent )
</SPAN><SPAN class=any1-function>fClose</SPAN><SPAN class=any1-symbol>( hFile )
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>ProcessCGI</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> cQuery := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> cBuff := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> nBuff := </SPAN><SPAN class=any1-number>0
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> i
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>empty</SPAN><SPAN class=any1-symbol>( ::aCGIContents )
::aCGIContents := { ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SERVER_SOFTWARE"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SERVER_NAME"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"GATEWAY_INTERFACE"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SERVER_PROTOCOL"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SERVER_PORT"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"REQUEST_METHOD"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"HTTP_ACCEPT"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"HTTP_USER_AGENT"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"HTTP_REFERER"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"PATH_INFO"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"PATH_TRANSLATED"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"SCRIPT_NAME"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"QUERY_STRING"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"REMOTE_HOST"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"REMOTE_ADDR"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"REMOTE_USER"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"AUTH_TYPE"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"CONTENT_TYPE"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"CONTENT_LENGTH"</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>GetEnv</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"ANNOTATION_SERVER"</SPAN><SPAN class=any1-space> ) ;
}
cQuery := ::</SPAN><SPAN class=any1-variable>GetCGIParam</SPAN><SPAN class=any1-symbol>( CGI_QUERY_STRING )
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> !</SPAN><SPAN class=any1-function>empty</SPAN><SPAN class=any1-symbol>( cQuery )
::aQueryFields := {}
</SPAN><SPAN class=any1-reservedword>FOR</SPAN><SPAN class=any1-space> i := </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>TO</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>len</SPAN><SPAN class=any1-symbol>( cQuery ) + </SPAN><SPAN class=any1-number>1
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> i &gt; </SPAN><SPAN class=any1-function>len</SPAN><SPAN class=any1-symbol>( cQuery ) .OR. </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cQuery, i, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ) == </SPAN><SPAN class=any1-string>"&amp;"
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>aadd</SPAN><SPAN class=any1-symbol>( ::aQueryFields, ;
{ </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cBuff, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-function>at</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"="</SPAN><SPAN class=any1-symbol>, cBuff ) - </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ), ;
</SPAN><SPAN class=any1-function>strtran</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cBuff, </SPAN><SPAN class=any1-function>at</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"="</SPAN><SPAN class=any1-symbol>, cBuff ) + </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>, ;
</SPAN><SPAN class=any1-function>len</SPAN><SPAN class=any1-symbol>( cBuff ) - </SPAN><SPAN class=any1-function>at</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"="</SPAN><SPAN class=any1-symbol>, cBuff ) + </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ), </SPAN><SPAN class=any1-string>"+"</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-string>" "</SPAN><SPAN class=any1-space> ) } )
cBuff := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ELSE
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cQuery, i, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> ) = </SPAN><SPAN class=any1-string>"%"
</SPAN><SPAN class=any1-space> cBuff += </SPAN><SPAN class=any1-function>chr</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-variable>Hex2Dec</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cQuery, i + </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-space> ) ) )
nBuff := </SPAN><SPAN class=any1-number>3
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> nBuff = </SPAN><SPAN class=any1-number>0
</SPAN><SPAN class=any1-space> cBuff += </SPAN><SPAN class=any1-function>substr</SPAN><SPAN class=any1-symbol>( cQuery, i, </SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-space> )
</SPAN><SPAN class=any1-reservedword>ELSE
</SPAN><SPAN class=any1-space> nBuff--
</SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>NEXT
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>GetCGIParam</SPAN><SPAN class=any1-symbol>( nParam )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
::</SPAN><SPAN class=any1-variable>ProcessCGI</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> nParam &gt; </SPAN><SPAN class=any1-number>20</SPAN><SPAN class=any1-space> .OR. nParam &lt; </SPAN><SPAN class=any1-number>1
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-function>outerr</SPAN><SPAN class=any1-symbol>( </SPAN><SPAN class=any1-string>"Invalid CGI parameter"</SPAN><SPAN class=any1-space> )
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( NIL )
</SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( ::aCGIContents[nParam] )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>QueryFields</SPAN><SPAN class=any1-symbol>( cQueryName )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> cRet := </SPAN><SPAN class=any1-string>""
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> nRet
::</SPAN><SPAN class=any1-variable>ProcessCGI</SPAN><SPAN class=any1-symbol>()
nRet := </SPAN><SPAN class=any1-function>aScan</SPAN><SPAN class=any1-symbol>( ::aQueryFields, ;
{| x | </SPAN><SPAN class=any1-function>upper</SPAN><SPAN class=any1-symbol>( x[</SPAN><SPAN class=any1-number>1</SPAN><SPAN class=any1-symbol>] ) = </SPAN><SPAN class=any1-function>upper</SPAN><SPAN class=any1-symbol>( cQueryName ) } )
</SPAN><SPAN class=any1-reservedword>IF</SPAN><SPAN class=any1-space> nRet &gt; </SPAN><SPAN class=any1-number>0
</SPAN><SPAN class=any1-space> cRet := ::aQueryFields[nRet, </SPAN><SPAN class=any1-number>2</SPAN><SPAN class=any1-symbol>]
</SPAN><SPAN class=any1-reservedword>ENDIF
</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( cRet )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>SetHTMLFile</SPAN><SPAN class=any1-symbol>( cFile )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
::cHTMLFile := cFile
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN><SPAN class=any1-reservedword>STATIC</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-reservedword>FUNCTION</SPAN><SPAN class=any1-space> </SPAN><SPAN class=any1-variable>AddReplaceTag</SPAN><SPAN class=any1-symbol>( cTag, cReplaceText )
</SPAN><SPAN class=any1-reservedword>LOCAL</SPAN><SPAN class=any1-space> Self := </SPAN><SPAN class=any1-variable>QSelf</SPAN><SPAN class=any1-symbol>()
</SPAN><SPAN class=any1-function>aAdd</SPAN><SPAN class=any1-symbol>( ::aReplaceTags, { cTag, cReplaceText } )
</SPAN><SPAN class=any1-reservedword>RETURN</SPAN><SPAN class=any1-symbol>( Self )
</SPAN></SPAN>
</CODE></PRE>
</BODY></HTML>