2021-03-07 Massimo Manghi <mxmanghi@apache.org>
    * VERSION: bumped version as 3.2.1
    * src/mod_rivet_ng/mod_rivet.c: more linear determination of the bridge name
    * rivet/packages/formbroker.tcl: introduced key maxlength

2020-11-19 Massimo Manghi <mxmanghi@apache.org>
	* rivet/packages/dio/dio.tcl,dio_Mysql.tcl: adding support for
	connector specific client arguments
	* rivet/packages/form/form22.tcl: New from 2.2 package can be
	configured to return HTML code instead of printing it to stdout

2020-11-02 Massimo Manghi <mxmanghi@apache.org>
	* doc/xml/directives.xml: SingleThreadExit entry re-elaborated
	* tests/runtest.tcl: Document new command line options
	* README: Removed obsolete warning about scgi scripts

2020-10-04 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/mod_rivet.c: forcing variable assignment in condition

2020-10-03 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/mod_rivet.c: Documenting the Rivet_SeekMPMBridge function

2020-10-01 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/rivet_prefork_mpm.c: Fixed trivial bug in checking the
	rivet cache size
	* configure.ac: add macro to define preprocessor symbol	RIVET_DEBUG_CODE

2020-09-29 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/mod_rivet.[c|h]:
	* src/mod_rivet_ng/rivet_[prefork|worker|lazy]_mpm.c:
	* src/mod_rivet_ng/worker_prefork_common.c:
	* src/mod_rivet_ng/mod_rivet_commit.c:
	* src/mod_rivet_ng/apache_config.[c|h]: moving also rivet_server_init
	out of the server configuration and into the module_globals

2020-09-28 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/mod_rivet.[c|h]:
	* src/mod_rivet_ng/rivet_[prefork|worker|lazy]_mpm.c:
	* src/mod_rivet_ng/worker_prefork_common.c:
	* src/mod_rivet_ng/mod_rivet_commit.c:
	* src/mod_rivet_ng/apache_config.[c|h]: moving real global setting out
	of the server configuration record into the module_globals structure,
	because they're global in the first place
	* doc/xml/directives.xml: extended revision of the directive scope documentation

2020-09-27 Massimo Manghi <mxmanghi@apache.org>
	* rivet/packages/formbroker/formbroker.tcl: add method form_exists to check for registration
	of a form
	* test/apachetest/apachetest.tcl,test/runtests.tcl: add support for testing with various MPMs and bridges 

2020-02-03 Massimo Manghi <mxmanghi@apache.org>
	* src/request/: Update obsolete copyright statements
	* src/mod_rivet_ng/rivetCore.c: update comments to upload command
	* tests: changed upload file test

2020-04-02 Massimo Manghi <mxmanghi@apache.org>
	* doc/xml/formbroker.xml: fixed examples
	* src/mod_rivet_ng/rivet_lazy_mpm.c: resolved access to shared counter
	that was causing segfaults when child process was terminated

2020-01-19 Massimo Manghi <mxmanghi@apache.org>
	* doc/xml/commands.xml: remove entry for command incr0 (dropped in 3.0)

2019-12-30 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/rivetCore.c: fixed bug in 'upload filename' that
	caused segfaults instead of Tcl errors when called without arguments
	* src/request/: Adding latest Copyright statements to files in this
	directory
	* tests/upload.rvt,upload.test: revised upload tests (need expansion
	to test multiple uploads)

2019-12-12 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/apache_config.c: copying also upload_files_to_var in
    Rivet_MergeConfig

2019-12-06 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: expanded error info data in Rivet_Upload
    * doc/rivet.css: new color scheme for docbook manual

2019-12-04 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: new branch uploadcmdfix with improved
    argument checking in Rivet_Upload that was the cause of random crashes

2019-11-29 Brice Hamon <bhdec@apache.org>
   * src/mod_rivet_ng/mod_rivet_cache.h: added RivetCache_DeleteEntry
   * src/mod_rivet_ng/mod_rivet_cache.c: 
   * src/mod_rivet_ng/rivetCore.c: fixed crash when rvt file not readable

2019-10-13 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/directives.xml: configuration directives table expanded
    * doc/examples/

2019-09-30 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: revised argument checking

2019-09-29 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: Completed manual page for command ::rivet::thread_id
    * src/mod_rivet_ng/rivetCore.c: Rivet_GetThreadId rewritten. Now the
    command accepts an optional argument to select decimal or hexadecimal (default)
    output 

2019-08-05 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/directives.xml: Documenting SingleThreadExit directive

2019-07-27 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml,src/mod_rivet_ng/rivetCore.c: Add ::rivet::thread_id
    manual page

2019-06-25 Massimo Manghi <mxmanghi@apache.org>
    * : Single thread exit implementation for mod_rivet 3.2
    * src/mod_rivet_ng/rivet_[.*]_mpm.c: further simplified code by removing 
    redundant flags. Changing function names scheme

2019-05-24 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: Add Tcl_DecrRefCnt after
    RivetCache_StoreScript as this function itself calls
    Tcl_IncrRefCnt to preserve the Tcl_Obj with the script code
    
2019-04-13 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: Correct wrong header in ::rivet::http_accept code example

2019-04-12 Massimo Manghi <mxmanghi@apache.org>
    * INSTALL: wrong references corrected

2019-02-19 Massimo Manghi <mxmanghi@apache.org>
    * .appveyor.yml: merging from master in order to have new tags generate
    artifacts

2019-02-16 Georgios Petasis <petasisg@apache.org>
    * .appveyor.yml: Added support for creating a zip with the installed rivet
    files (both module and library), and create an artifact. If a tag is added
    (in all branches), the zip will be added to the release.

2019-01-21 Massimo Manghi <mxmanghi@apache.org>
    * src/rivet.h: Add error message buffer size definition (was still hardcoded
    here and there)
    * src/mod_rivet_ng/rivetCore.c,rivet_worker_mpm.c: hardcoded buffer size
    into their correct macro definitions

2019-01-14 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: add experimental ::rivet::thread_id
   command

2019-01-05 Massimo Manghi <mxmanghi@apache.org>
    * doc/: merging from 3.1 fixes to various broken docbook elements
    and new entities to external resources' URLs

2018-12-24 Georgios Petasis <petasisg@apache.org>
    * README.md: Added badges also for the GitHub fork at:
    https://github.com/petasis/tcl-rivet.

    * .appveyor.yml: Enhancements to not rely on hard-coded paths.

2018-12-23 Massimo Manghi <mxmanghi@apache.org>
    * cmake/CMakeLists.txt: starting with rivet 3 we need Tcl > 8.6.1

2018-12-20 Georgios Petasis <petasisg@apache.org>
    * cmake/CMakeLists.txt: Set policy behaviour of CMP0074, only if policy is
    defined (i.e. cmake version >= 3.12).

2018-12-19 Georgios Petasis <petasisg@apache.org>
    * cmake/CMakeLists.txt: Added support for regenerating pkgIndex.tcl in the
    installation directory of rivetlib, after files have been installed.
    This executes "tclsh".

2018-12-17 Georgios Petasis <petasisg@apache.org>
    * Readme.md: Added a separate badge for winbuild branch.

2018-12-17 Massimo Manghi <mxmanghi@apache.org>
    * src/request/apache_request.c,src/request/apache_multipart_buffer.[c|h]: 
    explicit cast to int wherever needed by calls to Tcl_* functions and
    changed int to size_t wherever required 
    * src/mod_rivet_ng/rivet_types.h,rivetCore.c: field 'size' in structure
    typed as size_t
    * src/mod_rivet_ng/TclWebapache.c: argument to Tcl_ReadChars explicitly
    cast to int 

2018-12-16 Georgios Petasis <petasisg@apache.org>
    * Readme.md: Added a Markdown README file, which shows the build status
    from Appveyor, for Windows.

    * .appveyor.yml: Started a build configuration for Appveyor:
    https://ci.appveyor.com/project/petasis/tcl-rivet

    * cmake/CMakeLists.txt: Set policy CMP0074 to new behaviour. Rivet version
    is read from file VERSION.

    * cmake/README.cmake: Some changes in directories used.

    * src/mod_rivet_ng/mod_rivet.h: Removed statement "APLOG_USE_MODULE(rivet);"
    from the module header file.

2018-12-07 Massimo Manghi <mxmanghi@apache.org>
    * rivet/pkgIndex.tcl: completed with actual list of packages

2018-12-04 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: now infer the version number from VERSION.
    * doc/rivet.xml,doc/xml/examples.xml: modified example "color table"

2018-12-03 Massimo Manghi <mxmanghi@apache.org>
    * cmake/CMakeList.c: we infer the version number from the file
    VERSION assumed to reside in the project root directory
    * src/parser/rivetParser.c: 
    * src/mod_rivet_ng/mod_rivet_common.c: type cast of pointer
    arithmetics into int

2018-11-23 Massimo Manghi <mxmanghi@apache.org>
    * VERSION,configure,ac: version number bumped to 3.2.0 as we created
    3.1 out of branch 3.0 in order to highlight possible regressions that
    may surface as a consequence of fixing bug #62926

