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 2012/12/03 02:16:32 UTC
svn commit: r1416329 [6/7] - in /tcl/site/rivet/manual2.1: ./ images/
Added: tcl/site/rivet/manual2.1/internals.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/internals.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/internals.html (added)
+++ tcl/site/rivet/manual2.1/internals.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,125 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Rivet Internals</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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 NeoWebScript"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Rivet Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="help.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="upgrading.html"><img src="images/next.png" alt="Next"></a>
</td></tr></table></div><div class="section" title="Rivet Internals"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="internals"></a>Rivet Internals</h2></div></div></div><p style="width:90%">
+ This section easily falls out of date, as new code is added, old
+ code is removed, and changes are made. The best place to look
+ is the source code itself. If you are interested in the changes
+ themselves, the Subversion revision control system
+ (<span style="font-family:monospace"><span class="command"><strong>svn</strong></span></span>) can provide you with information about
+ what has been happening with the code.
+ </p><div class="section" title="Initialization"><div class="titlepage"><div><div><h3 class="title"><a name="idp8859136"></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" title="RivetChan"><div class="titlepage"><div><div><h3 class="title"><a name="idp8845392"></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" title="The global Command"><div class="titlepage"><div><div><h3 class="title"><a name="idp8909360"></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" title="Page Parsing, Execution and Caching"><div class="titlepage"><div><div><h3 class="title"><a name="idp8914752"></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" title="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" title="Debugging Rivet and Apache"><div class="titlepage"><div><div><h3 class="title"><a name="idp8919776"></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 style="background:#ccc; margin: 2ex; margin-right: 10%; padding: 1ex; border: dashed black 1px ; white-space: pre; font-family: monospace; font-size: 90%;" 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 style="background:#ccc; margin: 2ex; margin-right: 10%; padding: 1ex; border: dashed black 1px ; white-space: pre; font-family: monospace; font-size: 90%;" 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 run
+ the <span style="font-family:monospace"><span class="command"><strong>./configure.tcl</strong></span></span> script with the
+ -enable-symbols option, and recompile.
+ </p><p style="width:90%">
+ Since it's easier to debug a single process, we'll still run
+ Apache in single process mode with -X:
+ </p><pre style="background:#ccc; margin: 2ex; margin-right: 10%; padding: 1ex; border: dashed black 1px ; white-space: pre; font-family: monospace; font-size: 90%;" 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 accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Upgrading from mod_dtcl or NeoWebScript</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/lempty.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/lempty.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/lempty.html (added)
+++ tcl/site/rivet/manual2.1/lempty.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>lempty</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="lmatch.html" title="lmatch"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lempty</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="inspect.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="lmatch.html"><img src="images/next.png" alt="Next"></a></td></tr></table>
</div><div class="refentry" title="lempty"><div class="refentry.separator"><hr></div><a name="lempty"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lempty —
+ Returns 1 if <list> is empty or 0 if it has any elements.
+ This command emulates the TclX lempty command.
+ </p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; 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" title="Description"><a name="idp5469616"></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="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="lmatch.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">inspect </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> lmatch</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/lmatch.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/lmatch.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/lmatch.html (added)
+++ tcl/site/rivet/manual2.1/lmatch.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>lmatch</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lmatch</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="lempty.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_cookies.html"><img src="images/next.png" alt="Next"></a></t
d></tr></table></div><div class="refentry" title="lmatch"><div class="refentry.separator"><hr></div><a name="lmatch"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lmatch —
+ Look for elements in <list> that match <pattern>
+ </p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::lmatch</span> (<span style="font-family:monospace; font-weight: bold;">-exact</span> | <span style="font-family:monospace; font-weight: bold;">-glob</span> | <span style="font-family:monospace; font-weight: bold;">-regexp</span>) ?<span style="font-family:monospace; font-weight: bold;">list</span>? ?<span style="font-family:monospace; font-weight: bold;">pattern</span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5479728"></a><h2>Description</h2><p style="width:90%">
+ Look for elements in <list> that match <pattern>.
+ This command is a decent replacement for TclX lmatch command when TclX is
+ not available
+ </p><p style="width:90%">
+ In the following example a regular expression is matched against
+ each element in the input list and a list containing the matching
+ elements is returned
+ </p><p style="width:90%">
+ </p><pre style="background:#ccc; margin: 2ex; margin-right: 10%; padding: 1ex; border: dashed black 1px ; white-space: pre; font-family: monospace; font-size: 90%;" class="programlisting">::rivet::lmatch -regexp { aaxa bxxb ccxxxxcc } {.+[x]{2}.+}
+bxxb ccxxxxcc</pre><p style="width:90%">
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="lempty.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_cookies.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">lempty </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_cookies</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/load_cookies.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/load_cookies.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/load_cookies.html (added)
+++ tcl/site/rivet/manual2.1/load_cookies.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>load_cookies</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_cookies</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="lmatch.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_env.html"><img src="images/next.png" alt="Next"></a></t
d></tr></table></div><div class="refentry" title="load_cookies"><div class="refentry.separator"><hr></div><a name="load_cookies"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_cookies — get any cookie variables sent by the client.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_cookies</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>array_name</code></em></span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5487328"></a><h2>Description</h2></div><p style="width:90%">
+ Load the array of cookie variables into the specified
+ array name. Uses array cookies by
+ default.
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="lmatch.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_env.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">lmatch </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_env</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/load_env.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/load_env.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/load_env.html (added)
+++ tcl/site/rivet/manual2.1/load_env.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>load_env</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_env</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_cookies.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_headers.html"><img src="images/next.p
ng" alt="Next"></a></td></tr></table></div><div class="refentry" title="load_env"><div class="refentry.separator"><hr></div><a name="load_env"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_env — get the request's environment variables.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_env</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>array_name</code></em></span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5493360"></a><h2>Description</h2><p style="width:90%">
+ Load the array of environment variables into the specified
+ array name. Uses array ::request::env by
+ default.
+ </p><p style="width:90%">
+ As Rivet pages are run in the ::request
+ namespace, it isn't necessary to qualify the array name
+ for most uses - it's ok to access it as
+ env.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="load_cookies.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_headers.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_cookies </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_headers</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/load_headers.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/load_headers.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/load_headers.html (added)
+++ tcl/site/rivet/manual2.1/load_headers.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>load_headers</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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 bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_env.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="load_response.html"><img src="images/next.pn
g" alt="Next"></a></td></tr></table></div><div class="refentry" title="load_headers"><div class="refentry.separator"><hr></div><a name="load_headers"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_headers — get client request's headers.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_headers</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>array_name</code></em></span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5500688"></a><h2>Description</h2><p style="width:90%">
+ Load the headers that come from a client request into the
+ provided array name, or use headers if no
+ name is provided.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="load_env.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="load_response.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_env </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> load_response</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/load_response.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/load_response.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/load_response.html (added)
+++ tcl/site/rivet/manual2.1/load_response.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,27 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>load_response</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="makeurl.html" title="makeurl"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">load_response</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_headers.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="makeurl.html"><img src="images/next.png" a
lt="Next"></a></td></tr></table></div><div class="refentry" title="load_response"><div class="refentry.separator"><hr></div><a name="load_response"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>load_response — load form variables into an array.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::load_response</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5506736"></a><h2>Description</h2><p style="width:90%">
+ Load any form variables passed to this page into an
+ array. If <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span> is called without
+ arguments the array response is created in
+ the scope of the caller. If the variables var1,var2,var3...
+ having values val1,val2,val3... are passed to the page, the
+ resulting array will be a collection mapping var1,var2,var3...
+ to their corresponding values. <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span>
+ was inspired by the same NeoWebScript procedure in the way
+ it deals with multiple assignments: if a variable
+ is assigned more than once the corresponding array element will be a
+ list of the values for the variable. This can be useful in the case
+ of forms with checkbox options that are given the same name.
+ This condition is signalled by the presence of an auxiliary array
+ variable.
+ </p><p style="width:90%">
+ Example: if a group of checkboxes are associated to the var1
+ variable then <span style="font-family:monospace"><span class="command"><strong>response(var1)</strong></span></span> will store
+ the list of their values and the array will also have the extra variable
+ response(__var1) which can be tested with
+ the usual <span style="font-family:monospace"><span class="command"><strong>[info exists response(__var1)]</strong></span></span>
+ </p><p style="width:90%">
+ Calling <span style="font-family:monospace"><span class="command"><strong>load_response</strong></span></span> several times for the same
+ array results in adding more values to the array at every call.
+ When needed it is left to the caller to empty the array between
+ two subsequent calls.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="load_headers.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="makeurl.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_headers </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> makeurl</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/makeurl.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/makeurl.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/makeurl.html (added)
+++ tcl/site/rivet/manual2.1/makeurl.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>makeurl</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="no_body.html" title="no_body"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">makeurl</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="load_response.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="no_body.html"><img src="images/next.png" alt="Next"
></a></td></tr></table></div><div class="refentry" title="makeurl"><div class="refentry.separator"><hr></div><a name="makeurl"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>makeurl — construct url's based on hostname, port.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::makeurl</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename</code></em></span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5518976"></a><h2>Description</h2><p style="width:90%">
+ Create a self referencing URL from a filename. <span style="font-family:monospace"><span class="command"><strong>makeurl</strong></span></span>
+ can be used in three ways
+ </p><div class="itemizedlist"><ul class="itemizedlist" 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 style="background:#ccc; margin: 2ex; margin-right: 10%; padding: 1ex; border: dashed black 1px ; white-space: pre; font-family: monospace; font-size: 90%;" 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="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="no_body.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">load_response </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> no_body</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/no_body.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/no_body.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/no_body.html (added)
+++ tcl/site/rivet/manual2.1/no_body.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>no_body</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">no_body</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="makeurl.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="parray.html"><img src="images/next.png" alt="Next"></a></td></tr></tabl
e></div><div class="refentry" title="no_body"><div class="refentry.separator"><hr></div><a name="no_body"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>no_body — Prevents Rivet from sending any content.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::no_body</span> </div></div></div><div class="refsect1" title="Description"><a name="idp5527856"></a><h2>Description</h2><p style="width:90%">
+ This command is useful for situations where it is necessary
+ to only return HTTP headers and no actual content. For
+ instance, when returning a 304 redirect.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="makeurl.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="parray.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">makeurl </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> parray</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/parray.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/parray.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/parray.html (added)
+++ tcl/site/rivet/manual2.1/parray.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>parray</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">parray</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="no_body.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="parse.html"><img src="images/next.png" alt="Next"></a></td></tr></table></d
iv><div class="refentry" title="parray"><div class="refentry.separator"><hr></div><a name="parray"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>parray — Tcl's <span style="font-family:monospace"><span class="command"><strong>parray</strong></span></span> with html formatting.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::parray</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>arrayName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>?<span class="optional">pattern</span>?</code></em></span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5535360"></a><h2>Description</h2><p style="width
:90%">
+ An html version of the standard Tcl
+ <span style="font-family:monospace"><span class="command"><strong>parray</strong></span></span> command. Displays the entire
+ contents of an array in a sorted, nicely-formatted way.
+ Mostly used for debugging purposes.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="no_body.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="parse.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">no_body </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> parse</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/parse.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/parse.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/parse.html (added)
+++ tcl/site/rivet/manual2.1/parse.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>parse</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">parse</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parray.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="raw_post.html"><img src="images/next.png" alt="Next"></a></td></tr></table
></div><div class="refentry" title="parse"><div class="refentry.separator"><hr></div><a name="parse"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>parse — parses a Rivet template file.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::parse</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename</code></em></span>?</div></div></div><div class="refsect1" title="Description"><a name="idp5541696"></a><h2>Description</h2><p style="width:90%">
+ Like the Tcl <span style="font-family:monospace"><span class="command"><strong>source</strong></span></span> command, but also
+ parses for Rivet <? and ?> processing tags. Using
+ this command, you can use one .rvt file from another.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parray.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="raw_post.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">parray </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> raw_post</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/raw_post.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/raw_post.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/raw_post.html (added)
+++ tcl/site/rivet/manual2.1/raw_post.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>raw_post</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="read_file.html" title="read_file"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">raw_post</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parse.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="read_file.html"><img src="images/next.png" alt="Next"></a></td></tr><
/table></div><div class="refentry" title="raw_post"><div class="refentry.separator"><hr></div><a name="raw_post"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>raw_post — get the unmodified body of a POST request sent by the client.</p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::raw_post</span> </div></div></div><div class="refsect1" title="Description"><a name="idp5547328"></a><h2>Description</h2></div><p style="width:90%">
+ Returns the raw POST data from the request. If the request was
+ not a POST or there is no data, then "" - an empty string - is returned.
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parse.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="read_file.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">parse </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> read_file</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/read_file.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/read_file.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/read_file.html (added)
+++ tcl/site/rivet/manual2.1/read_file.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>read_file</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.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="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">read_file</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="raw_post.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right"> <a accesskey="n" href="unescape_string.html"><img src="images/next.pn
g" alt="Next"></a></td></tr></table></div><div class="refentry" title="read_file"><div class="refentry.separator"><hr></div><a name="read_file"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>read_file —
+ Read the entire contents of a file and return it as a string.
+ </p></div><div class="refsynopsisdiv" title="Synopsis"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="background:#ccccff ; 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" title="Description"><a name="idp5553008"></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="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="unescape_string.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">raw_post </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> unescape_string</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/request.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/request.html?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/request.html (added)
+++ tcl/site/rivet/manual2.1/request.html Mon Dec 3 01:16:15 2012
@@ -0,0 +1,162 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><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.76.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.html" title="Rivet Apache Directives"></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="installation.html"><img src="images/prev.png" alt="Prev"></a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a
accesskey="n" href="directives.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section" title="Apache Child Processes Lifecycle and Request Processing"><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" title="Apache Child Process Lifecycle"><div class="titlepage"><div><div><h3 class="title"><a name="idp4756544"></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="idp4806944"></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="idp4810464"></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" title="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="idp4818768"></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="idp4823616"></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" title="Apache Rivet Error and Exception Scripts Directives"><div class="titlepage"><div><div><h3 class="title"><a name="idp4828208"></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" title="Tcl Namespaces in Rivet and the ::request Namespace"><div class="titlepage"><div><div><h3 class="title"><a name="idp4834448"></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><table id="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="processing"><td>Error Handling</td><td>ErrorScript</td><td>::</td></tr><tr class="childexit"><td>Child Termination</td><td>ChildExitScript</td><td>::</td></tr></tbody></table></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 Installation </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Rivet Apache Directives</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual2.1/rivet.css
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual2.1/rivet.css?rev=1416329&view=auto
==============================================================================
--- tcl/site/rivet/manual2.1/rivet.css (added)
+++ tcl/site/rivet/manual2.1/rivet.css Mon Dec 3 01:16:15 2012
@@ -0,0 +1,345 @@
+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: #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;
+ font-size: normal;
+ padding-left: 15pt;
+}
+
+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: #a0a0d0;
+ BORDER: solid 3px #606090;
+ PADDING: 1px
+}
+
+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: #EFEFF8;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: thin solid #a0a0d0;
+}
+
+DIV.NUKEFOOTER {
+ color: #000000;
+ background-color: #B0E0E6;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: thin solid #a0a0d0;
+}
+
+DIV.NAVHEADER {
+ color: #000000;
+ background-color: #EFEFF8;
+ padding: 5px;
+ margin-bottom: 10px;
+ width: 100%;
+ border: thin solid #a0a0d0;
+}
+
+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: #EFF8F8;
+}
+
+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;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: site-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: site-cvs-help@tcl.apache.org