The following changes describe things done at Rutgers before
the NIH/Rochester stuff.  They are flagged as [clh] in the
source, except for the new command scanner and possibly some
of the new tops-20 runtime routines.  (They are due to DAW.)


	Adding TOPS-20 specific new stuff.  This included:
	interfacing it to the EXEC via a slightly modified version of
the EXEC's own PRARG/TMP file scheme.  (The modifications were to
pass TOPS-20 filespecs and to tell LINK about LOWTSA.)  Then to teach
SAIL to pick up and parse these messages.  The user interface was
completely rewritten for TOPS-20 using the COMND jsys.  All switches
now have verbose (meaningful) names and helpful noise words.  Bit
setting switches may now be set with symbolic names as well as the
old (familiar) octal number method.  All tops-20 commands can be
given on the command line (obtained thru RSCAN).

 	adding runtimes for jsyses not in TENEX or not supported by
the TENEX SAIL.  Jsyses now supported include ACCES, COMND (not
Rutgers written), RCDIR, RCUSR, and RSCAN.

	Fixing small general bugs.  This has included:
Tenex/TOPS-20 fixes:
	Fixing "virtual origin of array before beginning of rel file"
problem.  (Note: This fixed Rochester's attempted fix this problem.
some programs which worked before this fix may not work since this
fix.  Continue if you dare with this error message.  (Glen Ricart
looking into why it succeeds sometimes?))  Note that this doesn't fix
the problem, it just makes sure that the warning message comes out
at the right time.  Sometimes SAIL succeeds in generating correct
code even when the message comes out.  The message comes out more
often than before, because there used to be a bug in the code that
produced it.  The effect is that there are cases of programs that 
work just fine and suddenly start getting error messages.  But in
theory there used to be cases of programs that failed with no warning,
and warning is now given.
	In BAIL, Bob Goldberg has added a completely new top level,
which functions like commands rather than function calls.  In addition
to making BAIL commands easier to type, the new top level enables
the user to debug programs that contain procedures with the same name
as BAIL commands (e.g. HELP, SHOW, etc.).  You can choose which top 
level you wish to use.  There was also a problem with
string (actually any kind of) array item var procedures: required a
fix to both BAIL and the compiler (in GEN) to pass type info more
carefully.
	In GOGOL(p9), installed two variables ($ostyp - only used in
Tops-20/tenex non-zero for tops-20, zero for tenex; $os - result of
universal getab of monitor type.)  which indicate at runtime which
operating system you're on.  available to user.  useful for
TENEX/TOPS-20 specific stuff.  GOGOL(p11) is where getab is done and
variables are set (for runtimes).
	In COMSER, added routine to call your favorite editor (EDIT:)
using newly designed calling convention via PRARG).  Will work with
editors not understanding PRARG, but not pass line/character number.
Should be changed to EDITOR: if DEC ever promulgates that feature.
[RNG:  I changed this to EDITOR: to be consistent with TOPS20 rel. 4]
	In GEN, fixed a problem involving EXPR TYPE of long reals.
	In GEN(p45), fixed problem in passing file name to BAIL (was
being written to wrong place, garbaging elsewhere).
	All over, split hardwired filenames (Tops-20/Tenex specific)
in order that we might use logical devices.  (Defined in HEAD, called
in GEN(p48), etc.) Done by two hairy macros which refer to SYSIND (an
AC - zero in TOPS-10) and GSYSIND which loads the AC from $OSTYP and
is defined as null for TOPS-10...  Indices are 0 - Tenex, 2 -
Tops-20.) GOGOL(p16,31), files indexed off SYSIND.
	GOGOL(p35), error handler modified to use EDIT: linkage in
COMSER. [Now EDITOR:]
	GOGOL(p56), problem in the string garbage collector (it was
using more space than necessary for strings).
	HEAD(p7), all fixed filenames converted to indexible tables
(using ersatz devices, changing .SAV to .EXE).
	RTRAN - (ancillary program) made the Tenex version work.
	SAIL(p28), reference to <SUBSYS>SAIL.SAV changed to
