2012-02-11 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio.tcl: fixing nasty bug introduced with Rivet 2.0.6. 
    When method 'store' is updating the call to method update needs a flat 
    list as last argument, not just a sigle valued list argument

2012-12-03 Massimo Manghi <mxmanghi@apache.org>
    * doc/Makefile.am: Manual pages output encoding set to UTF-8

2012-10-29 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/session/[session-create-mysql.sql|session-create-sqlite.sql]: index
    riv_sess_cache_ix had a uncomplete unique key definition that missed the 'package_' column (fixes bug #54063)

2012-10-28 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: Manual entry for makeurl extented to clarify how the
    protocol is determined.

2012-10-01 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/install.xml: attempting to improve the documentation

2012-09-29 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: Getting an error when evaluating request init script returns
    now HTTP_INTERNAL_SERVER_ERROR

2012-09-22 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio.tcl: various methods used as
    accessors to some property variables of the class Database were not returning their values
    as expeected. This also surfaced a bug in method 'string' where a result object wasn't
    used correctly. Method 'count' failed when no keyfield was set. Since it should be possible
    to call this method also when there is no keyfield defined private method table_check is 
    returning specific error codes making possible to catch this error and ignore 
    it in 'count' (fixed bugs #53733 and #53732)
    * rivet/packages/dio/dio_Sqlite.tcl: Class Sqlite did not set the variable 'interface' to
    value 'Sqlite' as expected.
    * doc/README: improved instruction for code examples inclusion into XML manual
    * doc/rivet-full.xml: removed
    * configure.ac: bumping up version number to 2.0.6
    * VERSION: new version number

2012-09-18 Massimo Manghi <mxmanghi@apache.org>
    * rivet/pkgIndex.tcl: index file regenerated

2012-09-16 Massimo Manghi <mxmanghi@apache.org>
    * tests/runtests.tcl,tests/apachetest.tcl: User and Group directives removed from conffile
    template to make test suite independent from the output of command 'id' from which 
    the values for this parameters were inferred (Bug #53396)

2012-08-15 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/dio.xml: Fixed wrong declariation of 'insert' subcommand in page manual (Bug #53670)
    * rivet/packages/dio/dio_Postgresql.tcl,rivet/packages/dio/dio_Oracle.tcl:: method 
    makeDBFieldValue implemented and tested with package Sessiona (Bug #53703).
    * rivet/packages/session/session-create.sql: file renamed as session-create-postgresql.sql. 
    Schema tested with package Session. 
    * rivet/packages/session/session-class.tcl: removed 'conf' variable that could clash with
    application code (and in at least one case it did) (Fixes bug #53544) 
    
2012-08-13 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Sqlite.sql,rivet/packages/dio/dio_Mysql.tcl: These connector classes
    didn't compute correctly the number of seconds as unix timestamp to be returned for comparison
    with the same information returned by [clock seconds] (Bug #53703)
    * rivet/packages/session/session-class.tcl: special datetime field were registered associated
    to the rivet_session and rivet_session_cache names, whereas the class has member variables for
    storing these definitions (Bug #53543)

2012-08-12 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio.tcl: Database's class fetch method was rewritten on a more simple 
    assumption that methods 'insert' and 'update' know how to actually .... insert and update rows
    * rivet/packages/dio/dio_Sqlite.tcl: The class was found to fail in various circumstances 
    determining the number of rows affected  by a query and determining the set of fields in a 
    table involved by a query. Since a 'select' query is treated in a rather distinctive way 
    from other SQL queries, a new public variable 'select' was added to the properties of the
    class in order to handle consistently the 2 cases within SqliteResult. The number of rows
    affected rows is obtained from the 'changes' subcommand of Sqlite3 connector.
    * rivet/packages/dio_Mysql.tcl: wrong special field handling fixed

2012-08-11 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/session/session-create-sqlite.sql: new file with schema of session package tables
    for Sqlite.

2012-07-12 Massimo Manghi <mxmanghi@apache.org>
    * doc/examples/download.tcl: Wrong command 'source' (it had to be 'parse')

2012-07-03 Massimo Manghi <mxmanghi@apache.org>
    * CHANGES,TODO: emptied from obsolete content

2012-06-06 Massimo Manghi <mxmanghi@apache.org>
    * INSTALL: wrong link to website fixed. Formatting improved by replacing tabs with spaces.

2012-06-05 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: manual entry for 'load_response' now explains what the __var variables are for

2012-06-04 Massimo Manghi <mxmanghi@apache.org>
    * tests/shorthand.test,tests/shorthand.rvt: test failed because the same output line
    appeared twice in shorthand.rvt, add Id keyword to shorthand.test

2012-06-01 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form.tcl: automatic field ids generation. Removed dependency on tcllib package 'uuid'

2012-05-20 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/{parray_table.tcl,http_accept.tcl}: new commands for printing arrays in HTML tables and
    parsing of Accept HTTP header lines
    * rivet/packages/entities/entities.tcl: backport from trunk of package RivetEntities
    * doc/xml/entities.xml: new manual page for package RivetEntities
    * doc/xml/commands.xml: new manual page for http_accept
    * src/apache-2/mod_rivet.c: if RIVET_DISPLAY_VERSION is defined then the symbol RIVET_SERVER is
    stored in the 'server' array
    * configure.ac,VERSION: Rivet version is now 2.0.5
    * tclconfig/ltmain.sh: updated from recent autotools installation

2012-05-17 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio.tcl: fixed SQL syntax that would break compatibility with Oracle (Fixes reopened
    bug #53222)

2012-05-13 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/tclrivet/tclrivetparser.tcl: Tcl parser implements new shorthand echo syntax (closes
    bug #53217)
    * rivet/packages/tclrivet/parse.tcl: auto_path handling improved as suggested in bug #52898
    * doc/xml/commands.xml: improved manual entry for 'var list' (Fixes bug #52911)
 
2012-05-12 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetParser.c: add shorthand expression <?= ... ?> for <? puts -nonewline "..." ?> (contributed 
    by Jeff Lawson,addresses #53217, tclrivetparser yet to be fixed)
    * tests/shorthand.[test|rvt]: add test of shorthand notation for string output 
    * rivet/rivet-tcl/cookie.tcl: add support for HttpOnly flag (contributed by Cyril Shtumf, fixes bug #53224)
    * rivet/packages/session/session-class.tcl: support for HttpOnly flag improves security and reduces
    the risk of cross-site scripting attacks (contributed by Cyril Shtumf, fixes #52224)
    * rivet/packages/dio/dio.tcl: wrong SQL syntax generated in delete method when multiple fields are
    used in the selection clause (contributed by Cyril Shtumf, fixes bug #53222)
    * rivet/packages/dio/dio_Mysql.tcl: Mysql connection must be checked when connection reference is reused
    because it could have dropped (contributed by Cyril Shtumf, fixes #53221)

2011-09-23 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-1/rivetCore.c: fixed declarations for various calls to ap_pstrcat.

2011-09-23 Massimo Manghi <mxmanghi@apache.org>
    * debian/rules,debian/changelog: new lintian required targets, current Debian package version bumped up to 2.0.4-1
    * src/apache-1/TclWebapache.c,src/apache-1/rivetCode.c: latest changes for 'makeurl', 'load_env' and 'load_headers'
    ported to code for Apache 1.x

2011-09-21 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/calendar/calendar.tcl: fixed wrong conversion of month expressed as numeric string

2011-09-20 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: inclusion of apr_strings.h added.

2011-09-19 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: the new extended makeurl command description slipped out from
    previous commit.

2011-09-19 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/TclWebapache.c: Command load_env and load_headers now resolve 
    the array name parameter following the default method (removed 
    TCL_NAMESPACE_ONLY flag that prevented creation of an array in a
    proc's scope). Still default values for the arguments create such arrays
    in the ::request namespace 
    * src/apache-2/rivetCode.c: preprocess macros ENV_ARRAY_NAME and HEADERS_ARRAY_NAME
    modified to explicitly put in ::request namespace the default arrays. 
    Procedure Rivet_MakeURL chages so that command 'makeurl' now accepts 
    relative paths and prepends them with the value of the SCRIPT_NAME environment 
    variable. When run without arguments 'makeurl' returns the value in the
    SCRIPT_NAME env variable.
    * VERSION,configure.ac: module version set as 2.0.4
    * tests/runtests.tcl: reindented, tabs expanded into spaces.

2011-07-26 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: removed variables initialized but not used as detected by gcc 4.6

2011-06-29 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: add paragraphs for so far undocumented commands. Commands paragraphs sorted
    in alphabetical order
    * doc/xml/form.xml: add paragraph for text entry example and explanation
    * tclconfig/ltmain.sh,tclconfig/libtool.m4: new scripts from libtool distribution

2011-06-20 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-1/mod_rivet.c,src/apache-2/mod_rivet.c: Wrong error message fixed when handling errors 
    returned by evaluation of an AbortScript

2011-04-14 Massimo Manghi <mxmanghi@apache.org>
    * src/Makefile.am,src/apache-2/Makefile.am: Add target install-data-hook with command line for
    removing unneeded .la files from target directories
    * debian/changelog,debian/control: changed to reflect improvement in the script for Debian

2011-03-01 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-1/mod_rivet.[c|h]: Add handling of AbortScript and AfterEveryScript configuration parameters
    * src/apache-1/rivetCode.c:	Add code for apache_log_error,apache_table, abort_code and abort_page 
    * src/apache-2/mod_rivet.[c|h]: Add handling of AbortScript and AfterEveryScript configuration parameters
    * src/apache-2/rivetCode.c:	New code for abort_page and add new command abort_code
    * configure.ac: module version bumped up to 2.0.3

2010-10-20 Massimo Manghi <mxmanghi@apache.org>
    * debian/[clean,install,docs,dirs]: removed because not needed or redundant
    * debian/copyright: completed to include also the Tcl license. Added copyright notes for stuff in win/

2010-10-19 Massimo Manghi <mxmanghi@apache.org>
    * debian/control,debian/Makefile.am: Minor adjustments to debian/control to fulfill Debian policy
    * debian/libapache2-mod-rivet-doc.docs: the 'contrib' directory is installed now in this package.
    * src/apache-2/rivetCore.c: In Rivet_ApacheTable the variable table is initialized to NULL to silence a 
    compilation warning
    * doc/Makefile.am: the 'distclean' target must remove the Makefile
    * Makefile.am: rivet_config.h removal added to 'distclean-local'

2010-10-18 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/tclrivet/parse.tcl: add svn:executable property as suggested by the debian consistency scripts
    * debian/*: more changes to remove unnecessary files from the binary packages of Debian

2010-10-14 Massimo Manghi <mxmanghi@apache.org>
    * debian/: more adjustments in the way of getting a working setup for Debian. Some information was moved to make
    it 'package specific'. More tweaking on debian/control and /debian/changelog

2010-10-13 Massimo Manghi <mxmanghi@apache.org>
    * src/buildscripts: trying to keep the source tree as tidy as possible. src/buildscripts/* are removed because they were\
    then initial and later abandoned Rivet build scripts
    * branches/2_0/src/buildscripts: removed also from the branch development
    * branches/2_0/debian/*: merging the debian scripts largely rewritten in trunk. Added control files to 
    build 2 packages for debian (binary module and docs)

2010-10-11 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/config.sub,tclconfig/config.guess: Debian package build system signalled that these 2 files were too old
    and suggested to update them with newer versions shipped by automake-1.11
    * debian/*: various stuff was changed trying to shape scripts to make debian packages as uneventful as possible
    * doc/Makefile.am: The 'clean' target in doc/Makefile was renamed as 'distclean'. HTML files are deleted only when
    a deep cleaning is required.

2010-10-07 Massimo Manghi <mxmanghi@apache.org>
    * debian/*: various changes that fix some consistency faults in the debian packages 

2010-10-06 Massimo Manghi <mxmanghi@apache.org>
    * debian/*: most files in this directory have been modified to comply with the latest version of debian packaging 
    system. Some files were deleted because superseded by others which have been added to produce 2 separate
    packages: one for the module and the Tcl library, the other for the html manual.

2010-09-20 Massimo Manghi <mxmanghi@apache.org>
    * debian/*: changing some info in files needed by the debian

2010-09-18 Massimo Manghi <mxmanghi@apache.org>
    * debian/*: files modified and added in the process to build a debian package
    * doc/Makefile.am: comments added. Better target handling

2010-09-15 Massimo Manghi <mxmanghi@apache.org>
    * debian/README.Debian, debian/rivet.load: add files needed to build a Debian package
    * debian/rules, debian/changelog, debian/control: experimental versions of files needed by .deb packages

2010-09-14 Massimo Manghi <mxmanghi@apache.org>
    * doc/html/*: directory removed from repository 
    * doc/Makefile.am: New targets for creating the doc/html/ directory and copying new or modified graphic files from
    doc/images to doc/html/images

2010-08-30 Massimo Manghi <mxmanghi@apache.org>
    * doc/images: Graphics displayed in the manual is copied in this directory. This is a first step in the transition 
    to a manual generation procedure that should achieve a cleaner repository structure

2010-08-26 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: removed AC_DEFINE(BUILD_rivet....) as the tcl.m4 providing TEA 3.9
    makes redundant this definition. Argument to TEA_INIT changed accordingly
    * tclconfig/tcl.m4: overwritten by the new tcl.m4 and made a couple of adjustments that make it autoreconf/autoheader
    friendly.

2010-07-20 Massimo Manghi <mxmanghi@apache.org>
    * doc/examples/rivet_web_service.tcl,doc/html/*.html: Improved example of Ajax servlet. 
    Manual changed accordingly.

2010-07-18 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: static void ap_chdir_file renamed as static int Rivet_chdir_file. Rivet_chdir_file
    returns the value returned by chdir. This value is checked and in case of error the request
    aborts with an HTTP_INTERNAL_ERROR and a message is printed in the log file.
    * VERSION,configure.ac: version number changes as 2.0.1 (temporarily) 
    
2010-07-13 Massimo Manghi <mxmanghi@apache.org>
    * doc/rivet.xml,doc/html/*.html: Latest minor changes before releasing
    * VERSION,configure.ac: Release number changed as 2.0.1

2010-07-12 Massimo Manghi <mxmanghi@apache.org>
    * branches/2_0: Merge of trunk changes into the 2_0 branch. 

2010-07-12 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/calendar/calendar.tcl: new comments added. Fixed misspelled -errorinfo option
    in a return statement.
    * rivet/packages/session/session-create.sql: columns 'key' and 'package' are renamed as 'key_" and
    'package_'.
    * rivet/packages/dio/dio_Postgresql.tcl: fixed typo in variable name 
    * doc/xml/calendar.xml: More correction made on calendar.xml
    * doc/html/*.html: The whole manual has been rebuilt with the latest changes

2010-07-07 Massimo Manghi <mxmanghi@apache.org>
    * INSTALL: improved installation instructions before merging trunk into branches/2_0

2010-07-03 Massimo Manghi <mxmanghi@apache.org>
    * rivet/package/calendar/calendar.tcl: Add check on tcl version. If Tcl8.4 is being used
    we also need 'dict' backport as Calendar uses a dictionary to store some internal
    data.
    * doc/xml/calendar.xml: Wrong header corrected. Added explicit note about the requirements
    of the package

2010-07-03 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/calendar/calendar.tcl: Fixed indentation in weekdays row
    * doc/html/: Manual pages regenerated to include latest changes in section about package Calendar

2010-07-02 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/calendar/calendar.tcl: Add experimental package Calendar

2010-07-02 Massimo Manghi <mxmanghi@apache.org>
    * doc/html/calendar.html, doc/html/xml_calendar.html: Add html manual pages for Calendar
    * doc/xml/calendar.xml: more changes to calendar.xml

2010-07-02 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/calendar.xml: Add manual page for package Calendar (package still to be
      added to repository)
    * doc/xml/form.xml: Page for package 'form' written with a more structured
      docbook organization that allows finer styling of a manual page.
    * doc/rivet.xsl: Add xsl configurations for elements refsect1,refsect2 and
      refsect3
    * configure.ac: Add message when building for Apache 1.x
 
2010-07-01 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/Makefile.am: removed target 'html/rivet.html" from 'docs' depends. The no-chunks version
    of the manual can be build running 'make docs-nochunk'

2010-06-30 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/form.xml: Add 'checkbox' subcommand documentation
    * doc/html/*.html: Updated manual pages

2010-06-30 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form.tcl: fixed various methods in package form: 'field' method must
    treat checkboxes and radiobuttons alike, so that labels are printed next to the button.
    'radiobuttons' specialized method should not propagate the '-labels' switch to the attributes
    of the tag. 
    * doc/rivet.xml: add new documentation in file doc/xml/form.xml
    * doc/xml/form.xml: add to repository
    * doc/html/form.html,doc/html/form_package.html: add to repository
    * doc/html/*.html: new manual pages including the form package

2010-06-22 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am: Rivet install target deletes every pkgIndex.tcl file that might have been 
    left around in the Rivet directory tree, before calling pkg_mkIndex.tcl to regenerate 
    the library index file in the root directory.
    * rivet/packages/tclrivet/parse.tcl,rivet/packages/commserver/server.tcl: add existence test on 
    argv variable that wept during the installation process. If not set exits silently (variable is 
    required for a sensible use of the procedures)
    * rivet/packages/tclrivet/tclrivet.tcl: wrong path to librivetparser.[so|dll] corrected
    
2010-06-19 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: filled SERVER_CONF variable in the 'server' array with value generated
    by the build system of the directory holding the conf files. 
    This fulfills a TODO comment in the code. The array server is undocumented and is not clear if it was
    added for the benefit of the programmer or for debugging of the module.
    * src/apache-2/mod_rivet.h: structure definitions beautified and aligned.
  
2010-05-14 Massimo Manghi <mxmanghi@apache.org>
    * BUGS,INSTALL,Changelog: small improvements in the documentation

2010-05-14 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/install-sh: the install-sh script is replaced with the same script shipped with automake-1.11

2010-05-13 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-1/TclWebapache.c: call to ap_send_http_headers centralized in TclWeb_SendHeaders
    * src/apache-2/TclWebapache.c: bugfix for string assigned to the content_type field that has to
	be duplicated to preserve from memory deallocation by Tcl, includes to modules from apache APR
	library added, call to ap_send_http_headers centralized in TclWeb_SendHeaders
 
2010-04-29 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/apache_multipart_buffer.c: Add include <apr_string.h> to silence a compilation
    warning.
    * src/apache-2/apache_multipart_buffer.h: set svn property to enable $Id: keyword expansion
    * doc/xml/session.xml: Commented line about a 'CookieDomain' command of Session that appears to
    be non coded yet. To be added to the TODO file.

2010-04-29 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac,VERSION: Pre-branching operations: AC_INIT now uses 2.0.0 as version number
    to be used across the build system. Also the file VERSION has been updated to reflect the
    release number.

2010-04-27 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-1/TclWebapache.c,src/apache-1/rivetCore.c,src/apache-1/mod_rivet.c,
      src/apache-1/apache_request.c,src/apache-1/apache_multipart_buffer.c: changes and 
      additions made for apache 2 added to the code for apache 1.x   

2010-04-22 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl: add to auto_path the directory where init.tcl is located, as this
    is also the directory for package Rivet

2010-04-19 Massimo Manghi <mxmanghi@apache.org>
    * tests/upload.[rvt|test]: fix upload message sent to server. The end boundary
	went undetected and Rivet added it to the uploaded file. Thus the problem
	affected only the test, not the module. Added delimiter to the returned 
	message to allow easy spotting of an empty string.

2009-12-08 Karl Lehenbauer <karl@apache.org>
    * rivet/packages/form/form.tcl, form.txt: Add new form methods for HTML 5
      form elements "color", "date", "datetime", "datetime_local", "email",
      "file", "image", "month", "number", "range", "search", "tel", "time",
      "url", "week"

2009-11-03 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: in function Rivet_Upload the list of subcommands
    had 2 entries for 'tempname" leading Tcl_GetIndexfromObject to mismatch the entry for
    the 'names' subcommand with its numerical counterpart. 
    This caused the child process to segfault when processing a 'upload names' command.

2009-11-02 Massimo Manghi <mxmanghi@apache.org>
    * tests/apachetest/apachetest.tcl: apachetest::getallincludes failed to
    properly handle glob style file patterns. 

2009-09-17 Karl Lehenbauer <karl@apache.org>
    * rivet/packages/form/form.tcl, form.txt: Add a new form method, "button",
      that's just like "submit" except pressing enter doesn't cause it to be 
      invoked.  Add quick doc, form.txt, on the forms package.

      Terminate <option> with </option> in form selectors.

2009-09-15 Karl Lehenbauer <karl@apache.org>
    * rivet/packages/form/form.tcl: If the array containing default values
      for the form is passed in when the form is created
      (for instance: form myform -defaults response -method post),
      make sure form classes public variable "defaults" is set to
      that array name.

2009-09-03 Karl Lehenbauer <karl@apache.org>
    * src/apache-2/rivetCore.c: Add new command, apache_log_error, which
      allows consistent logging to the Apache error log file.

2009-06-24 Karl Lehenbauer <karl@apache.org>
    * acinclude.m4: Include m4/ax_prefix_config_h.m4 to define the
      AX_PREFIX_CONFIG_H macro.

    * tclconfig/libtool.m4, tclconfig/config.guess, tclconfig/config.sub,
      tclconfig/ltmain.sh: Freshened these files with the latest versions
      from libtool.

    * configure.ac, tclconfig/tcl.m4, tclconfig/ChangeLog,
      tclconfig/README.txt, tclconfig/install-sh: Updated to Tcl Extension
      Architecture (TEA) 3.7.

2009-05-05 Karl Lehenbauer <karl@apache.org>
    * src/apache-2/mod_rivet.c: When Rivet is shutting down and per-vhost
      separate virtual interpreters were in use, the shutdown code deleted
      the master interpreter and all of the slave interpreters using
      Tcl_DepeteInterp().  This was an error as it should only delete the
      mater interpreter, as deleting the master interpreter causes its
      slaves to be deleted. It now does this.  (Had it checked using
      Tcl_InterpDeleted to see if the interpreter was already marked as
      deleted, it probably would have been OK.)

    * src/rivetChannel.c - update Tcl channel handler to channel version 4.

2009-05-05 Karl Lehenbauer <karl@apache.org>
    * Add new Rivet Tcl command,apache_table, which can query, get and set
      values in the Apache "notes", "headers_in", "headers_out",
      "err_headers_out" and "subprocess_env" tables.

    * Add new "upload" option "tempname" that'll return the name of the
      temporary file containing the upload.

    * When instantiating separate virtual interpreters, postpend an interpreter
      count to the self-created slave interpreter name, to keep 
      Tcl_CreateSlave from failing if two or more virtual hosts have the same 
      ServerName and don't have a port defined in the ServerName directive.

    * Detect and report failure of Tcl_CreateSlave rather than assuming it
      succeeded and dereferencing a null pointer when it didn't.  Also added
      asserts to detect null interpreter pointer.

    * Slightly improved error messages when a child init or exit function
      fails.

2009-05-01 Karl Lehenbauer <karl@apache.org>
    * Rename global request rec pointer from globalrr to 
      rivet_panic_request_rec, add rivet_panic_pool and
      rivet_panic_server_rec, grabbing those values from Rivet initialization
      rather than request handling so that they are initialized enough that
      Rivet_Panic can use them.  (Previously Rivet_Panic or Tcl_Panic at 
      initialization time caused a null-pointer-dereference segmentation 
      violation because no request was being served.

      In Rivet_Panic, avoid emitting the unparsed URI unless a request is
      being processed.

2009-04-27 Karl Lehenbauer <karl@apache.org>

    * src/apache-2/mod_rivet.c: In Rivet_SendContent, when checking to see
      if the file doesn't exist, check r->finfo.filetype rather than
      r->finfo.protection.  (The prior check failed to detect that the
      Rivet source file did not exist, causing zero length webpages to
      be sent rather than 404's.)

2009-01-16 Massimo Manghi <mxmanghi@apache.org>

    * Makefile.am: Add DESTLIB variable handling as suggested
    by kikusz@gmail.com and accordingly with Automake directives
    for local install rules.

2008-12-21 Massimo Manghi <mxmanghi@apache.ora>

    * src/apache-2/rivetCode.c: add handling for subcommand
    'tempname'

2008-12-15 Massimo Manghi <mxmanghi@apache.org>

    * src/apache-2/TclWebapache.c: fixed test on configuaration
    flag 'upload_files_to_var' 

2008-12-11 Massimo Manghi <mxmanghi@apache.org>
    
    * src/apache-2/mod_rivet.c: fixed call to apr_strcat in function
    Rivet_ExecuteAndCheck (the corresponding call in the apache-1 code
    has been checked and appears to be correct).
    
    * doc/xml/internals.xml: Removed broken external link pointing
    to a no more existing gdb tutorial.

2008-12-03 Massimo Manghi <mxmanghi@apache.org>

    * doc/rivet.xml: document timestamp is generated with the 
    EXSLT datetime() function controlled through the <?dbtimestamp ...?>
    element. The timestamp now reflects the actual time when the xsl
    processor is run, instead of time when the svn commit is carried out.

    * doc/rivet.xsl: customization added to make a list of examples
    appear at the end of the table of contents.

    * doc/html/*.html: manual pages rebuilt and committed to repository

2008-11-21 Massimo Manghi <mxmanghi@apache.org>

    * doc/rivet.xml: file broken up into chunks containing the toplevel
    sections of the manual. For every file an xml entity was created.

    * doc/xml/*.xml: added xml files containing every toplevel section of
    the manual.

    * doc/Makefile.am: added dependency from xml/*.xml for html pages
    generation

2008-11-17 Karl Lehenbauer <karl@apache.org>
    * src/apache-2/TclWebapache.c: Make TclWeb_UploadChannel open the 
    uploaded file and make the file handle available through standard Tcl 
    mechanisms, removing OS depdendencies.

    Make TclWeb_UploadData access the uploaded file through standard
    Tcl mechanisms, making the uploaded data available and also removing
    OS dependencies.

    Add TclWeb_UploadTempname to get the name of the temp file the
    uploaded file was saved to.

    Include apr_strings.h to remove compiler warning of implicit
    definitions of apr_pstrdup and apr_psprintf as well as multiple
    warnings about casts to pointer from integer of different size.

    Force rsc->upload_files_to_var to be set, temporarily, pending figuring 
    out why the configuration directive to set that is not working.

    * src/apache-2/rivetCore.c: Check return from Tcl_GetIndexFromObj call 
    in "upload" command processing (Rivet_Upload command).  Return an error 
    when the subcommand (channel, save, data, exists, size, type, filename, 
    tempname, or names) is invalid.

    Add "tempname" option to "upload" command.  "upload tempname" will
    return the name of the temporary file a file uploaded via a
    POST command was saved to.

    * src/apache-2/mod_rivet.c: Change "char *" arguments to 
    Rivet_ServerConf, Rivet_DirConf and Rivet_UserConf to be
    "const char *" to bring them in line with what Apache expects,
    fixing compiler warnings warnings about "assignment discards qualifiers 
    from pointer target type".

    Use a "void *" argument where expected in calls to AP_INIT_TAKE2
    for Rivet_DirConf and Rivet_UserConf and do an assigment to the
    Rivet-desired types of rivet_server_conf to eliminate
    "initialization from incompatible pointer type" compiler warnings.

    Make Rivet_SetScript's script and string arguments be const char *
    instead of char *.

    * src/apache-2/apache_request.c: Change "char *error[1024]"
    to "char error[1024]" to fix "incompatible pointer type" error
    in the call to apr_strerror.

    * src/apache-2/apache_request.h - make temp_dir be a const char *
    instead of a char *.

    * src/apache-2/apache_multipart_buffer.c: Add include of apr_strings.h
    to remove compiler warning of implicit definitions of apr_pstrcat and 
    warnings about casts to pointer from integer of different size (which
    occurred on 64-bit machines, anyway.)

    * doc/rivet.xml: added the "tempname" option to "upload".

2008-11-13 Massimo Manghi <mxmanghi@apache.org>

	* src/apache-2/rivetCore.c: In function 'Rivet_Parse' the call
	to Tcl_FSStat was turned into the corresponding apr function 
	'apr_stat'. 
	This change was motivated by a possibile mismatch between Rivet's
	allocation of the structure 'Tcl_StatBuf' and the handling
	of the structure done within the Tcl C library. 
	This seems to have healed a pointer corruption that caused 
	segfaults when the 'parse' command was executed.

2008-10-07 Massimo Manghi <mxmanghi@apache.org>

	* src/apache-2/apache_multipart_buffer.c, src/apache-2/rivetCore.c,
	src/apache-2/TclWebapache.c,src/rivetChannel.c,src/rivetCrypt.c: 
    	Inclusion of config.h changed to reflect renaming of config.h.

	* configure.ac: new AX_PREFIX_CONFIG_H added to 'configure' 
	generation. Added switch --enable-display-version for having 
	Rivet's version printed in Apache signature

	* m4/ax_prefix_config_h: added macro for renaming config.h into
	rivet_config.h (or whatever we deem a good name for this file).
	Preprocessor symbols in this file are also prefixed with RIVET_
	
	* Makefile.am: added handling of the macros in the 'm4' directory. 

	* src/apache-2/mod_rivet.h: removed definition of preprocessor
	symbol for hiding version number in apache logs (feature now
	controlled in 'configure')

	* src/apache-2/mod_rivet.c: Changed preprocessor symbols that
	are now prefixed by 'RIVET_'. Moved misplaced #ifdef APACHE2 test.
	Maybe this test is useless as we certainly are building against 
	APACHE2 when compiling this file

2008-09-06 Massimo Manghi <mxmanghi@apache.org>

	* INSTALL: instructions for builing Rivet expanded with
	examples taken from real builds for Debian and Slackware.

	* src/apache-2/apache_request.[c|h]: removed TODO comments
	concerning ap_hard_timeout and ap_kill_timeout as these functions
	doesn't not exist anymore in the apache 2.x api.
	Added the Content-type as a new argumento to
	ApacheRequest_parse_multipart for parts boundary determination.
	The correctness of the content type has to be done before calling
	in order to do the check only once. Commented declarations of variables
	not used. The 'tempname' string is allocated now from the apache pool.
	Changed template for temporary file name generation. If 
	apr_file_mktemp fails a more descriptive error is logged.

	* src/apache-2/apache_multipart_buffer.[c|h]: removed line in
	multipart_buffer_read that lead the buffer pointer to fail following 
	the parsing process. Input buffer size changed to a larger and more 
	common size of 8192 bytes

2008-08-30 Massimo Manghi <mxmanghi@apache.org>

	* doc/rivet.[xml|xsl], doc/html/*.html: changed a couple of rule 
	in rivet.xsl: they basically make example boxes a 
	bit more flexible for html browsing and made their 
	background color a bit more "neutral". I also made the character 
	in them slighly smaller in order to have more 
	space for code lines.

2008-08-28 Massimo Manghi <mxmanghi@apache.org>

	* src/apache-2/mod_rivet.c: using the 'parse' command twice within
	the innermost nested level would trick rivet into 
	treating the second template as a Tcl script. 
	Condition on the flag 'toplevel' has been reintroduced in the
	on the file type (Rivet_ParseExecFile), but the whole mechanism 
	has to be revised. 

	Adopting a reverse logic in this test should achive the same
	result in more linear way
	
	if (Rivet_CheckType(req->req) == TCL_FILE) {
 	    ---> Tcl script
	} else {
	    ---> Rivet template
	}

2008-07-03 Massimo Manghi <mxmanghi@apache.org>

	* src/apache-1/mod_rivet.[c|h]: done modifications needed to replicate
	for the apache 1 code the functionalities added to the apache 2
	module

2008-07-01 Massimo Manghi <mxmanghi@apache.org>
	
	* src/rivet.h: added macro STRNEQU(s1,s2) which efficiently
	compares 2 strings. Unlike STREQU(s1,s2) this new macro compares
	at most strlen(s2) characters.

	* src/TclWeb.h: added charset field to TclWebRequest. This new
	property gets initialized to NULL every time this structure
	is instantiated. If used it stores a pointer to a string that 
	specifies a header value fragment for the page being generated. 

	* src/apache-2/TclWebapache.c: request_rec is treated as an
	opaque structure and the field 'content_type' is set by calling
	the ap_set_content_type apache core function

	* src/apache-2/mod_rivet.h: a 'honor_header_only_reqs' is added
	to the rivet_server_conf for handling of the 
	HonorHeaderOnlyRequests configuration option

	* src/apache-2/mod_rivet.c: Every content_type is checked 
	for possible charset specifications. When found this is 
	stored in the TclWebRequest structure to be processed later. 
	If a script or template doesn't set a content type on its own (with 
	the 'headers type <ctype>' command) the charset is written in 
	the http headers. Added support for the 'HonorHeaderOnlyRequests' 
	switch. Other minor changes include better code formatting 
	in some functions and commenting out some cruft left around.

2008-01-08 Massimo Manghi <massimo.manghi@unipr.it>

	* rivet/packages/dio/dio.tcl: auto_path shouldn't be set 
	or modified outsite init.tcl

	* rivet/init.tcl: We want the Tcl code specific to an
	installation to take precedence over other Tcl packages
	or other versions of the same stuff. Therefore I put 
	the references to the rivetlib directory in the first
	positions in auto_path.

2008-01-07 Massimo Manghi <massimo.manghi@unipr.it>

	* src/apache-2/TclWebapache.c: Fixed timestamp printed in the
	DATE_LOCAL and DATE_GMT fields of the environment table.

	* src/apache-2/mod_rivet.h: Fixed definitions for RIVET_INIT and
	RIVET_DIR. I couldn't fix SERVER_CONF though

2008-01-06 Massimo Manghi <massimo.manghi@unipr.it>

	* Makefile.am: target 'uninstall-local' added. Stuff in
	RIVETLIB_DESTDIR gets removed upon deinstallation

	* rivet/packages/dio/dio_Mysql.tcl: small fixes for 
	2 methods. In method 'open' the switch '-host' was
	not handled. In method 'exec' the handling of 'select'
	queries has been changed because the previous method
	failed in certain circumstances (queries build with lists)

	* src/apache-[1|2]/mod_rivet.c: Status returned by Tcl_EvalFile 
	is now checked explicitly against TCL_ERROR

	* doc/html/*.en.html: Html pages regenerated after changes in rivet.xml

	* src/rivetCore.c: Moved into src/apache-1. This file was compiled by 
	src/apache-1/Makefile.am, whereas src/apache-2 had its own 
	rivetCore.c module. 

	* src/apache-1/Makefile.am: Changed to reflect rivetCore's new location.
	rivetWWW.c removed from module's compilation: stuff in it has to be loaded
	into the interpreter with 'package require Rivet'

	* src/apache-2/Makefile.am: Reordered list of files to allow better
	comparison with apache-1 build.

2008-01-05 Massimo Manghi <massimo.manghi@unipr.it>
	
	* src/apache-[1|2]/mod_rivet.c: Added comments as per
	David Welton's suggestion.

2007-12-03  Valery Masiutsin <val.masutin@gmail.com>

	* tests/apachetest/: multiple changes has been made to tests
	to get them working with apache2
	* src/apache-2/mod_rivet.c, src/apache-2/apache_multipart_buffer.c:
	fixes for  issues that has been discovered with tests, mostly
	there were problems with multipart buffer parsing during POST
	* configure.ac: minor issue with apache includes handling has been
	fixed

2007-11-18  Massimo Manghi <massimo.manghi@unipr.it>

	* doc/rivet.xml: note added to description of
	commands listed in the 'Rivet' package.

2007-11-05  Massimo Manghi <massimo.manghi@unipr.it>

	* configure.ac: the macro rivet_target_dir was added 
	to 'configure'. This macro generates a name for the 
	directory where Rivet libraries must be copied during 
	the installation phase. User is enabled to change
	the default value by feeding 'configure' with the switch
	'--with-rivet-target-dir'. This macro defines also the
	variable RIVET_TCL_TARGET and calls AC_SUBST on it.
	The target directory gets inserted also in the 
	auto_path list variable of every script run by 
	the module. Defined configuration symbol 
	RIVETLIB_DESTDIR in config.h.

	* Makefile.am,src/Makefile.am: RIVET_TCL_TARGET variable
	propagation.

	* src/apache-1/Makefile.am: rivetWWW.c removed from 
	linking into mod_rivet.so (this requires docs to 
	be updated, as commands in this file have to be 
	loaded explicitly using 'package require Rivet')

	* src/apache-1/mod_rivet.c: Tcl_DeleteInterp called
	upon child exit. ${RIVETLIB_DESTDIR)/init.tcl is 
	run during the interpreter initialization.
	
	* src/apache-2/mod_rivet.c: Exit handler reenabled,
	and Tcl_DeleteInterp called upon child exit. 
	${RIVETLIB_DESTDIR)/init.tcl is run during the 
	interpreter initialization. Code clean up in 
	Rivet_GetConf. Minor changes in order to get rid
	of some compilation warnings.

	* src/apache-2/TclWebapache.c: Test checking for 
	null values in the table of environment variables
	has been extended to the value field. Failure to
	do so caused a child to segfault when rivet was
	used in conjuction with dir_module

2007-10-19  Massimo Manghi <massimo.manghi@unipr.it>
	
	* src/apache-2/mod_rivet.c: Included a more correct
	statement in aknowledgement of mod_ruby (BSD license)
	for the code in ap_chdir_file.

	* ChangeLog: the whole batch of patches described in 
	the previous entry (2007-10-17), came from Valery 
	Masiutsin <val.masutin@gmail.com>. I forgot to mention
	it in this document. My fault.

2007-10-17  Massimo Manghi <massimo.manghi@unipr.it>

	* configure.ac: added APACHE2 define to config.h,
	added also a message when the apxs program is found.

	* doc/Makefile.am: 'clean' target fixed

	* src/apache-2/Makefile.am: added -I"." to the INCLUDE symbol

	* src/apache-2/mod_rivet.c: Changed function that determines
	if this is a request rivet must serve. We now correctly 
	rely on the module configuration and on the headers handed
	on to us by apache. Added also a ap_chdir_file implementation.
	This function was dropped by the apache developers: we are
	reintroducing it using a code snippet inspired by mod_ruby.

	* src/apache-2/apache_request.h: Changed prototype of
	ApacheRequest_tmpfile function to return apr_file_t instead 
	of FILE, also modified ApacheUpload structure 

	* src/apache-2/apache_request.c: ApacheRequest_tmpfile
	rewritten using calls to apr_* functions

	* src/apache-2/TclWebapache_c: TclWeb_UploadSave in
	a more robust way using apr_* calls 


2007-10-14  Massimo Manghi <massimo.manghi@unipr.it>

	* doc/rivet.xml: Front page updated, page for the
	'load_response' command updated and extended, link to the 
	Italian and Russian translations removed, html pages
	in Italian and Russian removed from repository

	* rivet/rivet-tcl: new 'load_response.tcl'. This
	version deals in a more consistent way with the case
	of parameters that receive multiple values (see docs)

2007-10-12  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Fixed "dio" id's.

2007-10-11  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added missing ID's.

	* doc/Makefile.am (docs): Removed Russian and Italian
	translations from the build.

	* doc/norefchunk.xsl, doc/refentry.xsl: Ditch fancy-pants XSLT
	stuff.

2007-09-19  Massimo Manghi <massimo.manghi@unipr.it>

	* configure.ac: TEA_INIT argument was changed to 3.6 to match 
	the new TEA version in the tcl.m4. Macro for --with-apache was
	simplified. Macro for --with-apxs changed in order to check for 
	possible multiple version of apxs installed.
	Defined compilation parameters generated by apxs.
	Same for apr-1-config that returns compilation parameters for apr.

	* Makefile.am src/Makefile.am src/apache-[12]/Makefile.am:
	changed to handle new symbols and parameters

	* src/apache-1/mod_rivet.[hc] rivet version logging enabled:
	I enabled this to check if I was loading the expected module
	but maybe can be used to generate, at least for the code in
	trunk, more refined version numbers to be used in the
	development cycle.

	* src/rivetCore.c: added call to initialize commands
	in rivetWWW.

2007-09-09  David N. Welton  <davidw@dedasys.com>

	* src/apache-2/Makefile.am: Another patch from Valery Masiutsin
	<val.masutin@gmail.com>: Propagated variables from configure.ac,
	did some cleanups.

	* src/apache-1/Makefile.am: More of Valery's patch: Propogate
	variables from configure.ac.

	* configure.ac: More of Valery's patch: Separated cases for
	apache-1 and apache-2 in APACHE function.  Added handling for
	apache-2 for platforms i am developing on.  Probably it will need
	to be unified later.  Touched CHECK_APXS a bit.  Replaced
	APR_INCLUDES function with APR_HANDLING, now we are requiring full
	path for apr-1-config and getting cppflags and includes from
	it. APR tool has platform specific set of cppflags, just includes
	is not enough.  Added GET_RIVET_BASE function, which allows us to
	get rid of relative pathes in include flags.  Rearranged functions
	a bit - mostly to find out version of apache we are building for,
	before doing any substitutions.

	* src/Makefile.am: More of Valery's patch: Propagated variables
	introduced in configure.ac.

	* src/apache-2/mod_rivet.c (Rivet_TranslateUri): More of Valery's
	patch: Changed a bit Rivet_ParseFileArgString a bit, it fixed
	segfaults, but still needs some work. I've added apr_pool_t
	pointer to parameters we are passing to function.

2007-08-29  David N. Welton  <davidw@dedasys.com>

	* src/apache-1/Makefile.am: Another patch from Valery correcting
	a mistaken application of his patches on my part.

2007-08-27  David N. Welton  <davidw@dedasys.com>

	* configure.ac: Added missing quote.

	* configure.ac: Another patch from Valery, making compilation
	smoother on Debian.

	* src/apache-1/Makefile.am: Accepted patch from Valery for
	improved compilation.

	* src/apache-1/apache_multipart_buffer.c: Accepted patch from
	Valery to make this file compile.

	* tclconfig/tcl.m4: Moved to latest tcl.m4 at Valery's suggestion.

2007-08-22  David N. Welton  <davidw@dedasys.com>

	* configure.ac: Added patch from Valery Masiutsin
	<val.masutin@gmail.com> improving the configure setup.

2006-07-03  Karl Lehenbauer  <karl-rivet@sc.com>
        * rivet/packages/dio/dio_Postgresql.tcl: when handling a PostgreSQL
	  result, if numrows is zero, see if cmdTuples
	  (Pg_result $resultHandle -cmdTuples) contains anything, and if it 
	  does, put that in of numrows, hiding a PostgreSQL interface
	  quirk from DIO.

2006-06-07  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/session/session-create-mysql.sql: Minor update
	from Massimo Manghi for Mysql 4.

	* rivet/packages/session/session-class.tcl: Minor update from
	Massimo Manghi.

2006-05-14  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/session/, rivet/packages/dio/: Added Mysql and
	Oracle session creation packages.  Updates to dio and session
	packages.  Modifications to the Mysql driver.  Added an Oracle
	driver. Thanks to Arnulf Wiedemann (arnulf@wiedemann-pri.de) and
	Massimo Manghi (manghi@biol.unipr.it).

2006-02-03  Karl Lehenbauer  <karl-rivet@sc.com>
	* rivet/packages/dio/[dio,diodisplay].tcl: Uncovered a serious flaw
	  in DIO -- there is no way to update a row in a way that changes
	  the key value.  As a result, DIOdisplay punts and deletes the
	  row then reinserts it with the new key.  This is not the same
	  thing as the delete can trigger integrity checks that fail because
	  of constraints from other tables.  Added the somewhat kludgey
	  update_with_explicit_key method to let us specify the key rather
	  than having the key always be dug out of the data array (so that
	  the key in the data array can be different) and altered the
	  row edit code in DIOdisplay to use this rather than doing the
	  delete/insert thing.

2006-01-25  Karl Lehenbauer  <karl-rivet@sc.com>
	* rivet/packages/dio/diodisplay.tcl: When editing, made select boxes
	  have the current value selected by default.

2006-01-14 Eckhard Lehmann  <ecky.l@gmx.de>

	* configure.ac: edited for 2 directories src/apache-1 and
	src/apache-2 to be the source directory for either Apache1.x or
	Apache2.x. Added new autoconf macros to check for apache base
	directory, apache/apr include directories (on debian for instance,
	they are in /usr/include/apache1.3 resp. /usr/include/apache2 and
	/usr/include/apr-0) and apache version ( --apache-version=1 or
	--apache-version=2). According to the macros, the sources either
	in src/apache-1 or src/apache-2 are compiled.

	* src/: put all sources for rivet for Apache1.x into a
	subdirectory apache-1, left the Makefile.am unchanged. Copied the
	files to a subdirectory apache-2 and started port of rivet to
	Apache2.2 with these files.

	* Checked in by davidw.

2005-12-12  Karl Lehenbauer  <karl-rivet@sc.com>
	* rivet/packages/dio/dio.tcl: Reverted change to "store" method
	  that removed fields from the store array that were part of the
	  key and took out this behaviour from the update method.

	  The problem was that "DIO store" or "DIO update" could cause
	  fields to disappear from the data array as a side effect, and
	  the caller had no reason to expect that, hence it broke some
	  code.

2005-11-08  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/dio.tcl: Add new "update" method that works
	  just like "store" except that it assumes you're doing an update
	  and, unlike store, does not check to see if the row is already
	  there or not.  

	  Also modified the "store" method, when doing an update, to not 
	  attempt to change row fields that are specified in the where clause.

	* doc/rivet.xml: Documented all undocumented public DIO methods, such 
	  as count, db, forall, interface, insert, makekey, quote, search
	  and update.

2005-11-08  Pat Thoyts  <patthoyts@users.sourceforge.net>

	* win/makefile.vc:      Update for new version.
	* win/Rivet.nsi:        Update for new version.
	* src/apache_request.c: Cast aways some warnings.
	* src/rivetCore.c:      Make it work with MSVC (wierd bug).
	* src/TclWeb.h:         Declare TclWeb_GetRawPost (MSVC complains).

2005-11-03  David N. Welton  <davidw@dedasys.com>

	* src/Makefile.am (lib_libexecdir): Install everything to
	rivet@VERSION@.

	* tests/runtests.tcl (runtests_usage): Check for utf-8 environment
	- this causes some problems with a number of tests.  I'm not sure
	precisely why, but it causes a large portion of otherwise
	successful tests to choke.

2005-10-31  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Woops, fix spelling error: Seperate->Separate.

2005-10-01  David N. Welton  <davidw@dedasys.com>

	* rivet/pkgIndex.tcl: Added a package index here so that when used
	for tests, something exists.

	* tests/runtests.tcl: Add local path to TCLLIBPATH, add
	CoreDumpDirectory so that we can get any core files generated by
	bad tests.

	* src/mod_rivet.c (Rivet_PerInterpExit): Run any per-interp child
	exit things that need taking care of.
	(Rivet_ChildExit): Walk through the list of interpreters and do
	any shut down work necessary prior to shutting the whole thing
	down.

	* src/rivetChannel.c (outputproc): If the AssocData is NULL, we
	don't try and output anything.  This is probably some residual
	data stuck in the channel.

2005-09-29  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/dio.tcl: Fix typo in "DIO insert" method

2005-09-25  Karl Lehenbauer  <karl-rivet@sc.com>

	* src/rivetCore.c, src/mod_rivet.c, src/mod_rivet.h: Updated
	code comments.  In particular, every function in src/mod_rivet.c
	now has a standard header.

	* rivet/rivet-tcl: README, cookie.tcl, debug.tcl, html.tcl,
	import_keyvalue_pairs.tcl, import_switch_args.tcl, incr0.tcl,
        lassign.tcl, lempty.tcl, lmatch.tcl, load_cookies.tcl,
        load_response.tcl, parray.tcl, random.tcl, read_file.tcl,
        rivet_command_document.tcl, wrap.tcl: Updated code comments
	and added subversion "Id" tags where they weren't present.

2005-09-23  David N. Welton  <davidw@dedasys.com>

	* genconf.sh: Added autoheaders.

	* doc/Makefile.am (docs): Documentation is now its own target -
	this means it doesn't get run as part of 'all'.

2005-09-22  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/dio.tcl: "DIO insert" method is much more 
	efficient than "DIO store" when you know you want an insert and
	not an update and now actually works.

	* README.MacOSX:  GNU autoconf/configure script does not actually 
	work to make the Rivet module on Mac OS X so the README has been
	reverted to show it the old-school way using the Tcl build scripts.

2005-08-21  David N. Welton  <davidw@dedasys.com>

	* doc/html/rivet.css: CSS tweaks for documentation.

	* doc/rivet.xml: Updated build directions to ./configure ; make ;
	make install.

	* src/rivetCore.c (Rivet_Upload): Fixed a line that is complained
	about in newer GCC's (casting lvalues).

2005-08-19  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_InitTclStuff): Use both the hostname and
	the port in creating names for the slave.  This fixes a bug where
	you have different virtual hosts running on the same server name
	but different ports.

2005-08-13  David N. Welton  <davidw@dedasys.com>

	* tests/apachetest/apachetest.tcl: Make sure we get our own
	version of http.tcl.  Tcl Feature request 928154 means that we
	need our own copy of http.tcl for now.

	* tests/runtests.tcl (runtests_usage): Print out an error message
	if the arguments aren't right. Fixed paths to load .so files, as
	the auto tools put them in a different place.

	* tests/apachetest/apachetest.tcl (apachetest::getbinname): Check
	to make sure the server is executable.

	* src/apache_request.c (ApacheRequest_parse_urlencoded): Patch
	from Arnulf Wiedemann to allow XML POST data.

	* src/rivetCore.c (Rivet_RawPost): Tcl command implementation to
	fetch raw POST data or an empty string if none is available.

	* src/apache_request.h: Added element to struct, and accessor
	function.

	* src/apache_request.c (ApacheRequest_parse_urlencoded): Save a
	pointer to the raw data.

	* src/TclWebapache.c (TclWeb_GetRawPost): Added a raw POST data
	fetcher here.

2005-08-12  David N. Welton  <davidw@dedasys.com>

	* configure.ac: Bump the version to 0.6.0.

	* src/apache_request.c (ApacheRequest_parse_multipart): Added code
	from httpd-apreq that supposedly deals with a problem in Opera
	file uploads.

2005-08-01  Karl Lehenbauer  <karl-rivet@sc.com>
	* : abort_page was, for all intents and purposes, completely and utterly 
	  broken -- it forced a return from whatever called it, as if it was 
	  a "return" statement, but it didn't stop evaluating Tcl beyond that, 
	  which was broken, and it discarded output by setting an "aborted"
	  flag in Apache which, under certain circumstances caused browsers 
	  to render blank pages, apparently related to keep-alive connections.
	  It now works correctly by causing the interpreter to stop 
	  interpreting, and doesn't mess up keep-alive connections, etc.  
	  How it does this is it unwinds the interpreter by generating an 
	  error with the errorCode set to "RIVET ABORTPAGE".  The error 
	  handling code in Rivet checks for this, and if this is received, it 
	  completes the page in the normal manner without executing the 
	  user-registered or built-in error handlers.

	  One potential incompatibility is that abort_page's execution
	  can now be caught with Tcl's "catch" routine, although this could
	  also be considered a feature -- Rivet coders who use "catch"
	  should check errorCode to see if the first element of the list
	  is RIVET and the second is ABORTPAGE and either regenerate the 
	  abort_page, pass the error up, or handle it in some custom manner
	  in their catch handler.

2005-07-15  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_ServerConf): Use Tcl_GetBoolean on the
	*val*, not the *var*.  Big difference!

2005-06-14  Karl Lehenbauer  <karl-rivet@sc.com>
	* configure.ac, src/Makefile.am, tclconfig/config.guess, 
	  config.sub, ltmain.sh: Updated with libtoolize 1.5.18 -- Rivet 
	  now builds cleanly under Mac OS X.

2005-06-06  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/dio.tcl: Delete now returns the number of
	  records that were deleted rather than just a 1 if it deleted
	  one or more and a 0 if it didn't.  The forall method now does
	  the forall on the result handle prior to checking for an error,
	  in case an error occurs inside the forall.  From Peter da Silva.

	* rivet/packages/dio/dioSQLite.tcl: SQLite implementation for DIO.
	  From Peter da Silva.

2005-04-14  Pat Thoyts  <patthoyts@users.sourceforge.net>

	* win/Makefile.vc: Update the makefile and installer script
	* win/Rivet.nsi:   for the 0.5.0 release.

2005-03-24  David N. Welton  <davidw@dedasys.com>

	* Makefile.am (EXTRA_DIST): Added the doc, rivet and debian
	directories to the distribution.

2005-03-23  David N. Welton  <davidw@dedasys.com>

	* doc/norefchunk.xsl: Removed chunk-first-section-with-parent and
	chunk-all-sections.

	* genconf.sh: Updated to use 1.8 autotools.

2005-03-12  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_SendContent): Use static objects for
	scripts that are used for each request, in order to keep reusing
	them.
	(Rivet_PerInterpInit): Switch back to using Tcl_PkgRequire.

2005-01-08  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/diodisplay.tcl: Accept arguments to the
          showform_prolog method that are passed through to the form's
	  start method.  This allows things like naming the form and
	  accessing the fields from javascript by name.

	* rivet/packages/form/form.tcl: Allow start method to take key-value
	  arguments that will be expressed in the <form> tag.

2005-01-07  Karl Lehenbauer  <karl-rivet@sc.com>

	* /rivet/packages/dio/diodisplay.tcl: Factor showform prolog and
	  epilog code into showform_prolog and showform_epilog methods
	  so that when a derived DIODisplay class is overriding, for 
	  example, an Add or Edit method, the author doesn't have to 
	  dup all of showform's functionality.

	* rivet/packages/form/form.tcl: Commented the package.

2005-01-03  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Use 'mail-archives' instead of nagoya.

2004-12-22  David N. Welton  <davidw@dedasys.com>

	* Makefile.am (install-data-local): Added this target to install
	the Tcl packages and generate a pkgIndex.tcl file.

2004-12-16  David N. Welton  <davidw@dedasys.com>

	* src/Makefile.am (lib_libexecdir): Did some rearanging of things
	to get the directories in a better state.

	* configure.ac: Added TCL_PACKAGE_PATH.

2004-12-14  David N. Welton  <davidw@dedasys.com>

	* doc/Makefile.am: Added html doc targets.

2004-12-08  David N. Welton  <davidw@dedasys.com>

	* Makefile.am, configure.ac: Added the doc/ directory.

2004-12-07  Karl Lehenbauer  <karl-rivet@sc.com>
        * rivet/packages/dio/dio.tcl: "DIO delete" method now return the
	  number of rows affected.

2004-12-03  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/dio.tcl: Cause fatal database errors such
	  as bad syntax, etc, to raise a Tcl error in many methods that
	  used to just return 1 or 0 (like DIO store).

	* configure.ac: Remove superfluous commented-out lines

	* Add BUGS file.  Update STATUS and VERSION files.

2004-12-02  David N. Welton  <davidw@dedasys.com>

	* Removed libtool - it appears to be under the GPL!

	* Removed aclocal.m4 configure Makefile.in src/Makefile.in to avoid
	CVS churn.

	* configure.ac: Commented out AC_DEFINE(USE_TCL_STUBS), as it was
	  causing some problems for mod_rivet.so.

2004-12-02  Karl Lehenbauer  <karl-rivet@sc.com>

	* Collected some build notes in README.configure

	* : Clean up presentation of --with-apxs and --with-tclsh and
	  have them show up when configure --help is run.

	* tclconfig/tcl.m4, configure.ac, config.h, src/*.c:
	  Switch most autoconf-generated elements that get put on 
	  compiler command lines as -DHAVE_NET_ERRNO_H, etc, to put 
	  that stuff in config.h instead.  This included altering
	  all AC_DEFINE and AC_DEFINE_UNQUOTED macros to have three 
	  arguments, where the third argument is a description, so that 
	  autoheader can generate the config.h.in, significantly 
	  decluttering the compiler command lines.
	  tcl.m4 changes should be fed back to the TEA project,
	  as well as the technique for using automake to simplify
	  the build

	* Move aclocal.m4 to acinclude.m4 -- we need the aclocal command
	  to generate acinclude.m4 based on aclocal.m4 and stuff it gleans
	  from the configure.ac script, etc.

	* configure.ac: A path to tclsh is automatically figured out by the 
	  TEA 3.1 build stuff.  However it is also possible to override
	  with --with-tclsh, and the configure script also makes sure
	  there at least is a file there as well.

	* src/configure.ac et al: Get automake, aclocal, and autoconf to run 
	  without complaint, generating the configure script, Makefile.in 
	  files, etc.

	* configure.ac: Propagate the NAMEOFEXECUTABLE define via the 
	  autoconf scripts
	  src/Makefile.am: (same)

	* configure: check in configure script, it's hard to make unless
	  you have everything just right.  We will probably revisit this
	  later.
	* src/Makefile.in: (same)
	* Makefile.in: (same)

	* libtool:  Added libtool and friends in tclconfig dir using
	  libtoolize -- this is what figures out how to build shared
	  libraries, etc.

2004-12-01  Karl Lehenbauer  <karl-rivet@sc.com>

        * Update autoconf build to TEA 3.1

        * configure.am: Automatically locate apxs in the PATH if it hasn't
	  been overridden by --with-apxs.  Likewise automatically locate
	  tclsh if it hasn't been overridden by --with-tclsh.

	* Add of README.freebsd for FreeBSD.

2004-11-17  Karl Lehenbauer  <karl-rivet@sc.com>

        * rivet/packages/dio/dio.tcl: Fixed comments incorrectly placed 
	  outside of a switch body.

2004-11-11  Karl Lehenbauer  <karl-rivet@sc.com>

        * rivet/packages/dio/dio.tcl: Added "insert" method that
	  doesn't try to see if it's there already all the other
	  stuff that "store" does.

	* doc/rivet.xml: Documentation for above.

2004-11-05  Karl Lehenbauer  <karl-rivet@sc.com>

        * rivet/packages/session/session-class.tcl: Quote backslashes when
	  storing so they won't be stripped by the database.  Needs to
	  be tested for MySQL and SQLlite.

2004-11-04  Karl Lehenbauer  <karl-rivet@sc.com>

        * rivet/packages/dio/*.tcl: Documented the code for
	  DIO and DIOdisplay.

2004-11-04  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_ServerConf): Use Tcl_GetBoolean, at
	Karl's suggestion.

2004-11-03  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_ServerConf): Instead of just "on", accept
	"yes" and "1" as well.

2004-10-29  Karl Lehenbauer  <karl-rivet@sc.com>

        * rivet/packages/dio/dio_Mysql.tcl: The "DIO handle" method, which
	  returns the underlying database's connection handle, now forces
	  the database connection to be made, if it hasn't already been
	  made, just like DIO exec.

        * rivet/packages/dio/dio_Postgresql.tcl: (same)

2004-09-29  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (TestpanicCmd): Added command to test panics.

	* src/mod_rivet.c (Rivet_Panic): Added panic proc that tries to
	log the error to disk.

2004-09-20  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/rivet_ncgi/rivet_ncgi.tcl: Compatibility layer
	for tcllib's ncgi package.

2004-09-20  Karl Lehenbauer  <karl-rivet@sc.com>
	* src/mod_rivet.c (Rivet_PerInterpInit): Load the init.tcl file
	with an explicit path rather than using Tcl_PkgRequire.  Previously, 
	if Rivet was installed with a PREFIX/lib that wasn't already in
	Tcl's package search path (auto_path, probably because it was the
	same lib directory as Tcl used, typically /usr/local/lib), Tcl
	startup is unable to find the RivetTcl package, and Rivet is
	unable to start.  

2004-09-17  Karl Lehenbauer  <karl-rivet@sc.com>
	* rivet/packages/rivet/pkgIndex.tcl:  Removed.  It had a hard-coded
	assumption about the shared library extensions (.so).  This file is
	now generated in the target directory by the install node of make.tcl.

	* rivet/pkgIndex.tcl: Removed.  It is generated by the make.tcl
	install process, as above.

	* src/make.tcl: The above changes, specifically the install node 
	now generates the target rivet/pkgIndex.tcl and 
	rivet/packages/rivet/pkgIndex.tcl file using pkg_mkIndex, 
	causing all Tcl-defined and shared-library-defined packages to be 
	discovered and generated into the pkgIndex.tcl.

2004-09-16  Karl Lehenbauer  <karl-rivet@sc.com>
	* src/parserPkgInit.c: Added a Rivetparser_SafeInit so the
	C-based standalone Rivet parser library can be loaded
	from safe interpreters.  After inspection, we believe that
	rivet::parserivetdata can be loaded into safe interpreters
	without compromising their security.  rivet::parserivet
	definitely cannot be made available to a safe interpreter --
	it could be manipulated to read files.

	* src/rivetPkgInit.c: Added a Rivet_SafeInit so lib can
	be loaded from safe interpreters, which also makes it work
	better under Mac OS X.

	* src/rivetCrypt.c: Added function header to init routine.
	* src/rivetList.c: (same)
	* src/rivetWWW.c: (same)

	* README.MacOSX: Temporary file to document Mac OS X build quirks.

	* src/configure.tcl: If a configuration variable in
	  tclConfig.sh ever had an equal sign in the "value"
	  portion of the key=value pair, configure.tcl would
	  malfunction.

	  A missing variable caused a variable referencing that
	  missing variable to be silently dropped.  We now
	  complain, although the right answer is probably to
	  substitute an empty string for all missing variables.
	  Still, this way at least gives a hint as to the problem.

	* src/Makefile: Add simple rules for "clean", "distclean",
	and "install" that simply invoke make.tcl appropriately.

2004-08-07  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/dtcl/dtcl.tcl (hgetvars): Added code from Arnulf
	Wiedemann <arnulf@wiedemann-pri.de> to set up VARS array.

2004-08-03  Pat Thoyts  <patthoyts@users.sourceforge.net>

	* win/Rivet.nsi: Added a NSIS script. This is used with the
	Nullsoft scriptable installer system to create an installer for
	Rivet to install onto a Windows system.
	* win/makefile.vc: Added htmlhelp and installer targets.

2004-06-25  Pat Thoyts  <patthoyts@users.sourceforge.net>

	* src/rivetCrypt.c: Fix const-ness of resultBuffer to match 
	apache's crypt function.
	* win/makefile.vc: Fixed the version string to match rivet project
	version. Support use of MSVC.NET or VC++Toolkit compilers.

2004-06-04  David N. Welton  <davidw@dedasys.com>

	* contrib/two-mode-mode.el: Updated two-mode-mode.

2004-06-02  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/aardvark.tcl: Use 'Output' instead of puts.  It
	might be useful were we ever to do something like make an aardvark
	GUI.

2004-06-01  David N. Welton  <davidw@dedasys.com>

	* Following changes by Pat Thoyts  <patthoyts@users.sourceforge.net>:
	* win/makefile.vc: Updated to deal with the START_TAG END_TAG
	macros.
	* src/rivetParser.h: Declare missing prototype.
	* tests/binary.rvt: The stdout channel under Windows needs to be
	told to use translation binary for binary data.

2004-05-18  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Quote Tcl argument.

	* doc/rivet.xml: Added clearer instructions for mailing list
	subscription.

2004-05-05  Karl Lehenbauer  <karl-rivet@sc.com>

	* src/rivetWWW.c: Made the escape_string command map spaces
	to plus signs (+) rather than %20.  They're equivalent and
	unescape the same, but the plus signs are visually easier
	to take.

2004-05-05  Karl Lehenbauer  <karl-rivet@sc.com>

	* /rivet/packages/dio/diodisplay.tcl: Got "-type boolean"
	working.  There's some problem with using a method that
	uses configvar to set a var as a method in a class where
	the class is being inherited by a subclass that redefines
	the variable.  I had to substitute "cget -varName" style
	to get it to work.

2004-05-05  Karl Lehenbauer  <karl-rivet@sc.com>

	* /rivet/packages/dio/diodisplay.tcl: Added "-type select"
	option to DIOdisplay fields, and a new option, "-values $list"
	which takes a list of values to be made available with a form
	selector.

2004-05-05  Karl Lehenbauer  <karl-rivet@sc.com>

	* /rivet/packages/dio/diodisplay.tcl: When adding a new record,
	if they've typed anything into the "is" field, set the default
	value of the field specified in the "where" part to match.

2004-05-05  Karl Lehenbauer  <karl-rivet@sc.com>

	* doc/rivet.xml: Documented the escape_string, unescape_string,
	escape_sgml_chars, and escape_shell_command functions.

2004-05-04  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/diodisplay.tcl: Added enhancements from 
	Peter da Silva (peter@taronga.com): Add support for hidden variables.
	(This is so that you can have state variables that are maintained by 
	the function outside of DIOdisplay, retained as you jump through 
	DIOdisplay.) Added DIORowHeader to the style sheet.  Turned the search 
	table into a navigation bar.  Added a filter method that allows you 
	to edit the display of fields on the fly, for example, you have a 
	time in integer seconds since 1970 and you can add a filter that 
	does a "clock format" using -filter, or, for example, it can look 
	up an IP address from a table.

	* rivet/packages/dio/dio.tcl: Added enhancements from 
	Peter da Silva (peter@taronga.com): New "forall" method will apply
	a result across a code body for each record returned in the result
	and then delete the result handle, all in one fell swoop.

2004-04-24  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/aardvark.tcl (aardvark::runbuildcommand): If
	the node doesn't exist, always "rebuild" it.

	* src/make.tcl: Make sure make install message is only printed
	when the correct target is called.

2004-04-21  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/dio/pkgIndex.tcl: Add sqlite interface.

	* rivet/packages/dio/dio_Sqlite.tcl: Added incomplete sqlite
	interface to DIO.

2004-04-14  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/dio/dio.tcl: Removed mysql and postgres specific
	code from main DIO package, which now loads the subclass package
	automatically.

	* rivet/packages/dio/dio_Mysql.tcl: Added new package to remove
	separate mysql DIO interface.

	* rivet/packages/dio/dio_Postgresql.tcl: Added new package to
	separate postgres DIO interface.

2004-04-12  Andy Doerr	    <andydoerr@swbell.net>

	* rivet/packages/dio/diodisplay.tcl:
	- Modified searchBy form field to use the -labels and -values
	parallel lists in form.tcl class method (select).
	- Modified Search proc to not use FieldTextMap as the search
	now does not need to look up the db field name.

2004-04-05  David N. Welton  <davidw@dedasys.com>

	* tests/docroot1/ tests/docroot2/: Files used to test virtual
	hosts with.

	* tests/virtualhost.test: New file: tests for virtual hosts.

	* tests/apachetest/apachetest.tcl: Require our own version of
	http.tcl, due to Tcl feature request #928154 (it's impossible to
	set the Host header).
	(apachetest::start): We now take 3 arguments.  The new one is
	'conftext', which is used to write to the test.conf file before
	running the test.

	* tests/runtests.tcl: Changed test config to add an "Include
	test.conf" directive.  We can write out our own configs for each
	test with that.

	* src/mod_rivet.c (Rivet_PerInterpInit): New function that groups
	together everything that has to happen when a new interpreter is
	created - either the main one, or for virtual hosts.
	(Rivet_InitTclStuff): Redid the way virtual hosts are treated
	here: make sure there is a unique rivet_server_conf for each one,
	either because MergeConfig has been called, or we create one
	ourselves.
	(Rivet_CreateConfig): We don't initialize objCache and outchannel
	members of rivet_server_conf here anymore.  They are now taken
	care of in Rivet_InitTclStuff.
	(Rivet_MergeConfig): Either take care of all members of
	rivet_server_conf struct, or include a comment explaining why it's
	not there.
	(Rivet_ChildHandlers): New function - takes care of either child
	init or exit scripts, depending on how it's called.

	* doc/rivet.xml: Describe how each RivetServerConf directive
	interacts with virtual hosts.

2004-02-26  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added DIODisplay section.

2004-02-25  David N. Welton  <davidw@dedasys.com>

	* src/rivetParser.h: start/end tags removed from here.

	* src/make.tcl: START_TAG and END_TAG are now defined here, so
	that they are easier to configure at build time.

	* doc/rivet.xml: Initial cut at including DIO docs in the main set
	of docs.

2004-02-23  David N. Welton  <davidw@dedasys.com>

	* LICENSE: Switch to Apache 2.0 License.

2004-02-20  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_SetHeaderType): strdup object's
	string value so we have our own copy of it.

2004-02-19  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added some additional comments regarding the
	installation.  Thanks to Tom Krehbiel for the suggestions.

2004-02-17  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Created better dependency system for DocBook docs.

	* doc/html/rivet.*.html: Added non-chunked versions of the docs.

	* doc/rivet-nochunk.xsl: Change include of docbook.xsl to an
	import at the top of the file.  Seems to make things work ok.

2004-02-11  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Don't delete rivet packages directory during
	install.  This used to happen in order to keep things clean, but
	people are using this directory for local packages/modifications,
	so this is not a good thing to have.

2004-02-06  David N. Welton  <davidw@dedasys.com>

	* tests/headers.test: Include current version of http package in
	result automatically, so as to avoid having to update it by hand.

	* tests/apachetest/apachetest.tcl (apachetest::getallincludes):
	Create function to fetch a conf file and all the files Included it
	from it.

	* doc/rivet.xml: Add section for session package.

	* doc/rivet.xml: Added SESSION documentation.

	* rivet/packages/session/README.txt: Removed text, indicate
	HTML/XML docs - I don't want to maintain the same docs in two
	places.

	* src/make.tcl: Create directory before installing.

2004-01-20  Karl Lehenbauer  <karl-rivet@sc.com>

	* rivet/packages/dio/diodisplay.tcl: Removed calls to abort_page
	when relatively benign conditions like no records matching a
	search occur.  This allows us to emit all the code we need, like
	closing the table (</table>) and emiting our page trailer, etc,
	instead of having the page cut off somewhere in the middle.

2004-01-15  David N. Welton  <davidw@dedasys.com>

	* rivet/rivet-tcl/load_response.tcl (load_response): Fixed a bug
	in load_response that was tickled by calling it multiple times.
	Thanks to Brad for catching it.

2004-01-15  Brad Morrison  <brad@sc.com>

	* rivet/rivet-tcl/load_response.tcl: Changed behavior from
	appending discovered values to existing elements in the
	response array to simple assignment.

2004-01-15  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/simpledb/simpledb.tcl (simpledb::synctostorage):
	Added fix from Massimo Manghi <manghi@biol.unipr.it> for bug in
	procedure to write database to disk.

	* rivet/packages/simpledb/simpledb.test (populatetables):
	Commented out stuff to add into the test later.

2004-01-08  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Added warning to default make.tcl target in order
	to encourage people to run ./make.tcl install.

2004-01-08  Karl Lehenbauer  <karl-rivet@sc.com>

	*  src/buildscripts/findapxs.tcl: When the apxs program cannot
	be located, the message now mentions that the location of apxs
	can also be specified using the "-with-apxs" option on the
	command line.

2004-01-05  Karl Lehenbauer  <karl-rivet@sc.com>

	*  rivet/packages/session/*: Checkin of session management code.
	This is a from-scratch rewrite of Superconnect's session
	management code, donated to Rivet under the terms of the
	Apache Software License. See rivet/packages/session/README.txt 
	for details of what it does and how it works.

2004-01-02  Karl Lehenbauer  <karl-rivet@sc.com>

	*  src/buildscripts/findapxs.tcl: Added /usr/local/bin and
	/usr/local/sbin to the directories that Rivet configuration
	looks in to find apxs, when the path to apxs wasn't specified
	on the configure command line.

	Changed findapxs::FindAPXS to generate an error if it couldn't 
	find a working apxs utility, rather than just returning an empty 
	string.  Previously if apxs could not be found, the error message 
	emitted by configure.tcl was: "Error in CFLAGS test: couldn't 
	execute "": no such file or directory"  Now it says it couldn't
	find the Apache Extension Tool apxs and lists everywhere it looked.


2003-12-20  David N. Welton  <davidw@dedasys.com>

	* tests/parsepackage.test: Added tests for the Rivet parser
	standalone package and pure Tcl Rivet parser.

	* INSTALL: Added basic configuration directives to INSTALL file.

	* rivet/packages/tclrivet/tclrivetparser.tcl: Added pure Tcl Rivet
	parser.  This doesn't have all the Rivet commands available, it
	just parses a <? ?> style Rivet file into the corresponding Tcl
	script.

	* src/parserPkgInit.c (Parse_RivetData): We no longer
	automatically add the namespace.  The user ought to be able to add
	that should they so choose.  This makes the command more flexible.

	* src/rivetParser.c (Rivet_Parser): Removed an unnecessary
	Tcl_UtfNext from the parser.
	(Rivet_GetRivetFile): Removed useless 'inside' variable from this
	function.

	* doc/rivet.xml: Add abort_page, no_body and env commands,
	reordered the load_* commands.

	* doc/rivet.it.xml: Updated author.

	* doc/rivet.ru.xml: Updated author.

	* doc/rivet.xml: Changed documention author to "The Rivet Team".

	* src/rivetCore.c (Rivet_NoBody): Return an error if content has
	already been sent.

	* src/rivetCore.c: Added fancy headers to all functions.

2003-12-13  David N. Welton  <davidw@dedasys.com>

	* tests/broken.test: Updated test results for what is actually
	returned on error.

	* src/rivetParser.c (Rivet_Parser): "export" function in that it's
	no longer static.

	* src/parserPkgInit.c (Parse_RivetData): New alpha-ish command to
	parse data passed to the script.

	* src/configure.in.tcl: Merge apxs and Tcl CFLAGS in order to
	include what we need from both.  Hopefully there won't be any
	conflicts.

2003-11-27  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added information about debugging Apache/Rivet.

2003-11-20  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Changed xsltproc lines to deal with new link
	styles.

	* doc/rivet.xml: Changed links as in Russian translation.

	* doc/rivet.it.xml: Changed links as in Russian translation.

	* doc/rivet.ru.xml: Changed links to use "en.html" style instead
	of "html.en".  This will make google pick up the pages.

2003-10-22  David N. Welton  <davidw@dedasys.com>

	* win/: Numerous updates from Pat Thoyts
	<patthoyts@users.sourceforge.net>.

2003-09-30  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (Rivet_Include): More ref count management.

	* src/mod_rivet.c (Rivet_PropagatePerDirConfArrays): Added more
	ref count management.

	* src/rivetParser.c (Rivet_GetRivetFile): Add ref counting for
	'inbuf'.

	* src/mod_rivet.c (Rivet_ParseExecFile): Manage ref count for
	outbuf better.
	(Rivet_SendContent): Clean up 'info script' code.
	(Rivet_InitTclStuff): Rework 'if' to eliminate double assignment.

	* src/TclWebapache.c (TclWeb_GetEnvVars): Add ref counting for
	envvar.
	(TclWeb_GetHeaderVars): Fix ref counting for headersvar.

	* tests/headers.test: Added test for load_headers.

	* src/apache_request.h: Updates from httpd-apreq.

	* src/apache_request.c: Updates from httpd-apreq.

2003-09-29  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/commserver/server.tcl: Exit 1 on failure.

	* rivet/packages/commserver/commserver.tcl: Check to make sure the
	server is really running before returning from commserver::start.

	* rivet/packages/simpledb/simpledb.tcl: Added 'simpledb', although
	it's not ready for production use.

	* src/mod_rivet.c (Rivet_ChildInit): If we don't have separate
	virtual servers, we only need to run the ChildInitScript once.  If
	we do have interpreters for each virtual server, each one gets to
	run the script.

	* doc/rivet.ru.xml: Big update of the Russian translation by
	Dmitry the Zuryanovich <dtz@XEPb.ru>.  Thanks!

2003-09-26  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c: Spelling check: seperate->separate.

2003-09-24  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Mention the global command in the 'internals'
	section.

2003-08-30  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added var_qs and var_post cmdsynopsis's.

2003-08-29  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Use refentry and sub-elements instead of
	variablelist.  This is more correct.

	* doc/norefchunk.xsl: New file - handle refentries without making
	them new files.

	* doc/rivet.xsl: Scratch the last changes and go with refentry's
	for all commands.  This is a more difficult solution to parse, but
	in the end is more correct.

	* doc/refentry.xsl: New file to handle refentry stuff.

2003-08-28  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xsl: Minor changes to look and feel.

	* doc/rivet.xml: Added <indexterm> tags for commands, in order to
	create the index.

	* doc/rivet.xsl: Added XSL to parse <index>, needed to create an
	index of commands on the index page.

2003-08-26  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added section to documentation about emacs and
	vim modesl for Rivet files.

	* src/configure.in.tcl: -with-apxs option no longer takes a
	default.  It should work that out on its own using the
	findapxs.tcl script.

2003-08-23  David N. Welton  <davidw@dedasys.com>

	* src/configure.in.tcl: Remove test for broken Tcl installations
	on FreeBSD and MacOS X.  Apparently, things work ok with 8.4.

2003-08-22  David N. Welton  <davidw@dedasys.com>

	* src/configure.in.tcl: Add test for broken Tcl installations on
	FreeBSD and MacOS X.

	* doc/rivet.xml: Added installation instructions corresponding to
	the new ./configure.tcl system. Ran the spellchecker.

	* src/buildscripts/aardvark.tcl (aardvark::runbuildcommand):
	Rebuild only if file depended on is newer than the target, rather
	than >=.  This prevents some files from being remade if make is
	run again.

	* src/configure.tcl (configure::ProcessOptions): Added 'verbose'
	flag to configure.
	(configure::test): Exit on tcl failure in test procedures.
	(configure::assert): Added assert command.  Fail on error or 0.

2003-08-21  David N. Welton  <davidw@dedasys.com>

	* src/configure.in.tcl: Changed INC variable to use
	TCL_INCLUDE_SPEC.

	* INSTALL: Updated instructions.

	* src/configure.tcl (configure::parsetclconfig): We need access to
	previously parsed variables, so we do this in the ::configs
	namespace.

2003-08-20  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/aardvark.tcl (aardvark::getconfigs): Added new
	function to fetch the config info out of configs.tcl.

	* src/make.tcl: Removed debinstall target, because we can now
	accomplish the same thing by overriding configure options on
	make's command line.   Removed the configure-style code at the top
	of the file.

	* src/configure.in.tcl: Specify the variables to test for/create,
	as well as some command line options specific to Rivet.

	* src/configure.tcl: Added new configure-like system to obtain
	information about the environment where Rivet is being compiled.
	Running ./configure.tcl creates a file, configs.tcl, with the
	its findings.  make.tcl now uses those values as its defaults,
	unless they are overridden on make.tcl's command line.

2003-08-11  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Added fileutils Tcl package to buildscripts, in
	order to utilize the 'install' command.

2003-08-05  David N. Welton  <davidw@dedasys.com>

	* contrib/rvt.vim: Added contributed vim mode for editing Rivet
	files.

	* contrib/two-mode-mode.el: Added emacs mode for editing Rivet
	files.

2003-07-22  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.ru.xml: Added lang=ru to article, so that markup like
	<note> produces the correct language.

	* doc/rivet.it.xml: Added Italian translation of Rivet docs by
	Fabio Zanotti <zendune@virgilio.it>.

2003-07-16  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Explain example script just a bit more clearly.

	* src/make.tcl: Fix up clean target.  Use MOD_SHLIB as target
	instead of explicit mod_rivet.so.

2003-07-08  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/findapxs.tcl: Added /usr/local/sbin as a place
	to check for apxs.  Thanks to Andy Doerr for pointing out that
	this is where it's kept on FreeBSD.

2003-07-07  David N. Welton  <davidw@dedasys.com>

	* doc/examples/upload.html: Added submit button to file upload
	example.

2003-07-05  David N. Welton  <davidw@dedasys.com>

	* src/rivetWWW.c (snprintf): Added snprintf define from Pat.

	* src/rivetParser.h: Added bit of defines for windows builds,
	declared some of the functions EXTERN's here.

	* src/rivetList.c: Make list commands created here 'static' - Pat.

	* src/rivetCrypt.c: Use ap_config.h to grab other header files we
	might need, like crypt.h.  This is not an ideal solution, because
	it adds a dependency we didn't have before.  Added change by Pat
	to conditionally compile or not the 'Rivet_Crypt' command.

	* src/rivet.h: Added EXTERN definitions for functions.

	* src/parserPkgInit.c (Rivetparser_Init): Added EXTERN decleration
	for win builds.

	* win/rules.vc: New file: include file for Microsoft makefile.

	* win/rivet.dsp: New file: Microsoft Developer Studio Project
	File.

	* win/nmakehlp.c: New file: helper for windows building.

	* win/makefile.vc: New file: makefile for windows.  All from Pat
	Thoyts <patthoyts@users.sourceforge.net>.

	* doc/examples/vars.html: Use a table to make the form look nicer.

	* doc/examples/vars.rvt: Now we display some results.

2003-07-01  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (Rivet_Upload): Pass the correct element of objv
	to TclWeb_UploadSave.

	* tests/uploadsave.rvt: New file to test 'upload save'.

	* tests/upload.test: New test for 'upload save'.

2003-06-30  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_ParseExecFile): Use Tcl_FSStat instead of
	Tcl_Stat.

	* src/rivetCore.c (Rivet_Parse): Use Tcl_FSStat instead of
	Tcl_Stat.

2003-06-29  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Add IRC reference to the help section of the
	  manual.

2003-06-23  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.ru.xml: Updated Russian version to indicate which
	version of the original it was based on.

	* doc/rivet.xml: Added version string to English version.

2003-06-14  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added CVS Id tag.

	* doc/rivet.ru.xml: Added comment to indicate the version of
	rivet.xml that the Russian translation is based on.

2003-06-12  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_ParseExecFile): Rework checks for
	.htaccess file changes.  This code was causing an obscure bug
	where a file would be in the cache twice, thus causing crashes.

	* Moved russian translation around again.

	* src/TclWebapache.c (TclWeb_GetEnvVars): Use TCL_NAMESPACE_ONLY
	here and in TclWeb_GetHeaderVars in order to set the variable in
	the correct place.

	* src/make.tcl: Added changes to build Russian documentation.

	* doc/rivet.xml: Added link to Russian translation.

	* doc/rivet.ru_UTF.xml: Added link back to English version.

2003-06-10  David N. Welton  <davidw@dedasys.com>

	* doc/rivet_utf_ru.xml: Added Russian translation of documentation
	by Dmitry Zuryanovich.

2003-06-09  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Cleaned up docs about fetching the httpd sources.

2003-05-26  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (Rivet_Headers): Change error message to better
	reflect that there is only one argument to 'headers numeric'.
	Thanks to "Dmitry Zuryanovich".

	* src/mod_rivet.c (Rivet_ParseExecFile): Updated
	Rivet_GetRivetFile and Rivet_GetTclFile to use the right
	arguments.

2003-05-24  David N. Welton  <davidw@dedasys.com>

	* rivet/packages/tclrivet/tclrivet.tcl: Added commands that need
	to be filled in.

	* tests/runtests.tcl: Use apachetest::need_modules.

	* tests/apachetest/apachetest.tcl (apachetest::need_modules): New
	proc, utilized to tell the test suite which apache modules are
	needed.

2003-05-23  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/aardvark.test: Do a version check on gcc.  We
	used that for the tests, so we might as well be sure we're using
	the same version.

	* src/make.tcl: Use buildscripts.tcl to load up all the other
	scripts we need.  Add PARSER_SHLIB as a dependency for the shared
	build.

	* src/buildscripts/aardvark.test: Updated aardvark tests to
	current GCC.

	* src/buildscripts/buildscripts.tcl: New file: use this file to
	load up all the other scripts.

	* src/buildscripts/findconfig.tcl: Moved all the functionality
	into parsetclConfig.tcl.

	* src/buildscripts/aardvark.tcl: Just source the graph.tcl file
	directly instead of dealing with packages.  Thanks to Pat Thoyts.

2003-05-22  David N. Welton  <davidw@dedasys.com>

	* src/rivetParser.c (Rivet_GetRivetFile): API Change: instead of
	taking a TclWebRequest argument, we just give this function a
	Tcl_Interp, which makes it easier to seperate this code from
	Rivet.

	* src/mod_rivet.h: STARTING_SEQUENCE and ENDING_SEQUENCE moved to
	rivetParser.h, in order to make that file independant of
	mod_rivet.h.

	* src/make.tcl: Use slightly more descriptive variable names.  Add
	code to compile librivetparser.so.

	* src/parserPkgInit.c: New file.  Provides a Tcl extension to the
	Tcl parser, so that regular (not running under Apache) scripts can
	access it.

	* doc/html/rivet.css: Updated a few stylesheet properties to make
	the docs look a bit classier.

2003-05-21  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xsl: Switch on parameter to use images in HTML output
	from docbook.

	* doc/rivet.xml: Added c.l.t. newsgroup to resources section.

2003-05-20  David N. Welton  <davidw@dedasys.com>

	* doc/html/rivet.css: Added CSS file.

	* src/make.tcl: Added parameter to xsltproc to link the html
	output to a CSS file.

2003-05-14  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Added PKGINDEX to the list of dependencies for
	rolling a distribution.  Updated STATUS file.

	* rivet/packages/commserver/commserver.tcl: Added commserver
	package as one potential IPC method.

	* src/make.tcl: Target ../VERSION node correctly.
	New target $PKGINDEX to automatically generate a top-level (which
	is where Tcl searches) package index for all the sub-packages in
	the Rivet distribution.

	* src/buildscripts/aardvark.tcl (aardvark::runbuildcommand): A few
	stylistic changes: [ cmd ] -> [cmd].

2003-05-13  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added a few options - numeric and add to the
	header documentation.  Removed 'setcookie', which has been
	replaced by the 'cookie' command.

	* src/make.tcl: Pass [info nameofexecutable] to mod_rivet.c
	compilation, in order to make Rivet aware of the location of
	tclsh.

	* src/mod_rivet.c (Rivet_InitTclStuff): Use name of tclsh
	executable passed in via the build script.  This isn't really the
	name of the executable Rivet is part of (Apache), but I think this
	is more useful.

2003-05-11  David N. Welton  <davidw@dedasys.com>

	* src/apache_request.c: Updated to the latest from the httpd-apreq
	package.

2003-04-07  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Make sure that auto_path gets extra stuff at the
 	  beginning, so as not to create problems when using it to fetch
	  the prefix.

	* VERSION: Bump point number for new release.

	* src/make.tcl: Use package require to load aardvark.

	* src/buildscripts/graph.tcl: This file should provide the
	  'struct' package.

2003-03-30  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Fixed example configuration directive.

2003-03-27  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_UploadData): Comment out unused alloc.

	* src/rivetWWW.c (Rivet_UnescapeStringCmd): Free memory allocated
	with Tcl_Alloc.
	(Rivet_EscapeStringCmd): Free memory allocated with Tcl_Alloc.
	(Rivet_EscapeSgmlCharsCmd): Free memory allocated with Tcl_Alloc.
	(Rivet_EscapeShellCommandCmd): Free memory allocated with Tcl_Alloc.

	* src/rivetCrypt.c (Rivet_DecryptCmd): Free memory allocated with
	Tcl_Alloc.
	(Rivet_EncryptCmd): Free memory allocated with Tcl_Alloc.

2003-03-26  David N. Welton  <davidw@dedasys.com>

	* Remove index.html and help.html.

	* rivet/pkgIndex.tcl: Added index file for RivetTcl package -
	i.e. init.tcl.

2003-03-25  David N. Welton  <davidw@dedasys.com>

	* src/rivetPkgInit.c (Rivet_Init): Bump version number to 1.1.

	* src/mod_rivet.c (Rivet_InitTclStuff): Use Tcl_PkgRequire to load
	Rivet's init.tcl.

	* src/make.tcl: Use Tcl file location instead of Apache-based file
	location, in order to use Tcl_PkgRequire to load Rivet's init.tcl.

	* rivet/init.tcl: Provide 'RivetTcl' package.
	(init): Use [info script] instead of server(RIVET_DIR) variable.

	* src/make.tcl: Add a debinstall target as a temporary way to
	build .deb files.

	* debian/copyright: Added copyright file for debian.

	* debian/dirs: Added dirs file that lists directories used by
	Rivet on Debian.

	* debian/control: Added debian/control file with information about
	Rivet for the debian package.

	* debian/changelog: Added debian changelog file to track versions
	of the debian package.

	* debian/rules: Use 'rules' file from mod_dtcl.

2003-03-14  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_AppendToScript): Don't append
	Before/After/Error scripts.  Just override them.
	(Rivet_UserConf): Switch back to using Rivet_AppendToScript.
	(Rivet_SetScript): Change Rivet_AppendToScript to Rivet_SetScript
	to reflect the fact that it doesn't always append - specifically,
	in After/Before/Error scripts.

	* doc/rivet.xml: Use eyebrowse link instead of apachelabs for
	mailing list.

2003-03-13  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.h: Backed out extra entries in rivet_server_conf -
	they aren't necessary, as the overrides are taken care of for us.
	The only things we really need are 1) to use the flag
	user_scripts_updated to recompile scripts when UserConf variables
	have changed 2) to not append to existing scripts, but instead
	create new ones.

2003-03-12  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_UserConf): Set user_scripts_updated flag.
	(Rivet_ParseExecFile): Check and clear flag.

	* src/mod_rivet.h: Added user_scripts_updated flag to signal that
	UserConf options have been set.  This means that we need to
	recompile the script.

2003-03-01  David N. Welton  <davidw@dedasys.com>

	* debian/debian.tcl: Helper file for generating .debs.

2003-02-28  David N. Welton  <davidw@dedasys.com>

	* src/Makefile (all): Clean out Makefile - force use of make.tcl.

	* src/buildscripts/aardvark.tcl (aardvark::runbuildcommand): Use
	'w' for shell command pipe, in order to not get broken pipes with
	commands that output something to stdout (such as tcl scripts!).

2003-02-21  David N. Welton  <davidw@dedasys.com>

	* tests/config.test: Test to see if Rivet picks up changes in
	".htaccess" files.

	* tests/README: Add descriptions of the various tests.

	* src/buildscripts/aardvark.tcl (aardvark::Nodes): Add command to
	return list of all nodes.

	* doc/rivet.xml: Add some information on the precedence of the
	different Conf options.  Change information about DirConf - it
	isn't allowed in .htaccess files.

2003-02-19  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/aardvark.test: Add test script and files for
	aardvark system.

	* src/buildscripts/graph.tcl: Include latest 'graph.tcl' from
	upstream.

	* src/make.tcl: We no longer force 'tcl' and 'sh' to take only one
	argument.  In the case where we aren't forcing evaluation later
	with {}, this is nicer looking, as we don't have to quote
	everything with "".

2003-02-12  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c: Mirror Craig Huckabee's mod_dtcl.c changes:

	- Use TCL_DECLARE_MUTEX to create the mutex, and change the mutex
	  lock/unlock calls.

	- Remove the 'load only once' stuff from TclInitStuff.

	- InitTclStuff can now only be called from Child Init.

2003-01-17  David N. Welton  <davidw@dedasys.com>

	* Added logos.

2003-01-08  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_ChildInit): Patch from Karl Lehenbauer to
	print out errorInfo upon ChildInit failure.

2003-01-07  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_UploadData): Fix from Holger Zeinert
	that makes file uploads work on windows.

2002-12-30  David N. Welton  <davidw@dedasys.com>

	* doc/examples/upload.html: Changed .ttml to .rvt - thanks to
	Holger Zeinert for catching this.

2002-12-18  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Noted the var_qs/var_post changes in the
	documentation.

2002-12-17  David N. Welton  <davidw@dedasys.com>

	* tests/post.test:
	* tests/post.rvt:
	* tests/get.test:
	* tests/get.rvt: Added tests for David Brancato's var_qs and
	var_post improvements.

	* src/TclWebapache.c: Made "ugly" for loops into while loops.
	Created macro to set up loop parameters correctly.

2002-12-14  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c: Redid indendation.

	* src/rivetCore.c: Implemented Tcl commands (via objv[0]) to
	retrieve variables from different, specified sources (query
	string, POST). (David Brancato).

	* src/mod_rivet.h: Added defines for variable sources. (David
	Brancato).

	* src/apache_request.c: Added functions to get query and post
	params. (David Brancato).

	* src/TclWebapache.c: Implemented TclWeb.h API change. (David
	Brancato).

	* src/TclWeb.h: Changed API to include a source option in order to
	indicate the origin (query string, POST) of a variable.  (David
	Brancato).

2002-12-13  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_InitTclStuff): Apache actually loads all
	the modules twice, just to see if it  can. This is a pain,
	because things don't seem to get  completely cleaned up on the
	Tcl side. So this little hack  should make us *really* load only
	the second time around.

2002-12-10  David N. Welton  <davidw@dedasys.com>

	* table.png: Transformed table.png so that it ought to display
	correctly on older(?) browsers.  Thanks to Elchonon Edelson for
	his help.

2002-12-09  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_SendContent): Switched from EvalObj to
	EvalObjEx.
	(Rivet_SendContent): EXPERIMENTAL: added Mutex locks on
	SendContent, in order to keep windows safe.  This needs testing
	out!

2002-12-04  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_GetEnvVars): Put DecrRefCount back in
	- must have taken it out by mistake while hunting a previous
	memory leak.

2002-11-23  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_SendContent): Set up information for
	[info script] by using r->filename.

2002-11-19  David N. Welton  <davidw@dedasys.com>

	* doc/examples/table.rvt: Fixed up format operation to make nicer
	tables.

2002-11-18  David N. Welton  <davidw@dedasys.com>

	* cvsversion.tcl (main): Added catch to make sure that VERSION has
	something in it and isn't.

2002-11-09  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Make docs reflect behavior of 'var get foobar'
	when foobar doesn't exist - "" is returned.

	* tests/apachetest/apachetest.tcl: Updates to testing utility
	procedures.

2002-11-04  David N. Welton  <davidw@dedasys.com>

	* tests/get.test: Backed out changes to 'var get': no longer
	throws an error if the variable does not exist, but instead
	returns "".  Use 'var exists' to see if it really exists or not.

	* src/mod_rivet.c (Rivet_ChildExit): Add call to Tcl_Finalize.
	This still needs more investigation.

	* tests/upload.test: Added proper end boundary to upload test.

	* src/apache_*: New apache request code from upstream.

2002-10-29  David N. Welton  <davidw@dedasys.com>

	* src/rivetWWW.c (Rivet_EscapeStringCmd): Eliminate warning on
	Solaris by casting a char to an int.

2002-10-28  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (Rivet_Include): Changed Tcl_Channel name to
	tclstdout to avoid any conflicts with the real stdout.

2002-10-23  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xsl: Use <pre> tag for source code examples.

2002-10-22  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_StringToUtf): One more CONST84 - now
	we pass the tests!

2002-10-21  David N. Welton  <davidw@dedasys.com>

	* src/*.c: "CONST"ification.  See http://mini.net/tcl/3669 for
	more information.

	* src/: Minor build script updates.

2002-10-20  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: "make" needed to be "make.tcl".  Thanks to Makoto
	SATOH.

2002-10-18  David N. Welton  <davidw@dedasys.com>

	* tests/get.test: Added tests for new "var get" behavior.

	* doc/rivet.xml: Documented new "var get" behavior.

	* src/rivetCore.c (Rivet_Var): Added ?default? option to "var
	get".

	* doc/examples/: Added examples for XML document.

	* doc/rivet.xml: Several examples of how to use Rivet.

2002-10-17  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added Entities to deal with included files.  This
	makes it easier to correctly format the source code that is to be
	included.

2002-10-09  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/findapxs.tcl: Added /usr/sbin/ at the request
	of David Brancato, who notes that Redhat often locates apxs there.

2002-10-02  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Added 'Introduction' section.

2002-09-29  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Reworked several elements to better utilize
	docbook.

	* doc/rivet.xsl: Major reworking of several elements, including
	group and arg.  Added lots of style changes.

	* src/make.tcl: Add commands and dependencies to build extensions
	documents without chunks, and the main Rivet docs in chunks
	(seperate HTML files are output).

	* doc/rivet.xml: Updated docs to reflect new Apache directives.

2002-09-27  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_InitTclStuff): Change default CacheSize
	to MaxRequestsPerChild / 5, which should still be plenty, but will
	waste less space.

	* src/rivetCore.c (Rivet_Include): "include" command now saves
	channel encoding/translation, outputs the included file to stdout
	with binary translation/encoding, and then resets the original
	settings.  Fixes problem with EUC-JP characters in included
	files.  Thanks to Makoto SATOH for his help in finding this.

	* tests/lang.test: Added file to test LANG setting in server, to
	check character encodings.

	* tests/parse.test: Added EUC-JP characters to test that they come
	through ok.

	* tests/include.test: Added EUC-JP characters to test that they come
	through ok.

2002-09-11  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_InitEnvVars): Don't do an
	ap_clear_table on the environmental variables.  The include module
	no longer does this, and neither does PHP, so I guess it's safe to
	remove, and it's useful for users of modules like mod_uniqe_id.

2002-09-08  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c: Fix up ObjSetVar2 use.

	* src/mod_rivet.c: Fix up another instance of ObjSetVar2.

2002-09-07  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_PropagatePerDirConfArrays): Do the right
	tricks with IncrRefCount and DecrRefCount to stop the leak.

2002-08-03  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_AppendToScript): Changed before, after,
	and error scripts back to plain old ascii, in order to plug a
	memory leak.

	* src/mod_rivet.h: New macro: FILEDEBUGINFO off by default.
	Useful for debugging the order of functions called.

2002-07-28  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xsl: Updated rivet.xsl from Websh's xsl.

2002-07-21  David N. Welton  <davidw@dedasys.com>

	* doc/rivet.xml: Several new sections.  We now have most of what
	is in the HTML documents.

2002-07-19  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/aardvark.tcl (aardvark::runbuildcommand):
	Attempt to use 'open' to execute shell commands, in order to both
	catch the output as well as the return code.

	* doc/rivet.xml: New file.  Removed directives.xml in favor of
	this, which we will use to build individual HTML files and other
	forms of documentation.

2002-07-18  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (Rivet_Upload): Changed format of 'upload'
	command to be more like 'var'.  Changed relevant tests.

2002-07-14  David N. Welton  <davidw@dedasys.com>

	* doc/directives.xml: New file - XML version of directives.html.

2002-07-12  David N. Welton  <davidw@dedasys.com>

	* src/buildscripts/aardvark.tcl (aardvark::runbuildcommand):
	Updated functionality to hopefully better handle errors, warnings,
	and output.

	* src/make.tcl: Created a 'dist' target which rolls a tarball.

2002-07-11  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_GetHeaderVars): New function to get
	client headers, which are now seperate from environmental
	variables.

2002-06-18  David N. Welton  <davidw@dedasys.com>

	* cvsversion.tcl: Added tool to manage version numbers based on
	CVS changes.

2002-06-17  David N. Welton  <davidw@dedasys.com>

	* src/make.tcl: Updated build scripts to build the HTML
	documentation from XML files.

	* src/buildscripts/aardvark.tcl: Changed commands to 'sh' for
	shell commands and 'tcl' for Tcl commands.

2002-06-10  David N. Welton  <davidw@dedasys.com>

	* doc/packages/dio/dio.xml: Further updates.

2002-06-08  David N. Welton  <davidw@dedasys.com>

	* doc/packages/dio/dio.xml: Finished up adding material to
	dio.xml.

2002-06-06  David N. Welton  <davidw@dedasys.com>

	* doc/packages/dio/dio.xml: Initial commit of (incomplete) docbook
	documentation.

	* doc/packages/dio/rivet.xsl: Added XSL file for docbook
	documentation.

2002-05-03  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWeb_GetVarAsList): Added check to length
	to make sure we fully compare the two variables.  Idem for
	TclWeb_VarExists.

2002-04-19  Damon J. Courtney <damon@unreality.com>
	* src/TclWebapache.c
	    Added 'TclWeb_GetVirtualFile' command which returns the full
	    path to a virtual file.

	* src/rivetCore.c
	    Added command 'virtual_filename' to return the full path to a
	    virtual file.

	    Added -virtual option to include and parse commands to enable
	    them to parse a virtual file which is relative to the webserver.

2002-03-26  Damon J. Courtney <damon@unreality.com>

	* rivet/packages/form
	    Added a new package for handling forms in Rivet.

2002-03-26  Damon J. Courtney <damon@unreality.com>

	* src/TclWebapache.c
	    Moved the setting of include variables from LoadEnv to the
	    InitEnv command.  This will allow us to retrieve these variables
	    via the env command as well as load_env.

2002-03-21  Damon J. Courtney <damon@unreality.com>

	* src/TclWebapache.c
	* src/TclWeb.h
	    Added new command 'TclWeb_HeaderAdd'.

	* src/rivetCore.c
	    Added 'add' option to headers command to add a header instead
	    of just setting over one.

	* rivet/rivet-tcl/cookie.tcl
	    The cookie command adds a header instead of setting one.  This
	    allows multiple cookies in a single page.

2002-03-21  Damon J. Courtney <damon@unreality.com>

	* src/TclWebapache.c
	    If the header being set is Set-Cookie, we add it to the table
	    instead of overwriting it.  This allows us to set more than
	    one cookie per page, which is legal to all browsers.

2002-03-19  Damon J. Courtney <damon@unreality.com>

	* rivet/init.tcl
	    Appended packages-local to the auto_path.  This will be a great
	    place for people to place local packages that we won't mess with.

2002-03-18  David N. Welton  <davidw@dedasys.com>

	* tests/apachetest/apachetest.tcl: Added TclX to requirements.
	Damn.

2002-03-16  David N. Welton  <davidw@dedasys.com>

	* tests/runtests.tcl: Updated to run with apachetest, eliminating
	makeconf.tcl, and moving template.conf.tcl to the apachetest
	directory.

	* tests/apachetest/apachetest.tcl: New file, grouping together
	the test functions in one place, and in a namespace.

2002-03-15  David N. Welton  <davidw@dedasys.com>

	* tests/config.test: Added some new, automatically generated
	tests.

	* src/mod_rivet.c (Rivet_MergeDirConfigVars): Make sure that both
	arguments to overlay_tables exist!

	* src/mod_rivet.h: Add a default error script.

	* src/TclWebapache.c (TclWeb_GetEnvVars): DecrRef for the name of
	the environment variable.

	* rivet/rivet-tcl/cookie.tcl (make_cookie_attributes): Add an
	interface to add the 'expire' field directly.
	(cookie): "Set-Cookie" is uppercase for both words.

2002-03-15  Damon J. Courtney <damon@unreality.com>

	* src/apache_cookie.c
	* src/apache_cookie.h
	    Removed in favor of doing cookies through a Tcl interface.

	* src/channel.c
	* src/channel.h
	    Renamed to rivetChannel.c and rivetChannel.h

	* src/rivetCore.c
	* src/TclWebapache.c
	    Removed references to Apache cookie functions.

2002-03-14  Damon J. Courtney <damon@unreality.com>

	* src/TclWebapache.c
	    Added a routine to setup the environment variables and mark
	    that they have been set.  This will save us from having to
	    reload them all the time.  Once they're loaded, they don't
	    load again.

	* rivet/rivet-tcl/cookie.tcl
	    Added a new 'cookie' command for setting and getting cookies.

	* rivet/rivet-tcl/import_keyvalue_pairs.tcl
	    Added a command to import keyvalue pairs from arguments.

	* rivet/rivet-tcl/load_cookies.tcl
	    Made load_cookies use the env command to get the one variable
	    it needs instead of load_env, which gets a bunch it doesn't
	    need.

	* rivet/rivet-tcl/debug.tcl
	    Made debug use the env and import_keyvalue_pairs commands.

2002-03-13  Damon J. Courtney <damon@unreality.com>

	* src/mod_rivet.c
	    Cleaned up the error handling a little.  There was a really nasty
	    bug that if the ErrorScript was defined, it wouldn't actually
	    error out.  This had something to do with the header output and
	    flush being before the ErrorScript was executed.

	* rivet/init.tcl
	    Changed the default error handler to a Tcl proc.

2002-03-13  Damon J. Courtney <damon@unreality.com>
	* src/make.tcl
	* src/TclWebapache.c
	    Cleaned up the remainder of the compiler warnings.
	    Rivet should build cleanly without warnings now.

2002-03-13  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (Rivet_PropagatePerDirConfArrays): Clean up
	arrayName object after we're done with it.

	* src/TclWebapache.c (TclWeb_GetVar): Make sure to compare all of
	the variable key.

	* src/mod_rivet.c (Rivet_InitTclStuff): Moved creation of "rivet"
	AssocData here.

2002-03-12  Damon J. Courtney <damon@unreality.com>

	* src/mod_rivet.c
	* src/mod_rivet.h
	* src/rivetParser.c
	* src/rivetCore.c
	* src/TclWebapache.c
	    Cleaned up a lot of memory leaks.  Still working on finding more.

2002-03-12  David N. Welton  <davidw@dedasys.com>

	* tests/makeurl.test: New test.

	* src/TclWebapache.c (TclWeb_MakeURL): Use Tcl_SetStringObj
	instead of creating a new object.

	* src/rivetCore.c (Rivet_MakeURL): Pass already created object to
	TclWeb_MakeURL.

2002-03-11  Damon J. Courtney <damon@unreality.com>

	* src/TclWeb.h
	    Added declaration for TclWeb_GetEnvVar.

	* src/TclWebapache.c
	    Added command TclWeb_GetEnvVar.  Gets a single environment
	    variable.

	* src/mod_rivet.c
	    Added some extra stuff to the default error functions.
	    If the error_script fails, we output the failure.

	* src/rivetCore.c
	    Added Tcl 'env' command to get a single environment variable.

	* src/make.tcl
	* src/buildscripts/aardvark.tcl
	* src/buildscripts/graph.tcl
	    Cleaning up a bug with the struct package.

2002-03-10  Damon J. Courtney <damon@unreality.com>

	* src/mod_rivet.c
	    The Scripts output to the UserConf arrays now properly display
	    the scripts in their entirety.

	    Cleaned up the handling of directory configuration merging.

	    Fixed a bug where Rivet_GetRivetFile was stomping the BeforeScript.

2002-02-23  David N. Welton  <davidw@dedasys.com>

	* tests/upload.test: Added upload test.

	* src/TclWebapache.c: Added functions: TclWeb_PrepareUpload,
	TclWeb_UploadChannel, TclWeb_UploadSave, TclWeb_UploadData,
	TclWeb_UploadSize, TclWeb_UploadType, TclWeb_UploadFilename,
	TclWeb_UploadNames.

	* src/rivetCore.c (Rivet_Upload): Offloaded functionality to
	TclWebApache.c.

2002-02-17  Damon J. Courtney <damon@unreality.com>

	* src/make.tcl
	    Added a script to look around a little more for Apache's apxs tool.
	    If we can't find it, we output an error message to the user.

	* src/buildscripts/findapxs.tcl
	    Added to repository.

2002-02-12  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c: Added some INLINE's.

	* src/mod_rivet.c (Rivet_ParseExecFile): Tweaking of parameters to
	enable the modification stated below.

	* src/rivetCore.c (Rivet_Parse): Removed 'rsc' from this
	function.

2002-02-07  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c (TclWebMakeURL): New command, extracted out
	of rivetCore.c.

2002-02-01  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c: Deleted rivet_info command.

	* src/TclWebapache.c (TclWeb_GetEnvVars): Added RIVET_CACHE_FREE
	# and RIVET_CACHE_SIZE as environmental variables.

2002-01-29  David N. Welton  <davidw@dedasys.com>

	* doc/help.html: Updated mailing list archive location.

2002-01-28  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (Rivet_Include): Get channel via Tcl_GetChannel
	instead of through the apache config structure.

2002-01-27  David N. Welton  <davidw@dedasys.com>

	* tests/parse.test: Added test for 'parse' command.

	* src/mod_rivet.c (Rivet_ParseExecFile): Moved the addition of
	before and after scripts to this file, so that GetRivetFile is
	independant of any Apache specific code.

	* src/rivetParser.c, src/rivetParser.h: New files, which replace
	parser.c and parser.h.
	(Rivet_GetRivetFile): Moved from mod_rivet.c.  Now capable of
	operating independantly of mod_rivet.  Use Tcl file functions
	instead of Apache functions.
	(Rivet_Parser): Parser now operates on a Tcl_Obj input buffer.

	* src/mod_rivet.h: Moved content_sent to TclWebRequest in TclWeb.h

2002-01-26  David N. Welton  <davidw@dedasys.com>

	* tests/binary.test: Added test file for binary file handling.

	* src/mod_rivet.c (Rivet_SendContent): Moved 'header_only' option
	so that the request is set up and we don't segfault.
	(Rivet_GetRivetFile): changed puts to puts -nonewline, so as to
	not add spurious newlines.

	* src/rivetCore.c (Rivet_Include): Simplified code some, with '-1'
	argument to Tcl_ReadChars.  Eliminated "lf" -translation option.

2002-01-24  David N. Welton  <davidw@dedasys.com>

	* tests/include.test: Added test for 'include' command.

2002-01-22  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c, src/channel.c, src/rivetCore.c: Switched to
	TclWeb functions for error, headers.

	* src/mod_rivet.h: Moved headers_set and headers_printed out of
	the rivet_server_conf struct and into the TclWebRequest struct.

	* src/TclWebapache.c: Moved PrintHeaders, PrintError and
	SetHeaderType from mod_rivet.c.

	* src/TclWeb.h: Added ER1, ER2 and DEFAULT_HEADER_TYPE here.

	* tests/get.test: Added some tests related to [var *].

	* tests/post.test: Added some tests related to [var *].

	* src/rivetList.c (Rivet_LassignArrayObjCmd): Use -1 instead of
	NULL when doing NewStringObj.

	* src/rivetCrypt.c: Added header file.

	* src/make.tcl: Added slightly nicer apxs handling.

	* src/mod_rivet.c: Moved StringToUtf to TclWeb.

	* src/mod_rivet.h: Removed StringToUtf macro.

	* src/TclWebapache.c: Lots of bug fixes and corrections.

	* src/rivetCore.c (Rivet_LoadEnv): Switched to TclWeb API.
	(Rivet_LoadCookies): Switched to TclWeb API.
	(Rivet_Var): Switched to TclWeb API.

2002-01-19  Damon J. Courtney <damon@unreality.com>

	* src/rivetCore.c
	    Moved authorization from its own array into the env array as
	    HTTP_USER and HTTP_PASS.

	    Added an abort_page command which halts the sending of a request.

2002-01-19  David N. Welton  <davidw@dedasys.com>

	* src/TclWebapache.c: Added individual functions for CGI variable
	access.  Much simpler than trying to devise a data structure to
	pass them around with.

	* src/rivetCore.c (Rivet_LoadEnv): Roll back authorization
	information command.

2002-01-18  David N. Welton  <davidw@dedasys.com>

	* src/rivetCore.c (Rivet_LoadAuth): New command to load
	authorization information in its own array.

	* src/TclWebcgi.c: New file for stand-alone implementations of
	common web API.

	* src/TclWebapache.c: New file for apache-based implementations of
	web API.

	* src/TclWeb.c: Common code for TclWeb API.

	* src/TclWeb.h: TclWeb web interaction API.

2002-01-11  Damon J. Courtney <damon@unreality.com>

	* src/make.tcl
	    Updated some of the make nodes.

	    librivet.so now gets copied into the rivet package directory.


	* src/mod_rivet.c
	    Changed Rivet_Init to Rivet_InitCore to fix bug.

	    All Script directives now append to each other instead of
	    overwriting the last directive.  Directory directives still
	    override in standard fashion though.

	* rivet/packages/rivet
	    Added as the default package of Rivet commands in C.

2002-01-10  Damon J. Courtney <damon@unreality.com>
	* src/rivet.h
	    Added macro 'TCL_CMD_HEADER'.  Prints the default command header
	    for Tcl commands in Rivet.

	    Added macro 'TCL_OBJ_CMD'.  Prints the default object command
	    creation for Tcl commands in Rivet.

	* src/rivetInit.c
	    Renamed to rivetPkgInit.c

	* src/rivetCrypt.c
	    Added.  Contains commands for encryption and decryption.
		encrypt
		decrypt
		crypt

	* src/rivetWWW.c
	    Added.  Contains commands for the world wide web.
		escape_string
		unescape_string
		escape_sgml_chars
		escape_shell_command

	* src/rivetList.c
	    Added the following commands:
		comma_split
		comma_join
		lassign_array

	* src/make.tcl
	    Moved all of the Rivet Tcl commands into their own library
	    called librivet.  This will be automatically loaded into Rivet
	    as the default configuration.  Anyone who wants can take it
	    out if they choose.

2002-01-10  David N. Welton  <davidw@dedasys.com>

	* tests/template.conf.tcl: Re-add srm.conf and access.conf - if
	they aren't present, it tries to grab the ones from /etc/ - not
	what we want.

2002-01-09  Damon J. Courtney <damon@unreality.com>
	* src/tcl_commands.c
	    Renamed to rivetCore.c

	* src/tcl_commands.h
	    Removed.

	* src/rivet.h
	    Added as the default header file for Rivet Tcl commands.

	* src/rivetList.c
	    Added.  Only contains 'lremove' right now.

	* src/rivetInit.c
	    Added.  Contains the Tcl initialization routine for Rivet's Tcl
	    commands.

	* src/make.tcl
	    Added rivetCore.c, rivetList.c and rivetInit.c to the make.

2002-01-08  Damon J. Courtney <damon@unreality.com>
	* src/mod_rivet.h
	    Added RIVET_NEW_CONF macro to create a new rivet_server_conf.

	* src/mod_rivet.c
	    Added Rivet_MergeDirConfig to merge directory configurations.

	    Fixed bug where RivetDirConf was giving erroneous information.

2002-01-08  Damon J. Courtney <damon@unreality.com>

	* tests/makeconf.tcl
	    Went ahead and copied over the entire rivet directory.

	* tests/rivet.test
	    Changed the default port to 8081.

	* tests/template.conf.tcl
	    Changed the default port to 8081.
	    Removed access.conf and srm.conf.

2002-01-08  David N. Welton  <davidw@dedasys.com>

	* tests/makeconf.tcl (makeconf): Added a command to copy over the
	    init.tcl file to the testing directory.  It would probably be
	    best to copy the whole directory, though.

2002-01-08  Damon J. Courtney <damon@unreality.com>

	* src/channel.c
	    Just a text change.

	* src/make.tcl
	    Added a command to install that will copy the contents of the
	    rivet/ directory into Apache's install location.

	* src/mod_rivet.h
	    Removed some superfluous code and deprecated options.

	* src/mod_rivet.c
	    Finished renaming the rest of the remaining commands into the
	    standard Rivet_ naming scheme.  This will prevent any further
	    interferance with other modules.

	    Renamed namespacePrologue to request_init and re-coded the
	    namespace initialization code in Tcl.

	    Removed leftover references to the ::request::UPLOAD array.

	    Added an array called 'server' to the global namespace which
	    briefly contains important information about Apache and Rivet.

	    Propagated RivetServerConf, RivetDirConf and RivetUserConf arrays
	    at the tcl level.

	    Gave RivetUserConf the ability to set BeforeScript, AfterScript
	    and ErrorScript.

	* src/tcl_commands.c
	    Updated makeurl to use Tcl objects instead of the old Tcl_SetResult
	    command.

	* rivet/
	    Added a rivet/ directory of Tcl code.

	    Added init.tcl to rivet/.  This file contains initialization code
	    in a ::Rivet namespace that is called when the server starts up.

	* rivet/init.tcl
	    Added a command for cleanup after each request.  It currently
	    does nothing but could come in handy later.

	* rivet/packages
	    Created a rivet/packages directory for future Rivet packages.

	* rivet/rivet-tcl
	    Created a rivet/rivet-tcl directory containing a few procs.

	* rivet/rivet-tcl/load_response.tcl
	    Added 'load_response' command to rivet-tcl/.

	* rivet/rivet-tcl/parray.tcl
	    Added 'parray' command to rivet-tcl/.

2002-01-07  David N. Welton  <davidw@dedasys.com>

	* General: Renamed some more commands so that Rivet may be run
	alongside mod_dtcl.

	* src/mod_rivet.c (get_parse_exec_file): Oops - change httpd-tcl
	to httpd-rivet in strcmp.

2002-01-06  David N. Welton  <davidw@dedasys.com>

	* Documentation: Big cleanup, updating everything from mod_dtcl.

	* General: Changed .ttml to .rvt.  Also changed mime type to
	x-httpd-rivet.  Changed all references in documentation to .rvt
	from .ttml.

2002-01-05  David N. Welton  <davidw@dedasys.com>

	* src/parser.c (Rivet_Parser): A few, mostly cosmetic, cleanups in
	the parser.

	* src/make.tcl: Add nodes for testing library.

	* src/channel.c (outputproc): Change printheaders to
	Rivet_PrintHeaders.

	* General: whitespace cleanups.

2001-11-21  David N. Welton  <davidw@dedasys.com>

	* src/channel.c: Almost all output is based on the ApacheChan
	channel, and uses Tcl's buffering, flushing, etc...

	* tests/rivet.test: Updated testing scheme to work with lots of
	test files/ttml files.

2001-11-21  Damon J. Courtney <damon@unreality.com>

	* src/mod_rivet.c
	    Renamed more commands into the Rivet_ naming scheme.

2001-11-20  Damon J. Courtney <damon@unreality.com>

	* src/tcl_commands.c
	    load_env and load_cookies now accept an optional argument of
	    ?arrayName?.
	* src/tcl_commands.c
	    Renamed a lot of the commands into a standard naming scheme.

2001-11-20  Damon J. Courtney <damon@unreality.com>

	* src/tcl_commands.c
	    Cleaned up some more code.  Just textual changes.
	* src/mod_rivet.c
	    Cleaned up some run-over lines and code.
	* src/mod_rivet.c
	    Changed module signature from "mod_rivet" to "Rivet"
	* src/tcl_commands.c
	    Changed hgetvars command to load_env command.
	* src/tcl_command.c
	    Moved loading of cookies to load_cookies command.
	* src/tcl_command.c
	    Renamed default load_env array from ENVS array to env.
	* src/tcl_command.c
	    Renamed default load_cookies array from COOKIES to cookies.

2001-11-08  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (rivet_child_init): Fix loop, pass correct
	parameter to RIVET_SERVER_CONF.

2001-10-19  David N. Welton  <davidw@dedasys.com>

	* src/mod_rivet.c (get_parse_exec_file): Fixed up problems with
	Parse command.

2001-09-30  David N. Welton  <davidw@dedasys.com>

	* src/parser.c (rivet_parser): Quote { and } to avoid problems.

2001-09-23  David N. Welton  <davidw@dedasys.com>

	* Initial commit and cleanup of old mod_dtcl code.
