2005-07-13 Albert Graef +++ 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 * 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 * modules/xml/xml.c (xslt_apply_stylesheet): allow singleton (KEY,VAL) pair as PARAMS argument 2005-07-10 +++ 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 * README, NEWS, doc/qdoc.texi: updated documentation 2005-07-05 Albert Graef * 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 * 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 * 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 * configure.in: bumped version, copyright * src/qbase.h (Q_SIGNON): new signon message 2005-06-26 Albert Graef * modules/magick/magick.c (magick_colors): fix for IM 6 compatibility 2004-10-23 Albert Graef +++ 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 * qcc.c: add support for C++ source files 2004-10-19 Albert Graef * 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 +++ 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 * ggi.c, libggi.c, sprite.q: various bug fixes 2004-09-10 Albert Graef +++ Release 5.4 +++ * xml: Windows port, improved namespace support, final polish 2004-09-08 Albert Graef * 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 * qmparse.y: latest bison prints 'syntax error' instead of 'parse error' 2004-09-02 Albert Graef * 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 +++ Release 5.3 +++ * bumped version number to 5.3 in preparation of the forthcoming release 2004-04-14 Albert Graef * 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 * 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 * 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 * clib.c: allow full (unsigned short) range of port numbers in encoding and decoding of ip addresses 2004-02-29 Albert Graef +++ Release 5.2 +++ * qdoc.texi: added @dircategory/@direntry (suggested by Kari Pahula) * configure.in: use installed libreadline if available * Makefile.am (various): avoid -L/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 * 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 +++ 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 * 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 * 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 * 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 * 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 * 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 +++ 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 * 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 * stdlib.q, stream.q (zip, zipwith): restore previous behaviour of discarding excess elements 2004-01-28 Albert Graef * 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 * regex, readline: fixed some gcc3 compiler warnings * q.c, qm.c (debugger): cosmetic changes in command syntax, readline support 2004-01-26 Albert Graef * 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 * stdlib.q, stream.q: bug fixes, cosmetic changes, overhaul of zip/unzip operations 2004-01-20 Albert Graef * 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 * mod_q: added the Q Apache module (Apache2+prefork MPM only for now) 2004-01-15 Albert Graef * qdoc.texi: added a section about the libqint interface 2004-01-14 Albert Graef * src/Makefile.mingw, qint.h, qint.c: ported libqint to Windows 2004-01-13 Albert Graef * 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 * 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 +++ 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 * 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 * Windows port, changed build system to latest mingw, bug fixes 2003-12-31 Albert Graef * magick: added drawing ops, this one is finished! 2003-12-30 Albert Graef * magick: finished basic image manipulation functions, code cleanup, bug fixes 2003-12-28 Albert Graef * magick: new resource management functions, started work on image manipulation operations 2003-12-26 Albert Graef * 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 * 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 * magick: added blob conversion operations; new MAGICK field in INFO structure, MATTE field is now an integer 2003-12-22 Albert Graef * 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 * 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 * 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 * 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 * 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 * 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 * 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 * ggi.c: made buffer support optional, to make the module build if libggibuf is not installed 2003-11-02 Albert Graef * ggi.c: added alpha/z buffer support (requires buffer extension) 2003-10-23 Albert Graef * tk.c: kludge to work around some spurious X error messages occuring when Tk is used with GGI 2003-10-14 Albert Graef +++ 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 `? ' 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 * gdbm.c: fixed a memory leak in gdbm_open 2003-09-16 Albert Graef +++ Release 4.4 +++ * README, NEWS, qdoc.texi: updated * configury: updated * odbc: added odbc module 2003-09-09 Albert Graef * 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 * modules/tk/Makefile.msc: build tk module with thread support under Windows 2003-08-15 Albert Graef +++ Release 4.3.2 +++ * tk.c(tk_start, INIT): check whether Tcl supports mutithreading 2003-08-14 Albert Graef * README, qdoc.texi: updated 2003-08-13 Albert Graef * configure.in, qm.c: added test for pthread_atfork 2003-08-11 Charlie & * 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 * configury, clib.c: additional fixes for BSD compatibility 2003-07-28 Albert Graef +++ Release 4.3.1 +++ * readline-4.2/configure.in: fixed broken library versioning * octave.c (writescalar): missing return value 2003-07-24 Albert Graef * 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 * 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 * configury: fixes for latest autotools 2003-06-24 Albert Graef * 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 +++ Release 4.3 +++ * qdoc.texi: updated 2003-06-12 Albert Graef * 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 * 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 * qdoc.texi: fixed description of fcntl interface 2003-05-06 Albert Graef +++ Release 4.2.3 +++ * gdbm: added some documentation to README-Gdbm, added testdb.q and gdbm_dict.q examples 2003-05-05 Albert Graef * 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 +++ Release 4.2.2 +++ * qdoc.texi: updated * except.q: updated * clib.q, clib.c: renamed `suspend' to `await' 2003-05-02 Albert Graef * clib.q, clib.c: new Ref data structure 2003-04-28 Albert Graef * stdlib.q, clib.c: append now also applies to tuples 2003-04-25 Albert Graef +++ Release 4.2.1 +++ * src: Solaris compatibility fixes 2003-04-24 Albert Graef * 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 * clib: added openpty and forkpty functions, pty.q example 2003-03-26 Albert Graef +++ 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 * 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 * clib.q, clib.c: recv/recvfrom: additional SIZE argument 2003-03-21 Albert Graef * 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 * 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 * 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 * 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 * 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 * clib.q, clib.c: added termios interface (tcsetattr and friends) 2003-03-14 Albert Graef * 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 * 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 * qmparse.y: the who command now only lists user-defined variables 2003-03-07 Albert Graef * 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 * 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 +++ 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 * qdoc.texi: fixed some typos 2002-11-24 Albert Graef +++ 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 * clib.c: missing initialization in clib::strcat 2002-11-19 Albert Graef +++ Release 4.1.1 +++ * qmfuns.c (qmcatch): must clean up activation stack on exception 2002-11-11 Albert Graef +++ 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 * 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 * 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 * tk.c, tk/Makefile.msc: fixes for latest stable Tcl/Tk release 8.4 2002-11-05 Albert Graef +++ 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 * 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 * clib.c: fixed buffer allocation bug in external clib::sprintf function 2002-11-01 Albert Graef * 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 * 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 +++ Release 3.5.5 +++ * tk.c: fixed segfaults and other quirks in the finalization procedure 2002-10-27 Albert Graef * qmfuns.c: fixed segfaults on negative integers in builtin hash function 2002-10-18 Albert Graef * graphics.q: replace include of stdlib and string with import 2002-10-10 Albert Graef +++ 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 +++ 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 +++ 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 * 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 * configure.in: updated for Tcl/Tk 8.4 2002-09-19 Albert Graef +++ Release 3.5.1 +++ * qdoc.texi: updated documentation * clib: new gets and fgets functions 2002-09-18 Albert Graef * 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 * qdoc.texi: fixed some typos in the documentation 2002-09-02 Albert Graef +++ 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 * 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 * 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 * 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 * 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 +++ Release 3.4.3 +++ * qmfuns.c (xeq): implemented non-recursively to prevent C stack overflows 2002-08-25 Albert Graef * qmlex.l: allow ' as string delimiter in special commands 2002-07-31 Albert Graef +++ 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 * 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 * 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 * qm.c (init_thread): block SIGINT and SIGTERM signals 2002-06-17 Albert Graef +++ 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 +++ 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 +++ Release 3.3 +++ * Makefile.mingw, mingw.h: fixed wrong copyright and version number 2002-06-11 Albert Graef * qc.y, qcrules.c: reinitialization of offs/plen/p needed at start of variable definition 2002-06-04 Albert Graef * qm.c, qmmatch.c: removed conditionals around inline keyword (already handled by configure) 2002-04-29 root +++ Release 3.2 +++ * ports: interpreter cleanly builds and passes all tests on BeOS, Solaris and Windows 2002-04-28 root * clib.c, clib.q: added bounded semaphores * qmmatch.c: overhauled TA matching routines 2002-04-27 root * *.h, *.c: protoized most of the remaining sources 2002-04-26 root * qm.c etc.: reduced size of expression data structure from 36/40 to 24 bytes 2002-04-09 root * qcdefs.h: increased size of the temporary expression table 2002-04-06 root * regexamp.q: added missing special declaration of the regsub function which was deleted by accident 2002-04-05 root * qdoc.texi: fixed some typos 2002-04-04 root +++ Release 3.1 +++ * clib.c: massaged initialization sequence in the thread_proc routine 2002-04-02 root * 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 * qdoc.texi: added POSIX threads to clib documentation 2002-03-30 root * clib: added queens3 example * clib.c: fixed unref() call in unsafe section 2002-03-29 root * clib.q, clib.c: added spawn function * test.q: added pthread tests * q.c: added tty and fatal signal handlers 2002-03-28 root * q.c(rerun): proper reinitialization of ARGS variable * qm.c: fixed broken atfork handlers 2002-03-27 root * 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 * 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 * clib.c: implemented multithreading operations 2002-03-24 root * clib.q: added multithreading operations * modules: MT support, release mutex lock in potentially blocking operations 2002-03-22 root * 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 +++ 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 * 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 * 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 * 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 * 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 * qdoc.texi, q.1: updated documentation 2002-03-09 root * lambda.q: changed declaration of normal mode combinators to include the (non-special) lambda argument 2002-03-07 root * graphics.q: GRAPHICS variable now assigned to standard output by default 2002-03-06 root * 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 * 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 * 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 * 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 * 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 * 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 * added where clauses for local variable bindings 2002-02-27 root * 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 * qbase.c: fixed a bug in the searchlib routine (uses stat now to avoid directories) 2002-02-24 root * interpreter: implemented symbol table logic for new namespacing system 2002-02-23 root * 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 * configure.in, acinclude.m4: fixes for latest autotools versions 2001-09-17 root +++ Release 2.3 +++ * regex.h: redefined names of regcomp/regexec routines to prevent clashes with incompatible system routines 2001-09-16 root * 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 +++ Release 2.2 +++ * ported to Windows, Cygwin and BeOS * final touches and last-minute bug fixes 2001-08-11 root * manual updated * qm.c (eval, evalu), qmfuns.c (qmcatch): handle hard exceptions with catch 2001-08-09 root * automake/libtool support for bundled readline, glob and regex packages (quick and dirty, but needed to make everything work properly) 2001-08-08 root * 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 * 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 * 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 * qcc: changed --no-compile to --dry-run and --cygwin to --mingw * qcc: now uses libtool instead of gcc 2001-08-04 root * 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