2002-05-06  John Harper  <jsh@unfactored.org>

	* gettext.c (bindtextdomaincodeset): new stub. Patch from
	Christophe Fergeau <teuf@users.sourceforge.net>. Only does
	anything when not using the build in gettext implementation
	(which needs to be updated)

2002-03-30  John Harper  <jsh@unfactored.org>

	* sockets.c: added IS_REGISTERED flag so we never try to call
	rep_deregister_input_fd () on a fd that isn't actually
	registered (which rep-gtk doesn't like)

2002-03-01  John Harper  <jsh@pixelslut.com>

	* timers.c: #ifdef rep_HAVE_UNIX not HAVE_UNIX (from Michael
	Eriksson <Michael.Eriksson@era-t.ericsson.se>)

2002-02-13  John Harper  <jsh@unfactored.org>

	* numbers.c (Frandom): when seeding, factor in the pid of the
	process as well as the current time

	* unix_main.c (rep_getpid): new function

	* streams.c (Fformat): deleted unused end_of_input label

2001-12-21  John Harper  <jsh@unfactored.org>

	* rep.c: call setlocale (LC_ALL, "") at startup. Patch from
	Bruno Haible <haible@ilog.fr> (with some extra preprocessor
	stuff)

2001-12-18  John Harper  <jsh@unfactored.org>

	* repgdbm.c (Fgdbm_delete): don't add one to the length of the
	string when calculating dkey.dsize (none of the other functions
	do)

2001-12-17  John Harper  <jsh@unfactored.org>

	* rep-config.sh, Makefile.in: added --lispdir option

	* streams.c (Fformat): signal an error on unknown format
	conversions and end of input string in the middle of a format
	directive

2001-12-04  John Harper  <jsh@unfactored.org>

	* numbers.c (Finexact_to_exact): made this handle fractional
	values now

	(Fnumerator, Fdenominator): if given a float, rationalize it
	using inexact->exact

2001-11-14  John Harper  <jsh@unfactored.org>

	* files.c (Ffile_ttyp): new function

2001-10-28  John Harper  <jsh@unfactored.org>

	* version 0.15.2

2001-10-20  John Harper  <jsh@unfactored.org>

	* numbers.c (random_new): call mpz_init () on the output value
	before passing it to mpz_urandomm (). This seems to stop things
	crashing

	(Frandom): signal an error if LIMIT <= 0

2001-10-19  John Harper  <jsh@unfactored.org>

	* repgdbm.c (Fgdbm_walk): fixed doc string

	* readline.c (match_paren): should return an int, not void
	(pointed out by Karl M. Hegbloom <karlheg@microsharp.com>)

	* librep.sym: removed Fdebug_frame_environment,
	Fdebug_inner_frame and Fdebug_outer_frame

	* lisp.c (skip_chars): don't accept, say, `#!keyX' when asked
	for `#!key'; check that the input character after the end of
	the asked for characters is a token delimiter

2001-10-03  John Harper  <jsh@unfactored.org>

	* version 0.15.1

	* numbers.c: disabled gmp random numbers, they crash

2001-10-01  John Harper  <jsh@unfactored.org>

	* version 0.15

	* numbers.c: also check for HAVE_GMP_RANDINIT

2001-09-23  John Harper  <jsh@unfactored.org>

	* numbers.c, misc.c (Frandom): moved to numbers.c. When gmp is
	present, always use gmp random integer functions. They should
	give `good' results for limits up to at least 128 bits, then
	they start concatenating multiple random values to get their
	result

2001-09-15  John Harper  <jsh@unfactored.org>

	* continuations.c: allocate continuation and thread typecodes
	lazily (when they're first needed)

	* numbers.c (promote_to): don't canonicalize the created
	rational, since it's denominator is known to be 1 (suggested by
	Kevin Ryde <user42@zip.com.au>)

2001-09-14  John Harper  <jsh@unfactored.org>

	Integrated patch from Tom Bates <Tom.Bates@compaq.com> to fix
	some bugs on mips-compaq-nonstopux architecture:

	* unix_files.c, rep-remote.c, realpath.c: if S_ISLINK or
	S_ISSOCK macros aren't defined, define them in terms of
	S_IFLNK and S_IFSOCK

	* misc.c (Fcomplete_string): don't assume strcmp () and strncmp
	() have exactly the same type or are functions

2001-09-11  John Harper  <jsh@pixelslut.com>

	* rep_subrs.h, repint_subrs.h: made rep_undefined_value public
	* librep.sym: added rep_undefined_value

	* rep_lisp.h (rep_File): new bit, rep_LFF_SILENT_ERRORS. When
	set file errors aren't signalled for this file. They're just
	ignored and sensible values are returned

	* files.c (Fset_file_ignore_errors): new function

	* streams.c (rep_stream_puts, rep_stream_putc): don't signal
	end-of-stream errors if files have been marked to ignore them

2001-09-02  John Harper  <jsh@pixelslut.com>

	* misc.c: a couple of small fixes

	* numbers.c (Flog): now takes an optional BASE parameter - the
	base of the logarithm to take, instead of defaulting to taking
	natural logarithms. E.g. (log 4 2) -> 2

2001-08-31  John Harper  <jsh@pixelslut.com>

	* streams.c: signal an error if it's not possible to write as
	many bytes as asked for. Writing is always assumed to block,
	and no one actually checks the return values of the various
	output functions, so this is best..

	* sockets.c (blocking_write): if an error occurs, shutdown the
	socket and call the sentinel

	* unix_processes.c (write_to_process): loop if write () handles
	fewer characters than we need

	* weak-refs.c (rep_scan_weak_refs): trivial change

	* lisp.c (lisp_prin): print address of closures, helps
	debugging

	* lisp.c (apply): don't assert that either an exception or a
	value is returned from every function, instead just print
	annoying warning messages when this happens

	* lispmach.h, lisp.c: when searching for keyword arguments,
	don't check every other argument, check every argument (there's
	no way of knowing how keywords will be aligned)

2001-08-23  John Harper  <jsh@pixelslut.com>

	* weak-refs.c: new file, provide simple weak-reference cells

	* main.c (rep_init_from_dump): call rep_weak_refs_init ()
	* values.c (Fgarbage_collect): call rep_scan_weak_refs () after
	calling run_guardians ()

2001-08-13  John Harper  <jsh@pixelslut.com>

	* continuations.c (Fthread_suspend): reversed test to check if
	timeout occurred so it matches the documentation

	* misc.c (Fcurrent_time_string): fixed returning rep_NULL in
	some unusual cases

	* lisp.c (Fbacktrace): print backtrace in top to bottom order,
	not bottom to top

2001-08-09  John Harper  <jsh@pixelslut.com>

	* lisp.c (Ffuncall): use apply () instead of rep_funcall ()

2001-08-08  John Harper  <jsh@pixelslut.com>

	* main.c (get_main_options): --interp also means record line
	number information. Removed --line-numbers option

2001-08-07  John Harper  <jsh@pixelslut.com>

	* origin.c: new file. Records and fetches line numbering
	information for lisp forms (when enabled). Adds non-trivial
	memory overhead, but is invaluable for debugging (both at
	compile- and at run-time)

	* lisp.c (read_list): call rep_record_origin () on the produced
	list, giving the stream and starting line of the read form
	(where possible)

	(copy_to_vector, bind_lambda_list, bind_lambda_list_1,
	eval_lambda, apply): removed the eval_args and (kludgey)
	eval_in_env parameters. Now all function applications going
	through apply () (ne funcall) must have an _evaluated_ list of
	arguments. This may cons more in interpreted mode, but
	simplifies a lot of things and is better for debugging (since
	only evaluated arguments are put in the stack frame)

	(Fbacktrace): made output more elegant (again)

	(Fstack_frame_ref): return a list representing a given frame on
	the stack

	(Fdebug_frame_environment, Fdebug_outer_frame,
	Fdebug_inner_frame): deleted these functions

	* unix_main.c: adapted a couple of functions for new backtrace
	format

	* values.c, symbols.c, repint.h, macros.c, lispmach.h,
	lispcmds.c, continuations.c: removed the args_evalled_p field
	of the rep_Call structure, replaced by a current_form field

	* files.c (Fseek_file): recognize that seeks to the start of
	the file should reset the line number to one, not munge it

2001-08-02  John Harper  <jsh@pixelslut.com>

	* lisp.c: signal an error if EOF is read while parsing a block
	comment

	* continuations.c: abuse exit_val field of thread structure
	while threads are suspended to allow thread-suspend to return
	true or false depending on whether the timeout was reached or
	not

	* rep_lisp.h (rep_DECLARE[1-5]_OPT): new macros, test for arg
	being false or the given type

	* numbers.c (rep_get_long_int): fixed some unsignedness
	problems

	* unix_processes.c, timers.c, misc.c, lispcmds.c, find.c,
	files.c, continuations.c: in various places check that optional
	integer arguments really are integers or false. Also use
	rep_get_long_int () etc where it makes sense to truncate
	non-integer values

2001-08-01  John Harper  <jsh@pixelslut.com>

	* tables.c (Ftable_unset): fixed bug of not decrementing
	total_nodes

	* tables.c (Ftable_size): new function

2001-07-29  John Harper  <jsh@pixelslut.com>

	* continuations.c (Fcurrent_thread, Fall_threads): if operating
	in the zero'th root, and there is no default thread, create one
	(instead of returning false)

