Thu Nov 28 18:50:14 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* filefuncs.c (pf_directory_contents): Given the empty string as
	the package name, use the current package.

Thu Nov 21 15:28:19 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_sub): If called with no arguments, then just put
	it back in the page.
	(pf_ifeq): Don't evaluate the consequent twice.
	(pf_if): Don't evaluate the consequent twice.
	(pf_while): Don't evaluate the already evaluated body results.
	(pf_downcase): Don't evaluate the already evaluated text.
	(pf_upcase): Don't evaluate the already evaluated text.
	(pf_capitalize): Don't evaluate the already evaluated text.

Mon Nov 18 08:27:25 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* parser.c (mhtml_add_user_function): Strip comments at define
	time.

    -------------------- Above are changes for 5.02 --------------------

Sat Nov 16 15:16:01 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* database.c: Add GDBM_FAST to databases opened with WRITE mode.

Thu Oct 31 11:02:48 1996  Henry Minsky  <hqm@pixis.datawave.net>

	* gsql.c (pf_database_tables): SQLRowCount returns 0 on anything
 	but results of INSERT and UPDATE, so we have to manually count the
 	rows returned from a SQLTables command, and dynamically allocate
 	storage for the mhtml result array.

Mon Oct 28 12:20:31 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* database.c (database_strerror): Return a string describing the
	most recent error in the database system.

Sat Oct 26 02:18:09 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* cryptfuncs.c (triple_des): Zero out the destination before
	encryption.  This means that a string S encrypted with key K will
	always return the same encrypted string.
	(triple_des): Pad the input buffer to 8 byte boundary before
	encrypting.

Wed Oct 23 13:48:53 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* parser.c (read_sexp_1): Don't forget to put back semi-colons
	which don't start a comment.

Tue Oct 22 07:37:44 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_redirect): Use the current protocol and version,
	not just HTTP/1.0.

	* symdump.c (symbol_dump_package): Don't dump the package if there
	are no symbols in it.

Sat Oct 19 08:31:41 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* parser.c (read_sexp_1): Skip comments outside of quotes.  This
	fixes <if> statements containing comments.

Mon Oct  7 08:35:06 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* symbols.c (symbol_store_array): Add definition for this function.

	* symbols.h: Add prototype for symbol_store_array ().

Thu Oct  3 09:51:52 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pages.c (http_return_image): Deprecate unused function.
	(page_set_cookie): Deprecate unused function.
	(page_insert_http_header): Deprecate unused function.
	(page_syserr): Analogous functions to page_debug and friends for
	system errors only.

Wed Oct  2 01:15:35 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* require.c (pf_require): Make sure that mhtml_user_keywords has a
	value after calling symbol_load_package ().

Tue Oct  1 14:37:07 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (add_user_function): Carefully handle CR/NL sequence.
	(read_sexp_1): Carefully handle CR/NL sequence.
	(page_process_page_internal): Carefully handle CR/NL sequence.

Mon Sep 30 09:49:06 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (change_increment): Multiply the BY= value by the
	default increment, thus making decrement with arguments do the
	right thing.

Fri Sep 27 12:02:19 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* filefuncs.c (unix_add_date): Store 2 digits per item -- pad with
	leading zeros.

	* msqlfuncs.c (pf_database_query): Merge/edit in changes from
	hqm@ua.com which allow the user to specify a "keys=foo" argument.

Sun Sep 15 08:28:20 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* msqlfuncs.c (pf_database_save_record): Don't print keyfield name
	twice.  Merge in changes from hqm.

Tue Sep  3 13:33:40 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_redirect): Allow protocols other than http to
	pass through unharmed.

Mon Sep  2 10:29:20 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* symbols.c (symbol_copy): Allow user defined functions to be
	copied.

Thu Aug 29 12:28:02 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_create_session): And other functions.  Use
	"DEFAULT::SID" whereever "SID" is referenced.

Fri Aug 16 08:33:58 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_substring): Fix inverted calculation (beg - end)
	should have been (end - beg).
	(page_process_page_internal): Complain loudly to page_debug () if
	an internal function resets search_start to before the beginning
	of the buffer.

Thu Aug 15 12:38:10 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pages.c (page_subst_in_page): Don't do replacement in the case
	that the length of the matched string is 0.

Wed Aug  7 13:09:20 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_pad): Allow "center" as a synonym for "middle".
	(pf_package_to_alist): When not passed a package name, use the
	current package.  That is, no package is a synonym for a package
	name of "".

