2008-02-23  Albert Graef  <Dr.Graef@t-online.de>

	+ 7.11

	* modules/clib/system.q, system.c: support for highres timers

	New functions (nanotime, nanosleep, etc.) are provided to access
	the POSIX 1003.1-2001 timer functions (clock_gettime et al). The
	interface supports all the available standard (realtime,
	monotonic, cpu process and thread) timers.

2008-02-22  Albert Graef  <Dr.Graef@t-online.de>

	* src/sys.c: support for highres timers

	On systems where clock_gettime or gettimeofday is available, they
	will be used for the builtin time function instead of ftime/time.

	* modules/clib/clib.c: bugfix: timeout for await is specified in
	seconds, not milliseconds

	new: allow timeouts to be specified with try function on mutexes
	and semaphores

	This allows mutexes and semaphores to be locked/read with an
	absolute timeout value, using try (MUTEX,TIME) or try (SEM,TIME)
	instead of just try MUTEX or try SEM. This works analogously to
	await (COND,TIME) which has always been available.

	NOTE: The new try timeout functionality is only available on newer
	systems which already have the pthread_mutex_timedlock and
	sem_timedwait routines in the POSIX threads library. Otherwise the
	timeout value will just be ignored, i.e., the routines will return
	immediately (as if no timeout value was specified).

