You are viewing a plain text version of this content. The canonical link for it is here.
Posted to site-cvs@tcl.apache.org by mx...@apache.org on 2018/11/28 22:52:07 UTC
[tcl-site] 02/02: add manual pages for latest release (2.4.0 and
3.1.0)
This is an automated email from the ASF dual-hosted git repository.
mxmanghi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tcl-site.git
commit ba90284945f87c19674cce62fef2ff4ea5ace238
Author: Massimo Manghi <mx...@apache.org>
AuthorDate: Wed Nov 28 23:50:21 2018 +0100
add manual pages for latest release (2.4.0 and 3.1.0)
---
rivet/manual2.4/abort_code.html | 10 +
rivet/manual2.4/abort_page.html | 26 ++
rivet/manual2.4/apache_log_error.html | 15 +
rivet/manual2.4/apache_table.html | 62 ++++
rivet/manual2.4/asciiglyphs.html | 27 ++
rivet/manual2.4/calendar.html | 26 ++
rivet/manual2.4/calendar_package.html | 20 ++
rivet/manual2.4/catch.html | 20 ++
rivet/manual2.4/clock_to_rfc.html | 5 +
rivet/manual2.4/commands.html | 19 ++
rivet/manual2.4/cookie.html | 13 +
rivet/manual2.4/debug.html | 10 +
rivet/manual2.4/decode.html | 11 +
rivet/manual2.4/dio.html | 1 +
rivet/manual2.4/dio_package.html | 276 ++++++++++++++++
rivet/manual2.4/diodisplay.html | 1 +
rivet/manual2.4/diodisplay_package.html | 430 +++++++++++++++++++++++++
rivet/manual2.4/directives.html | 232 ++++++++++++++
rivet/manual2.4/encode.html | 11 +
rivet/manual2.4/entities.html | 8 +
rivet/manual2.4/env.html | 7 +
rivet/manual2.4/escape_sgml_chars.html | 7 +
rivet/manual2.4/escape_shell_command.html | 10 +
rivet/manual2.4/escape_string.html | 9 +
rivet/manual2.4/examples.html | 496 ++++++++++++++++++++++++++++
rivet/manual2.4/exit.html | 30 ++
rivet/manual2.4/fb.html | 260 +++++++++++++++
rivet/manual2.4/form.html | 17 +
rivet/manual2.4/form_package.html | 213 +++++++++++++
rivet/manual2.4/formbroker.html | 16 +
rivet/manual2.4/headers.html | 38 +++
rivet/manual2.4/help.html | 48 +++
rivet/manual2.4/html.html | 6 +
rivet/manual2.4/html_calendar.html | 25 ++
rivet/manual2.4/http_accept.html | 33 ++
rivet/manual2.4/images/acrobat.png | Bin 0 -> 391 bytes
rivet/manual2.4/images/blank.png | Bin 0 -> 374 bytes
rivet/manual2.4/images/calendar.png | Bin 0 -> 9869 bytes
rivet/manual2.4/images/caution.png | Bin 0 -> 1250 bytes
rivet/manual2.4/images/color-table.png | Bin 0 -> 70347 bytes
rivet/manual2.4/images/disk.png | Bin 0 -> 361 bytes
rivet/manual2.4/images/draft.png | Bin 0 -> 17454 bytes
rivet/manual2.4/images/home.png | Bin 0 -> 5572 bytes
rivet/manual2.4/images/important.png | Bin 0 -> 722 bytes
rivet/manual2.4/images/next.png | Bin 0 -> 924 bytes
rivet/manual2.4/images/note.png | Bin 0 -> 490 bytes
rivet/manual2.4/images/prev.png | Bin 0 -> 817 bytes
rivet/manual2.4/images/qbullet-note.png | Bin 0 -> 353 bytes
rivet/manual2.4/images/remote.png | Bin 0 -> 567 bytes
rivet/manual2.4/images/scrollup.png | Bin 0 -> 353 bytes
rivet/manual2.4/images/table.png | Bin 0 -> 3352 bytes
rivet/manual2.4/images/tip.png | Bin 0 -> 449 bytes
rivet/manual2.4/images/toc-blank.png | Bin 0 -> 318 bytes
rivet/manual2.4/images/toc-minus.png | Bin 0 -> 259 bytes
rivet/manual2.4/images/toc-plus.png | Bin 0 -> 264 bytes
rivet/manual2.4/images/up.png | Bin 0 -> 797 bytes
rivet/manual2.4/images/warning.png | Bin 0 -> 1241 bytes
rivet/manual2.4/images/word.png | Bin 0 -> 393 bytes
rivet/manual2.4/import_keyvalue_pairs.html | 16 +
rivet/manual2.4/include.html | 5 +
rivet/manual2.4/incr0.html | 13 +
rivet/manual2.4/index.html | 85 +++++
rivet/manual2.4/inspect.html | 47 +++
rivet/manual2.4/installation.html | 127 ++++++++
rivet/manual2.4/internals.html | 201 ++++++++++++
rivet/manual2.4/lassign_array.html | 18 ++
rivet/manual2.4/lempty.html | 7 +
rivet/manual2.4/lmatch.html | 14 +
rivet/manual2.4/load_cookies.html | 5 +
rivet/manual2.4/load_env.html | 10 +
rivet/manual2.4/load_headers.html | 5 +
rivet/manual2.4/load_response.html | 27 ++
rivet/manual2.4/lremove.html | 12 +
rivet/manual2.4/makeurl.html | 17 +
rivet/manual2.4/no_body.html | 5 +
rivet/manual2.4/parray.html | 6 +
rivet/manual2.4/parse.html | 5 +
rivet/manual2.4/raw_post.html | 4 +
rivet/manual2.4/read_file.html | 6 +
rivet/manual2.4/redirect.html | 21 ++
rivet/manual2.4/request.html | 162 ++++++++++
rivet/manual2.4/rivet.css | 351 ++++++++++++++++++++
rivet/manual2.4/session_package.html | 182 +++++++++++
rivet/manual2.4/shorthand.html | 13 +
rivet/manual2.4/tcl_packages.html | 11 +
rivet/manual2.4/toglyphs.html | 6 +
rivet/manual2.4/try.html | 54 ++++
rivet/manual2.4/unescape_string.html | 10 +
rivet/manual2.4/upgrading.html | 32 ++
rivet/manual2.4/upload.html | 53 +++
rivet/manual2.4/url_query.html | 9 +
rivet/manual2.4/var.html | 52 +++
rivet/manual2.4/wrap.html | 9 +
rivet/manual2.4/wrapline.html | 11 +
rivet/manual2.4/xml.html | 17 +
rivet/manual2.4/xml_calendar.html | 87 +++++
rivet/manual3.1/abort_code.html | 10 +
rivet/manual3.1/abort_page.html | 26 ++
rivet/manual3.1/apache_log_error.html | 15 +
rivet/manual3.1/apache_table.html | 62 ++++
rivet/manual3.1/asciiglyphs.html | 27 ++
rivet/manual3.1/calendar.html | 26 ++
rivet/manual3.1/calendar_package.html | 20 ++
rivet/manual3.1/catch.html | 18 ++
rivet/manual3.1/clock_to_rfc.html | 5 +
rivet/manual3.1/cmake.html | 31 ++
rivet/manual3.1/commands.html | 19 ++
rivet/manual3.1/cookie.html | 13 +
rivet/manual3.1/debug.html | 10 +
rivet/manual3.1/decode.html | 11 +
rivet/manual3.1/dio.html | 1 +
rivet/manual3.1/dio_package.html | 274 ++++++++++++++++
rivet/manual3.1/diodisplay.html | 1 +
rivet/manual3.1/diodisplay_package.html | 430 +++++++++++++++++++++++++
rivet/manual3.1/directives.html | 271 ++++++++++++++++
rivet/manual3.1/encode.html | 11 +
rivet/manual3.1/entities.html | 8 +
rivet/manual3.1/env.html | 7 +
rivet/manual3.1/escape_sgml_chars.html | 7 +
rivet/manual3.1/escape_shell_command.html | 10 +
rivet/manual3.1/escape_string.html | 9 +
rivet/manual3.1/examples.html | 497 +++++++++++++++++++++++++++++
rivet/manual3.1/exit.html | 34 ++
rivet/manual3.1/fb.html | 259 +++++++++++++++
rivet/manual3.1/form.html | 17 +
rivet/manual3.1/form_package.html | 213 +++++++++++++
rivet/manual3.1/formbroker.html | 16 +
rivet/manual3.1/headers.html | 38 +++
rivet/manual3.1/help.html | 48 +++
rivet/manual3.1/html.html | 6 +
rivet/manual3.1/html_calendar.html | 25 ++
rivet/manual3.1/http_accept.html | 33 ++
rivet/manual3.1/images/acrobat.png | Bin 0 -> 391 bytes
rivet/manual3.1/images/blank.png | Bin 0 -> 374 bytes
rivet/manual3.1/images/calendar.png | Bin 0 -> 9869 bytes
rivet/manual3.1/images/caution.png | Bin 0 -> 1250 bytes
rivet/manual3.1/images/color-table.png | Bin 0 -> 59362 bytes
rivet/manual3.1/images/disk.png | Bin 0 -> 361 bytes
rivet/manual3.1/images/draft.png | Bin 0 -> 17454 bytes
rivet/manual3.1/images/home.png | Bin 0 -> 5572 bytes
rivet/manual3.1/images/important.png | Bin 0 -> 722 bytes
rivet/manual3.1/images/next.png | Bin 0 -> 924 bytes
rivet/manual3.1/images/note.png | Bin 0 -> 490 bytes
rivet/manual3.1/images/prev.png | Bin 0 -> 817 bytes
rivet/manual3.1/images/qbullet-note.png | Bin 0 -> 353 bytes
rivet/manual3.1/images/remote.png | Bin 0 -> 567 bytes
rivet/manual3.1/images/scrollup.png | Bin 0 -> 353 bytes
rivet/manual3.1/images/table.png | Bin 0 -> 3352 bytes
rivet/manual3.1/images/tip.png | Bin 0 -> 449 bytes
rivet/manual3.1/images/toc-blank.png | Bin 0 -> 318 bytes
rivet/manual3.1/images/toc-minus.png | Bin 0 -> 259 bytes
rivet/manual3.1/images/toc-plus.png | Bin 0 -> 264 bytes
rivet/manual3.1/images/up.png | Bin 0 -> 797 bytes
rivet/manual3.1/images/warning.png | Bin 0 -> 1241 bytes
rivet/manual3.1/images/word.png | Bin 0 -> 393 bytes
rivet/manual3.1/import_keyvalue_pairs.html | 16 +
rivet/manual3.1/include.html | 5 +
rivet/manual3.1/incr0.html | 13 +
rivet/manual3.1/index.html | 105 ++++++
rivet/manual3.1/inspect.html | 47 +++
rivet/manual3.1/installation.html | 169 ++++++++++
rivet/manual3.1/internals.html | 315 ++++++++++++++++++
rivet/manual3.1/lassign_array.html | 18 ++
rivet/manual3.1/lazybridge.html | 407 +++++++++++++++++++++++
rivet/manual3.1/lempty.html | 7 +
rivet/manual3.1/lmatch.html | 14 +
rivet/manual3.1/load_cookies.html | 5 +
rivet/manual3.1/load_env.html | 10 +
rivet/manual3.1/load_headers.html | 5 +
rivet/manual3.1/load_response.html | 27 ++
rivet/manual3.1/lremove.html | 12 +
rivet/manual3.1/makeurl.html | 17 +
rivet/manual3.1/no_body.html | 5 +
rivet/manual3.1/parray.html | 6 +
rivet/manual3.1/parse.html | 5 +
rivet/manual3.1/processing.html | 225 +++++++++++++
rivet/manual3.1/raw_post.html | 4 +
rivet/manual3.1/read_file.html | 6 +
rivet/manual3.1/redirect.html | 25 ++
rivet/manual3.1/request.html | 191 +++++++++++
rivet/manual3.1/rivet.css | 391 +++++++++++++++++++++++
rivet/manual3.1/session_package.html | 182 +++++++++++
rivet/manual3.1/shorthand.html | 13 +
rivet/manual3.1/tcl_packages.html | 4 +
rivet/manual3.1/toglyphs.html | 6 +
rivet/manual3.1/try.html | 58 ++++
rivet/manual3.1/unescape_string.html | 10 +
rivet/manual3.1/upload.html | 53 +++
rivet/manual3.1/url_script.html | 7 +
rivet/manual3.1/var.html | 52 +++
rivet/manual3.1/wrap.html | 9 +
rivet/manual3.1/wrapline.html | 11 +
rivet/manual3.1/xml.html | 28 ++
rivet/manual3.1/xml_calendar.html | 87 +++++
194 files changed, 9231 insertions(+)
diff --git a/rivet/manual2.4/abort_code.html b/rivet/manual2.4/abort_code.html
new file mode 100644
index 0000000..c0a5702
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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><bod [...]
+ 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="idm547"></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="to [...]
diff --git a/rivet/manual2.4/abort_page.html b/rivet/manual2.4/abort_page.html
new file mode 100644
index 0000000..49dcd37
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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"></he [...]
+ 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 [...]
+ 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="Rivet Apache Directives">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="Rivet Apache Directives">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" vali [...]
diff --git a/rivet/manual2.4/apache_log_error.html b/rivet/manual2.4/apache_log_error.html
new file mode 100644
index 0000000..cfd3043
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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=" [...]
diff --git a/rivet/manual2.4/apache_table.html b/rivet/manual2.4/apache_table.html
new file mode 100644
index 0000000..23df7f9
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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 [...]
+ </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 [...]
+ <div class="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 [...]
+ </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 cl [...]
+ </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 cla [...]
+ </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 [...]
diff --git a/rivet/manual2.4/asciiglyphs.html b/rivet/manual2.4/asciiglyphs.html
new file mode 100644
index 0000000..7dd3d2d
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="html_calendar.html" title="HtmlCalendar"><link rel="next" href="toglyphs.html" title="toGlyphs"></head><body bgcolor="white" text="bl [...]
+ 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="idm3935"></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="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="toglyphs.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= [...]
diff --git a/rivet/manual2.4/calendar.html b/rivet/manual2.4/calendar.html
new file mode 100644
index 0000000..a564f4b
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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><bod [...]
+ 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="idm3737"></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></t [...]
diff --git a/rivet/manual2.4/calendar_package.html b/rivet/manual2.4/calendar_package.html
new file mode 100644
index 0000000..0a3fca1
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="form_package.html" title="form"><link rel="next" href="calendar.html" title="Calendar"></head><body bgcolor="white" text="black" [...]
+ 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 acce [...]
diff --git a/rivet/manual2.4/catch.html b/rivet/manual2.4/catch.html
new file mode 100644
index 0000000..e91ff72
--- /dev/null
+++ b/rivet/manual2.4/catch.html
@@ -0,0 +1,20 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ a special way fake error conditions resulting from calls to <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span>
+ and <span style="font-family:monospace"><span class="command"><strong>abort_page</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 style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span> wraps the core language's same 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 to 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% [...]
diff --git a/rivet/manual2.4/clock_to_rfc.html b/rivet/manual2.4/clock_to_rfc.html
new file mode 100644
index 0000000..7b23dad
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="whi [...]
+ 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 [...]
diff --git a/rivet/manual2.4/commands.html b/rivet/manual2.4/commands.html
new file mode 100644
index 0000000..05891c4
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="directives.html" title="Rivet Apache Directives"><link rel="next" href="shorthand.html" title="<?= ... ?>" [...]
+ Starting with version 2.1.0 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="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="shorthand.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Rivet Apache Directives </td><td width="20%" align="center"><a accesskey= [...]
diff --git a/rivet/manual2.4/cookie.html b/rivet/manual2.4/cookie.html
new file mode 100644
index 0000000..94cb594
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 bgcolo [...]
+ <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" [...]
diff --git a/rivet/manual2.4/debug.html b/rivet/manual2.4/debug.html
new file mode 100644
index 0000000..bb183a9
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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" l [...]
+ 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;"> [...]
+ 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 < [...]
diff --git a/rivet/manual2.4/decode.html b/rivet/manual2.4/decode.html
new file mode 100644
index 0000000..9799b77
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="entities.html" title="RivetEntities"><link rel="prev" href="encode.html" title="encode"><link rel="next" href="formbroker.html" title="The Form Broker"></head><body bgcolor="white" text="black" [...]
+ 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 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="formbroker.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" vali [...]
diff --git a/rivet/manual2.4/dio.html b/rivet/manual2.4/dio.html
new file mode 100644
index 0000000..c51eb20
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="tcl_packages.html" title="Rivet Tcl Packages"><link rel="next" href="dio_package.html" title="DIO"></head><body [...]
diff --git a/rivet/manual2.4/dio_package.html b/rivet/manual2.4/dio_package.html
new file mode 100644
index 0000000..25eb6ad
--- /dev/null
+++ b/rivet/manual2.4/dio_package.html
@@ -0,0 +1,276 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 Int [...]
+ <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="idm1862"></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="re [...]
+ 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 ; paddi [...]
+ 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 ; paddi [...]
+ 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="m [...]
+ 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</ [...]
+ 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=" [...]
+ 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="idm1932"></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> [...]
+ 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: [...]
+ 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="mar [...]
+ 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 . [...]
+ 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:mon [...]
+ 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:monos [...]
+ 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: [...]
+ 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-weig [...]
+ 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; f [...]
+ 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: [...]
+ 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: [...]
+ 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: b [...]
+ 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: [...]
+ 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 ; p [...]
+ 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-weigh [...]
+ 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: b [...]
+ 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 ; pad [...]
+ 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: b [...]
+ 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 [...]
+ 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 ; pad [...]
+ 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 ; padd [...]
+ 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:monospac [...]
+ 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: b [...]
+ 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 styl [...]
+ 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: [...]
+ 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-weigh [...]
+ 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: [...]
+ 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: [...]
+ 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: [...]
+ 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:monospac [...]
+ 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: b [...]
+ 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>resultO [...]
+ 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 ; paddin [...]
+ 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-weigh [...]
+ 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-weigh [...]
+ 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: [...]
+ 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: [...]
+ 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:monos [...]
+ 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:mo [...]
+ 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 [...]
+ 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: b [...]
+ 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= [...]
diff --git a/rivet/manual2.4/diodisplay.html b/rivet/manual2.4/diodisplay.html
new file mode 100644
index 0000000..ebcf3fa
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="dio_package.html" title="DIO"><link rel="next" href="diodisplay_package.html" title="DIODis [...]
diff --git a/rivet/manual2.4/diodisplay_package.html b/rivet/manual2.4/diodisplay_package.html
new file mode 100644
index 0000000..d6ffd5b
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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="idm2472"></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="idm2575"></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-we [...]
+ </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; f [...]
+ </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="idm2888"></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="idm2969"></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:mono [...]
+ 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="idm3027"></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="le [...]
diff --git a/rivet/manual2.4/directives.html b/rivet/manual2.4/directives.html
new file mode 100644
index 0000000..08849ce
--- /dev/null
+++ b/rivet/manual2.4/directives.html
@@ -0,0 +1,232 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Rivet Apache Directives</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="request.html" title="Apache Child Processes Lifecycle and Request Processing"><link rel="next" href="commands.html" title [...]
+ Rivet directives are used within the Apache httpd server
+ configuration to set up the environment where Rivet script
+ will be run. Their precedence is as follows:
+ <span style="font-family:monospace"><span class="command"><strong>RivetDirConf</strong></span></span>,
+ <span style="font-family:monospace"><span class="command"><strong>RivetUserConf</strong></span></span>,
+ <span style="font-family:monospace"><span class="command"><strong>RivetServerConf</strong></span></span>, meaning that DirConf will
+ override UserConf, which will in turn override ServerConf.
+ </p></div><div class="section"><div class="titlepage"></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-weight:bold ; font-family:monospace">RivetServerConf</span> (<span style="font-family:monospace; font-weight: bold;">CacheSize</span> | <span style="font-family:monospace; font-weight: bold;">ServerInitScript</span> | <span style="font-family:monospace; font-weight: bold;">GlobalInitScript</span> | <span style="font-fam [...]
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ <span style="font-family:monospace"><span class="command"><strong>RivetServerConf</strong></span></span> specifies a global
+ option that is valid for the whole server. If you have a
+ virtual host, in some cases, the option specified in the
+ virtualhost takes precedence over the 'global' version.
+ </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;">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;">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">
+ Tcl script which is to run when the master interpreter is created.
+ Namespaces, variables and packages loaded during this stage will
+ be copied later on in the startup process, when child
+ processes are created.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option is only available at the global level.
+ </div><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 before the Apache parent process spawns
+ the children that actually will serve the requests coming from
+ the network. During this stage Apache is still running as a
+ single process, so this is the right place for doing
+ initializations or loading packages. Since this
+ script will be running in a single process environment (from the
+ Apache point of view) <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span>
+ is also the right place for doing anything needs to avoid
+ resource concurrency among processes (e.g. the creation and
+ initialization of an IPC system)
+ </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;">GlobalInitScript</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">
+ Tcl script run as part of a child process initialization.
+ If the option SeparateVirtualInterp is not used this is
+ the right place where file handles, database connections or sockets can
+ be opened.
+ The argument <em class="replaceable"><code>script</code></em>
+ is an actual Tcl script, so to run a file, you would
+ do: <pre class="programlisting">RivetServerConf GlobalInitScript "source /var/www/foobar.tcl"</pre>
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option is ignored in virtual hosts.
+ </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;">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;">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;">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 server parsed (.rvt) page.
+ </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;">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;">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;">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">
+ The execution of a can be interrupted by
+ invoking <a class="xref" href="abort_page.html" title="abort_page">abort_page</a>. If
+ an AbortScript is defined for the page
+ being generated, control is passed to it. 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;">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;">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><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;">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;">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;">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, by nature, only available at the global level</div></div></dd></dl></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">RivetDirConf</span> (<span style="font-family:monospace; font-weight: bold;">BeforeScript</span> | <span style="font-family:monospace; font-weight: bold;">AfterScript</span> | <span style="font-family:monospace; font-weight: bold;">ErrorScript</span> | <span style="font-family:monos [...]
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ These options are the same as for
+ <span style="font-family:monospace"><span class="command"><strong>RivetServerConf</strong></span></span>, except that they are
+ only valid for the directory where they are specified, and
+ its subdirectories. It may be specified in <span style="font-family:monospace"><span class="command"><strong>Directory</strong></span></span>
+ sections.
+ </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">RivetUserConf</span> (<span style="font-family:monospace; font-weight: bold;">BeforeScript</span> | <span style="font-family:monospace; font-weight: bold;">AfterScript</span> | <span style="font-family:monospace; font-weight: bold;">ErrorScript</span> | <span style="font-family:mono [...]
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ These options are the same as for
+ <span style="font-family:monospace"><span class="command"><strong>RivetServerConf</strong></span></span>, except that they are
+ only valid for the directory where they are specified, and
+ its subdirectories.
+ </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="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="commands.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 Proce [...]
diff --git a/rivet/manual2.4/encode.html b/rivet/manual2.4/encode.html
new file mode 100644
index 0000000..ab1188d
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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 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>< [...]
diff --git a/rivet/manual2.4/entities.html b/rivet/manual2.4/entities.html
new file mode 100644
index 0000000..12e4877
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="toglyphs.html" title="toGlyphs"><link rel="next" href="encode.html" title="encode"></head><body bgcolor="white" text="black" link=" [...]
+ 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="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="encode.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="inde [...]
diff --git a/rivet/manual2.4/env.html b/rivet/manual2.4/env.html
new file mode 100644
index 0000000..92aa94d
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 bgcolo [...]
+ 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="idm854"></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=" [...]
diff --git a/rivet/manual2.4/escape_sgml_chars.html b/rivet/manual2.4/escape_sgml_chars.html
new file mode 100644
index 0000000..1287f21
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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"></h [...]
+ 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= [...]
diff --git a/rivet/manual2.4/escape_shell_command.html b/rivet/manual2.4/escape_shell_command.html
new file mode 100644
index 0000000..c461a8c
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="e [...]
+ 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" [...]
diff --git a/rivet/manual2.4/escape_string.html b/rivet/manual2.4/escape_string.html
new file mode 100644
index 0000000..2b8fdf2
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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"></hea [...]
+ 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 [...]
diff --git a/rivet/manual2.4/examples.html b/rivet/manual2.4/examples.html
new file mode 100644
index 0000000..6b49434
--- /dev/null
+++ b/rivet/manual2.4/examples.html
@@ -0,0 +1,496 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="xml.html" title="xml"><link rel="next" href="tcl_packages.html" title="Rivet Tcl Packages"></head><body bgcolor="white" text=" [...]
+ 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="idm1719"></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 color-table.tcl and put the following code in it
+ </p><pre class="programlisting">puts "<html><head>"
+puts "<style>\n td { font-size: 12px; }\n td.bright { color: #eee; }\n td.dark { color: #222; }\n</style>"
+puts "</head><body>"
+puts "<table>"
+
+# we create a 8x8 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 - $i + $j) / 16)]
+ set b [expr int(255 * ($i + 8 - $j) / 16)]
+
+# 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)] > 128} {
+ set cssclass "dark"
+ } else {
+ set cssclass "bright"
+ }
+
+ puts [format "<td bgcolor=\"%02x%02x%02x\" class=\"%s\">$r $g $b</td>" $r $g $b $cssclass]
+ }
+ puts "</tr>"
+}
+puts "</table>"
+puts "</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="calexample"></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 ac [...]
diff --git a/rivet/manual2.4/exit.html b/rivet/manual2.4/exit.html
new file mode 100644
index 0000000..2870686
--- /dev/null
+++ b/rivet/manual2.4/exit.html
@@ -0,0 +1,30 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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=" [...]
+ 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 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%">
+ We support this command in order to have a gentle way to terminate a request processing
+ before actually exit the child process and avoid an abrupt interruption of a request that
+ might leave an application in a inconsistent state. In some cases <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>
+ could be the only way to exit a process and force the Apache HTTP web server to start
+ a fresh one. Moreover the core <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> could be called from third parties
+ software and you may not be aware of it. We thus decided to trap this command and give it
+ the most gentle behavior still preserving the its basic purpose.
+ </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></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=" [...]
diff --git a/rivet/manual2.4/fb.html b/rivet/manual2.4/fb.html
new file mode 100644
index 0000000..d61823f
--- /dev/null
+++ b/rivet/manual2.4/fb.html
@@ -0,0 +1,260 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 bg [...]
+ 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; [...]
+ 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 <span style="font-family:monospace"><span class="command"><strong>create</strong></span></span>. Each descriptor
+ is a list of parameter or parameter-value pairs whose order has as only requirement
+ to begin with the <span style="font-family:monospace"><span class="command"><strong>{variable_name variable_type}</strong></span></span> pair.
+ A formbroker object handles natively integer, unsigned, string, boolean and email data types.
+ The programmer can defined new data type and provide in the descriptor a
+ reference to a validating procedure for that type.
+ </p><p style="width:90%">
+ The optional ?<span style="font-family:monospace; font-weight: bold;">-quoting quoting_procedure</span>? switch assigns a procedure to
+ be called to quote the form 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="idm4030"></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 [...]
+ 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">% 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- [...]
+ 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">% 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:mon [...]
+ 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. [...]
+ The method resets the object to its initial defaults
+ </div></div></dd></dl></div></div><div class="refsect1"><a name="idm4095"></a><h2>Writing a variable form 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. The dictionary
+ keys are listed
+ </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%" a [...]
diff --git a/rivet/manual2.4/form.html b/rivet/manual2.4/form.html
new file mode 100644
index 0000000..5f19577
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="session_package.html" title="Session Package"><link rel="next" href="form_package.html" title="form" [...]
+ 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= [...]
diff --git a/rivet/manual2.4/form_package.html b/rivet/manual2.4/form_package.html
new file mode 100644
index 0000000..0c42fcb
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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" [...]
+ creates and returns a new Tcl command named <em class="replaceable"><code>form_name</code></em>.
+ </p><div class="refsect2"><a name="idm3277"></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> [...]
+ 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 ; pa [...]
+ 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 [...]
+ 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="idm3309"></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 [...]
+ 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="idm3332"></a><h2>Subcommands</h2><div class="refsect2"><a name="idm3334"></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-fam [...]
+ 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="idm3355"></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-we [...]
+ 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=" [...]
+ 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><di [...]
+ 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-botto [...]
+ 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="idm3387"></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="idm3394"></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;">n [...]
+ 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="idm3408"></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-we [...]
+ Option description
+ </div></div></dd></dl></div></div></div><div class="refsect2"><a name="idm3417"></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; f [...]
+ 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="idm3432"></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</ [...]
+ 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="m [...]
+ 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="idm3459"></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: bol [...]
+ 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="idm3477"></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-wei [...]
+ 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="idm3495"></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</ [...]
+ 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="m [...]
+ 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="idm3516"></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-weigh [...]
+ 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="idm3525"></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; [...]
+ 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="idm3534"></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; [...]
+ 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="idm3547"></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 [...]
+ 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="idm3558"></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;" [...]
+ 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="idm3567"></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;" [...]
+ Emits an image input field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3576"></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;" [...]
+ Emits a radiobutton input field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3585"></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;" [...]
+ Emits an HTML 5 "color" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3594"></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;"> [...]
+ Emits an HTML 5 "date" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3603"></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: bol [...]
+ Emits an HTML 5 "datetime" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3612"></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-weigh [...]
+ Emits an HTML 5 "datetime_local" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3621"></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;" [...]
+ Emits an HTML 5 "email" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3630"></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;"> [...]
+ Emits an HTML 5 "file" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3639"></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;" [...]
+ Emits an HTML 5 "month" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3648"></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; [...]
+ Emits an HTML 5 "number" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3657"></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;" [...]
+ Emits an HTML 5 "range" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3666"></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; [...]
+ Emits an HTML 5 "search" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3675"></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;">n [...]
+ Emits an HTML 5 "tel" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3684"></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;"> [...]
+ Emits an HTML 5 "time" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3693"></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;">n [...]
+ Emits an HTML 5 "url" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3702"></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;"> [...]
+ 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 widt [...]
diff --git a/rivet/manual2.4/formbroker.html b/rivet/manual2.4/formbroker.html
new file mode 100644
index 0000000..6f91256
--- /dev/null
+++ b/rivet/manual2.4/formbroker.html
@@ -0,0 +1,16 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="decode.html" title="decode"><link rel="next" href="fb.html" title="FormBroker"></head><body bgcolor="white" text="black" link="#0 [...]
+ The <span style="font-family:monospace"><span class="command"><strong>FormBroker</strong></span></span> package creates instances of
+ objects representing a form data description. These objects offer a
+ simple interface of methods meant to validate and control data
+ as typically posted through an HTML form,
+ thus data represented through the association of form variables
+ with their values as returned, for example,
+ by the <span style="font-family:monospace"><span class="command"><strong>::rivet::load_response</strong></span></span> command
+ </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
+ could be improved with the purpose of shielding the <span style="font-family:monospace"><span class="command"><strong>FormBroker</strong></span></span>
+ internals from a data validation procedure.
+ </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="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="fb.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" [...]
diff --git a/rivet/manual2.4/headers.html b/rivet/manual2.4/headers.html
new file mode 100644
index 0000000..6f4d494
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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" l [...]
+ 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=" [...]
+ </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="re [...]
+ </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="re [...]
+ </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= [...]
diff --git a/rivet/manual2.4/help.html b/rivet/manual2.4/help.html
new file mode 100644
index 0000000..a0b36c1
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="fb.html" title="FormBroker"><link rel="next" href="internals.html" title="Rivet Internals"></head><body bgcolor="whit [...]
+ 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="idm4115"></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="idm4135"></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="idm4139"></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="idm4142"></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.h [...]
diff --git a/rivet/manual2.4/html.html b/rivet/manual2.4/html.html
new file mode 100644
index 0000000..d2297b2
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="whit [...]
+ 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" [...]
diff --git a/rivet/manual2.4/html_calendar.html b/rivet/manual2.4/html_calendar.html
new file mode 100644
index 0000000..58dd28c
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="calendar_package.html" title="Calendar Package"><link rel="prev" href="xml_calendar.html" title="XmlCalendar"><link rel="next" href="asciiglyphs.html" title="AsciiGlyphs"></head><body bgco [...]
+ 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="idm3913"></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="asciiglyphs.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left [...]
diff --git a/rivet/manual2.4/http_accept.html b/rivet/manual2.4/http_accept.html
new file mode 100644
index 0000000..68832cc
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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"></hea [...]
+ ?<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="idm1038"></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-Language)]
+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="l [...]
diff --git a/rivet/manual2.4/images/acrobat.png b/rivet/manual2.4/images/acrobat.png
new file mode 100644
index 0000000..6907b4e
Binary files /dev/null and b/rivet/manual2.4/images/acrobat.png differ
diff --git a/rivet/manual2.4/images/blank.png b/rivet/manual2.4/images/blank.png
new file mode 100644
index 0000000..764bf4f
Binary files /dev/null and b/rivet/manual2.4/images/blank.png differ
diff --git a/rivet/manual2.4/images/calendar.png b/rivet/manual2.4/images/calendar.png
new file mode 100644
index 0000000..54f9f33
Binary files /dev/null and b/rivet/manual2.4/images/calendar.png differ
diff --git a/rivet/manual2.4/images/caution.png b/rivet/manual2.4/images/caution.png
new file mode 100644
index 0000000..5b7809c
Binary files /dev/null and b/rivet/manual2.4/images/caution.png differ
diff --git a/rivet/manual2.4/images/color-table.png b/rivet/manual2.4/images/color-table.png
new file mode 100644
index 0000000..c9aaab1
Binary files /dev/null and b/rivet/manual2.4/images/color-table.png differ
diff --git a/rivet/manual2.4/images/disk.png b/rivet/manual2.4/images/disk.png
new file mode 100644
index 0000000..772566e
Binary files /dev/null and b/rivet/manual2.4/images/disk.png differ
diff --git a/rivet/manual2.4/images/draft.png b/rivet/manual2.4/images/draft.png
new file mode 100644
index 0000000..0084708
Binary files /dev/null and b/rivet/manual2.4/images/draft.png differ
diff --git a/rivet/manual2.4/images/home.png b/rivet/manual2.4/images/home.png
new file mode 100644
index 0000000..eb904c8
Binary files /dev/null and b/rivet/manual2.4/images/home.png differ
diff --git a/rivet/manual2.4/images/important.png b/rivet/manual2.4/images/important.png
new file mode 100644
index 0000000..12c90f6
Binary files /dev/null and b/rivet/manual2.4/images/important.png differ
diff --git a/rivet/manual2.4/images/next.png b/rivet/manual2.4/images/next.png
new file mode 100644
index 0000000..0f4d18a
Binary files /dev/null and b/rivet/manual2.4/images/next.png differ
diff --git a/rivet/manual2.4/images/note.png b/rivet/manual2.4/images/note.png
new file mode 100644
index 0000000..d0c3c64
Binary files /dev/null and b/rivet/manual2.4/images/note.png differ
diff --git a/rivet/manual2.4/images/prev.png b/rivet/manual2.4/images/prev.png
new file mode 100644
index 0000000..dd3b6a2
Binary files /dev/null and b/rivet/manual2.4/images/prev.png differ
diff --git a/rivet/manual2.4/images/qbullet-note.png b/rivet/manual2.4/images/qbullet-note.png
new file mode 100644
index 0000000..88c30c0
Binary files /dev/null and b/rivet/manual2.4/images/qbullet-note.png differ
diff --git a/rivet/manual2.4/images/remote.png b/rivet/manual2.4/images/remote.png
new file mode 100644
index 0000000..d76b0f1
Binary files /dev/null and b/rivet/manual2.4/images/remote.png differ
diff --git a/rivet/manual2.4/images/scrollup.png b/rivet/manual2.4/images/scrollup.png
new file mode 100644
index 0000000..336232a
Binary files /dev/null and b/rivet/manual2.4/images/scrollup.png differ
diff --git a/rivet/manual2.4/images/table.png b/rivet/manual2.4/images/table.png
new file mode 100644
index 0000000..6ec425e
Binary files /dev/null and b/rivet/manual2.4/images/table.png differ
diff --git a/rivet/manual2.4/images/tip.png b/rivet/manual2.4/images/tip.png
new file mode 100644
index 0000000..5c4aab3
Binary files /dev/null and b/rivet/manual2.4/images/tip.png differ
diff --git a/rivet/manual2.4/images/toc-blank.png b/rivet/manual2.4/images/toc-blank.png
new file mode 100644
index 0000000..6ffad17
Binary files /dev/null and b/rivet/manual2.4/images/toc-blank.png differ
diff --git a/rivet/manual2.4/images/toc-minus.png b/rivet/manual2.4/images/toc-minus.png
new file mode 100644
index 0000000..abbb020
Binary files /dev/null and b/rivet/manual2.4/images/toc-minus.png differ
diff --git a/rivet/manual2.4/images/toc-plus.png b/rivet/manual2.4/images/toc-plus.png
new file mode 100644
index 0000000..941312c
Binary files /dev/null and b/rivet/manual2.4/images/toc-plus.png differ
diff --git a/rivet/manual2.4/images/up.png b/rivet/manual2.4/images/up.png
new file mode 100644
index 0000000..f9f8312
Binary files /dev/null and b/rivet/manual2.4/images/up.png differ
diff --git a/rivet/manual2.4/images/warning.png b/rivet/manual2.4/images/warning.png
new file mode 100644
index 0000000..1c33db8
Binary files /dev/null and b/rivet/manual2.4/images/warning.png differ
diff --git a/rivet/manual2.4/images/word.png b/rivet/manual2.4/images/word.png
new file mode 100644
index 0000000..4189771
Binary files /dev/null and b/rivet/manual2.4/images/word.png differ
diff --git a/rivet/manual2.4/import_keyvalue_pairs.html b/rivet/manual2.4/import_keyvalue_pairs.html
new file mode 100644
index 0000000..5f1eaa5
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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><b [...]
+ 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" [...]
diff --git a/rivet/manual2.4/include.html b/rivet/manual2.4/include.html
new file mode 100644
index 0000000..1fb46c8
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="incr0.html" title="incr0"></head> [...]
+ 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="incr0.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" vali [...]
diff --git a/rivet/manual2.4/incr0.html b/rivet/manual2.4/incr0.html
new file mode 100644
index 0000000..78fafd1
--- /dev/null
+++ b/rivet/manual2.4/incr0.html
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>incr0</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="include.html" title="include"><link rel="next" href="inspect.html" title="inspect"></head><body bgcolor="white" text [...]
+ Increment a variable
+ <em class="replaceable"><code>varname</code></em> by
+ <em class="replaceable"><code>num</code></em>. If the
+ variable doesn't exist, create it instead of returning an
+ error.
+ </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">
+ incr0 functionality is provided by the native <span style="font-family:monospace"><span class="command"><strong>incr</strong></span></span> in
+ Tcl >= 8.5, therefore this command is deprecated and kept as an
+ interpreter alias only for compatibility. As such <span style="font-family:monospace"><span class="command"><strong>incr0</strong></span></span>
+ wasn't moved to the ::rivet namespace and
+ it will be removed in future versions of Rivet.
+ </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="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="inspect.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" [...]
diff --git a/rivet/manual2.4/index.html b/rivet/manual2.4/index.html
new file mode 100644
index 0000000..70a69c3
--- /dev/null
+++ b/rivet/manual2.4/index.html
@@ -0,0 +1,85 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="next" href="installation.html" title="Apache Rivet Installation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" s [...]
+ <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-2018 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</a></span></dt><dt><span class="section"><a href="installation.html">Apache Rivet Installation</a></span></dt><dt><span class="section"><a href="request.html">Apache Child Processes Lifecycle and Reques [...]
+ 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 [...]
+ a special way fake error conditions resulting from calls to <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span>
+ and <span style="font-family:monospace"><span class="command"><strong>abort_page</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>< [...]
+ 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 [...]
+ 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> [...]
+ Read the entire contents of a file and return it as a string.
+ </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_query.html">url_query</a></span><span class="refpurpose"> — builds a URL query from parameter-value pairs</span></dt> [...]
+ 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="d [...]
+ print large ASCII glyphs
+ </span></dt><dt><span class="section"><a href="asciiglyphs.html#idm3935">Example</a></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#idm3940">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="formbroker.html">The Form Broker</a></span></dt><dd><dl><dt><span class="section"><a href="formbroker.html#idm3980">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#idm4108">Mailing Lists</a></span></dt><dt><span class="section"><a href="help.html#idm4115">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#idm4135">Bug Tracking System</a></span></dt><dt><span class="section"><a h [...]
+ Document released as part of Rivet 2.4.0 (2018-11-24 11:03:21+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</h2></div></div></div><p style="width:90%">
+ Apache Rivet is a system for creating dynamic web content via a
+ programming language integrated with Apache Web Server. 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). In order to
+ meet these goals, we have chosen the Tcl programming language to
+ combine with the Apache Web Server.
+ </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="idm19"></a>New commands in Rivet 2.4</h3></div></div></div><p style="width:90%">
+ Rivet 2.4 introduces 2 new commands <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>
+ and <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span>
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> was introduced to help mod_rivet to
+ give the command <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> a more sensible behavior within
+ the context of the Apache HTTP Web Server. In fact the core command has
+ become an alias of <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> which interrupts the
+ script execution and hands control to any <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>,
+ completes the request and just before returning to the web server framework terminates
+ the child process by calling <span style="font-family:monospace"><span class="command"><strong>Tcl_Exit</strong></span></span></li><li class="listitem">
+ Since <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>
+ interrupt a script execution returning a <span class="emphasis"><em>TCL_ERROR</em></span> code
+ any call to a <span style="font-family:monospace"><span class="command"><strong>catch</strong></span></span> construct would trap this error and AbortScript
+ could be executed only by throwing the error condition again. We introduced the
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span> in order to simplify these operations.
+ If any real error occurs the procedure returns
+ 1 and fills the optional arguments with their expected values, otherwise
+ execution is interrupted control passed on to
+ <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span></li></ul></div></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%" ali [...]
diff --git a/rivet/manual2.4/inspect.html b/rivet/manual2.4/inspect.html
new file mode 100644
index 0000000..5347088
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="incr0.html" title="incr0"><link rel="next" href="lassign_array.html" title="lassign_array"></head><body bgcolor="w [...]
+ <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" [...]
diff --git a/rivet/manual2.4/installation.html b/rivet/manual2.4/installation.html
new file mode 100644
index 0000000..06ddafa
--- /dev/null
+++ b/rivet/manual2.4/installation.html
@@ -0,0 +1,127 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet Installation</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="index.html" title="Apache Rivet"><link rel="next" href="request.html" title="Apache Child Processes Lifecycle and Reque [...]
+ Rivet 2.4 runs with the Apache 2.2.x (now deprecated) and 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%">
+ Currently there is no way to run Apache Rivet 2.4 on Windows© because
+ Rivet currently requires the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork</a>, which
+ is supported only on Unix/Linux systems. Efforts are under way to extend the support to the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/worker.html" target="_top">worker</a>
+ and the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/mpm_winnt.html" target="_top">winnt</a> MPMs.
+ Check our
+ <a class="ulink" href="http://tcl.apache.org/rivet/html/about.html" target="_top">development mailing list</a>
+ for the latests updates about Rivet development
+ </p><p style="width:90%">
+ If you need to compile Apache Rivet yourself this is the procedure to follow
+ </p><ol class="procedure" type="1"><li class="step"><p class="title"><b>Install Tcl</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>
+ shell (<span style="font-family:monospace"><span class="command"><strong>tclsh</strong></span></span>), its runtime and
+ development libraries (≥8.5.10) have to be installed. Building Rivet you will
+ have to tell the scripts where the Tcl libraries are located via the
+ --with-tcl option to <span style="font-family:monospace"><span class="command"><strong>configure</strong></span></span> (see below).
+ </p></li><li class="step"><p class="title"><b>Get Rivet</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></li><li class="step"><p class="title"><b>Get and Install Apache Sources</b></p><p style="width:90%">
+ Rivet needs some of the include (.h) files shipped with the webserver source code.
+ The easiest way to get them is to download the Apache source.
+ You can rebuild the Apache Web Server having mod_rivet linked statically
+ but the regular course of action is to build mod_rivet separately and then dynamically
+ loaded (as shared library) into the Web Server.
+ We recommend that you follow this approach for maximum flexibility.
+ We will tell Rivet where it is 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%">
+ The source code for the Apache web server may be found by following the links here:
+ <a class="ulink" href="http://httpd.apache.org/" target="_top">http://httpd.apache.org/</a>.
+ </p></li><li class="step"><p class="title"><b>Uncompress Sources</b></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-X.X.X.tar.gz
+tar -xvf rivet-X.X.X.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%">
+ On Linux or Unix systems, 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-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 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 tells the install script where Rivet's Tcl packages have to be copied.
+ </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
+ </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
+ changes this default (see also <a class="link" href="directives.html" title="Rivet Apache Directives">Rivet Directives</a>)
+ </div></div></dd><dt><span class="term">--disable-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 programmer to
+ fully qualify <a class="link" href="commands.html" title="Rivet Tcl Commands and Variables">these commands</a>
+ </div></div></dd><dt><span class="term">--disable-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">
+ Likewise commands in the Rivet's namespace when exported are then by default imported
+ into the global namespace for compatibility with previous version of Rivet.
+ (Enabling the import of Rivet's commands overrides the switch --disable-rivet-commands-export
+ and forces the export from <code class="code">::rivet</code>). This switch overrides the default and
+ prevents the import into the global namespace
+ </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 2.x server, using tcl8.5 and
+ specifying a custom name for the apxs program.
+ </p><pre class="programlisting">./configure --with-tcl=/usr/lib/tcl8.5/ --with-tclsh=/usr/bin/tclsh8.5 \
+ --with-apxs=/usr/bin/apxs2 --with-apache=/usr --with-apache-version=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="Rivet Apache Directives">the section called “Rivet Apache Directives”</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="request.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet </td><td width="20%" align="center"><a accesskey="h" href= [...]
diff --git a/rivet/manual2.4/internals.html b/rivet/manual2.4/internals.html
new file mode 100644
index 0000000..4a6f889
--- /dev/null
+++ b/rivet/manual2.4/internals.html
@@ -0,0 +1,201 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="help.html" title="Resources - How to Get Help"><link rel="next" href="upgrading.html" title="Upgrading from mod_dtcl or NeoWebScr [...]
+ 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="idm4154"></a>Initialization</h3></div></div></div><p style="width:90%">
+ When Apache is started, (or when child Apache processes are
+ started if a threaded Tcl is used),
+ <code class="function">Rivet_InitTclStuff</code> is called, which
+ creates a new interpreter, or one interpreter per virtual
+ host, depending on the configuration. It also initializes
+ various things, like the <span class="structname">RivetChan</span>
+ channel system, creates the Rivet-specific Tcl commands, and
+ executes Rivet's <code class="filename">init.tcl</code>. The caching
+ system is also set up, and if there is a
+ <span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span>, it is run.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4161"></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 lets 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 IO 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="idm4166"></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="idm4174"></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="idm4182"></a>Extending Rivet by developing C procedures implementing new commands</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 copy
+ to the request_rec pointer (stored in the
+ <span class="structname">rivet_interp_globals</span>
+ structure) 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 step to follow
+ to implement 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/rivetcmds/rivetCore.c using the macro
+ RIVET_OBJ_CMD<pre class="programlisting">RIVET_OBJ_CMD("mycmd",Rivet_MyCmd)</pre>
+ This macro ensures the command is defined as <span style="font-family:monospace"><span class="command"><strong>::rivet::mycmd</strong></span></span></li><li class="listitem">
+ Add the code of Rivet_MyCmd to src/rivetcmd/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 gain access to <span style="font-family:monospace"><span class="command"><strong>globals->r</strong></span></span>
+ put add the macro testing for the pointer
+ <pre class="programlisting">TCL_CMD_HEADER( Rivet_MyCmd )
+{
+ rivet_interp_globals *globals = Tcl_GetAssocData( interp, "rivet", NULL );
+ ....
+ CHECK_REQUEST_REC(globals->r,"::rivet::mycmd");
+ ...
+}</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 needs to check for <span style="font-family:monospace"><span class="command"><strong>globals->r</strong></span></span>
+ in special cases. 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>globals->r</strong></span></span> pointer.
+ </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4208"></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 Installation">the section called “Apache Rivet 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="upgrading.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 accesske [...]
diff --git a/rivet/manual2.4/lassign_array.html b/rivet/manual2.4/lassign_array.html
new file mode 100644
index 0000000..2868aba
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ <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" [...]
diff --git a/rivet/manual2.4/lempty.html b/rivet/manual2.4/lempty.html
new file mode 100644
index 0000000..5a1d3ab
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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=" [...]
+ 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="idm1161"></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 [...]
diff --git a/rivet/manual2.4/lmatch.html b/rivet/manual2.4/lmatch.html
new file mode 100644
index 0000000..855ea52
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="wh [...]
+ 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< [...]
+ 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" [...]
diff --git a/rivet/manual2.4/load_cookies.html b/rivet/manual2.4/load_cookies.html
new file mode 100644
index 0000000..823d83d
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="whit [...]
+ 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 [...]
diff --git a/rivet/manual2.4/load_env.html b/rivet/manual2.4/load_env.html
new file mode 100644
index 0000000..6e4044a
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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><bo [...]
+ 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 [...]
diff --git a/rivet/manual2.4/load_headers.html b/rivet/manual2.4/load_headers.html
new file mode 100644
index 0000000..3005dab
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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="t [...]
diff --git a/rivet/manual2.4/load_response.html b/rivet/manual2.4/load_response.html
new file mode 100644
index 0000000..c446e1f
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 bg [...]
+ 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 [...]
diff --git a/rivet/manual2.4/lremove.html b/rivet/manual2.4/lremove.html
new file mode 100644
index 0000000..d15d54c
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 bgcolo [...]
+ <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= [...]
diff --git a/rivet/manual2.4/makeurl.html b/rivet/manual2.4/makeurl.html
new file mode 100644
index 0000000..4249ff7
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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" te [...]
+ 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"> No argument is passed to the command (returns the current script URL)</li><li class="listitem">
+ A relative style path is passed (returns the argument prepended with the
+ current script's URL
+ </li><li class="listitem">
+ An absolute path is passed to the command: (returns the full URL to the
+ resource)
+ </li></ul></div><p style="width:90%">
+ </p><p style="width:90%">
+ Example of 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">lre [...]
diff --git a/rivet/manual2.4/no_body.html b/rivet/manual2.4/no_body.html
new file mode 100644
index 0000000..554ec0b
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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 [...]
diff --git a/rivet/manual2.4/parray.html b/rivet/manual2.4/parray.html
new file mode 100644
index 0000000..362f9b2
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="b [...]
+ 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_bo [...]
diff --git a/rivet/manual2.4/parse.html b/rivet/manual2.4/parse.html
new file mode 100644
index 0000000..1b80b61
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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">par [...]
diff --git a/rivet/manual2.4/raw_post.html b/rivet/manual2.4/raw_post.html
new file mode 100644
index 0000000..4e3b636
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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" tex [...]
+ 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 < [...]
diff --git a/rivet/manual2.4/read_file.html b/rivet/manual2.4/read_file.html
new file mode 100644
index 0000000..a5b81f1
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="redirect.html" title="redirect"><link rel="next" href="try.html" title="try"></head><body bgcolor="white" text=" [...]
+ 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="idm1380"></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="try.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">redire [...]
diff --git a/rivet/manual2.4/redirect.html b/rivet/manual2.4/redirect.html
new file mode 100644
index 0000000..2d40ba2
--- /dev/null
+++ b/rivet/manual2.4/redirect.html
@@ -0,0 +1,21 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="wh [...]
+ <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 redirect) or 302 (non permanent redirect) HTTP status codes and
+ attempts to discard the output the script might have already placed in the
+ stdout channel buffer. Therefore 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> was called before <span style="font-family:monospace"><span class="command"><strong>::rivet::redirect</strong></span></span>
+ thus causing the HTTP headers to be sent and preventing any possibility to
+ manipulate them</li><li class="listitem">The channel buffer was filled causing Tcl to
+ flush the channel</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 streched.
+ </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= [...]
diff --git a/rivet/manual2.4/request.html b/rivet/manual2.4/request.html
new file mode 100644
index 0000000..cd1d827
--- /dev/null
+++ b/rivet/manual2.4/request.html
@@ -0,0 +1,162 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="installation.html" title="Apache Rivet Installation"><link rel="next" href="directives.ht [...]
+ Apache Rivet delegates 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 is currently supporting only the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.2/mod/prefork.html" target="_top">prefork</a>
+ MPM which creates full fledged child processes as independent agents
+ responding to network requests.
+ Efforts are under way to extend the support to
+ the <a class="ulink" href="http://httpd.apache.org/docs/2.2/mod/worker.html" target="_top">worker</a> MPM,
+ a hybrid model where forked child processes in turn create threads as real
+ network agents. If we can achieve this the goal would open the possibility of
+ supporting also the Windows© specific
+ <a class="ulink" href="http://httpd.apache.org/docs/2.2/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="http://httpd.apache.org/docs/2.2/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="idm173"></a>Single Process 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,
+ since 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). Thus
+ <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 importing namespace commands and loading packages
+ providing code of general interest for every application to
+ be served. Also IPC methods can be initialized in this stage.
+ </div></li><li class="listitem"><h4><a name="idm178"></a>Child Process Initialization</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ Right after the webserver has forked its child processes
+ there is a chance to perform specific initialization of their Tcl interpreters.
+ 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. 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></li><li class="listitem"><h4><a name="idm191"></a>Request Processing and Content Generation</h4><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="idm198"></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="idm204"></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="idm214"></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%">
+ With the sole exception of .rvt templates, 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>BeforeSc [...]
diff --git a/rivet/manual2.4/rivet.css b/rivet/manual2.4/rivet.css
new file mode 100644
index 0000000..b504a41
--- /dev/null
+++ b/rivet/manual2.4/rivet.css
@@ -0,0 +1,351 @@
+BODY
+{
+ font-family: verdana;
+}
+
+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: #ffeeee;
+ border: solid;
+ color: #000000;
+ border-color: #990099;
+ border-left: solid #990099 1px;
+ border-right: solid #990099 1px;
+ border-top: solid #990099 1px;
+ border-bottom: solid #990099 1px;
+ font-size: normal;
+ padding-top: 1em;
+ padding-left: 1em;
+ padding-bottom: 1em;
+}
+
+H1
+{
+ color: #ffffff;
+ border: solid 3px #a0a0d0;
+ background-color: #606090;
+ font-variant: small-caps;
+ width: 100%;
+}
+
+H1.TITLE
+{
+ color: #ffffff;
+ border: solid 3px #a0a0d0;
+ background-color: #606090;
+ 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;
+ BACKGROUND-color: #d0a0a0;
+ BORDER: solid 3px #906060;
+ 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: #a0a0d0;
+ BORDER: solid 1px #606090;
+ 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{}
+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: #FFDFDF;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: 2px solid #d0a0a0;
+}
+
+DIV.NUKEFOOTER {
+ color: #000000;
+ background-color: #B0E0E6;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: thin solid #a0a0d0;
+}
+
+DIV.NAVHEADER {
+ color: #000000;
+ background-color: #FFDFDF;
+ padding: 5px;
+ margin-bottom: 10px;
+ width: 100%;
+ border: 2px solid #d0a0a0;
+}
+
+DIV.SECT1,DIV.SECT2,DIV.SECT3 {
+ margin-left: 20px;
+}
+
+DIV.EXAMPLE,DIV.TOC {
+ border: thin dotted #70AAE5;
+ padding-left: 10px;
+ padding-right: 10px;
+ color: #000000;
+ background-color: #FFE8E8;
+}
+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;
+}
+
+.note td {
+ font-size: small;
+}
+
+li.listitem {
+ font-size: small;
+}
diff --git a/rivet/manual2.4/session_package.html b/rivet/manual2.4/session_package.html
new file mode 100644
index 0000000..072c14d
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="diodisplay_package.html" title="DIODisplay"><link rel="next" href="form.html" title="Form: An HTML Form Fields Generation Utility [...]
+ 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="idm3041"></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="idm3051"></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="idm3063"></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-spac [...]
+ 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">return [...]
+ 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="fon [...]
+ 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="fon [...]
+ 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="idm3109"></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="idm3187"></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="fon [...]
+ 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="fon [...]
+ 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="idm3243"></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" hr [...]
diff --git a/rivet/manual2.4/shorthand.html b/rivet/manual2.4/shorthand.html
new file mode 100644
index 0000000..414bb90
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="ab [...]
+ 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="idm529"></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 [...]
diff --git a/rivet/manual2.4/tcl_packages.html b/rivet/manual2.4/tcl_packages.html
new file mode 100644
index 0000000..1c116d3
--- /dev/null
+++ b/rivet/manual2.4/tcl_packages.html
@@ -0,0 +1,11 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="examples.html" title="Examples and Usage"><link rel="next" href="dio.html" title="DIO - Database Interface Objects"></head><bo [...]
+ 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">
+ commserver is a package providing a server that can be
+ used for IPC. Still experimental. Requires the comm package
+ from tcllib.
+ </div></li><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">
+ dtcl is a compatibility package for mod_dtcl
+ applications.
+ </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">rivet - some additional, useful routines.</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">tclrivet</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="l [...]
diff --git a/rivet/manual2.4/toglyphs.html b/rivet/manual2.4/toglyphs.html
new file mode 100644
index 0000000..d276b80
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="prev" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="next" href="entities.html" title="RivetEntities"></head><body bgcolor="white" text [...]
+ 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="idm3931"></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="entities.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left [...]
diff --git a/rivet/manual2.4/try.html b/rivet/manual2.4/try.html
new file mode 100644
index 0000000..4b24ca4
--- /dev/null
+++ b/rivet/manual2.4/try.html
@@ -0,0 +1,54 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="unescape_string.html" title="unescape_string"></head><body bg [...]
+ 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 [...]
+ <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><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="Rivet Apache Directives">the section called “Rivet Apache Directives”</a>
+ </p><pre class="programlisting"><html><?::rivet::try {
+ if {[::rivet::var_qs exists exit]} {
+ ::rivet::exit 100
+ } elseif {[::rivet::var_qs exists abort]} {
+ ::rivet::abort_page
+ } 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="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="unescape_string.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="4 [...]
diff --git a/rivet/manual2.4/unescape_string.html b/rivet/manual2.4/unescape_string.html
new file mode 100644
index 0000000..cdc0d71
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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 [...]
diff --git a/rivet/manual2.4/upgrading.html b/rivet/manual2.4/upgrading.html
new file mode 100644
index 0000000..92508af
--- /dev/null
+++ b/rivet/manual2.4/upgrading.html
@@ -0,0 +1,32 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Upgrading from mod_dtcl or NeoWebScript</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="index.html" title="Apache Rivet"><link rel="prev" href="internals.html" title="Rivet Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="# [...]
+ Rivet is a break from the past, in that we, the authors, have
+ attempted to take what we like best about our past efforts, and
+ leave out or change things we no longer care for. Backwards
+ compatibility was not a primary goal when creating Rivet, but we
+ do provide this information which may be of use to those wishing
+ to upgrade from mod_dtcl or NWS installations.
+ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4238"></a>mod_dtcl</h3></div></div></div><p style="width:90%">
+ Rivet was originally based on the dtcl code, but it has
+ changed (improved!) quite a bit. The concepts remain the
+ same, but many of the commands have changed.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4241"></a>NeoWebScript</h3></div></div></div><p style="width:90%">
+ NWS was a server-side scripting environment based on the Apache
+ HTTP server and Safe-Tcl and it's not maintained anymore.
+ </p><p style="width:90%">
+ The biggest difference between Rivet and Neowebscript is that
+ Neowebscript was designed for shared hosting while Rivet is more oriented
+ toward a site that owns all of its content. In the words of Karl Lehenbauer,
+ NWS author and Rivet Team member:
+ </p><p style="width:90%">
+ Rivet, however, is considerably more efficient, powerful, and
+ evolved, though it still can support multiple independent sites on a single
+ machine through its <span class="quote">“<span class="quote">separate virtual interpreters</span>”</span> mechanism.
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">By powerful, the difference is that the full power of Tcl is available
+ to webpage authors, not the restricted version that NWS provides.
+ For instance, you can read or write any file in the system that you
+ have permission to, require any package, open sockets and pipes, etc.</li><li class="listitem">By efficient, the difference is that Tcl interpreters survive past
+ the generation of a webpage and are reused again and again, reducing the
+ overhead of generating a page.
+ </li><li class="listitem">By evolved, all of our efforts have gone toward Rivet for many
+ years and so, you know, Rivet does more out of the box than Neowebscript did.</li></ul></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="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%" a [...]
diff --git a/rivet/manual2.4/upload.html b/rivet/manual2.4/upload.html
new file mode 100644
index 0000000..ececca0
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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_query.html" title="url_query"></head><body [...]
+ 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="re [...]
+ </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_query.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign [...]
diff --git a/rivet/manual2.4/url_query.html b/rivet/manual2.4/url_query.html
new file mode 100644
index 0000000..010356c
--- /dev/null
+++ b/rivet/manual2.4/url_query.html
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>url_query</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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="blac [...]
+ Builds a URL query out of a list of parameter-value pairs. If
+ the argument list has an odd length the last element is silently
+ discarded. The values of each pair in the list are passed through
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::escape_string</strong></span></span> for proper representation
+ of characters that could break the URL syntax
+ </p><pre class="programlisting">set query [::rivet::url_query par1 val1 par2 val2 par3 val3]
+puts $query
+par1=val1&par2=val2&par3=val3</pre></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 [...]
diff --git a/rivet/manual2.4/var.html b/rivet/manual2.4/var.html
new file mode 100644
index 0000000..98f6b53
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="url_query.html" title="url_query"><link rel="next" href="wrap.html" title="wrap"></head><body bgcolor="white" text="bl [...]
+ 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="replaceab [...]
+ </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_query.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="U [...]
diff --git a/rivet/manual2.4/wrap.html b/rivet/manual2.4/wrap.html
new file mode 100644
index 0000000..ed78268
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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 [...]
+ 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 [...]
+ 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 </ [...]
diff --git a/rivet/manual2.4/wrapline.html b/rivet/manual2.4/wrapline.html
new file mode 100644
index 0000000..53384ce
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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" li [...]
+ 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</ [...]
+ 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> [...]
diff --git a/rivet/manual2.4/xml.html b/rivet/manual2.4/xml.html
new file mode 100644
index 0000000..7e5f7f2
--- /dev/null
+++ b/rivet/manual2.4/xml.html
@@ -0,0 +1,17 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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= [...]
+ 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: [...]
+ 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 name 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 tell the tags which attributes they must have
+ </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></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= [...]
diff --git a/rivet/manual2.4/xml_calendar.html b/rivet/manual2.4/xml_calendar.html
new file mode 100644
index 0000000..ab544b6
--- /dev/null
+++ b/rivet/manual2.4/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet"><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=" [...]
+ 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="idm3775"></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="idm3794"></a><div class="refsect2"><a name="idm3795"></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">-containe [...]
+ 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 [...]
diff --git a/rivet/manual3.1/abort_code.html b/rivet/manual3.1/abort_code.html
new file mode 100644
index 0000000..ea64f0b
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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> [...]
+ 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="idm761"></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="to [...]
diff --git a/rivet/manual3.1/abort_page.html b/rivet/manual3.1/abort_page.html
new file mode 100644
index 0000000..813fc05
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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"> [...]
+ 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 [...]
+ 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.1 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.1 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" vali [...]
diff --git a/rivet/manual3.1/apache_log_error.html b/rivet/manual3.1/apache_log_error.html
new file mode 100644
index 0000000..a0f3f3d
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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"></ [...]
+ 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=" [...]
diff --git a/rivet/manual3.1/apache_table.html b/rivet/manual3.1/apache_table.html
new file mode 100644
index 0000000..f5747d7
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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>< [...]
+ 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 [...]
+ </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 [...]
+ <div class="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 [...]
+ </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 cl [...]
+ </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 cla [...]
+ </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 [...]
diff --git a/rivet/manual3.1/asciiglyphs.html b/rivet/manual3.1/asciiglyphs.html
new file mode 100644
index 0000000..80c6619
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="decode.html" title="decode"><link rel="next" href="toglyphs.html" title="toGlyphs"></head><body bgcolor="white" text="black" [...]
+ 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="idm4193"></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"> [...]
diff --git a/rivet/manual3.1/calendar.html b/rivet/manual3.1/calendar.html
new file mode 100644
index 0000000..df75250
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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> [...]
+ 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="idm3955"></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></t [...]
diff --git a/rivet/manual3.1/calendar_package.html b/rivet/manual3.1/calendar_package.html
new file mode 100644
index 0000000..4227a73
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="form_package.html" title="form"><link rel="next" href="calendar.html" title="Calendar"></head><body bgcolor="white" text [...]
+ 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 acce [...]
diff --git a/rivet/manual3.1/catch.html b/rivet/manual3.1/catch.html
new file mode 100644
index 0000000..049903b
--- /dev/null
+++ b/rivet/manual3.1/catch.html
@@ -0,0 +1,18 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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"></ [...]
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span> wraps the core language's same 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% [...]
diff --git a/rivet/manual3.1/clock_to_rfc.html b/rivet/manual3.1/clock_to_rfc.html
new file mode 100644
index 0000000..57a84b0
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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= [...]
+ 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 [...]
diff --git a/rivet/manual3.1/cmake.html b/rivet/manual3.1/cmake.html
new file mode 100644
index 0000000..71efebb
--- /dev/null
+++ b/rivet/manual3.1/cmake.html
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Building Rivet 3.1 with CMake</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="installation.html" title="Apache Rivet 3.1 Installation"><link rel="next" href="directives.html" title="Apa [...]
+ Starting with 3.1 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.1 Installation </td><td width="20%" align="center [...]
diff --git a/rivet/manual3.1/commands.html b/rivet/manual3.1/commands.html
new file mode 100644
index 0000000..c4b09cc
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="request.html" title="Apache Child Processes Lifecycle and Request Processing"><link rel="next" href="sho [...]
+ 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%" [...]
diff --git a/rivet/manual3.1/cookie.html b/rivet/manual3.1/cookie.html
new file mode 100644
index 0000000..8d8ca3f
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 bg [...]
+ <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" [...]
diff --git a/rivet/manual3.1/debug.html b/rivet/manual3.1/debug.html
new file mode 100644
index 0000000..b96ee45
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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="blac [...]
+ 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;"> [...]
+ 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 < [...]
diff --git a/rivet/manual3.1/decode.html b/rivet/manual3.1/decode.html
new file mode 100644
index 0000000..1da00f6
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" [...]
+ 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 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" val [...]
diff --git a/rivet/manual3.1/dio.html b/rivet/manual3.1/dio.html
new file mode 100644
index 0000000..3ec79a5
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="tcl_packages.html" title="Rivet Tcl Packages"><link rel="next" href="dio_package.html" title="DIO"></hea [...]
diff --git a/rivet/manual3.1/dio_package.html b/rivet/manual3.1/dio_package.html
new file mode 100644
index 0000000..a177f95
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 [...]
+ <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="idm2080"></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="re [...]
+ 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 ; paddi [...]
+ 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 ; paddi [...]
+ 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="m [...]
+ 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</ [...]
+ 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=" [...]
+ 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="idm2150"></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> [...]
+ 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: [...]
+ 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="mar [...]
+ 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>?</ [...]
+ 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:mon [...]
+ 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:monos [...]
+ 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: [...]
+ 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-weig [...]
+ 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; f [...]
+ 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: [...]
+ 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: [...]
+ 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: b [...]
+ 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: [...]
+ 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 ; p [...]
+ 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-weigh [...]
+ 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: b [...]
+ 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 ; pad [...]
+ 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: b [...]
+ 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 [...]
+ 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 ; pad [...]
+ 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 ; padd [...]
+ 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:monospac [...]
+ 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: b [...]
+ 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 styl [...]
+ 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: [...]
+ 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-weigh [...]
+ 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: [...]
+ 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: [...]
+ 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: [...]
+ 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:monospac [...]
+ 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: b [...]
+ 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>resultO [...]
+ 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 ; paddin [...]
+ 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-weigh [...]
+ 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-weigh [...]
+ 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: [...]
+ 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: [...]
+ 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:monos [...]
+ 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:mo [...]
+ 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 [...]
+ 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: b [...]
+ 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= [...]
diff --git a/rivet/manual3.1/diodisplay.html b/rivet/manual3.1/diodisplay.html
new file mode 100644
index 0000000..aac2b9f
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="dio_package.html" title="DIO"><link rel="next" href="diodisplay_package.html" title [...]
diff --git a/rivet/manual3.1/diodisplay_package.html b/rivet/manual3.1/diodisplay_package.html
new file mode 100644
index 0000000..530062b
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 [...]
+ 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="idm2690"></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="idm2793"></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-we [...]
+ </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; f [...]
+ </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="idm3106"></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="idm3187"></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:mono [...]
+ 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="idm3245"></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="le [...]
diff --git a/rivet/manual3.1/directives.html b/rivet/manual3.1/directives.html
new file mode 100644
index 0000000..6b4c07c
--- /dev/null
+++ b/rivet/manual3.1/directives.html
@@ -0,0 +1,271 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.1 Configuration</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="cmake.html" title="Building Rivet 3.1 with CMake"><link rel="next" href="processing.html" title="Apache Ri [...]
+ 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> [...]
+ <div class="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 you tell mod_rivet to place the whole command set on
+ the export list of 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, 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;">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 you tell mod_rivet to place the whole command set on
+ the export list of namespace (implicitly forcing also ExportRivetNS)
+ and then importing the commands on the namespace export list 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's utterly discouraged to
+ use it and it could be removed in future versions of Rivet
+ This option is, by nature, 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 string argument is interpreted
+ first as a name of an MPM bridge and it's interpolated in the
+ string
+ <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 configuration argument <span style="color: red"><term>--with-rivet-target-dir=DIR</term></span>.
+ For example
+ <pre class="programlisting">RivetServerConf MpmBridge lazy</pre> will cause the
+ rivet_lazy_mpm.so library module to be loaded. If such library does not exists
+ mod_rivet tries to check if such definition is 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;">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.1 with CMake </td><td width="20%" [...]
diff --git a/rivet/manual3.1/encode.html b/rivet/manual3.1/encode.html
new file mode 100644
index 0000000..b095f7a
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" [...]
+ 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 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>< [...]
diff --git a/rivet/manual3.1/entities.html b/rivet/manual3.1/entities.html
new file mode 100644
index 0000000..211eaf0
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="html_calendar.html" title="HtmlCalendar"><link rel="next" href="encode.html" title="encode"></head><body bgcolor="white" te [...]
+ 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" h [...]
diff --git a/rivet/manual3.1/env.html b/rivet/manual3.1/env.html
new file mode 100644
index 0000000..b6919f1
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 bg [...]
+ 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="idm1066"></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=" [...]
diff --git a/rivet/manual3.1/escape_sgml_chars.html b/rivet/manual3.1/escape_sgml_chars.html
new file mode 100644
index 0000000..66ea503
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" [...]
+ 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= [...]
diff --git a/rivet/manual3.1/escape_shell_command.html b/rivet/manual3.1/escape_shell_command.html
new file mode 100644
index 0000000..4a45d30
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" titl [...]
+ 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" [...]
diff --git a/rivet/manual3.1/escape_string.html b/rivet/manual3.1/escape_string.html
new file mode 100644
index 0000000..ca91d50
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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">< [...]
+ 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 [...]
diff --git a/rivet/manual3.1/examples.html b/rivet/manual3.1/examples.html
new file mode 100644
index 0000000..d7ed1c7
--- /dev/null
+++ b/rivet/manual3.1/examples.html
@@ -0,0 +1,497 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="xml.html" title="xml"><link rel="next" href="tcl_packages.html" title="Rivet Tcl Packages"></head><body bgcolor="white [...]
+ 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="idm1941"></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 color-table.tcl and put the following code in it
+ </p><pre class="programlisting">puts "<html><head>"
+puts "<style>\n td { font-size: 12px; text-align: center; padding-left: 3px; padding-right: 3px}"
+puts " td.bright { color: #eee; }\n td.dark { color: #222; }\n</style>"
+puts "</head><body>"
+puts "<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 - $i + $j) / 16)]
+ set b [expr int(255 * ($i + 8 - $j) / 16)]
+
+# 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)] > 128.0} {
+ set cssclass "dark"
+ } else {
+ set cssclass "bright"
+ }
+
+ puts [format "<td bgcolor=\"%02x%02x%02x\" class=\"%s\">$r $g $b</td>" $r $g $b $cssclass]
+ }
+ puts "</tr>"
+}
+puts "</table>"
+puts "</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 ac [...]
diff --git a/rivet/manual3.1/exit.html b/rivet/manual3.1/exit.html
new file mode 100644
index 0000000..44746df
--- /dev/null
+++ b/rivet/manual3.1/exit.html
@@ -0,0 +1,34 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 bgcol [...]
+ 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 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%">
+ We support this command in order to have a gentle way to terminate a request processing
+ before actually exit the child process and avoid an abrupt interruption of a request that
+ might leave an application in a inconsistent state. In some cases <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>
+ could be the only way to exit a process and force the Apache HTTP web server to start
+ a fresh one. Moreover the core <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> could be called from third parties
+ software and you may not be aware of it. We thus decided to trap this command and give it
+ the most gentle behavior still preserving the its basic purpose.
+ </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.0/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%" al [...]
diff --git a/rivet/manual3.1/fb.html b/rivet/manual3.1/fb.html
new file mode 100644
index 0000000..cf195b4
--- /dev/null
+++ b/rivet/manual3.1/fb.html
@@ -0,0 +1,259 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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><bod [...]
+ 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; [...]
+ 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 <span style="font-family:monospace"><span class="command"><strong>create</strong></span></span>. Each descriptor
+ is a list of parameter or parameter-value pairs whose order has as only requirement
+ to begin with the <span style="font-family:monospace"><span class="command"><strong>{variable_name variable_type}</strong></span></span> pair.
+ A formbroker object handles natively integer, unsigned, string, boolean and email data types.
+ The programmer can defined new data type and provide in the descriptor a
+ reference to a validating procedure for that type.
+ </p><p style="width:90%">
+ The optional ?<span style="font-family:monospace; font-weight: bold;">-quoting quoting_procedure</span>? switch assigns a procedure to
+ be called to quote the form 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="idm4248"></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 [...]
+ 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">% 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- [...]
+ 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">% 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:mon [...]
+ 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. [...]
+ The method resets the object to its initial defaults
+ </div></div></dd></dl></div></div><div class="refsect1"><a name="idm4313"></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%" a [...]
diff --git a/rivet/manual3.1/form.html b/rivet/manual3.1/form.html
new file mode 100644
index 0000000..d97c3f4
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="session_package.html" title="Session Package"><link rel="next" href="form_package.html" titl [...]
+ 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= [...]
diff --git a/rivet/manual3.1/form_package.html b/rivet/manual3.1/form_package.html
new file mode 100644
index 0000000..e6b5008
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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.h [...]
+ creates and returns a new Tcl command named <em class="replaceable"><code>form_name</code></em>.
+ </p><div class="refsect2"><a name="idm3495"></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> [...]
+ 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 ; pa [...]
+ 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 [...]
+ 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="idm3527"></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 [...]
+ 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="idm3550"></a><h2>Subcommands</h2><div class="refsect2"><a name="idm3552"></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-fam [...]
+ 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="idm3573"></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-we [...]
+ 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=" [...]
+ 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><di [...]
+ 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-botto [...]
+ 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="idm3605"></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="idm3612"></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;">n [...]
+ 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="idm3626"></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-we [...]
+ Option description
+ </div></div></dd></dl></div></div></div><div class="refsect2"><a name="idm3635"></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; f [...]
+ 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="idm3650"></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</ [...]
+ 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="m [...]
+ 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="idm3677"></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: bol [...]
+ 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="idm3695"></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-wei [...]
+ 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="idm3713"></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</ [...]
+ 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="m [...]
+ 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="idm3734"></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-weigh [...]
+ 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="idm3743"></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; [...]
+ 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="idm3752"></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; [...]
+ 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="idm3765"></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 [...]
+ 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="idm3776"></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;" [...]
+ 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="idm3785"></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;" [...]
+ Emits an image input field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3794"></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;" [...]
+ Emits a radiobutton input field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3803"></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;" [...]
+ Emits an HTML 5 "color" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3812"></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;"> [...]
+ Emits an HTML 5 "date" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3821"></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: bol [...]
+ Emits an HTML 5 "datetime" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3830"></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-weigh [...]
+ Emits an HTML 5 "datetime_local" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3839"></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;" [...]
+ Emits an HTML 5 "email" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3848"></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;"> [...]
+ Emits an HTML 5 "file" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3857"></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;" [...]
+ Emits an HTML 5 "month" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3866"></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; [...]
+ Emits an HTML 5 "number" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3875"></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;" [...]
+ Emits an HTML 5 "range" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3884"></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; [...]
+ Emits an HTML 5 "search" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3893"></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;">n [...]
+ Emits an HTML 5 "tel" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3902"></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;"> [...]
+ Emits an HTML 5 "time" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3911"></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;">n [...]
+ Emits an HTML 5 "url" form field
+ </div></div></dd></dl></div></div><div class="refsect2"><a name="idm3920"></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;"> [...]
+ 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 widt [...]
diff --git a/rivet/manual3.1/formbroker.html b/rivet/manual3.1/formbroker.html
new file mode 100644
index 0000000..8d0ef90
--- /dev/null
+++ b/rivet/manual3.1/formbroker.html
@@ -0,0 +1,16 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="toglyphs.html" title="toGlyphs"><link rel="next" href="fb.html" title="FormBroker"></head><body bgcolor="white" text="bla [...]
+ The <span style="font-family:monospace"><span class="command"><strong>FormBroker</strong></span></span> package creates instances of
+ objects representing a form data description. These objects offer a
+ simple interface of methods meant to validate and control data
+ as typically posted through an HTML form,
+ thus data represented through the association of form variables
+ with their values as returned, for example,
+ by the <span style="font-family:monospace"><span class="command"><strong>::rivet::load_response</strong></span></span> command
+ </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
+ could be improved with the purpose of shielding the <span style="font-family:monospace"><span class="command"><strong>FormBroker</strong></span></span>
+ internals from a data validation procedure.
+ </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= [...]
diff --git a/rivet/manual3.1/headers.html b/rivet/manual3.1/headers.html
new file mode 100644
index 0000000..4a0148a
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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="blac [...]
+ 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=" [...]
+ </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="re [...]
+ </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="re [...]
+ </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= [...]
diff --git a/rivet/manual3.1/help.html b/rivet/manual3.1/help.html
new file mode 100644
index 0000000..2d98d9b
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="fb.html" title="FormBroker"><link rel="next" href="internals.html" title="Rivet Internals"></head><body bgcol [...]
+ 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="idm4333"></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="idm4353"></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="idm4357"></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="idm4360"></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.h [...]
diff --git a/rivet/manual3.1/html.html b/rivet/manual3.1/html.html
new file mode 100644
index 0000000..e7a55eb
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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=" [...]
+ 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" [...]
diff --git a/rivet/manual3.1/html_calendar.html b/rivet/manual3.1/html_calendar.html
new file mode 100644
index 0000000..4425dde
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 b [...]
+ 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="idm4131"></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" v [...]
diff --git a/rivet/manual3.1/http_accept.html b/rivet/manual3.1/http_accept.html
new file mode 100644
index 0000000..612d747
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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">< [...]
+ ?<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="idm1251"></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-Language)]
+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="l [...]
diff --git a/rivet/manual3.1/images/acrobat.png b/rivet/manual3.1/images/acrobat.png
new file mode 100644
index 0000000..6907b4e
Binary files /dev/null and b/rivet/manual3.1/images/acrobat.png differ
diff --git a/rivet/manual3.1/images/blank.png b/rivet/manual3.1/images/blank.png
new file mode 100644
index 0000000..764bf4f
Binary files /dev/null and b/rivet/manual3.1/images/blank.png differ
diff --git a/rivet/manual3.1/images/calendar.png b/rivet/manual3.1/images/calendar.png
new file mode 100644
index 0000000..54f9f33
Binary files /dev/null and b/rivet/manual3.1/images/calendar.png differ
diff --git a/rivet/manual3.1/images/caution.png b/rivet/manual3.1/images/caution.png
new file mode 100644
index 0000000..5b7809c
Binary files /dev/null and b/rivet/manual3.1/images/caution.png differ
diff --git a/rivet/manual3.1/images/color-table.png b/rivet/manual3.1/images/color-table.png
new file mode 100644
index 0000000..c05a112
Binary files /dev/null and b/rivet/manual3.1/images/color-table.png differ
diff --git a/rivet/manual3.1/images/disk.png b/rivet/manual3.1/images/disk.png
new file mode 100644
index 0000000..772566e
Binary files /dev/null and b/rivet/manual3.1/images/disk.png differ
diff --git a/rivet/manual3.1/images/draft.png b/rivet/manual3.1/images/draft.png
new file mode 100644
index 0000000..0084708
Binary files /dev/null and b/rivet/manual3.1/images/draft.png differ
diff --git a/rivet/manual3.1/images/home.png b/rivet/manual3.1/images/home.png
new file mode 100644
index 0000000..eb904c8
Binary files /dev/null and b/rivet/manual3.1/images/home.png differ
diff --git a/rivet/manual3.1/images/important.png b/rivet/manual3.1/images/important.png
new file mode 100644
index 0000000..12c90f6
Binary files /dev/null and b/rivet/manual3.1/images/important.png differ
diff --git a/rivet/manual3.1/images/next.png b/rivet/manual3.1/images/next.png
new file mode 100644
index 0000000..0f4d18a
Binary files /dev/null and b/rivet/manual3.1/images/next.png differ
diff --git a/rivet/manual3.1/images/note.png b/rivet/manual3.1/images/note.png
new file mode 100644
index 0000000..d0c3c64
Binary files /dev/null and b/rivet/manual3.1/images/note.png differ
diff --git a/rivet/manual3.1/images/prev.png b/rivet/manual3.1/images/prev.png
new file mode 100644
index 0000000..dd3b6a2
Binary files /dev/null and b/rivet/manual3.1/images/prev.png differ
diff --git a/rivet/manual3.1/images/qbullet-note.png b/rivet/manual3.1/images/qbullet-note.png
new file mode 100644
index 0000000..88c30c0
Binary files /dev/null and b/rivet/manual3.1/images/qbullet-note.png differ
diff --git a/rivet/manual3.1/images/remote.png b/rivet/manual3.1/images/remote.png
new file mode 100644
index 0000000..d76b0f1
Binary files /dev/null and b/rivet/manual3.1/images/remote.png differ
diff --git a/rivet/manual3.1/images/scrollup.png b/rivet/manual3.1/images/scrollup.png
new file mode 100644
index 0000000..336232a
Binary files /dev/null and b/rivet/manual3.1/images/scrollup.png differ
diff --git a/rivet/manual3.1/images/table.png b/rivet/manual3.1/images/table.png
new file mode 100644
index 0000000..6ec425e
Binary files /dev/null and b/rivet/manual3.1/images/table.png differ
diff --git a/rivet/manual3.1/images/tip.png b/rivet/manual3.1/images/tip.png
new file mode 100644
index 0000000..5c4aab3
Binary files /dev/null and b/rivet/manual3.1/images/tip.png differ
diff --git a/rivet/manual3.1/images/toc-blank.png b/rivet/manual3.1/images/toc-blank.png
new file mode 100644
index 0000000..6ffad17
Binary files /dev/null and b/rivet/manual3.1/images/toc-blank.png differ
diff --git a/rivet/manual3.1/images/toc-minus.png b/rivet/manual3.1/images/toc-minus.png
new file mode 100644
index 0000000..abbb020
Binary files /dev/null and b/rivet/manual3.1/images/toc-minus.png differ
diff --git a/rivet/manual3.1/images/toc-plus.png b/rivet/manual3.1/images/toc-plus.png
new file mode 100644
index 0000000..941312c
Binary files /dev/null and b/rivet/manual3.1/images/toc-plus.png differ
diff --git a/rivet/manual3.1/images/up.png b/rivet/manual3.1/images/up.png
new file mode 100644
index 0000000..f9f8312
Binary files /dev/null and b/rivet/manual3.1/images/up.png differ
diff --git a/rivet/manual3.1/images/warning.png b/rivet/manual3.1/images/warning.png
new file mode 100644
index 0000000..1c33db8
Binary files /dev/null and b/rivet/manual3.1/images/warning.png differ
diff --git a/rivet/manual3.1/images/word.png b/rivet/manual3.1/images/word.png
new file mode 100644
index 0000000..4189771
Binary files /dev/null and b/rivet/manual3.1/images/word.png differ
diff --git a/rivet/manual3.1/import_keyvalue_pairs.html b/rivet/manual3.1/import_keyvalue_pairs.html
new file mode 100644
index 0000000..cfa98c2
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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"></hea [...]
+ 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" [...]
diff --git a/rivet/manual3.1/include.html b/rivet/manual3.1/include.html
new file mode 100644
index 0000000..b9f637e
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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="incr0.html" title="incr0"></h [...]
+ 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="incr0.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" vali [...]
diff --git a/rivet/manual3.1/incr0.html b/rivet/manual3.1/incr0.html
new file mode 100644
index 0000000..5f2ad86
--- /dev/null
+++ b/rivet/manual3.1/incr0.html
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>incr0</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="include.html" title="include"><link rel="next" href="inspect.html" title="inspect"></head><body bgcolor="white" [...]
+ Increment a variable
+ <em class="replaceable"><code>varname</code></em> by
+ <em class="replaceable"><code>num</code></em>. If the
+ variable doesn't exist, create it instead of returning an
+ error.
+ </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">
+ incr0 functionality is provided by the native <span style="font-family:monospace"><span class="command"><strong>incr</strong></span></span> in
+ Tcl >= 8.5, therefore this command is deprecated and kept as an
+ interpreter alias only for compatibility. As such <span style="font-family:monospace"><span class="command"><strong>incr0</strong></span></span>
+ wasn't moved to the ::rivet namespace and
+ it will be removed in future versions of Rivet.
+ </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="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="inspect.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" [...]
diff --git a/rivet/manual3.1/index.html b/rivet/manual3.1/index.html
new file mode 100644
index 0000000..7136030
--- /dev/null
+++ b/rivet/manual3.1/index.html
@@ -0,0 +1,105 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.1</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="next" href="installation.html" title="Apache Rivet 3.1 Installation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table wi [...]
+ <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-2018 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.1</a></span></dt><dt><span class="section"><a href="installation.html">Apache Rivet 3.1 Installation</a></span></dt><dt><span class="section"><a href="cmake.html">Building Rivet 3.1 with CMake [...]
+ 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 [...]
+ 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 [...]
+ 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> [...]
+ Read the entire contents of a file and return it as a string.
+ </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 [...]
+ 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="d [...]
+ 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#idm4177">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#idm4193">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#idm4198">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#idm4326">Mailing Lists</a></span></dt><dt><span class="section"><a href="help.html#idm4333">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#idm4353">Bug Tracking System</a></span></dt><dt><span class="section"><a h [...]
+ This manual is released as part of Apache/Rivet 3.1.0 (Saturday 2018-11-24 11:24:35+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.1</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.1 is a major rewriting of mod_rivet, the Apache HTTP
+ Websever module at the core of Rivet. Unlike in previous versions of
+ mod_rivet which only supported the <a class="ulink" href="" target="_top">prefork MPM</a>
+ (<a class="ulink" href="" 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="" 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.1 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.1 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 for further reading
+ </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.1 Installation</td></t [...]
diff --git a/rivet/manual3.1/inspect.html b/rivet/manual3.1/inspect.html
new file mode 100644
index 0000000..1e58018
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="incr0.html" title="incr0"><link rel="next" href="lassign_array.html" title="lassign_array"></head><body bgcolo [...]
+ <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" [...]
diff --git a/rivet/manual3.1/installation.html b/rivet/manual3.1/installation.html
new file mode 100644
index 0000000..7abc0d5
--- /dev/null
+++ b/rivet/manual3.1/installation.html
@@ -0,0 +1,169 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.1 Installation</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="index.html" title="Apache Rivet 3.1"><link rel="next" href="cmake.html" title="Building Rivet 3.1 with CMak [...]
+ Rivet 3.1 runs with the Apache 2.2.x and 2.4.x HTTP web servers.
+ 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="http://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.1 is now able to run with the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/worker.html" target="_top">worker</a>
+ and the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/event.html" target="_top">event</a>
+ MPMs. Rivet 3.1 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="http://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.1.0.tar.gz
+tar -xvf rivet-3.1.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.0</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.1 Configuration">the section called “Apache Rivet 3.1 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.1 </td><td width="20%" align="center"><a accesskey="h" hre [...]
diff --git a/rivet/manual3.1/internals.html b/rivet/manual3.1/internals.html
new file mode 100644
index 0000000..8f8fb3d
--- /dev/null
+++ b/rivet/manual3.1/internals.html
@@ -0,0 +1,315 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="help.html" title="Resources - How to Get Help"><link rel="next" href="lazybridge.html" title="Example: the “Lazy” bridge" [...]
+ 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="idm4372"></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. By now 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 suite
+ 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="idm4385"></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 that prevented mod_rivet
+ from supporting each of them, 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 has to be done. 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 assigned with a valid function pointer to the content generator
+ implemented by the bridge. If the pointer is not defined the Apache
+ web server will stop during 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 multiple 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="idm4419"></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="idm4422"></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="idm4427"></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="idm4435"></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="idm4443"></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 bringing 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="idm4467"></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.1 Installation">the section called “Apache Rivet 3.1 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 accessk [...]
diff --git a/rivet/manual3.1/lassign_array.html b/rivet/manual3.1/lassign_array.html
new file mode 100644
index 0000000..80f3863
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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="w [...]
+ <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" [...]
diff --git a/rivet/manual3.1/lazybridge.html b/rivet/manual3.1/lazybridge.html
new file mode 100644
index 0000000..7a1c179
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="internals.html" title="Rivet Internals"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#84008 [...]
+ 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="idm4501"></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="idm4517"></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="idm4536"></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= [...]
diff --git a/rivet/manual3.1/lempty.html b/rivet/manual3.1/lempty.html
new file mode 100644
index 0000000..8702e53
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 bgcol [...]
+ 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="idm1374"></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 [...]
diff --git a/rivet/manual3.1/lmatch.html b/rivet/manual3.1/lmatch.html
new file mode 100644
index 0000000..a0a4d7b
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 [...]
+ 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< [...]
+ 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" [...]
diff --git a/rivet/manual3.1/load_cookies.html b/rivet/manual3.1/load_cookies.html
new file mode 100644
index 0000000..f26b510
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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=" [...]
+ 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 [...]
diff --git a/rivet/manual3.1/load_env.html b/rivet/manual3.1/load_env.html
new file mode 100644
index 0000000..d6ce96a
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 [...]
+ 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 [...]
diff --git a/rivet/manual3.1/load_headers.html b/rivet/manual3.1/load_headers.html
new file mode 100644
index 0000000..a61a9d7
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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>< [...]
+ 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="t [...]
diff --git a/rivet/manual3.1/load_response.html b/rivet/manual3.1/load_response.html
new file mode 100644
index 0000000..775ef4c
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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><bod [...]
+ 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 [...]
diff --git a/rivet/manual3.1/lremove.html b/rivet/manual3.1/lremove.html
new file mode 100644
index 0000000..2f14ba3
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 bg [...]
+ <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= [...]
diff --git a/rivet/manual3.1/makeurl.html b/rivet/manual3.1/makeurl.html
new file mode 100644
index 0000000..16832cf
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 [...]
+ 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">lre [...]
diff --git a/rivet/manual3.1/no_body.html b/rivet/manual3.1/no_body.html
new file mode 100644
index 0000000..860d601
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" [...]
+ 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 [...]
diff --git a/rivet/manual3.1/parray.html b/rivet/manual3.1/parray.html
new file mode 100644
index 0000000..84ffff9
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" tex [...]
+ 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_bo [...]
diff --git a/rivet/manual3.1/parse.html b/rivet/manual3.1/parse.html
new file mode 100644
index 0000000..f719eb4
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" [...]
+ 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">par [...]
diff --git a/rivet/manual3.1/processing.html b/rivet/manual3.1/processing.html
new file mode 100644
index 0000000..1a2f235
--- /dev/null
+++ b/rivet/manual3.1/processing.html
@@ -0,0 +1,225 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="directives.html" title="Apache Rivet 3.1 Configuration"><link rel="next" href="request.html" title=" [...]
+ The mod_rivet 2.0,2.1,2.2,2.3 modules handle an HTTP request
+ by running a Tcl script or a Rivet (.rvt file) template
+ whose path appears 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 scripts common to every path
+ configured through 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 (triggering
+ the execution of a script defined by the directive AbortScript).
+ This scheme is in case
+ terminated by a further configurable script (AfterEveryScript).
+ In mod_rivet 2.x module series
+ 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.0 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 and used as a template to develop your own
+ request handler.
+ </td></tr></table></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm583"></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 at the thread initialization
+# stage and its content stored in a Tcl_Obj object. This object will
+# be evaluated calling Tcl_EvalObjExe
+#
+
+::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.1 Configuration </td><td width="20%" align="center"><a accesskey="h [...]
diff --git a/rivet/manual3.1/raw_post.html b/rivet/manual3.1/raw_post.html
new file mode 100644
index 0000000..57b733b
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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" [...]
+ 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 < [...]
diff --git a/rivet/manual3.1/read_file.html b/rivet/manual3.1/read_file.html
new file mode 100644
index 0000000..69a2200
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="redirect.html" title="redirect"><link rel="next" href="try.html" title="try"></head><body bgcolor="white" te [...]
+ 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="idm1594"></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="try.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">redir [...]
diff --git a/rivet/manual3.1/redirect.html b/rivet/manual3.1/redirect.html
new file mode 100644
index 0000000..146a27f
--- /dev/null
+++ b/rivet/manual3.1/redirect.html
@@ -0,0 +1,25 @@
+<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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><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 [...]
+ <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> was called before <span style="font-family:monospace"><span class="command"><strong>::rivet::redirect</strong></span></span>
+ thus causing the HTTP headers to be sent and preventing any possibility to
+ manipulate them</li><li class="listitem">The channel buffer was filled causing Tcl to
+ flush the channel</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= [...]
diff --git a/rivet/manual3.1/request.html b/rivet/manual3.1/request.html
new file mode 100644
index 0000000..520d72f
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="processing.html" title="Apache Rivet HTTP Request Processing"><link rel="next" hr [...]
+ 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.0,2.1,2.2,2.3 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="idm620"></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="idm626"></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="idm642"></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="idm652"></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="idm658"></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="idm668"></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>BeforeSc [...]
diff --git a/rivet/manual3.1/rivet.css b/rivet/manual3.1/rivet.css
new file mode 100644
index 0000000..b40b308
--- /dev/null
+++ b/rivet/manual3.1/rivet.css
@@ -0,0 +1,391 @@
+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{}
+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.1/session_package.html b/rivet/manual3.1/session_package.html
new file mode 100644
index 0000000..9a69c59
--- /dev/null
+++ b/rivet/manual3.1/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 V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.1"><link rel="up" href="index.html" title="Apache Rivet 3.1"><link rel="prev" href="diodisplay_package.html" title="DIODisplay"><link rel="next" href="form.html" title="Form: An HTML Form Fields Generation [...]
+ 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="idm3259"></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="idm3269"></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="idm3281"></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-spac [...]
+ 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">return [...]
+ 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="fon [...]
+ 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="fon [...]
+ 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="idm3327"></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
... 505 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: site-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: site-cvs-help@tcl.apache.org