Tue Aug  6 12:58:08 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* cryptfuncs.c (pf_decrypt, pf_encrypt): Encrypt variable contents
	using triple-DES encryption   Only compiled when --with-des is
	specified to configure.

Wed Jul 31 09:36:14 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* cgi-exec.c (): New file.

	* pagefuncs.c (pf_server_push): Use write () to output data, not
	fprintf ();  Set variable mhtml::server-pushed when called.
	(pf_cgi_exec): Moved to cgi-exec.c.  Similar changes made to
	pagefuncs.h.

Fri Jul 26 17:28:56 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (execute_user_function): Additional argument ATTR is
	the open tag body of the called function.  Now <set-var
	%attributes> does "the right thing".  Yeah, right.

Sat Jul 20 17:37:34 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* Makefile.in (prims.c): New file implements %%READ and %%EVAL.

Mon Jul  8 12:14:01 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_plain_text): New keyword NOLOWER says not to
	operate on lowercase characters at the starts of paragraphs.

Fri Jul  5 14:06:21 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (read_sexp_1): Hairy changes to limit when
	backslashes are stripped from the input stream.  Don't ask, you
	don't want to know!

Thu Jul  4 00:11:27 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* session.c (session_lock_database): New arg MODE controls whether
	the database should be locked for read or for write.  All callers
	in this file changed.

Tue Jul  2 19:33:57 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_get_variable_once, pf_get_variable): If
	debugging is set greater than 11, notify when the value is not
	present.
	
Sat Jun 29 09:06:38 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* session.h: Allow the user to specify the location of the session
	database.  New function set_session_database_location ().

Sat Jun 15 09:57:01 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* streamfuncs.c (pf_stream_get_contents): New arg CHUNK-SIZE=size
	causes that many bytes to be read from the stream, and ignores
	STOP-AT argument.
	(pf_stream_writeable): Use select () on those systems which have
	it to check if the stream is actually writeable.
	(pf_stream_shutdown): New function.  Close an open socket.
	(stream_write): 
	(set_io_timer): A 28.8 modem can deliver a maximum of 3.6k per
	second without taking compression into consideration.  A 14.4 can
	only deliver 1.8k per second.  So, we will give the network 2
	seconds to deliver each 1k of data, and then cushion that with a 10
	second grace period.  Gee, isn't the Internet Fantastic?
	The actual timeout can be controlled with the value of the
	variable mhtml::minimum-data-transfer-rate; the number of bytes
	per second that we insist on being able to transfer.

Wed Jun 12 16:57:48 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_cgi_encode): Make sure that symbol names passed
	in a package get the package name as part of the symbol.  Without
	this, several existing packages will break.

Tue Jun 11 15:53:03 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c, session.c, session.h: Change all references to
	`sid_t' to be `session_id_t'.  HPUX already has sid_t.

Fri Jun  7 17:49:08 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (arithmetic_process): Don't call strchr () on  the
	NULL string, you moron.  Give debugging output when arithmetic
	operators called with fewer than two args.

Sun Jun  2 10:25:15 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (page_process_page_internal): Delete the body text
	even when syntax checking only.

Fri May 24 10:56:32 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_cgi_decode): Implement this function.

Sat May 18 09:36:39 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* filefuncs.c (pf_directory_contents): Only free RESULT if
	non-null.

Fri May 17 10:40:55 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* simplefuncs.c: New file implements PROG, CONCAT, and STRING-EQ.

	* Makefile.in (TEST_PROGS): Deprecate session-export-posted,
	session-import-posted, and html-quote.

Sun May  5 16:00:51 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_string_compare): New function returns "less",
	"equal" or "greater" depending on string comparision of two
	arguments.  Argument "caseless=true" means do the comparison with
	case being insignificant.

	* pages.c (page_subst_in_page): Allow the replacement string to
	contain \\digit representing the matched text of a subexpression.

Thu Apr 25 13:40:46 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_match): Argument of package=PACKNAME installs
	various variables in PACKNAME.  The variables are:
	     PACKNAME::EXPR: The passed in expression.
	  PACKNAME::MATCHED: The number of subexpressions that matched.
	  PACKNAME::MATCHES: Extracted matched subexpressions.
	    PACKNAME::START: Indicies of matched subexpression starts.
	      PACKNAME::END: Indicies of matched subexpression ends.
	   PACKNAME::LENGTH: Lengths of matched subexpressions.
	
Wed Apr 24 00:15:26 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_date): Allow a numeric argument to specify the
	time to convert in ticks.

