Released as XLISP-PLUS 3.05 5/2011 Format function has full implementation of ~R (Roman numerals and English text output added), a bug was fixed in ~*, comma insertion in ~:B H D O and R, added ~^ and ~P. Added new constant, VERSION, which is a cons of the major version number 3 and minor version number 5. Fixed a bug in dldmem.c where memcpy should have been memmove. Only causes improper operation in the (rare?) combination of compiling in Linux with optimization on and then running in a Parallels virtual machine under OS X. Revised the Linux version and added an OS X version. These now have the fancy command editor found in the Microsoft versions, and even have *DOS-INPUT* which disables the command editor. The Linux and OS X versions can be compiled with the Qt4 libary to have graphics. The graphics capabilities are a superset of those in the Microsoft OS versions except exclusive OR doesn't work properly. These versions are command line but launch a separate graphics window when necessary. Recompiled the 32-bit Windows version for 3.05 but other binaries are still at 3.04, and will probably remain that way since in general I have no means to recompile them. The LSP files have been overhauled to be better structured. See particularly the init.lsp and makewks.lsp files. Glos.lsp now will store the glossary text in the workspace as properties of the objects. This can be optionally disabled to reduce memory usage, however these days computers have far more RAM than they did in the early 1990s when glos.lsp was written. The LSP files are backwards compatible with older XLISP versions. Documentation is now provided as a PDF file with a Microsoft Office source. Re-released as XLISP-PLUS 3.04 07/04/2000 Space characters now allowed in pathnames in Windows 32 bit version. Thanks to Jonathan D. Johnston. Re-released as XLISP-PLUS 3.04 10/09/1999 Error in MEMBER truly fixed! Re-Released as XLISP-PLUS 3.04 01/09/1999 Error fixed in fix of member. Also corrected Leo's name in this file and changed the date to 1999. (I've got a year 2k-1 problem.) Released as XLISP-PLUS 3.04 01/02/1999 expt of a complex number with a fraction exponent, and nreverse of a two character string fixed. The member function fixed to only accept proper lists (errors pointed out and corrected by Leo Sarasua). Still bogged down with other tasks. I've got some upgrades and revised documentation to do. But at least all bugs (:-) are fixed. Released as XLISP-PLUS 3.03 5/22/98 I've been awfully busy so I decided to take a day off just to get this out! I'll be changing jobs, so remove any references to tom.almy@tek.com you may have. I'm reachable as almy@teleport.com, as I've been for the past couple of years. Also, I'm no longer on Fidonet, so any Fidonet address for me will no longer work. Since I didn't add any new features but only fixed the existing bugs, this version should be bugfree! :-) NOT RELEASED 3/15/98 I realized a problem that's always been in XLISP -- real numbers that are printed in fixed point which have no fractional part print as integers! To demonstrate, execute (print 1.0). It will print "1". I've fixed the problem, which also existed with the FORMAT function. Changes are in xlprin.c and xlfio.c. If *FLOAT-FORMAT* is used, the output format is not checked for any sort of validity. Fixed errors in xlserv.c (reported by Luke Tierney). Fixed problems with READ-PRESERVING-WHITESPACE (reported by many people). Fixed problems with math in non-ansi compilers (reported by Luke Tierney and others). POSIX support in unixstuf.c fixed (but not checked). EOF handling in READ improved. Corrected parsing of values such as #O+1. Some minor bugs in the LSP files fixed. Some other changes made to enhance portability. (All from Andreas Schwab, schwab@gnu.org.) When BIGNUMS is defined, rounding didn't work properly. I've also improved rounding when BIGNUMS is not defined. (Reported by Melinda E. Johnson, mjhnson@medea.gp.usm.edu). Lots of small changes to eliminated dozens of warning messages. Some changes made to support Win32 version compilation under Visual C++ and the new Borland C++ Builder. RELEASED 1/1/98 Revision set to 3.02. Put on teleport.com. Put on teleport.com. January 11, 1998 NOT RELEASED 09/02/97 Support added for BeOS. Use makebeos to compile. (Thanks to Marc Ferguson, marc@be.com). Added READ-PRESERVING-WHITESPACE. Actually, the old READ preserved whitespace, so the new function is actually the old function and the old function is new. Got that? NOT RELEASED 07/25/97 Leo Sarasua reported several bugs that I fixed. When BIGNUMS are defined, the predicates MINUSP, ZEROP, PLUSP, EVENP, and ODDP would return false for non-numeric arguments rather than give an error message (xlmath3.c). Also when PACKAGES and MULVALS were defined, (intern "aNewSymbol") would return :internal rather than nil for the second return value (xlbfun.c, function makesymbol). Put on teleport.com, July 5, 1997 07/04/97 Revised version to 3.01 in executables. 04/11/97 Many changes thanks to Leo Sarasua. He discovered a problem with UNLESS and WHEN with multiple-return-values, which I have fixed. I then discovered more multiple-return-value problems with these functions as well as COND, OR, and AND. I fixed those as well by a rewrite (all in xlcont.c). He also cleaned up and made additions to init.lsp, common.lsp, common2.lsp, and stepper.lsp. Added functions: THE, PROVIDE, REQUIRE, *modules*. Two new utilities: memo.lsp and profile.lsp. He also completely reworked the documentation. 01/27/97 A couple of misuses of xlprotect changed to xlsave. These are in seldom used sections of code, so I'll hold back on releasing them until more changes accumulate. Changed files include xlsym.c, xlbfun.c, and xlpp.c In xlmath3.c, an 11/11/96 fix for a bug in the gcc compiler causes problems for with EXPT with a negative integer first argument. Fixed again. A small change in the algorithm will improve operation of FLONUM to FIXNUM power -- before it would always produce a complex result. In xlbignums.c, function logbinary(), changed xlprotect() calls to xlsave() calls. In xlbfun.c, function xevalhook(), changed xlprotect() call to xlsave() call, effectively changing back to "old way" code segment. (From Luke Tierney) Luke Tierney also suggested allowing constructs of the form (let ((x))...) as in the latest Common Lisp revision. I've made the changes, but have not updated the documentation which should show initial values are optional in LET LET* DO DO* PROG and PROG*. Made available at ftp.teleport.com /vendors/almy 1/26/97 01/24/97 Last minute fixes, thanks to Luke Tierney. the ~[ command would not correctly skip fields with "v" arguments. Top level printing would not print all multiple values if one of the values required a structure :print-function function or object :prin1 method to print. Fixes are in xlfio.c and xlisp.c. Luke also pointed out problems with FLATSIZE. I fixed the problems by having FLATSIZE print to a USTREAM and then calculate its size. This is a far cleaner approach than what originally existed, and solves anomalies in printing (:prin1 and :print-function can no longer get stream names of NIL meaning "calculating size"). Changes made to xlio.c, xlfio.c, xlpp.c, xlglob.h, and xlglob.c. Timestamps on files unchanged -- they still read 1/15/97, since it was not released. New Version number - 3.0 01/15/97 I started working on Xlisp back when it was version 2.0. When David Betz came out with 2.1, I incorporated his changes and made mine version 2.1. I had expected him to come out with additional releases, so I keep my XLISP-PLUS version number at 2.1, adding a suffix letter. David Betz stated that he was abandoning Xlisp for Xscheme a number of years ago, and in fact 2.1, issued in 1989, was the last version I saw. Until now. David has returned back to Xlisp with a version 3.0. However this version is based on XScheme and is debatably a successor to Xlisp 2.1. This put me in a quandry. If I continued with my *original* plan, I'd incorporate the changes David made and make an XLISP-PLUS 3.0 based on his Xlisp 3.0. However that's totally impractical. On the other hand, if I kept the 2.1x numbering, there would be an impression that Xlisp 3.0 was somehow more advanced than XLISP-PLUS 2.1i, when in fact XLISP-PLUS has far more features. So I decided to break with the plan. I've upgraded the number to 3.0, even though the code is based on Xlisp 2.1. 12/05/96 Garbage collection error during BACKQUOTE (in rare cases) fixed. 11/11/96 An error was discovered by Robert.Field@adecco.com in the expt function for the 80386 DOS version. Seems to be a rounding problem in the C library pow() function. I've added a patch that won't effect other versions. 10/3/96 I realized that INIT.LSP unexporting certain symbols in the XLISP package wasn't necessary because I was handling that within the code. I also improved the definition of EXPORT for systems not implementing packages. Well, I actually have the source for the Windows help (see next section), so it's been revised. I also fixed winstuff.c and win32stu.c so the "Index" selection of the XLISP-PLUS help menu actually works. Since its start, XLISP has always allowed "\n" in strings to be "new line", and printed quoted strings with "\n" where a new line occured. Well I've concluded that this extension for reading is fine, even though it isn't Common Lisp compatible, but for printing it makes more sense to print the new line character. The string is still readable. I'm still escaping other control characters. The file INSPECT.LSP has been revised to include the Common Lisp functions INSPECT and DESCRIBE. These are defined in package XLISP, not in package TOOLS. INSPECT is basically INS but without quoting the argument. It works with any object, not just symbols. The file DOCUMENT.LSP can be loaded instead of GLOS.LSP INSPECT.LSP to get the Common Lisp function DOCUMENTATION. GLOS are still available, and will respond to 'function and 'variable definitions added via DOCUMENTATION. MAKEWKS.LSP has been revised to load DOCUMENT.LSP rather than GLOS.LSP. For some strange reason, keyword symbols appeared on both the keyword internal and external obarray. Actually these were EQ! Seems more sensible to me to have an empty internal obarray and put all entries in the external obarray, so I did so. Making this change made it possible to merge xlextern() into xlenter(). When a literal structure is typed in for which the structure type is not defined, the MAKE-xxx symbol was entered as an external symbol rather than an internal symbol. It's now fixed (in xlstruct.c). I've reworked much of the package code in xlsym.c so that errors are displayed before any action occurs in EXPORT, UNEXPORT, IMPORT, SHADOW, and SHADOWINGIMPORT. All name collisions are reported before the continuable error is issued. USEPACKAGE and UNUSEPACKAGE check for valid package names before any action occurs. USEPACKAGE may issue one continuable error per package -- there wasn't a reasonable way to check for collisions of all packages before adding to the use list. UNEXPORT now indicates an error when an attempt is made to unexport from the keyword package. MAKE-PACKAGE will no longer make a package if any errors occur. Before, many errors would still allow the package to be created. This was not good. Trying to explicitly use package KEYWORD with MAKE-PACKAGE or USE-PACKAGE will now give an error message. Symbols with no home package will now always print as uninterned (leading #: characters) following CLtL rather than printing as accessible if it is accessible. This changes xlprin.c, function putpacksym(). CLASSP was needed in package TOOLS in several places, even when classes.lsp was not defined. So a duplicate definition was shadowed there. This caused a problem, so I've moved the defininition of CLASSP to init.lsp. Other reasonable things I'm not planning to do: 1. Integrate generational garbage collector 2. Integrate bytecode compiler (these two would increase performance, which I feel is fine anyway on today's fast computers) 3. Add accessability to Windows API in Windows version (while undoubtedly it would be fun, there's no way I could compete with the various visual design tools out there so writing such programs to use it would be difficult). Released 9/14/96 on http://www.teleport.com/~almy or 9/8/96 ftp://ftp.teleport.com/vendors/almy Revision level (H) not changed Printing fixed for *readtable-case* :invert when package name is printed with symbol name and combined name is mixed case. This is an old problem, for which I disagree with Common-Lisp's conception of how :invert should work. But, hey, who has more power here? The ugly result is, for class "FOO", internal symbols "X" and "Bar" will display (and be read) as: foo::x and FOO::Bar rather than the far more sensible (IMHO): foo::x and foo::Bar Bug returning multiple values in :isnew methods fixed. This typically would not have had a noticeable impact. Modifications made to xlobj.c and xleval.c to allow tracing of methods. New functions TRACEMETHOD and UNTRACEMETHOD are in classes.lsp. A previously fixed bug involving recursing of TRACE was discovered to be only partially implemented. Not it's fully implemented. Documentation for ~:[ format specifier was in error. Documentation for package-obarray was in error (wrong default). Documentation error *not* fixed in the windows help file because I don't have the source. :-( Added CLSDEMO.LSP, a demonstration showing implementation of the Smalltalk collection classes in XLISP. OS/2 executable file is now compressed with LXLITE. Released on www.teleport.com/~almy 6/4/96 Revision level (H) not changed OS/2 Version -- Control-Break was not captured -- Fixed. Windows versions -- xlisp21h.hlp file is now invokable from with XLISP. RELEASED 3/15/96 on BBBBBS and http://www.teleport.com/~almy Revision level (H) not changed. I'm not surprised -- with the fairly hefty changes to math in level H, there have been lots of bugs. NOT RELEASED 3/12/96 Bug in ASIN function (reported by Luke Tierney) causes FLOAT values to be converted to complex regardless of range. Fix for bignum zero and minus one failed with saved workspaces. Restoring of saved bignums caused eventual crashing for versions using dldmem.c (all 16 bit versions and 32 bit Windows). RELEASED 2/29/96 on BBBBBS and http://www.teleport.com/~almy Revision level (H) not changed. NOT RELEASED 2/21/96 A garbage collection bug in LOGNOT (reported by Luke Tierney) lead me to some bugs in a number of functions caused by cvtfixbugnum being unable to convert negative numbers. This is easiest seen by doing (LOGAND). cvtfixbugnum() fixed, and global variables added for "bignum" zero and minus one -- this reduces the amount of code and slightly speeds up some calculations. NOT RELEASED 1/17/96 From Guido Corremans (no email address supplied): "NINFIX" in xlisp.h should be MINFIX. DRIBBLE in Windows versions doesn't work (user input is not stored in file) -- fixed. DRIBBLE in 32 BIT DOS and OS/2 versions doesn't work -- data stored in "binary" mode, no CR before LF -- fixed. From Luke Tierney, the new sort function was doing xlprotects before assigning a value. This has been fixed. Also an argument was missing preventing compilation with KEYARGS undefined. File win32stu.c accidentally left out of distribution. RELEASED DECEMBER 21, 1996 AS XLISP 2.1H Sorting is now stable. Algorithm changed from Quick Sort to List Merge Sort. (Sorting of arrays is done by coercing to a list, sorting, and then coercing back -- actually faster than the old Quick Sort!). Added STABLE-SORT, an alias of SORT. A bug in COMPLEMENT was discovered by Leonardo Sarasua (sarasua@bart.nl). It's now fixed. Two bugs in ASSERT, also discovered by Leonardo, have been fixed. NNODES increased to 10000 for all 80x86 32bit versions. NOT RELEASED 10/15/95 Added SUBSTITUTE* and NSUBSTITUTE* functions. These have :FROM-END and :COUNT keywords, naturally! Type CONTEXT changed to CONTXT to allow an attempt to compile a WIN32 version. I also had to add some typecasting and a few other minor changes to get Borland's 32 bit compiler to accept code. It's sure touchy! New section on compiler options added to documentation. Code to handle longjumps in older Windows compilation conditionally removed -- seems that support is in the new C libraries, at least in my version 4.02 Borland C. DIGIT-CHAR and DIGIT-CHAR-P now take the optional radix argument. NOT RELEASED 6/16/95 Added :FROM-END keyword to FIND* POSITION* and COUNT*. Note that direction is still from the front for lists and that the keyword does nothing for COUNT*, however this is all OK by Common Lisp. Added both :FROM-END and :COUNT to DELETE* and REMOVE*. This is controlled by the FROMEND compilation option. (return nil) would fail in object methods when LEXBIND used. (Fix from Niels Mayer). ALLOC takes a third argument, for systems with using dldmem.c. This specifies the ideal ratio of free to used vector space. Default is 1, corresponding to the old built-in default. This value should be raised if extensive time is spent garbage collecting in math intensive operations. The ROOM function will show the number of garbage collects triggered by vector allocation. NEW CHANGES, NOT RELEASED: Major changes for 2.1h: Added INTEGER and REAL to typep testing. Deleted *ratio-format*. Bignum support added. Deleted compilation option of RATIOS, added BIGNUMS, which has ratio support. What follows in this section only applies when BIGNUMS compliation option is defined: Typeof a bignum is BIGNUM. Delete *integer-format*, add *read-base* and *print-base*. Added #D and #nR read macros. Added ~R and ~B format specifiers. Moved logical functions (except LOGNOT) into xlbignum.c and math functions are in xlmath3.c. Added LOGEQV, LOGNAND, LOGANDC1, LOGANDC2, LOGNOR, LOGORC1, LOGORC2, LOGTEST, LOGBITP, LOGCOUNT, and INTEGER-LENGTH. Byte manipulation functions added to common2.lsp. ISQRT in common2.lsp rewritten to take the square root of any integer. Read-byte and write-byte require binary files. Filename is not optional. Character I/O functions require character files or unnamed streams. Print of stream shows binary/character type. Files may be opened using :element-type signed-byte, unsigned-byte, (signed-byte n), or (unsigned-byte n). "n" must be a multiple of 8. The existing 'fixnum becomes unsigned byte. No overflow checks made on output (consistant with older versions), however write-byte of negative value to unsigned-byte file is not allowed. FILE-LENGTH and FILE-POSITION are based on multiples of the size of the element. 05/16/95 Problems with matherr() and ldexp() in Borland C. Symptom -- (float x) for large integer x doesn't produce INF but instead produces finite value slightly less than maxfloat. Matherr changed its name between Borland C versions (boo! hiss!). Problems with trig functions in GCC (targeted for 80386, this is both the DOS-DJGPP and OS/2-EMX compilers) have been worked around -- optimization must be turned off for modules where trig funtions are used. Symptom -- (sin x) = x for *large* values of x (such as 1e20). An error when PACKAGES included caused keyword arguments with specified to produce a syntax error. READ-FROM-STRING in common2.lsp improved. 04/26/95 (SETF (GET NIL ...)..) did not work. SETF with a defined placeform (such as with DEFSETF) returns correct value (always did, but now allows return of incorrect values rather than forcing correct ones). GLOS glossary revised and a few small improvements made. The Symbol Name Lookup feature of the MS-DOS, Windows, and OS/2 versions has been improved to support case matching in readtable :invert and :preserve modes. The symbol name will be completed to the extent it is unique. If there aren't multiple choices, the current display line is altered, saving screen space. A bug in command line recall (which often caused crashes) has been fixed. 04/14/95 I got control-ins and shift-ins backwards in xlispwin. (Pointed out by Jim Frame, jhframe@dcn.davis.ca.us) 03/09/95 The current(?) library for DJGPP doesn't handle fseek(,,SEEK_CUR) properly, so it had to be fixed (done in xlisp.h). I also allowed separate getc/putc for ascii and binary files (like the original Xlisp 2.1) the the MS-DOS text file problem can be handed either at file open or getc/putc time. In the original, it had to be handled at open time, so deleting the separate functions didn't really hurt. Making this change solves problems with DJGPP and EMX, and probably would for Metaware if I still supported it. 03/06/95 "T" changed to "t" in definition of SIGNUM in COMMON.LSP (I forgot who pointed this out). OS/2 version (compiled with EMX) added. New files: EMXSTUFF.C and MAKEEMX. XLISP.H modified. PEEK-CHAR now has eof related arguments. This was an oversight. Documentation revised. MAKEWKS.LSP added to build the initial XLISP.WKS file. This should help people new to packages. Added #D and #nR read macros. Fixed ~X and ~O directives for negative values. 10/05/94 (string 0) fixed. Thanks to Gottfried Ira. RELEASED: 08/29/94 The fix to COND of 2/2/94 was incorrect. Now COND *really* works! (Bug and fix reported by John Weiss, jweiss@silver.sdsmt.edu) Executables recompiled with latest Borland compiler, 4.0, and latest gcc, which now works with DPMI. Slight mods to DOSSTUFF.C were necessary. This upgrade done without name revision. Released as XLISP-PLUS 2.1g 05/11/94 COMMA-AT did not complain about non-lists. APPEND would hang on circular lists. COND allowed non list clauses. (Bugs reported by Gottfried Ira). CONCATENATE would hang on circular lists. Removed several free() calls of obviously NULL pointers in the unixstuf.c, dosstuff.c, and winstuff.c files. (Error found by Luke Tierney.) Some crashes with XLISPWIN were traced to optimization errors in Borland C++ V3.1. Problem fixed by turning off offending optimization. 04/26/94 There was a bug involving GO's within UNWIND-PROTECT's which was fixed by changing the mechanism that the GO target was propagated back to the TAGBODY. Resulting code is smaller and implementation is much cleaner. (Bug reported by Gottfried Ira) Implementation documentation upgraded to include operation of contexts. Typo in CATCH documentation fixed. Fixed potential name clash in inspect.lsp. 04/16/94 Changed "forth" to "fourth" in place form definition in COMMON2.LSP. Changed FACT.LSP so factorial function works for (FACT 0). (Fix by Mihai Tache, moj@karla.indinf.pub.ro). 03/14/94 Bug fixed in MAP-INTO with more than three arguments. (Fix by Luke Tierney). 02/15/94 A bug was fixed in stepper.lsp. 02/06/94 A buffer was too small for filepathnames in the Unix versions. This has been fixed by making STRMAX be MAXPATHLEN for UNIX only. Some declarations fixed up for non-ANSI C compilers. Changes made so XLISP will compile on DEC Alpha. (From Luke Tierney) GENSYM will now handle numeric parts greater than 32767 on 16 bit integer systems. (Another old bug just found, from Luke Tierney) Addresses will now print better on some systems (Luke Tierney) Status messages (from the ROOM function and from control-T) display nicer, and in the latter case, display more information. In the Windows version, control-T no longer puts up a status dialog box, and the menu status selection now toggles a separate status window which is updated once a second. 02/02/94 The "long standing bug" in PROGV, "fixed" 11/19/93, was only half fixed. It's now really fixed. (Courtesy Gottfried Ira) The implicit BLOCK in DOTIMES and DOLIST now encloses the evaluation of the count/list argument. This allows (dotimes (i (return 'a))) to work. (Problem pointed out by Gottfried Ira). Fixed bug that would cause (cond ((values 1 2))) to return 1, 2, rather than NIL. (Fix by Luke Tierney) The loop index can now be safely used in the return expression of DOTIMES. Before, it wasn't protected from garbage collection. 02/01/94 PP.LSP use of READ needed to be changed to handle EOF (reported by thantos@runic.via.mind.org (Alex Williams)). Overflow during addition/subtraction of complex integers was not handled properly (fix by Luke Tierney). 01/29/94 The following bugs were fixed with the Windows version: Column set wrong on newlines (reported by Alex Williams). Marked text did not unmark when the enter key was hit and cursor was at the bottom of the display. Copy command changed so that final newline not placed in clipboard -- this makes the command more useful in that the last (or only) line of pasted text can be edited. 01/03/94 DEFUN and DEFMACRO affect global values, and not local bindings (such as with flet or macrolet). Missing unixprim.o in UNIX makefiles fixed. CATCH, THROW, and CASE now signal errors if no arguments. These bugs found by ira@iue.tuwien.ac.at (Gottfried Ira). 1- of max negative integer now produces correct answer when NOOVFIXNUM is used. COMMON2.LSP changed so that APROPOS returns no value when multiple values are compiled but packages are not compiled. Added #ifdef MULVALS at a line in xlimage.c that should not compile if MULVALS is not defined. Fixed documentation error in argument; this also changes glos.txt. These bugs were found by kok@cs.colostate.edu (Jan Kok). Removed reset of lposition in osflush(). Before the change, flushing the keystroke buffer would tell the system the cursor was at the left margin, messing up FRESH-LINE, among other functions. xlgetcolumn() did not correctly calculate the column number of USTREAMs. (Fix by Jan Kok). Corrected Y-OR-N-P to read a single character. Added YES-OR-NO-P which reads in a line of text. Both functions now work according to Common Lisp definitions. Error in DO, PROG, and, LET could cause garbage collection problems. (Fix by Luke Tierney). [After making this fix, a simulation program I have that would run a long time and then crash suddenly started working!] An error in readme.win documentation file made created XLISPWIN.INI files worthless. (Final release, 12/17/93) 12/17/93 Time to let go... (Still working on it, released on BBBBBS 2.1f) 11/19/93 Added far pointer quicksort function to MEDMEM MS-DOS versions, allowing sorting of all sequences. Added graphics to Windows version. Note that graphics and colors are not refreshed if window is un-obscured. The MODE function now returns dimensional information. Fixed reported bugs in unixprims.c and function EVALHOOK. Allowed change of statically allocated small FIXNUM range in xlisp.h. Fixed external symbol initiation problem with packages. Cosmetic changes to Windows version, and grayed Run-Proceed and Run-ReturnALevel when not at a break level. It never ends! Luke Tierney dropped a bunch of code off, so now READ, READ-CHAR, READ-BYTE, and READ-LINE take the eof related arguments, and there are new FORMAT directives O X # ? | { } ( ) [ and ]. Obscure bugs in defsetf and macroexpand fixed. Long standing bug in xlprogv fixed. Bug involving both optional and keyword arguments fixed. Added *READ-SUPPRESS* basically for the #+ and #- reader macros. Not documented here. (RELEASED ON Bitter Butter Better BBS) 11/11/93 Added INSPECT.LSP, a replacement for REPAIR.LSP. Much cleaner design. Completed Microsoft Windows version. (NOT RELEASED) 10/06/93 Version changed to 2.1f, for "final" version. :-) The repair function has been revised and will now handle structures. This venerable piece of code I wrote 18 years ago and is really showing its age. I've added a glossary function (glos.lsp and glos.txt) for online documentation. This function combined with the tab key in the DOS environment provide a pretty handy programming environment. The C variable "true" has been changed to "s_true" to reflect on the standard naming practice. Added MAP-INTO and COMPLEMENT. (NOT RELEASED) 09/26/93 Multiple values and packages features from Luke Tierney added. These are compilation options. .LSP files updated to match (I hope!). The entire set of functions, as described in CLtL2 have been added, some functions in COMMON.LSP. Added SPECIALP, MARK-AS-SPECIAL, and (in COMMON.LSP) EVAL-WHEN, DECLARE, and PROCLAIM. Fixed some small bugs with FLATSIZE and objects. (NOT RELEASED) 09/20/93 Added compilation option LEXBIND for lexical binding of GO and RETURN (Luke Tierney). Fixed ROUND to round to the nearest even. Added comments for DEFVAR DEFCONSTANT DEFPARAMETER and DEFSTRUCT, and fixed bug in HASH (from Jan Kok). (NOT RELEASED) 09/16/93 Fixed keyword args so duplicate key args ignored. Fixed baktrace of SUBRs where keyword args are used. Added :ALLOW-OTHER-KEYS. Added Luke Tierney's *startup-functions*, *command-line*, *load-file-arguments*, *top-level-loop*, TOP-LEVEL-LOOP, and RESET-SYSTEM. (NOT RELEASED) 07/16/93 Added GETF, and GETF placeform for SETF. Added third "default" argument for GET. Added PSETF. Corrected bugs in SETQ/PSETQ/SETF that allowed an odd number of arguments with no error. Added symbol name completion (MS-DOS), defined C constants for all special keyboard characters. Added LIST-LENGTH. Added :INITIAL-ELEMENT and :INITIAL-CONTENTS to MAKE-ARRAY. Added :CAPITALIZE for *PRINT-CASE*. Added functions STRING-CAPITALIZE and NSTRING-CAPITALIZE. Added IDENTITY as internal function, and ignore :KEY being #'IDENTITY. Improved performance of SORT, and will also sort all sequences (except for MEDMEM compilations in MS-DOS). Added NSUBST, NSUBST-IF, NSUBST-IF-NOT, NSUBLIS, and fixed errors in SUBLIS and SUBST. (NOT RELEASED) 06/21/93 Since I intend version 2.1f to be my last, I decided to to what I should have done earlier -- make ERROR CERROR and BREAK compatible with Common Lisp. It sure makes usage nicer. Because CERROR uses the arguments twice, I added the ~* directive to FORMAT. I suppose I should make PRINT do an initial newline instead of a trailing one, but this is not a major problem since most programs I've seen use FORMAT these days. Latest version of GCC now handles printing of NANs properly -- XLISP source changed appropriately. Added COUNT, COUNT-IF-NOT, POSITION, POSITION-IF-NOT, FIND, and FIND-IF-NOT. Because of recoding of COUNT-IF, POSITION-IF, and FIND-IF, no more code space is used than before. Added system stack checking code (based on code supplied by Richard Zidlicky). Code has some system dependencies, so is not enabled for all configurations. Basic effects of the code (which is enabled by defining STSZ to the stack size, typically done on the compiler command line): 1. EDEPTH and ADEPTH set appropriate to size. 2. Low-water mark is checked in EQUAL, SUBST, SUBLIS, PRIN*, and READ functions, which could cause a system stack overflow before. EVAL is also checked, however overflow here is unlikely if EDEPTH and ADEPTH are small enough. 3. A special garbage collector stack low-water-mark prevents the garbage collector from running (and does a TOP-LEVEL) when it appears that there would not be enough stack left. A check within the garbage collector code causes a fatal error message if the GC is attempted but the stack runs out anyway. If this low-water-mark is set to zero, then no check is performed. This is recommended for environments where the stack can't really run out but this feature is desired for items 2 and 4 in this list. 4. A new function SET-STACK-MARK is used to set a stack mark that if remaining free stack space drops below a break level will be entered. This provides excellent means to catch runaway recursive functions in a state that allows debugging. The argument value is the number of bytes remaining in the stack and is limited at the low end to be greater than the internal low-water mark and at the high end to be somewhat less than the free memory at the time the function is executed. SET-STACK-MARK returns the previous value. Installed stack checking for Microsoft C, Borland (Turbo) C, Top Speed C, and GCC. Fixed error in DEFSETF. 06/17/93 (NOT RELEASED) Bug fixed so LOOP cannot hang system. 01/21/92 (NOT RELEASED) Unbound indicator is now not interned. When printed (only possible with the debugging function GENERIC) shows as #. The former constant *unbound* is now not defined. FMAKUNBOUND is now an subr rather than an expr. 12/18/92 (NOT RELEASED) MS-DOS version has improved line editing (insert mode, l/r arrow, delete) with recall of 20 previous lines (up and down arrow keys). Tab key now ignored. Line length limited to physical line. Invalid keys cause "beep" rather than error message and abort of line. MS-DOS version calculates "run time" as real time less time spend waiting for keyboard input or doing SYSTEM function. This is a reasonable aproximation which ignores file I/O. Runtime is set to zero at startup. Time to garbage collect is now recorded, and can be displayed with the ROOM function. ZORTSTUF.C and GCCSTUFF.C merged into DOSSTUFF.C. Support for Metaware High-C + PharLap dropped because of high cost of product. 11/30/92 Improved complex number code by Hume Smith installed. 11-03-92 80386 version changed (in gccstuff.c) so that control-Z character in ascii files are treated as End-Of-File rather than causing an error message. Error message "Unexpected EOF" changed to "EOF reached before expression end." 09-9-92 Version number changed to 2.1e. MSDOS versions STUFF files altered to allow characters with high bit set (international) to be entered. The compilation option ASCII8, defined by default, allows these extended characters to be used throughtout XLISP-PLUS. The function ALPHA-CHAR-P has been added since BOTH-CASE-P can no longer be used to indicate characters that are alphabetic. The function ALPHANUMERICP, which has always existed, has been added to the documentation where it was strangely missing. The 80386 executable has been compiled with the most recent version of DJ Delorie's GO32 (1.08) and Ralf Brown's SPAWNO (4.1) which seems to have corrected a number of virtual memory management problems. It should be noted that GO32 creates its swap file in the root directory of drive C:. To move it elsewhere, specify the directory in a "SET GO32TMP=" DOS command. Documentation revised. STATUS REPORT: The compiler I've been working on is too buggy for distribution at this time, and I don't have the time at the moment to work on it. Let me say that it integrates real easily in the code (the #defines for it are already here), and the applications that work have been 4-6 times faster. The Windows version is on hold as well. The current version can be compiled using Borland C, with slight mods to the keyboard routines. Performance however is not good because of the 80286 protected mode operation and the continual load of selectors. Some day when I get Windows NT, I'll get back to this. Meanwhile I'll stick to DOS and the djgcc compiler. 07-09-92 Operation of setf changed to allow a *setf-lambda* expression as an alternative to the *setf* expression. This new format is eval'ed twice allowing defsetf to work in a fashion compatible with Common Lisp. Added the #+ and #- reader macros and the *features* global variable. Init.lsp defines the only feature ":xlisp". Added RATIONAL, because I found out the algorithm to do it. Believe me, it isn't easy! I also modified ratio arithmetic so that if a value cannot be exactly represented as a ratio of fixnums the result is expressed as a flonum. This affects + - * / REM MOD 1+ and 1-. Fixed + - * 1+ 1- so that integer/integer-complex operations that overflow become float/float-complex. Fixed LCM to eliminate overflow in cases where least common multiple would fit in an integer, and give an error when it would not. 05-28-92 In STEPPER.LSP, fixed bug stepping through RETURN, and display in most cases of RETURN, RETURN-FROM, GO, and THROW. Also fixed bug so that Enter key can be used for "Newline" command. Fixed bug in printing of closures, MS-DOS medium memory model. 04-13-92 Fixed two reported errors in unixprim.c. 03-23-92 No change to version number -- minor upgrade Bug fix in common.lsp (function copy-alist), queens2.lsp; new makefiles for SPARC and RS6000; UNIX support improved--file redirection, long file names, and unixprim.c. "-b" command switch for "batch" operation -- uncaught errors cause xlisp to exit to OS. 03-02-92 Fixed "fatal" error in function aref. 02-13-92 New version number 2.1d, and name changed to XLISP-PLUS to aid in differentiation. Many compilation options have been removed to provide more consistant code. There have been bug fixes in the xlobj (problems with 32 bit compilers, and special variable binding), gccstuff, and unixstuf (SYS V support) files. A bug causing (type-of 'x) to return CONS has been fixed Documentation is overhauled, and is somewhat simpler because of the fewer compilation variations. New features are rational numbers and readtable-case. Added Amiga support. 11-15-91 No change to the version number -- this is a maintenance upgrade. Three additional bugs have been identified and fixed. The first corrects a problem in typep that caused the type NUMBER to never match. The second implements *dos-input* for the 80386 XLISP, and corrects a minor problem with dribble in that version. 10-22-91 No change to the version number -- this is a maintenance upgrade. There have been two bug fixes made to this version. The first corrects problems with save/restore and binary files when the 80386 XLISP is used and the second corrects problems with string streams during garbage collections that print messages. In addition a new version of go32, DJ Delorie's DOS extender, is being used. This one is VCPI compatible as well as XMS compatible (still not DPMI). It is also possible to use it without an 80387 using his new 80387 emulator. Put the file emu387 in the directory with your binaries (lets say "c:\bin") and then set the environment variable: "set go32=emu c:/bin/emu387" -- note the forward slashes. XLISP will now use the 80387 emulator, even if an 80387 is present. 8-19-91 This archive contains a copy of the source file dldmem.c with a bug fixed. The version number has been revised to 2.1c. Please change file xlisp.c to match. Also included are new executable files. Please delete any existing 80386 XLISP executables because of distribution licensing problems and use this executable which has been compiled with the GNU C compiler and uses DJ Delorie's DOS extender, go32. While this version does not run in VCPI or DPMI environments, it does offer virtual memory (swaps to disk) and will spawn a DOS shell with almost the entire lower memory free (I've incorporated Ralf Brown's SPAWNO into go32!). Tom Almy almy@teleport.com