2001-07-18  Steen Lumholt  <slu@lumholt.dk>

	* alloc.h, boolean.h, box.h, capi.h, char.h, control.h, cvar.h,
	doc.h, dynlib.h, eval.h, fdport.h, fport.h, gc.h, hashtab.h,
	iofun.h, list.h, macros.h, misc.h, modules.h, net.h, nls.h,
	node.h, number.h, pointer.h, port.h, posix.h, profile.h,
	promise.h, read.h, regexp.h, result.h, scmport.h, sig.h, sport.h,
	srfi-1.h, srfi-13.h, stringfun.h, symbol.h, syntax.h, uvector.h,
	uvector64.h, validate.h, values.h, vector.h: Use the prefix
	__SIZZLE_* when protecting headers from multiple inclusion.

2001-03-07  [ Ela ]  <ela@lkcc.org>

	* srfi-1.c (make_list_func): Reverted the below patch and
	just swapped two statements. Works fine now without `volatile'.

2001-03-04  [ Ela ]  <ela@lkcc.org>

	* srfi-1.c (make_list_func): Marked the `res' variable as
	volatile since the MSVC compiler dropped its reference while
	optimizing which caused the garbage collection to fail and
	produce a segmentation fault.

2001-03-02  [ Ela ]  <ela@lkcc.org>

	* dynlib.c (sys_dlsym_func): Fixed behaviour of this function
	in Win32 for it checked failure using the dlerror() function 
	instead the return value of dlsym().

2001-01-25  [ Ela ]  <ela@lkcc.org>

	* dynlib.c (load_library_func): Changed naming scheme for
	Win32 DLL's to ("lib" + module + ".dll").

2001-01-11  [ Ela ]  <ela@lkcc.org>

	* posix.c (fsync): Using _commit() instead of FlushFileBuffers()
	for the fsync() replacement in Win32.

2000-12-21  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c (setpwent_func): Docstring correction.
	(endpwent_func): Dito.

2000-12-19  [ Ela ]  <ela@lkcc.org>

	* iofun.c (open_port): Open in binary mode.

	* eval.c (primitive_load_func): When opening a file for reading
	or writing this is done in binary mode only.

	* capi.c (zzz_evaluate_file): Opening file to evaluate in binary
	mode in the Win32 port.

2000-12-15  [ Ela ]  <ela@lkcc.org>

	* uvector[64].c: Included <validate.h>.

	* iofun.c: Included <string.h> for strlen().

	* posix.c (getdrive_func): chdrive, getdrive finally works
	in Win32.

2000-12-14  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* vector.c, node.c: Removed obsoleted environment caching code.

	* read.c, node.c, eval.c, capi.c, node.h: Deprecated use of
	zzz_state.current_input_file_name.

	* box.c, char.h: Removed inclusion of assert.h.

	* libsizzle.h: Added inclusion of validate.h.

2000-12-12  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* promise.c (force): Do not store the result of a forced
	evaluation into the promise if it has been stored during
	evaluation by another force.  Now Sizzle passes the delay/force
	tests from ../test/r4rstest.scm.

2000-12-11  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c (chdrive, getdrive): New primitives for dealing with
	drive numbers (*shiver*) under Windoze.

2000-12-08  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* srfi-1.c (concatenate, concatenate!, append-reverse,
	append-reverse!): More primitives moved over from
	`../data/core/list-lib.scm'.

2000-12-07  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* pointer.c, box.c: Removed FIXME because pointers and boxes are
	now documented.

	* node.c (zzz_initialize): Call zzz_init_box().

	* nls.c, nls.h: New type name for data type `box'.

	* box.c, box.h: New files implementing the new data type `box'.

	* stringfun.c (dirname, cleanup-filename): Check for safe filename
	parameter.

	* posix.c (stat, lstat, open-fdes, sys:creat, unlink, readlink,
	execl, execlp, execle, utime, directory-files, opendir, chmod,
	chown, chdir): Check for safe filename parameter.

	* module.c (import_module): Check for safe filename parameter.
	
	* eval.c (primitive-load, primitive-load-path, transcript-on):
	Check for safe filename parameter.

	* dynlib.c (%dlopen, load-library): Check for safe filename
	parameter.

	* number.c, stringfun.c, char.c, vector.c, values.c, promise.c,
	sport.c, posix.c, symbol.c, boolean.c, regexp.c, hashtab.c,
	macros.c, misc.c, net.c, doc.c, iofun.c, sig.c, modules.c,
	dynlib.c, control.c, syntax.c, scmport.c, srfi-1.c, srfi-13.c,
	pointer.c: Changed inclusion of `eval.h' to `validate.h'.

	* eval.c, list.c: Added inclusion of `validate.h'.

	* validate.h (CHECK_SAFE_FILENAME): New parameter checking macro.
	Checks that a string does not contain any '\0' characters.

	* eval.h: Moved CHECK_TYPE() to validate.h.

	* validate.h: New header file. This will hold parameter checking
	macros.

	* nls.h, nls.c: Added type name variable
	`zzz_safe_filename_type_name' and initialization.

	* iofun.c (open-input-file, open-output-file,
	call-with-input-file, call-with-output-file, with-input-from-file,
	with-output-to-file, with-error-to-file): Check for safe filename
	(e.g. filenames are no longer allowed to contain '\0' characters).

2000-12-07  [ Ela ]  <ela@lkcc.org>

	* posix.c (fsync): Simple implementation of fsync() via
	FlushFileBuffers() in Win32.

	* sig.c (zzz_init_sig): Added SIGBREAK to the signal constants.

2000-12-06  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* control.c (zzz_init_control): `call/cc' is now a builtin synonym
	for `call-with-current-continuation'.

2000-12-05  [ Ela ]  <ela@lkcc.org>

	* capi.c (DllMain): This is the entry point for Win32 shared
	libraries. Whenever processes or threads attach or detach the
	library it is called with appropriate parameters. Implementing
	this routine keeps the linker from using a default entry point.

2000-12-02  [ Ela ]  <ela@lkcc.org>

	* posix.c (putenv_func): Handling putenv ("value") separately
	in the Win32 port.
	(getcwd_func): Considering the drive letter and the path
	separator '\'.

2000-12-01  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* srfi-13.c (reverse_list_to_string): Added the primitive
	`reverse-list->string'.

2000-11-30  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* srfi-1.c (fold_func): Fixed a docstring typo.

2000-11-28  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* net.c (_): Define _().

	* posix.c: Re-included definitions of various syscalls like
	`getpid()', which were temporarily moved to posix-ext.if.
	Preprocessor macros stay in posix-ext.if.

	* posix-ext.if: Removed definition of some syscalls.  They are
	better handled in posix.c, as I finally realized.  Preprocessor
	constants are left here.

	* gc.h: Removed definition of `_()'.

2000-11-24  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c: Do not call `zzz_finalize_vector()'.

	* vector.c, vector.h: Deprecated environment caching code and
	`zzz_finalize_vector()'.

	* node.h: Cleaned up prototype for `zzz_make_lloc()'.

	* node.c, eval.c, modules.c: Removed obsoleted code for old
	environment scheme.

2000-11-23  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_init_eval), node.h, node.c: Finally removed autoload
	object support.

2000-11-16  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c, node.h, modules.c, eval.c: Environments are now
	implemented much simpler.  They do not contain a hash table
	anymore, but are simply association lists.  Now the benchmarks run
	30%-40% faster, because a lot of cons'ing and vector creation is
	gone, and references to llocs is much faster now.  Isn't it nice
	to find a place to optimize which finally pays off?

	* eval.c (zzz_evaluate): Temporarily disabled procedure tracing.
	Removed counting of evaluation call nesting.

2000-11-15  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* misc.c (safe_export_names): Added a lot of safe procedures to
	the list of exported standard symbols.

	* macros.c, macros.h: Disabled high-level macros because they were
	not implemented completely in will not for the foreseeable future.

	* eval.c (zzz_init_eval): `load' is now a builtin equivalent to
	`primitive-load-path'.
	(zzz_evaluate): High-level syntax definitions are no longer
	supported.

2000-11-14  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_init_eval): Added init code for all global variables
	so that eval.c should be restartable now, too.

	* node.c (zzz_initialize): Added initialization of
	`zzz_command_line_list'.  Module should now be restartable.
	(initialize_variables): Added initialization of `print_memoized'
	and `print_func_bodies'.

	* dynlib.h, dynlib.c: Added configuration checking variable
	`zzz_config_have_dl'.

	* dynlib.c: Removed obsoleted warning comment.

	* fport.c (zzz_init_fport): Protect standard ports before
	initializing them.

	* list.c: Removed unnecessary includes.

	* misc.c: Removed unnecessary include.

	* read.c, profile.c, port.c: Made restartable by adding
	initialization for global variables to init function.

	* sig.c (zzz_init_sig): Made restartable by adding initialization
	code for global variables to init function.
	(zzz_finalize_sig): Save signal functions on initialization and
	restore them on finalization.  Also use original handlers when
	deleting a Scheme signal handler.

	* srfi-13.c: Added documentation on static variables.

	* symbol.c (zzz_init_symbol): Made symbol.c restartable.  The
	gensym counter is set to zero on every initialization.

