perm filename FEATS[S,AIL]40 blob sn#257764 filedate 1977-01-14 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	FILE OF NEW FEATURES ADDED TO SAIL.  I.E. CHANGES NOT BUGS
C00012 00003	B-SERIES FEATURES
C00018 00004	C SERIES
C00023 00005	D SERIES
C00036 ENDMK
C⊗;
FILE OF NEW FEATURES ADDED TO SAIL.  I.E. CHANGES NOT BUGS

%AA%	New sort of declaration:
	SPROUT_DEFAULTS <integer constant>;
	Semantics: Whenever the procedure in which this occurs is
		sprouted, the appropriate fields of the <integer
		constant> will be used to specify the p-stack,
		sp-stack, quantum, and priority of the sprouted process.
		(but only if nothing is explicitly stated in the
		options to the sprout for the particular field in question).
	[GEN,HEL,NWORLD] RHT 8-31-73 OK RHT

%AB%    Extension to capabilites of RELEASE
	RELEASE now takes a second (defaultible) argument, the CLOSE
	inhibit bits (See RELEAS description in UUO manual)
	These are defaulted to zero when not specified so old programs
	which did not specify them will work as before.

	[FOO2,IOSER] JRL mid JULY 73

%AC%	Remove global declaration option to error recovery.
	Now the compiler doesn't ask whether one wants their
	undeclared identifiers declared globally, it merely 
	declares them locally. 
	
	[GEN] KVL 9/27/73

%AD%	Arrange for Alloc? (on reentry) to know about lower case.

	[GOGOL] RHT 10/6/73

%AE%	Arrange things so that you can pass a typed itemvar to
	an untyped itemvar formal.

	[STATS] RHT 10/18/73

%AF%	Have separate routines for set and list membership booleans
	[LEAP,LEPRUN] JRL 10/24/73

%AG%	Implement Item Overlap capabilities for separately compiled procedures.
	some other changes to leap initialization code to start
	the one and two-word list spaces as very small amounts
	[LEAP,LEPRUN,GEN] JRL 10/24/73

%AF%	Made suspend an itemvar procedure, so that the effect
	of x←suspend(myproc) is to allow this process to be restarted
	via a co-routine call.
	[FOO2] RHT 10/24/73

%AG%	Arrange for caller(newly sprouted process) to be the sprouting
	process. (i.e. initialize rsmr←daddy).
	[NWORLD] RHT 10/28/73

%AH%	fix things so that can type ree before starting a sail program.
	[GOGOL] RHT 10/29/73

%AI%	insert stuff so that one may log their error messages. I forgot  to
	put in feature numbers in HEAD, PARSE, HEL, & GEN, but remembered
	in COMSER, GOGOL, & STRSER.
	[HEAD, PARSE, HEL, GEN, COMSER, GOGOL, STRSER] KVL 11/10/73

%AJ%	Reorganize HEAD by transfering from HEAD to SAIL those
	macros (such as QSTACKs) that are only useful in the compiler.
	Also, incorporate the file that used to be FILSPC into HEAD.
	The effect of this is to get all the switch settings more together.
	[HEAD,SAIL,FILSPC,command files] RHT 11/18/73

%AK%	Replace exponentiation code in GOGOL to make it somewhat better;
	put together a set of user-callable trig routines that will work
	with APR interrupts on.  Also change error handler to make it
	reentrant; user can stuff address of an error routine in .ERRP.;
	it is called as rout(uuo addr,"error string","usererr response str")
	RFS 11/18/73

%AL%	Make outer block look more like a procedure by having it treat
	RF right on exit.  
	[SAIL,GEN,GOGOL,TOTAL] RHT 11/24/73