Sat Apr 20 14:37:02 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* dbfuncs.c (pf_database_query): New argument SEARCH-LIMIT=num
	causes search to stop when that many records satisfying the search
	criteria have been found.
	(pf_database_query): New argument FORMAT-LIMIT=num causes
	formatting to stop when that many records have been formatted.

Thu Apr 18 16:19:32 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (execute_user_function): Handle named parameters.

Mon Apr 15 09:08:58 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_subst_in_string): New function operates on a
	string and leaves the results in the page.

Sun Apr 14 13:04:04 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* symbols.c: Add flags field to symbol type.
 	(symbol_clear_flag): Clear in SYMBOL the flag FLAG.
	(symbol_set_flag): Give SYMBOL the flag FLAG.
	(symbol_get_flags): Return the flags associated with SYMBOL.

Sun Mar 24 21:50:47 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* dbfuncs.c (pf_database_unique_key): Allow a suggestion to be
	given.

Thu Mar 21 19:33:02 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pagefunc_destroy_package): Destroy package *after*
	checking against well-known internals.

Thu Feb 29 02:12:18 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* dbfuncs.c (pf_database_load_record): Now can load arrays.
	(pf_database_save_package): New function saves an entire package.

Wed Feb 28 10:22:08 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_function_def): New function prints out user
	defined functions verbatim.

Sun Feb 11 12:21:25 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (alist_to_package): Make sure the alist is really a
	list.
	(pf_package_vars): Accept "strip=true" to not insert the package
	names in the output.

	* pagefuncs.h: Okay, I give up.  Implemented <upcase>, <downcase>,
	and <capitalize>.

Sun Feb  4 03:46:52 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* pagefuncs.c (pf_match): Added new actions: `startpos', `endpos'
	and `length'.
	(pf_substring): New function does what you think it does.

Wed Jan 31 22:08:12 1996  Brian J. Fox  <bfox@nirvana.datawave.net>

	* dbfuncs.c: New file contains database functions.

	* Makefile.in (LIB_CSRC): Add dbfuncs.c,o,h to files list.

	* pagefuncs.c (pagefunc_get_descriptor): Initialize database
	functions if MHTML_DATABASE is set (see pagefuncs.h).  All
	database functions moved into separate file (dbfuncs.h).

Sat Dec  9 00:03:15 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_while): Free `code' after use even if bindex == 0.

	* session.c (session_reap): Free `key' and `to_be_reaped' after use.

Fri Dec  8 18:08:17 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* forms.c (forms_set_tag_value_in_package): Free `name' if it has
	been reallocated.

	* session.c (session_access): Free `info' after use.

	* pagefuncs.c (pf_sessions_of_key): Free `info_list' after use.
	(page_process_page_internal): Free `closer' after use.
	(pf_alist_to_package): Free `symbols' after use.
	(pf_set_form_input_values): Free `symbols' after use.

	* symbols.c (symbol_destroy_package): Free
	package->table->symbol_list as well as the contents.

Thu Dec  7 03:22:50 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (arithmetic_operate): New variable
	mhtml::decimal-places can be set to indicate the number of decimal
	places to be produced during arithmetic operations.

Tue Nov 28 14:14:35 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_plain_text): Allow variable NOBR.  When set, the
	initial paragraph break does not appear.

Sat Nov 18 14:57:01 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (number_p): Check for NULL string.

Sat Nov 11 07:35:20 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_database_unique_key): New function.

Fri Nov 10 11:55:10 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_sessions_of_key): New function.
	(all session functions): Call session_free () where appropriate.

	* session.h: New function (session_free);

Tue Nov  7 21:33:26 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pages.c (page_insert_http_header): Check for NULL buffer before
	calling strncasecmp.

Mon Nov  6 08:56:59 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (arithmetic_operate): Handle floating point
	transparently.  Output results are integers unless input
	parameters contain a decimal point, in which case, the output
	contains a decimal point if required to specify the value of the
	number.  Only two decimal places are returned.

Sat Nov  4 09:15:03 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_package_delete): New Function.  Delete the
	contents of the packages named by the arguments.

Mon Oct 16 23:17:01 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_undef): New function.  Remove a defined subst or
	macro.

Sun Oct 15 13:04:23 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (dbrec_comp): If both of the resultant string fields
	are fully comprised of digits, then sort numerically, from largest
	to smallest.

