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/01/17 22:31:49 UTC

svn commit: r1821429 [8/9] - in /tcl/site/rivet: ./ html/ manual3.0/ manual3.0/images/

Added: tcl/site/rivet/manual3.0/request.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/request.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/request.html (added)
+++ tcl/site/rivet/manual3.0/request.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,173 @@
+<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.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="processing.html" title="Apache Rivet HTTP Request Processing"><link rel="next" href="commands.html" title="Rivet Tcl Commands and Variables"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Child Processes Lifecycle and Request Processing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="processing.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align
 ="right"> <a accesskey="n" href="commands.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="request"></a>Apache Child Processes Lifecycle and Request Processing</h2></div></div></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm606"></a>Apache Child Process Lifecycle</h3></div></div></div><p style="width:90%">
+            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="idm619"></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,
+					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="idm624"></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 &lt;VirtualHost...&gt;...&lt;/VirtualHost ...&gt;
+	    			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="idm639"></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="idm646"></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="idm652"></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="idm662"></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><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 paragraph applies to the standard mod_rivet way of handling requests. This 
+			method is explained in the <a class="xref" href="processing.html" title="Apache Rivet HTTP Request Processing">the section called “Apache Rivet HTTP Request Processing”</a>. 
+			If you write your own processing root procedure you have entire 
+			freedom on how to manage namespaces of your applications
+		</td></tr></table></div><p style="width:90%">
+			With the sole exception of .rvt templates, mod_rivet runs pure Tcl scripts 
+			at the global namespace. That means that every variable or procedure 
+			created in Tcl scripts resides by default in the 
+			"::" namespace (just like in traditional Tcl scripting) and they
+			are persistent across different requests until explicitly unset or
+			until the interpreter is deleted.
+			You can create your own application namespaces to store data but
+			it is important to remember that subsequent requests will in general be served 
+			by different child processes. Your application can rely on the fact that 
+			certain application data will be in the interpreter, but you shouldn't 
+			assume the state of a transaction spanning several pages 
+			can be stored in this way and be safely kept available to a 
+			specific client. Sessions exist for this purpose and Rivet ships its own 
+			session package with support for most of popular DBMS. Nonetheless 
+			storing data in the global namespace can be useful, even though scoping 
+			data in a namespace is recommended. I/O channels and
+			database connections are examples of information usually specific 
+			to a process for which you don't want to pay the overhead of creating them
+			at every request, probably causing a dramatic loss in the application
+			performance.
+		</p><p style="width:90%">
+			A special role in the interpreter is played by the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span> 
+			namespace.	The <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span> namespace is deleted and recreated
+			at every request and Rivet templates (.rvt files) are executed within it.
+		</p><p style="width:90%"> 
+			Unless you're fully qualifying variable names outside the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span> 
+			namespace, every variable and procedure created in .rvt files is by default placed in
+			it and deleted before any other requests gets processed. It is therefore safe to
+			create variables or object instances in template files and foresake about them: Rivet
+			will take care of cleaning the namespace up and everything created inside the namespace
+			will be destroyed.
+		</p><div class="table"><table align="center" title="Apache Rivet Scripts" class="namespaces"><thead><td>Stage</td><td>Script</td><td>Namespace</td></thead><tbody><tr class="init"><td>Apache Initialization</td><td>ServerInitScript</td><td>::</td></tr><tr class="childinit"><td rowspan="2">Child Initialization</td><td>GlobalInitScript</td><td>::</td></tr><tr class="childinit"><td>ChildInitScript</td><td>::</td></tr><tr class="processing"><td rowspan="6">Request Processing</td><td>BeforeScript</td><td>::</td></tr><tr class="processing"><td>.rvt</td><td>::request</td></tr><tr class="processing"><td>.tcl</td><td>::</td></tr><tr class="processing"><td>AfterScript</td><td>::</td></tr><tr class="processing"><td>AbortScript</td><td>::</td></tr><tr class="processing"><td>AfterEveryScript</td><td>::</td></tr><tr class="childexit"><td>Child Termination</td><td>ChildExitScript</td><td>::</td></tr><tr class="processing"><td>Error Handling</td><td>ErrorScript</td><td>::</td></tr></tbody></table><
 /div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="processing.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="commands.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet HTTP Request Processing </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Rivet Tcl Commands and Variables</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/rivet.css
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/rivet.css?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/rivet.css (added)
+++ tcl/site/rivet/manual3.0/rivet.css Wed Jan 17 22:31:48 2018
@@ -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;
+}