2001-07-26  John Harper  <jsh@pixelslut.com>

	* lisp.c (readl): parse `#undefined'. Fixed bug when reading
	`(#\A)' (would signal an eof too soon)

	* lisp.c (signal_reader_error): new function, used to signal
	parse errors. Reports filename and line number for file
	streams. Also gives a description of why the error occurred in
	most cases

	* symbols.c (F_define): return #undefined

	* symbols.c (rep_undefined_value):: new symbol called
	`#undefined'

	* rep_lisp.h, files.c: files get a new field `line_number', and
	a new flag rep_LFF_BOGUS_LINE_NUMBER.

	* streams.c (rep_stream_getc, rep_stream_ungetc): update the
	line_number field of files

	* lisp.c (fast_getc): handle line_number field of files

2001-07-22  John Harper  <jsh@pixelslut.com>

	* lisp.c (readl): don't signal an error when reading EOF
	immediately after `#\[a-zA-Z]', just return the given character

2001-07-21  John Harper  <jsh@pixelslut.com>

	* lisp.c (Fbacktrace): made backtraces cleaner. Added an option
	backtrace-verbosely which turns on printing argument lists

2001-07-17  John Harper  <jsh@pixelslut.com>

	* rep-remote.c (do_readdir): output mode in decimal not octal
	(since the 0nn octal read syntax was deprecated in rep)

	* unix_files.c (rep_canonical_file_name): don't preserve
	trailing slashes, always remove any trailing slashes. Also if
	realpath () fails (e.g. the file doesn't exist), delete
	trailing slashes before returning the input

	* unix_files.c (rep_file_size): use rep_make_long_uint () to
	create the returned value, instead of always using a fixnum

2001-07-15  John Harper  <jsh@pixelslut.com>

	* rep_lisp.h: only do the `#define Qnil &rep_eol_datum'
	shortcut if __APPLE__ isn't defined, since it doesn't seem to
	work with Mac OS X (for at least some versions of the
	toolchain)

2001-07-02  John Harper  <jsh@pixelslut.com>

	* version 0.14

2001-06-29  John Harper  <jsh@pixelslut.com>

	* streams.c (rep_stream_getc): don't test for end of input by
	looking for a null byte! Check the actual length of the string!

	* sockets.c (blocking_write): new function, used to write ()
	into a non-blocking fd, simulating blocking using select ().
	Used when writing data into sockets

2001-06-26  John Harper  <jsh@pixelslut.com>

	* sockets.c (Fsocket_peer_address, Fsocket_peer_port): new
	functions
	(Fsocket_address, Fsocket_port): only ever return the details
	of the local connection point (not the peer in the case of
	accepted connections)

	* sockets.c (make_inet_socket): if binding to INADDR_ANY, try
	to find out the actual address of the server and the actual
	port number.
	(Fsocket_server): if PORT is false, use a port of zero, which
	means `any unused port'

	* sockets.c (Fsocket_server): HOSTNAME arg can now be nil,
	meaning to use INADDR_ANY when binding to the socket (listen
	for all addresses)

2001-06-18  John Harper  <jsh@pixelslut.com>

	* repgdbm.c, repsdbm.c (rep_dl_kill): new functions, close all
	databases before exiting

2001-06-15  John Harper  <jsh@pixelslut.com>

	* rep-md5.c: added some comments and doc strings

2001-06-14  John Harper  <jsh@pixelslut.com>

	* numbers.c (rep_parse_number): don't call mpz_init_set_str ()
	on BUF since it may not be zero-terminated. Instead copy the
	string to the stack and terminate it there

	* rep-md5.c: new module, rep.util.md5. Exports two functions
	currently, md5-string and md5-local-file.

	* fake-libexec, Makefile.in: build rep.util.md5 module

	* md5.c, md5.h: MD5 message digest implementation. Taken from
	GNU textutils-1.22 (originally written by Ulrich Drepper)

	* misc.c (Fcrypt): new function, wrapper for crypt(3) if it's
	available

2001-06-12  John Harper  <jsh@pixelslut.com>

	* repint_subrs.h, lisp.c: don't declare Qrep_lang_interpreter
	in lisp.c as well as in structures.c. Instead add declarations
	for all values declared in structures.c

2001-06-08  John Harper  <jsh@pixelslut.com>

	* lispmach.h: disable mc68000 register assignments - I've had
	one report of them causing the vm to crash while building the
	compiler

	* unix_processes.c (run_process): open and initialize the slave
	side of the pty connection _before_ forking (instead of in the
	child process). This avoids a race condition where the master
	side may try to write into its side of the pty before the slave
	side has been initialized correctly. Thanks to Paolo Bonzini
	for pointing out this problem (and the solution)

2001-06-04  John Harper  <jsh@pixelslut.com>

	* continuations.c (Fmake_suspended_thread): new function

	* continuations.c (make_thread): when creating the default
	thread, save _it's_ environment, don't resave the environment
	of the other created thread!

2001-04-22  John Harper  <jsh@eazel.com>

	* unix_main.c (rep_event_loop): only wait for input events if
	no unhandled exception. Now if rep_redisplay_fun calls lisp
	code, errors will be handled more promptly

2001-04-20  John Harper  <jsh@eazel.com>

	* structures.c (Fexport_bindings): flush the symbol from the
	cache even if we just set the is_exported bit

2001-04-16  John Harper  <jsh@eazel.com>

	* unix_dl.c: include <sys/dl.h> if HAVE_SYS_DL_H is defined and
	HAVE_DL_H isn't (for UnixWare)

	* misc.c: include <strings.h> (needed for strncasecmp () on
	UnixWare)

2001-04-09  John Harper  <jsh@eazel.com>

	* version 0.13.6 (from branch-0-13)

2001-04-05  John Harper  <jsh@eazel.com>

	* numbers.c (INSTALL_LOCALE): fixed a really stupid bug in this
	macro. It never actually installed the new locale!

2001-03-26  John Harper  <jsh@eazel.com>

	* Makefile.in: added a `check' target

2001-03-22  John Harper  <jsh@eazel.com>

	* version 0.13.5

	* numbers.c (rep_parse_number, rep_print_number_to_string): use
	a macro to save and install the locale. The old way was broken
	since I didn't realize that setlocale returns the current
	locale, not the previous one

2001-03-21  John Harper  <jsh@eazel.com>

	* unix_processes.c (run_process, rep_system): if the child
	process has to abort for some reason (e.g. exec fails), use
	_exit () instead of exit (). This avoids calling any atexit
	handlers (which were inherited from the parent process, and
	may, for example, close the X connection if GTK+ is loaded)

	This fixes the tar-file-handler-broken-on-solaris problem

2001-03-12  John Harper  <jsh@eazel.com>

	* numbers.c (rep_parse_number): if strto[l]l gives a range
	error, it's not possible to fall back to the float parsing code
	(since the radix may not be decimal). Instead, use a special
	helper function to parse an integer with an arbitrary base to a
	double, then if this succeeds decide whether to use an inexact
	or exact representation to store the number

	[ This fixes a bug reported on HP-UX, when using --without-gmp
	and there is no known strtoll function ]

2001-02-20  John Harper  <jsh@eazel.com>

	* rep_subrs.h (rep_message_fun): declared using extern (patch
	from albert chin <china@thewrittenword.com>)

2001-02-19  John Harper  <jsh@eazel.com>

	* lispmach.h: fixed comment

	* repdoc.c: include <stdlib.h>

2001-02-10  John Harper  <jsh@eazel.com>

	* sockets.c (make_inet_socket): remember to convert the port
	number to network byte order before storing it in sin_port
	(fill_in_address): convert the port number from network to host
	byte order

2001-01-28  John Harper  <jsh@eazel.com>

	* continuations.c (Fthread_join): as part of the THREAD
	declaration, check that it's a member of the current dynamic
	root

2001-01-21  John Harper  <jsh@eazel.com>

	* symbols.c (Fdefvar): the DEFAULT-VALUE parameter is now
	optional, it defaults to false

2001-01-08  John Harper  <jsh@eazel.com>

	* lisp.c: changed the Lisp reader to treat #\return characters
	as whitespace. (Fixes sawfish bug 5231)

2001-01-04  John Harper  <jsh@eazel.com>

	* version 0.13.4

2000-12-20  John Harper  <jsh@eazel.com>

	* librep.sym: added rep_file_type and rep_guardian_type (doh!)

2000-12-04  John Harper  <jsh@eazel.com>

	* version 0.13.3

	* symbols.c (Funintern): should use OB_NIL to mark end of
	symbol buckets, not rep_NULL

2000-11-28  John Harper  <jsh@eazel.com>

	* timers.c (Lisp_Timer): made bitfields unsigned

2000-11-27  John Harper  <jsh@eazel.com>

	* lisp.c: fixes for previous [premature-]end-of-stream changes

2000-11-24  John Harper  <jsh@eazel.com>

	* lisp.c (Qpremature_end_of_stream): new error type. This is
	used to mark eof being received while in the middle of parsing
	something. Qend_of_stream is now only raised when an eof is
	read before anything but whitespace has been read.

	This fixes the bug that Fload_file () would swallow
	end-of-stream errors (assuming that they just represent reading
	upto the end of the file), hiding real errors where eof occurs
	in the middle of a construct being parsed

2000-11-15  John Harper  <jsh@eazel.com>

	* repint_subrs.h, rep_subrs.h: moved the low-level unix file
	operations to repint_subrs.h

	* Makefile.in, librep.sym: when building librep.la, use the
	librep.sym file and the -export-symbols libtool option to
	define which symbols should be retained in the library

2000-11-14  John Harper  <jsh@eazel.com>

	* rep_regexp.h, regexp.c: be sure to use unsigned char's when
	converting values to int (for <ctype.h> functions, etc. Adapted
	from a patch to Jade by Andrew Rodionoff <arnost@mail.ru>)

2000-11-12  John Harper  <jsh@eazel.com>

	* readline.c (Freadline): accept optional second arg the
	function to call to generate completions of a given word. When
	supplied this overrides the `rl-completion-generator' global.
	Also, when no libreadline is present, don't use printf to print
	a user-supplied string, use fputs (and send it to stderr, not
	stdout)

2000-11-11  John Harper  <jsh@eazel.com>

	* lisp.c (rep_readl, fast_getc): instead of checking whether
	the stream is a local file each time fast_getc () is called,
	check in rep_readl () then save the result. Added a local
	function readl () -- the body of rep_readl ()

2000-11-10  John Harper  <jsh@eazel.com>

	* rep_regexp.h, regexp.c (rep_regexp_max_depth): new variable,
	upper bound on the number of times that regmatch () may be
	called recursively. Prevents the stack from exploding on
	pathological matches

2000-11-03  John Harper  <jsh@eazel.com>

	* numbers.c: if LONG_LONG_{MIN,MAX} aren't defined, define as
	LONG_{MIN,MAX} (evil hack, but should allow compilation to
	succeed)

2000-10-27  John Harper  <jsh@eazel.com>

	* unix_files.c (rep_expand_file_name): added extra case to
	translate `/..' to `/'

2000-10-25  John Harper  <jsh@eazel.com>

	* numbers.c, main.c: instead of doing setlocale (LC_NUMERIC,
	"C") at init-time, do it each time that a floating point number
	is read or written (need to remove the code from gtk/gnome
	bindings also)

2000-10-23  John Harper  <jsh@eazel.com>

	* version 0.13.2

2000-10-06  John Harper  <john@dcs.warwick.ac.uk>

	* Makefile.in (check-dl): a target to check that each plugin
	.la file contains a non-null `dlname=' entry. (Which would
	prevent rep being able to load the library)

2000-09-28  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.13.1

	* fake-libexec: patch from John H. Palmieri
	<palmieri@math.washington.edu> to link to libfoo.so as well as
	foo.la (for Tru64?)

2000-09-27  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (strncasecmp): define if the system doesn't have it

2000-09-24  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (rep_string_modified): new function, removes the
	modified string from the regexp cache if it's stored there

	* lispcmds.c, misc.c (Faset, Ftranslate_string): call
	rep_string_modified ()

2000-09-23  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_read_symbol): accept an OBARRAY parameter
	(rep_readl): read keywords into their own obarray

	* symbols.c (Fmake_keyword, rep_keyword_obarray): use a
	dedicated obarray for keyword symbols

	* lisp.c: use uninterned symbols for #!optional, #!rest and
	#!key

	* symbols.c (rep_scm_f, rep_scm_t): now uninterned symbols

2000-09-22  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c (rep_open_dl_library): check if snprintf () exists
	before using it (patch from Philippe.Defert@cern.ch)

2000-09-20  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.13

2000-09-19  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c (Fintern_structure): load into the
	*user-structure* instead of the *root-structure*

2000-09-18  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_init_from_dump): call setlocal (LC_NUMERIC, "C")
	so that floating point I/O always uses `.' as fraction
	separator (e.g. fr locale uses `,')

2000-09-14  John Harper  <john@dcs.warwick.ac.uk>

	* sockets.c (Fsocketp): new function
	(socket_putc, socket_puts): signal an error for inactive
	sockets, return 0 if nothing can be written, not -1

	* unix_processes.c, sockets.c (read_from_one_fd,
	client_socket_output): only ever check errno if actual < 0

	* sockets.c (make_socket): was testing if result of socket ()
	== 0 not -1 to check for errors
	(make_local_socket): call Flocal_file_name () on the address

	* sockets.c: if [AP]F_LOCAL isn't defined, but [AP]F_UNIX is,
	use that instead

2000-09-11  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (F_define): optional third-arg DOC-STRING, use
	rep_documentation_property to find the property to store it
	under

	* structures.c (rep_documentation_property): new function,
	returns the property used to store documentation in a symbol's
	plist for a binding in a patrticular module

2000-09-10  John Harper  <john@dcs.warwick.ac.uk>

	* fake-libexec: delete .libexec before [re]creating it

2000-09-09  John Harper  <john@dcs.warwick.ac.uk>

	* sockets.c: new module rep.io.sockets; provides interface to
	SOCK_STREAM sockets, unix and internet domains

	* unix_main.c (rep_add_event_loop_callback): new function
	(rep_proc_periodically): moved this function from
	unix_processes.c, it now runs a sequence of callbacks added by
	the above function

	* unix_processes.c (rep_proc_periodically): now a local
	function, added as an event loop callback (can this be made
	into a plugin now?)

2000-09-08  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c: moved some functions out of rep.lang.symbols into
	rep.lang.interpreter or rep.structures

	* main.c (rep_load_environment): added rep.regexp to list of
	structures that have lisp initial code

2000-09-05  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c (rep_structures_init): moved `provide',
	`require' and `featurep' from rep.structures to
	rep.module-system

	* Makefile.in: .libexec depends on $(DL_OBJS)

	* lispmach.h: when OPTIMIZE_FOR_SPACE is defined don't bother
	inlining SAFE_NEXT, the assertions add too much overhead 

2000-09-04  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c (rep_open_dl_library): when no `dlname=' line was
	found, include the name of the file when signalling an error

	* structures.c (Fintern_structure): don't name the module after
	the thing we're trying to load (this means that module files
	must contain `define-structure' not `structure forms

2000-09-03  John Harper  <john@dcs.warwick.ac.uk>

	* values.c, unix_processes.c, unix_main.c, timers.c, tables.c,
	symbols.c, structures.c, streams.c, repsdbm.c, repint_subrs.h,
	repgdbm.c, rep_subrs.h, numbers.c, misc.c, main.c, macros.c,
	lispmach.c, lispcmds.c, lisp.c, fluids.c, find.c, files.c,
	datums.c, continuations.c: changed magic doc string tags from
	`::doc:SYMBOL::' to `::doc:MODULE#SYMBOL::'

2000-09-02  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_assign_args): new function, for binding C
	variables to a list of arguments

	* main.c (rep_handle_input_exception): fixed bug of returning
	with a null result after catching Qquit

	* unix_main.c (rep_accept_input_for_callbacks): new function,
	obsoletes rep_accept_input which just accepted a single
	callback
	(rep_accept_input_for_fds): new function

	* unix_processes.c (rep_register_process_input_handler): new
	function, adds a handler to those dispatched by
	accept-process-input
	(Faccept_process_input): able to accept input for more than
	one source (will be used by the mythical `socket' plugin)
	(Faccept_process_input_1): new function, just listens for
	input from a single subprocess

2000-09-01  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (rep_expand_file_name): fix bug of expanding
	`../..' to `'. Also, don't allow null strings to be returned,
	output `.' instead

2000-08-31  John Harper  <john@dcs.warwick.ac.uk>

	* rep.h, rep_config.h.in, Makefile.in, rep-config.sh: don't
	have machine-local defs in rep.h (under $prefix/include). Let
	configure build rep_config.h, install it under libexec, then
	include it from rep.h

2000-08-30  John Harper  <john@dcs.warwick.ac.uk>

	* rep_subrs.h: s/new/new_/ and s/template/template_/ in
	argument names to allow inclusion by C++ code

2000-08-28  John Harper  <john@dcs.warwick.ac.uk>

	* tables.c: added doc strings

	* symbols.c (Fmake_keyword): signal an error if the argument is
	itself a keyword

2000-08-27  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.h: implemented OP_FOO_ARG_ changes; optimized gc
	protection handling; fixed bug of exiting the vm and possibly
	gc'ing with undefined protection

	* bytecodes.h: renamed OP_FOO_ARG_WITH_DEFAULT as OP_FOO_ARG_.
	These now leave one or two values on the stack, first a bool
	signifying whether the parameter was defined or not, and, if it
	was, its value

	* lisp.c (bind_lambda_list_1): now evaluates default values of
	#!optional and #!key arguments (in the environment of the
	closure being called, _without_ any of the bindings currently
	being instantiated)

	* tables.c (Ftable_bound_p): new function

2000-08-25  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (rep_print_number_to_string): minor changes to
	non-gmp bignum case

2000-08-24  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_top_level_recursive_edit): new function, called
	by apps as their top-level event-loop. Calls recursive-edit but
	with extra protection for unhandled exceptions that shouldn't
	terminate the program

	* symbols.c (Fdefvar): only eval the value form if setting the
	value of the special variable

2000-08-18  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c (thread_suspend): POLL-ARG is now `void *'
	not `repv'

2000-08-17  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c: moved get_stack_top () into save_stack ();
	should remove possibility from reading above current top of
	stack

	* rep_regexp.h, regexp.c, continuations.c, find.c: renamed
	NSUBEXP as rep_NSUBEXP to avoid namespace pollution

	* lispmach.h: factored out the core of the vm from lispmach.c;
	it's parameterized by a number of preprocessor macros

	* lispmach.c: include lispmach.h

	* safemach.c: module `rep.vm.safe-interpreter'. An error
	checking virtual machine as a plugin

	* symbols.c (rep_bind_special): new function

	* lisp.c (rep_bind_lambda_list_1): support default values for
	#!optional and #!key parameters. Syntax is `(<var> <default>)'.
	But note that unlike CL, <default> is _not_ evaluated. This may
	change in the future, so only use self-evaluating objects for
	now..

	* lispmach.c, bytecodes.h (OP_OPTIONAL_ARG_WITH_DEFAULT,
	OP_KEYWORD_ARG_WITH_DEFAULT): new instructions

2000-08-16  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_SF_KEYWORD, rep_SF_LITERAL): new flags
	(rep_SF_KEYWORDP, rep_SYMBOL_LITERAL_P): new macros

	* lisp.c (rep_readl): read #!SYMBOL as a symbol, and #:SYMBOL
	as a keyword symbol (self evaluating)
	(rep_bind_lambda_list_1): deprecated &optional and &rest, they
	intrude too much on the symbol syntax. Replaced by #!optional
	and #!rest (syntax from MIT Scheme). Also support #!key
	defining keyword parameters. E.g. `((lambda (#!key a b) (list a
	b)) #:b 2 #:a 1) -> (1 2)'

	* symbols.c (Fmake_keyword, Fkeywordp): new functions
	(lisp_print): if rep_SF_LITERAL is set, print without any
	quoting; if a keyword, don't quote the initial `#'

	* lispmach.c, bytecodes.h (OP_KEYWORD_ARG): new instruction,
	extracts argument for a given keyword symbol

2000-08-15  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c: put cfa in a register variable, may help sparc

	* lispmach.c: minor tweaks, mainly for the sparc

2000-08-13  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, bytecodes.h (OP_NOT_ZERO_P): new instruction

	* lispcmds.c (Fload_file): fixed to close the file if aborting
	due to an error while evaluating

	* lispmach.c (Fvalidate_byte_code): signal a more meaningful
	error if validation fails (including the current value of
	`load-filename')

2000-08-12  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c (Fcontinuation_callable_p): fixed the
	extraction of the continuation object from the closure

2000-08-11  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (read_comment): new function. Also `#| ... #|' and
	`<SOF>#! ... !#' comments now nest
	(read_list, rep_readl): use read_comment ()

	* repdoc.c (main): pass GDBM_NOLOCK to gdbm_open ()

	* rep_lisp.h (DEFUN): cast the Ffoo value to (repv (*)()) when
	assigning to the rep_xsubr struct (needed for C++, from Matt
	Tucker <tuck@whistlingfish.net>)

	* lispmach.c: changed repv_memset to repv_bzero and made it a
	macro. Experimented with inline asm `cld; rep; stosl' on i386,
	but no visible improvement. Move gc-protection initialization
	before the `again:' label, then update it by hand when tail
	calling

2000-08-10  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c: implemented the vm architecture changes; these
	include:

	  - `slot-ref', `slot-set' instructions. Each vm instance gets
	    how ever many slots it requires, basically registers. Used
	    to avoid heap allocating variables that don't get captured

	  - Removed `refq' and `setq' insns. Use `%set' and `ref'
	    instead

	  - subrs don't include their parameter spec. Each vm gets a
	    vector of arguments; the `required-arg', `optional-arg' and
	    `rest-arg' instructions access these (only guaranteed until
	    the first gc)

	  - when TRUST_NO_ONE is defined, heavy-duty assertions are
	    included to check for compiler bugs

	  - don't use GCC variable-length arrays to allocate stacks;
	    use alloca. When tail-calling try to swap argv and stack
	    arrays

	  - remove `list' instruction; compiled to sequence of `cons'

	* symbols.c (Fdefault_boundp): fixed bug of not converting C
	boolean to lisp

	* streams.c (rep_stream_getc): if an unbound file is given as
	the stream, return EOF, not an error

	* rep_lisp.h: removed rep_COMPILED_LAMBDA field

	* lisp.c (rep_readl): when reading compiled subrs, check that
	elements have correct type
	(funcall): assert that either result or rep_throw_value isn't
	rep_NULL

	* bytecodes.h: various changes to the vm architecture. Bumped
	major version

2000-08-03  John Harper  <john@dcs.warwick.ac.uk>

	* rep-xgettext.jl: use rep.i18n.gettext module, removed
	--only-commands option

	* numbers.c: use strtoq () if strtoll () isn't available

2000-08-02  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c (lookup_recursively, Fopen_structures): allow
	structures to be in `imports' list, not just names of
	structures. This allows anonymous structures to be imported

2000-08-01  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c (primitive_call_cc): added an arg, the
	continuation to overwrite with the current state
	(thread_invoke): pass the current continuation in to
	primitive_call_cc for updating, instead of allocating a new one

	[ this drastically reduces thread-switch time when the current
	stack copy is suitable to be overwritten. Current thread switch
	latency seems to be ~7.5us on my 300MHz PII ]

	* lispmach.c: fixed top-of-stack caching bugs

	* continuations.c (exit_barrier_cell): cdr of this is set to
	raw rep_throw_value, don't use Qnil if rep_throw_value is null
	(and this was only done in one of the two uses anyway)

	(make_thread): don't call thread_invoke after thread_delete
	(since the thread is current, thread_delete will already have
	called invoke)

	* lisp.c (read_symbol): deprecated `0xNN' and `0NN' read
	syntaxes for hexadecimal and octal numbers (use `#xNN' and
	`#oNN')

	* main.c (rep_deprecated): new internal function for reporting
	deprecated features. Only reports each feature once

	* gettext.c: if using gettext in ../intl/, define gnu_foo as
	foo__, removes the need to patch the intl files

2000-07-31  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (rep_parse_number): fixed bounds checking of
	characters for non-base10 conversion

	* lispmach.c: added code to cache the top of the stack in a
	[register] variable. Only enabled on non-x86 platforms (i.e.
	those with a reasonable number of registers). Gets about 8%
	speedup on sparc

	* lisp.c: changed error message for void-value

	* symbols.c, record-profile.c, files.c: use Fstructure_define
	instead of Fstructure_set where appropriate

	* symbols.c (Fset): now uses Fstructure_define (for C code)
	(Freal_set): the actual Lisp `set' function (doesn't define)
	(F_define): new special form

	* structures.c (Fstructure_define): new function
	(Fstructure_set): only create bindings if rep_STF_SET_BINDS
	flag is set for the structure (unset by default)
	(Fbinding_immutable_p): check imported bindings as well
	(Fstructure_exports_all, rep_structure_exports_all): added

	* repint.h (rep_STF_SET_BINDS): new flag

	* lispmach.c, bytecodes.h (OP__DEFINE): new instruction

	* symbols.c (Fdefvar): ignore non-stringp documentation

2000-07-30  John Harper  <john@dcs.warwick.ac.uk>

	* repint.h: added `#define rep_INTERNAL 1'

	* rep_lisp.h, datums.c: allocate the '() datum statically, then
	#define Qnil to this location internally to the library

	* values.c, repint.h, main.c: hid dumping-specific code behind
	`#ifdef ENABLE_BROKEN_DUMPING'

	* values.c (rep_mark_value): removed some redundant tests

	* datums.c (Qnil): now defined here, no longer a symbol, but a
	datum denoting end-of-list and boolean-false
	* symbols.c: don't intern `nil'

	* lispcmds.c, lisp.c: minor changes for Qnil no longer being a
	symbol

2000-07-29  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, bytecodes.h (OP_APPLY): new instruction, applies
	a function to a list of arguments. Implementation handles tail
	recursive calls properly (also bumped bytecode minor version)

	* lisp.c (eval): when recognizing tail recursive function
	calls, also handle calls made using the `apply' subr

	* symbols.c, datums.c: #f and #t are now just normal symbols.
	However their `#' doesn't get quoted when printed

	* numbers.c (Fdivide): if only one argument, compute (/ 1 X)

2000-07-28  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (rep_lispcmds_init): check REP_LOAD_PATH and
	REP_DL_LOAD_PATH for colon-separated directories to prepend to
	load-path and dl-load-path respectively. Don't add
	LD_LIBRARY_PATH anymore

	* lispmach.c: reimplemented bytecode profiling

	* lispcmds.c (Fload_file, Fload_dl_file): abstracted from
	Fload, provide a more primitive interface to loading files (no
	path searching of file-suffixing)

	* lispcmds.c (Fload): don't declare trying_dl inside #ifdef
	HAVE_DYNAMIC_LOADING, it's used always

2000-07-27  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c, repint.h, lispmach.c, lisp.c: apply_bytecode
	field of structures is now null to denote the default
	interpreter, and anything else just gets called. Non-bytecode
	enabled closures get a function that just returns an error

	* rep.c: deleted usage function

	* main.c: make no effort to handle --help, let applications or
	scripts do it instead

	* lispcmds.c (Fload): when looking for an entry in the
	after-load-alist, if a structure was returned, search for the
	name of that structure

2000-07-25  John Harper  <john@dcs.warwick.ac.uk>

	* repint.h: make all bitfields unsigned (patch from Albert
	Chin-A-Young <china@thewrittenword.com>)

	* numbers.c: on Solaris use LLONG_{MIN,MAX} (patch from Albert
	Chin-A-Young <china@thewrittenword.com>). Always define
	LONG_LONG_{MIN,MAX} if it doesn't already exist, not only if
	not using gmp

2000-07-24  John Harper  <john@dcs.warwick.ac.uk>

	* macros.c (Fmacroexpand_1): do autoloading of macros here
	* lisp.c (funcall): remove kludge to call macros

	[ fixes the bug where macros could be called when they
	shouldn't have been able to be (because the above-mentioned
	kludge had a test inverted) ]

2000-07-23  John Harper  <john@dcs.warwick.ac.uk>

	* fake-libexec: script to fake the module hierarchy for
	uninstalled shared objects

	* values.c, unix_processes.c, unix_main.c, unix_dl.c, timers.c,
	tables.c, symbols.c, structures.c, streams.c, repsdbm.c,
	repint_subrs.h, repint.h, repgdbm.c, rep_subrs.h, rep.c,
	record-profile.c, readline.c, numbers.c, misc.c, main.c,
	macros.c, lispmach.c, lispcmds.c, lisp.c, gettext.c, fluids.c,
	find.c, files.c, datums.c, continuations.c: changed the module
	layout that's used when adding subroutines

	[ previous names are given aliases to preserve compatibility ]

	* files.c (file_handler_ref): new function, looks for symbol in
	rep.io.file-handlers module

	* unix_dl.c: don't handle `rep_dl_feature' or `rep_dl_subrs'
	anymore, just print a message to the effect that they're being
	ignored

	* structures.c (Fexport_bindings): new function

	* structures.c: changed to using a 4-way set-associative cache
	instead of direct-mapped. Avoids almost all conflict misses
	induced by the larger number of modules. Also halved the number
	of sets (so the overall size doubles)

	* repint.h, structures.c: divide by 8 instead of 16 when
	hashing symbol addresses

	* rep.c: load `rep/user' instead of `rep'

	* numbers.c: on AIX use LONGLONG_INT instead of LONG_LONG_INT
	(adapted from Dan McNichol <mcnichol@austin.ibm.com>)

	* lispcmds.c (Fcase): deleted, now a macro

2000-07-21  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (rep_structure_file): new function, do the
	structure-name -> file-name conversion (currently: `tr . /')

	* structures.c (Fintern_structure): convert the structure name
	to a file name before trying to load it

	* structures.c: renamed all the %foo functions as foo (except
	for %structure-ref, since it may return #<void>). Updated all
	callers

	* structures.c (rep_alias_structure): new function, create an
	extra name for the current structure
	(rep_push_structure_name): new version of rep_push_structure
	that accepts a lisp string or symbol

2000-07-20  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.12.4

	* Makefile.in: include $(LIBS) and $(GMP_LIBS) when linking
	librep.la

	* Makefile.in: libtool needs to be told what mode to use,
	because sometimes $(CC) is a wrapper script with a funny name
	(from David Kaelbling <drk@sgi.com>)

	* lisp.c (rep_call_lisp4): fix stupid typo (from David
	Kaelbling <drk@sgi.com>)

2000-07-19  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c (F_structure_set): if setting to a void value,
	remove the binding

2000-07-18  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c: only keep hit/miss info when DEBUG is defined.
	Also record type of misses: collision, conflict or other
	(F_structure_set): don't invalidate the binding we modify, it's
	the _binding_ itself that's cached, not its value
	(lookup_or_add): removed all cached bindings for the symbol
	being added

2000-07-17  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_load_autoload): removed stuff to autoload modules
	-- it was broken anyway

2000-07-16  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c: check for overflow when using rep_longlong as
	makeshift bignums. Convert to flonums when they overflow

2000-07-15  John Harper  <john@dcs.warwick.ac.uk>

	Work to allow alternative bytecode interpreters to be used:

	* lisp.c (rep_bytecode_interpreter): deleted

	* structures.c (F_make_structure): inherit `apply_bytecode'
	field from current structure (or use default bytecode
	interpreter if no current structure)
	(F_structure_install_vm): new function

	* lispmach.c (vm): when calling bytecode, check if calling the
	same virtual machine or a different one
	(Frun_byte_code): when called with a structure as first arg,
	install the vm into that structure

	* repint.h (rep_struct): moved `exclusion' and `export_all'
	flags into the car. Added `apply_bytecode' field -- the
	bytecode interpreter to use for functions with this structure
	in their closure
	(rep_USE_FUNARG, rep_USE_DEFAULT_ENV, rep_PUSH_CALL,
	rep_POP_CALL): don't need to handle bytecode interpreter now

	* rep_lisp.h (rep_FF_NO_BYTE_CODE): deleted

	* symbols.c (Fmake_closure): don't set NO_BYTE_CODE flag

2000-07-15  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (symbol_print): stop `+' and `-' symbols being
	escaped

	* Makefile.in: make rep-config depend on Makefile

	* lisp.c (rep_call_lispn): was checking for
	`rep_bytecode_interpreter == 0' too early

	* continuations.c: only include call/cc and threading if
	preprocessor macro `WITH_CONTINUATIONS' is defined

	* numbers.c: only include bignum/rational support if
	preprocessor macro `WITH_GMP' is defined. Else use `long long'
	for non-fixnum integers, and flonums for everything else.
	(Doesn't check for overflow from long long)

2000-07-14  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fraise_exception): this replaces Fthrow as most
	primitive

	* files.c (rep_get_fh_env): made static, only this file uses it

	* numbers.c, values.c: don't declare non-static inline
	functions, C99 makes `inline' imply `static'

	* record-profile.c: added alloca magic to start of file

2000-07-13  John Harper  <john@dcs.warwick.ac.uk>

	* record-profile.c (test_interrupt): add null statement after
	`skip:' label to make it ANSI-legal

	* lisp.c (rep_string_print): print to a fixed size local
	buffer, instead of outputting a character at a time (this
	avoids unneeded system calls when printing to processes)

	* symbols.c (symbol_print): print to a local buffer, then
	output in one shot. Also correctly quote symbol names that
	would otherwise be read as numbers

	* unix_main.c (rep_sys_os_init): check that `environ != 0'

2000-07-12  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.12.3

2000-07-11  John Harper  <john@dcs.warwick.ac.uk>

	* macros.c (Fmacroexpand_1): new function, does a single macro
	expansion (without caching the result). `macro-environment' may
	now be a structure instead of a function, in which case it
	defines the module in which to dereference symbols. Also if a
	function, it's a function to do a _single_ macro expansion

	* lispcmds.c (Fload): return nil if file is empty, not null

	* repgdbm.c (Fgdbm_open): check for defined (GDBM_NOLOCK)
	before using it

2000-07-06  John Harper  <john@dcs.warwick.ac.uk>

	* tuples.c (rep_sweep_tuples): performance tweaks

2000-07-10  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c, lispcmds.c, lisp.c, continuations.c: use
	static DEFSTRINGs instead of heap-allocating static C strings

	* numbers.c (rep_get_longlong_int): remember to mpz_clear ()
	the temporary bignum before exiting (prevents space leak)

	* rep.c: removed inner_main, make rep_call_with_barrier call
	rep_load_environment directly

	* Makefile.in: include LDFLAGS in the --libs data when creating
	rep-config

2000-07-09  John Harper  <john@dcs.warwick.ac.uk>

	* repgdbm.c (Fgdbm_open): added optional arg FLAGS, a list of
	symbols. Only current flag is `no-lock' which means to pass the
	GDBM_NOLOCK flag when opening the db

	* lispmach.c, bytecodes.h: expand OP_REFN into OP_REFN_[0-7],
	then implement each variant separately. This allows the first
	six to know exactly how many cdr's to take, at compile time,
	giving a 10% speedup (on the `prime' kernel)

	* unix_dl.c (load_requires): use F_intern_structure instead of
	Frequire (so that the secondary modules aren't opened in the
	caller's environment)
	(rep_open_dl_library): provide the feature (if not a
	structure), event when it was already loaded

2000-05-31  Karl M. Hegbloom  <karlheg@debian.org>

	* lispcmds.c (Frplaca, Frplacd): Make both return CONS, like
	Common Lisp.  Update docstrings.

2000-07-08  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fcall_with_exception_handler): new function, used
	to implement all exception handling syntax

	* lispcmds.c (Fcatch, Funwind_protect): deleted, now macros
	* lisp.c (Fcondition_case): deleted now a macro

2000-07-07  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_mem_error): made this just print a message abort
	(). Too many functions don't check the return value of
	allocators (such as Fcons). Perhaps have a mode where rep_alloc
	loops until it can allocate the memory..?

	* numbers.c (rep_foldl): new function, as rep_number_foldl, but
	doesn't check that arguments are numeric, used by Fmin and Fmax

	* values.c (rep_allocate_cons): fixed type error

2000-07-05  John Harper  <john@dcs.warwick.ac.uk>

	* repint.h: allocate cons cells in blocks of 8k instead of 4k
	(16 instead of 8 on 64-bit)

	* lispcmds.c (Fload): _only ever_ try without a suffix if the
	NO-SUFFIX option is t. This avoids picking up un-suffixed files
	by mistake (e.g. from the current directory)

2000-07-04  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_INTERN_SPECIAL): call Fmake_variable_special
	() on the symbol so that it gets any default value the user has
	given it [this is compatible with previous library versions]

	* symbols.c (search_special_environment): inline this when
	rep_SPECIAL_ENV == Qt

2000-07-03  John Harper  <john@dcs.warwick.ac.uk>

	* rep-config.sh: source `../libtool --config' then use the
	libtool method of extracting the flags to hardcode library dirs
	when linking (-R, etc..). With help from Mark Hewitt and Dan
	Winship

	* lisp.c (rep_call_lispn): new function, used by
	rep_call_lisp[0-4] to call bytecode functions without consing

2000-06-27  John Harper  <john@dcs.warwick.ac.uk>

	* record-profile.c: mechanism for a basic profiler

2000-06-26  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c (rep_thread): added fields `exit_val' (value
	returned from last form in thread), `poll' and `poll_arg'
	(callback for polling when trying to wake suspended threads)
	(thread_invoke, thread_yield): poll suspended threads
	(thread_invoke): set exit_val of exited threads if they exited
	normally
	(thread_suspend): two extra args, `poll' and `poll_arg'
	(Fthread_join): new function

2000-06-24  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, lispcmds.c, lisp.c: when signalling Qbad_arg or
	Qmissing_arg, first element of error data is function object if
	known, else nil

	* readline.c (completion_generator): call the function
	rl-completion-generator in a separate thread context

2000-06-23  John Harper  <john@dcs.warwick.ac.uk>

	* gettext.c (rep_dl_init): set binding of `_' in `rep' module
	to point to the `gettext' function

2000-06-22  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (read_symbol): don't treat `0/...' as symbols

	* numbers.c (rep_parse_number): [rational case] don't modify
	the input string, error out if divide-by-zero

	* version 0.12.2

	* lisp.c (read_symbol): if first character is a non-symbol
	character signal an error instead of just returning null

	* repint.h (inline_Fcons): only declare this `extern inline' if
	__OPTIMIZE__ is defined as well as __GNUC__ (GCC only inlines
	in optimizing compilations)

2000-06-21  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (dup, maybe_demote, promote_dup): inline calls to
	these functions wherever their arguments are fixnums
	(promote): declare this function inline
	(ZEROP): new macro, inlines fixnum comparsion for zero

	[ these changes give 10% speedup on `prime' benchmark ]

2000-06-19  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c (structure_exports_inherited_p): if export_all
	flag is set, then return t immediately
	(F_structure_exports_all): new function

2000-06-18  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.12.1

	* rep.c (usage): added \n\ line terminations, from Sam Falkner
	<Sam.Falkner@central.sun.com>

	* lispmach.c: when CHECK_STACK_USAGE is defined, embed the
	stack assertions into the SAFE_NEXT macro. This ensures that
	the stack is checked after _all_ instructions

	* structures.c, macros.c: include <string.h> (and <memory.h> if
	needed) (from George Lebl <jirka@5z.com>)

	* numbers.c: if SIZEOF_LONG == SIZEOF_LONG_LONG, then use long
	conversion functions to define long long conversions (from
	George Lebl <jirka@5z.com>)

2000-06-16  John Harper  <john@dcs.warwick.ac.uk>

	* repint.h (inline_Fcons): when using GCC define this function
	`external inline'. It mimics Fcons except it will only cause a
	procedure call if the cons heap needs to grow

	* values.c (rep_allocate_cons): new function, factored from
	Fcons, allocates a new cons block

	* lispmach.c (make_bytecode_frame, vm): use inline_Fcons where
	appropriate (for speedup of 4-5%)

2000-06-16  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.12

2000-06-14  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c (vm): put rep_void_value into call stack when we
	don't have the actual arguments as a list, not Qnil

2000-06-12  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_handle_input_exception): don't catch uncaught
	throws at top-level, it prevents scripts throwing out of
	top-level recursive edits (maybe make this optional..?)

	* tables.c: don't store hash values in signed integers

2000-06-10  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c (vm): miscellaneous minor tweaks and cleanups

2000-06-09  John Harper  <john@dcs.warwick.ac.uk>

	* repint.h: don't include <build.h>
	* lispcmds.c: include "build.h"

2000-06-08  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fnconc): allow last arg to be non-proper-list

2000-06-07  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (Fclosure_name): new function

	* numbers.c (Fquotient): raise an arith-error if tryign to
	divide by zero

	* datums.c: added a comparison function, recursively compares
	datum values if keys are the same

2000-06-05  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c: allocate a cell16 type instead of cell8

	* structures.c (F_external_structure_ref): allow foo#bar refs
	to succeed if `foo' has been opened but not accessed

	* datums.c, lisp.c: moved rep_scm_f and rep_scm_t to datums.c;
	initialize always, not just when first read

2000-06-01  John Harper  <john@dcs.warwick.ac.uk>

	* readline.c (rep_dl_init): rl-completion-generator is no
	longer declared special

	* lisp.c (eval): only handle ((lambda ..) ..) forms inline if
	Qlambda is still bound to #<subr lambda>

	* lispcmds.c (Fload): Qafter_load_alist now contains thunks,
	not forms

2000-05-31  John Harper  <john@dcs.warwick.ac.uk>

	* bytecodes.h, lispmach.c (OP_BINDOBJ): flushed
	* lispmach.c: no longer worry about object bindings, so removed
	rep_[un]bind_object

	* continuations.c (Fcall_with_object): do object binding
	locally (rep_[un]bind_object are gone)

	* lispcmds.c (Fprog1, Fwith_object): removed, now in lisp

2000-05-30  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fwhile): removed, now in lisp

2000-05-29  John Harper  <john@dcs.warwick.ac.uk>

	Work to make the interpreter tail recursive:

	* lisp.c: special form subrs are now called with two repv
	arguments, the list of parameters and a boolean marking whether
	or not they occur in a function's tail position

	(rep_eval, funcall): new functions, as Feval or rep_funcall,
	but with an extra arg passing in tail position

	(rep_apply): new function

	(eval): where possible to tail call (tail position is t,
	called object is a closure) package the closure and evaluated
	arguments, then throw them back to the innermost
	non-tail-position lambda application

	(eval_lambda): when catching a tail call throw, and this is the
	innermost non-tail-position, unpackage the call and evaluate it

	* symbols.c, lispcmds.c: use rep_eval instead of Feval, support
	tail position arguments

	* lisp.c (rep_readl): fix bug when reading `#!' when not at the
	start of a file

	* lisp.c (rep_readl): recognize #F and #T

2000-05-28  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c, numbers.c (read_symbol, rep_readl,
	Fstring_to_number): added support for the scheme numeric
	prefixes, i.e. #b, #o, #d, #x, and #e, #i

2000-05-27  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_tuple, rep_TUPLE): new structure
	(rep_CELL8P): new macro

	* tuples.c: abstracted the old symbol cell memory management to
	work for any cells containing two values (plus the car)

	* values.c (Fgarbage_collect): call rep_sweep_tuples

	* symbols.c, datums.c: use tuples for memory management of
	symbols and datums

	* datums.c (Fmake_datum): removed the PRINTER arg
	(Fdefine_datum_printer): new function, associates a datum ID
	with a PRINTER function

2000-05-26  John Harper  <john@dcs.warwick.ac.uk>

	* repint.h (POS, ABS): new macros

	* numbers.c (rep_parse_number): better error checking
	(rep_integer_foldl): new function, checks for INTEGERP args
	(rep_integer_gcd): new function
	(Fgcd): generalised to any number of arguments

2000-05-25  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_bind_lambda_list_1): now takes a BINDER arg, a
	function to call to bind each variable

	* lispmach.c: support old-style parameter specs as well as
	encoded ones

	* symbols.c (rep_call_with_closure): new function

	* repint.h, rep_lisp.h: moved closure macros and all backtrace
	stuff from rep_lisp.h to repint.h

	* lisp.c (rep_funcall): check if rep_bytecode_interpreter == 0
	_after_ installing the function's closure

	* symbols.c: lexical environment for interpreted code is now a
	list of (LEXTAG . (SYMBOL . VALUE)) so that search_environment
	can ignore bindings from compiled code. LEXTAG is a value that
	can't appear normally
	(rep_add_binding_to_env): new function

	* structures.c (F_eval_in_structure): now called Feval (the
	changes to the environment structure mean that it's usually
	meaningless to eval within a non-null lexical environment)

	* repint.h: moved some more structure defs here, so that
	lispmach.c can open-code the `refg' instruction

	* misc.c (Fcurrent_utime): new function, returns the current
	unix time in microseconds
	* unix_main.c (rep_utime): new function

	* lispmach.c (Fjade_byte_code): now called Frun_byte_code

	* lispmach.c: many changes, byte code subrs now store parameter
	spec as an integer (number of <required, optional, rest>
	parameters), these must now be lexical bindings. This was added
	since function-call heavy programs were spending too much time
	in rep_bind_lambda_list_1 (e.g. 17% for qscheme's fibonacci
	benchmark). The lexical environment of compiled code is no
	longer an alist (SYMBOL . VALUE); it's now just the list of
	values

	* lisp.c (copy_to_vector): new function, factored out of
	rep_bind_lambda_list
	(rep_bind_lambda_list_1): removed `&aux' code
	(rep_funcall): obey the new bytecode interpreter calling
	conventions (passing arg values in an array)
	(Feval): this is no longer the lisp-visible `eval' function

	* lisp.c (init_scm_booleans): remember to statically mark these
	objects

	* bytecodes.h (OP_EVAL): deleted
	(OP_BIND): no longer has an argument, has the OP_EVAL opcode

2000-05-24  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fload): gc-protect the file name while opening
	the file

2000-05-23  John Harper  <john@dcs.warwick.ac.uk>

	* bytecodes.h, lispmach.c (OP_TEST_SCM, OP_TEST_SCM_F): new
	instructions

	* rep.c: updated usage text for new options

2000-05-22  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (Fstring_to_number): return Qnil if the string
	couldn't be parsed (not rep_NULL!)

	* lispcmds.c (Fappend): last arg may be a non-list now, to form
	an improper output list

2000-05-21  John Harper  <john@dcs.warwick.ac.uk>

	* values.c (cons_sweep): don't update global variables each
	iteration, update temps then copy to globals before exiting

2000-05-18  John Harper  <john@dcs.warwick.ac.uk>

	* rep.h.in (rep_PTR_SIZED_INT_SIZEOF): new define, set by
	configure (this used to be a sizeof () statement, but it's
	needed at cpp-time now)

	* rep_lisp.h (rep_CELL_ALIGNMENT): this is now set to the size
	of the `repv' type (not hardcoded to 4). Apparently this is
	needed for ia64

	* main.c (check_configuration): function to check some of the
	values supplied to configure, will suggest suitable values if
	any are set wrongly

	* main.c (rep_init_from_dump): switched order of calls to
	rep_values_init () and rep_lisp_init ()

2000-05-17  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (Fdebug_frame_environment): was matching frame
	pointers one link too late
	(Fdebug_inner_frame, Fdebug_outer_frame): new functions for
	traversing the frame pointers

2000-05-16  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c (rep_open_dl_library): don't call Fprovide on
	features that are provided by structures (since the structure
	hasn't been imported yet)

	* regexp.c (regnarrate, regprop): made non-static

	* lisp.c (rep_handle_error): removed all code to print errors,
	rely totally on Qerror_handler_function

2000-05-15  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (string->number, number->string): implemented these
	functions

	* lisp.c (Fdebug_frame_environment): only need to return two
	values now, the saved environment and the saved structure, do
	this in a cons cell not a list

	* lisp.c (read_symbol): fix bug of allowing first non-zero
	digit of octal numbers to be 8 or 9

	* unix_dl.c (rep_open_dl_library): ignore null dlname entries

2000-05-13  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c (F_eval_in_structure): optional third arg, the
	environment to install

	* numbers.c (rep_compare_numbers): new function, the original
	comparison method that ignores exactness
	(number_cmp): now treats inexact and exact versions of the same
	number as being different (i.e. for eql and equal)
	(rep_number_max, rep_number_min): new functions, propagate
	any inexactness in their arguments

	* lispmach.c: handle numeric comparisons correctly, call out to
	handle max and min

	* lispcmds.c (Fmemql): new function, member using eql
	for comparisons
	(=, >, <, >=, <=): compare numbers specially (folding exactness) 
	(min, max): moved to numbers.c
	(Fcase): use Feql for comparisons

	* bytecodes.h, lispmac.h.c (OP_MEMQL, OP_NUM_EQ): new insns

2000-04-29  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c: borrowed and adapted some code from OCaml virtual
	machine to explicitly assign vm registers to physical registers

2000-04-24  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c: if GNU CC is detected, then build an indirectly
	threaded interpreter using its computed goto, and label
	address, features. Initially from Ceri Storey, completed by me

	* main.c, lisp.c, lispmach.c: call Fgarbage_collect with nil
	arg not t

2000-04-23  John Harper  <john@dcs.warwick.ac.uk>

	* repint.h (rep_struct): new flag `export_all'. When set, _all_
	local bindings in the structure are exported automatically

	* structures.c: handle the `export_all' structure flag
	(rep_structure_exports_all): new function

	[ Note that this auto-export feature is intended for
	dynamically defined modules, e.g. the *root-structure* of
	extensible programs. ]

2000-04-22  John Harper  <john@dcs.warwick.ac.uk>

	* macros.c: set macro-environment to nil initially

	* symbols.c (Fclosure_structure): new function, for the
	compiler

	* numbers.c (Fintegerp): return t for inexact integers (i.e.
	floats with no fractional part)

2000-04-21  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (Qoperating_system, Qrep_version, Qrep_interface_id,
	Qrep_build_id, Qupcase_table, Qdowncase_table, Qflatten_table):
	now lexically bound

	* bytecodes.h, lispmach.c (OP_FLUID_REF, OP_FLUID_SET,
	OP_FLUID_BIND): new insns

	* fluids.c: new file, provides anonymous dynamic bindings
	* main.c: call rep_fluids_init ()

	* numbers.c (Frealp, Finexactp, Frationalp): deleted, in lisp

2000-04-20  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c: don't produce exact results from inexact inputs

2000-04-18  John Harper  <john@dcs.warwick.ac.uk>

	More work to reduce VM consing, increases performance
	noticeably:

	* lisp.c (rep_bind_lambda_list_1): the inner core of
	rep_bind_lambda_list in a separate function, takes an array of
	values to bind to variables

	* lispmach.c: when calling compiled functions use
	rep_bind_lambda_list_1 to avoid consing a list of arguments

	* lispmach.c: the binding stack is now a vector allocated on
	the C stack (like the value stack), this reduces the amount
	consing done by the VM. The maximum size of the binding stack
	is stored in the upper 16 bits of the STKREQ argument

	* lispcmds.c (Fload): never return an unitialized result value

	* rep_lisp.h (rep_COMPILED_STACK): don't unbox this

2000-04-17  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c, repint.h, lispmach.c: track number of variable
	bindings in frame using a single integer, not a pair (limits
	number of bindings in each frame to 2^16)

	* structures.c (F_name_structure): flush the ref cache

	* streams.c (Fstreamp): deleted
	(Fpeek_char, Finput_stream_p, Foutput_stream_p): added

	* lisp.c (F_load_autoload): lisp function for loading autoload
	stubs

2000-04-15  John Harper  <john@dcs.warwick.ac.uk>

	* structures.c (F_eval_in_structure): set rep_env to Qnil while
	evaluating

	* lisp.c (rep_env): removed the kludge that only if the last
	element is dotted to `t' will the global environment be
	searched
	* lispcmds.c (Fload): set rep_env to Qnil not Qt while loading
	* lispmach.c, bytecodes.h: removed OP_BINDENV and related code
	* rep_lisp.h (rep_USE_DEFAULT_ENV): set rep_env to Qnil

	* symbols.c (Fsave_environment, Fset_environment): deleted
	(search_environment): only ever returns cons cell or nil

	* symbols.c (Fsymbol_value, Fdefault_value): fixed bug of
	allowing special variables not in the environment to be read
	(i.e. the gaol was broken for specials)

	* unix_dl.c (rep_open_dl_library): use rep_STRUCTUREP instead
	of F_structurep

	* symbols.c (Fset_special_environment): now takes a second
	argument, the structure whose environment should be set

	* repint.h, structures.c: moved rep_structure type definition
	and some macros to <repint.h>

	* rep_lisp.h (rep_funarg): removed `special_env' field, now
	stored per structure (module)

2000-04-14  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, bytecodes.h: removed OP_DSET bytecode

	* lisp.c (rep_bind_lambda_list): bind parameters in last-first
	order so that they end up in the environment in first-first
	order (same as when bound by the compiler)

	* bytecodes.h: bumped major version to 10 to reflect the new
	order of lexical bindings made by function application
	(OP_UNQUOTEALL_0, OP_POP_ALL): new instructions
	* lispmach.c (OP_UNBINDALL_0, OP_POP_ALL): implemented

2000-04-12  John Harper  <john@dcs.warwick.ac.uk>

	* values.c (Fgarbage_collect): return stats if arg is t, not if
	it's nil

	* rep_lisp.h (rep_funarg): removed next and fh_env fields
	* files.c: store fh_env in current structure, associated with
	an uninterned symbol
	* symbols.c: allocate closures in blocks of N

	* lisp.c (Qdebug_entry, Qdebug_exit, Qdebug_error_entry): these
	are now special variables, so they can be accessed from within
	any structure

	* datums.c (Fdatum_set): new function

	* structures.c (F_set_interface): remove the clause that the
	passed-in interface may be modified, liable to introduce bugs

	* symbols.c (Fdefault_value, Fset_default, Fdefault_boundp):
	don't only look at special bindings, look for global lexical
	bindings as well

	* lisp.c (rep_load_autoload): when throwing error, don't refer
	to uninitialized variable

2000-04-11  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (Fdefvar): use default-boundp instead of boundp
	when checking if whether or not to set the value
	(Fset_default): if symbol isn't already special, call
	Fmake_variable_special () on the symbol
	(Fmake_variable_special): if symbol isn't already special, call
	rep_get_initial_special_value () to try to forward an existing
	value

2000-04-10  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (Fdefvar): fixes for working with predefined
	specials

	* lispcmds.c (Fload): ignore the NO-SUFFIX parameter while
	searching for dl libraries

	* unix_dl.c (rep_open_dl_library): when opening a structure,
	correctly set feature_sym to the name of the structure

2000-04-09  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_symbol): removed `prop_list' field
	* symbols.c (plist_structure): namespace for property lists

	* unix_dl.c (rep_open_dl_library): don't return 0 if the dl has
	already been loaded

	* structures.c (F_intern_structure): always load from within
	the `*root-structure*'
	(Frequire): don't call %intern-structure, for the above reason,
	do everything locally
	(F_make_closure_in_structure): new function

2000-04-07  John Harper  <john@dcs.warwick.ac.uk>

	Many changes to give rep a module system:

	* structures.c: new file, provides the first-class environment
	objects needed to implement the module system, and the core of
	the module system itself (mostly inspired by Scheme48)

	* symbols.c: dereference global bindings through structures
	(print_symbol): escape `#' characters
	(Fdefvar): if first defvar for the symbol, call
	rep_get_initial_special_value to try to forward any value set
	by the user
	(Fmark_symbol_defined): deleted
	(Fset_const_variable, Fconst_variable_p): deleted, immutable
	bindings are provided by structures.c
	(Qnil, Qt): no longer made special

	* rep_lisp.h (rep_funarg, struct rep_call_stack): added fields
	to store the current structure
	(rep_ADD_INTERNAL_SUBR): new macro, doesn't export the subr
	(rep_symbol): removed the `value' field

	* values.c (rep_gc_threshold): doubled to 200k
	(rep_mark_value): updated for object changes

	* unix_dl.c (rep_open_dl_library): return a repv result, the
	structure provided by the dl if applicable

	* main.c (rep_init_from_dump): call rep_structures_init () and
	rep_datums_init ()
	(rep_load_environment): handle the caller having a different
	current structure than the default structure

	* macros.c (Fmacroexpand): ENVIRONMENT is now a function to
	call to do the actual expansion if non-nil; this also
	simplifies the memoization

	* lispmach.c (Fjade_byte_code): access globals in current
	structure, deprecated OP_DSET, added OP_STRUCT_REF and
	OP_SCM_TEST

	* bytecodes.h (OP_STRUCT_REF, OP_SCM_TEST): new bytecodes

	* lispcmds.c (Fload): removed the IN-CURRENT-ENV option;
	filename suffixes are stored in a cons cell in %load-suffixes
	in the current structure; return value of last loaded form
	evaluated
	(Ffeaturep, Fprovide, Frequire): moved to structures.c

	* lisp.c (rep_readl): read foo#bar as (structure-ref foo bar)
	(rep_readl, rep_scm_f, rep_scm_t): support scheme booleans
	(rep_load_autoload): if the filename is a symbol, require that
	module
	(eval): increment and check recursion depth counter

	* timers.c, tables.c, repsdbm.c, repgdbm.c, readline.c,
	gettext.c: modularized -- these each create their own structure

	* files.c (rep_call_file_handler): for now, dereference file
	handler names in the default structure (should probably use a
	separate namespace..)

	* datums.c: unmodularized, now part of the core

	* continuations.c: track addition of structure field to call
	stack

2000-04-13  John Harper  <john@dcs.warwick.ac.uk>

        * version 0.11.3

2000-04-12  John Harper  <john@dcs.warwick.ac.uk>

        * lisp.c (rep_load_autoload): when throwing error, don't refer
        to uninitialized variable (merged from HEAD)

2000-04-09  John Harper  <john@dcs.warwick.ac.uk>

        * version 0.11.2

2000-04-06  John Harper  <john@dcs.warwick.ac.uk>

	* values.c, lispmach.c, lisp.c: removed all min-stack stuff, an
	ancient relic from the Amiga

	* lisp.c (fast_getc): inlined getc function that handles
	reading from files locally (seems to decrease start up time by
	around 25%), only called from within loops

	* values.c (cons_sweep): don't try to free unused allocation
	blocks, profiling shows this function takes around 10% time
	cumulatively, so attempt to optimize it

	* continuations.c (primitive_call_cc): save current regexp data
	across continuations

2000-04-03  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (symbol_cmp): compare symbol names if non-equal

	* main.c (rep_load_environment): remember to protect the file
	name until it's actually used

2000-03-29  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (rep_misc_init): removed references to `value' field
	of symbols

	* symbols.c (Fmark_symbol_defined): new function, sets
	rep_SF_DEFVAR flag if allowed to
	(Fdefine_value): deleted, now a macro

	* lispmach.c (Fjade_byte_code): implement the OP_DSET
	instruction inline (with comment that it's deprecated)

	* lispcmds.c (Fdefmacro, Fdefun, Fdefconst): deleted, now
	macros

2000-03-28  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (rep_number_mul): fix small typo

2000-03-22  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_readl): handle EOF terminated `#\X' formatted
	characters

2000-03-21  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c: `#define RTLD_GLOBAL 0' if configure detected a
	version of Tru64 with a broker loader; this means that librep
	now fully supports Tru64 (from Aron Griffis
	<agriffis@bigfoot.com>)

2000-03-20  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c (thread_invoke): calculate rep_sleep_for ()
	length correctly (was subtracting twice!)

2000-03-19  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_bind_lambda_list, rep_eval_lambda): both have an
	extra argument, EVAL-IN-ENV. When true rep_bind_lambda_list
	won't evaluate the arguments in the _previous_ innermost
	environment, but the _current_ innermost environment. All
	callers changed.

	(eval): call inline lambda expressions directly, without
	evaluating the car to a closure that is then discarded
	immediately

2000-03-15  John Harper  <john@dcs.warwick.ac.uk>

	* datums.c: plugin for user-defined opaque data types

2000-03-14  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_readl): some work to accept standard CL and
	Scheme syntax -- recognize `#| ... |#' block comments; read
	characters as #\X or #\WORD for WORD in: space, newline,
	backspace, tab, linefeed, return, page, rubout; read vectors as
	`#(...)'

	* lispcmds.c (Fprog2): deleted, now a macro

	* lispcmds.c (Funwind_protect): noted in doc string that
	behaviour in conjunction with call/cc is undefined

	* symbols.c (Fsetq_default): deleted, now a macro

