<section id="introduction">
    <title>Introduction to Apache Rivet</title>
    <para>
      Apache Rivet is a system for creating dynamic web content via a
      programming language integrated with Apache Web Server.  It is
      designed to be fast, powerful and extensible, consume few system
      resources, be easy to learn, and to provide the user with a
      platform that can also be used for other programming tasks
      outside the web (GUI's, system administration tasks, text
      processing, database manipulation, XML, and so on).  In order to
      meet these goals, we have chosen the Tcl programming language to
      combine with the Apache Web Server.
    </para>
    <para>
      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.
    </para>
    <para>
     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!
    </para>
    
    <simplesect>
        <title>New commands in Rivet 2.3</title>
        <para>
        		Rivet 2.3 introduces 2 new commands <command>::rivet::exit</command>
        		and <command>::rivet::catch</command>
        </para>
        <itemizedlist>
    			<listitem>
    				<command>::rivet::exit</command> was introduced to help mod_rivet to
    				give the command <command>exit</command> a more sensible behavior within
    				the context of the Apache HTTP Web Server. In fact the core command has
    				become an alias of <command>::rivet::exit</command> which interrupts the 
    				script execution and hands control to any <command>AbortScript</command>, 
    				completes the request and just before returning to the web server framework terminates 
    				the child process by calling <command>Tcl_Exit</command>
    			</listitem>
         	<listitem>
         		Since <command>::rivet::abort_page</command> and <command>::rivet::exit</command>
         		interrupt a script execution returning a <emphasis>TCL_ERROR</emphasis> code
         		any call to a <command>catch</command> construct would trap this error and AbortScript 
         		could be executed only by throwing the error condition again. We introduced the
         		<command>::rivet::catch</command> in order to simplify these operations.
         		If any real error occurs the procedure returns 
         		1 and fills the optional arguments with their expected values, otherwise
         		execution is interrupted control passed on to
         		<command>AbortScript</command>
         	</listitem>
		 </itemizedlist>
    </simplesect>
</section>