Added: tcl/site/rivet/manual3.0/session_package.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/session_package.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/session_package.html (added)
+++ tcl/site/rivet/manual3.0/session_package.html Wed Jan 17 22:31:48 2018
@@ -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.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="diodisplay_package.html" title="DIODisplay"><link rel="next" href="form.html" title="Form: An HTML Form Fields Generation Utility"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Session Package</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diodisplay_package.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="form.html"><img src="images/next.png" alt="Nex
 t"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="session_package"></a>Session Package</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3234"></a>Introduction</h3></div></div></div><p style="width:90%">
+	This is session management code.  It provides an interface
+	to allow you to generate and track a browser's visit as a
+	"session", giving you a unique session ID and an interface
+	for storing and retrieving data for that session on the
+	server.
+      </p><p style="width:90%">
+	This is an alpha/beta release -- documentation is not in
+	final form, but everything you need should be in this file.
+      </p><p style="width:90%">
+	Using sessions and their included ability to store and
+	retrieve session-related data on the server, programmers can
+	generate more secure and higher-performance websites.  For
+	example, hidden fields do not have to be included in forms
+	(and the risk of them being manipulated by the user
+	mitigated) since data that would be stored in hidden fields
+	can now be stored in the session cache on the server.  Forms
+	are then faster since no hidden data is transmitted --
+	hidden fields must be sent twice, once in the form to the
+	broswer and once in the response from it.
+      </p><p style="width:90%">
+	Robust login systems, etc, can be built on top of this code.
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="requirements"></a>Requirements</h3></div></div></div><p style="width:90%">
+	  Currently has only been tested with Postgresql, MySql and Oracle.
+	  All DB interfacing is done through DIO, though, so it
+	  should be relatively easy to add support for other
+	  databases.
+	</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3243"></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="idm3253"></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 &lt;HEAD&gt;
+	  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="idm3265"></a>Using Sessions From Your Code</h3></div></div></div><p style="width:90%">The main methods your code will use are:</p><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION</span> <span style="font-weight:bold ; font-family:monospace">id</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		After doing a <span style="font-family:monospace"><span class="command"><strong>SESSION activate</strong></span></span>,
+		this will return a 32-byte ASCII-encoded random
+		hexadecimal string.  Every time this browser comes
+		to us with a request within the timeout period, this
+		same string will be returned (assuming they have
+		cookies enabled).
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION</span> <span style="font-weight:bold ; font-family:monospace">is_new_session</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">returns 1 if it's a new session or 0 if it has
+		previously existed (i.e. it's a zero if this request
+		represents a "return" or subsequent visit to a
+		current session.)</div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION new_session_reason</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		This will return why this request is the first
+		request of a new session, either "no_cookie" saying
+		the browser didn't give us a session cookie,
+		"no_session" indicating we got a cookie but couldn't
+		find it in our session table, or "timeout" where
+		they had a cookie and we found the matching session
+		but the session has timed out.
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION store</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>data</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Given the name of a package, a key, and some data.
+		Stores the data in the rivet session cache table.
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION fetch</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Given a package name and a key, return the data
+		stored by the store method, or an empty string if
+		none was set.  (Status is set to the DIO error that
+		occurred, it can be fetched using the status
+		method.)
+	      </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3311"></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="idm3389"></a>Session Methods</h3></div></div></div><p style="width:90%">
+	  The following methods can be invoked to find out
+	  information about the current session, store and fetch
+	  server data identified with this session, etc:
+	</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION status</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Return the status of the last operation
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION id</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Get the session ID of the current browser.  Returns
+		an empty string if there's no session (will not
+		happen is SESSION activate has been issued.)
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION new_session_reason</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Returns the reason why there wasn't a previous
+		session, either "no_cookie" saying the browser
+		didn't give us a session cookie, "no_session"
+		indicating we got a cookie but couldn't find it in
+		the session table, or "timeout" when we had a cookie
+		and a session but the session had timed out.
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION store</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>data</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Given a package name, a key string, and a data
+		string, store the data in the rivet session
+		cache.
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION fetch</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Given a package name and a key, return the data
+		stored by the store method, or an empty string if
+		none was set.  Status is set to the DIO error that
+		occurred, it can be fetched using the status
+		method.
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION delete</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Given a user ID and looking at their IP address we
+		inherited from the environment (thanks, Apache),
+		remove them from the session table.  (the session
+		table is how the server remembers stuff about
+		sessions). If the session ID was not specified the
+		current session is deleted.
+	      </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION activate</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+		Find and validate the session ID if they have one.
+		If they don't have one or it isn't valid (timed out,
+		etc), create a session and drop a cookie on
+		them.
+	      </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3445"></a>Getting Additional Randomness From The Entropy File</h3></div></div></div><pre class="programlisting">RivetServerConf ChildInitScript "Session SESSION -entropyFile /dev/urandom \
+  -entropyLength 10 -debugMode 1"</pre><p style="width:90%">
+	  This options say we want to get randomness from an entropy
+	  file (random data pseudo-device) of /dev/urandom, to get ten
+	  bytes of random data from that entropy device, and to turn
+	  on debug mode, which will cause the SESSION object to output
+	  all manner of debugging information as it does stuff.  This
+	  has been tested on FreeBSD and appears to work.
+      </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diodisplay_package.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="form.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">DIODisplay </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Form: An HTML Form Fields Generation Utility</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/shorthand.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/shorthand.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/shorthand.html (added)
+++ tcl/site/rivet/manual3.0/shorthand.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>&lt;?= ... ?&gt;</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.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="next" href="abort_code.html" title="abort_code"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">&lt;?= ... ?&gt;</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="commands.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="abort_code.html"><img s
 rc="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="shorthand"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>&lt;?= ... ?&gt; — 