2000-11-08  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* read.c (zzz_parse_scheme_number): Fixed bug in number->string
	conversion: Any garbage was allowed in floating point constants
	after the `.'.  Now we test whether strtod() was able to consume
	the whole string.

	* number.c: Let `min' and `max' produce inexact results if any
	occured in the parameter list.

	* node.c (zzz_eqv): Fixed serious bug in `eqv?', which failed to
	successfully compare inexact and exact numbers of the same value.

	* number.c (round_func): Fixed a bug detected by the r4rs
	conformance test: (round 3.0) delivered an exact value, when an
	inexact value was expected.

	* eval.c (zzz_evaluate): Fixed function name inference code.
	Procedures defined in a `define', `set!' or any of the `let...'
	expressions are now properly named.

	* hashtab.c: All mutating primitives now reject immutable hash
	tables.

	* nls.h, nls.c: New string `zzz_mutable_hash_table_type_name'.

	* gc.c, gc.h, node.c: Removed obsoleted support for copying GC
	object data heaps.

	* node.c (zzz_initialize): Cleaned up initialization code, removed
	unneeded code and declarations.

2000-11-07  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* read.c (read_cell_internal): Support `[...]' as list syntax if
	the configuration variable `zzz_support_scheme_brackets' is
	non-zero.

	* read.h: Removed obsoleted variable declarations.  

	* read.h, read.c: Added configuration variable
	`zzz_support_mzscheme_brackets'.

	* node.h, node.c: Added `bytecode' data type for future usage of
	compiled functions.

	* eval.c: Removed traced if `%print-calltrace%'.

	* node.h, node.c, control.c: Deprecated support for real
	continuations.

	* control.c (zzz_init_control): Removed definition of deprecated
	primitive `catch-error'.

	* eval.c (zzz_evaluate): Bugfix: A form like `(cond ((pred)))' (a
	cond clause without actions after the predicate) caused an abort
	because of a missing `goto'.

2000-11-03  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* srfi-1.h, srfi-13.h: Added documentation.

	* stringfun.h: Added documentation.

	* syntax.h: Removed prototype for `zzz_do_quasiquote' and added
	documentation.

	* vector.h, values.h, symbol.h: Added documentation.

	* doc.c (documentation_func, set_documentation_x_func,
	describe_object): Check for closures instead of lambda objects and
	extract from and store to the procedure component of the closure.

2000-11-02  [ Ela ]  <ela@lkcc.org>

	* Makefile.am: The gcc project on Win32 improved its abilities.
	Thus we can generate the import link library, def file and the
	dll itself all in one command line. The use of dllwrap is
	deprecated. We use neither dllwrap nor dlltool. Waiting for
	the GNU libtool to handle all this stuff...

2000-11-02  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* net.c (zzz_init_net): Removed FIXMEs for now documented
	primitives, documented `network-error' exception and updated and
	corrected some docstrings.

	* net.h, net.c: New global variable `zzz_config_have_net' which
	indicates whether network bindings are available.

	* read.c (read_hash): Only support reading of uniform vectors if
	they are enabled.

	* posix.h, posix.c: New global variable `zzz_config_have_posix'
	which indicates whether posix bindings are available.  `read',
	`read!' and `write' now throw a not-available exception if uniform
	vectors are disabled.

	* regexp.h, regexp.c: New global variable `zzz_config_have_regexp'
	which indicates whether regexp bindings are available.

	* uvector.h, uvector.c: New global variable
	`zzz_config_have_uvector' which indicates whether uniform vectors
	are available.  Uniform vector data types and procedures are only
	created if uniform vector support is enabled.

	* node.c (initialize_modules): Conditionalize initialization of
	uvector modules.

2000-10-31  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c: Removed inclusion of <version.h>.

	* fdport.c (zzz_init_fdport): The standard fd ports are now
	protected before being initialized.

	* cvar.c: Added assert() calls testing parameter integrity.

	* capi.c: Added assert() macros for testing parameter integrity.

	* capi.h: Added documentation for the `*_c_*' functions, which
	define symbols in modules.

	* boolean.h, char.h, control.h: Added documentation.

	* hashtab.c (list_to_hashtable_func): New primitive
	`list->hashtable'.

	* syntax.c: Completely new quasiquotation code.  A quasiquotation
	is now transformed either into a quotation, or into the
	corresponding combination of `cons', `append' etc.

2000-10-26  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* sig.c (zzz_internal_handle_signals): Return an error if any
	signal handler triggered one.

	* node.c (zzz_get_variable_location): Removed obsoleted FIXME.

	* eval.c (zzz_evaluate): Removed conditional compilation of
	checking whether a literal vector is to be evaluated.
	(zzz_evaluate): Removed legacy code for named let evaluation.
	(print_trace_indent): Tracing for closures works better now, but
	the returned values cannot be inspected yet.  Tracing messages are
	now indented to nesting depth.
	(zzz_init_eval): Deprecated variable `%print-calltrace%' and the
	old tracing mechanism.

2000-10-24  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_evaluate): Removed references to label
	`return_error:', and changed callers to return an exception and
	jump to `return_any_errors:'.

	* control.c (error): Does not throw an error anymore, but a
	misc-error exception.

2000-10-22  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* control.c: Deprecated `catch-error'.

2000-10-19  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* All primitives and evaluation functions should now throw
	exceptions instead of errors.

	* boolean.c (integer_to_boolean_func): Fixed docstring.

2000-10-18  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* number.c: Added exception type `arithmetic', which is thrown on
	arithmetic errors.  Changed all ERROR creating procedures to throw
	the appropriate exceptions instead.

	* eval.c, eval.h: Introduced new exception `misc-error', including
	exception tag and creation function
	`zzz_make_misc_error_exception()'.

2000-10-12  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c, eval.h: Implemented framework for tracing primitive and
	user-define procedures.
	(trace): New primitive for switching procedure tracing on and off.

	* eval.h (LAST_ARG): All parameter accessing and type checking
	macros throw exception now instead of signalling errors.

	* eval.c (make_wna_exception): Procedure application with a wrong
	number of arguments does not signal an error anymore, but throws
	the exception `wrong-number-args'.
	(zzz_make_wta_exception): Passing an argument of the wrong type to
	a procedure now throws a `wrong-type-argument' exception instead
	of signalling an error.

	* node.c (except_print): Extended to print an exception reference,
	if available.

	* node.h, node.c: Added function `zzz_set_exception_reference()'.

2000-10-10  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c, node.h, eval.c: Conditionalized autoload feature, not
	supported anymore by default.

2000-10-11  [ Ela ]  <ela@lkcc.org>

	* posix.h: Changed the keyword INTERFACE to SIZZLE_API
	which prevents the Sizzle DLL headers from namespace 
	clashes with other libraries. This has been done in all
	headers within this directory.

	* posix.c (waitpid_func): Ported `waitpid' to Win32 with
	help of `WaitForSingleObject'.
	(kill_func): Crippled `kill' implemented via `raise' which
	can send signals to the current process.

2000-10-05  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* gc.c (zzz_mark_area): Added an assert() for checking stack
	scanning pointer alignment.

2000-10-03  [ Ela ]  <ela@lkcc.org>

	* net.c (inet_aton_func): Fixed support for `inet_aton' which
	is not necessarily supported by all systems.

2000-10-04  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* net.c, stringfun.c, fdport.c: Added some cpp magic for compiling
	on AIX.

	* Checked all files and used zzz_object_t and zzz_signed_object_t
	where appropriate.

	* gc.h: New data types zzz_signed_object_t and zzz_object_t which
	are integer types with the same size as `void *'.

2000-10-02  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* net.c: Conditionalize inet-aton and inet-ntoa.

2000-09-28  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* srfi-1.c (zzz_init_srfi_1): All procedures are now declared in
	module (core list-lib).

	* Makefile.am: Removed special dependencies for misc.c.

	* posix.c: Moved `fnmatch' procedure from misc.c.

	* posix-ext.if: Functions `dup' and `dup2' are now declared in
	module (core posix).

	* fnmatch.if: Function `fnmatch' and `FNM_*' constants are now
	declared in module (core posix).

	* misc.c (make-variable): Enhanced docstring.
	Removed deprecated code for `toplevel-environment', which was
	already #ifdef'ed out.

2000-09-28  [ Ela ]  <ela@lkcc.org>

	* misc.c: Include `unistd.h' only if HAVE_UNISTD_H !

	* capi.c: Included `modules.h'.

	* posix.c: In some functions `s_func_name' was not defined.

	* Makefile.am (EXTRA_DIST): Added `posix-ext' files.

2000-09-27  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* net.c: Made `accept' and `bind' compatible with Guile.  Added
	primitives `inet-aton' and `inet-ntoa'.

	* Makefile.am (EXTRA_DIST): Added the posix-ext.* files.

	* capi.c, capi.h: New functions for defining constants, functions
	and forms in a particular module.

	* posix.c (zzz_init_posix): All posix functions are now located in
	the (core posix) module, and are not available without importing
	that module.

	* modules.c (zzz_c_create_module, zzz_c_module_define): It is now
	possible to define primitives in modules, so that they are not any
	longer available without importing a module.

2000-09-26  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* gc.c (zzz_finalize_gc): Global variables are now reset to their
	initial values so that the library can be inialized more than
	once.

	* syntax.c (zzz_do_quasiquote): Hash tables can now be quasiquoted
	again.

	* posix-ext.if: New interface file.
	New primitives `dup', `dup2'.

	* posix.c: New primitives `getpwent', `setpwent', `endpwent'.

