2013-02-07 Ronnie Brunner <ronnie.brunner@netcetera.com>
	* src/generic/interpool.c, src/generic/logtosyslog.c, src/generic/url.c:
	- Fix compilation with -W on FreeBSD (thanks to Pietro Cerutti)
	
2012-10-25 Brunner Ronnie <ronnie.brunner@netcetera.com>
	* src/apachetests/apachetest.tcl, src/apachetests/conf/server.conf.tcl:
	- make tests run with Apache httpd 2.4 (tested against 2.4.3)
	* src/apachetests/apachetest.tcl:
	- better handling of killing the web server after/between tests
	* src/apachetests/test/pool.test:
	- better output of pool-1.3 whe Apache craches
	* src/generic/logutl.c:
	- changed thread id output of logging in pointer format to hex
	  (old cast didn't work on 64 bit platforms) now same format as 
	  in thread::id from the Threads package
	* src/apachetests/test/mod_websh.test:
	- removed: integrated into runtests.tcl
	* src/apachetests/runtests.tcl:
	- integrated test/mod_websh.test, minor fixes
	* src/apachetests/test/*.test, src/apachetests/docs/pool2.ws3:
	- removed call to apachetest::start so that starting server is
	  the callers responsibility (more flexible)
	- now work if called repeaatedly on the same running server
	
2011-09-13 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/unix/configure.in, src/unix/Makefile.in:
	- added --with-apr and --with-apu to allow more flexibility 
	  with configure (e.g. to compile w/o manual tweaking for 
	  paths under OSX Lion)

2011-08-15 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/modwebsh_ap.c:
	- fixed Web_InterpCfg_AP and Web_InterpClassCfg_AP: NULL terminate
	  param lists (Thanks to Mark Johnston for the report and patch)
	
2011-05-05 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/apachetests/apachetest.tcl, src/apachetests/runtests.tcl:
	- Get around some double quote issues for the server conf file
	- Also parse included conf files for modules to load
	
2011-04-26 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* doap_websh.rdf:
	- Adapt to new paths of static web site
	* doc/quickref.xml:
	- Fixed links to examples
	- Consistent lowercase files
	
2010-11-10 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/dispatch.c:
	- Ignore charset in application/x-www-form-urlencoded rather than
	  fail to parse body (should be % encoded anyway, so the charset,
	  which is sent by JavaScript for example shouldn't change the body)

2010-07-27 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* doap_websh.rdf:
	- Fixed typo in description
	* src/apachetests/conf/server.conf.tcl:
	- Added LockFile config (to make sure directory exists)
	* src/unix/Makefile.in, src/unix/configure.in:
	- Also transfer CFLAGS_WARNING from tclConfig.sh
	* src/unix/Makefile.in:
	- Fixed redefinition warnings when including 
	  TCL_DEFS for Apache > 2 and Tcl >= 8.6
	- Fixed apachetests for Darwin (LIBRARY_PATH variable)
	* src/generic/messages.c:
	- Changed variable definition to avoid strange casting warnings

2010-05-03 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/nca_d.c:
	- removed redundant log in web::decryptd (handeled by caller)
	
2010-02-25 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/logutl.c, src/generic/request_ap.c:
	- Make -Wall happy (removed unused variables, properly
	  initialize return variable that was not always set in logImpl
	  (Thanks to Mikhail Teterin for the hint and patch)
	
2009-10-02 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* doc/quickref.xml, doc/quickref.xsl:
	- Some reformatting (mark all commands as commands,
	  removed redundant <hr> tag in xsl)
	- Typos fixed, consistency improved
	- Some minor clarifications added
	
2009-09-14 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* <various sources>:
	Changed version to 3.6.0b5

2009-09-14 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/tests/*.test:
	- Further improvments when running tests repeatedly
	  (to track down memory cunsumption issues)
	* doc/quickref.xml:
	- Improved documentation of web::tempfile
	- Fixed typo in web::match
	* src/generic/checksum.c:
	- Better location for Tcl_IncrRefCount (in crcAsciify)
	* src/generic/conv.c, src/generic/crypt.c:
	- Proper refcount handling of (temp) objects.
	- Properly decrement refcount of result from webHtmlify
	* src/generic/dispatch.c:
	- Prevent memory leak of cmd when hook fails in web::cmdurl
	- Proper refcount handling of (temp) objects.
	* src/generic/filecounter.c, src/generic/filecounter.h:
	- Prevent memory leak when filecounter is deleted (cleanup)
	* src/generic/htmlify.c:
	- Proper handling of (temp) objects
	- Return incremented refcount for webHtmlify
	* src/generic/log.c:
	- Closed memory leak when returning names of loglevels and legdests
	- Proper refcount Handling of logging in DEBUG mode
	* src/generic/logutl.c:
	- Properly increment refcount of return value in formatMessage
	* src/generic/modwebsh_ap.c:
	- Properly increment refcount on webInterp->dtor in Web_Finalizer_AP
	* src/generic/nca_d.c:
	- Always return Tcl_Obj with incremented refcount in encryptNcaD
	* src/generic/paramlist.c:
	- Proper refcount handling of (temp) objects.
	* src/generic/request.c:
	- Proper increment of refcount in requestData struct
	* src/generic/url.c:
	- Closed memory leak in web::cmdurl when using scheme in urlformat
	- Proper refcount handling of urlData fields
	* src/generic/varchannel.c:
	- Closed memory leak in varchannelInputProc and varchannelOutputProc
	  (previously leaked object returned by Web_GetOrCreateGlobalVar)
	* src/generic/webout.c:
	- Closed memory leak when resetting default response obj
	  (previously leaked defaultResponseObj, because it was not added to
	  the response object hashin the hash)

2009-09-11 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/tests/*.test:
	- Make tests run repeatedly in same interp (i.e. close all
	  file handles properly, cleanup some leftovers etc.)

2009-07-28 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/dispatch.c:
	- Added Tcl_DecrRefCount on cmdName on error to prevent
	  memory leak when hook in dispatch fails.
	- Fixed memory leak in dispatch
	* src/generic/crypt.c:
	- Properly increment ref count of initial vlaue of encryptChain
	  and decryptChain in cryptData
	- Earlier increment ref count of cmd to be eval'd (just to be sure)
	* src/generic/logutl.c:
	- Increment ref count of fsmg in formatMessage already
	* src/generic/htmlify.c:
	- Increment ref count of result in webHtmlify
	- Fix memory leak in HANDLE_UNICODE_ENTITY macro (webDeHtmlify)
	* src/generic/checksum.c:
	- Earlier increment ref count of return object in crcAsciify
	* src/generic/conv.c:
	- Decrement ref count on result of webHtmlify
	- Incr and decr of ref count of tmp objects in Web_DeHtmlify and
	  Web_Html_RemoveComments
	- Increment ref count of Tcl objs in convData struct
	* src/generic/request.c:
	- Proper ref count of initial objs in requestData
	- proper handling of upLoadFileSize and cmdUrlTimestamp in
	  resetRequestData (in unused code, but for consistency)
	* src/generic/modwebsh_ap.c:
	- Proper ref count of webInterp->dtor in Web_Finalizer_AP
	* src/generic/nca_d.c:
	- Proper ref count of new empty string when encrypting empty string
	* src/generic/url.c:
	- Proper initial ref count of urlData->defaultscheme
	- Fixed memory leak in cmdurl in certain special cases
	* src/generic/log.c:
	- Prevent memory leak when DEBUG is defined (properly discard temp
	  obj created to log line number)
	* src/generic/paramlist.c:
	- Fixed memory leak in paramListAsListObj (static query param handling)
	- Fixed memory leak in [web::param -names] when called with wrong args
	
2009-07-20 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/win/Makefile:
	- Removed duplicate reference to Tcl stub lib

2009-07-15 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/apachetests/runtests.tcl, src/apachetests/apachetest.tcl,
	  src/apachetests/README, src/apachetests/conf/server.conf.tcl,
	  src/apachetests/test/mod_websh.test;
	- Port to run Apache tests on is now configurable in runtests.tcl
	* modwebsh_cgi.c, modwebsh_cgi.h, modwebsh_ap.c, modwebsh.h,
	  web.c, interpool.c:
	- Init mod_websh call backs (Tcl_StubsInit) from libwebsh.so
	  (ModWebsh_Init calls modwebsh_createcmd, which calls 
	  ModWebsh_Init_AP if necessary)

2009-07-14 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/tclAppInit.c, src/generic/interpool.c:
	- Always call Tcl_InitStubs and consistently use "8.2" as version
	* src/generic/interpool.c:
	- Call new ModWebsh_Init to properly load libwebsh.so
	* src/generic/web.c, src/generic/web.h:
	- Added ModWebsh_Init to initialize libwebsh.so for mainInterp 
	  in mod_websh
	
2009-06-26 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* doc/quickref.xml:
	- Added documentation of [web::config] mod_websh subcommands
	- Fixed minor typos
	- Added documentation of [web::config safelog]
	* doc/quickref.xsl:
	- Reference to newer docbook version
	* src/generic/cfg.c, src/generic/log.c, src/generic/log.h:
	- Added [web::config safelog] with default 1 to explicitly allow
	  web::log to throw an error if I/O fails (if safelog is set to 0)
	* src/generic/logutl.c, src/generic/log.h:
	- Properly report and pass errors during logging if 
	  [web::config safelog] is set accordingly
	  (sendMsgToDestList now returns TCL_OK/TCL_ERROR instead of void)
	* src/generic/logtochannel.c, src/generic/logtochannel.h:
	- Properly handle cases when channel is not available (anymore), i.e.
	  Tcl_GetChannel for every log message and when destination is deleted
	  instead of only getting channel initially and then produce a segfault
	  if channel is gone.
	* src/generic/logtofile.c:
	- Properly track Tcl_Flush errors
	* src/test/cfg.test:
	- Fixed test cfg-1.1 to pass with newsafelog subcommand
	- New test for [web::config safelog]
	* src/tests/logtocmd.test:
	- Added test for error in command and [web::config safelog]
	* src/tests/logtochannel.test:
	- Added test for closed channel and [web::config safelog]

2009-06-17 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* doc/mod_websh/README, src/win/README:
	- Properly document that shared lib libwebsh.so (websh.dll) is
	  now needed to run the Apache module
	* src/apachetests/README:
	- hint on running apachetests on Windows
	* src/unix/pkgIndex.tcl, src/win/pkgIndex.tcl:
	- provide simple pkgIndex.tcl
	* src/win/Makefile, src/unix/Makefile.in:
	- also install pkgIndex.tcl

2009-06-12 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/tests/logtosyslog.test:
	- add constraint to only run test when syslog is 
	  found and readable
	* src/generic/mod_websh.c:
	- removed redundant header includes and defines

2009-05-22 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/url.c:
	- properly detect host and port in request params
	  (current servers/browsers deliver port in HTTP_HOST or SERVER_NAME)
	  this solves a bug reported by Ashok P. Nadkarni in Dec 2008
	* src/tests/cmdurl.test:
	- added tests for host different port combinations (that used to
	  trigger the bug above)
	* doc/quickref.xml:
	- fixed wrong option names of web::cmdurlcfg (-scheme and -host)
	- clarified web::cmdurlcfg defaults.

2009-05-22 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* <all changes>:
	- allow dynamic linking of libwebsh.so|dll to websh, websh.exe and
	  mod_websh.so
	* doc_mod_websh/README, INSTALL, README, src/win/README:
	- adapted to new dynamic linking
	- reduced some redundancy
	- documented (n)make apachetest target
	* src/unix/Makefile.in, src/win/Makefile:
	- dynamic linking of libwebsh.so|dll to websh, websh.exe and 
	  mod_websh.so
	* src/generic/modwebsh_cgi.h:
	- created for ApFuncs: a struct with pointers to the
	  mod_websh implementations of various websh commands that
	  differ from the CGI implementation.
	* src/generic/modwebsh_cgi.c:
	- implemented a switch in all functions according to ApFuncs
	  content -> call either mod_websh or CGI implementation.
	* src/generic/request_cgi.c:
	- implemented a switch in all functions according to ApFuncs
	  content -> call either mod_websh or CGI implementation.
	- changed signature in some funtcions to include interp to
	  allow mod_websh / CGI switch depending on context (ApFuncs)
	* src/generic/displatch.c:
	- added interp as parameter to requestGetDefaultChannelName
	  to allow mod_websh / CGI switch depending on context (ApFuncs)
	* src/generic/response_ap.c:
	- changed isDefaultResponseObj to isDefaultResponseObj_AP
	  to distinguish functions since with dynamic linking, both
	  versions CGI and mod_websh are present in the code.
	- added interp as parameter to isDefaultResponseObj_AP
	  to allow mod_websh / CGI switch depending on context (ApFuncs)
	* src/generic/request_ap.c:
	- changed requestGetDefaultChannelName to
	  requestGetDefaultChannelName_AP and requestFillRequestValues to
	  requestFillRequestValues_AP to distinguish functions since with
	  dynamic linking, both versions CGI and mod_websh are present in
	  the code.
	- remove duplicate check for requestData->requestIsInitialized
	* src/generic/interpool.c:
	- setup apFuncs function pointers for mod_websh interps and set
	  the struct as Tcl AssocData to the interp (Note: this is how at
	  runtime, Websh distinguishes whether the CGI or the mod_websh
	  implementation of certain functions must be invoked)
	* src/generic/interpool.h:
	- define prototypes for createApFuncs and destroyApFuncs
	* src/generic/response_cgi.c:
	- implemented a switch in all functions according to ApFuncs
	  content -> call either mod_websh or CGI implementation.
	- added interp as parameter to isDefaultResponseObj
	  to allow mod_websh / CGI switch depending on context (ApFuncs)
	* src/generic/modwebsh_ap.c:
	- changed various functions from <func> to <func>_AP to allow
	  mod_websh / CGI switch depending on context (ApFuncs)
	- removed modwebsh_createcmd, since it's now redundant to the CGI
	  implementation.
	* src/generic/request.c:
	- call requestGetDefaultChannelName with interp as parameter
	* src/generic/request.h:
	- changed prototypes for requestGetDefaultChannelName and
	  requestGetDefaultOutChannelName: both now include interp as
	  parameter
	* src/generic/modwebsh.h:
	- changed prototypes from <func> to <func>_AP for mod_websh
	  implementation
	* src/generic/webout.c:
	- call isDefaultResponseObj and requestGetDefaultOutChannelName
	  with interp as argument
	* src/generic/webout.h:
	- changed prototype of isDefaultResponseObj (added interp as
	  argument)
	* src/generic/web.c:
	- added prototype of modwebsh_createcmd

2009-05-22 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/apachetests/test/headers.test:
	- proper URL in header-1.1 test

2009-04-16 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/cookie.ws3:
	- improved Cookie handling (deal with unusual formats)
	* src/tests/cookiecontext.test:
	- added test for the above fix

2009-04-14 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/unix/Makefile.in:
	- enhanced test rules to work with local dynamic library
	- enhanced clean rule (new apachetest layout)
	* src/win/Makefile:
	- added apachetest target
	- fixed dependencies for new AUTH_USER functionality
	- enhanced clean rule (new apachetest target)
	* src/apachetest/runtests.tcl:
	- Windows compatibility
	* src/apachetest/apachetest.tcl:
	- Windows compatibility
	- Apache 1.3 to 2.2 compatibility (for log config module renaming)
	- new directory layout (logs subdir)
	* src/apachetests/conf/server.conf.tcl:
	- new directory layout (logs subdir)
	* src/apachetests/test/hello.test, src/apachetests/docs/hello.ws3:
	- added path_info test

2009-04-14 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/request_ap.c:
	- fix AUTH_USER includes for Apache2 and up
	* src/tests/request.test:
	- fixed AUTH_USER test
	
2009-04-10 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/mod_websh.c:
	- better logging on error
	* src/tests/webout.test:
	- minor beautification of test output
	* src/generic/script.ws3, src/generic/request_ap.c:
	- web::request provides AUTH_USER and AUTH_PW if browser provides
	  an Authorization header and Apache does not handle it.
	* src/tests/request.test, src/apachetests/test/headers.test,
	  src/apachetests/docs/headers.ws3:
	- test [web::request AUTH_USER] and [web::request AUTH_PW]
	* doc/quickref.xml
	- documentation for AUTH_USER and AUTH_PW
	
2009-02-17 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/apachetests:
	- Better directory structure
	- Adapted to invokation through Makefile (in src/unix)
	* src/unix/Makefile.in:
	- Added apachetest rule: make apachetest now runs test suite for 
	  mod_websh

2009-02-11 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* doc/quickref.xml:
	- Note that web::response -httpresponse does not work with all 
	  web servers.
	- Minor fixes
	* doc/quickref.xsl:
	- updated to more current docbook version
	* src/tests/mintest.test:
	- put a warning when libwebsh is loaded into a tclsh of a 
	  different version
	- allow for Tcl8.6
	* src/unix/tcl.m4:
	- better help text for configure
	* src/unix/configure.in:
	- allow Tcl8.6
	- try to locate tclsh given in the configuration (not just 
	  the environment)
	* src/unix/Makefile.in:
	- also link to libtclstub for Tcl 8.6
	* src/win/Makefile:
	- typo in install rule
	- fixed dependency of test target
	- changed default paths and changed Tcl version to 8.5
	
2008-03-14 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/unix/Makefile.in:
	- fixed test rules (LD_LIBRARY_PATH was not set correctly 
	  on some systems): now refers to Tcl library specified with configure
	* src/unix/tcl.m4:
	- allow to configure tcl using --with-tcl only (no need for 
	  --with-tclinclude if lib/tclConfig.sh and include/tcl.h are sibling
	  directories
	
2008-03-06 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/webutl.c, src/generic/varchannel.c:
	- bug fix Tcl_Obj life-cycle (fixed crash under Tcl8.5.1)
	* src/generic/response_ap.c, src/generic/url.c:
	- fixed Windows version (strcasecmp)

2008-03-04 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/unix/configure.in, src/unix/Makefile.in:
	- added --with-aprinclude and --with-apuinclude variables 
	  to configure apr if needed

2008-02-28 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/url.c, src/generic/url.h, src/tests/cmdurl.test:
	- fixed URL scheme detection (compatibility with Sunone web server)
	- added test to test scheme detection

2007-09-04 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/dispatch.c, src/generic/webutl.c, src/generic/logutl.c,
	  src/generic/htmlify.c, src/generic/varchannel.c,
	  src/generic/modwebsh_cgi.c, src/generic/formdata.c,
	  src/generic/checksum.c, src/generic/interpool.c,
	  src/generic/weboutint.c, src/generic/request.c,
	  src/generic/nca_d.c, src/generic/uricode.c,
	  src/generic/querystring.c, src/generic/url.c, src/generic/webout.c,
	  src/generic/messages.c, src/generic/filecounter.c,
	  src/generic/paramlist.c:
	- Fixed lots of potentially wrong/missing Tcl_IncrRefCount() and 
	  Tcl_DecrRefCount() calls.

2007-08-28 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/webutl.c, src/test/dispatch.test:
	- properly handle multi part forms with extended content-type
	  this fixes bug 43212 as reported by Dennis Parker
	
2007-08-21 Brunner Ronnie <ronnie.brunner@netcetera.ch>
	* src/generic/mod_websh.c, src/generic/interpool.c:
	- better logging when no interpreter can be found
	- removed unnecessary newlines from error log
	
2007-04-30 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/response_ap.c:
	- fix http response for Apache 2.2.1 and later

2007-03-19 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/hashutl.c, src/generic/hashutl.h, src/generic/log.c,
	  src/generic/log.h, src/generic/macros.h, src/generic/paramlist.c,
	  src/generic/paramlist.h, src/generic/web.c, src/generic/web.h,
	  src/generic/webout.h, src/generic/weboutint.c, src/generic/webutl.c,
	  src/generic/webutl.h:
	- export some functions to allow dynamic linking on Windows

	* src/unix/Makefile.in, doc/mod_websh/conf/websh.conf, websh.spec:
	- more consistent installation directories (rpm style)
	
2007-03-18 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* websh.spec:
	- fixed dependencies, paths, and installation
	  (Thanks to Peter Kohler <peter.kohler@netcetera.ch> for the 
	  contribution)
	
2007-02-12 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/dispatch.c, src/generic/crypt.c, src/generic/logutl.c, 
	src/generic/htmlify.c, src/generic/formdata.c, src/generic/checksum.c,
	src/generic/conv.c, src/generic/request_ap.c, src/generic/interpool.c,
	src/generic/weboutint.c, src/generic/request.c,
	src/generic/modwebsh_ap.c, src/generic/nca_d.c,
	src/generic/mod_websh.c, src/generic/uricode.c, src/generic/webout.c,
	src/generic/filecounter.c, src/generic/log.c, src/generic/filelock.c,
	src/generic/filelock.h, generic/paramlist.c, src/generic/args.c:
	Adapted patch from Mikhail Teterin <mi+apache@aldan.algebra.com>
	- Removed unused local variables to allow compile w/o complaints 
	  when using -Wall -Werror
	- Removed some redundant initialization of variables
        Thanks Mikhail
	
2007-01-03 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/win/Makefile:
	Apache 2.2 compatibility: reference new apr lib if needed

2006-05-22 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/interpool.c:
	Fixed call to Tcl_Access under Windows (newer Tcl versions)
	(define R_OK locally instead of using external Windows variable)

	* src/win/Makefile:
	Default Tcl version set to 8.4
	
2006-03-10 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* doc/quickref.xml, doc/quickref.xsl:
	Added docu for [web::config reset] and clarified [web::config]
	documentation in general.
	Added docu for [web::cmdurlcfg -reset] and enhanced example
	Changed import to docbook release 1.69.1
	Fixed old [web::dofinalize] typo and [web::interpmap] example format

	* src/tests/msc.test:
	Changed test for [web::config copyright]

	* src/generic/cfg.c:
	Fixed result of [web::config cmdparam newvalue] (return old value)
	Fixed result of [web::config timeparam newvalue] (return old value)
	Updated output for [web::config copyright]
	Fixed [wweb::config reset]: also reset encrytchain, decryptchain,
	putxmarkup, and logsubst

	* src/generic/cfg.c, src/generic/crypt.[hc], src/generic/weboutint.c
	  src/generic/request.[hc], src/generic/webout.h, src/generic/log.[hc]:
	Use #define for Default values of [web::config options] uploadfilesize, 
	timeparam, cmdparam, encryptchain, decryptchain, and logsubst
	
	* src/tests/cfg.test:
	Added test for [web::config reset] and other [web::config] bugs

	* src/generic/webutl.c:
	Better Tcl RefCount handling in handleConfig()

	* src/generic/interpool.c:
	Adopt Tcl 8.5 [return -level <lvl>] syntax for redefinition of [exit]
	(Exiting the script w/o terminating the process in mod_websh)
	The broken old behavior was exchanged with an error.

	
2006-03-05 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* <various sources>:
	Changed version to 3.6.0b4

2006-03-05 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/interpool.c:
	Call Tcl_InitMemory to allow debugging when compiled with TCL_MEM_DEBUG

	* src/generic/log.c:
	Fxed memory leak when initializing logData->listOfFilters
	and logData->listOfDests"

	* src/generic/weboutint.c:
	Fixed memory leak in webout_eval_tag
	
	* src/generic/request.[hc]:
	Added ExitHandler to make sure tempfiles created with names
	from [web::tempfile] are deleted correctly when process 
	terminates properly (e.g. not killed)
	
	* src/unix/Makefile.in:
	Added hint on TCL_MEM_DEBUG
	Fixed typo in EXTRA_CFLAGS definition
	Fixed purify and purecov targets

	* src/tests/msc.test, src/test/webout.test:
	Added web::tempfile -remove test
	String cleanup: webshell -> Websh
	
2006-03-04 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/filecounter.[hc], src/tests/filecounter.test
	doc/quickref.xml:
	Added filecounterHandle getval to retrieve current value
	from filecounter file.
	Added documentation and tests.

	* src/apachetests/apachetest/*:
	Compatibility with Apache 2.2 module structure

	* makedist:
	renamed dist package to websh-<version>-src.tar.gz 
	(consistend with other source packages in the ASF)
	
2005-12-12 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/mod_websh.h, src/generic/mod_websh.c:
	Compatibility with Apache 2.2 (command_struct)

	* src/unix/Makefile.in:
	Install directly to prefix (not into websh subdirectory)
	Refactored ugly hack for Darwin bundle linking of mod_websh

2005-11-16 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* doc/quickref.xml:
	Added Websh version to title for better identification

	* makedist:
	Removed verbose tag from tar commands so that makedist doesn't
	break under (e.g.) FreeBSD.
	
2005-11-15 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/uunix/configure.in, src/unix/tcl.m4:
	Added more locations to search for Tcl and Apache includes 
	(SuSE Linux defaults)
	
2005-11-14 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* doc/mod_websh/conf/websh.conf, src/tests/msc.test,
	src/tests/logtosyslog.test src/generic/cookie.ws3:
	Compatibility fixes with OSX (Darwin)

	* src/unix/config.sub, src/unix/config.guess:
	Replaced with newer versions that support OSX

	* src/unix/Makefile.in, src/unix/configure.in:
	Changed linking of mod_websh.so for OSX (Darwin)
	Added --with-httpd option for Apache binary (needed 
	for -bundle linking on OSX)

2005-11-11 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/unix/configure.in, src/win/Makefile, 
	src/apachetests/runtests.tcl, websh.spec:
	Changed version to 3.6.0b3

	* CHANGES:
	Added enduser readable summary of ChangeLog

	* README:
	New hint on Windows installation
	Added details for Unix installation
	
	* src/unix/Makefile.in:
	Major cleanup: removed lots of unused stuff and rewrote
	install	rules.
	
	* src/unix/configure.in:
	Nicer output of generated configure
	
	* src/unix/tcl.m4:
	Removed lots of unused stuff

	* src/unix/mkinstalldirs, src/unix/memdbg.tcl:
	Removed (unused, not working)

	* src/win/Makefile:
	Also install *.lib files

2005-11-10 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* doc/mod_websh/*:
	Added sample setup for mod_websh

	* src/test/mintest.test, src/tests/htmlify.test:
	Enhanced tests to run under Windows

	* src/win/Makefile, src/win/README:
	Major cleanup (no recurrsive calls)
	Unified flags for websh.exe and mod_websh.so
	Proper install rule (including sample setup for mod_websh)
	Build websh<verion>.dll
	Adapted README accordingly

	* src/generic/interpool.c:
	Removed unnecessary TclInitStubs call

	* src/generic/web.c, src/generic/web.h:
	Make Websh_Init exportable under Windows (for websh.dll)

2005-11-03 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/win/Makefile, src/win/README:
	Attempt to provide a working Windows Makefile
	(for use with Visual Studio 6's nmake utility)
	
	* src/unix/Makefile.in:
	Moved generated script.h to output directory to
	prevent clash with generated script.h under Windows
	
	* src/tests/filecounter.test, src/tests/filecontext.test,
	  src/tests/messages.test, src/tests/cfg.test,
	  src/tests/filelock.test, src/tests/logtosyslog.test,
	  src/tests/log.test, src/tests/encrypt.test:
	Tests activated and fixed for Windows
	Activated some previsously unused tests
	Deactivated file permission tests for Windows (n/a)
	
	* src/generic/logutl.c, src/generic/tclAppInit.c,
	  src/generic/response_ap.c, src/generic/apchannel.c,
	  src/generic/request_ap.c, src/generic/interpool.c,
	  src/generic/mod_websh.c, src/generic/messages.c,
	  src/generic/webout.h, src/generic/messages.h,
	  src/generic/web.c, src/generic/log.c:
	Removed unused local variables
	Proper Tcl_InitStubs initialization (websh and mod_websh)
	Some includes added (for Windows)
	Minor WIN32 fixes

	* src/generic/weboutint.c:
	Set channel translation to send HTTP headers correctly under Windows
	
2005-10-28 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* <various sources>:
	Changed version to Websh 3.6.0b2 (too many changes in the
	commands for a successor Websh 3.5.x version)
	
	* src/unix/configure.in, src/unix/Makefile.in:
	Adapted for Tcl 8.5
	Major cleanup started
	
	* src/generic/mod_websh.c:
	Fixed call to ap_log_error for Apache 2 (prevent compiler
	warning due to NULL to 0 conversion)
	
	* doc/Makefile, doc/quickref.xml:
	Documentation of recent changes in logging
	Renamed web::logfilter to new web::loglevel
	Various minor fixes

	* src/generic/log.[hc], src/tests/log.test:
	Renamed web::logfilter to web::loglevel
	(web::logfilter is still available for backward compatibility,
	but considered deprecated)
	Adapted tests accordingly

	* src/generic/script.ws3, src/tests/*.test:
	Use new web::loglevel instead of web::logfilter, which is 
	now deprecated.
	
2005-10-27 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/script.ws3, src/tests/log.test:
	Moved cleanup from web::ap::perReqInit to web::ap::perReqCleanup
	to speed up request handling
	Delete only log filters and destinations created during the
	request and not the ones created in web::initializer
	Wrote a test for it

	* src/generic/log.[hc], src/generic/modwebsh_ap.c, src/generic/modwebsh_cgi.c:
	Added keep flag to LogDest and LogLevel structs to keep track of
	levels and filters to keep across requests (the ones created in
	web::initializer code)
	Added special command to delete all but these levels and filters
	(web::logfilter delete -requests and web::logdest delete -requests)
	to be used in web::ap::perReqCleanup
	Adapted Web_Initializer to accommodate this functionality

	* src/test/log.test, src/generic/log.[hc], src/generic/logutl.c:
	Changed behaviour of web::logdest names and web::logfilter names
	to return proper list of names (for consistency reasons)
	Added web::logdest levels and web::logfilter levels options to
	replace function of previous names option (needed for test suite only)
	Internal names of logfilters and logdests with decimal counter
	for consistency with other internal Tcl names (files sockets etc.)
	Modified usage error messages for web::logdest and web::logfilter
	to comply to Tcl standard
	Refactored log filters and levels to reside in an array so that
	names can be reused after deletion (needed for mod_websh, because
	otherwise, we run out of names sooner or later)
	Adapted and added tests accordingly

	* src/tests/dispatch.test, src/tests/webtest.ws3:
	optimized output during test runs

	* src/generic/mod_websh.c:
	typo in log msg

2005-10-16 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* makedist:
	Adapted to run under SVN (after migration from CVS)
	
2005-09-09 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/unix/configure.in:
	changed to version 3.5.1b1

	* src/generic/htmlify.c, src/generic/weboutint.c:
	handle multibyte characters in web::htmlify and web::putx correctly.
	Many thanks to Taguchi Takeshi.

	* src/generic/formdata.c:
	save and reapplay channel enconding when setting translation to
	binary (to avoid side effects). Thanks to Taguchi Takeshi

	* src/test/mintest.test:
	allow newer versions of tclsh for library test 

	* src/generic/formdata.c:
	removed unused function dumpBody (not referenced anywhere)
	
	* src/generic/cfg.c, src/generic/filecounter.[hc], src/generic/formdata.c, src/generic/log.[hc], src/generic/logtofile.c, src/generic/request.[hc], src/generic/sessctx.ws3, src/generic/web.c:
	All file permissions of created files configurable:
	log files, session files, filecounter, temporary files
	from multipart form file upload.
	Default is 0644. (Note that previously, the default for session files
	was 0666. All other defaults where already set to 0644.)
	
	* src/test/cfg.test:
	added tests for web::config filepermissions and
	its effects.

	* src/unix/Makefile.in:
	set umask to 0 when running tests, so that file permission tests work

	* doc/quickref.xml:
	documented web::config filepermissions and adapted documentation
	for web::formvar, web::filecounter, and web::filecontext.
	Removed wrong note in web::config putxmarkup about not being able
	to nest evaluation using the tag (<? ?>) syntax in web::putx, which
	is possible for a long time now.
	
2005-09-07 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* doc/quickref.xml
	fixed documentation of web::dehtmlify (thanks to Holger Jakobs)

2005-09-05 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/unix/configure.in:
	ensure compatibility with Tcl8.5
	
2005-08-29 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/context.tcl, src/generic/cookie.ws3, tests/context.test, tests/cookiecontext.test, doc/quickref.xml:
	ensure compatibility with Tcl8.5
	
2005-08-17 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/cookie.ws3:
	fixed locale dependency side effect of cookie expiry
	
2005-07-15 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/generic/weboutint.c, src/tests/webout.test:
	fixed handling of tag in putx (problems with '?') and 
	wrote some tests for it

2005-07-01 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* doc/quickref.xsl:
	fixed URL to docbook to newer version

	* doc/quickref.xml:
	fixed documentation of web::dispatch -postdata

	* src/generic/dispatch.c:
	fixed error string of web::dispatch -postdata syntax

2004-12-13 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* src/unix/config.guess, src/unix/config.sub:
	config.sub and config.guess (avoids problems with some 
	autoconf versions)

2004-11-16 Brunner Ronnie <ronnie.brunner@netcetera.ch>

	* doc/quickref.xml:
	fixed documentation of web::logdest 
	(explanation for -format and -maxchar options)

2004-09-15  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/cookie.ws3, src/tests/cookiecontext.test:
	fixed expiry of cookies: expiry can be given in seconds and
	in any relative format known to tcl (such as "2 days")
	resolved locale dependecy that broke expiry format with tcl8.4
	and higher

	* doc/quickref.xml:
	clearified documentation of expiry option for web::cookiecontext
	
2004-04-30  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/webout.c, src/tests/webout.test:
	set back response object after web::putx and accoring tests

2004-03-24  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/tclAppInit.c:
	removed old SUN OS compatibilty hack (not needed anymore)

	* src/generic/checksum.c:
	hack around gcc optimization problem
	(thanks to Jason Brazile for the "volatile" hint ...)

2004-03-12  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/tests/msc.test:
	cleanup environment in modwebsh-1.6, so tcltest does not complain
	
2004-03-01  David N. Welton  <davidw@dedasys.com>

	* LICENSE: Added Apache License, version 2.0.

2004-03-01  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/messages.c:
	removed unused include which fails with newer Solaris cc

	* src/generic/formdata.c:
	fixed minor memory leak in parseMultipartFormData

	* src/generic/varchannel.c:
	removed unused header include (webutl.h)

	* src/tests/logtofile.test:
	added logtofile-3.1 test (coverage of web::log to file)

	* src/tests/cookiecontext.test:
	fixed cookie tests to match proper cookie expiry format
	changed webshell to Websh (just for beauty reasons ;-)

	* src/tests/msc.test:
	added coverage tests for cgi modwebsh stubs

	* src/generic/webutl.c, src/generic/webutl.h:
	removed unused functions tclMyConcat and Web_IntIncrObj
	
	* src/generic/hashutl.c, src/generic/hashutl.h:
	removed unused function (resetHashIterator)

2004-02-03  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/cookie.ws3:
	fixed cookie expiry date format to meet Netscape specs
        (http://wp.netscape.com/newsref/std/cookie_spec.html)
	
2003-11-15  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/interpool.c:
	bug fix in web::interpmap (files with spaces in names)

	* src/generic/formdata.c
	potential bug fix of call to web::uri2list

2003-10-31  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* doc/quickref.xml:
	added documentation for context::delete
	added documentation for web::config cmdurltimestamp

2003-05-27  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* INSTALL, README:
	added hint on GNU make extensions
	
2003-02-28  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* doc/quickref.xml:
	fixed documentation of web::cmdurlcfg and web::request

2002-11-26  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/weboutint.c, src/tests/script.test:
	bug fix of web::putx and web::putxfile (double UTF encoding)
	patch submitted by David Welton (Thanx David)

2002-11-22  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* doc/quickref.xml:
	added documentation of web::formvar (file upload)

2002-11-13  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/url.c:
	fixed core dump when [web::cmdurl] called scheme in urlformat

	* src/tests/cmdurl.test:
	added test to test bug that has been fixed today

2002-09-11  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* src/generic/*.[ch]:
	fixed different declarations for Tcl8.4: added TCLCONST define
	in macros.h, which is set according to the tcl version

	* src/unix/configure.in:
	added tcl8.4 to search for Tcl	
	changed to version 3.5.1a1

	* src/tests/webout.test:
	compatibility with strange version numbers
	
	* src/generic/cfg.h, src/generic/modwebsh.h, src/generic/request.c, src/generic/webout.c:
	tweaked header file includes for win32

	* src/generic/tcldecmt.tcl:
	tweaked line length of output for win32
	
2002-08-01  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* Released Version 3.5.0

2002-08-01  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* makedist:
	added makedist to create tar balls from actual and previous builds

	* apachetests/runtests.tcl:
	fixed reference to mod_websh.so (proper version)
	
	* unix/Makefile.in:
	disabled dist target (referred to ../../makedist)
	removed a bunch of unused stuff

	* src/unix/configure.in:
	removed initcode from cleanfiles
	
2002-07-31  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* INSTALL, README:
	added autoconf and other info to compile instructions

	* websh-spec:
	dynamic version of mod_websh, added make websh

	* doc/faq.html:
	removed (redundant to tcl-site/websh/faq.ws3)

	* examples/README:
	added (just a note of caution not to use the examples)

	* Announce, src/Makefile, unix/Makefile.modwebsh, win/script.h:
	removed (outdated, unused ...)
	
	* license.terms:
	fixed typo

	* generic/cfg.c, /generic/cfg.h, generic/webout.h:
	harmonized different outputs of Websh's version

	* tests/webout.test:
	fixed teast ouptut-4.4: adapted for new version output

	* src/unix/configure.in:
	fixed NODOT_VERSION (currently unused)

2002-07-30  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/web.c (Websh_Init):
	provide package websh
	
	* ChangeLog, changes: 
	incorporated file "changes", which is now removed

2002-07-29  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* INSTALL: 
	added hint for threads

2002-07-28  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* quickref.xml: 
	added explanation of # to web::put*

2002-07-27  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* quickref.xml, quickref.xsl: 
	fixed links to examples
	formal cleanup
	
2002-07-25  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/cfg.c, generic/cfg.h (cfg_Init):
	fixed memory leak temporarily (added fixme)

	* generic/request.c, generic/request.h (request_Init):
	fixed memory leak temporarily (added fixme)

	* generic/tclAppInit.c, generic/web.c, generic/web.h (no changes):
	committed some booboos and refixed them later (later revisions
	are equal to revisions before I messed up...)
	
	* generic/weboutint.c (webout_eval_tag):
	fixed memory leak in web::putx
	
2002-07-24  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/interpool.c (poolGetWebInterp):
	proper return (unlock on error)

	* generic/request_ap.c (requestFillRequestValues):
	removed minor memory leak (initialized but unused Tcl_Obj)
	
2002-07-16  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/dispatch.c (Web_Dispatch):
	keep error msg when <hook> fails in web::dispatch -hook <hook>

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

	* unix/Makefile.in (dist): Made dist target and distdoc target.
	These can be used to roll releases.

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

	* quickref.xml: Added 'replaceable' elements.

	* quickref.xsl: Updated to latest XSL work.

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

	* Moved README one directory up, created INSTALL file.

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

	* quickref.xml: Changed 'title' to 'emphasis' in order to avoid
	having examples sections listed in the table of contents.

2002-04-25  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* tests/script.test:
	fixes for tcl8.4 (new error strings)

	* tests/webout.test:
	fixed tests output-4.4 and output-4.1

2002-04-19  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* apachetests/runtests.tcl, apachetests/apachetest/apachetest.tcl, apachetests/apachetest/template.conf.tcl:
	solved configuration problems for apache-1.3.24

2002-04-18  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/cfg.c (Web_Cfg):
	removed handling of [web::config script]
	call Web_ConfigPath in Web_Cfg to handle all mod_webh specific stuff

	* generic/mod_websh.c, generic/mod_websh.h:
	added a second assoc data to pool interpreter

	* generic/modwebsh_ap.c, generic/modwebsh_cgi.c, generic/modwebsh.h:
	added Web_ConfigPath

	* generic/request_ap.c, generic/request_cgi.c, generic/request.h:
	removed requestScriptName

	* apachetests/hello.test, apachetests/hello.ws3,
	apachetests/websh.conf, apachetest/apachetest.tcl:
	created test for new web::config stuff

2002-04-17  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* tests/cfg.test:
	fixed cfg-1.1 (new subcommands)

	* tests/msc.test:
	fixed copyright-1.0 (new web site url)

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

	* Makefile (quickref.html): Use catalogs for XML processing.

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

	* quickref.xsl: Added 'monounderlineseq' for options.  Looks
	better visually.

2002-04-09  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* apachetests/*:
	made all tests work for Apache 1.3 and Apache 2.0

	* generic/cfg.c, generic/macros.h, generic/webout.h:
	fixed copyright notice
	removed copyright in Generator
	removed (now) unnecessary define NETCETERA

	* generic/mod_websh.c:
	set proper handler for Apache 2 (changed websh-script to websh)

	* generic/modwebsh_ap.c:
	make it compile under Apache 2.0 and Solaris (include <sys/stat.h>)

	* tests/webout.test:
	fixed tests output-4.4 and output-4.1

2002-04-05  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/interpool.c:
	removed unnecessary check and don't destroyPool on error
	(The state we're in when we have an error is very unclear
	and it should be checked eventually, but for normal operation
	this doesn't matter)

	* generic/messages.c, generic/messages.h:
	renamed MAGIC and WEB_MSG_VERSION (consistency, no other impact)

	* generic/modwebsh_ap.c:
	fixed naming (dofinalize -> finalize)
	slightly change error handling (return proper result instead of logging
	to apache in case of 'wrong # args')

	* generic/modwebsh_cgi.c:
	proper error handling in dummy procs (web::initializer
	and web::finalizer)

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

	* quickref.xsl: <arg choice="plain"> now outputs monoseq text, to
	indicate when an argument must be inserted literally, as a
	subcommand.

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

	* generic/interpool.c (initPool): Removed 'called' - it can only
	happen once.  Thanks to Ronnie.

2002-03-27  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/formdata.c (parseUrlEncodedFormData, parseMultipartFormData):
	set back channels after reading form data

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

	* generic/interpool.c (initPool): Remove locking, as this is
	called from the child_init area, which shouldn't be
	multi-threaded.  Thanks to Ronnie for pointing this out.

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

	* quickref.xml: Changed documentation for web::log, which now
	defaults to not running 'subst' on its arguments.

2002-03-20  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/paramlist.c (paramGetIndexFromObj): removed fixed allocation
	(is a bit slower though since we need to find out how much to allocate)

	* tests/dispatch.test: fixed dispatch-5.14

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

	* generic/mod_websh.c (merge_websh_config): Don't reset the locks
	here.

	* generic/log.c (destroyLogPlugIn): Send something to stderr if
	there is no plugin.

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

	* apachetests: Added new, modularized test system.  Should allow
	easier sharing of improvements across Apache Tcl projects.

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

	* quickref.xml: changed <...> to <option>...</option.

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

	* quickref.xsl: Added our own custom .xsl file for Tcl style
	output.

2002-03-07  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/filecounter.c, generic/filecounter.h:
	- added configurable permissions
	- fixed comments to fit into 80 char columns
	- changed behavior of -wrap to match documentation
	- set all default into header file

	* generic/interpool.c, generic/interpool.h:
	- typecast logToAp (so it does not conflit with other plugins)
	- added a numerical id to every webInterp (fo easier identification)
	- always log the id and the class when logging about interps
	- fixed some calls to apache log (diffs for ap 1.3 and ap 2.0)

	* generic/logtocmd.c (logToCmd):
	avoid compiler warning: type cast in logToCmd

	* tests/filecounter.test: fixed tests 2.7, 2.8, and 2.9 to
	comply with new option -perms and changed option -wrap

	* doc/quickref.xml: fixed documentation of web::filecounter:
	added default values and -perms option

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

	* generic/logtocmd.c (logToCmd): Use a real list instead of a
	DString.

	* tests/cmdurl.test (getquerystringfromurl): Changed tests to use
	getquerystringfromurl instead of web::querystring::getfromurl.

	* generic/interpool.c (initPool): Make sure we are only called
	once.

	* generic/querystring.c: delete Web_GetQueryStringFromUrl
	function/command.

	* unix/Makefile.in: Avoid the final link step if it's already been
	performed, for websh, and mod_websh.so.

2002-03-06  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/interpool.c (readWebInterpCode): use
	Tcl_ErrnoMsg(Tcl_GetErrno()) instead of Tcl_PosixError(interp),
	because it's independent of interp

	* generic/logtoap.c, generic/logtoap.h (logToAp):
	added additional formatting capabilities to logToAp

	* generic/request.c: include sys/errno.h, fixed logging of
	unsuccessful tempfile removal

	* gneric/response_ap.c (apHeaderHandler):
	Fixed sending of multiple headers

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

	* generic/request.c (removeTempFiles): Log error on failure of
	'remove'.

	* generic/paramlist.c (paramGetIndexFromObj): stopgap fix to make
	sure we don't overflow.
	(paramGet): 'default' in switch statement returns error, but we
	should never arrive there.

	* generic/mod_websh.c (websh_init_child): Create Apache log entry
	if initPool doesn't return an OK.

	* generic/modwebsh_ap.c (Web_InterpClassCfg): Pass mtime to
	createWebInterpClass after fetching it with Tcl_Stat.

	* generic/interpool.c (createWebInterp): Fixed fixme - log error
	to Apache.
	(poolGetWebInterp): Switched to request_rec.request_time.
	(createWebInterp): Use request_rec.request_time, and also add
	request_rec as a parameter to createWebInterp.
	(createWebInterp): Log readWebInterpCode failure via Apache.
	(destroyWebInterp): Log web::finalize errors to Apache logs.

2002-03-05  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/mod_websh.c:
	API change for Apache 2 (register_hooks and ap_log_error)

	* generic/request_ap.c (requestFillRequestValues):
	expclicit type cast to satisfy compiler

	* generic/webout.c (Web_Response): added type cast to
	avoid compiler warning (Solaris cc)

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

	* unix/configure.in: Changed version to 3.5.

	* generic/request.c (createRequestData): Removed
	handleToSpecificReqData here and elsewhere - it's handled in other
	ways (through set/get assocdata).

	* generic/mod_websh.c: We *don't* check for files' existance,
	because they might be mapped with interpmap, and might not even
	really exist.

	* generic/interpool.c (poolGetWebInterp): Use Tcl_Stat instead of
	'file mstat' called with Tcl_Eval to get mtime.

	* apachetests/template.conf.tcl: Change port to 8081, instead of
	8080, because some people already use that for a test server.

	* apachetests/runtests.tcl: We no longer start the server
	automatically.

	* Added headers.ws3 and headers.test files, to be used for header
	testing.

	* apachetests/mod_websh.test (server::start): Created
	server::start and server::stop commands for use in tests.

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

	* tests/webout.test: Removed test for {= tags.

	* generic/mod_websh.c (exit_websh_pool): Added this as a
	registered cleanup.

	* generic/mod_websh.c (websh_handler): Do correct checks for
	Apache2.

	* doc/quickref.xml: fixed web::interpclasscfg default of maxrequests

2002-02-18  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/interpool.c (poolReleaseWebInterp):
	allow interps to live forever when maxrequests == 0

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

	* generic/weboutint.c (webout_eval_tag): Workaround to avoid
	printing headers if the very first thing in putx is an opening
	tag, starting a block of Tcl code.

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

	* generic/url.c (Web_CmdUrlCfg): Change to use two variables for
	'scheme' - one as a config, and one to hold the actual value.

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

	* websh.spec: Fix-ups to make websh.spec work better - generates
	RPM's now on my system.

	* unix/Makefile.in (install-doc): Moved install doc to be near
	  other 'install' targets.  Make install-doc use DESTDIR instead
	  of prefix variable.

2001-12-28  David N. Welton  <davidw@dedasys.com>

	* generic/uricode.c (uriDecode): Fixed comparisons to work with
	'char *' instead of specifying signed/unsigned.

2001-12-28  Ronnie Brunner <ronnie.brunner@netcetera.ch>

	* generic/tcldecmt.tcl: escaped newline in output
	(Solaris cc does not like newlines in string literals)

	* unix/Makefile.in: delete ../generic/script.h in clean rule

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

	* generic/webout.c (Web_Response): Add web::response -select
	default to get set channel for both web and CGI.

	* generic/request.h: Add requestGetDefaultOutChannelName.

	* tests/webout.test: Add test for web::response -select default.

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

	* generic/cfg.c (Web_Cfg): Create a "web::config reset" command,
	which resets cmdurltimestamp, uploadfilesize, timeparam and
	cmdparam.

	* generic/request.c (resetRequestData): #if out resetting of
	variables configured via web::config.

2001-11-30  David N. Welton  <davidw@dedasys.com>

	* webshinspect.ws3 (web): Added -path to filecontext.

	* filecontext.tests: Added -path elements to filecontexts.

	* generic/sessctx.ws3: Make -join a mandatory argument for filecontext.

	* generic/mod_websh.c: move initPool to Child Init function.

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

	* generic/tcldecmt.tcl: Add newlines/newline quoting backslashes
	to mirror the script in Tcl's initScript.

	* generic/cfg.c (Web_Cfg): cmdUrlTimestamp changes.

2001-11-22  David N. Welton  <davidw@dedasys.com>

	* generic/url.c (createUrlData): First cut at making cmdurl scheme
	bswitch between https and http depending on environmental variables.

	* tests/dispatch.test: Changes necessary here to correctly handle
	errors that are now propogated from web::dispatch.

	* generic/dispatch.c (Web_Dispatch): Propogate errors from
	parsePostData.

	* cfg.c: Added CMDURLTIMESTAMP as a global option that may be
	configured with web::config.

	* unix/configure.in: Added debugging flags.

	* generic/request_ap.c (requestFillRequestValues): Make
	requestFillRequestValues return TCL_ERROR instead of NULL.

	* generic/context.tcl: Added 'delete' proc for contexts.

	* Added apachetests directory.

	* generic/log.c (createLogData): Change logSubst to default to 0
	(off).

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

	* generic/uricode.c (uriDecode): changed 'utf' to be a signed
	character, so that the comparison with 0 works on all
	architectures.

	* generic/tcldecmt.tcl: Extend functionality to do multiple files,
	and properly quote \ and " characters for use in a C string.

	* unix/Makefile.in: Replaced shell commands with more
	functionality in tcldecmt.tcl script.

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

	* unix/configure.in: Moved to this directory from src/.

2001-03-14  Simon Hefti <simon.hefti@netcetera.ch>

	* webutl.c: fixed setting global var for web::response command
	* web::response error messages improved
	* quickref updated
	* web::dehtmlify bug fix

2001-01-21  Simon Hefti <simon.hefti@netcetera.ch>

	* sessctx.ws3 supports web::init 1 -create
	  which creates the session file, if it does not exists yet,
	  whithout throwing an error. Also, allow capitals in
	  session id's.

	* varchannel.c: let Tcl handle the global variables, especially
	  when ref counter > 0, Also, suppress error message which
	  Tcl leavs in the interp if a channel does not exist yet,
	  if we could create it successfully.

	* filecontext.test:  test "valid id" checker, and "-create" option
	  of filecontext

	* webout.test: test channel switching

	* args.c: new function argdbg to write out arguments

	* cookie.ws3: new init prototype requires additional,
	  optional argument (-create). Added, even thouh it is unused here.

	* log.c: better check of valid options in web::logdest

2001-01-01  Simon Hefti <simon.hefti@netcetera.ch>

	* used -DTCL_MEM_DEBUG to find the last memory leaks. 2 found amd
 	fixed. A lot of "potentially leaked" (as indicated by purify)
 	disappear if test suite is run in a seperate interp
	(using interp create) and interp is deleted afterwards. In other
 	words: this is housekeeping data that is properly freed when the
 	interp is destroyed.

	* parsing of multipart/formdata: more indicative log messages
 	hinting to the prominent boundary problem (a boundary with lots of
 	dashes makes it easy to overlook the first two).

	* varchannel: solved encoding problem by using Tcl_GetByteArray
 	instead of Tcl_GetString

	* web::dispatch tests: since bad postdata do not throw errors any
 	longer (websh tries to answer the request even in case of bad
 	postdata) we had to rewrite the tests which checked those
 	errors. log entry is checked now instead.


2000-11-14  Simon Hefti <simon.hefti@netcetera.ch>

	3.0b3 release

	This is a test release - some stuff needs to be finished.
	Particularly: search for potential memory leaks, and Windows
	stuff.

	The API is final. mod_websh builds and runs on Linux and Solaris
	using apach 1.3.x.

2000-04-27  Simon Hefti <simon.hefti@netcetera.ch>

	3.0b2 beta-2 release of Websh 3

	The Apache Module added - is known to build and run
	on SunOs-5.6 and on Linux.

	Several minor bug fixes - at Netcetera, this Websh is in
	productive use since beta-1.

	* mod_websh commands introduced:
	  web::interpclass
	  web::initializer
	  web::finalizer
	  web::dofinalize
	  web::maineval
	  web::interpid
	  web::interppool
	* log plugin for apache added (aplog)
	* web::setupcontext renamed to web::context
	* web::request -channel introduced
	* lencrypt, ldecrypt removed
	* web::asciify85, web::asciify64 removed


2000-03-20  Simon Hefti <simon.hefti@netcetera.ch>

	3.0b1 beta-1 release of Websh 3

	This release is known to compile and run on SunOS-5.5.1 and Linux
 	and should do so on most UNIX variants.

	The Apache Module is missing in this release.

	* session management built-in
	* by default, the log module subsitutues vaiable and command names of
	  the log message
	* lencrypt, ldecrypt introduced
	* web::response replaces command web::output
	* web::request provides access to the request object
	  (CGI environment vars or Apache Module data)

2000-03-07  Simon Hefti <simon.hefti@netcetera.ch>

	3.0a1 alpha-1 release of Websh 3

	first release

	This release is known to compile and run on SunOs-5.5.1.
	A couple of tests of the test suite are marked as "empty" and
 	skipped.
	The session management module is missing in this release.
	The Apache Module is missing in this release.