2000-03-13  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_bind_lambda_list): call Fcopy_sequence () on
	&rest values (may prevent the program being modified)

	* macros.c: new file, implements Fmacroexpand (). Added a
	memoization facility for when env == nil. Caches all macro
	expansions in an eq hash table, discards cached values each gc

	* lispcmds.c (Fdefmacro): call rep_macros_clear_history ()
	* main.c (rep_init_from_dump): call rep_macros_init ()
	* values.c (Fgarbage_collect): call rep_macros_before_gc ()

	* symbols.c (Flet, Fletstar): deleted, now macros
	* lispcmds.c (Ffunction, Fif, Fand, For): ditto

2000-03-12  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.11.1

	* lispmach.c (Fjade_byte_code): open-coded some fixnum
	arithmetic operations

	* unix_dl.c (x_dlsym) [DLSYM_NEED_USCORE]: use alloca instead
	of malloc

	* numbers.c (rep_parse_number): some optimizations

2000-03-11  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fload): use Fexpand_file_name to concatenate
	file names with directories

	* tables.c (Fequal_hash): handle non-fixnum numbers

2000-03-10  John Harper  <john@dcs.warwick.ac.uk>

	* rep.c, main.c: updated usage information

	* repgdbm.c (Fgdbm_fetch): always copy the returned string,
	since it may not be zero terminated

2000-03-07  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (maybe_demote): fixed typo when demoting rationals
	to bignums

	* streams.c (Fformat): implemented the `+' and ` ' flags

2000-03-05  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.11

2000-03-02  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c: in most functions possibly returning floats,
	return integers where possible

2000-03-01  John Harper  <john@dcs.warwick.ac.uk>

	* numbers.c (rep_print_number_to_string): avoid trying to print
	non-numeric things as numbers

	* misc.c (Fsystem): given an interactive decl

	* repgdbm.c: new file, binding for GDBM. Mostly compatible with
	sdbm binding

	* repdoc.c: use GDBM instead of SDBM

	* values.c (rep_box_string): new function, create a lisp string
	from a malloc-allocated string (and assume responsibility for
	its memory)

2000-02-29  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (symbol_print): try harder to never print something
	that may be read as a number

	* numbers.c (number_cmp): fix stupid bug of subtracting floats
	to see if they're equal, but then truncating result to an
	integer (e.g. (= 0.2 0.8) -> t)

2000-02-28  John Harper  <john@dcs.warwick.ac.uk>

	* timers.c, repsdbm.c, readline.c, gettext.c: don't use
	rep_dl_subrs or rep_dl_feature (some BSD systems have (had?)
	problems with data segment relocations)

2000-02-27  John Harper  <john@dcs.warwick.ac.uk>

	* values.c: represents strings as a two-word header and a
	separate chunk of data. This saves one word per string, and may
	also improve gc performance (only need to touch (contiguous)
	headers when gc-ing, so better dcache performance)

	* streams.c (Fformat): use rep_print_number_to_string for all
	numeric conversions

	* rep_lisp.h: moved unnecessary definitions to .c files.
	Changed how strings are represented

	* lispcmds.c (=, /=): these functions now accept N arguments,
	and do a general (i.e. not just numeric) comparison

	* lispmach.c, bytecodes.h: deleted OP_NUMEQ and OP_NUM_NOTEQ;
	OP_LSH becomes OP_ASH

2000-02-25  John Harper  <john@dcs.warwick.ac.uk>

	* rep.h.in: added rep_long_long define, will be `long long' if
	available, `long' otherwise

	* rep_lisp.h: new type rep_Number, only the bits in the car are
	publicly accessible
	* numbers.c: new file, handles all numeric stuff
	* values.c: don't register numeric types, mark rep_Number
	* main.c: call rep_numbers_init ()
	* lisp.c: parse new number representations correctly
	* lispcmds.c: moved all arithmetic functions to numbers.c

	* bytecodes.h, lispmach.c (OP_QUOTIENT, OP_FLOOR, OP_CEILING,
	OP_TRUNCATE, OP_ROUND, OP_EXP, OP_LOG, OP_SIN, OP_COS, OP_TAN,
	OP_SQRT, OP_EXPT): new instructions

2000-02-23  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c (rep_max_sleep_for): handle root_barrier == 0

2000-02-17  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c (OP_DSET): call Fdefine_value () to implement this
	instruction

	* lispcmds.c (Ffunction): dereference symbols, instead of
	enclosing them

2000-02-14  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c (Fjade_byte_code): fix typo in OP_SETG instruction

	* tables.c: added support for weakly-keyed hash tables

	* continuations.c: test if root_barrier == 0 at sensible points

2000-02-12  John Harper  <john@dcs.warwick.ac.uk>

	* files.c (rep_file_fdopen): new function, open a file object
	from a file descriptor and libc mode string

2000-02-09  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_load_autoload): handle overwriting macro
	definitions
	(rep_funcall): fixed the macro autoload magic

	* lispmach.c (Fmake_byte_code_subr): allow a single symbol as
	the arg spec

2000-02-08  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (Fmacroexpand): while evaluating the macro expansion,
	bind the special variable macro-environment to the environment
	passed into macroexpand. This allows macros to expand inner
	macro forms correctly

	* continuations.c (Fthread_queue_length): deleted this
	function, it's pretty useless

	* readline.c (rep_dl_init): set rl_basic_quote_characters to
	include only the double-quote character (from Matt Krai)

	* continuations.c (rep_max_sleep_for): new function, returns
	the maximum number of milliseconds that the current thread may
	sleep for
	* unix_main.c (wait_for_input): use rep_max_sleep_for

	* continuations.c (make_thread): protect the thunk against gc
	until it's actually called

	* lisp.c (rep_funcall): remember to switch environment before
	loading autoload cells

2000-02-07  John Harper  <john@dcs.warwick.ac.uk>

	* continuations.c (unlink_thread): unlink from the actual
	barrier the thread is in, not the current root
	(thread_suspend): don't use LONG_MAX when setting timeval
	members, it produces warning with the weird Solaris definition

	* lisp.c (rep_funcall): don't install closed environments until
	last possible moment (notably, not until _after_ evaluating any
	arguments)

	* lisp.c (read_symbol): make "," and "`" terminate symbols

	* lispmach.c (bound_specials): fixed for new way of remembering
	bound variables

	* lispcmds.c (Fload): fix interpreted-mode breaking dl loads

2000-02-06  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, bytecodes.h (rep_FORBID, rep_PERMIT): new
	instructions

	* lisp.c: call debugger in its own dynamic root

	* rep.c: create a dynamic root

	* continuations.c: introduced the idea of continuation
	barriers, a method of limiting and/or detecting control flow
	when using continuations. Can be similar to Guile's dynamic
	roots. Added support for software threads

	(call-with-object, call-with-dynamic-root, call-with-barrier,
	continuation-callable-p): functions for manipulating barriers

	(make-thread, thread-yield, thread-delete, thread-suspend,
	thread-wake, threadp, thread-suspended-p, current-thread,
	thread-queue-length, thread-forbid, thread-permit): thread
	functions

	* rep_lisp.h (rep_MAY_YIELD, rep_FORBID, rep_PERMIT): new
	macros dealing with thread preemption
	(rep_TEST_INT_SLOW): call rep_MAY_YIELD

	* lisp.c, lispmach.c (rep_funcall, Fjade_byte_code): call
	rep_MAY_YIELD (preempt threads) at suitable points

	* unix_main.c (wait_for_input): if it might be beneficial,
	don't sleep in select (), just poll then yield

	* misc.c (rep-interface-id): new variable

2000-02-04  John Harper  <john@dcs.warwick.ac.uk>

	* tables.c (table_mark): remember to mark hash_fun and
	compare_fun

	* tables.c (Fequal_hash): improved this to break off at a
	certain depth of recursion, not to resort to eq hashing for
	unknown types (use their type code instead), and don't use XOR
	to combine cons hashes
	(hash_value): do direct calls for all predefined hash functions

2000-02-03  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c: handle new binding mechanisms, new way of binding
	exception handlers `(error . (PC . SP))', try to optimize
	function inlining (for ultrasparc anyway)

	* lisp.c (rep_special_bindings): new variable, alist of special
	variable bindings currently in effect
	(max-lisp-depth): now a single-parameter function

	* symbols.c (rep_bind_symbol, rep_unbind_symbols): now store
	binding history as a _single_ cons cell (SPECIALS . LEXICALS),
	the number of bindings of each type
	(Fset, Fsymbol_value, Fdefault_value, Fset_default): handle
	deep binding of special variables

	* values.c (garbage-threshold, idle-garbage-threshold): now
	single-parameter functions, not variables

	* lisp.c, lispcmds.c, rep_lisp.h, symbols.c, values.c: removed
	all rep_Var cruft

	* files.c, lisp.c, lispcmds.c, main.c, misc.c, unix_dl.c,
	unix_main.c: don't access `SYM->value' directly, use Fset and
	Fsymbol_value

	* main.c: removed --warn-shadowing option

	* continuations.c: save and restore rep_special_bindings in the
	environment now that special bindings are deep-bound

2000-02-02  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_stack_bottom): moved here from continuations.c
	* continuations.c: made into a plugin (feature `callcc')

	* lispcmds.c (Fload): search for foo.la before libfoo.la

2000-02-01  John Harper  <john@dcs.warwick.ac.uk>

	* tables.c: new file, implements hash tables

	* lispmach.c (Fjade_byte_code): check if needing to gc before
	entering the main loop (needed when tail-calling). Also, check
	for exceeding max-lisp-depth. (First pointed out by Ceri Storey)

	* rep-xgettext.jl: new options --include and --only-commands

	* unix_dl.c, timers.c: remember alloca preprocessor magic
	(pointed out by Daniel Burrows)

2000-01-31  John Harper  <john@dcs.warwick.ac.uk>

	* repdoc.c: check for errors from sdbm_store ()

	* lisp.c (rep_bind_lambda_list): now handles improper lists of
	bound variables (i.e. (foo . bar) == (foo &rest bar))

	* lispmach.c (Fjade_byte_code): fixed bug in `unbindall'
	instruction (not resetting impurity correctly)

2000-01-30  John Harper  <john@dcs.warwick.ac.uk>

	* values.c (rep_box_pointer, rep_unbox_pointer): new functions,
	translate from C pointers to lisp data, and back again

	* lisp.c (Fdebug_frame_environment): new function, returns an
	environment given a frame pointer
	(Feval): call debug-entry, debug-exit and debug-error-entry
	with an extra argument, a boxed frame pointer

	* lispmach.c (Fjade_byte_code): handle calling subrs that are
	wrapped in closures

	* continuations.c: removed unused STACK_SLOP definition,
	removed extra call to FLUSH_REGISTER_WINDOWS

2000-01-28  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_init_from_dump): find the stack base by looking
	at the passed in address of `argc'. This is a kludge, but it's
	the best method I can find..

	* continuations.c: fixes for Linux/ix86, let's hope it still
	works on sparc!

	* continuations.c: support for `call/cc' (also has the alias
	call-with-current-continuation). Only tested on sparc so far,
	may need tweaking for other architectures. Doesn't attempt to
	save or restore dynamic bindings

	* main.c (rep_init_from_dump): init continuations, and save
	initial stack pointer

	* find.c (saved_regexp_data): made global, and added rep_ prefix
	* files.c, repint.h: moved file-ops enum decl and blocked_ops
	structure decl to repint.h, since continuations need access	
	* lisp.c (lisp_depth, max_lisp_depth): added rep_ prefix and
	made global

2000-01-27  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (Fget, Fput): properties don't have to be symbols
	now, use `equal' comparisons as in scheme

2000-01-25  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (interrupt_signal_handler,
	termination_signal_handler): if a signal arrives before a
	previous signal has been handled (i.e. the system is
	unreponsive) then raise the signal causing the default action
	(i.e. termination)

	* rep-xgettext.jl: support for outputting strings as a file of
	C code

	* rep-xgettext.jl (scan): support `case' statement

	* main.c (rep_top_level_exit): call before-exit-hook

	* unix_main.c (rep_sig_restart): use siginterrupt () instead of
	sigaction () when possible (it seems to be more reliable in
	certain cases?)

2000-01-24  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fcase): new special form, similar to in scheme
	but with `t' instead of `else'

	* lispmach.c (Fjade_byte_code): if GCC, use its variable length
	auto arrays to allocate the VM stack. This allows tail-calls to
	deallocate and free stack as required, cf. alloca () which
	gives no method for freeing allocations except by exiting the
	function

2000-01-23  John Harper  <john@dcs.warwick.ac.uk>

	* bytecodes.h (OP_RETURN, OP_UNBINDALL): new instructions

	* lispmach.c: implement OP_RETURN and OP_UNBINDALL (which
	actually unbinds to the argument values, not all the way).
	Keep track of dynamic `impurity', the number of dynamic
	bindings (of any type) currently in place. When this value is
	zero, and there's a call to bytecode followed by a return
	instruction, just goto the top of the function, snapping all
	arguments

	* symbols.c (rep_unbind_symbols): now returns an int, the
	number of _special_ bindings it removed

	* lisp.c (rep_funcall): explicitly protect fun and args, now.
	Tail-calling may remove them from the call stack
	(rep_bind_lambda_list): try to optimize lexical binding
	(rep_funcall): call bytecode interpreter with new fourth
	argument, and don't unbind its frame on return

2000-01-22  John Harper  <john@dcs.warwick.ac.uk>

	* bytecodes.h: new bytecode version 9.0
	(OP_REFN, OP_SETN): lexical address instructions
	(OP_REFG, OP_SETG): global lexical instructions
	(OP_BINDSPEC): create a special binding

	* lispmach.c: support the new instructions
	(OP_SETQ, OP_REFQ): remove optimisations for lexical scope
	(OP_BIND): always creates lexical bindings

	* rep_lisp.h (rep_cons_block): ensure that the cons cells are
	aligned to sizeof (rep_cons) -- prevents any cell straddling a
	cache line boundary

	* rep_lisp.h, lispmach.c, lisp.c, symbols.c: closures now have
	a flag in their car marking whether or not they're allowed to
	call the bytecode interpreter. The variable rep_bytecode_interpreter
	contains either the interpreter to call, or a null pointer.
	Fset_environment scans for Qjade_byte_code

2000-01-19  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (rep_handle_error): if error-handler-function is
	defined and functionp, then call it, otherwise handle the error
	locally

	* rep.h.in: define rep_INTERFACE to the current library
	interface version

	* lisp.c (rep_handle_error): for errors with >3 data values,
	print as a list

	* values.c (run_guardians): fixed bug where cons GC mark bits
	could be mangled when moving list items

	* lisp.c (rep_lisp_prin): when printing closures, don't
	truncate long names

2000-01-18  John Harper  <john@dcs.warwick.ac.uk>

	* values.c (rep_register_type): if no comparison function is
	given, just compare repv's

2000-01-15  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (rep_expand_file_name): merge contiguous slashes
	in filenames, instead of assuming they represent a new root

2000-01-12  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_guardian): new data type (cell16)
	* values.c (Fmake_primitive_guardian, Sprimitive_guardian_push,
	Sprimitive_guardian_pop): new functions, they provide the
	underlying mechanism for the make-guardian function (see
    ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz)

	* values.c (Qafter_gc_hook): new hook, called after each gc

2000-01-09  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.10

2000-01-08  John Harper  <john@dcs.warwick.ac.uk>

	* Makefile.in: only include ../intl objects in libgettext.la if
	USE_INCLUDED_LIBINTL is set to `yes'. Also ensure that
	libgettext.la exports its symbols

	* gettext.c: if LIBC_GETTEXT is defined remove the gnu_
	prefixes to libintl function invocations

2000-01-07  John Harper  <john@dcs.warwick.ac.uk>

	* debug-buffer.c: don't generate stack backtraces if gcc's
	__builtin_return_address () is broken (patch from George
	<jirka@5z.com>)

	* symbols.c (Fdefvar): allow symbols to be re-defvar'd from
	restricted environments, but only if it was originally defvar'd
	from a restricted environment. Also, only set the value if it's
	unbound, or weak, but not weak-mod, and we're unrestricted

1999-12-31  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c: use stdio method of signalling errors when things
	haven't been initialised yet; also read Qdl_load_reloc_now
	safely

	* rep_lisp.h, symbols.c, values.c: some tweaks for new dumping
	regime

	* rep.c: use rep_load_environment () and rep_top_level_exit ()

	* main.c (rep_init_from_dump): new function, as rep_init but
	with a file of dumped definitions
	(rep_load_environment): new function, called with a single arg,
	the script to load (after loading init.jl) to boot the system
	(rep_top_level_exit): new function, returns the value that the
	process should return when it exits

	* lispcmds.c (Ffeaturep, Fprovide, Frequire): in C again

1999-12-23  Ceri Storey  <cez@nomorespam.freeserve.co.uk>

	* readline.c (init_bouncing_parens, find_matching_paren,
	match_paren): steal parentheses bouncing code from guile

1999-12-21  John Harper  <john@dcs.warwick.ac.uk>

	* regexp.c (regmatch): fix typo in non-greedy operator match
	(from Matt Kraai <kraai@ghs.com>)

	* lispcmds.c (Fif): make (if t) => nil, not nil

1999-12-19  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c (rep_open_dl_library): protect `file_name' against
	gc while calling load_requires ()

	* lispcmds.c (Fload): scan after-load-alist when loading dl
	objects, as well as lisp files

1999-12-17  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (Fdefine_value): new function, a combination of set
	and defvar (but doesn't imply dynamic scoping)

	* unix_dl.c (rep_open_dl_library): the .la file may have a line
	"rep_requires='FEATURES...'" naming other dl objects to load
	before this one. Treat the returned value of rep_dl_init as a
	feature if it's a symbol and isn't nil or t. Add the feature by
	hand, instead of calling provide

	* lispcmds.c (Qfeatures): new symbol, initialised to nil

	* timers.c, repsdbm.c, readline.c, gettext.c: don't use
	rep_dl_feature anymore, just return the feature symbol

1999-12-16  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c: check .la files for `rep_open_globally=yes' line,
	if so, open with RTLD_GLOBAL to export all symbols

1999-12-12  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.9

1999-12-11  John Harper  <john@dcs.warwick.ac.uk>

	* rep-xgettext.jl (output): fixed checking for multiple
	occurrences in the same file

	* bytecodes.h (OP_CAAR, OP_CADR, OP_CDAR, OP_CDDR, OP_CADDR,
	OP_CADDDR, OP_CADDDDR, OP_CADDDDDR, OP_CADDDDDDR,
	OP_CADDDDDDDR): new instructions

	* lispmach.c: execute c..r instructions

1999-12-10  John Harper  <john@dcs.warwick.ac.uk>

	* readline.c: new plugin, wraps the readline () function, or
	calls Fread_line if not available

1999-12-07  John Harper  <john@dcs.warwick.ac.uk>

	* rep-xgettext.jl: scan the car of lists as well as the cdr;
	only emit duplicated strings once

	* lispmach.c, bytecodes.h (OP_ENCLOSE): new instruction, a
	single-argument version of OP_MAKE_CLOSURE

	* symbols.c (Fmake_variable_special): new function

1999-12-06  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (usage): fix backslash lossage (pointed out by Conrad
	Steenberg <conrad@srl.caltech.edu)

1999-12-05  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.8.1

1999-12-04  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (Fdefvar): set `documentation' property not
	`variable-documentation'

1999-11-29  John Harper  <john@dcs.warwick.ac.uk>

	* values.c, unix_processes.c, unix_main.c, timers.c, symbols.c,
	streams.c, repsdbm.c, misc.c, main.c, lispmach.c, lispcmds.c,
	lisp.c, find.c, files.c: changed embedded doc keys

1999-11-28  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.8

1999-11-27  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c, timers.c, symbols.c, repsdbm.c, files.c:
	remember to add to rep_data_after_gc when allocating data

1999-11-25  John Harper  <john@dcs.warwick.ac.uk>

	* values.c, unix_dl.c, timers.c, symbols.c, rep_subrs.h,
	rep_lisp.h, rep.c, rep-xgettext.jl, main.c, lispmach.c,
	lispcmds.c, lisp.c, files.c, bytecodes.h:

	More big changes: unified the value/function namespaces,
	evaluate the function argument of list forms as normal, don't
	allow function names in place of actual functions (subrs or
	closures), lambda is now a special form evaluating to a closure

	In case you hadn't noticed, this is very scheme-like; the
	reason is that gaolled code can escape through naming functions
	that it can't call itself

1999-11-21  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Ffunctionp, Fmacrop, Fspecial_form_p,
	Fsubr_name): use Fsymbol_function for dereferencing the symbol,
	instead of just looking in the function slot

	* files.c (Fset_file_handler_environment): new function, gives
	a safe method of granting access to checked file handlers
	(provided the actual invoking function is accessible)

	* symbols.c (Fmake_closure): initialise fh_env
	* values.c (mark_value): mark fh_env

	* rep_lisp.h (rep_USE_DEFAULT_ENV): new macro

1999-11-19  John Harper  <john@dcs.warwick.ac.uk>

	* gettext.c: all gettext functions are now prefixed by gnu_

1999-11-18  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fstring_equal, Fstring_lessp): case-insensitive
	string comparisons

	* rep-xgettext.jl: new script, scan lisp files for strings that
	should be translated
	* gettext.c: new plugin, provides _, bindtextdomain and
	textdomain functions

1999-11-16  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (Fformat): support the `n$' prefix for i18n, i.e.
	doing (format nil "%2$s, %1$s" "hello" "world") gives "world,
	hello"

1999-11-15  John Harper  <john@dcs.warwick.ac.uk>

	* repint_subrs.h, rep_subrs.h (rep_call_stack): now in rep_subrs.h

	* rep_lisp.h (rep_SF_DEFVAR): new flag, has the symbol been
	defvar'd (set by rep_INTERN_SPECIAL)
	* symbols.c (Fdefvar): moved here from lispcmds.c, allow
	restricted environments to defvar un-defvar'd symbols

	* unix_processes.c (run_process, rep_system): reset SIGPIPE to
	SIG_DFL before calling exec () (from lantz moore
	<lmoore@contigo.com>)

1999-11-11  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (Fsetplist, Fsymbol_plist, Fput): symbol must be in
	caller's special environment

	* lisp.c, lispmach.c: only allow bytecode subrs to be called if
	jade-byte-code is in the function environment of the called
	function

1999-11-10  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_Funarg): new cell8 type, replaces rep_File,
	describes an enclosed function
	(rep_SF_SPECIAL, rep_SF_WEAK, rep_SF_WEAK_MOD): new symbol
	flags, for special variables
	(rep_COMPILED_MACRO_P): deleted, there's now no difference
	between bytecode objects representing functions or macros
	(rep_PUSH_CALL, rep_POP_CALL): new macros for handling the Lisp
	call stack
	(rep_INTERN_SPECIAL): new macro, similar to rep_INTERN, but
	marks the variable as being special

	* lisp.c (rep_env, rep_fenv, rep_special_env): the environments
	for lexical variables, functions and special variables (need
	special environment for access-control purposes)
	(rep_funcall): lambda expressions and bytecode objects are no
	longer considered functions -- only closures, subrs and
	autoloads are functions (it may not be secure to call an
	unclosed function)

	* symbols.c (Fmake_closure, Fclosure_function,
	Fset_closure_function, Fclosurep, Fset_variable_environment,
	Fset_function_environment, Fset_special_environment): new
	functions
	(Fsave_environment): new special form
	(rep_bind_symbol, rep_unbind_symbols): handle both lexical and
	special variables
	(rep_bind_function, rep_unbind_functions): new functions
	(Fsymbol_value, Fset, Fdefault_value, Fset_default): handle
	lexical scoping and dynamic scoping, and the new access rules
	for special variables (the WEAK and WEAK_MOD flags to protect
	exploits from restricted special environments)
	(Fflet, Fmacrolet): new special forms
	(Fspecial_variable_p): new function

	* values.c: support Funarg type (closures)

	* lispcmds.c (Ffunction): special form to create closures from
	constant lambda expressions
	(Fdefvar): access control/protection when a restricted special
	environment has already defined the special variable (and
	therefore it's already in the restricted environment)
	(Fload): new optional fifth arg: IN-CURRENT-ENVIRONMENT, unless
	non-nil evaluate forms in a new lexical environment
	(Ffeaturep, Fprovide, Frequire): deleted, now in lisp.jl

	* lispmach.c (Fjade_byte_code): handle the new instructions,
	special-case lexical binding in OP_SETQ and OP_REFQ instead of
	dynamic bindings

	* bytecodes.h: create a new major bytecode version
	(OP_MAKE_CLOSURE, OP_FBIND, OP_CLOSUREP, OP_BINDENV): new
	virtual machine instructions

	* streams.c, rep.c, misc.c, main.c: misc changes for lexical
	scoping

	* files.c: allocate the file type dynamically, since we stole
	its cell8 slot for closures

	* unix_dl.c (rep_open_dl_library): provide is now defined by
	Lisp code

1999-11-01  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c: define RTLD_LAZY to 1 if it's not already defined
	anywhere (from remark in the Perl sources, via glib)

1999-10-31  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.7.1

1999-10-29  John Harper  <john@dcs.warwick.ac.uk>

	* regexp.c: ANSII-fy function definitions

1999-10-28  John Harper  <john@dcs.warwick.ac.uk>

	* rep-config.sh: expect ${libdir} as second argument, not
	${exec_prefix}
	* Makefile.in: pass ${libdir} to rep-config.sh

	* rep_lisp.h: comment out use of #warning, doesn't work on
	solaris cc

	* dlmalloc.c: change the sbrk () thing again for FreeBSD

	* timers.c (insert_timer): fix problem when inserting new timer
	before existing timer (with same seconds, but less
	milliseconds)

1999-10-27  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c: make the rep_alloc tracking work once more

	* dlmalloc.c: fix sbrk () declaration on FreeBSD (from Yukihiro
	Nakai <nakai@internetsolutions.co.jp>)

1999-10-24  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.7

	* lispcmds.c (Fload): remember to call Fclose_file on any
	opened streams

1999-10-23  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c: some more small optimisations

	* unix_processes.c (rep_system): fix child termination on being
	unable to exec /bin/sh

1999-10-21  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (Fformat): revert the long-int printing, since it
	truncates the values and generally doesn't work. But added some
	fixes for printing on sizeof(int) != sizeof(repv) systems

	* lispmach.c: some optimisations; disable stack usage checking
	unless CHECK_STACK_USAGE is defined

	* misc.c (Frandom): if LIMIT is <= 0, set LIMIT = MAXINT

1999-10-20  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (Fformat): handle long-integers in the integer
	conversions

1999-10-14  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c: support underscore-prefixed symbol names

1999-10-13  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (Fprocess_id): return pid of interpreter if
	given a nil argument

	* main.c (get_main_options): don't handle --version
	* rep.c (main): handle --version option

1999-10-06  John Harper  <john@dcs.warwick.ac.uk>

	* unix_dl.c: untested support for shl_load () (HP-UX)

1999-10-03  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.6.2

1999-10-01  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h: remove rep_ALIGN macro, since it's only used
	once, by rep_ALIGN_CELL. This now knows about implicit
	alignment on the DEC C compiler

1999-09-20  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (Qautoload_verbose): only print autoloading messages
	if this is non-nil (it is by default)

	* version 0.6.1

	* lispcmds.c (Fload): only try to load files if they're
	readable and not a directory (not if they just exist)

1999-09-17  John Harper  <john@dcs.warwick.ac.uk>

	* realpath.c: bracketed function definition by #ifndef
	HAVE_REALPATH just in case

1999-09-15  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (rep_file_modes_as_string): change ulong to u_long

1999-09-14  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.6

	* unix_processes.c (rep_system): construct environ from
	process-environment as with start-process and call-process

	* regexp.c (regrepeat): workaround a bug in GCC 2.95 on sparcs
	
1999-09-12  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.5

1999-09-11  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h: updated and expanded some comments

1999-09-10  John Harper  <john@dcs.warwick.ac.uk>

	* rep.c (main): by default, always load a script named `rep',
	not a script defined by argv[0]

	* unix_main.c (fatal_signal_handler): finally changed message
	from `jade: ...' to `rep: ...'

1999-09-09  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (check_for_zombies): removed the assertion
	that every pid must have a process structure

1999-09-08  John Harper  <john@dcs.warwick.ac.uk>

	* files.c (Fset_input_handler): new function, allows async
	input on a file handle

1999-08-30  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.4

	* unix_main.c (usr_signal_handler): now invoked by USR2 as well
	as USR1. USR2 prints all debug buffers to stderr

1999-08-29  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c, unix_main.c, test-dl.c, repsdbm.c,
	rep_lisp.h, rep.c, misc.c, message.c, lisp.c, debug-buffer.c:
	fixed some possible compiler errors (from `-ansi -pedantic')

1999-08-28  John Harper  <john@dcs.warwick.ac.uk>

	* rep.h.in: (rep_PTR_SIZED_INT_SUFFIX, rep_PTR_SIZED_INT_CONV):
	new macros
	(rep_PTR_SIZED_INT_BITS): now defined in terms of sizeof () and
	CHAR_BIT instead of statically

	* rep_lisp.h (rep_VALUE_CONST): new macro, uses
	rep_PTR_SIZED_INT_SUFFIX to make a constant of the needed width
	(rep_vector): define the data as a one-element array not a
	zero-element array (for ansii-ness)

	* misc.c (Frandom): don't use `#if' to decide how many random
	samples to take, use normal `if' instead, since the parameters
	are known at compile-time the compiler should eliminate
	unneeded stuff

	* main.c: don't check rep_PTR_SIZED_INT_BITS anymore since we
	use sizeof to define it now

	* lispmach.c, lisp.c: use rep_PTR_SIZED_INT_CONV when
	printf-ing lisp integers

1999-08-27  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_init): changed some of the type consistency
	checking done on initialisation -- just check that the values
	are within the correct bounds, not that they exactly match the
	size of void *

	* unix_dl.c (rep_find_c_symbol): check for HAVE_DLADDR

	* rep_lisp.h: changed string type layout -- removed the inline
	static string option since it's a hack, but more importantly,
	since it defines the library's interface, and shouldn't change

	* rep_lisp.h, files.c, misc.c: changed some instances of `1 <<
	X' to `1L << X' for when sizeof(int) < sizeof(long)
	* values.c (rep_make_string, rep_string_dupn): changed `length'
	arg from int to long

1999-08-22  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.3

1999-08-17  John Harper  <john@dcs.warwick.ac.uk>

	* values.c (Fgarbage_collect): defining DEBUG_GC and setting
	debug_gc = 1 enables code to print the current backtrace at
	each garbage collection

1999-08-16  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.2

	* lispcmds.c (lispcmds_init): add REP_COMMON_EXEC_DIRECTORY to
	the dl-load-path

1999-08-15  John Harper  <john@dcs.warwick.ac.uk>

	* timers.c: added some documentation strings

1999-08-13  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_CELL8_TYPE_MASK): changed from 0x1f to 0x3f
	to include the rep_CELL_IS_16 bit (otherwise all cell16 types
	are reported as being symbolp!)

1999-08-06  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_handle_input_exception): if Qerror_mode is
	`top-level', then only the top-level event loop handles errors,
	if it's `exit' then errors cause the interpreter to exit.
	Qinterrupt_mode works similarly for user interrupts

	* unix_main.c: make SIGINT, SIGTERM and SIGHUP non-restartable

1999-08-03  John Harper  <john@dcs.warwick.ac.uk>

	* version 0.1

1999-07-29  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (rep_sig_restart): make syscalls restart or not
	restart for any signal
	(wait_for_input): make both SIGCHLD and SIGALRM non-restartable
	during select ()

	* unix_processes.c (rep_sigchld_restart): replaced by the more
	general rep_sig_restart

	* timers.c: new file, a dynamically loadable module providing
	multiple one-shot timers

1999-07-27  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (Frandom): return zero if LIMIT <= 0

1999-07-22  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (Fload): while evaluating the forms from a file,
	bind load-filename to the full name of the file being loaded

	* debug-buffer.c: dladdr seems to work again under linux

1999-07-09  John Harper  <john@dcs.warwick.ac.uk>

	* rep-remote.c (do_get, do_put): don't assume an error if
	reading doesn't get as much as we asked for

1999-07-07  John Harper  <john@dcs.warwick.ac.uk>

	* rep-remote.c (do_readlink): don't assume the output of
	readlink() is null-terminated

	* streams.c (Fcopy_stream): fixed this when the buffer
	overflows (was dropping every 512th character)

1999-07-06  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c: new process-connection-type: `socketpair'

	* unix_main.c (wait_for_input): fixed for when input doesn't
	arrive within the first second (the input fdset used to be
	munged)
	(usr1_signal_handler): connected to SIGUSR1, outputs the Lisp
	backtrace when called

	* rep-remote.c: new program, provides a method of accessing
	files on a remote host (using the remote-rep.jl Lisp backend)

1999-07-05  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (Fread_chars): new function

1999-07-04  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c, files.c: new file operations: read-symlink and
	make-symlink

1999-06-29  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (rep_proc_init): don't create a new process
	group anymore

1999-06-06  John Harper  <john@dcs.warwick.ac.uk>

	* bytecodes.h: OP_SETQ now pops the value from the stack.
	Deleted OP_PUSHIW, replaced by OP_PUSHIWN and OP_PUSHIWP, for
	pushing negative and positive values respectively

	* unix_dl.c (rep_kill_dl_libraries): never call dlclose, it's
	not possible to know if any references to the library still
	exist

	* unix_main.c (rep_map_inputs): new function, call a specified
	function for all registered (fd, callback) pairs

	* misc.c (Fsystem): new function, execute a shell command
	* unix_processes.c (rep_system): back-end of Fsystem

	* lisp.c (rep_readl): don't return nil on EOF, instead signal
	an end-of-stream error
	* lispcmds.c (Fload): catch any end-of-stream error's signalled
	while reading the file

	* files.c (Fclose_file): when closing a file with
	rep_LFF_DONT_CLOSE set, freopen it onto /dev/null

1999-06-03  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (default_beep): new function, echo ^G, used to
	initialise the rep_beep_fun hook

	* main.c (Fget_command_line_option): don't return rep_NULL when
	an option requiring an argument isn't given

	* lispmach.c (Fjade_byte_code): optimise common cases of
	OP_REFQ and OP_SETQ instructions, when accessing a variable
	which can't be locally stored, and isn't a rep_Var type

	* unix_processes.c (Fsignal_process): new function

1999-05-31  John Harper  <john@dcs.warwick.ac.uk>

	* rep_regexp.h (NGSTAR, NGPLUS): new operators, non-greedy plus
	and minus
	* regexp.c: implemented non-greedy *, + and ? operators: *?, +?
	and ?? (as in Perl)

1999-05-30  John Harper  <john@dcs.warwick.ac.uk>

	* rep_regexp.h, regexp.c (WORD, NWORD, WSPC, NWSPC, DIGI,
	NDIGI, WEDGE, NWEDGE): new operators; they are Perl's \w, \W,
	\s, \S, \d, \D, \b, \B syntax, respectively

1999-05-29  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (rep_lispcmds_init): add a null string to the end
	of the load-path (i.e. the current directory)

	* lisp.c (rep_load_autoload): only display messages if not in
	batch-mode

1999-05-26  John Harper  <john@dcs.warwick.ac.uk>

	* repsdbm.c (Fsdbm_open): call local-file-name on the file
	parameter

1999-05-15  John Harper  <john@dcs.warwick.ac.uk>

	* added `#define _GNU_SOURCE' at the top of all source files. This
	seems to be necessary with glibc 2.1

1999-04-25  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_kill): kill the dl libraries a bit later down the
	line
	* unix_processes.c (rep_proc_kill): disable SIGCHLD _before_
	killing the processes