+				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">&lt;?=   <span style="font-family:monospace; font-weight: bold;">$string</span>  ?&gt;</span> </div></div></div><div class="refsect1"><a name="idm736"></a><h2>Description</h2><p style="width:90%">
+				This construct is a simplified form to print a single string wherever
+				needed in a  ?<span style="font-family:monospace; font-weight: bold;">.rvt</span>? template. The contruct is equivalent to
+				writing the following line of Tcl code
+			</p><pre class="programlisting">puts -nonewline $string</pre><p style="width:90%">			
+				The  ?<span style="font-family:monospace; font-weight: bold;">string</span>? argument to the shorthand construct can 
+				be any Tcl command returning a value
+			</p><p style="width:90%">
+				See <a class="xref" href="examples.html#hello_world" title="Example 1. Hello World">Example 1, “Hello World”</a> or
+				<a class="xref" href="examples.html#variable_access" title="Example 3. Variable Access">Example 3, “Variable Access”</a>
+			</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="commands.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="abort_code.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Rivet Tcl Commands and Variables </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> abort_code</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/tcl_packages.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/tcl_packages.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/tcl_packages.html (added)
+++ tcl/site/rivet/manual3.0/tcl_packages.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Rivet Tcl Packages</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="examples.html" title="Examples and Usage"><link rel="next" href="dio.html" title="DIO - Database Interface Objects"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Rivet Tcl Packages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="examples.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="dio.html"><img src="images/next.png" alt="Next"></a></td></tr></t
 able></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="tcl_packages"></a>Rivet Tcl Packages</h2></div></div></div><p style="width:90%">
+      In addition to the core Apache module, Rivet provides a number
+      of Tcl packages that include potentially useful code.
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">dio is a database abstraction layer.</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">form - for creating forms.</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">calendar - a package providing a simple configurable calendar generator</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">rivet entities - an UTF-8 / HTML entities converter</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">formbroker - a form data validators broker</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">ASCII Glyphs - prints most of the ASCII character set as large ASCII art glyphs</div></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="le
 ft"><a accesskey="p" href="examples.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="dio.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Examples and Usage </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> DIO - Database Interface Objects</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/toglyphs.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/toglyphs.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/toglyphs.html (added)
+++ tcl/site/rivet/manual3.0/toglyphs.html Wed Jan 17 22:31:48 2018
@@ -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 3.0"><link rel="up" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="prev" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="next" href="formbroker.html" title="The Form Broker"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">toGlyphs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="asciiglyphs.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">AsciiGlyphs</th><td width="20%" align="right"> <a accesskey="n" href="formbroker.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div 
 class="refentry"><a name="toglyphs"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>toGlyphs — 
+	            	print large ASCII glyphs
+	            </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::AsciiGlyphs toGlyphs</span>   <span style="font-family:monospace; font-weight: bold;">string</span> </div></div></div><div class="refsect1"><a name="idm4173"></a><h2>Description</h2><p style="width:90%">
+            	prints the ASCII glyphs corresponding to the characters forming
+    		        	the argument   <span style="font-family:monospace; font-weight: bold;">string</span> 
+            </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="asciiglyphs.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="asciiglyphs.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="formbroker.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">AsciiGlyphs </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> The Form Broker</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/try.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/try.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/try.html (added)
+++ tcl/site/rivet/manual3.0/try.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,57 @@
+<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 3.0"><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 bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">try</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="read_file.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="unescape_string.html"><img src="images/next.png" alt="Next">
 </a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="try"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>try — 