2000-09-25  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* gc.h, gc.c: zzz_cons() is not inline anymore, because it caused
	too much trouble when compiling embedding programs.

2000-09-19  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c: All primitives are now compiled in unconditionally.
	They throw an exception if functionality is not present.

	* node.c (zzz_make_not_available_exception): New.  Create a
	`not-available' exception with given argument list.

	* node.h, node.c: New exception `not-available' for primitives
	missing on more primitive systems. Instead of not compiling in
	primitives on those systems, we now generate stubs which throw an
	exception.

2000-09-15  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* srfi-13.c (string-index, string-index-right): Moved over from
	string-fun.c and Changed to accept also a prdicate as second
	argument, to get closer to SRFI-13.
	(string-skip, string-skip-right, string-count, string-contains,
	string-contains-ci): New primitives.

	* read.c (read_hash_table): Creates a hash table instead of a
	vector now.

	* hashtab.c (make_hash_func): `make-hash' now optionally takes an
	integer as the first argument, which is taken as the initial
	capacity of the returned hash table.
	All functions are now aware of the new hash table data type.

	* vector.c, vector.h: Introduced distinct hash table data type.

2000-09-14  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* iofun.c, iofun.h: Moved exception variables over from port.c and
	port.h, where they do not belong anymore.

	* number.c (signum): New primitive.

2000-08-29  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* fdport.c (fdport_getc): Use `port_tty_p()' instead of
	`isatty()'.

	* iofun.c (isatty_p): Use `port_tty_p()' on port objects instead
	of calling `isatty()'.

	* port.h (struct port_descriptor): Added field `tty_p' to
	record whether a port refers to a tty.

	* node.h: Added prototype and function type for handling hooks.
	Updated documentation.

2000-08-28  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_read_eval_print): Removed old hack for printing a
	prompt when readline support was not compiled in.

	* fdport.c (fdport_getc): Print a prompt when reading from a tty.

	* eval.c (zzz_read_eval_print): The repl now reads from the
	current input port instead of the standard input port, so that
	overwriting the current input port has an effect to the repl.

	* libsizzle.h: Added posix.h to make `zzz_make_system_exception()'
	available to extension modules.
	Added alloc.h, because most extension modules need it.

	* posix.h: Added some comments for documentation purposes.

2000-08-23  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* misc.c: Removed references to libc.[c,c.x].

	* Makefile.am: Removed references to libc.[if,c,c.x].

	* srfi-1.c (make-list): Lock GC during consing.  Saves enormous
	amounts of running time for long lists.

	* gc.h, gc.c (zzz_gc_lock, zzz_gc_unlock): New functions for
	blocking garbage collection.

	* node.h: Deprecated the variable zzz_toplevel_env.  Use
	zzz_interaction_environment instead.

	* misc.c: Removed the procedure `toplevel-environment'.  Use
	`interaction-environment' instead.

	* node.h, eval.c (call_builtin_func): Added the procedure types
	6_0_0 and 7_0_0.
	(struct zzz_keyword_descriptor): Removed this unneeded type
	declaration.

	* port.h: Cleaned up the port interface by defining function types
	for the various port functions.  Use them in the port decsriptor
	data type and the port definition function.
	Also added some documentation comments.
	
	* result.h (RESULT_TAILAPPLY): New result code for tail
	application.  Is returned when a primitive requests the tail
	application of a a function.

	* control.c (apply_func): Uses the tail application feature.

	* eval.c (zzz_evaluate, zzz_apply): Added support for proper tail
	application.

2000-08-22  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* Makefile.am: Added rules for building the glue code files which
	are included in misc.c.

	* eval.c (transcript_on_func): Added O_TRUNC to open flags.

	* iofun.c (open_output_file_func, call_with_output_file_func,
	with_output_to_file_func, with_error_to_file_func): Added O_TRUNC
	to open flags.

	* Makefile.am (modinclude_HEADERS): Added pointer.h.
	(libsizzle_la_SOURCES): Added pointer.h and pointer.c.

	* pointer.c, pointer.h: New files for procedures dealing with
	pointer objects.

	* node.c (zzz_make_pointer, pointer_print): New functions for
	creating and printing pointer objects.

	* node.h: New data type `pointer' for handling native memory
	addresses.

2000-08-21  [ Ela ]  <ela@lkcc.org>

	* nls.c: Made changes for the builtin `_alloca' function 
	within the intl/ directory.

2000-08-21  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* libc.c: File added to the repository.  This file is
	automatically generated, so do not modify it.  It is in the
	distribution because its creation requires a working Sizzle
	installation.

	* misc.c: Includes the generated file libc.c.

	* libc.if: New file for testing the ../scripts/gen-if.scm script.
	It takes this file and produces a C file with Sizzle wrappers for
	the specified functions.

	* srfi-13.c (zzz_init_srfi_13): New primitives `string-take',
	`string-drop', `string-take-right', `string-take-left',
	`string-hash', `string-hash-ci'.

	* stringfun.c (string-copy, string-fill!, string->list): Made
	compatible to SRFI-13 by adding optional start/end parameters.

	* srfi-13.c (zzz_init_srfi_13): Renamed `string-capitalize[!]' to
	`string-titlecase[!]', for consistency with SRFI-13.

	* stringfun.c: Removed SRFI-13 procedures and copied them over to
	srfi-13.c.

	* srfi-13.c, srfi-13.h: New files for the string operation from
	SRFI-13.

	* alloc.h, boolean.h, capi.h, char.h, control.h, cvar.h, doc.h,
	dynlib.h, eval.h, fdport.h, fport.h, gc.h, hashtab.h, iofun.h,
	list.h, macros.h, misc.h, modules.h, net.h, nls.h, node.h,
	number.h, port.h, posix.h, profile.h, promise.h, read.h, regexp.h,
	rlport.h, scmport.h, sig.h, sport.h, srfi-1.h, stringfun.h,
	symbol.h, syntax.h, uvector.h, uvector64.h, values.h, vector.h:
	Added the INTERFACE declaration for Win32 compilation to all
	exported functions.

2000-08-18  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c (string_print): Strings of length 0 caused an abort().
	Fixed.
	(initialize_variables): Analyze the environment variable
	SIZZLE_LOAD_PATH and prepend the contents to the variable
	`%load-path' on startup.

	* doc.c (try_to_load_docstring): Search in $LIBRARY_DIR for the
	docstrings.txt file, not in $PKGDATA_DIR anymore.

	* hashtab.c (hash_fold): New primitive `hash-fold'.

	* eval.h, control.c, macros.c: Eliminated the macro EVALUATE() and
	its uses.

2000-08-17  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* promise.h, number.h, eval.h, list.h, srfi-1.h, read.h,
	stringfun.h: Removed unnecessary inclusion of <stdio.h>.

	* uvector64.c, uvector64.h: Factored out all procedures dealing
	with 64-bit integers, so that the file is loaded faster when
	warnings are shown (sigh).

	* list.h: Deleted inclusion of <stdio.h>.

	* srfi-1.c, srfi-1.h: New files holding all list functions which
	were defined in SRFI-1, but not in R4RS.  This reduces the size of
	list.c.

	* scmport.c (scmport_puts): New function for printing a whole
	string at once.

	* node.c (string_print): Use `zzz_port_puts()' if no quoting is
	necessary.

	* port.h, port.c (zzz_define_port_type): Added parameter
	`port_puts'.

	* port.h (struct port_type): Added field `port_puts' for writing
	complete strings. 
	

	* list.c: Removed primitive `cons-immutable'.
	(set_car_x_func, set_cdr_x_func): Removed test for immutable
	argument.

	* gc.c, gc.h: Removed support for immutable pairs.

	* fport.c (fport_close): Only close a file if it is not stdin,
	stdout or stderr.

	* fdport.c (fdport_close): Only close a file descriptor if it is
	not 0, 1 or 2.

	* gc.h, gc.c: New variable `zzz_terminating' which indicates
	library shutdown.  Variable is set in zzz_finalize().

	* scmport.c, scmport.h: New files for implementing Scheme ports.

	* sport.c, fport.c, fdport.c, rlport.c: Adjusted to new port
	system.  Added comments.

	* rlport.h: Adjusted to new port system, added comments.  Added
	Win32 interface cruft.

	* sport.h, fdport.h, fport.h: Adjusted to new port system, added
	comments.

	* port.h: Made zzz_default_file_mode declaration extern.

	* port.c, port.h: Began major port subsystem overhowl.

	* gc.h (zzz_cons): Changed __inline__ to inline once again.  Can't
	remember how it crept in anyway...

	* node.c (zzz_initialize): Fixed a typo in a comment.

2000-08-16  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (call_builtin_func): Function is not inlined anymore.
	It's too large.

	* list.c: New primitives `take!', `take-right', `drop-right',
	`drop-right!', `split-at', `split-at!', `length+'.  These
	procedures were ported over from the module `(core list-lib)'.

2000-08-16  [ Ela ]  <ela@lkcc.org>

	* posix.c: All `DIR' functions and headers tested.
	The libsizzle directory including libintl (without readline 
	and regex) are now even compatible to a native MSVC compiler.
	
	* posix.h (S_IRUSR): Implemented most of the S_* macros for
	Win32.

	* posix.c (directory_files_func): Win32-Port: using 
	FindFirstFile, FindNextFile and FIndClose.
	(opendir_func): opendir, closedir and readdir are now native 
	Win32.
	The HAVE_DIRECT_H is now used by `posix.c'.

	* port.h (port_p): Depending on HAVE_READLINE this macro defines
	various bits.

2000-08-15  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* modules.c (zzz_init_modules): Added global protection for
	keyword variables.

	* stringfun.c (zzz_init_stringfun): Added global protection for
	symbol variables.

	* posix.c (zzz_init_posix): Added global protection for symbol
	variables.

	* number.c (zzz_init_number): Added global protection for symbol
	variables.

	* net.c (zzz_init_net): Added global protection for symbol
	variables.

	* iofun.c (zzz_init_iofun): Added global protection for symbol
	variables.

	* dynlib.c (zzz_init_dynlib): Added global protection for symbol
	variables.

	* Makefile.am: Added profile.[ch] to the source files.

	* eval.c, gc.c, profile.c: Added global protection for symbol
	variables.

	* profile.c, profile.h: New file for profiling statistics.

	* gc.c: Symbols and keywords are no longer stored in their
	respective tables forever, even if not referenced.  The symbol and
	keyword tables are now weak, which means that during GC, the
	symbols and keywords are not marked and their entries are deleted
	from the tables when the objects have been freed during the sweep
	phase.  This requires that all global variables which hold symbol
	or keyword objects must be protected by `zzz_protect_global()'
	now.
	