1999-04-24  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c (Fjade_byte_code): yow! if a subr with five
	parameters has four values applied to it, it was being called
	_twice_ (a missing break statement). This bug must have existed
	forever!

1999-03-28  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c (Fjade_byte_code): don't test for called function
	returning rep_NULL individually, since some don't even though
	an error has been signalled. Instead check for, and handle,
	errors outside the big switch

1999-03-23  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (rep_sigchld_fun): new hook, called by the
	sigchld handler

	* repsdbm.c (rep_dl_init): set a rep_dl_feature value

	* unix_dl.c (struct dl_lib_info): new field `feature_sym', a
	symbol noting the feature provided by this library
	(find_dl_by_feature): new function
	(rep_open_dl_library): if a symbol `rep_dl_feature' exists in
	the opened object, it's assumed to contain the name of the
	feature provided by this object, Fprovide is called
	(rep_find_dl_symbol): new function, given a feature and a
	symbol name, return the address

	* main.c (Frecursive_edit): update the rep_recurse_depth
	variable here now

1999-03-19  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_event_loop_fun): new hook, allows the standard
	event loop to be replaced

	* unix_main.c (rep_register_input_fd_fun,
	rep_deregister_input_fd_fun): new hooks, allows non-standard
	event loops to catch inputs

1999-03-18  John Harper  <john@dcs.warwick.ac.uk>

	* repsdbm.c (rep_dl_init): return Qt

	* lisp.c (rep_test_int_period): this was a about factor of 100
	too large

	* unix_main.c (wait_for_input): break the timeout period into a
	series of second-long timeouts, with a check for an interrupt
	occurring between each call to select

1999-03-17  John Harper  <john@dcs.warwick.ac.uk>

	* rep.c (main): test for (throw 'quit RC) when exiting

	* lisp.c (rep_readl): when `#!' is encountered at the start of
	a file, skip until `!#' is found

1999-03-16  John Harper  <john@dcs.warwick.ac.uk>

	* values.c: allocate the buffer of static gc roots dynamically

	* rep_lisp.h: define some new macros, rep_CDRLOC, and various
	rep_CAAR, rep_CADR combinations (up to four dereferences)

	* rep-config.sh: new option `--execdir'

	* main.c (Qprogram_name): new symbol argv[0] of the invoking
	program

	* lispcmds.c (Qdl_load_reloc_now): new symbol
	* unix_dl.c (rep_open_dl_library): when dl-load-reloc-now is
	non-nil, open with the RTLD_NOW mode, not RTLD_LAZY

1999-03-15  John Harper  <john@dcs.warwick.ac.uk>

	* rep_lisp.h (rep_DECLARE): the third argument is now the
	entire predicate expression, not just the name of the
	predicate. The rep_DECLAREX variants are unchanged

1999-03-12  John Harper  <john@dcs.warwick.ac.uk>

	* files.c (file_prin): the `name' field is _nil_ if unbound,
	not rep_NULL

	* misc.c (Fchar_downcase): this was using toupper not tolower

1999-03-09  John Harper  <john@dcs.warwick.ac.uk>

	* repsdbm.c: changed all function names from dbm- to sdbm-

	* sdbm_pair.c, sdbm_hash.c, sdbm.h, sdbm.c: replaced dbm_ by
	sdbm_ and DBM by SDBM to prevent clashing with libc dbm

	* repdoc.c: removed the -a option, never open the db O_TRUNC,
	replace dbm_ by sdbm_

1999-03-06  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_get_option): accept `--foo=bar' as well as `--foo
	bar'
	(Fget_command_line_option): wrapper for rep_get_option

1999-03-02  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (rep_get_option): new function, searches the
	command-line-args variable for a specified option

	* main.c (get_main_options): new option `--interp', this sets
	the LISP variable interpreted-mode
	* lispcmds.c (Fload): if interpreted-mode is non-nil, don't
	load .jlc or .jld files

	* unix_processes.c (proc_puts): remember that the input data may
	be a C or LISP string

1999-02-28  John Harper  <john@dcs.warwick.ac.uk>

	* MAJOR CHANGES: separated all LISP interpreter specific parts
	into a separate library, librep (Read-Eval-Print)

1999-02-17  John Harper  <john@dcs.warwick.ac.uk>

        * unix_processes.c (check_for_zombies): always check for
        zombies, even if we received no SIGCHLD

1999-02-12  John Harper  <john@dcs.warwick.ac.uk>

        * unix_files.c (sys_canonical_file_name): preserve the trailing
        slash or lack thereof

1999-01-31  John Harper  <john@dcs.warwick.ac.uk>

	* bytecodes.h: several OP_PUSHI opcodes for pushing immediate
	integers (of various sizes)
	* lispmach.c (cmd_jade_byte_code): added PUSHI instructions

	* lispmach.c (cmd_validate_byte_code): had the minor
	comparisons the wrong way around

	* x11_windowsys.h (struct x11_display): added `name' field
	* x11_main.c (x11_get_display): new function, searches for a
	named open display
	(x11_open_display): call x11_get_display before creating a new
	one

1999-01-29  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (run_process): clean up better when fork
	fails

1999-01-27  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (cmd_with_view): fix bug when switching windows as
	well as views

1999-01-24  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (format_mode_string, format_mode_value,
	update_status_buffer): buf_len is now signed, so that negative
	values are detected, not wrapped around!

1999-01-20  John Harper  <john@dcs.warwick.ac.uk>

	* buffers.c (make_marks_non_resident): add a comment noting that
	any TX fields used must be explicitly gc marked
	* values.c (mark_value): in the V_Mark case, remember to mark
	tx_File, now that make_marks_non_resident accesses it

1999-01-17  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (cmd_eval): preserve regexp matches while calling the
	debugger

1999-01-14  John Harper  <john@dcs.warwick.ac.uk>

	* buffers.c (cmd_set_mark_file): bug-fixes

1999-01-13  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (cmd_lookup_event_binding): return multiple prefix
	keymaps correctly, by faking a call to next-keymap-path. Also,
	remove the optional RESET parameter, always reset
	next-keymap-path to null

	* edit.h (Lisp_Mark): new field `canon_file' used in
	non-resident marks to store the canonical file name, `file'
	reverts to being the possibly abbreviated file name
	* buffers.c: changes for the modified Lisp_Mark structure, also
	fix the mark_cmp function for non-resident marks
	* values.c (mark_value): updated for `canon_file' mark field

1998-12-09  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (eval_input_event): don't overwrite prefix-arg after
	handling prefix-keymap

1998-12-08  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (sys_expand_file_name): handle "foo/../bar"
	correctly (where we have to backtrack to the start of the
	output buffer)

1998-12-03  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (cmd_user_full_name): if given a parameter, it's the
	chosen name of the user

1998-11-29  John Harper  <john@jsh.org>

	* keys.c (overriding-local-keymap): new variable, when non-nil,
	overrides all local keymaps

1998-11-24  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c: big changes. No longer have the keymap-path variable,
	instead we steal Emacs' notion of a set of active keymaps;
	these include the variables global-keymap, and local-keymap,
	the minor-mode-keymap-alist associating minor modes and their
	keymaps, and the `keymap' extent properties of all extents
	under the cursor (in reverse order of priority).
	Also, when evaluating events, a command that is a symbol with
	the function value `keymap' is used as a prefix key (keymap in
	the value slot). Multiple bindings to the same prefix keys are
	allowed, the union of their specified keymaps is used to
	resolve the next event
	(cmd_search_keymap): new function, scan a single keymap for a
	binding of a specified event

1998-11-20  John Harper  <john@dcs.warwick.ac.uk>

	* lists.c, lists.h: removed these files, nothing uses them
	anymore

1998-11-14  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (handle_input): fixes to the input_pending stuff

1998-11-12  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (sys_mark_input_pending): new function, records
	that an input fd has input read but not yet handled (and
	therefore needs to be disposed of next time round the event
	loop)
	* x11_main.c (x11_handle_input): when working asynchronously,
	ensure that any events read but not handled cause
	sys_mark_input_pending to be called

1998-11-11  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (cmd_make_window): set the w_CurrVW field
	explicitly to the first view in the window

	* editcommands.c (cmd_empty_line_p): add some error checking

	* views.c (cmd_with_view): save the current window and the
	current view in the window to be altered so that the state can
	be properly recovered later
	* lispmach.c (cmd_jade_byte_code): in the BIND-VIEW
	instruction, save the current window, and the current view in
	the window to be altered

1998-11-10  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (on_idle): protect against calling the idle-hook
	recursively
	* unix_main.c (handle_input): set refreshp on an interrupt

1998-11-01  John Harper  <john@dcs.warwick.ac.uk>

	* x11_windows.c (sys_new_window): when setting the XSizeHints
	structure set the base_height to zero

1998-10-27  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (stream_puts, stream_putc): when growing the window
	message remember to allocate a byte for the zero terminator..

	* values.c (data_types): remove mark_sweep
	(mark_value): when marking a resident mark, mark the canonical
	name of the associated buffer (it's required if the mark is
	made non-resident)
	* buffers.c (buffer_sweep): call mark_sweep before sweeping
	buffers, the ordering is important. Only call
	make_marks_non_resident if there actually are marks in the
	buffer (this stops us occasionally using freed memory)

	* streams.c (stream_putc, stream_puts): when appending to the
	window's message, use sys_realloc not str_dupn

	* edit.c (FREE_LL): fix non-r_alloc version

	* buffers.c (mark_cmp): compare non-resident marks correctly

1998-10-26  John Harper  <john@dcs.warwick.ac.uk>

	* dlmalloc.c: enable __morecore_hook when JADE is defined, set
	the default value to __jade_morecore
	* ralloc.c: include "dlmalloc.h" or <malloc.h> when necessary

	* dlmalloc.c, dlmalloc.h: use Doug Lea's malloc instead of GNU
	malloc, it seems to use a lot less memory
	* stringmem.c, stringmem.h: removed these two files, all
	allocation is done by standard malloc now, dlmalloc.c seems to
	handle it a lot better..

	* buffers.c, edit.c, edit.h, find.c, jade.h, lisp.c, lisp.h,
	lispcmds.c, main.c, misc.c, streams.c, unix_defs.c, unix_dl.c,
	unix_main.c, unix_processes.c, values.c, windows.c, x11_main.c,
	x11_misc.c: use sys_alloc (i.e. malloc) instead of sm_alloc or
	str_alloc (and other associated functions)

1998-10-25  John Harper  <john@dcs.warwick.ac.uk>

	* ralloc.c: more fixes in non-emacs section for when
	DOUG_LEA_MALLOC isn't defined (and therefore using gmalloc)

1998-10-24  John Harper  <john@dcs.warwick.ac.uk>

	* Makefile.in: use the JADE_LIBOBJS variable, extra objects for
	the jade[d] binary

	* edit.c: switch on definition USE_R_ALLOC for whether or not
	to use the relocating allocator for line arrays

	* ralloc.c: in non-emacs section, include <config.h> when
	HAVE_CONFIG_H is defined

	* unix_main.c (sys_realloc): new function

1998-10-23  John Harper  <john@dcs.warwick.ac.uk>

	* edit.c: use GNU malloc's r_alloc relocating allocator for the
	buffer line arrays (the tx_Lines field)
	* streams.c, regjade.c, movement.c, glyphs.c, files.c,
	editcommands.c, edit.c: remove all caching of the tx_Lines
	field, the relocating malloc would screw this up

	* values.c (gc_inhibit): removed this ill-advised feature (I
	thought this the reason that the memory usage increased
	massively sometimes--it's not, but it's a Good Thing) Anyway,
	the effect of removing this variable is that all functions that
	call stream_(getc|ungetc|putc|puts) must protect themselves
	against a garbage collection (since a stream may be a Lisp
	function)

	* unix_processes.c, streams.c, main.c, lispmach.c, lisp.h,
	lisp.c, keys.c: added more gc protection for the loss of
	gc_inhibit

1998-10-19  John Harper  <john@dcs.warwick.ac.uk>

	* faces.c (mark_glyph_buf_faces): ignore GA_Garbage attributes

	* edit.c (MAX_SPARE_LINES, ALLOC_SPARE_LINES): separated the
	definitions of these two constants. Also increased both of them
	(M_S_L by more than A_S_L though)

1998-10-18  John Harper  <john@dcs.warwick.ac.uk>

	* debug-buffer.c: on linux, undef DB_RESOLVE_SYMBOLS for the
	time being--it crashes on my system (egcs-1.1/glibc-2.0.6)
	(db_print_backtrace): changed output format, only look for at
	most eight frames, and workaround for a egcs/linux bug

1998-10-15  John Harper  <john@dcs.warwick.ac.uk>

	* jade.h: describe the three preprocessor symbols noted below,
	only DB_RESOLVE_SYMBOLS is set by default

	* debug-buffer.c (db_print_backtrace): print symbols instead of
	addresses when DB_RESOLVE_SYMBOLS is defined
	(db_return_address): new function, try to return the return
	address of the calling function

	* unix_main.c: when DEBUG_SYS_ALLOC is defined, record all
	outstanding memory allocations. On exit, print any that are
	still unfreed. Also define a function unix-print-allocations
	that does the same thing
	(fatal_error_handler): print the C backtrace

	* unix_dl.c (find_c_symbol): function to look up the name of
	the closest symbol preceding a specified address

	* edit.h, edit.c, buffers.c: only give each buffer it's own
	allocation pool if STRINGPOOL_PER_BUFFER is defined

1998-10-13  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (cmd_format): recognize the %X format (doh!)

	* views.c (format_mode_string): added `%m' format, represents
	the state of the marked block

	* value.h (VALUE_BITS): defined as PTR_SIZED_INT_BITS
	* main.c (main): validate PTR_SIZED_INT_BITS at startup
	* lisp.h (LISP_INT_BITS): define from VALUE_BITS, don't assume
	32-bit VALUEs
	* misc.c (cmd_random): handle case where RAND_MAX is too small
	to get all random bits in a single call to rand(). Also, prefer
	lrand48() over rand() if it's available

1998-10-12  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (sys_file_modes_as_string): use stat_file
	directly instead of calling sys_file_modes which masks out all
	but the permission bits

	* unix_files.c (sys_delete_file): use `unlink' instead of
	`remove'. This means it won't allow the deletion of directories
	(sys_make_directory, sys_delete_directory): new functions 

	* files.c (cmd_make_directory, cmd_delete_directory): new
	functions, both have file-handler names associated with them

	* files.c (read_file_into_tx): don't store the average line
	length of the previous file read. Instead, defer predicting the
	expected number of lines until N lines of the new file have
	been read. This seems to drastically reduce the memory needed
	to read large files

1998-10-10  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (cmd_random): new function

1998-10-08  John Harper  <john@dcs.warwick.ac.uk>

	* editcommands.c (cmd_insert): when POSITION isn't specified
	but BUFFER is, use the position of the cursor in BUFFER, not in
	the current view

1998-10-06  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (format_mode_string): fix printing percentages when
	buffer is narrowed

1998-10-04  John Harper  <john@dcs.warwick.ac.uk>

	* debug-buffer.c (db_print_backtrace): minor bug fix

	* commands.c (cmd_call_command): reinitialise the
	current-prefix-arg before calling the actual command

1998-09-21  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, bytecodes.h: changed op-set and op-fset to use
	the CALL_2 macro. This means that there arguments are in the
	reverse order to what they used to be, and they leave a value
	on the stack

	* extent.c (find_extent): when searching the cache for
	"near-enough" extents, use the global position of the cached
	extent, not the position local to its parent
	(cmd_move_extent): use unlink_extent not several calls to
	unlink_extent_fragment
	(adjust_extents_XX): more fixes to these functions, in
	addition, make sure that they invalidate the cache

1998-09-17  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (cmd_format): make the "0" flag work with the %s
	format

1998-09-13  John Harper  <john@dcs.warwick.ac.uk>

	* x11_windows.c (sys_draw_glyphs): when drawing underlines,
	draw one less pixel than before

1998-09-10  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (sys_sit_for): only redisplay if the timeout
	is greater than zero

1998-09-09  John Harper  <john@dcs.warwick.ac.uk>

	* extent.c (insert_extent): when chaining frags together, do it
	properly

1998-09-08  John Harper  <john@dcs.warwick.ac.uk>

	* extent.c (extent_cmp): only compare the two objects if they
	have the same type (i.e. both extents)

1998-09-06  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (get_main_options): added `-batch' option
	(inner_main): if in batch mode, exit after executing the
	initialisation script
	* x11_windows.c (sys_new_window): if in batch mode, don't map
	the window

	* x11_main.c (x11_open_display): call sys_recolor_cursor

	* debug-buffer.c (db_print_frame): renamed as
	`db_print_backtrace', changed a few things

1998-09-04  John Harper  <john@dcs.warwick.ac.uk>

	* faces.c (mouse-cursor-face): new variable
	* x11_main.c (sys_recolor_cursor): new function

	* faces.c (mark_merged_faces): mark both glyph buffers
	(faces_init): check for success of colour allocations,
	returning failure if unsuccessful

	* main.c (common_db): debug buffer for misc. uses
	(inner_main): move faces_init later, move the error printing
	code later so it catches more errors (not just from the init
	script)

	* redisplay.c (redisplay_lock): mutex variable to prevent
	redisplay being entered more than once concurrently

	* x11_main.c: added "-visual" option and "visual" resource to
	allow the visual to be specified
	(use_options): if specified, find the named visual with the
	most bitplanes. Allocate a colormap when using a non-default
	visual
	(sys_make_color): use the first x11_display in the list
	(x11_handle_async_input): only do anything if redisplay_lock
	isn't set

	* x11_windows.c (sys_new_window): use XCreateWindow so the
	visual may be specified

	* x11_windowsys.h (struct x11_display): added `visual', `depth'
	and `colormap' fields

	* unix_processes.c (get_pty): possibly check both /dev/ptmx and
	/dev/ptyXX (if they both exist), in that order

	* debug-buffer.c (db_print_frame): new function, print the
	current call backtrace (gcc only)
	(db_spew): ignore buffer if empty

1998-09-02  John Harper  <john@dcs.warwick.ac.uk>

	* edit.h (Merged_Face): new structure, pared down version of
	Lisp_Face, used to amalgamate face attributes from the various
	source faces for each character
	(FACEFF_INVERT, FACEFF_BOXED): new face attributes, used for
	drawing the cursor (and its ghosting)
	(WIN): new field `w_MergedFaces', a table of the actual faces
	used for drawing in this window. Currently it's limited to 64
	entries

	* faces.c (cmd_make_face): no longers copies from a source
	face, now all faces are created equal (and empty)
	(cmd_delete_face, mark_faces, cmd_face_id): deleted, no longer
	needed now faces don't have id's associated with them
	(cmd_set_face_attribute, cmd_face_attribute): new attributes
	`inverted' and `boxed'
	(merge_faces): new function, compute a face for an extent
	(get_face_id): new function, compute a face from a face
	(mark_merged_faces): new function

	* glyphs.c (make_window_glyphs, make_message_glyphs): support
	merged faces

	* values.c (cmd_garbage_collect): call mark_merge_faces in each
	window

	* x11_windows.c: support merged faces

	* x11_main.c (x11_free_dpy_colors): fix infinite loop bug

	* unix_processes.c (cmd_accept_process_output): check if
	there's any queued notifications as well as SIGCHLDs before
	waiting for output

1998-09-01  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (cmd_accept_process_output): accept
	termination notifications as well as stream output

1998-08-30  John Harper  <john@dcs.warwick.ac.uk>

	* glyphs.c (make_window_glyphs): reload the glyph-table each
	time the current extent changes

1998-08-29  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (cmd_set_status_message): deleted this function
	* edit.h (VW): deleted vw_StatusOverride field

	* extent.c (cmd_extent_get, cmd_extent_put, cmd_extent_set):
	moved the EXTENT argument to be first instead of last

1998-08-28  John Harper  <john@dcs.warwick.ac.uk>

	* main.c (on_idle): only call idle-hook once per idle period

	* extent.c: various fixes, including reverting the last change
	to unlink_extent_recursively. Mostly in the adjust_extents_X
	functions

	* extent.c (unlink_extent_recursively): fixed to unlink all
	children in each node, not just the first
	(make_global_extent, reset_global_extent): minor fixes, and
	remember to invalidate the cache
	(cmd_extent_get, cmd_extent_put): new special property
	`catch-variables'. When set this hijacks any attempts at
	setting non-permanent-local buffer-local symbols, and sets them
	in the innermost extent with this property
	(buffer_set_if_bound): function to implement the above
	* edit.h (EXTFF_CATCH_VARIABLES): new flag in Lisp_Extent
	* symbols.c (cmd_set): call buffer_set_if_bound if the symbol
	has the SF_BUFFER_LOCAL property

	* editcommands.c (cmd_clear_buffer): don't call
	reset_global_extent until _after_ clearing the buffer


1998-08-27  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (update-status-buffer): can now be customized through
	the mode-line-format variable, I copied most of Emacs syntax..

	* edit.h (tx_ModeName, tx_MinorModeNameList,
	tx_MinorModeNameString): deleted these elements
	* buffers.c (var_mode_name, var_minor_mode_names): deleted

	* extent.c (cmd_buffer_symbol_value): only search if
	SF_BUFFER_LOCAL is set

	* faces.c (cmd_set_face_attribute): if setting the background
	or foreground attributes, and the value is a string, call
	get-color with that string

	* editcommands.c (cmd_clear_buffer): call reset_global_extent

	* extent.c (extent_cmp): function to test if two fragments
	belong to the same `extent'. Used by the `equal' function
	(cmd_buffer_put): deleted
	(cmd_map_extents): map a function over all extents in an area
	(map_section_extents): protect against gc

1998-08-26  John Harper  <john@dcs.warwick.ac.uk>

	* extent.c (cmd_extent_start, cmd_extent_end): new functions
	(cmd_extent_put, cmd_extent_get): special property
	`local-variables' linked to the `locals' field
	(cmd_delete_extent): remove the option of deleting individual
	fragments; this shouldn't be visible

	* extent.c (find_extent): record cache miss statistics

	* x11_windows.c (sys_set_font): for the specified font, try to
	load a bold version as well. This is done by querying the full
	name, then replacing the third component by `bold'
	(sys_draw_glyphs): handle the bold attribute by swapping fonts
	* x11_windowsys.c (w_WindowSys): new field ws_BoldFont

	* extent.c: new file, extents allow property lists to be
	maintained for buffer regions (also local variables). In fact
	the old style buffer-local values are now a special case of
	this, stored in the root extent covering the entire buffer

	* faces.c: new file. Faces associate rendering attributes
	(colour, underline, bold, etc) with the attribute codes
	understood by the redisplay algorithm. This file also
	implements the colour type

	* glyphs.c: traverses the extent tree, modifying the output
	attribute as the `face' property changes

	* edit.c (read_only_pos, read_only_section): these functions
	replace the read_only function. In case an extent has a local
	value of the read-only variable

	* housekeeping.c: the adjust_marks_X functions now call a
	related adjust_extents_Y function, and also update the
	positions in the extent caches

	* symbols.c (cmd_symbol_value): look for buffer-local values in
	the current stack of extents (use the buffer-symbol-value
	function)
	(cmd_set): if setting a buffer-local value, only ever set the
	buffer-wide value (use the buffer-set function to set a value
	in a specified extent)
	(cmd_kill_all_local_variables, cmd_kill_local_variable): these
	only kill the buffer-wide values, not in inner extents

	* x11_main.c: support for colour allocation and management.
	Also added some more resources for the various colours that are
	always allocated on startup

	* x11_windowsys.h, views.c, values.c, streams.c, redisplay.c,
	main.c, lisp.h, keys.c, jade.h, files.c, editcommands.c,
	edit.h, commands.c, buffers.c, Makefile.in: misc changes

	* x11_windows.c (sys_draw_glyphs): support rendering from faces

	* regexp.c, regjade.c (regmatch): fix bug of not being
	case-insensitive (if necessary) after matching a star or plus

1998-08-19  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (lookup_event_name): minor change to limit the number
	of modifier bits tested

1998-08-18  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (lookup_event, lookup_event_name): moved from
	x11_keys.c and rewritten to be portable
	* x11_keys.c (sys_lookup_mod, sys_lookup_code,
	sys_lookup_mod_name, sys_lookup_code_name): new functions

1998-08-11  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (funcall): support for autoloading macros (but only if
	the list of arguments is still to be evaluated)

1998-08-10  John Harper  <john@dcs.warwick.ac.uk>

	* files.c (files_init): ADD_SUBR the make-file-from-stream
	function

1998-08-06  John Harper  <john@dcs.warwick.ac.uk>

	* buffers.c, debug-buffer.c, lisp.c, streams.c, symbols.c,
	unix_processes.c, views.c, windows.c: if possible, replace all
	unsafe uses of sprintf and vsprintf with snprintf and vsnprintf

1998-08-02  John Harper  <john@dcs.warwick.ac.uk>

	* buffers.c, edit.h: tx_FileName and tx_CanonicalFileName are
	now nil if unset, not the null string

1998-07-16  John Harper  <john@dcs.warwick.ac.uk>

	* x11_windowsys.h (struct x11_display): added last_click and
	last_click_button fields, for tracking double-clicks
	* x11_keys.c (translate_event): now takes an x11_display
	structure as an extra argument, only accepts double clicks if
	they're from the _same_ mouse button as the first click
	* x11_main.c: pass extra arg to translate_event

1998-07-12  John Harper  <john@dcs.warwick.ac.uk>

	* redisplay.c (patch_display): fix warning about relative
	precedence of && and || operators

	* x11_main.c (x11_handle_input): when using WINFF_PRESERVING,
	set it in all windows at once, since redisplay will update all
	windows (possibly losing their original contents)

1998-07-11  John Harper  <john@dcs.warwick.ac.uk>

	* edit.h (WIN): added new flag `WINFF_PRESERVING' used by
	asynchronous expose events to tell redisplay that the original
	window contents are being redrawn
	* x11_main.c (x11_handle_input): return whether or not a
	redisplay might be required, use WINFF_PRESERVING in
	asynchronous expose events
	* redisplay.c (cmd_redisplay): don't generate w_NewContents if
	WINFF_PRESERVING is set in the window

1998-07-10  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c: deleted all the SIGIO stuff
	(sys_poll_input): new function

	* lisp.h (TEST_INT, TEST_INT_GUTS, TEST_INT_PERIOD,
	TEST_INT_SLOW): expanded testing for interrupts
	* lisp.c (lisp_test_int_counter): new variable

	* x11_main.c (x11_handle_input): handle asynchronous input,
	just look for the events we want, C-g causes an interrupt
	(x11_handle_sync_input, x11_handle_async_input): new functions
	* x11_defs.h: define TEST_INT_GUTS as x11_handle_async_input()
	* unix_defs.h: remove the TEST_INT definition
	* unix_processes.c (run_process): use TEST_INT_SLOW to test for
	interrupts in synchronous processes

1998-07-04  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c (cmd_make_byte_code_subr): don't allocate the
	optional fourth and fifth elements unless they're required

	* unix_defs.h: remove EXEC_DIR define, just use JADE_EXEC_DIR

	* lispcmds.c: misc. changes to how the build directories and
	load-paths are set up (mainly, rename `X-dir' as `X-directory')

1998-07-03  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (dl-load-path, exec-directory): new variables for
	dynamic loading
	(cmd_load): support for dynamic loading (search dl-path after
	exhausting load-path)
	* unix_defs.h (EXEC_DIR): new definition
	* unix_dl.c: new file, use dlopen() for dynamic loading
	* values.c (cmd_garbage_collect): call mark_dl_data

	* lisp.h (DEFUN, DEFUN_INT, ADD_SUBR, ADD_SUBR_INT): cleaned up
	a bit

1998-07-01  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (mark_cached_regexps): fixed bug in chopping the list
	one element too late

Tue Jun 30 00:08:36 1998  John Harper  <john@dcs.warwick.ac.uk>

	* edit.h (enum Glyph_Attrs): added new _Rect variants of the
	four standard attributes. These are used to display `ghosted'
	cursors when the window is out of focus
	* glyphs.c, redisplay.c, x11_main.c, x11_windowsys.h: changes
	to support the above attributes

Sun Jun 28 16:05:45 1998  John Harper  <john@dcs.warwick.ac.uk>

	* windows.c (cmd_make_window): make a copy of the current
	window's buffer-list with copy-sequence; don't use it twice

Sat Jun 27 18:21:30 1998  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (compile_regexp): when searching the cache, before
	comparing strings, test if they're eq to one another

Fri Jun 26 16:54:54 1998  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (release_cached_regexp): renamed mark_cached_regexps,
	now marks the `regexp' field as it should
	(release_cached_regexps): new function, flushes the cache

	* find.c (compile_regexp, release_cached_regexp): instead of
	just caching a single compile regular expression, cache all of
	them. Then at gc, release as many of the least-recently-used
	regexps to satisfy a size limit (by default 1k). The hit ratios
	are immense
	(regexp-cache-control): function to set the size limit, and to
	report cache statistics

	* regexp.h, regexp.c (regexp): added regsize field, contains
	the true size of the compiled regular expression

Tue Jun 23 12:19:54 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (check_for_zombies): before closing all
	streams, check for any pending output
	(read_from_one_fd): only check errno==EINTR when the result
	from read is _less_ than zero (doh!)

	* buffers.c (cmd_make_mark): ensure that all fields of the new
	mark object are valid for when GC could occur

Mon Jun 22 10:48:48 1998  John Harper  <john@dcs.warwick.ac.uk>

	* glyphs.c (make_message_glyphs): when outputting messages that
	are longer than the window is wide, use more than the single
	bottommost line (when the minibuffer view has > 1 row)

Sun Jun 21 01:14:21 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (run_process): the new method of detecting
	when synchronous processes have exited still didn't work. Use
	the simple option, only exit when EOF on oth streams is
	received. This puts the onus on callers to redirect streams if
	necessary

	* unix_processes.c (cmd_call_process): ensure that the
	INPUT-FILE parameter is a _local_ file name (signal an error if
	it points to a remote file)

Fri Jun 19 00:06:20 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (sys_directory_file_name): don't remove the
	trailing slash in a single character string (i.e. "/")

Thu Jun 18 23:50:37 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (handle_input, cmd_sit_for, sys_accept_output):
	stop prematurely if a Lisp error is detected
	* unix_processes.c (proc_notification): stop on a Lisp error

Tue Jun 16 12:00:24 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (run_process): another attempt at fixing the
	process-exited-but-no-eof problem. Again, I think I may have it
	this time..

	* lispcmds.c (make-list, nth, nthcdr, make-vector, aset, aref,
	make-string, substring): check and signal negative arguments

	* stringmem.h, stringmem.c: add some more statistics: the
	number of _block_ allocations and frees

Sun Jun 14 11:53:36 1998  John Harper  <john@dcs.warwick.ac.uk>

	* files.c (cmd_copy_file): handle local->remote and
	remote->local copies correctly

Sat Jun 13 11:08:18 1998  John Harper  <john@dcs.warwick.ac.uk>

	* buffers.c (var_last_save_time): was expecting parameters in
	long-int format, not as a timestamp

	* unix_files.c (sys_file_modes): mask out all but the
	permission bits

Fri Jun 12 18:11:17 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (sys_expand_file_names): fix somes bugs when
	handling "." and ".." in otherwise empty strings

Thu Jun 11 16:44:42 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (wait_for_input, handle_input, sys_event_loop,
	sys_sit_for, sys_accept_input): use local copies of the master
	fd set to allow recursive use of sys_accept_input