2008-02-21  Albert Graef  <Dr.Graef@t-online.de>

	+ 7.11 RC3

	* stdlib/bag.q, dict.q, hdict.q, set.q: improved AVL tree
	implementation for the container types by Jiri Spitz

	The improved algorithm has its origin in the SWI-Prolog
	implementation of association lists by R.A.O'Keefe and Jan
	Wielemaker (see assoc.pl at http://www.swi-prolog.org). Jiri
	rewrote the algorithm in Q and also added the deletion operations
	which were missing in the Prolog version. While the original
	implementation (following Bird/Wadler) was more straightforward
	and looked a bit nicer, tests indicate that updating the new data
	structures is at least twice as fast for large trees, quite a
	notable improvement!

2008-02-16  Albert Graef  <Dr.Graef@t-online.de>

	* modules/odbc/odbc.c, odbc.q: add odbc_tables, odbc_columns,
	odbc_primary_keys, odbc_foreign_keys functions to retrieve
	information about tables in the current database

2008-02-15  Albert Graef  <Dr.Graef@t-online.de>

	* modules/odbc/examples/odbc_examp.q: fix up sample menagerie
	database so that it works with strictly ANSI-compliant RDBMS's
	without any ado

	* modules/odbc/odbc.c, odbc.q: add odbc_typeinfo function
	(interface to SQLGetTypeInfo()), as suggested by Tim Haynes

2008-02-14  Albert Graef  <Dr.Graef@t-online.de>

	* modules/odbc/odbc.c, odbc.q: add odbc_getinfo function (direct
	interface to SQLGetInfo())

2008-02-12  Albert Graef  <Dr.Graef@t-online.de>

	+ 7.11 RC2

	* modules\odbc\examples\odbc_examp.q: fixes for compatibility with
	MS Access

	Unfortunately this isn't automatic yet, as the current workaround
	doesn't work with other databases, but there's a single line in
	the config section at the beginning of odbc_examp.q which you can
	uncomment to make this example work with MS Access on Windows.
	Note that you also have to create an ODBC data source named
	"myodbc" before you can initialize the sample tables with the
	'init' routine.

2008-02-12  Albert Graef  <Dr.Graef@t-online.de>

	* modules/odbc/odbc.c (set_arg, sql_exec): bugfixes in parameter
	binding and error checking of SQLBindParameter() calls

	This also works around some bugs in the MS Access ODBC driver,
	which causes it to reject NULL and empty string parameter values
	in SQL insert statements. (Bug reported by Jiri Spitz.)

2008-01-23  Albert Graef  <Dr.Graef@t-online.de>

	+ 7.11 RC1

	* modules/clib: move glob and regex functions from system back
	into clib

2008-01-22  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.q, modules/clib/clib.c: add support for
	reading and writing slices of byte strings in addition to single
	elements

	More specifically, the get_xxx operations can now be invoked with
	a pair of indices (I,J) to get a slice from a byte string. This
	works like sub/bsub, but uses indices relative to the element
	type. Likewise, the put_xxx operations can now be invoked with a
	byte string argument rather than a single element, to replace an
	entire slice of a byte string with a single operation.

2008-01-18  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.q, modules/clib/clib.c: add int/float vector
	operations, as suggested by John Cowan

	These allow you to treat byte strings as mutable C vectors of
	signed/unsigned 8/16/32 bit integers or float/double values.
	Operations to convert between such C vectors and corresponding
	lists of integers/floating point values are provided as well.

2008-01-17  Albert Graef  <Dr.Graef@t-online.de>

	* src/uchar_props_data.c: updated to latest from ICU 3.8

2008-01-16  Albert Graef  <Dr.Graef@t-online.de>

	* bump version number, update docs

	* src/qbase.c: added \&entity; escapes to string syntax, per
	request by Rob Hubbard

	As suggested by John Cowan, the supported entity names follow the
	W3C "XML Entity definitions for Characters", as of W3C Working
	Draft 14 December 2007. See: http://www.w3.org/TR/xml-entity-names/

2007-12-16  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.10

	* modules/clib/clib.c, modules/clib/system.c, modules/clib/clib.q,
	modules/clib/system.q: moved SIG* and SCHED* constants from
	system.q to clib.q

	* modules/clib/system.c: add missing coerce_float function (bug
	reported by Ryan Schmidt)

2007-12-07  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.9

	* src/qmparse.y: fix unhandled "External object" exceptions

	These are now translated to ordinary syntax errors (except when
	parsing variable dumps, where, as before, they are silently
	ignored), and thus make val/valq fail instead of throwing an
	exception (which couldn't even be caught with catch).

	* src/qc.y: fix broken error rule

	Since we now return an artificial EOFTOK token at end-of-file, the
	parser was looping in error recovery at eof (bug reported by Rob
	Hubbard).

2007-12-01  Albert Graef  <Dr.Graef@t-online.de>

	* src/qm.c, src/qmfuns.c (qmfreads): get rid of the reads mutex

	This doesn't seem to serve any real purpose any more, and is a
	very bad idea anyway. So let's see how well we can live without
	it.

2007-10-27  Albert Graef  <Dr.Graef@t-online.de>

	* src/q.c, src/qc.y: enlarge the opts string holding the options
	message, to prevent buffer overflow (bug reported by Gerard
	Milmeister)

2007-10-21  Albert Graef  <Dr.Graef@t-online.de>

	* src/qctables.c (dclfun): allow extern redeclarations of
	constructors

	These may be emitted by q-swig, and are useful in particular for
	virtual constructors which are implemented in C.

2007-10-20  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: fix some glitches in the reference sequence
	examples (Section 12)

2007-10-15  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.8

	* src/qcrules.c, src/qm.c: fix up treatment of irrefutable matches
	and lhs where clauses in the debugger

	Just optimizing away irrefutable matches confuses the debugger, so
	we now generate a dummy MATCHOP instruction for the non-existing
	start state -1 instead. Also fixed a bug in the debugger which
	caused it to use a wrong stack offset for the local variables when
	working on a secondary rule depending on shared variables defined
	in an earlier "master" rule.

2007-10-05  Albert Graef  <Dr.Graef@t-online.de>

	+ 7.8 RC2

	* src/qclex.l (sym_import): only import _public_ symbols in
	automatic qualified import

2007-10-04  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/system.q: remove bogus import clause

	* src/qc.y: prevent potential segfaults on bad symbols

	+ 7.8 RC1

	* examples/rot13.q: added

	* stdlib/string.q: make generic list operations work on strings:
	all, any, append, cat, cons, do, dowith, dowith3, drop, dropwhile,
	filter, foldl, foldl1, foldr, foldr1, hd, init, last, map, pop,
	push, reverse, scanl, scanl1, scanr, scanr1, take, takewhile, tl,
	top, zip, zip3, zipwith, zipwith3; new mkstr operation

	This was suggested by Alexander Nickolsky in private mail a while
	ago. As a result, all common list operations can now be used on
	strings and will do The Right Thing there, too (hopefully).

	This doesn't really turn strings into lists (the internal string
	representation hasn't changed and occasionally you still have to
	use strcat and chars to convert from/to lists), but for many
	purposes string values can now be used just like special list
	values.

	Note that, as 'cat' and 'map' are now defined on strings, strings
	can now even be used as sources in binding clauses of all types of
	comprehensions. E.g.: strcat [C-1 : C in "IBM"] ==> "HAL".

	* stdlib/reftypes.q: make get, fill, put and putmap work on all
	reference containers which have a 'list', 'list2' or 'vals'
	function; add support for 2D sequences

2007-10-03  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/reftypes.q: update construction and update functions to
	make use of the new map and do functions on tuples

	In particular, this resolves a performance issue, pointed out by
	John Cowan, with the reference tuple update function which in the
	prototype implementation would need linear space. Now a 'put'
	applied to a reference tuple and a corresponding value tuple only
	needs O(1) space, as one might reasonably expect.

	Also: Moved the ':=' assignment operator to clib.q, where it
	really belongs, and made the dereferencing index operator '!!' 
	more generic so that it will work with any indexed reference
	container.

	* stdlib/stdlib.q etc.: refactoring of the standard library

	Moved the string operations in stdlib.q to string.q, and the tuple
	operations to a new tuple.q module. Moreover, the following
	operations have been extended to also work with tuples: cat, map,
	do, dowith, dowith3, reverse. The tuple versions of map and the
	do/dowith functions all run in constant space, which is necessary
	to implement efficient "in-place" updates of reference tuples;
	this performance issue with the prototype implementation in
	reftypes.q was pointed out by John Cowan. streamcat has been made
	to work with tuples as well. This now also makes tuples work in
	binding clauses of all types of comprehensions.

	* src/opcode.h, src/qc.y, src/qctables.c, src/qmparse.y,
	src/qmprint.c, src/qmfuns.c, stdlib/prelude.q, stdlib/cond.q: add
	tuple enumerations and comprehensions

	These now work just like list enumerations and comprehensions,
	including the usual syntactic sugar, you just have to replace the
	brackets with ordinary parentheses. Note that right now binding
	clauses in tuple comprehensions still draw values from lists or
	streams, only the result is a tuple. (This has been fixed already;
	see above.)

	Right now, both constructs are actually implemented in terms of
	the corresponding list constructs and use the 'tuple' function to
	convert the end result to a tuple. This seems to be reasonably
	efficient, though.

2007-10-02  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/reftypes.q: new module to work with reference tuples,
	lists and streams, as discussed on the mailing list (based on a
	proposal by John Cowan)

	* stdlib/stdlib.q: add missing mktuple function

	* src/q.c, src/qc.y, src/qctables.c: new '--paranoid' option

	* src/qc.y (main): set default warning level from QWARN
	environment variable

	* src/qclex.l, src/qctables.c: fix treatment of "self" qualifiers

	If a module contains qualids referring to itself, e.g. 'foo::bar'
	in module 'foo', these would stop working if the module was
	imported under an alias (e.g. import foo as myfoo). We now check
	the "real" module name to correctly handle this case.

	* stdlib/stdtypes.q: move view definitions to the individual
	modules, so that these can be imported separately

	* doc/q.1, doc/qdoc.texi: updated documentation

2007-09-29  Albert Graef  <Dr.Graef@t-online.de>

	* bump version number (we're about to release 7.8 RC1 now)

	* src/qclex.l: allow operator symbols in qualified import and
	include clauses

	* examples/*.q, modules/*/examples/*.q: fix up examples for the
	slim prelude

	* src/qmparse.y (whois): New 'whois' command which is an improved
	version of the existing 'whos' command. Also fixed some bugs in
	the new implementation of 'whos'.

	'whois' works like 'whos', but also reports under which fully
	qualified names the given symbols are actually available in the
	global namespace. This is similar to the format used by whos when
	it reports an ambiguous symbol, and is rather useful as whos only
	reports the "normalized" (unaliased) symbols a given name refers
	to. The whois command now also makes it possible to determine
	exactly which symbols, from which modules visible in the global
	namespace, match the given symbol (function/variable identifier or
	operator).

	NOTE: It would be even better if we could report *all* visible
	aliases of a given symbol (even if they don't have the same
	printname as the given symbol), but this would be rather slow with
	the current implementation of the symbol table (and couldn't be
	supported efficiently without adding major bloat).

	* src/qmparse.y (whos): whos command now also gives line numbers
	for each symbol

	Please note that the line numbers reported by whos just denote the
	first occurrences of a symbol. Often this will be the position of
	the definition or declaration of a symbol, but as the Q language
	allows you to use a symbol before (or even without) defining or
	declaring it, this isn't always the case.

	* src/qctables.c (unresolved_forwards): at long last, -w reports
	the proper line numbers of undeclared symbols

2007-09-28  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmparse.y (whos): let the whos command print possible
	alternatives in case of an ambiguous symbol name, instead of just
	aborting with an error message

	* src/q.c, src/qc.y, src/qclex.l: allow '-' as the main script to
	read script from stdin

	* src/qc.y, src/qclex.l, src/qctables.c: alias code refactoring
	and bugfixes

	Cleaned up the code processing identifiers in special declaration
	contexts, and fixed a related long-standing bug in the creation of
	aliases. Specifically, we have to make sure that, in the case that
	the symbol being aliased already *is* an alias for some other
	symbol, the new alias is by default named after the alias, and not
	the "real" symbol it points to. The same bug also affected the
	recently introduced selective a.k.a. qualified import clauses.
	This has also been fixed.

2007-09-27  Albert Graef  <Dr.Graef@t-online.de>

	* modules/curl/curl.c: Apparently, CURLOPT_PASSWDFUNCTION was
	removed in Curl 7.16 (reported by Eddie Rucker).

	* stdlib/stdtypes.q et al: Minor cosmetic changes, and other (less
	cosmetic) changes to make the container data structures live
	happily outside the prelude's ecosystem.

	* src/qc.y, src/qclex.l (sym_import): Allow 'from module import;'
	clause with empty name list to just import everything (likewise
	for 'include').

	Note that this is different from an old-style "unqualified"
	'import module;' clause in that the latter gives access to the
	entire namespace of the module, while the selective a.k.a.
	qualified import clause redeclares all symbols of the imported
	module in the namespace of the importing module *without* actually
	giving access to the imported module itself. In practice, you
	won't notice the difference unless you write something like
	'module::name' (which works with the unqualified import clause,
	but not with the qualified one) or you use an 'include' clause.
	Note that 'from module include;' reexports the symbols from the
	included module to a client module as members of the *including*
	module, while 'include module;' reexports the same symbols as
	members of the *included* module, just as if the client module
	imported the included module itself.

	I know that this is a little bit confusing, so here's an example.
	Let's assume the following three modules A, B and C:

	A: import B;
	B: include C;
	C: public foo;

	Using this setup, the symbol foo is available as either just 'foo'
	or as 'C::foo' in all of A, B and C. Now suppose we change module
	B to:

	B: from C include foo; // or just: from C include;

	C's namespace hasn't changed, of course, but in both A and B the
	symbol foo is now available as 'foo' or 'B::foo', but *not* as
	'C::foo' anymore. However, you can also combine unqualified and
	qualified imports, like so:

	B: include C;
	   from C include;

	Now the symbol foo is available as either 'foo', 'B::foo' *or*
	'C::foo' in B and C (and the compiler will recognize it as the
	same symbol no matter which notation you use).

	Does that make more sense now? ;-)

	* stdlib/prelude.q et al: slim prelude: unbundle getopt, system
	and stdtypes from the prelude, in order to reduce namespace
	pollution and improve startup times (as proposed by John Cowan)

	Note that this breaks backward compatibility, as you'll have to
	import the getopt, system and stdtypes modules explicitly in
	scripts that need them. You're kindly asked to check your scripts
	by running them through the compiler with the -w option to find
	out whether they might be affected. :)

	* modules/clib: move (most of) the POSIX system interface from
	clib to a new system module

	* src/qclex.l, src/qmlex.l: Fix corner cases and bugs related to
	the parsing of qualids.
	
	In particular, note that ':::' is now (properly) tokenized as '::'
	':', following the "maximal munge" rule. This might break some old
	code (very unlikely, but it did happen in examples/lambda.q). If
	you really want something like 'X : ::Type' to denote a lhs
	variable guarded by a builtin type written in qualified notation,
	you'll now have to add the space after the first ':', as indicated.

	Note that a conglomerate of three successive colons used to be
	tokenized as ':' '::' in Q 7.6 and earlier. The changed behaviour
	of the lexer in this rather obscure case is called for by the new
	operator syntax in Q 7.7 which allows multichar operator symbols
	and hence a token starting out as 'X:::...' might well denote a
	qualid involving a multichar operator beginning with ':', as in
	'(complex:::+)'. Since qualids may not contain whitespace, this is
	the only way that such qualified forms of operator symbols may be
	written. Also note that under such circumstances, Q 7.7 would
	sometimes produce bogus error messages; this has now been fixed as
	well.

2007-09-26  Albert Graef  <Dr.Graef@t-online.de>

	* src/qctables.c: Various fixes in the handling of symbol
	declarations:

	1. Errorneous "conflicting imports" messages in symbol
	declarations have been fixed.

	2. The redeclaration of a non-variable as a variable was reported
	as an unspecific "error in declaration". This now correctly
	produces a "conflicting declarations" message instead.

	3. The rules for redeclaring symbols are more strict now. It is no
	longer possible to declare both ordinary local symbols and aliases
	with the same print name; instead you'll get a "conflicting
	declarations" message. This also applies to selective imports
	which in fact just redeclare the imported symbols in the namespace
	of the importing module. Moreover, as type and other (function or
	free variable) symbols may now occur in the same context (i.e.,
	qualified import clauses), both types of symbols (which used to be
	totally separate) are now in the same namespace. Hence it is not
	possible to declare type symbols with the same print name as an
	existing function or variable symbol and vice versa anymore.

	4. The --pedantic option now also warns about non-prelude symbols
	from non-selective imports which are used without proper
	qualification. This is useful to report a common source of errors,
	namely the accidental "reuse" of an unqualified symbol due to a
	missing local symbol declaration.

	* src/qmparse.y (whos): bugfix: report temporary function symbols
	as undefined

	* etc/q-mode.in, etc/q.xml, etc/q.vim: add new 'from' keyword

	* src/qc.y (et al): implement selective import construct (from
	module-id import id, ...;) as suggested by John Cowan

2007-09-25  Albert Graef  <Dr.Graef@t-online.de>

	* examples/csv.q: added to examples (contributed by Eddie Rucker)

2007-09-24  Albert Graef  <Dr.Graef@t-online.de>

	* src/qbase.c, src/sys.c: inhibit path search for '.' and '..' 
	directory prefixes

	* src/qmlex.l: Make shell escapes work again. This stopped working
	at some time in Q<=7.7 due to changes in the command lexer.

	* src/qclex.l, src/qc.y: Cleaned up some horrible kludges in the
	wrapover of the qc lexer at end-of-file.

	We now return an explicit end-of-file token and defer the actual
	wrapover to actions in the parser. This resolves some obscure
	segfaults which might occur if wrapover happens before a construct
	is fully parsed. It also ensures that proper source file and line
	number information is reported for errors encountered at end of
	file. Last but not least, it also fixes a long-standing bug which
	caused the parser to "wrap over" with an unfinished construct at
	the end of an imported module; this now properly provokes an error
	message.

2007-09-23  Albert Graef  <Dr.Graef@t-online.de>

	* src/qcrules.c (where_clause, definition): optimize away
	irrefutable MATCHOPs (as in 'where X = 99')

	* src/qclex.l (yywrap, getbuf): make sure that lexer only wraps up
	once; lexer would otherwise segfault if error recovery occurred
	after already seeing end of file (bug reported by Eddie Rucker)

	* src/qctables.c (vartbadd): offs field shouldn't be set for new
	variables; this would cause wrong code to be generated for free
	variables when there's a shared 'where' clause in an equation (bug
	reported by Eddie Rucker)

2007-08-27  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in: added check for ncursesw

2007-07-06  Albert Graef  <Dr.Graef@t-online.de>

	* etc/q.vim: added Vim syntax file

2007-06-10  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.7

	* examples/gamma.q: added example contributed by Eddie Rucker

	* src/qmprint.c (unparse): unparser would sometimes return
	incorrect results due to stale cache contents (bug reported by Rob
	Hubbard); also fixed a related memory leak in the unparser

	* etc/q-mode.in (q-mode-menu): make comment-region command work in
	GNU emacs, and add an uncomment-region command

2007-06-09  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmprint.c (exprprec): remove bogus rule for Function objects

2007-06-08  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/Makefile.mingw, modules/clib/clib.c: Windows
	compatibility fixes

	* etc/q-mode.in: minor bugfixes in the autoindent code

	Please note that this is still not good enough to do proper
	indentation of equations with left-hand qualifiers; this is
	difficult to get right without doing a full parse of the equation
	to be indented. Thus, for the time being, the code immediately
	following a left-hand qualifier will often have to be indented
	manually.

2007-06-07  Albert Graef  <Dr.Graef@t-online.de>

	+ 7.7 RC2

	* doc/qdoc.texi: minor updates and corrections

	* src/qc.y, src/qclex.l, src/qmparse.y, src/qmlex.l,
	src/qctables.c (fix_symtb): make 'and' and 'or' non-reserved so
	that they can be redeclared

	* src/qm.c (evalu etc.): fix broken fail operation (info_addr/offs
	data must be saved on activation stack, so that the target address
	of the next rule is properly restored after returning from a
	subroutine)

	* src/qm.c (getsym): aliases must be resolved, like in mksym

2007-06-04  Albert Graef  <Dr.Graef@t-online.de>

	+ 7.7 RC1
	
	* src/qmmatch.c (matchx), src/qmfuns.c (xmatch, xlmatch): bugfixes
	in matching of views

	* src/qmprint.c: overhaul of operator pretty-printing

	* doc/qdoc.texi: updated documentation

	* src/qmfuns.c (xclosview): bugfix (cyclic Function views causing
	segfaults in the pretty-printer)

2007-06-03  Albert Graef  <Dr.Graef@t-online.de>

	* src/qc.y: allow virtual constructors in extern types

2007-06-01  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/prelude.q: remove semantic equality test for 'Function'
	objects

	Not needed anymore, since syntactic equality now does this job
	(see below).

	* src/qmfuns.c: make the syntactic equality check on external
	objects use views if available

	If a view is defined for an external object (as is the case, e.g.,
	for the builtin external 'Function' type) then it will be used to
	compare two instances of the type for syntactic equality. Thus two
	external objects of the same type with views will be syntactically
	equal if they "print out the same", just like ordinary
	expressions.

	* src/qmfuns.c (xlmatch): make virtual constructors work with
	lambdas

	* src/qmprint.c, src/qmfuns.c: move unparsing of compiled lambdas
	to a new builtin view for 'Function' objects; make 'lambda' a
	virtual constructor for 'Function'

	This makes it possible to match compiled lambdas against literal
	lambda terms, so you don't have to play dirty tricks with valq $
	str any more if you want to extract the contents of a compiled
	lambda.

2007-05-31  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmfuns.c (xmatch): make virtual constructors and call-by-
	pattern-matching work with the interpreter's 'def' command

	* stdlib/complex.q: make Complex an ADT, virtual constructor is
	(+:) -- (:+) is provided as an alias for Haskell programmers

	* src/qcrules.c: add warnings about overlaps between virtual and
	non-virtual constructors

	Note that these overlaps are bad since, at least in the current
	implementation, we want to avoid backtracking during matching at
	all costs since it is a really bad performance killer. This means
	that a view will *always* be generated and used for matching if a
	parameter in a given definition is matched against at least one
	virtual constructor. Thus, if there are other patterns in the same
	definition matching the same parameter against real constructors
	of the same type, these will effectively be disabled.

	If you get this warning it means that you should rewrite your
	definition so that it uses *either* real *or* virtual
	constructors, but does not mix them. That should be easy enough to
	do; usually you will use the real constructors inside the module
	which defines the data type, and virtual constructors otherwise.

	* src/qmmatch.c: more fixes to the virtual matching code

2007-05-30  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib: added virtual constructor declarations

	* src/qmprint.c: add C stack test to expression pretty-printer

	* src/qctables.c, stdlib, examples/searchtree.q: renamed
	'unparse' to 'view'; added virtual constructor declarations to
	stdlib/rational.q and examples/searchtree.q; add an example of the
	use of views to examples/searchtree.q

2007-05-29  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmmatch.h, src/qm.c, src/expr.h, src/*.y, src/*.l, src/q.c,
	libq/libq.c: add support for virtual constructors (new 'virtual'
	keyword in function symbol declarations)

	This implements Wadler/Okasaki-style "views" which allow you to
	match against "virtual" constructors, using the existing
	customizable unparsing mechanism. This is particularly useful to
	provide pattern-matching capabilities on abstract data types which
	have their real constructors hidden, such as the 'Rational' and
	'Complex' types from the standard library.

	* src/qc.y, src/qcrules.c: add qc option -d/--debug which prints a
	bytecode listing on stdout

	* stdlib/prelude.q: add declaration of (::==), and the syntactic
	inequality operator (!=)

	* src/qc.y, src/qmparse.y: make available the builtin syntactic
	equality operation as operator (==)

	Note that in difference to stdlib::eq this is a special form. This
	operation has always been a builtin of the QVM (it is used to
	implement the syntactic equality checks for non-linear rules) but
	has not been directly accessible to the programmer; now it is.

	* src/qmparse.y, src/qmlex.l: revision of lexical syntax, support
	for user-defined multichar operators

	This finishes the revision of Q's lexical syntax in order to
	support user-defined multichar operator symbols, which was
	requested on the mailing list some time ago. Moreover, the
	processing of operator declarations was fixed so that these now
	behave like ordinary function declarations; in particular, it is
	now possible to redeclare the builtin operator symbols (except for
	a few symbols like '=' which also play a special role in the
	syntax).

2007-05-28  Albert Graef  <Dr.Graef@t-online.de>

	* src/qc.y: bugfix in declaration processing; prevent premature
	aliasing of declared symbols by creating new symbols earlier if no
	matching symbol exists in the current module

	* stdlib/prelude.q: update declaration of builtin operators to new
	syntax
	
	* src/qc.y, src/qclex.l, src/qctables.c: revision of lexical
	syntax, support for user-defined multichar operators

2007-05-26  Albert Graef  <Dr.Graef@t-online.de>

	* src/q.c, src/qm.c: remove deprecated --gc option

	* src/qm.c, etc.: add a C stack limit to prevent C stack overflows
	in the eval() routine (bug reported by Eddie Rucker)

2007-05-25  Albert Graef  <Dr.Graef@t-online.de>

	* src/qc.y, src/qcrules.c: add syntax and processing for
	"left-hand side qualifiers" with guards and definitions which can
	be shared between different equations

2007-05-24  Albert Graef  <Dr.Graef@t-online.de>

	* src/qbase.h, src/qc.y, src/qcrules.c, src/qctables.c, src/qm.c:
	overhaul VM and code generation so that multiple equations for the
	same lhs can be collapsed into a single rule

2007-05-21  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmparse.y, src/qmlex.l, src/qm.c: uncapitalized symbols
	created at runtime are now treated as function (not variable)
	symbols; var command can now be used to explicitly declare
	variable symbols on the command line

	This was suggested by Alexander Nickolsky to make the treatment of
	function and variable symbols consistent between scripts and the
	interactive command line.

2007-05-20  Albert Graef  <Dr.Graef@t-online.de>

	* src/qcrules.c: finally get rid of those pesky undeclared
	variable warnings (those who can't live without them can still get
	them with the undocumented warning level 3, -w3)

2007-05-19  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/cond.q: make 'case' an instance of 'Lambda'; new multiway
	conditional and pattern-matching abstractions 'condfun' and
	'casefun'

	* stdlib/cond.q: remove the auxiliary 'matchp' function;
	comprehensions now directly use 'eq true.(\X.true)' for filtering
	purposes, to ensure consistent behaviour under alpha conversion

	* stdlib/stream.q: make 'cat' work with any mixture of streams and
	lists and always return a list; this is necessary to ensure
	consistent behaviour of the list and stream comprehension
	operations in cond.q

	* mod_q, src/qcwrap.q: removed mod_q and qcwrap from the core
	distribution; these will now be provided in separate source
	packages

2007-05-18  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c: remove size restriction on constant
	substrings in printf/scanf format strings (bug reported by Eddie
	Rucker)

	* src/qmfuns.c, src/opcodes.h, src/qctables.c (inittables): new
	_FAIL_ operation which triggers XCEPT_FAIL2

	* src/qdefs.h, src/qm.c (evalu): new XCEPT_FAIL2 exception

	As suggested by Alexander Nickolsky, this makes an entire
	reduction fail (and not just a single rule, as with XCEPT_FAIL).

2007-05-16  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmfuns.c (xlbody): bugfixes in recursive lambda expansion
	(bug reported by Marco Maggesi)

	Fixed a bug in the builtin lambda implementation which caused
	nested list comprehensions to be evaluated too early. Also fixed
	an (unrelated) segfault which occurred when objects of a Lambda
	subtype lacked a definition for the lambdax call.

2007-05-12  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c, modules/clib/clib.q: add custom completion
	and various helper functions to the readline interface

2007-05-11  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c, modules/clib/clib.q: add a basic readline
	interface

	* modules/clib/clib.q: make regex tail-recursive; make regex_next
	a private function

	* src/qmprint.c: make recursive invokations of the unparser work
	(bug reported by Rob Hubbard)

	* autogen.sh, configure.in, Makefile.am, modules/clib/Makefile.am,
	modules/clib/clib.c, glob, regex: use system libraries for POSIX
	regex and glob/fnmatch functions, remove bundled regex and glob

	Get rid of the bundled regex and glob libraries which were ancient
	and didn't support unicode. We now use the available system
	libraries instead.

2007-05-07  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in, config.rpath: add missing AM_PROG_CC_C_O call and
	config.rpath to make automake 1.10 happy (bug reported by John
	Cowan); update to latest stable autotools

2007-05-06  Albert Graef  <Dr.Graef@t-online.de>

	* bump version number

	* configure.in, modules/tk/Makefile.am, modules/tk/gqbuilder:
	remove bundled gqbuilder

	Gnocl support and GQBuilder will be made available as a separate
	package.

	* autogen.sh, configure.in, Makefile.am, src/Makefile.am,
	readline-4.2: remove bundled readline

	The bundled readline library was an ancient version which didn't
	support unicode. Recent, unicode-capable versions of the readline
	library are now readily available for most platforms, so there is
	no point in including it in the Q distribution any more.

2007-05-05  Albert Graef  <Dr.Graef@t-online.de>

	* src/qc.y, src/qmparse.y: fix broken group syntax

	Singleton groups at the beginning of a tuple were not
	recognized. This has been fixed.

2006-12-18  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.6

	* src/q.c, modules/xml/xml.c: fix broken tmpnam on Windows

2006-12-17  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c: OSX compatibility patches, thanks to Andrew
	Berg

	* src/q.c, src/qc.y: fixes in shebang handling

	* src/q.c: fix segfaults in qprint with custom unparsings

2006-09-11  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.5

	* src/q.c: fix segfaults due to internals thrashing the symbol
	name in the getsym/gettype libq+libqint API functions

2006-09-07  Albert Graef  <Dr.Graef@t-online.de>

	* src/q.c (qexecv): fix double deallocation and globbering of
	source path when script fails to load

2006-08-23  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.4

	* src/qmmatch.c (nextstate): minor optimizations in binary search
	algorithm

2006-08-22  Albert Graef  <Dr.Graef@t-online.de>

	* bumped version number

	* src/qctables.c (unresolved_forwards): fix unresolved forward
	warnings

	* src/qc.y (addexpr): increase allocation step size for expression
	vectors

	* src/qctables.c (putlimbs): fix memory allocation bug

2006-08-15  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.3

	* src/qctables.c (astype): allow type aliases for extern types

2006-08-11  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmprint.c (print): fix unparsing of if-then expressions

2006-08-08  Albert Graef  <Dr.Graef@t-online.de>

	* src/qm.c (consexpr): missing memoization flag initialization

2006-07-25  Albert Graef  <Dr.Graef@t-online.de>

	* bumped version number

	* src/qc.y: bugfixes in static analysis of variable declarations
	and initializer code generation

2006-07-24  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: updated and corrected documentation

	* src/qcrules.c (isconstx): allow const values in the head of the
	lhs of an equation (constructor equations like "true = false;" are
	still forbidden)

2006-06-27  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.2

	* doc/qdoc.texi: updated documentation

	* src/qcrules.c: reject equations if the lhs is a single variable
	(bug reported by Larry Gregg)

	* src/qmparse.y, src/qmlex.l: add `unparse' command

	* stdlib/prelude.q: added default unparsing rules for containers

	* stdlib/complex.q: added cis and polar functions, as suggested by
	Rob Hubbard

	* src/qmfuns.c, stdlib, doc: fix various bugs reported by John
	Cowan (see the mailing list archive for details)

2006-06-25  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c: bugfix in lcm function

2006-06-24  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/rational.q: remove special rules for (/) so that (/) now
	returns inexact results in all cases

2006-06-23  Albert Graef  <Dr.Graef@t-online.de>

	* src/qint.h, src/q.c: added libqint function qsymprec() to
	determine the precedence of a function or operator symbol, per
	request by John Cowan

	* doc/qdoc.texi: updated documentation

	* stdlib/complex.q, stdlib/rational.q: move unparsing rules to
	prelude.q, add complex rational division

	* stdlib/rational.q: replace (over) with (%), as discussed on the
	mailing list

	* src/qclex.l, src/qmlex.l: allow % and ? as Unicode punctuation
	which can be used as identifiers

2006-06-21  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmfuns.c, stdlib/math.q, stdlib/complex.q: fix up floating
	point arithmetic to properly support IEEE INFs and NaNs

2006-06-20  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/prelude.q: fix default Real comparisons to prevent
	infinite recursion on NaNs

	* stdlib/typec.q: rename isinfty -> isinf and add isnan predicate;
	renamed isxxxnum -> isxxxval; isrealval, isratval and isintval
	only return true for complex values if the imaginary part is an
	exact zero

	* stdlib/math.q: add inf and nan constants for IEEE infinities and
	NaNs

	* src/qmfuns.c: fix comparisons to properly handle IEEE infinities
	and NaNs

2006-06-19  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/rational.q: renamed numerator/denominator functions to
	num/den

2006-06-18  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: updated documentation

	* stdlib/typec.q: refactoring of syntactic type predicates, added
	semantic number predicates

	* stdlib/rational.q: bugfixes, cosmetic changes

2006-06-17  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/rational.q, stdlib/prelude.q: added a rational number
	module to the library and the prelude

	This is based on Rob Hubbard's module, but only the Rational data
	type itself and the basic arithmetic are provided. The remaining
	operations of Rob's module will be offered as a separate package.

2006-06-15  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: updated documentation

	* stdlib/prelude.q: add default rules for the numeric and
	conversion functions on `Real'

	* src/qctables.c, src/opcodes.h, stdlib: add a Real type between
	Num and Int, Float, make Complex a subtype of Num

	* stdlib/complex.q: make complex numbers an algebraic type,
	add imaginary unit, provide pretty-printing

2006-06-13  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmprint.c et al: provide a hook into the expression
	pretty-printer

	* started work on Q 7.2, bumped version number

2006-06-11  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.1

	* doc/qdoc.texi: updated documentation

	* modules/clib/clib.q, clib.c: replaced fact and rem functions by
	a single remove_factor function

	* stdlib/prelude.q: added equality of `Function' objects

2006-06-09  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/prelude.q: overhaul of enumeration operations

2006-06-08  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib: renamed types.q back to typec.q, to avoid name clashes
	with application code; getopt.q is now loaded in prelude

	* src/qm.c: fixed handling of zero stack and memory limits

2006-06-07  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/math.q: added floor and ceil functions, contributed by
	Rob Hubbard

	* stdlib/prelude.q et al: reorganized standard library sources,
	moved various functions out of prelude.q again so that other
	standard library modules may access them

	* examples: reorganize examples, add some new stream examples

2006-06-06  Albert Graef  <Dr.Graef@t-online.de>

	* examples/fixpt.q: complete overhaul, now also shows how to
	implement the normal order ("Y") fixed point combinator

	* src/qc.y, src/qmparse.y, src/qmprint.c: give proper precedence
	to the if-then-else construct, cosmetic changes in unparser

	if-then-else now binds weaker than (||) but stronger than
	($). This seems to be the most natural choice. Moreover, to
	improve readability of pretty-printed expressions, ($) and (||)
	are now padded with extra whitespace, just like (.).

	* src/qmfuns.c: bugfixes and optimizations in the lambda code

2006-06-03  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/prelude.q: rename matches back to matchp, to avoid
	name clashes with applications

	* stdlib/getopt.q: added to the standard library

	* etc/q-mode.in: add indentation for if-then-else

2006-06-02  Albert Graef  <Dr.Graef@t-online.de>

	* examples/rational.q: added Rob Hubbard's rational number module
	to the examples directory

	* examples/lambda.q: revised the old lambda module and moved it to
	the examples directory

	* src/qmprint.c: serialization of compiled lambdas (inhibited in
	the interactive read-eval-print loop)

	* src/qmfuns.c: make trunc, round, float, int, frac work
	consistently on integers and floating point values, as suggested
	by Rob Hubbard

2006-06-01  Albert Graef  <Dr.Graef@t-online.de>

	* test.q: overhaul of test script, add tests for conditionals

	* stdlib/prelude.q: overhaul of conditionals (switch -> cond,
	match -> case, matchp -> matches)

	The new conditionals are now much more Lisp-like, and take
	advantage of the new grouping feature, e.g.:
	sign X = cond (X>0, 1; X<0, -1; true, 0);

	* modules/clib/clib.q, modules/clib/clib.c: rename Cond/cond ->
	Condition/condition and Sem/sem -> Semaphore/semaphore

	* src/qc.y, src/qmparse.y, src/qmprint.y et al: syntactic sugar
	for if-then-else and grouping in lists, streams and tuples

	"ifelse X Y Z" can now also be written as "if X then Y else Z".

	The new grouping feature makes stuff like lists of key-value pairs
	more readable, e.g.: [A,B;C,D] is the same as [(A,B),(C,D)].

2006-05-29  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmprint.c: pretty-printing of lambda expressions and
	list/stream comprehensions

2006-05-28  Albert Graef  <Dr.Graef@t-online.de>

	* tidy-up of the standard library

	The lambda.q module is gone, and the stuff which is used to be in
	cond.q, list.q and typec.q is now defined in prelude.q. Various
	related definitions, which used to be scattered out over different
	source files, are now also provided in prelude.q.

	* lambda is now implemented as a builtin

	This resolves some limitations and inefficiencies of the
	implementation in the former lambda.q module. Lambda itself and
	the stuff which depends on it is now generally much faster, and
	non-linear patterns and patterns involving the anonymous variable
	are now also handled correctly.

2006-05-26  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/stream.q, stdlib/stdlib.q: overhaul of stream operations,
	cosmetic changes

	The definitions of the stream functions are much cleaner now,
	since they take advantage of the new "call by need" pattern
	matching semantics (see below).

2006-05-25  Albert Graef  <Dr.Graef@t-online.de>

	* src/qm.c, src/qmmatch.c: total overhaul of the pattern matching
	code to implement "call by need"

	Matching suspended subterms in (non-special) arguments of a
	function now works as one would reasonably expect, by evaluating
	the relevant subterms during pattern matching as needed. Note that
	special arguments are still not touched by the pattern matcher, as
	it ought to be to make special forms work.

2006-05-24  Albert Graef  <Dr.Graef@t-online.de>

	* src/qm.c (eval_internal): total overhaul of the reducibility
	checking code

	This change fixes a lot of unnecessary reevaluations of constant
	and weak normal form subterms, resulting in big performance gains
	in special argument evaluation. Special forms generally work much
	faster now.

2006-05-23  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/stream.q: make stream operations use the new memoization
	operator; add utility functions to control stream evaluation
	(strict, lazy and friends)

	* modules/clib/clib.c: remove memoizing references (mem); this is
	obsolete now that we have the builtin memoization operator

	* src/qc.y, src/qctables.c, src/qmparse.y, src/qm.c, src/qmfuns.c:
	added builtin memoization operator (&)

2006-05-20  Albert Graef  <Dr.Graef@t-online.de>

	* examples/cgi.q: update to Tim Haynes' latest version

2006-05-19  Albert Graef  <Dr.Graef@t-online.de>

	* src/q.c (qexecv): cache argument vectors in order to cure
	segfaults on some systems

	* doc/qdoc.texi: updated documentation

	* src/qint.h, src/q.c: add qdef() function to libqint which allows
	to set global interpreter variables from C/C++ (suggested by John
	Cowan)

2006-05-16  Albert Graef  <Dr.Graef@t-online.de>

	* src/qc.y: allow initializer in var declaration

2006-05-15  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c: add memoizing references (mem)

2006-05-14  Albert Graef  <Dr.Graef@t-online.de>

	* src/qctables.c (inittables): rename stream constructors

2006-05-08  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: updated documentation

2006-05-02  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/stream.q: make `cat' and `tuple' work with streams; add
	`repeat', `repeatn' and `cycle' operations

	* updated standard library and examples

	* src/qc.y, src/qmparse.y, src/qmprint.y et al: syntactic sugar
	for streams and list/stream comprehensions; alternate type alias
	definition syntax (type Foo == Bar); inline var declarations in
	rhs expressions

	* etc/q-mode.in: GNU emacs compatibility fixes

2006-04-25  Albert Graef  <Dr.Graef@t-online.de>

	* src/qctables.c, src/qcrules.c et al: overhaul of undeclared
	symbol warning messages

2006-04-24  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in.:  bumped version number

	* modules/clib/clib.[cq]: add sentinel data structure which
	triggers the evaluation of a given expression when a sentinel
	object is garbage-collected

	* src/q.c, src/qm.c, libq/libq.c: add support for sentinel
	expressions

2006-04-16  Albert Graef  <Dr.Graef@t-online.de>

	* src/qctables.c, src/qmmatch.c: fix a critical bug in the pattern
	matching code which crept into the 7.0 release

	NOTE: The new code should now properly handle all cases and fix an
	obscure but annoying bug which caused wrong pattern matching code
	to be generated in case of overlaps between untyped and typed
	applications. The downside of this fix is that it also doubles the
	size of the pattern matching tables, but currently there seems to
	be no way around this.

2006-02-18  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 7.0

	* doc/qdoc.texi: updated documentation

	* src/qbase.c, src/qclex.l, src/qmlex.l, src/qmparse.y, etc.: make
	unrecognized character escapes in string constants an error, per
	request by John Cowan and others

2006-02-16  Albert Graef  <Dr.Graef@t-online.de>

	* src/qbase.c: character number in escapes can now optionally be
	enclosed in parentheses, as suggested by John Cowan

2006-02-14  Albert Graef  <Dr.Graef@t-online.de>

	* src/qclex.l, src/qmlex.l: bugfixes in lexer, finished Windows
	port

2006-02-13  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: updated documentation

	* src/qbase.h, src/qbase.c, src/qclex.l, src/qmlex.l,
	src/qmparse.y: overhaul of expression parsing and unparsing:

	- Conversions between doubles and strings are now done in a
	locale-independent way. This is necessary to ensure that the
	parsing and printing of floating point values works correctly in
	non-"C" locales.

	- Floating point values are now always unparsed with maximum
	precision, and integer values in decimal, so that the std/sci/fix
	and dec/hex/oct formats only affect the display of expressions
	which are printed in response to interpreter and debugger
	commands.

	- The experimental support for the C99 printf %a flag has been
	dropped. This doesn't seem to be needed any more, as the "%.17g"
	format apparently provides sufficient precision to be able to
	reconstruct floating point values exactly, at least on machines
	with IEEE compatible 64 bit doubles.

2006-02-10  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: updated documentation

	* stdlib/stdlib.q, stdlib/stream.q: added dowith, dowith3
	functions

2006-02-05  Albert Graef  <Dr.Graef@t-online.de>

	* doc/qdoc.texi: updated documentation

2006-02-03  Albert Graef  <Dr.Graef@t-online.de>

	* etc/q-mode.in: info/GNU emacs compatibility fixes

	* configure.in: new configure option --with-unicode

	* src/q.c, src/qc.y, src/qclex.l: new compiler option --encoding

2006-02-02  Albert Graef  <Dr.Graef@t-online.de>

	* unicode fixup: removed dependency on __STDC_ISO_10646__

2006-02-01  Albert Graef  <Dr.Graef@t-online.de>

	* bump version number in preparation of forthcoming release

	* doc/qdoc.texi: added missing remarks about nesting of comments
	and const var declarations, as pointed out by Rob Hubbard

	* src/qm.c (setvar): always set variable value to irreducible, to
	prevent infinite recursion when evaluating variables with
	recursive definition

	* src/qint.h, libq/libq.h: commit Brian Wilfley's patches for
	Windows/C++ compatibility

2006-01-31  Albert Graef  <Dr.Graef@t-online.de>

	* src/qclex.l, src/qmlex.l: unicode support in identifiers

	* src/*: handle utf-8 in compiler and interpreter

2006-01-25  Albert Graef  <Dr.Graef@t-online.de>

	* modules/ggi/ggi.c: automatic conversion from/to utf-8, unicode
	support in text rendering

2006-01-24  Albert Graef  <Dr.Graef@t-online.de>

	* modules/xml/xml.q: xml_save_string doesn't have ENCODING
	parameter any more, the returned string is always utf-8
	
	* modules/dxl/dxl.c, modules/gdbm/gdbm.c, modules/octave/octave.c,
	modules/odbc/odbc.c, modules/xml/xml.c, modules/magick/magick.c:
	automatic conversion from/to utf-8

2006-01-23  Albert Graef  <Dr.Graef@t-online.de>

	* modules/tk: added GQBuilder (Gnocl/Q interface builder)

2006-01-15  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmfuns.c (qmwhich): which () now gives the full path of the
	executing script, just like the builtin which command without args

2006-01-13  Albert Graef  <Dr.Graef@t-online.de>

	* modules/tk/tk.c: added new qtrace command for tracing
	synchronous callbacks

2005-12-25  Albert Graef  <Dr.Graef@t-online.de>

	* modules/tk/tk.c: added new qval command for synchronous
	callbacks from Tcl to Q

	* modules/curl/curl.c: automatic conversion from/to utf-8

2005-12-11  Albert Graef  <Dr.Graef@t-online.de>

	* src/q.c, src/qint.h: ported libq unicode helpers to libqint

	* modules/clib/clib.c: automatic conversion from/to utf-8

2005-10-13  Albert Graef  <Dr.Graef@t-online.de>

	* src/qm.c, src/qmfuns.c: automatic conversion from/to utf-8 in
	builtin string I/O operations

2005-08-03  Albert Graef  <Dr.Graef@t-online.de>

	* examples/except.q: add error rules for new i18n functions in
	clib

2005-08-02  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in: bumped version number

	* modules/clib/clib.c: added strfmon, iconv, gettext and friends

2005-07-31  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c: added strcoll, strxfrm and wcswidth
	functions

2005-07-30  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c: added setlocale, localeconv and nl_langinfo
	functions

	* modules/clib/clib.q: declaration of i18n functions

2005-07-29  Albert Graef  <Dr.Graef@t-online.de>

	* modules/clib/clib.c: chars, split, toupper/tolower and isxxx
	character predicate functions now properly handle multibyte chars

2005-07-28  Albert Graef  <Dr.Graef@t-online.de>

	* src/qbase.c: parsing and unparsing of unicode chars in strings

2005-07-27  Albert Graef  <Dr.Graef@t-online.de>

	* src/qmfuns.c: modified builtins: freadc, fwritec, these now give
	or take multibyte characters

2005-07-26  Albert Graef  <Dr.Graef@t-online.de>

	* src/qm.c, src/qmfuns.c: added basic unicode support:

        - Char object can be any single byte or UTF-8 encoded unicode
	character

	- modified builtins: (#), (!), sub, substr, pos, ord, chr, succ,
	pred, enum

2005-07-13  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 6.2

	* doc/qdoc.texi: updated documentation

	* src/q.c (build_fsym_table): add completion for operator symbols

	* src/qmparse.y (whos): show operator precedence in whos command

	* stdlib/prelude.q: added builtin operator table

2005-07-12  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/cond.q: relational `in' operator is now declared here

	* src/*: added user-defined operators, eliminated builtin `in'
	operator

	* stdlib/stdlib.q: deprecated apply function; use ($) operator
	instead

	* configure.in: bumped version

	* doc/qdoc.texi: updated documentation

	* src/qc.y, src/qmparse.y: remove deprecated 1-tuple syntax. The
	syntax (X) now always denotes a parenthesized expression.

2005-07-11  Albert Graef  <Dr.Graef@t-online.de>

	* modules/xml/xml.c (xslt_apply_stylesheet): allow singleton
	(KEY,VAL) pair as PARAMS argument

2005-07-10    <Dr.Graef@t-online.de>

	+ Release 6.1

	* src\q.c (exitproc): workaround for Windows-specific bug which
	causes qcwrapped scripts to dump core at exit time under certain
	yet undetermined circumstances

2005-07-07  Albert Graef  <Dr.Graef@t-online.de>

	* README, NEWS, doc/qdoc.texi: updated documentation

2005-07-05  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib/cond.q: new when and unless conditionals

	* src/qmmatch.c (match): bug fix: need an additional check for
	empty rule set when match table is nonempty

	* src/qcrules.c (definition): bug fix: handling of free lhs vars
	in def

	* etc/q-mode.in: fixes to accomodate for language changes

	* src/qclex.l, src/qmlex.l: remove deprecated % comment syntax

	* stdlib/stdlib.q (append): fix deprecated 1-tuple syntax

	* src/qc.y, src/qmparse.y, src/qmprint.c: optional trailing commas
	in lists and tuples, deprecated (X) 1-tuple syntax as suggested by
	John Cowan

2005-07-04  Albert Graef  <Dr.Graef@t-online.de>

	* src/qc.y, src/qmparse.y, src/opcodes.h, src/qctables.c,
	src/qm.c, src/qmfuns.c: added Haskell-like, right-associative
	infix application operator ($), as suggested by Tim Haynes

2005-07-02  Albert Graef  <Dr.Graef@t-online.de>

	* src/qc.y: type guards are only permitted on the lhs of an
	equation or definition

	* src/qcrules.c (definition), src/qm.c (evaldef1): add some extra
	pattern matching code to properly handle type guards on the lhs of
	def statements

	* src/q.c (evaldefs), src/qdefs.h (evaldef), src/qm.c (evaldef),
	src/qc.y (def rule): error recovery and better diagnostics in init
	code; fixes bug #1165977

2005-07-01  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in: bumped version, copyright

	* src/qbase.h (Q_SIGNON): new signon message

2005-06-26  Albert Graef  <Dr.Graef@t-online.de>

	* modules/magick/magick.c (magick_colors): fix for IM 6
	compatibility

2004-10-23  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 6.0

	* bumped Q version to 6.0

	* qdoc.texi: added note about SWIG support

	* modules/swig/examples: added a basic Q/Qt example

	* examples/primetest.q: added example contributed by Tim Haynes

2004-10-21  Albert Graef  <Dr.Graef@t-online.de>

	* qcc.c: add support for C++ source files

2004-10-19  Albert Graef  <Dr.Graef@t-online.de>

	* bumped libq version number (NOTE: libq ABI has changed, you'll
	need to recompile your modules)

	* modules/swig: added SWIG runtime module

	* libq.h, libq.c, q.c, qm.c: added have_lock()

2004-10-02  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 5.5

	* bumped version number

	* run mangle.sh

	* examples/cgi.q: added cgi example contributed by Tim Haynes

	* README-GGI: updated information about GGI. In particular, the
	Windows version now uses Peter Ekberg's latest version of the
	DirectX driver from CVS which only needs the GGI_CONFDIR variable
	to be set (no need any more to fiddle around with GGI_DISPLAY and
	the GGI config files).

2004-10-01  Albert Graef  <Dr.Graef@t-online.de>

	* ggi.c, libggi.c, sprite.q: various bug fixes

2004-09-10  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 5.4

	* xml: Windows port, improved namespace support, final polish

2004-09-08  Albert Graef  <Dr.Graef@t-online.de>

	* bumped version number to 5.4

	* README, NEWS: updated

	* configury: added xml module, upgraded to latest autotools

	* xml: added XML/XSLT interface

2004-09-04  Albert Graef  <Dr.Graef@t-online.de>

	* qmparse.y: latest bison prints 'syntax error' instead of 'parse
	error'

2004-09-02  Albert Graef  <Dr.Graef@t-online.de>

	* q.c, qbase.h, qm.c, qmlex.l, qmparse.y: added new profile and
	overhauled clear command

	* octave.c: fixes for latest octave versions

	* qm.c: debugger now correctly prints *last* value assigned to a
	local variable

	* clib.q: added null test for byte strings

	* q.c, qint.h: added qacquire() and qrelease() operations to C->Q
	interface

	* q.xml: updated for Kate 2.1

2004-04-15  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 5.3

	* bumped version number to 5.3 in preparation of the forthcoming
	release

2004-04-14  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: updated

	* *.q: use (.) instead of compose in examples and library scripts,
	mark stdlib::compose as deprecated

	* qc.y, qmparse.y, qctables.c, qmprint.c, qmfuns.c, qm.c: new
	builtin functional composition operator (.)

2004-04-13  Albert Graef  <Dr.Graef@t-online.de>

	* qm.c: fix errorneous debugger output when performing a tail
	reduction on a special argument forming the rhs of an equation

2004-04-10  Albert Graef  <Dr.Graef@t-online.de>

	* qmfuns.c, clib.c (fopen, popen): release global mutex while
	opening a file or pipe, to avoid potential deadlocks in
	multithreaded scripts

2004-04-06  Albert Graef  <Dr.Graef@t-online.de>

	* clib.c: allow full (unsigned short) range of port numbers in
	encoding and decoding of ip addresses

2004-02-29  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 5.2

	* qdoc.texi: added @dircategory/@direntry (suggested by Kari Pahula)

	* configure.in: use installed libreadline if available

	* Makefile.am (various): avoid -L<builddir>/libq flag which ends
	up in the installed .la files (reported by Kari Pahula)

	* bumped version number to 5.2

	* qdoc.texi: updated

	* cond.q: added looping constructs (dowhile, for)

	* qcrules.c (expression): improved tail call optimization

	* qm.c (evalu): bug fix: tail call of builtin needs stack frame

2004-02-27  Albert Graef  <Dr.Graef@t-online.de>

	* q.c: disabled LTDL_SET_PRELOADED_SYMBOLS in libmain for now, to
	avoid breakage when client programs are not built with libtool

2004-02-20  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 5.1

	* NEWS, qdoc.texi: updated

	* lambda.q: fix a long-standing but trivial issue: lambda now
	checks that the pattern is linear

2004-02-18  Albert Graef  <Dr.Graef@t-online.de>

	* README, NEWS, qdoc.texi: final touches for release 5.1

	* Makefile.am (various): make `make dist' from a separate build
	directory work

2004-02-17  Albert Graef  <Dr.Graef@t-online.de>

	* bumped version number to 5.1

	* Makefile.am (various): fixes to support VPATH, so building in a
	separate directory works, and to make static builds
	(--disable-shared) work again

	* qdoc.texi: added qcwrap documentation

	* src/qcwrap.q: added qcwrap script

2004-02-16  Albert Graef  <Dr.Graef@t-online.de>

	* qcc.c: add explicit --mode=install to install stage

	* qdoc.texi: documented enumerations

	* qc.y, qclex.l, qmparse.y, qmlex.l, qmfuns.c, prelude.q: added
	syntactic sugar for enumerations ([X..Y] syntax, new builtin enum
	function)

	* q.c: readline initialized too late during the startup process

2004-02-15  Albert Graef  <Dr.Graef@t-online.de>

	* qmparse.y: proper quoting of help and edit command arguments

	* qm.c: make the Q machine fully tail-recursive

	The interpreter now also optimizes tail reductions on builtins and
	special arguments returned by user-defined and builtin functions.
	As a result, linear recursive definitions involving operations
	like (and then), (or else) and cond::ifelse now execute in
	constant stack space, as one might reasonably expect. Thanks are
	due to Walt Wasilev for pointing this out.

2004-02-02  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in: check for /usr/include/tcl${version} directory,
	for Debian compatibility (patch contributed by Kari Pahula)

	* clib.c: fix bad return value in system function

2004-01-31  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 5.0

	* qdoc.texi: updated

	* qc: added -w option to warn about undeclared function and
	variable symbols (as suggested by Mathias Bruessel); overhauled
	standard library and examples to compile without warnings

2004-01-30  Albert Graef  <Dr.Graef@t-online.de>

	* bumped up version numbers and updated docs in preparation for
	the forthcoming 5.0 release

	* debugger: fixed broken `n' command, now works correctly with
	recursive evals; added tbreak command to set temporary
	breakpoints; break and tbreak commands now accept a list of
	function or operator symbols

2004-01-29  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib.q, stream.q (zip, zipwith): restore previous behaviour of
	discarding excess elements

2004-01-28  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: updated

	* stdlib, modules: final touches, added cvs Id tags

	* debugger: completion_matches command, q-mode now supports
	completion in the debugger

	* qmparse.y, qm.c (debugger): set breakpoints on function symbols

2004-01-27  Albert Graef  <Dr.Graef@t-online.de>

	* regex, readline: fixed some gcc3 compiler warnings

	* q.c, qm.c (debugger): cosmetic changes in command syntax,
	readline support

2004-01-26  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib, examples: overhaul of scan operations

	A semantically complete set of scanl/scanl1/scanr/scanr1
	operations is now provided, which is also compatible with
	Haskell. The old scan/scan1 operations are gone, you'll have to
	change your scripts accordingly. The following declarations should
	do the trick for most purposes:

	public stdlib:scanl F A Xs as scan;
	public stdlib:scanl1 F Xs as scan1;
	
	* modules/curl, configury: added new curl module

2004-01-21  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib.q, stream.q: bug fixes, cosmetic changes, overhaul of
	zip/unzip operations

2004-01-20  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib.q: added curry and uncurry functions

	* clib: `bytes' is no longer a synonym for list, but `list' is
	overloaded on byte strings instead

	* mod_q: now also works with Apache 1.3

2004-01-18  Albert Graef  <Dr.Graef@t-online.de>

	* mod_q: added the Q Apache module (Apache2+prefork MPM only for
	now)

2004-01-15  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: added a section about the libqint interface

2004-01-14  Albert Graef  <Dr.Graef@t-online.de>

	* src/Makefile.mingw, qint.h, qint.c: ported libqint to Windows

2004-01-13  Albert Graef  <Dr.Graef@t-online.de>

	* libq: removed xv{alloc,realloc,free} routines, as they conflict
	with the latest dmalloc

	These were still in there for backward compatibility, but aren't
	really needed any more, so now that the binary interface changed
	anyway we may as well remove them. Use malloc/realloc/free
	instead.

	* q.c, qint.h: added new libqint (C->Q) interface -- this also
	affects a number of other source files; see qint.h for details

2004-01-10  Albert Graef  <Dr.Graef@t-online.de>

	* libq, modules: Finally added some routines to libq which are
	used in many modules, but haven't been in libq up to now, namely
	mkuint, isuint, mkbool and isbool.

	Unfortunately, the binary interface to libq had to be changed for
	that in a non-backward-compatible way, so I bumped up the libq
	version number. This implies that you *must* recompile all your
	modules (including Q-Audio and Q-Midi if you use those).

2004-01-05  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.6

	* README, NEWS: final touches

	* magick.c: bug fixes in flood fill operations

	* sprite.q: Windows usability fixes

	* magick, tk, odbc: fixes to Makefile.msc

2004-01-03  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: updated

	* graphics.q: overhaul of the standard devices section; this now
	works automagically on Windows, no need to patch the script any
	more

	* clib.c: fixed segfault in tmpnam on Windows

	* ggi, magick: more Windows compatibility fixes and code cleanup

2004-01-02  Albert Graef  <Dr.Graef@t-online.de>

	* Windows port, changed build system to latest mingw, bug fixes

2003-12-31  Albert Graef  <Dr.Graef@t-online.de>

	* magick: added drawing ops, this one is finished!

2003-12-30  Albert Graef  <Dr.Graef@t-online.de>

	* magick: finished basic image manipulation functions, code
	cleanup, bug fixes

2003-12-28  Albert Graef  <Dr.Graef@t-online.de>

	* magick: new resource management functions, started work on image
	manipulation operations

2003-12-26  Albert Graef  <Dr.Graef@t-online.de>

	* magick: new magick_info and ping_image operations

	* magick: read_image and write_image now fully support multi-frame
	image files, which are represented as image lists in Q land

2003-12-24  Albert Graef  <Dr.Graef@t-online.de>

	* magick: create_image now takes an additional PIXEL parameter
	used to initialize the pixels of the image; improved magicktest.q
	example; bug fixes

2003-12-23  Albert Graef  <Dr.Graef@t-online.de>

	* magick: added blob conversion operations; new MAGICK field in
	INFO structure, MATTE field is now an integer

2003-12-22  Albert Graef  <Dr.Graef@t-online.de>

	* ggi: yet another major overhaul of the ggi module

	Support for the GGI buffer extension has been dropped for now, as
	the current libggibuf from cvs really isn't ready for prime time
	yet. Support for simple alpha blending is now provided through our
	own code, but no z buffers yet. The API has been simplified
	accordingly, and has been dubbed "stable" now.

	Note that there a few incompatibilities between the new API and
	the one from the Q 4.5 release, namely that ggi_fill_screen has
	been replaced by ggi_clear (which now fills the screen with the
	background instead of the foreground color), and that
	ggi_get_char_size has been replaced by the more general
	ggi_get_string_size (which takes a string to be measured as the
	second argument, and also works for FreeType-managed fonts).

	TODO: 1. Optimizations. 2. Alpha blending for text rendered in the
	builtin font -- probably not worth the effort, so please don't ask
	for it. ;-)

2003-12-21  Albert Graef  <Dr.Graef@t-online.de>

	* ggi_demo.q: replaced ggi_get_char_size with ggi_get_string_size

	* ggi.c: more bug fixes in text renderer

2003-12-20  Albert Graef  <Dr.Graef@t-online.de>

	* ggi.q, ggi.c: added ggi_get_string_bbox operation to determine
	the bounding box of a string relative to the baseline, more
	elaborate ggi_get_font_info, additional operations to retrieve
	antialiasing status and current transform, more bug fixes

	* ggi.c: fixed mono text rendering, optimizations in renderer, bug
	fix in bbox calculation

	* ggi.c: implemented alpha blending in text renderer

	* ggi.c: make transformed glyphs work in text renderer, plug
	memory leaks

2003-12-19  Albert Graef  <Dr.Graef@t-online.de>

	* README-GGI: add information about FreeType support

	* ggi.q, ggi.c: replaced ggi_get_char_size with the more general
	ggi_get_string_size function which calculates the dimensions of
	the bounding box of a rendered string

	* ggi.q, ggi.c, configury: added FreeType2 support (TODO: add
	support for linear transformations and alpha blending in the text
	rendering algorithm)

2003-12-16  Albert Graef  <Dr.Graef@t-online.de>

	* README: add information on ImageMagick support

	* magick: added ImageMagick module

	* configure.in, modules/ggi/Makefile.am: fixed some ggi-related
	quirks in configury

	* README, NEWS: bump version to 4.6, add a NEWS entry for ongoing
	development for the 4.6 release, add pointers to the q-lang
	SourceForge project

2003-12-14  Albert Graef  <Dr.Graef@t-online.de>

	* configury: renamed bootstrap script to autogen.sh

	* ggi_demo.q: adapted to new interface

	* ggi.q, ggi.c: major overhaul of the interface. In particular,
	pixel values are now always represented in device-independent
	form, as byte strings of 16 bit RGBA values. Moreover, the
	ggi_fill_screen operation has been replaced by the more useful
	ggi_clear function which fills the clip area with the current
	*background* color, and also clears all buffers attached to the
	visual.

2003-12-06  Albert Graef  <Dr.Graef@t-online.de>

	* ggi.c: changed buffer initialization code to allow for changing
	the GGI_BUF_DISPOSE flag; this still doesn't work for z buffers,
	probably a libggibuf bug?

	* ggi.q, ggi.c: alpha and z buffers are now specified with
	ggi_setmode instead of separate ggi_add_buffer operation

	* ggi.q: remark that only 8 bit depth alpha and z buffers are
	supported right now (libggibuf limitation)

	* ggi.c (ggi_add_buffer): fixed a segfault occuring when
	ggiBufCladVis fails

	* ggi.q, ggi.c: support for packing pixels in byte string format

2003-11-27  Albert Graef  <Dr.Graef@t-online.de>

	* ggi.c: made buffer support optional, to make the module build if
	libggibuf is not installed

2003-11-02  Albert Graef  <Dr.Graef@t-online.de>

	* ggi.c: added alpha/z buffer support (requires buffer extension)

2003-10-23  Albert Graef  <Dr.Graef@t-online.de>

	* tk.c: kludge to work around some spurious X error messages
	occuring when Tk is used with GGI

2003-10-14  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.5

	* README, NEWS, qdoc.texi: updated

	* qm.c: fixed potential deadlocks on tty mutex (acquire_tty,
	release_tty, exit_thread) and on global mutex (evalu)

	* qm.c: optimized locking during init phase (start_init, etc.)

	* qm.c: overhauled debugger: fixed argument parsing of `d' and `u'
	commands, renamed `l' command to `v', added a new `l' command for
	listing source lines, and added a new `? <expr>' command to
	evaluate a Q expression in the debugger, with the local variables
	bound to their lhs values

	* ggi: added libggi module

2003-09-19  Albert Graef  <Dr.Graef@t-online.de>

	* gdbm.c: fixed a memory leak in gdbm_open

2003-09-16  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.4

	* README, NEWS, qdoc.texi: updated

	* configury: updated

	* odbc: added odbc module

2003-09-09  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: document new syntax of prompt command

	* q.c, qm.c, qmparse.y, qbase.h: make continuation and debug
	prompt configurable (extended prompt command)

	* libq.c, dxl.c: removed isobjm()

2003-08-28  Albert Graef  <Dr.Graef@t-online.de>

	* modules/tk/Makefile.msc: build tk module with thread support
	under Windows

2003-08-15  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.3.2

	* tk.c(tk_start, INIT): check whether Tcl supports mutithreading

2003-08-14  Albert Graef  <Dr.Graef@t-online.de>

	* README, qdoc.texi: updated

2003-08-13  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in, qm.c: added test for pthread_atfork

2003-08-11  Charlie &  <Dr.Graef@t-online.de>

	* clib/examples/pty.q: bug fix: pty driver routine hangs when
	interpreter has been built without threading support

	* glob.h: avoid name clashes with possibly incompatible system
	libraries

2003-08-08  Charlie Root  <root@obelix.local>

	* configury, clib.c: additional fixes for BSD compatibility

2003-07-28  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.3.1

	* readline-4.2/configure.in: fixed broken library versioning

	* octave.c (writescalar): missing return value

2003-07-24  Albert Graef  <Dr.Graef@t-online.de>

	* configury: reverted to previous autotools (autoconf 2.52,
	automake 1.5, libtool 1.4.2) because of OSX compatibility problems

2003-07-21  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi (clib section): add note about cyclic reference chains

	* configury: updated to latest autotools (autoconf 2.57, automake
	1.7.6, libtool 1.5)

	* regex.h: additional #define's to prevent name clashes with
	system libraries

2003-07-14  Albert Graef  <Dr.Graef@t-online.de>

	* configury: fixes for latest autotools

2003-06-24  Albert Graef  <Dr.Graef@t-online.de>

	* clib.c: fixes for FreeBSD compatibility (thanks to Ralph Dratman
	for pointing this out)

	* glob.h: prevent redefinition of size_t which causes compile
	problems on some systems; use AC_TYPE_SIZE_T in configury instead

2003-06-13  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.3

	* qdoc.texi: updated

2003-06-12  Albert Graef  <Dr.Graef@t-online.de>

	* qmparse.y (whos): print const attributes of var symbols

	* clib.q, gdbm.q: use var const for manifest constants

	* qc.y: implemented const var attribute

	* qctables.c (inittables): mark builtin variables (ARGS, INPUT,
	etc.) as const

	* q.c (rerun): bypass setvar when purging variables

	* qm.c (setvar): check for const variables; change error message
	for BAD_REDEF and BAD_UNDEF codes

2003-06-11  Albert Graef  <Dr.Graef@t-online.de>

	* qcc.c: intermediate object files are created in the build
	directory

	* libq.c (mklistv): fixed potential memory leak

	* libq.h, libq.c: added workaround for memory management quirks
	under Windows

	* gdbm.q: added missing import of clib (needed for non-standard
	preludes since clib::ByteStr is used in the C implementation)

2003-05-26  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: fixed description of fcntl interface

2003-05-06  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.2.3

	* gdbm: added some documentation to README-Gdbm, added testdb.q
	and gdbm_dict.q examples

2003-05-05  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: updated

	* gdbm: implemented gdbm interface; added gdbm.q, gdbm.c,
	README-Gdbm and the necessary configury

	* except.q: updated

	* clib.q, clib.c: added isbytestr and crypt functions

2003-05-03  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.2.2

	* qdoc.texi: updated

	* except.q: updated

	* clib.q, clib.c: renamed `suspend' to `await'

2003-05-02  Albert Graef  <Dr.Graef@t-online.de>

	* clib.q, clib.c: new Ref data structure

2003-04-28  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib.q, clib.c: append now also applies to tuples

2003-04-25  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.2.1

	* src: Solaris compatibility fixes

2003-04-24  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: updated, added some missing index entries

	* clib.c (fprintf, sprintf): automatic float/int coercion

	* clib.c: OS X compatibility fixes

2003-04-21  Albert Graef  <Dr.Graef@t-online.de>

	* clib: added openpty and forkpty functions, pty.q example

2003-03-26  Albert Graef  <ag@muwiinfc.geschichte.uni-mainz.de>

	+ Release 4.2

	* qm.c: evaluate lists and pairs non-recursively, to prevent C
	stack overflows

	* clib.c: OS X compatibility fixes

	* libq.h, libq.c: new xvrealloc function

2003-03-25  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: final touches

	* clib.c: 2nd attempt to fix a hairy bug which would cause the
	thread destructor to wait for a dead thread after fork. See also
	the ChangeLog entry from 2002-08-29. The previously attempted fix
	would resolve the bug but cause another one instead, namely
	prevent thread objects to be garbage-collected at all. Hopefully
	this all is fixed now.

	* qm.c: removed locks on tty and parser mutexes in atfork handlers
	(these would block a fork in a background thread when the
	interpreter sits waiting in the main loop)

	* q.c, qmparse.y: removed all fflush(NULL) calls except in exitproc
	(these could block when secondary threads were busy doing I/O)

	* qmfuns.c, qmparse.y: moved parser mutex locks to the qmparse
	interface routines, and made the parser mutex recursive

2003-03-24  Albert Graef  <Dr.Graef@t-online.de>

	* clib.q, clib.c: recv/recvfrom: additional SIZE argument

2003-03-21  Albert Graef  <Dr.Graef@t-online.de>

	* qmfuns.c, clib.c: fixes for BEOS and Windows compatibility

	* examples: added flush calls (required for Windows)

	* q.c: reset errno after startup

	* clib.c: some more Windows fixes

2003-03-20  Albert Graef  <Dr.Graef@t-online.de>

	* clib.q, clib.q: reworked spawn and new _spawn function

	Note that the `spawn' function now returns immediately, without
	waiting for the child to finish, to make its interface consistent
	with the `exec' function. The `_spawn' function provides the
	former functionality, but it also accepts a new MODE argument
	which specifies whether the child should be waited for or not.

	* q.c: interpreter now checks its own invokation path, to exec
	the compiler from the same path

	* clib.c: BSD/OSX portability fixes

2003-03-18  Albert Graef  <Dr.Graef@t-online.de>
	
	* qdoc.texi: updated

	* except.q: updated (new clib operations)

	* clib: reworked dgram.q example

	* clib: socket functions (getsockopt, setsockopt, send/receive
	operations) now use ByteStr's as well; this allows arbitrary socket
	options to be retrieved and changed, and arbitrary binary data to
	be transmitted on sockets

2003-03-17  Albert Graef  <Dr.Graef@t-online.de>

	* clib: added ByteStr data structure, reworked binary file
	operations (see bread, bwrite) to use the new type

	* clib: added WHENCE argument to fcntl file locking operations, as
	well as the fseek function; new rewind and lseek functions

	* clib: added dgram.q example

	* qmparse.y (parse): fix multithreaded-related bugs

2003-03-16  Albert Graef  <Dr.Graef@t-online.de>

	* clib.q, clib.c: new functions: gethostname, gethostbyname,
	gethostbyaddr, gethostent, getprotobyname, getprotobynumber,
	getprotoent, getservbyname, getservbyport, getservent

	* clib.q, clib.c: added BSD socket interface; new functions:
	socket, socketpair, shutdown, closesocket, bind, listen, accept,
	connect, getsockname, getpeername, getsockopt, setsockopt, recv,
	send, recvfrom, sendto

2003-03-15  Albert Graef  <Dr.Graef@t-online.de>

	* clib.q, clib.c: added termios interface (tcsetattr and friends)

2003-03-14  Albert Graef  <Dr.Graef@t-online.de>

	* clib.c: added a yield (release_lock/acquire_lock) to a couple of
	potentially blocking operations

	* qm.c, qmfuns.c, etc.: new trap builtin

2003-03-12  Albert Graef  <Dr.Graef@t-online.de>

	* qmfuns.c: removed evil automatic flushes of the standard output
	stream; note that this breaks some things under Windows (user
	scripts doing interactive prompt/input might have to use flush to
	work properly under Qpad)

	* clib.c (Thread destructor): fixed a bug which prevented
	terminated threads from being garbage-collected

	* qmparse.y, qdefs.h, qm.c: invalid command parameters now all
	raise a simple syntax error message

	* qmparse.y: `stats all' and `who all' commands

	* clib.q, clib.c: major overhaul:

	new aliases for builtin I/O functions: getc, fgetc, putc, fputc,
	puts, fputs; new ungetc/fungetc functions
	
	fixed mkdir, mkfifo, wait, waitpid to follow POSIX-compatible
	semantics

	overhauled the calendar time functions to make them more closely
	correspond with the corresponding C functions; added tzname,
	daylight, localtime, mktime, asctime, strftime

	new system functions: fdopen, fileno, setvbuf, select, open,
	close, dup, dup2, pipe, fstat, fchdir, fchmod, fchown, ftruncate,
	fsync, fdatasync, fcntl, isatty, ttyname, ctermid, tcgetpgrp,
	tcsetpgrp, truncate, readdir, link, symlink, readlink, access,
	chmod, chown, lchown, utime, nice, pause, raise, getppid, uname,
	getpwuid, getpwnam, getpwent, getgrgid, getgrnam, getgrent,
	getgroups, setgroups, setuid, setgid, seteuid, setegid, setreuid,
	setregid, getuid, geteuid, getgid, getegid, getlogin, getpgid,
	setpgid, getpgrp, setpgrp, getsid, setsid, errno, seterrno,
	perror, strerror

	added a bunch of "manifest constants" for the various option
	parameters of the system functions

2003-03-09  Albert Graef  <Dr.Graef@t-online.de>

	* qmparse.y: the who command now only lists user-defined variables

2003-03-07  Albert Graef  <Dr.Graef@t-online.de>

	* clib.c: fix for only partially implemented POSIX sempahores on
	MacOS X

	* clib.c: eliminated a race condition which could cause a thread
	object to be garbage-collected while its thread is still running

2003-03-06  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: added some notes on realtime scheduling

	* clib.c: some kludges to make realtime scheduling work under
	Windows; see the comment preceding the setsched function for
	details

	* givertcap: added sources to modules/clib, added givertcap
	support to clib.c

	NOTE: Under Linux, this program allows your applications to enjoy
	realtime scheduling without having to run them as root. That is,
	the clib::setsched function will now work even if the Q
	interpreter is run as an ordinary user. To make this work, you
	need to patch your kernel and install givertcap on your system;
	see modules/clib/givertcap/README for details.

	* clib.q, clib.c: added `getsched' function, `schedule' renamed to
	`setsched'

	* q.c: reenabled the backtrace mechanism; this still doesn't work
	properly with the multithreaded interpreter on Linux, but that is
	supposed to be fixed with kernel 2.6 and the next Linux pthread
	version

	* libq, clib, regex, src: some fixes for MacOS X compatibility

	Unfortunately, one of these fixes breaks binary compatibility in
	libq (the __error function had to be renamed to something else),
	so we're going to a new libq version.

2003-02-18  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.1.3

	* qdoc.texi: updated

	* qm.c (rule): added missing gnuserv command for recording
	debugger options

	* stddecl.q, stdtypes: some minor code cleanup; members2 is now an
	alias for list2

	* except.q: merged with clib_except.q and graphics_except.q

	* hdict.q: fixed a typo in the deletek function

2002-12-17  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: fixed some typos

2002-11-24  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.1.2

	* README-DXL, sombrero.q: added a comment about a new bug in
	recent OpenDX versions which affects Tk applications with embedded
	OpenDX image windows used in hardware rendering mode

	(Maybe that's actually a bug in the OpenGL library on my Linux
	system? Have to look into that sometime.)

	* qm.c (evalu): only invoke debugger on conditional error when no
	catch is pending

	* qclex.l (yywrap): fixed garbled error messages at eof

	* dxl.q: bug fixes in the dxl_file function -- OpenDX apparently
	does not like empty position, connection or data components, so we
	prevent empty components from being written to the data file

2002-11-21  Albert Graef  <Dr.Graef@t-online.de>

	* clib.c: missing initialization in clib::strcat

2002-11-19  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.1.1

	* qmfuns.c (qmcatch): must clean up activation stack on exception

2002-11-11  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.1

	* qdoc.texi: updated documentation

	* qctables.c, qmfuns.c, opcodes.h: added new `which' builtin (see
	the manual for details)

	* qbase.c (pfloat): fix weird infinity printouts with Windows sprintf

2002-11-10  Albert Graef  <Dr.Graef@t-online.de>

	* q.c, tk.c: fixes for Windows compatibility

	* qm.c: added debugger command to list local variables of a rule

2002-11-09  Albert Graef  <Dr.Graef@t-online.de>

	* q-mode.in: debugger-related improvements:

	- record --debug-options

	- fontify `where', `if' and `  ==>  ' as keywords

	* qbase.h, q.c: --debug-options option

	* qm.c: various improvements in the debugger:

	- debugger now prints real names of variables bound in where clauses

	- default expression detail level is now 2

	- new format for debugger options: `pathnames=y|n' (print long
	pathnames of scripts, yes/no), `detail=N|all' (number of
	expression levels to print), `maxitems=N|all' (number of
	list/tuple items to print), `maxchars=N|all' (number of string
	chars to print), `maxstack=N|all' (number of stack levels to
	print), `options' (print current settings).

	All these options can now be entered either at the "dot" command
	in the debugger, or with the `debug' command at the interpreter's
	prompt, or with the interpreter's --debug-options option
	(which replaces --debug-long-filenames).

	* stdlib.q: fixed broken definitions of pred and succ

	* stddecls.q: `members' is now a synonym for `list'

	* stdlib: moved list/tuple comparisons and type-checking
	predicates from stdlib.q to separate comp.q and typec.q scripts

2002-11-08  Albert Graef  <Dr.Graef@t-online.de>

	* tk.c, tk/Makefile.msc: fixes for latest stable Tcl/Tk release
	8.4

2002-11-05  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 4.0

	* stdlib, clib.q: parenthesized equality checks

	* qc.y, qmparse.y: `=' operator must now be parenthesized on
	*both* the left- and right-hand side of a rule

	* tk.q, tk.c: added new tk_set, tk_unset and tk_get functions

	* tk.c: fixed random lockups and async replies in event
	processing; events are now always processed in the main thread
	only

2002-11-04  Albert Graef  <Dr.Graef@t-online.de>

	* qm.c, qmfuns.c: fixes in the exception handling code; as the
	manual says, non-break exceptions now *only* trigger the debugger
	if there's no `catch' on the stack

2002-11-03  Albert Graef  <Dr.Graef@t-online.de>

	* clib.c: fixed buffer allocation bug in external clib::sprintf
	function

2002-11-01  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi, q.1: updated documentation

	* qm.c (qmid): fixed bug in syntactic comparison of vectors

	* qmfuns.c (qmval, qmvalq, qmread, qmreadq): fixed an unhandled
	"unterminated string" error condition

	* q.c (rerun): fixed garbled error message when the compiler bails
	out with an error while compiling the empty script

	* qcdefs.h: increased harcoded compiler table sizes

2002-10-31  Albert Graef  <Dr.Graef@t-online.de>

	* stdlib, clib: exception modules moved to the examples directory

	* qm.c: nicer formatting in debugger display of def's and undef's

	* qmfuns.c (xmatch): bugfix in variable definition code

	* qm.c: modified debugger to acommodate for the language changes

	The debugger now stops on the current rule also after a
	condition/where clause has been processed, and always displays the
	current condition/where clause while it is being processed.

	* qc.y: allow arbitrary list of conditions and where clauses in
	the qualifier

2002-10-28  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.5.5

	* tk.c: fixed segfaults and other quirks in the finalization
	procedure

2002-10-27  Albert Graef  <Dr.Graef@t-online.de>

	* qmfuns.c: fixed segfaults on negative integers in builtin hash
	function

2002-10-18  Albert Graef  <Dr.Graef@t-online.de>

	* graphics.q: replace include of stdlib and string with import

2002-10-10  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.5.4

	* clib.c: work around a bug in the MSVC sscanf function

	* qcrules.c (clearexpr): reset variable table when parsing
	multiple right-hand sides for the same left-hand side

2002-10-08  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.5.3

	* qm.c (clearvartb): reset vartb to NULL after freeing it

	* qmfuns.c (tupleconcat): initialize n when x1 is a vector

2002-10-06  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.5.2

	* qdoc.texi: updated documentation

	* qmparse.y: the `save' command now uses a larger precision to
	reduce rounding errors when rereading floating point values

2002-10-05  Albert Graef  <Dr.Graef@t-online.de>

	* qmparse.y: default variable file name now named .q_vars

	* qmlex.l, qmparse.y: experimental support for the C99 printf %a
	flag which allows you to save exact floating point variable values
	represented in hexadecimal textual format on some systems (use
	-DHAVE_ISO99_PRINTF to enable this feature)

	* tk.c: fixed bogus warning in call to Tcl_CreateCommand

	* qcc.c: missing parameter type in fatal() function

2002-09-28  Albert Graef  <Dr.Graef@t-online.de>

	* configure.in: updated for Tcl/Tk 8.4

2002-09-19  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.5.1

	* qdoc.texi: updated documentation

	* clib: new gets and fgets functions

2002-09-18  Albert Graef  <Dr.Graef@t-online.de>

	* clib: renamed the `gets' operation to `fget'

	* list.q, stream.q: filter out unmatched items in binding clauses
	of listof and streamof

	* cond.q: new matchp predicate, additional check in match before
	applying lambda, to prevent combinator exceptions when except.q is
	loaded

	* qbase.h: increased default stack size to 1024000

	* qm.c (x_copy): implemented non-recursively to prevent C stack
	overflows

	* qm.c (x_collect): bug fix in garbage collector (segfaults on
	tuple values)

	* qmfuns.c (xeq): fixed broken non-recursive implementation

2002-09-07  Albert Graef  <Dr.Graef@t-online.de>

	* qdoc.texi: fixed some typos in the documentation

2002-09-02  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.5

	* qdoc.texi: updated documentation

	* qm.c: changed debugger's rule printer to handle multiple `where's

	* qcdefs.h: increased the compiler's expression and variable table
	sizes (needed since now the where clauses are kept in memory until
	a whole rule has been parsed)

	* qc.y, qcrules.c: allow where clauses both before and after
	condition

2002-09-01  Albert Graef  <Dr.Graef@t-online.de>

	* qc.y: bug fix in option parser

	* clib.q, clib.c: new gets function which reads an entire file at
	once

	* stdtypes.q: added hdict.q

	* except.q: added hdict exceptions

	* hdict.q: new hashed dictionary type

2002-08-31  Albert Graef  <Dr.Graef@t-online.de>

	* qmfuns.c, qctables.c: added new `hash' builtin

	* q-mode.in: bug fixes and general improvements in the indentation
	rules; q-query-before-kill is now disabled by default

2002-08-30  Albert Graef  <Dr.Graef@t-online.de>

	* qc.y, q.c, qbase.c, qbase.h: path/--path argument starting/
	ending with `:' is now appended/prepended to existing path

	* qc.y, qctables.c, qmcode.c: removed the useless codefile shebang
	stuff

2002-08-29  Albert Graef  <Dr.Graef@t-online.de>

	* clib.c (Thread destructor): fixed a bug that could cause a child
	process to kill itself or other threads in the parent at fork time
	(the latter misbehaviour is probably LinuxThreads-specific?)

2002-08-27  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.4.3

	* qmfuns.c (xeq): implemented non-recursively to prevent C stack
	overflows

2002-08-25  Albert Graef  <Dr.Graef@t-online.de>

	* qmlex.l: allow ' as string delimiter in special commands

2002-07-31  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.4.2

	* ports: interpreter cleanly builds and passes all tests on BeOS,
	Solaris and Windows

	* qdoc.texi: updated description of the import command

	* q.c (quotearg): quote empty arguments on Windows

	* q.c (rerun): clear imports list when loading bytecode file

	* q.c (main): set up qc command line for rerun() even if source is
	a bytecode file

2002-07-30  Albert Graef  <Dr.Graef@t-online.de>

	* qmparse.y (print_modlist, print_implist): suppress printing of
	dummy ("") main module

	* qclex.l: create dummy main module for holding global imports
	when "" is the main script

	* qclex.l: main module is now always first script argument on
	command line, even if it is the empty script, ""; this also
	affects the behaviour of the import command

	* q.c: \\m and \\M now print the true main module name, even if it
	is empty

2002-07-26  Albert Graef  <Dr.Graef@t-online.de>

	* qmparse.y: fixed parse stack overflows for large lists and
	tuples

	* qmparse.y: don't echo lines with `load'

	* q.c: .qinitrc and .qexitrc are sourced correctly again

2002-07-25  Albert Graef  <Dr.Graef@t-online.de>

	* qm.c (init_thread): block SIGINT and SIGTERM signals

2002-06-17  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.4.1

	* tk.c: all interpreter-related data is now thread-local, so you
	can have multiple interpreters in different threads

	* tk.c: tk, tk_reads, etc. now release the interpreter's mutex, to
	prevent long Tk commands from locking up the Q interpreter

2002-06-13  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.4

	* clib.c, octave.c: used xvalloc()/xvfree() where appropriate

	* libq.h, libq.c: added xvalloc()/xvfree() routines to
	allocate/free expression vectors to be passed to mklistv/mktuplev.
	Apparently this solves some weird Windoze-only malloc/free-related
	segfaults in some modules.

2002-06-12  Albert Graef  <Dr.Graef@t-online.de>

	+ Release 3.3

	* Makefile.mingw, mingw.h: fixed wrong copyright and version number

2002-06-11  Albert Graef  <Dr.Graef@t-online.de>

	* qc.y, qcrules.c: reinitialization of offs/plen/p needed at start
	of variable definition

2002-06-04  Albert Graef  <Dr.Graef@t-online.de>

	* qm.c, qmmatch.c: removed conditionals around inline keyword
	(already handled by configure)

2002-04-29  root  <Dr.Graef@t-online.de>

	+ Release 3.2

	* ports: interpreter cleanly builds and passes all tests on BeOS,
	Solaris and Windows

2002-04-28  root  <Dr.Graef@t-online.de>

	* clib.c, clib.q: added bounded semaphores

	* qmmatch.c: overhauled TA matching routines

2002-04-27  root  <Dr.Graef@t-online.de>

	* *.h, *.c: protoized most of the remaining sources

2002-04-26  root  <Dr.Graef@t-online.de>

	* qm.c etc.: reduced size of expression data structure from 36/40
	to 24 bytes

2002-04-09  root  <Dr.Graef@t-online.de>

	* qcdefs.h: increased size of the temporary expression table

2002-04-06  root  <Dr.Graef@t-online.de>

	* regexamp.q: added missing special declaration of the regsub
	function which was deleted by accident

2002-04-05  root  <Dr.Graef@t-online.de>

	* qdoc.texi: fixed some typos

2002-04-04  root  <Dr.Graef@t-online.de>

	+ Release 3.1

	* clib.c: massaged initialization sequence in the thread_proc
	routine

2002-04-02  root  <Dr.Graef@t-online.de>

	* ports: interpreter cleanly builds and passes all tests on BeOS,
	Solaris and Windows

	* optimizations: inlined some functions, gives a minor speed
	improvement

2002-03-31  root  <Dr.Graef@t-online.de>

	* qdoc.texi: added POSIX threads to clib documentation

2002-03-30  root  <Dr.Graef@t-online.de>

	* clib: added queens3 example

	* clib.c: fixed unref() call in unsafe section

2002-03-29  root  <Dr.Graef@t-online.de>

	* clib.q, clib.c: added spawn function

	* test.q: added pthread tests

	* q.c: added tty and fatal signal handlers

2002-03-28  root  <Dr.Graef@t-online.de>

	* q.c(rerun): proper reinitialization of ARGS variable

	* qm.c: fixed broken atfork handlers

2002-03-27  root  <Dr.Graef@t-online.de>

	* qm.c, q.c: added init_mutex to prevent threads from taking over
	during the variable initialization phase

	* qm.c, clib.c: added pthread_atfork handlers

2002-03-26  root  <Dr.Graef@t-online.de>

	* qmparse.y(assignment): fixed wrong redn and expr counts

	* clib.c(clib::thread): fixed silly bug in thread allocation

	* qctables.c(saveimps): fixed zero allocation bug

	* qbase.c(arealloc): fixed zero-length alloc bug

	* configury: added dmalloc support

2002-03-25  root  <Dr.Graef@t-online.de>

	* clib.c: implemented multithreading operations

2002-03-24  root  <Dr.Graef@t-online.de>

	* clib.q: added multithreading operations

	* modules: MT support, release mutex lock in potentially blocking
	operations

2002-03-22  root  <Dr.Graef@t-online.de>

	* stdlib: renamed the cond function to ifelse

	* libq: added multithreading-related stuff

	* interpreter: added multithreading capability: Q machine state is
	thread-local, global mutex lock in the interpreter

2002-03-15  root  <Dr.Graef@t-online.de>

	+ Release 3.0

	* ports: interpreter cleanly builds and passes all tests on BeOS,
	Solaris and Windows

	* bootstrapped from scratch

	* bootstrap: latest libtool apparently has a broken configure
	script, therefore added autoconf in libltdl to the bootstrap
	process

	* clib.c, sys.h: work around a bug in some gmp versions which causes
	mpz_fits_xxx_p(z) to return false when mpz_size(z) is zero

	* qctables.c: fixed segfault in compiler on solaris: we have to
	properly initialize *all* symbol table entries

	* Makefile.am: added a simple test script (run with `make test'
	after interpreter has been installed)

	* configury: converted to latest autotools

2002-03-14  root  <Dr.Graef@t-online.de>

	* qdoc.texi: doc updated once more

	* stream.q: stream constructors are now simply named `bin' and `nil'

	* compiler, interpreter: `in' is now a relational operator symbol

2002-03-13  root  <Dr.Graef@t-online.de>

	* qdoc.texi: doc updated, added some missing index entries

	* clib.q, clib.c: added clock and clocks_per_sec functions

	* qmparse.y: stats command prints cpu time, not total elapsed time

2002-03-12  root  <Dr.Graef@t-online.de>

	* src/Makefile.mingw: Windows portability fixes

	* qc.y, qclex.l: various bug fixes in compiler: treatment of
	qualified variable symbols; made `_' a predefined variable symbol;
	check that aliased symbol in redeclarations is already declared

	* qdoc.texi: description of import interpreter command: added
	usage without args

	* qmparse.y, qmlex.l: fixed a bug in the command parser:
	def/undef/imports keywords incorrectly recognized after ? escape

	* qdoc.texi: final touches on the docs

2002-03-11  root  <Dr.Graef@t-online.de>

	* clib.q: added missing declaration for regerr

	* stdlib.q: added isexcept type predicate

	* stdlib.q: cosmetic changes in the eq and neq functions

	* array.q: made bin constructor symbol, turned constructor
	equations into separate mkbin operation

	* qmparse.y: bug fix in which command: add .q suffix if necessary

	* qmfuns.c: fixed bug in qmdef(): treatment of anonymous variable

2002-03-10  root  <Dr.Graef@t-online.de>

	* qdoc.texi, q.1: updated documentation

2002-03-09  root  <Dr.Graef@t-online.de>

	* lambda.q: changed declaration of normal mode combinators to
	include the (non-special) lambda argument

2002-03-07  root  <Dr.Graef@t-online.de>

	* graphics.q: GRAPHICS variable now assigned to standard output by
	default

2002-03-06  root  <Dr.Graef@t-online.de>

	* qc.y: fixed a compiler bug: expression stack mark 2 placed too
	early, must be placed *after* qualifier

	* q-mode.in: fixed a bug in syntactic fontification: _ must be
	word constituent in the local font-lock syntax table

2002-03-05  root  <Dr.Graef@t-online.de>

	* qmlex.l: fixed bug in lexical analyzer: save start state when
	starting nested parse

	* qmfuns.c: fixed a bug in the qmdef/qmundef functions: don't
	count these as reductions for stats

	* modules: module examples are now installed in separate
	subdirectories

	* dxl: added the dxl_file data file generation routine, overhauled
	examples

	* prelude: clib is now loaded by default

2002-03-04  root  <Dr.Graef@t-online.de>

	* qc.y, qmcode.c: implemented new "#!" header in bytecode files

	* stdlib, clib: added exception handler modules

	* stdlib.q: some cosmetic changes

	* qclex.l: handle different aliases for the same source script by
	manufacturing aliases for all symbols of the module, to prevent
	duplication of the module

	* q.c: fixed bug in module loader: filename of module is now
	derived from the basename of the script filename, not the module
	name which could be aliased

2002-03-03  root  <Dr.Graef@t-online.de>

	* modules: updated to new compiler version

	* examples: updated to new compiler version

	* stdlib: updated to new compiler version

	* compiler/interpreter: endless number of bugfixes in the new
	symbol table code, should work now :)

2002-03-02  root  <Dr.Graef@t-online.de>

	* stream.q: bugfix in streamcat function

	* type.q: stuff now included in stdlib.q

	* array.q: added missing emptyarray operation

	* stdtypes: container constructors are private now

	* q-mode.in: fixed various bugs and updated to new syntax

	* qmparse.y: implemented dynamic import and unimport of modules in
	the interpreter

2002-03-01  root  <Dr.Graef@t-online.de>

	* qclex.l: extra modules specified on the command line are
	automatically imported into the main module

	* libq: FUNCTION, DESTRUCTOR and FUNCALL macros now take the
	module name as first argument; updated standard modules
	accordingly

	* qm.c: EXT_ERR and user exceptions now invoke the debugger if
	break is on

	* qm.c: show "where" bindings in debugger

2002-02-28  root  <Dr.Graef@t-online.de>

	* added where clauses for local variable bindings

2002-02-27  root  <Dr.Graef@t-online.de>

	* hard exceptions are now represented using builtin Exception type

	* added pattern-matching variable bindings

	* changed variable defs/undefs to builtin function

2002-02-25  root  <Dr.Graef@t-online.de>

	* qbase.c: fixed a bug in the searchlib routine (uses stat now to
	avoid directories)

2002-02-24  root  <Dr.Graef@t-online.de>

	* interpreter: implemented symbol table logic for new namespacing
	system

2002-02-23  root  <Dr.Graef@t-online.de>

	* compiler: implemented new import/include facility, qualified
	identifiers, added new error messages

	eliminated -w option, as the compiler does not emit warnings any
	more

	eliminated overlapping rules warning, made cyclic module refs an
	error

2001-11-06  root  <Dr.Graef@t-online.de>

	* configure.in, acinclude.m4: fixes for latest autotools versions

2001-09-17  root  <Dr.Graef@t-online.de>

	+ Release 2.3

	* regex.h: redefined names of regcomp/regexec routines to prevent
	clashes with incompatible system routines

2001-09-16  root  <Dr.Graef@t-online.de>

	* q-mode.in: fixed broken library path

	* README updated (Solaris info)

	* configure.in: -lDXL needs -lsocket -lnsl on Solaris

	* Makefile.am (etc, src): $< doesn't work with SUN make

	* glob.c: some minor fixes for Solaris compatibility

2001-08-12  root  <Dr.Graef@t-online.de>

	+ Release 2.2

	* ported to Windows, Cygwin and BeOS

	* final touches and last-minute bug fixes

2001-08-11  root  <Dr.Graef@t-online.de>

	* manual updated

	* qm.c (eval, evalu), qmfuns.c (qmcatch): handle hard exceptions
	with catch

2001-08-09  root  <Dr.Graef@t-online.de>

	* automake/libtool support for bundled readline, glob and regex
	packages (quick and dirty, but needed to make everything work
	properly)

2001-08-08  root  <Dr.Graef@t-online.de>

	* src/Makefile.am, qld.in: added libqmain and qld program

	* qmparse.y (save command): always unparse floating point values
	with maximum precision

	* q.c(rerun): don't restart interpreter after run

	* qclex.l(opensrc): allow null source file names in compiler

2001-08-07  root  <Dr.Graef@t-online.de>
	
	* qdoc.texi: integrated clibdoc.texi

	* q.c (resolve): private external symbols are now also mangled
	with module name to prevent clashes between same private extern
	identifier in different modules

	* portability fixes: added the necessary bits to make the package
	compile with mingw again

	* `which' on empty script once more prints nothing rather than the
	prelude script

2001-08-06  root  <Dr.Graef@t-online.de>

	* src/Makefile.am: added -dlopen flags for standard modules

	* qmparse.y: modules command now shows external modules with a
	trailing `*'

	* libq.h: modified for global symbol stropping [see below]; to
	these ends, INIT and FINI now require module name as parameter,
	changed standard module sources accordingly

	* q.c: __initmod/__init/__fini globals in modules are now stropped
	with module name, to prevent name clashes when modules are linked
	statically

	* q.c: mangled global symbols in interpreter to prevent name
	clashes with dlopened modules [see also mangle.sh]

2001-08-05  root  <Dr.Graef@t-online.de>

	* qcc: changed --no-compile to --dry-run and --cygwin to --mingw

	* qcc: now uses libtool instead of gcc

2001-08-04  root  <Dr.Graef@t-online.de>

	* libq: make module initialization return module name, which is
	now checked in the dl loader in q.c (resolve)

	* libq: stropped FAIL and ERROR with `__' to prevent collisions with
	macro definitions in other libraries; updated modules accordingly

	* sources: reorganized, automakified and libtoolized

	* ChangeLog started