%AM%	New syntax for required initializations:
	REQUIRE procid INITIALIZATION [phase#];
	If [phase] is left out user phase 1 is assumed.  Otherwise,
	the specified (user) phase number will be used.
	[HEL,GEN] RHT 11/24/73

%AN%	ALLOW REQUIRES TO HAVE CONSTANT EXPRESSIONS AS WELL AS STRAIGHT
	CONSTANTS. AS BEFORE IF NO EXPRESSION IS GIVEN THE VALUE 0 WILL
	BE ASSUMED.
	[HEL,GEN,PROCES] JRL 11-25-73

%AO%	Do a SETPR2 if REMAP loses.  I'm actually not too happy about it,
	but may as well try.
	[GOGOL,SAIL] RHT 11-25-73

%AQ%	EVALREDEFINE implemented which bearsthe same relationship to REDEFINE 
	EVALDEFINE does to DEFINE.  
	[HEL,GEN,PARSE,SAIL] HJS 11-30-73

%AR%	CVPS converts a macro actual parameter to a string.  Very much like 
	a combination of ASSIGNC and CFMS.  
	[HEL,GEN,PARSE,SAIL] HJS 11-30-73

%AS%	Conditional compilation is now compatible with listing files.  
	The format is as follows:  The condional compilation reserved 
	words do not get listed.  Similarly for the condition (i.e. 
	IFC, IFCR, and WHILEC).  In other words only the code which 
	will be translated into executable code is shown on the listing.  
	[HEL,SYM,GEN] HJS 11-30-73 

%AT%	A left arrow following a macro name upon its definition or 
	redefinition is legal (equal sign still works).  
	[HEL] HJS 11-30-73 

%AU%	Allow FAIL, SUCCEED to be itemvar functions. They will perform
	the same as RESUME when the matching procedure is sprouted by the
	user. If the matching procedure is sprouted by the FOREACH interpreter
	they will return the item ANY (CVI(0)).
	[HEL,LEAP] JRL 12-1-73

%AV%	X←CHNCDB(CHANNEL) returns pointer to 3 word block used in open.
	Useful for interfacing assembly language routines with i/o in
	inner loop.

%AW%	ARRCLR routine added.  If BUF is any arithmetic or itemvar array,
	(including string arrays), ARRCLR(BUF) will zero out the entire
	array.
	[FOO2,ARYSER)  RLS 12-1-73

%AX%	SETPL routine added.  SETPL(channel,@linnum,@pagnum,@sosnum)
	allows linnum, pagnum, and sosnum to keep track of the string
	input from CHANNEL.  Whenever a '12 is encountered, LINNUM is
	incremented.  Whenever a '14 is encountered, PAGNUM is incremented,
 	and LINNUM is zeroed.  Whenever a stopgap line no. is encountered, it
	is placed into SOSNUM.  When fully implemented, this will work on
	the INPUT, INTIN, REALIN functions.  (The code has not been added to
	those functions yet, since there are some problems with INPUT that
	should be fixed first.)
	[GOGOL,IOSER]  rls 12-1-73
	looked at some code for INPUT, but not entirely happy yet about any of
	this mess.  The inner loop is getting longer & longer, thus screwing
	normal case losers in return for some convenience to others.  Perhaps
	should find a "filter" test that detects the absence of any "special"
	funnyness & then do some decoding.  Alternatively, provide a "fast form"
	inner loop.  May not be worth it for 2-3 instructions/char though.
	Put in a very "dumb" addition that adds one more instruction to the
	loop.  Fix it soon, though!!!
	[IOSER] rht 3-26-74

%AY%	make SAIL compiler call intmap runtime routine
	[SAIL,COMSER]

%AZ%	see DCS

B-SERIES FEATURES

%BA%	SEE DCS

%BB%	SEE DCS

%BC%	Add Bail symbol outputing routines to SAIL and GEN
	under the new BAIL switch.  The switch, of course, is
	turned off.  Needs to be put in now to avoid merger 
	problem latter....
	[HEAD,GEN,SAIL] KVL 1-6-74

%BD%	Add facility to have FOREACH statement without binding list
	for matching procedure fanciers.
	[HEL,LEAP] JRL 1-7-74

%BE%	make minor fixes to allow GLOBAL events.
	[NWORLD] RHT 1-8-74

%BF%	(Actually, a gross moby hack) Add XX table entry which
	can point to longer error string buffer.  The "right" fix
	is probably to rework the error handling or else to 
	add a longer string buffer, although an alternative would be
	to allow this to stand "as is", with a runtime routine
	ERMSBF(#chars want to allow) provided to allow the loser
	to diddle things.  This is what I will do, with ERMSBF(0)
	causing you to revert to using the compiled-in buffer.
	[GOGOL,FOO2] RHT 2-16-74

%BG%	(CMU =A1=) Add breakset mode "F", which undoes "K".
	[IOSER/25] RHT 2-22-74

%BH%	add a list connstruct:
		ARG_LIST(FOO,BAR,...,ZORCH)
	which works roughly like:
		{{REF_ITEM(FOO),...,REF_ITEM(ZORCH)}}
	except that all the items are marked so that APPLY deletes them.
	[HEL,LEAP,ARYSER] RHT 2-24-74

%BI%	Adding records to the language.  This entails many additions.
	First additions are to the runtime system.  
	RHT

%BJ%	Added a routine $PRINT(string,ctl).  See ioser for details
	[IOSER/35,HEAD,GOGOL] RHT


%BK% 	A small improvement put in at the request of the pub hackers
	Munched SCAN so it only copies strings when it has to.
	Added a user table entry BRKOMT, which includes a bit (rh)
	turned on whenever the corresponding break table has an omit char.
	[STRSER/16]

%BL%	A new feature for uuo dispatching.  Instead of giving an error
	right away for ILLUUO, instead look first at cell .UUOCN.  If 
	it is non-zero, then execute the instruction found there & return.
	[GOGOL] RHT

%BM%	Garbage collection for records.  many edits
	RHT

%BN%	Put out a pointer to a string constant containing the class id
	right before put out the class descriptor.  (For convenience,
	make sure the string is also an ASCIZ.)  
	RHT

%BO%	(CMU =C3=) For CMU, turn underbar into excl,not equal into hash
	[GOGOL,PARSE] RHT 8-31-74

%BP%	(CMU =C4=) ALLOW NULL PPNS & NULL CHARS IN PPNS
	[IOSER/(6:7)] RHT 9-7-74

%BQ%	MAKE CLOSE TAKE THE CLOSE-INHIBIT FLAGS AS A SECOND (OPTIONAL)
	ARGUMENT.
	[IOSER/26] RHT 10-11-74

%BR%	removed the various HACKS, getting ready for SAISG8
	[<many>] RHT 10-9-74

%BS%	There are now 72 break tables for SCAN, INPUT, etc.  A user
	normally sees only 1 to 54.  The others are -17 to 0, which
	can be accessed by setting BRKPRV non-zero in the user table.
	Break tables are now CORGET blocks, with pointers to groups
	of 18.	Also, new functions GETBREAK and RELBREAK, to reserve
	and release breaktables.

%BT%	Add an XX variable .CORIN -- Will eventually be used for a CORGET
	trapper of some sort.  (put in at the behest of CMU)

%BU%	Add an xx variable .LEPIN -- put in at the behest of CMU for
	LEAP trapper of some sort to be written by LDE.

%BV%	CMU only -- change RUN call to CALLI -22 for LDE.

%BT%	Make outer block PD look more like others.
	[SAIL/33,GEN] RHT 10-19-74

%BV%	Make the Spc Alloc Blk point at outer block PD

%BW%	CV6STR The correct sixbit to string routine
	[STRSER/17] BH 11-7-74

%BX%	Make SPROUT enqueue processes FIFO rathe than LIFO.
	[NWORLD/8] rht 11-12-74

%BY%	Make RENAME correct for date75 lossage.  Do this by preventing
	the loser from setting the date.  Add a new function ERENAME
	(extended rename) to do the whole works.
	[IOSER/28] rht 12-16-74

%BZ%	random other fixes for DATE 75.
	[SAIL] RHT 12-16-74
C SERIES

%CA%	NEW RUNTIME CVASTR.  LIKE CVSTR BUT STOPS ON NULLS
	[STRSER]/16 RHT 2-12-74

%CB%	CHANGES FOR NEW-STYLE RECORD CLASS FORMAT.

%CC%	STRING SUBFIELDS IN RECORDS

%CD%	PDQ'S NEW RECORD GARBAGE COLLECTION & STRING SUBFIELD RUNTIMES.
	NEW RECSER, LOTS OF HERE'S IN SPARES. JFR 6-7-75

Rest of C-series features reserved for JFR's summer work at CMU.
These entries were transcribed 9-22-75 but bear the original dates.

	7-29-75 JFR	GOGOL,SAIL,SYM

%CE%	X switch, allows partial compile, save, continue where you left
	off. SAIL,SYM

%CF%	print out extension and ppn of source file on tty when compiling
	and always indent 2*levels spaces.
	8-Jul-75 JFR	SAIL,SYM

%CG%	V switch, see below.
%CH%	W switch, see below.
	Added switches /V and /W; V for oVerlays, mainly forces all links
	to low segment.  W for "where", optional symbols to aid external
	code optimizer.  Changes can be found by searching for OVRSAI
	and OPTSYM.  Assemled @THAT.FMD, was forced to increase DSIZE
	(data block size), loaded and saved as SAILDD.
	3-Jul-75 JFR	GEN, ARRAY, STATS, SAIL, HEAD, LEAP

%CI%	more information in compiler "fatal end of source file". SYM

%CJ%	reworked UUO handler for new error handling system. GOGOL/23-26,30-32

%CK%	Effective addr of ARERR can be either word1 or word2 of string
	descriptor. GOGOL/30

%CL%	Add identifying information in left half of second word of name block
	in .REL file
	7-22-75 JFR	TOTAL/36

%CM%	"E" response to error handler now gets characters for filename
	by INCHWL rather that INCHRW, allows graceful typos.  Altmode gets
	you back to the question loop.
	7-22-75 JFR	GOGOL/31

%CN%	Save all 17 registers in global INIACS on first start. GOGOL/9,11

%CO%	Make GOGTAB look like an external array.  USERCON is obsolete. GOGOL/37

%CP%	New runtime, EDFILE ("file",line,page), calls editor. GOGOL/34,SPARES,FOO2

%CQ%	More information on "I-O device error", IOSER/4

%CR%	Give more info for "names of begin and end don't match".
	7-29-75 JFR	GEN/12,15

%CS%	BACKUP runtime for non-Stanford DEC systems
	7-30-75 JFR	IOSER/31,SPARES,FOO2

%CT%	Better message, let user specify from terminal if source file
	not found.
	8-12-75 JFR	SAIL/37

%CU%	Make missing parentheses and commas in macro calls
	continuable.  If the "(" is missing, the statement will
	probably be flushed soon afterwards.  If the ")" is missing,
	the macro call will be ignored.
	8-16-75 JFR	SYM/10

%CV%	Put in a check for PDA>(JOBOVL) in order to help find errant
	ASSIGNs in overlay programs.
	8-22-75 JFR	ARYSER/6

%CW,%CX,%CY,%CZ	unused
D SERIES

%DA%	a number of edits to RECSER & GOGOL to allow for auto
	garbage collection.
	RHT 9-75

%DB%	REQUIRE "some chars" COMPILER!SWITCHES. Merely passes the string
	to the switch scanner.  You get what you get.
	GEN/16,20; HEL	JFR 9-21-75

%DC%	APR trap handling made more honest in case of JFCL (emulates
	hardware).  
	TRIGS/4/5 JAM

%DD%	Compiler command scanner: All switches which double stack sizes
	(D,P,Q,R,S) now do so only if the value of the switch is zero.
	If the value is not zero, the value becomes the stack size.
	Thus, /P doubles the stack size and /100P sets it to =100.
	JFR SAIL/42 10-24-75

%DE%	Listing file banner lines changed to include switch settings,
	also some slight style changes.
	JFR SAIL/31, SYM/24,27, GEN/12 10-25-75

%DF%	Add option bit (100) to /F switch to suppress listing of 
	banner lines.  
	RHT SAIL/18/31/43 SYM/27

%DG%	Modify APPLY to detect BAILishness by looking at ARGLIS
	word instead of context.  If LH of arglis is zero (ie length
	= 0) but RH points at something, assume a BAIL APPLY.
	The new code still realizes that -1 is not a valid context,
	however.
	RHT ARYSER/7 10-27-75

%DH%	Remember second semblk of current BEGIN in TRKBEG. Use for better
	error message "fatal end of source file".
	JFR GEN/12/14 SYM/24

%DI%	Better method to detect start of coordinate for BAIL, esp. for CASE.
	JFR SYM/6 12-2-75

%DJ%	A version of SCAN which is callable at compile-time, to aid in
	macro hacking, etc. JFR 2-35-76[FOO2,STRSER]
	STRING PROCEDURE SCANC(STRING ARG,BRK,OMIT,MODE); BEGIN "SCANC"
	INTEGER TBL,BRCHAR;
	TBL←GETBREAK; SETBREAK(TBL,BRK,OMIT,MODE);
	RSLT←SCAN(ARG,TBL,BRCHAR);
	RELBREAK(TBL);
	RETURN(RSLT) END "SCANC";

%DK%	Added subroutines for TMPCOR reading/writing
	MJC IOSER 3-9-76

%DL%	Prevent enclobberment of .SM1 file if /X and /B and user gives same
	name on extended compilation, by rename of first .SM1 file to .SM0.
	JFR SYM/24 4-30-76

%DM%	(CMU =F4=) Generate more likely SOS line numbers in compiler in cae
	file has no line numbers (EXPORT only)
	JFR SYM/21 6-19-76

%DN%	/A switch in compiler, for code options.
	[SAIL/24,40 ff,TOTAL/7, STATS/29, GEN/44, EXPRS/12, STATS/44,
	LEAP/23, TOTAL/20, SYM/27, SAIL/31,STATS/49]
	JFR 7-1-76,7-2-76,7-4-76,8-17-76

%DO%	Use .REL device for .SM1 device (used to assume 'DSK'); put
	complete .SM1 name into BALNK loader block.
	[SAIL/37, GEN/45] JFR 7-5-76

%DP%	Allow trailing ] to be omitted in ppn at runtime file scan.
	[IOSER/7] JFR 8-13-76

%DQ%	BREAKSET mode "Z" says: believe the breaktable for character '0
	(ASCII NUL) on INPUT.  IOSER/16, STRSER/20:22, IOSER.TNX/64P
	JFR 8-17-76
%DR%	When required source!file is not found, have editor response E or T
	start editing the file which had the require, not the file which
	does not exist.
	[SAIL/37] JFR 8-17-76

%DS%	fix RESERVED, add CONOK for DECLARATION
	[HEL,GEN/5,23] JFR 8-21-76

%DT%	FORTRAN-10 calling sequence under /20A option; also fixed #UX.
	[SAIL/24,STATS/38,43,44] JFR 8-22-76

%DU%	LONG (DOUBLE PRECISION) REAL data type.  UNDER CONSTRUCTION 9-23-76

%  %	SFD (subfile directory) and other TOPS-10 6.02/5.07 stuff,
	from Hedrick (Coordinated Science Lab, U. of Illinois)

ENTRY 1-Oct-76 CLH		everything
=I12= Set up conditionals for export to Stanford.  Stuff having to
do with batch system or TECO linkage went under DEC, which is set
in HEAD to IFE STANSW!CMUSW!TENXSW.  Stuff having to do with SFD's
went under SFDS, which is set in HEAD to IFG SFDLVL.  Also, use
SFDLVL in SFD code to control depth of SFD's.
Some code is not under any switch: bug fixes, changes to make
[,] represent your PPN rather than 0, accepting = as well as ← in
command line.

ENTRY 25-Sep-76 CLH		SAIL/37
=I11= Fixed the code that allows user to respecify file name of
required file in case it was not found.  JFR had forgotten to
zero DSKSW before reading file name from the TTY.

ENTRY 24-Sep-76 CLH		SAIL,HEAD/12,GOGOL/26,TOTAL/49,BAIL/12
=I10=	Inserted SFD's in the compiler.  Mainly changed file name
scanner in SAIL.  Had to find room for the path and be sure it
is copied whenever the PPN is.  Problems with REQUIRE LOAD!MODULES,
since can't put SFD's in block 16 or 17.
Changed BAIL to put whole path instead of just PPN in
file information block.  Also, BAIL now uses the block length
for this kind of block so it can read either old or new
.SM1 files.

ENTRY 21-Sep-76	CLH		STRSER/20,GOGOL,HEAD/16,IOSER
=I09=	Add SFD's to the runtimes.  Required lots of minor
changes various places:
  Added global variable MYPPN in GOGOL.  Set to GETPPN in %ALLOC.
  Added GOGTAB entry PATHBL which is the path block when needed.
   Note that like FNAME(USER), PATHBL(USER) is overwritten next
   time a file is decoded.
  Modified FILNAM in IOSER to recognize SFD's and make the PPN
   a pointer to PATHBL(USER).
  Modified CVFIL in STRSER to set !SKIP! = 1 if the PPN is such
   a funny pointer, so old programs won't get messed up.
  Modified editor interface in GOGOL to properly understand PPN
   that is a pointer, for use by CALLEDITOR.
  Note that [] is still 0, but [,] is the user's PPN.
The compiler and BAIL have not yet been changed, as this may be
more major.  I hope the runtime changes don't mess up the
compiler!  They shouldn't if one doesn't type SFD's.

ENTRY 13-Sep-76 CLH		IOSER/31
=I08= Make INCHWL and INCHSL break on altmode as well as CR
and LF.  The EXPORT code appeared to work this way, but it
was just by chance, as there was Stanford-only code in it.
CMU didn't break on altmode.

ENTRY 27-Jun-76 CLH		HEAD/5
Turn on KI10SW.  Apparently the only affect is for conversion
between integer and real.

ENTRY 27-Jun-76 CLH		SAIL/32
=I06= If there is a compilation error in a batch job, output
? Error detected for MPB.

ENTRY 27-Jun-76 CLH		SAIL/37/43
=I05= Allow equal sign as well as left arrow in SAIL command
string.

ENTRY 1-Mar-76 CLH		IOSER/31
=I07= Bug fix in INCHWL.  If more than 144 characters typed,
called a routine that garbaged an AC and lost a character of
the input string.

ENTRY 2-Dec-75 CLH		GOGOL/26
=I04= Eliminate special CMU PPN output mapping.  Code for input
left in, though causes an error if CMU PPN actually used.

ENTRY 8-Aug-75 CLH		GOGOL/31
=I03= Modify DDT calling sequence so it can use DEC DDT (don't
assume LH(.JBDDT) is zero).

ENTRY 31-May-75 CLH		COMSER/5/6,GOGOL,SAIL/14
=I02= Added the following features:
  (1) Check to see whether it is a batch job.  If so, simulate
linefeed response to error handler (auto continue).
  (2) Made T response to error handler link to TECO.
  (3) Use EXPORT linkage to SOS, modified to handle TECO, too.

11-25-76 JFR installed the following from UOR:

\UR#4\ ALLOW := FOR ←, >= FOR GEQ ETC
      SYM/5
\UR#5\ BETTER LISTING FOR CONDITIONAL ASSYMBLY
	GEN/24
\UR#8\ IN SAILDD PUT A LINEFEED AFTER DISPLAYED LINE.
	COMSER/8
\UR#10\ ADD CATLST,COPARR TO SAIDM1 SO WON'T NEED LEAP FOR
        CONTEXTS. ARYSER/4
\UR#11\ GIVE BETTER MESSAGE FOR MISSING STEP AMOUNT (FOR STMT)
	HEL, STATS

%DV%	Allow for all the LUUO's that the hardware will.
	[GOGOL/23] JFR 11-26-76

%DW%	When transferring to DDT from error handler, put return address
	in JOBOPC so that αP from RAID wins. (SUAI and UOR only.)
	[GOGOL/30] JFR 12-8-87

=I13=	SFD fix. [SAIL/30]	JFR 1-2-77

=I14=	BATCH fix [SAIL/37]	JFR 1-2-77

%DX% 	Catch-all ELSE for CASE statements. The word 'ELSE' is treated
	as an explicit case number which catches all cases not mentioned,
	and in addition catches the bounds-error case.  Thus a CASE which
	has an ELSE does not generate a call to CSERR.  Error handling
	also improved; old way did JRST @ on bad value, new way just
	ignores statement completely (except for ELSE).
	Jump table is also trimmed at the front if possible without LOADER
	hassles.
	[HEL/6/13, STATS/16/17/18] JFR 1-4-77

%DY%	Let user specify what character signifies exponent in CVE.
	New user table entry EXPCHR.  Make "E" work for "@" in REALIN.
	[HEAD/16,STRSER/9,IOSER.TNX/72,IOSER/21] GJA (GERRY AGIN %SRI-AI)  /JFR

%DZ%	Allow TENEX user to specify where his user code segment starts.
	New user table entry SEGBOT.
	[HEAD/16,GOGOL/42] GJA/JFR 1-13-77