SYS:SAIL.EXE.
	SAIL(p29), initialize $os and $ostype in the compiler.
	SAIL(p29,31,32), changes to initialization (zeroing some
variables).
	SAIL(p32), operating-system dependent file-name change.
	STRSER(22), operating-system dependent file-name change.
	SYM(p21), Fixed bug having to do with line numbered files (might
have been getting the page number wrong).
	SYM(p24), fixed minor problem with XSAIL in the Tenex version
(some interaction between compiler and BAIL).
	TOTAL(p35), operating-system dependent file-name change.
	TOTAL(p48), fixes the loader interface on tops-20.  (Loader
needed ppn, which needed STPPN jsys).
	TRIGS(p5), fixed garbaged ac (stack pointer), in interrupt
handler.
	TRIGS(p6), fix to sin/cos routine where floating-point
overflow may occur.  avoids user-defined interrupt to handle same.

TOPS-20 fixes:

	IOSER.TNX(p4,24,etc.), fixed problem on OPENF.  String passed
which indicated how to open file (R=read, W=write).  W went to new
file, not allowing update of existing file.  Added U which uses
existing file, if it exists.
	IOSER.TNX(p5,6,37,39) reorganized OPEN, LOOKUP/ENTER to allow
for ersatz devices.
	IOSER.TNX(p16),	added optional arguement to RDTIM to allow
setting of magic bits.  
	(p23), RCDIR and RCUSR.
	(p23), number of changes to RUNPRG (gave default ext of .EXE
or .SAV).  made it work on tops-20 KL.
	(p32), added optional arg to give magic bits to DELF.
	(p38), added optional arg to CLOSF for magic bits.
	(p42), SACTF added.  new procedure for setting the account
string.
	(p43), ACCES added.
	(p59), on Tenex, if hole in file is read, zeroes are
returned.  TOPS-20 generated ill mem reads.  This condition is
detected, and the Tenex action is imitated.
	fixed CHARIN(p62) and SINI(p63) which blew up under obscure
circumstances.
	INTIN(p67) used to read integers into double precision f.p.
number, convert to single precision, then round.  single precision
could not hold as large a value as machine could express as integer.
Fix - skip the single precision f.p. number.
	(p69), fixed problem in handling leading zeros after decimal
point on input.
	(p80,102), code to use RDTTY for the line editor functions.
	(p94), added function ERSTRING which returns string for error
number (rather than outputting it).
	(p104), new procedure RSCAN.
	
Some of the edits we have made are for ease in installing a new
SAIL.  On TOPS-20, it is now possible to install the distributed
.EXE and .REL files.  The ersatz device patches made this possible.

Our version is now available for distribution and may be had by
sending a tape and a SASE envelope (or return postage) to:

	Charles Hedrick
	Computer Science Dept.
	418-Hill Center
	Busch Campus
	Rutgers University
	New Brunswick, N.J.  08903

	Our commitment to maintainance: We have no official
commmittment to maintainance.  We will fix any Tenex/Tops-20 specific
problems.  Probably any runtime problems, and probably not compiler
problems.

	Problems considered unfixable:
	"Top byte out of range" in the compiler.  (Problem: with
string constants, long text within cond compilation (ifc) and long
macros, all processed by string input routine which allocates fixed
space, if that runs out, you may die.  this due to design flaw.  to
get around, specify string space option to compiler of 5000).
[RNG:  But see my fix below!]
	"Virtual array origin before beginning of .rel file"  (Deep
within virtual array organization.)
	"EXPR TYPE" historically has lots of problems.  no known
problems but will probably never be bug-free.

*****************************************************************
At this point, we got a new version from NIH (Glenn Ricart).  It is
the result of a 1-year contract with U. of Rochester to do bug fixes.
Here are the major things they did:
  - minor bug fixes
  - verification (in some informal sense) that the long
	real code is right.  One case was found where it
	generates a dryrot mumbling about accumulator
	allocation, but if you continue it, the code generated
	is OK
  - 18-bit leap items
  - the version number was bumped to version 9.  This is not
	because of a real Sail version change, but rather because
	turning on 18-bit leap causes incompatibilities with
	versions that had 18-bit leap turned off.