Wed Jun 10 20:49:05 1998  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (cmd_sit_for): new function, wait for input or a
	timeout

	* unix_main.c (sys_event_loop): split into separate parts to
	allow new functions sys_sit_for and sys_accept_input

	* unix_processes.c (cmd_accept_process_output): new function,
	accept and process output, or timeout

Mon Jun  8 14:50:17 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (read_symbol): don't accept `0x' as a hex. number

	* lispcmds.c (cmd_mapc, cmd_mapcar): tidied up slightly

	* lispmach.c (cmd_jade_byte_code): ensure that _all_ functions
	that may end up calling Lisp code set the gc_stackbase slot

	* lisp.c (funcall): always add the current function to the
	backtrace stack. This simplifies gc protection, and provides
	better Lisp debugging information

Sat Jun  6 16:09:35 1998  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (kill_view): new function to clean up an unused but
	non-gc'd view
	(update_views_dimensions): dont crash when the window no longer
	has room for all views, instead delete views from the top of
	the window until they all fit
	(cmd_next_view, cmd_previous_view): don't ignore inactive
	minibuffer views

	* glyphs.c (make_window_glyphs, make_message_glyphs): handle
	minibuffer views with more than one line. Always output the
	minibuffer contents, then if necessary overwrite the _bottom_
	line with the window's message

	* views.c (cmd_view_position): new function, return the
	position in the window of a specified view
	(cmd_find_view_by_pos): include status line in view
	(cmd_translate_pos_to_view): do boundary checks, return nil if
	the position isn't in the specified view, return t if it's in
	the status line

Thu Jun  4 14:52:49 1998  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (mystrcmp, mystrrstrn, mystrrchrn): deleted these
	functions

	* misc.c (cmd_make_completion_string): renamed as
	`complete-string', added another arg FOLD-CASE

	* bytecodes.h, lisp.c, lispmach.c: excise all traces of the
	return function and the OP_RETURN instruction

	* buffers.c (cmd_all_buffers): new function, return a list of
	all existing buffers

Tue Jun  2 09:06:58 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_load): execute multiple matching items from
	the after-load-alist, not just the first

	* lispcmds.c (cmd_load): after using an entry in
	after-load-alist, delete it

	* main.c: add -no-rc to usage string

Sun May 31 19:13:39 1998  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (cmd_viewp): new function
	* windows.c (cmd_windowp): new function

Thu May 28 18:07:09 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.h (MAKE_TIME, GET_TIME, TIMEP): new way of storing
	timestamps (DAYS . SECONDS) instead of in long-integer form
	* unix_files.c (sys_file_modtime): use new timestamp format
	* misc.c (cmd_current_time, cmd_current_time_string): use new
	timestamp format
	(cmd_fix_time): new function to normalise the two parts of a
	timestamp

Mon May 25 17:11:32 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_if, cmd_and, cmd_or): reinstated these
	special forms

	* lisp.c (throw_value): declared as volatile. This stops the
	compiler optimizing tests out of existence

Sun May 24 10:24:16 1998  John Harper  <john@dcs.warwick.ac.uk>

	* edit.h (WIN): new field w_DisplayedName; the string currently
	displayed as the name of this window (the current buffer's
	status id string)
	* values.c (mark_value): mark w_DisplayedName
	* redisplay.c (cmd_redisplay): if a window's current buffer's
	status id is different to its displayed name, reset it
	* x11_windows.c (sys_set_win_name): new function, set the name
	of a window

	* x11_windows.c (sys_new_window): fix size_hints structure, set
	icon name to `jade', don't bother setting window name

	* x11_main.c: added a `-rv' option to give proper reverse video
	(get_resources): capitalise resource names when we search under
	"Jade" (I'm sure this is incorrect, but who knows). Also added
	a reverseVideo resource
	* x11_windows.c (sys_new_window): take note of -rv option

Sat May 23 11:28:01 1998  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (cmd_make_keytab, cmd_make_keylist): renamed as
	make-keymap and make-sparse-keymap. make-sparse-keymap takes an
	optional argument, a sparse keymap whose bindings should be
	inherited (achieved by consing the whole thing onto the end of
	the new keymap)
	(findkey, cmd_unbind_keys): cope with finding inherited keymaps
	in the middle of lists

	* keys.h, keys.c: changed the definition of KEY (the
	representation of a single binding) to (COMMAND . (CODE .
	MODS)) instead of the old [CODE MODS COMMAND]. The cons cell
	version uses less memory

Fri May 22 10:13:26 1998  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (next_keymap_path): changed semantics slightly, now
	it's LISP_NULL if unset, not nil. Also changed the Lisp
	variable next-keymap-path into a function

	* buffers.c (cmd_set_buffer_name): if the buffer-status-id
	looks as though it still just names the buffer, reset it to
	use the new name

Mon May 18 09:21:33 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_delete_if, cmd_delete_if_not): added gc
	protection to these functions; how long have they been unsafe?

Sun May 17 19:50:36 1998  John Harper  <john@dcs.warwick.ac.uk>

	* housekeeping.c (adjust_marks_split_y): fix this again, maybe
	this time I've got it right

Sat May 16 13:51:54 1998  John Harper  <john@dcs.warwick.ac.uk>

	* housekeeping.c (adjust_marks_split_y): wasn't looking at the
	column position to ignore positions before the split in the
	line

	* x11_misc.c (write_clip, read_clip): deleted, not used anymore

	* unix_files.c, ../config.h.in: remove definition and use of
	HAVE_REALPATH since we provide an implementation for when libc
	doesn't

Tue May 12 16:35:42 1998  John Harper  <john@dcs.warwick.ac.uk>

	* x11_keys.c (translate_mods): extra arg SUBST-META controlling
	whether or not to switch the designated meta modifier for the
	more general EV_MOD_META bit. Needed by x11_find_meta.

Sun May 10 21:19:48 1998  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (ev_mod_meta): deleted, replaced by window-local meta
	codes
	* keys.h (EV_MOD_FAKE_META): renamed as EV_MOD_META; this is
	now used internally, instead of its translation
	* x11_keys.c (translate_mods): if the translated set of
	modifiers includes the current window's meta mask, replace this
	bit by EV_MOD_META
	(sys_find_meta): renamed x11_find_meta, now takes a x11_display
	structure as its argument. It finds the Meta modifier for a
	particular display
	* x11_main.c (x11_open_display): call x11_find_meta and set the
	display's meta_mod field
	* x11_windowsys.h (struct x11_display): added meta_mod field,
	the Meta modifier for this display

Wed May  6 12:49:17 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (load_autoload): new parameter IS-VARIABLE for
	autoloading variables
	* lispcmds.c (cmd_defvar): set variables that are boundp, but
	whose value is an autoload definition
	* keys.c (lookup_binding): works with autoloaded variables

	* unix_client.c (main): call make-window-on-display, not
	open-window-on-display for the -x and -X options

Tue May  5 10:29:45 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_call_hook): allow the HOOK argument to be a
	symbol or a list, not just a symbol

Mon May  4 12:12:53 1998  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (update_status_buffer): changed the layout of the
	status line again; also some kludgey attempts at catching
	buffer overruns

Sun May  3 12:20:21 1998  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (update_status_buffer): pad the gap between the
	tx_StatusId string and the mode details with hyphens not spaces

	* misc.c (cmd_version_and_build_string): renamed as
	build-id-string, doesn't have the version-string on the front,
	but does have the HOST_TYPE (i.e. i586-pc-gnu, or whatever) on
	the end

	* unix_main.c (fatal_signal_handler): minor changes to try and
	stop the infinite looping seen with Linux at times

Wed Apr 29 09:48:37 1998  John Harper  <john@dcs.warwick.ac.uk>

	* debug-buffer.c, redisplay.c: change malloc/free for
	sys_alloc/sys_free

	* undo.c (cmd_undo): when clearing the modified status, set
	tx_LastSaveChanges as well as tx_ProperSaveChanges

Tue Apr 28 15:57:54 1998  John Harper  <john@dcs.warwick.ac.uk>

	* Makefile.in: added files.o to list of dependencies

	* edit.h (TX): added tx_StatusId field, a string to display in
	the status line
	(VW): removed vw_StatusBuf and STATUS_BUFSIZ, added
	vw_StatusOverride, remove VWFF_CUSTOM_STATUS flag
	* buffers.c (cmd_make_buffer): set tx_StatusId to
	"Jade: BUFFER-NAME" by default
	(buffer-status-id): interface to tx_StatusId
	* glyphs.c (make_window_glyphs): change how
	update_status_buffer is called, now it formats straight into
	the glyph buffer
	* values.c (mark_value): add tx_StatusId and vw_StatusOverride
	* views.c (make_view): don't allocate vw_StatusBuf
	(update_status_buffer): changed dramatically, now it looks more
	like Emacs; still needs to be more customisable
	(cmd_set_status_message): changed for VW structure mods

	* symbols.c (cmd_put): fix how dumped plists are modified; cons
	onto their head any new values instead

Mon Apr 27 10:51:34 1998  John Harper  <john@dcs.warwick.ac.uk>

	* symbols.c (kill-all-local-variables): obey the
	`permanent-local' property of symbols

	* views.c (make_view): when copying the vw_BufferList, actually
	make a _copy_ using copy-sequence not just copy the pointer

Sun Apr 26 19:23:28 1998  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (make_view): minor changes to how we set up the view
	* windows.c (cmd_make_window, cmd_destroy_window): assume
	responsibilities of open-window and close-window.
	destroy-window renamed as delete-window, and split into two
	functions, delete_window, and cmd_delete_window. The Lisp
	variant calls save-and-quit if window_count==1
	(sym_make_window_hook): no longer passed an argument
	(sym_destroy_window_hook): renamed delete-window-hook
	(cmd_window_list): new function
	(sym_window_closed_hook): deleted
	* x11_windows.c (cmd_make_window_on_display): made interactive
	* x11_main.c (handle_event): call delete-window, not
	window-closed-hook

	* redisplay.c, glyphs.c: another attempt to fix a display bug

	* edit.h (TXFF_SPECIAL): deleted this flag

	* buffers.c (destroy-buffer): deleted this function, let
	buffers be garbage collected as other objects are
	(buffer-modified-p): don't look at the TXFF_SPECIAL flag
	(set-buffer-special, buffer-special-p): deleted

	* views.c (update_status_buffer): ignore TXFF_SPECIAL, give
	read-only flag higher priority than modified flag

Fri Apr 24 11:35:03 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (cmd_active_processes): new function, return
	a list of all active processes
	(proc_notification): when calling functions, now pass the
	process as the sole argument

	* unix_processes.c (mark_active_processes): function to mark
	any processes that are currently active
	* values.c (cmd_garbage_collect): call mark_active_processes
	when HAVE_SUBPROCESSES is defined. This stops executing
	processes with no references from disappearing

Wed Apr 22 17:21:07 1998  John Harper  <john@dcs.warwick.ac.uk>

	* views.c (make_view): try to initialise the vw_BufferList
	(cmd_make_view): renamed split-view, deleted the BUFFER
	parameter, made interactive. This replaces open-view
	(cmd_destroy_view): renamed delete-view, made interactive. This
	replaces close-view

Tue Apr 21 16:45:05 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (get_pty): minor change to order in which
	pty masters are searched

	* misc.c (cmd_sleep_for): new function, pauses for a specified
	time length
	* unix_main.c (sys_sleep_for): support for sleep-for

	* buffers.c, streams.c (mark_prin, file_prin): wasn't calling
	stream_puts correctly

Sat Apr 18 00:16:46 1998  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (buffer_reverse_strpbrk): when matching a newline, the
	position returned was one column too far to the left

	* unix_processes.c (run_process): when running synchronously,
	if the child exits before EOFs are received, allow a few more
	polls of input before exiting. Hopefully this should be enough
	to ensure that no final output from the process is missed. Of
	course, this means that putting a shell command into the
	background will take a few seconds to return

	* lispcmds.c (sym_jade_dir, sym_lisp_lib_dir,
	sym_site_lisp_dir): new pre-defined symbols
	(lispcmds_init): when defined, the environment variables
	JADEDIR, JADELISPLIB, JADESITELISP and JADEDOCFILE are used to
	initialise the locations of the corresponding files and
	directories
	* unix_defs.h (LISP_LIB_DIR, SITE_LISP_DIR, DOC_FILE): renamed
	each macro to ..._SUFFIX, removing the constant JADE_DIR prefix

Fri Apr 17 14:20:01 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c, lispmach.c, redisplay.c, symbols.c: add preprocessor
	magic from autoconf manual to handle alloca declaration
	* unix_main.c (sys_event_loop): when C_ALLOCA is defined call
	alloca(0) to garbage collect

	* files.c (cmd_canonical_file_name): call
	sys_canonical_file_name for unhandled files
	* unix_files.c (sys_canonical_file_name): new function, uses
	realpath to expand links in a file name
	(sys_expand_file_name): fix bug in expanding "foo/../bar"
	* unix_defs.h: prototype for realpath when HAVE_REALPATH isn't
	defined

	* Makefile.in: handle LIBOBJS and ALLOCA correctly, some
	cosmetic changes

Tue Apr  7 11:20:28 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (run_process): when running synchronously,
	look for the child exiting, as well as EOF on its output
	streams. If it does exit, stop and close all streams. This is
	to allow shell commands to be put into the background mainly
	(though they'll get a SIGPIPE if they do any output)

Mon Apr  6 09:26:30 1998  John Harper  <john@dcs.warwick.ac.uk>

	* glyphs.c (make_window_glyphs): reinitialise glyph_row each
	view; I think this may fix an intermittent bug in which the
	line after the end of the glyph buffer is accessed

Sat Apr  4 17:57:50 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_files.c (sys_file_symlink_p): fixed to use lstat() again
	instead of stat_file(), and therefore stat()
	(sys_file_modes_as_string): S and T bits had their case the
	wrong way around, now they're lowercase if the corresponding
	execute bit is also set, as in "ls -l"

Fri Apr  3 10:47:31 1998  John Harper  <john@dcs.warwick.ac.uk>

	* edit.h (glyph_buf): includes arrays of pointers to each line
	instead of the GLYPH_BUF_CODES and GLYPH_BUF_ATTRS macros
	* glyphs.c, redisplay.c: modifications for new glyph_buf
	structure
	* redisplay.c (hash_glyph_row): don't rotate, the hash values
	it generated weren't very well distributed. Go back to K=33

	* unix_server.c: if DEBUG_SERVER is defined generate trace of
	all server traffic into a debug buffer
	(server_accept_connection): set the fd returned from accept()
	to be _blocking_. I didn't realise that accepted connections
	inherit the characteristics of listening socket. This was the
	cause of the intermittent bug (a read returning EAGAIN when I
	didn't expect it)

	* unix_main.c (unix_set_fd_blocking): new function, opposite of
	unix_set_fd_nonblocking

	* jade.h: include <stdarg.h>

	* debug-buffer.c (db_printf, db_vprintf): split the old
	db_printf into these two functions

	* undo.c (undo_record_unmodified): function to call when a
	buffer is set as being unmodified; it deletes any previous
	"unmodified" mark in the undo list
	* buffers.c (cmd_set_buffer_modified): when STATUS is nil, call
	undo_record_unmodified

	* redisplay.c (hash_glyph_row): rotate the hash value instead
	of just shifting

Wed Apr  1 00:54:36 1998  John Harper  <john@dcs.warwick.ac.uk>

	* files.c: new file, groups together all functions dealing with
	files; also implements Emacs-like magic-file-names using the
	`file-handler-alist' variable
	* unix_files.c: new file, functions to implement the built-in
	file handler for files in the local filing system
	* lisp.h: changed Lisp_File structure slightly

	* buffers.c, edit.c, lispcmds.c, streams.c, unix_main.c,
	unix_processes.c, unix_server.c, values.c, x11_main.c:
	modifications to handle new file primitives. Mainly to deal
	with canonical names (to compare to files), and most
	importantly, ensuring that everything is gc-protected whilst
	calling any function in files.c that could invoke some Lisp
	code

	* edit.h (TX): added tx_CanonicalFileName field

	* find.c (push_regexp_data, pop_regexp_data): functions for
	preserving the regexp match data

	* jade.h: always include regexp.h

	* keys.c (eval_input_event): fix bug when inserting repeated
	string

	* lisp.c (cmd_add_doc_string, cmd_get_doc_string): deleted
	(call_lisp3, call_lisp4): new functions
	(funcall): guarantee that arguments will be gc-protected

	* lispcmds.c (sym_documentation_file): new variable
	(cmd_substring): moved here from misc.c

	* main.c: if an error occurs in startup, print it to stderr

	* misc.c: lots of reorganisation, including:
	(sym_operating_system, sym_window_system): replace
	x11-p, unix-p and amiga-p functions
	(system): deleted
	(getenv): deleted, now in environ.jl

	* unix_main.c (unix_set_fd_nonblocking, unix_set_fd_cloexec):
	new functions
	(sigio_handler): unused support for async input

	* unix_processes.c: use process-environment variable to give
	environ of each subprocess

Fri Mar 20 12:24:50 1998  John Harper  <john@dcs.warwick.ac.uk>

	* x11_windowsys.h (CLEAR_GLYPHS, FILL_GLYPHS): new macros, for
	clearing and filling a horizontal sequence of glyphs in a window

	* redisplay.c (redisplay_do_draw): while scanning a line for
	attribute changes, also check if the chunk to be drawn consists
	only of spaces. If so use the CLEAR_GLYPHS or FILL_GLYPHS
	macros to draw it

Thu Mar 19 14:54:39 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_client.c: two new options "-" and "--", for different
	methods of evaluating forms read from stdin. "-" is intended
	for interactive use, "--" for batch use

	* symbols.c (cmd_makunbound, cmd_fmakunbound): don't set slots
	to LISP_NULL, but to void_value

Tue Mar 17 11:11:29 1998  John Harper  <john@dcs.warwick.ac.uk>

	* glyphs.c (recenter_cursor): fixed a couple of bugs
	(line_glyph_length): added special case for direct-mapped
	cache; currently this is what's being used

Mon Mar 16 10:47:21 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, bytecodes.h (OP_FILTER, OP_MACROP, OP_BYTECODEP):
	new opcodes

	* lispcmds.c (cmd_filter): new function, similar to the Miranda
	function of the same name, construct a new list containing
	elements of an input list that satisfy a predicate

	* x11_keys.c (translate_event): was always using the display at
	the head of the x11_display_list to convert keycodes to
	keysyms; now use the display that the event came from

Sat Mar 14 14:58:34 1998  John Harper  <john@dcs.warwick.ac.uk>

	* streams.c (cmd_format, sym_format_hooks_alist): big overhaul
	of the format function. Now flags work with most conversions,
	and user-defined conversions are possible via the
	format-hooks-alist variable

	* unix_main.c (cmd_file_symlink_p): was using stat() instead of
	lstat() to get the file's attributes

Fri Mar 13 15:06:28 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_main.c (cmd_file_modes_as_string): returns an "ls -l"
	type attribute string

	* misc.c (cmd_file_name_as_directory, cmd_directory_file_name):
	new functions
	* unix_main.c (file_name_as_directory, directory_file_name):
	support for the above

	* misc.c (cmd_current_time_string): now takes two optional
	arguments, a timestamp and a strftime() style format string

	* lisp.c (bindlambdalist): fixed the bug of binding like let*
	instead of like let

Tue Mar 10 20:23:41 1998  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (cmd_search_forward, cmd_search_backward): fixed
	case-insensitive matching (first character was always being
	compared sensitively)

Mon Mar  9 09:29:23 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (get_pty, run_process): handle not being able
	to get a pty gracefully (i.e. don't dump core)

	* regexp.c (regmatch_string): new function, basically a wrapper
	for regtry(), i.e. compares a regexp to a string with no
	searching

	* find.c (cmd_string_match): swapped the order of the NOCASEP
	and START args (now START is first). Should really make NOCASEP
	a variable
	(cmd_string_looking_at): new function, matches a regexp at one
	place and one place only in a string

Tue Mar  3 22:13:22 1998  John Harper  <john@dcs.warwick.ac.uk>

	* redisplay.c (COMPARE_FAST_AND_LOOSE): when defined as
	non-zero (the default) just compare hash codes to see if two
	lines are the same, don't bother actually comparing them byte
	by byte
	(hash_glyph_row): changed how the attrs are included
	(redisplay_message): hash the message line

Mon Mar  2 11:10:59 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_client.c: new options "-x DISPLAY" and "-X" to simplify
	opening a window to the server process

	* x11_windowsys.h (struct x11_display): data structure to track
	per-Display data
	(WINDOW_XDPY): macro giving a pointer to the display data of a
	partcular window
	* x11_main.c (x11_open_display, x11_close_display,
	x11_close_all_displays): functions for managing Displays
	(x11_display_list): list of all open Display connections
	* x11_windows.c: misc. updates to handle multiple displays
	(cmd_make_window_on_display): low-level function to open a
	window on a specified display (currently always opening a new
	display connection)
	* x11_keys.c: misc. updates to handle multiple displays; needs
	to maintain individual Meta mappings per display
	* x11_misc.c: misc. updates to handle multiple displays

	* windows.c (cmd_destroy_window): call sys_unset_font before
	closing the window

	* unix_server.c: now accepts different types of requests, the
	old find-file, eval, and end-of-session. Also, the connection
	isn't closed after a file has been replied to
	* unix_client.c: expanded to handle the new multiple request
	server. New options -f, -e, and -q
	* unix_defs.h (enum server_request): defines the request types
	for the client/server stuff

	* values.c (STATIC_ROOTS): increased from 128 to 160

Sat Feb 28 15:38:33 1998  John Harper  <john@dcs.warwick.ac.uk>

	* keys.c (eval_input_event): always clear prefix-arg

Fri Feb 27 12:31:48 1998  John Harper  <john@dcs.warwick.ac.uk>

	* movement.c (cmd_center_display): changed semantics of
	argument, positive args now count from zero, not one

	* command.c (cmd_call_command): two new flags, @ and !. If the
	result of the command is a position, and @ is set, move the
	cursor to this position before returning. If ! is set, before
	moving the cursor call the lisp function set-auto-mark

	* movement.c (cmd_end_of_buffer, cmd_start_of_buffer,
	cmd_end_of_line, cmd_start_of_line, cmd_forward_line,
	cmd_forward_char, cmd_forward_tab, cmd_find_matching_bracket):
	use new interactive decl flags @ and !

Tue Feb 24 12:16:47 1998  John Harper  <john@dcs.warwick.ac.uk>

	* redisplay.c (redisplay_message): new function, draws the
	message line in the specified window
	* glyphs.c (make_message_glyphs): new function, outputs the
	glyphs needed to draw the message in the specified window
	* windows.c, lisp.c: when the message has to be redisplayed
	immediately call redisplay_message() instead of doing a full
	redisplay

	* views.c (cmd_get_buffer_view): new function, find a view
	displaying a specified buffer

Thu Feb 19 00:01:16 1998  John Harper  <john@dcs.warwick.ac.uk>

	* Makefile.in: added @top_srcdir@/lib-src to VPATH

	* lispcmds.c: added prototypes for all DEFSYMS

	* windows.c (no_message): deleted, it was never called

	* glyphs.c (recenter_cursor): global instead of static
	* views.c (cmd_view_origin): calls recenter_cursor() to ensure
	that the returned value will be correct after the next
	redisplay (assuming that the current configuration still
	exists)

	* buffers.c (swap_buffer, swap_buffer_tmp): swap_buffer_tmp
	deleted, this was almost the same as swap_buffer anyway. Added
	code to remove a message that may obscure a newly activated
	minibuffer

	* keys.c (eval_input_event): modifications to allow prefix
	arguments to work with unbound events (i.e. they insert ARG
	copies of whatever they would normally insert)
	(unbound-key-hook): this is now an `or' style hook

	* glyphs.c (make_window_glyphs): only display a cursor in the
	current window

	* lisp.c (readl): accept the various backquote characters, that
	is `X => (backquote X), ,@X => (backquote-splice X), and
	,X => (backquote-unquote X)

Wed Feb 18 22:52:13 1998  John Harper  <john@dcs.warwick.ac.uk>

	* glyphs.c (gl_cache_entry_t, gl_cache, line_glyph_length):
	structures and functions for caching the number of glyphs in a
	line. Currently a 2-way associative 200 entry cache (indexed by
	line number)
	(string_glyph_length): renamed as uncached_string_glyph_length
	(make_window_glyphs): much work to support line wrapping as
	well as the old truncation display method
	(skip_glyph_rows_forwards, skip_glyph_rows_backwards): new
	functions for moving through a buffer as it would be displayed
	on screen
	(recenter_cursor): new function to handle the display origin of
	each view. Replaces the old resync_xy()
	(calc_cursor_offset): renamed as get_cursor_column(), now
	actually returns the column number
	(char_glyphs): deleted
	(adjust_cursor_to_glyph): replaced by set_cursor_vertically,
	this takes a view and a line number and moves the cursor to
	that line trying to keep the original horizontal screen
	position
	(cmd_display_to_char_pos, cmd_char_to_display_pos): translate
	between screen coordinates in a view and character positions

  	* redisplay.c (cmd_redisplay): don't call resync_xy()

	* movement.c (sym_next_screen_context_lines): overlap for when
	scrolling by the screenful
	(cmd_center_display, cmd_forward_line): updated for wrapped
	lines
	(move_down_screens, move_up_screens): deleted
	(cmd_next_screen, cmd_prev_screen): updated for wrapped lines,
	also moves the cursor relative to the screen origin, and may
	leave some context
	(cmd_mouse_pos): deleted, now implemented in edit.jl

	* housekeeping.c (resync_xy, set_start_col, set_start_line):
	all deleted

	* editcommands.c (cmd_indent_to): call get_cursor_column()
	instead of calc_cursor_offset()

	* edit.h (Mark): type renamed as Lisp_Mark, removed mk_ prefix
	from field names, removed MKFF_RESIDENT flag, implied by type
	of "file" field. Added MARK_IS_RESIDENT_P() macro
	(TXFF_DONT_WRAP_LINES): flag controlling whether long lines are
	truncated or wrapped when rendering. TX_WRAP_LINES_P() accessor
	macro.
	(VWFF_AT_BOTTOM): flag set by recenter_cursor() when the end of
	the buffer is displayed by the view

	* edit.c (check_row): new function, similar to check_line but
	takes a line number instead of a position

	* buffers.c (cmd_in_restriction_p): deleted
	(cmd_buffer_restricted_p): new function, returns t when the
	buffer is restricted to less than its full size
	(var_truncate_lines): new variable, controls the
	TXFF_DONT_WRAP_LINES flag
	(cmd_set_mark): deleted
	(cmd_set_mark_pos, cmd_set_mark_file): new functions

	* windows.c (cmd_make_window): call make-window-hook

	* views.c (cmd_destroy_view): updated for line wrapping (use
	skip_glyph_rows functions)
	(update_status_buffer): use VWFF_AT_BOTTOM for position flag
	(cmd_translate_pos_to_view): updated for new display regime

	* unix_server: replace all occurrences of server-open-file with
	server-find-file

	* symbols.c (symbols_init): explicitly initialise the function
	value of sym_nil in case it was dumped (and left as 0)

	* lispcmds.c (cmd_list): add test for interrupt
	(cmd_list_star): new function, creates a dotted list
	(cmd_atom): somehow I'd inverted the meaning of this predicate
	(cmd_macrop): new function
	(cmd_subrp): don't treat bytecode objects as subrs

	* Makefile.in: use substitution opt_enable_dumped instead of
	enable_dumped

Thu Feb 12 18:30:19 1998  John Harper  <john@dcs.warwick.ac.uk>

	* jade.h, io.c, lispcmds.c, lispmach.c, redisplay.c, regexp.c,
	symbols.c, undo.c, unix_client.c, unix_main.c,
	unix_processes.c, unix_server.c, x11_defs.h, x11_keys.c,
	x11_misc.c: changes to work with autoconf/configure managed
	configuration process

	* memcmp.c: new file, defines the memcmp() library function in
	case its not in libc

	* unix_processes.c (get_pty): support for /dev/ptmx style
	opening of pseudo terminals

	* glyphs.c (make_window_glyphs): a lot of reorganisation,
	mostly aimed at simplifying things

	* housekeeping.c (resync_y): fixed gaps at the end of buffers
	not being suppressed. It now goes the other way, and is
	possibly a bit too eager now, but I'll see if I get used to
	it.. (see the function for a comment)

Tue Feb 10 11:15:06 1998  John Harper  <john@dcs.warwick.ac.uk>

	* glyphs.c (make_window_glyphs): fix for rectangular blocks not
	working in glyph coordinates

Thu Feb  5 17:46:50 1998  John Harper  <john@dcs.warwick.ac.uk>

	* glyphs.c (make_window_glyphs): fix for block ending past last
	displayed column

	* views.c (update_status_buffer): fix for "All of" not being
	displayed when the last line in the buffer falls exactly on the
	last line of the view

Mon Feb  2 00:05:12 1998  John Harper  <john@dcs.warwick.ac.uk>

	* edit.h (TX): deleted tx_LastLogical? and tx_Mod?, also
	removed the flags TXFF_REFRESH_ALL and TXFF_REFRESH_STATUS.
	The functions flag_insertion, flag_deletion, and
	flag_modification are now macros that simply bump the buffer's
	change counter.
	(VW): removed vw_LastDisplayOrigin and vw_LastBlock?. Changed
	vw_BlockStatus to an int. Replaced vw_?Pix by vw_FirstX and
	vw_FirstY. Deleted VWFF_FORCE_REFRESH, VWFF_REFRESH_BLOCK, and
	VWFF_REFRESH_STATUS flags.
	(glyph_code, glyph_attr, enum Glyph_Attrs, glyph_buf): types
	for glyph buffers
	(WIN): w_Content and w_NewContent, old and new glyph buffers.
	Deleted w_FontStart, not used anywhere.

	* glyphs.c (make_glyph_array, expand_tabs): deleted
	(make_window_glyphs): new function, out of the ashes of
	make_glyph_array(), it creates the glyph buffer of a window
	(GlyphTable): changed name to glyph_table_t

	* redisplay.c: new file, provides a general redisplay algorithm
	using diffing of glyph buffers to decide what to redraw

	* x11_windowsys.h: all macros deleted, replaced by DRAW_GLYPHS
	and COPY_GLYPHS

	* main.c (inner_main): call redisplay_init instead of
	refresh_init, don't control cursor
	(cmd_recursive_edit): don't mess with cursor

	* unix_main.c (event_loop): don't control refresh explicitly,
	just call cmd_redisplay() once per loop

	* views.c (recalc_pixel_measures): renamed recalc_measures
	(cmd_destroy_view): when there's no preceding view to give the
	space to, ensure that the following view is ``scrolled''
	upwards such that no display scrolling takes place	
	(var_max_scroll): deleted

	* windows.c: allocation/deallocation of glyph buffers
	(update_window_dimensions): centralised function to call when
	the window changes size

	* x11_main.c: handle Expose events by marking that a rectangle
	of the current glyph buffer is garbage. Also handle
	GraphicsExpose here now
	(sys_flush_output): deleted, call cmd_flush_output() instead

	* x11_windows.c: minor changes
	* edit.c (pos_in_block, page_in_block, line_in_block,
	set_block_refresh): all deleted
	* editcommands.c: don't call set_block_refresh
	* housekeeping.c: don't update vw_LastBlock? or tx_Mod?
	positions since they don't exist anymore
	* buffers.c, io.c, streams.c: don't set any of the explicit
	refresh flags anymore, since they were removed
	* values.c (make_value): don't mark tx_Mod? or vw_LastBlock? or
	vw_LastDisplayOrigin
	* movement.c (cmd_mouse_pos): use vw_FirstY instead of
	vw_TopPix
	* refresh.c, render.c, x11_render.c: deleted
	* unix_processes.c, unix_server.c: don't control cursor anymore

	* lisp.c: don't call refresh_message(); cmd_flush_output() to
	get a message displayed, just cmd_redisplay(), also don't turn
	cursor on or off, or call refresh_X
	* lisp.h (VGLYPHTAB): new name for underlying typedef

	* keys.c (usekey): renamed as eval_input_event(). Also, don't
	do anything to handle the display

Sun Jan 25 14:03:09 1998  John Harper  <john@dcs.warwick.ac.uk>

	* io.c (cmd_write_buffer_contents): don't call check_section to
	check the START and END arguments since it looks at the current
	restriction, not what is required, so do it manually. Also try
	to defend against START and END pointing past the end of their
	respective lines

Sat Jan 24 16:46:25 1998  John Harper  <john@dcs.warwick.ac.uk>

	* io.c (cmd_read_buffer): renamed as read-file-contents
	(cmd_write_buffer): deleted
	(cmd_write_buffer_area): renamed as write-buffer-contents.
	Moved the FILE argument to be first, START and END are now
	optional, by default the start and end of the current buffer
	(ignoring restrictions)
	(cmd_insert_file_contents): new function
	* unix_processes.c (cmd_call_process_area): calls
	cmd_write_buffer_contents now

	* jade.h: moved CONCAT() and QUOTE() to the top of the file,
	include "unix_defs.h", "x11_defs.h" and "amiga_defs.h" (when
	necessary) instead of in the config file. Also the
	configuration file is defined by the macro CONFIG_FILE (it will
	be quoted)

	* lisp.c (eval_lambda, funcall): handle throw to 'defun (i.e. a
	non-local return) properly
	(cmd_condition_case): ensure that throw_value == LISP_NULL
	while chasing down the list of handlers

	* lisp.h: definitions for dumped Lisp constants
	(CONS_WRITABLE_P): true when the cons cell arg is not in
	read-only storage
	(V_Compiled): set to 7
	(VECTOR_WRITABLE_P): defined in terms of dumped_text_start and
	dumped_text_end
	(COMPILED_WRITABLE_P): deleted, use VECTOR_W_P
	(dumped_X_{start,end}): prototypes for the symbols created by
	dump.jl
	(DUMPED_SYM_NIL): a pointer to the dumped nil symbol

	* symbols.c (OB_NIL): now defined as &void_object
	(symbols_sweep): treat all dumped symbols as an extra
	allocation block (albeit one in which unused symbols are never
	put on the free-list)
	(cmd_put): check that cons cell being updated is
	CONS_WRITABLE_P, if not allocate a new one
	(pre_symbols_init): new function to create the obarray

	* lispcmds.c (cmd_nconc, cmd_rplaca, cmd_rplacd, cmd_nreverse):
	check if CONS_WRITABLE_P(), signal setting-constant error if
	not
	(cmd_load): check for ".jld" suffix first when DUMPED is
	defined, these are the files of non-constant forms output by
	dump.jl
	(cmd_subr_documentation): for built-in subroutines, don't
	return the string from the DOC file, just its position

	* lispmach.c (cmd_jade_byte_code): in OP_ERRORPRO don't do one
	to many cdrs when finding the error data

	* main.c (main): mods for dumped constants. Call
	pre_values_init() and pre_symbols_init(), then dumped_init()
	when DUMPED is defined, then the normal stuff

	* regexp.h, regjade.c, regsub.c: replace #ifdef BUILD_JADE by
	#ifdef JADE. Also moved to the main src directory so remove ..
	in included file names.

	* streams.c (cmd_open, cmd_close): renamed as open-file and
	close-file
	(cmd_seek_file): new function, a combination of ftell() and
	fseek()
	(cmd_read_file_until): deleted

	* unix_main.c (read_file): deleted

	* unix_processes.c (run_process): set close-on-exec for
	pr_Stderr. Order of interrupt signals for synchronous processes
	is not SIGINT, SIGTERM, SIGKILL.

	* values.c (string_cmp): use memcmp to compare strings, not
	strcmp which exits on finding a zero byte, doh!
	(mark_value): don't mark read-only cons or vector cells
	(values_init): now called pre_values_init
	(values_init2): now called values_init
	(dumped_init): function to get all dumped data ready for use,
	basically interns all symbols, setting NULL pointers they
	contain to nil. Also initialises the allocated_X counts

	* io.c (cmd_read_file, cmd_write_file): deleted these
	functions

Mon Jan 19 00:32:48 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.h (Lisp_Compiled): changed to allow a minimum of four
	items in the vector, also changed some of the related macros

	* lispcmds.c (cmd_bytecodep): new function
	(cmd_defun, cmd_defmacro): now accept bytecode objects as
	second argument

	* lispmach.c (cmd_jade_byte_code): check when handling
	exceptions that throw_value != LISP_NULL

	* find.c (compile_regexp): check for NULL value of last program

	* buffers.c, commands.c, editcommands.c, find.c, keys.c,
	lisp.c, lispmach.c, main.c, symbols.c, undo.c,
	unix_processes.c, unix_server.c, views.c, windows.c,
	x11_misc.c: made all DEFSYM's global and ensured that each
	DEFSYM is on a separate line.

	* lisp.h (VECTOR_WRITABLE_P): check if a vector is in writable
	memory or not
	* lispcmds.c (cmd_aset): check when modifying a vector that the
	cell8 static bit isn't set. For this and (now) for modifying a
	static string the setting-constant error is raised

	* lispmach.c (cmd_jade_byte_code): use a single switch
	statement, instead of differentiating between those
	instructions with embedded arguments, and those without.

Sun Jan 18 00:10:41 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.h (Lisp_Compiled): new type, a five-element vector
	representing a byte code subroutine
	(Lisp_Cell): given each cell8 type a `static' bit as bit 7,
	this also doubles the maximum size of strings

	* values.c: minor changes for new type

	* streams.c (stream_put_cntl): deleted since it was never used

	* lispmach.c (cmd_jade_byte_code): calling byte code subrs
	(cmd_make_byte_code_subr): new function

	* lispcmds.c: updated to support byte code subrs in most places
	that vectors are supported

	* lisp.c: big changes: support for byte code subrs, eval now
	uses funcall to call functions, only macroexpands expands
	macros, #[...] reads and prints as a byte code object, cleaned
	up what is protected from garbage collection, only funcall
	increments and checks max-lisp-depth..
	(print-escape-newlines): now called `print-escape', can also be
	set to produce octal escapes for _all_ non-printing characters

	* edit.c (free_line_buf): function version of FREE_LINE_BUF
	* io.c (read_tx): use free_line_buf() to free lines

	* commands.c: updated to handle byte code subrs

	* edit.h, edit.c, buffers.c, io.c: each buffer now gets its own
	StrMem pool

	* stringmem.c (sm_init): initialise more of the fields

	* stringmem.h, stringmem.c: new field in MemBucket structure,
	`mbu_FreeCount', contains the number of available objects in
	the buffer

	* lisp.h: Changed the VALUE format again. Now its:

	"Bit definitions for VALUE pointers. The lowest bit is always
	zero except during GC. If bit one is set the object is a 30-bit
	signed integer, with the data bits stored in the pointer as
	bits 2->31.

	If bit one is clear the VALUE is a pointer to a "cell", all
	objects apart from integers are represented by various types of
	cells. Every cell has a VALUE as its first element, the lowest
	bits of this VALUE define the actual type of the cell.

	If bit zero is unset, the cell is a cons, a pair of two
	values the car and the cdr (the GC mark bit of the cons is bit
	zero of the cdr).

	If bit zero is set the cell more type information is stored
	in bits 1->6, with bit 7 the mark bit."

Fri Jan 16 00:40:41 1998  John Harper  <john@dcs.warwick.ac.uk>

	* unix_misc.c: renamed as unix_main.c
	(register_input_fd, deregister_input_fd): functions to register
	that we need to listen for input on a file description, and the
	function to be called when input is available
	(event_loop): a totally general input loop using select(), made
	from old bits of x11_eventloop.c

	* x11_display.c: renamed as x11_main.c, inherited what's left
	of x11_eventloop.c
	(x11_handle_input): a function that's registered as the input
	handler for the X11 Display fd; does all event handling
	(sys_flush_output): a function called from event_loop() that
	just calls XFlush()	

	* main.c (on_idle): new function to move the idle actions out
	of the system-specific code
	(handle_input_exception): similar idea for handling of
	exceptions in low-level input loops
	(doconmsg, input_lock, cmd_input_lock): deleted all these
	remnants of Amigadom

	* unix_processes.c: uses [de]register_input_fd()
	(cmd_signal_process): deleted this function, it was ill-guided,
	instead define a function do_signal_command by which the Lisp
	functions that send signals are implemented

	* unix_server.c: uses [de]register_input_fd()

	* values.c (cmd_cons): _will_ return LISP_NULL if we are out of
	memory, this will break things further up the line..

Thu Jan 15 12:46:46 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_nth, cmd_nthcdr): these now check for interrupts

	* lisp.c (find_member_by_index, move_down_list): removed these
	functions, they were (almost) the same as nth and nthcdr

	* commands.c (interactive_spec, cmd_interactivep): don't use
	find_member_by_index() and move_down_list(), use nth and nthcdr
	instead.
	* streams.c (cmd_format): don't use ARG1 and ARG2 macros
	* lisp.h: removed ARG1-4 and ARGN macros

	* lisp.c (debug_on_error): made this into a normal variable,
	not a subr-variable type thing

	* misc.c (cmd_make_completion_string): cleaned up this function

	* lispcmds.c (cmd_function, cmd_return): removed, defined as a
	macro in lisp.jl
	(cmd_make_list): don't build the list front-to-back, ordering's
	not important
	(cmd_eval_hook, cmd_eval_hook2): deleted
	(cmd_call_hook): new function, three arguments, HOOK-SYMBOL,
	ARG-LIST, and optionally TYPE. TYPE is one of nil, or, and,
	defining how the return values of the hook functions are
	treated.

	* commands.c, editcommands.c, keys.c, views.c, windows.c,
	x11_eventloop.c: changed calls to eval-hook to use call-hook

Wed Jan 14 17:49:27 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispmach.c, bytecodes.h: totally rethought how exceptions
	(i.e. unwind-protect, catch/throw and condition-case) are
	handled. Before the handler forms were compiled into separate
	byte-code forms. Now we handle them inline to the original
	piece of code. The idea is that the new instruction OP_BINDERR
	registers an exception handler (an offset into the byte-code
	string), along with the current stack pointer, by adding to the
	binding stack. When an exception occurs the bind stack is
	unbound, when a (PC . SP) item is found, the stack pointer is
	set to SP, throw_value is pushed onto it, and PC is jumped to.
	The EJMP instruction can be used to give control back to the C
	error handler.

	(OP_CATCH_KLUDGE, OP_UNWIND_PRO, OP_UN_UNWIND_PRO,
	OP_ERROR_PRO) all been deleted.

	(OP_CATCH): new opcode. This takes two arguments, TAG and
	THROW-VALUE. THROW-VALUE is the saved copy of throw_value, if
	(car THROW-VALUE) == TAG we match, and we leave two values on
	the stack, nil on top (to pacify EJMP), (cdr THROW-VALUE) below
	that.

	(OP_BINDERR): Pop our single argument and cons it onto the
	bind- stack in a pair with the current stack-pointer. This
	installs an address in the code string as an error handler.

	(OP_ERRORPRO): This should be called with three values on the
	stack. 1. conditions of the error handler 2. throw_value of the
	exception 3. symbol to bind the error data to (or nil). It pops
	(1) and tests it against the error in (2). If they match it
	sets (2) to nil, and binds the error data to the symbol in (3).

	(OP_EJMP): Pop the stack; if it's nil jmp pc[0,1], otherwise
	set throw_value=ARG and goto the C error handler.

	* lisp.c (cmd_error_protect): renamed this as condition-case
	and inserted a new first parameter VAR, the symbol to bind the
	error data to. This is the same as Emacs function, it's
	necessary for the new VM error handling
	(compare_error): new function to compare the conditions a
	handler says it will take, against the error that was
	signalled

	* lispcmds.c (cmd_unwind_protect): only reinstall the old throw
	if it's actually an error and there was no error in the cleanup
	forms. This way the newest error takes precedence

Mon Jan 12 22:15:55 1998  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (buffer-compare-string): function to compare a string
	with a position in a buffer

	* lisp.c (sym_debug_macros, eval): when debug-macros is nil the
	debugger is never entered to expand a macro definition

	* lispcmds.c (cmd_max, cmd_min): new functions
	* bytecodes.h, lispmach.c (OP_MAX, OP_MIN): new instructions

Sun Jan 11 19:16:09 1998  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_load, sym_eval_after_load): a method of having
	a form be evaluated after a specified Lisp-library is loaded.