2000-08-14  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c (zzz_init_posix): O_ASYNC is only defined if defined as
	a C macro.

	* gc.c (mark_c_stack_variables): In addition to register window
	flushing (which only works for SPARC right now), the registers are
	saved to the C stack using a setjmp() call with a stack-allocated
	jump buffer.  On the i386, this appears to store the registers BX,
	SI, and DI as well as the stack-/frame pointers (if I interpret
	the glibc headers correctly).

	* iofun.c, iofun.h: Renamed from io.[hc] to avoid name clash with
	Windows' <io.h>.

	* rlport.h: Documented.

	* nls.h: Added documentation to the init function.

	* dynlib.h: Documented variables and functions.

	* sig.h: Documented the variable and the functions.

	* hashtab.h: Commented the exported functions.

	* sport.h: Added comments.

	* read.h: Added missing comments for variables and functions.

	* node.h, node.c: Removed #if 0'ed code.

	* eval.h: Added comment for zzz_memoize_car().

	* list.c (set-car!, set-cdr!): Test whether the argument is
	immutable.
	(cons-immutable): New primitive for createing an immutable pair.

	* gc.c (zzz_ro_cons, new_ro_cons_cell_chunk, zzz_ro_pair_p): New
	functions for creating immutable pairs and testing whether a given
	pair is immutable.
	(zzz_finalize_gc): More code for freeing immutable pair chunks.

	* io.c (isatty_p): Removed inclusion of rlport.h, because that
	file is already included in the file heading.

	* syntax.c: Removed last references to lambda_env().
	(zzz_do_quasiquote): Rearranged the code a bit, factored out
	quasiquote_vector().

	* node.c (SYMBOL_TABLE_SIZE): Increased the symbol table size.

2000-08-10  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* misc.c (command_line_func): Take the command line from the
	variable `zzz_command_line_list', and return a copy instead of the
	list itself.
	(zzz_init_misc): `safe-environment' now makes sure that the `safe'
	primitives it generates bindings for are the original bindings.

	* node.c: Deprecated the variable `%command-line%'.
	(zzz_copy_list): New function for making a shallow copy of a list.

	* gc.c (gc_stats): gc-time and gc-percent are now always
	available, but are always 0 if times() is not available.
	(zzz_init_gc_variables): Deprecated variable `gc-count'.
	(zzz_init_gc_variables): Deprecated the variables
	`gc-used-cons-cells', `gc-used-tagged-cells',
	`gc-allocated-cons-cells' and `gc-allocated-tagged-cells'.

2000-08-09  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_evaluate): Changed code for `lambda' to take the
	lambda object from the cdr of the expression.  Removed old code.

	* syntax.c (lambda_form): Removed old code using lambda_env().
	(lambda_form): Store the pre-allocated lambda object in the cdr of
	the call expression.

	* eval.c: Removed unnecessary FIXMEs and unneeded code.
	(zzz_init_eval): `%eval-time-taken' is now available
	unconditionally, but only contains valid values if times() was
	found.
	(zzz_evaluate): Fixed a bug in the `do' form: The result of the
	test expression was not returned if no exit expressions where
	given, due to a mising `cdr'.

	* cvar.c (scm_var_handler): C variables of type `zzz_scm_t' now re
	handled as magic variables, too.

	* control.c (call_with_current_continuation_func): Cleaned up the
	code, removed debugging stuff.
	(%%return-to-continuation): Fixed FUNC_NAME.

2000-08-04  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_evaluate): Corrected stack overflow message to use
	the new name `%max-evaluate-stack%'.

2000-07-27  [ Ela ]  <ela@lkcc.org>

	* stringfun.c (string_strncasecmp): Added wrapper for
	strncasecmp depending on configure's input.

	* uvector.c (u64vector_equal): Changed all occurences of
	`long long' to `__INT64__' (see configure.in).

2000-07-23  [ Ela ]  <ela@lkcc.org>

	* posix.c (fcntl): Made some kind of dummy implementation
	for fcntl() in Win32. Thus you might set the O_NONBLOCK, 
	O_NDELAY and O_ASYNC flag for sockets.

	* net.c (server_socket_func): Change order of appearance of
	bind () and setsockopt (SO_REUSEADDR).

2000-07-21  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* syntax.c: Commented out references to lambda_env().

	* node.c: Commented out references to lambda_env() and
	conditionalized string and lambda storage using the copying gc.

	* gc.h: Support for copying gc for object data can be compiled in
	by defining SUPPORT_COPY_GC.  Unfortunately, copying gc slows down
	Sizzle, so it is disabled by default.

	* node.h: procedure_p() no longer tests for lambda_p().
	(struct zzz_lambda_descriptor): Commented out field `environment'
	and removed lambda_env() macro.

	* gc.c (zzz_garbage_collect): The time spent in gc is now
	remembered in `gc_time' in clock ticks.
	(gc_stats): Value of `gc_time' is now included in returned alist.

	* eval.c (zzz_apply, zzz_evaluate): Removed support for evaluating
	lambda expressions.  Only real closures are supported now.

	* control.c (call_with_current_continuation_func): Commented out
	reference to lambda_env().

	* macros.c (define_macro): Create a closure from macro
	transformers.

	* eval.c (evaluate_one_expression): The time for top-level
	evaluations is now taken and kept in the variable
	`%eval-time-taken%.

	* node.c (zzz_type_descriptors): Mark function for closures was
	missing. Fixed.

2000-07-20  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_read_eval_print): Flush stdout after each
	evaluation, so that partially printed output becomes visible
	immediately.

	* misc.c (closure_p_func): Renamed the `lambda?' predicate to
	`closure?'.

	* node.c (zzz_make_closure): Added closure tag type variable,
	constructor function and printing type function.

	* syntax.c (lambda_form): Create lambda expression when
	preprocessing.
	(named_let_form): More preprocessing, the lambda expression is
	built and the init arg list is built, so only evaluation of the
	init args is needed when evaluating..
	(define_function): Properly build lambda expression.

	* node.h: Added closure type tag, macro and constructor function.

	* control.c (call_with_current_continuation_func): Created helper
	procedure is now wrapped in a closure before being passed to user
	procedure.

	* read.c (read_symbol_or_number): Allow symbols to begin with `\'.

2000-07-19  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.h (imm_*): Added some basic constant values to the
	immediate codes.

	* symbol.c (gensym): Create symbols with a `%%%gen' prefix,
	because the old `)gen' could not be read in again.

2000-07-18  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_evaluate): When an exception occured while
	evaluating a parameter list, RESULT_ERROR was returned
	unconditionally instead of the correctly obtained value in `err'.
	Fixed.
	(zzz_init_eval): New variable `%print-calltrace%'.  When set, a
	trace of called user-defined functions is printed in an indented
	style.
	(zzz_evaluate): Handling code for maintaining a call nesting
	counter and printing a call trace if requested.

	* control.c (call_with_current_continuation_func): Now it is
	possible to call a passed continuation without a value, which will
	deliver an unspecified value to the continuation.

	* posix.c (umask_func): Now the `mask' parameter can be omitted,
	just like with Guile.
	(open_fdes_func): Renamed from `sys_open'.
	(close_func): Renamed from `sys_close'.
	(fsync, fcntl): New primitives.
	(copy_file): New Primitive.
	(directory-stream?, opendir, closedir, readdir, rewinddir): New
	primitives.  They implement the directory handling interface which
	uses the new dir_stream tagged type.

	* doc.c (documentation_func, describe_object): Try to load from
	docstring file if lambda documentation is not set, just like for
	primitives.

	* posix.c (getenv, system, putenv, chdir, setuid, setegid,
	getpgrp, getpwnam, access?): Cleaned up docstrings.
	(getcwd): Changed directory buffer init size from 16 to 64.
	(get_argument_vector): Replaced multiple calls to zzz_cons() with
	calls to zzz_make_list().

2000-07-14  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* port.h: Added some comments.

	* port.c (zzz_port_print): `unquote-splicing' was printed like
	`unquote'. Fixed.  
	Added some comments and cleaned up the code.  Replaced many calls
	to `zzz_cons()' with `zzz_make_list()'.
	