No edit history is available.

We do not expect any other major maintenance work on the same scale
as the Rochester contract.  So this basically leaves us and NIH.
And Tymshare if you want to pay (which I recommend).

*******************************************************************
Here beginneth the Rutgers edit history.  Edits are flagged with
[nn] in the source.

[1]  20-Jan-80	CLH	HEAD, TOTAL, ARRAY
a possible fix to the compiler for a problem with records. The following
code caused the record garbage collector to blow up:
  recarray1[n_n+1] _ recarray2[m_m+1] _ recvar _ new!record(type)
The problem seems to have been with recarray2[m_m+1].  The compiler
initially computed the address of the element mentioned.  It stored this
in a temporary variable.  Later it loaded the actual value, and thus
changed the semantic bits associated with that expression from "location
of element of array of record pointers" to "record pointer". This caused
the procedure descriptor to show that temporary as being a record
pointer.  The record GC thus tried to garbage collect it.  But of course
it wasn't really a record pointer.  It was an address of an array
element. The GC ended up dispatching into thin air.
   The fix involves defining a new bit in LH(TBITS), called WASIDX.
This bit is set at ARRAY&MRKIDX+7, at the same time INDXED is set.
However it is not cleared when the actual value is loaded and INDXED is
cleared.  At TOTAL&RMP.RC-2, temps are being put back into the 
appropriate place.  The code there is separating record pointer temps
from others.  I now test the bit WASIDX, and to not treat something as
a record pointer temp if that bit is set.  The theory is that even
though INDXED has been cleared, the thing that is in the temp is still
INDXED, and so is not a record pointer.  This is just a guess.  It 
does work in the case observed, but would fail if it is possible to
cause the compiler to store the record pointer back into the temp.

[2]  5-Feb-80	CLH	BAIL.SAI
Tracing a string procedure didn't work.  Problem was that TYPEMUNGE
was treating a string procedure as a string and adding one to the
PDA!  This would invalidate just about anything you might do with
the poor procedure.  Fix is at BOT1 in the HAND version.  Forget the
add 1 if procedure

[3]  18-Mar-80	CLH	NWORLD
Fix PSIDIS and PSIRUN for Tops-20.  They create subforks which need to
interrupt the main process.  On Tops-20 you have to set the capability
"can manipulate superior process" to do this.

[04]  17-Jul-80  RNG  IOSER.TNX
Make .RESET routine do one PMAP on TOPS20 instead of 16 PMAPs.
Runtime conditional on $OSTYP.  Seems to decrease initialization
time (real, not CPU) of a trivial SAIL program by 10-15%.

[05]  18-Jul-80  RNG  SYM
Fixed TOPBYTE out of Range error when scanning long delimited
constants (e.g.  strings or macros)!!!  Made the delimited constant
scanner, STRNG, check for at least 5000 characters remaining in
string space and force a string GC if not.  This fix is not perfect,
in that the error will sometimes occur if a program has strings that
are longer than 5000 characters, but in practice it is quite easy to
break up a longer string or macro into several pieces.  BAIL.SAI now
compiles without having to play around with /string-space:x.  Note
that formerly the TOPBYTE error could occur on any string longer than
a few dozen characters, though it was most likely to occur on a long
string.  Now the error will never occur on any string less than 5000
characters.  Corresponding to this change, have increased the
default compiler string space to 4500 words instead of 3500 words, to
prevent any increase in the rate of string GC's during compilation.
I have made this change to the TOPS20 version of CC, and in SAIL.

[06]  24-Jul-80 RNG IOSER.TNX, FOO2.TNX, SPARES, HEAD, TENXSW
Add ability to trap I/O buffers as they come in and go out in TOPS20
SAIL, e.g. for encryption/decryption.  User invokes SETCRYPT routine
to turn the feature on.   See SETCRYPT in IOSER.TNX for details.
The above files are still in S:<SAIL> and have not been merged with
the other sources yet.