Tue Jan  6 13:06:06 1998  John Harper  <john@dcs.warwick.ac.uk>

	* edit.c (pad_cursor): reinstall the original cursor position
	after calling pad_pos(), since spaces may have been inserted
	before it, pushing it further down the line.

	* unix_processes.c (check_for_zombies): re-ordered a lot of this
	function. Also fixed the bug where errno was being looked at
	even if the return from waitpid() was zero.

Sat Jan  3 20:57:03 1998  John Harper  <john@dcs.warwick.ac.uk>

	* refresh.c (refresh_block): move the initialisation of tstart
	and tend to before they're passed as arguments to sub_regions()

Sun Dec 21 02:48:28 1997  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.h (VCONS): don't mask out the VALUE_CONS_MARK_BIT, if
	this needs to be done, it's done explicitly

	* lisp.h (LISP_MAX_INT, LISP_MIN_INT): macros defining the
	limits of what can be stored in integer values

	* lisp.c (read_symbol): rewrote the code to parse integers, it
	does all calculation inline, removing the need to call
	strtol() at the end, plus negative hexadecimal numbers work
	properly now.

Sat Dec 20 00:01:55 1997  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c, build-info, Makefile.in: the shell script build-info
	produces a header file build.h, defining some of the
	circumstances of the build process. misc.c includes this
	header file and makes the information available through the
	`version-and-build-string' function.

	* lisp.h (Lisp_Data_Type): Added a new `sweep' field, a
	function to call in the sweep phase of GC

	* values.c (data_types): filled in the new `sweep' field
	(cmd_garbage_collect): call each `sweep' function in turn
	instead of doing this by name

	* unix_processes.c (proc_init): now installs type information
	about V_Process objects in data_types[] itself.
	also removed the __waitpid__ debugging since the bug never
	occurred, maybe it will now...

	* lisp.h: Positions are now (ROW . COL), we keep the `Pos'
	structures for internal use, to avoid the masking and shifting
	required to access Lisp cons and integers. Having said that,
	they're not used that widely, just a few functions.

	* editcommands.c (pos-col, pos-line): removed these, they're
	defined in lisp.jl as macros (cdr and car respectively)

	* bytecodes.h, lispmach.c (OP_POS, OP_POSP): two new opcodes,
	the pos and posp functions. Note that pos isn't the same as
	cons since it replaces nil arguments with the current row or
	column of the cursor (also, of course, the arguments are the
	opposite order to in the cons function.)

	* lisp.h: Totally changed the way that VALUEs (Lisp objects)
	are defined; instead of wasting memory storing type
	information in cons cells and storing integers as allocated
	objects, we now do some bit-twiddling to store a subset of the
	type information in the two or three lowest bits of the VALUE.

	This means that cons cells only take 2 words (8 bytes) instead
	of 3, and integers can be stored in the VALUE itself (but now
	we only have 29-bit signed integers, not 32). Also we have to
	enforce strict alignment rules: cons cells to at least eight
	bytes, _everything_ else to at least four bytes.

	It's basically trading memory use in the data section for
	some code bloat (the extra instructions to do the bit
	twiddling). It's not too bad though, all objects but cons
	cells and numbers can be accessed from a VALUE as-is, once
	their type has been established (which does take a few more
	instructions).

	I've also taken this opportunity to clean up some of the other
	Lisp object handling code. Also, the plan is to remove
	position objects completely and store them as a cons cell
	containing two integers.

	To overcome the loss of the three bits in integers, I've
	defined a new pseudo-type called LONG_INT, which is a cons
	cell containing the low 24 bits in its car, and the high bits
	in the cdr. This allows large values like time stamps to be
	stored without dropping bits.

	* configs/config.h.*: added some more configuration macros, all
	to do with alignment,
	(MALLOC_ALIGNMENT): this has to be defined to the minimum
	alignment of malloc() allocations. It's checked in an assert
	in unix_memory.c currently
	(PTR_SIZED_INT): by default `long int', this must be an
	implicitly signed integer of the same size as a standard
	pointer (i.e. sizeof(PTR_SIZED_INT) == sizeof(void *), this is
	also checked, in main.c)
	(ALIGN_4, ALIGN_8): these aren't actually mentioned in the
	config files, but they align definitions to four and eight
	bytes respectively. For GNU CC they'll be defined in jade.h
	when not already existing

	* lisp.c (handle_var_long_int): similar to handle_var_int, but
	for 32 bit integers stored in cons cells
	* buffers.c (var_last_save_time): defined as a LONG_INT now
	* misc.c (cmd_current_time): returns a LONG_INT now
	(cmd_time_later_p): new function for comparing time stamps

	* edit.h (TX): Changed some long fields to ints, to signal
	that they can be stored in less than 24 bits

	* jade.h (ALIGN_4, ALIGN_8): definitions for GNU CC
	(CONCAT, OFFSETOF): new macros

	* stringmem.c, stringmem.h: formalised old alignment
	assumptions, all allocated blocks will be aligned to at least
	four bytes.
	(STRMEM_ALIGNMENT): defined to the minimum alignment of blocks
	allocated by sm_alloc()

Tue Dec 16 12:05:14 1997  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_or, cmd_and): deleted, these are now macros
	in lisp.jl

Mon Dec 15 10:52:24 1997  John Harper  <john@dcs.warwick.ac.uk>

	* edit.c: When allocating line buffers, use the knowledge that
	stringmem.c allocates memory in multiples of eight bytes to
	improve our allocation strategy. Lines are also allocated in
	multiples of eight bytes, and insertions/deletions that don't
	cause a multiple-of-eight boundary to be crossed are handled
	by a simple memory copy.
	(LINE_BUF_SIZE, ALLOC_LINE_BUF, FREE_LINE_BUF): macros to
	implement the above strategy
	(alloc_line_buf): function version of ALLOC_LINE_BUF
	(delete_section): when joining two lines, optimise the case
	where either of the lines is empty
	* io.c (read_tx): all line allocations use alloc_line_buf()
	now.

	* bytecodes.h (OP_JPN, OP_JPT): new opcodes, jump-and-pop-if-t
	and jump-and-pop-if-nil
	* lispmach.c (jade-byte-code): implemented JPN and JPT

Sun Dec 14 14:10:47 1997  John Harper  <john@dcs.warwick.ac.uk>

	* editrect.c: removed, now implemented in Lisp in rectangle.jl
	* Makefile.in: removed editrect.c from COMMON_SRCS
	* main.c (inner_main): removed call to editrect_init()

	* glyphs.c (char-to-glyph-pos, glyph-to-char-pos): now check
	the validity of the POS argument

	* find.c (string-match): new optional arg START, defining
	where in the string to start searching

	* Radically changed the way in which position objects are
	handled. Removed the old POS/LPos distinction; now we only
	have positions as Lisp objects, two new macros VCOL(p) and
	VROW(p) to access the two components of a position.

	But perhaps the most important change is that positions in
	Lisp objects are _immutable_, that is, once they've been
	created their contents can not be modified. Although this may
	appear to involve many more objects being allocated, this
	isn't necessarily the case since pointers to position objects
	may be passed around much more freely, for example, when
	creating undo information.

	There is a distinction made between accessing positions
	through VALUEs, and through `Pos *' pointers---the latter are
	generally stored on the stack and hence writable.

	The immutability of positions means that the functions
	next-char, et al. which _modify_ position objects are no
	longer valid. A list of function changes follows:

	* editcommands.c (set-pos-col, set-pos-row, split-line):
	removed, split-line implemented in edit.jl

	* movement.c (next-char, prev-char): renamed as forward-char
	(next-line, prev-line): renamed as forward-line
	(next-tab, prev-tab): renamed as forward-tab
	In all of these backward-X is provided by lisp/edit.jl. These
	functions are similar to the old ones, but always return a new
	position.
	(screen-top-line, screen-bottom-line,
	screen-first-column, screen-last-column): removed, they were
	never used
	(left-char, right-char): removed, sort of implemented as
	macros in edit.jl
	(goto-char): renamed as `goto'
	(buffer-end, line-end): renamed as `end-of-X'
	(buffer-start, line-start): renamed a `start-of-X'
	(goto-buffer-start, goto-buffer-end, goto-line-start,
	goto-buffer-end, goto-next-line, goto-prev-line,
	goto-left-char, goto-right-char, goto-prev-tab, goto-next-tab,
	goto-next-char, goto-prev-char): removed, most of the new
	functions can be called interactively instead
	(match-brackets): renamed as `find-matching-bracket'

	* find.c: lots of name changes. Also added a 1-deep cache of
	compiled regexps, preliminary results indicate a 10% hit ratio
	(find-next-regexp, find-prev-regexp): renamed as
	`re-search-forward' and `re-search-backward'
	(find-next-string, find-prev-string): renamed as
	`search-forward' and `search-backward'
	(find-next-char, find-prev-char): renamed as
	`char-search-forward' and `char-search-backward'
	(regexp-quote): renamed as `quote-regexp'
	(regexp-match): renamed as `string-match'
	(replace-string, replace-regexp, regexp-expand,
	regexp-expand-line, regexp-match-line): removed,
	replace-string implemented in lisp/replace.jl
	(expand-last-match): expands a template using the
	subexpression data of the most recent regexp match

	* I have a sed script that will perform a lot of these name
	changes,