2000-07-14  [ Ela ]  <ela@lkcc.org>

	* net.c (__USE_BSD): We define this. Otherwise Linux's
	<unistd.h> does not prototype gethostname, sethostname, etc.

	* posix.c (make_pw_vector): Disabled this function when using
	__MINGW32__, same with the <pwd.h> include header.

	* net.c (gethostname_func): Made (gethostname) available in 
	the Win32 port.

	* Makefile.am (all-local): Added this target for the Win32 port.
	Thus we get the sizzle.dll on the fly.
	(AM_CPPFLAGS): Added $(INTLDEFS) here for building with local
	--with-included-gettext.
	(%.dll): Added $(INTLLIBS) for building with included gettext.

2000-07-13  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c (getcwd_func): Throw an exception if the current working
	directory cannot be determined.
	(stat_func): Finally made it Guile-compatible.

	* number.c: Fixed some docstrings.

	* io.c: Replaced tests for unspecified parameters with
	`undefined_p()'.

	* hashtab.c (zzz_hashv_function, zzz_hash_function): Allow hashing
	of floating point and long integer values.
	Replaced Scheme value equality tests `==' with zzz_eq().

	* eval.c (zzz_apply): Use `zzz_evaluate_car()' for evaluating a
	lambda body.
	(zzz_evaluate): Removed unneeded variable `stack_object'.  We now
	take the stack size from the variable `env'.

2000-07-11  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* list.c (list_p_func): Fixed bug.  Was totally fucked up.

	* stringfun.c (string_chop): Fix.  Used to chop everything *after
	the first newline*.  Now chops only trailing newlines as it should.
	(string_any): Forgot to initialize return value.  Fixed.

	* modules.c: Docstringified.

	* stringfun.c: Texified some docstrings.

	* io.c: Moved over the docstrings from `docstrings.txt.in'.

2000-07-10  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* number.c: Moved over the docstrings from `docstrings.txt.in'.

	* port.c: Docstringified.

	* posix.c: Docstringified.  Partly moved over docstrings from
	`docstrings.txt.in', partly from the reference manual.

	* misc.c: Docstringified.

	* promise.c: Docstringified.

	* regexp.c: Docstringified.

	* sig.c: Docstringified.

	* sport.c: Docstringified.

	* symbol.c: Docstringified.

	* syntax.c: Docstringified.

2000-07-07  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* uvector.c: Moved docstings over from `../data/docstrings.txt.in'.
	Quite some work...

	* values.c: Moved docstings over from `../data/docstrings.txt.in'.

	* vector.c: Moved docstings over from `../data/docstrings.txt.in'.

	* gc.c: Docstringified.

	* fdport.c: Docstringified

	* eval.c: Docstringified undocumented procedures and moved over
	docstrings from `../data/docstrings.txt.in'.

	* dynlib.c: Docstringified.

	* control.c: Docstringified.

	* char.c: Docstringified.

2000-07-06  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* net.c: New primitives `gethostname', `sethostname',
	`getdomainname', `setdomainname'.

2000-07-05  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c (zzz_finalize): Call the readline finalize function on
	exit.

	* rlport.c (zzz_finalize_rlport): New function.  Writes the
	history file if `%write-history-file%' is true, and frees the
	history file path.
	(zzz_init_rlport): Allocate and construct the history file path
	and read the history file.

	* node.c (zzz_finalize): Moved zzz_finalize_gc () to the end, in
	case any other module stores state in one of the heaps.

	* boolean.c: Docstringified.

2000-07-02  [ Ela ]  <ela@lkcc.org>

	* rlport.c (match_paren): Ported the --enable-readline feature
	to the MinGW32 target. We are using WaitForSingleObject to 
	determine if there is input at stdin. The libtermcap.a and 
	libreadline.a port for MinGW32 will be available as a diff file.

	* posix.c (zzz_init_posix): Added some of the S_* constants 
	available in MinGW32.
	(uname): Fixed typo.

2000-06-29  [ RAIMI ]  <raimi@lkcc.org>

	* posix.c (uname): Detection of Windows Millenium Edition
	within uname ().

2000-06-29  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* stringfun.c (parse_string_indices): Did not throw an error when
	the start index was okay, but the end index was out of bounds.
	New primitives: `string-prefix-length', `string-prefix-length-ci',
	`string-suffix-length', `string-suffix-length-ci',
	`string-prefix?', `string-prefix-ci?', `string-suffix?',
	`string-suffix-ci?', `string-pad', `string-pad-right'.

2000-06-28  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_report_error, zzz_evaluate, zzz_init_eval): Error
	messages now always print with file name and line number if
	available, not only in the parser.

	* node.h, node.c: Added zzz_set_error_reference().

	* list.c: Docstringified all primitives.

	* rlport.c (rl_gets): Removed debugging prompt.  Did that earlier,
	actually, but forgot to document.
	(command_generator): Recognize macro and syntax objects as valid
	candidates for completion.

	* stringfun.c: Documented new primitives: `string-trim-*',
	`string-up/downcase[!]', `string-any/every', `string-tabulate',
	`string-chop'. Added docstrings to all primitives.

	* io.c: Fixed several places wher a file-not-found exception was
	thrown by file-creation functions.

2000-06-28  [ Ela ]  <ela@lkcc.org>

	* capi.c: Included MinGW headers for function definitions.

	* fdport.c (fdport_char_ready_p): FIXME: This here works for 
	pipe/file and the std??? handles but not for anything else... 
	if i knew about the argument being a socket we could select() 
	it.

	* alloc.h: Added INTERFACE declaration for Win32. Those even
	sizzle itself could be dynamically linked against its own
	shared library (sizzle.dll).

	* posix.c (getpid_func): Ported getpid to Win32.

	* Makefile.am: Using Makefile substitutions for getting the
	object files for linking the DLL in Win32.

2000-06-27  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* stringfun.c: Added a few primitives, not yet documented
	though...

	* list.c: Added the new docstrings to primitives in the first half
	of the file.

	* io.c (zzz_init_io): Made the code fit into 80 columns.

	* port.c (zzz_port_print): Print all quotes in short form, that
	means expressions like '(as) and (quote (as)) print both as `(as).

2000-06-27  [ Ela ]  <ela@lkcc.org>

	* posix.c (uname): Some implementation of POSIX's uname
	under Win32.

	* libsizzle.h: The sizzle library is now applicable as a
	shared library (DLL) in Win32 via __declspec() and the
	appropriate Makefiles.

	* posix.c: For the __MINGW32__ port to Win32 i had to disable
	and/or rewrite some of the functions in this file. The
	--enable-posix feature is now available for both Win32 targets.
	See posix.c for more information about what is possible and what
	is not.