Fri Oct 13 12:54:48 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.h: Added new function: WITH-LOCKED-SESSION.

	* pagefuncs.c: Now that we have server push, many processes can
	share a single session, so we allow for the locking of access to a
	particular session record during atomic operations, such as
	get-session-var and set-session-var.

Thu Oct 12 11:06:40 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pagefunc_canonicalize_file_name): New function
	returns the complete path to a file.
	(pf_include): Modified to call pagefunc_canon....

Mon Oct  9 12:20:38 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_server_push): New command implements server
	pushing in a polite way.

Fri Sep 29 10:11:25 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* streamfuncs.c: Add stream-readable.

Sun Sep 24 16:33:04 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (arithmetic_process): Good idea? Bad idea? Cause
	arithmetic operators to lookup values that are not all digits as
	page variables.  Thus, <add counter 12> is now equivalent to
	<add <get-var counter> 12>.  I'm not convinced this is a good
	idea.

Sat Sep 23 11:36:47 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.h: Added pf_randomize and pf_random.

Thu Sep 21 02:24:05 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_plain_text): Only operate on the first character
	of a paragraph if it is alpha-numeric.
	(pf_redirect): If no redirection is given, return a "No Response"
	code from the server.  Return a full MIME header for redirections,
	and process the redirected URL to make it fully qualified.

	* pages.c (page_set_cookie): New function sets the cookie in the
	outgoing reply.  You must have a fully compliant MIME header in
	PAGE already.
	(page_insert_http_header): Add all of the required headers.  CGI's
	could now run as standalone "nph-" programs.

	* pages.h: Add page_set_cookie () prototype.

Mon Sep 18 13:50:54 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* forms.c (forms_set_tag_value_in_package): Set symbol->notifier
	based upon value being set, if it is present.

	* pagefuncs.c (page_process_page_internal): Set
	`semicolon_comments' to the inverse of
	mhtml_inhibit_comment_parsing.
	
	(pagefunc_initialize_notifiers): Initialize symbols which require
	special notification.  In this case, the only variable is
	mhtml_inhibit_comment_parsing.

	* symbols.c (symbol_notify_value): Set SYMBOL to change the value
	of NOTIFIER when SYMBOL is either set or freed.  NOTIFIER is set
	to 1 when SYMBOL has any value, 0 otherwise.

Sun Sep 17 09:56:40 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (unlock_database): Pass in the name of the database
	to unlock, and that function unlinks the lockfile.  All callers
	changed.
	(lock_database): Write the PID of the locking process into the
	lock file.
	(add_user_function): When "whitespace=delete" only remove unquoted
	newlines and the whitespace that follows them, not all whitespace
	indiscriminately.
	(page_process_page_internal): Okay.  Any sequence of 3 semicolons
	indicates a comment from there through the end of the line
	inclusive.
	(pf_plain_text): Start with a paragraph, delete comments cleverly,
	and insert opener and closer even for text that doesn't start a
	line.

Sat Sep 16 07:56:13 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_session_import): If the external name is "" that
	is a different case from no external name.  In that case, preserve
	the package names of imported symbols while placing them in the
	import package.

Fri Sep 15 09:14:55 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_debugging_on): Allow debugging on user defined
	functions.
	(pf_subst_in_var): Increase output for debug levels greater than 5.
	(pf_page_debug): New function inserts evaluation of argument into
	debugging output.

Thu Sep 14 09:08:02 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (wrap_by_character_class): New argument to function
	`leav_braces' says to leave full brace constructs undisturbed if
	non-zero.  All callers changed.  pf_small_caps now leaves brace
	structures undisturbed.
	(pagefunc_snarf_vars): New argument `allow_assignments_p' when
	non-zero says to read the old way, when zero says never let the
	equals sign be significant.

Wed Sep 13 10:15:34 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_if): If the test is empty_string_p, that
	indicates failure.
	(pf_increment): Evaluate the INCREMENT argument.
	(pf_var_case): Evalute both the variable and it's case value.

Tue Sep 12 00:18:07 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_match): Allow the empty string to be matched
	against, but not the NULL string.  Change the default action to
	"report".
	(db_mode): Allow "write" as well as "writer" for db modes.

Mon Sep 11 04:17:38 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_database_query): Rewrite to allow sorted
	output.
	(read_sexp): Only remove quotes if they appear at top-level.
	Quotes appearing within braces are retained.  This means that
	<set-var foo" "bar=baz> creates a variable named "foo bar".

	(pf_not): Read the first s-expression in the body, and evaluate
	that.  We cannot simply evaluate the body the way that we used to,
	because parsing of s-exprs has changed.

	* pagefuncs.c (pf_or, pf_and): Test for an empty string, not only
	the null string.

Sun Sep 10 00:06:42 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (find_user_function): Lookup user functions in the
	user function package.
	
	(pagefunc_get_descriptor): Lookup keywords in a special keyword
	package.  Build the contents of that package in this function if
	not already built.
	
	(page_process_page_internal): Remove fancy hair for speeding up
	lookup.  We now simply use packages, so lookups are plenty fast.
	
	(add_user_function): Add user defined functions in their own
	package, not in a static array.

	(user_keywords): New package contains user keywords.
	
	* pages.c (page_read_template): Fail if the page to read is a
	directory.

Mon Aug 28 01:29:14 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (arithmetic_operate): Allow "eq" to caseless compare
	strings if both args do not contain all digits.

Sun Aug 27 18:06:25 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_database_query): New function handles looping
	through the database and evaluating forms within that scope.
	(Arithmetic Operators): We now have gt, lt, eq, add, sub, mul,
	div, and mod.  `string-eq' is not present, but `match' is.