s/(buffer-start/(start-of-buffer/
s/(buffer-end/(end-of-buffer/
s/(line-start/(start-of-line/
s/(line-end/(end-of-line/
s/(goto-char/(goto/
s/(match-brackets/(find-matching-bracket/
s/(next-char/(forward-char/
s/(next-line/(forward-line/
s/(next-tab/(forward-tab/
s/(goto-buffer-start)/(goto (start-of-buffer))/
s/(goto-buffer-end)/(goto (end-of-buffer))/
s/(goto-line-start)/(goto (start-of-line))/
s/(goto-line-end)/(goto (end-of-line))/
s/(find-next-regexp/(re-search-forward/
s/(find-prev-regexp/(re-search-backward/
s/(find-next-string/(search-forward/
s/(find-prev-string/(search-backward/
s/(find-next-char/(char-search-forward/
s/(find-prev-char/(char-search-backward/
s/(regexp-quote/(quote-regexp/
s/(regexp-match/(string-match/

	It still leaves a lot to be done by hand though, all prev-char,
	prev-line and prev-tab calls should be changed to forward-X
	with negative arguments (faster than calling backward-X); also
	the result of the function must be used now.

	* unix_processes.c: once again I've simplified the process
	termination code; now the only thing done in the SIGCHLD
	handler is to set a flag that is checked by a function called
	after every event/timeout by x11_eventloop.c, I've also added
	some debugging trace info. to try and narrow down the
	intermittent bug that causes synchronous processes to hang on
	exit (if it still exists)

	* debug-buffer.c: new file; provides circular output buffers
	and a `db_printf' function to output to them, on a crash or by
	called `db_spew' their contents is output

	* unix_misc.c: all standard signal handling is here now,
	including the SIGINT handler that used to be in x11_display.c

	All error signals (FPE, ILL, SEGV, BUS, QUIT, ABRT) are
	trapped and cause all debug buffers, and the lisp backtrace to
	be output before termination.

	SIGINT works as before, by stuffing int_cell into throw_value

	All other termination signals (TERM, HUP) cause term_cell to
	be stuffed into throw_value, this winds back to the top-level
	event loop, which auto-saves all modified files before quitting

	* x11_eventloop.c: now calls proc_periodically() instead of
	proc_notification(), also handles finding sym_term_interrupt
	in the car of the throw_value (as described in the previous
	paragraph).

	* x11_windows.c (screen-width, screen-height, window-left-edge,
	window-top-edge, window-width, window-height,
	window-bar-height): removed, they weren't used by anything

	* buffers.c (auto-save-buffers): new boolean argument,
	`force_save', when true the time factor when looking for files
	to auto save is ignored.
	(get_tx_cursor_ptr): similar to `get_tx_cursor' but returns a
	ptr-to-a-ptr

	* edit.c: cleaned up the myriad of insignificant functions

	* misc.c (strtoc, ctostr): removed these ugly functions
	(version-string): new function returning a string describing
	the current editor version

	* streams.c (stderr-file): does for stderr what stdout-file
	does for stdout

	* views.c (view-origin): returns the position of the top-left
	character in the view

	* configs/config.h.* (HAVE_PSIGNAL, HAVE_STRSIGNAL): two new
	configuration macros

	* regexp/regexp.h, regexp/regjade.c, regexp/regsub.c: changes
	for new position objects, also some changes to calling format

Mon Dec  8 11:32:15 1997  John Harper  <john@dcs.warwick.ac.uk>

	* undo.c (undo_record_insertion, undo_record_deletion,
	undo_record_modification, undo_push_deletion): ensure that
	null commands are ignored (i.e. when START == END)

	* editcommands.c (cmd_set_indent_pos): in the `diff > 0'
	section, the undo_record_modification() function was being
	called _after_ the modification had been performed, not before
	as it should be

	* unix_processes.c: Simplified the async. process clean up; the
	PR_EXITED value has been scrapped. Now we assume that once we
	receive SIGCHLD from a process there won't be any more output
	coming from it. This seems to work ok but I think there may be
	race-conditions involved (between the main select() and the
	clean up code). Needs serious investigation.

	* x11_eventloop.c: Removed call to proc_on_idle()

Wed Nov 26 13:13:52 1997  John Harper  <john@dcs.warwick.ac.uk>

	* jade.h: reorganised a bit
	(MAX,MIN,POS): macros for maximum, minimum, and positive part,
	respectively
	(ROUND_UP_INT, ROUND_DOWN_INT): rounding macros

	* housekeeping.c (resync_y): rewritten; fixed the bug in which
	the cursor was sometimes being left outside the visible
	region. Also avoids unnecessary space being left at the bottom
	of the display in certain circumstances

Mon Nov 24 11:25:06 1997  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c (cmd_last): now returns the last element as it
	should, not the last cons cell

Sun Nov 23 16:09:44 1997  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (signal_missing_arg): put the argument number into a
	list.

	* lispcmds.c (APPLY_COMPARISON): don't check for numerical
	args, comparison works on all objects. Signal an error if less
	than two arguments are given

	* lispmach.c (unbind_one_level): when reinstalling a view,
	check that its parent window is still valid

	* views.c (cmd_with_view): don't save the old window, it's
	stored in the view structure

	* windows.c (cmd_with_window): reinstall the current view in
	the old window, as well as the window itself

Fri Nov 21 12:23:16 1997  John Harper  <john@dcs.warwick.ac.uk>

	* lispcmds.c: generally improved error reporting, especially
	of missing arguments (a lot of functions just returned NULL,
	no errors or anything..) Also functions which take lists as
	arguments don't silently ignore anything that's not a cons
	cell, an error is signalled if it's not LISTP (cons or nil)
	(cmd_plus): no arguments gives a result of zero.
	(cmd_product): no arguments gives a result of one.
	(cmd_remainder): restricted to two arguments now, any more are
	pretty meaningless
	(cmd_mod): new function implementing the modulo operation,
	similar to cmd_remainder but works properly for negative
	arguments.
	(cmd_gtthan, cmd_gethan, cmd_ltthan, cmd_lethan): can now take
	more than two arguments

	* lisp.c (signal_missing_arg): new function for convenience

	* lisp.h (LISTP): new macro, disjunction of NILP and CONSP

	* bytecodes.h, lispmach.c (OP_MOD): renamed as OP_REM to allow
	a new instruction OP_MOD that does the proper modulo operation

	* lispmach.c (cmd_validate_byte_code): new function to check
	if a given byte code instruction set version may be executed
	in the current version of the editor
	* bytecodes.h (BYTECODE_MAJOR_VERSION, BYTECODE_MINOR_VERSION):
	macros defining the current byte code version

Mon Nov 17 19:02:44 1997  John Harper  <john@dcs.warwick.ac.uk>

	* undo.c (undo_end_of_command): this new function replaces
	both undo_distinct() and undo_new_group(). Instead of trying
	to be clever when adding group separators, simply add one
	after _every_ event is processed. Also, separators are added to
	_every_ buffer whose last undo item is not already a separator.
	(cmd_undo): new optional arg controlling the number of
	commands that are undone; when called interactively this is
	taken from the prefix arg.

	* commands.c (cmd_call_command): removed calls to
	undo_distinct().
	* x11_eventloop.c, amiga_eventloop.c: removed all calls to
	undo_distinct(), replaced by two strategically placed calls to
	undo_end_of_command().
	* keys.c (usekey): removed calls to undo_distinct(). To ensure
	that successive self-bound key insertions are merged in the
	undo list, any leading group-separator after a previous
	insertion command is removed before inserting the text (and
	then replaced at the head of the undo list afterwards).

	* views.c (cmd_translate_pos_to_view): adds vw_StartCol into
	the column of the result

Sun Nov 16 01:22:06 1997  John Harper  <john@dcs.warwick.ac.uk>

	* movement.c (cmd_raw_mouse_pos): new function giving the
	glyph position of the mouse relative to the origin of the
	current window

	* views.c (cmd_find_view_by_pos): new function to find the
	view in a window specified by a window-relative position
	(cmd_translate_pos_to_view): new function to make a
	buffer-relative glyph position from a window-relative glyph
	position and a view

	* x11_eventloop.c, x11_windows.c (handle_event,
	sys_get_mouse_pos): try not to query the server for the
	pointer position---when possible grab it from the last event.

	* glyphs.c (char_col): try to handle columns past the end of
	a line without crashing

Fri Nov 14 12:44:01 1997  John Harper  <john@dcs.warwick.ac.uk>

	* io.c (read_tx): Now uses a predictive method of allocating the
	array of line headers whilst loading files. The average number of
	chars-per-line in the last file loaded is used to predict the
	number of lines in the current file. If this prediction is wrong
	the chars-per-line of the loaded portion of the new file is used
	to refine the predicted number of lines.

	* unix_misc.c, amiga_misc.c (sys_file_length): new function to
	return the size, in bytes, of a named file, or -1 if the size
	is unknown. Currently the Amiga implementation is totally
	untested.

	* edit.c (clear_line_list, kill_line_list, resize_line_list): the
 	tx_Line array of line headers now includes "slack", i.e. unused
 	entries at the end of the array. Currently a maximum of 32 extra
	entries, allocated as +/- 16. This makes line insertion/deletion
	faster, as well as possibly reducing memory fragmentation.
	* edit.h (TX): added tx_TotalLines field to allow unused entries
	at the end of the tx_Lines array

Fri Nov  7 09:52:30 1997  John Harper  <john@dcs.warwick.ac.uk>

	* render.c (draw_bit, draw_line, draw_block_line, draw_line,
	draw_line_part, draw_line_glyph_length): miscellaneous fixes,
	mostly to help fix block rendering
	
	* edit.h (TX): new variables tx_LastLogicalStart and
	tx_LastLogicalEnd; the restriction at the last refresh.
	* refresh.c: now uses tx_LastLogical{Start,End} to see if the
	restriction has changed, if so just redraw everything
	* buffers.c (cmd_restrict_buffer): don't set TXFF_REFRESH_ALL
	anymore, it's covered by the variables described above
	* housekeeping.c: the position updating functions also update
	tx_LastLogical{Start,End}

Mon Nov  3 01:27:49 1997  John Harper  <john@dcs.warwick.ac.uk>

	* refresh.c (refresh_block, refresh_view,
	sub_intersect_regions, sub_regions): _much_ better handling of
	block refresh--now only the stuff that needs to be redrawn
	actually is! The sub_* functions implement two set/logical
	operations on pairs of regions

	* render.c (redraw_region): better clipping of region

	* views.c (cmd_set_rect_blocks): sets the VWFF_FORCE_REFRESH
	flag; this should really be done properly

	* edit.c (set_block_refresh): just sets VWFF_REFRESH_BLOCK

	* edit.h (VW): new fields vw_LastBlockS, vw_LastBlockE,
	vw_LastBlockStatus.

	* housekeeping.c: updates the two new fields in the VW
	structure.

Thu Oct 30 13:16:45 1997  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (run_process): some fixes made to the
	synchronous parent code; shouldn't hang anymore (?) and now does
	time outs to look for user interruptions

Tue Oct 28 17:07:53 1997  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c: Hopefully fixed the long-running "process
	exited but no eof" debacle; everything should work now (famous
	last words). Also separates the stdout and stderr streams when
	using pipes; the process-error-stream and set-process-error-stream
	functions control where the output actually goes. By default it's
	set to the same value as the output-stream
	(run_process): when using a pty initialise some of the more basic
	control codes to sensible values

	* x11_eventloop.c (event_loop): now calls proc_notification()
	_after_ going through the input fd's and handling the idle
	stuff

Tue Oct  7 13:12:03 1997  John Harper  <john@dcs.warwick.ac.uk>

	* movement.c (cmd_center_display): renamed from
	centre-display. Now takes a second optional argument
	controlling where in the display to put the line under the
	cursor. Taken from the prefix-arg when interactive.

Thu Oct  2 18:32:17 1997  John Harper  <john@dcs.warwick.ac.uk>

	* unix_processes.c (proc_on_idle): new function called when the
	editor is idle; it acts as a safety net for processes that have
	exited but haven't given an EOF over the connection. Any such
	processes are marked as truly dead
	* x11_eventloop.c (event_loop): calls proc_on_idle()

Wed Oct  1 21:00:17 1997  John Harper  <john@dcs.warwick.ac.uk>

	* render.c (redraw_lines_clr): check arguments against
	tx_Logical{Start,End} more rigorously.

Sun Sep 28 22:03:43 1997  John Harper  <john@dcs.warwick.ac.uk>

	* housekeeping.c (adjust_marks_join_y): fixed a really bad bug
	that must have existed for _years_. If the position being updated
	was past the two lines being joined it wasn't adjusted

Sat Sep 27 11:34:13 1997  John Harper  <john@dcs.warwick.ac.uk>

	* lisp.c (sym_print_escape_newlines, sym_print_level,
	sym_print_length): variables controlling how lists and strings
	are printed

	* housekeeping.c (adjust_marks_add_y, adjust_marks_sub_y,
	adjust_marks_split_y, adjust_marks_join_y): these now update
	vw_LastDisplayOrigin iff they update vw_DisplayOrigin. This
	stops the refresh code scrolling erroneously

	* x11_render.c (redraw_exposed_area): recognises when expose
	events hit status lines correctly now

Thu Sep 25 09:48:57 1997  John Harper  <john@dcs.warwick.ac.uk>

	* unix_misc.c (same_files): tries to compare files that don't
 	actually exist
	(cmd_file_absolute_p): new function

	* amiga_misc.c (cmd_file_name_absolute_p): new function

	* unix_defs.h, amiga_defs.h: Define SITE_LISP_DIR

	* lispcmds.c (sym_load_path): added site-lisp directory

	* revision.h: Now protected by #ifndef stuff

	* Makefile.in: Added revision.h to HDRS

	* jade.h: Include revision.h

Wed Sep 24 11:11:49 1997  John Harper  <john@dcs.warwick.ac.uk>

	* misc.c (cmd_file_name_equal):	new function, called file-name=,
	that tests whether two filenames actually refer to the same
	file.

	* x11_eventloop.c (x11_last_event_time): variable containing the
	timestamp from the last X11 event (that has a timestamp).

	* x11_misc.c: Now each selection info has the timestamp of when
	the selection was created. x11_lose_selection() ignores events
	with times less than or equal to this time

	* x11_misc.c (cmd_x11_own_selection_p): returns t when Jade has
 	the selection
	(x11_window_lose_selections): lose anything owned by a particular
	window
	(x11_set_selection): can now set a string as the current selection

	* x11_windows.c (sys_kill_window): calls
	x11_window_lose_selections()

Tue Sep 23 10:55:03 1997  John Harper  (john@dcs.warwick.ac.uk)

	* views.c (update_status_buffer): all line numbers/counts now
	take note of the current restriction. Also the buffer position
	is displayed in "all/top/bottom/percentage" style

	* refresh.c (refresh_view): call resync_xy() before redrawing
	the status line, not after.

	* unix_server.c, amiga_server.c: (server-reply): compare files
	with same_file() not just comparing their names (which doesn't
	always work)

Mon Sep 22 17:53:50 1997  John Harper  (john@gem.dcs.warwick.ac.uk)

	* editcommands.c (delete-area): given it an interactive spec 
	(the current block)

	* buffers.c (restrict_buffer): made the interactive spec clear
	the block

	* keys.c, keys.h: new handling of meta modifier. Now defined as a
 	variable in keys.c. This allows meta to change from system to
 	system.

	* x11_keys.c, amiga_keys.c (sys_find_meta): new function
	to return the meta modifier mask for the current system. Also some
	work to decode and encode meta modifiers

Mon Sep 22 00:03:08 1997  John Harper  (john@orcrist)

	* lispmach.c: (slightly) better error reporting for when
	arguments aren't of the required type for inlined functions

	* views.c, windows.c, buffers.c (cmd_with_view,
	cmd_with_window, cmd_with_buffer): these now signal an error
	if the first argument isn't of the required type

	* lispcmds.c (cmd_unwind_protect): don't lose errors occuring
	in the cleanup-forms anymore

Sun Sep 21 14:42:19 1997  John Harper  (john@orcrist)

	* views.c (cmd_destroy_view): don't let minibuffer views be
	killed anymore

Sat Sep 20 00:20:29 1997  John Harper  (john@orcrist)

	* unix_processes.c (cmd_call_process_area): new function to
	call a process with a portion of the current buffer as its
	input.

	* misc.c (cmd_tmp_file_name): now uses its own buffer

	* io.c (cmd_write_buffer_area): fixed bug which could cause an
	attempt to write -1 (i.e. MAXUINT) bytes. Also added an
	interactive spec so it can be called as a command

	* unix_processes.c (cmd_run_process): renamed as call-process

	* unix_misc.c, amiga_misc.c (cmd_file_size): new function that
	return the size of a specified file. The Amiga version is totally
	untested and probably wrong

	* io.c (cmd_write_buffer, cmd_write_buffer_area): both functions
	now accept streams for output, as well as the original file name
	interface

	* lisp.h (VIEWP): now checks if vw_Win pointer is non-null;
	this happens when the view has been destroyed but is still in
	scope.

	* views.c (view_prin): prints "#<dead-view>" for views that
	have been destroyed

Fri Sep 19 00:48:20 1997  John Harper  <john@dcs.warwick.ac.uk>

	* find.c (buffer_strpbrk, buffer_reverse_strpbrk, buffer_strchr,
	buffer_reverse_strchr, buffer_compare_n, forward_char,
	backward_char): new buffer utility functions. Used mainly by the
	new regexp matcher

	* find.c: Most of the lisp functions have been rewritten to use
	the new regexp matcher. All functions now allow matches across
	line boundaries (including string and char variants)
	find-{next,prev}-string both set the match-start and match-end
	variables.

	* editcommands.c (sym_flatten_table): variable containing a
 	translation table that converts newlines to spaces

Thu Sep 18 21:06:05 1997  John Harper  <john@dcs.warwick.ac.uk>

	* movement.c (prev_char, delete_char): deleted these functions,
	they're replaced by forward_char and backward_char in find.c

	* edit.c (delete_section): doesn't trash the `startPos' and
	`endPos' parameters anymore

Sun Sep 14 19:39:50 1997  John Harper  (john@orcrist)

	* views.c (cmd_view_dimensions, cmd_set_view_dimensions):
	commands for reading and manipulating the size of a view
	(set_scroll_steps): checks that the scroll step isn't greater
	than the width/height of the view

	* windows.c (cmd_window_dimensions): returns the glyph
	dimensions of a window

	* movement.c (cmd_mouse_pos): now adds in vw_StartCol

Sat Sep 13 11:55:23 1997  John Harper  (john@orcrist)

	* edit.c (check_pos, check_line, check_section): when these
	functions return FALSE they also signal an error. Also
	check_pos() now returns FALSE (not void), when the line is out
	of range

	* find.c, movement.c, editcommands.c: now check the return
	value of check_pos()

	* lisp.c (sym_invalid_pos): new error symbol

	* buffers.c (cmd_restrict_buffer): now calls
	cmd_unrestrict_buffer() before checking the validity of the
	specified section. Otherwise anything outside the current
	restriction will be rejected.

Mon Sep  8 00:24:47 1997  John Harper  (john@orcrist)

	* unix_misc.c (cmd_system_name): try harder to get a fully
	qualified host name (with domain information)

Sun Sep  7 00:05:37 1997  John Harper  (john@orcrist)

	* views.c (update_status_buffer): surrounds the cursor
	position with square brackets when a restriction is in effect

	* streams.c: all streams using buffers take note of any
	restriction to that buffer

	* io.c (read_buffer): clears any restriction before reading
	(write_buffer): option to only write restricted text

	* edit.c (check_pos, check_line, check_section): region being
	validated must be inside any restriction

	* movement.c, editcommands.c, find.c: restrict parts of the
	buffer that may be used to the restriction (if it exists)

	* buffers.c (cmd_in_restriction_p): new function; a predicate
	on whether a position is in the restricted part of a buffer

	* buffers.c (cmd_restriction_end): now does what it is
	documented as doing, returns the last character of the line
	before tx_LogicalEnd

	* movement.c (cmd_buffer_end): when I-R-P is null just return
	the value of restriction-end

Sat Sep  6 13:34:55 1997  John Harper  (john@orcrist)

	* housekeeping.c (adjust_marks_add_y): doesn't shift
	tx_LogicalStart if it equals the insertion line

	* buffers.c (cmd_restrict_buffer, cmd_unrestrict_buffer,
	cmd_restriction_start, cmd_restriction_end): new functions to
	work with tx_LogicalStart and tx_LogicalEnd

	* edit.h (TX): added tx_LogicalStart and tx_LogicalEnd fields;
	the line numbers of the first and last+1 lines that may be
	displayed in the buffer

	* movement.c (cmd_buffer_end, cmd_buffer_start): extra
	argument IGNORE-RESTRICTION-P
	(cmd_centre_display, cmd_goto_buffer_end,
	cmd_goto_buffer_start, cmd_goto_next_line, cmd_goto_prev_line,
	move_down_screens, move_up_screens): modified to work with
	buffer restrictions

	* housekeeping.c (adjust_marks_add_y, adjust_marks_sub_y,
	adjust_marks_split_y, adjust_marks_join_y, resync_y): modified
	to work with buffer restrictions

	* io.c (read_tx): sets the buffer restriction to the entire
	file initially.

	* edit.c (clear_line_list): initialises restriction

	* render.c: ensure that nothing outside the restriction is
	rendered.

	* All files are now under RCS control, not before time

Fri Sep  5 20:06:32 1997  John Harper  (john@orcrist)

	* view.c (update_status_buffer): fixed display "line" or 
	"lines" depending on the number of lines in the buffer

Thu Sep  4 00:11:59 1997  John Harper  (john@orcrist)

	* command.c (sym_pre_command_hook, sym_post_command_hook,
	cmd_call_command): these two hooks bracket the evaluation of
	each command. pre-command-hook is given the command to be
	called as its sole arg.

	* keys.c (usekey): calls pre-command-hook and
	post-command-hook around insertion of unbound keys.

Wed Sep  3 20:41:19 1997  John Harper  (john@orcrist)

	* render.c (redraw_status_buffer): when VWFF_CUSTOM_STATUS is
	set draw the status line in the highlight colour to make it
	stand out.

	* lispmach.c, bytecodes.h: renamed quite a few opcodes. Also
	changed the op-setq and op-set (previously op-vsetc and
	op-vset) instructions to the set value on the stack.

Wed Sep  3 15:53:37 1997  John Harper  (john@gem)

	* stringmem.c, stringmem.h: some general cleaning up of the
	code. Only notable change is that when STRMEM_STATS is defined
	it now prints the statistics when sm_kill() is invoked.

	* revision.h: bumped version to 4.0 alpha

Tue Sep  2 23:38:39 1997  John Harper  (john@orcrist)

	* bytecodes.h: new header file defining all bytecodes in
	lispmach.c

	* lispmach.c (unbind_one_level): new function that handles
	undoing the first element in the `bindstack'. It can handle
	symbol bindings, unwind-protect forms, and binding to buffers,
	views and windows. OP_UNWIND calls this function.
	(OP_BIND_BUFFER, OP_BIND_VIEW, OP_BIND_WINDOW): these opcodes
	replace the OP_SWAP_X opcodes. They install their sole
	argument (on the stack) (a buffer, view or window) and add an
	entry to the bindstack to let it be unwound later.
	(OP_UN_UNWIND_PRO): removed, OP_UNWIND does this now.

Mon Sep  1 21:52:48 1997  John Harper  (john@orcrist)

	* lisp.c (max_lisp_depth): doubled to 500, the compiler was
	catching the limit sometimes

	* lispcommands.c (cmd_if, cmd_when, cmd_unless): removed;
	these are now defined as macros in lisp.jl

	* view.c (update_views_dimensions): won't abort if vertical
	size is still the same but horizontal has changed

Sun Aug 31 11:12:09 1997  John Harper  (john@orcrist)

	* Makefile.in: removed *commandline.c; added views.c

	* amiga_commandline.c, commandline.c, x11_commandline.c:
	banished to the obsolete directory (not before time)

	* buffers.c (first_buffer): creates the buffer before the
	window, this lets make-view find at least one buffer in
	existence.

	(get_tx_cursor): now checks active-view, other views in the
	same window, then views in other windows.

	(cmd_current_buffer, cmd_set_current_buffer): now operate on
	views not windows

	(cmd_set_buffer_file_name, cmd_set_buffer_name,
	cmd_set_buffer_modified, cmd_set_buffer_special,
	cmd_set_buffer_read_only, var_mode_name, var_minor_mode_names):
	all set the flag TXFF_REFRESH_STATUS to show that any status
	lines reflecting this buffer may need updating.

	(cmd_with_buffer): saves the current view so that the reset
	stage works when the active view changes. I don't think this
	works in the compiled version properly..

	* configs/: all config-*.h files now have an extra Makefile
	entry, EXTRA_LIBS

	* edit.c (resize_line_list): uses memset() not bzero()

	* edit.h (TX): new flag TXFF_REFRESH_STATUS -- reflects when a
	view displaying the buffer needs to refresh its status display

	(VW): now represents a single view in a window, as such all
	window system data has been removed. Has a `vw_NextView' field
	pointing to the view beneath it in the window. `vw_MaxY' and 
	`vw_MaxX' refer to the size of the view.
	The flags VWFF_SLEEPING and VWFF_MESSAGE have been removed;
	new flags VWFF_MINIBUF and VWFF_CUSTOM_STATUS have been added.

	(WIN): new structure representing a physical window (what
	Emacs would call a frame). Most things are those that were
	removed from the VW. `w_ViewList' points to the top view in
	the window, `w_CurrVW' to the current view, and `w_MiniBuf' to
	the minibuffer view.

	(MINIBUFFER_ACTIVE_P(win)): macro to check if a window's
	minibuffer view is in use.

	* editcommands.c (sym_block_status_hook): hook called when the
	current view's block status changes; one argument the block
	status.

	* editrect.c (cmd_insert_rect): tries to return the position
	following the insertion; not so useful as it doesn't lead to
	the size of the rectangle.

	* lisp.c (sym_window_error): new error type

	* lisp.h (V_View, VVIEW, VIEWP): define the view type

	* lispmach.c (OP_VIEWP, OP_SWAP_VIEW, OP_CURRENT_VIEW,
	OP_SWAP2): new opcodes. swap-buffer has changed incompatibly!,
	but probably still won't work in case of errors

	* movement.c (cmd_centre_display, cmd_mouse_pos): work
	relative to the current view now, not the window.

	* refresh.c (refresh_window) renamed as `refresh_view' and
	made to work on a per-view basis. A new function `
	refresh_window' has been added that cycles through each view
	in a window refreshing each in turn.
	(vert_scroll): calls portable scroll_vw() not sys_scroll_vw()
	(refresh_message): function to redraw a window's message if
	necessary.

	* render.c: all functions work relative to the view now, in
	fact they assume the view is at position (0,0) and let the
	window-system macros (i.e. MOVE, DRAW, etc...) work out where
	the view actually is.  It is also assumed that four pens exist
	now: P_TEXT, P_TEXT_RV, P_BLOCK, and P_BLOCK_RV.
	(redraw_cmd_line, redraw_cmd_line_from, cmd_line_cursor):
	deleted.
	(draw_message_line, redraw_message, redraw_status_buffer):
	added.
	(scroll_vw): portable version of sys_scroll_vw(), uses
	CLR_AREA and COPY_AREA macros

	* streams.c: writing to the message line works on the current
	window, not the current view

	* unix_misc.c: used ENVIRON_UNDEFINED, not ENVIRON_UNDECLARED,
	doh!

	* unix_processes.c: include <signal.h> not <sys/signal.h>,
	also includes <stdio.h> and <fcntl.h>

	* values.c (ValueClasses): entries for V_View
	(mark_value): changed V_Window and V_View actions
	(cmd_garbage_collect): added view_sweep() to list of sweep
	functions.

	* views.c: new file providing view functions
	(view_chain, curr_vw): list of all views, and current view
	(make-view-hook, destroy-view-hook): what they say
	(cmd_make_view, cmd_destroy_view): also what they say
	(update_view_dimension): recalibrates the view dimensions of a
	window after the window size has changed
	(update_status_buffer): reformats the status line
	(cmd_next_view, cmd_previous_view): for traversing views
	(cmd_with_view): similar to `with-window'
	(cmd_minibuffer_view, cmd_minibuffer_view_p,
	cmd_minibuffer_active_p): new functions
	(cmd_set_status_message): allows the hijacking of the status
	line.

	* windows.c: many things changed to use `WIN *' instead of 
	`VW *', some functions moved to the new file views.c
	(win_chain, curr_win): replace `view_chain' and `curr_vw'
	(copy_prefs): renamed `copy_win_prefs'
	(cmd_make_window): creates two views by default, a main view
	with everything but the one row taken by the minibuffer view

	* x11_display.c: includes <signal.h> not <sys/signal.h>
	(x11_high_pixel): pixel colour used to provide P_BLOCK pens
	(x11_jade_sel): property used to transfer selection's atom
	(x11_get_options): `-hl' for highlight pixel
	(handle_event): works in windows not views, now handles
	MotionNotify, SelectionRequest, and SelectionClear events.
	(event_loop): in the timeout try to remove messages from
	minibuffers if the minibuffer is active.

	* x11_keys.c (translate_event): handles MotionNotify events
	(KeyDescr): remove pounds-sterling sign; it seems that Solaris
	strcasecmp() only works with 7-bit ASCII?

	* x11_misc.c (x11_convert_selection, x11_lose_selection,
	cmd_x11_set_selection, cmd_x11_selection_active_p,
	cmd_x11_get_selection, cmd_x11_lose_selection, sym_xa_primary,
	sym_xa_secondary, x11_misc_init): selection handling

	* x11_render.c (redraw_exposed_area): new function; given a
	window and a rectangular region, works out which bits in each
	view need redrawing, and redraws them.
	(sys_scroll_vw): deleted

	* x11_windows.c (INPUT_EVENTS): added ButtonMotionMask and
	PointerMotionHintMask.
	(sys_sleep_vw, sys_unsleep_vw, sys_set_vw_pos): renamed
	`sys_sleep_win', `sys_unsleep_win', and 'sys_set_win_pos'
	(sys_new_window): creates GCs for all four pens

	* x11_windowsys.h (W_WindowSys): new entry ws_GC_array[] which
	holds all GCs.
	(P_TEXT, P_TEXT_RV, P_BLOCK, P_BLOCK_RV, P_MAX): defined
	(MOVE, PEN_X, PEN_Y, CLR_AREA, CLR_RECT, SET_AREA, SET_RECT,
	COPY_AREA, DRAW_LINE): all coordinates are relative to the
	specified view. SET_{RECT,AREA} now take a PEN argument
	defining the GC to use.

Thu Jul 13 11:56:35 1995  John Harper  (jsh@orcrist)

	* Makefile.in: fixed the _JADE_DIR macro containing a leading
	space character.

	* unix_defs.h, unix_server.c, unix_client.c (JADE_SOCK_NAME):
	This is now defined in the unix_defs.h header file to prevent
	any more embarassing mistakes (changing its definition in only
	one place)

	* render.c (clear_lines): New function

	* refresh.c (flag_deletion): The tx_ModEnd is set to the end
	of the deleted text, not the same place as the beginning of
	the deletion. This fixes the annoying ``delete a block near
	the end of the buffer'' bug which sometimes occurs. What does
	it break though? (it probably hits performance..)

Sun May 28 01:11:57 1995  John Harper  (jsh@orcrist)

	* jade.h (QUOTE): Macro to stringify its argument
	* Makefile.in, unix_defs.h (_JADE_DIR, JADE_DIR): Due to rot
	in cpp the method of passing in JADE_DIR broke. Now it's
	passed from the command line without quotes. The definitions
	of LISP_LIB_DIR and DOC_FILE quote it.

Wed Feb 22 20:15:18 1995  John Harper  (jsh@orcrist)

	* movement.c (next_char): When POS is past the end of the line
	move it back to the end.

Thu Jan 12 16:27:23 1995  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_divide, cmd_remainder): Now check for
	divide-by-zero and signal an error if it will occur.

Wed Jan 11 14:43:33 1995  John Harper  (jsh@orcrist)

	* commands.c (interactive_spec): Doesn't assume that lambda
	expressions are always valid anymore

Sat Dec 24 15:46:52 1994  John Harper  (jsh@orcrist)

	* render.c (draw_line_glyph_length, draw_rect): Hopefully
	fixed the problem of the glyph in the right-most column
	sometimes being left undrawn.

Sun Nov 13 19:48:55 1994  John Harper  (jsh@orcrist)

	* buffers.c (var_auto_save_interval): corrected its doc-string

Sun Oct 30 15:24:16 1994  John Harper  (jsh@orcrist)

	* x11_windows.c (sys_new_window): windows are now called `Jade'

Wed Oct 26 17:52:44 1994  John Harper  (jsh@orcrist)

	* unix_client.c (JADE_SOCK_NAME): changed to ".Jade_rendezvous";
	I'd changed this in unix_server.c but not here (oops!)

Sun Oct 23 19:54:24 1994  John Harper  (jsh@orcrist)

	* windows.c (save_message, restore_message): Mechanism for
	temporarily installing a message.

	* values.c (cmd_garbage_collect): Prints a message while
	gc'ing (again).

	* lisp.c (load_autoload): Temporarily prints a message
	while loading the file.

	* Makefile.in: moved the definitions of CFLAGS and LDFLAGS to
	`../Makefile'; hopefully this means the user can override them
	properly when compiling.

Fri Oct  7 15:12:19 1994  John Harper  (jsh@orcrist)

	* Version 3.2 released

Tue Oct  4 00:06:10 1994  John Harper  (jsh@orcrist)

	* lisp.h, symbols.c, values.c: new type V_Void. Used to denote
	a void value in a symbol.
	
	* symbols.c (cmd_symbol_value, cmd_symbol_function,
	cmd_default_value): these now take an extra argument `NO-ERROR'.
	Unless this is t, when the value is void they signal an error.

	* symbols.c: rewrote buffer-local variables to be compatible
	 with Emacs. Removed `set-buffer-variable' and
	`buffer-variable-p', renamed `delete-buffer-variables' to
	`kill-all-local-variables' and created the new functions,
	`make-local-variable', `make-variable-buffer-local' and
	`kill-local-variable'.
	(cmd_set): SF_BUFFER_LOCAL only means that a variable may
	have a local value; not that one should be created (see next
	entry)

	* lisp.h (SF_SET_BUFFER_LOCAL): new flag, means that setting
	this symbol gives it a buffer-local binding

Mon Oct  3 17:53:07 1994  John Harper  (jsh@orcrist)

	* io.c (read_tx): no longer scans for code section
	* buffers.c (eval_file_code): removed
	* editrect.c (col_copy_sect): removed

	* housekeeping.c (set-start-line): this was doing it's own
	rendering; a bad thing all in all

	* Most module's _kill function didn't set that module's private
	chain of objects to NULL. In particular the Amiga menus were
	stepping through the de-allocated view_chain and guruing...

Sat Oct  1 14:48:49 1994  John Harper  (jsh@orcrist)

	* amiga_keys.c (lookup_event_name): doesn't pass any qualifiers
	to MapRawKey() anymore

	* commands.c (cmd_call_command): the `N' code-letter was screwed

	* main.c, x11_display.c, amiga_display.c: startup modified so
	that the sys_init() function calls a new function inner_main()
	which does most of what main() used to do. This allows the Amiga
	version of sys_init() to play with the stack

	* amiga_display.c (sys_init): now contains code to allocate a
	larger stack if the `-stack' argument is given.

	* unix_processes.c (run_process): when using pipes stderr is also
	connected up

Thu Sep 29 15:33:23 1994  John Harper  (jsh@orcrist)

	* unix_processes.c (cmd_signal_process, cmd_interrupt_process,
	cmd_kill_process, cmd_stop_process, cmd_continue_process): All
	have a new argument, SIGNAL-GROUP, which makes them signal the
	whole process group.

Mon Sep 26 21:13:32 1994  John Harper  (jsh@orcrist)

	* unix_processes.c (cmd_make_process): default value of the
	connection-type component is now `pipe'

Tue Sep 20 14:22:22 1994  John Harper  (jsh@orcrist)

	* refresh.c (refresh_world_curs): no longer makes an ill-judged
	guess as to whether a window should be refreshed or not; sometimes
	it got it wrong :-(

	* keys.c (var_next_keymap_path): now passes the prefix-arg through
	the chain of multi-key bindings

	* x11_keys.c, amiga_keys.c (lookup_event): doesn't look for backslash
	characters anymore, also a `-' character as the first character in
	a token won't terminate the token.

Sun Sep 18 15:37:00 1994  John Harper  (jsh@orcrist)

	* misc.c (cmd_file_concat): renamed as `file-name-concat'

Wed Sep 14 15:08:52 1994  John Harper  (jsh@orcrist)

	* misc.c (cmd_path_name, cmd_base_name): renamed as `file-name-
	directory' and `file-name-nondirectory' respectively

	* symbols.c (bind_symbol, unbind_symbols): uses the `set-default'
	and `default-value' functions to bind variables
	(cmd_set_default, cmd_default_value): now checks for a V_Var type
	of object

Tue Sep 13 15:10:56 1994  John Harper  (jsh@orcrist)

	* unix_misc.c, amiga_misc.c (cmd_setenv): new function

	* housekeeping.c (resync_y): checks for a blank area at the
	bottom of the display; if one exists it's removed

Fri Sep  9 14:59:16 1994  John Harper  (jsh@orcrist)

	* render.c (cut_paste_lines): when deleting lines, and the stuff
	which couldn't be blitted is only partly in the buffer, the rest is
	cleared.
	(cut_paste_lines): doesn't check if `srcLine' is greater than
	the last line displayed anymore; this is perfectly valid

Tue Sep  6 14:47:48 1994  John Harper  (jsh@orcrist)

	* housekeeping.c (resync_y): when the cursor goes totally out
	of the display its put back at the center of the screen.

	* unix_server.c, amiga_server.c (cmd_server_open, cmd_server_close):
	these can now be called interactively

Sat Sep  3 15:50:18 1994  John Harper  (jsh@orcrist)

	* find.c (replaceit): now expands the replacement before deleting
	the original text; a much better idea (i.e. it works)

Thu Sep  1 14:17:57 1994  John Harper  (jsh@orcrist)

	* commands.c (cmd_interactive): now a special form

Wed Aug 31 20:28:06 1994  John Harper  (jsh@orcrist)

	* x11_eventloop.c, amiga_eventloop.c: the hook `close-gadget-hook'
	has been renamed to `window-closed-hook'.

Tue Aug 30 11:47:17 1994  John Harper  (jsh@orcrist)

	* keys.c (cmd_bind_keys, cmd_unbind_keys): the KEY-DESCRIPTION
	may now be an event

	* keys.h: redefined the EV_TYPE and EV_MOD defines so that
	most events will fit this field into 8 bits, and hence will
	use the pre-allocated static integers to save memory.

Mon Aug 29 12:47:47 1994  John Harper  (jsh@orcrist)

	* glyphs.c (cmd_set_glyph): when a glyph-string of "" is
	set the first glyph is set to ' '
	(cmd_glyph_to_char_pos): POS isn't optional anymore

	* buffers.c (mark_prin): doesn't add one to the marks line and
	column before printing them anymore. Also resident marks have
	their buffer printed not their name
	(cmd_set_mark): setting the name of the file should work now

Tue Aug 23 13:11:34 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_bit_not, cmd_bit_or, cmd_bit_and): renamed
	as `lognot', `logior' and `logand' respectively.

	* lispcmds.c (cmd_logxor): new function
	* lispmach.c (OP_LOGXOR_2): new opcode

Thu Aug 18 16:20:48 1994  John Harper  (jsh@orcrist)

	* streams.c (cmd_make_string_input_stream,
	cmd_make_string_output_stream, cmd_get_output_stream_string,
	cmd_streamp): new functions
	(cmd_file_p): renamed as `filep'

Wed Aug 17 14:30:17 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_defvar, cmd_defconst): the default value of
	buffer-local variables is set, not the local value
	(cmd_list): now conses up a *new* list, doesn't use its arg list;
	this could be risky
	(cmd_apply): now signals an error if its last argument is not
	a list

Tue Aug 16 19:32:02 1994  John Harper  (jsh@orcrist)

	* symbols.c (cmd_default_boundp, cmd_set_default): new functions

Sun Aug 14 19:45:52 1994  John Harper  (jsh@orcrist)

	* symbols.c: obarrays no longer use NULL to terminate a bucket: any
	non-symbol object can be used instead. This means that having a
	NULL sym_Next can signify that a symbol is not interned, making
	the SF_INTERNED flag obsolete -- it's been removed.

	* symbols.c (var_obarray): new variable -- provides access
	to the default obarray

Sat Aug 13 12:40:00 1994  John Harper  (jsh@orcrist)

	* glyphs.c (cmd_glyph_table_p): new function

	* lispcmds.c (cmd_reverse): this was totally screwed
	(cmd_aref, cmd_aset): changed documentation
	(cmd_arrayp, cmd_elt): new functions

	* editcmds.c (cmd_alpha_char_p, cmd_upper_case_p, cmd_lower_case_p,
	cmd_digit_char_p, cmd_alphanumericp, cmd_space_char_p): these now
	accept non-integer arguments -- they just return nil for them.

Fri Aug 12 14:09:06 1994  John Harper  (jsh@orcrist)

	* x11_display.c (x11_text_cursor): cursor to use in all windows
	* x11_windows.c (sys_new_window): sets the window's cursor

Thu Aug 11 20:13:10 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_mod): this was actually a remainder function
	not modulo; it's renamed to `%'
	(cmd_lsh): this was actually an arithmetic shift, new function
	`ash' to do this and lsh is fixed
	(cmd_integerp): new function

Sun Jul 17 13:46:40 1994  John Harper  (jsh@orcrist)

	* movement.c (cmd_next_char, cmd_goto_next_char, cmd_prev_char,
	cmd_goto_prev_char): now take a COUNT argument: the number
	of characters to move. The new args to next-char and prev-char
	are incompatible with the old ones :-(

Fri Jul 15 15:01:20 1994  John Harper  (jsh@orcrist)

	* lisp.c (lisp_init): int_cell is now (user-interrupt)
	not (error user-interrupt). This means that interrupts are no
	longer errors and therefore are unable to be caught by error-pro.
	* x11_eventloop.c, amiga_eventloop.c (event_loop): checks for
	explicitly for user-interrupt

Thu Jul 14 15:54:10 1994  John Harper  (jsh@orcrist)

	* unix_server.c (server_accept_connection): the connection fd is
	marked to be discarded on exec()
	(server_kill): closes the open connections now

Wed Jul 13 18:20:03 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_eql): new function
	* lispmach.c (cmd_lisp_code2): added OP_EQL

Tue Jul 12 13:05:08 1994  John Harper  (jsh@orcrist)

	* amiga_menus.c (cmd_set_menu): the action of the menu is a command
	not a list of forms

	* undo.c (undo_trim): when an undo is in progress tries to
	truncate the oldest of the three undo-lists

	* lispmach.c (CALL_1, CALL_2, CALL_3): macros containing the code
	to call a function for an instruction. Lots more opcodes have
	been added.	

Mon Jul 11 11:53:56 1994  John Harper  (jsh@orcrist)

	* edit.c (pad_pos): now adds the insertion to the buffer's undo-list

	* undo.c: doesn't use prefix counts to group items anymore. Instead
	a marker (`nil') is placed between each group. This lets me make
	each command a separate undo-group; also undo through several
	recursive edits works properly.

	* commands.c (var_last_command): no longer checks if VAL is nil

Sun Jul 10 20:06:15 1994  John Harper  (jsh@orcrist)

	* keys.c (print_event_prefix): now prints the whole sequence
	each time.
	(event_buf, event_index): records all events in the current
	sequence.
	(cmd_current_key_string): renamed to `current-event-string'

Thu Jul  7 15:05:40 1994  John Harper  (jsh@orcrist)

	* commands.c: New file; stuff for interactive function calling

	* streams.c (stream_puts, stream_putc): When writing to a string
	an extra byte is allocated to hold the zero terminator
	(cmd_format): writes each chunk of characters between format
	specifiers as one string instead of individually

Wed Jul  6 19:32:31 1994  John Harper  (jsh@orcrist)

	* streams.c (cmd_format): with a STREAM of nil a string is
	constructed.

	* edit.h, symbols.c, windows.c: Window-local Lisp variables are
	no longer supported; they were only used for one variable, the
	`buffer-list'. This variable is now an entry in the VW structure.

	* lispcmds.c (cmd_aset): doesn't modify V_StaticString's

	* editcommands.c (cmd_translate_string): checks for read-only
	strings

	* lisp.h (STRING_WRITEABLE_P): macro to check if a Lisp string
	may be modified.

Sun Jul  3 15:08:17 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_defconst): an error is signalled if the symbol
	is already bound.

	* refresh.c (refresh_window): when a deletion is recognised the line
	it occurs is *always* redrawn from the first char deleted.

	* misc.c (cmd_expand_file_name): new arg, QUALIFY-FULLY. When t
	this says to get an absolute name.
	* amiga_misc.c, unix_misc.c (sys_fully_qualify_file_name): new
	function for the above Lisp function.

	* movement.c: (cmd_file_start, cmd_file_end, cmd_goto_file_start,
	cmd_goto_file_end): renamed, ``file'' replaced by ``buffer''

	* buffers.c (cmd_file_length): now called `buffer-length'
	(cmd_file_name): now called `buffer-file-name'
	(cmd_set_file_name): now called `set-buffer-file-name'

Fri Jul  1 10:51:45 1994  John Harper  (jsh@orcrist)

	* refresh.c (flag_deletion): tx_ModEnd is set to the start of the
	deletion not the end
	(refresh_window): when (tx_ModDelta < 0) (i.e. a deletion) the
	cut & paste operation is a bit different now (hopefully this way
	works!?)

	* render.c (redraw_region): returns immediately when (START == END)

	* editcommands.c (sym_inhibit_read_only): new variable
	* edit.c (read_only): takes note of `inhibit-read-only' when it's
	bound and non-nil.

Wed Jun 29 16:48:46 1994  John Harper  (jsh@orcrist)

	* Major alterations to all files; I've tried to impose
	a sensible naming style onto all symbols. All global
	symbols have a prefix. This is either null for files
	common to all configurations, `x11_' for stuff accessed
	only by the X files, likewise for `unix_' and `ami_'.
	The `sys_' prefix is for things which are accessed from
	the common area but exists in one of the non-common
	files.

Tue Jun 28 14:42:30 1994  John Harper  (jsh@orcrist)

	* amiga_windows.c (newwindow): calculates for the status line
	when opening the window

	* amiga_display.c (initwinsys): uses onbreak() to hijack
	^C signals caught by stdio
	* configs/config.h.amiga (HAVE_ONBREAK): new macro for above

Sun Jun 26 16:26:43 1994  John Harper  (jsh@orcrist)

	* x11_windowsys.h, amiga_windowsys.h (DRAW_LINE): new macro,
	draws a 1-pixel wide line
	* render.c, x11_render.c, amiga_render.c, x11_windows.c,
	amiga_windows.c: all stuff to do with the status/message line
	is made system-independant. This means that messages on the
	Amiga now use the bottom line of the window as in X

	* amiga_eventloop.c (eventloop): in idle timeout calls
	print_event_prefix() and also refreshes the display if
	necessary.

	* amiga_keys.c (lookup_event_name): uses MapRawKey() to
	decipher unknown keycodes.

	* amiga_eventloop.c (eventloop): calls undo_distinct() when
	the current window changes

	* amiga_defs.h (TEST_INT): tests for SIGBREAKF_CTRL_C and calls
	amiga_interrupt_handler()
	* amiga_display.c (amiga_interrupt_handler): new function, resets
	the ^C signal bit and throws an interrupt
	(JadeProc): pointer to our process

Thu Jun 23 19:57:13 1994  John Harper  (jsh@orcrist)

	* keys.c (KEYTAB_HASH_FUN): macro defining how to make a hash
	key from an event. Now key-tables are 127 entries long not 128.	

	* keys.c: meta-sends-esc is reversed to become esc-means-meta, now
	there is no separate map for meta/esc keys

Wed Jun 22 16:38:52 1994  John Harper  (jsh@orcrist)

	* unix_processes.c (proc_notification): now blocks sigchld

	* keys.c (usekey): unbound insertions now set the last-command
	variable to t.

	* undo.c: now records when a buffer changes from un-modified
	to modified so this too can be undone.

Mon Jun 20 22:23:46 1994  John Harper  (jsh@orcrist)

	* undo.c: new file, undo recording and undo-ing
	* Wherever flag*tion() is called undo_record_*tion() is also
	called.
	* x11_eventloop.c (eventloop): calls undo_distinct() when the
	current window changes

	* editcommands.c (cmd_insert): now returns the position of the
	end of the insertion

Sat Jun 18 11:54:50 1994  John Harper  (jsh@orcrist)

	* lisp.c (read_str): an escaped newline is now ignored
	(read_symbol): checks that its static buffer doesn't overflow

	* x11_windows.c (unsleep): this may work now?
	(sleepwin, unsleep): now use the VWFF_SLEEPING flag
	* x11_eventloop.c (handleevent): if we get an Expose event while
	sleeping assume that we woke up. Also if the VWFF_FORCE_REFRESH
	flag is set we discard all Expose events, when one has a count of
	zero (the last) do a total redraw of the window

Thu Jun 16 20:18:58 1994  John Harper  (jsh@orcrist)

	* refresh.c (refreshwindow): sets vw_LastDisplayOrigin here after
	completing refresh
	* housekeeping.c (resyncxy): no longer sets vw_LastDisplayOrigin

	* movement.c (cmd_centre_display): new function

Wed Jun 15 16:06:13 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_concat): no longer stomps on memory when the
	string grows very quickly :-)

	* streams.c (cmd_write): optional LENGTH arg for strings

	* symbols.c (cmd_delete_buffer_variables): new function

Tue Jun 14 10:54:03 1994  John Harper  (jsh@orcrist)

	* windows.c (stdtitle): now calls calc_cursor_offset()

	* find.c (cmd_match_start, cmd_match_end): new functions; these
	replace the variables `find-last-start-pos' and `find-last-end-pos'.
	Now the position of any expression can be found and in strings
	as well as in buffers.

	* editcommands.c (cmd_offset_to_pos, cmd_pos_to_offset): new
	functions for converting between byte counts and positions

	* unix_processes.c (struct Proc): pr_UsePty changed to pr_ConnType
	(runproc): option to set the ECHO flag in a pty
	(cmd_set_process_connection_type): now uses named symbols

Mon Jun 13 00:44:26 1994  John Harper  (jsh@orcrist)

	* unix_processes.c (runproc): now connects stdin of the child to
	a defined file when running synchronously.
	(cmd_run_process): new arg IN-FILE to make use of the above feature
	(runproc, readfromproc): don't write to pr_OutputStream if it's nil

Sun Jun 12 02:05:10 1994  John Harper  (jsh@orcrist)

	* unix_processes.c (struct Proc): pr_File becomes pr_Prog, pr_Argv
	becomes pr_Args and is now a list of arguments 1..N. Arg #0 is
	taken from pr_Prog
	(cmd_start_process, cmd_run_process): new arg spec. ARGS are now
	passed as the last N args in the call. Also the PROCESS arg
	is optional, a vanilla process will be created if necessary
	(cmd_process_name, cmd_set_process_name): renamed to process-prog
	and set-process-prog
	(cmd_process_argv, cmd_set_process_argv): renamed argv to args and
	takes a list instead of a vector

	* lispcmds.c (cmd_copy_list, cmd_copy_string): combined into
	cmd_copy_sequence().
	(cmd_sequencep): new function

Sat Jun 11 19:21:00 1994  John Harper  (jsh@orcrist)

	* x11_eventloop.c (eventloop): some reorganisations

	* lisp.c (handleerror): now handles cursor and reresh itself

	* windows.c (cmd_title): renamed as `message', also a new arg
	saying draw it immediately
	(cmd_title_now): removed
	(var_status_line_cursor): variable controlling VWFF_STATUS_CURS

	* render.c (cursor): Takes note of VWFF_STATUS_CURS (but only
	in X11 so far)

	* edit.h (VW): vw_Sleeping and vw_NonStdTitle now in vw_Flags.
	New flag VWFF_STATUS_CURS means draw the cursor in the status
	line.

	* keys.c (usekey, print_event_prefix): a second after a prefix
	key is received the current prefix is displayed

Fri Jun 10 19:24:36 1994  John Harper  (jsh@orcrist)

	* streams.c (cmd_format): added octal formatting (`%o')
	(cmd_format): `%%' doesn't swallow an argument anymore

	* keys.c (usekey): the `unbound-key-hook' is now called for all
	unbound events -- not just keyboard events

	* amiga_keys.c: updated after yesterday's changes, not finished
	yet I can't remember the name of a function I need to use :-(

Thu Jun  9 11:32:49 1994  John Harper  (jsh@orcrist)

	* keys.c, keys.h: massive changes; all key/event structures are
	now standard Lisp types (vector & cons cells). Some new functions
	for manipulating events and their bindings.
	* x11_keys.c (lookup_event_name): new function

Wed Jun  8 20:04:27 1994  John Harper  (jsh@orcrist)

	* keys.c (sym_idle_hook): new hook, called periodically when idle
	time is available
	* amiga_eventloop.c, x11_eventloop.c (eventloop): calls idle-hook

	* values.c (cmd_garbage_collect): no longer prints a message
	while gc is in progress

Tue Jun  7 00:24:30 1994  John Harper  (jsh@orcrist)

	* edit.c (cmd_set_indent_pos): didn't rebuild line if it already
	had the correct number of indentation characters

	* unix_processes.c (queue_notify, proc_notification): The callback
	function for a process isn't called directly anymore, this is too
	risky.
	(cmd_make_process, runproc, cmd_fork_process, cmd_run_process): now
	more arguments can be passed to set the state of the process object.
	(cmd_process_connection_type, cmd_set_process_connection_type):
	support for using pipes *or* ptys when connecting to a process
	(cmd_fork_process): renamed as `start-process'

Mon Jun  6 20:23:55 1994  John Harper  (jsh@orcrist)

	* unix_misc.c (cmd_copy_file): oops, didn't open the destination
	file with O_TRUNC :-(

	* misc.c (cmd_substr): renamed as `substring' and significantly
	changed.

	* find.c (cmd_regexp_quote): new function

Sun Jun  5 22:58:43 1994  John Harper  (jsh@orcrist)

	* lisp.c, lispcmds.c, lispmach.c, lisp.h, x11_eventloop.c,
	amiga_eventloop.c: Interrupt support -- now you can break those
	annoying infinite loops :)
	* x11_display.c (x11_int_handler): handler for SIGINT

Sat Jun  4 14:08:48 1994  John Harper  (jsh@orcrist)

	* keys.c (var_this_command, var_last_command): new functions

Thu Jun  2 12:29:11 1994  John Harper  (jsh@orcrist)

	* Version 3.1 released

Wed Jun  1 21:02:03 1994  John Harper  (jsh@orcrist)

	* x11_windows.c (makemousepos): didn't check that the returned value
	was legal

Mon May 30 16:48:21 1994  John Harper  (jsh@deep)

	* windows.c (stdtitle): changed the format string

	* amiga_misc.c (cmd_file_req): sets the length of the returned string
	to its correct value

	* render.c (cutpastelines): doesn't assume that the window contains
	an integral number of lines -- screen debris was left between the
	end of the last line and the bottom of the window

	* misc.c (memchr): in case the C library doesn't provide memchr(),
	one of mine doesn't :(

	* configs/: new option in all config files `HAVE_MEMCHR'

	* amiga_menus.c (setallmenus, clearallmenus): Didn't ignore window
	objects which don't have a physical window open, this was causing
	Enforcer hits
	
Wed May 25 19:16:11 1994  John Harper  (jsh@orcrist)

	* find.c (findprev): kludged the index manipulation

	* movement.c (findmatchingbracket): new argument ESC plus code
	to check for escape chars
	(cmd_match_brackets): new arg ESC, for the above modification

Tue May 24 16:06:14 1994  John Harper  (jsh@orcrist)

	* movement.c (cmd_screen_bottom_line, cmd_screen_last_column):
	returned 1 to big

	* editcommands.c (get-char): didn't return newlines

	* lispmach.c (cmd_lisp_code2): renamed the conditional jumps

	* render.c (redraw_line_from, redraw_region): these now notice if
	they're told to start drawing before the first visible column

	* lispmach.c (cmd_lisp_code2): wasn't setting ThrowValue to NULL
	while evaluating unwind-protect forms

	* symbols.c (cmd_setq_default, cmd_default_value): new functions
	for accessing the default value of symbols

	* Makefile.in: no longer uses CFLAGS to pass the JADE_DIR define

Mon May 23 02:07:53 1994  John Harper  (jsh@orcrist)

	* Changed the origin of a buffer's coordinates to (0,0) not (1,1),
	what will this break??

	* glyphs.c (expand_tabs): didn't like START-GLYPH==0

	* editcommands.c (cmd_set_indent_pos, cmd_indent_to): options
	to only insert spaces, not tabs

	* movement.c: fixed the `tab' functions to work with glyph
	positions

	* stringmem.c (sm_free): when a (non-malloc'd) string is freed
	increment DataAfterGC by its size

Sun May 22 23:13:10 1994  John Harper  (jsh@orcrist)

	* values.c (cmd_garbage_collect): calls sm_flush() on the MainStrMem
	block.

	* buffers.c (cmd_destroy_buffer): doesn't bother calling sm_flush()
	anymore

Sat May 21 20:59:11 1994  John Harper  (jsh@orcrist)

	* refresh.c (refreshworldcurs): doesn't try to setvwtitle()
	closed windows anymore

Fri May 20 21:52:37 1994  John Harper  (jsh@orcrist)

	* configs: added HAVE_SETPGID and HAVE_SETPGRP options
	* unix_processes.c: takes note of the above macros

Thu May 19 21:02:06 1994  John Harper  (jsh@orcrist)

	* unix_client.c, amiga_client.c (main): resets the line number for
	each file.

	* x11_windows.c (cmd_window_left_edge, cmd_window_top_edge): these
	used to return coordinates relative to our parent window (created
	by the wm) not the root window.

Sun May 15 00:30:48 1994  John Harper  (jsh@orcrist)

	* lispmach.c: new instruction OP_RETURN

	* find.c (replacit, replaceitstr): calls flaginsertion() before
	inserting the string not after (when the pos has been advanced)

	* lispcmds.c (cmd_unwind_protect): temporarily sets `ThrowValue' to
	NULL while evaluating the body.
	* lispmach.c (cmd_lisp_code2): similar to the above when unwinding

Fri May 13 21:52:40 1994  John Harper  (jsh@orcrist)

	* editcommands.c (cmd_set_char): new function

Thu May 12 19:24:22 1994  John Harper  (jsh@orcrist)

	* lispmach.c: cmd_lisp_code renamed as cmd_lisp_code2 since
	compiled forms are now different.

	* lisp.c (string_print): no longer escapes tabs or newlines

	* editcommands.c (cmd_translate_string, cmd_get_char): new
	functions.

Tue May 10 21:19:29 1994  John Harper  (jsh@orcrist)

	* lisp.h, value.h: New definition of the VALUE type, no longer
	is it (void *)

Sun May  8 18:42:03 1994  John Harper  (jsh@orcrist)

	* editrect.c: New file. Most rectangle code has moved here from
	edit.c and updated to cope with the fact that a character's position 
	in a line may not be the same as its position on the screen. Also 
	lots of TAB handling.

	* keys.c (evalbinding): if the symbol `meta-sends-esc' is non-nil
	any meta-modified events get translated into ESC then the
	un-meta'd event.

Sat May  7 13:53:59 1994  John Harper  (jsh@orcrist)

	* glyphs.c: each buffer can now have its own glyph-table. A new
	data type for glyph-tables has been created. New functions to
	manipulate these.

Fri May  6 20:31:33 1994  John Harper  (jsh@orcrist)

	* editcommands.c (cmd_indent_to): new function

	* edit.c: changes uses of strcpy() and family to memcpy() so
	nul bytes don't cause havoc.

Thu May  5 17:08:23 1994  John Harper  (jsh@orcrist)

	* unix_processes.c (writetoproc): new arg BUFLEN

	* streams.c (stream_puts): new arg BUFLEN, the length of the
	string being written
	(stream_read_esc): now understands octal escapes of less than 3
	chars and hex escapes

	* lisp.h: strings allocated (as opposed to being string-constants)
	now contain a length field. This will allow these strings to
	contain '\000' characters. The macro STRING_LEN gives the number
	of characters in any type of Lisp string.

	* values.c: accommodate the above changes

	* io.c (cmd_write_file): uses fwrite() not fputs

Wed May  4 20:28:31 1994  John Harper  (jsh@orcrist)

	* edit.c (posinblock): for rectangular blocks uses glyph coords

	* housekeeping.c: the block marks are only updated in the y direction
        if rectangular blocks are being marked.

	* render.c (draw_bit): END arg is now inclusive

	* amiga_misc.c, unix_misc.c (fileexists): now returns bool

Tue May  3 08:30:52 1994  John Harper  (jsh@orcrist)

	* buffers.c (var_disk_tab, var_save_tabs): removed
	(var_screen_tab): renamed as var_tab_size

	* edit.h (struct _TX): removed tx_DiskTab and tx_SaveTabs :)

	* movement.c (cmd_next_tab, cmd_goto_next_tab, cmd_prev_tab,
	cmd_goto_prev_tab): new arg TAB-SIZE. Also the goto variants
	convert glyph-pos to char-pos. The other return the *glyph* pos.

	* find.c (strrchrn, strrstrn): renamed as mystrrchrn() and
	mystrrstrn() incase they clash with anyone's C library

	* misc.c (stpblk, stpalnum, cpyalnum): deleted, they were
	not used anymore

	* find.c (mystricmp): args toupper() and tolower() had side
	effects! Deleted this function since it's not used anymore
	anyway

	* housekeeping.c: #undef's no longer state the macro's args,
	I'm told this is illegal

	* movement.c (cmd_goto): renamed as cmd_goto_char
	(cmd_goto_glyph): new function

	* editcommands.c (cmd_indent_pos, cmd_set_indent_pos): hacked
	to allow `proper' TABs

	* edit.c (insertstring): no longer has to expand TAB chars.

	* io.c (readtx): rewritten, no longer has to expand TAB chars,
	should make it a lot faster?
	(writeline): not needed anymore

	* render.c: many changes to cope with the `glyphs' code, now
	there are two types of column position, the `character' one
	which is the number of characters from the start of the line, and
	the `glyph' pos, the number of glyphs from the start of the
	line.

	* glyphs.c: new file, manages mappings between characters and
	their printed representations. Includes new Lisp functions,
	`glyph-to-char-pos', `char-to-glyph-pos', `set-glyph' and
	`get-glyph'.

Mon May	 2 10:13:12 1994  John Harper  (jsh@orcrist)

	* windows.c (stdtitle): bracketing around mode names now shows
	if in a recursive-edit

	* values.c (cmd_dup_pos): renamed as cmd_copy_pos

	* streams.c (streamputc, streamputs): strings now have a number
	associated with them, their *actual* size.

	* lispcmds.c (cmd_rassoc, cmd_rassq): new functions
	(cmd_copy_string): new function

Sun May	 1 23:36:00 1994  John Harper  (jsh@orcrist)

	* lisp.c: Optimised some of the read functions, got rid of the
	nextlispexp() function.

Sat Apr 30 10:44:56 1994  John Harper  (jsh@orcrist)

	* symbols.c (symbols_init): nil and t are now constants

	* windows.c (cmd_make_window): only calls updatescroller() if
	tx is non-NULL, should fix the other Enforcer hit?

	* buffers.c (firstbuffer): now calls updatescroller() *after*
	switching in the first buffer, I think this should kill the
	Enforcer hit at startup?

	* refresh.c (refreshworldcurs): updates status line properly

	* edit.c (checksect, checkpos, checkline): didn't make sure the
	line number was positive

	* unix_client.c: now takes a series of files

	* amiga_eventloop.c (eventloop): Wait()'s for ServerSig as well

	* amiga_server.c, amiga_client.c: new files (untested, as yet)

Fri Apr 29 21:38:03 1994  John Harper  (jsh@orcrist)

	* unix_server.c, unix_client.c: new files

Thu Apr 28 19:21:43 1994  John Harper  (jsh@orcrist)

	* amiga_defs.h, unix_defs.h (DOC_FILE): renamed as DOC

	* unix_misc.c (geterrstring): macro HAVE_STRERROR replaces
	 ERRNO_STRING, much simpler.

Thu Apr 28 14:39:49 1994  J.S.Harper  (jsh@raven.ukc.ac.uk)

	* render.c (cutpastelines): fixed one [more] bug

Thu Apr 28 01:26:58 1994  John Harper  (jsh@orcrist)

	* editcommands.c (cmd_delete_area, cmd_cut_area): these now
	call padpos() on their section markers.

Wed Apr 27 19:53:27 1994  John Harper  (jsh@orcrist)

	* unix_memory.c, unix_defs.h (myfree, initmem, killmem): these are
	now macros in unix_defs.h

Tue Apr 26 22:59:44 1994  John Harper  (jsh@orcrist)

	* Makefile.in: new file, cpp source to make src/Makefile. Now only
	one configuration file has to be edited, src/config.h, it's used
	for both Makefile and C configurations.

Mon Apr 25 22:14:41 1994  John Harper  (jsh@orcrist)

	* keys.c (cmd_current_key_string): new function

	* buffers.c (var_minor_mode_names): list of strings which is printed
	in the status line.
	* edit.h (TX): tx_MinorModeNameList and tx_MinorModeNameString

Sun Apr 24 13:06:56 1994  John Harper  (jsh@orcrist)

	* unix_misc.c (cmd_directory_files): oops. If it couldn't open the
	named dir, it signalled the error with the C-string not the Lisp one.

	* misc.c (cmd_expand_file_name): new function
	* unix_misc.c (expand_file_name): does the work of the above function
	* unix_defs.h: #define EXPAND_FILE_NAME expand_file_name

	* unix_processes.c (runproc): initialises the pty more carefully

	* streams.c (posputc, posputs): uses `tx_DiskTab' for tab size, not
	`tx_TabSize'. What will this break?

Sat Apr 23 21:05:34 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_defvar, cmd_defconst): these are now in C

	* find.c (cmd_looking_at): used to set `find-last-end-pos' to the
	wrong position, also, the NOCASE_P arg was being ignored.

Wed Apr 20 16:02:28 1994  John Harper  (jsh@orcrist)

	* Version 3.0 released

Tue Apr 19 20:51:28 1994  John Harper  (jsh@deep)

	* refresh.c (refreshworldcurs): Checks if buffer has switched

	* amiga_minrexx.c (disp_rexx_port): changed the way that results are
	returned. Numbers and Strings are returned via RESULT. `nil'
	means RC=1 (command failed), anything else RC=0 (command succeeded).

Mon Apr 18 20:54:42 1994  John Harper  (jsh@orcrist)

	* lisp.c (LispDepth, MaxLispDepth, var_max_lisp_depth, _eval, funcall):
	Protection against infinite recursion.

Mon Apr 18 11:13:52 1994  John Harper  (jsh@deep)

	* prefs.c (copyfileprefs): by default `save-tabs' is 'all

Sun Apr 17 19:29:37 1994  John Harper  (jsh@orcrist)

	* refresh.c (refreshwindow): simpler way of checking if block has
	already been drawn. Not good, but it may actually work!

	* render.c (cursor): checks if cursor is off bottom of window

	* x11_commandline.c (docmdline): now redraws the separator line
	on an expose event.

	* unix_misc.c, amiga_misc.c (cmd_move_file): renamed to
	`cmd_rename_file'.

	* unix_misc.c, amiga_misc.c (cmd_copy_file, cmd_file_nlinks,
	cmd_file_modes, cmd_set_file_modes): New functions

Sat Apr 16 14:04:45 1994  John Harper  (jsh@orcrist)

	* Added license notices at the beginning of all source files.

	* All instances of the string `jed' have been changed to `jade'. I
	decided to change its name since there is at least one other editor
	called jed.

Fri Apr 15 14:35:55 1994  John Harper  (jsh@deep)

	* amiga_windows.c (newwindow, sleepwin): `DefDims' contains the
	number of rows/columns, not pixels.

	* amiga_display.c (initwinsys): Command line arguments `-pubscreen'
	and `-font'

Thu Apr 14 20:23:27 1994  John Harper  (jsh@deep)

	* values.c (values_kill): Due to a typo blocks of Numbers weren't being
	deallocated, now they are.

	* amiga_eventloop.c (eventloop): Fixed idle test. It's not ideal
	-- it uses 10 Intuiticks equal one second. Of course, the main
	loss is that Intuiticks are only sent while one of our windows is
	active :-(

Thu Apr 14 11:31:49 1994  John Harper  (jsh@orcrist)

	* amiga_menus.c: More or less wholly rewritten. Doesn't take menu
	definitions from a file anymore, but from a list. No support for
	submenus at the moment though.

	* buffers.c (makemarksres, makemarksnonres): Don't bother checking
	for a NULL `tx_FileName', this can't happen.

	* values.c (markvalue): Marks don't get gc-marked down their
	chain, this was wrong.
	* buffers.c (sweep_mark, unchainmark): To go with the above, marks
	are now unchained from their buffer when swept.

	* misc.c (cmd_file_concat): function to stick together
	path-name components.
	* amiga_misc.c, unix_misc.c (addfilepart): for the above function

Wed Apr 13 11:31:45 1994  John Harper  (jsh@orcrist)

	* symbols.c (bindsymbol, unbindsymbols): Can now bind to V_Var
	objects properly (the function is used to retrieve and set its
	value)

Tue Apr 12 14:55:56 1994  John Harper  (jsh@orcrist)

	* x11_windowsys.h: CLR_RECT and SET_RECT did one two many columns/rows

	* find.c (cmd_looking_at): new function

Mon Apr 11 23:17:56 1994  John Harper  (jsh@orcrist)

	* symbols.c: `make-*-variable' functions have been changed to
	`set-*-variable'. They don't make anything, just set a flag.

Sun Apr 10 19:22:35 1994  John Harper  (jsh@orcrist)

	* find.c (strrchrn): Now uses a pointer instead of an array index.

Fri Apr	 8 20:21:07 1994  John Harper  (jsh@orcrist)

	* symbols.c (cmd_symbol_value, symbol_function): Got rid of the
	`void-symbol-function' hook.

Tue Apr 05 15:19:47 1994  John Harper  (jsh@deep)

	* amiga_windows.c (cmd_font_size): Removed, obsoleted by the
	`font-y-size' function

	* windows.c (cmd_font_x_size, cmd_font_y_size): New commands

	* amiga_misc.c (cmd_full_name): No longer returns NULL when it
	can't read the ENV: variable `REALNAME'.

	* amiga_clipboard.c: Errors now reported via signal, not just printed
	in the status line.
	(readclip): Used to return a normal string not a VALUE

Mon Apr	 4 12:40:00 1994  John Harper  (jsh@orcrist)

	* Makefile, DMakefile: Now *all* source files are scanned for
	doc-strings. This is so that there is only one `DOC-strings' file
	for any particular revision (not one for each target OS).

Sun Apr	 3 20:57:24 1994  John Harper  (jsh@orcrist)

	* main.c, x11_eventloop.c, amiga_eventloop.c: Now eventloop() calls
	refreshworldcurs() when it is entered, this used to be done in
	cmd_recursive_edit() (but not in main()).

Thu Mar 31 12:27:21 1994  John Harper  (jsh@orcrist)

	* Files in the directories `amiga/', `unix/' and `x11/' have been
	moved into the root source dir with prefixes of `amiga_', `unix_' and
	`x11_' respectively. This makes compilation a lot easier.

Tue Mar 29 00:45:13 1994  John Harper  (jsh@orcrist)

	* render.c: As much as possible of x11/render.c has been moved to
	here. Uses macros defined in windowsys.h to do as much platform-
	independant rendering as possible. This turns out to be everything
	but the prompt line.

	* refresh.c: Copied most of render.c into this file.

Fri Mar 25 13:20:11 1994  John Harper  (jsh@orcrist)

	* x11/eventloop.c: increasing the vertical size of a window no longer
	leaves the old status line in the middle of the display (if the buffer
	doesn't overwrite it).

	* values.c (cons_sweep): wholly unused blocks are now freed
	(markvalue): attempt to limit recursion as much as possible

Thu Mar 24 09:51:07 1994  John Harper  (jsh@orcrist)

	* symbols.c: Got rid of `symbol-flags' function. Now there's none
	of these annoying `flags' functions left :-)

	* buffers.c: TXFF_IMMORTAL and TXFF_NOCHANGE are consolidated
	into TXFF_SPECIAL. New functions `set-buffer-special' and
	`buffer-special-p'. Got rid of `tx-flags' function.
	(set-buffer-name, set-file-name): Order of arguments reversed,
	this is more consistent with all other `set*' functions.

	* files.c: renamed to buffers.c, this makes more sense now

Wed Mar 23 12:06:02 1994  John Harper  (jsh@orcrist)

	* values.c (markvalue): Two new algorithms for marking cons cells

	* General code cleanup so that it will compile with -Wparentheses.

Sat Mar 19 03:45:03 1994  John Harper  (jsh@orcrist)

	* find.c (cmd_find_next_regexp, cmd_find_prev_regexp, cmd_regexp_match,
	cmd_regexp_match_line): optional arg `IGNORE-CASE-P'

	* regexp/regexp.h, regexp/regexp.c: new flag to regexec2(),
	REG_NOCASE, means ignore case when comparing strings (but not
	for character classes).

	* io.c: new command `read-file-from-to'

	* streams.c: new commands `read-line' and `read-file-until'

Fri Mar 18 01:03:28 1994  John Harper  (jsh@orcrist)

	* doc/: Directory with manual stuff, new Makefile

	* find.c: New command `regexp-expand-line' a cross between
	`regexp-expand' and `regexp-match-line'.

Thu Mar 17 18:55:54 1994  John Harper  (jsh@orcrist)

	* jed.h, windows.c: Got rid of obsolete VWFF_NOSAVEPOS flag. Also
	the var `vw-flags' is gone. Functions `rect-blocks-p' and
	`set-rect-blocks' are used instead (the other flags are internal).

	* unix/processes.c: Now uses SA_RESTART if possible and O_NONBLOCK
	instead of O_NDELAY.

Tue Mar 15 23:04:34 1994  John Harper  (jsh@orcrist)

	* jed.texi: New file, at last! I've started the manual

	* files.c (var_save_tabs): Now uses descriptive symbols for the
	options, not magic numbers.

Mon Mar 14 21:21:41 1994  John Harper  (jsh@orcrist)

	* unix/processes.c: Now uses sigaction() and sigprocmask() instead
	of signal(). I'm not sure if I've done this correctly, from looking
	at the kernel sources it seems ok...

Sat Mar 12 22:25:36 1994  John Harper  (jsh@orcrist)

	* x11/display.c: Added `-name' option -- sets the name which is
	primarily used to lookup resources with.
	* x11/display.c (getxresources): If unable to find a resource with
	the program name tries with the string "Jed".

Thu Mar 10 22:08:33 1994  John Harper  (jsh@orcrist)

	* find.c: (cmd_replace_regexp, cmd_replace_string): Checks if `pos'
	is out of range (instead of just seg-faulting).

Mon Mar	 7 21:27:25 1994  John Harper  (jsh@orcrist)

	* lispcmds.c: New symbol `lisp-lib-dir'
	* lisp.c (cmd_add_doc_string): New command to write a new doc-string
	to the DOC file and return its index.

Sun Mar	 6 12:49:38 1994  John Harper  (jsh@orcrist)

	* windows.c (window_prin): Handles dead windows now.

	* windows.c (cmd_destroy_window): Now does (throw 'quit 0) when no
	more windows exist.
	* windows.c, amiga/windows.c: Fixed `NumWindows' variable -- it's
	now decremented in `cmd_destroy_window'.

Sat Mar	 5 01:21:35 1994  John Harper  (jsh@orcrist)

	* edit.c: #if 0'd `stuffline'. This is now done inline where functions
	can take advantage of knowing the length of the line.

	* editcommands.c (cmd_translate_area): Applies a translation-table
	(a string) to a region of a buffer. Also, variables `upcase-table' and
	`downcase-table' are provided. Needs `cmd_translate_rect'.

Fri Mar	 4 18:55:38 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_functionp, cmd_special_form_p): Fixed null-ref
	when a symbol has no function value.

	* edit.c (rectinsertstring, rectdeletesect): Now calls the `flag*'
	functions properly. Also fixed bug that inserting past the bottom
	of the file didn't work properly.

	* files.c: Changed `cmd_find_file' to `cmd_get_file_buffer' and
	`cmd_find_buffer' to `cmd_get_buffer'.

Thu Mar	 3 21:36:01 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_eval_hook2): Could exit with `GCinhibit' still set.

	* keys.c (usekey): Now checks for a read-only buffer before inserting
	a keypress.

Mon Feb 28 19:34:54 1994  John Harper  (jsh@orcrist)

	* symbols.c, lisp.h: New flag in Symbol struct: SF_INTERNED.
	This gets set when a symbol is interned. Lets me protect against
	interning a symbol twice.

	* streams.c (cmd_stdin_file, cmd_stdout_file): These didn't
	actually set the LFF_DONT_CLOSE flag which I had so carefully
	prepared for them :-(

Sun Feb 27 20:48:56 1994  John Harper  (jsh@orcrist)

	* x11/windows.c (activatewin): Actually does something now -- raises
	the window and warps the mouse to it's top-left corner.

Tue Feb 22 21:58:18 1994  John Harper  (jsh@orcrist)

	* x11/render.c (cutpastelines): Doesn't bother if `dstLine' is off
	bottom of window.

	* lisp.c, lispcmds.c, lispmach.c, ../lisp/lisp.jl: Got rid of 'lambda
	throw tag, this won't work as expected in some pieces of compiled
	code. Replaced by 'defun tag which returns a value from a defun.

Mon Feb 21 02:05:56 1994  John Harper  (jsh@orcrist)

	* lispcmds.c (cmd_load): Now takes note of variable `load-path' (list
	of directory names) and warns if compiled file is older than it's
	source. Also an option to suppress the error when file doesn't exist.

Sun Feb 20 21:20:02 1994  John Harper  (jsh@orcrist)

	* io.c (cmd_write_buffer_area): New command, writes a portion of
	a buffer to a file.

Sat Feb 19 00:45:53 1994  John Harper  (jsh@orcrist)

	* lisp.c, lispmach.c (cmd_backtrace): Now keeps a stack of all
	living Lisp function calls. This is mainly so it's easy to see
	where an error occurs.

	* lisp.c [mainly]: Error signalling written. New subrs, signal,
	error-protect (similar to emacs' `condition-case') and a var,
	debug-on-error. New byte-opcodes introduced -- op-signal and
	op-error-protect.

Tue Feb 15 20:59:53 1994  John Harper  (jsh@orcrist)

	* x11/render.c (cutpastelines): Some optimisation of what lines get
	moved (now leaves trailing blank lines alone).

	* unix/misc.c (cmd_user_login_name): Tries getlogin() before
	getpwuid().

Mon Feb 14 21:32:27 1994  John Harper  (jsh@orcrist)

	* Changed doc-string handling -- now all subr doc-strings are kept in
	a separate file. All source files containg `DEFUN's have been
	changed to accomplish this and a new tool `makedoc' has been written.
	This only saves about 40K in the binary but since that was about a
	quarter of the whole size I think it's worth it.

Sat Feb 12 14:35:05 1994  J.S.Harper  (jsh@falcon.ukc.ac.uk)

	* find.c (cmd_regexp_match_line): New command, matches a regexp
	to a line of a buffer.

	* movement.c (cmd_next_tab, cmd_goto_next_tab, cmd_prev_tab,
	cmd_goto_prev_tab): These would go into a (near-)infinite loop
	when given a negative argument.

	* unix/misc.c (cmd_user_full_name): `FULL_NAME_TERMINATOR' option.

Sat Feb 12 01:28:01 1994  John Harper  (jsh@orcrist)

	* misc.c (cmd_major_version_number, cmd_minor_version_number): New
	commands.

Thu Feb 10 03:15:12 1994  John Harper  (jsh@orcrist)

	* render.c: '#if 0' out `cmd_refresh_window'. This isn't possible
	anymore -- there's no way of saying that a certain window has been
	updated re: a buffer while other views of that buffer haven't. This
	is no big loss, use `refresh-all' instead.

	* jed.h, x11/windowsys.h, amiga/windowsys.h: Took out most #ifdef's
	from the VW structure. Now all window-system specific bits of a VW
	are in a separate structure (`VW_WindowSystem').

Wed Feb	 9 22:46:34 1994  John Harper  (jsh@orcrist)

	* jed.h, files.c, ../lisp/buffers.jl: Fixed problem of buffer being
	marked unmodified after an auto-save. -Introduced new field,
	`tx_ProperSaveChanges', containing the change count at the last
	time the buffer was written to its file (*not* an auto-save).

	* io.c (readtx, writetx): No longer assumes that all files end
	in '\n'. This means that files without a trailing newline don't
	get given one anyway when they're written to disk.

Tue Feb	 8 03:29:19 1994  John Harper  (jsh@orcrist)

	* files.c (cmd_buffer_changes, cmd_buffer_modified_p,
	cmd_set_buffer_modified): New method of dealing with modification
	counts. `tx_Changes' is *never* reset -- when the buffer is
	`un-modified' another field `tx_LastSaveChanges' is set to the
	current value of `tx_Changes'. This is so the new refresh code
	can rely on the change counter.

	* render.c, x11/render.c, edit.c, editcommands.c: Rewrote functions
	which control what gets redrawn and when. This almost works. Much
	more efficient and loses some embarassing misfeatures.

Sun Feb	 6 01:25:15 1994  John Harper  (jsh@orcrist)

	* lisp.h, streams.c: New flag in LFile structure, `LFF_DONT_CLOSE',
	means *never* fclose() the lf_File field.
	* streams.c (cmd_stdin_file, cmd_stdout_file): Access to stdin/out.
	* .gdbinit: New file, command to print a lisp object in gdb.

	* lisp.c (bindlambdalist): uses static symbols to match ampersand-
	keywords (`&optional', `&rest', `&aux').

	* amiga/misc.c: merged amiga/io.c into this file.
	* amiga/misc.c (cmd_user_login_name, cmd_user_real_name,
	cmd_user_home_directory, cmd_system_name): New commands in line
	with their unix counterparts, get their values from strategically
	placed environment variables.

	* unix/misc.c: merged unix/io.c into this file.

	* unix/io.c (cmd_user_login_name, cmd_user_real_name,
	cmd_user_home_directory, cmd_system_name): These now cache their
	results after the first time they're called.
	* unix/io.c (cmd_system_name): Now returns the full hostname, with
	domains and everything.

Sat Feb	 5 21:36:22 1994  John Harper  (jsh@orcrist)

	* windows.c (cmd_with_window): special-form (similar to `with-buffer').
	* lispmach.c, ../lisp/compiler.jl: support for above special form, new
	opcodes `swap-window' and `windowp'.

	* lispmach.c: Put stack bounds checking inside `#ifdef PARANOID'

	* unix/processes.c (signalprocess): Signals no longer use characters.
	(Unless you define `SIGNALS_VIA_CHARS'.)

Fri Feb	 4 23:26:31 1994  John Harper  (jsh@orcrist)

	* ChangeLog starts here, I've decided to try and keep one of these
	things.
