2.25 (2001-03-15)
=================

Important notes
---------------

* The default extension of Lisp source files for CLISP is now ".lisp" instead
  of ".lsp". When both "foo.lisp" and "foo.lsp" exist, (LOAD "foo") will load
  "foo.lisp".

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* A new version numbering scheme is adopted.

* If an error is signalled by a form supplied with the command-line
  option "-x", CLISP now exits with a non-zero status.

* The pretty-printer does not print hanging parenthesis by default now.
  *PRINT-RPARS* now defaults to NIL and *PRINT-INDENT-LISTS* to 1, so
  that the lists are printed like in CLHS and CLtL.

* New extension: directory access (win32 registry).  See impnotes for details.

* Support UNC pathnames (\\host\dir\name.ext) on win32.

* Support the SCREEN package on Win32. Thanks to Arseny Slobodjuck.

* New functions CONVERT-STRING-FROM-BYTES and CONVERT-STRING-TO-BYTES.

* Support for non-blocking binary I/O.
  New functions READ-BYTE-LOOKAHEAD, READ-BYTE-WILL-HANG-P, READ-BYTE-NO-HANG.
  New generic functions STREAM-READ-BYTE-LOOKAHEAD,
  STREAM-READ-BYTE-WILL-HANG-P, STREAM-READ-BYTE-NO-HANG.

* CONCATENATED-STREAM-STREAMS now returns only the remaining streams,
  as per ANSI CL spec.

* Implemented ANSI CL function INSPECT,
  and a function LISP:CLHS for access of Common Lisp HyperSpec.

* Characters have now the same names as in Unicode 3.0, with space replaced
  by underscore.