2000-06-26  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* cvar.c: Removed obsoleted code.

	* README: File description update.

	* eval.c (zzz_apply): Do not cons anything onto the backtrace
	anymore.  Not necessary, methinks.
	(zzz_evaluate): Do not save location on the backtrace anymore,
	better calculate that when necessary.
	(print_backtrace): Fetch source locations when printing.

	* eval.c (primitive-load, primitive-load-path): 
	* capi.c (zzz_evaluate_file): Set the file name of a port, so that
	source code locations can be remembered.

	* read.c (read_list): Remember source code locations of lists in a
	hash table, so that better error messages can be given.

	* hashtab.c (zzz_hashq_function, zzz_hashv_function): New hashing
	functions for the *q and *v families of functions.  This fixes a
	problem with remembering source code locations in read.c and makes
	the hash table module more consistent.

	* eval.c (zzz_report_error): Made exported function to make it
	reachable from capi.c.
	(zzz_init_eval): Eliminated the variable zs_compiled_code and all
	uses.
	(zzz_load_port): Increment/decrement
	zzz_remember_source_locations.

	* capi.c (zzz_evaluate_file, zzz_evaluate_string): Moved from
	eval.c.

	* syntax.c: Removed a lot of old leftover, now unused, code and
	declarations.  Still needs cleanup, though.

	* number.c (quotient): Fixed lately introduced bug which cause
	`quotient' to return inexact results.
	(remainder, modulo): Both now take inexact numbers as arguments.

	* Makefile.am: Added the files control.c, control.h, syntax.c and
	syntax.h.

	* control.c, control.h Created new files and moved all control
	flow procedures from eval.c to them:

	* eval.h: Added extern definition for zzz_memoize_car().

	* eval.c (zzz_memoize_car): Renamed from memoize_car() and made
	non-static.

	* syntax.c, syntax.h: Created new files and moved all syntactic
	forms from eval.c to them.

	* posix.c: Only define __USE_BSD, __USE_XOPEN,
	__USE_XOPEN_EXTENDED and __USE_POSIX, if not already defined.

	* net.c (zzz_init_net): Fixed some conditionals when defining
	constants. Ugly cut&paste leftover.

2000-06-25  [ Ela ]  <ela@lkcc.org>

	* Makefile.am (SUFFIXES): Added Makefile rules for building
	shared libraries (DLLs) under Win32.

2000-06-24  [ Ela ]  <ela@lkcc.org>

	* dynlib.c (dlerror): For the __MINGW32__ target the dl-feature 
	of sizzle is mapped to LoadLibrary, FreeLibrary and
	GetProcAddress. The __CYGWIN__ target supports it by default.
	(load_library_func): To compound the library name in the Win32
	port we use here "%s.dll" and not "lib%s.so" as in normal
	Unices.

	* net.c: Ported all the network API to Win32. Basically there
	are not restriction compared Linux, but the amount of descriptors
	might be defined via FD_SETSIZE. This is set to 64 by default.
	Both __MINGW32__ and __CYGWIN__ are supported.

2000-06-23  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* number.c (ceiling): Now return exact values, if possible.

	* node.c (initialize_modules): Added call to zzz_init_nls(), which
	was missing and caused sizzle to segfault on the first error.

	* number.c (quotient): Accepts now inexact arguments, too.
	(maybe_make_exact, coerce_numbers): New helper functions for
	converting numbers to their best representation.

2000-06-22  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* nls.h, nls.c: New files to take national language code from
	eval.c and eval.h.

	* Makefile.am (libsizzle_ls_SOURCES, modinclude_HEADERS): Added
	nls.c and nls.h.

	* node.c (grow_stack_and_invoke, zzz_capture_continuation): Added
	portability note.
	
	* gc.c (mark_c_stack_variables): Added portability note.

	* eval.c (zzz_evaluate): Removed all old code which returned from
	evaluation function without jumping to one of the return_*:
	labels.  Stack overflow no longer signals an error, but signals a
	stack-overflow exception now.

	* libsizzle.h: Added inclusion of gc.h.

	* Makefile.am: Added gc.c and gc.h.

	* node.c: Moved function documentation to node.h.

	* gc.h: Documentation updates.

	* node.h: Major declaration cleanup. Commented all exported
	functions and declarations, removed obsoleted code.

	* gc.c, gc.h: New files which hold the garbage collection code
	formerly located in node.c and node.h.

2000-06-21  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c (zzz_undefine_symbol): Fixed a possible bug with
	undefining symbols and sharing symbol association between modules.

	* modules.c (export): Now returns the unspecified value.

	* stringfun.c: New primitives `string-upcase', `string-upcase!',
	`string-downcase', `string-downcase!', `string-capitalize',
	`string-capitalize!', `string-chop'.

	* dynlib.c, dynlib.h: Using new conditional ENABLE_DL.

	* node.c (initialize_modules): Using new conditional ENABLE_DL.

	* dynlib.c, dynlib.h: New files, implementing dynamic loading of
	shared objects. New low-level primitives `%dlopen', `%dlclose',
	`%dlsym' and `%dlcall', and the high-level primitive
	`load-library' for loading an object and calling its init
	function.

	* modules.c (import_module): Fixed a nasty forgotten 
	`tmp1 = cdr (tmp1)'.

	* eval.c (load_port): Should work now even if more than one module
	is defined in a source file.

	* modules.c: Added a lot of error checking, re-structured the code
	and made the module system work.  More testing is required,
	though.

	* node.c (zzz_initialize): Reduced size of the toplevel
	environment, since it is now only used for the user init file and
	the repl.

2000-06-20  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* misc.c (scheme_report_environment_func): Return
	`zzz_library_environment' instead of `zzz_toplevel_env'.

	* rlport.c (command_generator): Search `zzz_current_environment'
	instead of `zzz_toplevel_env'.

	* posix.c: Removed #define __USE_GNU.

	* Nearly all files: Added casts to zzz_prim_t to all calls to
	zzz_define_function().

	* eval.c, eval.h: Make %primitive-load-path gloablly visible to
	support module loading.

	* modules.c, modules.h: New files implementing the new
	experimental module system.  The special forms define-module,
	use-modules and export are supported as well as the helper
	procedures module-list, current-module and export-symbols.

2000-06-19  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_evaluate): Using experimental debugging repl on
	error or exception now.  Also fixed an error with wrongly-handling
	exceptions etc.
	(zzz_debug_read_eval_print): Experimental debugging
	read-eval-print loop, to be invoked on errors and exceptions.

	* rlport.c (rl_gets): Added support for the debugging mode prompt.

	* number.c: All functions are now compiled in, even with
	--disable-maximum-functionality.  All primitives use
	zzz_make_list() for generating error objects now.

2000-06-15  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* symbol.c: Adapted to C api changes in zzz_define_function() and
	changed the primitive name `gen-sym' to `gensym', as that seems to
	be more common.

	* stringfun.c, list.c, char.c, boolean.c, values.c, promise.c,
	sport.c, posix.c, regexp.c, eval.c, hashtab.c, macros.c, misc.c,
	net.c, uvector.c, doc.c, io.c: Adapted to C api changes in
	zzz_define_function().

	* capi.h, capi.c: Changed definition of zzz_define_function() to
	take a more general function type as the second argument..

	* regexp.c (regexp_exec_func): Fixed return value to contain the
	complete input string, not only the matched portion.

	* io.c (call_with_output_string_func): Fixed specified number of
	parameters from 2-0-0 to 1-0-0.

	* number.c: Converted all primitives to new function calling
	scheme, replaced handmade argument checking with macros.

2000-06-14  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* capi.h, capi.c: Busted the define_*_ext() functions and changed
	all callers.

	* node.c (zzz_initialize): Fixed. `zzz_backtrace' was not
	procected from being gc'ed, so sizzle blew up when running with
	eval-save-backtrace turned on.
	(zzz_set_symbol_value): Fixed. Constants where only considered
	constant when defined in the global symbol table.  That was not
	clever indeed.

	* node.h: Reduced environment size for lets and function
	applications.  Remarkable performance win.

	* doc.c (try_to_load_docstring): Fixed.  Used to match function
	names in the middle of documentation entries.

	* capi.h, capi.c, all files: Removed the documentation parameter
	to zzz_define_function_ext (), because it was no longer needed.

	* symbol.c: Added the primitive `gen-sym'.

	* cvar.c: Removed obsolete code.

	* boolean.c, char.c: Code cleanup.

	* eval.c (zzz_evaluate): Macro transformers can now be used to
	generate non-list results, but then memoization is lost.

	* macros.c (expand-macro): Changed to new calling convention.
	Macros are now containers for transformer procedures and can thus
	use the normal zzz_apply() for macro expansion.  That simplifies
	the code a lot.

	* misc.c (symbol_table_func, keyword_table_func): Use
	zzz_copy_tree() to create return value, thus reducing
	possibilities to destroy internal state from the Scheme level.

	* node.c (zzz_copy_tree): New function for deep-copying Scheme
	objects.  Both vectors and lists are cloned recursively.

2000-06-13  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* read.c (zzz_read_cell): This was not returning an error code if
	parsing signalled an error, because the parsing error was shadowed
	by attempted read-ahead.

	* eval.c (zzz_evaluate): Fixed same bugs as for `do' in `cond' and
	`case'.

	* node.c (SYMBOL_TABLE_SIZE): Enlarged symbol table size.
	(hash_string): Enhanced hash function to include string length in
	the hash value.

	* eval.c: Removed extra environment creation for internal defines
	in let forms, since it seems unnecessary.  I hope my assumption is
	true.
	(zzz_evaluate): Fixed bug in the code for the `do' special form,
	where errors were not properly propergated to the callers in
	several places.

	* eval.c, node.c, rlport.c: Added conditional ENABLE_READLINE to
	support new configure option --enable-readline.

2000-06-09  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (autoload_func): New primitive for creating autoload
	associations.
	(zzz_evaluate): Support for autoloading, including autoload loop
	detection.

	* node.h: Added autoload data type.

	* node.c (zzz_make_autoload, autoload_print): New constructor and
	printer for autoload support.

2000-06-08  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* port.c (zzz_port_print): Added missing immediate forms.

	* node.c (initialize_modules, initialize_variables): Factored out
	some init code to make the code more readable.

	* list.c: Finished calling convention converting and fixed
	possible errors with zzz_make_list() calling with NULL as an
	argument.
	Added ZZZ_TICK() to most loops, to make signal handling more
	robust.

	* eval.c (zzz_evaluate): Fixed a bad bug with evaluation
	preprocessing forms.  They were repeated endlessly when they threw
	errors.

2000-06-07  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* list.c: Converted most of the list primitives to the new calling
	convention.
	(last_func): Sizzle was segfaulting when last was aplied to '().
	Fixed.

2000-06-06  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* hashtab.c: Converted all primitives to new calling convention.

	* posix.c (zzz_init_posix): Adapted all primitives to new calling
	convention.

	* node.h: Added support for primitives with parameter format 2-1-0.

	* eval.c (call_builtin_func): Added support for primitives with
	format 2-1-0.

	* promise.c (force): Converted to new calling convention.

	* regexp.c (make_regexp_func): Parameter number for invalid flags
	is now correct even if more than one flag.
	(regexp_exec_func): Converted `regex-exec' to new calling
	convention.

	* symbol.c: Changed primitives to new calling conventons.

	* stringfun.c (zzz_init_stringfun): Changed all string primitives
	to new function calling convention.

	* eval.c (call_builtin_func): Support for primitives of type
	2-2-0.

	* node.h: New immediate codes (see below) and support for new
	primitive type 2-2-0.

	* eval.c: Made most syntactic code into preprocessing forms and
	added immediates for lambda, quote and quasiquote, and a special
	immediate for the special function-defining `define'.