+				Catch error and exception conditions
+			</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::try</span>  ?<span style="font-family:monospace; font-weight: bold;">script</span>? ?<span style="font-family:monospace; font-weight: bold;">script</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>handlers</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>finally script</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1603"></a><h2>Description</h2><p style="width:90%">
+				<span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> wraps the core language
+				command and simply traps exceptions that might have raised
+				by <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span> and
+				<span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> to throw them again and
+				thus causing <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> to be executed.
+			</p><p style="width:90%">
+				If neither <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span> nor
+				<span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> are called from  ?<span style="font-family:monospace; font-weight: bold;">script</span>? 
+				then any handlers specified in the command are tested for execution.
+				Thus <span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> can transparently be used
+				as a replacement for Tcl's own <span style="font-family:monospace"><span class="command"><strong>try</strong></span></span> and it's needed
+				if you want  ?<span style="font-family:monospace; font-weight: bold;">script</span>? to safely bail out to <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>	
+			</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+				This command is not exported from the <span style="font-family:monospace"><span class="command"><strong>::rivet</strong></span></span> namespace and therefore has
+				to be fully qualified.
+			</td></tr></table></div><p style="width:90%">
+				This script shows how <span style="font-family:monospace"><span class="command"><strong>::rivet:try</strong></span></span>
+				handles different exceptions or errors. You can drive this script
+				within mod_rivet adding the arguments fail or abort or exit to its URL.
+				You can handle the <span class="quote">“<span class="quote">exit</span>”</span> and <span class="quote">“<span class="quote">abort</span>”</span> cases with
+				an <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>.
+				See <a class="xref" href="directives.html" title="Apache Rivet 3.0 Configuration">the section called “Apache Rivet 3.0 Configuration”</a>
+			</p><pre class="programlisting">&lt;html&gt;&lt;?::rivet::try {
+	if {[::rivet::var_qs exists exit]} {
+	    ::rivet::exit [::rivet::var_qs get exit]
+	} elseif {[::rivet::var_qs exists abort]} {
+	    ::rivet::abort_page [::rivet::var_qs get abort]
+	} elseif {[::rivet::var_qs exists fail]} {
+	    # this is just a non existent command
+	    wrong_command
+	} else {
+	    puts "&lt;b&gt;OK&lt;/b&gt;"
+	}
+
+} on error {e o} {
+  puts "catching error -&amp;gt; $e&lt;br/&gt;"
+  dict for {fd fv} $o {
+
+   puts "$fd --&amp;gt;&amp;gt; $fv&lt;br/&gt;"
+
+  }
+ }
+?&gt;&lt;/html&gt;</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 -&gt; invalid command name "wrong_command"
+-errorcode --&gt;&gt; TCL LOOKUP COMMAND wrong_command
+-code --&gt;&gt; 1
+-level --&gt;&gt; 0
+-errorstack --&gt;&gt; INNER {invokeStk1 wrong_command} UP 1
+-errorinfo --&gt;&gt; invalid command name "wrong_command" while executing "wrong_command" ("::try" body line 9)
+-errorline --&gt;&gt; 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="40%" align="left" valign="top">read_file </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> unescape_string</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/unescape_string.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/unescape_string.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/unescape_string.html (added)
+++ tcl/site/rivet/manual3.0/unescape_string.html Wed Jan 17 22:31:48 2018
@@ -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 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="try.html" title="try"><link rel="next" href="upload.html" title="upload"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">unescape_string</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="try.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="upload.html"><img src="images/next.png" alt="Next"></a></td></tr></table
 ></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="unescape_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>unescape_string — unescape escaped characters in a string.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::unescape_string</span>  ?<span style="font-family:monospace; font-weight: bold;">string</span>?</div></div></div><div class="refsect1"><a name="idm1640"></a><h2>Description</h2><p style="width:90%">
