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 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: and have not been merged with the other sources yet.