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 [6/9] - in /tcl/site/rivet: ./ html/ manual3.0/
manual3.0/images/
Added: tcl/site/rivet/manual3.0/include.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/include.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/include.html (added)
+++ tcl/site/rivet/manual3.0/include.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>include</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="import_keyvalue_pairs.html" title="import_keyvalue_pairs"><link rel="next" href="incr0.html" title="incr0"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">include</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="import_keyvalue_pairs.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="incr0.html"><img src="images/next.pn
g" alt="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="include"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>include â includes a file into the output stream without modification.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::include</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename_name</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1281"></a><h2>Description</h2><p style="width:90%">
+ Include a file without parsing it for processing tags <?
+ and ?>. This is the best way to include an HTML file or
+ any other static content.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="import_keyvalue_pairs.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="incr0.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">import_keyvalue_pairs </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> incr0</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/incr0.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/incr0.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/incr0.html (added)
+++ tcl/site/rivet/manual3.0/incr0.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>incr0</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="include.html" title="include"><link rel="next" href="inspect.html" title="inspect"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">incr0</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="include.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="inspect.html"><img src="images/next.png" alt="Next"></a></td></tr></table></di
v><div class="refentry"><div class="refentry.separator"><hr></div><a name="incr0"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>incr0 â increment a variable or set it to 1 if nonexistent.</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">incr0</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>varname</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>num</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1295"></a><h2>Description</h2><p style="width:90%">
+ Increment a variable
+ <em class="replaceable"><code>varname</code></em> by
+ <em class="replaceable"><code>num</code></em>. If the
+ variable doesn't exist, create it instead of returning an
+ error.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ incr0 functionality is provided by the native <span style="font-family:monospace"><span class="command"><strong>incr</strong></span></span> in
+ Tcl >= 8.5, therefore this command is deprecated and kept as an
+ interpreter alias only for compatibility. As such <span style="font-family:monospace"><span class="command"><strong>incr0</strong></span></span>
+ wasn't moved to the ::rivet namespace and
+ it will be removed in future versions of Rivet.
+ </td></tr></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="include.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="inspect.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">include </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> inspect</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/index.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/index.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/index.html (added)
+++ tcl/site/rivet/manual3.0/index.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,105 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.0</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="next" href="installation.html" title="Apache Rivet 3.0 Installation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Rivet 3.0</th></tr><tr><td width="20%" align="left">Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="installation.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="article"><div class="titlepage"><div><div><h2 class="title"><a name="idm1"></a>Apache Rivet 3.0</h2></div><div><div class="author"><h3 class="author"><span class="firstn
ame">The Rivet Team</span></h3><div class="affiliation"><span class="orgname">The Apache Software Foundation<br></span><div class="address"><p><br>
+ Â Â Â Â Â Â Â Â Â Â Â Â <code class="email"><<a class="email" href="mailto:rivet-dev@tcl.apache.org">rivet-dev@tcl.apache.org</a>></code><br>
+         </p></div></div></div></div><div><p class="copyright">Copyright © 2002-2017 Apache Software Foundation</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="index.html#introduction">Introduction to Apache Rivet version 3.0</a></span></dt><dt><span class="section"><a href="installation.html">Apache Rivet 3.0 Installation</a></span></dt><dt><span class="section"><a href="cmake.html">Building Rivet 3.0 with CMake</a></span></dt><dd><dl><dt><span class="section"><a href="cmake.html#idm185">CMake build procedure and examples</a></span></dt></dl></dd><dt><span class="section"><a href="directives.html">Apache Rivet 3.0 Configuration</a></span></dt><dd><dl><dt><span class="section"><a href="directives.html#idm200">Apache Rivet Configuration lines</a></span></dt><dt><span class="section"><a href="directives.html#idm212">Configuration Directives</a></span></dt></dl></dd><dt><span class="s
ection"><a href="processing.html">Apache Rivet HTTP Request Processing</a></span></dt><dd><dl><dt><span class="section"><a href="processing.html#idm574">Tcl Scripts Processing</a></span></dt><dt><span class="section"><a href="processing.html#idm583">Example: basic OO Rivet Application</a></span></dt></dl></dd><dt><span class="section"><a href="request.html">Apache Child Processes Lifecycle and Request Processing</a></span></dt><dt><span class="section"><a href="commands.html">Rivet Tcl Commands and Variables</a></span></dt><dd><dl><dt><span class="section"><a href="commands.html#idm719"></a></span></dt><dt><span class="refentrytitle"><a href="shorthand.html"><?= ... ?></a></span><span class="refpurpose"> â
+ Shorthand construct for single strings output
+ </span></dt><dt><span class="refentrytitle"><a href="abort_code.html">abort_code</a></span><span class="refpurpose"> â
+ Returns the code passed to <span style="font-family:monospace"><span class="command"><strong>abort_page</strong></span></span>
+ earlier during the request processing
+ </span></dt><dt><span class="refentrytitle"><a href="abort_page.html">abort_page</a></span><span class="refpurpose"> â
+ Stops outputting data to web page, similar in
+ purpose to PHP's <span style="font-family:monospace"><span class="command"><strong>die</strong></span></span> command.
+ </span></dt><dt><span class="refentrytitle"><a href="apache_log_error.html">apache_log_error</a></span><span class="refpurpose"> â log messages to the Apache error log</span></dt><dt><span class="refentrytitle"><a href="apache_table.html">apache_table</a></span><span class="refpurpose"> â access and manipulate Apache tables in the request structure.</span></dt><dt><span class="refentrytitle"><a href="catch.html">catch</a></span><span class="refpurpose"> â wraps core command <span style="font-family:monospace"><span class="command"><strong>catch</strong></span></span> </span></dt><dt><span class="refentrytitle"><a href="clock_to_rfc.html">clock_to_rfc850_gmt</a></span><span class="refpurpose"> â create a rfc850 time from [clock seconds].</span></dt><dt><span class="refentrytitle"><a href="cookie.html">cookie</a></span><span class="refpurpose"> â get, set and delete cookies.</span></dt><dt><span class="refentrytitle"><a href="debug.html">debug</a></span><spa
n class="refpurpose"> â
+ A command to print strings, arrays
+ and the values of variables as specified by the arguments.
+ </span></dt><dt><span class="refentrytitle"><a href="env.html">env</a></span><span class="refpurpose"> â
+ Loads a single "environmental variable" into a Tcl variable.
+ </span></dt><dt><span class="refentrytitle"><a href="escape_sgml_chars.html">escape_sgml_chars</a></span><span class="refpurpose"> â escape special SGML characters in a string.</span></dt><dt><span class="refentrytitle"><a href="escape_shell_command.html">escape_shell_command</a></span><span class="refpurpose"> â escape shell metacharacters in a string.</span></dt><dt><span class="refentrytitle"><a href="escape_string.html">escape_string</a></span><span class="refpurpose"> â convert a string into escaped characters.</span></dt><dt><span class="refentrytitle"><a href="exit.html">exit</a></span><span class="refpurpose"> â terminate execution and child process</span></dt><dt><span class="refentrytitle"><a href="headers.html">headers</a></span><span class="refpurpose"> â set and parse HTTP headers.</span></dt><dt><span class="refentrytitle"><a href="html.html">html</a></span><span class="refpurpose"> â construct html tagged text.</span></dt><dt><span clas
s="refentrytitle"><a href="http_accept.html">http_accept</a></span><span class="refpurpose"> â Parse HTTP Accept header lines</span></dt><dt><span class="refentrytitle"><a href="import_keyvalue_pairs.html">import_keyvalue_pairs</a></span><span class="refpurpose"> â Import an argument list into the named array</span></dt><dt><span class="refentrytitle"><a href="include.html">include</a></span><span class="refpurpose"> â includes a file into the output stream without modification.</span></dt><dt><span class="refentrytitle"><a href="incr0.html">incr0</a></span><span class="refpurpose"> â increment a variable or set it to 1 if nonexistent.</span></dt><dt><span class="refentrytitle"><a href="inspect.html">inspect</a></span><span class="refpurpose"> â Introspection command for Rivet configuration</span></dt><dt><span class="refentrytitle"><a href="lassign_array.html">lassign_array</a></span><span class="refpurpose"> â Assign a list of values to array variable
s</span></dt><dt><span class="refentrytitle"><a href="lempty.html">lempty</a></span><span class="refpurpose"> â
+ Returns 1 if <list> is empty or 0 if it has any elements.
+ This command emulates the TclX lempty command.
+ </span></dt><dt><span class="refentrytitle"><a href="lmatch.html">lmatch</a></span><span class="refpurpose"> â
+ Look for elements in <list> that match <pattern>
+ </span></dt><dt><span class="refentrytitle"><a href="load_cookies.html">load_cookies</a></span><span class="refpurpose"> â get any cookie variables sent by the client.</span></dt><dt><span class="refentrytitle"><a href="load_env.html">load_env</a></span><span class="refpurpose"> â get the request's environment variables.</span></dt><dt><span class="refentrytitle"><a href="load_headers.html">load_headers</a></span><span class="refpurpose"> â get client request's headers.</span></dt><dt><span class="refentrytitle"><a href="load_response.html">load_response</a></span><span class="refpurpose"> â load form variables into an array.</span></dt><dt><span class="refentrytitle"><a href="lremove.html">lremove</a></span><span class="refpurpose"> â remove from a list elements matching one or more patterns</span></dt><dt><span class="refentrytitle"><a href="makeurl.html">makeurl</a></span><span class="refpurpose"> â construct url's based on hostname, port.</span></
dt><dt><span class="refentrytitle"><a href="no_body.html">no_body</a></span><span class="refpurpose"> â Prevents Rivet from sending any content.</span></dt><dt><span class="refentrytitle"><a href="parray.html">parray</a></span><span class="refpurpose"> â Tcl's <span style="font-family:monospace"><span class="command"><strong>parray</strong></span></span> with html formatting.</span></dt><dt><span class="refentrytitle"><a href="parse.html">parse</a></span><span class="refpurpose"> â parses a Rivet template file.</span></dt><dt><span class="refentrytitle"><a href="raw_post.html">raw_post</a></span><span class="refpurpose"> â get the unmodified body of a POST request sent by the client.</span></dt><dt><span class="refentrytitle"><a href="redirect.html">redirect</a></span><span class="refpurpose"> â Interrupt processing and divert to a new URL</span></dt><dt><span class="refentrytitle"><a href="read_file.html">read_file</a></span><span class="refpurpose"> â
+ Read the entire contents of a file and return it as a string.
+ </span></dt><dt><span class="refentrytitle"><a href="try.html">try</a></span><span class="refpurpose"> â
+ Catch error and exception conditions
+ </span></dt><dt><span class="refentrytitle"><a href="unescape_string.html">unescape_string</a></span><span class="refpurpose"> â unescape escaped characters in a string.</span></dt><dt><span class="refentrytitle"><a href="upload.html">upload</a></span><span class="refpurpose"> â handle a file uploaded by a client.</span></dt><dt><span class="refentrytitle"><a href="url_script.html">url_script</a></span><span class="refpurpose"> â get the code of the URL referenced Tcl script or Rivet template</span></dt><dt><span class="refentrytitle"><a href="var.html">var</a></span><span class="refpurpose"> â get the value of a form variable.</span></dt><dt><span class="refentrytitle"><a href="wrap.html">wrap</a></span><span class="refpurpose"> â
+ Split a string on newlines.
+ </span></dt><dt><span class="refentrytitle"><a href="wrapline.html">wrapline</a></span><span class="refpurpose"> â
+ Split the line into multiple lines by splitting on space characters
+ </span></dt><dt><span class="refentrytitle"><a href="xml.html">xml</a></span><span class="refpurpose"> â
+ XML Fragments creation
+ </span></dt></dl></dd><dt><span class="section"><a href="examples.html">Examples and Usage</a></span></dt><dt><span class="section"><a href="tcl_packages.html">Rivet Tcl Packages</a></span></dt><dt><span class="section"><a href="dio.html">DIO - Database Interface Objects</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="dio_package.html">DIO</a></span><span class="refpurpose"> â Database Interface Objects</span></dt></dl></dd><dt><span class="section"><a href="diodisplay.html">DIODisplay - Database Interface Objects Display Class</a></span></dt><dd><dl><dt><span class="refentrytitle"><a href="diodisplay_package.html">DIODisplay</a></span><span class="refpurpose"> â Database Interface Objects Display Class</span></dt></dl></dd><dt><span class="section"><a href="session_package.html">Session Package</a></span></dt><dd><dl><dt><span class="section"><a href="session_package.html#idm3234">Introduction</a></span></dt><dt><span class="section"><a href="s
ession_package.html#requirements">Requirements</a></span></dt><dt><span class="section"><a href="session_package.html#idm3243">Preparing To Use It</a></span></dt><dt><span class="section"><a href="session_package.html#idm3253">Example Usage</a></span></dt><dt><span class="section"><a href="session_package.html#idm3265">Using Sessions From Your Code</a></span></dt><dt><span class="section"><a href="session_package.html#idm3311">Session Configuration Options</a></span></dt><dt><span class="section"><a href="session_package.html#idm3389">Session Methods</a></span></dt><dt><span class="section"><a href="session_package.html#idm3445">Getting Additional Randomness From The Entropy File</a></span></dt></dl></dd><dt><span class="section"><a href="form.html">Form: An HTML Form Fields Generation Utility</a></span></dt><dd><dl><dt><span class="section"><a href="form.html#idm3451">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="form_package.html">form</a></span><span class=
"refpurpose"> â a Tcl command object for creating HTML forms</span></dt></dl></dd><dt><span class="section"><a href="calendar_package.html">Calendar Package</a></span></dt><dd><dl><dt><span class="section"><a href="calendar_package.html#idm3915">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="calendar.html">Calendar</a></span><span class="refpurpose"> â Utility class the builds and prints a calendar table</span></dt><dt><span class="refentrytitle"><a href="xml_calendar.html">XmlCalendar</a></span><span class="refpurpose"> â Prints XML formatted calendar tables</span></dt><dt><span class="refentrytitle"><a href="html_calendar.html">HtmlCalendar</a></span><span class="refpurpose"> â Concrete class derived from XmlCalendar</span></dt></dl></dd><dt><span class="section"><a href="entities.html">RivetEntities</a></span></dt><dd><dl><dt><span class="section"><a href="entities.html#idm4121">Introduction</a></span></dt><dt><span class="refentrytitle"
><a href="encode.html">encode</a></span><span class="refpurpose"> â
+ encode a string replacing every occurrence of characters for
+ which an SGML entity exists
+ </span></dt><dt><span class="refentrytitle"><a href="decode.html">decode</a></span><span class="refpurpose"> â
+ decode an SGML encoded string replacing every entity with the
+ corresponding character
+ </span></dt></dl></dd><dt><span class="section"><a href="asciiglyphs.html">AsciiGlyphs</a></span></dt><dd><dl><dt><span class="section"><a href="asciiglyphs.html#idm4161">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="toglyphs.html">toGlyphs</a></span><span class="refpurpose"> â
+ print large ASCII glyphs
+ </span></dt><dt><span class="section"><a href="asciiglyphs.html#idm4177">Example</a></span></dt></dl></dd><dt><span class="section"><a href="formbroker.html">The Form Broker</a></span></dt><dd><dl><dt><span class="section"><a href="formbroker.html#idm4182">Introduction</a></span></dt><dt><span class="refentrytitle"><a href="fb.html">FormBroker</a></span><span class="refpurpose"> â
+ Form broker object creator
+ </span></dt></dl></dd><dt><span class="section"><a href="help.html">Resources - How to Get Help</a></span></dt><dd><dl><dt><span class="section"><a href="help.html#idm4310">Mailing Lists</a></span></dt><dt><span class="section"><a href="help.html#idm4317">Newsgroup</a></span></dt><dt><span class="section"><a href="help.html#websites">Web Sites</a></span></dt><dt><span class="section"><a href="help.html#idm4337">Bug Tracking System</a></span></dt><dt><span class="section"><a href="help.html#idm4341">IRC</a></span></dt><dt><span class="section"><a href="help.html#idm4344">Editing Rivet Template Files</a></span></dt></dl></dd><dt><span class="section"><a href="internals.html">Rivet Internals</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#idm4356">Rivet approach to Apache Multiprocessing Models</a></span></dt><dt><span class="section"><a href="internals.html#idm4369">mod_rivet MPM Bridge callbacks</a></span></dt><dt><span class="section"><a href="in
ternals.html#idm4403">Server Initialization and MPM Bridge</a></span></dt><dt><span class="section"><a href="internals.html#idm4406">RivetChan</a></span></dt><dt><span class="section"><a href="internals.html#idm4411">The <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> Command</a></span></dt><dt><span class="section"><a href="internals.html#idm4419">Page Parsing, Execution and Caching</a></span></dt><dt><span class="section"><a href="internals.html#idm4427">Extending Rivet by developing C code procedures</a></span></dt><dt><span class="section"><a href="internals.html#idm4451">Debugging Rivet and Apache</a></span></dt></dl></dd><dt><span class="section"><a href="lazybridge.html">Example: the <span class="quote">â<span class="quote">Lazy</span>â</span> bridge</a></span></dt><dd><dl><dt><span class="section"><a href="lazybridge.html#idm4481">The rationale of threaded bridges</a></span></dt><dt><span class="section"><a href="lazy
bridge.html#idm4485">Lazy bridge data structures</a></span></dt><dt><span class="section"><a href="lazybridge.html#idm4500">Handling Tcl's exit core command</a></span></dt><dt><span class="section"><a href="lazybridge.html#idm4519">HTTP request processing with the lazy bridge</a></span></dt></dl></dd></dl></div><div class="list-of-examples"><p><b>List of Examples</b></p><dl><dt>1. <a href="examples.html#hello_world">Hello World</a></dt><dt>2. <a href="examples.html#idm1925">Generate a Colorful Table</a></dt><dt>3. <a href="examples.html#variable_access">Variable Access</a></dt><dt>4. <a href="examples.html#file_upload">File Upload</a></dt><dt>5. <a href="examples.html#file_download">File Download</a></dt><dt>6. <a href="examples.html#ajax_xml_messaging">XML Messages and Ajax</a></dt><dt>7. <a href="examples.html#calendar_example">A Calendar Utility</a></dt></dl></div><p style="width:90%">
+ Document revision: $Revision: 1819787 $, last modified 2018-01-09Â 23:03:42+01:00$ by $Author: mxmanghi $.
+ </p><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="introduction"></a>Introduction to Apache Rivet version 3.0</h2></div></div></div><p style="width:90%">
+ Apache Rivet is a system for creating dynamic web content by
+ integrating the
+ <a class="ulink" href="http://www.tcl.tk/" target="_top">Tcl programming language</a> within the
+ <a class="ulink" href="http://httpd.apache.org" target="_top">Apache Web Server</a>.
+ It is designed to be fast, powerful and extensible, consume
+ few system resources, be easy to learn, and to provide the user with a
+ platform that can also be used for other programming tasks
+ outside the web (GUI's, system administration tasks, text
+ processing, database manipulation, XML, and so on).
+ </p><p style="width:90%">
+ In this manual, we aim to help get you started, and then
+ writing productive code as quickly as possible, as well as
+ giving you ideas on how to best take advantage of Rivet's
+ architecture to create different styles of web site.
+ </p><p style="width:90%">
+ This documentation is focused on the current version of Rivet, but
+ still a work in progress, and, like everything
+ else about Apache Rivet, it is Free Software. If you see
+ something that needs improving, and have ideas or suggestions,
+ don't hesitate to let us know. If you want to contribute
+ directly, better yet!
+ </p><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm21"></a>Apache MPM and Rivet Bridge Modules</h3></div></div></div><p style="width:90%">
+ Rivet 3.0 is a major rewriting of mod_rivet, the Apache HTTP
+ Websever module at the core of Rivet. Unlike in previous versions of
+ mod_rivet which only supported the <a class="ulink" href="" target="_top">prefork MPM</a>
+ (<a class="ulink" href="" target="_top">Multiprocessing Module</a>),
+ starting with 3.0 we attained full support of different MPM for
+ the Apache framework.
+ </p><p style="width:90%">
+ Threaded <a class="ulink" href="" target="_top">MPM</a>
+ integration was achieved by making mod_rivet multithreaded and
+ modular itself, introducing the MPM-module bridge concept.
+ We developed a set of loadable modules
+ which are supposed not only to overcome the issues related to threading but also
+ the best possible MPM mod_rivet integration.
+ As a side effect of this modular design mod_rivet is not only able to integrate
+ with its environment but also to work as a framework for writing more MPM bridges
+ designed along different multi-threading schemes and workload management models.
+ See the <a class="link" href="internals.html" title="Rivet Internals">internals</a> section of this manual for
+ further reading. MPM bridges are loaded accordingly to a heuristics of rules based
+ on the Apache introspection calls but they can be determined in the configuration.
+ Only a bridge can be loaded at a time.
+ </p></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm29"></a>Request Processing</h3></div></div></div><p style="width:90%">
+ Request processing was performed in mod_rivet version 2.x by chaining together 3 scripts
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">BeforeScript, if defined in the configuration</li><li class="listitem">The URI referenced Tcl script or rvt template dermined with
+ respect to the <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/core.html#documentroot" target="_top">DocumentRoot</a> and following
+ other resource determination methods such the ones offered by
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/mod_alias.html" target="_top">mod_alias</a> and by
+ <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html" target="_top">mod_rewrite</a>.
+ </li><li class="listitem">AfterScript, if defined in the configuration</li></ul></div><p style="width:90%">
+ Errors and exceptions (raised by the <a class="link" href="abort_page.html" title="abort_page">::rivet::abort_page</a> command)
+ are handled by the ErrorScript and AbortScript (ErrorScript has a default implementation
+ if undefined in the configuration)
+ </p><p style="width:90%">
+ Rivet 3.0 implements a new <a class="link" href="request.html" title="Apache Child Processes Lifecycle and Request Processing">request processing scheme</a>
+ entirely based on Tcl. By default rivet 3.0 provides compatiblity with the
+ version 2.x scheme to handle a request but this can be entirely overridden by
+ the developer replacing the central request handling procedure. See the
+ <a class="link" href="request.html" title="Apache Child Processes Lifecycle and Request Processing">request processing</a> page for further reading
+ </p></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm44"></a>Acknowledgements</h3></div></div></div><p style="width:90%">This version of Rivet received substantial contributions from George Petasis who solved
+ several problems with the threaded code, improved the code in several ways and made the CMake
+ based build scripts</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">Â </td><td width="20%" align="center">Â </td><td width="40%" align="right">Â <a accesskey="n" href="installation.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Â </td><td width="20%" align="center">Â </td><td width="40%" align="right" valign="top">Â Apache Rivet 3.0 Installation</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/inspect.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/inspect.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/inspect.html (added)
+++ tcl/site/rivet/manual3.0/inspect.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,47 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>inspect</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="incr0.html" title="incr0"><link rel="next" href="lassign_array.html" title="lassign_array"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">inspect</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="incr0.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="lassign_array.html"><img src="images/next.png" alt="Next"></a></td><
/tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="inspect"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>inspect â Introspection command for Rivet configuration</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::inspect</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>configuration_section</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>configuration_parameter</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1316"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span> provides introspection into the running
+ configuration of Rivet. Rivet's debug command uses it in order to gain insight
+ into the configuration, but it can be used in any script.
+ </p><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span> can be called in 5 different forms
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: square; "><li class="listitem" style="list-style-type: square">
+ With no argument the command returns a dictionary with 3
+ keys: server, dir, user. Each key is associated to a subdictionary
+ carrying the configuration as set for that request. In this form the command is
+ meant to support compatibility with previous versions of mod_rivet
+ where three global arrays were created to be internally used by command
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::debug</strong></span></span>.
+ </li><li class="listitem" style="list-style-type: square">
+ With the ?<span style="font-family:monospace; font-weight: bold;">-all</span>? argument a dictionary
+ carrying the whole configuration for that specific request is returned.
+ If a configuration parameter is not set it's given the
+ string <span class="emphasis"><em>undefined</em></span>. Returned configuration paramenters
+ are<pre class="programlisting"> "ServerInitScript",
+ "GlobalInitScript",
+ "ChildInitScript",
+ "ChildExitScript",
+ "BeforeScript",
+ "AfterScript",
+ "AfterEveryScript",
+ "AbortScript",
+ "ErrorScript",
+ "UploadMaxSize",
+ "UploadDirectory",
+ "UploadFilesToVar",
+ "SeparateVirtualInterps",
+ "HonorHeaderOnlyRequests"</pre></li><li class="listitem" style="list-style-type: square">
+ With one of the Rivet configuration directives listed above as
+ single argument <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span> returns the
+ current value in the configuration record.
+ </li><li class="listitem" style="list-style-type: square">
+ Passing the argument "script" <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span>
+ returns a path to the current script in a similar way
+ core command <span style="font-family:monospace"><span class="command"><strong>[info script]</strong></span></span> does. The basic
+ difference is that the core command returns a relative path with
+ respect to the current working directory, whereas mod_rivet's command
+ returns the full path.
+ </li><li class="listitem" style="list-style-type: square">
+ Passing the argument "server" <span style="font-family:monospace"><span class="command"><strong>::rivet::inspect</strong></span></span>
+ returns a dictionary with these fields taken from the server record
+ descriptor
+ <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">hostname: The server hostname </li><li class="listitem">admin: The admin's contact information</li><li class="listitem">errorlog: The name of the error log</li><li class="listitem">server_path: Pathname for ServerPath</li></ul></div></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="incr0.html"><img src="images/prev.png" alt="Prev"></a>Â </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right">Â <a accesskey="n" href="lassign_array.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">incr0Â </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td
width="40%" align="right" valign="top">Â lassign_array</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/installation.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/installation.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/installation.html (added)
+++ tcl/site/rivet/manual3.0/installation.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,169 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Rivet 3.0 Installation</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="index.html" title="Apache Rivet 3.0"><link rel="next" href="cmake.html" title="Building Rivet 3.0 with CMake"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Rivet 3.0 Installation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="cmake.html"><img src="images/next.png" alt="Next"></
a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="installation"></a>Apache Rivet 3.0 Installation</h2></div></div></div><div class="procedure"><p style="width:90%">
+ Rivet 3.0 runs with the Apache 2.2.x and 2.4.x HTTP web servers.
+ It is known to build and run on various Linux distributions
+ (Debian & Ubuntu, Redhat, SuSE and CentOS), FreeBSD and OpenBSD. For some
+ of these Unix-like operative systems
+ <a class="ulink" href="http://tcl.apache.org/rivet/static/download.html" target="_top">binary packages</a>
+ are already available for download.
+ </p><p style="width:90%">
+ Rivet 2.x was restricted to work with the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork</a> MPM
+ of the Apache HTTP webserver. MPM modules are fundamental components of the
+ webserver architecture. They provide multiple implementations of multiprocessing
+ in order to better suit specific OS features and scalability requirements.
+ The prefork MPM exploited the UNIX traditional approach to multiprocess server
+ applications based on the
+ <a class="ulink" href="https://en.wikipedia.org/wiki/Fork_(system_call)" target="_top">fork</a>
+ system call. This model has several limitations but also some advantages. The
+ solution we adopted tries to attain the best from any MPM as much as possible
+ and Rivet 3.0 is now able to run with the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/worker.html" target="_top">worker</a>
+ and the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/event.html" target="_top">worker</a>
+ MPMs. Rivet 3.0 has not been ported to OS of the Windows family
+ but we feel that the current design would fit just fine with the Windows specific
+ MPMs such as
+ <a class="ulink" href="http://httpd.apache.org/docs/2.4/mod/mpm_winnt.html" target="_top">winnt</a>.
+ </p><p style="width:90%">
+ If you need to build Apache Rivet yourself this is the procedure to follow
+ </p><ol class="procedure" type="1"><li class="step"><p class="title"><b>Building Tcl: requirements</b></p><p style="width:90%">
+ Installing Rivet is about endowing the Apache HTTP webserver with the ability
+ of running scripts written with the Tcl programming language.
+ Therefore the
+ <a class="ulink" href="http://www.tcl.tk/" target="_top">Tcl</a> language with its runtime,
+ development libraries and shell (â¥8.5.10 required, â¥8.6.0 recommended)
+ have to be installed. Building Rivet you will
+ have to tell the scripts where the Tcl libraries are located via the
+ --with-tcl option of the <span style="font-family:monospace"><span class="command"><strong>configure</strong></span></span> script
+ (see below).
+ </p><p style="width:90%">
+ Several Tcl packages shipped with rivet need also the
+ <a class="ulink" href="http://core.tcl.tk/itcl/" target="_top">Itcl</a>
+ OOP extension of Tcl. If you need to run any of the
+ Session or DIO
+ packages you need to install this language extension but you don't need it
+ to build mod_rivet
+ </p><p style="width:90%">
+ The
+ <a class="ulink" href="" target="_top">Apache HTTP Webserver</a> development
+ files and libraries are required along with the
+ <a class="ulink" href="" target="_top">Apache Portable Runtime</a>
+ and the
+ <a class="ulink" href="" target="_top">libapreq</a> library.
+ </p></li><li class="step"><p class="title"><b>Building Rivet</b></p></li><li class="step"><p class="title"><b>Getting and Installing the Apache Sources</b></p><p style="width:90%">
+ You can build Rivet either statically (compiled into the Apache web
+ server) or dynamically (as a loadable shared library).
+ We recommend that you build Rivet as a shared library, for maximum flexibility.
+ We will tell Rivet where it the Apache development files and libraries are located
+ via the --with-apxs option to <span style="font-family:monospace"><span class="command"><strong>configure</strong></span></span> (see below).
+ </p><p style="width:90%">
+ Most modern Unix OS (Linux and FreeBSD systems included) come with their
+ own packages of the Apache Web Server executables, runtime libraries and development files
+ and libraries. Check the documentation of the package manager of your OS
+ to find out how to install this software
+ </p></li><li class="step"><p class="title"><b>Uncompress Sources</b></p><p style="width:90%">
+ Download the sources at <a class="ulink" href="http://tcl.apache.org/rivet/html/download.html" target="_top">http://tcl.apache.org/rivet/html/download.html</a>.
+ </p><p style="width:90%">
+ We will assume that you have Apache installed at this point.
+ You must uncompress the Rivet sources in the directory where you
+ wish to compile them.
+ </p><pre class="programlisting">gunzip rivet-3.0.0.tar.gz
+tar -xvf rivet-3.0.0.tar.gz</pre><p style="width:90%">
+ </p></li><li class="step"><p class="title"><b>Building Rivet</b></p><ol type="a" class="substeps"><li class="step"><p style="width:90%">
+ Rivet uses the standard <span style="font-family:monospace"><span class="command"><strong>./configure ; make ; make install</strong></span></span>
+ sequence which installs to their target directories the Apache module, the binary libraries and the
+ Tcl code
+ </p><p style="width:90%">
+ There are several rivet specific options to configure that might be useful (or needed):
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">--with-apache</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Defines the configure internal variable 'apache_base'. This variable
+ points to the root of the Apache web server directory hierarchy
+ </div></div></dd><dt><span class="term">--with-tcl</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This points to the directory where the
+ <code class="filename">tclConfig.sh</code> file is located.
+ </div></div></dd><dt><span class="term">--with-tclsh</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">This points to the location of the
+ <code class="filename">tclsh</code> executable.</div></div></dd><dt><span class="term">--with-apxs</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The location of the <code class="filename">apxs</code>
+ program that provides information about the
+ configuration and compilation options of Apache modules.
+ </div></div></dd><dt><span class="term">--with-apache-include[=DIR]</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Locates the Apache include files on your computer, if they're not in standard directory.
+ </div></div></dd><dt><span class="term">--enable-version-display=[yes|no]</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option enables Rivet to display its version in the
+ logfiles when Apache is started. The default is to keep the Rivet version hidden.
+ </div></div></dd><dt><span class="term">--with-rivet-target-dir=DIR</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option is for fine tuning of the installation final directories. Rivet Tcl packages,
+ commands and loadable libraries go into the same directory hierarchy
+ (by default is ${apache_base}/lib/rivet${PACKAGE_VERSION}, where $apache_base takes
+ the value set by --with-apache)
+ </div></div></dd><dt><span class="term">--with-upload-dir=DIR</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Configures Rivet's default upload directory. It can be overridden in the configuration
+ either globally or specifically for a virtual host
+ </div></div></dd><dt><span class="term">--with-post-max=BYTES</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The value to this option establishes a default for the maximum size of POST data.
+ Default: 0 (unlimited size)
+ </div></div></dd><dt><span class="term">--enable-head-requests</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ By default HEAD requests don't go through the usual request processing which leads
+ to script execution and therefore resource consumption and Rivet returns a
+ standard hardcoded HTML header to save CPU time. --enable-head-requests
+ can change the default.
+ </div></div></dd><dt><span class="term">--enable-rivet-commands-export</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ By default Rivet's commands are put on the export list of the <code class="code">::rivet</code>
+ namespace. With this option you may prevent it thus forcing the programmers to
+ fully qualify in their code. By default this option is enabled and it can be
+ changed in the configuration with the directive ExportRivetNS. Disabling
+ this option can be also reverted to 'On' with the --enable-import-rivet-commands
+ switch
+ </div></div></dd><dt><span class="term">--enable-import-rivet-commands</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Rivet's namespace is by default imported into the global namespace. Enabling the import
+ of Rivet's commands overrides the switch and forces --enable-rivet-commands-export=yes
+ thus demanding the commands to be exported (otherwise it would generate errors at run-time).
+ This option is disabled by default and it can be changed in the configuration with
+ the ImportRivetNS directive
+ </div></div></dd><dt><span class="term">--enable-virtual-interps-separation</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ This option changes the default for the SeparateVirtualInterps configuration
+ variable. Default: 0 (no separation among interpreters)
+ </div></div></dd></dl></div><p style="width:90%">
+ </p><p style="width:90%">
+ Example: configuring the build system to compile Rivet for an Apache HTTP server custom installation,
+ using tcl8.6. In this specific case the determination of the apxs path is redundant and it could be
+ omitted since it could be inferred from the --with-apache option value
+ </p><pre class="programlisting">./configure --with-tcl=/usr/lib/tcl8.6/ --with-tclsh=/usr/bin/tclsh8.6 \
+ --with-apxs=/usr/local/apache2/bin/apxs --with-apache=/usr/local/apache2 \
+ --with-rivetlib-target-dir=/usr/local/apache2/rivet3.0</pre></li><li class="step"><p class="title"><b>Run make</b></p><p style="width:90%">
+ At this point, you are ready to run make, which should
+ run to completion without any errors (a warning or two
+ is OK, generally).
+ </p></li><li class="step"><p class="title"><b>Install</b></p><p style="width:90%">
+ Now, you are ready to run the
+ </p><pre class="programlisting">make install</pre><p style="width:90%">
+ to install the resulting files. The <code class="code">install</code> target
+ actually fires the <code class="code">install-binaries</code> and
+ <code class="code">install-packages</code> targets which in turn
+ copy the binary modules and Tcl packages to their destination
+ directories. This commands create a functional Rivet environment with its
+ core language.
+ </p></li></ol></li><li class="step"><p class="title"><b>Apache Configuration Files</b></p><p style="width:90%">
+ Rivet is relatively easy to configure - we start off by
+ adding the module itself:
+ </p><pre class="programlisting">LoadModule rivet_module <em class="replaceable"><code>/usr/lib/apache2/modules/mod_rivet.so</code></em></pre><p style="width:90%">
+ This tells Apache to load the Rivet shared object, wherever
+ it happens to reside on your file system. Now we have to
+ tell Apache what kind of files are "Rivet" files and how to
+ process them:
+ </p><pre class="programlisting">AddType application/x-httpd-rivet rvt
+AddType application/x-rivet-tcl tcl</pre><p style="width:90%">
+ These tell Apache to process files with the
+ <code class="filename">.rvt</code> and <code class="filename">.tcl</code>
+ extensions as Rivet files.
+ </p><p style="width:90%">
+ The characters encoding can be changed using the <span style="font-family:monospace"><span class="command"><strong>header type</strong></span></span> command,
+ but you can also change the default charset for the whole site:
+ </p><pre class="programlisting">AddType 'application/x-httpd-rivet;charset=utf-8' rvt</pre><p style="width:90%">
+ All the pages generated by Rivet on this site will be sent with a
+ <span style="font-family:monospace"><span class="command"><strong>Content-Type:'text/html;charset=utf-8'</strong></span></span> header.
+ </p><p style="width:90%">You may also wish to use Rivet files as index files for
+ directories. In that case, you would do the following:</p><pre class="programlisting">DirectoryIndex index.html index.htm index.shtml index.cgi index.tcl index.rvt</pre><p style="width:90%">
+ For other directives that Rivet provides for Apache
+ configuration, please see <a class="xref" href="directives.html" title="Apache Rivet 3.0 Configuration">the section called âApache Rivet 3.0 Configurationâ</a>.
+ </p></li></ol></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html"><img src="images/prev.png" alt="Prev"></a>Â </td><td width="20%" align="center">Â </td><td width="40%" align="right">Â <a accesskey="n" href="cmake.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet 3.0Â </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top">Â Building Rivet 3.0 with CMake</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/internals.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/internals.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/internals.html (added)
+++ tcl/site/rivet/manual3.0/internals.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,315 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Rivet Internals</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="help.html" title="Resources - How to Get Help"><link rel="next" href="lazybridge.html" title="Example: the âLazyâ bridge"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Rivet Internals</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="help.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="lazybridge.html"><img src="images/next.png" alt="Next"></a>
</td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="internals"></a>Rivet Internals</h2></div></div></div><p style="width:90%">
+ This section easily falls out of date, as new code is added, old
+ code is removed, and changes are made. The best place to look
+ is the source code itself. If you are interested in the changes
+ themselves, the Subversion revision control system
+ (<span style="font-family:monospace"><span class="command"><strong>svn</strong></span></span>) can provide you with information about
+ what has been happening with the code.
+ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4356"></a>Rivet approach to Apache Multiprocessing Models</h3></div></div></div><p style="width:90%">
+ The Apache HTTP web server has an extremely modular architecture
+ that made it very popular among web developers. Most of the server
+ features can be implemented in external modules, including some of
+ the way the server interfaces to the operative system. The multiprocessing
+ modules are meant to provide different models for distributing the
+ server workload but also to cope with different operative systems
+ having their specific architectures and services.
+ </p><p style="width:90%">
+ From the very beginning mod_rivet was designed to work with
+ the <a class="ulink" href="https://httpd.apache.org/docs/2.4/mod/prefork.html" target="_top">prefork MPM</a>
+ MPM (Multi Processing Module) which assumes the OS to have 'fork' capabilities.
+ This prerequisite basically restricted mod_rivet to work only with
+ Unix-like operative systems. Starting with version 3.0 we reorganized
+ mod_rivet to offer a design that could work together with more MPM and
+ hopefully pave the way to support different OS that have no 'fork'
+ call. At the same time we tried to preserve some of the basic
+ features of mod_rivet when working with the prefork MPM, chiefly the feature of
+ the Unix fork system call of 'cloning' a parent process
+ memory into its child, thus allowing fast initialization of interpreters.
+ </p><p style="width:90%">
+ The central design of mod_rivet now relies on the idea of <span class="quote">â<span class="quote">MPM bridges</span>â</span>,
+ loadable modules that are responsible to adapt the module procedural design to
+ a given class of Apache MPMs. This design is open to the development of more
+ MPM bridges coping with different multi-processing models but also to the development of
+ different approaches to resource consumption and workload balance. By now we have only 2 bridges:
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">rivet_prefork_mpm.c: a bridge for the prefork MPM</li><li class="listitem">rivet_worker_mpm.c: a threaded bridge creating a pool of threads
+ each running Tcl interpreters and communicating with the worker MPM threads
+ through a thread safe queue. This bridge is needed by the worker MPM.</li><li class="listitem">rivet_lazy_mpm.c: a threaded bridge where Tcl threads are
+ started <span class="quote">â<span class="quote">on demand</span>â</span>. The bridge creates no threads and Tcl interpreters
+ at start up and only when requests come in Tcl execution threads are created.
+ This bridge is explained in detail in the <a class="xref" href="lazybridge.html" title="Example: the âLazyâ bridge">the section called âExample: the <span class="quote">â<span class="quote">Lazy</span>â</span> bridgeâ</a>.
+ Since the resource demand at startup is minimal this bridge should work well on
+ development machines that go through frequent web server restarts.</li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4369"></a>mod_rivet MPM Bridge callbacks</h3></div></div></div><p style="width:90%">
+ A bridge is a loadable library implementing different ways to handle
+ specific features needed to mod_rivet. It was originally meant as a way
+ to handle the prefork/worker/event MPM specificities that prevented mod_rivet
+ from supporting each of them, at the same time avoiding the need to stuff the
+ code with conditional statements that would have implied useless complexity (an
+ instance of the Apache web server can run only an MPM at a time),
+ error prone programming and performance costs.
+ New bridges could be imagined also to implement different models of workload
+ and resource management (like the resources demanded by the Tcl interpreters).
+ We designed an interface between the core of mod_rivet and its MPM bridges
+ based on a set of functions defined in the rivet_bridge_table structure.
+ </p><pre class="programlisting">typedef struct _mpm_bridge_table {
+ RivetBridge_ServerInit *mpm_server_init;
+ RivetBridge_ChildInit *mpm_child_init;
+ RivetBridge_Request *mpm_request;
+ RivetBridge_Finalize *mpm_finalize;
+ RivetBridge_Exit_Handler *mpm_exit_handler;
+ RivetBridge_Thread_Interp *mpm_thread_interp;
+} rivet_bridge_table;</pre><p style="width:90%">
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span class="emphasis"><em>mpm_server_init</em></span>: pointer to any
+ specific server inititalization function. This field can be NULL
+ if no bridge specific initialization has to be done. The core of
+ mod_rivet runs the <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span> before
+ calling this function.</li><li class="listitem"><span class="emphasis"><em>mpm_child_init</em></span>: Bridge specific
+ child process initialization. If the pointer is assigned with
+ a non-NULL value the function is called by Rivet_ChildInit.
+ </li><li class="listitem"><span class="emphasis"><em>mpm_request</em></span>: This pointer must
+ be assigned with a valid function pointer to the content generator
+ implemented by the bridge. If the pointer is not defined the Apache
+ web server will stop during start up. This condition is motivated by
+ the need of avoiding useless testing of the pointer. The fundamental
+ purpose of a content generator module (like mod_rivet) is to respond
+ to requests creating content, thus whatever it is
+ a content generating function must exist (during the early stages of
+ development you can create a simple test function for that). In a
+ threaded MPM this function typically prepares the request processing
+ stuffing somewhere the pointer to the request_rec structure
+ passed by the web server and then it calls some method to communicate
+ these data to the Tcl execution thread waiting for result to be
+ returned. The <span class="quote">â<span class="quote">prefork</span>â</span> bridge is an exception since there
+ are no multiple threads and the bridge calls directly Rivet_SendContent
+ </li><li class="listitem"><span class="emphasis"><em>mpm_finalize</em></span>: pointer to a finalization
+ function called during a child process exit. This function is registered
+ as child process memory pool cleanup function. If the pointer is NULL
+ the pool is given a default cleanup function (apr_pool_cleanup_null)
+ defined in src/mod_rivet/mod_rivet.c. For instance the finalize function
+ in the <span class="emphasis"><em>worker</em></span> MPM bridge notifies
+ a supervisor thread demanding the whole pool of threads running Tcl
+ interpreters to orderly exit. This pointer can be NULL if the bridge
+ has no special need when a child process must exit (unlikely if you have
+ multiple threads running)
+ </li><li class="listitem"><span class="emphasis"><em>mpm_exit_handler</em></span>: mod_rivet replaces
+ the core <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command with a new one
+ (<span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>). This command must handle
+ the process exit in the best possible way for the bridge and the
+ threading model it implements (for the 2 current threaded bridges this implies
+ signaling the threads to exit). The <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span>
+ actually doesn't terminate the process, but interrupts execution
+ returning a specific error code commands <span style="font-family:monospace"><span class="command"><strong>::rivet::catch</strong></span></span>
+ and <span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> can detect. Before the process is terminated
+ the <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> script is fired and <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_code</strong></span></span>
+ returns a message describing the exit condition. For instance
+ the <span class="emphasis"><em>worker</em></span> MPM bridge the finalize function
+ is called after the current thread itself is set up for termination.
+ See function Rivet_ExitCmd in
+ <a class="ulink" href="http://svn.apache.org/repos/asf/tcl/rivet/trunk/src/mod_rivet/rivetCore.c" target="_top">rivetCore.c</a>
+ to have details on how and at what stage this callback is invoked.
+ </li><li class="listitem"><span class="emphasis"><em>mpm_thread_interp</em></span> must be a function returning
+ the interpreter object (a pointer to record of type
+ <span style="font-family:monospace"><span class="command"><strong>rivet_thread_interp</strong></span></span>) associated
+ to a given configuration as stored in a <span style="font-family:monospace"><span class="command"><strong>rivet_server_conf*</strong></span></span>
+ object. This element was temporarily introduced in the
+ <span style="font-family:monospace"><span class="command"><strong>mpm_bridge_table</strong></span></span> table and should be accessed
+ through the macro RIVET_PEEK_INTERP.
+ <pre class="programlisting">interp_obj = RIVET_PEEK_INTERP(private,private->conf);</pre>
+ Every bridge implementation should have its own way to store interpreter data and manage their
+ status. So this macro (and associated function) should hide from the module core function
+ the specific approach followed in a particular bridge
+ </li></ul></div><p style="width:90%">
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4403"></a>Server Initialization and MPM Bridge</h3></div></div></div><p style="width:90%">
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4406"></a>RivetChan</h3></div></div></div><p style="width:90%">
+ The <span class="structname">RivetChan</span> system was created in
+ order to have an actual Tcl channel that we could redirect
+ standard output to. This enables us use, for instance, the
+ regular <span style="font-family:monospace"><span class="command"><strong>puts</strong></span></span> command in .rvt pages. It
+ works by creating a channel that buffers output, and, at
+ predetermined times, passes it on to Apache's I/O system.
+ Tcl's regular standard output is replaced with an instance of
+ this channel type, so that, by default, output will go to the
+ web page.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4411"></a>The <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> Command</h3></div></div></div><p style="width:90%">
+ Rivet aims to run standard Tcl code with as few surprises as
+ possible. At times this involves some compromises - in this
+ case regarding the <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> command. The
+ problem is that the command will create truly global
+ variables. If the user is just cut'n'pasting some Tcl code
+ into Rivet, they most likely just want to be able to share the
+ variable in question with other procs, and don't really care
+ if the variable is actually persistant between pages. The
+ solution we have created is to create a proc
+ <span style="font-family:monospace"><span class="command"><strong>::request::global</strong></span></span> that takes the place of
+ the <span style="font-family:monospace"><span class="command"><strong>global</strong></span></span> command in Rivet templates. If
+ you really need a true global variable, use either
+ <span style="font-family:monospace"><span class="command"><strong>::global</strong></span></span> or add the :: namespace qualifier
+ to variables you wish to make global.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4419"></a>Page Parsing, Execution and Caching</h3></div></div></div><p style="width:90%">
+ When a Rivet page is requested, it is transformed into an
+ ordinary Tcl script by parsing the file for the <? ?>
+ processing instruction tags. Everything outside these tags
+ becomes a large <span style="font-family:monospace"><span class="command"><strong>puts</strong></span></span> statement, and
+ everything inside them remains Tcl code.
+ </p><p style="width:90%">
+ Each .rvt file is evaluated in its own
+ <code class="constant">::request</code> namespace, so that it is not
+ necessary to create and tear down interpreters after each
+ page. By running in its own namespace, though, each page will
+ not run afoul of local variables created by other scripts,
+ because they will be deleted automatically when the namespace
+ goes away after Apache finishes handling the request.
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ One current problem with this system is that while
+ variables are garbage collected, file handles are not, so
+ that it is very important that Rivet script authors make
+ sure to close all the files they open.
+ </td></tr></table></div><p style="width:90%">
+ </p><p style="width:90%">
+ After a script has been loaded and parsed into it's "pure Tcl"
+ form, it is also cached, so that it may be used in the future
+ without having to reload it (and re-parse it) from the disk.
+ The number of scripts stored in memory is configurable. This
+ feature can significantly improve performance.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4427"></a>Extending Rivet by developing C code procedures</h3></div></div></div><p style="width:90%">
+ Rivet endows the Tcl interpreter with new commands
+ serving as interface between the application layer and the
+ Apache web server. Many of these commands
+ are meaningful only when a HTTP request is under way and
+ therefore a request_rec object allocated by the framework
+ is existing and was passed to mod_rivet as argument of a callback.
+ In case commands have to gain access to a valid request_rec
+ object the C procedure must check if such
+ a pointer exists and it's initialized
+ with valid data. For this purpose the procedure handling requests
+ (Rivet_SendContent) makes a copy of such pointer and keeps it
+ in an internal structure. The copy is set to NULL just before
+ returning to the framework, right after mod_rivet's has
+ carried out its request processing. When the pointer copy is NULL
+ the module is outside any request processing and this
+ condition invalidates the execution of
+ many of the Rivet commands. In case they are called
+ (for example in a ChildInitScript, GlobalInitScript,
+ ServerInitScript or ChildExitScript) they fail with a Tcl error
+ you can handle with a <span style="font-family:monospace"><span class="command"><strong>catch</strong></span></span> command.
+ </p><p style="width:90%">
+ For this purpose in src/rivet.h the macro
+ CHECK_REQUEST_REC was defined accepting two arguments: the thread
+ private data object and the command name. If the pointer is NULL
+ the macro calls Tcl_NoRequestRec and returns TCL_ERROR
+ causing the command to fail. These are the steps to follow
+ in order to write a new C language command for mod_rivet
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Define the command and associated C language procedure
+ in src/rivetcmds/rivetCore.c using the macro
+ RIVET_OBJ_CMD<pre class="programlisting">RIVET_OBJ_CMD("mycmd",Rivet_MyCmd,private)</pre>
+ This macro ensures the command is defined as <span style="font-family:monospace"><span class="command"><strong>::rivet::mycmd</strong></span></span>
+ and its ClientData pointer is defined with the thread private data
+ </li><li class="listitem">
+ Add the code of Rivet_MyCmd to src/rivetcmd/rivetCore.c (in case
+ the code resides in a different file also src/Makefile.am should be
+ changed to tell the build system how to compile the code and
+ link it into mod_rivet.so)
+ </li><li class="listitem">
+ If the code must have access to the request record in <span style="font-family:monospace"><span class="command"><strong>private->r</strong></span></span>
+ use the macro THREAD_PRIVATE_DATA in order to claim the thread private data, then
+ check for the validity of the pointer using the macro
+ CHECK_REQUEST_REC(private,"::rivet::<cmd_name>")
+
+ <pre class="programlisting">TCL_CMD_HEADER(Rivet_MyCmd)
+{
+ /* we have to get the thread private data */
+
+ THREAD_PRIVATE_DATA(private)
+
+ /* if ::rivet::mycmd works within a request processing we have
+ * to check if 'private' is bringing a non null request_rec pointer
+ */
+
+ CHECK_REQUEST_REC(private,"::rivet::mycmd");
+ ....
+
+ return TCL_OK;
+}</pre></li><li class="listitem">
+ Add a test for this command in tests/checkfails.tcl. For
+ instance
+ <pre class="programlisting">...
+check_fail no_body
+check_fail virtual_filename unkn
+check_fail my_cmd <arg1> <arg2>
+....</pre>
+ Where <arg1> <arg2> are optional
+ arguments in case the command has different forms depending on
+ the arguments. Then, if <span style="font-family:monospace"><span class="command"><strong>::rivet::mycmd</strong></span></span> must fail also
+ tests/failtest.tcl should modified as
+ <pre class="programlisting">virtual_filename->1
+mycmd->1</pre>
+ The value associated to the test must be 0 in case the
+ command doesn't need to test the <span style="font-family:monospace"><span class="command"><strong>private->r</strong></span></span> pointer.
+ </li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm4451"></a>Debugging Rivet and Apache</h3></div></div></div><p style="width:90%">
+ If you are interested in hacking on Rivet, you're welcome to
+ contribute! Invariably, when working with code, things go
+ wrong, and it's necessary to do some debugging. In a server
+ environment like Apache, it can be a bit more difficult to
+ find the right way to do this. Here are some techniques to
+ try.
+ </p><p style="width:90%">
+ The first thing you should know is that Apache can be launched
+ as a <span class="emphasis"><em>single process</em></span> with the
+ -X argument:
+ </p><pre class="programlisting">httpd -X</pre>.
+
+ <p style="width:90%">
+ On Linux, one of the first things to try is the system call
+ tracer, <span style="font-family:monospace"><span class="command"><strong>strace</strong></span></span>. You don't even have to
+ recompile Rivet or Apache for this to work.
+ </p><pre class="programlisting">strace -o /tmp/outputfile -S 1000 httpd -X</pre><p style="width:90%">
+ This command will run httpd in the system call tracer,
+ which leaves its output (there is potentially a lot of it) in
+ <code class="filename">/tmp/outputfile</code>. The -S
+ option tells <span style="font-family:monospace"><span class="command"><strong></strong></span></span>strace to only record the
+ first 1000 bytes of a syscall. Some calls such as
+ <code class="function">write</code> can potentially be much longer than
+ this, so you may want to increase this number. The results
+ are a list of all the system calls made by the program. You
+ want to look at the end, where the failure presumably occured,
+ to see if you can find anything that looks like an error. If
+ you're not sure what to make of the results, you can always
+ ask on the Rivet development mailing list.
+ </p><p style="width:90%">
+ If <span style="font-family:monospace"><span class="command"><strong>strace</strong></span></span> (or its equivalent on your
+ operating system) doesn't answer your question, it may be time
+ to debug Apache and Rivet. To do this, you will need to rebuild mod_rivet.
+ First of all you have to configure the build by running the
+ <span style="font-family:monospace"><span class="command"><strong>./configure</strong></span></span> script with the
+ -enable-symbols option and after you have
+ set the CFLAGS and LDFLAGS environment variables
+ </p><pre class="programlisting">export CFLAGS="-g -O0"
+export LDFLAGS="-g"
+./configure --enable-symbols ......
+make
+make install</pre><p style="width:90%">
+ Arguments to <span style="font-family:monospace"><span class="command"><strong>./configure</strong></span></span> must fit your Apache HTTP
+ web server installation. See the output produced by
+ </p><pre class="programlisting">./configure --help</pre><p style="width:90%">
+ And check the <a class="xref" href="installation.html" title="Apache Rivet 3.0 Installation">the section called âApache Rivet 3.0 Installationâ</a> page to
+ have further information.
+ Since it's easier to debug a single process, we'll still run
+ Apache in single process mode with -X:
+ </p><pre class="programlisting">@ashland [~] $ gdb /usr/sbin/apache.dbg
+GNU gdb 5.3-debian
+Copyright 2002 Free Software Foundation, Inc.
+GDB is free software, covered by the GNU General Public License, and you are
+welcome to change it and/or distribute copies of it under certain conditions.
+Type "show copying" to see the conditions.
+There is absolutely no warranty for GDB. Type "show warranty" for details.
+This GDB was configured as "powerpc-linux"...
+(gdb) run -X
+Starting program: /usr/sbin/apache.dbg -X
+[New Thread 16384 (LWP 13598)]
+.
+.
+.</pre><p style="width:90%">
+ When your apache session is up and running, you can request a
+ web page with the browser, and see where things go wrong (if
+ you are dealing with a crash, for instance).
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="help.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="lazybridge.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Resources - How to Get Help </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Example: the <span class="quote">â<span class="quote">Lazy</span>â</span> bridge</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/lassign_array.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/lassign_array.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/lassign_array.html (added)
+++ tcl/site/rivet/manual3.0/lassign_array.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,18 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>lassign_array</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="inspect.html" title="inspect"><link rel="next" href="lempty.html" title="lempty"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">lassign_array</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="inspect.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="lempty.html"><img src="images/next.png" alt="Next"></a></td></tr
></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="lassign_array"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>lassign_array â Assign a list of values to array variables</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::lassign_array</span> ?<span style="font-family:monospace; font-weight: bold;">value_list</span>? ?<span style="font-family:monospace; font-weight: bold;">array_name</span>? ?<span style="font-family:monospace; font-weight: bold;">array_variables</span>?</div></div></div><div class="refsect1"><a name="idm1351"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>lassign_array</strong></span></span> is an utility command inspired by the same Tclx command and
+ with a close resemblance with Tcl's <span style="font-family:monospace"><span class="command"><strong>lassign</strong></span></span> for assigning list elements to variables.
+ <span style="font-family:monospace"><span class="command"><strong>lassign_array</strong></span></span> first argument is a list of values to be assigned to an array that must be
+ given as second argument. The remaining arguments are the array's variable names which will store
+ as values the elements of the list. Variables names don't matching values in the list are given an empty string.
+ Unassigned list elements are returned as a list.
+ </p><pre class="programlisting">::rivet::lassign_array {1 2 3 4} assigned_array a b c d
+parray assigned_array
+<span class="strong"><strong>assigned_array</strong></span>
+assigned_array(a) = 1
+assigned_array(b) = 2
+assigned_array(c) = 3
+assigned_array(d) = 4
+
+set rem [::rivet::lassign_array {1 2 3 4 5 6 7} assigned_array a b c d]
+puts $rem
+5 6 7</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="inspect.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="lempty.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">inspect </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> lempty</td></tr></table></div></body></html>
---------------------------------------------------------------------
To unsubscribe, e-mail: site-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: site-cvs-help@tcl.apache.org