+		    Scans through each character in the specified string looking
+		    for escaped character sequences (characters containing a
+		    percent sign and two hexadecimal characters), unescaping them 
+		    back to their original character values, as needed, also mapping
+		    plus signs to spaces, and returning the result.
+		</p><p style="width:90%">
+		    This is useful for unquoting strings that have been quoted to
+		    be part of a URL.
+		</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="try.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="upload.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">try </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> upload</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/upload.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/upload.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/upload.html (added)
+++ tcl/site/rivet/manual3.0/upload.html Wed Jan 17 22:31:48 2018
@@ -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 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="unescape_string.html" title="unescape_string"><link rel="next" href="url_script.html" title="url_script"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">upload</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unescape_string.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="url_script.html"><img src="images/next.png" al
 t="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="upload"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>upload — handle a file uploaded by a client.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>  (<span style="font-family:monospace; font-weight: bold;">channel</span> | <span style="font-family:monospace; font-weight: bold;">save</span> | <span style="font-family:monospace; font-weight: bold;">data</span> | <span style="font-family:monospace; font-weight: bold;">exists</span> | <span style="font-family:monospace; font-weight: bold;">size</span> | <span style="font-family:monospace; font-weight: bold;">type</span> | <span style="font-family:monospace; font-weight: 
 bold;">filename</span>)</div></div></div><div class="refsect1"><a name="idm1659"></a><h2>Description</h2><p style="width:90%">
+				    The upload command is for file upload manipulation.
+				    See the relevant Apache Directives to further configure the
+				    behavior of this Rivet feature.
+				</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+							<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">channel</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+						</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+							    When given the name of a file upload
+				    			<em class="replaceable"><code>uploadname</code></em>,
+							    returns a Tcl channel that can be used to access the
+							    uploaded file.
+						    </div></div></dd><dt><span class="term">
+						    <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">save</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename</code></em></span>?</div></div>
+						</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+							Saves the <em class="replaceable"><code>uploadname</code></em> in
+							the file <em class="replaceable"><code>filename</code></em>.
+						    </div></div></dd><dt><span class="term">
+							<div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">data</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+						</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+								Returns data uploaded to the server.  This is binary clean
+								- in other words, it will work even with files like
+								images, executables, compressed files, and so on.
+						    </div></div></dd><dt><span class="term">
+						   <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">exists</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+						</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+									Returns true if an upload named  ?<span style="font-family:monospace; font-weight: bold;">uploadname</span>?
+									exists.  This can be used in scripts that are meant to
+									be run by different forms that send over uploads that
+									might need specific processing.
+						    </div></div></dd><dt><span class="term">
+						    <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">size</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+						</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+								Returns the size of the file uploaded.
+			    			</div></div></dd><dt><span class="term">
+					    <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">type</span> </div></div>
+					</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+							If the <code class="varname">Content-type</code> is set, it is
+							returned, otherwise, an empty string.
+			    		</div></div></dd><dt><span class="term">
+					    <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">filename</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+					</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+							Returns the filename on the remote host that uploaded the file.
+		    			</div></div></dd><dt><span class="term">
+					    <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">tempname</span>  ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+					</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+							Returns the name of the temporary file on the local host that the file was uploaded into.
+		    			</div></div></dd><dt><span class="term">
+					    <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span>   <span style="font-family:monospace; font-weight: bold;">names</span> </div></div>
+					</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+							Returns the variable names, as a list, of all the files uploaded.
+					   </div></div></dd></dl></div><p style="width:90%">
+			    See <a class="xref" href="examples.html#file_upload" title="Example 4. File Upload">Example 4, “File Upload”</a>.
+			</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unescape_string.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="url_script.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">unescape_string </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> url_script</td></tr></table></div></body></html>

Added: tcl/site/rivet/manual3.0/url_script.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/url_script.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/url_script.html (added)
+++ tcl/site/rivet/manual3.0/url_script.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>url_script</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="upload.html" title="upload"><link rel="next" href="var.html" title="var"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">url_script</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="upload.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="var.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><di
 v class="refentry"><div class="refentry.separator"><hr></div><a name="url_script"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>url_script — get the code of the URL referenced Tcl script or Rivet template</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex;   word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::url_script</span> </div></div></div><div class="refsect1"><a name="idm1759"></a><h2>Description</h2><p style="width:90%">
+				This command is used internally by the rivet central Tcl
+				procedure (::Rivet::request_handling) executed by
+				the default traditional code for HTTP requests processing.
+				Unless you're implementing your own ::Rivet::request_handling
+				procedure it's unlikely it can be of any use.
+			</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upload.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="var.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">upload </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> var</td></tr></table></div></body></html>



---------------------------------------------------------------------
To unsubscribe, e-mail: site-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: site-cvs-help@tcl.apache.org