Changes from release 2.1 to release 2.2

   General:

     o  Elk ported to new platforms: SGI Irix 5.1, HP-UX 9.0

     o  All Scheme files now end with the suffix `.scm'
     o  Introduced new symbols in the config files to be used by the
	UNIX extension
     o  Reorganized the include files.  Split external declarations
	into `private' (intern.h) and `public' (extern.h) declarations
	to be used by extensions

     o  It's no longer necessary to specify multiple destination
	directories in the site file (only install_dir; subdirectories
	are created automatically)
     o  `init_objects' is gone from the site file, see INSTALL for a
	new, simpler way to link extensions or an application with Elk
	statically
     o  New directory $install_dir/lib is created with files module.o,
        standalone.o and shell scripts linkscheme, makedl, and ldflags
	(see INSTALL)

     o  Elk can now be used by applications that must have their own
	main() function.  See INSTALL for details.

   Interpreter kernel:

     o  New primitives to allow blocking of signals from within Scheme
	code: disable-interrupts, enable-interrupts
     o  Changed Disable_Interrupts and Enable_Interrupts macros to
	allow nesting and to handle signals used by extensions
	(specifically by the new UNIX extension)
     o  Extended representation of continuations to carry current
	interrupt nesting level and restore it when being called
     o  (Re-)enable interrupts in toplevel on error
     o  Added default signal handlers for SIGPIPE and SIGHUP to clean
	up temporary files

     o  New primitive: `features'
     o  `require' now appends .scm to feature name to obtain file name
	(if no file name has been specified and if the feature name
	doesn't have a suffix yet)
     o  Features elk:dump and elk:load-object are provided by the
	interpreter if dump and dynamic loading are supported

     o  Implemented Register_Onfork() and Call_Onfork() to provide
	`fork handlers' (used, for instance, by the UNIX extension)
     o  Added fork handlers to the dynamic loading implementations to
	create links for the temporary files

     o  Added a close function to I/O ports to allow for pipe-based ports
     o  New primitive: char-ready?

     o  Added a check to the code that restarts a dumped interpreter
        to detect that the start address of the stack has been moved
	with respect to the original invocation (this happens between
	Sun-4c and Sun-4m architectures, for instance)

     o  Modified math.c to implement the distinction between exact and
        inexact numbers as required by the language definition
     o  New primitives: exact->inexact, inexact->exact
     o  The number prefixes #e and #i are now supported
     o  Floating point numbers are no longer automatically reduced to
	integers; new conversion function Make_Flonum(double) in
	addition to Make_Reduced_Flonum(double)
     o  Added new conversion functions to cleanly distinguish between
	C ints and longs:  Get_Long(Object), Make_Long(long),
	Make_Unsigned_Long(unsigned long), and functions to convert
	bignums from/to C longs
     o  New conversion functions for exact integers:
	Get_Exact_Integer(Object) and Get_Exact_Long(Object)

     o  Removed the unique `void' type; #v is now converted into the empty
	symbol by the reader; void? remains for compatibility

     o  Implemented reader table for #-syntax
     o  New function Define_Reader() to allow extensions to register
	their own read syntaxes (used by the new bitstring extension)
     o  Exported parts of the reader to simplify writing new reader
        functions in extensions

     o  New functions/macros to convert Scheme strings and/or symbols
	into C strings (to be used by extension writers): Get_String,
	Get_Strsym, Get_String_Stack, Get_Strsym_Stack; see src/cstring.c
     o  Now obsolete: Declare_C_Strings, Dispose_C_Strings, Make_C_String

     o  Bug fixes:
	  o  fixed a few bugs in the implementation of continuations and
	     tail call optimization and in the generational, incremental
	     garbage collector
          o  there was a bug in the interaction between the garbage
	     collector and `dump'
	  o  identified additional critical sections to be protected
	     from delivery of signals
	  o  initscheme.scm wasn't resolved against the load-path
	  o  quasiquotation now also works for vectors (kudos to
	     Tor Lillqvist for suggesting a simple fix)
	  o  a bug in src/load-ld.c could cause the first static variable
	     in a dynamically loaded .o file to not be zeroed

   Extensions:

     o  New UNIX extension; see doc/unix for the reference manual and
	examples/unix for a few demonstration programs

     o  New record extension; see doc/record for the reference manual.
	The `struct' extension is now obsolete
    
     o  New arbitrary-length bitstring extension; see doc/bitstring
	for the manual
   

Changes from release 2.0 to release 2.1

   General:

     o  New configuration files for the 386/486-PC running 386BSD and
        DOS/DJGPP, for Suns running Solaris 2.1 (SunOS 5.1, and for
	the Convex C230 running ConvexOS.
     o  Reorganized the config files and the site file to allow for
        configuration of the generational, incremental garbage collector
     o  Introduced several new symbols in the config files to simplify
        installation on several systems
     o  Added new targets to all Makefiles to allow `cross-localization'
        of the source tree (see comments in DOS section in MACHINES)

   Interpreter kernel:

     o  Added a generational, incremental garbage collector
     o  New primitives: garbage-collect-status, collect-incremental
     o  Reorganized the source files to accommodate the new garbage
        collector and to separate garbage collector specific code
        from code common to both garbage collectors

     o  Empty list no longer counts as false; added primitive
        `empty-list-is-false-for-backward-compatibility'

     o  Changed delimiter character in load-path argument of -p option
	from comma to colon
     o  Initialize load-path from ELK_LOADPATH environment variable
	(if present)

     o  Added argument to -v option to control which messages to print
	(linker command, init/finit functions)
     o  It's no longer considered an error if an object file contains
	no initializers
	    
     o  Completely rewritten implementations of `dump' for ELF (SysVR4,
        Solaris 2.x), ECOFF (Ultrix, Irix), and HP9000 a.out formats;
        the HP version now correctly handles shared libraries
     o  Added support for dynamic loading under SysVR4 and Solaris 2.x
	(see comments in MACHINES)
     o  Added code to read symbol table of object files on the Convex

     o  Bug fixes:
          o  dynamic-wind was completely broken; fixed it
	  o  fixed a bug in the code that checks for the stack growing
	     direction (caused dumped images to crash on startup)
	  o  fixed a bug in the equal? predicate (could enter an
	     infinite loop when applied to environments)
     o  Fixed a number of portability problems, among them:
	  o  added O_BINARY flag to open() calls and "b" mode to fopen()
	     calls where necessary
	  o  added support for the many different ways to purge a file
	     pointer and tty file descriptor (src/read.c, src/print.c)

     o  Integrated the functionality of the `libutil.a' library from
	older releases into the interpreter kernel (conversion of
	symbols and lists of symbols to bit masks and vice versa;
	routines to manage a pool of weak pointers to objects, used
	mainly by the Elk X extensions

   Extensions:

     o  Removed libutil.a (lib/util/*); moved the code into the
        interpreter kernel (src/terminate.c; src/symbol.c); removed
	libutil.a from the default load-libraries
     o  Renamed lib/misc/c++.[co] to lib/misc/newhandler.[co] (c++.c isn't
	a valid filename under DOS)
     o  Added finit function to lib/misc/monitor.c to switch off
	monitoring and write mon.out on exit

   Elk/X:

     o  The X extensions are no longer pre-linked against the required
	X libraries (by means of ld -r); resolving against system libs
	now always takes place at load time
     o  make-gcontext and copy-gcontext now can be called with a drawable
	(i.e. pixmap or window)
     o  New primitives: alloc-color alloc-named-color
     o  Removed window-unique-id primitive
     o  Fixed a few bugs in the Xt extension (editres now works with
	Scheme programs); removed an artificial limitation
     o  Defined a GC visit function for widgets that visits each widget's
        parents and the children of composite widgets
     o  Added support for Motif gadgets


Changes from release 1.5 to release 2.0

   General:
    
     o  The build and install process has been improved significantly (see
	file INSTALL)
     o  Added a new directory "config" that holds the system-specific
	configuration files and the site-file
     o  Added a build shell script and a unified Makefile to all
	directories; "build" creates the ``real'' Makefiles containing
	system- and site-specific details during the make process
     o  Added install, lint, clean, and distclean targets to all
	Makefiles
     o  Placed files that are needed during runtime (dynamically loadable
	object files, Scheme files, the interpreter itself) into separate
	directories; added "make install" to put files there

     o  Simplified porting Elk to new systems (assembly language support
	and a stack-extending version of "alloca" are no longer required)
     o  Tested on several new systems (IBM RS/6000, HP9000/700, SGI,
	Sony; see the file MACHINES)

     o  Placed new files CONTRIBUTORS, MIGRATE, and TODO into the toplevel
	directory of the distribution
     o  Added a directory "util" that contains tools to simplify porting
	Elk to new environments and other utilities that are useful on
	some systems
     o  Added a directory "scripts" that holds the shell scripts used
	to link instances of the interpreter and extensions.
     o  Removed "stk" directory with test programs (no longer needed)

     o  Added ANSI C prototypes and C++ "extern C" to all include files

   Interpreter kernel:

     o  Placed include files into a separate directory (include)
     o  Reorganized the source files (separate source files for different
        a.out formats and different dynamic loading mechanisms)
     o  Changed the way new Scheme objects are allocated to support the
	generational garbage collector (not yet present in Elk)
     o  Rewrote the code implementing continuations to support full
	call/cc on all machines
     o  Fixed tail recursion optimization
     o  Added support for POSIX signals (as alternative to BSD reliable
	signals)
     o  Removed several artificial limitations (such as max. number of
	before-GC and after-GC functions and statically GC-linked objects)
     o  Removed code that depended on max. number of open files per process
     o  Added bi-directional ports (input-output-ports); new primitive:
	open-input-output-port
     o  New primitive: port-line-number
     o  Reader now prints line number on syntax error
     o  Max. length of a pathname is now determined correctly (using the
	POSIX incantations if applicable)
     o  Added code to support dynamic loading under HP-UX (src/load-shl.c)
     o  Added code to call extension finalization functions and C++
	destructors on termination
     o  Fixed and improved the code to call extension initialization
	functions and C++ constructors on startup or when loading
	extensions
     o  Improved the mechanism to suppress initialization of statically
	linked extensions on startup ("dont_init_if_name" in config/site)
     o  Can use ANSI "atexit" as alternative to redefining "exit"
     o  Added option -p to specify load path
     o  Scheme file "initscheme" is now loaded before the toplevel is
	loaded
     o  Changed "rand" to use rand() if random() isn't there
     o  re-entrant-continuations? primitive is no longer needed (returns
	always #t now)
     o  Added a general mechanism to register termination functions for
	individual objects (e.g. to close files on GC); see src/terminate.c
     o  linkscheme shell script improved; added code to support the
	stupid AIX linker
     o  Fixed numerous things that caused lint or "gcc -ansi" to complain
     o  Changed the dynamic loading, "dump", and a.out symbol table reading
	code in numerous places to make it work on new systems and to make
	it more readable and maintainable

   Extensions:

     o  Combined lib/util/symbol.o and lib/util/objects.o into new library
	libutil.a; put this library into the default "load-libraries"
     o  Moved lib/util/string.c and lib/util/string.h into the interpreter
     o  Moved files from lib directory into new subdirectory "misc"
     o  Added POSIX sysconf stuff to unix.c to determine max. number of
        open files per process

   Elk/X:

     o  Made the code mostly "lint clean" and "gcc -ansi clean"
     o  Fixed bogus variable definitions in xlib.h and xt.h
     o  Xlib: added support for client-message event
     o  Xt: added code to avoid a bug in Motif 1.1.4
     o  Xt: added optional "mask" argument to context-add-input
     o  Removed site-dependent information from scm/xwidgets (file is
	now created from scm/xwidgets.src during the build process)
     o  Renamed widget .d files that were longer than 14 characters;
	added ALIASES file for each widget set containing mappings from
	real widget names to short names

   Documentation:

     o  Added sub-directory "paper" containing a draft version of a
	paper about Elk

   User-contributed extensions:

     o  A foreign function interface, an Elk Shell, and a vector extension
	have been contributed by J. P. Lewis (contrib/zelk).


Changes from release 1.4 to release 1.5

   General:
     o  Added a "contrib" directory for user-contributed extensions
	that I have not fully tested and/or integrated into Elk
     o  Renamed ORIGIN to COPYRIGHT

   Interpreter kernel:
     o  Added support for the Amiga, A/UX and System V Release 4
	(ELF a.out format)
     o  Added special load-library for MIPS (-lc_G0)
     o  Extension-interface: replaced Val() by Var_Set()/Var_Get()
     o  Modified load, autoload, and require so that multiple .o-files
	can be loaded simultaneously
     o  Added -1+ as a synonym for 1-
     o  Bug fixes:
          o  fixed a GC-related bug
          o  fixed a bug that occurred when allocating a very large heap
	  o  fixed a bug in case-insensitive string comparison
	  o  fixed a bug in macro "when"
	  o  changed and clarified semantics of print-depth/print-length
     o  IEEE 1178/R^4RS compatibility:
          o  replaced close-port by close-input-port and close-output-port
          o  added primitives caaaar .. cddddr
          o  added peek-char primitive
          o  added -i option for case-insensitive operation
     o  Removed -bc option
     o  Removed CBREAK-hack in read-char

   Elk/X:
     o  Fixed several GC-related bugs (objects belonging to Xlib/Xt are
	no longer terminated by garbage collector when unreferenced)
     o  Fixed a bug in the interface to the Grip widget
     o  Modified code to load widgets to make use of new capability to
	load multiple .o-files

   Documentation:
     o  Interpreter kernel:  documented new functions, clarified
	some sections
     o  Xlib/Xt:  documented X-related behavior of garbage collector,
	pointed out GC-related pitfalls


Changes from release 1.3 to release 1.4

   Interpreter kernel:
     o  Support for the NeXT machines added
     o  New primitive list? provided
     o  Two bugs in the tail recursion code fixed
     o  -v option to trace /bin/ld-calls
     o  man-page written

   Elk/X:
     o  Tested under X11R5
     o  X11R3 and earlier versions are no longer supported
     o  The HP-widget code has been removed from the distribution

     o  New Xlib-primitives:  install-colormap  uninstall-colormap
	list-installed-colormaps  xlib-release-5-or-later?

     o  Xt interface now supports actions and accelerator tables
     o  Bug in set-context-fallback-resources! fixed
     o  New Xt-functions:  widget-name  widget-translate-coordinates
        application-initialize  context-add-action  install-accelerators
        install-all-accelerators  xt-release-5-or-later?

     o  Support for new widget classes: menubutton panner porthole repeater
        simplemenu sme smebsb smeline stripchart tree
     o  vpaned renamed to paned

     o  Example programs have been moved into a new examples directory
	with sub-directories for Scheme, Xlib, Xaw, Motif

     o  New Xaw example programs that demonstrate the new widget classes,
	accelerators, actions, etc.

   Other extensions:
     o  Interface to the GNU gdbm-library
