Dear lisper,

This archive contains an Amiga version of CLISP as of 8th January 1994 (with
patches from 25th January), slightly modified on 7th of February. Please see
the files clisp.man and README too. Aminet archive names have been shortened
to fit the 20 characters limit.

There are three distinct binary versions of CLISP. These will be referred as
*-high, *-low and *-wide. Depending on your machine, you'll be able to run
one or the other, or all of them for testing purposes.

o The *-low Version:

  + has been compiled with a 68000 in mind. It can only deal with a 16MB
    address space ranging from 0 to 0x00FFFFFF. It clears the upper 8 bits of
    a 32 bit address before putting it on the bus and won't forget to check
    the memory it gets from the system.

  * checks whether AllocMem(MEMF_ANY) returns memory in the above range. If
    not, and if the CPU is not a 68000, it uses MEMF_24BITDMA (MEMF_CHIP on
    pre-2.0 machines) to ensure that it does not get memory outside the 16MB
    address range. DMA-able memory is a bit too hard a requirement, but there
    are no other flags.

  + can be made to run on a A3000 or A4000 by patching the executable to load
    the code and data hunks into CHIP memory (24BITDMA would suffice with
    >=2.0, but one can't say that easily in the load hunk structure). The
    supplied ratom.rexx ARexx script can do this for you, but you really
    don't want to run CLISP out of CHIP memory now that there is the *-high
    version.

o The *-high version:

  + has been compiled for 68020 and higher, won't run on 68000 CPUs. It
    doesn't use the floating point coprocessor.

  + is able to deal with addresses from 0 to 0x07FFFFFF, thus working on some
    A3000 and A4000 machines. GigaMem uses addresses between 0x20000000 and
    0x60000000. VMM40 uses adresses at 0x40000000. CLISP cannot run with
    that.

  * checks the memory it gets, reverting to MEMF_24BITDMA (>2.0, otherwise
    MEMF_CHIP), like above.

o The *-wide version:

  + has been compiled for 68020 and higher, won't run on 68000 CPUs. It
    doesn't use the floating point coprocessor.

  + is able to deal with any address and works fine with virtual memory or
    configurations where memory is located above 0x08000000
    (e.g. CSA-Derringer 030). This has been achived at the cost of using
    64-bit integers. This makes the executable and memory files very large.

o The Lisp-part of CLISP is in the CLisp-*-Part2 archive, e.g. the compiler
  source can be found there. The archive also contains the compiled Lisp
  files (with the .fas extension), enabling you to easily build your own
  lispinit.mem file. You can generate own lispinit.mem file by executing
  lisp.run -x (LOAD"init.fas")(SAVEINITMEM) in a shell, or call (SAVEINITMEM)
  directly when in your Lisp world.

o The complete CLISP source can be found in the clispsrc-<date>.tar.gz
  archive (see file ANNOUNCE). You need to have GNU-zip (gzip) and tar (or
  gtar) to be able to unpack it. I rearchived it for Aminet distribution into
  CLispsrc-<date>.lha.

o If you start (REXX-LOOP), the only exit is the exit-loop.cl ARexx
  script. I'd like comments and ideas for improvements of the ARexx
  interface. See also impnotes.txt.

o CLISP always allocates its own stack and should not cause MungWall or
  Enforcer hits. I don't know whether this stack allocation feature may cause
  compatibility issues with future Amigas.

o The lisp.run executable contains symbolic information. Symbolic information
  will help you report bugs (if you find any, CLISP has been very stable).

o Hints for your config.lsp:
(defparameter *editor* "ttx WAIT")	; Turbotext editor
(defparameter *editor* "ced -keepio")	; Cygnus ED (right?)
(defparameter *default-time-zone* -1)	; default set in defs1.lsp


Changes: (_PART_ of CHANGES.LOG in the source tree)

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.

* 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.

* 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.

* 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.

* 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.

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

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

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

* Copyright clarification.

* Miscellaneous documentation updates.

* Speedup SUBLIS and NSUBLIS.

* Let all known versions of gcc2 emit dbra instructions for loops. Thanks
  to Jörg Höhle.


Patches:

  Gcc-2.3.3 -O2 -fomit-frame-pointer put several bugs in the compiler
  output. I previously corrected two of them by hand-patching the assembly
  files. Gcc-2.5.7 produces correct output but for 68020 and above machines
  only. The low version is compiled with gcc-2.3.3 and the high and
  wide-versions with gcc-2.5.8. Gcc-2.5.8 put a bug in the -DWIDE version of
  control.d:_C_go. It seemed to me that beta versions of gcc-2.6.0 were not
  stable enough for compilation of the wide version.

Enjoy and send me all sorts of comments, bug reports and suggestions. Please
mention your (LISP-IMPLEMENTATION-VERSION) and system (especially memory
location) configuration when doing so.

      Joerg Hoehle.
hoehle@inf-wiss.uni-konstanz.de