* ANSI CL compliance: CALL-NEXT-METHOD and NEXT-METHOD-P are now implemented
  as local functions, not local macros. It is now possible to call
  (APPLY #'CALL-NEXT-METHOD argument-list-of-unknown-length).

* ANSI CL compliance: LOAD has a new keyword argument :EXTERNAL-FORMAT.

* ANSI CL compliance: When an end-of-stream occurs, READ, READ-CHAR, PEEK-CHAR,
  READ-CHAR-NO-HANG, READ-LINE, READ-BYTE, READ-INTEGER, READ-FLOAT, called
  with arguments eof-error-p = NIL and without eof-value, now return NIL
  instead of #<END OF FILE>.

* ANSI CL compliance: When LISP:*PARSE-NAMESTRING-ANSI* is non-NIL,
  PARSE-NAMESTRING parses strings with colons as logical pathnames.

* New supported character sets in package CHARSET: GB18030, BIG5HKSCS.

* Arguments passed to MAKE-PATHNAME with value NIL are not overridden by
  pathname slots in the :DEFAULTS argument any more.

* STREAM-ELEMENT-TYPE of a TWO-WAY-STREAM or an ECHO-STREAM now depends on
  the stream's constituents. Previously, it was always (OR CHARACTER INTEGER).

* Fixed a bug: REPLACE signalled an error if the source and destination
  sequences were the same and the source and destination ranges didn't overlap.

* Fixed a bug: A garbage collection during the execution of a foreign function
  callback caused a crash.

* Fixed a bug: Calling READ-LINE on a stream already positioned at EOF caused
  a crash on 64-bit platforms.

* Fixed a bug: For long-floats, (EQL x (- x)) returned true.

* Fixed a bug: OPEN now returns NIL when the filename's directory does not
  exist and :IF-DOES-NOT-EXIST NIL was specified. Previously, an error was
  signalled except when :DIRECTION was :PROBE.

* Fixed a bug: (subtypep 'fundamental-stream 'stream) returned NIL.

Portability
-----------

* Added support for IA-64 running Linux.

* Added support for BeOS 5. Thanks to Alexis Rivera Rios <ahrivera@yahoo.com>.


2000-03-06
==========

User visible changes
--------------------

* New functions READ-FLOAT and WRITE-FLOAT.

* Unicode support: The pretty-printer and FORMAT ~T now handle non-spacing and
  double-width Unicode characters correctly. Pretty-printer slows down by 30%.
  New functions CHAR-WIDTH, STRING-WIDTH.

* Fixed two bugs in TRANSLATE-PATHNAME: Substitution of "**" did not work.
  Substitutions without version into non-logical pathnames crashed.

* Dutch translations of the user interface messages have been added
  Thanks to Tijs van Bakel <smoke@casema.net>.

* When configured with --with-export-syscalls, :SYSCALLS is in *FEATURES*
  and functions POSIX:RESOLVE-IP-ADDR, POSIX:USER-DATA, POSIX:FILE-STAT,
  POSIX:SYSINFO, POSIX:RESOURCE-USAGE-LIMITS,
  as well as those libm.so functions which do not have a better
  counterpart in ANSI CL are available.

* New supported character sets in package CHARSET: ISO-8859-16, KOI8-U,
  KOI8-RU, EUC-JP, SHIFT-JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1,
  EUC-CN, HZ, GBK, CP936, EUC-TW, BIG5, CP950, ISO-2022-CN, ISO-2022-CN-EXT,
  EUC-KR, CP949, ISO-2022-KR, ARMSCII-8, GEORGIAN-ACADEMY, GEORGIAN-PS,
  TIS-620, MULELAO-1, CP1133, VISCII, TCVN, UTF-16, UTF-7, MACINTOSH (as an
  alias for MAC-ROMAN).

Other modifications
-------------------

* Speed up some sequence functions when operating on vectors: MAKE-SEQUENCE,
  CONCATENATE, COPY-SEQ, COERCE, SUBSEQ, REPLACE, FILL, REVERSE, NREVERSE,
  REMOVE[-IF[-NOT]] with :START/:END, SUBSTITUTE[-IF[-NOT]] with :START/:END,
  SORT.

* Speed up ADJUST-ARRAY.


1999-07-22
==========

User visible changes
--------------------

* Added a new module - "postgresql": interface to the PostgreSQL ODBMS.

* Implemented ANSI CL macro WITH-PACKAGE-ITERATOR.

* Conforming to ANSI CL issue <ALLOCATE-INSTANCE:ADD>: New function
  ALLOCATE-INSTANCE.

* Conforming to ANSI CL issue <GENERIC-FLET-POORLY-DESIGNED:DELETE>: The
  symbols GENERIC-FLET and GENERIC-LABELS are not exported from the
  COMMON-LISP package any more.

* Conforming to ANSI CL issues <KEYWORD-ARGUMENT-NAME-PACKAGE:ANY> and
  <MULTIPLE-VALUE-SETQ-ORDER:LIKE-SETF-OF-VALUES>.

* Conforming to ANSI CL Issue <MACRO-FUNCTION-ENVIRONMENT:YES>
  MACRO-FUNCTION now takes an optional second argument ENV.

* When CLISP is invoked with an "-a" option, *features* contain :ANSI-CL.

* Weak pointers are implemented. New functions MAKE-WEAK-POINTER,
  WEAK-POINTER-P, WEAK-POINTER-VALUE.

* The function OPEN, when creating unbuffered file streams, now supports any
  of the following :ELEMENT-TYPEs: CHARACTER and ([UN]SIGNED-BYTE n), where n
  is a multiple of 8.

* The functions
    MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM, MAKE-PIPE-IO-STREAM,
    SOCKET-ACCEPT, SOCKET-CONNECT
  accept a keyword argument :ELEMENT-TYPE. Possible values are types
  equivalent to CHARACTER or (UNSIGNED-BYTE n), (SIGNED-BYTE n), where n is
  a positive multiple of 8. Previously these functions returned streams whose
  element-type was (OR CHARACTER (UNSIGNED-BYTE 8)).

* STREAM-ELEMENT-TYPE is SETFable. The element type of streams created by the
  functions MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM,
  MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT can be modified, if the
  old and the new element type are compatible.
  (UNSIGNED-BYTE n) and (SIGNED-BYTE n) are compatible, and CHARACTER is
  compatible with ([UN]SIGNED-BYTE 8).

* Character I/O can now be customized via encodings. A stream's external
  format is an encoding, and the symbol macros
    *DEFAULT-FILE-ENCODING*, *PATHNAME-ENCODING*, *TERMINAL-ENCODING*,
    *MISC-ENCODING*, FFI:*FOREIGN-ENCODING*, AFFI:*FOREIGN-ENCODING*
  contain user-settable encodings.
  Encodings can be obtained through the function MAKE-ENCODING, and as values
  of the constants
    CHARSET:UCS-2, CHARSET:UNICODE-16, CHARSET:UNICODE-16-BIG-ENDIAN,
    CHARSET:UNICODE-16-LITTLE-ENDIAN, CHARSET:UCS-4, CHARSET:UNICODE-32,
    CHARSET:UNICODE-32-BIG-ENDIAN, CHARSET:UNICODE-32-LITTLE-ENDIAN,
    CHARSET:UTF-8, CHARSET:JAVA, CHARSET:ASCII, CHARSET:ISO-8859-1,
    CHARSET:ISO-8859-2, CHARSET:ISO-8859-3, CHARSET:ISO-8859-4,
    CHARSET:ISO-8859-5, CHARSET:ISO-8859-6, CHARSET:ISO-8859-7,
    CHARSET:ISO-8859-8, CHARSET:ISO-8859-9, CHARSET:ISO-8859-10,
    CHARSET:ISO-8859-13, CHARSET:ISO-8859-14, CHARSET:ISO-8859-15,
    CHARSET:KOI8-R, CHARSET:MAC-ARABIC, CHARSET:MAC-CENTRAL-EUROPE,
    CHARSET:MAC-CROATIAN, CHARSET:MAC-CYRILLIC, CHARSET:MAC-DINGBAT,
    CHARSET:MAC-GREEK, CHARSET:MAC-HEBREW, CHARSET:MAC-ICELAND,
    CHARSET:MAC-ROMAN, CHARSET:MAC-ROMANIA, CHARSET:MAC-SYMBOL,
    CHARSET:MAC-THAI, CHARSET:MAC-TURKISH, CHARSET:MAC-UKRAINE,
    CHARSET:CP437, CHARSET:CP737, CHARSET:CP775, CHARSET:CP850, CHARSET:CP852,
    CHARSET:CP855, CHARSET:CP857, CHARSET:CP860, CHARSET:CP861, CHARSET:CP862,
    CHARSET:CP863, CHARSET:CP864, CHARSET:CP865, CHARSET:CP866, CHARSET:CP869,
    CHARSET:CP874, CHARSET:WINDOWS-1250, CHARSET:WINDOWS-1251,
    CHARSET:WINDOWS-1252, CHARSET:WINDOWS-1253, CHARSET:WINDOWS-1254,
    CHARSET:WINDOWS-1255, CHARSET:WINDOWS-1256, CHARSET:WINDOWS-1257,
    CHARSET:WINDOWS-1258, CHARSET:HP-ROMAN8, CHARSET:NEXTSTEP.

* The functions
    OPEN, MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM, MAKE-PIPE-IO-STREAM,
    SOCKET-ACCEPT, SOCKET-CONNECT
  and the macro
    WITH-OUTPUT-TO-PRINTER
  accept a keyword argument :EXTERNAL-FORMAT. Possible values are encodings,
  such as returned by the function MAKE-ENCODING, the line terminator keywords
  :UNIX, :MAC, :DOS, and :DEFAULT. New function STREAM-EXTERNAL-FORMAT.

* STREAM-EXTERNAL-FORMAT is SETFable. The external format of streams created
  by the functions OPEN, MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM,
  MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT can be modified.

* OPEN has a new keyword argument :BUFFERED. It determines whether the file
  stream returned is buffered or not. Possible values for it are NIL, T, or
  :DEFAULT. If it is :DEFAULT, buffered file streams will be returned for
  regular files and (on Unix) block-devices, and unbuffered file streams for
  special files.

* The functions MAKE-PIPE-INPUT-STREAM, MAKE-PIPE-OUTPUT-STREAM,
  MAKE-PIPE-IO-STREAM, SOCKET-ACCEPT, SOCKET-CONNECT have a new keyword
  argument :BUFFERED. It determines whether the stream returned is buffered or
  not. Possible values for it are NIL, T, or :DEFAULT. :DEFAULT is equivalent
  to NIL.

* New functions READ-INTEGER, WRITE-INTEGER which can be used to do binary I/O
  on streams with element-type (UNSIGNED-BYTE 8).

* The Gray proposal <STREAM-DEFINITION-BY-USER> is implemented:
  New classes
    FUNDAMENTAL-STREAM,
    FUNDAMENTAL-INPUT-STREAM, FUNDAMENTAL-OUTPUT-STREAM,
    FUNDAMENTAL-CHARACTER-STREAM, FUNDAMENTAL-BINARY-STREAM,
    FUNDAMENTAL-CHARACTER-INPUT-STREAM, FUNDAMENTAL-CHARACTER-OUTPUT-STREAM,
    FUNDAMENTAL-BINARY-INPUT-STREAM, FUNDAMENTAL-BINARY-OUTPUT-STREAM.
  New generic functions
    STREAM-READ-CHAR, STREAM-UNREAD-CHAR, STREAM-READ-CHAR-NO-HANG,
    STREAM-PEEK-CHAR, STREAM-LISTEN, STREAM-READ-CHAR-WILL-HANG-P,
    STREAM-READ-CHAR-SEQUENCE, STREAM-READ-LINE, STREAM-CLEAR-INPUT,
    STREAM-WRITE-CHAR, STREAM-LINE-COLUMN, STREAM-START-LINE-P,
    STREAM-WRITE-CHAR-SEQUENCE, STREAM-WRITE-STRING, STREAM-TERPRI,
    STREAM-FRESH-LINE, STREAM-FINISH-OUTPUT, STREAM-FORCE-OUTPUT,
    STREAM-CLEAR-OUTPUT, STREAM-ADVANCE-TO-COLUMN,
    STREAM-READ-BYTE, STREAM-READ-BYTE-SEQUENCE,
    STREAM-WRITE-BYTE, STREAM-WRITE-BYTE-SEQUENCE.
  The functions CLOSE, OPEN-STREAM-P, STREAM-ELEMENT-TYPE are now generic
  functions.

* The macros FFI:DEF-C-CALL-OUT and FFI:DEF-C-CALL-IN now add an argument
  :LANGUAGE :STDC (means ANSI C) instead of :LANGUAGE :C (means old K&R C).

* Conforming with ANSI CL, SIMPLE-CONDITION now has the initarg
  :FORMAT-CONTROL instead of :FORMAT-STRING. New function
  SIMPLE-CONDITION-FORMAT-CONTROL.

* Conforming with ANSI CL, FILE-LENGTH and FILE-POSITION, when called on
  an unbuffered file stream, now return NIL instead of signalling an error.

* Conforming with ANSI CL, MACROEXPAND and MACROEXPAND-1 now accept NIL as
  second argument, denoting the global environment.

* Conforming with ANSI CL, the reader now signals an error of type
  READER-ERROR when trying to parse tokens like 35/000 or 1.5e1000,
  instead of DIVISION-BY-ZERO and FLOATING-POINT-OVERFLOW, respectively.

* On Unix, calling OPEN on a block device now returns a buffered stream
  instead of an unbuffered stream.

* On Unix, writing to a pipe created by MAKE-PIPE-OUTPUT-STREAM or
  MAKE-PIPE-IO-STREAM after the corresponding child process has exited
  now leads to an error message instead of terminating the CLISP process.

* The generic function GENERIC-STREAM-LISTEN is replaced with
  GENERIC-STREAM-READ-CHAR-WILL-HANG-P.

* The function XGCD now really always returns coefficients of smallest
  possible absolute value.

* Fixed a interpreter bug: (let (x) (declare (special x)) ...) did not change
  the global value of x in interpreted mode.

* Fixed a bug: On Win32, Ctrl-Z sometimes caused two levels of the read-eval-
  print loop to be aborted instead of just one.

* Fixed a bug: READ-CHAR-SEQUENCE, when called on a string input stream,
  forgot to advance the pointer into the string.

* Fixed a bug: WRITE-CHAR-SEQUENCE on Win32 failed to convert NL to CR/LF.

* Fixed a bug: Calling (GET-DISPATCH-MACRO-CHARACTER disp-char sub-char) would
  crash, instead of returning NIL, if there is no macro-character function
  associated with sub-char after disp-char.

* Fixed a bug: (CHECK-TYPE place typespec string) did not evaluate `string'.

* Fixed a bug: Calling the function FINALIZE caused a crash during the next GC
  on many platforms.

* Fixed a bug: Calling a generic function without any installed method
  resulted in an inappropriate error message, not a call to
  NO-APPLICABLE-METHOD.

* Fixed a bug: Closing a SOCKET-SERVER twice, or using a closed SOCKET-SERVER
  could result in inappropriate error messages.

* Fixed a bug: (format nil "~@D" 0) ==> "+0" now.

Portability
-----------

* Added support for SPARC running Linux.

* Added support for Apple PowerPC running MacOS X Server (a.k.a. Rhapsody).

Other modifications
-------------------

* On Linux 2.2.x with glibc-2.1, Solaris, OSF/1 and Irix, stack overflow is
  now caught reliably. Previously, endless recursion in interpreted code could
  cause a crash in some cases.


1999-01-08
==========

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* Conforming to ANSI CL issue <SETF-MULTIPLE-STORE-VARIABLES:ALLOW>:
  multiple values in ASSERT, ROTATEF, SHIFTF &c.

* Conforming to ANSI CL issue <SETF-OF-VALUES:ADD>: `values' can take
  multiple value places in setf &c.

* The variable `*prompt-with-package*' is replaced with `*prompt*',
  which can be a function.  See the impnotes for further details.

* Conforming with X3J13 writeup <FUNCTION-TYPE:X3J13-MARCH-88>, an error
  is now signalled when a lambda expression (not a function) is passed to
  APPLY, FUNCALL, SETF SYMBOL-FUNCTION, EVERY, SOME, NOTEVERY, NOTANY,
  SET-MACRO-CHARACTER, SET-DISPATCH-MACRO-CHARACTER. The latter two now
  accept a symbol instead of a function.

* X3J13 vote <103> = writeup <IN-PACKAGE-FUNCTIONALITY:MAR89-X3J13> is
  implemented: COMMON-LISP:IN-PACKAGE is now a macro. LISP:IN-PACKAGE retains
  the old semantics as a function.
  The syntaxes (IN-PACKAGE "FOO") and (IN-PACKAGE :FOO) work with both
  variations.

* X3J13 vote <11> = writeups <CHARACTER-PROPOSAL:2>,
  <CHARACTER-LOOSE-ENDS:FIX>, <CHARACTER-VS-CHAR:LESS-INCONSISTENT-SHORT>,
  <JUN90-TRIVIAL-ISSUES:24>, <STANDARD-REPERTOIRE-GRATUITOUS:RENAME> are
  implemented: Characters don't have font and bits attributes any more.
  The following symbols are not exported from package COMMON-LISP any more:
     STRING-CHAR STRING-CHAR-P
     CHAR-FONT-LIMIT CHAR-BITS-LIMIT
     CHAR-CONTROL-BIT CHAR-META-BIT CHAR-SUPER-BIT CHAR-HYPER-BIT
     CHAR-BITS CHAR-FONT MAKE-CHAR INT-CHAR CHAR-BIT SET-CHAR-BIT
  MAKE-STRING and MAKE-STRING-OUTPUT-STREAM have a new keyword argument
  :ELEMENT-TYPE.
  New types BASE-CHAR, EXTENDED-CHAR, BASE-STRING, SIMPLE-BASE-STRING.

* X3J13 writeup <SETF-METHOD-VS-SETF-METHOD:RENAME-OLD-TERMS> is implemented:
  New function GET-SETF-EXPANSION, new macro DEFINE-SETF-EXPANDER. The old
  symbols GET-SETF-METHOD-MULTIPLE-VALUE, GET-SETF-METHOD, DEFINE-SETF-METHOD
  are removed from package COMMON-LISP.

* X3J13 writeups <READER-ERROR:NEW-TYPE> and <PARSE-ERROR-STREAM:SPLIT-TYPES>
  are implemented: New condition classes PARSE-ERROR and READER-ERROR.

* X3J13 writeup <UNDEFINED-VARIABLES-AND-FUNCTIONS:COMPROMISE> is implemented:
  New condition class UNBOUND-SLOT. New function UNBOUND-SLOT-INSTANCE.

* X3J13 writeups <COMMON-TYPE:REMOVE> and <COMPILER-LET-CONFUSION:ELIMINATE>
  are implemented: COMMONP and COMPILER-LET are not exported from package
  COMMON-LISP any more.

* X3J13 vote <138> = writeup <PEEK-CHAR-READ-CHAR-ECHO:FIRST-READ-CHAR> is
  implemented: PEEK-CHAR does less side effects than READ-CHAR followed by
  UNREAD-CHAR would do.

* X3J13 writeup <SHARPSIGN-PLUS-MINUS-PACKAGE:KEYWORD> is implemented:
  When looking up a feature symbol in *FEATURES*, the package is no longer
  ignored. All initial elements of *FEATURES* are now keywords. The reader
  binds *PACKAGE* to #<PACKAGE KEYWORD> during #+ and #-.

* X3J13 writeup <SLOT-MISSING-VALUES:SPECIFY> is implemented: Some of the
  values of SLOT-MISSING are ignored, depending on context.

* X3J13 writeup <WITH-OPEN-FILE-SETQ:EXPLICITLY-VAGUE> is implemented:
  Assigning the variable bound by the WITH-INPUT-FROM-STRING, WITH-OPEN-FILE,
  WITH-OPEN-STREAM, WITH-OUTPUT-TO-STRING macros generates a compiler warning.

* X3J13 writeup <SEQUENCE-TYPE-LENGTH:MUST-MATCH> is implemented: The
  functions MAKE-SEQUENCE, COERCE, CONCATENATE, MAP, MERGE signal an error
  if the result type specifies a length inconsistent with the other arguments.

* X3J13 writeup <SYMBOL-MACROS-AND-PROCLAIMED-SPECIALS:SIGNALS-AN-ERROR> is
  implemented: SYMBOL-MACROLET of special variables or constants now signals
  an error.

* Conforming with X3J13 writeup <DOTTED-LIST-ARGUMENTS:CLARIFY>, the first
  argument of LDIFF may now be a dotted list.

* PATHNAME-MATCH-P and TRANSLATE-PATHNAME now treat missing pathname
  components the same as wild ones.

* Renamed function SOCKET-STREAM-PEER-HOST to SOCKET-STREAM-PEER. New
  functions SOCKET-STREAM-LOCAL and SOCKET-SERVER-HOST.

* Conforming to ANSI CL, DEFSTRUCT with option :INCLUDE now does not define
  accessors which were already defined in a superclass DEFSTRUCT. This solves
  the problems that occur when using the same :CONC-NAME for the new and the
  inherited structure, without need for the DEFSTRUCT option :INHERIT.

* The functions MAKE-BROADCAST-STREAM, MAKE-CONCATENATED-STREAM,
  MAKE-TWO-WAY-STREAM, MAKE-ECHO-STREAM now verify that their arguments are
  input streams or output streams, respectively.

* The function EQUALP now ignores the element type of arrays and looks only
  at the array contents, as specified by ANSI CL.

* The *FEATURES* list now contains the symbol CLTL2 instead of the symbol
  CLTL1.

* The limit for file size of files that can be accessed by CLISP is increased:
  4 GB for character streams, 512 MB for integer streams. The previous limits
  were 16 MB for character streams, 2 MB for integer streams.

* Fixed a bug: Calling the function INTERACTIVE-STREAM-P with a non-stream
  argument could cause a crash.

* Fixed a bug in the LOOP macro: OF-TYPE was not supported in numeric
  accumulation clauses (COUNT/SUM/MAXIMIZE/MINIMIZE).

* Fixed a bug in the LOOP macro: The FOR clauses FROM/TO/BY can now be given
  in any order.

* Fixed a bug: (UPGRADED-ARRAY-ELEMENT-TYPE 'STANDARD-CHAR) returned T instead
  of STRING-CHAR.

* Fixed a bug: The function CERROR signalled an error if more than two
  arguments were given and the second argument was a condition.

* Fixed a bug: Hash tables with test #'EQUALP did not work correctly when the
  keys are characters, multi-dimensional arrays or pathnames.

* The function VALUES-LIST now verifies that its argument is a proper list.

* The function XGCD now always returns coefficients of smallest possible
  absolute value. Suggested by the LiDIA group.


9 September 1998
================

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* The 16 MB memory size limit on 32-bit machines is gone. No need for
  wide-mode binaries any more. The "makemake" option --with-wide is not
  supported any more. The command-line option -W is supported for backward
  compatibility, but will be removed in the future.

* New variables *WARN-ON-FLOATING-POINT-CONTAGION* and
  *FLOATING-POINT-CONTAGION-ANSI*.

* New function PROBE-DIRECTORY which tests for the existence of a directory.
  Suggested by many people.

* New FORMAT directives ~/ (ANSI standard) and ~! (a better alternative).

* ANSI CL variable *PRINT-RIGHT-MARGIN* is implemented.

* The functions WRITE and WRITE-TO-STRING take the :RIGHT-MARGIN key argument.

* X3J13 writeup <TYPE-BOOLEAN> is implemented: New type BOOLEAN.
  Suggested by Sam Steingold.

* X3J13 writeup <ARGUMENT-MISMATCH-ERROR-MOON:FIX> is implemented:
  Errors during function calls (too few arguments, too many arguments,
  invalid keyword arguments, odd number of keyword arguments, unrecognized
  keyword arguments) are now of type PROGRAM-ERROR.

* X3J13 writeup <ENSURE-DIRECTORIES-EXIST> is implemented:
  New function ENSURE-DIRECTORIES-EXIST.
  Suggested by Pierpaolo Bernardi.

* X3J13 writeup <ISO-COMPATIBILITY:ADD-SUBSTRATE> is implemented:
  The macro DEFINE-SYMBOL-MACRO is now exported from package COMMON-LISP.
  Suggested by Pierpaolo Bernardi.

* X3J13 writeup <DISPLACED-ARRAY-PREDICATE> is implemented:
  New function ARRAY-DISPLACEMENT.

* X3J13 writeup <CLASS-OBJECT-SPECIALIZER:AFFIRM> is implemented:
  Class objects can now be used as parameter specializer names (not only
  symbols and lists of the form (EQL object)).

* X3J13 writeup <COMPILE-FILE-OUTPUT-FILE-DEFAULTS:INPUT-FILE> is implemented:
  When :OUTPUT-FILE is given to COMPILE-FILE or COMPILE-FILE-PATHNAME, missing
  pathname components are merged in from the input file pathname.

* X3J13 writeup <COMPILE-FILE-PATHNAME-ARGUMENTS:MAKE-CONSISTENT> is
  implemented: COMPILE-FILE-PATHNAME accepts any keyword arguments.

* X3J13 writeup <COMPUTE-APPLICABLE-METHODS:GENERIC> is implemented:
  COMPUTE-APPLICABLE-METHODS is now a generic function.

* X3J13 writeup <CONDITION-SLOTS:HIDDEN> is implemented: Predefined condition
  types have their own private slot names.

* X3J13 vote <57> = writeup <DEFSTRUCT-SLOTS-CONSTRAINTS-NAME:DUPLICATES-ERROR>
  is implemented: Different slots in a structure cannot have names whose
  SYMBOL-NAME are equal.

* X3J13 writeup <CONS-TYPE-SPECIFIER:ADD> is implemented:
  New type specifier (CONS car-type cdr-type).

* X3J13 writeup <DEFMACRO-BLOCK-SCOPE:EXCLUDES-BINDINGS> is implemented:
  The implicit BLOCK generated by DEFMACRO and DEFTYPE encloses only the
  body forms, not the forms occurring in the lambda list.

* X3J13 writeup <DEFSTRUCT-COPIER:ARGUMENT-TYPE> is implemented:
  New function COPY-STRUCTURE.

* X3J13 writeup <JUN90-TRIVIAL-ISSUES:9> is implemented:
  New classes GENERIC-FUNCTION, STRUCTURE-OBJECT, CLASS, METHOD. Removed
  the type STRUCTURE.

* X3J13 writeup <EVALHOOK-STEP-CONFUSION:X3J13-NOV-89> is implemented:
  Don't export EVALHOOK, APPLYHOOK, *EVALHOOK*, *APPLYHOOK* from package
  COMMON-LISP any more.

* X3J13 writeup <MACRO-DECLARATIONS:MAKE-EXPLICIT> is implemented: NOTINLINE
  declarations of macros having special compiler treatment are now respected.

* X3J13 writeups <DEFSTRUCT-PRINT-FUNCTION-INHERITANCE:YES> and
  <DEFSTRUCT-PRINT-FUNCTION-AGAIN:X3J13-MAR-93> are implemented:
  DEFSTRUCT accepts an option :PRINT-OBJECT, similar to :PRINT-FUNCTION,
  and each of these options causes a method on PRINT-OBJECT to be installed.

* X3J13 writeup <SPECIAL-FORM-P-MISNOMER:RENAME> is implemented: New function
  SPECIAL-OPERATOR-P. The function SPECIAL-FORM-P still exists, but its use
  generates a compiler warning.

* X3J13 writeup <FLOATING-POINT-CONDITION-NAMES:X3J13-NOV-89> is implemented:
  New condition types FLOATING-POINT-INEXACT, FLOATING-POINT-INVALID-OPERATION.

* Fixed a bug: Reading objects in #n# syntax into typed structure slots gave
  an error if the structure's constructor was not compiled.
  Reported by Sam Steingold <sds@usa.net>.

* BUTLAST and NBUTLAST are now ANSI CL compliant: They signal an error if the
  argument is a dotted list of length 0. (Stupid.)

* The macro WITH-OUTPUT-TO-STRING is now ANSI compliant.

* Added FFI support for NetBSD/m68k.
  Thanks to Jörn Clausen <joern@techfak.uni-bielefeld.de>.

* Use of the deprecated functions GENTEMP and SET now generates a compiler
  warning.

* Stricter syntax checking for DO and DO*.

* When CLOS:CALL-NEXT-METHOD is called with arguments, it is now checked that
  the set of applicable methods is the same as for the original arguments, in
  interpreted code only.

* The CLX documentation now also exists in HTML format.
  Thanks to Gilbert Baumann <unk6@rz.uni-karlsruhe.de>.

* The normal read-eval-print loop doesn't call (CLEAR-INPUT *STANDARD-INPUT*)
  any more. This means that under X11, cut and paste of multiple lines into
  an xterm running clisp now works.
  Suggested by Sam Steingold.

* When opening socket servers, ignore EADDRINUSE errors coming from other
  sockets, in TIME_WAIT or CLOSE_WAIT state, hanging around on the port.
  Suggested by Don Cohen.

* Fixed a bug: When *PRINT-PRETTY* = T, (PRINC #\Newline) often caused two
  newline characters to be output instead of a single one.

* Fixed a bug: The sequence type functions refused to handle sequence types
  of the form ([SIMPLE-]ARRAY eltype 1). SUBTYPEP returned wrong results
  for type specifiers of the form ([SIMPLE-]ARRAY eltype n).

* Fixed a bug: GET-MACRO-CHARACTER on a dispatch macro character doesn't
  result in an error any more.

* Fixed a bug in ECASE, ETYPECASE, CCASE, CTYPECASE.
  These macros now accept T and OTHERWISE as keys.

* Fixed a bug: OPEN did not accept type specifiers defined by DEFTYPE as
  :ELEMENT-TYPE argument.

* Fixed a bug in the LOOP macro: Forms containing REPEAT clauses were
  executed too often in the presence of FOR-= clauses.

* Fixed a bug: The SPACE macro returned a list of the form's values, instead
  of the values themselves.

* Fixed a bug, implement X3J13 writeup <PRINC-READABLY:X3J13-DEC-91>:
  When *PRINT-READABLY* = T, (PRINC string) caused the string to be output
  in double-quotes instead of literally.

* X3J13 writeup <IGNORE-USE-TERMINOLOGY:VALUE-ONLY> is implemented:
  A "variable is used despite of IGNORE declaration" warning is not emitted
  any more for a variable that is only assigned to and not used for value.
  Suggested by Pierpaolo Bernardi.

* Fixed a bug in function FILE-AUTHOR on Win32.

* Fixed a bug: CLISP was unable to determine the user's homedir in
  certain (obscure) circumstances.

* Don't warn anymore if someone modifies one of the standard generic
  functions of CL like PRINT-OBJECT and INITIALIZE-INSTANCE.

Portability
-----------

* Added AmigaOS support for the socket functions. It's not perfect, but
  sufficient for writing socket clients.
  Thanks to Jörg Höhle.

* Added support for PowerPC running MkLinux.

Other modifications
-------------------

* `clisp-link' has a new command `run', to run a linking set with some
  modules loaded. If CLISP has been configured with option
  --with-dynamic-modules, this is much faster than constructing a
  temporary linking set.
  Suggested by Gilbert Baumann <unk6@rz.uni-karlsruhe.de>.

* Compiling IFs with no else part now produce better code (Jörg Höhle).

* Speed up I/O to *STANDARD-INPUT*, *STANDARD-OUTPUT* and *TERMINAL-IO*:
  If standard input is redirected from a file, the input side of *TERMINAL-IO*
  will be buffered. If standard output is redirected to a file, the output
  side of *TERMINAL-IO* will be buffered.

* Dropped the STDWIN library.

* Added bindings to libc for Linux with libc6 (aka glibc 2.0).

* Miscellaneous documentation updates.


6 December 1997
===============

User visible changes
--------------------

* Fixed a bug which could cause a crash when Ctrl-C was pressed during heap
  allocation on i386.

Other modifications
-------------------

* The implementation notes now also exist in HTML format.


25 September 1997
=================

User visible changes
--------------------

* X3J13 vote <53> is implemented: DEFSTRUCT BOA constructors can have &KEY
  arguments.

* X3J13 vote <40> is partially implemented: New variable *READ-EVAL*.

* X3J13 vote <150> is implemented: (READTABLE-CASE readtable) can now have
  the value :INVERT.

* MAKE-PACKAGE and IN-PACKAGE accept a keyword argument :CASE-SENSITIVE.
  Similarly, DEFPACKAGE accepts an option :CASE-SENSITIVE. When its value is
  non-NIL, the package will be case sensitive, i.e. the reader will not
  case-convert symbol names before looking them up or creating them in this
  package. The package names are still subject to (READTABLE-CASE *READTABLE*),
  though.

* X3J13 vote <157> is implemented: ROOM accepts an optional argument with
  default value :DEFAULT.

* New macro SPACE. (SPACE form) evaluates form and prints information about
  the memory allocations caused by this evaluation.

* The spanish translation is now 100% complete. Thanks to Carlos Linares.

* DESCRIBE of a structure now displays the structure's slots.

* The reader now accepts the syntax #\^A ... #\^Z for the ASCII control
  characters.

* Fixed a CLOS bug: &ALLOW-OTHER-KEYS in lambda lists of INITIALIZE-INSTANCE
  now disables the validity checking of corresponding MAKE-INSTANCE calls.
  Thanks to Matthias Lindner <matthias@intellektik.informatik.th-darmstadt.de>.

* Fixed a bug: The type REAL is now accepted as a declaration specifier.

* Fixed a bug: When using GNU gettext, the LOCALIZED function always returned
  the value corresponding to language ENGLISH, and the interactive conflict
  resolution of some IMPORT/EXPORT package operations aborted with an internal
  error.

* Fixed a bug in the foreign function interface: call-ins didn't work on
  some platforms.
  Thanks to Matthias Lindner <matthias@intellektik.informatik.th-darmstadt.de>.

* Fixed a bug: Calling the function SOCKET-SERVICE-PORT with a non-string
  argument caused a crash.

* Fixed two bugs which could cause a crash when a GC occurred during an
  IN-PACKAGE or during a pathname operation (DOS, OS/2, Win32 versions only).

* Added image support to the clx/new-clx module.
  Thanks to Gilbert Baumann <gilbert@ma2s2.mathematik.uni-karlsruhe.de>.

Other modifications
-------------------

* Reduced the number of conses allocated by calling APPLY on a function with
  both &KEY and &REST.
  Thanks to Jörg Höhle.

* The CLX documentation can now be viewed in ghostview.
  Thanks to Karl M. Hegbloom <karlheg@inetarena.com>.


7 August 1997
=============

User visible changes
--------------------

* Two new add-on modules:
    clx/new-clx: Fast Common Lisp to X11 interface. Written by
                 Gilbert Baumann <gilbert@ma2s2.mathematik.uni-karlsruhe.de>.
    clx/mit-clx: Classical Common Lisp to X11 interface.

* (DRIBBLE filename) now appends to the given file instead of overwriting it.

* Fixed a bug: Platform dependent constants are not inlined in .fas files any
  more.

* Fixed a bug: Binding *PRINT-PRETTY* to NIL inside a PRINT-OBJECT method or
  inside a structure's print-function could result in undefined behaviour.
  Thanks to Don Cohen <don@nichimen.com>.

* Fixed a bug: For x a float, (= 0 x) and (EQUALP 0 x) could result in
  undefined behaviour.
  Thanks to Don Cohen <don@nichimen.com>.

* Fixed a bug: The error message issued by CHECK-TYPE was wrong.

* Fixed a bug: Calling (DRIBBLE pathname) after (DRIBBLE) didn't work.
  Thanks to Art Nuzzo <artn@bs724.comm.mot.com>.

* Fixed a bug: The WITH-STANDARD-IO-SYNTAX macro caused *PACKAGE* to be bound
  to an invalid value.

* Fixed two bugs in the GC (one in the generational GC, one in the
  non-generational GC).
  Big thanks to Marcus Daniels.

* Fixed a bug: Printing socket streams created by SOCKET-ACCEPT could result
  in an error or an endless loop.

Other modifications
-------------------

* "clisp" can now be called with "-" as argument. The standard input is then
  executed by a read-eval-print loop without prompt, while the remaining
  arguments will be assigned to the variable *ARGS*.


3 May 1997
==========

User visible changes
--------------------

* X3J13 vote <182> is now fully implemented: A LET/LET*/COMPILER-LET binding
  specification may now be a list of length 1, without initial value.
  Thanks to Gilbert Baumann <gilbert@ma2s2.mathematik.uni-karlsruhe.de>.

* X3J13 vote <78> is now fully implemented: FLET, LABELS, MACROLET establish
  an implicit BLOCK.

* X3J13 vote <100> is implemented: Hash tables with test function EQUALP.

* X3J13 vote <131> is partially implemented: #P reader macro for pathnames.

* The MULTIPLE-VALUE-BIND macro no longer allows lists as variable
  specifications, only symbols.
  Thanks to Gilbert Baumann <gilbert@ma2s2.mathematik.uni-karlsruhe.de>.

* DEFCLASS which changes a class is now allowed and generates a warning.
  Since UPDATE-INSTANCE-FOR-REDEFINED-CLASS is not supported, it is your
  responsibility to not use the old instances afterwards.
  Suggested by Brian Dennis <xjam@CS.Berkeley.EDU> and Tobias Kunze
  <tkunze@cmsgia.Stanford.EDU>.

* The TIME macro now outputs to *TRACE-OUTPUT* instead of *STANDARD-OUTPUT*.
  Thanks to Nathan Sidwell <nathan@bristol.st.com>.

* When the argument of the function TRANSLATE-LOGICAL-PATHNAME is a string,
  it is now interpreted as a logical pathname string. Previously, it was
  coerced to a pathname through the function PATHNAME, yielding a physical
  pathname.

* CLISP now supports more than the three predefined user-interface languages.
  New macros DEFLANGUAGE, DEFINTERNATIONAL, DEFLOCALIZED. New function
  LOCALIZED. The macros ENGLISH, DEUTSCH, FRANCAIS now work only for strings.
  Removed the macro LANGUAGE-CASE.
  The implementation uses the GNU gettext library. Thanks to Ulrich Drepper
  and Marcus Daniels.

* New user-interface language ESPANOL.
  Thanks to Carlos Linares López <clinares@delicias.dia.fi.upm.es> who has
  translated about 55% of CLISP's messages to Spanish.

* EQUALP now descends structures (but not CLOS instances!) on all platforms,
  as requested by X3J13 vote <71>.

* The EXIT-ON-ERROR macro now also exits when a Ctrl-C interrupt occurs.
  Thanks to Roger Kehr <kehr@iti.informatik.th-darmstadt.de>.

* The initial value of *LOAD-PATHS* on Unix is now (#"./" "~/lisp/**/")
  instead of (#"./" #"./**/" "~/**/"). To be customized in config.lsp.

* New variable *LOAD-COMPILING*, which provides the default value for the
  :COMPILING keyword of function LOAD. The initial value of *LOAD-COMPILING*
  can be specified by a command line option.

* Fixed a bug: (VALUES-LIST '()) often returned one value.
  Thanks to Gilbert Baumann <gilbert@ma2s2.mathematik.uni-karlsruhe.de>.

* Fixed a bug in the compiler: When optimizing (OR T form), the compiler
  could abort with an error message.
  Thanks to Nathan Sidwell <nathan@bristol.st.com>.

* Fixed a bug in the DEFSTRUCT macro which caused the compiler to issue
  an error message when compiling a structure definition containing a slot
  with a constant, non-NIL initializer.
  Thanks to Matthias Lindner <lindner@forwiss.uni-erlangen.de>.

* Fixed a bug in the DEFCLASS macro which caused DEFCLASS and DEFINE-CONDITION
  to reject the :DOCUMENTATION class option.
  Thanks to Don Cohen <donc@isi.edu>.

* Fixed a bug: The use of type specifiers of the form
  (FUNCTION argument-types result-type)
  within THE, ETHE, LOOP and DEFSTRUCT forms could lead to errors.
  Thanks to Marty Shannon <mshannon@i-2000.com>.

* Fixed two bugs in the DRIBBLE function: After calling (DRIBBLE pathname)
  followed by (DRIBBLE), *DEBUG-IO* referred to an unwritable stream.
  Calling (DRIBBLE pathname) from within a break loop caused some of the
  output to be logged twice.

* Fixed a bug in the expansion of deeply nested backquotes.
  Thanks to S. Wotherspoon <spoon@hilbert.maths.utas.edu.au>.

* Fixed a bug in the LOOP macro: Stepping for FOR-AS-= clauses
  (LOOP ... {FOR|AS} var = form1 THEN form2 ...) could be executed in the
  wrong order if form1 is constant and form2 is non-constant.
  Thanks to Russell Senior <seniorr@teleport.com>.

* Fixed a bug in /= : When called with more than two arguments, only the
  first two arguments were compared; the remaining arguments were ignored.
  Thanks to J. V. Needham <jv@rdk840.dfci.harvard.edu>.

* Fixed a bug in EQUAL and EQUALP: displaced strings were not compared
  correctly.

* Fixed a bug in EXPT: For x a (COMPLEX RATIONAL) and y = m/2^n, (EXPT X Y)
  actually returned x ^ (m/2^(n+32)) instead of x ^ (m/2^n).

* Fixed a bug in TRUENAME on Unix: If "aa.bb" is a symbolic link to "cc",
  (TRUENAME "aa.bb") returned "cc.bb" instead of "cc".

* Fixed a bug in the management of add-on modules: On some platforms,
  GC in memory images containing add-on modules always crashed.

* Fixed a bug in the generational GC on i386, rs6000, alpha: In some cases,
  FFI objects in memory could cause the first "small" garbage collection to
  fail.
  Thanks to Dr. Werner Fink <werner@suse.de>.

* Fixed a bug in the printing routine for SOCKET-SERVER objects.
  Thanks to Alexey Goldin <goldin@spot.uchicago.edu> and Marcus Daniels.

Portability
-----------

* Removed an incompatibility between SPARC/Sun4 and UltraSPARC memory images.
  Found by Martin Ginkel <ginkel@iik.cs.uni-magdeburg.de>.

Other modifications
-------------------

* Normal and wide-mode binaries can now be built and distributed
  simultaneously. New command-line option -W for choosing the wide-mode
  binaries instead of the normal binaries.

* On Unix, "clisp" is now an executable instead of a shell script.

* "clisp" can now be called with a Lisp file as argument. The remaining
  arguments will be passed to the Lisp program in the variable *ARGS*.
  On Unix, you can thus make Lisp programs executable by putting
  "#!/usr/local/bin/clisp" in the first line and doing a "chmod a+x".

* Reduced the startup time by 20-30%.


21 July 1996
============

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* X3J13 vote <72> is conditionally implemented: Objects other than symbols,
  lists, numbers, characters, string, bit-vectors are now self-evaluating if
  *PACKAGE* uses the COMMON-LISP package.

* The package CLOS is now among the default use list of a new package.
  (USE-PACKAGE "CLOS") is not needed any more. To use PCL, you now need
  to (UNUSE-PACKAGE "CLOS") explicitly.

* The bytecode format is now platform independent. As a consequence,
  compiled functions can be printed readably when *PRINT-READABLY* = T.

* Built-in function objects (SUBRs) are now printed readably when
  *PRINT-READABLY* = T, instead of signalling an error.

* Added a <c-type>, C-PTR-NULL to the FFI.  C-PTR-NULL will convert
  NIL objects into NULL pointers (so that type conflicts can be avoided).

* Socket streams are implemented. New functions SOCKET-SERVER,
  SOCKET-SERVER-CLOSE, SOCKET-SERVER-PORT, SOCKET-WAIT, SOCKET-ACCEPT,
  SOCKET-CONNECT, SOCKET-STREAM-HOST, SOCKET-STREAM-PORT, SOCKET-SERVICE-PORT,
  SOCKET-STREAM-PEER-HOST. See impnotes.txt for details.
  Thanks to Marcus Daniels <marcus@sysc.pdx.edu> and
  Marco Ramoni <M.Ramoni@open.ac.uk>.

* Pipe streams now support binary I/O.

* MAKE-INSTANCE now also works for DEFSTRUCT classes, and DEFSTRUCT classes
  can now be subclassed via DEFCLASS with option :METACLASS STRUCTURE-CLASS.
  Suggested by Manuel Kolp <kolp@qant.ucl.ac.be>.

* User defined methods on NO-APPLICABLE-METHOD now have a chance for a
  corrective action. Thanks to Mark Thomas <thommark@access.digex.net>.

* APROPOS and DESCRIBE now tell you about symbols which name a type or class.

* During directory search, symbolic link loops are now ignored instead
  of resulting in an error. Thanks to Dan Stanger.

* Fixed a CLOS bug: REMOVE-METHOD didn't work. 
  Thanks to Roger Kehr <kehr@iti.informatik.th-darmstadt.de>.

* Fixed a bug in the compiler: A (MULTIPLE-VALUE-SETQ vars valform)
  or (MULTIPLE-VALUE-BIND vars valform ...) form was miscompiled if
  valform is known to produce a single value.
  Thanks to Paul Graham <pg@das.harvard.edu>.  

* Fixed at least two bugs in the LOOP macro: FOR-AS-ACROSS clauses could
  result in AREF signalling an out-of-bounds error at the end of the vector.
  Initialisations for FOR-AS-= clauses could be executed in the wrong order.

* Fixed a bug: the functions ENCODE-UNIVERSAL-TIME and DECODE-UNIVERSAL-TIME
  computed a wrong DST flag for time values between (T - 2h) and T, where
  T denotes a DST switch time.

* Fixed two bugs in the foreign function interface: multi-dimensional arrays
  and floating point numbers with value 0.0 were not correctly passed from
  "foreign land" to "Lisp land". Thanks to Ken Olum <kdo@mit.edu>.

* Fixed a bug in the foreign function interface: call-ins which return
  structures or unions would not compile correctly. Thanks to Michael Stoll.

* Fixed a bug: On Solaris, the function SYSTEM sometimes reported exit
  status 0 although the command had failed.
  Thanks to Brian F. Dennis <xjam@cs.Berkeley.edu>.

* Fixed a bug: LOGTEST didn't work correctly if both arguments were bignums.

* Fixed a bug in the floating point number printing routine:
  In rare cases, a number was printed with more digits than necessary
  (without, however, violating the print-read consistency). For example,
  2.1416s29 printed as 2.14159s29, and 3.002618f-31 printed as 3.0026179f-31.

* Fixed a bug in ATAN: (ATAN y 0) with y < 0 returned pi/2 instead of -pi/2.

* Fixed a bug in XGCD which caused the results to be wrong with a small
  probability, for example in the case (XGCD 77874422 32223899).

Other modifications
-------------------

* The compiler now recognizes more function calls as inlinable: Cases like
  (FUNCALL (LAMBDA ...) ...), (DECLAIM (INLINE F)) (MAPCAR #'F ...)
  are now compiled as inline function calls. Previously you had to write
  (FUNCTION (LAMBDA ...)) explicitly. Suggested by Jörg Höhle.


23 June 1995
============

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* X3J13 vote <106> is implemented: LAST has an optional argument. Thanks to
  Pierpaolo Bernardi.

* X3J13 vote <87> is implemented: New function COMPLEMENT. Thanks to Pierpaolo
  Bernardi.

* X3J13 vote <40> is partially implemented: New macro WITH-STANDARD-IO-SYNTAX.
  Thanks to Pierpaolo Bernardi.

* X3J13 vote <98> is partially implemented: New macro WITH-HASH-TABLE-ITERATOR.
  Thanks to Pierpaolo Bernardi.

* X3J13 vote <97> is implemented: New functions HASH-TABLE-REHASH-SIZE,
  HASH-TABLE-REHASH-THRESHOLD, HASH-TABLE-SIZE, HASH-TABLE-TEST.
  Thanks to Pierpaolo Bernardi.

* X3J13 votes <69> and <70> are implemented: New declaration DYNAMIC-EXTENT.

* The dpANS macro LAMBDA is implemented.

* The dpANS declaration IGNORABLE is implemented.

* The dpANS function CONSTANTLY is implemented. Thanks to Pierpaolo Bernardi.

* Better syntax checking for the CASE macro. Thanks to Pierpaolo Bernardi.

* The user interface language may be chosen through the environment variable
  LANG as well.

* The pretty printer now indents lists spanning more than one line by two
  spaces, instead of one. New variable *PRINT-INDENT-LISTS*.

* *PRINT-PRETTY* is now initially T.

* Foreign function interface: New foreign type constructor FFI:C-ARRAY-MAX,
  implements zero-terminated arrays of bounded size.

* On Unix, 8-bit characters are legal in pathnames if the operating system
  accepts them.

* On DOS, #\Newline is converted to CR/LF when doing character output to
  unbuffered file streams (referring to special files).

* Fixed a bug in the interpreter and compiler: A MULTIPLE-VALUE-SETQ form
  which assigns to a symbol macro expanded to a wrong form; compiling it
  produced a warning. Thanks to Pierpaolo Bernardi.

* Fixed a bug in the compiler: Some CASE form with duplicate keys, when
  compiled, chose the wrong clause to be executed. Thanks to Pierpaolo
  Bernardi.

* Fixed a bug in the #+/#- reader macros. (LIST #+FOO #-BAR 1 2 3) now returns
  (2 3), not (3).

* Fixed a bug in LOG: (LOG x^n x^m), where n, m are integers, |m| > 1, and
  x is a rational number /= 1, now correctly returns n/m. Previously,
  (LOG 2 4) returned 1/0.

* Fixed a CLOS bug: Using the :DOCUMENTATION option in DEFGENERIC declarations
  for function names of the form (SETF symbol) signalled an error. Thanks to
  Pierpaolo Bernardi.

* Fixed a bug in DEFSETF: An IGNORE declaration for the store variable had
  no effect. Thanks to Pierpaolo Bernardi.

Other modifications
-------------------

* The structure of external modules has changed a bit.


25 April 1995
=============

User visible changes
--------------------

* Michael Stoll has written a graphical user interface for CLISP under
  NeXTstep.

* Added a foreign language module WILDCARD for wildcard matching.

* Added a foreign language module REGEXP for Unix-style regular expression
  matching and searching.

* X3J13 vote <94> is implemented: Calling GENSYM has no side effects except
  incrementing the counter. New variable *GENSYM-COUNTER*.

* New macro FORMATTER converts a FORMAT control string to a function.

* Some FORMAT fixes:
  + X3J13 vote <81> is implemented: The FORMAT ~:^ directive is more useful.
    Warning: Old style "~:^" directives need to be converted to "~#:^".
  + X3J13 vote <82> is implemented: The FORMAT ~D, ~B, ~O, ~X, ~R directives
    accept an optional comma-interval parameter.
  + X3J13 vote <84> is implemented: FORMAT ~C outputs characters with no bits
    as if by WRITE-CHAR.
  + Handling of ~^ within the FORMAT ~? directive.

* X3J13 vote <167> is implemented: New types FILE-STREAM, SYNONYM-STREAM,
  BROADCAST-STREAM, CONCATENATED-STREAM, TWO-WAY-STREAM, ECHO-STREAM,
  STRING-STREAM. New functions OPEN-STREAM-P, SYNONYM-STREAM-SYMBOL,
  BROADCAST-STREAM-STREAMS, CONCATENATED-STREAM-STREAMS,
  TWO-WAY-STREAM-INPUT-STREAM, TWO-WAY-STREAM-OUTPUT-STREAM,
  ECHO-STREAM-INPUT-STREAM, ECHO-STREAM-OUTPUT-STREAM.

* New condition type PRINT-NOT-READABLE.
  New function PRINT-NOT-READABLE-OBJECT.

* New function FINALIZE. (FINALIZE object function) has the effect that
  function will be called when object is being garbage collected.

* DRIBBLE now also redirects *ERROR-OUTPUT*, *TRACE-OUTPUT*, *QUERY-IO*,
  *DEBUG-IO* if they refer to *TERMINAL-IO*.

* Calling SYMBOL-VALUE on a symbol defined as global symbol macro now returns
  the value of the expansion. New function SYMBOL-MACRO-EXPAND.

* Add FFI to the *FEATURES* if the foreign language interface is present.

* Fixed a bug: An IGNORE declaration for a macro's &ENVIRONMENT argument now
  has an effect.

* Fixed a couple of bugs in the foreign language interface: Passing zero size
  arrays did not work, parameters with mode :OUT did not work on SPARC and
  HP-PA, and some error messages were deficient.

* Fixed a bogus error message in SET-DISPATCH-MACRO-CHARACTER.

Other modifications
-------------------

* Speed up compiled calls to FORMAT with literal control string by use of
  FORMATTER.


4 April 1995
============

User visible changes
--------------------

* The initial value of *PACKAGE* can be specified by a command line option.

* X3J13 vote <6> is implemented: New place ROW-MAJOR-AREF.

* X3J13 vote <126> is implemented: New function DELETE-PACKAGE.

* X3J13 vote <14> is implemented: Closing a synonym stream does not close
  its constituent stream.

* Foreign language interface for C and ANSI C. New package FFI. New macros
  FFI:DEF-C-TYPE, FFI:DEF-C-VAR, FFI:DEF-C-CALL-OUT, FFI:DEF-C-CALL-IN,
  FFI:DEF-C-ENUM, FFI:DEF-C-STRUCT, FFI:DEF-CALL-OUT, FFI:DEF-CALL-IN,
  FFI:ELEMENT, FFI:DEREF, FFI:SLOT, FFI:CAST, FFI:TYPEOF, FFI:SIZEOF,
  FFI:BITSIZEOF.
  This currently works only on Unix and only with the CPUs
  i386/486/586, m680x0, Mips, SPARC, DEC Alpha, HP-PA, RS/6000.
  Warning: (COMPILE-FILE "filename.lsp") now overwrites the file "filename.c".

* New macros MUFFLE-CERRORS and APPEASE-CERRORS. During their execution,
  continuable errors are handled by the function CONTINUE. MUFFLE-CERRORS
  does this silently, APPEASE-CERRORS prints the error as a warning.

* New macro EXIT-ON-ERROR. During its execution, non-continuable errors
  cause CLISP to exit with error status.

* The function ED, when asked to edit a non-existent file, now creates that
  file instead of signalling an error.

* When a non-absolute pathname is specified for the -o command line option
  (destination file of a compilation), it is interpreted as relative to the
  current directory, not relative to the source file of the compilation.

* The readline library now uses the last column of the screen if the terminal
  is an xterm, for example. Work done by Chet Ramey.

* Fixed two bugs in the LOOP macro: FOR-AS-ACROSS clauses could result in AREF
  signalling an out-of-bounds error at the end of the vector. Initialisations
  for FOR-AS-= clauses could be executed in the wrong order.

* Fixed a bug in the compiler which caused LOAD-TIME-VALUE forms to be
  evaluated at compile time.

* Fixed a bug in the debugger: Choosing a restart Rnnn always invoked the
  last restart listed, not the chosen one.

* Fixed a bug: (CLOSE *TERMINAL-IO*) signals an error again.

* On DOS and OS/2, the Lisp reader now treats Ctrl-Z as whitespace.

* The -I command line option now tells the readline library to handle the Tab
  character as normal self-inserting character.

* Unix version only: DISASSEMBLE can display machine instructions, provided
  that GNU gdb is present.

Other modifications
-------------------

* Generational garbage collection now also works on IRIX 5.2.

* Generational garbage collection and support for immutable objects don't
  exclude each other any more.


1 January 1995
==============

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* The destination file of a compilation can be specified by a command line
  option.

* X3J13 vote <152> is implemented: REDUCE has a keyword argument :KEY.

* The printed representation of file streams of element type STRING-CHAR now
  contains a line number.

* Fixed a bug which caused the interpreter to signal an error when evaluating
  nested DEFUNs.

* Fixed a bug which could cause a crash when a GC occurred during single or
  double float subtraction.

Other modifications
-------------------

* Generational garbage collection now also works on NeXTstep and OSF/1 3.0.


26 October 1994
===============

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* X3J13 vote <77> is implemented: CL:FLET, CL:LABELS, CL:MACROLET allow
  declarations.

* X3J13 vote <78> is implemented: CL:FLET, CL:LABELS, CL:MACROLET, DEFTYPE,
  DEFSETF, DEFINE-SETF-METHOD establish an implicit BLOCK.

* X3J13 vote <128> is implemented: MAKE-PATHNAME, PATHNAME-HOST,
  PATHNAME-DEVICE, PATHNAME-DIRECTORY, PATHNAME-NAME, PATHNAME-TYPE have
  a keyword argument :CASE. Thanks to Marcus Daniels.

* X3J13 vote <137> is implemented: New functions WILD-PATHNAME-P,
  PATHNAME-MATCH-P and TRANSLATE-PATHNAME. Thanks to Marcus Daniels.

* X3J13 vote <130> is implemented: New built-in type LOGICAL-PATHNAME.
  New place LOGICAL-PATHNAME-TRANSLATIONS. New functions LOGICAL-PATHNAME,
  TRANSLATE-LOGICAL-PATHNAME, LOAD-LOGICAL-PATHNAME-TRANSLATIONS,
  COMPILE-FILE-PATHNAME. Thanks to Marcus Daniels.

* X3J13 vote <132> is implemented: Synonym streams to file streams are
  allowed as pathnames.

* Amiga version: SCREEN package is implemented. Thanks to Jörg Höhle.

* The debugger emits some more messages to *DEBUG-IO*, not *ERROR-OUTPUT*.

* (COERCE symbol 'FUNCTION) now works.

* Fixed a bug in ENOUGH-NAMESTRING: In many cases, a relative directory
  specification was returned instead of an absolute directory specification.

* Fixed a CLOS bug which caused (DEFCLASS FOO (STANDARD-OBJECT) ()) and
  (DEFINE-CONDITION FOO (CONDITION) ()) to signal errors.

* Fixed a bug: In some situations, USE-PACKAGE reported a name conflict when
  there was none.

* Fixed a bug: (READ-CHAR-NO-HANG stream nil eof-object) now signals an error
  if stream is not an input stream. Previously it returned eof-object.

* Fixed a bug: On some Unix systems, (FINISH-OUTPUT *TERMINAL-IO*) signalled
  an error if standard output was redirected to a file.

* (SQRT 0) now returns an integer 0 instead of a floating-point 0.0.

* Readline library: Fixed a small problem with input prompts longer than the
  screen width.

* Fixed three bugs in the built-in editor. One of them made the editor
  entirely unusable.

Portability
-----------

* On DOS, the readline library now handles the /!INPUTRC and history files
  correctly.

Other modifications
-------------------

* Generational garbage collection now also works on Linux (1.1.52 or newer).

* On Unix, external modules written in C can be linked to CLISP without
  recompiling CLISP from source. For example, the STDWIN library.


1 September 1994
================

User visible changes
--------------------

* The DEFCONSTANT warning about redefinition of a constant is also inhibited
  if the constant's new and old values are the same string (in the sense of
  EQUAL). Thanks to Marcus Daniels.

* Unix version only: The daylight saving time flag of a time zone (eighth
  value of GET-DECODED-TIME and DECODE-UNIVERSAL-TIME) is now correct.


23 August 1994
==============

User visible changes
--------------------

* X3J13 vote <64> is implemented: New macro DESTRUCTURING-BIND.

* The function ED can now edit functions that have been entered in
  interpreted form even if they have later been compiled.

* New function UNCOMPILE. (UNCOMPILE function-name) undoes the effect of
  (COMPILE function-name) if the function's definition had been entered
  in interpreted form.

* The OPEN option :IF-EXISTS :RENAME-AND-DELETE now deletes the renamed
  file. Previously :RENAME-AND-DELETE was equivalent to :RENAME.

* (LISP-IMPLEMENTATION-VERSION) returns a more precise version string.

* Readline library: Completion of a function call with no arguments
  automatically adds the closing parenthesis.

* Readline library: When a closing parenthesis is typed, the corresponding
  opening parenthesis is displayed.

Other modifications
-------------------

* Copyright clarification.

* Added a readline manual page.


4 July 1994
===========

User visible changes
--------------------

* X3J13 votes <115> and <114> are implemented: an elaborate LOOP macro.
  New macro LOOP-FINISH.
  Warning: The scoping rules for the iteration variables are hairy. If a
  FOR/AS initialisation form refers to an iteration variable of a subsequent
  FOR/AS clause, the effects are implementation dependent!

* X3J13 vote <120> is implemented: New function MAP-INTO.

* X3J13 vote <79> is implemented: New constants
  LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT,
  LEAST-NEGATIVE-NORMALIZED-SHORT-FLOAT,
  LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT,
  LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT,
  LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT,
  LEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT,
  LEAST-POSITIVE-NORMALIZED-LONG-FLOAT,
  LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT.

* The macro WITH-OUTPUT-TO-PRINTER now also works on DOS.

* Fixed a bug in DO-SYMBOLS: A symbol which is exported from a used package
  was considered accessible in the using package even if it was shadowed by
  another present symbol of the same name.

* Fixed a bug in the debugger which caused the BACKTRACE commands to print
  garbage if the current user interface language was not english.


22 June 1994
============

User visible changes
--------------------

* French support is now complete. Thanks to Jörg Höhle.

* The user interface language (english, german or french) can now be chosen
  at startup time through a command line option. The constant *LANGUAGE* has
  been removed, and its value has been removed from *FEATURES*. New macros
  ENGLISH, DEUTSCH, FRANCAIS and LANGUAGE-CASE.

* There is a command line option that makes CLISP behave more like what
  ILISP (a popular Emacs LISP interface) expects.

* The function CLOS:CALL-NEXT-METHOD can now be called with arguments, but
  the check that the set of applicable methods must be the same as for the
  original arguments will be bypassed.

* New functions READ-CHAR-SEQUENCE, WRITE-CHAR-SEQUENCE, READ-BYTE-SEQUENCE,
  WRITE-BYTE-SEQUENCE which perform fast block I/O.

* Errors of type FLOATING-POINT-UNDERFLOW are inhibited in floating point
  computations (and zero is returned instead) during execution of the new
  macro WITHOUT-FLOATING-POINT-UNDERFLOW.

* X3J13 vote <95> is implemented: If the readtable argument passed to
  GET-MACRO-CHARACTER and GET-DISPATCH-MACRO-CHARACTER is NIL, the standard
  readtable is used.

* PROBE-FILE doesn't report an error any more if an intermediate directory
  in the path doesn't exist. NIL is returned instead.

* The DEFCONSTANT warning about redefinition of a constant is inhibited if
  the constant's new and old values are the same (in the sense of EQL).
  Thanks to Marcus Daniels.

* The function INTERACTIVE-STREAM-P knows that if the terminal stream is
  referring to a regular file (via input redirection) it is not interactive.

* There is a user programmable kind of streams, called generic streams.
  New functions MAKE-GENERIC-STREAM, GENERIC-STREAM-CONTROLLER,
  GENERIC-STREAM-P, GENERIC-STREAM-READ-CHAR, GENERIC-STREAM-READ-BYTE,
  GENERIC-STREAM-LISTEN, GENERIC-STREAM-WRITE-CHAR, GENERIC-STREAM-WRITE-BYTE,
  GENERIC-STREAM-WRITE-STRING, GENERIC-STREAM-CLEAR-INPUT,
  GENERIC-STREAM-CLEAR-OUTPUT, GENERIC-STREAM-FINISH-OUTPUT,
  GENERIC-STREAM-FORCE-OUTPUT, GENERIC-STREAM-CLOSE.
  See impnotes.txt for details. Thanks to Marcus Daniels and Don Cohen.

* The macro WITH-OUTPUT-TO-PRINTER may now also work on OS/2.

* Fixed a CLOS bug: Generic functions with both optional and keyword
  arguments didn't work.

* Fixed a serious bug in the compiler which caused incorrect code to be
  generated for functions like (LAMBDA (X) (SETQ X 1)).

* Fixed a serious bug in the compiler which caused the compiler to crash
  when compiling functions which contain two or more calls to ASSERT.

* Fixed a bug: The macroexpander of MULTIPLE-VALUE-SETQ built up a
  syntactically illegal form.

* Fixed a bug in the reader: When reading pathnames from the syntax
  #S(PATHNAME ...), #n# references in pathname components were not
  resolved prior to calling MAKE-PATHNAME.

* Fixed a bug in the reader: (read-from-string "1/") signalled an error
  of type DIVISION-BY-ZERO.

* Fixed a bug in the terminal stream: If several consecutive READ-LINE
  operations on the terminal stream were performed without any text
  containing newlines being output between them, the prompt finally got
  duplicated and then became longer and longer.

* Fixed a bug in the readline library (bad handling of prompts longer than
  one line). Thanks to Marcus Daniels.

Installation
------------

* All non-Unix versions: Setting the local time zone should now be much
  easier. 122 time zone names are supported.


8 January 1994
==============

None.


7 January 1994
==============

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* X3J13 votes <186> and <31> are implemented: the Common Lisp Condition System.
  New macros
    DEFINE-CONDITION, IGNORE-ERRORS, HANDLER-CASE, HANDLER-BIND,
    RESTART-CASE, WITH-RESTARTS, WITH-SIMPLE-RESTART, RESTART-BIND,
    WITH-CONDITION-RESTARTS,
  new types
    RESTART, CONDITION, SERIOUS-CONDITION, ERROR, PROGRAM-ERROR, CONTROL-ERROR,
    ARITHMETIC-ERROR, DIVISION-BY-ZERO, FLOATING-POINT-OVERFLOW,
    FLOATING-POINT-UNDERFLOW, CELL-ERROR, UNBOUND-VARIABLE, UNDEFINED-FUNCTION,
    TYPE-ERROR, PACKAGE-ERROR, STREAM-ERROR, END-OF-FILE, FILE-ERROR,
    STORAGE-CONDITION, WARNING,
    SIMPLE-CONDITION, SIMPLE-ERROR, SIMPLE-TYPE-ERROR, SIMPLE-WARNING,
  new functions
    MAKE-CONDITION, SIGNAL, COMPUTE-RESTARTS, FIND-RESTART, INVOKE-RESTART,
    INVOKE-RESTART-INTERACTIVELY, ABORT, CONTINUE, MUFFLE-WARNING, STORE-VALUE,
    USE-VALUE, INVOKE-DEBUGGER, RESTART-NAME,
    ARITHMETIC-ERROR-OPERATION, ARITHMETIC-ERROR-OPERANDS, CELL-ERROR-NAME,
    TYPE-ERROR-DATUM, TYPE-ERROR-EXPECTED-TYPE, PACKAGE-ERROR-PACKAGE,
    STREAM-ERROR-STREAM, FILE-ERROR-PATHNAME, SIMPLE-CONDITION-FORMAT-STRING,
    SIMPLE-CONDITION-FORMAT-ARGUMENTS,
  new variables
    *BREAK-ON-SIGNALS*, *DEBUGGER-HOOK*.
  See impnotes.txt for details. Thanks to David Gadbois who wrote most of this.

* X3J13 vote <40> is partially implemented: New variable *PRINT-READABLY*.

* X3J13 vote <34> is implemented: Arrays and packages may now appear as
  constants in compiled code.

* X3J13 vote <90> is implemented: FUNCTIONP on symbols and conses now always
  returns NIL. The type FUNCTION is disjoint from SYMBOL and CONS.
  (COERCE object 'FUNCTION) is implemented.
  Warning: Old style calls like
    (FUNCTIONP object)
  may need to be converted to
    (OR (FUNCTIONP object)
        (SYMBOLP object)
        (AND (CONSP object) (EQ (CAR object) 'LAMBDA))
    )
  This fixes a CLOS bug: (TYPEP object 'FUNCTION) wasn't equivalent to
  (TYPEP object (FIND-CLASS 'FUNCTION)).

* Two new debugger commands Break+ and Break- permit to set resp. remove
  breakpoints at specified EVAL or APPLY frames.

* Warnings and errors produced by COMPILE-FILE are now accompanied by
  source line number information.

* The sub-char passed as second argument to read dispatch macros is now
  exactly the first non-digit read from the stream. Previously it was its
  upper-case equivalent.

* DEFPACKAGE now accepts an option (:DOCUMENTATION doctring).

* DIRECTORY now accepts a keyword argument :CIRCLE. If it is non-NIL,
  the directory search for ".../" and "**/" wildcards on Unix avoids endless
  loops that may result from symbolic links.

* The variable *LOAD-PATHS* in the Unix versions of config.lsp now uses
  "~/" (the home directory at run time) instead of #"~/" (the home directory
  at installation time). Thanks to Gabor Herr.

* Unix and OS/2 versions: New dangerous functions MAKE-PIPE-IO-STREAM,
  RUN-SHELL-COMMAND and RUN-PROGRAM.

* Unix version only:
  The command shell used by MAKE-PIPE-...-STREAM is now always /bin/sh; the
  environment variable SHELL is only used as interactive shell.
  Fixed a race condition in the functions EXECUTE, MAKE-PIPE-INPUT-STREAM,
  MAKE-PIPE-OUTPUT-STREAM that caused the child process to fail mysteriously.

* Attacks such as  (DO-ALL-SYMBOLS (S) (UNLESS (CONSTANTP S) (SET S NIL)))
  no longer crash CLISP.

* Fixed a CLOS bug: DEFCLASS failed to signal an error if several direct slots
  had identical names.

* Fixed a bug in the reader: When reading hash tables which contain #n#
  references, the hash codes must be recomputed after resolving the
  references. Thanks to Marcus Daniels.

* Fixed a bug in the printer: Printed representations with two different
  #1= definitions could result when PRINT-OBJECT methods were called while
  *PRINT-CIRCLE* was true. Thanks to Marcus Daniels.


8 November 1993
===============

User visible changes
--------------------

* The STDWIN library can now be made part of CLISP by calling makemake with
  argument --with-stdwin.

* X3J13 vote <108> is implemented: New packages COMMON-LISP and
  COMMON-LISP-USER.

* X3J13 vote <112> is implemented:
  LOAD binds the variables *LOAD-PATHNAME* and *LOAD-TRUENAME*, COMPILE-FILE
  binds the variables *COMPILE-FILE-PATHNAME* and *COMPILE-FILE-TRUENAME*.
  New variables *LOAD-PATHNAME*, *LOAD-TRUENAME*, *COMPILE-FILE-PATHNAME*,
  *COMPILE-FILE-TRUENAME*.

* X3J13 vote <26> is implemented: COMPILE-FILE has a keyword argument :PRINT.
  New variables *COMPILE-WARNINGS*, *COMPILE-VERBOSE*, *COMPILE-PRINT*.

* Fixed two bugs in DEFPACKAGE: *PACKAGE* is not modified by DEFPACKAGE
  any more, and the :INTERN option now works.

* Fixed FUNCTION-LAMBDA-EXPRESSION such that it works on built-in functions.
  Thanks to France Dacar.

* Fixed a serious bug in GCD on 16-bit processors: (GCD x y) with
  2^k - 2^(k-16) <= |x|,|y| < 2^k could cause a division by zero.


27 September 1993
=================

User visible changes
--------------------

* COMPILE-FILE now handles top-level forms as described in CLtL2 p. 90:
  The macroexpansion of a top-level form is considered a top-level form.
  When a top-level form is a PROGN, LOCALLY, COMPILER-LET, SYMBOL-MACROLET
  or MACROLET form, the subforms of its body are considered top-level forms
  too and are compiled separately.
  This allows things like
    (PROGN (DEFCONSTANT X 3141) (DEFUN GET-X () X))
  or
    (PROGN (DEFCLASS SHIP () ()) (DEFUN SHIP-P (X) (TYPEP X 'SHIP)))
  to work.
  Warning: If you want to inhibit this splitting into separate forms (for
  example, because several of the forms refer to the same uninterned symbol),
  you have to use (LET () (PROGN ...)) instead of (PROGN ...).

* X3J13 vote <144> is implemented: New macro DECLAIM.

* X3J13 vote <113> is implemented: The macro LOCALLY is now a special form.

* Fixed a serious bug in the compiler: When compiling functions inline
  whose parameters are special variables, incorrect code could be generated.

* Fixed a bug in the compiler which caused the compiler to crash in some
  rare cases, notably when compiling Garnet-2.2.

* Fixed a bug that prevented the debugger commands DOWN and BOTTOM from
  working on Linux and SunOS.

* Fixed a CLOS bug: Specifying &KEY without &REST in generic function
  lambda lists didn't have the desired effect.

* DEFCLASS supports both :DEFAULT-INITARGS syntaxes.

* DEFGENERIC is more tolerant about invalid declarations.


1 September 1993
================

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* Unix version only: The command line option -M now also accepts memory images
  that were compressed using GNU gzip.

* Fixed a CLOS bug: MAKE-INSTANCE now behaves as if it were calling
  INITIALIZE-INSTANCE, and INITIALIZE-INSTANCE and REINITIALIZE-INSTANCE
  behave as if they were calling SHARED-INITIALIZE.

* Fixed a CLOS bug: NO-APPLICABLE-METHOD failed to be called in some cases
  when no method was applicable.

* Relating to X3J13 vote <89>: The first argument to the functions FUNCALL and
  APPLY, denoting a function, may now also be a list (SETF symbol).

* Fixed a bogus error message that occurred when storing an out-of-range
  integer into an array of element-type (UNSIGNED-BYTE 32).


22 August 1993
==============

Important note
--------------

* Changed bytecode format. All .fas files generated by previous CLISP versions
  are invalid and must be recompiled.

User visible changes
--------------------

* X3J13 vote <12> is partially implemented: Native CLOS. New package CLOS
  containing the macros
    DEFCLASS, DEFMETHOD, DEFGENERIC, GENERIC-FUNCTION, GENERIC-FLET,
    GENERIC-LABELS, WITH-SLOTS, WITH-ACCESSORS,
  the functions
    FIND-CLASS, (SETF FIND-CLASS), CLASS-OF, CLASS-NAME, (SETF CLASS-NAME),
    SLOT-VALUE, SLOT-BOUNDP, SLOT-MAKUNBOUND, SLOT-EXISTS-P,
    CALL-NEXT-METHOD, NEXT-METHOD-P,
    NO-APPLICABLE-METHOD, NO-PRIMARY-METHOD, NO-NEXT-METHOD,
    FIND-METHOD, ADD-METHOD, REMOVE-METHOD, COMPUTE-APPLICABLE-METHODS,
    METHOD-QUALIFIERS, FUNCTION-KEYWORDS, SLOT-MISSING, SLOT-UNBOUND,
    PRINT-OBJECT, DESCRIBE-OBJECT, MAKE-INSTANCE, INITIALIZE-INSTANCE,
    REINITIALIZE-INSTANCE, SHARED-INITIALIZE,
  the classes
    STANDARD-CLASS, STRUCTURE-CLASS, BUILT-IN-CLASS, STANDARD-OBJECT,
    STANDARD-GENERIC-FUNCTION, STANDARD-METHOD and all predefined classes,
  and the method combination
    STANDARD.
  See impnotes.txt for details. X3J13 vote <13> is implemented, too.

* X3J13 vote <63> is implemented: DESCRIBE receives the output stream as
  optional argument. New function CLOS:DESCRIBE-OBJECT.

* X3J13 vote <149> is implemented: The second argument to SUBSEQ may now
  be NIL. Thanks to Thomas Kirk.

* X3J13 vote <175> is implemented: TAILP now also works on dotted lists.

* X3J13 vote <124> is implemented: (DECLARE (OPTIMIZE (DEBUG ...))) is legal.

* The type specifier (EQL object), a synonym for (MEMBER object), is now
  implemented.

* New DEFSTRUCT option :INHERIT which is exactly like :INCLUDE except that it
  doesn't create new accessors for the inherited slots. Use this option to
  avoid the problems that occur when using the same :CONC-NAME for the new
  and the inherited structure.

* Fixed EXPORT and USE-PACKAGE: Don't signal a name conflict between the
  symbol being exported and a symbol accessible in the using package if
  the latter symbol is on the list of shadowing symbols of the using package.

* Fixed VECTOR-PUSH-EXTEND. It now works on vectors of dimension 0 and
  on bit-vectors.

* Fixed PRINT-UNREADABLE-OBJECT: Don't output adjacent spaces.

* Fixed a bug in the reader that caused an endless loop or endless recursion
  when resolving #n=/#n# references in objects that already contained cyclic
  data structures, e.g. when reading (#1=a #.'#2=(b . #2#) #1#).

* Fixed a bogus error message in the complex number reader.


17 July 1993
============

User visible changes
--------------------

* X3J13 vote <150> is mostly implemented: Reading and printing of symbols
  (and characters with bits or fonts attributes) is now affected by
  (READTABLE-CASE *READTABLE*), whose value may be one of :UPCASE, :DOWNCASE
  and :PRESERVE. New place READTABLE-CASE.

* Support for immutable objects is implemented. Attempts to modify read-only
  data will signal an error. Program text and quoted constants loaded from
  files are considered read-only data. Never again will you be allowed to
  write programs that destructively modify themselves!
  This works only for Unix implementations with powerful virtual memory
  management, currently only Linux and SunOS. To enable it, you have to
  add -DIMMUTABLE to the CFLAGS in the makefile when building CLISP.

* Fixed DEFUN such that
  (progn
    (flet ((bar (x) (+ x 10))) (defun bar (y) (if (zerop y) 1 (bar (1- y))))
    (bar 1)
  )
  returns 10 instead of 1.

* Fixed a bug in the compiler that caused the compiler to crash by endless
  recursion and stack overflow when compiling assignments to symbol macros.


29 June 1993
============

User visible changes
--------------------

* X3J13 vote <89> is implemented: (SETF symbol) is now a valid syntax for a
  function name in (funname ...), (FUNCTION funname), (DEFUN funname ...),
  (COMPILE funname ...), (DISASSEMBLE funname), (ED funname), FLET, LABELS etc.
  New function FDEFINITION.

* X3J13 vote <173> is implemented: New special form SYMBOL-MACROLET. The
  macroexpansion environment passed to macro expanders and to MACROEXPAND-1,
  MACROEXPAND, GET-SETF-METHOD, GET-SETF-METHOD-MULTIPLE-VALUE now comprises
  both the variable environment and the function environment.
  New macro DEFINE-SYMBOL-MACRO.

* New macro PRINT-UNREADABLE-OBJECT.

* Fixed a bug: The string comparison functions STRING<, STRING>, STRING<=,
  STRING>=, STRING/=, STRING-LESSP, STRING-GREATERP, STRING-NOT-GREATERP,
  STRING-NOT-LESSP, STRING-NOT-EQUAL now return the index of the first mismatch
  instead of T.

* Fixed a bug: The functions REMOVE-DUPLICATES and DELETE-DUPLICATES produced
  an out-of-bounds error when called on a small sequence, with :FROM-END T
  argument and without :END argument.


24 May 1993
===========

User visible changes
--------------------

* New macro DEFPACKAGE.

* New function FUNCTION-LAMBDA-EXPRESSION.

* New package SCREEN containing some functions for random screen access
  (Unix, DOS, OS/2, Atari, VMS versions only).

* X3J13 vote <5> is implemented: The value of *APPLYHOOK* must now be
  a function of two arguments.

* X3J13 vote <104> is implemented: COMPILE-FILE now binds *READTABLE*.

* X3J13 vote <161> is implemented: SHADOW now accepts strings as well
  as symbols.

* Fixed a bug in the compiler which caused the compiler to crash when
  compiling (CASE key ...) forms with constant key.

* Fixed a bug in the compiler which produced unloadable .fas files
  when compiling forms like (SETF ... (FUNCTION LIST)).

* Fixed a bogus error message in the AREF function.

* The built-in editor on Unix now handles the Delete key the same way
  as the Backspace key or Ctrl-H.

* Fixed a bug in + that occasionally caused (- x x) to return a
  long-float zero which was not EQL to the other zeroes of type LONG-FLOAT.

* Fixed a bug: Correctly do round-to-even when adding two long-floats.

* Fixed a bug: The destructive sequence functions DELETE etc. failed to
  produce an error when called on a sequence of type LIST and with an :END
  argument larger than the list's length.

* Corrected the branch cuts of the complex ATAN and ATANH functions.


5 April 1993
============

None.


30 March 1993
=============

User visible changes
--------------------

* Fixed a bug in + that caused the sign of (+ x y) to be wrong when x and y
  were double-floats satisfying  0 < x < -y  or  0 > x > -y .

* New special form LOAD-TIME-VALUE.

* The function DIR now sorts its output.

* A new place (DEFAULT-DIRECTORY) manages the "current directory".

* When LOAD is called with a pathname as argument that contains a parent
  directory component (".."): Ignore the variable *LOAD-PATHS*, avoid an error.

* Fixed TRACE so that functions calling TRACE are correctly handled by
  COMPILE-FILE.


19 March 1993
=============

User visible changes
--------------------

* Replaced variable *TEMPFILE* by a function EDITOR-TEMPFILE.


4 March 1993
============

User visible changes
--------------------

* Fixed a bug in ADJOIN that caused ADJOJN and PUSHNEW to push (key item)
  instead of item onto the list when a :KEY argument was present.

* Amiga version: allow opening of "files" on special devices.

* OS/2 version: Long filenames on DOS (FAT) filesystems no longer produce
  errors. They are now silently truncated to 8+3 characters.

* Unix, Amiga, OS/2 versions: When a pathname is to be fully specified, no
  subdirectory wildcard "**/" or ".../" is allowed. Check this.


21 February 1993
================

User visible changes
--------------------

* Include test suite into distribution.

* Add COMMON-LISP and CLTL1 to the *FEATURES*.

* Fixed a bug in the compiler which caused the compiler to crash in some
  rare cases.

* Fixed a bug in WITH-OPEN-FILE: handle the case when OPEN returns NIL.

* Amiga version: Fixed bug in FILE-POSITION.

* Amiga version: Renamed REXX-WAIT-COMMAND to REXX-WAIT-SENT-COMMAND.


3 February 1993
===============

None.


1 February 1993
===============

User visible changes
--------------------

* Fixed handling of declarations in macros DO-SYMBOLS, DO-EXTERNAL-SYMBOLS,
  DO-ALL-SYMBOLS, DOSEQ, DOHASH.

* LISTEN on file streams opened with :DIRECTION :OUTPUT now returns NIL.

* Pathnames resulting from OPEN on special files are now called
  "file handle streams", they are unbuffered file streams.
  They can now be used as argument in situations where a pathname is expected.


11 January 1993
===============

User visible changes
--------------------

* Fixed meaning of :KEY argument for SUBLIS and NSUBLIS.

* DOS, OS/2 versions: adapted to emx 0.8f. This results in better
  *KEYBOARD-INPUT* on DOS and faster screen access on OS/2.

* Amiga version: implemented SHELL.

* OS/2 version: implemented MAKE-PIPE-INPUT-STREAM and MAKE-PIPE-OUTPUT-STREAM.

* compiler.lsp: Emit a warning when #'foo is used but foo is undefined.

* rexx.d, rexx.lsp: remove the trailing "p" from the keywords.

* init.lsp: don't call a macro a "Common Lisp function".

* stream.d, readline/readline.[ch]: exported rl_deprep_terminal such that a
  failing call to xmalloc() can now signal an ordinary error instead of exiting.


1 January 1993
==============

Release of first portable version of CLISP.