2000-06-05  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_apply): `apply' cannot be used with syntactic forms
	anymore.

	* capi.c (zzz_define_form_ext), capi.h: New function for defining
	extended forms, e.g. those which only preprocess the code, but not
	execute it.

	* eval.c (primitive_load_path_func): Don't add '/' to a directory
	name if it has already one.

2000-06-02  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* cvar.c, cvar.h, node.h: Implemented new, more general scheme for
	dealing with special variables like variables bound to C
	locations: Magic variables, which have an associated handler which
	is called whenever a magic variable is fetched, set, marked or
	freed.

	* node.c (zzz_initialize): Removed call to zzz_init_capi().
	(zzz_get_variable_location): Changed symbol hashing from
	leftshifting 3 bits to 4 bits, because symbols are always 16 bit
	aligned.

	* capi.h, capi.c: Removed unnneeded function zzz_init_capi().

	* node.c: General code and comment cleanup, removing unneeded code.

	* port.c: Removed some unnecessary includes, added comments and
	made the port type table static.

	* sport.c (open-output-string, get-output-string-func): Corrected
	comments.

	* io.c: Converted all primitives to new calling conventions.

	* doc.c (describe, apropos, documentation, set-documentation!):
	Support symbols too.

	* io.c, io.h: Created and moved all input/output primitives from
	port.c into them.

2000-06-01  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (define_constant_form): Fixed a nasty bug which caused
	sizzle to segfault when defining a constant.
	Also general code review and marking some FIXME-sections.

	* rlport.c (rlport_ungetc): Fixed ungetc function, which did not
	store the passed character, but only decreased the read pointer.
	(rlport_char_ready_p): Now returns 1 if data is available.
	
	* eval.c, eval.h: Added type name for `char'.

	* port.c: New primitives `write-line' and `%read-delimited!', both
	compatible with Guile.  Renamed `read-line' to `%read-line' and
	made it compatible with Guile.

	* eval.c: (call_builtin_func): Added support for 3-3-0 primitives.

	* node.h: Added support for primitives of type 3-3-0.

	* port.c: New primitives `with-output-to-port',
	`with-error-to-port' and `with-input-from-port'.

2000-05-31  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c, node.h, eval.c: Added the data type `continuation' and
	implemented general continuations.  Not enough tested yet, though.

	* posix.c (zzz_init_posix): Moved docstrings to the docstring file.

	* eval.c: Moved docstrings to the docstring file.

	* doc.c (try_to_load_docstring): New function for demand-loading
	documentation strings.
	(zzz_init_doc): Moved all docstrings to the docstring file.

	* misc.c (zzz_init_misc): Moved docstrings to the docstring file.
	Changed primitives `random' and `srand' to new calling convention.

2000-05-30  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c (zzz_initialize): Renamed `%load-path%' to `%load-path',
	to be more consistent with Guile.

	* eval.c: New primitive `primitive-load-path'.

	* posix.c (zzz_init_posix): Added docstrings to `system' and
	`primitive-exit', now using the new function calling convention.
	Also these procedures are now compatible to Guile.

	* vector.c (list_to_vector_func): Now signals an error if passed
	circular list.

	* uvector.c (list->*): Now signal errors if passed circular lists.

	* stringfun.c (list_to_string_func): Now signals an error if
	passed circular list.

2000-05-29  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* regexp.c (zzz_init_regexp): Adapted two primitives to new
	calling conventions.

	* regexp.h: Added function and variable documentation.

	* char.c (integer_to_char_func): Added range check for the integer
	argument.

	* uvector.c: Fixed some bugs with floating point uniform vectors,
	which tried to deal with arguments as integers.

2000-05-27  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* uvector.c (zzz_init_uvector): Added conversion procedures
	`u8vector->string', `s8vector->string', `string->s8vector',
	`string->u8vector'.

	* eval.c, eval.h: New type name for unsigned 8-bit vectors added.

	* posix.c (write_func, read_func, read_x_func): Now take all
	u8vectors as arguments, not strings.

	* uvector.c (zzz_init_uvector): Forgot to define all procedures
	except the `s8vector' family. Fixed.

	* read.c (read_uniform_vector): Added range checks when reading 8-
	and 16-bit uniform vectors.

	* uvector.c: Added range checks to all 8- and 16-bit vector
	procedures accepting integer values to be set.

	* eval.c: New variable `zzz_invalid_argument_range', for holding
	an error message about out-of-range errors.

	* eval.h (CHECK_RANGE): Macro for checking argument ranges added.

2000-05-26  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* rlport.c: The readline port now supports symbol completion: Tab
	completes the current symbol to defined symbols.  After an opening
	parentheses only procedure names are available, everywhere else
	all symbols can be completed.  Also implemented is parentheses
	matching, which was taken from the guile-readline module.
	
2000-05-25  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* hashtab.c (make-hash): New procedure for creating hash tables
	from pairs.

	* rlport.c, rlport.h: New files implementing a readline input port
	with history, command line editing etc.

	* eval.h: Added documentation for all exported macros, variables
	and functions.

	* eval.c (print_repl_result): New function for printing REPL
	results.  Prints several lines for multiple values, each value on
	its own line, to make it more readable.
	(zzz_read_eval_print): Close transcript port, if open, on exit.
	(zzz_default_signal_handler): Changed the old signal handling
	method from maintaining a bitvector of pending signals to an array
	in which signals are counted.  Now there shouldn't be any signals
	been lost anymore.

	* values.h: Added function documentation.

	* values.c: Converted primitives to new calling convention.

	* vector.h: Added function documentation comments from vector.c.

	* vector.c: Converted all primitives to the new function calling
	convention.

	* node.c (zzz_initialize): Fixed initialization bug for unique
	objects: Because *undefined* was defined last and not initialized
	properly, *undefined*, *unspecified* and *eof-object* were bound
	to '().

2000-05-24  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* cvar.h, cvar.c: Moved function documentation to the header file,
	cleaned up comments.

	* capi.h: Cleaned up comments.

	* port.c: Updated function comments.

	* char.c: Converted all primitives to the new function calling
	conventions.

	* boolean.c: Converted all primitives to the new function calling
	conventions.

	* README: Wrote a short source file map.

2000-05-23  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* libsizzle.h: Removed #include alloc.h, because not necessary and
	risky in respect to name clashes.

	* node.c, node.h, eval.c: Changed environment representation:
	Static links are now in the second data word of the tagged cell
	instead of in the last element of the environment vector.

2000-05-22  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (transcript_on_func): Using fdport now instead of fport.
	(primitive_load_func): Dito.
	(zzz_evaluate_file): Dito.
	(zzz_init_eval): All known signals are now declared as constants.

	* port.c (zzz_port_putc): Output is flushed if the flag
	PORT_FLAGS_LINEBUF is set and `\n' is written.

2000-05-19  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c: Back to old garbage collection invokation rule.  GC gets
	run when freelist is empty.  Not nice but avoids leak in do-loop.
	Have to investigate that stuff further.

	* port.c (write_char_func): Fixed bug.  `write-char' was
	trying to write to the current input port.  Did not work of
	course.

2000-05-18  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* fdport.c, fdport.h: Prepared the code for introducing buffering
	into fdports.  All the struct fields are there, deallocation and
	char-ready? code too.  Missing is allocation, reading, writing,
	flushing, seeking and ftelling etc.

	* read.c (read_hash_table): Fixed bad hash literal verifying code.
	Also implemented dynamic hash table size calculation.

2000-05-17  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (call_with_current_continuation_func): When calling a
	continuation with more then one parameter, all parameters are
	delivered to the continuation as multiple values.

	* port.c: New primitives `port-line', `set-port-line!',
	`port-column', `set-port-column!', `port-filename',
	`set-port-filename!'.

	* list.c (car_plus_cdr_func): Fixed a bug which caused
	`list-lib.scm' functions to blow up.  Did not work when the cdr of
	the argument pair was '().

	* sport.c: New primitives `open-input-string',
	`open-output-string' and `get-output-string'.

2000-05-16  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* hash.c (zzz_hash_set?, zzz_hash_ref?): Added accessor functions
	for the C level.

2000-05-15  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* vector.c: Many function documentation updates.

	* node.c: Many function documentation updates.

	* read.c (read_hash_table): Duplicate keys in hash literals are
	now forbidden and signal an error.

	* hash.c (hashq_remove_func, hashv_remove_func,
	hash_remove_x_func): Those primitives now returned the removed
	handle or #f if the handle was not found.

2000-05-10  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (garbage_collect_func): New primitive `garbage-collect'.

2000-05-09  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.h: Added faster, less-safe predicate and selector macros.
	Also speeded up tagged_p() by removing redundant check.

	* eval.c (zzz_int_check_list_for_non_symbols): Lambda expressions
	and function defines now check argument lists and signal an error
	if there are non-symbols.
	Speeded up the evaluator by using faster, less-safe predicate and
	selector macros.
	Introduced new primitive function calling scheme.  Primitives can
	now have an associated argument list format specifier, so that
	function definitions can be written in a more natural way.

	* node.c, node.h: Changed representation of glocs.  They now
	remember their name.  New Scheme accessible variable
	`eval-print-memoized'.  Controls whether additional information is
	printed for glocs/llocs.
	(lloc_print, gloc_print): Only print informational stuff if
	`eval-print-memoized' is true.

	* port.c (zzz_port_print): Only the first 4 characters of
	`@#named-let' were printed.