2018-11-20 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: patching from 3.0 to fix bug #62926
    * tests/post.rvt,fqrivet_var.tcl: add tests to prevent post and get
    variables crosstalk (bug #92926)
    * doc/rivet.xml.in: displaying full version associated to the manual

2018-11-11 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: correct macro description
    * src/mod_rivet_ng/rivetChannel.c: new copyright notice
    * doc/xml/commands.xml: correct sentence in ::rivet::exit manual page

2018-11-02 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/mod_rivet.[c|h]: add macro RIVET_MPM_BRIDGE to
    compose rivet bridge names

2018-10-17 Massimo Manghi <mxmanghi@apache.org>
    * tests/commands.tcl: changing test on self closing element
    * [doc/rivet.xml.in|doc/rivet.xml]: removed delimiters of
    symbols expanded by svn
    * doc/xml/commands.xml: fixed entities in ::rivet::xml manual page

2018-08-16 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/xml.tcl: changing form to support single self
    closing XML elements such as <tag attr1="val1" attr2="val2".... /> 
    when if the text string is empty
    * tests/commands.tcl: changing ::rivet::xml test accordingly
    * doc/xml/commands.xml: documenting new ::rivet::xml feature

2018-08-07 Massimo Manghi <mxmanghi@apache.org>
    * VERSION,configure.ac: first commit after svn to git migration.
    The trunk branch is now the master branch of the git repository.
    setting the master branch version as 3.1.0.
    * .gitignore: untracking Makefile.in and putting in .gitignore
    autools generated files
    * doc/rivet.xml.in: removing references to now unsupported 
    svn keywords substitutions

2018-06-25 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.in: the error handler of error scripts requires
    ::Rivet::script to keep the actual 'script' being run 
    (reintegrated into trunk from branches/3.0)

2018-06-18 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/*.tcl: fully qualifying calls to ::rivet::lempty

2018-06-14 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl: fixed bug in error scripts' error handling (the
    case of handling an error that occurs in the default error script may
    need the introduction of a new test

2018-04-09 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/mod_rivet.h: changing argument list of function
    *mpm_thread_interp in the bridge interface. It must work
    as an accessor to the interpreter database when both getting
    and storing an interpreter pointer

2018-02-28 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am: default_request_handler.tcl and init.tcl can be
    installed without the exec bit set

2018-02-17 Massimo Manghi <mxmanghi@apache.org>
    * NOTICE: update copyright statement
    * src/mod_rivet_ng/worker_prefork_common.c: Rivet_CleanupProcessor
    to call RivetCache_Cleanup
    * doc/rivet.xml: new version in docs

2018-02-08 Massimo Manghi <mxmanghi@apache.org>
    * VERSION,configure.ac: bumping version to 3.0.2

2018-02-08 Ronnie Brunner <ronnie@apache.org>
    * doc/apachetest.tcl: make independent from TclX adding
    our own 'kill' procedure. Changing signal to stop the
    http webserver as KILL
    * doc/runtests.tcl: removing depend on the prefork module

2018-02-03 Massimo Manghi <mxmanghi@apache.org>
    * src/librivet/rivetPkgInit.c: changing way we determine the
    namespace pointer in order to avoid the necessity of gaining 
    access to the module globals and therefore avoid including 
    mod_rivet.h. The macro APLOG_USE_MODULE introduced in
    mod_rivet.h makes the library load fail outside
    mod_rivet and Apache
    * rivet/pkgIndex.tcl: recreated from scratch

2018-01-23 Massimo Manghi <mxmanghi@apache.org>
    * VERSION,configure.ac: bumping version number to 3.0.1
    * doc/rivet.xml.in,doc/xml/request.xml: wrong links and information
    about MPM support fixed
    * src/mod_rivet_ng/mod_rivet.h: add APLOG_USE_MODULE
    macro
    * src/mod_rivet/ng/rivet_worker_mpm.c: number
    of threads waited on exit by the supervisor was wrong
    and it's now the acutal number of threads available,
    variable uninitalized in loop fixed 

2018-01-23 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/lazybridge.xml: more improvements and
    inclusion of new comments to the code
    * doc/xml/commands.xml: rather cosmetic improvment 
    to the page of ::rivet::try
    * src/mod_rivet_ng/rivet_lazy_mpm.c: more comments

2018-01-19 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/installation.xml: various broken links fixed
    * doc/xml/internals.xml: expanding some explanations and changing
    links to the Apache server from version 2.2 to 2.4
    * doc/xml/lazybridge.xml: expanding code explanations
    * src/mod_rivet_ng/rivet_lazy_mpm.c: commenting code in
    various functions

2018-01-17 Massimo Manghi <mxmanghi@apache.org>
    * : Released as 3.0.0

2018-01-09 Massimo Manghi <mxmanghi@apache.org>
    * tests/virtualhost.test,tests/channel.test: changed
    virtual hosts declarations. Now accepting '*' as host
    name prevents test from failing with certain set ups (a
    DNS related problem)
    * doc/xml/intro.xml: add ackowledgements to George
    * win/: old Windows scripts removed
    * src/mod_rivet: old mod_rivet code removed

2018-01-01 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/: more error checking and several improvements to
    the manual

2017-12-29 Massimo Manghi <mxmanghi@apache.org>
    * doc/rivet.xml.in: more entities to extend documentation
    * doc/xml/intro.xml: introduction revised and extended
    * doc/xml-2: files used to generate the manual removed or
    moved into doc/xml
    * doc/rivet.css: changed color palette

2017-12-22 Massimo Manghi <mxmanghi@apache.org>
    * doc/: more changes to manual pages

2017-11-29 Massimo Manghi <mxanghi@apache.org>
    * NOTICE, README: expanded and obsolete information amended 

2017-10-31 Massimo Manghi <mxmanghi@apache.org>
    * merging branch cmake back into trunk
    * tests/broken.test: the error message form has changed with
    the Tcl based new request handling procedure

2017-10-28 Massimo Manghi <mxmanghi@apache.org>
    * docs/xml/cmake.xml: draft manual page for cmake build system

2017-10-22 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.in: Following Jeff Lawson's suggestion we check
    if init.tcl is loaded from within mod_rivet. If we're not running
    from it we don't divert the [exit] command 
    * src/librivet/rivetPkgInit.c: removing code kept in the file 
    that had been commented because not needed. 

2017-10-18 Massimo Manghi <mxmanghi@apache.org>
    * doc/: add new cmake.xml file, further manual developments

2017-10-12 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/mod_rivet.c: add preprocessor test on
    variable declaration for the WIN32 build
    * src/librivet/rivetWWW.c: fixed subtle buffer overflow
    mistakenly assuming snprintf printed a byte less than
    * doc/xml/processing.xml,command.xml: further elaboration of the
    Rivet 3.0 manual. Update ::rivet::redirect manual entry
    * tcl/rivet-tcl/redirect.tcl: now handling generic boolean arguments
    or any integer > 0 (as for the HTTP status codes)

2017-09-17 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/examples.xml: moved into final directory

2017-09-15 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio.tcl: new version 1.1 of class Database
    new method mkdir for class Result
    * docs/Makefile.am: removed automatic manual creation upon installation

2017-09-03 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Mysql.c: unqualified string command conflicted
    with Database class same method 

2017-08-18 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio.tcl: method build_where_clause treated
    single value key differently, but this failed to remove braces
    for the representation of a single element list containing space
    characters. The method has been changed the have an uniform
    way to handle this

2017-08-12 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/mod_rivet.c: moving to 
	Rivet_RunServerInit the call to the bridge specific
	server initialization script. Confining compilation
	of the code checking AP_PARENT_PID to Windows
	systems

2017-08-10 Georgios Petasis <petasis@apache.org>
    * cmake/CMakeLists.txt: Modified also variable CMAKE_PREFIX_PATH, as
    TCL_ROOT and TclStub_ROOT are specific to CMake 3.9.0, and will be
    removed. See https://gitlab.kitware.com/cmake/cmake/issues/17158.
	
2017-08-11 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/mod_rivet.c: add check on 
	environment variable AP_PARENT_PID to prevent
	server Tcl init script from running in winnt
	controlled child processes (as per Apache HTTP 
	server documentation)
	
2017-08-10 Georgios Petasis <petasis@apache.org>
    * src\mod_rivet_ng\apache_config.c:
    * src\mod_rivet_ng\mod_rivet.c:
    * src\mod_rivet_ng\mod_rivet_common.c:
    * src\mod_rivet_ng\mod_rivet_generator.c:
    * src\mod_rivet_ng\rivet_lazy_mpm.c:
    * src\mod_rivet_ng\worker_prefork_common.c: Locally declared symbol
    rivet_module as extern (DLLIMPORT).

    * branches\cmake\src\mod_rivet_ng\mod_rivet.h: Symbol rivet_module
    removed from header file.

    * branches\cmake\src\mod_rivet_ng\mod_rivet_common.c: Used ckalloc() instead
    of apr_pcalloc() for variable globals, in Rivet_PerInterpInit().

    * cmake\README.cmake:
    * cmake\CMakeLists.txt: Added support for picking a Tcl installed at a
    non-standard location. Updated README.cmake with an example. Also disabled
    the switch to export all symbols from mod_rivet.so
    (WINDOWS_EXPORT_ALL_SYMBOLS).

    * src\mod_rivet_ng\mod_rivet_common.c:
    * src\mod_rivet_ng\rivetCore.c: Fixes in DLLEXPORT.

2017-08-07 Massimo Manghi <mxmanghi@apache.org>
	* src/mod_rivet_ng/mod_rivet.c: Rivet_ServerInit is now implementing
	the recommended mechanism to avoid the double load of external
	modules
	
2017-08-05 Georgios Petasis <petasis@apache.org>
    * cmake\CMakeLists.txt: rivetparser/rivetlib shared libraries now have the
    prefix "lib" under all platforms.

    * cmake\cmake_extra_modules\rivet_config.h.cmake: RIVET_RIVET_CORE or
    RIVET_CORE? Added also support for RIVET_CORE, but disabled, as it causes
    compilation errors (in C preprosessor, two strings are compared, which is
    not supported).

    * rivet\pkgIndex.tcl: Dropped ".so" in favour of "info sharedlibextension".

    * src\librivet\rivetCrypt.c:
    * src\librivet\rivetList.c:
    * src\librivet\rivetPkgInit.c:
    * src\librivet\rivetWWW.c: Definition of EXTERN and exported symbols through
    DLLEXPORT.

    * src\mod_rivet_ng\mod_rivet.c:
    * src\mod_rivet_ng\mod_rivet_cache.c:
    * src\mod_rivet_ng\mod_rivet_common.c:
    * src\mod_rivet_ng\mod_rivet_generator.c:
    * src\mod_rivet_ng\rivetCore.c:
    * src\mod_rivet_ng\rivetCore.h:
    * src\parser\parserPkgInit.c: Definition of EXTERN and exported symbols
    through DLLEXPORT.

2017-08-05 Georgios Petasis <petasis@apache.org>
    * src\mod_rivet_ng\rivet_lazy_mpm.c:
    * src\mod_rivet_ng\rivet_prefork_mpm.c:
    * src\mod_rivet_ng\rivet_worker_mpm.c: Added DLLEXPORT for the symbol
    defined with RIVET_MPM_BRIDGE macro.

    * cmake\CMakeLists.txt: Exported all symbols for mod_rivet.so under Windows,
    to copy the behaviour in UNIX systems (where all symbols are exported from
    shared libraries).

    * cmake\cmake_extra_modules\checks.cmake:
    * cmake\cmake_extra_modules\config.h.cmake:
    * cmake\cmake_extra_modules\rivet_config.h.cmake: Under VC11, round()
    has not been implemented. Added checks in CMake build, for detecting
    round()'s absence.

    * src\mod_rivet_ng\rivetCore.c:
    * src\mod_rivet_ng\rivet_lazy_mpm.c:
    * src\mod_rivet_ng\rivet_prefork_mpm.c:
    * src\mod_rivet_ng\rivet_worker_mpm.c:
    * src\mod_rivet_ng\worker_prefork_common.c:
    * src\parser\parserPkgInit.c: Changes for avoiding link error under Windows
    (mostly) related to importing exported symbols from  mod_rivet.so.

2017-08-05 Georgios Petasis <petasis@apache.org>
    * src/mod_rivet_ng/mod_rivet_common.c: Reordered header files, so
    <unistd.h> (and its check) to come after "mod_rivet.h" that includes
    "rivet_config.h".

2017-08-04 Georgios Petasis <petasis@apache.org>
    * cmake\CMakeLists.txt:
    * cmake\cmake_extra_modules\FindAPR.cmake:
    * src\mod_rivet_ng\TclWebapache.c:
    * src\mod_rivet_ng\mod_rivet.c:
    * src\mod_rivet_ng\mod_rivet.h:
    * src\mod_rivet_ng\mod_rivet_cache.c:
    * src\mod_rivet_ng\mod_rivet_common.c:
    * src\mod_rivet_ng\mod_rivet_generator.c:
    * src\mod_rivet_ng\rivetCore.c:
    * src\parser\rivetParser.c: Changes for fixing compilation errors under
    Windows.

2017-08-04 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: changes demanded by windows compiler
    * rivet/pkgIndex.tcl: recreated with a up to date list of packages

2017-08-04 Georgios Petasis <petasis@apache.org>
    * cmake\CMakeLists.txt: Various changes for better support build under
    Windows.
    
    * cmake\README.cmake: Added a section for building under Windows.
    
    * cmake\cmake_extra_modules\FindAPACHE.cmake: Enhanced customisability.
    The user can guide detection with variables APACHE_INCLUDE_DIR_HINTS,
    APACHE_MODULE_DIR_HINTS, APACHE_LIB_DIR_HINTS, APACHE_ROOT.
    
    * cmake\cmake_extra_modules\FindAPR.cmake: Enhanced customisability.
    The user can guide detection with variables APR_INCLUDE_DIR_HINTS,
    APACHE_INCLUDE_DIR_HINTS, APACHE_ROOT, APR_LIBRARY_HINTS,
    APRUTIL_INCLUDE_DIR_HINTS, APRUTIL_LIBRARY_HINTS.

2017-08-03 Georgios Petasis <petasis@apache.org>
    * CMake build system: Removed "lib" prefix from some libraris.

2017-08-03 Georgios Petasis <petasis@apache.org>
    * CMake build system: Added support for installing Rivet. Added more
    checks for various definitions in config.h/rivet_config.h.

2017-08-03 Georgios Petasis <petasis@apache.org>
    * CMake build system: Added missing source files, enabled as default
    the build of shared libraries, added needed link libraries. Also
    extended build system for all Rivet libraries (librivetlib.so,
    librivetparser.so, librivet_worker_mpm.so, librivet_prefork_mpm.so,
    librivet_lazy_mpm.so), and checked their linked libraries and missing
    symbols with their versions when build with autoconf.

2017-08-02 Massimo Manghi <mxmanghi@apache.org>
	* Changed references in cmake/CMakeList.txt to build with
	code in src/mod_rivet_ng.

2017-08-02 Georgios Petasis <petasis@apache.org>
    * Created a new branch (cmake) for the CMake build system.

2017-07-24 Massimo Manghi <mxmanghi@apache.org>
	* xml/rivet.xml.in: reflects rivet.xml having been moved to doc/xml
	* rivet/default_request_handler.tcl: code of the default 
	request handler read by mod_rivet
    * Makefile.am: now installing also rivet/default_request_handler.tcl
    * src/mod_rivet_ng/mod_rivet.c: add function for creation of 
    the module_globals strucuture. This structure is not assumed anymore
    to be inherited through a fork operation and it's now in case 
    re-created at child process initialization
    * src/mod_rivet_ng/rivet_lazy_mpm.c: removing
    reference to unused global variable
    * src/mod_rivet_ng/mod_rivet_common.c: Rivet_RunningScripts
    handling default request procedure specified in the configuration
    
2017-07-20 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: now using Tcl
    [string is boolean ...]
    
2017-07-19 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/internals.xml: moving the internals chapter
    to its final directory
    * doc/xml/processing.xml: more proof reading corrections

2017-07-13 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/: further developments of the 3.0 manual
    * src/mod_rivet_ng/mod_rivet.c: better coding of
    bridge module search and determination
    * rivet/default_request_handler.tcl: proposed file
    to store the actual request handling code

2017-06-22 Massimo Manghi <mxmanghi@apache.org>
    * doc/rivet.xml.in: introducing rivet.xml.in for
    automatic and consistent definition of versioning entities
    * doc/xml/commands.xml: moved into final directory
    * doc/xml/processing.xml: add new file to separate request
    processing from MPM bridge interface documentation

2017-06-19 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/directives.xml: first rewriting into a new page.
    Still more directives to be documented
    * doc/convert_examples.tcl.in: changed message
    * doc/rivet.css: add directives for styling the
    directives page

2017-06-09 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/: manual rewriting started

2017-06-07 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml-2/: XML manual moved to xml-2 to make
    rewriting easier

2017-05-15 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivet_prefork_mpm.c: server root 
    interpreter needs to re-seed the random number generator

2017-05-11 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.in: apply Damon's patch concerning
    some tests and error handling. Removed call to the
    undocumented procedure ::Rivet::cleanup_request
    * configure.ac: better wording of some configure
    messages

2017-04-07 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: Fixed bug
    in argument list passed to RivetCache_MakeKey

2017-04-06 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivet_lazy_mpm.c: server_rec
    argument in error logging changed to global
    root server. Passing the virtual host server rec 
    makes the call to ap_log_error quiet and
    if something goes wrong in the thread's Tcl interp
    initialization we don't read anything!

2017-04-05 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/formbroker.xml: better wording of a few
    concepts. Add documentation for the boolean data type
    * doc/xml/internals.xml: fixed incomplete sentence

2017-02-10 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: now
    handling natively also boolean in the form y|n or
    0|1

2017-02-01 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: defining and substituting
    RIVETLIB_VERSION
    * rivet/init.tcl.in: the ::rivet namespace is
    created already in src/mod_rivet_ng/mod_rivet_common.c
    Package rivetlib is loaded here now 
    * src/mod_rivet_ng/mod_rivet_common.c: in
    function Rivet_PerInterpInit more code is 
    devolved to the Tcl initialization

2017-01-18 Massimo Manghi <mxmanghi@apache.org>
    * doc/Makefile.am: integration of the automake
    infrastructure and rules
    * src/Makefile.am: removed prefixing of
    library names with DESTDIR

2017-01-17 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am: removing the mpm shared library
    directory only if exists (it's removed by
    the libtool generated rules by the src/Makefile.am)
    * src/Makefile.am: installation directories
    have been prepended by DESTDIR

2017-01-16 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am: removing the _configs.sed file generated
    by configure in distclean target rule fulfills now
    entirely the 'distcheck' target
    
2017-01-04 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am,src/Makefile.am: now handling the 'dist'
    and 'distcheck' targets of the automake generated
    Makefile
    * configure.ac: add RIVET_CORE definition
    * src/mod_rivet_ng/rivetCore.c: now calls
    the alternate form of RivetParse
    * src/parser/parserPkgInit.c: altenate form of
    function Rivet_Parser elimianates the need of
    enclosing the code in the namespace ::request

2016-12-19 Massimo Manghi <mxmanghi@apache.org>
    * rivet/mod_rivet_ng/mod_rivet_cache.c: better wording of cache 
    functions names. 

2016-12-12 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.in: [url_script] now evaluated
    explicitly in the ::request name space. We
    don't need the Rivet parser to place a script
    in this namespace
    * rivet/mod_rivet_ng/rivetCore.c: now Rivet_GetRivetFile
    is called with the flag 'toplevel' set to zero. The
    code handling this flag could be removed if we 
    abandoned the traditional mod_rivet core

2016-12-07 Massimo Manghi <mxmanghi@apache.org>
    * src/librivet/rivetWWW.c: enlarging buffer 
    allocated in ::rivet::escape_sgml_chars
    * configure.ac: removed test on the apache
    version (we don't support apache-1 anymore)
    
2016-12-06 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: mod_rivet_ng now default for
    builing mod_rivet
    * src/mod_rivet_ng/rivetCore.c: safer condition
    testing should avoid assumptions about how
    the compiler builds pointer comparisons
    * src/mod_rivet_ng/worker_prefork_common.c: 
    before running the child init script the
    running configuration pointer is the thread
    private data has to be set
    * tests/broken.test: new error message structure
    * tests/checkfails.tcl, failtest.tcl: changed
    value returned by one of the tests

2016-12-05 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/session/session-class.tcl: new
    method synch saves in the session cache data
    coming from form
    * src/mod_rivet_ng/mod_rivet_common.c: more
    careful design assign to a single function
    the task of determining the current configuration
    when an interpreter is initialized

2016-11-30 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivet_lazy_mpm.c:
    * src/mod_rivet_ng/worker_prefork_mpm.c: setting
    the running_conf pointer in the thread private
    data enables ::rivet::inspect to return 
    meaningful data even outside of request processing (in
    the forms that make sense)
    * src/mod_rivet_ng/rivetCore.c: more accurate
    determination of the rivet_server_rec makes
    possible to determine the pointer also
    outside a request processing

2016-11-28 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/: new configuration directives
    RequestHandler (request handling procedure), ImportRivetNS
    and ExportRivetNS (override parameters for
    build options). RequestHandler enables rivet
    to run an application specific request handler.
    * src/mod_rivet_ng/rivetInspect.c: now runs also
    during the server initialization stage. The whole
    rivet core is setup during that phase but only
    a few commands are actually operational (most
    of them make sense only during an HTTP request processing)

2016-11-23 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form.tcl,form2.tcl: fix full
    qualification of the ::rivet::lempty command
    * src/mod_rivet_ng/mod_rivet_common.c: changed or removed
    old comments that don't apply to the current code
    * configure.ac: now quoting strings when passed 
    to macro AC_MSG_CHECKING

2016-11-22 Damon J. Courtney <damon.courtney@gmail.com>
    * rivet/init.tcl.it: Rewrite init.tcl.in from the top down

2016-11-22 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/session/session-class.tcl:
    * rivet/packages/form/form.tcl,form2.tcl: now
    fully qualifying mod_rivet commands, fixed
    'file' method that emits an 'email' HTML input element
    * doc/xml/formbroker.xml: correct coding example

2016-11-19 Massimo Manghi <mxmanghi@apache.org>
    * src/mod-rivet/rivetInspect.c: now returning
    an empty string if a value is undefined
    * configure.ac: now defaults to non automatic
    import of ::rivet namespace into global namespace

2016-11-17 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Postgresql.tcl: applied
    consistent single quote character handling by
    calling PgTcl function pg_quote (closes bug #60378)
    * rivet/packages/formbroker/formbroker.tcl: fixed
    bug in method response. Package version number
    bumped up to 1.0
    * doc/xml/formbroker.xml: first draft of the
    manual page of package formbroker with example
    of implementation of a validator
    * doc/xml/commands.xml: fixed type in page
    of ::rivet::xml

2016-11-15 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.in: trimming error buffer
    to make test message matching easier
    * rivet/rivet-tcl/catch.tcl|try.tcl: better
    script evaluation is catch/try construct, complete
    error codes in case ::rivet::abort_page is to be
    handled
    * src/mod_rivet_ng/rivetCore.c: direct
    result object handling in [::rivet::inspect script]
    * try.rvt: changed test expression matching

2016-11-12 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.in: removed debugging messages,
    request handling made much simpler after
    ::rivet::inspect changed its behavior when
    a script is undefined
    * src/mod_rivet_ng/rivetInspect.c: changed 
    to an empty string the value returned when
    a configuration script is undefined
    * src/mod_rivet_ng/mod_rivet_common.c: we don't
    need to handle at C level the error handler
    and the request cleanup Tcl scritps: they are
    called from Tcl
    * src/mod_rivet_ng/mod_rivet_generator.c: removed
    code unused by this version of the module

2016-11-11 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.it: further development of the
    url processing procedures allows script level
    overriding of both request handling and error handling
    * src/mod_rivet_ng/rivetCore.c: ::rivet::inspect C code
    argument handling improved

2016-11-09 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet_common.c: the request_rec
    field to be checked in order to determine whether we
    are serving the request is 'header' non 'content_type'.
    This bug didn't surface because it's set to the same
    string when a request is handed down to the module 
    chain, but it's been around ever since.

2016-11-08 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/apache_config.c: fixed conf
    merge that didn't assign the correct cache size
    * rivet/init.tcl: fixed exception scripts checks
    * src/mod_rivet_ng/rivetCore.c: command 'parse -string'
    composes the script and calls directly Tcl_EvalObjEx
    * src/mod_rivet/apache_config.c: fixed same bug
    found in Rivet_MergeConf developing mod_rivet_ng

2016-11-07 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet_ng/rivetCore.c: changed also code
    of command ::rivet::parse, now handling the
    cache and calling directly Tcl
    * src/mod_rivet_ng/mod_rivet_generator.c: now
    calling Tcl_EvalObjEx instead of Rivet_ParseExec
    * src/mod_rivet_ng/mod_rivet_common.c: now initializing
    the thread interpreter private cache with
    the new calls to the cache handler
    * rivet/init.tcl.in: tested also call to AbortScript

2016-11-03 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet_cache.[c|h]: new file
    for the cache code created to have uniform file structure
    in order to build the module
    * src/mod_rivet_ng/mod_rivet_cache.c: completed code for cache management
    * src/mod_rivet_ng/rivetCore.c: new command ::rivet::url_script
    returns the full URL referenced script to be parsed
    subsequently
    * src/mod_rivet/mod_rivet_generator.c: we are now
    calling the cache routines, but it won't be needed any longer
    as the cache control and interaction are devolved to 
    the parse routines
   
2016-10-28 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/[lazy|worker|prefork]_mpm_bridge.c: new
    Rivet_ExecutionThreadInit unifies thread initialization
    common to each bridge
    * src/mod_rivet/apache_config.c: the Rivet_MergeConfig 
    method did not merge the cache size value
    * src/mod_rivet/mod_rivet_common.c: New function
    Rivet_ExecutionThreadInit

2016-10-24 Massimo Manghi <mxmanghi@apache.org>
    * rivet/mod_rivet_ng: new directory to develop new 
    module having a Tcl based content generation script
    * rivet/packages/formbroker/formbroker.tcl: new method
    'reset' restores a form internal status
    * rivet/rivet-tcl/try.tcl: tab expansion to fix
    indentation
    * doc/xml/formbroker.xml: add XML manual page for the
    form broker package

2016-10-20 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: new method
    'response' returns an array with the last processed response
    or an array with the defaults value

2016-10-18 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: add response copy
    and default value management
    
2016-10-17 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: add global
    quoting switch, add method for single form variable method (untested)

2016-10-15 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: add quote 
    mechanism

2016-10-12 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: removed need
    for a form_name argument. Now forms receive automatic names.
    The list of fields whose validation failed is now
    a flat list of field_name - validation_error pairs suitable
    to be put in dictionary or array

2016-10-11 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: first stable
    version of the FormBroker package. The package checks and
    validates form data stored in response array as produced
    by ::rivet::response
    * contrib/validate_mac.tcl: example of validator checking
    and mangling a network mac address. This function is meant
    to work with the FormBroker

2016-10-09 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet_generator.c: improved comments in view of
    branching for new version of content generation script
    * rivet/packages/formbroker/formbroker.tcl: inital reworking for
    a transaction type form broker and validator

2016-09-24 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/formbroker/formbroker.tcl: add proposed form broker
    * rivet/packages/dio/dio.tcl: now returning also results in a dictionary
    * rivet/packages/dio/dio_Mysql.tcl: supporting also NULL as keyword for 
    NULL values of a column
    * doc/xml/commands.xml: further elaboration of ::rivet::exit command
    by adding alink to MaxRequestsPerChild parameter in Apache docs 

2016-09-19 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet.tcl.in,rivet.tcl: fixed errors in comments

2016-09-08 Massimo Manghi <mxmanghi@apache.org>
    * tests/runtests.tcl: support for Apache 1.3 dropped. Add modules needed by
    Apache 2.4
    * tests/apachetests/apachetests.tcl: Dropped support for Apache 1.3
    * tests/shorthand.test: shorthand notation test versioning added
    * tests/virtualhost.test: removed NameVirtualHost directive no longer supported
    * tests/bailout.test: add tests for ::rivet::catch and ::rivet::try
    * tests/catch.rvt,try.rvt: script testing handling various conditions
    * rivet/rivet-tcl/url_query.tcl: add new command ::rivet::url_query
    
2016-09-07 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/catch.tcl: fixed argument management in ::catch call

2016-09-06 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/lazybridge.xml: further lazybridge documentation 
    development

2016-07-11 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form2.tcl,rivet/pkgIndex.tcl: bump up package
    form version to 2.1

2016-07-04 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: ::rivet::catch man page example corrected
    * rivet/packages/form/form2.tcl: fixed output in code for the 
    <select>...</select> form element method
    * src/mod_rivet/mod_rivet_generator.c: removed code commented away 
    * src/mod_rivet/rivetCore.c: FQ var command name 

2016-06-16 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: rephrasing the ::rivet::catch manual page

2016-03-18 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/: reverting to previous release

2016-03-17 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/tcl.m4,install-sh,ltmain.sh,libtool.m4: updating autotools 
    and libtool macros to the latest versions available

2016-02-16 Massimo Manghi <mxmanghi@apache.org>
    * src/doc/xml/lazybridge.xml: further elaboration of the lazy bridge

2016-02-05 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: removed code implmenting the old
    model of inter thread communication. This should fix the problem of
    redundant mutex/cond variable creation/destruction needed by the former
    model to avoid memory leaks

2016-02-01 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: upon process shutdown thread status 
    has to be set to 'init' to force thread exit

2016-01-25 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivetInspect.c: adding handling of the MpmBridge directive
    to the ::rivet::inspect command
    * doc/xml/lazybridge.xml: more development to lazy bridge manual page
    * rivet/packages/calendar/: preparing new version of package calendar

2016-01-19 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_lazy_mpm.c: removed unused field structures, boolean
    for process shutdown moved to process wide module status
    * doc/lazybridge.xml: started documentation of the lazy bridge

2016-01-17 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: removed variable needed only when built with
    the old thread communication model

2016-01-14 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: new communication method between bridge
    controlled Tcl threads and handler threads. This method was inspired by
    the experiment done with the lazy bridge and proved to have simpler code
    and avoids the need to rely on the handler thread memory pool that gets
    destroyed too often
    * src/mod_rivet/mod_rivet.h: removed definition specific to the worker bridge

2016-01-07 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/: fixed aimed at consistently determining the virtual host
    associated to a thread

2016-01-05 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet_generator.[h|c]: files holding the output generation
    procedures on which all the bridges rely (previously stored in mod_rivet.c)
    * src/mod_rivet/rivet_lazy_mpm.c: purged of redundant locking code and unused variables
    * src/mod_rivet/worker_prefork_mpm.c: new file with thread private data extension to
    bridge status 
    * doc/xml/internals.xml: update to amend out of date explanations

2015-12-28 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_lazy_mpm.c: fixed missing interpreter scripts initialization
    * doc/xml/internals.xml: documenting bridge interpreter accessor function 

2015-12-26 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/worker_prefork_common.c: functions common to both the prefork
    and worker bridges, but not general enough bur rather specific to the worker
    model adopted by them
    * src/mod_rivet/rivet_lazy_mpm.c: further development, now capable of serving
    rivet requests, but needs to be completed.
    * src/mod_rivet/mod_rivet_common.c: more stuff moved from mod_rivet to this file
    * src/mod_rivet/mod_rivet.h: new data organization with bridge specific thread
    private data
    * src/mod_rivet/Tclwebapache.c: API changed from Tclwebreq pointers to 
    thread private data that is supposed to store most of the thread environment

2015-12-22 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_lazy_mpm.c: taking a snapshot of the current development
    as this code proved to be quite robust when stressed using 'ab'

2015-12-20 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_lazy_mpm.c: first prototype of a threaded bridge with
    reduced start up time and thread number optimization

2015-12-15 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_lazy_mpm.c: new lazy MPM bridge with a smoother workload 
    balancing (should work better for low to middle workloads)
    * src/mod_rivet/rivet_worker_mpm.c: improved code comments
    * src/mod_rivet/mod_rivet.c: handling of mpm_bridge configuration parameter.
    New bridge module search method
    * src/mod_rivet/rivet_config.c: new MpmBridge configuration directive

2015-12-13 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: changed in order to have a better handling
    of ::rivet::exit (the call to exit( ) is now carried out from within the
    supervising thread
    * src/mod_rivet/rivet_prefork_mpm.c: Adding exit command handler
    * src/mod_rivet/mod_rivet.c: new central Rivet_Finalize method that calls
    any bridge module finalization. The function deletes the thread key to
    access private data

2015-12-08 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml,asciiglyphs.tcl: adding documentation for ::rivet::try
    and AsciiGlyphs

2015-12-06 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/asciiglyphs.tcl: Package HexGlyphs renamed as AsciiGlyphs

2015-12-05 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/try.tcl: new command ::rivet::try wraps core
    same command to trap ::rivet::abort_code and ::rivet::exit interruptions
    * src/mod_rivet/rivetCore.c: removed semicolons in macro CHECK_REQUEST_REC
    calls
    * rivet/rivet-tcl/catch.tcl: using [uplevel] to control Tcl core [catch] 
    command (as it's been customary with Tcl ever since)

2015-12-03 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/internals.xml: explaining the MPM bridge jump table
    * doc/rivet.css: changing colors adopting 2.3 style temporarily
    * doc/images: new images with new colors
    * doc/xml/intro.xml,install.xml: removing reference no longer
    valid for version 3.0
    * packages/hexglyphs/hexglyphs.tcl: new glyphs for more punctuation
    characters

2015-11-27 Massimo Manghi <mxmanghi@apache.org>
    * VERSION,configure.ac: Major version number increased to 3.0.0

2015-11-25 Massimo Manghi <mxmanghi@apache.org>
    * src/rivet.h: defined RIVET_CMD_EXPORT as wrapper to Tcl_Export
    * tests/bailout.test: redirect.test renamed as bailout.test. It's meant
    to gather all the tests concerning exceptions like abort_page and ::rivet::exit
    * src/librivet/rivet[Crypt|WWW|List].c: command export mechanism changed
    as we are now explicitly exporting commands
    * rivet/rivet-tcl/catch.tcl: new (non-exported) command ::rivet::catch
    * rivet/init.tcl[.in]: command export mechanics changed
    * src/mod_rivet/rivetCore.c: command export made explicit through RIVET_CMD_EXPORT.
    Abort page command now handling also [::rivet::abort_page -exiting] test

2015-10-27 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl.in: actually was this file that had to be changed

2015-10-22 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl: now renaming the [exit] core command into ::Rivet::tclcore_exit
    and replacing with a Tcl scripts that calls ::rivet::thread_exit
    * rivet/packages/hexglyphs/hexglyphs.tcl: package generating ASCII 
    glyphs of hexadecimal characters and punctuation character : and -

2015-10-18 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: returning HTTP_INTERNAL_SERVER_ERROR
    to requests coming in during a process shutdown. This is required
    by the exit command handling
    * src/mod_rivet/mod_rivet.c: changed some log message calls
    in order to have ap_log_rerror when an error occurs during
    a request processing 

2015-10-17 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c,rivet_prefork_mpm.c,mod_rivet.c:
    bridge jump table macro definition

2015-10-14 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/hexgliphs/hexgliphs.tcl: new package HexGliphs
    to print hexadecimal character gliphs as ascii art

2015-10-04 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.c: moving Rivet_ProcessorCleanup in 
    mod_rivet_common.c
    * src/mod_rivet/mod_rivet.h: add exit status code to
    thread private data
    * src/mod_rivet/mod_rivet_common.c: Rivet_ProcessorCleanup now
    in this file
    * src/mod_rivet/rivet_worker_mpm.c: thread exit handling
    now calling the finalize handling function. Functions naming
    scheme reformed. Since the exit_thread command forces
    the whole child process to exit the check on the thread
    counter in the supervisor thread was changed as the thread
    executing thread_exit brings about can't exit before
    the supervisor itself terminates
    * src/mod_rivet/rivet_prefork_mpm.c: function naming scheme
    changed.

2015-09-04 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_prefork_mpm.c: fix message severity
    in finalize method
    * src/mod_rivet/rivet_worker_mpm.c: passing actual error
    code to log message if thread join fails

2015-08-30 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.c: bringing the request type check
    back to Rivet_Handler shook quite a bit the build process as
    it required to create a new file rivet_types.h to store
    various definitions 
    * src/mod_rivet/TclWebapache.c: changed definition of
    TclWeb_InitRequest. The thread private data must have
    stored the whole request processing status
    * src/mod_rivet/rivet_prefork_mpm.c: Request type check moved
    to mod_rivet.c (Rivet_Handler)
    * src/mod_rivet/rivet_worker_mpm.c: Request type stored
    now in the request private data
    * src/parser/parsePkgInit.c: was still including config.h
    instead rivet_config.h. Add mandatory Apache standard 
    copyright statement
    * src/mod_rivet/mod_rivet_common.c: Rivet_CheckType 
    definition changed to return a rivet_req_ctype value
    * src/mod_rivet/rivet_types.h: add new file with
    definition used by various files that don't need mod_rivet.h
    * src/mod_rivet/apache_request.h: removed definition that
    went into rivet_types.h
    * src/Makefile.am: libparser needed to have also LDFLAGS
    to build correctly
    * src/rivet.h: ASF copyright statement, including also
    rivet_types.h
    
2015-08-18 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.[c|h]: now calling MPM through
    a bridge_jump_table structure with all the functions exported
    by a bridge implementation. Created default exit handler
    so that only if a special exit handler is needed it has
    to be defined
    * src/mod_rivet/rivet_worker_mpm.c: exporting through
    the bridge_jump_table the names of bridge functions
    * src/mod_rivet/rivet_prefork_mpm.c: export of the
    bridge function through the jump table. Removed the
    empty server init function (it's field in the jump
    table set to NULL). Removed exit handler (we rely on
    the default exit handler)
    * src/mod_rivet/rivetCore.c: using the jump table
    to call the exit handler

2015-07-15 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: when thread private data
    are released the correponding pointer is set to NULL in APR 
    threadkey database. It turned out a thread pool is very often
    deleted and data allcoated from it invalidated
    * src/mod_rivet/mod_rivet.c: handler private data key is
    now local to rivet_worker_mpm.c

2015-07-07 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: hopefully a method to 
    determine the thread id portable across Apache versions

2015-06-30 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: thread id determination 
    method changed to support Apache 2.2

2015-06-28 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.c: fixed errors in comments
    * src/mod_rivet/rivet_worker_mpm.c: Binding release of mutex and
    condition variable to MPM thread pool cleanup, hopefully fixing
    this potential memory leak

2015-06-21 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: add creation of config variable RIVET_CONFIGURE_CMD
    * src/mod_rivet/mod_rivet_common.c: add RIVET_CONFIGURE_CMD handling
    in 'server' array

2015-06-06 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: found a solution for determining
    the current thread pool. Mutex and cond variable are allocated from it
    but never destroyed. Still have to understand if letting the pool go
    is enough for a clean deletion of them
    * src/mod_rivet/rivetInspect.c: a pesky 'static' declaration of
    a local variable was still existing and under intense request firing 
    threads stumbled on it.

2015-06-03 Massimo Manghi <mxmanghi@apache.org>
    * doc/rivet.css: changing selector for namespace table as DocBook
    seems not to honor the id attribute anymore
    * doc/xml/request.css: changing the id "namespaces" as class

2015-05-25 Massimo Manghi <mxmanghi@apache.org>
    * src/Makefile.am: disabled build of aprthread experimental bridge 
    * src/mod_rivet/mod_rivet.h: introduced opaque datatype mpm_bridge_status
    and removed bridge specific variables from mod_rivet_globals. 
    * src/mod_rivet/mod_rivet.c: removed handling of bridge specific status
    * src/mod_rivet/rivet_worker_mpm.c: devolving to this file all the handling
    of its internal status
    * src/mod_rivet/rivet_prefork_mpm.c: changes imposed by modification
    of the APIs and also new responsabilities devolved to Rivet_CreatePrivateData.

2015-05-21 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_prefork_mpm.c: child processes created by fork calls
    inherit an interpreter that needs to import the ::rivet namespace when
    configured that way

2015-05-19 Massimo Manghi <mxmanghi@apache.org>
    * src/rivet.h: macro THREAD_PRIVATE_DATA now simply casts ClientData
    pointer to a rivet_thread_private pointer
    * src/mod_rivet/mod_rivet.h: type vhost_interp renamed as rivet_thread_interp
    * src/mod_rivet/mod_rivet.c: Server root interpreter not initialized
    with mod_rivet core as it's pointless to have the rivet commands
    for a ServerInitScript. Rivet core deferred to child process initialization
    for the same interpreter when the OS supports the fork system call, thus
    to rivet_prefork_mpm.c. Changed argument list of Rivet_PerInterpInit in 
    that the function handles a whole rivet_thread_interp object.
    New function Rivet_RunServerInit controls and runs ServerInitScript.
    Thread private key creation devolved to child process initialization
    * src/mod_rivet/rivet_prefork_mpm.c: Rivet_MPM_ServerInit emptied
    Rivet core commands initialized in Rivet_MPM_ChildInit 
    * src/mod_rivet/rivetCore.c: removed dependence from rivet_interp_globals,
    status devolved to rivet_thread_private as it's thread specific not
    interpreter specific. Pointer to the rivet_thread_private cast as
    client data when core commands are create calling Tcl_CreateCommand (see
    macros THREAD_PRIVATE_DATA and RIVET_OBJ_COMMAND)

2015-05-18 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet_common.c: fixed call to apr_palloc which
    allocated dirty ram, changed as apr_pcalloc

2015-05-15 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.h: further reorganization removes duplication
    of status variables between rivet_thread_worker and rivet_interp_globals
    * src/mod_rivet/rivetCore.c: completed transition from interpreter globals
    to thread private data which now stores per request status 
    * src/mod_rivet/mod_rivet.c: removed globals variable initialization
    * src/mod_rivet/TclWebapache.c: charset determination stored now done in
    TclWeb_InitRequest

2015-05-14 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.h: removing redundant variable from handler_private
    structure
    * src/mod_rivet/rivet_worker_mpm.c: removing unnecessary call to
    TclWeb_InitRequest which is called in Rivet_SendContent.    

2015-05-12 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.[c|h]: moving some request processing status
    objects (request_rec, TclWebapache etc) from the interpreter
    globals (mod_rivet_globals) to the thread private data (rivet_thread_private)
    * src/mod_rivet/rivet_[prefork|worker]_mpm.c: Rivet channel creation
    is now removed from Rivet_CreatePrivateData, Private data
    must be allocated indipendtly from the RivetChannel
    * src/mod_rivet/rivetCore.c: setting up status variables storage 
    transition from mod_rivet_globals to rivet_thread_private
    * src/rivet.h: Rivet command macro changed to accept a new
    argument to be passed to a command implementation as ClientData.
    Currently the value passed must be the pointer to the thread private
    data
    * src/mod_rivet/mod_rivet_common.c: New function Rivet_ReleaseChannel
    and initialization of status variables moved to thread private data
    * src/mod_rivet/rivetCore.c:
    changes needed after we moved to rivet_thread_private fields
    driven by C code implementing ::rivet::abort_page.
    Adding bridge name to server array variables.
    * src/librivet/rivetCrypt.c:
    * src/librivet/rivetWWW.c:
    * src/librivet/rivetList.c:
    * src/parser/parserPkgInit.c: Changing command creation macro
    to follow new 3 arguments form

2015-05-05 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.c: porting error and 
    abort_page handling implemented in branches/2.2 (fixes bug #57501). 
    * src/mod_rivet/mod_rivet.h: abort_page related fields
    moved to rivet_thread_private from interpreter globals
    
2015-04-16 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/rivet_worker_mpm.c: now we assume thread private data
    exist already
    * rivet/init.tcl.in,rivet/init.tcl: new method Rivet::exit now
    replaces Tcl ::exit and calls ::rivet::exit_thread which has 
    an implementation in the MPM bridges 
    * docs/xml/install.xml: removed documentation for obsolete
    configure switch --with-apache-version

2015-03-28 Massimo Manghi <mxmanghi@apache.org>
    * src/mod_rivet/mod_rivet.[c|h]: moved Tcl panic procedure data from
    mod_rivet_globals to rivet_thread_private
    * src/mod_rivet/mod_rivet_common.[c|h]: new procedure Rivet_SetupTclPanicProc
    and Rivet_PanicProc fixed to handle thread private data to get valid
    and thread safe information about the module status. New procedure
    Rivet_CreatePrivateData should provide a common method for all bridges
    to create thread private data
    * src/mod_rivet/rivet_[prefork|worker]_mpm.c: exploiting
    Rivet_CreatePrivateData and Rivet_SetupTclPanicProc makes code
    more localized, removes redundancy and improves readability

2015-03-18 Massimo Manghi <mxmanghi@apache.org>
    * INSTALL: update installation and configuration examples

2015-03-11 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/internals.xml: Improved paragraph on how to extend mod_rivet
    * src/apache-2/mod_rivet.c: Improper handling of 'HTTP_NOT_FOUND' and
    HTTP_INTERNAL_SERVER_ERROR caused mod_rivet to access a non existing 
    memory location (Bug #57686)

2015-02-20 Massimo Manghi <mxmanghi@apache.org>
    * INSTALL: updating examples and version
    * src/mod_rivet/mod_rivet.c: Restoring usual Rivet/VERSION signature

2015-02-07 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/: removed, now maintained only in branches/2.2
    * src/mod_rivet: new directory with code for MPM aware mod_rivet
    * src/experimental: removed

2015-02-03 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivet_worker_mpm.c: assigning to base server interpreter
    the channel referenced in private->channel (was dangling and caused segfaults)

2015-02-02 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivet_worker_mpm.c: removing commented code and adding
    new function Rivet_MPM_Shutdown aimed at forcing ancillary thread to exit
    * src/experimental/rivetCore.c: in Rivet_Parse returned value of 
    Rivet_ParseExecFile is propagated up to the caller. Probably unnecessary
    now, but just in case we want to have special handling of TCL_CONTINUE or
    TCL_BREAK
    * src/experimental/mod_rivet.c: moving call to after_every_script out
    of Rivet_ParseExecFile and into Rivet_SendContent. Any call to 
    ::rivet::abort_page is now trapped by abort_script
    * src/experimental/TclWebapache.c: if charset is set in the configuration
    then it's set in the headers just before HTTP headers are sent (moved
    from mod_rivet.c

2015-01-19 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: Channel ref count fixed

2015-01-13 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c,mod_rivet_common.c: improved some comments
    * rivet_worker_bridge.c: fixed channel wrong handling 

2015-01-12 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c,mod_rivet_common.c,rivet_[prefork|worker]_bridge.c: fixed
    various bugs with separate channel handling
    * tests/channel.test,channel.tcl: adding test for SeparateChannels 

2015-01-11 Massimo Manghi <mxmanghi@apache.org>
    * tests/redirect.test,redirect.rvt: adding test for command ::rivet::redirect

2015-01-08 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivetInspect.c: add SeparateChannels directive introspection
    * doc/xml/command.xml,directives.xml: add explanation of new command
    ::rivet::redirect and new directive SeparateChannel

2015-01-06 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: handling separate_channels flag for virtual host
    private Rivet Channels
    * src/experimental/mod_rivet_common.c: new function Rivet_CreateRivetChannel
    * src/experimental/apache_config.c: Conf directive SeparateChannels
    * src/experimental/rivet_worker_mpm.c,rivet_prefork_mpm.c: Channel creation code
    moved to mod_rivet_common.c
    * configure.ac: apache utils configuration split from APR configuration
    * Makefile.am: new symbols APU_INCLUDES and APU_LDFLAGS

2014-12-21 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/redirect.tcl: passing a meaningful dictionary as error descriptor
    * src/experimental/rivetCore.c: supporting also method 'get'
    * src/experimental/Tclwebapache.c: new function TclWeb_OutputHeader[Get|Set] to
    explicitly suggesting they are accessing the output headers

2014-12-17 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivetCore.c: new 'headers sent' introspection command to
    understand whether headers have been sent already
    * rivet/rivet-tcl/redirect.tcl: command didn't fail with a meaningful message
    if headers had been sent already because of ::rivet::no_body that blocks output
    to the socket. The procedure now returns an error if ::rivet::headers sent 
    returns 1

2014-12-16 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: bumping version number to 2.3.0
    * rivet/init.tcl: recreated by automake
    * rivet/rivet-tcl/redirect.tcl: add new command ::rivet::redirect
    * src/experimental/mod_rivet.c: Tcl_Flush call moved from Rivet_ExecuteAndCheck to 
    the very end of Rivet_SendContent, also TclWeb_PrintHeader is now unique just before
    the I/O buffer is flushed

2014-12-06 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c,src/apache-2/mod_rivet.c: Rivet init package bound to
    be $(RIVET_MAJOR_VERSION).$(RIVET_MINOR_VERSION) and defined in autotool variable
    INIT_VERSION (to be transformed into RIVET_INIT_VERSION for C code includes)
    * rivet/rivet-tcl/read_file.c: argument lists admit a variable number of extra arguments
    to be evaluated as argument of 'fconfigure' call
    * configure.ac: Macro symbol TCL_PACKAGE_VERSION renamed as INIT_VERSION

2014-11-28 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: Rivet channel is set as stdout and as such is released
    when its refCount drops below 2. Therefore we cannot unregister it for each interpreter
    unless we remove it as stdout when terminating the thread just before unregistering
    the channel and deleting the intepreters

2014-11-05 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: fixed wrong call to Tcl_GetString passing a void argument
    that actually wasn't a Tcl_Obj pointer

2014-10-28 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form2.tcl: how comes the method 'file' emits the same output of method
    email and nobody noticed it?

2014-10-06 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: handling exception generated by ::rivet::exit_thread
    * src/experimental/rivetCore.c: adding experimental ::rivet::inspect exit form for
    detection of ::rivet::exit_thread call
 
2014-09-29 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: adding mpm_exit_handler function pointer handling. Completed 
    draft solution for RivetUserConf directives. Scripts cannot be cached though and the whole
    mechanism has to be redesigned
    * src/experimental/rivetCore.c: Add new command ::rivet::exit_thread
    * src/experimental/rivet_prefork_mpm.c,rivet_worker_mpm.c: add function for mpm_exit_handler
    hook definition

2014-09-26 Massimo Manghi <mxmanghi@apache.org>
    * tests/apachetest/apachetest.tcl: phasing out TclX calls as the web server seems not to respond
    to QUIT signals sent by Tclx's kill. Likewise in apachetcl the httpd binary is used to control
    execution

2014-09-26 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: Add user scripts handling. Fixed bug in per dir and per user
    scripts when virtual interpreters are off.
    * src/experimental/mod_rivet.h: add macros for user configuration flags handling
    * src/experimental/apache_config.h: add user configuration handling
    * tests/inspect.test: trimming tests in order to make them independent for the final CR. 
    Carriage returns should now be appended when needed
    * tests/virtualhost.test: adding returned string space class character trimming
    * tests/rivet.test: changing localhost into 127.0.0.1 as it breaks in certain cases
    
2014-09-08 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: handling per dir configurations that have no Rivet directives
    in them, thus leaving the 'path' field NULL.
    * src/experimental/TclWebapache.c: reenabling CACHE_SIZE and CACHE_FREE in the environment
    array

2014-09-07 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.h: add field path to rivet_server_conf. This field carries
    a copy of the 'path' field in cmd_parms. This field is NULL for global and <VirtualHost>
    sections whereas for <Directory> sections points to the argument (the pattern matching
    a certain directory)
    * src/experimental/mod_rivet.c: handling of rdc->path to store configuration scripts
    * src/experimental/rivet_prefork_mpm.c: defining request_init and request_cleanup in the
    thread private data
    * src/experimental/apache_config.h: handling of the path field in rivet_server_conf

2014-09-05 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/apache_config.h: removed handling of lines unneeded by this version of mod_rivet
    * src/experimental/rivet_worker_mpm.c:
    * src/experimental/rivet_aprthread_mpm.c: 
    * src/experimental/rivet_prefork_mpm.c: moving reference to configurations
    scripts into their new location on rivet_thread_private
    * src/experimental/mod_rivet.h: running_scripts object defined to store running configurations 
    script wrapped in Tcl_Obj instances and allow construction of database of Tcl scripts bound
    to per-directory configuration. Adding variables for storing running configuration in rivet_thread_private.
    Configuration records now store references to pristine char* buffers for scripts
    * src/experimental/mod_rivet.c: changed referenced to configured scripts to their new location,
    removed redundant calls to Rivet_GetConf. Configuration is now built and stored in thread private data
    * src/experimental/rivetInspect.c: code in Rivet_ReadConfParameter adapted to reflect changes
    in configuration record definitions

2014-08-31 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivet_prefork_mpm.c: removing commented code
    * src/experimental/mod_rivet.c: removing unnecessary Tcl mutex declaration
    * src/experimental/mod_rivet.h: adding new aggregate structure for conf scripts

2014-08-29 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: added control on Tcl object stored in the variable auto_path and duplicate
    it in case it's shared. Removed callback to Rivet_ProcessorCleanup: this call back is called by APR
    in a thread different from the one that allocated a specific private data record. Thus Tcl thread specific
    data cannot be released consistently when calling Tcl_DeleteInterp. 
    * src/experimental/rivet_worker_mpm.c: request_init and request_cleanup made thread private. Supervisor
    wait time definition moved here. 

2014-08-27 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.h: request_init and request_cleanup moved from static into rivet_thread_private
    * src/experimental/rivet_aprthread_mpm.c,rivet_worker_mpm.c: request_init and request_cleanup are initialized
    during thread private data set up

2014-08-19 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: mutex serializing request processing now controlled by 
    RIVET_SERIALIZE_HTTP_REQUEST. 
    * src/experimental/mod_rivet.h: mutex req_mutex conditional to definition of RIVET_SERIALIZE_HTTP_REQUESTS.
    Also defined macro HTTP_REQUESTS_PROC macro to protect execution of code by module_globals->req_mutex
    * src/experimental/rivet_aprthread_mpm.c: new simplified bridge rivet_aprthread_mpm.c which creates
    Tcl interpreters within thread private data.
    * configure.ac: introducing HTTP_REQUESTS_MUTEX for handling of request serialization

2014-08-18 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: fixed old symbols now renamed as 'module_globals'

2014-08-16 Massimo Manghi <mxmangho@apache.org>
    * src/experimental/mod_rivet.c: reinstated big mutex aroud Rivet_SendContent (where originally 
    Tcl_Mutex lock/unlock were called. The module is usable but way too slow wrt prefork because
    of the locking
    * configure.ac,src/apache-2/Makefile.am: fixed mismatch between symbols 

2014-08-15 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: Tcl protecting mutex localized in order to restrict as much as possible
    the protected code and reduce the size of the bottleneck. Still, this is not OK and the current implementation
    is going to be kept to provide functionality of mod_rivet with the worker MPM. We have to explore
    the possibility of calling directly Tcl threading functions.

2014-08-14 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: implemented automatic bridge load mechanism.
    * src/experimental/rivet_worker_mpm.c: starting maximal number of threads (as per mpm_worker configuration)
    * configure.ac: automated parameters when build experimental module.

2014-08-12 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivet_[prefork|worker]_mpm.c: bridges integrated. Removed substantial code
    from rivet_prefork_mpm.c and merged with the current approach handling hosts interpreters using
    vhost_interp objects and storing everything in a child process/thread private data
    * src/experimental/apache_config.[c|h]: eventually these files had to be copied here from common
    and modified to reflect the new model for handling server records
    * src/experimental/mod_rivet_common.c: same for this file
    * src/experimental/mod_rivet.c: further generalization of the code to provide consistent
    support for the bridges. Adding a new hook for mpm_master_interp, a function implemented by
    a bridge responsible for returning the child process/thread master interpreter.

2014-08-11 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivet_worker_mpm.c: redesigning virtual hosts resource management for threads
    * src/experimental/mod_rivet[c|h]: implementing thread private interpreters management
    * src/experimental/rivetCore.c,rivetInspect.c: I had to move here these files as some API has changed
    and perhaps it's better if we stick into the interp globals a reference to the thread private data

2014-08-10 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/rivet_prefork_mpm.c: handling also server initialization
    * src/experimental/rivet_worker_mpm.c: doing server initialization from the threaded MPM perspective
    * src/experimental/mod_rivet.c: server initialization loads symbols from the bridge module and
    then defers the initialization task to the specific bridge.

2014-08-09 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: Various functions moved to src/common/mod_rivet_common.c
    * configure.ac: --with-rivet-core switch simplified
    * Makefile.am: preparing for installation of MPM bridges which have not to be scanned for Tcl packages
    * NOTICE: now Apache policy compliant
    * src/apache-2/Makefile.am: reenabled and reworked to make paths relative
    * src/apache-2/mod_rivet.h: reworked to reflect the new code organization. Also some definitions
    moved here from mod_rivet.c
    * src/common/mod_rivet_common.c: this is now the place where mod_rivet implementation independent
    function must go
    * src/experimental/Makefile.am: adding build for rivet_prefork_mpm.so
    * src/experimental/mod_rivet.[c|h]: placing here only the hopefully necessary code. The module
    resolves the bridge module symbols and actually calls those function to initialize, respond to 
    requests and exit child processes
    * src/experimental/rivet_prefork_mpm.c: first sccessful implementation of the prefork bridge
    * src/experimental/rivet_worker_mpm.c: stuffing code into this module. It doesn't build now
    * src/common/mod_rivet_common.h: definitions for functions stored here. 

2014-08-05 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/Makefile.am: build of mod_rivet moved again into the directory containing the code
    * configure.ac: new symbol RIVET_SOURCE_BASE pointing to <rivet-root>/src/, various fixes, 
    generation of Makefile.in in both src/apache-2 and src/experimental
    * src/Makefile.am: still keeping here the magic symbols triggering build of librivetparser and librivet
    build of mod_rivet moved in src/apache-2 and experimental
    * src/experimental/mod_rivet.c: dynamic object load implemented for rivet_mpm_worker. Code handling
    Tcl threads moved to this new shared lib
    * src/experimental/rivet_worker_mpm.c: this file keeps the whole mechanics of handling APR threads
    running Tcl interpreters
    * src/experimental/mod_rivet.h: new fields added to module globals for function pointers to 
    rivet_worker_mpm.so
    * tclconfig/: new version of scripts

2014-08-04 Massimo Manghi <mxmanghi@apache.org>
    * src/common: renaming src/config to a more specific name

2014-07-31: Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.[c|h],rivetChannel.c: better implementation where Tcl interpreters are 
    running within their own threads communicating to a supervisor. Also implemented APR callback functions
    to cleanup memory and interpreters data
    * src/config/parse_exec.c: adding this file which is to hold most of model independent code: 
    Rivet_ParseExecFile, Rivet_chdir_file, Rivet_CheckType, Rivet_ParseExecString
    * src/apache-2/mod_rivet.c: Removed code to be common to the experimental module
    * src/Makefile.am: now compiling also new files needed to build the module.
    * src/rivet.h: adding preprocessor checks to avoid recursive includes

2014-07-14 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental/mod_rivet.c: working toy module capable of running Tcl scripts with a worker MPM
    * src/experimental/rivetChannel.c: now depending on the thread private data

2014-07-17 Massimo Manghi <mxmanghi@apache.org>
    * src/channel/rivetChannel.[c|h]: add preprocessor symbol to prevent multiple includes

2014-07-16 Massimo Manghi <mxmanghi@apache.org>
    * src/experimental: add experimental code for threaded module

2014-07-10 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/apache_config.[h|c]: moved to src/config
    * src/apache-2/TclWebapache.c: this file moved temporarily into src/config to separate it from
    the specific module implementation
    * src/experimental: making room to a new implementation of mod_rivet
    * src/channel/rivetChannel.c: the request_rec pointer is passed through another pointer
    as this channel is now the only channel handled by mod_rivet and it's shared across virutal hosts
    * src/apache-2/mod_rivet.c: now creating only one Rivet channel instance and storing a pointer
    to the current request_rec in the structure mod_rivet_globals, as the running the prefork MPM
    we can only handle a request at a time.
    * src/apache-2/*.tcl: removing obsolete tcl files

2014-07-09 Massimo Manghi <mxmanghi@apache.org>
    * m4/ax_split_version.m4: adding macro for version number manipulation

2014-06-22 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: new macros MOD_RIVET_CORE and RIVET_CHANNEL. Macro APACHE_VERSION preserved but not 
    called anymore
    * rivet/init.tcl.in: Add template for rivet/init.tcl
    * src/Makefile.am: building mod_rivet with code entirely selected by autoconf defined symbols
    * src/apache-2/mod_rivet.c: comments added. Rivet package version depends now on preprocessor
     symbol RIVET_TCL_PACKAGE_VERSION

2014-06-10 Massimo Manghi <mxmanghi@apache.org>
    * tests/rivet.test: removed lang.test as it was testing just a tautology

2014-06-04 Massimo Manghi <mxmanghi@apache.org>
    * doc/images/color-table.png, doc/xml/examples.xml,doc/examples/color-table-tcl: Changing old table.rvt
    example in a more enticing colorful table generation

2014-06-03 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/intro.xml: Acknowledgements reworded into a list
    * doc/images/: logo has now a transparent background, navigation icons colors turned into a greenish tint
    * rivet.xsl,rivet.css: new style based on a green gamut to make pages visually different from Rivet 2.1

2014-06-02 Massimo Manghi <mxmanghi@apache.org>
    * VERSION,configure.ac: tagging this code as 2.2.0
    * src/rivet.h,src/rivetcmds/rivetCore.c: macro CHECK_REQUEST_REC moved from rivetCore.c to rivet.h
    * doc/xml/internals.xml: New section documenting how to extend mod_rivet with new commands written in C

2014-05-22 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/aida.sql: redifining responsability of class Aida (not to be officially released)

2014-04-17 Massimo Manghi <mxmanghi@apache.org>
    * src/: reintegrating modularization branch. Now every subsystem mod_rivet is made of (module, 
    channel, parser, commands, request multipart handling) can be developed separately
    * src/rivetcmds/rivetCore.c: reintroduced handling of the -string argument that disappeared 
    from Rivet_ParseCmd probably because of the merge with modular.
    * src/apache-2/mod-rivet.c: Corrected comments to Rivet_ParseExecString

2014-04-16 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/aida.tcl,dio_Tdbc.tcl,sql.tcl: more methods implemented in aida.tcl
    * doc/xml/commands.xml: new form '::rivet::inspect server' documented
    * src/rivetcmds/rivetInspect.c: adding is_virtual flag to dictionary returned by '::rivet::inspect server'
    * branches/modular: merging latest changes in trunk
    * trunk/src/rivetcmds/rivetInpect.c: adding is_virtual flag to dictionary returned by '::rivet::inspect server'

2014-04-11 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetcmds/rivetCore.c: misplaced check on request_rec in Rivet_InspectCmd
    * tests/failtest.tcl,failtest.test,checkfail.tcl: adding tests for ::rivet::inspect

2014-04-07 Massimo Manghi <mxmanghi@apache.org>
    * tests/failtest.[test|tcl],failcheck.tcl: implementing test for consistent error
    handling by commands that are supposed to refuse execution outside of a request processing
    * tests/inspect.tcl: implementing test of command '::rivet::inspect script'
    * src/rivetcmds/rivetCore.c: typo in command ::rivet::apache_table

2014-04-04 Massimo Manghi <mxmanghi@apache.org>
    * tests/failtest.tcl,failtest.test,checkfail.tcl: adding script for commands that must fail
    outside of a request processing (to be completed)
    * src/rivetcmds/rivetCore.c: comment rephrased

2014-03-30 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetcmds/rivetInspect.c: Add function Rivet_CurrentServerRec returning a dictionary of
    some field values stored in the server_rec object
    * src/rivetcmds/rivetCore.c: Add support for 'server' argument returning the dictionary built
    by Rivet_CurrentServerRec
    * src/TclWeb.h: adding declaration of function constructor of a TclWebRequest object
    * src/apache-2/TclWebapache.c: Add functions TclWeb_NewRequestObject and TclWeb_InitRequest to
    reinitialize a TclWebRequest object on each request
    * src/apache-2/apache_request.[c|h]: API change for ApacheRequest_new taking now an apr_pool_t
    object instance for creating an ApacheRequest oject pointer. Task to reset this object
    to initial values is now delegated to ApacheRequest_init.
    * src/apache-2/mod_rivet.[c|h]: new field in globals stores the current server_rec object pointer.
    This pointer is used in RivetInspect.c to access to field of the object for introspection
    
2014-03-26 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: wrong example for lassign_array corrected
    * src/apache-2/mod_rivet.c: Adding comment explaining the meaning of setting/resetting globals->r as
    a way to detect if a script is running in the context of a request processing
    * src/rivetcmds/rivetCore.c,rivetInspect.c: Tcl object handling improved. Code simplified and
    ap_assert call added in Rivet_CurrentConfDict if there is no handling of a configuration parameter
    by Rivet_ReadConfParameter (which should never happen)
    * configure.ac, VERSION: version number bumped to 2.1.5

2014-03-16 Massimo Manghi <mxmanghi@apache.org>
    * doc/images/Rivetlogo_small.png: removed because already in doc/ and duplicate to home.png

2014-02-28 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/upgrading.xml: Adding Karl's note about upgrading from NeoWebScript

2014-02-24 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: completed reworking of manual page for command ::rivet::inspect.
    * .: Preparing RC1 archive for version 2.1.4
 
2014-02-22 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: further elaboration of the section about command ::rivet::inspect

2014-02-21 Massimo Manghi <mxmanghi@apache.org>
    * tests/inspect.[test|tcl]: adding tests for introspection command

2014-02-19 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetcmds/rivetCore.c: spurious ref count decrement caused random crashes
    * src/rivetcmds/rivetInspect.c: fixed behaviour when inspect is passed with an undefined argument value
    * configure.ac: reindented some function to improve readability and editor independence

2014-02-19 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetcmds/rivetInspect.c,src/librivet/rivetList.c: removing lines of code commented and unused
    * doc/xml/commands.xml: documenting command lremove 
    * tests/rivetlib.test: adding more tests for lremove

2014-02-11 Massimo Manghi <mxmanghi@apache.org>
    * tests/rivetlib.test: adding tests for rivetlib
    * rivet/packages/dio/aida.tcl,sql.tcl: new files for development of DIO compatible interface to tdbc
    * rivet/rivet-tcl/lassign_array.tcl: removed since already provided in rivetlib
    * docs/xml/commands.xml: documenting features of lassign_array.tcl rivetlib version 

2014-02-06 Massimo Manghi <mxmanghi@apache.org>
    * ChangeLog: timestamps of latest entries of this file carried the wrong year (2013)
    * rivet/packages/dio/dio_Mysql.tcl: fixed comment lines placed within the switch construct
    that have become incompatibile with Tcl8.6. 
    * configure.ac: add AC_C_INLINE macro

2014-02-04 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetcmd/rivetCore.c: testing globals->r against NULL and in case return a null string
    * src/apache-2/mod_rivet.c: using only globals->r to flag a request processing under way
 
2014-02-03 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: globals->req had to be set to NULL in Rivet_PerInterpInit!

2014-02-02 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.[c|h]: further optimizing code avoiding to
    allocate a TclWebRequest structure on every request. This structure
    is allocate when the interpreter is initialized and a pointer
    stored in rivet globals
    * src/rivetcmd/rivetInspect.c: impoved consistence if Tcl objects handling

2014-01-30 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: this ChangeLog entry is meant to amend the
    2014-01-27 entry that missed to point out as small still important change
    in mod_rivet.c. Rivet_SendContent is not calling Tcl anymore to coax 
    command 'info script' to return the current Rivet script full path. This
    will soon be solved by adding a new functionality to command '::rivet::inspect' 
    
2014-01-27 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/apache_config.[c|h]: new file with Apache module configuration
    procedures moved here from mod_rivet.c. This code is likely to be Apache 2.x
    but totally independent from the running MPM. Therefore it was moved here
    to improved size and manageability of mod_rivet.c
    * src/apache-2/mod_rivet.c: The module central code, from which configuration
    handling procedures were removed

2014-01-08 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/aida.tcl: adding aida.tcl experimental file
    for a DIO compatible interface to TDBC. 
    * rivet/packages/dio/sql.tcl: now able to produce same basic SQL queries
    ::DIO::Database class is doing now

2013-12-19 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Postgresql.tcl: reindented and tabs converted to spaces
    * rivet/packages/dio/sql.tcl: class DIO::Sql now returning basic SELECT SQL statements

2013-12-18 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/sql.tcl: further developments. Class Sql is now able
    to build an abstract representation of a SELECT query
    * rivet/packages/dio/dio.tcl: typo in a comment

2013-12-16 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/sql.tcl: trying to redesign rivet in order to comply with
    Tdbc and aiming at making DIO a pure interface to Tdbc dropping the 
    dependency with DBMS specific drivers

2013-12-13 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Tdbc.tcl: first version of Tdbc driver for DIO. This
    class is able to execute basic queries and needs further development

2013-12-08 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: version number bumped up to 2.1.4

2013-12-06 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Postgres.tcl: minor changes (code indentation revised)
    * rivet/packages/dio/dio_Tdbc.tcl: experimental support for the tdbc
    abstraction library
    * doc/xml/install.xml: the manual still suggested to call make install-packages,
    whereas 'make install' does everything now as it was before 2.1.2

2013-12-04 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/apache_request.c: log message in ApacheRequest___parse()
    commented out (Bug #55845)

2013-12-03 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: Rivet template preprocessor symbols renamed in
    the more expressive RIVET_TEMPLATE and RIVET_TCLFILE
    * rivet/rivet-tcl/lassing_array.tcl: new command lassing_array taken
    from DIO's result set class (inspired by Tclx)
    * doc/xml/commands.xml: lassign_array documented in the manual
    * rivet/packages/dio/dio.tcl: reformatted during analysis for supporting
    tdbc based driver

2013-11-04 Massimo Manghi <mxmanghi@apache.org>
    * src/Makefile.am: this Makefile.am is now in charge for building mod_rivet
    librivet.so and librivetparser.so. This fixes and problem with the 'distclean'
    target and keeps us from further customization of automake (subdir-objects
    property)
    * src/runtests.tcl: changed path to mod_rivet.so and librivetparser.so

2013-10-15 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetcmds/rivetCore.c: 'headers redirect' used to return TCL_RETURN
    to force the caller to terminate and interrupt the processing. It didn't 
    actually worked exactly that way and starting with Tcl 8.6.1 it also failed
    returning a Tcl invalid error code (Bug #55583). Turning it into TCL_OK
    seems to cure the problem

2013-09-26 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/session.xml: fixed code example indentation
    * rivet/packages/calendar.xml: fixed class and tag for calendar banner

2013-09-23 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/calendar/calendar.tcl: fixed zero length argument list
    calling method emit

2013-09-22 Massimo Manghi <mxmanghi@apache.org>
    * modular: committing changes from last merge

2013-09-21 Massimo Manghi <mxmanghi@apache.org>
    * contrib/tcl.vim: list of subcommands completed

2013-09-20 Massimo Manghi <mxmanghi@apache.org>
    * contrib/tcl.vim: Vim's syntax highlighting extension including also
    rivet's command set (experimental)

2013-09-18 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl: removed paranoid debugging log messages

2013-09-17 Massimo Manghi <mxmanghi@apache.org>
    * src/[parser|apache-2|librivet]/Makefile.am: AM_CPPFLAGS are not
    a transparent replacement for INCLUDES at least when a Makefile.am is
    in a subdirectory. Placing include directory switches in the target
    specific <target>_CPPFLAGS variable
    
2013-09-15 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/missing: new version of 'missing' taken from automake 1.14
    * src/[parser|apache-2|librivet]/Makefile.am: depracated INCLUDES variables
    replaces with their recommended counterparts AM_CPPFLAGS
    * configure.ac: new message about the notifier failing to start in child
    processes after the child processes fork

2013-09-14 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/calendar/calendar.tcl: too restrictive test on Tcl versione fixed
    * rivet/rivet-tcl/parray_table.tcl: also the parray putting out an HTML table
    is now escaping SGML characters
    * INSTALL: new installation instruction amending the rejected installation 
    approach done in 2.1.2 and restoring old target 'install' to get everything
    moved to their final directory
    * doc/xml/install.xml: same for INSTALL
    * doc/xml/commands.xml: new 'parse -string' form documented

2013-09-13 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Mysql.tcl: attempting to correct detection of 
    SELECT query by checking if a SELECT keyword exists at the beginning of
    query either following a '(' or only space characters (their trimmed away
    in any case)

2013-08-30 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/parray.tcl: escaping SGML characters that might appear
    in the output to avoid cross scripting

2013-08-29 Massimo Manghi <mxmanghi@apache.org>
    * branches/modular: merging latest changes from trunk

2013-08-26 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: expanded warning message about broken implementations
    of Tcl when using forks and the event loop
    * Makefile.am: target 'install' now depends on targets install-binaries and
    install-packages, thus install the whole Rivet code as it did before 2.1.2.
    Packagers wanting to separated binary and Tcl code can draw on those 2 
    targets
    * INSTALL,doc/xml/install.xml: changed documentation to reflect the restored
    organization of install targets

2013-08-12 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form2.tcl,form.tcl: form packages called Rivet's command
    '::rivet::env' in its unqualified form. Fixed adding the ::rivet namespace
    specification.
    * src/apache-2/rivetCore.c: errata corrige for entry added on 2013-07-19: 
    command 'parse -string' superseded test command parsestr, thus removed from
    rivetCore.c

2013-08-07 Massimo Manghi <mxmanghi@apache.org>
    * ./: merging changes done in trunk

2013-08-07 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: adding MPM descripting fields to the 'server' array
    * configure.ac: warning message about Tcl version not supporting fork correctly
    moved to the end of configure.ac, so that it's more readable by the user

2013-08-06 Massimo Manghi <mxmanghi@apache.org>
    * rivetcmds/rivetCore.c,rivetInspect.c: moved core commands into this new directory. 
    Their code is (nearly) independent from Apache version and in future it might be shared
    between different versions/branches of the module
    * src/apache-2/Makefile.am: changed reference to rivetCore.c and rivetConf.c to 
    their new position and new names
    * src/apache-2/mod_rivet.c: conditional compilation to Tcl_InitIdentifier might
    help preserving event loop on Unices where no pthreads_atfork call exists (Bug #55153)
    * configure.ac: Tcl version checked to detect when the notifier might
    not be working (Tcl < 8.5.15 and Tcl < 8.6.1). In case a warning message is printed 

2013-07-19 Massimo Manghi <mxmanghi@apache.org>
    * tests/parse.test,parsestring.rvt: adding test for 'parse -string' variant
    to Rivet command 'parse'

2013-07-17 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.[h|c],rivetCore.c: reverting new command 'parsestr' and
    turning string parsing command into the support for the new -string modifier of the 
    ordinary parse command

2013-07-06 Massimo Manghi <mxmanghi@apache.org>
    * src/parser/parserPkgInit.c: commands are created through the RIVET_OBJ_CMD macro
    * rivet/packages/tclrivet/tclrivet.tcl: loading the rivetparser library caused 
    weird side effects and the interpreter failed when this package was required
    by a script. It's still to be understood why librivetparser was loaded using
    command 'load' in tclrivet.tcl
    * src/apache-2/mod_rivet.c: reverting an attempt to include rivetparser
    as package required by default. 

2013-07-05 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: changed the default path for installation dir 
    * doc/xml/commands.xml: add manual page for command ::rivet::xml

2013-06-28 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c,rivetCore.c: command 'parsestr' to parse templates stored
    in Tcl objects coded
    * doc/Makefile.am: 'clean' target made a little terser

2013-06-26 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am: forcing install/unistall targets to recreate pkgIndex.tcl
    in order to have a coherent directory of packages actually available

2013-06-24 Massimo Manghi <mxmanghi@apache.org>
    * INSTALL: It must be made explicit installation is a two stage operation now

2013-06-24 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/session/session-class.tcl: two new methods 'load' (loads a
    whole package data for a given package and session) and 'clear' (it deletes either 
    a whole package or a single data like for a session)

2013-06-22 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: cleanup of unused code in mod_rivet.c. Adding comments
    to undocumented functions
    * src/parser/rivetParse.c: New TODO comment added 

2013-06-12 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am: splitting install targets into 'make install' (mod_rivet.so,
    librivet.so,librivetparser.so + Tcl commands in rivet/rivet-tcl) and 
    'make install-packages' (whole content of rivet/packages), thus decoupling
    binary and non binary installs. Notice: 'make install' creates a fully
    functional install of Rivet in case packages such as 'form', 'session', 
    'DIO' aren't needed.
    * rivet/rivet-tcl/xml.tcl: Adding svn:keywords Id to svn properties
    * doc/xml/install.xml: updating manual to document the new installation command
    sequence
    
2013-06-04 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/* : merging into this branch the latest commits done from trunk

2013-06-03 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/[ltmain.sh,compile,depcomp]: more libtool scripts updated 

2013-06-03 Massimo Manghi <mxmanghi@apache.org>
    * src/parser/Makefile.am: adding include paths to INCLUDE
    * src/Makefile.am: Rivet library build moved to this script
    * src/librivet/Makefile.am: Rivet library build removed from this file
    
2013-06-02 Massimo Manghi <mxmanghi@apache.org>
    * src/Makefile.am: including librivet.so build in this file
    * src/librivet/Makefile.am: kept for reference but without effective code now
    * tclconfig/[install-sh,config.sub,config.guess]: new versions for script used by
    the autoconf/automake/libtool toolchain

2013-05-24 Massimo Manghi <mxmanghi@apache.org>
    * src/: branching trunk to branches/modular to reorganize mod_rivet in a
    way that should enable the development of single components (apache request,
    Rivet channel, parser) with minimal branching 
 
2013-05-21 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/apache_request.c: ApacheRequest___parse further simplified and
    made less restrictive about the combination of method and mimetype of the request
    * src/apache-2/mod_rivet.c: add debug message in exit handler

2013-05-06 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: call to 'panic' changed to fulfill the hardening
    flags that (quite oddly) fail when building against Tcl8.6 on some platforms
    or Linux distros

2013-04-30 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: improved entry for ::rivet::var with an explanation
    and example provided by Harald
    * configure.ac,VERSION: version number bumped to 2.1.2

2013-02-12 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: To avoid clash on freeing resources Tcl_Finalize
    is removed from child process cleanup (Bug #54162)

2013-02-11 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio.tcl: fixing nasty bug introduced with Rivet 2.1. When
    method 'store' is updating the call to method update needs a flat list as
    last argument, not just a sigle valued list argument
    * doc/xml/commands.xml: Improved explanation for command abort_page
    * src/apache-2/rivetConf.c: corrected typo in header
    * src/apache-2/apache_request.c: new handling of apache requests largely
    relaxes checks on the 'Content-Type' header (Bug #53661)

2013-02-02 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/apache_request.c,src/apache-2/mod_rivet.c: extending request
    handling also for PUT and DELETE. Applied patch provided by Jeff Lawson in
    bug report #53892 

2013-02-01 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/Makefile.am, src/Makefile.am: removed -v flag from rm command
    in install-data-hook: target to avoid incompatibility with same command's
    implementation in Solaris (Bug: #54181)

2013-01-28 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.[c|h],rivetCore.c: removed hardcoded error code 
    generated by abort_page and defined in the preprocessor symbol ABORTCODE.
    
2013-01-25 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/xml.tcl,rivet/rivet-tcl/tclIndex: New command for XML fragments
    composition

2013-01-20 Massimo Manghi <mxmanghi@apache.org>
    * Makefile.am: added removal of libool created .la files for librivetparser and
    librivet

2012-12-30 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/xml.tcl: revised command for simple XML string mark up

2012-12-18 Massimo Manghi <mxmanghi@apache.org>
    * src/librivet/rivetPkgInit.c: package version taken from preprocessor symbol
    RIVET_VERSION so that it's guaranteed mod_rivet.c will get the right library
    version.
    * src/apache-2/mod_rivet.c: removed trailing spaces from various lines (offends
    some patch management tools such as quilt)

2012-12-17 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/install.xml: fixed link to download page on the website
    * rivet/packages/dio/dio.tcl: method store uses internally methods 'insert' or
    'update' (depending on the existence of a row having the same keyfield). The
    latest version of DIO shipped a 'store' method that returns the very same value
    returned either by 'insert' or 'update'. Previous versions of DIO returned
    invariably 1, which was undocumented and not very well thought out (handled 
    errors in 'store' return a -code error, not necessarily 0). Previous behavior
    is reinstated (bug #54313)

2012-12-16 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/session/session-class.tcl: method 'store' had an hardcoded 
    'parray' the ran  when an error occurred. It also printed a message using 
    'puts' instead of 'debug' 

2012-12-15 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: command 'headers' returns a meaningful error in case
    a subcommand is invalid

2012-12-12 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: Tcl_PkgRequire for packages Rivet and rivetlib
    are exchanged so that commands in librivet.so can be imported when 
    they are on the export list and a programmer issues a 'package require 
    ::rivet' (fixes bug #54290)
    * rivet/init.tcl: this script is now providing package 'Rivet' instead of
    'RivetTcl'. init.tcl initializes the Tcl core of Rivet and a package rivet
    has to exists for compatibility with version 2.0 where it was provided 
    rather pointelessly by librivet.so.

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

2012-11-13 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/form.xml: subcommand 'checkboxes' documented

2012-11-09 Harald Oehlmann <oehhar@apache.org>
    * rivet/packages/form/form2.tcl: Checkboxes with no value and an arbitrary
    default value are initialy checked.
    *** POTENTIAL INCOMPATIBILITY ***
    The default value is not taken as checkbox value any more.
    This was IMHO a security hole.
    (reported on rivet-dev by Jeff Lawson)

2012-11-05 Harald Oehlmann <oehhar@apache.org>
    * rivet/packages/form/form2.tcl: Bug fixed: method textarea did not honor default values.
    (reported on rivet-dev by Jeff Lawson)

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 incomplete 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-16 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/directives.xml,doc/xml/commands.xml,doc/xml/install.xml,doc/xml/examples.xml,
    doc/xml/request.xml,doc/convert_examples.tcl.in,doc/examples-sgml/hello1.rvt: Trying to
    improve the manual revising and extending it

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

2012-09-30 Massimo Manghi <mxmanghi@apache.org>
    * tests/parsepackage.test: changed path to librivetparser.so

2012-09-29 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/xml.tcl: Adding command for simple quick XML fragments generation

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.

2012-09-21 Massimo Manghi <mxmanghi@apache.org>
    * doc/README: improved instruction for code examples inclusion into XML manual
    * doc/rivet-full.xml: removed

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

2012-09-17 Massimo Manghi <mxmanghi@apache.org>
    * src/librivet/rivet[Crypt|WWW|List|pkgInit].c,src/parser/rivetParser.[c|h],
    src/parser/parserPkgInit.c: files for librivet and the Rivet parser moved into 
    src/librivet and src/parser.
    * src/Makefile.am,src/librivet/Makefile.am, src/parser/Makefile.am: new automake conf files
    reflect libraries reorganization.
    * src/apache-2/Makefile.am: mod_rivet builds from the newly located parser code. Is it 
    sensible to let the module depend on a real package (provided by libparser.c)?
    * configure.ac: add variable substitution for newly created Makefile.am

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)
    * tests/shorthand.rvt: oddly enough the template output the same line twice. 

2012-09-03 Harald Oehlmann <oehhar@apache.org>
    * Thank you accepting me as committer

2012-08-19 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: the module returns now a HTTP_INTERNAL_SERVER_ERROR when a request
    namespace cannot be created

2012-08-16 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetPkgInit.c: improved namespace structure pointer handling (contributed by
    Georgios Petasis)

2012-08-15 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Oracle.tcl: fixed method makeDBFieldValue in class Oracle (Bug #53703)
 
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: 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. 
    * Changelog: entry of Aug 12 corrected: the method of Database (dio.tcl) in question was 'store' 
    not 'fetch'
    * 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 'store' 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-08-07 Massimo Manghi <mxmanghi@apache.org>
    * doc/rivet.css: text in monospace characted made a little smaller
    * rivet/packages/form/form.tcl: Workaround to avoid wrong parsing of form data when parameter
    values have spaces in them
    * src/apache-2/mod_rivet.c: 'server' array uses RIVET_VERSION instead of the lengthy RIVET_PACKAGE_VERSION

2012-07-31 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/dio/dio_Sqlite.tcl: Add search case for package sqlite3. Add method makeDBFieldValue
    to handle time and date special fields support. Add method 'quote' which overrides the same method
    in Database, as correct way to escape quotes (') characters for Sqlite is doubling them ('')

2012-07-04 Massimo Manghi <mxmanghi@apache.org>
    * doc/examples/download.tcl: The example has been having ever since an error in calling 'source' 
    instead of 'parse'. The multitude of the userbase never realized.

2012-07-03 Massimo Manghi <mxmanghi@apache.org>
    * CHANGES: file emptied from obsolete notes
    * src/apache-2/mod_rivet.c: Add UploadDirectory to the list of handled options for RivetUserConf

2012-06-27 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: Version number set as 1.2.0b1
    * rivet/packages/form/form.tcl: form package 1.0 taken from branches/2.0
    * doc/xml/commands.xml: improved page manual about incr0 being declared deprecated

2012-06-20 Massimo Manghi <mxmanghi@apache.org>
    * contrib/form.tcl: Requiring package TclOO making explicit it's needed to run this version of form.tcl

2012-06-01 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form2.tcl: New form2.tcl providing form 2.0 package (proposed name for 
    the file)

2012-05-18 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/intro.xml: add acknowledgments for contributions made by Cyril, Jeff and Harald
    * doc/xml/commands.xml: add page manual for ::rivet::inspect 
    * src/apache-2/mod_rivet.c: add handling for Debug, DebugIp and DebugSeparator in 
    user conf table.
    * rivet/rivet-tcl/debug.tcl: Array ::RivetUserConf (which is used to convey control 
    parameters for the command) is now created on demand using command ::rivet::inspect
    * doc/rivet.css: adjustments needed to make characters size consistent and nice looking

2012-05-17 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/examples.xml: "Hello World" example reworked
    * rivet/packages/dio/dio.tcl: fixed SQL syntax that would break compatibility with Oracle (fixes
    reopened bug #53222)

2012-05-15 Massimo Manghi <mxmanghi@apache.org>
    * doc/hello1.rvt: add new "Hello World!" example to explain the new shorthand syntax <?= ... ?>
 
2012-05-14 Massimo Manghi <mxmanghi@apache.org>
    * doc/rivet.xsl,doc/rivet.css,doc/images/[prev.png,next.png,up.png]: new stylesheet and icons for
    the page manual

2012-05-13 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/tclrivet/tclrivetparser.tcl: Tcl parser implements new shorthand echo syntax (closes
    bug #53217)
    * doc/xml/entities.xml: New manual page for package RivetEntities
    * rivet/packages/tclrivet/parse.tcl: auto_path handling improved (closes bug #52898)
    * rivet/packages/form/form.tcl: indentation converted to spaces to improve editing across different
    editors. Fixed problem with variable clash in constructor. Also removed unneeded [expr ...] in conditions
    that prevented byte compiling (Closes bug #52650)
    * 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 still 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)

2012-05-09 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/http_accept.tcl: new command ::rivet::http_accept 
    * doc/xml/commands.xml: new manual entry for ::rivet::http_accept 
    * doc/rivet.xml: Add new file entities.xml describing package 'RivetEntities' (only a 
    stub, to be elaborated)
    * doc/xml/entities.xml: New manual page for package 'RivetEntities'

2012-05-08 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetPkgInit.c: reinstated safe interpreters initialization
    * doc/xml/install.xml: corrections and further elaboration of explanation for
    the --disable-import-rivet-commands

2012-05-07 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: new command ::rivet::inspect implementing function
    Rivet_InspectCmd
    * src/apache-2/rivetConf.c: Ancillary functions for instrospection procedure Rivet_InspectCmd
    * src/apache-2/Makefile.am: Added handling of rivetConf.c
    * src/apache-2/mod_rivet.c: Handling of configuration directives restricted to meaningful
    options when RivetDirConf or RivetUserConf directives are set. An error message is printed
    when child process initialization directives are set by RivetDirConf and RivetUserConf.
    Rivet_PropagatePerDirConfArrays and Rivet_PropagateServerConfArray functions disabled as the
    ::rivet::inspect command can work out a better alternative creating the RivetServerConf,
    RivetDirConf and RivetUserConf on demand.
    * src/apache-2/mod_rivet.h: Added declaration for functions in rivetConf.c
    * rivet/rivet-tcl/lassign.tcl: removed, since Tcl 8.5 lassign implements and extends the
    same functionalities 

2012-04-30 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/form/form.tcl: Patch provided by Jeff Lawson to manage -label switches.
    The package now requires package uuid from Tcllib.
    * : Entry of 2012-04-07 amended as the path to mod_rivet.[c|h] was clearly wrong

2012-04-07 Massimo Manghi <mxmanghi@apache.org>
    * rivet/apache-2/mod_rivet.[c|h]: One more change to an ap_log_error call suggested
    by the compilation hardening flags

2012-03-26 Massimo Manghi <mxmanghi@apache.org>
    * rivet/packages/entities.tcl: new package RivetEntities, replacement for tcllib
    ::html::entities but with no extra dependecies (as a matter of fact it 
    works without Rivet too)

2012-03-13 Karl Lehenbauer <karl@apache.org>
    * configure.ac: Default separate virtual interps to "no".
    (--enable-virtual-interps-separation option implies disabled if not set.)
    * rivet/packages/form/form.tcl: In the forms package, stop bleeding the 
    raw value of radio buttons and checkboxes into the generated HTML.
    * src/apache-2/mod_rivet.c: Rework ap_log_error calls to include the
    mod_rivet module name.  Emit debug-level messages for successful
    execution of GlobalInitScript and ServerInitScript.
    * README.freebsd: Update to reflect the modern world.
    * README.configure: Document how to regenerate the configure script, etc.
    * tclconfig/depcomp, tclconfig/missing, tclconfig/config.guess,
    tclconfig/config.sub, tclconfig/ltmain.sh: Update from newer libtools, etc.

2012-03-08 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/,/rivet/packages/simpledb: various changes suggested by code profiler
    (thanks to Harald Oehlmann)
    * rivet/packages/tclrivetparse.tcl: wrong handling of swich cases made method 'parse'
    unusable
    * src/rivet.h: obsolete comment amended

2012-01-16 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/tclIndex.tcl: regenerated with auto_mkindex.

2012-01-15 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/parray_table.tcl: this file was erroneously introduced as
    tablearray.tcl. Renamed.
    * rivet/rivet-tcl/putsnnl.tcl: experimental putsnnl command rewritten to 
    improve features and make it more flexible by adding option for padding 
    with &nbsp; entities. 

2012-01-10 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/parray_table.tcl: New command parray_table to print the
    content of an array into an HTML table
    * rivet/rivet-tcl/putsnnl.tcl: More consistent form for 'putsnnl'. If the
    second argument is given and it's an integer then the string is at most <nchars>
    characters long. If <nchars> > [string lenghth <output_string>] then the output
    is still <nchars> wide. If <spaces> is a positive integer the string is printed 
    right-aligned, if negative the string is left-aligned

2011-12-26 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/putsnnl.tcl: Add new command 'putsnnl', a wrapper for
    'puts -nonewline' with the extra optional feature of prepending the output 
    with a definite number of spaces (it helps pretty printing of HTML)

2011-12-09 Massimo Manghi <mxmanghi@apache.org>
    * src/rivetPkgInit.c,src/parserPkgInit.c: libs now are fully based on stubs and
    the tcl version parameter passed with Tcl_InitStubs is the same Tcl version their
    linked against. Probably too strict, but a cautious point as we are moving towards
    Tcl8.6 and Tcl9, which will probably require recompilation of the whole Tcl software

2011-12-08 Massimo Manghi <mxmanghi@apache.org>
    * trunk/: Final commit merging changes to scoping commands in the ::rivet namespace

2011-12-07 Massimo Manghi <mxmanghi@apache.org>
    * doc/examples, doc/convert_examples.tcl.in: Add ::rivet namespace to examples and
    examples code converter
    * doc/examples/*.rvt: removed unneeded sgml chars escaping
    * doc/xml/install.xml: removed duplicated entry of a 'configure' switch

2011-12-06 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/tablearray.tcl: new procedure 'tablearray' prints an array content
    in an HTML <table> construct. Test procedure, we maybe want to have something more
    general for printing also dictionaries.

2011-12-06 Massimo Manghi <mxmanghi@apache.org>
    * configure_ac: add new test on Tcl version using AX_VERSION_COMPARE.

2011-12-06 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/request.xml,doc/xml/install.xml: documenting new configure switches

2011-12-05 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: child init sets also the array module_conf to signal the
    compilation flags --enable-rivet-commands-export and --enable-import-namespace-commands
    for the benefit of init.tcl
    * configure.ac: new macro created to handle --enable-rivet-commands-export and 
    --enable-import-namespace-commands
    * rivet/init.tcl: module_conf signals when commands have to be exported from ::rivet
    and when they have to be implicitly imported into the global namespace for compatibility
    with previous versions of Rivet.

2011-11-21 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/directives.xml,doc/xml/commands.xml: removed note about 'rivetlib' package
    no more needed. Notes about ServerInitScript not having effect when virtual hosts
    have their own private slave interpreters.

2011-11-20 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml,doc/xml/install.xml: documentation for building Rivet updated.
    * configure.ac: corrected help message for --disable-rivet-commands-export

2011-11-20 Massimo Manghi <mxmanghi@apache.org>
    * src/rivet.h: Macro definition for Rivet command objects has rolled back to 
    its previous form and doesn't call Tcl_Export anymore. In case commands are
    exported by calling Tcl_Export in rivetCore.c and rivetPkgInit.c
    * tests/*: test suite reviewed for new tests

2011-11-16 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: code rationalization. namespace reference will not be
    passed to the RIVET_OBJ_COMMAND macro and commands are exported by calling Tcl_Export
    on the whole command set in ::rivet. The whole process is controlled by the macro
    symbol RIVET_NAMESPACE_EXPORT 
    * src/rivet.h: only one RIVET_OBJ_COMMAND object exists now. Call to Rivet_WWWInit,
    Rivet_CryptInit and Rivet_ListInit haved changed. Rivet namespace pointer in not
    passed around anymore and it's handled only in rivetPkgInit.c
    * src/rivetPkgInit.c: 

2011-11-14 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac:  new switch --enable-rivet-commands-export to enable/disable 
    commands in ::rivet namespace

2011-11-12 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: reindented to improve readability.
    * doc/xml/commands.xml: typo corrected
    * tclconfig/ltmain.sh: new script from recently released libtools
    * configure.ac: new macro AC_CONFIG_MACRO_DIR to include macros in m4

2011-10-12 Massimo Manghi <mxmanghi@apache.org>
    * debian/*: actually removed from trunk (yesterday it was removed from branches/2.0)

2011-10-11 Massimo Manghi <mxmanghi@apache.org>
    * debian/*: removed from trunk and moved into parent directory. Maintaining
    scripts and configuration for Debianizing a package in the same package
    repository is deprecated and error prone.

2011-10-09 Massimo Manghi <mxmanghi@apache.org>
    * debian/*: preparing to move the debian stuff away from
    development branches of Rivet. I'm committing the latest
    changes done in the process of releasing the Debian package
    for 2.0.4 

2011-09-26 Massimo Manghi <mxmanghi@apache.org>
    * m4/ax_compare_version.m4: add macro for version comparison from the GNU macro archive

2011-09-23 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c,src/apache-2/TclWebapache.c: merging changes
    made to fix bugs and requests to command 'makeurl', 'load_env' and 'load_headers'

2011-09-07 Massimo Manghi <mxmanghi@apache.org>
    * doc/xml/commands.xml: Add existing undocumented commands 
        - import_keyvalue_pairs
        - lempty
        - lmatch 
        - lassign (consider to remove, as it overlaps for name and features
          with identical Tcl core command)
        - read_file
        - wrap
        - wrapline
    Changed 'makeurl' documentation to account for new features recently committed

2011-09-06 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: Add Id svn keyword.
    * 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.
     
2011-06-03 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/ltmain.sh: new version shipped with libtool 

2011-06-01 Massimo Manghi <mxmanghi@apache.org>
    * tclconfig/libtool.m4: autoconf 2.68 has a new IF..ELSE.. statement in m4 macros and
    libtool.m4 needs to get along it. New version copied into tclconfig.

2011-05-09 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.c: fixed misleading error message displayed when rivet_abort_script fails

2011-05-05 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: APACHE_VERSION returns an error message for--with-apache-version=1. 
    * src/apache-1/: removed from trunk

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
    * configure.ac: doc/convert_examples.tcl is generated from template: added to AC_CONFIG_FILES 
    * debian/changelog,debian/control: changed to reflect improvement in the script for Debian

2011-06-07 Massimo Manghi <mxmanghi@apache.org>
    * rivet/init.tcl: because of bug #3216070 of Tcl we cannot preload rivetlib, so it doesn't make
    sense to import the rivet namespace, because we cannot have all the command set loaded in and
    an import has to be done for them in the application scripts
    * rivet/rivet-tcl/incr0.tcl: Tcl8.5 provides identical functionalities, so this command is
    now aliased in the interpreter by the native incr command.
    * rivet/rivet-tcl/tclIndex: recreated

2011-04-06 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: Added doc/convert_examples.tcl to files created from its .in template

2011-04-03 Massimo Manghi <mxmanghi@apache.org>
    * doc/convert_examples.tcl.in,doc/convert_examples.tcl: Added script to convert code examples
    from their native form to a sgml escaped form.
    * doc/Makefile.am: Target 'examples' added
    * doc/xml/install.xml: Expanded --with-apxs explanation.
    * doc/README: expanded with instructions for adding new examples to the docs.

2011-04-01 Massimo Manghi <mxmanghi@apache.org>
    * doc/: new directory doc/examples-sgml. This is the directory where examples ready for inclusion
    in the manual must stay. The directory doc/examples is now meant to keep examples suitable for
    actual test and exectution
    * doc/convert_examples.tcl: New procedure that check for changes in doc/examples and, if needed,
    creates/recreates the corrisponding file in doc/examples-sgml escaping characters

2011-03-03 Massimo Manghi <mxmanghi@apache.org>
    * rivet/rivet-tcl/*.tcl: all the commands in here moved into ::rivet namespace. File tclIndex
    recreated
    * doc/xml/directives.xml,doc/xml/commands.tcl: Documentation changed to reflect the new scoping of
    the command set. Commands in rivet-tcl/ not yet documented have been briefly explained with some
    examples.
    * src/apache-2/mod_rivet.[c|h],src/apache-2/rivetCore.c: changes in trunk merged into the
    rivet-namespace branch

2011-03-01 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCode.c: 'abort_code' command is now created through the RIVET_CMD_OBJ macro

2011-02-18 Massimo Manghi <mxmanghi@apache.org>
    * src/rivet.h,src/apache-2/rivetCore.c,src/rivetPkgInit.c: Core commands namespace is now '::rivet' and 
    the package provided by the core module is "::rivet". Also package RivetLib was renamed as 'rivetlib'.

2011-02-14 Karl Lehenbauer <karl@apache.org>
    * src/apache-2/mod_rivet.c: Only create root interpreter once, not twice.  
    In Rivet_CopyConfig cache_size and cache_free were getting copied twice.  
    Only once now.
    * src/apache-2/rivetCore.c: Remove unused command var from Rivet_Upload.
    Remove unneeded loglevel var from Rivet_LogErrorCmd.

2011-02-14 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.[h|c],src/apache-2/rivetCore.c: Removed loading of RivetLib by default. Getting
    RivetLib into the module keeps Apache to segfault in other calls. In order to gain access to commands
    provided by RivetLib (formerly called Rivet) a 'package require RivetLib' must be in a Rivet script or
    in one of the initialization script (e.g. ServerInitScript ChildInitScript or GlobalInitScript). Notice:
    RivetLib exports the commands to the '::Rivet' namespace.
    * src/rivetCrypt.c, src/rivetWWW.c, src/rivetList.c: they now export their commands to the '::Rivet'

2011-02-11 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.[c|h]: new conf scripts rivet_abort_script and rivet_force_script. rivet_abort_script
    is run when an abort_page command is called in the page content generation
    * src/apache-2/rivetCode.c: add new command abort_code that returns the code passed to abort_page

2011-02-08 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/rivetCore.c: call to Rivet_InitWWW to include into Rivet's core the commands provided in
    src/rivetWWW.c
    * src/apache-2/mod_rivet.c: the inclusion into the module of RivetLib through Tcl_PkgRequire proved
    to cause segfaults in Rivet_ServerConf. The commands in rivetWWW.c are temporarily loaded by rivetCore.c
    * src/apache-2/Makefile.am: build of mod_rivet.so includes also code from src/libWWW.o

2011-02-07 Massimo Manghi <mxmanghi@apache.org>
    * branches/rivet-namespace: new branch to experiment with the Rivet namespace and Rivet package 
    * src/rivetPkgInit.c: Provides RivetLib package now when loaded by mod_rivet. Commands are now
    in the ::Rivet namespace
    * src/rivet.h: new macro RIVET_OBJ_CMD creates a command in the ::Rivet namespace
    and puts the command object on the namespace export list
    * src/apache-2/mod_rivet.h: the globals structure now holds a pointer to the Tcl_Namespace object
    representing ::Rivet namespace
    * src/apache-2/rivetCore.c: commands are now created with the RIVET_OBJ_CMD macro 
    * rivet/init.tcl: provides package RivetTcl 2.1. This makes possible to consistently peek the 
    init.tcl associated to the module. Command 'incr0' is now aliased by Tcl standard 'incr'
    * rivet/apache-2/mod_rivet.c: Rivet_PerInterpInit loads package RivetTcl 2.1 and package RivetLib 1.2.
    the latter ships the commands in rivetWWW.c rivetCrypt.c and rivetList.c
    * rivet/rivet-tcl/tclIndex: Command 'incr0' removed (see init.tcl)

2011-01-31 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: default value for directive SeparateVirtualInterps changed to 'yes'.
    * VERSION: version number set as 2.1.0r1 ('r' is for 'revision')
    * doc/xml/directives.xml: New directive ServerInitScript is documented.

2011-01-23 Massimo Manghi <mxmanghi@apache.org>
    * src/apache-2/mod_rivet.[c|h]: Created new ServerInitScript configuration directive: it assigns 
    rivet_server_init_script with a script run in Rivet_InitHandler after configuration has been built and
    before server children are forked. A master interpreter is created in Rivet_InitHandler. Children
    interpreters should hopefully be pure clones of this interpreter created by 'fork'

2011-01-09 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: fixed AC_DEFINE_UNQUOTED macro call for definition of proprocessor symbol RIVET_MAX_POST, 
    an integer valued symbol which was put in quotation marks. File indentation was fixed and tabs replaced with spaces

2010-12-03 Massimo Manghi <mxmanghi@apache.org>
    * configure.ac: new macros to set default values of configuration parameters.
    * src/apache-2/mod_rivet.c,mod_rivet.h: Default values are set in rivet_config.h through autotools. The Tcl
    Rivet environment is now loaded from mod_rivet by calling Tcl_PackageRequire("RivetTcl","1.1"); after auto_path
    is properly set. Configuration scripts are now stored in Tcl_Obj objects
    * doc/xml/install.xml: Add documentation for new 'configure' switch.
    * rivet/init.tcl: the path to RIVETLIB_DESTDIR is added to auto_path in mod_rivet.

2010-12-02 Massimo Manghi <mxmanghi@apache.org>
    * debian/libapache2-mod-rivet.*,debian/changelog: removed redundant lines from postist script (Debian package)
    * rivet/rivet-tcl/cookie.tcl: add command "cookie unset"
    * contrib/form.tcl,contrib/README: add a form.tcl based on TclOO. New README explanatory file
    * doc/xml/commands.xml: new command "cookie unset" explained
    
2010-10-27 Massimo Manghi <mxmanghi@apache.org>
    * branches/2_0: changes done in branches 2_0 reintegrated into trunk. This implied the following changes in trunk 
    * debian/[clean,docs,*.substvars,dirs,files,install]: not needed, hence removed from repository
    * debian/[changelog,copyright,rules]: files changed to produce a clean package out of the source tree
    * VERSION,configure.ac: version number bumped up to 2.0.2
    * doc/rivet-chunk.xsl: obsolete and misplaced copyright statement removed

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.org>

    * 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.
