update website for release of rivet 3.2.0
diff --git a/rivet/html/about.html b/rivet/html/about.html
index 9f0964e..895a188 100644
--- a/rivet/html/about.html
+++ b/rivet/html/about.html
@@ -84,7 +84,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 11-07-2018 14:48:59 UTC</div>
</div>
</div>
@@ -97,16 +97,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -114,13 +114,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -128,10 +128,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -142,7 +142,7 @@
<h4>Acknowledgments</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
+ <a class="navitem" title="ASF Sponsorship" href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
</li>
</ul>
</li>
diff --git a/rivet/html/ajax.html b/rivet/html/ajax.html
index a612efb..9c075b0 100644
--- a/rivet/html/ajax.html
+++ b/rivet/html/ajax.html
@@ -174,7 +174,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 28-11-2018 15:39:22 UTC</div>
</div>
</div>
@@ -184,16 +184,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -201,13 +201,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -215,10 +215,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -229,25 +229,25 @@
<h4>Examples</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Hello world!</a>
+ <a class="navitem" title="Hello world!" href="hello%5fworld.html">Hello world!</a>
</li>
<li class="navitem">
- <a href="colorful%5ftable.html">A colorful table</a>
+ <a class="navitem" title="A colorful table" href="colorful%5ftable.html">A colorful table</a>
</li>
<li class="navitem">
- <a href="var%5faccess.html">Variable Access</a>
+ <a class="navitem" title="Variable Access" href="var%5faccess.html">Variable Access</a>
</li>
<li class="navitem">
- <a href="file%5fupload.html">File Upload</a>
+ <a class="navitem" title="File Upload" href="file%5fupload.html">File Upload</a>
</li>
<li class="navitem">
- <a href="file%5fdownload.html">File Download</a>
+ <a class="navitem" title="File Download" href="file%5fdownload.html">File Download</a>
</li>
<li class="navitem">
- <a href="ajax.html">XML and Ajax</a>
+ <a class="navitem" title="XML and Ajax" href="ajax.html">XML and Ajax</a>
</li>
<li class="navitem">
- <a href="calendar.html">Calendar</a>
+ <a class="navitem" title="Calendar" href="calendar.html">Calendar</a>
</li>
</ul>
</li>
diff --git a/rivet/html/calendar.html b/rivet/html/calendar.html
index 29e8e71..03904f9 100644
--- a/rivet/html/calendar.html
+++ b/rivet/html/calendar.html
@@ -82,7 +82,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 28-11-2018 15:39:22 UTC</div>
</div>
</div>
@@ -92,16 +92,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -109,13 +109,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -123,10 +123,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -137,25 +137,25 @@
<h4>Examples</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Hello world!</a>
+ <a class="navitem" title="Hello world!" href="hello%5fworld.html">Hello world!</a>
</li>
<li class="navitem">
- <a href="colorful%5ftable.html">A colorful table</a>
+ <a class="navitem" title="A colorful table" href="colorful%5ftable.html">A colorful table</a>
</li>
<li class="navitem">
- <a href="var%5faccess.html">Variable Access</a>
+ <a class="navitem" title="Variable Access" href="var%5faccess.html">Variable Access</a>
</li>
<li class="navitem">
- <a href="file%5fupload.html">File Upload</a>
+ <a class="navitem" title="File Upload" href="file%5fupload.html">File Upload</a>
</li>
<li class="navitem">
- <a href="file%5fdownload.html">File Download</a>
+ <a class="navitem" title="File Download" href="file%5fdownload.html">File Download</a>
</li>
<li class="navitem">
- <a href="ajax.html">XML and Ajax</a>
+ <a class="navitem" title="XML and Ajax" href="ajax.html">XML and Ajax</a>
</li>
<li class="navitem">
- <a href="calendar.html">Calendar</a>
+ <a class="navitem" title="Calendar" href="calendar.html">Calendar</a>
</li>
</ul>
</li>
diff --git a/rivet/html/colorful_table.html b/rivet/html/colorful_table.html
index 0706353..e473ab3 100644
--- a/rivet/html/colorful_table.html
+++ b/rivet/html/colorful_table.html
@@ -71,7 +71,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 04-11-2020 00:10:39 UTC</div>
</div>
</div>
@@ -81,16 +81,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -98,13 +98,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -112,10 +112,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -126,25 +126,25 @@
<h4>Examples</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Hello world!</a>
+ <a class="navitem" title="Hello world!" href="hello%5fworld.html">Hello world!</a>
</li>
<li class="navitem">
- <a href="colorful%5ftable.html">A colorful table</a>
+ <a class="navitem" title="A colorful table" href="colorful%5ftable.html">A colorful table</a>
</li>
<li class="navitem">
- <a href="var%5faccess.html">Variable Access</a>
+ <a class="navitem" title="Variable Access" href="var%5faccess.html">Variable Access</a>
</li>
<li class="navitem">
- <a href="file%5fupload.html">File Upload</a>
+ <a class="navitem" title="File Upload" href="file%5fupload.html">File Upload</a>
</li>
<li class="navitem">
- <a href="file%5fdownload.html">File Download</a>
+ <a class="navitem" title="File Download" href="file%5fdownload.html">File Download</a>
</li>
<li class="navitem">
- <a href="ajax.html">XML and Ajax</a>
+ <a class="navitem" title="XML and Ajax" href="ajax.html">XML and Ajax</a>
</li>
<li class="navitem">
- <a href="calendar.html">Calendar</a>
+ <a class="navitem" title="Calendar" href="calendar.html">Calendar</a>
</li>
</ul>
</li>
diff --git a/rivet/html/download.html b/rivet/html/download.html
index 534f80a..e81cfbc 100644
--- a/rivet/html/download.html
+++ b/rivet/html/download.html
@@ -101,7 +101,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 17-10-2018 09:54:31 UTC</div>
</div>
</div>
@@ -114,16 +114,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -131,13 +131,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -145,10 +145,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -159,7 +159,7 @@
<h4>Acknowledgments</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
+ <a class="navitem" title="ASF Sponsorship" href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
</li>
</ul>
</li>
diff --git a/rivet/html/file_download.html b/rivet/html/file_download.html
index fb424d2..c663297 100644
--- a/rivet/html/file_download.html
+++ b/rivet/html/file_download.html
@@ -115,7 +115,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 28-11-2018 15:39:22 UTC</div>
</div>
</div>
@@ -125,16 +125,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -142,13 +142,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -156,10 +156,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -170,25 +170,25 @@
<h4>Examples</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Hello world!</a>
+ <a class="navitem" title="Hello world!" href="hello%5fworld.html">Hello world!</a>
</li>
<li class="navitem">
- <a href="colorful%5ftable.html">A colorful table</a>
+ <a class="navitem" title="A colorful table" href="colorful%5ftable.html">A colorful table</a>
</li>
<li class="navitem">
- <a href="var%5faccess.html">Variable Access</a>
+ <a class="navitem" title="Variable Access" href="var%5faccess.html">Variable Access</a>
</li>
<li class="navitem">
- <a href="file%5fupload.html">File Upload</a>
+ <a class="navitem" title="File Upload" href="file%5fupload.html">File Upload</a>
</li>
<li class="navitem">
- <a href="file%5fdownload.html">File Download</a>
+ <a class="navitem" title="File Download" href="file%5fdownload.html">File Download</a>
</li>
<li class="navitem">
- <a href="ajax.html">XML and Ajax</a>
+ <a class="navitem" title="XML and Ajax" href="ajax.html">XML and Ajax</a>
</li>
<li class="navitem">
- <a href="calendar.html">Calendar</a>
+ <a class="navitem" title="Calendar" href="calendar.html">Calendar</a>
</li>
</ul>
</li>
diff --git a/rivet/html/file_upload.html b/rivet/html/file_upload.html
index 7a1cbe8..79b1d54 100644
--- a/rivet/html/file_upload.html
+++ b/rivet/html/file_upload.html
@@ -75,7 +75,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 28-11-2018 15:39:22 UTC</div>
</div>
</div>
@@ -85,16 +85,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -102,13 +102,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -116,10 +116,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -130,25 +130,25 @@
<h4>Examples</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Hello world!</a>
+ <a class="navitem" title="Hello world!" href="hello%5fworld.html">Hello world!</a>
</li>
<li class="navitem">
- <a href="colorful%5ftable.html">A colorful table</a>
+ <a class="navitem" title="A colorful table" href="colorful%5ftable.html">A colorful table</a>
</li>
<li class="navitem">
- <a href="var%5faccess.html">Variable Access</a>
+ <a class="navitem" title="Variable Access" href="var%5faccess.html">Variable Access</a>
</li>
<li class="navitem">
- <a href="file%5fupload.html">File Upload</a>
+ <a class="navitem" title="File Upload" href="file%5fupload.html">File Upload</a>
</li>
<li class="navitem">
- <a href="file%5fdownload.html">File Download</a>
+ <a class="navitem" title="File Download" href="file%5fdownload.html">File Download</a>
</li>
<li class="navitem">
- <a href="ajax.html">XML and Ajax</a>
+ <a class="navitem" title="XML and Ajax" href="ajax.html">XML and Ajax</a>
</li>
<li class="navitem">
- <a href="calendar.html">Calendar</a>
+ <a class="navitem" title="Calendar" href="calendar.html">Calendar</a>
</li>
</ul>
</li>
diff --git a/rivet/html/hello_world.html b/rivet/html/hello_world.html
index 894eba8..0514b49 100644
--- a/rivet/html/hello_world.html
+++ b/rivet/html/hello_world.html
@@ -75,7 +75,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 26-11-2018 17:48:19 UTC</div>
</div>
</div>
@@ -85,16 +85,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -102,13 +102,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -116,10 +116,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -130,25 +130,25 @@
<h4>Examples</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Hello world!</a>
+ <a class="navitem" title="Hello world!" href="hello%5fworld.html">Hello world!</a>
</li>
<li class="navitem">
- <a href="colorful%5ftable.html">A colorful table</a>
+ <a class="navitem" title="A colorful table" href="colorful%5ftable.html">A colorful table</a>
</li>
<li class="navitem">
- <a href="var%5faccess.html">Variable Access</a>
+ <a class="navitem" title="Variable Access" href="var%5faccess.html">Variable Access</a>
</li>
<li class="navitem">
- <a href="file%5fupload.html">File Upload</a>
+ <a class="navitem" title="File Upload" href="file%5fupload.html">File Upload</a>
</li>
<li class="navitem">
- <a href="file%5fdownload.html">File Download</a>
+ <a class="navitem" title="File Download" href="file%5fdownload.html">File Download</a>
</li>
<li class="navitem">
- <a href="ajax.html">XML and Ajax</a>
+ <a class="navitem" title="XML and Ajax" href="ajax.html">XML and Ajax</a>
</li>
<li class="navitem">
- <a href="calendar.html">Calendar</a>
+ <a class="navitem" title="Calendar" href="calendar.html">Calendar</a>
</li>
</ul>
</li>
diff --git a/rivet/html/manuals.html b/rivet/html/manuals.html
index e9fe6eb..47ac84b 100644
--- a/rivet/html/manuals.html
+++ b/rivet/html/manuals.html
@@ -27,6 +27,9 @@
<li>
<a href="http://tcl.apache.org/rivet/manual3.1/">Rivet 3.1</a>
</li>
+ <li>
+ <a href="http://tcl.apache.org/rivet/manual3.2/">Rivet 3.2</a>
+ </li>
</ul>
<p>
@@ -40,12 +43,6 @@
<li>
<a href="http://tcl.apache.org/rivet/manual2.3/">Rivet 2.3</a>
</li>
- <li>
- <a href="http://tcl.apache.org/rivet/manual2.2/">Rivet 2.2</a>
- </li>
- <li>
- <a href="http://tcl.apache.org/rivet/manual2.1/">Rivet 2.1</a>
- </li>
</ul>
@@ -61,16 +58,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -78,13 +75,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -92,10 +89,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -109,10 +106,13 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Rivet 3.1" target="rivetman3.1" href="http://tcl.apache.org/rivet/manual3.1/">Rivet 3.1</a>
+ <a class="navitem" title="Rivet 3.2" target="rivetman3.2" href="http://tcl.apache.org/rivet/manual3.2/">Rivet 3.2</a>
</li>
<li class="navitem">
- <a title="Rivet 2.4" target="rivetman2.4" href="http://tcl.apache.org/rivet/manual2.4/">Rivet 2.4</a>
+ <a class="navitem" title="Rivet 3.1" target="rivetman3.1" href="http://tcl.apache.org/rivet/manual3.1/">Rivet 3.1</a>
+ </li>
+ <li class="navitem">
+ <a class="navitem" title="Rivet 2.4" target="rivetman2.4" href="http://tcl.apache.org/rivet/manual2.4/">Rivet 2.4</a>
</li>
</ul>
</li>
diff --git a/rivet/html/release-notes.html b/rivet/html/release-notes.html
index fa6fea7..c50a3bc 100644
--- a/rivet/html/release-notes.html
+++ b/rivet/html/release-notes.html
@@ -16,7 +16,94 @@
<div id="body">
<div id="content">
<h2>Apache Rivet Release Notes</h2>
- <p>Apache Rivet current stable version is 3.1.1</p>
+ <p>Apache Rivet current stable version is 3.2.0</p>
+
+<dl>
+ <dt>Rivet 3.2.0 release notes</dt>
+ <dd>
+ <p>
+ <h4>Rivet 3.2.0</h4>
+
+
+ This version fully embraces threads as the fundamental agents that run Tcl interpreters and
+ respond to HTTP requests as content generators. As such threads now by default individually
+ terminate and release their resources when the <b>exit</b>
+
+ is called.
+ This policy change is relevant to the worker and lazy bridges which were
+ developed to match the requirements imposed by the worker and event MPMs. The prefork bridge
+ (which is bound to work with the prefork MPM) is unaffected. </p>
+ <p>The previous policy of forcing all threads to terminate before a child process calls Tcl_Exit
+ can be reestablished setting the <b>SingleThreadExit</b>
+
+ boolean directive to <i>Off</i>
+
+. This is
+ demanded in cases where calling Tcl_DeleteInterp is not safe because,for instance, not properly
+ designed third-party extensions fail to correctly release their resources and can cause process crashes.
+ <!--Nonetheless this setting is discouraged because in case of high workload the <b>exit</b> command
+ can cause 505 internal server errors. -->
+ </p>
+ <p>
+ Even though Tcl's <b>exit</b>
+
+ command regular usage should be avoided in the design of code,
+ it can be useful in the development process as a tool to escape irreversible conditions
+ thay may occur. The <b>exit</b>
+
+ command causes the deletion of a thread with its interpreters
+ making possible to a bridge to replace it with a pristine one.
+ </p>
+ <p>If you need to use unsafe extensions that may cause crashes when Tcl_DeleteInterp is called
+ the recommended option is to select the prefork MPM in your server configuration</p>
+ <h4>New commands</h4>
+ <ul>
+ <li>The new <b>::rivet::thread_id</b>
+
+ command has been introduced.
+ <b>::rivet::thread_id</b>
+
+ returns the hexadecimal thread id printed
+ in the very same format adopted by the <b>::thread::id</b>
+
+ command (package Thread).
+ Therefore if you need this information for debugging or logging you don't need to
+ require package Thread for that. <p>
+ <b>[::rivet::thread_id -decimal]</b>
+
+
+ returns a decimal id that can be matched with the thread id printed in the
+ apache logs </p>
+ </li>
+ </ul>
+ <h4>Fixed bugs</h4>
+ <ul>
+ <li>The <b>::rivet::upload</b>
+
+ command argument checking has been rewritten in order to have a terse
+ code for handling the several sub-command/argument combinations and also with the purpose
+ of fixing a bug that caused server crashes </li>
+ </ul>
+ <h4>Test suite extended</h4>
+ <ul>
+ <li>The server utility now handles the supplementary switches -mpm and -bridge<ul>
+ <li>The first selects a specific MPM to run the tests</li>
+ <li>The second selects a bridge different from the default. The only cases when the use of
+ both of them is meaningful is to test the worker or lazy bridge with the prefork MPM or the
+ lazy bridge with the worker MPM</li>
+ </ul>
+
+
+ e.g.:<pre> ./runtests.tcl <path-to-httpd> -mpm worker</pre>
+ </li>
+ </ul>
+ <h4>Internals</h4>
+ <p>Modifications to the internal code that are transparent to the Tcl development include
+ an expansion of mod_rivet's global data structure that now contain all the server-wide configurable options
+ previously stored in the configuration records
+ </p>
+ </dd>
+</dl>
<dl>
<dt>Rivet 3.1 release notes</dt>
@@ -249,16 +336,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -266,13 +353,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -280,10 +367,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -294,7 +381,7 @@
<h4>Acknowledgments</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
+ <a class="navitem" title="ASF Sponsorship" href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
</li>
</ul>
</li>
diff --git a/rivet/html/var_access.html b/rivet/html/var_access.html
index 9b66344..eef722f 100644
--- a/rivet/html/var_access.html
+++ b/rivet/html/var_access.html
@@ -129,7 +129,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 28-11-2018 15:39:22 UTC</div>
</div>
</div>
@@ -139,16 +139,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -156,13 +156,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -170,10 +170,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -184,25 +184,25 @@
<h4>Examples</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="hello%5fworld.html">Hello world!</a>
+ <a class="navitem" title="Hello world!" href="hello%5fworld.html">Hello world!</a>
</li>
<li class="navitem">
- <a href="colorful%5ftable.html">A colorful table</a>
+ <a class="navitem" title="A colorful table" href="colorful%5ftable.html">A colorful table</a>
</li>
<li class="navitem">
- <a href="var%5faccess.html">Variable Access</a>
+ <a class="navitem" title="Variable Access" href="var%5faccess.html">Variable Access</a>
</li>
<li class="navitem">
- <a href="file%5fupload.html">File Upload</a>
+ <a class="navitem" title="File Upload" href="file%5fupload.html">File Upload</a>
</li>
<li class="navitem">
- <a href="file%5fdownload.html">File Download</a>
+ <a class="navitem" title="File Download" href="file%5fdownload.html">File Download</a>
</li>
<li class="navitem">
- <a href="ajax.html">XML and Ajax</a>
+ <a class="navitem" title="XML and Ajax" href="ajax.html">XML and Ajax</a>
</li>
<li class="navitem">
- <a href="calendar.html">Calendar</a>
+ <a class="navitem" title="Calendar" href="calendar.html">Calendar</a>
</li>
</ul>
</li>
diff --git a/rivet/index.html b/rivet/index.html
index ddf3e36..4916032 100644
--- a/rivet/index.html
+++ b/rivet/index.html
@@ -89,7 +89,7 @@
<div class="contentbottom">
-
+ <div id="last_modified">Last Modified: 28-11-2018 15:39:22 UTC</div>
</div>
</div>
@@ -99,16 +99,16 @@
<h4>Rivet & Tcl</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="The Rivet development team" href="html/about.html">About Us - Contact</a>
+ <a class="navitem" title="The Rivet development team" href="html/about.html">About Us - Contact</a>
</li>
<li class="navitem">
- <a title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
+ <a class="navitem" title="Home of Apache Tcl related stuff" target="asf" href="http://tcl.apache.org/">Apache Tcl Home</a>
</li>
<li class="navitem">
- <a title="The Tcl Developer Xchange" target="tclxchange" class="extern" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
+ <a class="extern" title="The Tcl Developer Xchange" target="tclxchange" href="http://www.tcl.tk/">The Tcl/Tk Language</a>
</li>
<li class="navitem">
- <a title="Tcl community wiki site" target="tclwiki" class="extern" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
+ <a class="extern" title="Tcl community wiki site" target="tclwiki" href="http://wiki.tcl.tk/">Tcl'ers Wiki</a>
</li>
</ul>
</li>
@@ -116,13 +116,13 @@
<h4>Getting Rivet to Work</h4>
<ul class="blocklist">
<li class="navitem">
- <a title="Getting Rivet" href="html/download.html">Getting Rivet</a>
+ <a class="navitem" title="Getting Rivet" href="html/download.html">Getting Rivet</a>
</li>
<li class="navitem">
- <a href="html/release%2dnotes.html">Release Notes</a>
+ <a class="navitem" title="Release Notes" href="html/release%2dnotes.html">Release Notes</a>
</li>
<li class="navitem">
- <a title="Apache Rivet Bugzilla" class="extern" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
+ <a class="extern" title="Apache Rivet Bugzilla" href="https://issues.apache.org/bugzilla/buglist.cgi?quicksearch=Rivet">Bug Reports</a>
</li>
</ul>
</li>
@@ -130,10 +130,10 @@
<h4>Documentation</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="html/hello%5fworld.html">Examples</a>
+ <a class="navitem" title="Examples" href="html/hello%5fworld.html">Examples</a>
</li>
<li class="navitem">
- <a href="html/manuals.html">Manuals</a>
+ <a class="navitem" title="Manuals" href="html/manuals.html">Manuals</a>
</li>
</ul>
</li>
@@ -147,7 +147,7 @@
<h4>Acknowledgments</h4>
<ul class="blocklist">
<li class="navitem">
- <a href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
+ <a class="navitem" title="ASF Sponsorship" href="http://www.apache.org/foundation/thanks.html">ASF Sponsorship</a>
</li>
</ul>
</li>
diff --git a/rivet/manual3.2/abort_code.html b/rivet/manual3.2/abort_code.html
new file mode 100644
index 0000000..f825122
--- /dev/null
+++ b/rivet/manual3.2/abort_code.html
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>abort_code</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="shorthand.html" title="<?= ... ?>"><link rel="next" href="abort_page.html" title="abort_page"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">abort_code</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="shorthand.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="abort_page.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="abort_code"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>abort_code —
+ Returns the code passed to <span style="font-family:monospace"><span class="command"><strong>abort_page</strong></span></span>
+ earlier during the request processing
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::abort_code</span> </div></div></div><div class="refsect1"><a name="idm790"></a><h2>Description</h2><p style="width:90%">
+ Usage of this command is meaningful only in a script set as
+ AbortScript or AfterEveryScript.
+ <span style="font-family:monospace"><span class="command"><strong>abort_code</strong></span></span> returns the value of the optional
+ parameter passed to <span style="font-family:monospace"><span class="command"><strong>abort_page</strong></span></span> earlier in
+ the same request processing.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="shorthand.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="abort_page.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top"><?= ... ?> </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> abort_page</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/abort_page.html b/rivet/manual3.2/abort_page.html
new file mode 100644
index 0000000..b2ecb77
--- /dev/null
+++ b/rivet/manual3.2/abort_page.html
@@ -0,0 +1,26 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>abort_page</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="abort_code.html" title="abort_code"><link rel="next" href="apache_log_error.html" title="apache_log_error"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">abort_page</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abort_code.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="apache_log_error.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="abort_page"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>abort_page —
+ Stops outputting data to web page, similar in
+ purpose to PHP's <span style="font-family:monospace"><span class="command"><strong>die</strong></span></span> command.
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::abort_page</span> (<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>abort code</code></em></span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>-aborting</code></em></span>)</div></div></div><div class="refsect1"><a name="idm808"></a><h2>Description</h2><p style="width:90%">
+ This command flushes the output buffer and stops the Tcl
+ script from sending any more data to the client.
+ A normal Tcl script might use the
+ <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command, but that cannot be used in
+ Rivet without actually exiting the apache child
+ process!
+ <span style="font-family:monospace"><span class="command"><strong>abort_page</strong></span></span> triggers
+ the execution of an optional AbortScript that has to be
+ specified in the configuration. The value of the
+ argument ?<span style="font-family:monospace; font-weight: bold;">abort code</span>? can be retrieved with the
+ <span style="font-family:monospace"><span class="command"><strong>abort_code</strong></span></span> command during the
+ execution of <a class="link" href="directives.html" title="Apache Rivet 3.2 Configuration">AbortScript or
+ AfterEveryScript</a>,
+ allowing the script to take appropriate actions in order to deal
+ with the cause of the abort.
+ </p><p style="width:90%">
+ The argument -aborting causes abort_page
+ to return 1 when the current execution is the outcome of an abort condition.
+ In other words this query is meaningful in code specified as
+ <a class="link" href="directives.html" title="Apache Rivet 3.2 Configuration">AfterEveryScript</a> to understand
+ if an abort condition took place beforehand.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abort_code.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="apache_log_error.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">abort_code </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> apache_log_error</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/apache_log_error.html b/rivet/manual3.2/apache_log_error.html
new file mode 100644
index 0000000..39fb6af
--- /dev/null
+++ b/rivet/manual3.2/apache_log_error.html
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>apache_log_error</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="abort_page.html" title="abort_page"><link rel="next" href="apache_table.html" title="apache_table"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">apache_log_error</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abort_page.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="apache_table.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="apache_log_error"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>apache_log_error — log messages to the Apache error log</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_log_error</span> ?<span style="font-family:monospace; font-weight: bold;">priority</span>? ?<span style="font-family:monospace; font-weight: bold;">message</span>?</div></div></div><div class="refsect1"><a name="idm829"></a><h2>Description</h2><p style="width:90%">
+ The apache_log_error command logs a message to the
+ Apache error log, whose name and location have been
+ set by the ErrorLog directive.
+ </p><p style="width:90%">
+ Priority must be one of
+ debug,
+ info,
+ notice,
+ warning,
+ err,
+ crit,
+ alert, or
+ emerg.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abort_page.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="apache_table.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">abort_page </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> apache_table</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/apache_table.html b/rivet/manual3.2/apache_table.html
new file mode 100644
index 0000000..6fe9ab4
--- /dev/null
+++ b/rivet/manual3.2/apache_table.html
@@ -0,0 +1,62 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>apache_table</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="apache_log_error.html" title="apache_log_error"><link rel="next" href="catch.html" title="catch"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">apache_table</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apache_log_error.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="catch.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="apache_table"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>apache_table — access and manipulate Apache tables in the request structure.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> (<span style="font-family:monospace; font-weight: bold;">get</span> | <span style="font-family:monospace; font-weight: bold;">set</span> | <span style="font-family:monospace; font-weight: bold;">exists</span> | <span style="font-family:monospace; font-weight: bold;">unset</span> | <span style="font-family:monospace; font-weight: bold;">names</span> | <span style="font-family:monospace; font-weight: bold;">array_get</span> | <span style="font-family:monospace; font-weight: bold;">clear</span>)</div></div></div><div class="refsect1"><a name="idm857"></a><h2>Description</h2><p style="width:90%">
+ The apache_table command is for accessing and manipulating
+ Apache tables in the request structure.
+ </p><p style="width:90%">
+ The table name must be one of
+ notes,
+ headers_in,
+ headers_out,
+ err_headers_out, or
+ subprocess_env.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">get</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ When given the name of an Apache table
+ <em class="replaceable"><code>tablename</code></em>
+ and the name of a key
+ <em class="replaceable"><code>tablename</code></em>,
+ returns the value of the key in the table, or an empty
+ string.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">set</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">set</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>list</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Stores the <em class="replaceable"><code>value</code></em> in
+ the table <em class="replaceable"><code>tablename</code></em>
+ under the key <em class="replaceable"><code>key</code></em>.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ For the list form,
+ <em class="replaceable"><code>list</code></em> contains
+ a list of zero or more pairs of key-value pairs to be
+ set into the table
+ <em class="replaceable"><code>tablename</code></em>.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">exists</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns 1 if the specified key,
+ <em class="replaceable"><code>key</code></em>,
+ exists in table
+ <em class="replaceable"><code>tablename</code></em>,
+ else 0.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">unset</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Removes the key-value pair referenced by
+ <em class="replaceable"><code>key</code></em>
+ from the table
+ <em class="replaceable"><code>tablename</code></em>.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">names</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns a list of all of the keys present in the table
+ <em class="replaceable"><code>tablename</code></em>.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">array_get</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns a list of key-value pairs from the table
+ <em class="replaceable"><code>tablename</code></em>.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::apache_table</span> <span style="font-family:monospace; font-weight: bold;">clear</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tablename</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Clears the contents of the specified table.
+ </div></div></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apache_log_error.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="catch.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">apache_log_error </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> catch</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/asciiglyphs.html b/rivet/manual3.2/asciiglyphs.html
new file mode 100644
index 0000000..0b3c13d
--- /dev/null
+++ b/rivet/manual3.2/asciiglyphs.html
@@ -0,0 +1,27 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>AsciiGlyphs</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="decode.html" title="decode"><link rel="next" href="toglyphs.html" title="toGlyphs"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AsciiGlyphs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="decode.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="toglyphs.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="asciiglyphs"></a>AsciiGlyphs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4203"></a>Introduction</h3></div></div></div><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>AsciiGlyphs</strong></span></span> package provides a command
+ to print large ASCII glyphs in an HTML fragment based on
+ a <pre>...</pre:> element. The shape of the glyphs was
+ inspired by the challenge response used by Fossil to let anonymous users
+ to log into a repository. The glyph set was extended to
+ support the whole English alphabet and some punctuation characters.
+ The string to be represented has to be made of pure 7-bit ASCII characters.
+ The package also runs standalone outside of mod_rivet
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4219"></a>Example</h3></div></div></div><pre class="programlisting">package require AsciiGlyphs
+::AsciiGlyphs toGlyphs "Date: 07-12-2015"
+ _____ _____ ______ ___ ______ __ ___ ___ ___ __ _____
+| __ \ /\ |_ _| | ____| _ / _ \ |____ | /_ ||__ \ |__ \ / _ \ /_ || ____|
+| | | | / \ | | | |__ |_| | | | | / / ____ | | ) | ____ ) || | | | | || |__
+| | | | / /\ \ | | | __| _ | | | | / / |____| | | / / |____| / / | | | | | ||___ \
+| |__| | / ____ \ | | | |____ |_| | |_| | / / | | / /_ / /_ | |_| | | | ___) |
+|_____/ /_/ \_\ |_| |______| \___/ /_/ |_||____| |____| \___/ |_||____/
+
+::AsciiGlyphs toGlyphs "Time: 18:10:19"
+ _____ ___ _ _ ______ __ ___ __ ___ __ ___
+|_ _| | || \ / | | ____| _ /_ | / _ \ _ /_ | / _ \ _ /_ | / _ \
+ | | | | | \/ | | |__ |_| | || (_) | |_| | || | | | |_| | || (_) |
+ | | | | | | | | | __| _ | | > _ < _ | || | | | _ | | \__, |
+ | | | | | | | | | |____ |_| | || (_) | |_| | || |_| | |_| | | / /
+ |_| |___||_| |_| |______| |_| \___/ |_| \___/ |_| /_/
+
+</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="decode.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="toglyphs.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">decode </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> toGlyphs</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/calendar.html b/rivet/manual3.2/calendar.html
new file mode 100644
index 0000000..5191b58
--- /dev/null
+++ b/rivet/manual3.2/calendar.html
@@ -0,0 +1,26 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Calendar</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="calendar_package.html" title="Calendar Package"><link rel="prev" href="calendar_package.html" title="Calendar Package"><link rel="next" href="xml_calendar.html" title="XmlCalendar"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Calendar</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="calendar_package.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Calendar Package</th><td width="20%" align="right"> <a accesskey="n" href="xml_calendar.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="calendar"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>Calendar — Utility class the builds and prints a calendar table</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">Calendar</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>calendar_name</code></em></span> </div></div></div><div class="refsect1"><a name="idm3977"></a><h2>Calendar object subcommands</h2><p style="width:90%">
+ The main public command for a calendar object is
+ <span style="font-family:monospace"><span class="command"><strong>emit</strong></span></span> that returns a calendar table
+ </p></div><div class="refsect1"><a name="idm3981"></a><div class="variablelist"><p style="width:90%">
+ The method <span style="font-family:monospace"><span class="command"><strong>emit</strong></span></span> when invoked with a single argument
+ takes it as an year number and prints the whole calendar of
+ that year. When invoked with 2 arguments takes the first as a month, either
+ expressed in its shortened form ('Jan','Feb',...) or as a number in the
+ range 1-12. The second argument is a year number.
+ </p><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex ">
+ calendar_obj <span style="font-weight:bold ; font-family:monospace">emit</span> </div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex ">
+ calendar_obj <span style="font-weight:bold ; font-family:monospace">emit</span> ?<span style="font-family:monospace; font-weight: bold;">month</span>? ?<span style="font-family:monospace; font-weight: bold;">year</span>?</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex ">
+ calendar_obj <span style="font-weight:bold ; font-family:monospace">emit</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>month | year</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The method 'emit' if invoked without arguments returns an
+ ASCII formatted calendar of the current month
+ </div><pre class="programlisting">
+set cal [Calendar #auto]
+set current_month [$cal emit]
+puts $current_month
+ Jun 2010
+ Su Mo Tu We Th Fr Sa
+ 1 2 3 4 5
+ 6 7 8 9 10 11 12
+ 13 14 15 16 17 18 19
+ 20 21 22 23 24 25 26
+ 27 28 29 30</pre></div></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="calendar_package.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="calendar_package.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="xml_calendar.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Calendar Package </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> XmlCalendar</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/calendar_package.html b/rivet/manual3.2/calendar_package.html
new file mode 100644
index 0000000..c26d28f
--- /dev/null
+++ b/rivet/manual3.2/calendar_package.html
@@ -0,0 +1,20 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Calendar Package</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="form_package.html" title="form"><link rel="next" href="calendar.html" title="Calendar"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Calendar Package</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="form_package.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="calendar.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="calendar_package"></a>Calendar Package</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3957"></a>Introduction</h3></div></div></div><p style="width:90%">
+ The package is based on the Calendar class, a class capable
+ of printing an ascii calendar table that closely resembles the output
+ of the typical Unix <span style="font-family:monospace"><span class="command"><strong>cal</strong></span></span> command. The internal
+ code is written entirely in Tcl, therefore doesn't rely on the
+ existance of <span style="font-family:monospace"><span class="command"><strong>cal</strong></span></span> on the system.
+ XmlCalendar inherits the basic methods and adds XML tagging to the
+ table. XmlCalendar prints an XML calendar table whose header,
+ weekdays banner and days rows tags are configurable.
+ Also specific days or specific weeks can be given arbitrary attributes.
+ </p><p style="width:90%">
+ Calendar core methods are based on the
+ <a class="ulink" href="http://wiki.tcl.tk/17964" target="_top">cal</a> procedure
+ written by Richard Suchenwirth and published on the
+ <a class="ulink" href="http://wiki.tcl.tk" target="_top">Tcl Wiki</a>
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ The Calendar package uses Tcl <span style="font-family:monospace"><span class="command"><strong>dict</strong></span></span> command to manage markup
+ information. Hence either Tcl8.5 or Tcl8.4 with
+ <a class="ulink" href="http://wiki.tcl.tk/5042" target="_top">package dict</a> are required.
+ </td></tr></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="form_package.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="calendar.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">form </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Calendar</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/catch.html b/rivet/manual3.2/catch.html
new file mode 100644
index 0000000..400c87c
--- /dev/null
+++ b/rivet/manual3.2/catch.html
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>catch</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="apache_table.html" title="apache_table"><link rel="next" href="clock_to_rfc.html" title="clock_to_rfc850_gmt"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">catch</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apache_table.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="clock_to_rfc.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="catch"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>catch — wraps core command <span style="font-family:monospace"><span class="command"><strong>catch</strong></span></span> </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::catch</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>error_code_var_name</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>options_var_name</code></em></span>?</div></div></div><div class="refsect1"><a name="idm988"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span> wraps the core language <span style="font-family:monospace"><span class="command"><strong>catch</strong></span></span>
+ command adding some extra error handling needed by mod_rivet design.
+ The rationale for Rivet to have its own <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span> reads
+ as follows: within mod_rivet a script execution can be interrupted by either calling
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>(deprecated) or <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span>.
+ These commands implement a simple internal exception mechanism by
+ returning a special error code so that execution is in turn handed down to the
+ <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> and eventually to <span style="font-family:monospace"><span class="command"><strong>AfterEveryScript</strong></span></span>
+ (if any of them is defined). Any code calling one of these commands which runs under
+ control of the <span style="font-family:monospace"><span class="command"><strong>::catch</strong></span></span> command would need to do this chore itself,
+ checking the error info and in case throw the error again if it had been originated
+ by one of mod_rivet's exceptions calls. This is what <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span>
+ does hiding the implementation details provide a better and more compatibile way to
+ handle this condition.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This command is not meant to replace the core command, thus it's not exported from the
+ <span style="font-family:monospace"><span class="command"><strong>::rivet</strong></span></span> namespace and therefore has to be fully qualified.
+ </td></tr></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apache_table.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="clock_to_rfc.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">apache_table </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> clock_to_rfc850_gmt</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/clock_to_rfc.html b/rivet/manual3.2/clock_to_rfc.html
new file mode 100644
index 0000000..505e254
--- /dev/null
+++ b/rivet/manual3.2/clock_to_rfc.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>clock_to_rfc850_gmt</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="catch.html" title="catch"><link rel="next" href="cookie.html" title="cookie"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">clock_to_rfc850_gmt</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="catch.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="cookie.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="clock_to_rfc"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>clock_to_rfc850_gmt — create a rfc850 time from [clock seconds].</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::clock_to_rfc850_gmt</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>seconds</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1011"></a><h2>Description</h2><p style="width:90%">
+ Convert an integer-seconds-since-1970 click value to
+ RFC850 format, with the additional requirement that it be
+ GMT only.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="catch.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="cookie.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">catch </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> cookie</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/cmake.html b/rivet/manual3.2/cmake.html
new file mode 100644
index 0000000..8d5fc0e
--- /dev/null
+++ b/rivet/manual3.2/cmake.html
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Building Rivet 3.2 with CMake</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="installation.html" title="Apache Rivet 3.2 Installation"><link rel="next" href="directives.html" title="Apache Rivet 3.2 Configuration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Building Rivet 3.2 with CMake</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="installation.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="directives.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="cmake"></a>Building Rivet 3.2 with CMake</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm185"></a>CMake build procedure and examples</h3></div></div></div><p style="width:90%">
+ Starting with 3.2 Rivet has adopted <a class="ulink" href="" target="_top">CMake</a>
+ as an alternate build system. The choice of introducing CMake was motivated by the
+ need of an easy to use and reliable build system for Windows installations. Nonetheless
+ the usability of CMake is by no means restricted to that OS and user familiar with this
+ tool set can adopt it to build mod_rivet also on Linux and other systems.
+ The current CMake script requires CMake 3.2 or later.
+ The <a class="ulink" href="" target="_top">CMake documentation</a>
+ page has a complete reference of CMake features
+ </p><p style="width:90%">Before running the build script cd into the cmake directory
+ </p><pre class="programlisting">cd cmake</pre><p style="width:90%">
+ </p><p style="width:90%">With default arguments run the following sequence of commands that prepare the build directory
+ build the code and install the binary and application library
+ </p><pre class="programlisting">cmake -E make_directory build
+cmake -E chdir build cmake ..
+cmake --build build --target all --clean-first
+cmake --build build --target install</pre><p style="width:90%">
+ </p><p style="width:90%">
+ Installation on a Windows system with a custom installation of the Apache HTTP web server
+ </p><pre class="programlisting">cmake -E make_directory build
+cmake -E chdir build cmake -DAPACHE_ROOT=G:/Apache24 ..
+cmake --build build --config Release --target install</pre><p style="width:90%">
+ </p><p style="width:90%">
+ Building rivet on Windows with a 64 bit build of Apache requires specific
+ directives to the Microsoft C compiler
+ </p><pre class="programlisting">cmake -E make_directory build_64
+cmake -E chdir build_64 cmake -DAPACHE_ROOT=G:/Apache24 -G "Visual Studio 15 2017 Win64" ..
+cmake --build build_64 --config Release --target install</pre><p style="width:90%">
+ -G "..." can be set to any of the available 64-bit generators available under the platform
+ depending on your Windows version and Apache build
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="installation.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="directives.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet 3.2 Installation </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Apache Rivet 3.2 Configuration</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/commands.html b/rivet/manual3.2/commands.html
new file mode 100644
index 0000000..7cd88e2
--- /dev/null
+++ b/rivet/manual3.2/commands.html
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Rivet Tcl Commands and Variables</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="request.html" title="Apache Child Processes Lifecycle and Request Processing"><link rel="next" href="shorthand.html" title="<?= ... ?>"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Rivet Tcl Commands and Variables</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="request.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="shorthand.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="commands"></a>Rivet Tcl Commands and Variables</h2></div></div></div><div class="section"><div class="titlepage"></div><p style="width:90%">
+ Starting with version 2.1.0 the Rivet command set moved into the
+ <span style="font-family:monospace"><span class="command"><strong>::rivet</strong></span></span> namespace.
+ </p><p style="width:90%">
+ In order to preserve out of the box compatibility with existing scripts,
+ Rivet exports commands by default and makes them available for import
+ into any namespace (global namespace included).
+ Rivet's build system can be told not to export the command set by
+ passing the switch <span style="font-family:monospace"><span class="command"><strong>--disable-rivet-commands-export</strong></span></span>
+ to 'configure'. In the future we may change this option's default.
+ </p><p style="width:90%">
+ Commands must be imported into another namespace with the command:
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>namespace import -force ::rivet::*</strong></span></span>
+ </p><p style="width:90%">
+ Whenever a new application is being developed and compatibility
+ issues can be confined within specific files, it is recommended
+ that commands be specified with their fully qualified names.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="request.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="shorthand.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Child Processes Lifecycle and Request Processing </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> <?= ... ?></td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/cookie.html b/rivet/manual3.2/cookie.html
new file mode 100644
index 0000000..272c410
--- /dev/null
+++ b/rivet/manual3.2/cookie.html
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>cookie</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="clock_to_rfc.html" title="clock_to_rfc850_gmt"><link rel="next" href="debug.html" title="debug"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">cookie</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="clock_to_rfc.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="debug.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="cookie"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>cookie — get, set and delete cookies.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::cookie</span> ?<span style="font-family:monospace; font-weight: bold;">set</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>cookieName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>?<span class="optional">cookiValue</span>?</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-days <em class="replaceable"><code>expireInDays</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-hours <em class="replaceable"><code>expireInHours</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-minutes <em class="replaceable"><code>expireInMinutes</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-expires <em class="replaceable"><code>Wdy, DD-Mon-YYYY HH:MM:SS GMT</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-path <em class="replaceable"><code>uriPathCookieAppliesTo</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-secure <em class="replaceable"><code>1/0</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-HttpOnly <em class="replaceable"><code>1/0</code></em></span>?</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::cookie</span> ?<span style="font-family:monospace; font-weight: bold;">get</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>cookieName</code></em></span>?</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::cookie</span> ?<span style="font-family:monospace; font-weight: bold;">delete</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>cookieName</code></em></span>?</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::cookie</span> ?<span style="font-family:monospace; font-weight: bold;">unset</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>cookieName</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1056"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>cookie</strong></span></span> gets, sets, unsets or deletes a cookie. When you
+ get a cookie, the command returns the value of the cookie,
+ or an empty string if no cookie exists.
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>cookie delete</strong></span></span> will set the timeout value to -1 minutes -
+ deleting the cookie in the browser.
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>cookie unset</strong></span></span> will remove the defined cookie in the server
+ (perhaps preparatory to checking/resetting the cookie).
+ </p><p style="width:90%">
+ The command has a number of switches setting a cookie attributes
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="clock_to_rfc.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">clock_to_rfc850_gmt </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> debug</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/debug.html b/rivet/manual3.2/debug.html
new file mode 100644
index 0000000..497b635
--- /dev/null
+++ b/rivet/manual3.2/debug.html
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>debug</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="cookie.html" title="cookie"><link rel="next" href="env.html" title="env"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">debug</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cookie.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="env.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="debug"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>debug —
+ A command to print strings, arrays
+ and the values of variables as specified by the arguments.
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::debug</span> <span style="font-family:monospace; font-weight: bold;">-subst</span> ?<span style="font-family:monospace; font-weight: bold;"><on|off></span>? <span style="font-family:monospace; font-weight: bold;">-separator</span> ?<span style="font-family:monospace; font-weight: bold;"><string></span>? <span style="font-family:monospace; font-weight: bold;">-option</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code><value></code></em></span>? <span style="font-family:monospace; font-weight: bold;">-option</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code><value></code></em></span>? <span style="font-family:monospace; font-weight: bold;">...</span> </div></div></div><div class="refsect1"><a name="idm1083"></a><h2>Description</h2><p style="width:90%">
+ A command to make debugging more convenient print strings, arrays
+ and the values of variables as specified by the arguments.
+ </p><p style="width:90%">
+ Also allows the setting of an array called debug which will pick up
+ options for all debug commands.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cookie.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="env.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">cookie </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> env</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/decode.html b/rivet/manual3.2/decode.html
new file mode 100644
index 0000000..62da022
--- /dev/null
+++ b/rivet/manual3.2/decode.html
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>decode</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="entities.html" title="RivetEntities"><link rel="prev" href="encode.html" title="encode"><link rel="next" href="asciiglyphs.html" title="AsciiGlyphs"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">decode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="encode.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">RivetEntities</th><td width="20%" align="right"> <a accesskey="n" href="asciiglyphs.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="decode"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>decode —
+ decode an SGML encoded string replacing every entity with the
+ corresponding character
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::decode</span> <span style="font-family:monospace; font-weight: bold;">string</span> ?<span style="font-family:monospace; font-weight: bold;">-encoding <em class="replaceable"><code><encoding></code></em></span>?</div></div></div><div class="refsect1"><a name="idm4195"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::decode</strong></span></span> implements the inverse function of
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::encode</strong></span></span>. The input string is scanned searching
+ and replacing every SGML entity with its corresponding character.
+ By default the command assumes the output string has to be encoded in UTF-8.
+ Other encodings are supported by passing the
+ <span style="font-family:monospace"><span class="command"><strong>-encoding <encoding></strong></span></span> argument.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="encode.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="entities.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="asciiglyphs.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">encode </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> AsciiGlyphs</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/dio.html b/rivet/manual3.2/dio.html
new file mode 100644
index 0000000..0063d3e
--- /dev/null
+++ b/rivet/manual3.2/dio.html
@@ -0,0 +1 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DIO - Database Interface Objects</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="tcl_packages.html" title="Rivet Tcl Packages"><link rel="next" href="dio_package.html" title="DIO"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">DIO - Database Interface Objects</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tcl_packages.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="dio_package.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="dio"></a>DIO - Database Interface Objects</h2></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tcl_packages.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="dio_package.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Rivet Tcl Packages </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> DIO</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/dio_package.html b/rivet/manual3.2/dio_package.html
new file mode 100644
index 0000000..a95a9ca
--- /dev/null
+++ b/rivet/manual3.2/dio_package.html
@@ -0,0 +1,274 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DIO</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="dio.html" title="DIO - Database Interface Objects"><link rel="prev" href="dio.html" title="DIO - Database Interface Objects"><link rel="next" href="diodisplay.html" title="DIODisplay - Database Interface Objects Display Class"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">DIO</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dio.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">DIO - Database Interface Objects</th><td width="20%" align="right"> <a accesskey="n" href="diodisplay.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="dio_package"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>DIO — Database Interface Objects</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::DIO::handle</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>interface</code></em></span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div></div><div class="refsect1"><a name="idm2093"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>DIO</strong></span></span> is designed to be a generic,
+ object-oriented interface to SQL databases. Its main goal
+ is to be as generic as possible, but since not all SQL
+ databases support the exact same syntaxes, keeping code
+ generic between databases is left to the abilities of the
+ programmer. DIO simply provides a way to keep the Tcl
+ interface generic.
+ </p><p style="width:90%">
+ interface - The name of the database
+ interface. Currently supported interfaces are
+ Postgresql and Mysql.
+ </p><p style="width:90%">
+ If <em class="replaceable"><code>objectName</code></em> is
+ specified, DIO creates an object of that name. If there is
+ no <em class="replaceable"><code>objectName</code></em>
+ given, DIO will automatically generate a unique object ID
+ </p></div><div class="refsect1"><a name="idm2106"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-host</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>hostname</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The hostname of the computer to connect to. If none
+ is given, DIO assumes the local host.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-port</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>portNumber</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">The port number to connect to on hostname.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-user</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>username</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">The username you wish to login to the server as.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-pass</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>password</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">The password to login to the server with.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-db</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>database</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The name of the database to connect to.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-table</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>tableName</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The default table to use when using built-in commands
+ for storing and fetching.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-keyfield</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>keyFieldname</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The default field to use as the primary key when using
+ built-in commands for storing and fetching.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-autokey</span> (<span style="font-family:monospace; font-weight: bold;">1</span> | <span style="font-family:monospace; font-weight: bold;">0</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If this option is set to 1, DIO will attempt to
+ determine an automatic key for
+ keyField when storing and fetching.
+ In most databases, this requires that the
+ sequence also be specified. In the
+ case of MySQL, where sequences do not exist, autokey
+ must be used in conjunction with a table which has a
+ field specified as AUTO.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-sequence</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>sequenceName</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If DIO is automatically generating keys, it will use
+ this sequence as a means to gain a unique number for
+ the stored key.</div></div></dd></dl></div></div><div class="refsect1"><a name="idm2176"></a><h2>DIO Object Commands</h2><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">array</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>request</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Execute request as a SQL query and
+ create an array from the first record found. The
+ array is set with the fields of the table and the
+ values of the record found.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">autokey</span>? (<span style="font-family:monospace; font-weight: bold;">value</span> | <span style="font-family:monospace; font-weight: bold;">boolean</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current autokey value. If
+ value is specified, it sets a new
+ value for the autokey option.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">close</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex"> Close the current database connection. This command is
+ automatically called when the DIO object is destroyed.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">count</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex"> Return a count of the number of rows in the
+ specified (or current) table.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">db</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current database. If
+ value is specified, it sets a new
+ value for the database. In most cases, the DIO object
+ will automatically connect to the new database when
+ this option is changed.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">delete</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Delete a record from the database where the primary
+ key matches key.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">destroy</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Destroy the DIO object.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">errorinfo</span>? ?<span style="font-family:monospace; font-weight: bold;">value</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">errorinfo contains the value of
+ the last error, if any, to occur while executing a
+ request. When a request fails for any reason, this
+ variable is filled with the error message from the SQL
+ interface package.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">exec</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>request</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Execute request as an SQL query.
+ When the exec command is called, the query is
+ executed, and a DIO result object is returned. From
+ there, the result object can be used to obtain
+ information about the query status and records in a
+ generic way. See <a class="link" href="dio_package.html#resultobj" title="Result Object Commands">Result
+ Object Commands</a>
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">fetch</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Fetch a record from the database where the primary key
+ matches key and store the result in
+ an array called arrayName.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">forall</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>request</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>body</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Execute an SQL select request and iteratively
+ fill the array named arrayName
+ with elements named with the matching field names, and
+ values containing the matching values, repeatedly executing
+ the specified code body
+ for each row returned.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">host</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current host value. If
+ value is specified, it sets a new
+ value for the host.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">insert</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>table</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Insert fields from arrayName into the specified table in the database.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">interface</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the database interface type, such as
+ <code class="literal">Postgresql</code> or <code class="literal">Mysql</code>.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">keyfield</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current keyfield. If
+ value is specified, it sets a new
+ value for the keyfield. Value can contain
+ multiple key fields as a Tcl list, if the table has multiple
+ key fields.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">keys</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>pattern</code></em></span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return a list of keys in the database. If
+ pattern is specified, only the keys
+ matching will be returned.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">lastkey</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the last key that was used from
+ sequence. If sequence has not been
+ specified, this command returns an empty string.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">list</span>? ?<span style="font-family:monospace; font-weight: bold;">request</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Execute request as a SQL query and
+ return a list of the first column of each record
+ found.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">makekey</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>keyfield</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given an array containing key-value pairs and an optional
+ list of key fields (we use the object's keyfield if
+ none is specified), if we're doing auto keys, create
+ and return a new key, otherwise if it's a single key,
+ just return its value from the array, else if there are
+ multiple keys, return all the keys' values from the
+ array as a list.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">nextkey</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">Increment sequence and return the
+ next key to be used. If sequence has not been
+ specified, this command returns an empty
+ string.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">open</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">Open the connection to the current database. This
+ command is automatically called from any command which
+ accesses the database.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">pass</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current pass value. If
+ value is specified, it sets a new
+ value for the password.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">port</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">Return the current port value. If value is
+ specified, it sets a new value for the port.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">quote</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>string</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">Return the specified string quoted in
+ a way that makes it acceptable as a value in a SQL statement.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">search</span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Search the current table, or the specified table if
+ -table tableName is specified, for rows matching
+ one or more fields as key-value pairs, and return
+ a query result handle.
+ See <a class="link" href="dio_package.html#resultobj" title="Result Object Commands">Result Object Commands</a>
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ For example,
+ <pre class="programlisting">set res [DIO search -table people -firstname Bob]</pre>
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">sequence</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current sequence value. If value is
+ specified, it sets a new value for the sequence.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">store</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Store the contents of arrayName in the
+ database, where the keys are the field names and the
+ array's values are the corresponding values. Do an SQL insert
+ if the corresponding row doesn't exist, or an update
+ if it does.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The table name must have been previously set
+ or specified with ?<span style="font-family:monospace; font-weight: bold;">-table</span>?, and the key field(s) must
+ have been previously set or specified with
+ ?<span style="font-family:monospace; font-weight: bold;">-keyfield</span>?.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Please note that the store method has significantly higher
+ overhead than
+ the update or insert methods, so if you know you are
+ inserting a row rather than updating one, it is advisable
+ to use the insert method and, likewise, if you know you
+ are updating rather than inserting, to use the
+ update method.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">string</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>request</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Execute request as a SQL query and
+ return a string containing the first record
+ found.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">table</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">Return the current table. If
+ value is specified, it sets a new
+ value for the table.</div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">update</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Updates the row matching the contents of
+ arrayName in the database. The matching
+ row must already exist. The table can have already been
+ set or can be specified with ?<span style="font-family:monospace; font-weight: bold;">-table</span>?, and
+ the key field(s) must either have been set or
+ specified with ?<span style="font-family:monospace; font-weight: bold;">-keyfield</span>?.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">user</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current user value. If
+ value is specified, it sets a new
+ value for the user.
+ </div></div></dd></dl></div></div><div class="refsect1"><a name="resultobj"></a><h2>Result Object Commands</h2><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">autocache</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current autocache value. If
+ value is specified, it sets a new
+ value for autocache.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If autocache is true, the result object will
+ automatically cache rows as you use them. This means
+ that the first time you execute a forall command, each
+ row is being cached in the result object itself and
+ will no longer need to access the SQL result.
+ <span class="emphasis"><em>Default is true</em></span>.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">cache</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Cache the results of the current SQL result in the
+ result object itself. This means that even if the
+ database connection is closed and all the results of
+ the DIO object are lost, this result object will still
+ maintain a cached copy of its records.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">errorcode</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current errorcode value. If value
+ is specified, it sets a new value for errorcode.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ errorcode contains the current code from the
+ SQL database which specifies the result of the query
+ statement which created this object. This variable
+ can be used to determine the success or failure of a
+ query.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">errorinfo</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current errorinfo value. If value
+ is specified, it sets a new value for errorinfo.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If an error occurred during the SQL query, DIO
+ attempts to set the value of errorinfo to the
+ resulting error message.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">fields</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current fields value. If
+ value is specified, it sets a new
+ value for fields.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ fields contains the list of fields
+ used in this query. The fields are in order of the
+ fields retrieved for each row.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">forall</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>-type</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>varName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>body</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Execute body over each record in the
+ result object.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">Types:</div><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-array</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Create
+ <em class="replaceable"><code>varName</code></em>
+ as an array where the indexes are the names of
+ the fields in the table and the values are the
+ values of the current row.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-keyvalue</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set
+ <em class="replaceable"><code>varName</code></em>
+ to a list containing key-value pairs of fields
+ and values from the current row. (-field value
+ -field value)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-list</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set
+ <em class="replaceable"><code>varName</code></em>
+ to a list that contains the values of the
+ current row.
+ </div></div></dd></dl></div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">next</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>-type</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>varName</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Retrieve the next record in the result object.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">Types:</div><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-array</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Create
+ <em class="replaceable"><code>varName</code></em>
+ as an array where the indexes are the names of
+ the fields in the table and the values are the
+ values of the current row.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-keyvalue</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set
+ <em class="replaceable"><code>varName</code></em>
+ to a list containing key-value pairs of fields
+ and values from the current row. (-field value
+ -field value)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-list</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set
+ <em class="replaceable"><code>varName</code></em>
+ to a list that contains the values of the
+ current row.
+ </div></div></dd></dl></div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">numrows</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current numrows value. If value is
+ specified, it sets a new value for numrows.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ numrows is the number of rows in this result.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">resultid</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current resultid value. If value is
+ specified, it sets a new value for resultid.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ resultid in most databases is the result
+ pointer which was given us by the database. This
+ variable is not generic and should not really be used,
+ but it's there if you want it.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>resultObj</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">rowid</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current rowid value. If value is
+ specified, it sets a new value for rowid.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ rowid contains the number of the
+ current result record in the result object. This
+ variable should not really be accessed outside of the
+ result object, but it's there if you want it.
+ </div></div></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dio.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="dio.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="diodisplay.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">DIO - Database Interface Objects </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> DIODisplay - Database Interface Objects Display Class</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/diodisplay.html b/rivet/manual3.2/diodisplay.html
new file mode 100644
index 0000000..48e77ae
--- /dev/null
+++ b/rivet/manual3.2/diodisplay.html
@@ -0,0 +1 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DIODisplay - Database Interface Objects Display Class</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="dio_package.html" title="DIO"><link rel="next" href="diodisplay_package.html" title="DIODisplay"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">DIODisplay - Database Interface Objects Display Class</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dio_package.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="diodisplay_package.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="diodisplay"></a>DIODisplay - Database Interface Objects Display Class</h2></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dio_package.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="diodisplay_package.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">DIO </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> DIODisplay</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/diodisplay_package.html b/rivet/manual3.2/diodisplay_package.html
new file mode 100644
index 0000000..5b87fc0
--- /dev/null
+++ b/rivet/manual3.2/diodisplay_package.html
@@ -0,0 +1,430 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DIODisplay</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="diodisplay.html" title="DIODisplay - Database Interface Objects Display Class"><link rel="prev" href="diodisplay.html" title="DIODisplay - Database Interface Objects Display Class"><link rel="next" href="session_package.html" title="Session Package"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">DIODisplay</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diodisplay.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">DIODisplay - Database Interface Objects Display Class</th><td width="20%" align="right"> <a accesskey="n" href="session_package.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="diodisplay_package"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>DIODisplay — Database Interface Objects Display Class</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">DIODisplay</span> (<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> | <span style="font-family:monospace; font-weight: bold;">#auto</span>) (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span> | <span style="font-family:monospace; font-weight: bold;">...</span>)</div></div></div><div class="refsect1"><a name="idm2713"></a><h2>Description</h2><p style="width:90%">
+ DIODisplay is an HTML display class that uses a DIO object
+ to do the database work and a form object to do the
+ displaying.
+ </p></div><div class="refsect1"><a name="idm2716"></a><h2>Options</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-DIO</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>dioObject</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The DIO object to be used in conjunction with this
+ display object. This is a required field.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-cleanup</span> (<span style="font-family:monospace; font-weight: bold;">1</span> | <span style="font-family:monospace; font-weight: bold;">0</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If cleanup is true, when the display object is shown,
+ it will automatically destroy the DIO object, the form
+ object and itself. Default is true.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-confirmdelete</span> (<span style="font-family:monospace; font-weight: bold;">1</span> | <span style="font-family:monospace; font-weight: bold;">0</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If confirmdelete is true, attempting to delete a
+ record from the database first requires that the user
+ confirm that they wish to delete it. If it is false,
+ deletion occurs without prompting the user. Defaults
+ to true.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-errorhandler</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>procName</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The name of a procedure to handle errors when they
+ occur. During the processing of requests and pages,
+ sometimes unexpected errors can occur. This procedure
+ will handle any errors. It is called with a single
+ argument, the error string. Use of the Tcl errorInfo
+ and errorCode variables is also recommended though.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If no errorhandler is specified, the handle_error
+ method within the Display object will handle the
+ error.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-fields</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>fieldList</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Specify a list of fields to be used in this object.
+ The fields list is actually created by using the
+ <span style="font-family:monospace"><span class="command"><strong>field</strong></span></span> command to add fields to the
+ display, but this option can be useful to sometimes
+ over-set the list of fields created.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-form</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>formObject</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ A Rivet form object to use when displaying a form. If
+ one is not specified, the display object will
+ automatically create one when it is necessary.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-functions</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>functionList</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ A list of functions to be displayed in the main menu.
+ This is a list of functions the user is allowed to
+ execute.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-pagesize</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>pageSize</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ How many records to show per page on a search or
+ list. Default is 25.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-rowfields</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>fieldList</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ A list of fields to display in each row of a search or
+ list. When a search or list is conducted and the
+ resulting rows are displayed, this list will limit
+ which fields are displayed. Default is all fields.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-rowfunctions</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>functionList</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ A list of functions to display in each row of a search
+ or list.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-searchfields</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>fieldList</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ A list of fields to allow a user to search by. This
+ list will appear in the main screen as a drop-down box
+ of fields the user can search on.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-title</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>title</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The title of the display object. This will be output
+ as the title of the HTML document.
+ </div></div></dd></dl></div><div class="refsect2"><a name="idm2819"></a><h3>DIO Display Object Commands</h3><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">cleanup</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current cleanup value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for the cleanup
+ option.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">delete</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Delete the specified key from the
+ database.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The default action of this method is to call the DIO
+ object's delete command. This method can be
+ overridden.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">destroy</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Destroy the diodisplay object.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">DIO</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current DIO value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for DIO.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">errorhandler</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current errorhandler value. If
+ <em class="replaceable"><code>value</code></em> is specified, it
+ sets a new value for errorhandler.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">fetch</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Fetch the specified <em class="replaceable"><code>key</code></em>
+ from the database and store it as an array in
+ <em class="replaceable"><code><em class="replaceable"><code>arrayName</code></em></code></em>.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The default of this method is to call the DIO object's fetch command.
+ This method can be overridden.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">field</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>fieldName</code></em></span> (<span style="font-family:monospace; font-weight: bold;">-arg</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arg</code></em></span>...)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Create a new field object and add it to the display.
+ When a field is added to the display, a new object
+ of the DIODisplayField class is created with its
+ values. See [FIXME - LINK] DIO Display Fields for
+ options and values.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">fields</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current fields value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for fields.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">form</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current form value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for form.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">function</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>functionName</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Add a new function to the list of possible
+ functions. The display object will only execute
+ methods and procs which are defined as functions by
+ the object. This is to protect the program from
+ executing a different procedure other than what is
+ allowed. The <span style="font-family:monospace"><span class="command"><strong>function</strong></span></span> command
+ adds a new function to the list of allowable
+ functions.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">functions</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current functions value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for functions. See
+ [FIXME - LINK DIO Display Functions] for a list of
+ default functions.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">pagesize</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current form pagesize. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for pagesize.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">rowfields</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current form rowfields. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for rowfields.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">rowfooter</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Output the footer of a list of rows to the web page.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method can be overridden.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">rowfunctions</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current rowfunctions value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for rowfunctions.
+
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">rowheader</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Output the header of a list of rows to the web page.
+ By default, this is an HTML table with a top row
+ listing the fields in the table.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method can be overridden.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">searchfields</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current searchfields value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for searchfields.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">show</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Show the display object.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This is the main method of the display class. It
+ looks for a variable called <code class="varname">mode</code>
+ to be passed in through a form response and uses
+ that mode to execute the appropriate function. If
+ mode is not given, the <span style="font-family:monospace"><span class="command"><strong>Main</strong></span></span>
+ function is called.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This function should be called for every page.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">showform</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Display the form of the object.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method displays the form for this display
+ object. It is used in the <span style="font-family:monospace"><span class="command"><strong>Add</strong></span></span>
+ and <span style="font-family:monospace"><span class="command"><strong>Edit</strong></span></span> methods but can be
+ called separately if needed.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method can be overridden if the default look of
+ a form needs to be changed. By default, the form
+ displayed is simply the fields in a table, in order.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">showrow</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Display a single row of a resulting list or search.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method is used to display a single row while
+ displaying the result of a list or search.
+ <em class="replaceable"><code>arrayName</code></em>
+ is a fetched array of the record.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method can be overriden if the default look of
+ a row needs to be changed. By default, each row is
+ output as a table row with each field as a table
+ data cell.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">showview</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Display the view of the object.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method displays the view for this display
+ object. It is used in the
+ <span style="font-family:monospace"><span class="command"><strong>Details</strong></span></span> methods but can be
+ called separately if needed.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method can be overridden if the default look of
+ a view needs to be changed. By default, the view
+ displayed is simply the fields in a table, in order.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">store</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Store the specified
+ <em class="replaceable"><code>arrayName</code></em>
+ in the database.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The default of this method is to call the DIO
+ object's store command. This method can be
+ overridden.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">text</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current text value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for text.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">title</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current title value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for title.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">type</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current type value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for type.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>objectName</code></em></span> <span style="font-family:monospace; font-weight: bold;">value</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the current value value. If
+ <em class="replaceable"><code>value</code></em> is
+ specified, it sets a new value for value.
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3132"></a><h3>DIO Display Functions</h3><p style="width:90%">
+ These functions are called from the
+ <span style="font-family:monospace"><span class="command"><strong>show</strong></span></span> method when a form response
+ variable called <code class="varname">mode</code> is set. If no
+ mode has been set, the default mode is
+ <span style="font-family:monospace"><span class="command"><strong>Main</strong></span></span>. The show method will handle
+ the necessary switching of functions. The show method
+ also handles checking to make sure the function given is a
+ true function. If not, an error message is displayed.
+ New functions can be added as methods or by use of the
+ <span style="font-family:monospace"><span class="command"><strong>function</strong></span></span> command, and any of the
+ default functions can be overridden with new methods to
+ create an entirely new class. These are the default
+ functions provided.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Add</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Show a form that allows the user to add a new entry
+ to the database. This function calls
+ <span style="font-family:monospace"><span class="command"><strong>showform</strong></span></span> to display the form
+ for adding the entry.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Cancel</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The <span style="font-family:monospace"><span class="command"><strong>Cancel</strong></span></span> function does nothing
+ but redirect back to the <span style="font-family:monospace"><span class="command"><strong>Main</strong></span></span>
+ function. This is handy for forms which have a
+ cancel button to point to.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Delete</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If <code class="varname">confirmdelete</code> is true (the
+ default), the <span style="font-family:monospace"><span class="command"><strong>Delete</strong></span></span> function
+ will ask the user if they're sure they want to
+ delete the record from the database. If
+ <code class="varname">confirmdelete</code> is false, or if the
+ user confirms they wish to delete, this function
+ calls the <span style="font-family:monospace"><span class="command"><strong>DoDelete</strong></span></span> function to do
+ the actual deletion of a record.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Details</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Display the view of a single record from the database. This function calls
+ the <span style="font-family:monospace"><span class="command"><strong>showview</strong></span></span> method to display a single record from the database.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>DoDelete</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This function actually deletes a record from the
+ database. Once it has deleted the record, it
+ redirects the user back to the
+ <span style="font-family:monospace"><span class="command"><strong>Main</strong></span></span> function.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Edit</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Show a form that allows the user to edit an existing
+ entry to the database. This function calls
+ <span style="font-family:monospace"><span class="command"><strong>showform</strong></span></span> to display the form for
+ editing the entry and fills in the fields with the
+ values retrieved from the database.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>List</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This function lists the entires contents of the
+ database. Each record is output in a row using the
+ <span style="font-family:monospace"><span class="command"><strong>showrow</strong></span></span> method.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Main</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This function is the main function of the display
+ object. If there is no mode, or once most commands
+ complete, the user will be redirected to this
+ function. The default <span style="font-family:monospace"><span class="command"><strong>Main</strong></span></span>
+ function displays a list of functions the user can
+ execute, a list of searchfields the user can search
+ on, and a query field. This query field is used by
+ all of the other functions to determine what the
+ user is trying to find.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In the case of a <span style="font-family:monospace"><span class="command"><strong>search</strong></span></span>, query
+ specifies what string the user is looking for in the
+ specified search field. In the case of
+ <span style="font-family:monospace"><span class="command"><strong>delete</strong></span></span>,
+ <span style="font-family:monospace"><span class="command"><strong>details</strong></span></span> or
+ <span style="font-family:monospace"><span class="command"><strong>edit</strong></span></span>, the query specifies the
+ database key to access.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Save</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This function saves any data passed to using the
+ <span style="font-family:monospace"><span class="command"><strong>store</strong></span></span> method. This is primarily
+ used by the <span style="font-family:monospace"><span class="command"><strong>add</strong></span></span> and
+ <span style="font-family:monospace"><span class="command"><strong>edit</strong></span></span> commands to store the
+ results of the form the user has filled out.
+ </div></div></dd><dt><span class="term"><span style="font-family:monospace"><span class="command"><strong>Search</strong></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This function searches the database for any row
+ whose <code class="varname">searchBy</code> field matches
+ <code class="varname">query</code>. Once any number of records
+ are found, <span style="font-family:monospace"><span class="command"><strong>Search</strong></span></span> displays the
+ results in rows.
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3213"></a><h3>DIO Display Fields</h3><p style="width:90%">
+ Display fields are created with the
+ <span style="font-family:monospace"><span class="command"><strong>field</strong></span></span> command of the DIODisplay object.
+ Each field is created as a new DIODisplayField object or
+ as a subclass of DIODisplayField. The standard form
+ fields use the standard field class, while specialized
+ field types use a class with different options but still
+ supports all of the same commands and values a generic
+ field does.
+ </p><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><em class="replaceable"><code>displayObject</code></em></span> <span style="font-family:monospace; font-weight: bold;">field</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>fieldname</code></em></span> (<span style="font-family:monospace; font-weight: bold;">-option</span> | <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>option</code></em></span>...)</div></div><p style="width:90%">
+ These are the standard options supported by field types:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-formargs</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arguments</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ When a field is created, any argument which is not a
+ standard option is assumed to be an argument passed
+ to the form object when the field is shown in a
+ form. These arguments are all appended to the
+ <code class="varname">formargs</code> variable. You can use
+ this option to override or add options after the
+ initial creation of an object
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-readonly</span> (<span style="font-family:monospace; font-weight: bold;">1</span> | <span style="font-family:monospace; font-weight: bold;">0</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If <code class="varname">readonly</code> is set to true, the
+ field will not display a form entry when displaying
+ in a form.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-text</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>text</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The text displayed next to the form or view field.
+ By default, DIODisplay tries to figure out a pretty
+ way to display the field name. This text will
+ override that default and display whatever is
+ specified.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-type</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>fieldType</code></em></span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The type of field this is. This type is used when
+ creating the field in the form object.
+ <em class="replaceable"><code>fieldType</code></em>
+ can be any of the accepted form field types. See
+ [FIXME - LINK DIO Field Types] for a list of types
+ available.
+ </div></div></dd></dl></div><p style="width:90%">
+ All other arguments, unless specified in an individual
+ field type, are passed directly to the form object when
+ the field is created. So, you can pass
+ -size or -maxsize to
+ specify the length and maximum length of the field entry.
+ Or, if type were textarea, you could define
+ -rows and -cols to
+ specify its row and column count.
+ </p></div><div class="refsect2"><a name="idm3271"></a><h3>DIO Display Field Types</h3><p style="width:90%">
+ The following is a list of recognized field types by
+ DIODisplay. Some are standard HTML form fields, and
+ others are DIODisplay fields which execute special actions
+ and functions.
+ </p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diodisplay.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="diodisplay.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="session_package.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">DIODisplay - Database Interface Objects Display Class </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Session Package</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/directives.html b/rivet/manual3.2/directives.html
new file mode 100644
index 0000000..11bc27e
--- /dev/null
+++ b/rivet/manual3.2/directives.html
@@ -0,0 +1,306 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.2 Configuration</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="cmake.html" title="Building Rivet 3.2 with CMake"><link rel="next" href="processing.html" title="Apache Rivet HTTP Request Processing"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Rivet 3.2 Configuration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cmake.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="processing.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="directives"></a>Apache Rivet 3.2 Configuration</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm200"></a>Apache Rivet Configuration lines</h3></div></div></div><p style="width:90%">
+ Rivet directives are used within the Apache httpd server
+ configuration to set up the environment where Rivet script
+ will be run.
+ </p><p style="width:90%">
+ Rivet has 3 general <span class="quote">“<span class="quote">scope</span>”</span> directives
+
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">RivetDirConf: for configuration directives meant to
+ apply to a directory tree</li><li class="listitem">RivetUserConf: for directives specific to
+ a user private space</li><li class="listitem">RivetServerConf: for any directive meant to apply
+ globally (either to the whole Rivet installation or a single
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/vhosts" target="_top">virtual host</a>)
+ </li></ul></div><p style="width:90%">
+
+ These directives are applied so that RivetDirConf will
+ override RivetUserConf, which in turn overrides any
+ RivetServerConf directives. Not every configuration directory
+ is meaningful to a scope directive, as shown in the table below. The scope
+ of application of a configuration line is matched also with the context where
+ it appears. Virtual hosts definitions are contexts where rivet configuration
+ lines can appear in many adding further customization to a given virtual
+ host server.
+ </p><p style="width:90%">
+ Example of configuration of a web server having independent
+ interpreters for each virtual host, a larger default cache and a specific
+ script to be executed before any templates/scripts located in /var/www/myrivetapp
+ </p><pre class="programlisting"><IfModule rivet_module>
+ AddType application/x-httpd-rivet .rvt
+ AddType application/x-rivet-tcl .tcl
+
+ RivetServerConf CacheSize 100
+ RivetServerConf SeparateVirtualInterps On
+</IfModule>
+
+<Directory /var/www/myrivetapp>
+ RivetDirConf BeforeScript "source /var/www/myrivetapp/before_script.tcl"
+</Directory></pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm212"></a>Configuration Directives</h3></div></div></div><div class="table"><table align="center" title="Configuration Directives application scopes" class="directives"><thead><td>Configuration Directives</td><td>DirConf</td><td>UserConf</td><td>ServerConf</td><td>Virtual Host</td><td>Notes</td></thead><tbody><tr><td>AbortScript</td><td>X</td><td>X</td><td>X</td><td>X</td>
+ <td>This directive is meaningful with the default request handler. In order
+ to have this triggered by calling ::rivet::abort_page or ::rivet::exit
+ any special request handler should explicitly read this script from the configuration
+ using ::rivet::inspect and evaluate it (see <a class="xref" href="request.html" title="Apache Child Processes Lifecycle and Request Processing">the section called “Apache Child Processes Lifecycle and Request Processing”</a>)</td>
+ </tr><tr><td>AfterScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td>Special request handler scripts
+ should read it from the configuration calling ::rivet::inspect and evaluate it</td></tr><tr><td>AfterEveryScript</td><td>X</td><td>X</td><td>X</td><td>X</td><td>See notes for the AfterScript directive</td></tr><tr><td>BeforeScript</td><td>X</td><td>X</td><td>X</td><td>X</td>
+ <td>See notes for the AfterScript directive</td></tr><tr><td>CacheSize</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>ChildExitScript</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>ChildInitScript</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>ErrorScript</td><td>X</td><td>X</td><td>X</td><td>X</td>
+ <td>Rivet provides a default error handler. In case you are writing your own request
+ handling procedure you need to call this error handler yourself or develop your
+ application specific error handler to be integrated into the RequestHandler script.
+ See also the notes for the AbortScript and AfterScript directives</td></tr><tr><td>ExportRivetNS</td><td></td><td></td><td>X</td><td>X</td><td>It can be set in a virtual host
+ configuration if SeparateVirtualInterps is On, otherwise this directive can be safely used at the global level only</td></tr><tr><td>GlobalInitScript</td><td></td><td></td><td>X</td><td></td>
+ <td>effective only when SeparateVirtualInterps is Off (default)</td></tr><tr><td>ImportRivetNS</td><td></td><td></td><td>X</td><td>X</td><td>It can be set in a virtual host
+ configuration if SeparateVirtualInterps is On, otherwise this directive can be safely used at the global level only</td></tr><tr><td>HonorHeaderOnlyRequests</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>MpmBridge</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>RequestHandler</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>SeparateChannels</td><td></td><td></td><td>X</td><td></td><td>global only (DEPRECATED: will be
+ replaced in future versions of Rivet)</td></tr><tr><td>SeparateVirtualInterps</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>ServerInitScript</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>SingleThreadExit</td><td></td><td></td><td>X</td><td></td><td>global only</td></tr><tr><td>UploadDirectory</td><td>X</td><td>X</td><td>X</td><td>X</td><td></td></tr><tr><td>UploadFilesToVar</td><td></td><td></td><td>X</td><td>X</td><td></td></tr><tr><td>UploadMaxSize</td><td></td><td></td><td>X</td><td>X</td><td></td></tr></tbody></table></div><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">AbortScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If an AbortScript is defined control is passed to it as
+ soon as the command <a class="xref" href="abort_page.html" title="abort_page">abort_page</a> is called.
+ AbortScript
+ is the right place where specific actions can be taken
+ to catch resources left dangling by the sudden interruption.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">AfterScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Script to be called after each parsed .rvt template or .tcl script
+ is executed
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In virtual hosts, this option overrides any AfterScript
+ definitions at the global level.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">AfterEveryScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ AfterEveryScript is a script that is to
+ be run anyway before requests processing ends. This script
+ is therefore run both when the content generation script
+ completes successfully and when its execution is interrupted
+ by <a class="xref" href="abort_page.html" title="abort_page">abort_page</a>. The code in this script
+ can understand whether it's running after the page was
+ interrupted by calling <a class="xref" href="abort_page.html" title="abort_page">abort_page</a>
+ with the argument ?<span style="font-family:monospace; font-weight: bold;">-aborting</span>?. The command
+ will return 1 if an abort_page call took place
+ earlier in the request processing.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">BeforeScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Script to be evaluated before each server parsed
+ (.rvt) page. This can be used to create a standard
+ header, for instance. It could also be used to load
+ code that you need for every page, if you don't want
+ to put it in a GlobalInitScript
+ ChildInitScript when you are first
+ developing a web site.
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This code is evaluated at the global level, not
+ inside the request namespace where pages are
+ evaluated.
+ </td></tr></table></div>
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In virtual hosts, this option takes precedence over
+ the global setting.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">CacheSize</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>size</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Sets the size of the internal page cache, where
+ <em class="replaceable"><code>size</code></em> is
+ the number of byte-compiled pages to be cached for
+ future use. Default is
+ <span style="font-family:monospace"><span class="command"><strong>MaxRequestsPerChild</strong></span></span> / 5, or 50,
+ if <span style="font-family:monospace"><span class="command"><strong>MaxRequestsPerChild</strong></span></span> is 0.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option is completely global, even when using
+ separate per-virtual host interpreters.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ChildExitScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Script to be evaluated when each Apache child
+ process exits. This is the logical place to clean
+ up resources created in ChildInitScript,
+ if necessary.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In virtual hosts, this script is run in addition to
+ any global childexitscript.
+
+ When <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterp</strong></span></span>
+ any <span style="font-family:monospace"><span class="command"><strong>ChildExitScript</strong></span></span> placed within a
+ <VirtualHost ...>....</VirtualHost>
+ will be that Virtual Host specific exit handler
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ChildInitScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Script to be evaluated when each Apache child
+ process is initialized. This is the recommended
+ place to load modules, create global variables, open
+ connections to other facilities (such as databases)
+ and so on.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In virtual hosts, this script is run in addition to
+ any global childinitscript.
+ When <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterp</strong></span></span>
+ any <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> placed within a
+ <VirtualHost ...>....</VirtualHost>
+ will be that Virtual Host specific ininitalization
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ErrorScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ When Rivet encounters an error in a script, it
+ constructs an HTML page with some information about
+ the error, and the script that was being
+ evaluated. If an ErrorScript is
+ specified, it is possible to create custom error
+ pages. This may be useful if you want to make sure
+ that users never view your source code.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In virtual hosts, this option takes precedence over
+ the global setting.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ExportRivetNS</span> (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Rivet commands are created within the ::rivet namespace. Setting
+ this option mod_rivet places the whole command set on
+ the export list of the ::rivet namespace, enabling your scripts to import
+ them in a different namespace.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">This option is, by nature, only available at the global level</div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">HonorHeaderOnlyRequests</span> (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If a HEAD requests is issued by the client Rivet detects
+ this case and sends back to the client a standard header
+ response. If the real header has to be examined (e.g.
+ for debugging) you can turn this options on.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">This option is only available at the global level</div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ImportRivetNS</span> (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Rivet commands are created within the ::rivet namespace. Setting
+ this option mod_rivet is told to place the whole command set on
+ the export list of the ::rivet namespace (implicitly forcing also ExportRivetNS)
+ and then importing the commands into the global namespace
+ </div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This option is provided only for compatibility with existing code that assumes
+ mod_rivet commands to reside in the global namespace it could be removed in
+ future versions of Rivet. This option is only available at the global level
+ </td></tr></table></div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">MpmBridge</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>string</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This global only option tells mod_rivet which MPM bridge has
+ to be loaded. The module attempt to interpolate the argument value
+ <pre class="programlisting">bridge = apr_pstrcat(pool,RIVET_DIR,"/mpm/rivet_",rsc->mpm_bridge,"_mpm.so",NULL);</pre>
+ Where RIVET_DIR is the location of the rivet libraries whose definition
+ is controlled by the configure switch <span style="font-family:monospace"><span class="command"><strong>--with-rivet-target-dir=DIR</strong></span></span>.
+ For example
+ <pre class="programlisting">RivetServerConf MpmBridge lazy</pre> will cause the
+ rivet_lazy_mpm.so library module to be loaded.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If such library does not exists mod_rivet tries to check if such definition is actually
+ the fully qualified path to such MPM bridge. If this fails the module causes the web server to stop
+ with an error.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">RequestHandler</span> ?<span style="font-family:monospace; font-weight: bold;">request_handler_filename</span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Filename of the request handler script. Overrides the default request handler. Can
+ be virtual host specific
+ </div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ Note that changing this scripts requires the programmer to understand mod_rivet
+ request processing model. See the <a class="link" href="processing.html" title="Apache Rivet HTTP Request Processing">request processing</a>
+ manual page
+ </td></tr></table></div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">SeparateChannels</span> (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Internally mod_rivet creates a new Tcl channel (Rivet channel) which is configured
+ as <span style="font-family:monospace"><span class="command"><strong>stdout</strong></span></span> and registered to each existing interpreter.
+ There is no need of multiple channels in a single thread as each thread can
+ serve only one request at a time. But if you are deploying mod_rivet in a
+ complex environment running unrelated applications developed by
+ different teams, it could be the case to have <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span>
+ set. If you want to enhance the environment separation you may also
+ set <span style="font-family:monospace"><span class="command"><strong>SeparateChannels</strong></span></span> to force mod_rivet to create
+ a channel per each Tcl interpreter thus enabling single application
+ code to change the Rivet channel parameters without affecting other
+ applications (even though changing the Tcl channel parameters is a rare
+ necessity). Setting this options increases the system overheads as each
+ Rivet channel needs to allocate its own control structures and internal
+ buffers.
+ </div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This option is implemented in order to have fine-grained control over mod_rivet. In
+ nearly all practical cases you won't need to change Rivet Channel (stdout) settings
+ for different applications by calling <span style="font-family:monospace"><span class="command"><strong>fconfigure stdout ....</strong></span></span>.
+ This option is, by nature, only available at the global level and has effect only if
+ also <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is set
+ </td></tr></table></div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">SeparateVirtualInterps</span> (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If on, Rivet will create a separate Tcl interpreter
+ for each Apache virtual host. This is useful in an
+ ISP type situation where it is desirable to separate
+ clients into separate interpreters, so that they
+ don't accidentally interfere with one another.
+ </div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This option is, by nature, only available at the
+ global level. By enabling <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span>
+ you must rely only on <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> to
+ initialize the interpreters. Don't expect the
+ initialization done in <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span> and
+ <span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span> to be handed down to the
+ slave interpreters that are private to each configured
+ virtual host.
+ </td></tr></table></div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">ServerInitScript</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>script</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The directive <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span> plays a special
+ role since the script runs within the master interpreter,
+ an interpreter created when the Apache web server is setting up
+ for answering requests and before worker processes/threads are
+ started. During this stage Apache is still running as a
+ single process, so this is the right place for doing
+ initialization of systems such as any IPC systems.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ On systems with the capability of forking child processes
+ the Apache web server can run the prefork MPM. By default
+ rivet selects the prefork brigde which makes mod_rivet work
+ the way mod_rivet 2.x work.
+ In a web server with this set up child processes inherit a copy of the
+ address space from the parent processes and therefore
+ Tcl interpreters too are replicated into the child address space.
+ If SeparateVirtualInteprs is Off child processes run with a
+ copy of the Tcl master interpreter and ServerInitScipt
+ thus provides a way to initialize only once
+ any subsequent Tcl interpreters created by fork calls as each
+ of them are clones of the master interpreter.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">SingleThreadExit</span> (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The Tcl <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command has a simple implementation that
+ eventually calls Tcl_Exit (which in turn calls stdlib's exit) that forces
+ the immediate deletion of all threads in a process. This behavior would be
+ unacceptable with the worker MPM and worker bridge which are fundamentally
+ threaded.
+ Therefore Rivet shadows the Tcl <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command with
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> which calls a designated function in
+ the running bridge. The prefork bridge simply prepares the child process
+ to terminate, whereas the worker bridge is behavior controlled by this option.
+ <div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">If SingleThreadExit is set (default) each thread behaves
+ individually and terminates after running the ChildExitScript and deleting
+ its Tcl interpreters</li><li class="listitem">If SingleThreadExit is <span style="font-family:monospace"><span class="command"><strong>No</strong></span></span> the worker bridge notifies all threads
+ to exit and then calls Tcl_Exit</li></ol></div>
+ The latter option might be useful in cases where an application is using
+ an improperly developed Tcl extension which might cause a child process to crash when
+ calling Tcl_DeleteInterp.
+ </div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ The default is <span style="font-family:monospace"><span class="command"><strong>No</strong></span></span> for the prefork bridge (loaded by default if the server
+ runs the prefork MPM) and <span style="font-family:monospace"><span class="command"><strong>true</strong></span></span> for the worker and lazy bridges
+ </td></tr></table></div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">UploadDirectory</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>directory</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Directory to place uploaded files.</div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In virtual hosts, this option takes precedence over
+ the global setting.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">UploadFilesToVar</span> (<span style="font-family:monospace; font-weight: bold;">yes</span> | <span style="font-family:monospace; font-weight: bold;">no</span>)</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option controls whether it is possible to
+ upload files to a Tcl variable. If you have a size
+ limit, and don't have to deal with large files, this
+ might be more convenient than sending the data to a
+ file on disk.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">UploadMaxSize</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>size</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Maximum size for uploaded files.</div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In virtual hosts, this option takes precedence over
+ the global setting.
+ </div></div></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cmake.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="processing.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Building Rivet 3.2 with CMake </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Apache Rivet HTTP Request Processing</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/encode.html b/rivet/manual3.2/encode.html
new file mode 100644
index 0000000..ec6264c
--- /dev/null
+++ b/rivet/manual3.2/encode.html
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>encode</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="entities.html" title="RivetEntities"><link rel="prev" href="entities.html" title="RivetEntities"><link rel="next" href="decode.html" title="decode"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">encode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="entities.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">RivetEntities</th><td width="20%" align="right"> <a accesskey="n" href="decode.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="encode"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>encode —
+ encode a string replacing every occurrence of characters for
+ which an SGML entity exists
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::encode</span> <span style="font-family:monospace; font-weight: bold;">string</span> ?<span style="font-family:monospace; font-weight: bold;">-encoding <em class="replaceable"><code><encoding></code></em></span>?</div></div></div><div class="refsect1"><a name="idm4178"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::encode</strong></span></span> returns a copy of the input string
+ after replacing every occurence of characters for which an SGML entity
+ exists. By default the command assumes the string is encoded in UTF-8,
+ other encodings are supported by passing the
+ <span style="font-family:monospace"><span class="command"><strong>-encoding <encoding></strong></span></span> argument. The list of
+ available encodings is returned by command
+ </p><pre class="programlisting">encoding names</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="entities.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="entities.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="decode.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">RivetEntities </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> decode</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/entities.html b/rivet/manual3.2/entities.html
new file mode 100644
index 0000000..27c82b7
--- /dev/null
+++ b/rivet/manual3.2/entities.html
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>RivetEntities</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="html_calendar.html" title="HtmlCalendar"><link rel="next" href="encode.html" title="encode"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">RivetEntities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="html_calendar.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="encode.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="entities"></a>RivetEntities</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4163"></a>Introduction</h3></div></div></div><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>RivetEntities</strong></span></span> package was kindly provided by Harald Oehlmann and
+ is largely taken from a simple yet clever encoder/decoder of HTML entities
+ starting from a utf-8 character string. The original code writted by Andy Goth is
+ at http://wiki.tcl.tk/26403. Package entities extends the functionality in the
+ original code combining it with Tcl's 'encoding' command to encode/decode from
+ any supported encoding
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="html_calendar.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="encode.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">HtmlCalendar </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> encode</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/env.html b/rivet/manual3.2/env.html
new file mode 100644
index 0000000..9b76004
--- /dev/null
+++ b/rivet/manual3.2/env.html
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>env</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="debug.html" title="debug"><link rel="next" href="escape_sgml_chars.html" title="escape_sgml_chars"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">env</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="escape_sgml_chars.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="env"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>env —
+ Loads a single "environmental variable" into a Tcl variable.
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::env</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>varName</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1096"></a><h2>Description</h2><p style="width:90%">
+ If it is only necessary to load one environmental variable,
+ this command may be used to avoid the overhead of loading
+ and storing the entire array.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="escape_sgml_chars.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">debug </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> escape_sgml_chars</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/escape_sgml_chars.html b/rivet/manual3.2/escape_sgml_chars.html
new file mode 100644
index 0000000..73a7e49
--- /dev/null
+++ b/rivet/manual3.2/escape_sgml_chars.html
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>escape_sgml_chars</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="env.html" title="env"><link rel="next" href="escape_shell_command.html" title="escape_shell_command"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">escape_sgml_chars</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="env.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="escape_shell_command.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="escape_sgml_chars"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>escape_sgml_chars — escape special SGML characters in a string.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::escape_sgml_chars</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>?</div></div></div><div class="refsect1"><a name="idm1107"></a><h2>Description</h2><p style="width:90%">
+ Scans through each character in the specified string looking
+ for any special (with respect to SGML, and hence HTML) characters
+ from the specified string, and returns the result.
+ For example, the right angle bracket is escaped to the corrected
+ ampersand gt symbol.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="env.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="escape_shell_command.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">env </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> escape_shell_command</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/escape_shell_command.html b/rivet/manual3.2/escape_shell_command.html
new file mode 100644
index 0000000..21f7611
--- /dev/null
+++ b/rivet/manual3.2/escape_shell_command.html
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>escape_shell_command</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="escape_sgml_chars.html" title="escape_sgml_chars"><link rel="next" href="escape_string.html" title="escape_string"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">escape_shell_command</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="escape_sgml_chars.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="escape_string.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="escape_shell_command"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>escape_shell_command — escape shell metacharacters in a string.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::escape_shell_command</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>?</div></div></div><div class="refsect1"><a name="idm1118"></a><h2>Description</h2><p style="width:90%">
+ Scans through each character in the specified string looking
+ for any shell metacharacters, such as asterisk, less than and
+ greater than, parens, square brackets, curly brackets, angle
+ brackets, dollar signs, backslashes, semicolons, ampersands,
+ vertical bars, etc.
+ </p><p style="width:90%">
+ For each metacharacter found, it is quoted in the result by
+ prepending it with a backslash, returning the result.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="escape_sgml_chars.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="escape_string.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">escape_sgml_chars </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> escape_string</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/escape_string.html b/rivet/manual3.2/escape_string.html
new file mode 100644
index 0000000..db8de62
--- /dev/null
+++ b/rivet/manual3.2/escape_string.html
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>escape_string</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="escape_shell_command.html" title="escape_shell_command"><link rel="next" href="exit.html" title="exit"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">escape_string</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="escape_shell_command.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="exit.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="escape_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>escape_string — convert a string into escaped characters.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::escape_string</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>?</div></div></div><div class="refsect1"><a name="idm1130"></a><h2>Description</h2><p style="width:90%">
+ Scans through each character in the specified string looking
+ for special characters, escaping them as needed, mapping
+ special characters to a quoted hexadecimal equivalent,
+ returning the result.
+ </p><p style="width:90%">
+ This is useful for quoting strings that are going to be
+ part of a URL.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="escape_shell_command.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="exit.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">escape_shell_command </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> exit</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/examples.html b/rivet/manual3.2/examples.html
new file mode 100644
index 0000000..a090871
--- /dev/null
+++ b/rivet/manual3.2/examples.html
@@ -0,0 +1,512 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Examples and Usage</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="xml.html" title="xml"><link rel="next" href="tcl_packages.html" title="Rivet Tcl Packages"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Examples and Usage</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="xml.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="tcl_packages.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="examples"></a>Examples and Usage</h2></div></div></div><p style="width:90%">
+ Some examples of Rivet usage follow. Some prior Tcl knowledge
+ is assumed. If you don't know much Tcl, don't worry, it's easy,
+ and there are some good resources available on the web that will
+ get you up to speed quickly. Go to the
+ <a class="link" href="help.html#websites" title="Web Sites">web sites</a> section and have a look.
+ </p><div class="example"><a name="hello_world"></a><p class="title"><b>Example 1. Hello World</b></p><div class="example-contents"><p style="width:90%">
+ As with any tool, it's always nice to see something work, so
+ let's create a small "Hello World" page.
+ </p><p style="width:90%">
+ Assuming you have Apache configured correctly, create a file
+ called <code class="filename">hello.rvt</code> where Apache can find
+ it, with the following content:
+ </p><pre class="programlisting"><?
+puts "Hello World"
+?>
+
+</pre><p style="width:90%">
+ If you then access it with your browser, you should see a
+ blank page with the text "Hello World" (without the quotes) on it.
+ The command <span style="font-family:monospace"><span class="command"><strong>puts</strong></span></span> is the good old Tcl command for
+ terminal printing, which appends to the argument string the control
+ characters needed to open a newline. When you don't have to run through
+ complex elaboration and the output can be lumped
+ in a single string (just like in the 'Hello World' example) you
+ can draw on the popular shorthand syntax for string
+ output that comes handy in many cases
+ </p><pre class="programlisting"><?= "Hello World" ?>
+</pre><p style="width:90%">
+ which is translated into
+ </p><pre class="programlisting">puts -nonewline "Hello World"</pre><p style="width:90%">
+ </p></div></div><br class="example-break"><div class="example"><a name="idm1967"></a><p class="title"><b>Example 2. Generate a Colorful Table</b></p><div class="example-contents"><p style="width:90%">
+ In another simple example, we dynamically generate a table selecting
+ a different background color for each cell. The font color is determined
+ through a simple CSS rule embedded in a HTML <style> element. Create
+ the file colortable.rvt and put the following code in it
+ </p><pre class="programlisting"><html><head>
+ <style>
+ td {
+ font-size: 12px;
+ font-family: monospace;
+ text-align: center;
+ padding-left: 3px;
+ padding-right: 3px
+ }
+ td.bright { color: #eee; }
+ td.dark { color: #222; }
+ </style>
+</head>
+<body>
+ <table>
+<?
+# we create a 9x9 table selecting a different background for each cell
+
+for {set i 0} { $i < 9 } {incr i} {
+ puts "<tr>"
+ for {set j 0} {$j < 9} {incr j} {
+
+ set r [expr int(255 * ($i + $j) / 16)]
+ set g [expr int(255 * (8 + $j - $i) / 16)]
+ set b [expr int(255 * (abs (4 - $i) + abs(4 - $j)) / 8)]
+
+# determining the background luminosity (YIQ space of NTSC) and choosing
+# the foreground color accordingly in order maintain maximum contrast
+
+ if { [expr ($r*0.29894)+($g*0.58704)+($b*0.11402)] > 148.0} {
+ set cssclass "dark"
+ } else {
+ set cssclass "bright"
+ }
+
+ set cell [format "%3d %3d %3d" $r $g $b]
+
+ puts [format \
+ "<td bgcolor=\"%02x%02x%02x\" class=\"%s\">%s</td>" \
+ $r $g $b $cssclass $cell]
+ }
+ puts "</tr>"
+}
+?>
+ </table>
+</body></html>
+</pre><p style="width:90%">
+ If you read the code, you can see that this is pure Tcl. We
+ could take the same code, run it outside of Rivet, and it
+ would generate the same HTML
+ </p><p style="width:90%">
+ The result should look something like this:
+ </p><div><img src="images/color-table.png"></div></div></div><br class="example-break"><div class="example"><a name="variable_access"></a><p class="title"><b>Example 3. Variable Access</b></p><div class="example-contents"><p style="width:90%">
+ Here, we demonstrate how to access variables set by GET or
+ POST operations.
+ </p><p style="width:90%">
+ Given an HTML form like the following:
+ </p><pre class="programlisting"><form action="vars.rvt">
+ <table>
+ <tbody>
+ <tr>
+ <td><b>Title:</b></td>
+ <td><input name="title" /></td>
+ </tr>
+ <tr>
+ <td><b>Salary:</b></td>
+ <td><input name="salary" /></td>
+ </tr>
+ <tr>
+ <td><b>Boss:</b></td>
+ <td><input name="boss" /></td></tr>
+ <tr>
+ <td><b>Skills:</b></td>
+ <td>
+ <select name="skills" multiple="multiple">
+ <option>C</option>
+ <option>Java</option>
+ <option>Tcl</option>
+ <option>Perl</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><input type="submit" /></td>
+ </tr>
+ </tbody>
+ </table>
+</form>
+
+</pre><p style="width:90%">
+ We can use this Rivet script to get the variable values:
+ </p><pre class="programlisting"><?
+set errlist {}
+if { [::rivet::var exists title] } {
+ set title [::rivet::var get title]
+} else {
+ set errlist "You need to enter a title"
+}
+
+if { [::rivet::var exists salary] } {
+ set salary [::rivet::var get salary]
+ if { ! [string is digit $salary] } {
+ lappend errlist "Salary must be a number"
+ }
+} else {
+ lappend errlist "You need to enter a salary"
+}
+
+if { [::rivet::var exists boss] } {
+ set boss [::rivet::var get boss]
+} else {
+ set boss "Mr. Burns"
+}
+
+if { [::rivet::var exists skills] } {
+ set skills [::rivet::var list skills]
+} else {
+ lappend errlist "You need to enter some skills"
+}
+
+if { [llength $errlist] != 0 } {
+ foreach err $errlist {
+ puts "<b> $err </b>"
+ }
+} else {
+ puts "Thanks for the information!"
+ ?>
+ <table>
+ <tbody>
+ <tr>
+ <td><b>Title:</b></td>
+ <td><?= $title ?></td>
+ </tr>
+ <tr>
+ <td><b>Boss:</b></td>
+ <td><?= $boss ?></td>
+ </tr>
+ <tr>
+ <td><b>Salary:</b></td>
+ <td><?= $salary ?></td>
+ </tr>
+ <tr>
+ <td><b>Skills:</b></td>
+ <td><?= $skills ?></td>
+ </tr>
+ </tbody>
+ </table>
+ <?
+}
+?>
+
+</pre><p style="width:90%">
+ The first statement checks to make sure that the
+ <code class="varname">boss</code> variable has been passed to the
+ script, and then does something with that information. If
+ it's not present, an error is added to the list of errors.
+ </p><p style="width:90%">
+ In the second block of code, the variable
+ <code class="varname">salary</code> is fetched, with one more error
+ check - because it's a number, it needs to be composed of
+ digits.
+ </p><p style="width:90%">
+ The <code class="varname">boss</code> variable isn't required to have
+ been sent - we set it to "Mr. Burns" if it isn't among the
+ information we received.
+ </p><p style="width:90%">
+ The last bit of variable handing code is a bit trickier.
+ Because <code class="varname">skills</code> is a listbox, and can
+ potentially have multiple values, we opt to receive them as a
+ list, so that at some point, we could iterate over them.
+ </p><p style="width:90%">
+ The script then checks to make sure that
+ <code class="varname">errlist</code> is empty and outputting a thankyou
+ message. If <code class="varname">errlist</code> is not empty, the list
+ of errors it contains is printed.
+ </p></div></div><br class="example-break"><div class="example"><a name="file_upload"></a><p class="title"><b>Example 4. File Upload</b></p><div class="example-contents"><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>::rivet::upload</strong></span></span> command endows Rivet with an
+ interface to access files transferred over http as parts of a
+ multipart form. The following HTML in one file, say,
+ <code class="filename">upload.html</code> creates a form with a text
+ input entry. By clicking the file chooser button the file
+ browser shows up and the user selects the file to be uploaded
+ (the file path will appear in the text input). In order to make
+ sure you're uploading the whole file you must combine the
+ action of the enctype and method attributes of the
+ <form...> tag in the way shown in the example. Failure
+ to do so would result in the client sending only the file's
+ path, rather than the actual contents.
+ </p><pre class="programlisting"><form action="foo.rvt" enctype="multipart/form-data" method="post">
+<input type="file" name="MyUpload"></input>
+<input type="submit" value="Send File"></input>
+</form>
+
+</pre><p style="width:90%">
+ In the script invoked by the form
+ (<code class="filename">upload.rvt</code>) <span style="font-family:monospace"><span class="command"><strong>upload</strong></span></span>
+ ?<span style="font-family:monospace; font-weight: bold;">argument ...</span>? commands can be used to manipulate the
+ various files uploaded.
+ </p><pre class="programlisting"><?
+::rivet::upload save MyUpload /tmp/uploadfiles/file1
+puts "Saved file [::rivet::upload filename MyUpload] \
+ ([::rivet::upload size MyUpload] bytes) to server"
+?>
+
+</pre><p style="width:90%">
+ Don't forget that the apache server must have write access to
+ the directory where files are being created. The Rivet Apache
+ directives have a substantial impact on the upload process,
+ you have to carefully read the docs in order to set the
+ appropriate directives values that would match your
+ requirements.
+ </p><p style="width:90%">
+ It is also important to understand that some
+ <span style="font-family:monospace"><span class="command"><strong>upload</strong></span></span> commands are effective only when
+ used in a mutually exclusive way. Apache stores the data in
+ temporary files which are read by the <span style="font-family:monospace"><span class="command"><strong>upload save
+ ?<span style="font-family:monospace; font-weight: bold;">upload name</span>? ?<span style="font-family:monospace; font-weight: bold;">filename</span>?</strong></span></span> or by the
+ <span style="font-family:monospace"><span class="command"><strong>upload data ?<span style="font-family:monospace; font-weight: bold;">upload name</span>?</strong></span></span>
+ command. Subsequent calls to these 2 commands using the same
+ ?<span style="font-family:monospace; font-weight: bold;">upload name</span>? argument will return no data on the
+ second call. Likewise <span style="font-family:monospace"><span class="command"><strong>upload channel ?<span style="font-family:monospace; font-weight: bold;">upload
+ name</span>?</strong></span></span> will return a Tcl file channel that you
+ can use in regular Tcl scripts only if you haven't already
+ read the data, for example with a call to the <span style="font-family:monospace"><span class="command"><strong>upload
+ data ?<span style="font-family:monospace; font-weight: bold;">upload name</span>?</strong></span></span> command.
+ </p></div></div><br class="example-break"><div class="example"><a name="file_download"></a><p class="title"><b>Example 5. File Download</b></p><div class="example-contents"><p style="width:90%">
+ In general setting up a data file for being sent over http is
+ as easy as determining the file's URI and letting Apache's
+ do all that is needed. If this approach fits your design all
+ you have to do is to keep the downloadable files somewhere
+ within Apache's DocumentRoot (or in any of the directories
+ Apache has right to access).
+ </p><p style="width:90%">
+ When a client sends a request for a file, Apache takes
+ care of determining the filetype, sends appropriate headers to
+ the client and then the file content. The client is responsible
+ for deciding how to handle the data accordingly to the
+ "content-type" headers and its internal design. For example
+ when browsers give up trying to display a certain "content-type"
+ they display a download dialog box asking for directions from
+ the user.
+ </p><p style="width:90%">
+ Rivet can help if you have more sofisticated needs. For
+ instance you may be developing an application that uses
+ webpages to collect input data. This information might be
+ passed on to scripts or programs for processing.
+ In this case a real file representing the
+ data doesn't exist and the content is generated on demand
+ by the server.
+ In other circumstances you may need to dynamically inhibit
+ the download of specific files and hide them away,
+ Your scripts may expunge from the pages
+ every link to these files (your pages are dynamic, aren't
+ they?) and move them out of way, but it looks like a
+ cumbersome solution.
+ </p><p style="width:90%">
+ Putting Tcl and Rivet in charge of the whole download
+ mechanism helps in building cleaner and safer approaches to
+ the download problem.
+ </p><p style="width:90%">
+ In this example a procedure checks for the existence of a
+ parameter passed in by the browser. The parameter is the name
+ (without extension) of a pdf file.
+ Pdf files are stored in a directory whose path is
+ in the <span style="font-family:monospace"><span class="command"><strong>pdf_repository</strong></span></span> variable.
+ </p><p style="width:90%">
+ This code is reported as an example of how to control
+ the protocol using the <span style="font-family:monospace"><span class="command"><strong>headers</strong></span></span> command.
+ </p><pre class="programlisting"># Code example for the transmission of a pdf file.
+
+if {[::rivet::var exists pdfname]} {
+ set pdfname [::rivet::var get pdfname]
+
+# let's build the full path to the pdf file. The 'pdf_repository'
+# directory must be readable by the apache children
+
+ set pdf_full_path [file join $pdf_repository ${pdfname}.pdf]
+ if {[file exists $pdf_full_path]} {
+
+# Before the file is sent we inform the client about the file type and
+# file name. The client can be proposed a filename different from the
+# original one. In this case, this is the point where a new file name
+# must be generated.
+
+ ::rivet::headers type "application/pdf"
+ ::rivet::headers add Content-Disposition "attachment; filename=${pdfname}.pdf"
+ ::rivet::headers add Content-Description "PDF Document"
+
+# The pdf is read and stored in a Tcl variable. The file handle is
+# configured for a binary read: we are just shipping raw data to a
+# client. The following 4 lines of code can be replaced by any code
+# that is able to retrieve the data to be sent from any data source
+# (e.g. database, external program, other Tcl code)
+
+ set paper [open $pdf_full_path r]
+ fconfigure $paper -translation binary
+ set pdf [read $paper]
+ close $paper
+
+# Now we got the data: let's tell the client how many bytes we are
+# about to send (useful for the download progress bar of a dialog box)
+
+ ::rivet::headers add Content-Length [string length $pdf]
+
+# Let's send the actual file content
+
+ puts $pdf
+ } else {
+ source pdf_not_found_error.rvt
+ }
+} else {
+ source parameter_not_defined_error.rvt
+}
+
+</pre><p style="width:90%">
+ Before the pdf is sent the procedure sets the
+ <code class="constant">Content-Type</code>,
+ <code class="constant">Content-Disposition</code>,
+ <code class="constant">Content-Description</code> and
+ <code class="constant">Content-Length</code> headers to inform
+ the client about the file type, name and size. Notice that in
+ order to set the <code class="constant">Content-Type</code> header Rivet
+ uses a specialiezed form of the <span style="font-family:monospace"><span class="command"><strong>headers</strong></span></span>
+ command. Headers must be sent before data gets sent down the
+ output channel. Messing with this prescription causes an error
+ to be raised (in fact the protocol itself is been violated)
+ </p><p style="width:90%">
+ More information about the meaning of the mime headers in the
+ http context can be found at
+ <a class="ulink" href="http://www.w3.org/Protocols/rfc2616/rfc2616.html" target="_top">http://www.w3.org/Protocols/rfc2616/rfc2616.html</a>
+ </p></div></div><br class="example-break"><div class="example"><a name="ajax_xml_messaging"></a><p class="title"><b>Example 6. XML Messages and Ajax</b></p><div class="example-contents"><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>headers</strong></span></span> command is crucial for generating
+ XML messages that have to be understood by JavaScript code used
+ in Ajax applications.
+ </p><p style="width:90%">
+ Ajax is a web programming technique that heavily relies on the abilty of a web browser to run in backround
+ JavaScript functions. JavaScript functions can be run as callbacks of events generated by a user interaction
+ but they can also react to other I/O events, for example network events.
+ Modern browsers endow JavaScript with the ability to build http GET/POST requests to be sent to a remote
+ webserver. Generally these requests refer to scripts (e.g. Tcl scripts run by Rivet) which inherit as
+ variables the arguments encoded in the request.
+ The output produced by these scripts is sent back to the browser where callbacks functions extract
+ information and hand it down to functions that directly manipulate a page's DOM.
+ Therefore through Ajax becomes possible to build web applications that are more responsive and flexible:
+ instead of going through the cycle of request-generation-transfer-display
+ of a whole page, Ajax scripts request from a webserver only the essential data to be displayed.
+ Ajax emphasizes the requirement of separation between data and user interface, saves
+ the server from sending over the same html code and graphics if only a fraction of a page has to be
+ updated, allows the programmer to design flexible solutions for complex forms and makes possible
+ to find new innovative approaches to simple problems (e.g. Google tips that show up as you type in
+ a query). A downside of this approach is the large number of complexities, subtleties and incompatibilities
+ that still exist in the way different versions of popular browsers handle the DOM elements of a page.
+ </p><p style="width:90%">
+ JavaScript can handle the communication between client and server through an instance of a
+ specialized object. For quite a long time 2 approaches existed, the non-IE world (Firefox,Safari,Opera...)
+ used the XMLHttpRequest class to create this object, whereas IE (before IE7) used the ActiveXObject class.
+ With the release of IE7 Microsoft introduced native support for XMLHttpRequest class objects thus enabling
+ programmers with a unique method for the development of dynamic pages.
+ </p><p style="width:90%">
+ By creating an instance of this class a POST or GET request can be sent to the server and the response is
+ stored in a property ('returnedText') of the communication object. It's become widely customary to encode
+ these responses in XML messages. You can invent your own message structure (either based on XML or anything
+ else), but one has to be aware that if the http headers are properly set and the message returned to the
+ client is a well formed XML fragment, also the property XMLResponse is assigned with a reference to an object
+ that represents the DOM of the XML response. By means of the XML W3C DOM interface the programmer can easily
+ manipulate the data embedded in the XML message.
+ </p><p style="width:90%">
+ In this example a Rivet script initializes an array with the essential data regarding a few of the major
+ composers of the european music. This array plays the role of a database. The script sends back to the
+ client two types of responses: a catalog of the composers or a single record of a composer.
+ </p><pre class="programlisting">#
+# Ajax query servelet: a pseudo database is built into the dictionary 'composers' with the
+# purpose of emulating the role of a real data source.
+# The script answers with 2 types of responses: a catalog of the record ids and a database
+# entry matching a given rec_id. The script obviously misses the error handling and the
+# likes. Just an example to see rivet sending xml data to a browser. The full Tcl, JavaScript
+# and HTML code are available from http://people.apache.org/~mxmanghi/rivet-ajax.tar.gz
+
+# This example requires Tcl8.5 or Tcl8.4 with package 'dict'
+# (http://pascal.scheffers.net/software/tclDict-8.5.2.tar.gz)
+#
+
+# A pseudo database. rec_id matches a record in the db
+
+set composers [dict create \
+ 1 {first_name Claudio middle_name "" last_name Monteverdi \
+ lifespan 1567-1643 era Renaissance/Baroque} \
+ 2 {first_name Johann middle_name Sebastian last_name Bach \
+ lifespan 1685-1750 era Baroque } \
+ 3 {first_name Ludwig middle_name "" last_name "van Beethoven" \
+ lifespan 1770-1827 era Classical/Romantic} \
+ 4 {first_name Wolfgang middle_name Amadeus last_name Mozart \
+ lifespan 1756-1791 era Classical } \
+ 5 {first_name Robert middle_name "" last_name Schumann \
+ lifespan 1810-1856 era Romantic} ]
+
+# we use the 'load' argument in order to determine the type of query
+#
+# load=catalog: we have to return a list of the names in the database
+# load=composer&amp;res_id=<id>: the script is supposed to return the record
+# having <id> as record id
+
+if {[::rivet::var exists load]} {
+
+# the xml declaration is common to every message (error messages included)
+
+ set xml "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
+ switch [::rivet::var get load] {
+ catalog {
+ append xml "<catalog>\n"
+ foreach nm [dict keys $composers] {
+ set first_name [dict get $composers $nm first_name]
+ set middle_name [dict get $composers $nm middle_name]
+ set last_name [dict get $composers $nm last_name]
+ append xml " <composer key=\"$nm\">$first_name "
+ if {[string length [string trim $middle_name]] > 0} {
+ append xml "$middle_name "
+ }
+ append xml "$last_name</composer>\n"
+ }
+ append xml "</catalog>\n"
+ }
+ composer {
+ append xml "<composer>\n"
+ if {[::rivet::var exists rec_id]} {
+ set rec_id [::rivet::var get rec_id]
+ if {[dict exists $composers $rec_id]} {
+ foreach {k v} [dict get $composers $rec_id] {
+ append xml "<$k>$v</$k>\n"
+ }
+ }
+ }
+ append xml "</composer>\n"
+ }
+ }
+
+# we have to tell the client this is an XML message. Failing to do so
+# would result in an XMLResponse property set to null
+
+ ::rivet::headers type "text/xml"
+ ::rivet::headers add Content-Length [string length $xml]
+ puts $xml
+}
+
+
+</pre><p style="width:90%">
+ For sake of brevity the JavaScript and HTML will not listed here. They can be downloaded (along with the Tcl
+ script) stored in the <a class="ulink" href="http://people.apache.org/~mxmanghi/rivet-ajax.tar.gz" target="_top">rivet-ajax.tar.gz</a> archive.
+ By simply opening this tar archive in a directory accessible
+ by your apache server and pointing your browser to the rivetService.html page you should see a page with a
+ drop-down list. Every time a different name is picked from the list a new query is sent and logged in the
+ apache access.log file, even though the html is never reloaded.
+ </p></div></div><br class="example-break"><div class="example"><a name="calendar_example"></a><p class="title"><b>Example 7. A Calendar Utility</b></p><div class="example-contents"><p style="width:90%">
+ Rivet comes with a <span class="emphasis"><em>Calendar</em></span> package that provides classes for printing
+ calendar tables in various forms.
+ </p><p style="width:90%">
+ The <span class="emphasis"><em>HtmlCalendar</em></span> class prints a calendar table in a similar form the Unix
+ program 'cal' does. Example: the following code
+ </p><pre class="programlisting">package require Calendar
+
+proc ::cal_cell_attributes { day month year weekday } {
+ if {$weekday == 3} {
+ return [list class curr_wkday]
+ }
+}
+
+set htmlc [HtmlCalendar #auto]
+set html_txt [$htmlc emit -container {table class calendar} -current_weekday 3 \
+ -cell_function cal_cell_attributes ]
+puts $html_txt
+</pre><p style="width:90%">
+
+ with some CSS styling would print
+ </p><p style="width:90%">
+ </p><div><img src="images/calendar.png"></div><p style="width:90%">
+ </p></div></div><br class="example-break"></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="xml.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="tcl_packages.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">xml </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Rivet Tcl Packages</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/exit.html b/rivet/manual3.2/exit.html
new file mode 100644
index 0000000..e8ba7af
--- /dev/null
+++ b/rivet/manual3.2/exit.html
@@ -0,0 +1,39 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>exit</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="escape_string.html" title="escape_string"><link rel="next" href="headers.html" title="headers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">exit</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="escape_string.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="headers.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="exit"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>exit — terminate execution and child process</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::exit</span> ?<span style="font-family:monospace; font-weight: bold;">code</span>?</div></div></div><div class="refsect1"><a name="idm1142"></a><h2>Description</h2><p style="width:90%">
+ Replaces Tcl's <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> core command. <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>
+ interrupts execution of the current script and passes execution to AbortScript if
+ such script is set. After AbortScript has finished and request processing completed
+ the child process is forced to exit by eventually calling Tcl_Exit producing the same final
+ effect of the core command.
+ During an <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> execution the
+ exit condition can be detected
+ </p><pre class="programlisting">if {[<span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page -exiting</strong></span></span>]} {
+...handle exit condition
+}</pre><p style="width:90%">
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> has a single optional argument ?<span style="font-family:monospace; font-weight: bold;">code</span>?. This
+ value must be a positive integer number to be passed to Tcl_Exit. If any other value is
+ given ?<span style="font-family:monospace; font-weight: bold;">code</span>? is set to 0. The exit code can be obtained from the dictionary
+ returned by <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_code</strong></span></span>
+ </p><pre class="programlisting">[::rivet::abort_code]
+<== return_code ?<span style="font-family:monospace; font-weight: bold;">code</span>? error_code exit</pre><p style="width:90%">
+ Rivet's specific implementation prevents any abrupt process termination
+ that otherwise the <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command would bring about deferring
+ the call to Tcl_Exit to a later stage when the request processing has finished.
+ This is always true if the mod_rivet runs the prefork bridge. The behavior with
+ the worker bridge depends on the <span style="font-family:monospace"><span class="command"><strong>SingleThreadExit</strong></span></span> configuration
+ directive. By default all the threads of a single process are requested to exit
+ before the child process exits. Starting with version 3.2
+ by setting the <span style="font-family:monospace"><span class="command"><strong>SingleThreadExit</strong></span></span> option directive
+ calling <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> causes a single thread termination.
+ Though always accepted this directive is meaningful only if used with the worker
+ or lazy bridges.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ Nonetheless we discourage the programmer to use such command, and suggest to focus on proper
+ application design and avoid such a drastic way to bail out.
+ If you need to restart the child processes from time to time we recommend to check the
+ MaxRequests parameter in the
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork MPM documentation</a>
+ or the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestsperchild" target="_top">MaxRequestsPerChild</a>
+ configuration parameter
+ </td></tr></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="escape_string.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="headers.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">escape_string </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> headers</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/fb.html b/rivet/manual3.2/fb.html
new file mode 100644
index 0000000..9c00edc
--- /dev/null
+++ b/rivet/manual3.2/fb.html
@@ -0,0 +1,263 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>FormBroker</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="formbroker.html" title="The Form Broker"><link rel="prev" href="formbroker.html" title="The Form Broker"><link rel="next" href="help.html" title="Resources - How to Get Help"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">FormBroker</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="formbroker.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">The Form Broker</th><td width="20%" align="right"> <a accesskey="n" href="help.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="fb"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>FormBroker —
+ Form broker object creator
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::FormBroker</span> <span style="font-family:monospace; font-weight: bold;">create</span> ?<span style="font-family:monospace; font-weight: bold;">-quoting quoting_procedure</span>? ?<span style="font-family:monospace; font-weight: bold;">variable1 descriptor</span>? ?<span style="font-family:monospace; font-weight: bold;">variable2 descriptor</span>? ?<span style="font-family:monospace; font-weight: bold;">...</span>?</div></div></div><div class="refsect1"><a name="idm4249"></a><h2>Description</h2><p style="width:90%">
+ The command returns a reference to a form broker object by creating
+ a representation of the form data using the list of variable
+ descriptors passed to method <span style="font-family:monospace"><span class="command"><strong>create</strong></span></span>. Each descriptor
+ is a list of parameter or parameter-value pairs that must
+ begin with the <span style="font-family:monospace"><span class="command"><strong>{variable_name variable_type}</strong></span></span> pair as only
+ requirement. A formbroker object provide native support for
+ integer, unsigned integer, string, boolean and email data types.
+ The programmer can defined new data types and provide in the descriptor a
+ reference to a validation procedure for that type.
+ </p><p style="width:90%">
+ The optional ?<span style="font-family:monospace; font-weight: bold;">-quoting quoting_procedure</span>? switch defines an
+ external procedure to quote or reformat the response values.
+ The quoting procedure is any procedure accepting a single string argument
+ and returning its quoted value. A most basic example is the FormBroker default quoting procedure
+ </p><pre class="programlisting">proc force_quote {str} {
+ return "'$str'"
+}</pre><p style="width:90%">
+ Other parameters of a descriptors are
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>type</strong></span></span>: the data type of the variable</li><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>bounds</strong></span></span>: limits of a variable value. The
+ meanining of bounds depends on the variable type. For an integer is the
+ maximum absolute value for that variable (for an unsigned the lower
+ limit is invariably 0), for a string is the maximum length of the string. The
+ parameter bounds has no effect on an email data type
+ </li><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>constrain</strong></span></span>: boolean value telling the variable has to be
+ forced to fulfill the constrain imposed by <span style="font-family:monospace"><span class="command"><strong>bounds</strong></span></span>. This field
+ is bidirectional in that it can be used by the validator to force the
+ variable value rewriting</li><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>validator</strong></span></span>: name of the specialized validator for this variable</li><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>default</strong></span></span>: default value of the variable if not set in a response array.
+ When a variable is given a default value the form validation will not fail on the fact that
+ this variable may be missing from the form response array</li><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>quote</strong></span></span>: the variable value has to be quoted when written back in
+ the response array</li><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>validator</strong></span></span>: name of the validator procedure. The procedure
+ can be any Tcl procedure accepting as argument the name of a dictionary
+ holding the variable internal representation.
+ </li></ul></div><p style="width:90%">
+ An example of a form accepting four variable, one for each native type of a form broker object
+ </p><pre class="programlisting"> % set fbroker [::FormBroker create {var1 integer} {var2 unsigned} {var3 string} {var4 integer bounds {-10 100}}]
+::FormBroker::form0</pre></div><div class="refsect1"><a name="idm4276"></a><h2>Form broker object methods</h2><p style="width:90%">
+ The central method of a form broker object is <span style="font-family:monospace"><span class="command"><strong>validate</strong></span></span>
+ </p><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>formBroker_object</code></em></span> <span style="font-family:monospace; font-weight: bold;">validate</span> ?<span style="font-family:monospace; font-weight: bold;">-forcequote</span>? <span style="font-family:monospace; font-weight: bold;">response</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>response copy</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The method <span style="font-family:monospace"><span class="command"><strong>validate</strong></span></span> takes as argument the name of an array of variables
+ in the way this is produced by command <a class="xref" href="load_response.html" title="load_response">load_response</a>
+ returning a form response. The optional argument <em class="replaceable"><code>-forcequote</code></em> causes the
+ variable values to be rewritten and quoted. If the optional argument <em class="replaceable"><code>response copy</code></em>
+ is present the validated response is copied in this array instead of the input <span style="font-family:monospace; font-weight: bold;">response</span>
+ array.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If the form data have been validated the method <span style="font-family:monospace"><span class="command"><strong>validate</strong></span></span> returns <span class="emphasis"><em>true</em></span>
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Example of form data validation (assuming ::rivet::load_response is loading the array <span class="emphasis"><em>response</em></span>
+ with data taken from a form non displayed here)
+ </div><pre class="programlisting">% package require formbroker
+% set fbroker [::FormBroker create {var1 integer} {var2 unsigned} {var3 string} {var4 integer bounds {-10 100}}]
+::FormBroker::form0
+
+% ::rivet::load_response
+% parray response
+response(var1) = -10
+response(var2) = 20
+response(var3) = a string
+response(var4) = 50
+
+# let's keep a copy of the response
+
+% array set response_copy [array get response]
+
+# form data validation
+
+% $fbroker validate response
+true
+% $fbroker validate -forcequote response
+% parray response
+response(var1) = '-10'
+response(var2) = '20'
+response(var3) = 'a string'
+response(var4) = '50'
+
+# restore response original value
+
+% array set response [array get response_copy]
+% $fbroker validate -forcequote response response_copy
+true
+% parray response
+response(var1) = -10
+response(var2) = 20
+response(var3) = a string
+response(var4) = 50
+% parray response_copy
+response_copy(var1) = '-10'
+response_copy(var2) = '20'
+response_copy(var3) = 'a string'
+response_copy(var4) = '50'
+
+# a form object has to be destroyed if it's not needed anymore
+
+% $fbroker destroy</pre></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>formBroker_object</code></em></span> <span style="font-family:monospace; font-weight: bold;">failing</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ In case the validation fails method <span style="font-family:monospace"><span class="command"><strong>failing</strong></span></span> returns a list
+ of <span class="emphasis"><em>variable_name - error_condition</em></span> pairs for each
+ variable whose value failed to validate and was impossible to fix. This list
+ is suitable to populate an array or used directly as a dictionary
+ </div><pre class="programlisting">% package require formbroker
+1.0
+% set fbroker [::FormBroker create {var1 integer} \
+ {var2 unsigned} \
+ {var3 string} \
+ {var4 integer}]
+::FormBroker::form0
+% ::rivet::load_response
+
+# let's suppose we have an incomplete response
+% parray response
+response(var1) = '100'
+response(var2) = '20'
+response(var3) = 'a string'
+% $fbroker validate response
+false
+$fbroker failing
+var4 MISSING_VAR
+
+# this can be prevented by assigning a variable a default value
+
+% set fbroker [::FormBroker create {var1 integer} \
+ {var2 unsigned} \
+ {var3 string} \
+ {var4 integer default 0}]
+::FormBroker::form1
+% $fbroker validate response
+true
+% parray response
+response(var1) = 100
+response(var2) = 20
+response(var3) = a string
+response(var4) = 0
+
+% set fbroker [::FormBroker create {var1 integer} \
+ {var2 unsigned} \
+ {var3 string length 10 constrain} \
+ {var4 integer bounds {-10 100}}]
+::FormBroker::form2
+% ::rivet::load_response
+
+# this time the response has invalid data
+
+% parray response
+response(var1) = 'aaaaa'
+response(var2) = '-20'
+response(var3) = 'a longer string that breaks the 10 chars max limit imposed'
+response(var4) = '150'
+% $fbroker validate response
+false
+% $fbroker failing
+var1 NOT_INTEGER var2 FB_OUT_OF_BOUNDS var4 FB_OUT_OF_BOUNDS</pre><div style="margin-bottom:1.5ex ; padding .5ex">
+ Notice that even though $response(var3) exceeds the 10 characters max length imposed to variable <span class="emphasis"><em>var3</em></span>
+ this variable is not in the list returned by <span style="font-family:monospace"><span class="command"><strong>failing</strong></span></span> because
+ the 'constrain' attribute forced the truncation of the string.
+ In fact this applies also to the integer and unsigned values
+ </div><pre class="programlisting">% package require formbroker
+% set fbroker [::FormBroker create {var1 integer bounds 10 constrain} \
+ {var2 unsigned constrain} \
+ {var3 string length 10 constrain} \
+ {var4 integer bounds {-10 100} constrain}]
+::FormBroker::form0
+% ::rivet::load_response
+% parray response
+response(var1) = abcdef
+response(var2) = -20
+response(var3) = a longer string that breaks the 10 chars max limit imposed
+response(var4) = 150
+% $fbroker validate response response_copy
+false
+% $fbroker failing
+var1 NOT_INTEGER
+% parray response_copy
+response_copy(var2) = 0
+response_copy(var3) = a longer s
+response_copy(var4) = 100</pre><div style="margin-bottom:1.5ex ; padding .5ex">
+ The variable <span class="emphasis"><em>var1</em></span> could not be constrained because the input
+ value "abcdef" is fundamentally incompatible
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>formBroker_object</code></em></span> <span style="font-family:monospace; font-weight: bold;">response</span> ?<span style="font-family:monospace; font-weight: bold;">response_array_name</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The <span style="font-family:monospace"><span class="command"><strong>response</strong></span></span> method fills
+ the array whose name is passed as optional argument
+ with the last response processing. If this argument is omitted
+ the method creates an array named <span class="emphasis"><em>response</em></span>.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This method can be called also if no form response validation has taken place: it
+ simply populates the array with the default values assigned to the form variables. As
+ such is a way to create form default arrays to initialize forms created with
+ the <a class="xref" href="form_package.html" title="form">form</a> package.
+ </div><pre class="programlisting">
+set fbroker [::FormBroker create {var1 integer default 0} \
+ {var2 unsigned default 1} \
+ {var3 string} \
+ {var4 integer default 0}]
+% $fbroker response a
+% parray a
+a(var1) = 0
+a(var2) = 1
+a(var4) = 0</pre></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>formBroker_object</code></em></span> <span style="font-family:monospace; font-weight: bold;">reset</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The method resets the object to its initial defaults
+ </div></div></dd></dl></div></div><div class="refsect1"><a name="idm4341"></a><h2>Writing a custom variable validator</h2><p style="width:90%">
+ The form broker is by no means restricted to work only with its native
+ data types: you may define your own form variable types and have
+ them validated with their own variable validator.
+ </p><p style="width:90%">
+ A validator is a function accepting a dictionary as single argument and
+ must return either FB_OK, if the variable value is valid,
+ or any other used defined error code. The dictionary argument stores
+ the variable descriptor used internally by the form broker.
+ </p><p style="width:90%">
+ Suppose you're writing a form text entry that demands as input a network
+ interface MAC address.
+ A MAC address is represented by 6 hexadecimal octets separated by
+ either a <span class="quote">“<span class="quote">-</span>”</span> (Windows convention) or <span class="quote">“<span class="quote">:</span>”</span>
+ (Unix, Mac convention). The procedure <span style="font-family:monospace"><span class="command"><strong>validate_mac</strong></span></span>
+ checks the validity of the mac address and if validation is successful it
+ transforms its representation into the Unix form.
+ By setting the key <span class="quote">“<span class="quote">constrain</span>”</span>
+ in the dictionary <span class="emphasis"><em>mac_address_d</em></span> the procedure
+ is telling the form broker to copy the transformed value back
+ in the input response array
+ </p><pre class="programlisting">proc validate_mac {_mac_address_d} {
+ upvar $_mac_address_d mac_address_d
+
+ dict with mac_address_d {
+
+ set var [string trim $var]
+ if {[regexp {^[[:xdigit:]]{2}([:-][[:xdigit:]]{2}){5}$} $var]} {
+
+ set var [string tolower $var]
+
+ # we normalize the mac address to the Unix form.
+ # The dash '-' characters in the windows representation
+ # are replaced by columns ':'
+
+ set var [regsub -all -- {-} $var :]
+
+ # the 'constrain' field is bidirectional:
+ # it tells the validator to curb/change the value
+ # within bonds/forms/representation. By setting it the
+ # validator tells the FormBroker to copy the value
+ # back in the response array
+
+ set constrain 1
+ return FB_OK
+
+ } else {
+
+ return FB_WRONG_MAC
+
+ }
+
+ }
+
+}
+% set fbroker [::FormBroker create {mac mac_address validator validate_mac}]
+% ::rivet::load_response r
+% parray r
+r(mac) = 00-A1-B2-C3-D4-C5
+% $fbroker validate r
+true
+% parray r
+r(mac) = 00:a1:b2:c3:d4:c5</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="formbroker.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="formbroker.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="help.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">The Form Broker </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Resources - How to Get Help</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/form.html b/rivet/manual3.2/form.html
new file mode 100644
index 0000000..146b7e1
--- /dev/null
+++ b/rivet/manual3.2/form.html
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Form: An HTML Form Fields Generation Utility</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="session_package.html" title="Session Package"><link rel="next" href="form_package.html" title="form"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Form: An HTML Form Fields Generation Utility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="session_package.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="form_package.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="form"></a>Form: An HTML Form Fields Generation Utility</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3493"></a>Introduction</h3></div></div></div><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>form</strong></span></span> package is a utility for generating html forms. A <span style="font-family:monospace"><span class="command"><strong>form</strong></span></span>
+ object command saves the programmer from typing the cumbersome html code of input elements,
+ working out a solution for better standardization and readability of the code.
+ <span style="font-family:monospace"><span class="command"><strong>form</strong></span></span> requires that only the minimum necessary to distinguish the element is
+ typed, greatly simplyfing the development of forms.
+ Options to the command are treated as a list of parameter-value pairs that become the defaults
+ for the corresponding attributes of the form.
+ </p><p style="width:90%">
+ A <span style="font-family:monospace"><span class="command"><strong>form</strong></span></span> object has specialized menthods to generate all of the standard
+ input fields, i.e. text, password, hidden, generic button, submit or reset buttons and
+ image. <span style="font-family:monospace"><span class="command"><strong>form</strong></span></span> creates select input fields, radiobutton and checkbox
+ boolean options groups. Also new inputs introduced with HTML5 are supported: color, date,
+ datetime, datetime-local, email, file, month, number, range, search, tel, time, url, week.
+ </p><p style="width:90%">
+ Other input elements can be generated using the general purpose 'field' method.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="session_package.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="form_package.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Session Package </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> form</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/form_package.html b/rivet/manual3.2/form_package.html
new file mode 100644
index 0000000..7432b9d
--- /dev/null
+++ b/rivet/manual3.2/form_package.html
@@ -0,0 +1,213 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>form</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="form.html" title="Form: An HTML Form Fields Generation Utility"><link rel="prev" href="form.html" title="Form: An HTML Form Fields Generation Utility"><link rel="next" href="calendar_package.html" title="Calendar Package"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">form</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="form.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Form: An HTML Form Fields Generation Utility</th><td width="20%" align="right"> <a accesskey="n" href="calendar_package.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="form_package"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>form — a Tcl command object for creating HTML forms</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">form</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>form_name</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">-option1 <em class="replaceable"><code>value_1</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-option2 <em class="replaceable"><code>value_2</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">...</span>?</div></div></div><div class="refsect1"><a name="idm3517"></a><p style="width:90%">
+ creates and returns a new Tcl command named <em class="replaceable"><code>form_name</code></em>.
+ </p><div class="refsect2"><a name="idm3521"></a><h3>Options</h3><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-method</span> ?<span style="font-family:monospace; font-weight: bold;">post|get</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The http method for sending the form data back to the server.
+ Possible values are get or post
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-name</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>form_name</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ a name for the form being created: this value becomes the value of the
+ attribute 'name' in the <form> tag.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-defaults</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>default_values</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ an array of default values to be assigned to the fields of the form.
+ Every name in the array is matched with an input field, when
+ a given field gets added to the form it is initialized with the
+ value of the corresponding variable in the array.
+ This option works well in conjuction with the
+ <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span> command of Rivet when default
+ values come from another form.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-action</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>URL</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The URL the data are being sent to. If no ?<span style="font-family:monospace; font-weight: bold;">-action</span>? switch is specified
+ the data are sent to the form's URL.
+ </div></div></dd></dl></div></div></div><div class="refsect1"><a name="idm3553"></a><h2>Form Object Commands</h2><p style="width:90%">
+ Form object commands follow the usual syntax of Tcl commands with a ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>subcommand</code></em></span>? argument playing the
+ role of a switch among various functionalities of the command. Form objects also need the ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>name</code></em></span>? parameter
+ which is to become the value of the 'name' attribute in an input field. This argument is the key that has to be
+ used by the server-side script to retrieve the input field value.
+ </p><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex ">
+ form_object <span style="font-family:monospace; font-weight: bold;">subcommand</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">-option1 <em class="replaceable"><code>value1</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-option2 <em class="replaceable"><code>value2</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">...</span>?</div></div></div></dd></dl></div><p style="width:90%">
+ Options passed to a subcommand are copied into the tag as attribute="value" pairs.
+ Some subcommands (e.g. form, radiobuttons and checkboxes) treat specific options in a way
+ that fits the specific organization and function of these fields.
+ </p><p style="width:90%">
+ Exceptions to this general syntax are the <span style="font-family:monospace"><span class="command"><strong>field</strong></span></span> and <span style="font-family:monospace"><span class="command"><strong>end</strong></span></span> subcommands.
+ <span style="font-family:monospace"><span class="command"><strong>field</strong></span></span> is an abstract input field creation method and requires an additional
+ parameter specifiyng the type of field to create. Every concrete input field generation command
+ uses this subcommand internally to print the final html.
+ </p></div><div class="refsect1"><a name="idm3576"></a><h2>Subcommands</h2><div class="refsect2"><a name="idm3578"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">start</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">-method <em class="replaceable"><code>get | post</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-name <em class="replaceable"><code>form_name</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-defaults <em class="replaceable"><code>default_values</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-action <em class="replaceable"><code>URL</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Print the <form> tag with all its attributes.
+ This command must be called as first in the form generation
+ process. The following is a sample of code creating a form named 'formname' whose data will
+ be sent via the GET method. Initial form fields values will be obtained from array
+ <code class="varname">response</code>
+ </div><pre class="programlisting">
+form myform -defaults response -method get -name formname
+myform start
+myform text text_entry -size 20
+myform select option_selected -values {opt1 opt2 opt3 opt4}
+myform submit submit -value Search
+myform end</pre><div style="margin-bottom:1.5ex ; padding .5ex">
+ The code prints a form that sends a text entry content and the option value
+ associated with a radiobutton. The URL of the server script is the same that
+ created the form. Use the ?<span style="font-family:monospace; font-weight: bold;">-url</span>? option to specify a different url.
+ </div></div></dd></dl></div><div class="refsect3"><a name="idm3599"></a><div style="padding:4 ; margin-top:3 ; margin-left: 5%;">Options</div><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-method</span> ?<span style="font-family:monospace; font-weight: bold;">post|get</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The method to be used to encode the form data.
+ Possible values are get or post
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-name</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>form_name</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ a name for the form being generated: this value becomes the value of the
+ attribute 'name' in the <form> tag.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-defaults</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>default_values</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ an array of default values to be assigned to the fields of the form.
+ Every name in the array is matched with an input field, when
+ a given field gets added to the form it is initialized with the
+ value of the corresponding variable in the array.
+ This option works well in conjuction with the
+ <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span> command of Rivet when default values
+ come from another form.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-action</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>URL</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The URL the data will be sent to. If no ?<span style="font-family:monospace; font-weight: bold;">-action</span>? switch is specified
+ the data are sent to the form's URL.
+ </div></div></dd></dl></div></div></div><div class="refsect2"><a name="idm3631"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">end</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Print the </form> closing tag. This command must
+ be called last in the form generation process
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3638"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">field</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">type</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Print a field of the given ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>type</code></em></span>? and ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>name</code></em></span>?,
+ including any default key-value pairs defined for this field
+ type and optional key-value pairs included with the statement
+ </div></div></dd></dl></div><div class="refsect3"><a name="idm3652"></a><div style="padding:4 ; margin-top:3 ; margin-left: 5%;">Options</div><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-opt1</span> ?<span style="font-family:monospace; font-weight: bold;">val1</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Option description
+ </div></div></dd></dl></div></div></div><div class="refsect2"><a name="idm3661"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">radiobuttons</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">-values <em class="replaceable"><code>values</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-labels <em class="replaceable"><code>labels</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ the <span style="font-family:monospace"><span class="command"><strong>radiobutton</strong></span></span> creates a whole radiobutton group
+ with the values and labels specified in the argument list.
+ If no ?<span style="font-family:monospace; font-weight: bold;">-labels</span>? switch is
+ passed to the subcommand the values are printed as labels of
+ the radiobutton.
+ </div><div class="refsect3"><a name="idm3676"></a><div style="padding:4 ; margin-top:3 ; margin-left: 5%;">Options</div><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-values</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>values_list</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ List of values associated with the radiobuttons to be displayed
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-labels</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>labels_list</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ List of labels to be printed with every radiobutton. There must
+ be a label for every radiobutton
+ </div></div></dd></dl></div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Example:
+ </div><pre class="programlisting">
+form myform -defaults response -method get -name formname
+myform start
+myform text text_entry -size 20
+myform radiobuttons fruit -values {big medium small} \
+ -labels {Watermelon Orange Strawberry} \
+ -class myradiobclass
+myform submit submit -value Search
+myform end</pre><div style="margin-bottom:1.5ex ; padding .5ex">
+ will print the following HTML code.
+ </div><pre class="programlisting">
+<input type="radio" name="fruit" class="myradiobclass" value="big" />Watermelon
+<input type="radio" name="fruit" class="myradiobclass" value="medium" />Orange
+<input type="radio" name="fruit" class="myradiobclass" value="small" />Strawberry
+</pre><div style="margin-bottom:1.5ex ; padding .5ex">
+ if the <code class="varname">response</code> array has a variable for the name 'fruit' the corresponding
+ radiobutton field is automatically checked. The options ?<span style="font-family:monospace; font-weight: bold;">values</span>? and ?<span style="font-family:monospace; font-weight: bold;">labels</span>?
+ are used internally and don't get into the tag attributes. If a ?<span style="font-family:monospace; font-weight: bold;">labels</span>?
+ option is not given, labels are assigned using the ?<span style="font-family:monospace; font-weight: bold;">values</span>? list.
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3703"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">checkbox</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">-label <em class="replaceable"><code>label</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-value <em class="replaceable"><code>value</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The <span style="font-family:monospace; font-weight: bold;">checkbox</span> subcommand emits a checkbox
+ type input field with the name, label and value attributes set
+ according to the parameters passed to the subcommand.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Example:
+ </div><pre class="programlisting">form myform -defaults response -method get -name formname -action <form_url>
+myform start
+myform checkbox options -value opt1 -label "Option 1"
+myform checkbox options -value opt2 -label "Option 2"
+myform checkbox options -value opt3 -label "Option 3"
+myform checkbox options -value opt4 -label "Option 4"
+myform submit save_tps -value "Send Options"
+myform end
+myform destroy</pre><div style="margin-bottom:1.5ex ; padding .5ex">
+ Provided opt2 was in response array (in the list valued 'options' variable) that
+ initialized the form, the output would look like this
+ </div><pre class="programlisting"><form action="<form_url>" method="get" name="formname">
+<input type="checkbox" name="options" id="autogen_1" label="Option 1" value="sopt1" /><label for="autogen_1">Option 1</label>
+<input type="checkbox" name="options" id="autogen_2" label="Option 2" value="sopt2" /><label for="autogen_2">Option 2</label>
+<input type="checkbox" name="options" id="autogen_3" label="Option 3" value="sopt3" /><label for="autogen_3">Option 3</label>
+<input type="checkbox" name="options" id="autogen_4" label="Option 4" value="sopt4" /><label for="autogen_4">Option 4</label>
+<input type="submit" name="submit" value="Send" />
+</form></pre></div></dd></dl></div></div><div class="refsect2"><a name="idm3721"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">checkboxes</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">-labels <em class="replaceable"><code>labels_list</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-values <em class="replaceable"><code>values_list</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The <span style="font-family:monospace; font-weight: bold;">checkboxes</span> is an extended form
+ of the <span style="font-family:monospace; font-weight: bold;">checkbox</span> subcommand.
+ <span style="font-family:monospace; font-weight: bold;">checkboxes</span>
+ prints as many checkboxes as the number of elements in the
+ ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>labels_list</code></em></span>? argument
+ </div><div class="refsect3"><a name="idm3739"></a><div style="padding:4 ; margin-top:3 ; margin-left: 5%;">Options</div><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-values</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>values_list</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ List of values associated with the checkboxes to be displayed
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-left: 5%; margin-bottom:3 ; width:70%;"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">-labels</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>labels_list</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ List of labels to be printed with every checkbox. There must
+ be a label for every checkbox
+ </div></div></dd></dl></div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Example:
+ </div><pre class="programlisting">form myform -defaults response -method post -action <form_url>
+myform start
+myform checkboxes options -values {opt1 opt2 opt3 opt4} -labels {"Option 1" "Option 2" "Option 3" "Option 4"}
+myform submit save_tps -value "Send Options"
+myform end
+myform destroy</pre><div style="margin-bottom:1.5ex ; padding .5ex">
+ will print the following HTML code
+ </div><pre class="programlisting"><form action="<form_url>" method="post">
+<input type="checkbox" name="options" id="autogen_1" label="Option 1" value="opt1" /><label for="autogen_1">Option 1</label>
+<input type="checkbox" name="options" id="autogen_2" label="Option 2" value="opt2" /><label for="autogen_2">Option 2</label>
+<input type="checkbox" name="options" id="autogen_3" label="Option 3" value="opt3" /><label for="autogen_3">Option 3</label>
+<input type="checkbox" name="options" id="autogen_4" label="Option 4" value="opt4" /><label for="autogen_4">Option 4</label>
+<input type="submit" name="save_tps" value="Send Options" />
+</form></pre></div></dd></dl></div></div><div class="refsect2"><a name="idm3760"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">password</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Same as text, but the input is obfuscated so as not to reveal the text being typed
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3769"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">hidden</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ hidden input element: typicall embedded in a form in order to
+ pass status variables.
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3778"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">submit</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ emits the code for a classical HTML submit button. Example: the following
+ code
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ <pre class="programlisting">
+ form myform -defaults response -method get -name feedsearch
+ myform start
+ myform submit submit -value Search</pre>
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Would emit a form like this
+ </div><pre class="programlisting">
+ <form...>
+ <input type="submit" name="submit" value="Search" />
+ </form></pre></div></dd></dl></div></div><div class="refsect2"><a name="idm3791"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">button</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ emits the code for a button field having ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>name</code></em></span>? as name
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3802"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">reset</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Classical HTML reset button that resets the input fields
+ back to their initial values
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3811"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">image</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an image input field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3820"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">radio</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits a radiobutton input field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3829"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">color</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "color" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3838"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">date</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "date" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3847"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">datetime</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "datetime" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3856"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">datetime_local</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "datetime_local" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3865"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">email</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "email" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3874"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">file</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "file" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3883"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">month</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "month" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3892"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">number</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "number" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3901"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">range</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "range" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3910"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">search</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "search" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3919"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">tel</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "tel" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3928"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">time</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "time" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3937"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">url</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "url" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3946"></a><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "> <span style="font-family:monospace; font-weight: bold;">week</span> ?<span style="font-family:monospace; font-weight: bold;">name</span>? ?<span style="font-family:monospace; font-weight: bold;">args</span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Emits an HTML 5 "week" form field
+ </div></div></dd></dl></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="form.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="form.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="calendar_package.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Form: An HTML Form Fields Generation Utility </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Calendar Package</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/formbroker.html b/rivet/manual3.2/formbroker.html
new file mode 100644
index 0000000..370bd86
--- /dev/null
+++ b/rivet/manual3.2/formbroker.html
@@ -0,0 +1,18 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>The Form Broker</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="toglyphs.html" title="toGlyphs"><link rel="next" href="fb.html" title="FormBroker"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The Form Broker</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="toglyphs.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="fb.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="formbroker"></a>The Form Broker</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4224"></a>Introduction</h3></div></div></div><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>FormBroker</strong></span></span> package creates instances of
+ form data description objects. These objects instances have
+ a simple set of methods to validate and control data
+ as typically posted by HTML forms,
+ thus data represented as the map of form variables
+ to their values. In Rivet this association can be obtained either
+ calling <a class="xref" href="load_response.html" title="load_response">load_response</a> or
+ <a class="xref" href="var.html" title="var">var, </a> (form variables can be selectively
+ read also calling <span style="font-family:monospace"><span class="command"><strong>::rivet::var_post</strong></span></span> or
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::var_qs</strong></span></span>)
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ The <span style="font-family:monospace"><span class="command"><strong>FormBroker</strong></span></span> package is still experimental.
+ Basic functionalities and interface are not likely to change but
+ internal details and implementation could be redesigned
+ in future releases. More specifically the external validator mechanism
+ will likely need design improvements.
+ </td></tr></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="toglyphs.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="fb.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">toGlyphs </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> FormBroker</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/headers.html b/rivet/manual3.2/headers.html
new file mode 100644
index 0000000..748d8c6
--- /dev/null
+++ b/rivet/manual3.2/headers.html
@@ -0,0 +1,38 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>headers</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="exit.html" title="exit"><link rel="next" href="html.html" title="html"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="exit.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="html.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="headers"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>headers — set and parse HTTP headers.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> (<span style="font-family:monospace; font-weight: bold;">get</span> | <span style="font-family:monospace; font-weight: bold;">set</span> | <span style="font-family:monospace; font-weight: bold;">redirect</span> | <span style="font-family:monospace; font-weight: bold;">add</span> | <span style="font-family:monospace; font-weight: bold;">type</span> | <span style="font-family:monospace; font-weight: bold;">numeric</span>)</div></div></div><div class="refsect1"><a name="idm1179"></a><h2>Description</h2><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>headers</strong></span></span> command is for setting and
+ parsing HTTP headers.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> <span style="font-family:monospace; font-weight: bold;">get</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>headername</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Read arbitrary header names and values from output HTTP headers
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> <span style="font-family:monospace; font-weight: bold;">set</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>headername</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set arbitrary header names and values into output HTTP headers
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> <span style="font-family:monospace; font-weight: bold;">sent</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Test internal status of the module and returns 1
+ if the HTTP headers have been already sent
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> <span style="font-family:monospace; font-weight: bold;">redirect</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uri</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Redirect from the current page to a new
+ URI. <span class="emphasis"><em>Must</em></span> be done in the first block
+ of TCL code.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> <span style="font-family:monospace; font-weight: bold;">add</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>headername</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>value</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Add text to header
+ <code class="varname">headername</code>.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> <span style="font-family:monospace; font-weight: bold;">type</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>content-type</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This command sets the <code class="constant">Content-type</code>
+ header returned by the script, which is useful if you wish
+ to send content other than HTML with Rivet - PNG or jpeg
+ images, for example.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::headers</span> <span style="font-family:monospace; font-weight: bold;">numeric</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>response code</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set a numeric response code, such as 200, 404 or 500.
+ </div></div></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="exit.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="html.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">exit </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> html</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/help.html b/rivet/manual3.2/help.html
new file mode 100644
index 0000000..70a739b
--- /dev/null
+++ b/rivet/manual3.2/help.html
@@ -0,0 +1,48 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Resources - How to Get Help</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="fb.html" title="FormBroker"><link rel="next" href="internals.html" title="Rivet Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Resources - How to Get Help</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fb.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="internals.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="help"></a>Resources - How to Get Help</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4354"></a>Mailing Lists</h3></div></div></div><p style="width:90%">
+ The Rivet mailing list is the first place you should turn for
+ help. If you haven't found the solution to your problem in the documentation
+ or you have a question, idea, or comment about the Rivet code itself send email to
+ <code class="email"><<a class="email" href="mailto:rivet-dev@tcl.apache.org">rivet-dev@tcl.apache.org</a>></code>. To subscribe to the list, post email to
+ <code class="email"><<a class="email" href="mailto:rivet-dev-subscribe@tcl.apache.org">rivet-dev-subscribe@tcl.apache.org</a>></code>.
+ </p><p style="width:90%">
+ The mailing list archives are available at <a class="ulink" href="http://mail-archives.apache.org/mod_mbox/tcl-rivet-dev/" target="_top">http://mail-archives.apache.org/mod_mbox/tcl-rivet-dev/</a>
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4361"></a>Newsgroup</h3></div></div></div><p style="width:90%">
+ The <a class="ulink" href="news:comp.lang.tcl" target="_top">news:comp.lang.tcl</a> newsgroup is a good
+ place to ask about Tcl questions in general. Rivet developers
+ also follow the newsgroup, but it's best to ask Rivet-specific
+ questions on the Rivet list.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="websites"></a>Web Sites</h3></div></div></div><p style="width:90%">
+ There are several web sites that cover Apache and Tcl
+ extensively.
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">
+ <a class="ulink" href="http://tcl.apache.org" target="_top">http://tcl.apache.org</a> is the home for the
+ Apache Tcl project. Go there for the latest versions of
+ our software (if you aren't reading these pages off of the
+ site!).
+ </div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">
+ <a class="ulink" href="http://httpd.apache.org/docs/" target="_top">http://httpd.apache.org/docs/</a> is the first
+ place to go for questions about the Apache web server.
+ </div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">
+ <a class="ulink" href="http://www.tcl.tk" target="_top">http://www.tcl.tk</a> is the canonical site
+ for Tcl information.
+ </div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">
+ <a class="ulink" href="http://wiki.tcl.tk" target="_top">http://wiki.tcl.tk</a> is the Tcl'ers Wiki, a
+ free-form place to search for answers and ask for help.
+ </div></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4381"></a>Bug Tracking System</h3></div></div></div><p style="width:90%">
+ Apache Rivet uses the Apache Bug Tracking system at <a class="ulink" href="http://issues.apache.org/bugzilla/" target="_top">http://issues.apache.org/bugzilla/</a>. Here,
+ you can report problems, or check and see if existing issues
+ are already known and being dealt with.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4385"></a>IRC</h3></div></div></div><p style="width:90%">
+ Occasionally, someone from the Rivet team is on IRC at
+ irc.freenode.net, channel #tcl.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4388"></a>Editing Rivet Template Files</h3></div></div></div><p style="width:90%">
+ Rivet makes available code for two popular editors,
+ <span class="application">emacs</span> and
+ <span class="application">vim</span> to facilitate the editing of
+ Rivet template files. The key concept is that the editor is
+ aware of the <? and ?> tags and switches back and forth
+ between Tcl and HTML modes as the cursor moves. These files,
+ <code class="filename">two-mode-mode.el</code> and
+ <code class="filename">rvt.vim</code> are available in the
+ <code class="filename">contrib/</code> directory.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fb.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="internals.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">FormBroker </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Rivet Internals</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/html.html b/rivet/manual3.2/html.html
new file mode 100644
index 0000000..06e417f
--- /dev/null
+++ b/rivet/manual3.2/html.html
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>html</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="headers.html" title="headers"><link rel="next" href="http_accept.html" title="http_accept"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">html</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="headers.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="http_accept.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="html"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>html — construct html tagged text.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::html</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>string</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arg</code></em></span>...?</div></div></div><div class="refsect1"><a name="idm1265"></a><h2>Description</h2><p style="width:90%">
+ Print text with the added ability to pass HTML tags
+ following the string. Example:
+ </p><pre class="programlisting">::rivet::html "Test" b i</pre><p style="width:90%">
+ produces: <code class="computeroutput"><b><i>Test</i></b></code>
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="headers.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="http_accept.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">headers </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> http_accept</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/html_calendar.html b/rivet/manual3.2/html_calendar.html
new file mode 100644
index 0000000..e4117b5
--- /dev/null
+++ b/rivet/manual3.2/html_calendar.html
@@ -0,0 +1,25 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>HtmlCalendar</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="calendar_package.html" title="Calendar Package"><link rel="prev" href="xml_calendar.html" title="XmlCalendar"><link rel="next" href="entities.html" title="RivetEntities"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">HtmlCalendar</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="xml_calendar.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Calendar Package</th><td width="20%" align="right"> <a accesskey="n" href="entities.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="html_calendar"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>HtmlCalendar — Concrete class derived from XmlCalendar</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">HtmlCalendar</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>calendar_name</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">-option1 <em class="replaceable"><code>option_list</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-option2 <em class="replaceable"><code>option_list</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">...</span>?</div></div></div><div class="refsect1"><a name="idm4154"></a><p style="width:90%">
+ Concrete XmlCalendar class for printing html calendar tables. The markup of the class
+ is xhtml compliant and prints a code fragment for inclusion in a webpage.
+ The following is the class definition.
+ </p><pre class="programlisting">
+::itcl::class HtmlCalendar {
+ inherit XmlCalendar
+
+ constructor {args} {XmlCalendar::constructor $args} {
+ $this configure -container table \
+ -header thead \
+ -body tbody \
+ -banner tr \
+ -banner_month {th colspan 3 style "text-align: right;"} \
+ -banner_year {th colspan 4 style "text-align: left;"} \
+ -weekdays tr \
+ -weekday_cell th \
+ -days_row tr \
+ -days_cell td
+ }
+}</pre></div><div class="refsect1"><a name="idm4157"></a><p style="width:90%">
+ A sample output from HtmlCalendar (with some styling)
+ </p><p style="width:90%">
+ </p><div><img src="images/calendar.png"></div><p style="width:90%">
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="xml_calendar.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="calendar_package.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="entities.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">XmlCalendar </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> RivetEntities</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/http_accept.html b/rivet/manual3.2/http_accept.html
new file mode 100644
index 0000000..1176ae9
--- /dev/null
+++ b/rivet/manual3.2/http_accept.html
@@ -0,0 +1,33 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>http_accept</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="html.html" title="html"><link rel="next" href="import_keyvalue_pairs.html" title="import_keyvalue_pairs"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">http_accept</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="html.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="import_keyvalue_pairs.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="http_accept"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>http_accept — Parse HTTP Accept header lines</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::http_accept
+ ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>-zeroweight</code></em></span>?
+ ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>-default</code></em></span>?
+ ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>-list</code></em></span>?
+ http_accept_line</span> </div></div></div><div class="refsect1"><a name="idm1283"></a><h2>Description</h2><p style="width:90%">
+ Command for parsing HTTP Accept header lines that tell the
+ server about preferences and/or capabilities of the browser
+ (e.g. content language,media type, etc.). The following
+ script
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::http_accept</strong></span></span> returns a dictionary
+ value in which every content preference is matched to its
+ precedence value
+ </p><pre class="programlisting">load_headers
+set language_precedence [::rivet::http_accept $headers(Accept-Language)]
+foreach lan [dict keys $language_precedence] {
+ puts "$lan -> [dict get $language_precedence $lan]"
+}</pre><p style="width:90%">
+ when run from a browser where 5 languages were chosen
+ would output
+ </p><pre class="programlisting">en-us -> 1
+en -> 0.8
+it -> 0.6
+de-de -> 0.4
+fr-fr -> 0.2</pre><p style="width:90%">
+ The <em class="replaceable"><code>-list</code></em> switch would suppress
+ the precedence values and the accepted fields
+ are returned listed with decreasing precedence order.
+ </p><pre class="programlisting"> puts [::rivet::http_accept -list $headers(Accept)]
+text/html application/xhtml+xml application/xml */*
+ </pre><p style="width:90%">
+
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="html.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="import_keyvalue_pairs.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">html </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> import_keyvalue_pairs</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/images/acrobat.png b/rivet/manual3.2/images/acrobat.png
new file mode 100644
index 0000000..6907b4e
--- /dev/null
+++ b/rivet/manual3.2/images/acrobat.png
Binary files differ
diff --git a/rivet/manual3.2/images/blank.png b/rivet/manual3.2/images/blank.png
new file mode 100644
index 0000000..764bf4f
--- /dev/null
+++ b/rivet/manual3.2/images/blank.png
Binary files differ
diff --git a/rivet/manual3.2/images/calendar.png b/rivet/manual3.2/images/calendar.png
new file mode 100644
index 0000000..54f9f33
--- /dev/null
+++ b/rivet/manual3.2/images/calendar.png
Binary files differ
diff --git a/rivet/manual3.2/images/caution.png b/rivet/manual3.2/images/caution.png
new file mode 100644
index 0000000..5b7809c
--- /dev/null
+++ b/rivet/manual3.2/images/caution.png
Binary files differ
diff --git a/rivet/manual3.2/images/color-table.png b/rivet/manual3.2/images/color-table.png
new file mode 100644
index 0000000..f9eaf3d
--- /dev/null
+++ b/rivet/manual3.2/images/color-table.png
Binary files differ
diff --git a/rivet/manual3.2/images/disk.png b/rivet/manual3.2/images/disk.png
new file mode 100644
index 0000000..772566e
--- /dev/null
+++ b/rivet/manual3.2/images/disk.png
Binary files differ
diff --git a/rivet/manual3.2/images/draft.png b/rivet/manual3.2/images/draft.png
new file mode 100644
index 0000000..0084708
--- /dev/null
+++ b/rivet/manual3.2/images/draft.png
Binary files differ
diff --git a/rivet/manual3.2/images/home.png b/rivet/manual3.2/images/home.png
new file mode 100644
index 0000000..eb904c8
--- /dev/null
+++ b/rivet/manual3.2/images/home.png
Binary files differ
diff --git a/rivet/manual3.2/images/important.png b/rivet/manual3.2/images/important.png
new file mode 100644
index 0000000..12c90f6
--- /dev/null
+++ b/rivet/manual3.2/images/important.png
Binary files differ
diff --git a/rivet/manual3.2/images/next.png b/rivet/manual3.2/images/next.png
new file mode 100644
index 0000000..0f4d18a
--- /dev/null
+++ b/rivet/manual3.2/images/next.png
Binary files differ
diff --git a/rivet/manual3.2/images/note.png b/rivet/manual3.2/images/note.png
new file mode 100644
index 0000000..d0c3c64
--- /dev/null
+++ b/rivet/manual3.2/images/note.png
Binary files differ
diff --git a/rivet/manual3.2/images/prev.png b/rivet/manual3.2/images/prev.png
new file mode 100644
index 0000000..dd3b6a2
--- /dev/null
+++ b/rivet/manual3.2/images/prev.png
Binary files differ
diff --git a/rivet/manual3.2/images/qbullet-note.png b/rivet/manual3.2/images/qbullet-note.png
new file mode 100644
index 0000000..88c30c0
--- /dev/null
+++ b/rivet/manual3.2/images/qbullet-note.png
Binary files differ
diff --git a/rivet/manual3.2/images/remote.png b/rivet/manual3.2/images/remote.png
new file mode 100644
index 0000000..d76b0f1
--- /dev/null
+++ b/rivet/manual3.2/images/remote.png
Binary files differ
diff --git a/rivet/manual3.2/images/scrollup.png b/rivet/manual3.2/images/scrollup.png
new file mode 100644
index 0000000..336232a
--- /dev/null
+++ b/rivet/manual3.2/images/scrollup.png
Binary files differ
diff --git a/rivet/manual3.2/images/table.png b/rivet/manual3.2/images/table.png
new file mode 100644
index 0000000..6ec425e
--- /dev/null
+++ b/rivet/manual3.2/images/table.png
Binary files differ
diff --git a/rivet/manual3.2/images/tip.png b/rivet/manual3.2/images/tip.png
new file mode 100644
index 0000000..5c4aab3
--- /dev/null
+++ b/rivet/manual3.2/images/tip.png
Binary files differ
diff --git a/rivet/manual3.2/images/toc-blank.png b/rivet/manual3.2/images/toc-blank.png
new file mode 100644
index 0000000..6ffad17
--- /dev/null
+++ b/rivet/manual3.2/images/toc-blank.png
Binary files differ
diff --git a/rivet/manual3.2/images/toc-minus.png b/rivet/manual3.2/images/toc-minus.png
new file mode 100644
index 0000000..abbb020
--- /dev/null
+++ b/rivet/manual3.2/images/toc-minus.png
Binary files differ
diff --git a/rivet/manual3.2/images/toc-plus.png b/rivet/manual3.2/images/toc-plus.png
new file mode 100644
index 0000000..941312c
--- /dev/null
+++ b/rivet/manual3.2/images/toc-plus.png
Binary files differ
diff --git a/rivet/manual3.2/images/up.png b/rivet/manual3.2/images/up.png
new file mode 100644
index 0000000..f9f8312
--- /dev/null
+++ b/rivet/manual3.2/images/up.png
Binary files differ
diff --git a/rivet/manual3.2/images/warning.png b/rivet/manual3.2/images/warning.png
new file mode 100644
index 0000000..1c33db8
--- /dev/null
+++ b/rivet/manual3.2/images/warning.png
Binary files differ
diff --git a/rivet/manual3.2/images/word.png b/rivet/manual3.2/images/word.png
new file mode 100644
index 0000000..4189771
--- /dev/null
+++ b/rivet/manual3.2/images/word.png
Binary files differ
diff --git a/rivet/manual3.2/import_keyvalue_pairs.html b/rivet/manual3.2/import_keyvalue_pairs.html
new file mode 100644
index 0000000..425f041
--- /dev/null
+++ b/rivet/manual3.2/import_keyvalue_pairs.html
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>import_keyvalue_pairs</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="http_accept.html" title="http_accept"><link rel="next" href="include.html" title="include"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">import_keyvalue_pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="http_accept.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="include.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="import_keyvalue_pairs"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>import_keyvalue_pairs — Import an argument list into the named array</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::import_keyvalue_pairs</span> ?<span style="font-family:monospace; font-weight: bold;">arrayName</span>? ?<span style="font-family:monospace; font-weight: bold;">argsList</span>?</div></div></div><div class="refsect1"><a name="idm1304"></a><h2>Description</h2><p style="width:90%">
+ key-value pairs, like "-foo bar" are stored in the array ?<span style="font-family:monospace; font-weight: bold;">arrayName</span>?.
+ In that case, the value "bar" would be stored in the element "foo"
+ </p><p style="width:90%">
+ If "--" appears or a key doesn't begin with "-", the rest of the arg
+ list is stored in the special args element of the array.
+ </p><p style="width:90%">
+ Example:
+ </p><pre class="programlisting">::rivet::import_keyvalue_pairs keyvalue_map [list -a1 v1 -a2 v2 -a3 v3 -- 1 2 3 4 5]
+parray keyvalue_map
+
+keyvalue_map(a1) = v1
+keyvalue_map(a2) = v2
+keyvalue_map(a3) = v3
+keyvalue_map(args) = 1 2 3 4 5</pre><p style="width:90%">
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="http_accept.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="include.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">http_accept </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> include</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/include.html b/rivet/manual3.2/include.html
new file mode 100644
index 0000000..5e51721
--- /dev/null
+++ b/rivet/manual3.2/include.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>include</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="import_keyvalue_pairs.html" title="import_keyvalue_pairs"><link rel="next" href="inspect.html" title="inspect"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">include</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="import_keyvalue_pairs.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="inspect.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="include"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>include — includes a file into the output stream without modification.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::include</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename_name</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1320"></a><h2>Description</h2><p style="width:90%">
+ Include a file without parsing it for processing tags <?
+ and ?>. This is the best way to include an HTML file or
+ any other static content.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="import_keyvalue_pairs.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="inspect.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">import_keyvalue_pairs </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> inspect</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/index.html b/rivet/manual3.2/index.html
new file mode 100644
index 0000000..89a74d3
--- /dev/null
+++ b/rivet/manual3.2/index.html
@@ -0,0 +1,106 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.2</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="next" href="installation.html" title="Apache Rivet 3.2 Installation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Rivet 3.2</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="installation.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idm1"></a>Apache Rivet 3.2</h2></div><div><div class="author"><h3 class="author"><span class="firstname">The Rivet Team</span></h3><div class="affiliation"><span class="orgname">The Apache Software Foundation<br></span><div class="address"><p><br>
+ <code class="email"><<a class="email" href="mailto:rivet-dev@tcl.apache.org">rivet-dev@tcl.apache.org</a>></code><br>
+ </p></div></div></div></div><div><p class="copyright">Copyright © 2002-2020 Apache Software Foundation</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="index.html#introduction">Introduction to Apache Rivet version 3.2</a></span></dt><dt><span class="section"><a href="installation.html">Apache Rivet 3.2 Installation</a></span></dt><dt><span class="section"><a href="cmake.html">Building Rivet 3.2 with CMake</a></span></dt><dd><dl><dt><span class="section"><a href="cmake.html#idm185">CMake build procedure and examples</a></span></dt></dl></dd><dt><span class="section"><a href="directives.html">Apache Rivet 3.2 Configuration</a></span></dt><dd><dl><dt><span class="section"><a href="directives.html#idm200">Apache Rivet Configuration lines</a></span></dt><dt><span class="section"><a href="directives.html#idm212">Configuration Directives</a></span></dt></dl></dd><dt><span class="section"><a href="processing.html">Apache Rivet HTTP Request Processing</a></span></dt><dd><dl><dt><span class="section"><a href="processing.html#idm602">Tcl Scripts Processing</a></span></dt><dt><span class="section"><a href="processing.html#idm612">Example: basic OO Rivet Application</a></span></dt></dl></dd><dt><span class="section"><a href="request.html">Apache Child Processes Lifecycle and Request Processing</a></span></dt><dt><span class="section"><a href="commands.html">Rivet Tcl Commands and Variables</a></span></dt><dd><dl><dt><span class="section"><a href="commands.html#idm755"></a></span></dt><dt><span class="refentrytitle"><a href="shorthand.html"><?= ... ?></a></span><span class="refpurpose"> —
+ Shorthand construct for single strings output
+ </span></dt><dt><span class="refentrytitle"><a href="abort_code.html">abort_code</a></span><span class="refpurpose"> —
+ Returns the code passed to <span style="font-family:monospace"><span class="command"><strong>abort_page</strong></span></span>
+ earlier during the request processing
+ </span></dt><dt><span class="refentrytitle"><a href="abort_page.html">abort_page</a></span><span class="refpurpose"> —
+ Stops outputting data to web page, similar in
+ purpose to PHP's <span style="font-family:monospace"><span class="command"><strong>die</strong></span></span> command.
+ </span></dt><dt><span class="refentrytitle"><a href="apache_log_error.html">apache_log_error</a></span><span class="refpurpose"> — log messages to the Apache error log</span></dt><dt><span class="refentrytitle"><a href="apache_table.html">apache_table</a></span><span class="refpurpose"> — access and manipulate Apache tables in the request structure.</span></dt><dt><span class="refentrytitle"><a href="catch.html">catch</a></span><span class="refpurpose"> — wraps core command <span style="font-family:monospace"><span class="command"><strong>catch</strong></span></span> </span></dt><dt><span class="refentrytitle"><a href="clock_to_rfc.html">clock_to_rfc850_gmt</a></span><span class="refpurpose"> — create a rfc850 time from [clock seconds].</span></dt><dt><span class="refentrytitle"><a href="cookie.html">cookie</a></span><span class="refpurpose"> — get, set and delete cookies.</span></dt><dt><span class="refentrytitle"><a href="debug.html">debug</a></span><span class="refpurpose"> —
+ A command to print strings, arrays
+ and the values of variables as specified by the arguments.
+ </span></dt><dt><span class="refentrytitle"><a href="env.html">env</a></span><span class="refpurpose"> —
+ Loads a single "environmental variable" into a Tcl variable.
+ </span></dt><dt><span class="refentrytitle"><a href="escape_sgml_chars.html">escape_sgml_chars</a></span><span class="refpurpose"> — escape special SGML characters in a string.</span></dt><dt><span class="refentrytitle"><a href="escape_shell_command.html">escape_shell_command</a></span><span class="refpurpose"> — escape shell metacharacters in a string.</span></dt><dt><span class="refentrytitle"><a href="escape_string.html">escape_string</a></span><span class="refpurpose"> — convert a string into escaped characters.</span></dt><dt><span class="refentrytitle"><a href="exit.html">exit</a></span><span class="refpurpose"> — terminate execution and child process</span></dt><dt><span class="refentrytitle"><a href="headers.html">headers</a></span><span class="refpurpose"> — set and parse HTTP headers.</span></dt><dt><span class="refentrytitle"><a href="html.html">html</a></span><span class="refpurpose"> — construct html tagged text.</span></dt><dt><span class="refentrytitle"><a href="http_accept.html">http_accept</a></span><span class="refpurpose"> — Parse HTTP Accept header lines</span></dt><dt><span class="refentrytitle"><a href="import_keyvalue_pairs.html">import_keyvalue_pairs</a></span><span class="refpurpose"> — Import an argument list into the named array</span></dt><dt><span class="refentrytitle"><a href="include.html">include</a></span><span class="refpurpose"> — includes a file into the output stream without modification.</span></dt><dt><span class="refentrytitle"><a href="inspect.html">inspect</a></span><span class="refpurpose"> — Introspection command for Rivet configuration</span></dt><dt><span class="refentrytitle"><a href="lassign_array.html">lassign_array</a></span><span class="refpurpose"> — Assign a list of values to array variables</span></dt><dt><span class="refentrytitle"><a href="lempty.html">lempty</a></span><span class="refpurpose"> —
+ Returns 1 if <list> is empty or 0 if it has any elements.
+ This command emulates the TclX lempty command.
+ </span></dt><dt><span class="refentrytitle"><a href="lmatch.html">lmatch</a></span><span class="refpurpose"> —
+ Look for elements in <list> that match <pattern>
+ </span></dt><dt><span class="refentrytitle"><a href="load_cookies.html">load_cookies</a></span><span class="refpurpose"> — get any cookie variables sent by the client.</span></dt><dt><span class="refentrytitle"><a href="load_env.html">load_env</a></span><span class="refpurpose"> — get the request's environment variables.</span></dt><dt><span class="refentrytitle"><a href="load_headers.html">load_headers</a></span><span class="refpurpose"> — get client request's headers.</span></dt><dt><span class="refentrytitle"><a href="load_response.html">load_response</a></span><span class="refpurpose"> — load form variables into an array.</span></dt><dt><span class="refentrytitle"><a href="lremove.html">lremove</a></span><span class="refpurpose"> — remove from a list elements matching one or more patterns</span></dt><dt><span class="refentrytitle"><a href="makeurl.html">makeurl</a></span><span class="refpurpose"> — construct url's based on hostname, port.</span></dt><dt><span class="refentrytitle"><a href="no_body.html">no_body</a></span><span class="refpurpose"> — Prevents Rivet from sending any content.</span></dt><dt><span class="refentrytitle"><a href="parray.html">parray</a></span><span class="refpurpose"> — Tcl's <span style="font-family:monospace"><span class="command"><strong>parray</strong></span></span> with html formatting.</span></dt><dt><span class="refentrytitle"><a href="parse.html">parse</a></span><span class="refpurpose"> — parses a Rivet template file.</span></dt><dt><span class="refentrytitle"><a href="raw_post.html">raw_post</a></span><span class="refpurpose"> — get the unmodified body of a POST request sent by the client.</span></dt><dt><span class="refentrytitle"><a href="redirect.html">redirect</a></span><span class="refpurpose"> — Interrupt processing and divert to a new URL</span></dt><dt><span class="refentrytitle"><a href="read_file.html">read_file</a></span><span class="refpurpose"> —
+ Read the entire contents of a file and return it as a string.
+ </span></dt><dt><span class="refentrytitle"><a href="thread_id.html">thread_id</a></span><span class="refpurpose"> — Returns the Tcl interpreter current thread id</span></dt><dt><span class="refentrytitle"><a href="try.html">try</a></span><span class="refpurpose"> —
+ Catch error and exception conditions
+ </span></dt><dt><span class="refentrytitle"><a href="unescape_string.html">unescape_string</a></span><span class="refpurpose"> — unescape escaped characters in a string.</span></dt><dt><span class="refentrytitle"><a href="upload.html">upload</a></span><span class="refpurpose"> — handle a file uploaded by a client.</span></dt><dt><span class="refentrytitle"><a href="url_script.html">url_script</a></span><span class="refpurpose"> — get the code of the URL referenced Tcl script or Rivet template</span></dt><dt><span class="refentrytitle"><a href="var.html">var</a></span><span class="refpurpose"> — get the value of a form variable.</span></dt><dt><span class="refentrytitle"><a href="wrap.html">wrap</a></span><span class="refpurpose"> —
+ Split a string on newlines.
+ </span></dt><dt><span class="refentrytitle"><a href="wrapline.html">wrapline</a></span><span class="refpurpose"> —
+ Split the line into multiple lines by splitting on space characters
+ </span></dt><dt><span class="refentrytitle"><a href="xml.html">xml</a></span><span class="refpurpose"> —
+ XML Fragments creation
+ </span></dt></dl></dd><dt><span class="section"><a href="examples.html">Examples and Usage</a></span></dt><dt><span class="section"><a href="tcl_packages.html">Rivet Tcl Packages</a></span></dt><dt><span class="section"><a href="dio.html">DIO - Database Interface Objects</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="dio_package.html">DIO</a></span><span class="refpurpose"> — Database Interface Objects</span></dt></dl></dd><dt><span class="section"><a href="diodisplay.html">DIODisplay - Database Interface Objects Display Class</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="diodisplay_package.html">DIODisplay</a></span><span class="refpurpose"> — Database Interface Objects Display Class</span></dt></dl></dd><dt><span class="section"><a href="session_package.html">Session Package</a></span></dt><dd><dl><dt><span class="section"><a href="session_package.html#idm3276">Introduction</a></span></dt><dt><span class="section"><a href="session_package.html#requirements">Requirements</a></span></dt><dt><span class="section"><a href="session_package.html#idm3285">Preparing To Use It</a></span></dt><dt><span class="section"><a href="session_package.html#idm3295">Example Usage</a></span></dt><dt><span class="section"><a href="session_package.html#idm3307">Using Sessions From Your Code</a></span></dt><dt><span class="section"><a href="session_package.html#idm3353">Session Configuration Options</a></span></dt><dt><span class="section"><a href="session_package.html#idm3431">Session Methods</a></span></dt><dt><span class="section"><a href="session_package.html#idm3487">Getting Additional Randomness From The Entropy File</a></span></dt></dl></dd><dt><span class="section"><a href="form.html">Form: An HTML Form Fields Generation Utility</a></span></dt><dd><dl><dt><span class="section"><a href="form.html#idm3493">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="form_package.html">form</a></span><span class="refpurpose"> — a Tcl command object for creating HTML forms</span></dt></dl></dd><dt><span class="section"><a href="calendar_package.html">Calendar Package</a></span></dt><dd><dl><dt><span class="section"><a href="calendar_package.html#idm3957">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="calendar.html">Calendar</a></span><span class="refpurpose"> — Utility class the builds and prints a calendar table</span></dt><dt><span class="refentrytitle"><a href="xml_calendar.html">XmlCalendar</a></span><span class="refpurpose"> — Prints XML formatted calendar tables</span></dt><dt><span class="refentrytitle"><a href="html_calendar.html">HtmlCalendar</a></span><span class="refpurpose"> — Concrete class derived from XmlCalendar</span></dt></dl></dd><dt><span class="section"><a href="entities.html">RivetEntities</a></span></dt><dd><dl><dt><span class="section"><a href="entities.html#idm4163">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="encode.html">encode</a></span><span class="refpurpose"> —
+ encode a string replacing every occurrence of characters for
+ which an SGML entity exists
+ </span></dt><dt><span class="refentrytitle"><a href="decode.html">decode</a></span><span class="refpurpose"> —
+ decode an SGML encoded string replacing every entity with the
+ corresponding character
+ </span></dt></dl></dd><dt><span class="section"><a href="asciiglyphs.html">AsciiGlyphs</a></span></dt><dd><dl><dt><span class="section"><a href="asciiglyphs.html#idm4203">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="toglyphs.html">toGlyphs</a></span><span class="refpurpose"> —
+ print large ASCII glyphs
+ </span></dt><dt><span class="section"><a href="asciiglyphs.html#idm4219">Example</a></span></dt></dl></dd><dt><span class="section"><a href="formbroker.html">The Form Broker</a></span></dt><dd><dl><dt><span class="section"><a href="formbroker.html#idm4224">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="fb.html">FormBroker</a></span><span class="refpurpose"> —
+ Form broker object creator
+ </span></dt></dl></dd><dt><span class="section"><a href="help.html">Resources - How to Get Help</a></span></dt><dd><dl><dt><span class="section"><a href="help.html#idm4354">Mailing Lists</a></span></dt><dt><span class="section"><a href="help.html#idm4361">Newsgroup</a></span></dt><dt><span class="section"><a href="help.html#websites">Web Sites</a></span></dt><dt><span class="section"><a href="help.html#idm4381">Bug Tracking System</a></span></dt><dt><span class="section"><a href="help.html#idm4385">IRC</a></span></dt><dt><span class="section"><a href="help.html#idm4388">Editing Rivet Template Files</a></span></dt></dl></dd><dt><span class="section"><a href="internals.html">Rivet Internals</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#idm4400">Rivet approach to Apache Multiprocessing Models</a></span></dt><dt><span class="section"><a href="internals.html#idm4413">mod_rivet MPM Bridge callbacks</a></span></dt><dt><span class="section"><a href="internals.html#idm4447">Server Initialization and MPM Bridge</a></span></dt><dt><span class="section"><a href="internals.html#idm4450">RivetChan</a></span></dt><dt><span class="section"><a href="internals.html#idm4455">The <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> Command</a></span></dt><dt><span class="section"><a href="internals.html#idm4463">Page Parsing, Execution and Caching</a></span></dt><dt><span class="section"><a href="internals.html#idm4471">Extending Rivet by developing C code procedures</a></span></dt><dt><span class="section"><a href="internals.html#idm4495">Debugging Rivet and Apache</a></span></dt></dl></dd><dt><span class="section"><a href="lazybridge.html">Example: the <span class="quote">“<span class="quote">Lazy</span>”</span> bridge</a></span></dt><dd><dl><dt><span class="section"><a href="lazybridge.html#idm4525">The rationale of threaded bridges</a></span></dt><dt><span class="section"><a href="lazybridge.html#idm4529">Lazy bridge data structures</a></span></dt><dt><span class="section"><a href="lazybridge.html#idm4545">Handling Tcl's exit core command</a></span></dt><dt><span class="section"><a href="lazybridge.html#idm4564">HTTP request processing with the lazy bridge</a></span></dt></dl></dd></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>1. <a href="examples.html#hello_world">Hello World</a></dt><dt>2. <a href="examples.html#idm1967">Generate a Colorful Table</a></dt><dt>3. <a href="examples.html#variable_access">Variable Access</a></dt><dt>4. <a href="examples.html#file_upload">File Upload</a></dt><dt>5. <a href="examples.html#file_download">File Download</a></dt><dt>6. <a href="examples.html#ajax_xml_messaging">XML Messages and Ajax</a></dt><dt>7. <a href="examples.html#calendar_example">A Calendar Utility</a></dt></dl></div><p style="width:90%">
+ This manual is released as part of Apache/Rivet 3.2.0 (Tuesday 2020-11-03 00:35:08+01:00).
+ </p><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="introduction"></a>Introduction to Apache Rivet version 3.2</h2></div></div></div><p style="width:90%">
+ Apache Rivet is a system for creating dynamic web content by
+ integrating the
+ <a class="ulink" href="http://www.tcl.tk/" target="_top">Tcl programming language</a> within the
+ <a class="ulink" href="http://httpd.apache.org" target="_top">Apache Web Server</a>.
+ It is designed to be fast, powerful and extensible, consume
+ few system resources, be easy to learn, and to provide the user with a
+ platform that can also be used for other programming tasks
+ outside the web (GUI's, system administration tasks, text
+ processing, database manipulation, XML, and so on).
+ </p><p style="width:90%">
+ In this manual, we aim to help get you started, and then
+ writing productive code as quickly as possible, as well as
+ giving you ideas on how to best take advantage of Rivet's
+ architecture to create different styles of web site.
+ </p><p style="width:90%">
+ This documentation is focused on the current version of Rivet, but
+ still a work in progress, and, like everything
+ else about Apache Rivet, it is Free Software. If you see
+ something that needs improving, and have ideas or suggestions,
+ don't hesitate to let us know. If you want to contribute
+ directly, better yet!
+ </p><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm21"></a>Apache MPM and Rivet Bridge Modules</h3></div></div></div><p style="width:90%">
+ Rivet 3.2 is a successor to Rivet 3.0, a major rewriting of mod_rivet,
+ the Apache HTTP Websever module at the core of Rivet. Unlike in 2.x of
+ mod_rivet, which only supported the
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork MPM</a>
+ (<a class="ulink" href="https://httpd.apache.org/docs/2.4/mpm.html" target="_top">Multiprocessing Module</a>),
+ starting with 3.0 we attained full support of different MPM for
+ the Apache framework.
+ </p><p style="width:90%">
+ Threaded <a class="ulink" href="https://httpd.apache.org/docs/2.4/mpm.html" target="_top">MPM</a>
+ integration was achieved by making mod_rivet multithreaded and
+ modular itself, introducing the MPM-module bridge concept.
+ We developed a set of loadable modules which are supposed not only to overcome
+ the issues related to threading but also to offer the best possible MPM mod_rivet
+ integration.
+ As a side effect of this modular design mod_rivet is not only able to integrate
+ with its environment but also to work as a framework for writing more MPM bridges
+ designed along different multi-threading schemes and workload management models.
+ See the <a class="link" href="internals.html" title="Rivet Internals">internals</a> section of this manual for
+ further reading. MPM bridges are loaded accordingly to a heuristics of rules based
+ on the Apache introspection calls but they can be determined in the configuration.
+ Only a bridge can be loaded at a time.
+ </p></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm29"></a>Request Processing</h3></div></div></div><p style="width:90%">
+ Request processing was performed in mod_rivet version 2.x by chaining together 3 scripts
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">BeforeScript, if defined in the configuration</li><li class="listitem">The URI referenced Tcl script or rvt template dermined with
+ respect to the <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/core.html#documentroot" target="_top">DocumentRoot</a> and following
+ other resource determination methods such the ones offered by
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/mod_alias.html" target="_top">mod_alias</a> and by
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html" target="_top">mod_rewrite</a>.
+ </li><li class="listitem">AfterScript, if defined in the configuration</li></ul></div><p style="width:90%">
+ Errors and exceptions (raised by the <a class="link" href="abort_page.html" title="abort_page">::rivet::abort_page</a> command)
+ are handled by the ErrorScript and AbortScript (ErrorScript has a default implementation
+ if undefined in the configuration)
+ </p><p style="width:90%">
+ Rivet 3.2 implements a new <a class="link" href="request.html" title="Apache Child Processes Lifecycle and Request Processing">request processing scheme</a>
+ entirely based on Tcl. By default rivet 3.2 provides compatiblity with the
+ version 2.x scheme to handle a request but this can be entirely overridden by
+ the developer replacing the central request handling procedure. See the
+ <a class="link" href="request.html" title="Apache Child Processes Lifecycle and Request Processing">request processing</a> page.
+ </p></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm44"></a>Acknowledgements</h3></div></div></div><p style="width:90%">This version of Rivet received substantial contributions from George Petasis who solved
+ several problems with the threaded code, improved the code in several ways and made the CMake
+ based build scripts</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="installation.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Apache Rivet 3.2 Installation</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/inspect.html b/rivet/manual3.2/inspect.html
new file mode 100644
index 0000000..f3383f2
--- /dev/null
+++ b/rivet/manual3.2/inspect.html
@@ -0,0 +1,47 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>inspect</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="include.html" title="include"><link rel="next" href="lassign_array.html" title="lassign_array"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">inspect</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="include.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="lassign_array.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="inspect"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>inspect — Introspection command for Rivet configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::inspect</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>configuration_section</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>configuration_parameter</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1334"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span> provides introspection into the running
+ configuration of Rivet. Rivet's debug command uses it in order to gain insight
+ into the configuration, but it can be used in any script.
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span> can be called in 5 different forms
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: square; "><li class="listitem" style="list-style-type: square">
+ With no argument the command returns a dictionary with 3
+ keys: server, dir, user. Each key is associated to a subdictionary
+ carrying the configuration as set for that request. In this form the command is
+ meant to support compatibility with previous versions of mod_rivet
+ where three global arrays were created to be internally used by command
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::debug</strong></span></span>.
+ </li><li class="listitem" style="list-style-type: square">
+ With the ?<span style="font-family:monospace; font-weight: bold;">-all</span>? argument a dictionary
+ carrying the whole configuration for that specific request is returned.
+ If a configuration parameter is not set it's given the
+ string <span class="emphasis"><em>undefined</em></span>. Returned configuration paramenters
+ are<pre class="programlisting"> "ServerInitScript",
+ "GlobalInitScript",
+ "ChildInitScript",
+ "ChildExitScript",
+ "BeforeScript",
+ "AfterScript",
+ "AfterEveryScript",
+ "AbortScript",
+ "ErrorScript",
+ "UploadMaxSize",
+ "UploadDirectory",
+ "UploadFilesToVar",
+ "SeparateVirtualInterps",
+ "HonorHeaderOnlyRequests"</pre></li><li class="listitem" style="list-style-type: square">
+ With one of the Rivet configuration directives listed above as
+ single argument <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span> returns the
+ current value in the configuration record.
+ </li><li class="listitem" style="list-style-type: square">
+ Passing the argument "script" <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span>
+ returns a path to the current script in a similar way
+ core command <span style="font-family:monospace"><span class="command"><strong>[info script]</strong></span></span> does. The basic
+ difference is that the core command returns a relative path with
+ respect to the current working directory, whereas mod_rivet's command
+ returns the full path.
+ </li><li class="listitem" style="list-style-type: square">
+ Passing the argument "server" <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span>
+ returns a dictionary with these fields taken from the server record
+ descriptor
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">hostname: The server hostname </li><li class="listitem">admin: The admin's contact information</li><li class="listitem">errorlog: The name of the error log</li><li class="listitem">server_path: Pathname for ServerPath</li></ul></div></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="include.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="lassign_array.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">include </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> lassign_array</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/installation.html b/rivet/manual3.2/installation.html
new file mode 100644
index 0000000..2cc3053
--- /dev/null
+++ b/rivet/manual3.2/installation.html
@@ -0,0 +1,169 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.2 Installation</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="index.html" title="Apache Rivet 3.2"><link rel="next" href="cmake.html" title="Building Rivet 3.2 with CMake"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Rivet 3.2 Installation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="cmake.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="installation"></a>Apache Rivet 3.2 Installation</h2></div></div></div><div class="procedure"><p style="width:90%">
+ Rivet 3.2 runs with the Apache 2.4.x HTTP web server.
+ It is known to build and run on various Linux distributions
+ (Debian & Ubuntu, Redhat, SuSE and CentOS), FreeBSD and OpenBSD. For some
+ of these Unix-like operative systems
+ <a class="ulink" href="http://tcl.apache.org/rivet/html/download.html" target="_top">binary packages</a>
+ are already available for download.
+ </p><p style="width:90%">
+ Rivet 2.x was restricted to work with the
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork</a> MPM
+ of the Apache HTTP webserver. MPM modules are fundamental components of the
+ webserver architecture. They provide multiple implementations of multiprocessing
+ in order to better suit specific OS features and scalability requirements.
+ The prefork MPM exploited the UNIX traditional approach to multiprocess server
+ applications based on the
+ <a class="ulink" href="https://en.wikipedia.org/wiki/Fork_(system_call)" target="_top">fork</a>
+ system call. This model has several limitations but also some advantages. The
+ solution we adopted tries to attain the best from any MPM as much as possible
+ and Rivet 3.2 is now able to run with the
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/worker.html" target="_top">worker</a>
+ and the
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/event.html" target="_top">event</a>
+ MPMs. Rivet 3.2 has not been ported to OS of the Windows family
+ but we feel that the current design would fit just fine with the Windows specific
+ MPMs such as
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/mpm_winnt.html" target="_top">winnt</a>.
+ </p><p style="width:90%">
+ If you need to build Apache Rivet yourself this is the procedure to follow
+ </p><ol class="procedure" type="1"><li class="step"><p class="title"><b>Building Tcl: requirements</b></p><p style="width:90%">
+ Installing Rivet is about endowing the Apache HTTP webserver with the ability
+ of running scripts written with the Tcl programming language.
+ Therefore the
+ <a class="ulink" href="http://www.tcl.tk/" target="_top">Tcl</a> language with its runtime,
+ development libraries and shell (≥8.5.10 required, ≥8.6.0 recommended)
+ have to be installed. Building Rivet you will
+ have to tell the scripts where the Tcl libraries are located via the
+ --with-tcl option of the <span style="font-family:monospace"><span class="command"><strong>configure</strong></span></span> script
+ (see below).
+ </p><p style="width:90%">
+ Several Tcl packages shipped with rivet need also the
+ <a class="ulink" href="http://core.tcl.tk/itcl/" target="_top">Itcl</a>
+ OOP extension of Tcl. If you need to run any of the
+ Session or DIO
+ packages you need to install this language extension but you don't need it
+ to build mod_rivet
+ </p><p style="width:90%">
+ The
+ <a class="ulink" href="http://httpd.apache.org" target="_top">Apache HTTP Webserver</a> development
+ files and libraries are required along with the
+ <a class="ulink" href="http://apr.apache.org/" target="_top">Apache Portable Runtime</a>
+ and the
+ <a class="ulink" href="http://httpd.apache.org/apreq/" target="_top">libapreq</a> library.
+ </p></li><li class="step"><p class="title"><b>Building Rivet</b></p></li><li class="step"><p class="title"><b>Getting and Installing the Apache Sources</b></p><p style="width:90%">
+ You can build Rivet either statically (compiled into the Apache web
+ server) or dynamically (as a loadable shared library).
+ We recommend that you build Rivet as a shared library, for maximum flexibility.
+ We will tell Rivet where it the Apache development files and libraries are located
+ via the --with-apxs option to <span style="font-family:monospace"><span class="command"><strong>configure</strong></span></span> (see below).
+ </p><p style="width:90%">
+ Most modern Unix OS (Linux and FreeBSD systems included) come with their
+ own packages of the Apache Web Server executables, runtime libraries and development files
+ and libraries. Check the documentation of the package manager of your OS
+ to find out how to install this software
+ </p></li><li class="step"><p class="title"><b>Uncompress Sources</b></p><p style="width:90%">
+ Download the sources at <a class="ulink" href="http://tcl.apache.org/rivet/html/download.html" target="_top">http://tcl.apache.org/rivet/html/download.html</a>.
+ </p><p style="width:90%">
+ We will assume that you have Apache installed at this point.
+ You must uncompress the Rivet sources in the directory where you
+ wish to compile them.
+ </p><pre class="programlisting">gunzip rivet-3.2.0.tar.gz
+tar -xvf rivet-3.2.0.tar.gz</pre><p style="width:90%">
+ </p></li><li class="step"><p class="title"><b>Building Rivet</b></p><ol type="a" class="substeps"><li class="step"><p style="width:90%">
+ Rivet uses the standard <span style="font-family:monospace"><span class="command"><strong>./configure ; make ; make install</strong></span></span>
+ sequence which installs to their target directories the Apache module, the binary libraries and the
+ Tcl code
+ </p><p style="width:90%">
+ There are several rivet specific options to configure that might be useful (or needed):
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">--with-apache</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Defines the configure internal variable 'apache_base'. This variable
+ points to the root of the Apache web server directory hierarchy
+ </div></div></dd><dt><span class="term">--with-tcl</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This points to the directory where the
+ <code class="filename">tclConfig.sh</code> file is located.
+ </div></div></dd><dt><span class="term">--with-tclsh</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">This points to the location of the
+ <code class="filename">tclsh</code> executable.</div></div></dd><dt><span class="term">--with-apxs</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The location of the <code class="filename">apxs</code>
+ program that provides information about the
+ configuration and compilation options of Apache modules.
+ </div></div></dd><dt><span class="term">--with-apache-include[=DIR]</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Locates the Apache include files on your computer, if they're not in standard directory.
+ </div></div></dd><dt><span class="term">--enable-version-display=[yes|no]</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option enables Rivet to display its version in the
+ logfiles when Apache is started. The default is to keep the Rivet version hidden.
+ </div></div></dd><dt><span class="term">--with-rivet-target-dir=DIR</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option is for fine tuning of the installation final directories. Rivet Tcl packages,
+ commands and loadable libraries go into the same directory hierarchy
+ (by default is ${apache_base}/lib/rivet${PACKAGE_VERSION}, where $apache_base takes
+ the value set by --with-apache)
+ </div></div></dd><dt><span class="term">--with-upload-dir=DIR</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Configures Rivet's default upload directory. It can be overridden in the configuration
+ either globally or specifically for a virtual host
+ </div></div></dd><dt><span class="term">--with-post-max=BYTES</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The value to this option establishes a default for the maximum size of POST data.
+ Default: 0 (unlimited size)
+ </div></div></dd><dt><span class="term">--enable-head-requests</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ By default HEAD requests don't go through the usual request processing which leads
+ to script execution and therefore resource consumption and Rivet returns a
+ standard hardcoded HTML header to save CPU time. --enable-head-requests
+ can change the default.
+ </div></div></dd><dt><span class="term">--enable-rivet-commands-export</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ By default Rivet's commands are put on the export list of the <code class="code">::rivet</code>
+ namespace. With this option you may prevent it thus forcing the programmers to
+ fully qualify in their code. By default this option is enabled and it can be
+ changed in the configuration with the directive ExportRivetNS. Disabling
+ this option can be also reverted to 'On' with the --enable-import-rivet-commands
+ switch
+ </div></div></dd><dt><span class="term">--enable-import-rivet-commands</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Rivet's namespace is by default imported into the global namespace. Enabling the import
+ of Rivet's commands overrides the switch and forces --enable-rivet-commands-export=yes
+ thus demanding the commands to be exported (otherwise it would generate errors at run-time).
+ This option is disabled by default and it can be changed in the configuration with
+ the ImportRivetNS directive
+ </div></div></dd><dt><span class="term">--enable-virtual-interps-separation</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option changes the default for the SeparateVirtualInterps configuration
+ variable. Default: 0 (no separation among interpreters)
+ </div></div></dd></dl></div><p style="width:90%">
+ </p><p style="width:90%">
+ Example: configuring the build system to compile Rivet for an Apache HTTP server custom installation,
+ using tcl8.6. In this specific case the determination of the apxs path is redundant and it could be
+ omitted since it could be inferred from the --with-apache option value
+ </p><pre class="programlisting">./configure --with-tcl=/usr/lib/tcl8.6/ --with-tclsh=/usr/bin/tclsh8.6 \
+ --with-apxs=/usr/local/apache2/bin/apxs --with-apache=/usr/local/apache2 \
+ --with-rivetlib-target-dir=/usr/local/apache2/rivet3.2</pre></li><li class="step"><p class="title"><b>Run make</b></p><p style="width:90%">
+ At this point, you are ready to run make, which should
+ run to completion without any errors (a warning or two
+ is OK, generally).
+ </p></li><li class="step"><p class="title"><b>Install</b></p><p style="width:90%">
+ Now, you are ready to run the
+ </p><pre class="programlisting">make install</pre><p style="width:90%">
+ to install the resulting files. The <code class="code">install</code> target
+ actually fires the <code class="code">install-binaries</code> and
+ <code class="code">install-packages</code> targets which in turn
+ copy the binary modules and Tcl packages to their destination
+ directories. This commands create a functional Rivet environment with its
+ core language.
+ </p></li></ol></li><li class="step"><p class="title"><b>Apache Configuration Files</b></p><p style="width:90%">
+ Rivet is relatively easy to configure - we start off by
+ adding the module itself:
+ </p><pre class="programlisting">LoadModule rivet_module <em class="replaceable"><code>/usr/lib/apache2/modules/mod_rivet.so</code></em></pre><p style="width:90%">
+ This tells Apache to load the Rivet shared object, wherever
+ it happens to reside on your file system. Now we have to
+ tell Apache what kind of files are "Rivet" files and how to
+ process them:
+ </p><pre class="programlisting">AddType application/x-httpd-rivet rvt
+AddType application/x-rivet-tcl tcl</pre><p style="width:90%">
+ These tell Apache to process files with the
+ <code class="filename">.rvt</code> and <code class="filename">.tcl</code>
+ extensions as Rivet files.
+ </p><p style="width:90%">
+ The characters encoding can be changed using the <span style="font-family:monospace"><span class="command"><strong>header type</strong></span></span> command,
+ but you can also change the default charset for the whole site:
+ </p><pre class="programlisting">AddType 'application/x-httpd-rivet;charset=utf-8' rvt</pre><p style="width:90%">
+ All the pages generated by Rivet on this site will be sent with a
+ <span style="font-family:monospace"><span class="command"><strong>Content-Type:'text/html;charset=utf-8'</strong></span></span> header.
+ </p><p style="width:90%">You may also wish to use Rivet files as index files for
+ directories. In that case, you would do the following:</p><pre class="programlisting">DirectoryIndex index.html index.htm index.shtml index.cgi index.tcl index.rvt</pre><p style="width:90%">
+ For other directives that Rivet provides for Apache
+ configuration, please see <a class="xref" href="directives.html" title="Apache Rivet 3.2 Configuration">the section called “Apache Rivet 3.2 Configuration”</a>.
+ </p></li></ol></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="cmake.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet 3.2 </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Building Rivet 3.2 with CMake</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/internals.html b/rivet/manual3.2/internals.html
new file mode 100644
index 0000000..ed1c7e9
--- /dev/null
+++ b/rivet/manual3.2/internals.html
@@ -0,0 +1,316 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Rivet Internals</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="help.html" title="Resources - How to Get Help"><link rel="next" href="lazybridge.html" title="Example: the “Lazy” bridge"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Rivet Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="help.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="lazybridge.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="internals"></a>Rivet Internals</h2></div></div></div><p style="width:90%">
+ This section easily falls out of date, as new code is added, old
+ code is removed, and changes are made. The best place to look
+ is the source code itself. If you are interested in the changes
+ themselves, the Subversion revision control system
+ (<span style="font-family:monospace"><span class="command"><strong>svn</strong></span></span>) can provide you with information about
+ what has been happening with the code.
+ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4400"></a>Rivet approach to Apache Multiprocessing Models</h3></div></div></div><p style="width:90%">
+ The Apache HTTP web server has an extremely modular architecture
+ that made it very popular among web developers. Most of the server
+ features can be implemented in external modules, including some of
+ the way the server interfaces to the operative system. The multiprocessing
+ modules are meant to provide different models for distributing the
+ server workload but also to cope with different operative systems
+ having their specific architectures and services.
+ </p><p style="width:90%">
+ From the very beginning mod_rivet was designed to work with
+ the <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork MPM</a>
+ MPM (Multi Processing Module) which assumes the OS to have 'fork' capabilities.
+ This prerequisite basically restricted mod_rivet to work only with
+ Unix-like operative systems. Starting with version 3.0 we reorganized
+ mod_rivet to offer a design that could work together with more MPM and
+ hopefully pave the way to support different OS that have no 'fork'
+ call. At the same time we tried to preserve some of the basic
+ features of mod_rivet when working with the prefork MPM, chiefly the feature of
+ the Unix fork system call of 'cloning' a parent process
+ memory into its child, thus allowing fast initialization of interpreters.
+ </p><p style="width:90%">
+ The central design of mod_rivet now relies on the idea of <span class="quote">“<span class="quote">MPM bridges</span>”</span>,
+ loadable modules that are responsible to adapt the module procedural design to
+ a given class of Apache MPMs. This design is open to the development of more
+ MPM bridges coping with different multi-processing models but also to the development of
+ different approaches to resource consumption and workload balance. Currently we have 3 bridges:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">rivet_prefork_mpm.c: a bridge for the prefork MPM</li><li class="listitem">rivet_worker_mpm.c: a threaded bridge creating a pool of threads
+ each running Tcl interpreters and communicating with the worker MPM threads
+ through a thread safe queue. This bridge is needed by the worker MPM.</li><li class="listitem">rivet_lazy_mpm.c: a threaded bridge where Tcl threads are
+ started <span class="quote">“<span class="quote">on demand</span>”</span>. The bridge creates no threads and Tcl interpreters
+ at start up and only when requests come in Tcl execution threads are created.
+ This bridge is explained in detail in the <a class="xref" href="lazybridge.html" title="Example: the “Lazy” bridge">the section called “Example: the <span class="quote">“<span class="quote">Lazy</span>”</span> bridge”</a>.
+ Since the resource demand at startup is minimal this bridge should suit
+ development machines that go through frequent web server restarts.</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4413"></a>mod_rivet MPM Bridge callbacks</h3></div></div></div><p style="width:90%">
+ A bridge is a loadable library implementing different ways to handle
+ specific features needed to mod_rivet. It was originally meant as a way
+ to handle the prefork/worker/event MPM specificities, at the same time
+ avoiding the need to stuff the
+ code with conditional statements that would have implied useless complexity (an
+ instance of the Apache web server can run only an MPM at a time),
+ error prone programming and performance costs.
+ New bridges could be imagined also to implement different models of workload
+ and resource management (like the resources demanded by the Tcl interpreters).
+ We designed an interface between the core of mod_rivet and its MPM bridges
+ based on a set of functions defined in the rivet_bridge_table structure.
+ </p><pre class="programlisting">typedef struct _mpm_bridge_table {
+ RivetBridge_ServerInit *mpm_server_init;
+ RivetBridge_ChildInit *mpm_child_init;
+ RivetBridge_Request *mpm_request;
+ RivetBridge_Finalize *mpm_finalize;
+ RivetBridge_Exit_Handler *mpm_exit_handler;
+ RivetBridge_Thread_Interp *mpm_thread_interp;
+} rivet_bridge_table;</pre><p style="width:90%">
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span class="emphasis"><em>mpm_server_init</em></span>: pointer to any
+ specific server inititalization function. This field can be NULL
+ if no bridge specific initialization is needed. The core of
+ mod_rivet runs the <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span> before
+ calling this function.
+ </li><li class="listitem"><span class="emphasis"><em>mpm_child_init</em></span>: Bridge specific
+ child process initialization. If the pointer is assigned with
+ a non-NULL value the function is called by Rivet_ChildInit.
+ </li><li class="listitem"><span class="emphasis"><em>mpm_request</em></span>: This pointer must
+ be a valid function pointer to the content generator
+ implemented by the bridge. If the pointer is not defined the Apache
+ web server will stop at start up. This condition is motivated by
+ the need of avoiding useless testing of the pointer. The fundamental
+ purpose of a content generator module (like mod_rivet) is to respond
+ to requests creating content, thus whatever it is
+ a content generating function must exist (during the early stages of
+ development you can create a simple test function for that). In a
+ threaded MPM this function typically prepares the request processing
+ stuffing somewhere the pointer to the request_rec structure
+ passed by the web server and then it calls some method to communicate
+ these data to the Tcl execution thread waiting for result to be
+ returned. The <span class="quote">“<span class="quote">prefork</span>”</span> bridge is an exception since there
+ are no threads and the bridge calls directly Rivet_SendContent
+ </li><li class="listitem"><span class="emphasis"><em>mpm_finalize</em></span>: pointer to a finalization
+ function called during a child process exit. This function is registered
+ as child process memory pool cleanup function. If the pointer is NULL
+ the pool is given a default cleanup function (apr_pool_cleanup_null)
+ defined in src/mod_rivet/mod_rivet.c. For instance the finalize function
+ in the <span class="emphasis"><em>worker</em></span> MPM bridge notifies
+ a supervisor thread demanding the whole pool of threads running Tcl
+ interpreters to orderly exit. This pointer can be NULL if the bridge
+ has no special need when a child process must exit (unlikely if you have
+ multiple threads running)
+ </li><li class="listitem"><span class="emphasis"><em>mpm_exit_handler</em></span>: mod_rivet replaces
+ the core <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command with a new one
+ (<span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>). This command must handle
+ the process exit in the best possible way for the bridge and the
+ threading model it implements (for the 2 current threaded bridges this implies
+ signaling the threads to exit). The <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>
+ actually doesn't terminate the process, but interrupts execution
+ returning a specific error code commands <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span>
+ and <span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> can detect. Before the process is terminated
+ the <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> script is fired and <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_code</strong></span></span>
+ returns a message describing the exit condition. For instance
+ the <span class="emphasis"><em>worker</em></span> MPM bridge the finalize function
+ is called after the current thread itself is set up for termination.
+ See function Rivet_ExitCmd in
+ <a class="ulink" href="https://svn.apache.org/repos/asf/tcl/rivet/trunk/src/mod_rivet_ng/rivetCore.c" target="_top">rivetCore.c</a>
+ to have details on how and at what stage this callback is invoked.
+ </li><li class="listitem"><span class="emphasis"><em>mpm_thread_interp</em></span> must be a function returning
+ the interpreter object (a pointer to record of type
+ <span style="font-family:monospace"><span class="command"><strong>rivet_thread_interp</strong></span></span>) associated
+ to a given configuration as stored in a <span style="font-family:monospace"><span class="command"><strong>rivet_server_conf*</strong></span></span>
+ object. This element was temporarily introduced in the
+ <span style="font-family:monospace"><span class="command"><strong>mpm_bridge_table</strong></span></span> table and should be accessed
+ through the macro RIVET_PEEK_INTERP.
+ <pre class="programlisting">interp_obj = RIVET_PEEK_INTERP(private,private->conf);</pre>
+ Every bridge implementation should have its own way to store interpreter data and manage their
+ status. So this macro (and associated function) should hide from the module core function
+ the specific approach followed in a particular bridge
+ </li></ul></div><p style="width:90%">
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4447"></a>Server Initialization and MPM Bridge</h3></div></div></div><p style="width:90%">
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4450"></a>RivetChan</h3></div></div></div><p style="width:90%">
+ The <span class="structname">RivetChan</span> system was created in
+ order to have an actual Tcl channel that we could redirect
+ standard output to. This enables us use, for instance, the
+ regular <span style="font-family:monospace"><span class="command"><strong>puts</strong></span></span> command in .rvt pages. It
+ works by creating a channel that buffers output, and, at
+ predetermined times, passes it on to Apache's I/O system.
+ Tcl's regular standard output is replaced with an instance of
+ this channel type, so that, by default, output will go to the
+ web page.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4455"></a>The <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> Command</h3></div></div></div><p style="width:90%">
+ Rivet aims to run standard Tcl code with as few surprises as
+ possible. At times this involves some compromises - in this
+ case regarding the <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> command. The
+ problem is that the command will create truly global
+ variables. If the user is just cut'n'pasting some Tcl code
+ into Rivet, they most likely just want to be able to share the
+ variable in question with other procs, and don't really care
+ if the variable is actually persistant between pages. The
+ solution we have created is to create a proc
+ <span style="font-family:monospace"><span class="command"><strong>::request::global</strong></span></span> that takes the place of
+ the <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> command in Rivet templates. If
+ you really need a true global variable, use either
+ <span style="font-family:monospace"><span class="command"><strong>::global</strong></span></span> or add the :: namespace qualifier
+ to variables you wish to make global.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4463"></a>Page Parsing, Execution and Caching</h3></div></div></div><p style="width:90%">
+ When a Rivet page is requested, it is transformed into an
+ ordinary Tcl script by parsing the file for the <? ?>
+ processing instruction tags. Everything outside these tags
+ becomes a large <span style="font-family:monospace"><span class="command"><strong>puts</strong></span></span> statement, and
+ everything inside them remains Tcl code.
+ </p><p style="width:90%">
+ Each .rvt file is evaluated in its own
+ <code class="constant">::request</code> namespace, so that it is not
+ necessary to create and tear down interpreters after each
+ page. By running in its own namespace, though, each page will
+ not run afoul of local variables created by other scripts,
+ because they will be deleted automatically when the namespace
+ goes away after Apache finishes handling the request.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ One current problem with this system is that while
+ variables are garbage collected, file handles are not, so
+ that it is very important that Rivet script authors make
+ sure to close all the files they open.
+ </td></tr></table></div><p style="width:90%">
+ </p><p style="width:90%">
+ After a script has been loaded and parsed into it's "pure Tcl"
+ form, it is also cached, so that it may be used in the future
+ without having to reload it (and re-parse it) from the disk.
+ The number of scripts stored in memory is configurable. This
+ feature can significantly improve performance.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4471"></a>Extending Rivet by developing C code procedures</h3></div></div></div><p style="width:90%">
+ Rivet endows the Tcl interpreter with new commands
+ serving as interface between the application layer and the
+ Apache web server. Many of these commands
+ are meaningful only when a HTTP request is under way and
+ therefore a request_rec object allocated by the framework
+ is existing and was passed to mod_rivet as argument of a callback.
+ In case commands have to gain access to a valid request_rec
+ object the C procedure must check if such
+ a pointer exists and it's initialized
+ with valid data. For this purpose the procedure handling requests
+ (Rivet_SendContent) makes a copy of such pointer and keeps it
+ in an internal structure. The copy is set to NULL just before
+ returning to the framework, right after mod_rivet's has
+ carried out its request processing. When the pointer copy is NULL
+ the module is outside any request processing and this
+ condition invalidates the execution of
+ many of the Rivet commands. In case they are called
+ (for example in a ChildInitScript, GlobalInitScript,
+ ServerInitScript or ChildExitScript) they fail with a Tcl error
+ you can handle with a <span style="font-family:monospace"><span class="command"><strong>catch</strong></span></span> command.
+ </p><p style="width:90%">
+ For this purpose in src/rivet.h the macro
+ CHECK_REQUEST_REC was defined accepting two arguments: the thread
+ private data object and the command name. If the pointer is NULL
+ the macro calls Tcl_NoRequestRec and returns TCL_ERROR
+ causing the command to fail. These are the steps to follow
+ in order to write a new C language command for mod_rivet
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Define the command and associated C language procedure
+ in src/mod_rivet_ng/rivetCore.c using the macro
+ RIVET_OBJ_CMD<pre class="programlisting">RIVET_OBJ_CMD("mycmd",Rivet_MyCmd,private)</pre>
+ This macro ensures the command is defined as <span style="font-family:monospace"><span class="command"><strong>::rivet::mycmd</strong></span></span>
+ and its ClientData pointer is defined with the thread private data
+ </li><li class="listitem">
+ Add the code of Rivet_MyCmd to src/mod_rivet_ng/rivetCore.c (in case
+ the code resides in a different file also src/Makefile.am should be
+ changed to tell the build system how to compile the code and
+ link it into mod_rivet.so)
+ </li><li class="listitem">
+ If the code must have access to the request record in <span style="font-family:monospace"><span class="command"><strong>private->r</strong></span></span>
+ use the macro THREAD_PRIVATE_DATA in order to claim the thread private data, then
+ check for the validity of the pointer using the macro
+ CHECK_REQUEST_REC(private,"::rivet::<cmd_name>")
+
+ <pre class="programlisting">TCL_CMD_HEADER(Rivet_MyCmd)
+{
+ /* we have to get the thread private data */
+
+ THREAD_PRIVATE_DATA(private)
+
+ /* if ::rivet::mycmd works within a request processing we have
+ * to check if 'private' is carrying a non null request_rec pointer
+ */
+
+ CHECK_REQUEST_REC(private,"::rivet::mycmd");
+ ....
+
+ return TCL_OK;
+}</pre></li><li class="listitem">
+ Add a test for this command in tests/checkfails.tcl. For
+ instance
+ <pre class="programlisting">...
+check_fail no_body
+check_fail virtual_filename unkn
+check_fail my_cmd <arg1> <arg2>
+....</pre>
+ Where <arg1> <arg2> are optional
+ arguments in case the command has different forms depending on
+ the arguments. Then, if <span style="font-family:monospace"><span class="command"><strong>::rivet::mycmd</strong></span></span> must fail also
+ tests/failtest.tcl should modified as
+ <pre class="programlisting">virtual_filename->1
+mycmd->1</pre>
+ The value associated to the test must be 0 in case the
+ command doesn't need to test the <span style="font-family:monospace"><span class="command"><strong>private->r</strong></span></span> pointer.
+ </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4495"></a>Debugging Rivet and Apache</h3></div></div></div><p style="width:90%">
+ If you are interested in hacking on Rivet, you're welcome to
+ contribute! Invariably, when working with code, things go
+ wrong, and it's necessary to do some debugging. In a server
+ environment like Apache, it can be a bit more difficult to
+ find the right way to do this. Here are some techniques to
+ try.
+ </p><p style="width:90%">
+ The first thing you should know is that Apache can be launched
+ as a <span class="emphasis"><em>single process</em></span> with the
+ -X argument:
+ </p><pre class="programlisting">httpd -X</pre>.
+
+ <p style="width:90%">
+ On Linux, one of the first things to try is the system call
+ tracer, <span style="font-family:monospace"><span class="command"><strong>strace</strong></span></span>. You don't even have to
+ recompile Rivet or Apache for this to work.
+ </p><pre class="programlisting">strace -o /tmp/outputfile -S 1000 httpd -X</pre><p style="width:90%">
+ This command will run httpd in the system call tracer,
+ which leaves its output (there is potentially a lot of it) in
+ <code class="filename">/tmp/outputfile</code>. The -S
+ option tells <span style="font-family:monospace"><span class="command"><strong></strong></span></span>strace to only record the
+ first 1000 bytes of a syscall. Some calls such as
+ <code class="function">write</code> can potentially be much longer than
+ this, so you may want to increase this number. The results
+ are a list of all the system calls made by the program. You
+ want to look at the end, where the failure presumably occured,
+ to see if you can find anything that looks like an error. If
+ you're not sure what to make of the results, you can always
+ ask on the Rivet development mailing list.
+ </p><p style="width:90%">
+ If <span style="font-family:monospace"><span class="command"><strong>strace</strong></span></span> (or its equivalent on your
+ operating system) doesn't answer your question, it may be time
+ to debug Apache and Rivet. To do this, you will need to rebuild mod_rivet.
+ First of all you have to configure the build by running the
+ <span style="font-family:monospace"><span class="command"><strong>./configure</strong></span></span> script with the
+ -enable-symbols option and after you have
+ set the CFLAGS and LDFLAGS environment variables
+ </p><pre class="programlisting">export CFLAGS="-g -O0"
+export LDFLAGS="-g"
+./configure --enable-symbols ......
+make
+make install</pre><p style="width:90%">
+ Arguments to <span style="font-family:monospace"><span class="command"><strong>./configure</strong></span></span> must fit your Apache HTTP
+ web server installation. See the output produced by
+ </p><pre class="programlisting">./configure --help</pre><p style="width:90%">
+ And check the <a class="xref" href="installation.html" title="Apache Rivet 3.2 Installation">the section called “Apache Rivet 3.2 Installation”</a> page to
+ have further information.
+ Since it's easier to debug a single process, we'll still run
+ Apache in single process mode with -X:
+ </p><pre class="programlisting">@ashland [~] $ gdb /usr/sbin/apache.dbg
+GNU gdb 5.3-debian
+Copyright 2002 Free Software Foundation, Inc.
+GDB is free software, covered by the GNU General Public License, and you are
+welcome to change it and/or distribute copies of it under certain conditions.
+Type "show copying" to see the conditions.
+There is absolutely no warranty for GDB. Type "show warranty" for details.
+This GDB was configured as "powerpc-linux"...
+(gdb) run -X
+Starting program: /usr/sbin/apache.dbg -X
+[New Thread 16384 (LWP 13598)]
+.
+.
+.</pre><p style="width:90%">
+ When your apache session is up and running, you can request a
+ web page with the browser, and see where things go wrong (if
+ you are dealing with a crash, for instance).
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="help.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="lazybridge.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Resources - How to Get Help </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Example: the <span class="quote">“<span class="quote">Lazy</span>”</span> bridge</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/lassign_array.html b/rivet/manual3.2/lassign_array.html
new file mode 100644
index 0000000..f6634f1
--- /dev/null
+++ b/rivet/manual3.2/lassign_array.html
@@ -0,0 +1,18 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>lassign_array</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="inspect.html" title="inspect"><link rel="next" href="lempty.html" title="lempty"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lassign_array</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="inspect.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="lempty.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="lassign_array"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lassign_array — Assign a list of values to array variables</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::lassign_array</span> ?<span style="font-family:monospace; font-weight: bold;">value_list</span>? ?<span style="font-family:monospace; font-weight: bold;">array_name</span>? ?<span style="font-family:monospace; font-weight: bold;">array_variables</span>?</div></div></div><div class="refsect1"><a name="idm1369"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>lassign_array</strong></span></span> is an utility command inspired by the same Tclx command and
+ with a close resemblance with Tcl's <span style="font-family:monospace"><span class="command"><strong>lassign</strong></span></span> for assigning list elements to variables.
+ <span style="font-family:monospace"><span class="command"><strong>lassign_array</strong></span></span> first argument is a list of values to be assigned to an array that must be
+ given as second argument. The remaining arguments are the array's variable names which will store
+ as values the elements of the list. Variables names don't matching values in the list are given an empty string.
+ Unassigned list elements are returned as a list.
+ </p><pre class="programlisting">::rivet::lassign_array {1 2 3 4} assigned_array a b c d
+parray assigned_array
+<span class="strong"><strong>assigned_array</strong></span>
+assigned_array(a) = 1
+assigned_array(b) = 2
+assigned_array(c) = 3
+assigned_array(d) = 4
+
+set rem [::rivet::lassign_array {1 2 3 4 5 6 7} assigned_array a b c d]
+puts $rem
+5 6 7</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="inspect.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="lempty.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">inspect </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> lempty</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/lazybridge.html b/rivet/manual3.2/lazybridge.html
new file mode 100644
index 0000000..a32b79c
--- /dev/null
+++ b/rivet/manual3.2/lazybridge.html
@@ -0,0 +1,407 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Example: the “Lazy” bridge</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="internals.html" title="Rivet Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Example: the <span class="quote">“<span class="quote">Lazy</span>”</span> bridge</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> </td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="lazybridge"></a>Example: the <span class="quote">“<span class="quote">Lazy</span>”</span> bridge</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4525"></a>The rationale of threaded bridges</h3></div></div></div><p style="width:90%">
+ The 'bridge' concept was introduced to cope with the ability of
+ the Apache HTTP web server to adopt different multiprocessing
+ models by loading one of the available MPMs (Multi Processing Modules).
+ A bridge's task is to let mod_rivet fit the selected multiprocessing
+ model in the first place. Still separating mod_rivet core
+ functions from the MPM machinery provided also a solution for
+ implementing a flexible and extensible design that enables
+ a programmer to develop alternative approaches to workload and
+ resource management.
+ </p><p style="width:90%">
+ The Apache HTTP web server demands its modules to
+ run with any MPM irrespective of its internal architecture and its
+ a general design constrain to make no assumptions about the MPM.
+ This clashes with some requirements of threaded builds of Tcl.
+ First of all Tcl is itself threaded (unless threads are disabled
+ at compile time) and many of the basic Tcl data structures (namely Tcl_Obj)
+ cannot be safely shared among threads.
+ This demands a Tcl interpreters be run
+ on separated threads communicating with the HTTP web server
+ through suitable methods.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4529"></a>Lazy bridge data structures</h3></div></div></div><p style="width:90%">
+ The lazy bridge was initially developed to outline the basic tasks
+ carried out by each function making a rivet MPM bridge.
+ The lazy bridge attempts to be minimalist
+ but it's nearly fully functional, only a few configuration
+ directives (SeparateVirtualInterps and SeparateChannel)
+ are ignored because fundamentally incompatible.
+ The bridge is experimental but perfectly fit for many applications,
+ for example it's good on development machines where server restarts
+ are frequent.
+ </p><p style="width:90%">
+ This is the lazy bridge jump table, as such it defines the functions
+ implemented by the bridge.
+ </p><pre class="programlisting">RIVET_MPM_BRIDGE {
+ NULL,
+ Lazy_MPM_ChildInit,
+ Lazy_MPM_Request,
+ Lazy_MPM_Finalize,
+ Lazy_MPM_ExitHandler,
+ Lazy_MPM_Interp
+};</pre><p style="width:90%">
+ After the server initialization stage, child processes read the configuration
+ and modules build their own configuration representation. MPM bridges hooks into
+ this stage to store and/or build data structures relevant to their design.
+ A fundamental information built during this stage is the database of virtual hosts.
+ The lazy bridge keeps an array of virtual host descriptor pointers
+ each of them referencing an instance of the following structure.
+ </p><pre class="programlisting">/* virtual host descriptor */
+
+typedef struct vhost_iface {
+ int idle_threads_cnt; /* idle threads for the virtual hosts */
+ int threads_count; /* total number of running and idle threads */
+ apr_thread_mutex_t* mutex; /* mutex protecting 'array' */
+ apr_array_header_t* array; /* LIFO array of lazy_tcl_worker pointers */
+} vhost;</pre><p style="width:90%">
+ A pointer to this data structure array is stored in the bridge status which a basic
+ structure that likely every bridge has to create.
+ </p><pre class="programlisting">/* Lazy bridge internal status data */
+
+typedef struct mpm_bridge_status {
+ apr_thread_mutex_t* mutex;
+ int exit_command;
+ int exit_command_status;
+ int server_shutdown; /* the child process is shutting down */
+ vhost* vhosts; /* array of vhost descriptors */
+} mpm_bridge_status;</pre><p style="width:90%">
+ By design the bridge must create exactly one instance of <span style="font-family:monospace"><span class="command"><strong>mpm_bridge_status</strong></span></span>
+ and store its pointer in <span style="font-family:monospace"><span class="command"><strong>module_globals->mpm</strong></span></span>.
+ This is usually done at the very beginning of the child init script function pointed by
+ <span style="font-family:monospace"><span class="command"><strong>mpm_child_init</strong></span></span> in the <span style="font-family:monospace"><span class="command"><strong>rivet_bridge_table</strong></span></span> structure.
+ For the lazy bridge this field in the jump table points to <span style="font-family:monospace"><span class="command"><strong>Lazy_MPM_ChildInit</strong></span></span>
+ function
+ </p><pre class="programlisting">/*
+ * -- Lazy_MPM_ChildInit
+ *
+ * child process initialization. This function prepares the process
+ * data structures for virtual hosts and threads management
+ *
+ */
+
+void Lazy_MPM_ChildInit (apr_pool_t* pool, server_rec* server)
+{
+ apr_status_t rv;
+ server_rec* s;
+ server_rec* root_server = module_globals->server;
+
+ module_globals->mpm = apr_pcalloc(pool,sizeof(mpm_bridge_status));
+
+ /* This mutex is only used to consistently carry out these
+ * two tasks
+ *
+ * - set the exit status of a child process (hopefully will be
+ * unnecessary when Tcl is able again of calling
+ * Tcl_DeleteInterp safely)
+ * - control the server_shutdown flag. Actually this is
+ * not entirely needed because once set this flag
+ * is never reset to 0
+ *
+ */
+
+ rv = apr_thread_mutex_create(&module_globals->mpm->mutex,
+ APR_THREAD_MUTEX_UNNESTED,pool);
+ ap_assert(rv == APR_SUCCESS);
+
+ /* the mpm->vhosts array is created with as many entries as the number of
+ * configured virtual hosts */
+
+ module_globals->mpm->vhosts =
+ (vhost *) apr_pcalloc(pool,module_globals->vhosts_count*sizeof(vhost));
+ ap_assert(module_globals->mpm->vhosts != NULL);
+
+ /*
+ * Each virtual host descriptor has its own mutex controlling
+ * the queue of available threads
+ */
+
+ for (s = root_server; s != NULL; s = s->next)
+ {
+ int vh;
+ apr_array_header_t* array;
+ rivet_server_conf* rsc = RIVET_SERVER_CONF(s->module_config);
+
+ vh = rsc->idx;
+ rv = apr_thread_mutex_create(&module_globals->mpm->vhosts[vh].mutex,
+ APR_THREAD_MUTEX_UNNESTED,pool);
+ ap_assert(rv == APR_SUCCESS);
+ array = apr_array_make(pool,0,sizeof(void*));
+ ap_assert(array != NULL);
+ module_globals->mpm->vhosts[vh].array = array;
+ module_globals->mpm->vhosts[vh].idle_threads_cnt = 0;
+ module_globals->mpm->vhosts[vh].threads_count = 0;
+ }
+ module_globals->mpm->server_shutdown = 0;
+}</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4545"></a>Handling Tcl's exit core command</h3></div></div></div><p style="width:90%">
+ Most of the fields in the <span style="font-family:monospace"><span class="command"><strong>mpm_bridge_status</strong></span></span> are meant to deal
+ with the child exit process. Rivet supersedes the Tcl core's exit function
+ with a <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> function and it does so in order to curb the effects
+ of the core function that would force a child process to immediately exit.
+ This could have unwanted side effects, like skipping the execution of important
+ code dedicated to release locks or remove files. For threaded MPMs the abrupt
+ child process termination could be even more disruptive as all the threads
+ will be deleted without warning.
+ </p><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> implementation calls the function pointed by
+ <span style="font-family:monospace"><span class="command"><strong>mpm_exit_handler</strong></span></span> which is bridge specific. Its main duty
+ is to take the proper action in order to release resources and force the
+ bridge controlled threads to exit.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ Nonetheless the <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command should be avoided in ordinary mod_rivet
+ programming. We cannot stress this point enough. If your application must bail out
+ for some reason focus your attention on the design to find the most appropriate
+ route to exit and whenever possible avoid
+ calling <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> at all (which basically wraps a
+ C call to Tcl_Exit). Anyway the Rivet implementation partially transforms
+ <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> in a sort of special <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span>
+ implementation whose eventual action is to call the <span style="font-family:monospace"><span class="command"><strong>Tcl_Exit</strong></span></span>
+ library call. See the <span style="font-family:monospace"><span class="command"><strong><a class="xref" href="exit.html" title="exit">exit</a></strong></span></span>
+ command for further explanations.
+ </td></tr></table></div><p style="width:90%">
+ Both the worker bridge and lazy bridge
+ implementations of <span style="font-family:monospace"><span class="command"><strong>mpm_exit_handler</strong></span></span> call the function pointed
+ by <span style="font-family:monospace"><span class="command"><strong>mpm_finalize</strong></span></span> which also the function called by the framework
+ when the web server shuts down.
+ See these functions' code for further details, they are very easy to
+ read and understand
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4564"></a>HTTP request processing with the lazy bridge</h3></div></div></div><p style="width:90%">
+ Requests processing with the lazy bridge is done by determining for which
+ virtual host a request was created. The <span style="font-family:monospace"><span class="command"><strong>rivet_server_conf</strong></span></span>
+ structure keeps a numerical index for each virtual host. This index is used
+ to reference the virtual host descriptor and from it the request
+ handler tries to gain lock on the mutex protecting the array of <span style="font-family:monospace"><span class="command"><strong>lazy_tcl_worker</strong></span></span>
+ structure pointers. Each instance of this structure is a descriptor of a thread created for
+ a specific virtual host; threads available for processing have their descriptor
+ on that array and the handler callback will pop the first
+ <span style="font-family:monospace"><span class="command"><strong>lazy_tcl_worker</strong></span></span> pointer to signal the thread
+ there is work to do for it. This is the <span style="font-family:monospace"><span class="command"><strong>lazy_tcl_worker</strong></span></span> structure
+ </p><pre class="programlisting">/* lazy bridge Tcl thread status and communication variables */
+
+typedef struct lazy_tcl_worker {
+ apr_thread_mutex_t* mutex;
+ apr_thread_cond_t* condition;
+ int status;
+ apr_thread_t* thread_id;
+ server_rec* server;
+ request_rec* r;
+ int ctype;
+ int ap_sts;
+ int nreqs;
+ rivet_server_conf* conf; /* rivet_server_conf* record */
+} lazy_tcl_worker;</pre><p style="width:90%">
+ The server field is assigned with the virtual host server record. Whereas the <span style="font-family:monospace"><span class="command"><strong>conf</strong></span></span>
+ field keeps the pointer to a run time computed <span style="font-family:monospace"><span class="command"><strong>rivet_server_conf</strong></span></span>. This structure
+ may change from request to request because the request configuration changes when the URL may refer
+ to directory specific configuration in <span style="font-family:monospace"><span class="command"><strong><Directory ...>...</Directory></strong></span></span>
+ blocks
+ </p><p style="width:90%">
+ The Lazy bridge will not start any Tcl worker thread at server startup, but it will
+ wait for requests to come in and then if worker threads are sitting on a virtual host queue
+ a thread's <span style="font-family:monospace"><span class="command"><strong>lazy_tcl_worker</strong></span></span> structure pointer is popped
+ and the request handed to it. If no available thread is on the queue a new worker thread is
+ created. The code in the <span style="font-family:monospace"><span class="command"><strong>Lazy_MPM_Request</strong></span></span> easy to understand and shows
+ how this is working
+ </p><pre class="programlisting">/* -- Lazy_MPM_Request
+ *
+ * The lazy bridge HTTP request function. This function
+ * stores the request_rec pointer into the lazy_tcl_worker
+ * structure which is used to communicate with a worker thread.
+ * Then the array of idle threads is checked and if empty
+ * a new thread is created by calling create_worker
+ */
+
+int Lazy_MPM_Request (request_rec* r,rivet_req_ctype ctype)
+{
+ lazy_tcl_worker* w;
+ int ap_sts;
+ rivet_server_conf* conf = RIVET_SERVER_CONF(r->server->module_config);
+ apr_array_header_t* array;
+ apr_thread_mutex_t* mutex;
+
+ mutex = module_globals->mpm->vhosts[conf->idx].mutex;
+ array = module_globals->mpm->vhosts[conf->idx].array;
+ apr_thread_mutex_lock(mutex);
+
+ /* This request may have come while the child process was
+ * shutting down. We cannot run the risk that incoming requests
+ * may hang the child process by keeping its threads busy,
+ * so we simply return an HTTP_INTERNAL_SERVER_ERROR.
+ * This is hideous and explains why the 'exit' commands must
+ * be avoided at any costs when programming with mod_rivet
+ */
+
+ if (module_globals->mpm->server_shutdown == 1) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, APR_EGENERAL, r,
+ MODNAME ": http request aborted during child process shutdown");
+ apr_thread_mutex_unlock(mutex);
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ /* If the array is empty we create a new worker thread */
+
+ if (apr_is_empty_array(array))
+ {
+ w = create_worker(module_globals->pool,r->server);
+ (module_globals->mpm->vhosts[conf->idx].threads_count)++;
+ }
+ else
+ {
+ w = *(lazy_tcl_worker**) apr_array_pop(array);
+ }
+
+ apr_thread_mutex_unlock(mutex);
+
+ apr_thread_mutex_lock(w->mutex);
+ w->r = r;
+ w->ctype = ctype;
+ w->status = init;
+ w->conf = conf;
+ apr_thread_cond_signal(w->condition);
+
+ /* we wait for the Tcl worker thread to finish its job */
+
+ while (w->status != done) {
+ apr_thread_cond_wait(w->condition,w->mutex);
+ }
+ ap_sts = w->ap_sts;
+
+ w->status = idle;
+ w->r = NULL;
+ apr_thread_cond_signal(w->condition);
+ apr_thread_mutex_unlock(w->mutex);
+
+ return ap_sts;
+}</pre><p style="width:90%">
+ After a request is processed the worker thread returns its own
+ lazy_tcl_worker descriptor to the array and then waits
+ on the condition variable used to control and synchronize the bridge
+ threads with the Apache worker threads. The worker thread code
+ is the request_processor function
+ </p><pre class="programlisting">/*
+ * -- request_processor
+ *
+ * The lazy bridge worker thread. This thread prepares its control data and
+ * will serve requests addressed to a given virtual host. Virtual host server
+ * data are stored in the lazy_tcl_worker structure stored in the generic
+ * pointer argument 'data'
+ *
+ */
+
+static void* APR_THREAD_FUNC request_processor (apr_thread_t *thd, void *data)
+{
+ lazy_tcl_worker* w = (lazy_tcl_worker*) data;
+ rivet_thread_private* private;
+ int idx;
+ rivet_server_conf* rsc;
+
+ /* The server configuration */
+
+ rsc = RIVET_SERVER_CONF(w->server->module_config);
+
+ /* Rivet_ExecutionThreadInit creates and returns the thread private data. */
+
+ private = Rivet_ExecutionThreadInit();
+
+ /* A bridge creates and stores in private->ext its own thread private
+ * data. The lazy bridge is no exception. We just need a flag controlling
+ * the execution and an intepreter control structure */
+
+ private->ext = apr_pcalloc(private->pool,sizeof(mpm_bridge_specific));
+ private->ext->keep_going = 1;
+ private->ext->interp = Rivet_NewVHostInterp(private->pool,w->server);
+ private->ext->interp->channel = private->channel;
+
+ /* The worker thread can respond to a single request at a time therefore
+ * must handle and register its own Rivet channel */
+
+ Tcl_RegisterChannel(private->ext->interp->interp,*private->channel);
+
+ /* From the rivet_server_conf structure we determine what scripts we
+ * are using to serve requests */
+
+ private->ext->interp->scripts =
+ Rivet_RunningScripts (private->pool,private->ext->interp->scripts,rsc);
+
+ /* This is the standard Tcl interpreter initialization */
+
+ Rivet_PerInterpInit(private->ext->interp,private,w->server,private->pool);
+
+ /* The child initialization is fired. Beware of the terminologic
+ * trap: we inherited from prefork only modules the term 'child'
+ * meaning 'child process'. In this case the child init actually
+ * is a worker thread initialization, because in a threaded module
+ * this is the agent playing the same role a child process plays
+ * with the prefork bridge */
+
+ Lazy_RunConfScript(private,w,child_init);
+
+ /* The thread is now set up to serve request within the the
+ * do...while loop controlled by private->keep_going */
+
+ idx = w->conf->idx;
+ apr_thread_mutex_lock(w->mutex);
+ do
+ {
+ module_globals->mpm->vhosts[idx].idle_threads_cnt++;
+ while ((w->status != init) && (w->status != thread_exit)) {
+ apr_thread_cond_wait(w->condition,w->mutex);
+ }
+ if (w->status == thread_exit) {
+ private->ext->keep_going = 0;
+ continue;
+ }
+
+ w->status = processing;
+ module_globals->mpm->vhosts[idx].idle_threads_cnt--;
+
+ /* Content generation */
+
+ private->req_cnt++;
+ private->ctype = w->ctype;
+
+ w->ap_sts = Rivet_SendContent(private,w->r);
+
+ if (module_globals->mpm->server_shutdown) continue;
+
+ w->status = done;
+ apr_thread_cond_signal(w->condition);
+ while (w->status == done) {
+ apr_thread_cond_wait(w->condition,w->mutex);
+ }
+
+ /* rescheduling itself in the array of idle threads */
+
+ apr_thread_mutex_lock(module_globals->mpm->vhosts[idx].mutex);
+ *(lazy_tcl_worker **) apr_array_push(module_globals->mpm->vhosts[idx].array) = w;
+ apr_thread_mutex_unlock(module_globals->mpm->vhosts[idx].mutex);
+
+ } while (private->ext->keep_going);
+ apr_thread_mutex_unlock(w->mutex);
+
+ ap_log_error(APLOG_MARK,APLOG_DEBUG,APR_SUCCESS,w->server,"processor thread orderly exit");
+ Lazy_RunConfScript(private,w,child_exit);
+
+ apr_thread_mutex_lock(module_globals->mpm->vhosts[idx].mutex);
+ (module_globals->mpm->vhosts[idx].threads_count)--;
+ apr_thread_mutex_unlock(module_globals->mpm->vhosts[idx].mutex);
+
+ apr_thread_exit(thd,APR_SUCCESS);
+ return NULL;
+}</pre><p style="width:90%">
+ The lazy bridge <span style="font-family:monospace"><span class="command"><strong>module_globals->bridge_jump_table->mpm_thread_interp</strong></span></span>, which
+ is supposed to return the rivet_thread_interp structure pointer relevant to a given
+ request, has a straightforward task to do since by design each thread has
+ one interpreter
+ </p><pre class="programlisting">rivet_thread_interp* Lazy_MPM_Interp(rivet_thread_private *private,
+ rivet_server_conf* conf)
+{
+ return private->ext->interp;
+}</pre><p style="width:90%">
+ As already pointed out
+ running this bridge you get separate virtual interpreters and separate channels by default
+ and since by design each threads gets its own Tcl interpreter and Rivet channel you will
+ not be able to revert this behavior in the configuration with
+ </p><pre class="programlisting">SeparateVirtualInterps Off
+SeparateChannels Off</pre><p style="width:90%">
+ which are simply ignored
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">Rivet Internals </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/lempty.html b/rivet/manual3.2/lempty.html
new file mode 100644
index 0000000..44b2976
--- /dev/null
+++ b/rivet/manual3.2/lempty.html
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>lempty</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="lassign_array.html" title="lassign_array"><link rel="next" href="lmatch.html" title="lmatch"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lempty</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="lassign_array.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="lmatch.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="lempty"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lempty —
+ Returns 1 if <list> is empty or 0 if it has any elements.
+ This command emulates the TclX lempty command.
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::lempty</span> <span style="font-family:monospace; font-weight: bold;">list</span> </div></div></div><div class="refsect1"><a name="idm1385"></a><h2>Description</h2><p style="width:90%">
+ Returns 1 if <list> is empty or 0 if it has any elements.
+ This command emulates the TclX lempty command.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="lassign_array.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="lmatch.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">lassign_array </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> lmatch</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/lmatch.html b/rivet/manual3.2/lmatch.html
new file mode 100644
index 0000000..0d5d9ce
--- /dev/null
+++ b/rivet/manual3.2/lmatch.html
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>lmatch</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="lempty.html" title="lempty"><link rel="next" href="load_cookies.html" title="load_cookies"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lmatch</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="lempty.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_cookies.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="lmatch"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lmatch —
+ Look for elements in <list> that match <pattern>
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::lmatch</span> (<span style="font-family:monospace; font-weight: bold;">-exact</span> | <span style="font-family:monospace; font-weight: bold;">-glob</span> | <span style="font-family:monospace; font-weight: bold;">-regexp</span>) <span style="font-family:monospace; font-weight: bold;">list</span> <span style="font-family:monospace; font-weight: bold;">pattern</span> </div></div></div><div class="refsect1"><a name="idm1401"></a><h2>Description</h2><p style="width:90%">
+ Look for elements in <list> that match <pattern>.
+ This command is a decent replacement for TclX lmatch command when TclX is
+ not available
+ </p><p style="width:90%">
+ In the following example a regular expression is matched against
+ each element in the input list and a list containing the matching
+ elements is returned
+ </p><p style="width:90%">
+ </p><pre class="programlisting">::rivet::lmatch -regexp { aaxa bxxb ccxxxxcc } {.+[x]{2}.+}
+bxxb ccxxxxcc</pre><p style="width:90%">
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="lempty.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_cookies.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">lempty </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_cookies</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/load_cookies.html b/rivet/manual3.2/load_cookies.html
new file mode 100644
index 0000000..51bace4
--- /dev/null
+++ b/rivet/manual3.2/load_cookies.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>load_cookies</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="lmatch.html" title="lmatch"><link rel="next" href="load_env.html" title="load_env"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_cookies</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="lmatch.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_env.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="load_cookies"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_cookies — get any cookie variables sent by the client.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_cookies</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>array_name</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1416"></a><h2>Description</h2></div><p style="width:90%">
+ Load the array of cookie variables into the specified
+ array name. Uses array cookies by
+ default.
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="lmatch.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_env.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">lmatch </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_env</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/load_env.html b/rivet/manual3.2/load_env.html
new file mode 100644
index 0000000..ae11b39
--- /dev/null
+++ b/rivet/manual3.2/load_env.html
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>load_env</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="load_cookies.html" title="load_cookies"><link rel="next" href="load_headers.html" title="load_headers"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_env</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_cookies.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_headers.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="load_env"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_env — get the request's environment variables.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_env</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>array_name</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1429"></a><h2>Description</h2><p style="width:90%">
+ Load the array of environment variables into the specified
+ array name. Uses array ::request::env by
+ default.
+ </p><p style="width:90%">
+ As Rivet pages are run in the ::request
+ namespace, it isn't necessary to qualify the array name
+ for most uses - it's ok to access it as
+ env.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="load_cookies.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_headers.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_cookies </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_headers</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/load_headers.html b/rivet/manual3.2/load_headers.html
new file mode 100644
index 0000000..d420406
--- /dev/null
+++ b/rivet/manual3.2/load_headers.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>load_headers</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="load_env.html" title="load_env"><link rel="next" href="load_response.html" title="load_response"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_env.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_response.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="load_headers"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_headers — get client request's headers.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_headers</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>array_name</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1445"></a><h2>Description</h2><p style="width:90%">
+ Load the headers that come from a client request into the
+ provided array name, or use headers if no
+ name is provided.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="load_env.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_response.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_env </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_response</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/load_response.html b/rivet/manual3.2/load_response.html
new file mode 100644
index 0000000..0664347
--- /dev/null
+++ b/rivet/manual3.2/load_response.html
@@ -0,0 +1,27 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>load_response</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="load_headers.html" title="load_headers"><link rel="next" href="lremove.html" title="lremove"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_response</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_headers.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="lremove.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="load_response"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_response — load form variables into an array.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_response</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1458"></a><h2>Description</h2><p style="width:90%">
+ Load any form variables passed to this page into an
+ array. If <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span> is called without
+ arguments the array response is created in
+ the scope of the caller. If the variables var1,var2,var3...
+ having values val1,val2,val3... are passed to the page, the
+ resulting array will be a collection mapping var1,var2,var3...
+ to their corresponding values. <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span>
+ was inspired by the same NeoWebScript procedure in the way
+ it deals with multiple assignments: if a variable
+ is assigned more than once the corresponding array element will be a
+ list of the values for the variable. This can be useful in the case
+ of forms with checkbox options that are given the same name.
+ This condition is signalled by the presence of an auxiliary array
+ variable.
+ </p><p style="width:90%">
+ Example: if a group of checkboxes are associated to the var1
+ variable then <span style="font-family:monospace"><span class="command"><strong>response(var1)</strong></span></span> will store
+ the list of their values and the array will also have the extra variable
+ response(__var1) which can be tested with
+ the usual <span style="font-family:monospace"><span class="command"><strong>[info exists response(__var1)]</strong></span></span>
+ </p><p style="width:90%">
+ Calling <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span> several times for the same
+ array results in adding more values to the array at every call.
+ When needed it is left to the caller to empty the array between
+ two subsequent calls.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="load_headers.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="lremove.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_headers </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> lremove</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/lremove.html b/rivet/manual3.2/lremove.html
new file mode 100644
index 0000000..1020e9f
--- /dev/null
+++ b/rivet/manual3.2/lremove.html
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>lremove</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="load_response.html" title="load_response"><link rel="next" href="makeurl.html" title="makeurl"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lremove</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_response.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="makeurl.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="lremove"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lremove — remove from a list elements matching one or more patterns</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><span style="font-family:monospace"><span class="command"><strong>::rivet::lremove</strong></span></span> (<span style="font-family:monospace; font-weight: bold;">-regexp | -glob | -exact</span>) <span style="font-family:monospace; font-weight: bold;">list</span> <span style="font-family:monospace; font-weight: bold;">pattern</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>pattern</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>pattern</code></em></span>?</div><div class="refsect1"><a name="idm1486"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>lremove</strong></span></span> removes from list ?<span style="font-family:monospace; font-weight: bold;">list</span>? the first occurrence
+ of an element matching one of the patterns listed in the command line. By specifying the
+ -all option every occurrence of one the patterns is removed
+ </p><p style="width:90%">
+ Pattern matching can be -exact,-glob style or following
+ regular expressions (-regexp). These options are globally valid across the
+ whole pattern list (default is glob style matching)
+ </p><pre class="programlisting">::rivet::lremove -all -regexp {aa e111 bab aa} aa e111 bab
+e111 bab
+::rivet::lremove -all -regexp {aa e111 bab aa} aa "e\\d+"
+bab</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="load_response.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="makeurl.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_response </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> makeurl</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/makeurl.html b/rivet/manual3.2/makeurl.html
new file mode 100644
index 0000000..8d33d25
--- /dev/null
+++ b/rivet/manual3.2/makeurl.html
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>makeurl</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="lremove.html" title="lremove"><link rel="next" href="no_body.html" title="no_body"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">makeurl</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="lremove.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="no_body.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="makeurl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>makeurl — construct url's based on hostname, port.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::makeurl</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1506"></a><h2>Description</h2><p style="width:90%">
+ Create a self referencing URL from a filename. <span style="font-family:monospace"><span class="command"><strong>makeurl</strong></span></span>
+ can be used in three ways
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">With no arguments the current script URL is returned</li><li class="listitem">
+ The argument is a relative path: the command returns
+ the argument prefixed with the current script's URL
+ </li><li class="listitem">
+ The argument is an absolute path: the full URL to the resource is returned
+ </li></ul></div><p style="width:90%">
+ </p><p style="width:90%">
+ Example with an absolute path:
+ </p><pre class="programlisting">::rivet::makeurl /tclp.gif</pre><p style="width:90%"> returns
+ <code class="computeroutput">http://[hostname]:[port]/tclp.gif</code>.
+ where hostname and port are the hostname and port of the
+ server in question. The protocol prefix is inferred from the protocol
+ in the URL referencing the script.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="lremove.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="no_body.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">lremove </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> no_body</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/no_body.html b/rivet/manual3.2/no_body.html
new file mode 100644
index 0000000..e77f2c2
--- /dev/null
+++ b/rivet/manual3.2/no_body.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>no_body</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="makeurl.html" title="makeurl"><link rel="next" href="parray.html" title="parray"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">no_body</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="makeurl.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="parray.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="no_body"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>no_body — Prevents Rivet from sending any content.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::no_body</span> </div></div></div><div class="refsect1"><a name="idm1524"></a><h2>Description</h2><p style="width:90%">
+ This command is useful for situations where it is necessary
+ to only return HTTP headers and no actual content. For
+ instance, when returning a 304 redirect.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="makeurl.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="parray.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">makeurl </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> parray</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/parray.html b/rivet/manual3.2/parray.html
new file mode 100644
index 0000000..5aa2fa1
--- /dev/null
+++ b/rivet/manual3.2/parray.html
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>parray</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="no_body.html" title="no_body"><link rel="next" href="parse.html" title="parse"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">parray</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="no_body.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="parse.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="parray"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>parray — Tcl's <span style="font-family:monospace"><span class="command"><strong>parray</strong></span></span> with html formatting.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::parray</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>?<span class="optional">pattern</span>?</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1540"></a><h2>Description</h2><p style="width:90%">
+ An html version of the standard Tcl
+ <span style="font-family:monospace"><span class="command"><strong>parray</strong></span></span> command. Displays the entire
+ contents of an array in a sorted, nicely-formatted way.
+ Mostly used for debugging purposes.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="no_body.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="parse.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">no_body </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> parse</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/parse.html b/rivet/manual3.2/parse.html
new file mode 100644
index 0000000..ab085fe
--- /dev/null
+++ b/rivet/manual3.2/parse.html
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>parse</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="parray.html" title="parray"><link rel="next" href="raw_post.html" title="raw_post"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">parse</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parray.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="raw_post.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="parse"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>parse — parses a Rivet template file.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::parse</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1553"></a><h2>Description</h2><p style="width:90%">
+ Like the Tcl <span style="font-family:monospace"><span class="command"><strong>source</strong></span></span> command, but also
+ parses for Rivet <? and ?> processing tags. Using
+ this command, you can use one .rvt file from another.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parray.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="raw_post.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">parray </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> raw_post</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/processing.html b/rivet/manual3.2/processing.html
new file mode 100644
index 0000000..f903897
--- /dev/null
+++ b/rivet/manual3.2/processing.html
@@ -0,0 +1,226 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet HTTP Request Processing</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="directives.html" title="Apache Rivet 3.2 Configuration"><link rel="next" href="request.html" title="Apache Child Processes Lifecycle and Request Processing"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Rivet HTTP Request Processing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="directives.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="request.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="processing"></a>Apache Rivet HTTP Request Processing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm602"></a>Tcl Scripts Processing</h3></div></div></div><p style="width:90%">
+ Until 2.x versions Rivet handled requests
+ following the vision that inspired the original design
+ which was summarized in the definition <span style="color: red"><q>Web programming
+ like in PHP, but with Tcl</q></span>. HTTP requests triggered the
+ execution of Tcl scripts or a Rivet (.rvt file) templates
+ whose path is encoded in the URI (an alias translation or
+ URL rewriting might occur to establish the real path).
+ The execution of such scripts can be preceded and/or
+ followed by the execution of scripts common to a whole web site
+ or to a hierarchy of directories the BeforeScript and AfterScript
+ directives. These scripts can be configured on a per virtual host,
+ per directory or per user basis. Execution of such combined
+ scripts can break because of coding errors (thus triggering the
+ ErrorScript execution) or it can deliberately interrupt
+ ordinary execution by calling ::rivet::abort_page (which triggers
+ the execution of a script defined by the directive AbortScript).
+ This scheme is in case terminated by a further configurable script
+ (AfterEveryScript). This model of request handling was coded within
+ the module mod_rivet.so itself.
+ </p><p style="width:90%">
+ With Rivet 3.0 we changed this approach and landed to
+ a new much simpler and flexible model where each request is
+ by default handled by the following Tcl procedure
+ </p><pre class="programlisting"># -- request_handler.tcl
+#
+# Copyright 2002-2017 The Apache Rivet Team
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# code of the default handler of HTTP requests
+
+ ::try {
+ ::Rivet::initialize_request
+ } on error {err} {
+ ::rivet::apache_log_error crit \
+ "Rivet request initialization failed: $::errorInfo"
+ }
+
+ ::try {
+
+ set script [::rivet::inspect BeforeScript]
+ if {$script ne ""} {
+ set ::Rivet::script $script
+ eval $script
+ }
+
+ set script [::rivet::url_script]
+ if {$script ne ""} {
+ set ::Rivet::script $script
+ namespace eval ::request $script
+ }
+
+ set script [::rivet::inspect AfterScript]
+ if {$script ne ""} {
+ set ::Rivet::script $script
+ eval $script
+ }
+
+ } trap {RIVET ABORTPAGE} {err opts} {
+ ::Rivet::finish_request $script $err $opts AbortScript
+ } trap {RIVET THREAD_EXIT} {err opts} {
+ ::Rivet::finish_request $script $err $opts AbortScript
+ } on error {err opts} {
+ ::Rivet::finish_request $script $err $opts
+ } finally {
+ ::Rivet::finish_request $script "" "" AfterEveryScript
+ }
+
+# default_request_handler.tcl ---
+</pre><p style="width:90%">
+ Note the call to new 3.x command ::rivet::url_script
+ that returns the body of the Tcl script or Rivet template
+ pointed by the URL.
+ </p><p style="width:90%">
+ This procedure emulates the 2.x scheme
+ and as such works as a fully compatible request handling
+ but opens to the programmers the option of replacing it
+ with their own application request handling procedure
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ Note that if you redefine the core request handler
+ you'll need to handle yourself any error conditions
+ and any code interruption brought about by calling
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span>.
+ The current procedure might work as a template to be
+ reworked into your own request handler.
+ </td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm612"></a>Example: basic OO Rivet Application</h3></div></div></div><p style="width:90%">
+ An applications may have no interest in running
+ a script pointed by the URL as in the traditional approach
+ followed by rivet inspired to the PHP philosophy of <span class="quote">“<span class="quote">scripting
+ the HTML</span>”</span>. A web based application
+ could be driven entirely by the URL encoded arguments and by the
+ data POSTed with HTML forms, still retaining the ability of exploiting
+ the template engine of Rivet through the <span style="font-family:monospace"><span class="command"><strong>::rivet::parse</strong></span></span>.
+ In other words an application could hinge on a single entry point to
+ handle requests, regardless the complexity of its internal design.
+ </p><p style="width:90%">This section shows a template for such an application
+ (let's call it MyRivetApp) based on an Itcl (or TclOO for what
+ it matters) object instance. In myrivetapp.tcl
+ the application class is defined and an instance of it is
+ created in the global namespace.
+ </p><pre class="programlisting">## myrivetapp.tcl --
+#
+# Application class definition and instance creation
+#
+
+package require Itcl
+
+::itcl::class MyRivetApp {
+
+ private variable application_name
+
+ public method init {}
+ public method request_processing {urlencoded_args}
+
+}
+
+::itcl::body MyRivetApp::init {app_name}{
+
+ # any initialization steps must go here
+ # ....
+
+ set application_name $app_name
+
+}
+
+::itcl::body MyRivetApp::request_processing {urlencoded_args} {
+
+ # the whole application code will run from this method
+ ...
+
+}
+
+set ::theApplication [MyRivetApp #auto]
+
+$::theApplication init [dict get [::rivet::inspect server] hostname]
+
+# -- myrivetapp.tcl
+</pre><p style="width:90%">
+ which provides a very basic interface for both initialization
+ and request processing. Such script will be sourced into the
+ Tcl interpreter at the mod_rivet initialization stage. In the
+ Apache configuration (most
+ likely within a <VirtualHost myrivetapp.com:80>...</VirtualHost>
+ definition block)
+ </p><pre class="programlisting"><IfModule rivet_module>
+ RivetServerConf ChildInitScript "source myrivetapp.tcl"
+</IfModule></pre><p style="width:90%">
+ By running this script when an a thread is started
+ we set it up to respond requests, but we still need to
+ tell mod_rivet what code will eventually handle requests
+ and how the method MyRivetApp::request_processing will
+ be called with appropriate arguments
+ </p><pre class="programlisting"># -- myapp_request_handler.tcl
+#
+# This script will be read by mod_rivet during the process/thread
+# initialization stage and its content stored in a Tcl_Obj object.
+# This object is evaluated internally by mod_rivet
+#
+
+::try {
+
+ ::theApplication request_processing [::rivet::var_qs all]
+
+} trap {RIVET ABORTPAGE} {err opts} {
+
+ set abort_code [::rivet::abort_code]
+
+ switch $abort_code {
+ code1 {
+ # handling abort_page with code1
+ ....
+ }
+ code2 {
+ # handling abort_page with code2
+ ....
+ }
+ # ...
+ default {
+ # default abort handler
+ }
+ }
+
+} trap {RIVET THREAD_EXIT} {err opts} {
+
+ # myApplication sudden exit handler
+ ...
+
+} on error {err opts} {
+
+ # myApplication error handler
+ ...
+
+} finally {
+
+ # request processing final elaboration
+
+}
+
+# -- myapp_request_handler.tcl
+</pre></div><p style="width:90%">
+ Finally we have to tell mod_rivet to run this script when a
+ request is delivered to myApplication and we do so
+ using the 3.0 directive <span style="font-family:monospace"><span class="command"><strong>RequestHandler</strong></span></span>
+ </p><pre class="programlisting"><IfModule rivet_module>
+ RivetServerConf ChildInitScript "source myrivetapp.tcl"
+ RivetServerConf RequestHandler "myapp_request_handler.tcl"
+</IfModule></pre><p style="width:90%">
+ Notice that the argument of the directive <span style="font-family:monospace"><span class="command"><strong>RequestHandler</strong></span></span>
+ is a file name not a Tcl script as for <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span>
+ </p><p style="width:90%">
+ With such approach only the <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span>, <span style="font-family:monospace"><span class="command"><strong>ChildExitScript</strong></span></span>
+ and <span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span> configuration directives are effective, while
+ the effect of other handler is devolved to our request handler script.
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="directives.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="request.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet 3.2 Configuration </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Apache Child Processes Lifecycle and Request Processing</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/raw_post.html b/rivet/manual3.2/raw_post.html
new file mode 100644
index 0000000..410d588
--- /dev/null
+++ b/rivet/manual3.2/raw_post.html
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>raw_post</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="parse.html" title="parse"><link rel="next" href="redirect.html" title="redirect"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">raw_post</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parse.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="redirect.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="raw_post"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>raw_post — get the unmodified body of a POST request sent by the client.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::raw_post</span> </div></div></div><div class="refsect1"><a name="idm1564"></a><h2>Description</h2></div><p style="width:90%">
+ Returns the raw POST data from the request. If the request was
+ not a POST or there is no data, then "" - an empty string - is returned.
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parse.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="redirect.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">parse </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> redirect</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/read_file.html b/rivet/manual3.2/read_file.html
new file mode 100644
index 0000000..335b085
--- /dev/null
+++ b/rivet/manual3.2/read_file.html
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>read_file</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="redirect.html" title="redirect"><link rel="next" href="thread_id.html" title="thread_id"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">read_file</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="redirect.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="thread_id.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="read_file"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>read_file —
+ Read the entire contents of a file and return it as a string.
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::read_file</span> ?<span style="font-family:monospace; font-weight: bold;">file name</span>?</div></div></div><div class="refsect1"><a name="idm1606"></a><h2>Description</h2><p style="width:90%">
+ This is a utility command which loads the entire content of
+ a file and returns it as a result.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="redirect.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="thread_id.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">redirect </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> thread_id</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/redirect.html b/rivet/manual3.2/redirect.html
new file mode 100644
index 0000000..bc9a1b3
--- /dev/null
+++ b/rivet/manual3.2/redirect.html
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>redirect</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="raw_post.html" title="raw_post"><link rel="next" href="read_file.html" title="read_file"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">redirect</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="raw_post.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="read_file.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="redirect"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>redirect — Interrupt processing and divert to a new URL</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::redirect</span> ?<span style="font-family:monospace; font-weight: bold;">URL</span>? ?<span style="font-family:monospace; font-weight: bold;">permanent</span>?</div></div></div><div class="refsect1"><a name="idm1576"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::redirect</strong></span></span> diverts the browser to a new URL and marks
+ the redirection as either permanent in the browser local cache or
+ non permanent (default).
+ Calling <span style="font-family:monospace"><span class="command"><strong>::rivet::redirect</strong></span></span> causes the script execution to interrupt
+ and control passes to <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>, if such script is
+ set, by calling <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span> and passing as abort
+ code a dictionary with 2 keys:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>error_code</strong></span></span>: string literal 'redirect'</li><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>location</strong></span></span>: the URL the browser will be redirected to</li></ul></div><p style="width:90%">
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::redirect</strong></span></span> drives the redirection by setting the
+ 301 (permanent = 1: permanent redirect) or 302 (permanent = 0: non permanent redirect) and
+ attempts to discard the output the script might have already placed in the
+ stdout channel buffer. The <span class="quote">“<span class="quote">permanent</span>”</span> argument can also be any of the
+ other HTTP status codes. This is handy for returning one the 3xx status codes
+ dedicated to the HTTP request redirection
+
+ The command can fail if
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">A <span style="font-family:monospace"><span class="command"><strong>flush stdout</strong></span></span> has already been called before
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::redirect</strong></span></span> thus causing the HTTP headers to be sent</li><li class="listitem">The channel buffer has been flushed already by calling <span style="font-family:monospace"><span class="command"><strong>flush stdout</strong></span></span>
+ or because the Rivet channel internal buffer was full</li></ul></div><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>stdout</strong></span></span> channel, like any Tcl channels, can be manipulated
+ and if needed its internal buffer stretched.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="raw_post.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="read_file.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">raw_post </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> read_file</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/request.html b/rivet/manual3.2/request.html
new file mode 100644
index 0000000..8df747c
--- /dev/null
+++ b/rivet/manual3.2/request.html
@@ -0,0 +1,191 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Child Processes Lifecycle and Request Processing</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="processing.html" title="Apache Rivet HTTP Request Processing"><link rel="next" href="commands.html" title="Rivet Tcl Commands and Variables"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Child Processes Lifecycle and Request Processing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="processing.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="commands.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="request"></a>Apache Child Processes Lifecycle and Request Processing</h2></div></div></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm635"></a>Apache Child Process Lifecycle</h3></div></div></div><p style="width:90%">
+ Apache Rivet devolves to the <a class="ulink" href="" target="_top">Multi-Processing Module (MPM)</a>
+ the task of managing the agents responding to network requests.
+ An MPM is responsible for creating such agents during the start-up,
+ and is in charge for terminating existing ones and recreating new
+ agents when the workload is requiring it.
+ </p><p style="width:90%">
+ Apache Rivet 2.x supported only the
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork</a>
+ MPM which creates child processes as independent agents responding to network requests.
+ Starting with 3.0 also the <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/worker.html" target="_top">worker</a> and
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/event.html" target="_top">event</a> MPM are supported. The worker MPM is
+ an hybrid model where forked child processes in turn create threads as real
+ network agents. Also Apache on Windows© is now supported and tested
+ with the <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/mpm_winnt.html" target="_top">winnt</a> MPM,
+ where a single process creates and manages a large number of thread agents.
+ </p><p style="width:90%">
+ Configuration parameters about this critical point can be read in the
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/misc/perf-tuning.html" target="_top">Apache
+ documentation</a>.
+ </p><p style="width:90%">
+ There are 4 stages in the lifetime of an Apache webserver that are relevant
+ to Rivet:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><h4><a name="idm649"></a>Server Initialization</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ Apaches starts up as a single process. During this stage Apache performs
+ various preliminary tasks including reading and parsing the configuration.
+ After the configuration has been read Rivet sets up some internal resources
+ and if a Tcl script is set as argument of a <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span>
+ directive the script is executed.
+ Variables, arrays or dictionaries created during
+ the execution of this script will be preserved and later replicated in the
+ child process intepreters if the prefork MPM is loaded (which restricts
+ this feature to the Unix systems).
+ The prefork MPM creates new child processes with a fork()
+ system call, which involves only in memory copy of sections of a
+ process address space. Tcl is careful about reproducing an environment
+ across a fork call in order to have a functional interpreter.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Still, regardless the OS and loaded MPM <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span>
+ is a good place to do global initialization that doesn't involve
+ creation of private data. Example of tasks that can be done
+ in this context are IPC methods that must be initialized at this stage.
+ With the prefork MPM also importing from namespaces and loading packages
+ can be done here removing the burden from the child initialization stage.
+ </div></li><li class="listitem"><h4><a name="idm655"></a>Child Process Initialization</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ A child process calls the MPM bridge interface function to set up
+ the Tcl run time environment,either creating multiple threads each running its
+ Tcl interpreters or, in the case of the prefork MPM bridge, setting up
+ the environment within a the child process itself as a single Tcl thread.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This is the stage where most likely you want to open I/O channels,
+ database connections or any other resource that has to be private to an
+ interpreter and has to persist over a whole thread lifespan.
+ When the option <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is
+ turned off child processes will have a single interpreter regardless
+ the number of virtual hosts configured. The
+ <span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span> is the configuration script
+ the child process will run once before getting ready to
+ serve requests
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ When <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is turned on
+ each configured virtual host will have its own slave interpreter which
+ can will run the <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> directive as
+ initialization script. The
+ <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> has to be
+ placed within a <VirtualHost...>...</VirtualHost ...>
+ stanza to associate a script to a specific virtual host initialization.
+ This scenario of interpreter separation is extremely useful to
+ prevent resource conflicts when different virtual hosts are
+ serving different web applications.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span> has no effect to working interpreters
+ when <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is set.
+ </td></tr></table></div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ The lazy MPM bridge implements a model where
+ every worker thread has exactly one interpreter and belongs to
+ a single virtual host, therefore <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span>
+ is ignored and you can't share the same interpreter among virtual host
+ </td></tr></table></div>
+ </div></li><li class="listitem"><h4><a name="idm671"></a>Request Processing and Content Generation</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This section explain the default request handling procedure which
+ was written to let Rivet 3.0 work as a drop in replacement
+ of any 2.x module. For a in-depth understanding of
+ the new request processing mechanics please read the
+ <a class="link" href="processing.html" title="Apache Rivet HTTP Request Processing">request processing</a> section of the manual
+ </td></tr></table></div>
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ After a child has been initialized it's ready to serve requests.
+ A child process' lifetime is almost entirely spent in this phase, waiting
+ for connections and responding to requests. At every request the URL
+ goes through filter processing and, in case, rewritten
+ (mod_rewrite, Alias directives, etc).
+ Parameter values encoded in the request are made available to the
+ environment and finally the script encoded in the URL is run.
+ The developer can tell Rivet if optionally the execution has to
+ be preceded by a <span style="font-family:monospace"><span class="command"><strong>BeforeScript</strong></span></span> and followed by an
+ <span style="font-family:monospace"><span class="command"><strong>AfterScript</strong></span></span>. The real script mod_rivet will
+ execute is the result of the concatenation of the
+ <span style="font-family:monospace"><span class="command"><strong>BeforeScript</strong></span></span>,
+ the script encoded in the URL and the <span style="font-family:monospace"><span class="command"><strong>AfterScript</strong></span></span>.
+ Thus the whole ensemble of code that makes up a web application might
+ be running within the same "before" and "after" scripts to which
+ the programmer can devolve tasks common to every
+ page of an application.
+ </div></li><li class="listitem"><h4><a name="idm681"></a>Child Process Exit</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ If no error condition forces the child process to a premature exit, his
+ life is determined by the Apache configuration parameters. To reduce
+ the effects of memory leaks in buggy applications the Apache webserver
+ forces a child process to exit after a
+ certain number of requests served. A child process gets replaced
+ with a brand new one if the workload of webserver requires so.
+ Before the process quits an exit handler can be run
+ to do some housekeeping, just in case something the could have been
+ left behind has to be cleaned up. Like the initialization scripts
+ <span style="font-family:monospace"><span class="command"><strong>ChildExitScript</strong></span></span> too is a "one shot" script.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The Tcl <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command forces an interpreter to
+ quit, thus removing the ability of the process embedding it
+ to run more Tcl scripts. The child process then is forced
+ to exit and be replaced by a new one when the workload demands it.
+ This operation implies the <span style="font-family:monospace"><span class="command"><strong>ChildExitScript</strong></span></span> be
+ run before the interpreter is actually deleted.
+ </div></li></ol></div></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm687"></a>Apache Rivet Error and Exception Scripts Directives</h3></div></div></div><p style="width:90%">
+ Rivet is highly configurable and each of the webserver lifecycle stages
+ can be exploited to control a web application.
+ Not only the orderly sequence of stages
+ in a child lifecycle can be controlled with Tcl scripts, but also
+ Tcl error or abnormal conditions taking place during
+ the execution can be caught and handled with specific scripts.
+ </p><p style="width:90%">
+ Tcl errors (conditions generated when a command exits with code TCL_ERROR)
+ usually result in the printing of a backtrace of the code fragment
+ relevant to the error.
+ Rivet can set up scripts to trap these errors and run instead
+ an <span style="font-family:monospace"><span class="command"><strong>ErrorScript</strong></span></span> to handle it and conceal details
+ that usually have no interest for the end user and it
+ may show lines of code that ought to remain private. The ErrorScript
+ handler might create a polite error page where things
+ can be explained in human readable form, thus enabling the end user
+ to provide meaningful feedback information.
+ </p><p style="width:90%">
+ In other cases an unmanageable conditions might take place in the data and
+ this could demand an immediate interruption of the content generation. These abort
+ conditions can be fired by the <a class="xref" href="abort_page.html" title="abort_page">abort_page</a> command, which
+ in turn fires the execution of an <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> to handle
+ the abnormal condition. Starting with Rivet 2.1.0 <a class="xref" href="abort_page.html" title="abort_page">abort_page</a>
+ accepts a free form parameter that can be retrieved later with the command
+ <a class="xref" href="abort_code.html" title="abort_code">abort_code</a>
+ </p></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm697"></a>Tcl Namespaces in Rivet and the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span> Namespace</h3></div></div></div><p style="width:90%">
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This section explain the default request handling procedure which
+ was written to let Rivet 3.0 work as a drop in replacement
+ of any 2.x module. For a in-depth understanding of
+ the new request processing mechanics please read the
+ <a class="link" href="processing.html" title="Apache Rivet HTTP Request Processing">request processing</a> section of the manual
+ </td></tr></table></div><p style="width:90%">
+ </p><p style="width:90%">
+ With the sole exception of .rvt templates, mod_rivet runs pure Tcl scripts
+ at the global namespace. That means that every variable or procedure
+ created in Tcl scripts resides by default in the
+ "::" namespace (just like in traditional Tcl scripting) and they
+ are persistent across different requests until explicitly unset or
+ until the interpreter is deleted.
+ You can create your own application namespaces to store data but
+ it is important to remember that subsequent requests will in general be served
+ by different child processes. Your application can rely on the fact that
+ certain application data will be in the interpreter, but you shouldn't
+ assume the state of a transaction spanning several pages
+ can be stored in this way and be safely kept available to a
+ specific client. Sessions exist for this purpose and Rivet ships its own
+ session package with support for most of popular DBMS. Nonetheless
+ storing data in the global namespace can be useful, even though scoping
+ data in a namespace is recommended. I/O channels and
+ database connections are examples of information usually specific
+ to a process for which you don't want to pay the overhead of creating them
+ at every request, probably causing a dramatic loss in the application
+ performance.
+ </p><p style="width:90%">
+ A special role in the interpreter is played by the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span>
+ namespace. The <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span> namespace is deleted and recreated
+ at every request and Rivet templates (.rvt files) are executed within it.
+ </p><p style="width:90%">
+ Unless you're fully qualifying variable names outside the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span>
+ namespace, every variable and procedure created in .rvt files is by default placed in
+ it and deleted before any other requests gets processed. It is therefore safe to
+ create variables or object instances in template files and foresake about them: Rivet
+ will take care of cleaning the namespace up and everything created inside the namespace
+ will be destroyed.
+ </p><div class="table"><table align="center" title="Apache Rivet Scripts" class="namespaces"><thead><td>Stage</td><td>Script</td><td>Namespace</td></thead><tbody><tr class="init"><td>Apache Initialization</td><td>ServerInitScript</td><td>::</td></tr><tr class="childinit"><td rowspan="2">Child Initialization</td><td>GlobalInitScript</td><td>::</td></tr><tr class="childinit"><td>ChildInitScript</td><td>::</td></tr><tr class="processing"><td rowspan="6">Request Processing</td><td>BeforeScript</td><td>::</td></tr><tr class="processing"><td>.rvt</td><td>::request</td></tr><tr class="processing"><td>.tcl</td><td>::</td></tr><tr class="processing"><td>AfterScript</td><td>::</td></tr><tr class="processing"><td>AbortScript</td><td>::</td></tr><tr class="processing"><td>AfterEveryScript</td><td>::</td></tr><tr class="childexit"><td>Child Termination</td><td>ChildExitScript</td><td>::</td></tr><tr class="processing"><td>Error Handling</td><td>ErrorScript</td><td>::</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="processing.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="commands.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet HTTP Request Processing </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Rivet Tcl Commands and Variables</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/rivet.css b/rivet/manual3.2/rivet.css
new file mode 100644
index 0000000..c407a8c
--- /dev/null
+++ b/rivet/manual3.2/rivet.css
@@ -0,0 +1,400 @@
+BODY
+{
+ font-family: verdana;
+ background-color: #fbfcfc;
+}
+
+DIV.ABSTRACT
+{
+ border: solid 2px;
+ padding-left: 10pt;
+ padding-right: 10pt;
+}
+PRE.SCREEN
+{
+ font-family:monospace;
+ white-space: pre;
+ width: 100%;
+ background-color: #ffffcc;
+ border:solid;
+ color: #000000;
+ border-color: #009999;
+ border-left: solid #009999 2px;
+ border-right: solid #009999 2px;
+ border-top: solid #009999 2px;
+ border-bottom: solid #009999 2px;
+ padding-left: 15pt;
+}
+
+PRE.PROGRAMLISTING
+{
+ font-family: monospace;
+ white-space: pre;
+ width: 95%;
+ background-color: #e8ecf2;
+ border: solid;
+ color: #000000;
+ border-color: #a3b1bc;
+ border-left: solid #a3b1bc 1px;
+ border-right: solid #a3b1bc 1px;
+ border-top: solid #a3b1bc 1px;
+ border-bottom: solid #a3b1bc 1px;
+ font-size: normal;
+ padding-top: 1em;
+ padding-left: 1em;
+ padding-bottom: 1em;
+ font-size: 0.9em;
+}
+
+H1
+{
+ color: #ffffff;
+ border: solid 3px #1d252b;
+ background-color: #a3b1bc;
+ font-variant: small-caps;
+ width: 100%;
+}
+
+H1.TITLE
+{
+ color: #ffffff;
+ border: solid 3px #1d252b;
+ background-color: #a3b1bc;
+ font-variant: small-caps;
+ width: 100%;
+}
+
+.TITLE a {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.TITLE a:active {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.TITLE a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+H2
+{
+ COLOR: #ffffff ;
+ font-style: italic;
+ border: solid 3px #1d252b;
+ background-color: #a3b1bc;
+ PADDING: 0.5em;
+}
+
+TABLE.IMPORTANT
+{
+ font-style:italic;
+ border: solid 2px #ff0000;
+ width: 70%;
+ margin-left: 15%;
+}
+TABLE.CAUTION
+{
+ font-style:italic;
+ border: ridge 2px #ffff00;
+ width: 70%;
+ margin-left: 15%;
+}
+
+TABLE.NOTE
+{
+ font-style:italic;
+ border: solid 1px #000000;
+ width: 70%;
+ margin-left: 15%;
+}
+TABLE.TIP
+{
+ font-style:italic;
+ border: solid 1px #000000;
+ width: 70%;
+ margin-left: 15%;
+}
+
+TABLE.WARNING
+{
+ font-style:italic;
+ font-weight: bold;
+ border: ridge 4px #ff0000;
+ width: 70%;
+ margin-left: 15%;
+}
+
+DIV.VARIABLELIST {
+ font-family: sans-serif;
+ font-style: normal;
+ font-weight: normal;
+ padding-left: 20px;
+ font-size: small;
+}
+
+.VARLISTENTRY {
+ font-weight: bold;
+ margin-top: 10px;
+ color: #ffffff ;
+ background-color: #e8ecf2;
+ border: solid 1px #a3b1bc;
+ padding: 1px
+}
+
+/*
+ * See http://diveintoaccessibility.org/day_26_using_relative_font_sizes.html
+ * for an explanation of the following few commands.
+ * They are really too complicated to explain here in all depth. ;-)
+*/
+
+P {
+ font-size: 12px;
+}
+
+/*
+A{
+ color: maroon;
+}
+
+A:visited {
+ color: darkgreen;
+}
+*/
+
+BODY P {
+
+/* font-size: x-small; */
+ voice-family: "\"}\"";
+ voice-family: inherit;
+ font-size: normal;
+}
+
+HTML>BODY P {
+ font-size: normal;
+}
+/* */
+
+/* Add an external-link icon to absolute links */
+a[href^="http:"] {
+ background: url(images/remote.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[href^="http:"]:hover {
+ background: url(images/remote.png) right center no-repeat;
+}
+
+/* Add a note icon to footnote links */
+a[href^="#FTN"] {
+ background: url(images/qbullet-note.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[href^="#FTN"]:hover {
+ background: url(images/qbullet-note.png) right center no-repeat;
+}
+
+/* ...and a back icon to the backlinks in the footnotes themselves */
+a[name^="FTN"] {
+ background: url(images/scrollup.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[name^="FTN"]:hover {
+ background: url(images/scrollup.png) right center no-repeat;
+}
+
+/* Add a download icon to .gz links */
+a[href$=".gz"],a[href$=".tar"],a[href$=".zip"] {
+ background: url(images/disk.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+
+/* Add an Acrobat Reader icon to PDF links */
+a[href$=".pdf"] {
+ background: url(images/acrobat.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[href$=".pdf"]:hover {
+ background: url(images/acrobat.png) right center no-repeat;
+}
+
+/* Add a Word icon to RTF links */
+a[href$=".rtf"] {
+ background: url(images/word.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+
+/* ...but not to absolute links in this domain... */
+a[href^="http://www.karakas-online.de"] {
+ background: transparent;
+ padding-right: 0px;
+}
+
+a[href^="http://www.karakas-online.de"]:hover {
+ background: transparent;
+}
+
+/* ...or to the translation links on each page */
+DIV.translatelink > a[href^="http:"] {
+ background: transparent;
+ padding-right: 0px;
+}
+
+DIV.translatelink > a[href^="http:"]:hover {
+ background: transparent;
+}
+
+/* ...or to any images */
+DIV.imagelink a[href^="http:"] {
+ background: transparent;
+ padding-right: 0px;
+}
+
+DIV.imagelink a[href^="http:"]:hover {
+ background: transparent;
+}
+
+
+P.C2 {
+ COLOR: #ffffff ;
+ BACKGROUND-color: #a0a0d0;
+ BORDER: solid 1px #606090;
+ PADDING: 1px
+}
+
+
+DIV.NAVFOOTER {
+ color: #000000;
+ background-color: #e8ecf2;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: 2px solid #a3b1bc;
+}
+
+DIV.NUKEFOOTER {
+ color: #000000;
+ background-color: #e8ecf2;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: thin solid #a3b1bc;
+}
+
+DIV.NAVHEADER {
+ color: #000000;
+ background-color: #e8ecf2;
+ padding: 5px;
+ margin-bottom: 10px;
+ width: 100%;
+ border: 2px solid #a3b1bc;
+}
+
+DIV.SECT1,DIV.SECT2,DIV.SECT3 {
+ margin-left: 20px;
+}
+
+DIV.EXAMPLE,DIV.TOC {
+ border: thin dotted #4e5f6e;
+ padding-left: 10px;
+ padding-right: 10px;
+ color: #000000;
+ background-color: #e8ecf2;
+}
+DIV.EXAMPLE {
+ border: thin dotted #22AA22;
+ background-color: #EEE;
+}
+
+DIV.TOC {
+ margin-left: 20px;
+ margin-right: 20px;
+ width: 95%;
+}
+
+UL {
+ /* list-style: url("images/tux-bullet.png") disc; */
+ }
+
+.namespaces {
+ border: 1px solid black;
+}
+
+.namespaces td {
+ padding: 0.2em 1em;
+ /* font-weight: bold; */
+}
+
+.namespaces thead {
+ background-color: #aaf;
+}
+
+.namespaces tr.init {
+ background-color: #e88;
+}
+
+.namespaces tr.childinit {
+ background-color: #eee;
+}
+
+.namespaces tr.processing {
+ background-color: #e88;
+}
+
+.namespaces tr.childexit {
+ background-color: #eee;
+}
+
+table.directives {
+ border-collapse: collapse;
+}
+.directives thead {
+ background-color: #bbf;
+ font-size: 1em;
+ text-decoration: none;
+}
+
+.directives thead td {
+ padding: 8px;
+}
+
+.directives tbody tr > :first-child {
+ background-color: #eee;
+ padding-left: 2em;
+ padding-right: 2em;
+ text-align: left;
+}
+
+.directives tbody tr > :last-child {
+ text-decoration: none;
+ font-weight: normal;
+ font-size: small;
+ border-left: 1px solid black;
+ text-align: left;
+}
+
+.directives tbody tr td {
+ text-align: center;
+ text-decoration: none;
+ font-weight: normal;
+ padding-left: 1em;
+ padding-right: 1em;
+ padding-bottom: 4px;
+ padding-top: 4px;
+ border-bottom: 1px solid black;
+}
+
+.note td {
+ font-size: small;
+}
+
+li.listitem {
+ font-size: small;
+}
diff --git a/rivet/manual3.2/session_package.html b/rivet/manual3.2/session_package.html
new file mode 100644
index 0000000..cd3959d
--- /dev/null
+++ b/rivet/manual3.2/session_package.html
@@ -0,0 +1,182 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Session Package</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="diodisplay_package.html" title="DIODisplay"><link rel="next" href="form.html" title="Form: An HTML Form Fields Generation Utility"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Session Package</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diodisplay_package.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="form.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="session_package"></a>Session Package</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3276"></a>Introduction</h3></div></div></div><p style="width:90%">
+ This is session management code. It provides an interface
+ to allow you to generate and track a browser's visit as a
+ "session", giving you a unique session ID and an interface
+ for storing and retrieving data for that session on the
+ server.
+ </p><p style="width:90%">
+ This is an alpha/beta release -- documentation is not in
+ final form, but everything you need should be in this file.
+ </p><p style="width:90%">
+ Using sessions and their included ability to store and
+ retrieve session-related data on the server, programmers can
+ generate more secure and higher-performance websites. For
+ example, hidden fields do not have to be included in forms
+ (and the risk of them being manipulated by the user
+ mitigated) since data that would be stored in hidden fields
+ can now be stored in the session cache on the server. Forms
+ are then faster since no hidden data is transmitted --
+ hidden fields must be sent twice, once in the form to the
+ broswer and once in the response from it.
+ </p><p style="width:90%">
+ Robust login systems, etc, can be built on top of this code.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="requirements"></a>Requirements</h3></div></div></div><p style="width:90%">
+ Currently has only been tested with Postgresql, MySql and Oracle.
+ All DB interfacing is done through DIO, though, so it
+ should be relatively easy to add support for other
+ databases.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3285"></a>Preparing To Use It</h3></div></div></div><p style="width:90%">Create the tables in your SQL server. With Postgres,
+ do a <span style="font-family:monospace"><span class="command"><strong>psql www</strong></span></span> or whatever DB you
+ connect as, then a backslash-i on
+ <code class="filename">session-create.sql</code></p><p style="width:90%">(If you need to delete the tables, use <code class="filename">session-drop.sql</code>)</p><p style="width:90%">The session code by default requires a DIO handle
+ called <code class="varname">DIO</code> (the name of which can be
+ overridden). We get it by doing a</p><pre class="programlisting">RivetServerConf ChildInitScript "package require DIO"
+RivetServerConf ChildInitScript "::DIO::handle Postgresql DIO -user www"</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3295"></a>Example Usage</h3></div></div></div><p style="width:90%">In your httpd.conf, add:</p><pre class="programlisting">RivetServerConf ChildInitScript "package require Session; Session SESSION"</pre><p style="width:90%">
+ This tells Rivet you want to create a session object named
+ SESSION in every child process Apache creates.</p><p style="width:90%">
+ You can configure the session at this point using numerous
+ key-value pairs (which are defined later in this doc).
+ Here's a quick example:</p><pre class="programlisting">RivetServerConf ChildInitScript "package require Session; Session SESSION \
+ -cookieLifetime 120 -debugMode 1"</pre><p style="width:90%">
+ Turn debugging on -debugMode 1 to figure
+ out what's going on -- it's really useful, if
+ verbose.</p><p style="width:90%">
+ In your .rvt file, when you're generating the <HEAD>
+ section:
+ </p><pre class="programlisting">SESSION activate</pre><p style="width:90%">
+ Activate handles everything for you with respect to
+ creating new sessions, and for locating, validating, and
+ updating existing sessions. Activate will either locate
+ an existing session, or create a new one. Sessions will
+ automatically be refreshed (their lifetimes extended) as
+ additional requests are received during the session, all
+ under the control of the key-value pairs controlling the
+ session object.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3307"></a>Using Sessions From Your Code</h3></div></div></div><p style="width:90%">The main methods your code will use are:</p><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION</span> <span style="font-weight:bold ; font-family:monospace">id</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ After doing a <span style="font-family:monospace"><span class="command"><strong>SESSION activate</strong></span></span>,
+ this will return a 32-byte ASCII-encoded random
+ hexadecimal string. Every time this browser comes
+ to us with a request within the timeout period, this
+ same string will be returned (assuming they have
+ cookies enabled).
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION</span> <span style="font-weight:bold ; font-family:monospace">is_new_session</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">returns 1 if it's a new session or 0 if it has
+ previously existed (i.e. it's a zero if this request
+ represents a "return" or subsequent visit to a
+ current session.)</div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION new_session_reason</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This will return why this request is the first
+ request of a new session, either "no_cookie" saying
+ the browser didn't give us a session cookie,
+ "no_session" indicating we got a cookie but couldn't
+ find it in our session table, or "timeout" where
+ they had a cookie and we found the matching session
+ but the session has timed out.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION store</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>data</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given the name of a package, a key, and some data.
+ Stores the data in the rivet session cache table.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION fetch</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a package name and a key, return the data
+ stored by the store method, or an empty string if
+ none was set. (Status is set to the DIO error that
+ occurred, it can be fetched using the status
+ method.)
+ </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3353"></a>Session Configuration Options</h3></div></div></div><p style="width:90%">The following key-value pairs can be specified when a
+ session object (like SESSION above) is created:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">sessionLifetime</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">how many seconds the session will live for.
+ 7200 == 2 hours
+ </div></div></dd><dt><span class="term">sessionRefreshInterval</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If a request is processed for a browser that
+ currently has a session and this long has elapsed
+ since the session update time was last updated,
+ update it. 900 == 15 minutes. so if at least 15
+ minutes has elapsed and we've gotten a new request
+ for a page, update the session update time,
+ extending the session lifetime (sessions that are in
+ use keep getting extended).
+ </div></div></dd><dt><span class="term">cookieName</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex"></div>
+ name of the cookie stored on the user's web browser
+ default rivetSession
+ </div></dd><dt><span class="term">dioObject</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The name of the DIO object we'll use to access the
+ database (default DIO)
+ </div></div></dd><dt><span class="term">gcProbability</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The probability that garbage collection will occur
+ in percent. (default 1%, i.e. 1)</div></div></dd><dt><span class="term">gcMaxLifetime</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">the number of seconds after which
+ data will be seen as "garbage" and cleaned up --
+ defaults to 1 day (86400)</div></div></dd><dt><span class="term">refererCheck</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The substring you want to check each
+ HTTP referer for. If the referer was sent by the
+ browser and the substring is not found, the session
+ will be deleted. (not coded yet)</div></div></dd><dt><span class="term">entropyFile</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The
+ name of a file that random binary data can be read
+ from. (<code class="filename">/dev/urandom</code>) Data will
+ be used from this file to help generate a
+ super-hard-to-guess session ID.</div></div></dd><dt><span class="term">entropyLength</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The number of bytes which will be
+ read from the entropy file. If 0, the entropy file
+ will not be read (default 0)</div></div></dd><dt><span class="term">scrambleCode</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set the scramble code to something unique for the
+ site or your app or whatever, to slightly increase
+ the unguessability of session ids (default "some
+ random string")</div></div></dd><dt><span class="term">cookieLifetime</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The lifetime of the cookie in
+ minutes. 0 means until the browser is closed (I
+ think). (default 0)</div></div></dd><dt><span class="term">cookiePath</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The
+ webserver subpath that the session cookie applies to
+ (defaults to
+ <code class="filename">/</code>)</div></div></dd><dt><span class="term">cookieSecure</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Specifies whether the cookie should
+ only be sent over secure connections, 0 = any, 1 =
+ secure connections only (default
+ 0)</div></div></dd><dt><span class="term">sessionTable</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The name of the table that session
+ info will be stored in (default
+ <code class="varname">rivet_session</code>)</div></div></dd><dt><span class="term">sessionCacheTable</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The name of the table that contains
+ cached session data (default
+ <code class="varname">rivet_session_cache</code>)</div></div></dd><dt><span class="term">debugMode</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Set
+ debug mode to 1 to trace through and see the session
+ object do its thing (default 0)</div></div></dd><dt><span class="term">debugFile</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The
+ file handle that debugging messages will be written
+ to (default
+ <code class="varname">stdout</code>)
+ </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3431"></a>Session Methods</h3></div></div></div><p style="width:90%">
+ The following methods can be invoked to find out
+ information about the current session, store and fetch
+ server data identified with this session, etc:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION status</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the status of the last operation
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION id</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Get the session ID of the current browser. Returns
+ an empty string if there's no session (will not
+ happen is SESSION activate has been issued.)
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION new_session_reason</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the reason why there wasn't a previous
+ session, either "no_cookie" saying the browser
+ didn't give us a session cookie, "no_session"
+ indicating we got a cookie but couldn't find it in
+ the session table, or "timeout" when we had a cookie
+ and a session but the session had timed out.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION store</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>data</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a package name, a key string, and a data
+ string, store the data in the rivet session
+ cache.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION fetch</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a package name and a key, return the data
+ stored by the store method, or an empty string if
+ none was set. Status is set to the DIO error that
+ occurred, it can be fetched using the status
+ method.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION delete</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a user ID and looking at their IP address we
+ inherited from the environment (thanks, Apache),
+ remove them from the session table. (the session
+ table is how the server remembers stuff about
+ sessions). If the session ID was not specified the
+ current session is deleted.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION activate</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Find and validate the session ID if they have one.
+ If they don't have one or it isn't valid (timed out,
+ etc), create a session and drop a cookie on
+ them.
+ </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3487"></a>Getting Additional Randomness From The Entropy File</h3></div></div></div><pre class="programlisting">RivetServerConf ChildInitScript "Session SESSION -entropyFile /dev/urandom \
+ -entropyLength 10 -debugMode 1"</pre><p style="width:90%">
+ This options say we want to get randomness from an entropy
+ file (random data pseudo-device) of /dev/urandom, to get ten
+ bytes of random data from that entropy device, and to turn
+ on debug mode, which will cause the SESSION object to output
+ all manner of debugging information as it does stuff. This
+ has been tested on FreeBSD and appears to work.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diodisplay_package.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="form.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">DIODisplay </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Form: An HTML Form Fields Generation Utility</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/shorthand.html b/rivet/manual3.2/shorthand.html
new file mode 100644
index 0000000..078ec19
--- /dev/null
+++ b/rivet/manual3.2/shorthand.html
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title><?= ... ?></title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="next" href="abort_code.html" title="abort_code"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><?= ... ?></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="commands.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="abort_code.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="shorthand"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p><?= ... ?> —
+ Shorthand construct for single strings output
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><?= <span style="font-family:monospace; font-weight: bold;">$string</span> ?></span> </div></div></div><div class="refsect1"><a name="idm772"></a><h2>Description</h2><p style="width:90%">
+ This construct is a simplified form to print a single string wherever
+ needed in a ?<span style="font-family:monospace; font-weight: bold;">.rvt</span>? template. The contruct is equivalent to
+ writing the following line of Tcl code
+ </p><pre class="programlisting">puts -nonewline $string</pre><p style="width:90%">
+ The ?<span style="font-family:monospace; font-weight: bold;">string</span>? argument to the shorthand construct can
+ be any Tcl command returning a value
+ </p><p style="width:90%">
+ See <a class="xref" href="examples.html#hello_world" title="Example 1. Hello World">Example 1, “Hello World”</a> or
+ <a class="xref" href="examples.html#variable_access" title="Example 3. Variable Access">Example 3, “Variable Access”</a>
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="commands.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="abort_code.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Rivet Tcl Commands and Variables </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> abort_code</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/tcl_packages.html b/rivet/manual3.2/tcl_packages.html
new file mode 100644
index 0000000..ea9a22a
--- /dev/null
+++ b/rivet/manual3.2/tcl_packages.html
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Rivet Tcl Packages</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="index.html" title="Apache Rivet 3.2"><link rel="prev" href="examples.html" title="Examples and Usage"><link rel="next" href="dio.html" title="DIO - Database Interface Objects"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Rivet Tcl Packages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="examples.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="dio.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="tcl_packages"></a>Rivet Tcl Packages</h2></div></div></div><p style="width:90%">
+ In addition to the core Apache module, Rivet provides a number
+ of Tcl packages that include potentially useful code.
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">dio is a database abstraction layer.</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">form - for creating forms.</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">calendar - a package providing a simple configurable calendar generator</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">rivet entities - an UTF-8 / HTML entities converter</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">formbroker - a form data validators broker</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">ASCII Glyphs - prints most of the ASCII character set as large ASCII art glyphs</div></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="examples.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="dio.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Examples and Usage </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> DIO - Database Interface Objects</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/thread_id.html b/rivet/manual3.2/thread_id.html
new file mode 100644
index 0000000..a4ca216
--- /dev/null
+++ b/rivet/manual3.2/thread_id.html
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>thread_id</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="read_file.html" title="read_file"><link rel="next" href="try.html" title="try"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">thread_id</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="read_file.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="try.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="thread_id"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>thread_id — Returns the Tcl interpreter current thread id</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::thread_id</span> ?<span style="font-family:monospace; font-weight: bold;">-decimal | -hex</span>?</div></div></div><div class="refsect1"><a name="idm1617"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::threadid</strong></span></span> returns is either hexadecimal
+ (default) or decimal representation the current thread id. This command
+ is useful because allows for precise identification of an execution thread
+ when Apache runs a threaded MPM. Calling the command with ?<span style="font-family:monospace; font-weight: bold;">-decimal</span>?
+ prints the thread id in a form that makes it comparable with the <span style="font-family:monospace"><span class="command"><strong>tid</strong></span></span>
+ information printed in the error log.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="read_file.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="try.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">read_file </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> try</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/toglyphs.html b/rivet/manual3.2/toglyphs.html
new file mode 100644
index 0000000..a6d194d
--- /dev/null
+++ b/rivet/manual3.2/toglyphs.html
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>toGlyphs</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="prev" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="next" href="formbroker.html" title="The Form Broker"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">toGlyphs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="asciiglyphs.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">AsciiGlyphs</th><td width="20%" align="right"> <a accesskey="n" href="formbroker.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="toglyphs"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>toGlyphs —
+ print large ASCII glyphs
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::AsciiGlyphs toGlyphs</span> <span style="font-family:monospace; font-weight: bold;">string</span> </div></div></div><div class="refsect1"><a name="idm4215"></a><h2>Description</h2><p style="width:90%">
+ prints the ASCII glyphs corresponding to the characters forming
+ the argument <span style="font-family:monospace; font-weight: bold;">string</span>
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="asciiglyphs.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="asciiglyphs.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="formbroker.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">AsciiGlyphs </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> The Form Broker</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/try.html b/rivet/manual3.2/try.html
new file mode 100644
index 0000000..3afc9cb
--- /dev/null
+++ b/rivet/manual3.2/try.html
@@ -0,0 +1,58 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>try</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="thread_id.html" title="thread_id"><link rel="next" href="unescape_string.html" title="unescape_string"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">try</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="thread_id.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="unescape_string.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="try"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>try —
+ Catch error and exception conditions
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::try</span> ?<span style="font-family:monospace; font-weight: bold;">script</span>? ?<span style="font-family:monospace; font-weight: bold;">script</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>handlers</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>finally script</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1636"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> wraps the core language
+ command and simply traps exceptions that might have raised
+ by <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span> and
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> to throw them again and
+ thus causing <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> to be executed.
+ </p><p style="width:90%">
+ If neither <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span> nor
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> are called from ?<span style="font-family:monospace; font-weight: bold;">script</span>?
+ then any handlers specified in the command are tested for execution.
+ Thus <span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> can transparently be used
+ as a replacement for Tcl's own <span style="font-family:monospace"><span class="command"><strong>try</strong></span></span> and it's needed
+ if you want ?<span style="font-family:monospace; font-weight: bold;">script</span>? to safely bail out to <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This command is not exported from the <span style="font-family:monospace"><span class="command"><strong>::rivet</strong></span></span> namespace and therefore has
+ to be fully qualified.
+ </td></tr></table></div><p style="width:90%">
+ This script shows how <span style="font-family:monospace"><span class="command"><strong>::rivet:try</strong></span></span>
+ handles different exceptions or errors. You can drive this script
+ within mod_rivet adding the arguments fail or abort or exit to its URL.
+ You can handle the <span class="quote">“<span class="quote">exit</span>”</span> and <span class="quote">“<span class="quote">abort</span>”</span> cases with
+ an <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>.
+ See <a class="xref" href="directives.html" title="Apache Rivet 3.2 Configuration">the section called “Apache Rivet 3.2 Configuration”</a>
+ </p><pre class="programlisting"><html><?
+::rivet::try {
+ if {[::rivet::var_qs exists exit]} {
+ ::rivet::exit [::rivet::var_qs get exit]
+ } elseif {[::rivet::var_qs exists abort]} {
+ ::rivet::abort_page [::rivet::var_qs get abort]
+ } elseif {[::rivet::var_qs exists fail]} {
+ # this is just a non existent command
+ wrong_command
+ } else {
+ puts "<b>OK</b>"
+ }
+
+} on error {e o} {
+ puts "catching error -&gt; $e<br/>"
+ dict for {fd fv} $o {
+
+ puts "$fd --&gt;&gt; $fv<br/>"
+
+ }
+}
+?></html></pre><p style="width:90%">
+ Placing this code in a file (try.rvt) on the
+ web server <span class="emphasis"><em>DocumentRoot</em></span>
+ directory and setting for example the browser
+ to <span style="font-family:monospace"><span class="command"><strong>http://localhost/try.rvt?fail=1</strong></span></span>.
+ </p><pre class="programlisting">catching error -> invalid command name "wrong_command"
+-errorcode -->> TCL LOOKUP COMMAND wrong_command
+-code -->> 1
+-level -->> 0
+-errorstack -->> INNER {invokeStk1 wrong_command} UP 1
+-errorinfo -->> invalid command name "wrong_command" while executing "wrong_command" ("::try" body line 9)
+-errorline -->> 9</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="thread_id.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="unescape_string.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">thread_id </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> unescape_string</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/unescape_string.html b/rivet/manual3.2/unescape_string.html
new file mode 100644
index 0000000..3f117ea
--- /dev/null
+++ b/rivet/manual3.2/unescape_string.html
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>unescape_string</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="try.html" title="try"><link rel="next" href="upload.html" title="upload"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">unescape_string</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="try.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="upload.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="unescape_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>unescape_string — unescape escaped characters in a string.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::unescape_string</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>?</div></div></div><div class="refsect1"><a name="idm1673"></a><h2>Description</h2><p style="width:90%">
+ Scans through each character in the specified string looking
+ for escaped character sequences (characters containing a
+ percent sign and two hexadecimal characters), unescaping them
+ back to their original character values, as needed, also mapping
+ plus signs to spaces, and returning the result.
+ </p><p style="width:90%">
+ This is useful for unquoting strings that have been quoted to
+ be part of a URL.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="try.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="upload.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">try </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> upload</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/upload.html b/rivet/manual3.2/upload.html
new file mode 100644
index 0000000..feb56a5
--- /dev/null
+++ b/rivet/manual3.2/upload.html
@@ -0,0 +1,53 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>upload</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="unescape_string.html" title="unescape_string"><link rel="next" href="url_script.html" title="url_script"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">upload</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unescape_string.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="url_script.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="upload"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>upload — handle a file uploaded by a client.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> (<span style="font-family:monospace; font-weight: bold;">channel</span> | <span style="font-family:monospace; font-weight: bold;">save</span> | <span style="font-family:monospace; font-weight: bold;">data</span> | <span style="font-family:monospace; font-weight: bold;">exists</span> | <span style="font-family:monospace; font-weight: bold;">size</span> | <span style="font-family:monospace; font-weight: bold;">type</span> | <span style="font-family:monospace; font-weight: bold;">filename</span>)</div></div></div><div class="refsect1"><a name="idm1692"></a><h2>Description</h2><p style="width:90%">
+ The upload command is for file upload manipulation.
+ See the relevant Apache Directives to further configure the
+ behavior of this Rivet feature.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">channel</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ When given the name of a file upload
+ <em class="replaceable"><code>uploadname</code></em>,
+ returns a Tcl channel that can be used to access the
+ uploaded file.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">save</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Saves the <em class="replaceable"><code>uploadname</code></em> in
+ the file <em class="replaceable"><code>filename</code></em>.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">data</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns data uploaded to the server. This is binary clean
+ - in other words, it will work even with files like
+ images, executables, compressed files, and so on.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">exists</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns true if an upload named ?<span style="font-family:monospace; font-weight: bold;">uploadname</span>?
+ exists. This can be used in scripts that are meant to
+ be run by different forms that send over uploads that
+ might need specific processing.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">size</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the size of the file uploaded.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">type</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If the <code class="varname">Content-type</code> is set, it is
+ returned, otherwise, an empty string.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">filename</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the filename on the remote host that uploaded the file.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">tempname</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the name of the temporary file on the local host that the file was uploaded into.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">names</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the variable names, as a list, of all the files uploaded.
+ </div></div></dd></dl></div><p style="width:90%">
+ See <a class="xref" href="examples.html#file_upload" title="Example 4. File Upload">Example 4, “File Upload”</a>.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unescape_string.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="url_script.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">unescape_string </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> url_script</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/url_script.html b/rivet/manual3.2/url_script.html
new file mode 100644
index 0000000..247773c
--- /dev/null
+++ b/rivet/manual3.2/url_script.html
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>url_script</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="upload.html" title="upload"><link rel="next" href="var.html" title="var"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">url_script</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="upload.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="var.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="url_script"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>url_script — get the code of the URL referenced Tcl script or Rivet template</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::url_script</span> </div></div></div><div class="refsect1"><a name="idm1792"></a><h2>Description</h2><p style="width:90%">
+ This command is used internally by the rivet central Tcl
+ procedure (::Rivet::request_handling) executed by
+ the default traditional code for HTTP requests processing.
+ Unless you're implementing your own ::Rivet::request_handling
+ procedure it's unlikely it can be of any use.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upload.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="var.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">upload </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> var</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/var.html b/rivet/manual3.2/var.html
new file mode 100644
index 0000000..b275932
--- /dev/null
+++ b/rivet/manual3.2/var.html
@@ -0,0 +1,52 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>var</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="url_script.html" title="url_script"><link rel="next" href="wrap.html" title="wrap"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">var</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="url_script.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="wrap.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="var"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>var, var_qs, var_post — get the value of a form variable.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var</span> (<span style="font-family:monospace; font-weight: bold;">get</span> | <span style="font-family:monospace; font-weight: bold;">list</span> | <span style="font-family:monospace; font-weight: bold;">exists</span> | <span style="font-family:monospace; font-weight: bold;">number</span> | <span style="font-family:monospace; font-weight: bold;">all</span>)</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var_qs</span> (<span style="font-family:monospace; font-weight: bold;">get</span> | <span style="font-family:monospace; font-weight: bold;">list</span> | <span style="font-family:monospace; font-weight: bold;">exists</span> | <span style="font-family:monospace; font-weight: bold;">number</span> | <span style="font-family:monospace; font-weight: bold;">all</span>)</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var_post</span> (<span style="font-family:monospace; font-weight: bold;">get</span> | <span style="font-family:monospace; font-weight: bold;">list</span> | <span style="font-family:monospace; font-weight: bold;">exists</span> | <span style="font-family:monospace; font-weight: bold;">number</span> | <span style="font-family:monospace; font-weight: bold;">all</span>)</div></div></div><div class="refsect1"><a name="idm1826"></a><h2>Description</h2><p style="width:90%">
+ The <span style="font-family:monospace"><span class="command"><strong>var</strong></span></span> command retrieves information
+ about GET or POST variables sent to the script via client
+ request. It treats both GET and POST variables the same,
+ regardless of their origin. Note that there are two
+ additional forms of <span style="font-family:monospace"><span class="command"><strong>::rivet::var</strong></span></span>:
+ <span style="font-family:monospace"><span class="command"><strong>rivet::var_qs</strong></span></span> and
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::var_post</strong></span></span>.
+ These two restrict the retrieval of information to
+ parameters arriving via the querystring
+ (?foo=bar&bee=bop) or POSTing, respectively.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var</span> <span style="font-family:monospace; font-weight: bold;">get</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>varname</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>?<span class="optional">default</span>?</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the value of variable
+ <em class="replaceable"><code>varname</code></em>
+ as a string (even if there are multiple values). If
+ the variable doesn't exist as a GET or POST
+ variable, the
+ <em class="replaceable"><code>?<span class="optional">default</span>?</code></em>
+ value is returned, otherwise "" - an empty string -
+ is returned.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var</span> <span style="font-family:monospace; font-weight: bold;">list</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>varname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the value of variable
+ <em class="replaceable"><code>varname</code></em> as a list,
+ one list element per reference. Radiobuttons or multiple
+ selection listboxes are suited widgets which may
+ return list data.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If the result list is passed as a default value to the form package, one
+ could also set index "__varname" to get it interpreted as a list.
+ </div><pre class="programlisting">set response(countries) [::rivet::var list countries]
+set response(__countries) ""
+form form_request -defaults response
+form_request select countries -multiple 1 -values {USA Canada Mexico}
+form_request end</pre></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var</span> <span style="font-family:monospace; font-weight: bold;">exists</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>varname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns 1 if
+ <em class="replaceable"><code>varname</code></em>
+ exists, 0 if it doesn't.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var</span> <span style="font-family:monospace; font-weight: bold;">number</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the number of variables.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::var</span> <span style="font-family:monospace; font-weight: bold;">all</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return a list of variable names and values.
+ </div></div></dd></dl></div><p style="width:90%">See <a class="xref" href="examples.html#variable_access" title="Example 3. Variable Access">Example 3, “Variable Access”</a>.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="url_script.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="wrap.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">url_script </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> wrap</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/wrap.html b/rivet/manual3.2/wrap.html
new file mode 100644
index 0000000..d134698
--- /dev/null
+++ b/rivet/manual3.2/wrap.html
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>wrap</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="var.html" title="var"><link rel="next" href="wrapline.html" title="wrapline"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">wrap</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="var.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="wrapline.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="wrap"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>wrap —
+ Split a string on newlines.
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::wrap</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>? ?<span style="font-family:monospace; font-weight: bold;">maxlen</span>? <span style="font-family:monospace; font-weight: bold;">html</span></div></div></div><div class="refsect1"><a name="idm1901"></a><h2>Description</h2><p style="width:90%">
+ For each line, wrap the line at a space character to be
+ equal to or shorter than the maximum length value passed.
+ </p><p style="width:90%">
+ If a third argument called "-html" is present, the string is put together
+ with html <br> line breaks, otherwise it's broken with newlines.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="var.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="wrapline.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">var </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> wrapline</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/wrapline.html b/rivet/manual3.2/wrapline.html
new file mode 100644
index 0000000..14b32b5
--- /dev/null
+++ b/rivet/manual3.2/wrapline.html
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>wrapline</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="wrap.html" title="wrap"><link rel="next" href="xml.html" title="xml"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">wrapline</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="wrap.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="xml.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="wrapline"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>wrapline —
+ Split the line into multiple lines by splitting on space characters
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::wrapline</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>? ?<span style="font-family:monospace; font-weight: bold;">maxlen</span>? <span style="font-family:monospace; font-weight: bold;">html</span></div></div></div><div class="refsect1"><a name="idm1915"></a><h2>Description</h2><p style="width:90%">
+ Given a line and a maximum length and option "-html" argument, split the line
+ into multiple lines by splitting on space characters and making sure each line
+ is less than maximum length.
+ </p><p style="width:90%">
+ If the third argument, "-html", is present, return the result with the lines
+ separated by html <br> line breaks, otherwise the lines are returned
+ separated by newline characters.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="wrap.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="xml.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">wrap </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> xml</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/xml.html b/rivet/manual3.2/xml.html
new file mode 100644
index 0000000..be94878
--- /dev/null
+++ b/rivet/manual3.2/xml.html
@@ -0,0 +1,28 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>xml</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="wrapline.html" title="wrapline"><link rel="next" href="examples.html" title="Examples and Usage"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">xml</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="wrapline.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="examples.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="xml"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>xml —
+ XML Fragments creation
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::xml</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>? ?<span style="font-family:monospace; font-weight: bold;">tag descriptor</span>? ?<span style="font-family:monospace; font-weight: bold;">tag descriptor</span>? ?<span style="font-family:monospace; font-weight: bold;">...</span>?</div></div></div><div class="refsect1"><a name="idm1930"></a><h2>Description</h2><p style="width:90%">
+ Given a string and a variable number of tag descriptors return XML fragment made
+ by nesting the tags with the same hierarchical order they are listed on the command
+ line. The tag descriptors can be a one element list (the tag) or an odd-length list whose
+ first argument is the tag namme and the remaining elements are interpreted as
+ attribute name-attribute value pairs.
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::xml</strong></span></span> can work as a replacement of <span style="font-family:monospace"><span class="command"><strong>::rivet::html</strong></span></span>
+ provided you take care of sending the string with command <span style="font-family:monospace"><span class="command"><strong>puts</strong></span></span>
+ </p><pre class="programlisting">::rivet::xml "a string" b u
+<== <b><u>a string</u></b></pre><p style="width:90%">
+ You can specify the tags attributes by replacing a tag specification
+ with a odd-length list containing the tag name and a series of
+ attribute-value pairs
+ </p><pre class="programlisting"><span style="font-family:monospace"><span class="command"><strong>::rivet::xml "a string" [list div class box id testbox] b i</strong></span></span>
+<== <div class="box" id="testbox"><b><i>a string</i></b></div></pre><pre class="programlisting"><span style="font-family:monospace"><span class="command"><strong>::rivet::xml "text to be wrapped in XML" div [list a href http://..../ title "info message"]</strong></span></span>
+<== <div><a href="http://..../" title="info message">text to be wrapped in XML</a></div></pre><p style="width:90%">
+ A single argument is interpreted as a list of tag name and attributes to be
+ coded as a self closing element
+ </p><pre class="programlisting"><span style="font-family:monospace"><span class="command"><strong>::rivet::xml [list b a1 v1 a2 v2]</strong></span></span>
+<== <b a1="v1" a2="v2" /></pre><p style="width:90%">
+ Unless the string is literally an empty string
+ </p><pre class="programlisting"><span style="font-family:monospace"><span class="command"><strong>::rivet::xml "" [list b a1 v1 a2 v2]</strong></span></span>
+<== <b a1="v1" a2="v2"></b></pre><p style="width:90%">which is useful for generating 'script' elements in an HTML page header that wouldn't be understood
+ as single closing element</p><pre class="programlisting"><span style="font-family:monospace"><span class="command"><strong>::rivet::xml "" [list script type "text/javascript" src js/myscripts.js]</strong></span></span>
+<== <script type="text/javascript" src="js/myscripts.js"></script></pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="wrapline.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="examples.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">wrapline </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Examples and Usage</td></tr></table></div></body></html>
diff --git a/rivet/manual3.2/xml_calendar.html b/rivet/manual3.2/xml_calendar.html
new file mode 100644
index 0000000..459d7e0
--- /dev/null
+++ b/rivet/manual3.2/xml_calendar.html
@@ -0,0 +1,87 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>XmlCalendar</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot"><link rel="home" href="index.html" title="Apache Rivet 3.2"><link rel="up" href="calendar_package.html" title="Calendar Package"><link rel="prev" href="calendar.html" title="Calendar"><link rel="next" href="html_calendar.html" title="HtmlCalendar"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">XmlCalendar</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="calendar.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Calendar Package</th><td width="20%" align="right"> <a accesskey="n" href="html_calendar.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="xml_calendar"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>XmlCalendar — Prints XML formatted calendar tables</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">XmlCalendar</span> <span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>calendar_name</code></em></span> ?<span style="font-family:monospace; font-weight: bold;">-option1 <em class="replaceable"><code>option_list</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">-option2 <em class="replaceable"><code>option_list</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;">...</span>?</div></div></div><div class="refsect1"><a name="idm4013"></a><p style="width:90%">
+ An XmlCalendar object is created and returned. XmlCalendar objects
+ print XML formatted calendar tables. The markup can be customized
+ using the configuration options.
+ </p><p style="width:90%">
+ Configuration options accept odd-length lists as values. An option_list has the following
+ structure
+ </p><p style="width:90%">
+ </p><pre class="programlisting">tag_name attr11 val1 attr2 val2 ...</pre><p style="width:90%">
+ </p><p style="width:90%">
+ The first element of an option list is a tag name, the remaining terms are therefore
+ an even-length sublist which is interpreted as a sequence of attribute-value pairs that
+ will in turn become attributes of the tag.
+ </p></div><div class="refsect1"><a name="idm4019"></a><h2>Methods</h2><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex ">
+ cal_obj <span style="font-weight:bold ; font-family:monospace">emit</span> -opt1 val1 -opt2 val2</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex ">
+ cal_obj <span style="font-weight:bold ; font-family:monospace">emit</span> ?<span style="font-family:monospace; font-weight: bold;">month</span>? ?<span style="font-family:monospace; font-weight: bold;">year</span>? -opt1 val1 -opt2 val2</div></div><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex ">
+ cal_obj <span style="font-weight:bold ; font-family:monospace">emit</span> ?<span style="font-family:monospace; font-weight: bold;">
+ <em class="replaceable"><code>month | year</code></em></span>? -opt1 val1
+ -opt2 val2</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The method 'emit' if invoked without arguments returns an
+ XML calendar table of the current month
+ </div></div></dd></dl></div></div><div class="refsect1"><a name="idm4038"></a><div class="refsect2"><a name="idm4039"></a><h3>Options</h3><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-container (tag_name
+ attr11 val1 attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Assigns an options list to the XML element that
+ will hold the whole table.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The default tag for the container is 'calendar', with no attributes.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-header (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Assigns tag name and attributes to the XML header element (default: calheader)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-body (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Assigns tag name and attributes to the XML body element of the table (default: calbody)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-banner (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Assigns tag name and attributes to the XML banner element of the table (default: monthyear)
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The header of a calendar table is made of a banner, showing the Month and Year number, and
+ of a weekdays bar.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-foot (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Assigns tag name and attributes to the XML foot element
+ of the table (default: calfoot).
+ </div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This option was added for completeness, but it's not implemented yet
+ </td></tr></table></div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-banner_month (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Tag name and attributes for the XML element holding the
+ month name (default:month)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-banner_year (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Tag name and attributes for the XML element holding the
+ month name (default: year)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-weekdays (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Tag name and attributes for the XML element holding the
+ weekday header (default: weekdays)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-weekdays_cell (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Tag name and attributes for the XML element holding the
+ each single weekday (default: wkdays)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-days_row (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Tag name and attributes for the XML element holding the
+ each row of the calendar table (default: week)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-days_cell (tag_name attr11 val1
+ attr2 val2 ...)</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Tag name and attributes for the XML element representing
+ a cell in the calendar table (default: day)
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-cell_function proc</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ If set this option is the name of a procedure that gets
+ called for every day of the month. The procedure must
+ accept 4 argument representing day, month, year and weekday
+ and must return an odd-length list interpreted in the same
+ way as options lists.
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-current_day day</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option works as a simple method for pointing out
+ a specific day of the month. If set with a day number
+ that day will get the class attribute automatically
+ set as "current"
+ </div></div></dd><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">-current_weekday 0-6 | today</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option works as a simple method for pointing out
+ a specific weekday of the month. If set with a weekday
+ index (0: Sunday, 6: Saturday) the corresponding cell in
+ the weekdays header will get the class attribute automatically
+ set as "current_wkday"
+ </div></div></dd></dl></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="calendar.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="calendar_package.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="html_calendar.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Calendar </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> HtmlCalendar</td></tr></table></div></body></html>