This file describes the update of NIL release 0.286 to Revision 1.
The first part of this file describes how to perform the revision;
the second, the specific things provided by the revision.


		  Performing the Revision

Revision 1 for release 0.286 consists of two parts.

The first part, and the easiest to install, are the Lisp patches.
These are those files which are loaded automatically when NIL starts
up.  (They are loaded by a call to LOAD-PATCHES which is provided
by the default init file in NIL$DISK:[NIL.SITE]DEFAULT.INI -- if
a user has his own init file, which would be named SYS$LOGIN:NIL.INI,
then he has to call load-patches himself.)  The patch files in the
save_set are all those files matching [NIL.PATCH...]*.*.*.

The second part of the revision cannot be performed with patches.
There are two corrected object files linked into the NIL kernel
(the file [NIL.EXE]LISP.EXE).  These files provide two fixes, which
are described later in this file.  The files needed to implement this
part of the revision are [NIL.EXE]LISP.EXE and [NIL]LISP.STB.  The
LISPLINK command, which is described in the "letter to the system
manager" sent with the original distribution kit, must be used to
dump a new NIL environment in order for this part of the update to be
effective.

The easiest way to effect this update is to restore the needed files,
and perform the LISPLINK command.  If you are keeping sources online,
simply restore everything from the tape with a command like
$ backup/verify mta0:/save_set nil$disk:[*...]
If you do not keep sources online, then the following will suffice:
$ backup/verify mta0:/save_set/exclude=(*.lsp.*,*.unv.*,*.max.*) -
   nil$disk:[*...]
However, the space savings in this case is very small.  Note that the
save set of interest is the second one on the tape--the above
commands assume the tape was left positioned there having first restored
this file.  Also, note that a new directory will be created by this
backup:  you must not only have sufficient privileges to write files
into the NIL directory hierarchy, but also to create the directory
NIL$DISK:[NIL.DOC].

Once the LISPLINK has been performed, the new LISP.EXE file should be
installed replacing the old one using the INSTALL utility.  The
command procedure NIL$DISK:[NIL.COM]REINSTALL.COM will do this for
you.  The older versions of [NIL]LISP.STB, [NIL.EXE]LISP.EXE, and
the older dumped NIL in [NIL.DUMP]NIL.LSV may be deleted when you
are satisfied that everything works.  Note that you do NOT want to
delete the old LISP.EXE if it is referenced by other dumps, for instance
a Macsyma you have, or any saved NIL environments users might have made.


		What is in the Revision

Lisp 286.1 -- various compiler modifications

This patch changes the behavior of the NIL compiler so that
	(declare (special var1 var2 var3 ...))
seen during the compilation of a file (with COMPILE-FILE, aka
COMFILE) will make the declarations local to the file, rather than
globally in the Lisp environment.  The primary impetus for this
change has to do with the compilation of code inherited from Maclisp
which freely uses the SPECIAL and UNSPECIAL declarations, and assumes
that a toplevel SPECIAL declaration is local to the file being
compiled.

The compiler has been told about the crufty Maclisp functions *DIF
and *QUO (these are two-argument versions of DIFFERENCE and QUOTIENT)
and will compile them as DIFFERENCE and QUOTIENT, with a resulting
efficieny gain.  Again, this fix is mainly for the benefit of some
crufty old Maclisp code which was easier for us to support than to fix.

The functions produced as the result of expansions of SETF of CAR, CDR,
and their compositions, were not being recognized by the compiler.
This has been fixed.  The change here is only in efficiency;  the old
code is correct, only slower than it should have been.

Only the last of these three modifications should impact most users.
The affected code must be recompiled for the change to take effect.

Lisp 286.2 -- various Lisp fixes

The FILL function was a no-op on certain kinds of vector sequences.  In
particular, on all vectors which do not have special storage
strategies, such as general vectors (those with element-type of T).
This includes all those types the data of which cannot be packed into
16 bit or smaller fields.

The Maclisp-compatible function HAIPART was broken and has been fixed.

The Maclisp functions GETCHAR and GETCHARN were reimplemented much more
efficiently.  This, like most of the compiler fixes, was to support
some crufty old Maclisp code.

DEFFLAVOR was incompetently computing the inheritance order for flavors
which included other flavors by using the :INCLUDE option.  This only
caused a problem when SEND-FORWARD was being used.

The display terminal stream did not support the :HOME-DOWN message,
which is used by the Maclisp form (CURSORPOS 'Z).  The :HOME-CURSOR
message, used by (CURSORPOS 'Top), was not interacting properly with
more processing.


Lisp 286.3 -- termcap parsing

Some termcap mis-parsing was fixed:  recognition of "@".


Steve 13.1

Kill ring stuff fixed, non-working standout mode stuff removed.

Steve 13.2 -- Lisp indentation.

New Lisp-mode indentation code implemented and installed.

----------------
There are two fixes provided by the NIL kernel revision. 

(DELQ item list count) was not deleting as many items as it should
have.  In particular, (DELQ item list 1) would not delete any items
if the item was not the first in the list.  Note that DELQ is sometimes
used implicitly by the DELETE function.

The function SI:%CREATE-MAILBOX was totally bogous.  Some other
miscellaneous corrections in the same module.  This is from the file
[NIL.VM]MBXIO.MAX.  If the adventurous among you attempt to use this
stuff (which is only documented in the source code), be warned that
the condition names signalled for mailbox interrupts will be
corrected in a future release, but are left unchanged for this
revision.  (Condition signalling is also going to change in the
next full release.)