2000-05-08  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c: All procedures which set the name of a lambda expression
	do it conditionally (only if not set already) now.
	(zzz_evaluate, zzz_apply): `too few/many parameters in lambda
	call' messages now include the name of the lambda expression, if
	set.

2000-05-02  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_evaluate): Now expands macro calls.  New primitives
	`transcript-on' and `transcript-off'.
	(zzz_read_eval_print, report_error): Print expression read and
	results or error to the transcript file if it exists.

	* macros.c, macros.h: New source files for holding macro-handling
	primitives `define-macro' and `expand-macro'.

	* misc.c, misc.h: New source files for collecting unsorted
	primitives.  New primitives `srand' and `random'.

2000-05-01  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c: New primitives `defined?' and `undefine'.

	* node.c (zzz_undefine_symbol): Function for undefining symbols.

	* list.c (reverse_x_func): New destructive primitives `reverse!'
	and `append!'.

	* stringfun.c (cleanup_path): Fixed a segfaulting bug:
	(cleanup-filename "..") was dumping core.

	* posix.c: The primitives `strptime' and `strftime' are only
	compiled in if available in libc.
	`getenv' is now the only procedure compiled in if ENABLE_POSIX
	is not defined.

2000-04-28  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c: New primitives for time and date handling: strptime,
	strftime, gmtime, current-time.

	* node.c (zzz_set_symbol_value, zzz_get_symbol_value,
	zzz_get_variable_location): These functions work now even if NULL
	is passed as the environment.

	* capi.c (zzz_get_variable, zzz_set_variable): New functions for
	simplified variable access.

	* read.c (read_hash): Made the form-feed character '\f'
	whitespace, too.

2000-04-27  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c: A lot of autoconf'ing.  Most of the procedures are only
	compiled in if available.

2000-04-26  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (call_with_current_continuation_func):
	`call-with-current-continuation' is now a builtin procedure.

	* node.c (zzz_cons): Fixed the memory leak bug.  zzz_cons() was
	not maintaining cell allocation statistics right, which resulted
	in `used_cells' becoming less than zero, which in turn triggered
	endless heap allocation.
	Added various `assert()' statements all over the place.
	
2000-04-25  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* read.c (read_hash_table): New input method for literal hash
	tables.  Hashes are denoted with #{key0 => val0 key1 => val0}.
	(zzz_read_cell): The start position of top-level expressions is
	remembered in the variables `zzz_last_tl_read_line' and
	`zzz_last_tl_read_col' for reference.  Procedure definitions
	store this information together with the code of lambda
	expressions.

	* node.c, node.h, read.c: Added keyword support, both `#:' and `:'
	prefixed keywords are supported.

	* Removed all references to car/cdr results as lvalues to make use
	of new debugging accessor functions.

	* node.c (zzz_mark_cell): Fixed a bug in cell marking (passing
	around invalid cell values) which showed up when adding debugging
	car/cdr.
	(car, cdr, set_car, set_cdr, car_addr, cdr_addr): Added debug
	replacement functions of these famous macros and inhibited use of
	car/cdr in lvalues.

	* read.c: Error messages include now filename, line and column
	number.

	* node.c: Provide error message with current input file name, if
	available.

	* Introduced new error reporting scheme: `zzz_make_error()' now
	receives an extra argument which is a list of values to be printed
	instead of the standard `error:' string, seperated by colons.
	Most callers provide NULL for now, which means the old behaviour
	of only printing `error: errormessage'.

2000-04-24  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* posix.c: New primitives `tmpnam', `tmpfile' and `umask'.

	* stringfun.c: New primitives `string-split', `dirname' and
	`basename'.

	* regexp.c (zzz_init_regexp): All regexp constants like
	`regexp/extended' are defined as constants now.

	* number.c (zzz_init_number): `PI' is now defined as a constant,
	not a variable.

	* port.c (zzz_init_port): SEEK_* constants are now defined as real
	constants.

	* posix.c (zzz_init_posix): All variables which were defined for
	file permissions etc. are now defined as constants.

	* node.c (zzz_initialize): Added system constant
	`%sizzle-version%'.

	* posix.c: Check HAVE_SYS_WAIT before including sys/wait.h and
	define replacement macros if not available.

	* read.c (read_list): Removed redundant symbol_p() check.
	(read_vector): Fixed a bug. Sizzle was not properly reading
	vectors with whitespace before the closing parentheses.
	(read_hash): Removed support for `#nil' as an alternative syntax
	for '().  
	General code review and bug squashing: Vectors with whitespace
	after opening parentheses, line and block comments inside of
	vectors and lists, line comments not on top level etc. were not
	read correctly.  All fixed now (hopefully).

2000-04-20  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (zzz_evaluate_file): Returns -1 if file not found and -2
	if an error occured during evaluation.

	* Changed all primitives to define their function names as static
	variables which are referenced by parameter accessing macros.

	* Moved functions from predicate.c to eval.c and removed both
	predicate.c and predicate.h.

	* eval.c (define_constant_form): New primitive `define-constant'.
	All special forms are now registered via init function.

	* node.c (zzz_make_constant): New constructor function for
	constant values.
	(zzz_get_symbol_value, zzz_get_variable_location,
	zzz_set_symbol_value): Adapted to constants.
	(zzz_define_constant): New function.

	* read.c (zzz_parse_scheme_number): Does not accept the empty
	string as a number anymore.

	* number.c (number_to_string_func): Returned "" if applied to
	0. Fixed.

	* stringfun.c (string_append_func): `string-append' now works as
	required by R5RS.

	* number.c (string_to_number_func): `string->number' now works as
	documented and required by R5RS.

2000-04-19  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c (zzz_define_symbol_value): Changed behaviour of `define'.
	The same variable may be defined several times now.

	* eval.c (and, or): Both forms accept zero parameters now, as
	required by R5RS.

	* list.c (list?): Checks for list structure and only returns #t
	if the argument is a proper list as R5RS requires.
	(append?): Changed to accept improper list as last argument as
	R5RS requires.

2000-04-18  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* libsizzle.h: Removed unnecessary header files from include list.

	* hash.c: New file for hash functions.  New primitives: hashq,
	hashv, hash, hashq-get-handle, hashv-get-handle, hash-get-handle,
	hashq-ref, hashv-ref, hash-ref, hashq-set!, hashv-set!, hash-set!,
	hashq-create-handle!, hashv-create-handle, hashq-remove!,
	hashv-remove, hash-remove.

	* list.c (remq, remv, remove): New primitives. 

	* node.c (new_cell_chunk): Chunks are now forced to be allocated
	on a 8-byte boundary (that was not guaranteed under Win32 somehow
	and caused segfaults (thanks to ela for testing)).
	(zzz_finalize): Now respects padding overhead when freeing chunks.

	* values.c (zzz_init_values): Values primitives are registered
	from init function now.

	* port.c (zzz_init_port): All IO primitives are registered from
	init function now.

2000-04-17  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* eval.c (dynamic-wind, signal):  New primitives.

	* number.c (magnitude, angle, real-part, imag-part, numerator,
	denominator, gcd, lcm):  New primitives.

	* stringfun.c (string-index, string-rindex):  New primitives.

	* number.c: New primitives: angle, magnitude, real-part,
	imag-part.

	* list.c (zzz_init_list): New function, registers all list
	primitives.

	* number.c: Added replacement for rint(), which is compiled in if
	not provided in libm (Cygwin, for example) (Thanks to ela).

	* node.c (zzz_define_form): New function for registering special
	forms.

	* promise.h: Removed all primitive declarations.

	* stringfun.h (zzz_init_stringfun): Removed all primitive
	declarations.

	* number.c (zzz_init_number): Trigonometric functions are not
	compiled in if --disable-extended-math configure option is given.

	* posix.c (zzz_make_system_exception): (getenv) is now supported
	even when --disable-posix configure option is given.

	* node.c: Removed character, promise and string functions from
	global primitive init array.
	(zzz_initialize): Added call to zzz_init_char().

	* stringfun.c: Made all primitives static and register them
	explicitly from init functions.

2000-02-24  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* node.c (set_symbol_value): Changed semantics such that the value
	of a symbol is replaced in-place instead of overwriting a
	symbol-value binding completely.  Needed to make set! working from
	inside let's. Parameter COMPLAIN is now obsolete and should be
	phased out ASAP.
	(define_symbol_value): Changed semantics, too. When COMPLAIN is
	false, bindings are defined now without error. Used in lets,
	lambdas etc.

	* eval.c (let_form, letstar_form, letrec_form, lambda_form): Use
	`define_symbol_value' instead of `set_symbol_value' because the
	semantics of those functions has changed.

2000-02-10  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* number.c: Implemented some more R5RS functions: number
	predicates, `abs', `quotient', `remainder'.  `modulo' also has
	been implemented but does not yet conform to the standard.

	* char.c, char.h: New files for character functions.  Implemented
	all R5RS character functions.

	* stringfun.c: Implemented string compare functions according to
	R5RS.

	* eval.c (named_let_form): Implemented named `let' expressions.
	(let_form): Made `let' R5RS compliant.
	(letstar_form): Implemented R5RS compliant `let*'.
	(letrec_form): Implemented R5RS compliant `letrec'.
	(eliminate_tail_recursion): Now named `let' safe.
	(check_let_formals): New function.  Does checks common to `let',
	`let*' and `letrec'.

1999-12-06  Martin Grabmueller  <mgrabmue@cs.tu-berlin.de>

	* sizzle.c (main): Created.