Sat Aug 26 22:51:22 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (read_sexp): New function is now used when reading
	the arguments to a Meta-HTML function.  This obviates the need for
	ridiculous quoting rules, and remains backwards compatible.

Fri Aug 25 12:29:49 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* forms.c (forms_set_tag_value_in_package): Implement shorthand
	notation for array references.  Now "foo[j]" is treated as
	"foo[<get-var j>]".

Sun Aug 20 10:55:17 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_unset_variable): Allow array names.
	(pf_unset_session_var): Allow array names.

Wed Aug 16 20:57:24 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* database.c (many functions): Anally cast (char *) to (unsigned
	char *) and vice-versa to make the alpha compiler happy.  Note
	that this was only necessary because the FUCKING LOSERS at UCSB
	can't install Gcc correctly.  Gosh, what a win.

Tue Aug 15 17:49:25 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pagefunc_snarf_vars): Allow "\n\t\f\r" to appear in
	strings as they are represented here.

Mon Aug 14 13:11:30 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* session.c (whole file): Change all references to "database_xxxx"
	to "sessiondb_xxxx".  Make #defines for "sessiondb_xxxx" point to
	database routines if not compiling with the shared memory database.

	* forms.c (forms_set_tag_value): Allocate enough space for the
	additional NULL at the end of item->values.  In this case, it is
	(2 + var_index), not (1 + var_index).
	(forms_set_tag_value): Implement new syntax.  Now "tag[]" refers
	to the entire array of values, and if VALUE contains newlines, the
	lines are stored in successive elements of TAG.
 	(forms_get_tag_value): Implement new syntax.  Now "tag[]" refers
	to the entire array.  The value returned is all of the elements of
	TAG, separated by newlines.

	* pagefuncs.c (pf_cgi_exec): Page evaluate the contents of the
	string to execute before calling shell_exec.

Sun Aug 13 12:29:25 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (page_process_page_internal): Remove extra carriage
	returns from output for complex-tag bodies.
	Move logic of building the optimizing test strings to a separate
	function; this is now called from add_user_function ().
	More code: Implements user functions.
	New commands: <defmacro> and <defsubst>.
	(page_process_page_internal): User functions can override builtins.
	(pf_example): Removed, since this is trivial ro produce with a
	macro.

	* pagefuncs.h: New commands <defmacro> and <defsubst> implement
	user functions.
	
Sat Aug 12 23:00:36 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* session.c (session_restore): Force the restoration of the
	(SESSION_INFO *) passed.  If the session is already active,
	do nothing except update the access time.

Fri Aug 11 12:42:37 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pages.c (http_return_image): Add http_return_image ().  Creates
	a page containing the HTTP magic and image of FILENAME and
	IMAGETYPE.

Wed Aug  9 02:44:57 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pages.c (page_complex_tag_bounds): Malloc enough space in CLOSER
	for additional slash character.

Tue Aug  8 20:41:45 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.h: Added CGI-EXEC and SUBST-IN-VAR.

Sun Aug  6 14:32:13 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* pagefuncs.c (pf_include): Change MHTML-INCLUDE-PREFIX to
	MHTML::INCLUDE-PREFIX.

Sat Aug  5 14:37:54 1995  Brian J. Fox  <bfox@wizard.datawave.net>

	* forms.c (forms_input_data): Prepend "ENV::" to every environment
	variable.  They now cannot be found any other way.
	

