Google
 

Trailing-Edge - PDP-10 Archives - BB-4157E-BM - fortran-ots-debugger/forots.mac
There are 27 other files named forots.mac in the archive. Click here to see a list.
	SEARCH	FORPRM
	TV	FOROTS	Fortran object time system,6(2033)

;COPYRIGHT (C) 1981  BY  DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
;TRANSFERRED.

;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.

;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

COMMENT \

***** Begin Revision History *****

1100	CKS	12-MAR-79
	New

1101	CKS	20-Mar-80
	Only give truncated-record warning once per unit

1102	CKS	20-Mar-80
	Implement DISP=SUBMIT

1103	CKS	26-Mar-80
	Change FUNCT% to %FUNCT and add DBMS%% so DBMS 5A will work

1104	CKS	29-Mar-80
	Can OPEN file every time IO is done when it is accessed
	through multiple units (TTY: for instance).  DDB address
	only gets stored for one unit, so IO on any synonymous unit
	thinks file needs opening.  Fix to store DDB address for all
	synonym units.

1105	CKS	29-Mar-80
	Move labels DLP, XLP so record size does not get decremented
	twice when record crosses file window boundary

1106	CKS	29-Mar-80
	Remove MODE:EBCDIC, add $UNIT

1107	CKS	01-Apr-80
	Make rewind call generic NXTW so it works for unformatted IO; add
	special code to handle case when LSCW is last word in window

1110	CKS	12-Apr-80
	Put in error numbers for IOSTAT and ERRSNS to return

1111	CKS	17-Apr-80
	Replace JSHALT calls in FOROTS.MAC with ERCAL ERRIJE to sidestep
	MACRO bug

1112	CKS	17-Apr-80
	Correct off-by-1 bug in filename move, results in an extra char used
	in filename

1113	CKS	15-May-80	Q1210
	Make X format act as 1X, not 0X

1114	CKS	27-May-80
	Fix pre-error-message CRLF routine

1115	CKS	5-Jun-80	Q1212
	More of 1111, missed a JSHALT

1116	CKS	5-Jun-80	Q1211
	fix [Enter correct file specs] message

1117	CKS	9-Jul-80	Q1223
	Image mode never takes END= branch, or notices EOF at all

1120	JLC	13-Jul-80
	Fix so (I5$) format parses as (I5,$)

1121	CKS	15-Jul-80
	Add FT20UUO so fools can try doing (simple) UUOs with native FOROTS

1122	CKS	17-Jul-80	Q1234
	Add SFMOD so control chars are not translated on terminal output 

1123	CKS	4-Aug-80	Q1240
	Make REWIND an input operation if file is doing input

1124	CKS	11-Aug-80
	Clear F when entering FORERR from library routine to prevent random
	wrong behavior

1125	CKS	12-Aug-80
	Prevent premature EOF in binary IO

1126	CKS	12-Aug-80
	Need device designator of TTY to check for interaction between
	error messages and file IO.  A mere STDEV of TTY: gets confused
	by logical names.  Get designator of physical TTY.

1127	CKS	12-Aug-80
	Compiler doesn't set up L for FIN. so don't trust it in %SAVE

1130	CKS	13-Aug-80
	OPEN with DIALOG always takes ERR= branch, with error message
	"[Enter correct file specs]".  Don't take ERR= on [] messages.

1131	CKS	13-Aug-80
	Fix ERRSNS again:  remove extra indirect bit, fix so jsys
	error number is the one that caused the IO statement to fail,
	not the most recent error at the time of the error message
	calculation.

1132	CKS	14-Aug-80
	Unformatted output sets associate variable off by 1; fix.

1133	CKS	18-Aug-80
	Hack to allow UUOs on -20 fails if low seg is larger than 128K.
	Hack the hack.

1134	CKS	21-Aug-80	Q4500
	Use FO.CHN instead of 777B17 to load channel number

1135	CKS	22-Aug-80	Q4510
	OPEN (UNIT=1,DIALOG) doesn't go into dialog if batch; it should.

1136	CKS	22-Aug-80	Q4514
	Binary IO doesn't take END=

1137	CKS	23-Aug-80	Q4504
	EOF from TTY is permanent; CLOSE the channel at EOF to clear it

1140	CKS	29-Aug-80	Q4559
	Put FRSXXX prefix on TOPS-10 error messages

1141	CKS	29-Aug-80	Q4567
	ALCHN doesn't store T0 in U.ACS so it doesn't get returned to user

1142	CKS	29-Aug-80
	Don't rely on IOSUB being set up on REWIND

1143	CKS	26-Sep-80	Q4698
	Don't fall into CLOSE from CLOSE%

1144	CKS	26-Sep-80	Q4689
	Remove .+n constructs

1145	CKS	26-Sep-80	[Abbott]
	FORPLT bug:  routine NUMBER calls SYMBOL with L set up wrong.  Change
	MOVE to MOVEI

1146	CKS	26-Sep-80
	More of 1137

1147	CKS	29-Sep-80	Q4648
	Add VFOROTS to FORPRM so MACRO routines can include version-dependent
	code

1150	CKS	29-Sep-80	Q4653
	Remove debugging code from DUMP and PDUMP

1151	CKS	1-Oct-80
	Prevent junk F from causing spurious ERR= branches in FORERR

1152	CKS	2-Oct-80	Q4734
	Fix IOSTAT

1153	JLC	18-Sep-80
	Alpha I/O speedup

1154	JLC	26-Sep-80
	Fixed integer overflow in INTI

1155	JLC	29-Sep-80
	FLOUT fix - turn off sign bit in word 2 for dp values

1156	JLC	3-Oct-80
	Fix NAMELIST to demand $ in col 2 after skipping data

1157	CKS	3-Oct-80
	Do not suppress carriage control of first line if it isn't LF

1160	CKS	16-Oct-80	Q1260
	Correct / format in ENCODE to not pad record with spaces first

1161	CKS	16-Oct-80	Q4747
	OPEN(5,ACCESS=SEQIN) prevents TYPE statements from working.
	"Cure": make all opens of controlling TTY for input and output both

1162	CKS	22-Oct-80	Q4693
	Prevent -10 disk files from being one word too long

1163	JLC	23-OCT-80
	A whole lot of bug fixes to magtape ops for TOPS-10.
	Fixed byte/count synch in %IREC

1164	CKS	24-Oct-80
	Make OPEN (DEVICE='DEV:') work

1165	CKS	24-Nov-80	Q4572
	Change some statement labels

1166	CKS	1-Dec-80	Q5048
	Use SAVE4 not SAVE2 in xIREC

1167	CKS	1-Dec-80	Q5049
	Add missing GETTAB T1, in FORINI

1170	CKS	1-Dec-80	Q5047
	Add .TFSET to tapop set functions

1171	CKS	1-Dec-80	Q5054
	Call %SAVE in EXIT. so that the ACs are set up for the CLOSEs that
	get done

1172	JLC	2-Dec-80	Q1318
	Clear DPFLG in ALPHI/ALPHO

1173	EDS	8-Dec-80
	Replace SEARCH JOBDAT in FORPRM with EXTERNs.

1174	CKS	10-Dec-80	Q5052
	Remove "Too many args" error.  If program sends more arguments
	than will fit in the static block, dynamically allocate a block.

1175	JLC	12-Dec-80
	Fixed LSNGET again

1176	CKS	13-Dec-80
	Remove confusion about ERR= and END= and IOSTAT= addresses sticking
	around and applying to the following statement

1177	CKS	13-Dec-80
	Fix ERRSNS returning JSYS error number

1200	CKS	13-Dec-80
	Make CLOSE of non-open file a nop

1201	CKS	13-Dec-80
	Precede and follow all terminal input with SFCOCs to get the terminal
	modes right.  .TTATE doesn't quite make it.

1202	CKS	15-Dec-80
	Remove TLO of IFIW in arg copier; won't work with 30-bit addresses and
	is not necessary without 30-bit addresses.

1203	JLC	17-Dec-80
	Finally fix TOPS-10 read followed by write.

1204	CKS	18-Dec-80	Q1330
	-20 TIME routine can return negative time if HOURS .LT. GMT_CORRECTION.
	Add 24 if it goes negative.

1205	CKS	18-Dec-80	Q1332
	Move copying of ERR=, END=, IOSTAT= to where it will happen for
	ENCODE/DECODE too
	
1206	CKS	18-Dec-80	Q1333
	Don't set REREAD unit on WRITE statements

1207	CKS	18-Dec-80	Q1336
	-20 tape code handles nulls by jumping off to the middle of the disk
	IO loop.  Jump instead to the middle of the tape loop, it works better.

1210	CKS	18-Dec-80	Q5114
	In TRACE's PC finder, check for JSP 1,.OVRLAY by looking at the RH of
	the instruction, not the LH.

1211	JLC	19-Dec-80
	In %%GETIO make sure not to substitute for complex for list-directed
	I/O.

1212	JLC	22-Dec-80
	Another SEQINOUT fix (TOPS-10). If we reach EOF, there is
	no truncation to do. Additionally, we must not turn off the
	EOF bit, as that's the only way to tell. Otherwise buffers
	are left out of synch (ENDXFR now only turns off D%END).

1213	CKS	29-Dec-80	Q5203
	DIRECTORY=array doesn't work; change a SKIPE to SKIPN

1214	JLC	05-Jan-81
	Fix DISPOSE='DELETE' and 'RENAME' by inserting a
	test for JFN open in IOCHK, calls address in IOSUB if
	not open yet.

1215	JLC	06-Jan-81
	Inserted a POPJ at end of SFDEL in FORFMT, was dropping off
	the end and dropping into dollar format.

1216	JLC	08-Jan-81
	New code for DECODE for 'next record'; moves pointer/count
	to next word of string, as in V5.

1217	JLC	09-Jan-81
	Fix integer divide check in FORTRP to "patch" the answer.

1220	CKS	9-Jan-81
	Rework OSWTCH to fix TOPS-20 read to EOF followed by write

1221	JLC	15-Jan-81
	Force input check (call of subr in left half of IOSUB) for
	all magtape operations.

1222	JLC	16-Jan-81
	FILOPs in OSWTCH were allocating buffers spuriously. Clear
	the buffer count word.

1223	JLC	16-Jan-81
	Add increment of BLKN(D) to -10 SMAPW, as it was not getting
	bumped for unformatted I/O.

1224	CKS	18-Jan-81
	More of 1220

1225	JLC	19-Jan-81
	Make %DDBTAB full-word table, affects FOROPN, FORIO, and
	FOROTS.

1227	JLC	20-Jan-81  Q4829
	Added code to only allocate buffer space needed instead
	of always assuming both input and output.

1230	JLC	20-Jan-81
	Changed format repeat count size from 9 to 12 bits,
	allowing new maximum of 4095A1.

1231	JLC	20-Jan-81
	Changed FCNT to a word in preparation for a merger
	of FCNT and IBCNT on the -10.

1232	JLC	21-Jan-81
	Fixed random I/O on -10 - buffers were not being allocated.

1233	JLC	21-Jan-81
	Partial merger of FCNT and IBCNT/OBCNT - FCNT is now
	a full-word indirect on the -10, pointing to IBCNT or
	OBCNT.

1234	CKS	22-Jan-81
	Fix OPEN/CLOSE with no intervening IO to not complain when the
	file does not exist

1235	CKS	22-Jan-81
	Add initial value for .JBHRN to fake highseg JOBDAT.

1236	JLC	23-Jan-81
	Restore pntr/count setup in ISW and OSW, removed by accident.

1237	JLC	23-Jan-81
	Fix to decode eof condition, was leaving negative record size
	if record previously used up.

1240	JLC	23-Jan-81
	FOROPN - binary/image kluge in OSWTCH: number of words to write
	is one less than specified by buffer pointer.

1241	JLC	23-Jan-81
	Remove setup of FCNT at end of DOOPEN for -10, as FCNT is now
	automatically set up.

1242	JLC	23-Jan-81
	Fix to exit code in FOROPN for full-word DDBTAB.

1243	JLC	26-Jan-81
	Another DECODE fix; RPTR was being reset to beginning of
	record buffer.

1244	JLC	26-Jan-81
	Move ISWTCH/OSWTCH recall code to inside IF10.

1245	JLC	26-Jan-81
	Recode ISWTCH for -10 to not set to EOF, as it would
	not work properly for BACKSPACE.

1246	JLC	26-Jan-81
	DF was not being renewed in ISWTCH or OSWTCH. Changes in
	FOROPN and FORIO.

1247	JLC	27-Jan-81
	Fix REWIND yet again, did not have code for the 20-type
	binary buffer pointer.

1250	DAW	27-Jan-81
	Put IFIW's in front of some indirect addresses.

1251	CKS	28-Jan-81
	MOVE => MOVEI in GETIO to make complex non-*-fmt work

1252	CKS	28-Jan-81
	Fix SKIP RECORD after SEQINOUT OPEN, add code for unformatted
	SKIP RECORD

1253	JLC	29-Jan-81
	Patch to prevent OPEN from truncating files in ISWTCH, plus
	preventing 2nd truncation in OSWTCH.

1254	JLC	29-Jan-81
	Yet another minor patch in OSWTCH, wasn't correcting for
	binary/image kluge correctly.

1255	CKS	5-Feb-81
	If -10 open error occurs, mark file as not open before trying
	to proceed with dialog.  Avoids infinite CLOSE loop when trying
	to close un-opened file on error exit.

1256	DAW	5-Feb-81
	New calling sequence for FOROP. (Affects FORMSC, FORDDT, FOROP).

1257	JLC	6-Feb-81
	Major modification to byte pointer and mapping routines, now
	point to last used word instead of next available, to make
	-10 and -20 code more similar.

1260	DAW	6-Feb-81
	LSNGET smashed ACs 2 and 3.

1261	JLC	9-Feb-81
	Unformatted skip record dropped into formatted I/O on the -10.

1262	DAW	9-Feb-81
	Allow FORINI to run in non-zero sections.

1263	JLC	9-Feb-81 	QAR 10-05487
	Fix -10 backspace code, SOJLE should be SOJGE.

1264	EDS	10-Feb-81	QAR 10-04519
	Fix FORPRM to not allow a KI-20 version to be generated.

1265	CKS	10-Feb-81
	Fix FORERR to allow calls of FORER. from within user-supplied error
	handler

1266	DAW	11-Feb-81
	Changes to FORMSC to allow extended addressing. In particular,
	lots of changes to DUMP and PDUMP (also bugs fixed), TIME, and
	DATE routines. (More FORMSC changes to come..).

1267	EGM	15-Feb-81	Q10-04519
	Clean up FORPRM, add checks for feature test conflicts, replace
	DDB byte pointer definitions in FOROTS with call to macro defined
	in FORPRM.

1270	CKS	17-Feb-81
	Arrays more than 128K output by a single SLIST don't work because
	of a HRREM.  Make it a HRRZM.

1271	EGM	18-FEB-81	--------
	Allow lower case (d) to generate optimal code and use the previously
	defined DDB byte pointer, and fix the position field for all cases that
	do not index using (D) or (d).

1272	DAW	19-FEB-81
	Certain low-risk extended-addressing changes to FOROPN & FORIO

1273	EDS	19-Feb-81	Q10-04732
	Add /RECL to dialog keyword table in FOROPN

1274	EDS	19-Feb-81	Q10-04574
	Add TM.ANS to FORPRM for ANSI-ASCII tapes and
	add ANSI-ASCII keyword to TAPEMODE table.

1275	DAW	20-Feb-81
	Make FORMEM function %GETBK return a whole 30-bit address.

1276	DAW	20-Feb-81
	Add MACRO definitions for fields and masks to FORPRM.
	Taken from MACSYM:  FLD, POINTR.

1277	JLC	23-Feb-81
	Added code for 1st performance improvements: precalculated
	record size for %IREC.

1300	DAW	24-Feb-81
	Get FIN. calls and IOLISTS correct again in DUMP & PDUMP.

1301	JLC	24-Feb-81
	Added line sequence number word to DDB.

1302	JLC	24-Feb-81
	Added channel arg to LSNGET and FOROP call.

1303	JLC	25-Feb-81
	Folded -10 and -20 code for DIREC together, store line
	sequence number in DDB.

1304	CKS	25-Feb-81
	Update DDB when -20 dialog GTJFN changes device or filename

1305	JLC	26-Feb-81
	More on RSIZE, fix RECSIZ

1306	DAW	26-Feb-81
	Change %SAVE arg list outputs, affects FOROTS, FORIO, FOROPN, FORFMT.

1307	EDS	26-Feb-81
	Put ACCESS back in valid switches for DIALOG.

1310	DAW	26-Feb-81
	Full words in DDB for ERR=, END=, IOST=, AVAR= addresses.

1311	CKS	27-Feb-81
	Random formatted IO can output more than one record per WRITE statement.
	Fix file length setter to know about last record written.

1312	EDS	27-Feb-81
	Remove edit 1307 as it causes generation number skew on TOPS-20
	with certain combinations of ACCESS in DIALOG different from
	the ACCESS that was specified in the OPEN.

1313	JLC	3-Mar-81
	Added code to FOROPN for handling magtape op's better.

1314	EDS	4-Mar-81	Q20-01392
	Add feature test switch FTNLC1 to allow skipping of column 1 of
	NAMELIST input data.  Add $END to NAMELIST output.

1315	DAW	5-Mar-81
	Set IFIW bit in %LTYPE word so "LDB T1,@%LTYPE" works in
	a non-zero section.  (This is really more of 1306).

1316	JLC	5-Mar-81
	Major changes to FOROPN and FORIO for handling TOPS-10 magtapes
	and direction switching properly.

1317	DAW	6-Mar-81
	Add flag "EXTADD" - INIT% sets to -1 if FOROTS is
	running in a non-zero section, for easy testing.

1320	DAW	6-Mar-81
	Define feature test switches for type of byte pointer to
	use when indexed byte pointers won't do.

1321	DAW	6-Mar-81
	Some changes to FORFMT to allow it to run in non-zero section.

1322	JLC	8-Mar-81
	More mta fixes 

1323	CKS	9-Mar-81
	Yet more (-20) MTA fixes

1324	EDS	9-MAR-81	Q20-01396
	Fix FORFMT to allow DOLLAR ($) and COLON (:) to work correctly.

1325	JLC	9-Mar-81
	Yet more fixes for -10 magtapes

1326	CKS	9-Mar-81
	Remove fencepost bug caused by 1257

1327	JLC	10-Mar-81
	Minor bug fix in OPEN for -10.

1330	CKS	11-Mar-81
	Check for JRST-type entry vector when calling DBMSF

1331	CKS	11-Mar-81
	Remove FTGAL2.  On -10, try QUEUE. uuo.  If that fails, send a
	version 2 packet to QUASAR.  Requires that FOROTS-10 be
	assembled with QSRMAC from Galaxy release 2.

1332	JLC	11-Mar-81
	Install dump mode I/O into FORIO.

1333	JLC	11-Mar-81
	Magtape fixes (mostly typos) for the -10.

1334	DAW	12-Mar-81
	Add macros for dealing with the different types of byte pointers
	without seeing a lot of feature test switches in the code.
	The macro names are $BLDBP, $LODBP, $STRBP.

1335	EDS	12-Mar-81	Q10-05759
	Make TIME use the arguments correctly for -10 and -20.  Use
	symbols when testing ODCNV% output.

1336	JLC	12-Mar-81
	Fix some bugs in binary I/O for the -10. Pointer/count
	was not getting updated on the way into the FILOP. Remove
	some extraneous saves of the pntr/count. Fix more typos
	in the magtape direction switching code for the -10.

1337	JLC	12-Mar-81
	Moved MAXARG (number of I/O list elements max) from
	FOROTS.MAC to FORPRM.MAC and increased it to 128.

1340	DAW	12-Mar-81
	Make FUNCT macro use XMOVEI instead of MOVEI for arg-list ptr.

1341	JLC	13-Mar-81
	Make some magtape ops work without a file being open on
	the -10.

1342	EDS	13-Mar-81	Q10-05075
	Make FORMSC routines TRACEable, use HELLO macro.  Fix
	TWOSEG and RELOC problems and fix TITLEs.

1343	DAW	16-Mar-81
	Some FORIO extended addressing changes.

1344	CKS	16-Mar-81
	Make REWIND to a nonopen tape not be a nop.  REWIND of any other unit
	that is not open is still a nop.

1345	EDS	16-Mar-81	Q10-04806
	Fix ASIN and ACOS library error message.

1346	JLC	16-Mar-81
	Modify code for skip file, back file, and clear eof for rewind

1347	DAW	16-Mar-81
	To allow list-directed I/O and FLIRT. to run in extended addressing.

1350	EDS	16-Mar-81	Q10-04761
	Fix TWOSEGs and RELOCs in random number routines. (FORSNG)

1351	EDS	16-Mar-81	Q10-04786
	Fix TWOSEGs and RELOCs in FORDBL, FORCPX, FORMSC and FORPL2.

1352	DAW	17-Mar-81
	Recent bug in %ISAVE that caused V5 rel files to stop working with
	V6 FOROTS.

1353	JLC	18-Mar-81
	More magtape op patches for the -10. Empty buffer was confusing
	OSWTCH. Installed new code to back over EOF if program reads
	to EOF, then writes.

1354	JLC	18-Mar-81
	Fix to -10 OSWTCH. Must truncate file to previous block to
	prevent monitor from rounding up word count.

1355	CKS	18-Mar-81
	Opening a file without a MODE= specification, then doing binary IO,
	doesn't work well.  Fix more things in UNFSW: the /MODE field in the
	DDB, the monitor byte size (20) or data mode (10), and the byte sizes
	in the buffer pointers.

1356	JLC	18-Mar-81
	Add dump mode write to OSWTCH.

1357	JLC	19-Mar-81
	Fix some more bugs in magtape (BAKEOF) for the -10.
	Install code to prevent creation of null file for
	just a rewind, unload, backfile, or skipfile without
	an OPEN.

1360	EDS	19-Mar-81	Q10-05866
	Add UNIT number range checking to FORIO.

1361	JLC	20-Mar-81
	Put -20 null file creation code in IF20. Fix typos in
	FORIO.

1362	JLC	23-Mar-81
	More magtape fixes, FCNT/FPTR becomes IPTR/ICNT and OPTR/OCNT.

1363	JLC	24-Mar-81
	Commented out common tty ddb code in FOROPN. Minor seqinout
	fix (missing global). FORIO fixes to error typeout, magtape
	ops.

1364	CKS	24-Mar-81
	In error cleanup, don't RLJFN the JFN if we haven't succeeded in
	getting a JFN on the file yet.

1365	JLC	25-Mar-81
	Typos in FORPRM and FORIO. Move code in FOROPN to get
	device type up slightly so magtape ops will know about it.

1366	JLC	26-Mar-81
	Yet more typos in FORIO. Binary I/O was going in wrong direction.
	BAKEOF returned garbage in T1, used in backspace. MOPEND did
	simulate reading the EOF record.

1367	EGM	26-Mar-81	--------
	Update FORSRT to search FORPRM and use FORTRAN feature test switchs.

1370	EDS	26-Mar-81	Q10-04566
	Make IMAGE and BINARY mode I/O illegal on TTY device.  Fixed
	typos in FOROPN.

1371	JLC	27-Mar-81
	Make zero-trip do loops work in list-directed I/O

1372	EGM	30-Mar-81	--------
	Make OVERFL compatible with verison 5A, and eliminate JSYS conflict
	in TIME prologue.

1373	CKS	31-Mar-81
	Fix more 20 tape bugs.  Write and back over a record when necessary
	to convince monitor to write tape marks.  Fix unformatted backspace.
	Backspace doesn't work at all if file is open for output, so reopen
	the file when necessary.  Replace SIN/SOUT with SINR/SOUTR so spacing
	operations stay in sync with the monitor's buffers.

1374	JLC	31-Mar-81
	Replace code to turn off D%END for terminals, was smashing T1,
	which contained valuable data.

1375	EDS	31-Mar-81	Q10-05002
	Fix FILOP. programming error for CLOSE DISPOSE='RENAME'.

1376	JLC	31-Mar-81
	Stop clearing use-bits in backspace to avoid cache-sweep
	bugs. Fix OSWTCH-10 bugs regarding null files.

1377	JLC	01-Apr-81
	Changed load/store of FLGS to move/movem of FLAGS, since
	FLGS was defined to be a full word. Minor edits to UNFO,
	to check for empty window at beginning of loop instead
	of end. Minor edit to -10 backspace, no need to specify
	FILOP read address if we turn on virgin buffer bit.

1400	JLC	02-Apr-81
	Typo in FOROPN.MAC, PUSHJ with no "P,".

1401	JLC	03-Apr-81
	Put code to clear use bits back, was not causing bugs,
	merely masked another problem.

1402	JLC	06-Apr-81
	Don't do dump-mode update code for magtape on -10 in
	OSWTCH. Move code to suppress next CRLF from OSWTCH to
	%IREC.

1403	DAW	06-Apr-81
	Get rid of magic number in FORERR that prevents users
	from loading FOROTS at places other than 400000.

1404	EGM	6-Apr-81	--------
	Seperate CDX and CGX routines, add FTGFL feature test, move
	GFLOAT double precision checks into CDX routines under FTGFL.

1405	DAW	6-Apr-81
	Modify all math library routines to be able to run in extended
	sections.

1406	JLC	06-Apr-81
	Typo in FOROPN, left in reference to OSW for -10. Minor
	bug in FORIO, backspacing beyond block 1 would not work.

1407	JLC	07-Apr-81	QAR 10-05241
	Move device-dependent code so that BLOCKSIZE is set up
	before buffers are allocated. Requires using device
	name rather than channel.

1410	JLC	07-Apr-81
	Moved record buffer allocation to FORIO in preparation
	for separation of input & output record buffers.

1411	DAW	08-Apr-81
	Separate JFN field into IJFN and OJFN. Make ACCEPT
	use .PRIIN, TYPE use .PRIOU. OPEN of "TTY:" will also
	use the primary input and output JFNs, but if the user has
	a logical name definition for TTY:, use the JFN obtained
	by the GTJFN on TTY:. When the file is not a TTY file,
	IJFN and OJFN will always be the same.
	The whole reason for this is so input and output can continue at
	your new terminal if you DETACH and re-attach somewhere else.

1412	JLC	09-Apr-81
	FORIO - minor fix in DIREC to ignore characters after
	the record's size. Fix backspace bug in -20 code,
	did not handle fixed-length records correctly.
	FOROPN - uncommented the commented-out code to tie
	all TTY I/O to the same DDB.

1413	DAW	10-Apr-81
	Get rid of flag D%MTOP. FOROTS doesn't need to check
	whether or not its doing a magtape operation on every IO
	statement.

1414	DAW	10-Apr-81
	MTOP operations were ignoring ERR=.

1415	DAW	10-Apr-81
	Extended addressing fix: Allow args to be in acs.

1416	JLC	10-Apr-81
	Dectape rewind and unload. Separation of input and output
	record buffers.

1417	DAW	10-Apr-81
	Type traceback info for OPEN errors before dialog mode.

1420	JLC	10-Apr-81
	Deallocation of separate record buffers.

1421	JLC	10-Apr-81
	Typo in edit 1407. DF was not set up when DSKSET was
	called, causing RANDOM I/O not to work.

1422	JLC	13-Apr-81
	Fixup of separation of record buffers, typos in FORIO.

1423	DAW	13-Apr-81
	Put %SETD in FORIO.

1424	JLC	14-Apr-81
	Typo in %IRINI made DECODE nonexistent.

1425	BL	14-Apr-81	Q10-05076
	Make OVERFL functionality include 'logical function'.
	Returns T0=-1 if OVERFLOW=YES, T0=0 if OVERFLOW=NO.
	Original functionality unchanged.

1426	JLC	14-Apr-81
	Change error reporting in OSWTCH to fatal open errors.
	Restore .JBFF in DOOPEN if FILOP fails, caused SORT
	to fail.

1427	JLC	15-Apr-81
	Changed RSIZ to be a word in the DDB, so we don't
	need flag D%RSIZ, can use SKIPN instead.

1430	JLC	15-Apr-81
	Typo in -20 backspace broke it.

1431	BL	16-Apr-81	Q10-05949
	Change misleading 'RIB error' message to 'checksum error'
	or 'data error'; increase lookup block to include .RBSTS

1432	JLC	16-Apr-81
	Routine IALIGN in FORIO to correct fixed-length problem
	was trashing a returned AC (T3).

1433	DAW	16-Apr-81
	Show possible switches user can type when he gets to
	DIALOG mode on the -20 and types a question mark.

1434	DAW	16-Apr-81
	Check for READONLY specified and if so, change ACCESS=
	'RANDOM' to 'RANDIN', 'SEQINOUT' to 'SEQIN'.

1435	CKS	16-Apr-81
	More backspace changes, more of 1412 and 1430

1436	JLC	16-Apr-81
	More of edit 1432. Return decremented rec count in IRCNT.

1437	DAW	17-Apr-81
	Change FILOP error message 12 from "No such device" to
	"Can't OPEN device" -- Open of LPT could cause this.

1440	DAW	17-Apr-81
	Some extended addressing support in FORCNV.

1441	JLC	17-Apr-81
	Changed all references to D%RSIZ to SKIPN/SKIPE RSIZE(D).
	Put back @ in RMAP, removed by mistake.

1442	DAW	17-Apr-81
	Remove /LABELS:, /TAPEMODE: from possible DIALOG options
	(comment them out).

1443	JLC	17-Apr-81
	Stabilize EOFN(D) to be fixed number of bytes in file.
	EOF detected by comparing BYTN with EOFN.

1444	JLC	21-Apr-81
	Fix bug caused by edit 1443; it was smashing T1.

1445	DAW	21-Apr-81
	Rework code around UNFSW to make it more understandable.

1446	DAW	22-Apr-81
	Rework NMLST code to not smash P4 in a lower-level routine.
	This fixed a bug caused by edit 1440.

1447	CKS	22-Apr-81
	Fix various things:  Don't destroy critical AC in IALGN, use
	legal byte pointer (point to bit 34, not 35) when backing past
	the beginning of a word, use correct flag AC in revised UNFSW

1450	JLC	22-Apr-81
	Fix DECODE new record code.

1451	JLC	23-Apr-81
	Fix dump mode. Must do special things for dump mode files
	for mtops, ISWTCH, and OSWTCH.

1452	CKS	23-Apr-81
	Set EOFN correctly on 20 on BACKSPACE, REWIND, and CLOSE.
	Don't set EOFN after WRITE/REWIND/CLOSE sequence.

1453	JLC	24-Apr-81
	Move -10 code to set up bytes/word so that BLOCKSIZE setup
	will work. Make dump mode backspace and skiprecord work for
	magtape (record = 1 block). Insert if20 end after EOFN setup.

1454	JLC	24-Apr-81	QAR 20-01364
	Change EOFN if we switch from formatted to unformatted.

1455	JLC	27-Apr-81
	Fix bug in edit 1452, must not set D%LIN/D%LOUT on the way
	out of magtape operations.

1456	PY/JLC
	Remove extra angle brackets from POINTR macro in
	FORPRM, was causing MACRO to create Polish string in pass
	2 after pooling literals in pass 1; caused hiseg break
	to be inaccurate.

1457	CKS	27-Apr-81
	Prevent ENDFILE statement from always taking END= branch.
	Prevent WRITE/REWIND/CLOSE from writing zero-length file.

1460	JLC	28-Apr-81
	Fix bug in edit 1453, made non-dump mode files be dump mode.

1461	JLC	29-Apr-81
	Fix return from magtape ops again.

1462	CKS	4-May-81
	Fix RENAME to not fail on output-only files

1463	JLC	7-May-81
	Change EOFN to be updated on the fly. Removed most code
	from ISWTCH. Removed IOSUB hack on the -20. Fix disk
	backspace. Speed up %GETIO & DOIO. Remove rewind hack
	for both -10 and -20.

1464	DAW	12-May-81
	Change error macros ERR, LERR, IOERR; replace "ERRJ" with "$ECALL";
	put all error messages (except LERR's) into FORERR.MAC.
	Also get rid of $2HAK (won't be needed any longer).

1465	JLC	15-May-81
	Major changes to -20 magtape ops and magtape i/o.
	Other major changes to ISWTCH/OSWTCH for the -20. Minor
	bug fixes for the -10 (mostly from the tape 5 beware file).

1466	CKS	18-May-81
	Add TOPS-20 PSI interface

1467	CKS	18-May-81
	Replace EXTADD with I.EXT to avoid non-dotted global symbols
	in FORLIB

1470	CKS	20-May-81	Q20-1360
	In floating output, fix incrementing doubleword integer
	to propagate carry into high word if necessary

1471	CKS	21-May-81	Q10-5010
	Add defensive checks to FORHAK

1472	CKS	21-May-81	Q10-5875
	Add PC to ENCODE/DECODE message

1473	CKS	21-May-81	Qvarious
	Add flags to IOERR macro, I%REC to print current input record with
	arrow under current position, I%FMT to do same for current format.
	Add I%REC and I%FMT to appropriate messages.

1474	JLC	22-May-81
	Fix a bug in %PTOF, was assuming WSIZ(D) contained words, now
	contains bytes. Fix bug in new -20 open code, can't look at
	DF before it's set up.

1475	JLC	22-May-81
	Another bug in new -20 open code, %GTBLK has no error return.

1476	JLC	26-May-81
	More bugs in new I/O code, was looking at EOFN for non-disk
	files in unformatted I/O.

1477	JLC	27-May-81
	Bug in OSWTCH-10, was not clearing BLKN if writing after EOF.

1500	DAW	27-May-81
	Fix edit 1464 - got E error in FORMSC.

1501	JLC	27-May-81
	Bugs in random I/O caused by changed calling sequence
	for MAPW.

1502	JLC	28-May-81
	Install defensive WAIT operations in all -20 magtape code.

1503	JLC	28-May-81
	Round default magtape blocksize to word boundary, since
	that's what the monitor does anyway.

1504	BL	1-JUN-81	Q10-06141
	Prevent TRACEBACK default call from displaying itself

1505	JLC	1-Jun-81
	Don't do extra backspace in MTAISW. Lots of other backspace
	fixes in FORIO.

1506	CKS	2-Jun-81
	Add F-77 ELIST and SLIST entries, for now equated to F-66 equivalents

1507	BAH	4-Jun-81
	Fix up FORRTF, TOPS10 real time library routine, to work with version 6
	memory management.

1510	BL	4-Jun-81	Q10-06197
	Fix IllMemRef bug due to all pages being initialized as existing.

1511	JLC	5-Jun-81
	More edits in magtape code for BACKFILE and SKIPFILE.

1512	BL	5-Jun-81	Q10-05829
	Fix <crlf> omission when output assigned from DSK to TTY.

1513	BL	8-Jun-81	Q10-06193
	Fix no error message writing small file to write-locked yape.

1514	JLC	8-Jun-81	Q20-01392
	Fix several NAMELIST bugs (subscript out of range, etc.).
	Added some new features, fixed column 1 skip code.

1515	BL	9-Jun-81
	Change JRST to CLSERR in EDIT 1513 to PUSHJ.

1516	JLC	10-Jun-81
	Another bug in backspace. Also fix end-of-record handling
	for unformatted I/O.

1517	BL	18-Jun-81	Q10-05075
	Use HELLO macro at CLRDIV (FORMSC)

1520	BL	19-Jun-81	Q10-05485
	eliminate CORE UUO which wipes out VMDDT

1521	JLC	26-Jun-81
	Fix formatted EOF processing: stop processing the I/O list when
	about to get an EOF.

1522	JLC	01-Jul-81
	Fix R format output to match R format input for width
	larger than 5.

1523	JLC	03-Jul-81
	1022 interface in FORMEM, FOROP.

1524	DAW	06-Jul-81
	Fix POWER function error message to be shorter so it is not truncated.
	In FORSNG EXP3. function.

1525	JLC	07-Jul-81
	Fix PAUSE so it types the *, etc.

1526	BL	09-Jul-81
	Fixes to FORERR,FORTRP,FOROPN,FORHAK to work on TOPS10.

1527	JLC	09-Jul-81
	Fixes to FORMEM.

1530	JLC	10-Jul-81
	Change name of FOROTS.EXE to FOROT6.EXE in FORINI. Remove
	old EXE file compatibility (V5 is now left FOROTS.EXE).
	Changed CTL files and CCL files.

1531	JLC	10-Jul-81
	More fixes to FORMEM.

1532	DAW	14-Jul-81
	OPEN rewrite base level 1.

1533	DAW	14-Jul-81
	Errors that were supposed to print the input record didn't.
	Also those errors messed up the message text saved for ERRSNS.

1534	DAW	14-Jul-81
	Infinite loop if illegal characters in DIALOG='string'.
	Also add code for TOPS-20 "STATUS='SCRATCH'".

1535	JLC	14-Jul-81
	Add code for proper EOF handling and IOSTAT.

1536	JLC	15-Jul-81
	Minor edits. Changed FORFMT and LDIO/NMLST to call
	%ORECS instead of %OREC to setup record buffer.

1537	DAW	16-Jul-81
	Finish SCRATCH file handling for TOPS-20. Get CLOSE working
	again for TOPS-20.

1540	DAW	17-Jul-81
	Delete IS from DDB, use IOSTAT variable directly.
	Set IOSTAT variable to zero at the start of each IO statement.
	Set D%ERR if "?" error in IOERR.

1541	DAW	17-Jul-81
	Get rid of D%LIN and D%LOUT

1542	JLC	17-Jul-81
	Change EOF and ERR returning, so that we stop I/O processing
	when the EOF or error happens.

1543	DAW	17-Jul-81
	Allow SCRATCH files to be on devices besides DSK:

1544	DAW	20-Jul-81
	/CARRAIGECONTROL not working right; invent a routine "FIXU"
	like FIXDEF that solves the problem.

1545	DAW	20-Jul-81
	Remove call to %OCRLF at CLOSE time.

1546	JLC	20-Jul-81
	TIREC for -20 did not have an input buffer. DECINI was not
	being called in DEC%.

1547	DAW	20-Jul-81
	Re-work FORIO routines "CLSOPN" and "CLREOF" which used to
	call %AUXBF.

1550	JLC	20-Jul-81
	Make truly sure there is a buffer before calling the INI
	routines. Fix DECODE. Fix X format.

1551	DAW	20-Jul-81
	Fix LOAD, STORE macros to give a "Q" error if you try to
	"MOVE" or "MOVEM" a quantity that's not defined to be
	a full word.

1552	DMN	21-Jul-81
	Performance work on FORFMT.

1553	JLC	22-Jul-81
	Fixes to ENCODE, DECODE, and TIREC. Remove ENCINX, was
	not used any more.

1554	DAW	22-Jul-81
	CLOSE keywords separate from OPEN; work on /DISPOSE actions.

1555	BL	22-Jul-81
	Install DMN code for non-zero FORSRT.

1556	DAW	22-Jul-81
	CLOSE from EXIT no longer worked.

1557	JLC	24-Jul-81
	FLOUT uses double precision for everything. Therefore
	print same maximum of significant digits for both.

1560	DAW	28-Jul-81
	OPEN rewrite base level 2.

1561	DAW	28-Jul-81
	LSNGET always returned -1

1562	DMN	28-Jul-81
	Improve performance of FORFMT.

1563	DAW	29-Jul-81
	DIALOG='string' lost track of its arg type.

1564	DAW	29-Jul-81
	Check conflicts in CLOSE switches; use STATUS value if DISPOSE
	not set.

1565	DAW	29-Jul-81
	Do BLANK= defaulting correctly.

1566	JLC	29-Jul-81
	Fix error handling in FORFMT.

1567	JLC	30-Jul-81
	More fixes to FORIO.

1570	DAW	30-Jul-81
	Add flag F%NION so %IONAM doesn't get cleared in OPEN.

1571	DAW	31-Jul-81
	Set F to initial value if program goes to %ABORT.

1572	JLC	31-Jul-81
	Set F to initial value in FORTRP before printing error.
	Initialize ENCODE more completely.

1573	DAW	31-Jul-81
	Do RENAME errors better; eliminate typing random CRLF's when
	ERR= branch taken.

1574	BL	3-Aug-81
	Missing IF20 in FORIO.

1575	JLC	5-Aug-81
	Fix record zeroing again. Fix bug implanted by dir=arr patch.
	Fix bad illegal repeat count msg from FORFMT.
	Implement separate access bit setting mechanisms for DOOPEN
	for the -20, eliminating MTACRK.

1576	DAW	11-Aug-81
	OSWTCH for disk.

1577	DAW	11-Aug-81
	Fix bug caused by dropping a null at EOR when the
	record buffer happens to be full.

1600	DAW	11-Aug-81
	In a FORMAT, allow "X" to mean "1X" (as it used to!)

1601	DAW	12-Aug-81
	ENDFILE trying to open disk file for input on the -20.

1602	JLC	12-Aug-81
	Reinserted suppression of initial CRLF for terminals only.

1603	DAW	12-Aug-81
	Don't type statement name more than once when
	multiple IOERR's are done.

1604	DAW	12-Aug-81
	Yet another problem similar to 1601 (DIVERT this time).

1605	JLC	12-Aug-81
	FORFMT was not complaining about (A419X) as ambiguous.

1606	DAW	13-Aug-81
	Fix right-justified output for single-word items.

1607	DAW	13-Aug-81
	Bug in FIND code (Aaaargh!)

1610	DAW	17-Aug-81
	CLOSE/RENAME on the -10 failed

1611	DAW	17-Aug-81
	"%integer overflow" bombed out program instead of continuing.

1612	BL	18-Aug-81	Q20-01642
	SORT put itself into non-zero section prematurely

1613	JLC	19-Aug-81	Q10-6390
	Bug in backspace: used word count for ASCII files.

1614	JLC	19-Aug-81
	Remove END= processing for end of last record which has no
	CRLF. Thus EOF becomes a valid record terminator.

1615	DAW	19-Aug-81
	Get rid of code and assembly option for 2-word byte pointers

1616	DAW	19-Aug-81
	Infinite loop if non-disk TOPS-10 OPEN error.

1617	DAW	19-Aug-81	Q10-5204
	Problem with DISPOSE='SUBMIT'

1620	DAW	20-Aug-81
	Fix generation skew problem in dialog mode on the -20.

1621	DAW	20-Aug-81
	CLOSE/ RENAME/ DELETE failed on the -10.

1622	JLC	21-Aug-81
	Fix record positioning functions, so that T, X format
	really work correctly. Rewrite ENCODE/DECODE again.

1623	DAW	21-Aug-81
	Alternate entry point RESET$ to test extended addressing
	in FOROTS.

1624	DAW	21-Aug-81
	"?Illegal record number" error got record # from wrong ac.

1625	DAW	21-Aug-81
	Get rid of accumulator "DF". No more DDB flag synchronization
	problems caused by DDB flags in more than one place!

1626	DAW	24-Aug-81
	AC changes in FLIRT and FLOUT so they don't define "D".

1627	JLC/DAW	24-Aug-81
	On TOPS-20, REWIND and UNLOAD no longer need a filename

1630	JLC	24-Aug-81
	Illegal magtape operations are now fatal.

1631	DAW	24-Aug-81
	Set D%MOD in UNFO

1632	JLC	24-Aug-81
	Fixed X and T format to pad with spaces, not random trash.

1633	JLC	25-Aug-81
	Typo in DECINI, added nofile functionality to ENDFILE,
	SKIPFILE, and BACKFILE. Fixed some comments in FORFMT.

1634	JLC	25-Aug-81
	Fix FIXREC, did not clear ORVIR, so extra blanks got output.

1635	JLC	25-Aug-81
	Remove edit 1633 for ENDFILE, can't work that way.

1636	DAW	25-Aug-81
	"Ambiguous repeat count" error instead of "Illegal repeat count"
	for FORMAT (A4X).

1637	JLC	26-Aug-81
	Decode bug. IRPTR was not getting setup properly.

1640	DAW	26-Aug-81
	Use EXTENDED form of GTJFN to insure magtape gets ;FORMAT:F

; The above edit was turned off with "REPEAT 0" since it screwed
;up GTJFN for anything except magtape. When /TAPEMODE works a form
;of it will be used.

1641	DAW	26-Aug-81
	OPEN with ACCESS='SEQINOUT', STATUS='NEW' didn't get correct
	file on TOPS-20.

1642	JLC	27-Aug-81
	Remove %FILOP calls from all of FOROTS, since we don't
	support 6.03.

1643	JLC	27-Aug-81
	Made IRBUF & ORBUF full word byte pntrs.

1644	JLC	27-Aug-81
	Fix free-format A to stop on comma. Change R*<space>C to
	to be read as R*C, at least for version 6 and maybe beyond.

1645	DAW	28-Aug-81
	Get TOPS-10 and DIVERT'ed file to column 1 before errors.
	(See also 1651).

1646	DAW	28-Aug-81
	DTA REWIND and UNLOAD used wrong channel #.

1647	DAW	28-Aug-81
	DTA REWIND and UNLOAD to not require an existing file.

1650	BL	31-Aug-81
	Fix RECORDSIZE applied to NAMELIST & LIST directed output

1651	DAW	31-Aug-81
	Wait for TTY output to finish before doing TRMOP. ".TOHPS".
	(Fixes a bug in 1645).

1652	DAW	1-Sep-81
	Fix DUMP mode I/O on TOPS-10; make "IOE" a "?" error.

1653	JLC	1-Sep-81
	Return -1 (illegal LSN) for non-LINED files and LINED
	files with no LSN.

1654	BL	1-Sep-81
	Typo in EDIT 1650.

1655	DAW	1-Sep-81
	Clear .RBALC after successful OPEN FILOP.

1656	DAW	2-Sep-81
	Get rid of some magic 8's and 9's.

1657	DAW	2-Sep-81
	Delete 7.01 definitions from FORPRM.

1660	DAW	3-Sep-81
	Use low channels if all the extended ones are taken.

1661	BL	4-Sep-81
	Fix incorrect info coming from TRACE; & illegal instruction return.

1662	DAW	4-Sep-81
	Invent routine %CALU to make error processing easier.

1663	JLC	8-Sep-81
	Output bufferful to magtape to make sure tape mark gets out.
	Fix page-not-there error for RANDIN.

1664	DAW	8-Sep-81
	Don't call DOOPEN twice if DDB's get consolidated at OPENX.

1665	DAW	8-Sep-81
	Replace the antiquated U.TTY hack with a brand new D.TTY hack.

1666	DAW	8-Sep-81
	/MODE:IMAGE implies /FORM:UNF. /FORM:F is a conflict.

1667	JLC	8-Sep-81
	One-word patch to FORMEM, makes lowseg core request work.

1670	DAW	9-Sep-81
	Fix two disk 'append' files open at once.

1671	JLC	9-Sep-81	Q10-6480
	Installed patch to create data pages on disk if they won't
	fit in core, as per request by SIT.

1672	DAW	9-Sep-81
	Missing a check for conflict of RANDOM and no RECORDSIZE.

1673	CDM	9-Sep-81
	Added routines to FORSNG, FORDBL, FORGDB, FORCPX.

1674	DAW	9-Sep-81
	OPEN of LPT: on the -10 got incorrect "?conflict".

1675	DAW	9-Sep-81
	Added checks for device conflicts with modes.

1676	DAW	9-Sep-81
	Fix %OCRLF so it always outputs a CRLF and doesn't use "U".

1677	JLC	10-Sep-81
	Fixed unmapping of unused pages, missing label in MAKDP.
	Use seed and multiplier from version 5A for RAN.

1700	BL	10-Sep-81
	Typo FORTRP/%CALU.

1701	JLC	10-Sep-81
	Setup was wrong for unmapping unused pages.

1702	JLC	10-Sep-81
	Added still more code to handle ref to hole in file.
	Added code to prevent expansion of random file on -10
	by touching file past EOF.

1703	DAW	11-Sep-81
	Fix typing too many CRLF's on an error when TTY file is open.

1704	JLC	11-Sep-81
	Fix T-format bug, was padding with one blank if current pos
	was desired pos. Typo in -10 RDW routine.

1705	JLC	11-Sep-81
	Fix more serious T-format bug, send next char position to
	%SPOS instead of decremented one.

1706	DAW	11-Sep-81
	Change errors around to make them more compatible with V5A,
	more consistant, easier to find in FORERR, easier to create
	documentation from the code, and more informative to the user.

1707	JLC	14-Sep-81
	Edit 1705 broke %IBACK.

1710	JLC	14-Sep-81
	Fix LDIO delimiter bugs.

1711	DAW	15-Sep-81
	Set D%ERR if fatal IOERR even if message not typed.

1712	JLC	15-Sep-81
	Fixed more problems with T-format. Added IRVIR to FORPRM.
	Eliminated D%ERR.

1713	BL	15-Sep-81
	Added 'DFL.3' to FORDBL.

1714	JLC	15-Sep-81
	Remove check for open unit in DIVERT, since a SEQUENTIAL
	file isn't open until you write to it.

1715	DAW	15-Sep-81
	If user specified FORM='FORMATTED' and didn't specify a
	MODE, he got an ?Internal FOROTS error.

1716	JLC	16-Sep-81
	Changed some data and subroutine names in FORIO to avoid
	confusion. Fixed typo caused by the confusing names.

1717	DAW	16-Sep-81
	Implement D%NCLS.

1720	JLC	16-Sep-81
	Undid edit 1714. It was correct as it stood. Added check to
	make sure file is open for formatted I/O.

1721	CDM	16-Sept-81
	Corrected DDIM and GDIM to prevent overflow for call -INF,+INF
	to them.

1722	JLC	16-Sep-81
	Code for IRPOS had to be much more complicated than originally
	envisaged.

1723	DAW	17-Sep-81
	Fix problem with sticky ERR= from OPEN.

1724	BL	17-Sep-81
	Clean up IMSL error messages.

1725	DAW	17-Sep-81
	Better DIALOG parsing error reporting and recovery on TOPS-10.

1726	JLC	17-Sep-81
	Can't use P until there's memory for the stack. Use JSP to
	call routine to make data pages.

1727	JLC	18-Sep-81
	Fix for low-core memory manager. Free list was one word off.

1730	JLC	18-Sep-81
	More fixes to T-format. Speed up format encoding.

1731	DAW	21-Sep-81
	Overflows not filling in the right stuff.

1732	DAW	22-Sep-81
	OPEN (STATUS='NEW') broken on the -20 (again!).

1733	BL	22-Sep-81
	Problem finding beginning of NAMELIST.

1734	DAW	22-Sep-81
	OPEN (STATUS='SCRATCH', ACCESS='RANDOM') on the -20.

1735	DAW	22-Sep-81
	Make TOPS-20 APPEND disk file get EOF if WRITE followed by READ.

1736	JLC	23-Sep-81
	Fix to edit 1733 in namelist.

1737	DAW	23-Sep-81
	Fix error processing for "?REREAD not preceeded by READ" error.

1740	DAW	23-Sep-81
	More REREAD code.

1741	JLC	23-Sep-81
	Give illegal char in data if numerics immediately followed
	by alpha (or other trash) for list-directed and namelist I/O.
	Fixed low segment memory manager.

1742	JLC	23-Sep-81
	Modified OSWTCH to back up the record count for disk, as the
	ENDFILE record is now counted as a real record. For magtape,
	set it to 1, as we are writing a new file.

1743	DAW	24-Sep-81
	Obscure bug in DIALOG scanning caused ?Illegal source/destination"
	when you misspelled a switch and then retyped it correctly.

1744	DAW	24-Sep-81
	Allow user to OPEN negative units. Note: not documented.

1745	JLC	24-Sep-81
	Removed IRPOS again, wasn't necessary after conceptual change
	to RIPOS/SIPOS. Fixed code in namelist/ldio for reading "3*,".
	Made the input and output record buffer lengths full words, as
	well as the input record length. Removed the silly % from the
	TV macro.

1746	CDM	25-Sep-81
	Simple change to DDIM in FORDBL.

1747	DAW	28-Sep-81
	Got rid of FORPRM dependency in DIVERT. Changed FOROP. function
	FO$DIV to do all the work, also added FO$GDV (get diverted unit).
	Added the recent FOROP. function codes to FORPRM.

1750	DAW	28-Sep-81
	Stop after reading in 5 SFDs from DIRECTORY=array.

1751	JLC	28-Sep-81
	Fix unformatted backspace again.

1752	DAW	29-Sep-81
	Minor fixes to DIALOG processing.

1753	DAW	29-Sep-81
	IOERR's and LERR's to type out PC.

1754	DAW	29-Sep-81
	Allow negative generation numbers on TOPS-20.
	(for example, -1 means "next generation of new file").

1755	DAW	1-Oct-81
	Allow user to specify protections <111> in TOPS-10 dialog mode,
	as per V5A.  (i.e. they can be before or after the Path).

1756	JLC	1-Oct-81
	Change memory manager again; TRYHRD now starts at STARTP+1,
	minus number of pages desired.

1757	DAW	2-Oct-81
	Conflict with /READONLY caused "?Ill mem ref".

1760	JLC	5-Oct-81
	Changed elapsed time calc to use system uptime rather
	than time-of-day to prevent operator causing negative
	elapsed time. Changed FORERR to print 2 decimal places.

1761	JLC	5-Oct-81
	Fixed ENDFILE on disk, was not opening file for output,
	so EOFN could not get updated, also fell over if UNFSW
	got called.

1762	DAW	6-Oct-81	Q10-06581
	Fix printing of FORMAT with arrow pointing to wrong place.

1763	DAW	7-Oct-81
	Fatal error if user tries to WRITE into a LINED file.
	It is not supported yet. (in V6).

1764	DAW	7-Oct-81
	TOPS-10 MTASET got %Integer divide check, TAPOP. error 3.

1765	DAW	7-Oct-81
	Make OPEN error display show the non-typing character that
	was illegal.

1766	DAW	7-Oct-81
	Don't type error PC flags as part of the PC.

1767	DAW	8-Oct-81
	Explain with comments the "magic" number 8 in OVERFL.

1770	DAW	8-Oct-81
	If TOPS-10 GALAXY V2 is running, progs that used DISPOSE='PRINT'
	would hang in EW state.

1771	DAW	8-Oct-81
	Missing /LIMIT code for TOPS-10 GALAXY V2 packet.

1772	DAW	8-Oct-81
	TOPS-10 DISPOSE='DELETE' did not release channel.

1773	DAW	8-Oct-81
	Change error name "CMU" to "IEM" - internal error in mem. management

1774	DAW	8-Oct-81
	Instead of getting "?Unexpected TAPOP. error" for typical
	errors, either avoid the error in the first place or
	give a better error message.

1775	JLC	9-Oct-81
	Fix control-Z. Fix tapop being done when it doesn't need to be.
	Fix LSNGET to always return -1 for non-open units.

1776	DAW	9-Oct-81
	Allow modes BINARY,IMAGE,DUMP to be used with TOPS-10 NUL:.

1777	DAW	9-Oct-81
	Don't do FILOP. "releases" without first doing FILOP. "Closes"
	if the file is possibly open.

2000	DAW	9-Oct-81
	1. Fix typo that caused PLOT to fail since unit -7 couldn't be
	   opened.
	2. Get rid of extraneous, unreachable TOPS-10 code.

2001	JLC	13-Oct-81
	At INIHLT, the check to see if the page exists in core
	was wrong, was TXNE, should have been CAIN.

2002	DAW	13-Oct-81
	OPEN 'TTY' with ACCESS='SEQIN' followed by "TYPE" didn't work.

2003	BL	14-Oct-81	Q10-06574
	Change data type "0" from "U" to "I".

2004	DAW	14-Oct-81
	Make sure MODE is identical before consolidating DDB's.

2005	JLC	15-Oct-81
	Reenter code added. Asks the users whether all files are
	to be closed, then goes to user-specified reenter address
	or exits to monitor if none. Fixed random file bugs.
	On -10: update .RBSIZ so that we don't substitute
	a block of zeroes for real data. On -20, keep a record of
	the highest referenced page and unmap unused pages.

2006	JLC	15-Oct-81
	Control-Z change broke DECODE by meddling with IRCNT, which
	should be inviolate before the "device-dependent" call.

2007	JLC	16-Oct-81
	Fixed runtime and elapsed time calcs. Make "temp stack"
	big enough to survive catastrophies.

2010	JLC	19-Oct-81
	Made EOFN and BYTN live on the -10 so we can give QUASAR
	an accurate block count.

2011	DAW	19-Oct-81
	DOOPEN to store EOFN from the .RBSIZ information. Also
	get rid of "FSTAT". Compute number of blocks for QUASAR from
	EOFN and BPW.

2012	JLC	19-Oct-81
	Changed elapsed time calcs yet again.

2013	DAW	19-Oct-81
	Fix TRACE to store "..." at end of string, not into a literal.

2014	AHM/JLC	19-Oct-81
	Fix NAMELIST block description and code for extended addressing.
	Fix NAMELIST check for illegal subscripts.
	Fix unmapping of unused pages not to unmap holes.
	Remove useless referencing of all of core in initialization.
	Changed FORHAK to refer to Z.ERR instead of F.DATA for 1022.

2015	DAW	20-Oct-81
	AC smashed in FORMEM caused problems trying to create .GT. 1
	pages when it had to go virtual.

2016	JLC	20-Oct-81
	SLIST and ELIST fix to differentiate between -66 and -77
	programs.

2017	JLC	21-Oct-81
	Fix 1022 patch in FORHAK, modify F20OTS.CCL and F10OTS.CCL
	to create new PSECT, used only by FORHAK to know the end
	of the F.ERR PSECT.

2020	DAW	21-Oct-81
	Make DATE return the last character as SPACE instead of NULL,
	so it will match a literal generated by the compiler.

2021	JLC	22-Oct-81
	Change A format so that if no field width is specified,
	it uses 5 or 10 for input as well as output to conform
	with the ANSI standard.

2022	DAW	22-Oct-81
	Make TOPS-20 error message better when JFNs run out.

2023	DAW	23-Oct-81
	GALAXY R2 code didn't delete file if DISPOSE='LIST' used.

2024	DAW	26-Oct-81
	ILC is now a fatal error, make it go to "%ABORT" if done.

2025	JLC	26-Oct-81
	Fix elapsed time calcs for the -10 yet again. Fixed FORMEM
	for 1022 folks.

2026	JLC	27-Oct-81
	Fixed RSIZW for LINED files, so they will backspace correctly.

2027	DAW	27-Oct-81
	Rework the GALAXY V2 code to use symbolic names, this allows
	users in the field who have modified QSRMAC to just reassemble
	FOROTS to make /DISPOSE:<queue> work.

2030	JLC	27-Oct-81
	Fix SLISTs and ELISTs to use 1 for a count if the count
	provided is negative or zero.

2031	DAW	27-Oct-81
	Fix smashing AC in FORERR if no symbols loaded.

2032	JLC	29-Oct-81
	Fix KI code for DPMUL.

2033	DAW/JLC	15-Nov-81
	Make R format pad with spaces instead of nulls as in V5A.
	Make fatal error "ILS" go to %ABORT if no ERR= branch.
	Give error if random I/O attempted without an OPEN statement
	(to specify a RECORDSIZE).
	Fix A free format.
	Make "Data in Io list but not in format" go to %ABORT.
	Change names of some global symbols that didn't have "%" in them.
	Make ERR= work with ENCODE/DECODE (again).
	Fix call to %MVBLK in FORMEM to use correct calling sequence.
	Reset "F" in FOROP call to close all files.
	Allow leading spaces in some OPEN args (such as FILE= ).
	Fix incorrect call to mem manager in FOROPN.
	Don't do XSIR% JSYS unless FOROTS is running in a non-zero section;
	otherwise the Release 4 EXEC can get confused.
	Fixed problems in REENTER code.
	Fix dollar format to make T and X format work correctly
	at end of record.

***** End Revision History *****

\
	ENTRY	FOROT%

	INTERN	%POPJ,%POPJ1,%POPJ2
	INTERN	%SAVE1,%SAVE2,%SAVE3,%SAVE4,%SAVE,%ISAVE,%FSAVE
	INTERN	%PUSHT,%POPT,%JPOPT
	INTERN	I.SA
	INTERN	%DDBTAB,%EDDB,U.RERD

	EXTERN	%MEMINI,%TRPINI
IF20,<	EXTERN	%PSIINI	>
IF10,<	EXTERN	%CHMSK   >
	EXTERN	%ABORT
	EXTERN	%FUNCT,%GTBLK,%FREBLK
IFN FTSHR,<
	EXTERN	Z.DATA  >
	SUBTTL	VESTIGIAL JOBDAT

	SEGMENT	CODE

IFN FTSHR,<

;HIGH SEG JOBDAT.  INCLUDED IN TOPS-20 BECAUSE DDT KNOWS ABOUT SYMBOL
;TABLE POINTER, AND TOPS-10 PROGRAMS MIGHT NEED SOME OF THE DATA.  MUST
;START ON A PAGE BOUNDARY AND MUST BE FIRST THING LOADED IN SHARABLE
;FOROTS.

F.HSO::!			;HIGH SEG ORIGIN
F.HSA::	EXP	0		;NO START ADDRESS
F.H41::	HALT			;NO UUOS
F.HCR::	XWD	137,0		;NO LOW SEGMENT
F.HRN::	EXP	0		;FILLED IN BY FORHAK INITIALIZATION
F.HVR::	VER			;VERSION NUMBER
F.HNM::	SIXBIT	'FOROT6'	;PROGRAM NAME
F.HSM::	EXP	0		;SYMBOL PTR, MOVED FROM 116 BY FORHAK
F.HGA::	XWD	F.HSO/1000,0	;HIGH SEG STARTING PAGE NUMBER

>;END FTSHR
	SUBTTL	DISPATCH VECTOR


DEFINE	X (E) <
	IF2,<IFNDEF E'%,<EXTERN E'%>>
IFIDN <E><DBMS>,<PORTAL E'%% ;>
IFIDN <E><FUNCT>,<PORTAL %'E ;>
	PORTAL	E'%
>


FOROT%=1B0+FOROT		;SIGN BIT ON IF FOROTS LOADED WITH PROG
				;IF NOT, LINK DEFINES FOROT%=400010

FOROT:	FORVEC
;TOPS-20 ENTRY VECTOR

IF20,<

%EVEC::	FOROT			;START ADDRESS OF DISPATCH VECTOR
	0			;REENTER ADDRESS
	VER			;VERSION NUMBER

>




;TOPS-10 VERSION NUMBER

IF10,<
	LOC	137
	VER
	RELOC
>


;POP T1 FOR DBMS SO WE LOOK LIKE V5A CALL

DBMS%%:	POP	P,T1		;POP T1, PUSHED IN FORINI
	JRST	DBMS%##		;GO DO WHATEVER DBMS% DOES


IFE FTSHR,<
  FUNCT%==:FUNCT.##		;FOR DBMS 5A
>
IFN FTSHR,<
  FUNCT%==0			;TO KEEP LINK HAPPY
>
	SUBTTL	INIT%	INITIALIZATION

INIT%::
	SETZ	F,		;CLEAR FLAGS

IF10,<
	RESET			;RESET I/O, RESET .JBFF
> ;IF10

IF20,<
	HLRZ	T1,.JBSA	;RESET .JBFF
	MOVEM	T1,.JBFF
>


	PUSHJ	P,MAKDP		;CREATE DATA PAGES

	MOVE	P,[IOWD LPDL,PDL] ;SET UP STACK POINTER
	PUSH	P,['STOP!!']	;FLAG BOTTOM OF STACK FOR TRACEBACK
	PUSH	P,L		;SAVE RETURN ADDRESS FROM RESET.

IF20,<
;DBMS Crock: Save the address of DBPST$, passed to us by RESET
; (Unless it was -1 like it was during most of field test..)

	CAME	15,[-1]
	 MOVEM	15,DBSTP.
>;END IF20

	XMOVEI	T1,-2(L)	;GET START ADDRESS
	MOVEM	T1,I.SA		;SAVE IT FOR TRACEBACK

;GET INITIAL RUNTIME AND TIME OF DAY

IF20,<				
	MOVEI	T1,.FHSLF	;GET RUNTIME FOR THIS FORK
	RUNTM%
	MOVEM	T1,I.RUNTM	;SAVE FOR END-OF-JOB STATISTICS
	TIME%			;GET SYSTEM UP-TIME
	MOVEM	T1,I.DAYTM	;SAVE FOR END OF JOB
>
IF10,<
	SETZ	T1,		;GET RUNTIME FOR THIS JOB
	RUNTIM	T1,
	MOVEM	T1,I.RUNTM	;SAVE
	MOVE	T1,[%CNSUP]	;GET UPTIME IN JIFFIES
	GETTAB	T1,
	  SETZ	T1,
	MULI	T1,^D1000	;GET UPTIME IN JIFFIES*1000
	MOVE	T3,[%CNTIC]	;GET JIFFIES/SEC
	GETTAB	T3,
	 MOVEI	T3,^D60
	ADDI	T1,-1(T3)	;ROUND UP
	DIVI	T1,(T3)		;GET UPTIME IN MILLISECS
	MOVEM	T1,I.DAYTM	;SAVE
>

IF10,<
	HRROI	T1,.GTWCH	;GET ERR MESSAGE CONTROL BITS
	GETTAB	T1,		;IN WATCH TABLE
	  SETZ	T1,
	TLNN	T1,(JW.WMS)	;IF NOT SET,
	  TLO	T1,(JW.WPR+JW.WFL) ;DEFAULT IS PREFIX+FIRST
	TLNE	T1,(JW.WCN)	;CONTINUATION?
	  TLO	T1,(JW.WFL)	;YES, IMPLIES FIRST
	MOVEM	T1,I.MSG	;SAVE FOR FORERR

	MOVE	T1,[%CNVER]	;GET MONITOR VERSION NUMBER
	GETTAB	T1,		; (ONLY KNOWN WAY TO DECIDE WHETHER
	  SETZ	T1,		;  USE-OPEN-CHANNEL FILOP IS IMPLEMENTED)
	MOVEM	T1,I.MVER
>
IF20,<
	SETZM	I.MSG		;DEFAULT ON 20 IS FIRST
>
;GET RUN FILESPEC FOR OVERLAY HANDLER

IF10,<			
	HRROI	T1,.GTRDV	;GET DEVICE WE WERE RUN FROM
	GETTAB	T1,
	  SETZ	T1,
	MOVEM	T1,I.DEV	;SAVE FOR FUNCT.
	HRROI	T1,.GTRFN	;FILE NAME
	GETTAB	T1,
	  SETZ	T1,
	MOVEM	T1,I.FILE
	HRROI	T1,.GTRDI	;PPN
	GETTAB	T1,
	  SETZ	T1,
	MOVEM	T1,I.PPN
	MOVEM	T1,I.PATH+2	;ALSO PPN PART OF FULL PATH

	MOVSI	T2,-5		;GET AOBJN WORD FOR SFD GETTABS
INISFD:	HRROI	T1,.GTRS0(T2)	;GET AN SFD NAME
	GETTAB	T1,
	  AOJA	T2,INISF1	;FAILED, NO SFDS
	JUMPE	T1,.-1		;END OF SFDS, QUIT
	MOVEM	T1,I.PATH+3(T2) ;STORE SFD NAME IN PATH BLOCK
	AOBJN	T2,INISFD	;GET ALL SFDS

INISF1:	SETZM	I.PATH+2(T2)	;PUT ZERO AT END OF LIST
	MOVEI	T1,I.PATH	;GET PATH POINTER IN CASE OF SFDS
	SKIPE	I.PATH+3	;ANY SFDS?
	  MOVEM	T1,I.PPN	;YES, CHANGE PPN TO SFD POINTER

	GETPPN	T1,		;GET PPN
	  JFCL
	MOVEM	T1,G.PPN

> ;IF10

;SET NO COMPATIBILITY PACKAGE
;FOROTS MEMORY MANAGER AND PA1050 DO NOT GET ALONG

IFN FT20UUO,<
 IFN FTSHR,<
	MOVE	T1,[677777,,377777] ;READ IN PA1050 AND DISABLE MEM
	CORE	T1,		;      BOUNDS CHECKING
	  JFCL			;WELL, WE TRIED
	MOVE	T1,[277777,,677777] ;SET .JBHRL CORRECTLY, PA1050 DOESN'T
	MOVEM	T1,.JBHRL
 > ;IFN FTSHR
 IFE FTSHR,<
	MOVE	T1,.JBHRL	;CHECK FOR HIGH SEG
	JUMPE	T1,NOHS		;NONE
	TDO	T1,[777,,777]	;ROUND UP TO PAGE BOUNDARY
	HLRZ	T2,T1		;GET START ADDRESS OF HS
	SUBI	T1,(T2)
	MOVEI	T2,677777	;GET 700000-ORIGIN-1 = LENGTH OF BIG HS
	SUBI	T2,(T1)
	PUSH	P,T2		;SAVE IT
	MOVEI	T1,-1(T1)	;GET 677777,,ORIGIN-1
	HRLI	T1,677777
	CORE	T1,		;MAKE LOWSEG+HIGHSEG GO FROM 0 TO 677777
	  JFCL			; (WELL, MAYBE NOT)
	POP	P,T1		;SET .JBHRL TO 700000-ORG-1,,677777
	HRLI	T1,677777
	MOVSM	T1,.JBHRL
	JRST	HSSKP

NOHS:	MOVEI	T1,677777	;IF NO HIGH SEG, GROW LOW SEG TO ALL 
	CORE	T1,		; MEMORY UP TO PA1050
	  JFCL

HSSKP:
 > ;IFE FTSHR
> ;IFN FT20UUO

IF20,<
 IFE FT20UUO,<
	MOVEI	T1,.FHSLF	;SET NO UUO SIMULATION
	SETO	T2,
	SCVEC%
 >
>

;INITIALIZE OTHER STUFF

IF10,<
	MOVSI	T1,377774	;MARK ALL I/O CHANNELS AVAILABLE
	MOVEM	T1,%CHMSK

	MOVE	T1,[%CNHXC]	;GET MAX EXTENDED CHANNEL
	GETTAB	T1,
	  SETZ	T1,		;NONE
	CAILE	T1,17		;ARE THERE ANY?
	  TXO	F,F%XCHAN	;YES, REMEMBER TO USE THEM
> ;IF10

	XMOVEI	T1,.		;Check for non-zero section
	TLNE	T1,-1		;Are we running in non-zero section?
	 SETOM	I.EXT		;Yes, set flag

	PUSHJ	P,%MEMINI	;INITIALIZE CORE MANAGER

IF20,<
	RESET%			;RESET I/O
				;MUST BE AFTER MEMINI SO FILE PAGES GET
				;UNMAPPED
>

	SETZM	BEGZER		;CLEAR DATA THAT MUST BE ZERO ON RESTART
	MOVE	T1,[BEGZER,,BEGZER+1]
	BLT	T1,ENDZER
IF20,<
	PUSHJ	P,%PSIINI	;INITIALIZE PSI SYSTEM
>
	PUSHJ	P,%TRPINI	;INITIALIZE TRAP HANDLER

IF10,<
	MOVSI	T1,'TTY'	;GET IO INDEX OF CONTROLLING TERM
	IONDX.	T1,UU.PHY
	  SETZ	T1,
	MOVEM	T1,TT.DES

	HRROI	T1,.GTLIM	;GET BATCH STATUS
	GETTAB	T1,
	  SETZ	T1,
	TXNN	T1,JB.LBT
	  TDZA	T1,T1
	SETO	T1,
	MOVEM	T1,I.BAT
> ;IF10

IF20,<
	HRROI	T1,DEVTMP	;CONVERT TTY: DESIGNATOR TO STRING
	MOVEI	T2,.CTTRM
	DEVST%
	  ERCAL	ERRIJE
	MOVEI	T2,":"		;END WITH COLON FOR GTJFN
	IDPB	T2,T1
	MOVX	T1,GJ%PHY+GJ%SHT ;NOW A PHYSICAL-ONLY GTJFN
	HRROI	T2,DEVTMP
	GTJFN%
	  ERCAL	ERRIJE
	PUSH	P,T1
	DVCHR%			;AND CONVERT THAT TO A REAL DEV DESIGNATOR
	  ERCAL	ERRIJE
	MOVEM	T1,TT.DES	;STORE DEV DESIGNATOR OF WHERE ERRORS GO
	POP	P,T1		;RELEASE THE JFN
	RLJFN%
	  ERCAL	ERRIJE

	SETO	T1,		;GET BATCH STATUS
	HRROI	T2,T4
	MOVEI	T3,.JIBAT
	GETJI%
	  ERCAL	ERRIJE
	MOVEM	T4,I.BAT
> ;IF20

	MOVEM	F,I.FLAGS	;REMEMBER INITIAL FLAGS
	JRST	%POPJ1		;RETURN FROM RESET., SKIP ARG
	SEGMENT	DATA

PDL:	  BLOCK	LPDL		;STACK

I.FLAGS:: BLOCK	1		;INITIAL FLAGS

I.RUNTM:: BLOCK	1		;INITIAL RUNTIME
I.DAYTM:: BLOCK	1		;INITIAL TIME AND DATE

I.SA:	  BLOCK	1		;START ADDRESS
I.BAT::	  BLOCK	1		;BATCH STATUS, -1 IF BATCH JOB
I.MSG::   BLOCK	1		;ERR MESSAGE VERBOSITY
I.EXT:: BLOCK 1			;-1= FOROTS is running in a non-zero section
I.XSIR::  BLOCK	1		;MONITOR ALLOWS XSIR/XRIR FORMS OF PSI JSYSES
IFN FT20,<
DBSTP.::	BLOCK	1	;Address of DBPST$, or 0
>

IF20,<
DEVTMP:	BLOCK	5		;TEMP FOR DEVICE NAME OF CONTROLLING TTY
>

IF10,<
G.PPN::	BLOCK	1		;MY PPN
I.DEV::	  BLOCK	1		;DEVICE WE WERE RUN FROM
I.FILE::  BLOCK	1		;FILENAME
I.PPN::   BLOCK	1		;PPN (EITHER STRAIGHT PPN OR POINTER TO I.PATH)
I.PATH:	  BLOCK	9		;WHOLE PATH
I.MVER:: BLOCK	1		;MONITOR VERSION NUMBER
>

BEGZER:!			;FOLLOWING DATA IS ZEROED ON RESTART

	 BLOCK	-MINUNIT	;DDB ADDRESSES OF NEGATIVE UNITS
%DDBTAB: BLOCK	1+MAXUNIT	;		  POSITIVE UNITS

%EDDB:	BLOCK	1		;ENCODE/DECODE DDB ADDRESS
U.RERD:	BLOCK	1		;UNIT NUMBER FOR REREAD OPERATIONS
U.ERR::	BLOCK 1			;UNIT BLOCK ADDR. OF ERROR-MESSAGE UNIT, IF SET
D.TTY:: BLOCK 1			;DDB OF CONTROLLING TTY, IF OPEN
TT.DES:: BLOCK 1		;DESIGNATOR OF CONTROLLING TTY

%APRCT:: BLOCK	.ETNUM		;COUNT OF APR ERRORS, BY TYPE
%APRLM:: BLOCK	.ETNUM		;LIMIT OF ERROR BEFORE ERR MSG SUPPRESSED
%APRSB:: BLOCK	.ETNUM		;ROUTINE TO CALL ON APR TRAP

FMT.LS:: BLOCK	FMTN		;ENCODED FORMAT POINTERS

I.PID::	BLOCK	1		;MYPID

G.FERR:: BLOCK	1		;ERR= BRANCH SPECIFIED IN THIS IO STATEMENT

%LEVTAB:: BLOCK	3		;PSI TABLES: LEVTAB
%CHNTAB:: BLOCK	^D36		;	     CHNTAB
%PC1::	  BLOCK	2		;LEVEL 1 PC, FLAGS
%PC2::	  BLOCK	2		;LEVEL 2 PC, FLAGS
%PC3::	  BLOCK	2		;LEVEL 3 PC, FLAGS

ENDZER==.-1

G.EFS::	BLOCK	1		;NONZERO IF [ENTER CORRECT FILESPECS]
				;ALREADY TYPED IN THIS STATEMENT

G.PRL::	BLOCK	1		;PROMPT STRING LENGTH
IF20,<
G.PRP:: BLOCK	1		;PROMPT STRING BYTE POINTER
G.PRMPT:: BLOCK	15		;PROMPT STRING, UP TO 79 CHARS

G.LJE::	BLOCK	1		;LAST JSYS ERROR NUMBER
> ;IF20

SVP1T:	BLOCK	1		;Holds P1 temporarily
				; for %SAVEn routines
	SUBTTL	AC SAVE ROUTINES

	SEGMENT	CODE

;ROUTINES TO SAVE P1-P4

%SAVE1:	MOVEM	P1,SVP1T	;Save P1 (temp)
	EXCH	P1,0(P)		;Save P1, get return addr
	PUSHJ	P,SAVJMP
	 SOS	-1(P)
	SOS	-1(P)
	JRST	RET1

%SAVE2:	MOVEM	P1,SVP1T	;Save P1
	EXCH	P1,0(P)		;Save p1, get return addr
	PUSH	P,P2		;Save p2
	PUSHJ	P,SAVJMP
	 SOS	-2(P)
	SOS	-2(P)
	JRST	RET2

%SAVE3:	MOVEM	P1,SVP1T	;Save P1
	EXCH	P1,0(P)		;Save P1, get return addr
	PUSH	P,P2		;Save P2
	PUSH	P,P3		;Save P3
	PUSHJ	P,SAVJMP
	 SOS	-3(P)
	SOS	-3(P)
	JRST	RET3

%SAVE4:	MOVEM	P1,SVP1T	;Save P1
	EXCH	P1,0(P)		;Save P1, get return addr
	PUSH	P,P2
	PUSH	P,P3
	PUSH	P,P4
	PUSHJ	P,SAVJMP
	 SOS	-4(P)		;Signal single return
	SOS	-4(P)		; And double return
RET4:	POP	P,P4
RET3:	POP	P,P3
RET2:	POP	P,P2
RET1:	POP	P,P1
	AOS	(P)		;Account for SOS 's
	AOS	(P)		; . .
	POPJ	P,		;Return to caller's caller.

SAVJMP:	HRLI	P1,(1B0)	;Make IFIW
	EXCH	P1,SVP1T	;Save ret inst, restore P1
	JRST	@SVP1T		;Jump to continue routine

%POPJ2:	AOS	(P)		;DOUBLE SKIP RETURN
%POPJ1:	AOS	(P)		;SINGLE SKIP
%POPJ:	POPJ	P,		;NONSKIP
;ROUTINES TO PUSH AND POP ALL T ACS

;Called by PUSHJ P,%PUSHT

%PUSHT:	PUSH	P,T1		;SAVE T1-T5
	PUSH	P,T2
	PUSH	P,T3
	PUSH	P,T4
	PUSH	P,T5
	EXCH	T0,-5(P)	;SAVE T0, GET RETURN ADDRESS
	PUSH	P,T0		;SAVE RETURN ADDRESS
	MOVE	T0,-6(P)	;RESTORE T0
	POPJ	P,		;RETURN


;Called by PUSHJ P,%POPT

%POPT:	POP	P,T0		;GET RETURN ADDRESS
	POP	P,T5		;RESTORE T5-T1
	POP	P,T4
	POP	P,T3
	POP	P,T2
	POP	P,T1
	EXCH	T0,(P)		;RESTORE T0
	POPJ	P,		;RETURN

;Called by PJRST %JPOPT

%JPOPT:	POP	P,T5		;RESTORE T5-T0
	POP	P,T4
	POP	P,T3
	POP	P,T2
	POP	P,T1
	POP	P,T0
	POPJ	P,		;RETURN
;ROUTINE TO SAVE USER'S REGISTERS AND COPY ARG ADDRESSES
;
;COPIES THE ARG LIST, RESOLVING INDEXING AND INDIRECTION.

%SAVE:	POP	P,RETADR	;REMOVE RETURN ADDRESS FROM STACK
	POP	P,1		;RESTORE AC 1, SAVED BY FORINI
	MOVEM	16,U.ACS+16	;SAVE 0-16
	MOVEI	16,U.ACS
	BLT	16,U.ACS+15
	MOVE	16,U.ACS+16

	SETZM	CPYBLK		;NO COPIED ARGS TO DEALLOCATE YET
	HLRE	0,-1(L)		;Get arg count (-n)

;Here with AC 0 = -number of args
SAVEX:	HRLZM	0,ARGLST-1	;Store in local area
	JUMPGE	0,NOARGS	;Jump if no args for this FN
	MOVEM	0,SVNARG	;Save -# of args.
	CAMGE	0,[-MAXARG]	;See if all will fit in our block
	  JRST	TOOMNY		;NO, GO ALLOCATE A BLOCK FOR THEM

	XMOVEI	0,ARGLST	;POINT TO LOCAL ARG BLOCK
	MOVEM	0,AFAL		;Save address-of-FOROTS-arg-list
	XMOVEI	0,ARGLS2	;Point to local place to save types
	MOVEM	0,AFALTP	;Save address-of-FOROTS-arg-types

;Here with L = 30-bit address of user's arg list.
;Copy from the user's arglist to ours.
SAVEY:	MOVEM	T1,ADRUAC	;Save an ac
	XMOVEI	T1,U.ACS	;Get 30-bit address of saved acs.
	EXCH	T1,ADRUAC	;Restore user's ac1

;Transfer one arg.
;L points to the arg-word.
ARGXFR:	MOVE	0,(L)		;GET AN ARG WORD
	MOVEM	0,@AFALTP	;Store type bits
	TXZ	0,ARGKWD	;Clear keyword field
	TXZN	0,ARGTYP	;Is this an "immediate mode" arg?
	 JRST	[XMOVEI 0,@0	;Yes, get real arg value
		 JRST ARGXF2]	;And leave it alone
	TXNN	0,<1B0!1B1!1B13!17B17> ;Skip if indirection or indexing
	 JRST	[TRNE 0,777760	;Arg in ac?
		 JRST ARGXF0	;No, do XMOVEI
		ANDI 0,17	;Just save address (ac)
		JRST	ARGXF1]	;Relocate to saved acs and store adr.
ARGXF0:	XMOVEI	0,@0		;Get real arg address
	CAIG	0,17		;Arg in ac?
ARGXF1:	 ADD	0,ADRUAC	;Yes, relocate to saved acs
ARGXF2:	MOVEM	0,@AFAL		;Store address part of arg.
	AOSL	SVNARG		;More args?
	 JRST	NOARGS		;No, done
	AOS	AFAL		;Bump FOROTS arg list address
	AOS	AFALTP		;Bump FOROTS arg-type list address
	AOJA	L,ARGXFR	;Move whole list

;Either no args, or all args have been processed.
NOARGS:	SKIPN	L,CPYBLK	;POINT TO COPIED ARG LIST
	  MOVEI	L,ARGLST
	HLL	L,-1(L)		;PUT COUNT IN LH

;Setup %LTYPE
	HLRE	0,L		;Get -count of args
	MOVM	0,0		;This is offset if lots of args..
	CAIG	0,MAXARG	;Less than max?
	 MOVEI	0,ARGLS2-ARGLST	;Yes, this is the offset.
	HRLI	0,L		;Make n(L)
	TXO	0,IFIW		;Remember, it's in the same section
NOARGX:	MOVEM	0,%LTYPE		;Store %LTYPE word
	MOVE	F,I.FLAGS	;INITIALIZE FLAG REGISTER
	MOVEM	P,U.PDL		;SAVE P FOR ERROR CUTBACK
	SETZM	G.EFS		;CLEAR GLOBAL FLAG (FOR %IOERR)
	PUSHJ	P,@RETADR	;RETURN TO CALLER

	SKIPE	T1,CPYBLK	;DEALLOCATE COPIED ARGS
	  PUSHJ	P,[SOJA T1,%FREBLK] ;IF ANY
	MOVSI	16,U.ACS	;BLT FROM SAVED TO REAL ACS
	BLT	16,16		;RESTORE 2-16
	POPJ	P,		;RETURN
;HERE WHEN THE PROGRAM SENDS MORE THAN MAXARG ARGUMENTS.  ALLOCATE A
;BLOCK FOR THEM, COPY THEM INTO IT, RESOLVING INDEXING AND INDIRECTION,
;AND POINT L AT THE COPIED ARG LIST.  DEALLOCATE THE BLOCK BEFORE RETURNING.

;0= -# args
;L= ptr to user's arg list
TOOMNY:	MOVN	T1,0		;GET +count
	LSH	T1,2		;Another block for types
	ADDI	T1,1		;ONE MORE FOR COUNT WORD
	PUSH	P,0		;Save ac0
	PUSHJ	P,%GTBLK	;ALLOCATE A BIG ENOUGH BLOCK
	POP	P,0		;Restore ac0
	HRLZM	0,(T1)		;STORE COUNT WORD (-n,,0)
	XMOVEI	0,1(T1)		;POINT PAST COUNT WORD
	HRRZM	0,CPYBLK	;SAVE (18-BIT) ADDRESS FOR DEALLOCATION
	MOVEM	0,AFAL		;Save address of FOROTS's arg list
	SUB	0,SVNARG	;Get address of type list
	MOVEM	0,AFALTP	;Save address of FOROTS's arg-type list

	MOVE	T1,U.ACS+T1	;PUT T1 BACK
	JRST	SAVEY		;RETURN



	SEGMENT	DATA

	 BLOCK	1		;ARG COUNT
ARGLST: BLOCK	MAXARG		;COPY OF ARG LIST WITHOUT INDEX OR INDIRECT BITS
ARGLS2:	BLOCK	MAXARG		;Arg list type, keyword fields
CPYBLK:	BLOCK	1		;POINTER TO ALLOCATED ARGLST
ADRUAC:	BLOCK	1		;30-bit address of "U.ACS"
AFAL:	BLOCK	1		;Address of FOROTS's arg list
AFALTP:	BLOCK	1		;Adresss of FOROTS's arg-type list
SVNARG:	BLOCK	1		;Saved -number of args (used as counter).
%LTYPE:: BLOCK	1		;MOVE @%LTYPE to get arg keyword and type bits
				; when L points to the arg you want.
U.ACS:: BLOCK	17		;STORAGE FOR REGISTERS 0-16
U.PDL::	BLOCK	1		;STACK POINTER FOR ERRORS
RETADR:	BLOCK	1		;TEMP FOR RETURN ADDRESS
	SEGMENT	CODE
;ROUTINE TO SAVE ACS FOR IOLST.
;ALMOST IDENTICAL, BUT COMPILER DOES NOT PROVIDE ARG COUNT FOR IOLST, SO
;MUST GO THROUGH FIRST AND COUNT ARG LIST

%ISAVE:	POP	P,RETADR	;REMOVE RETURN ADDRESS FROM STACK
	POP	P,1		;RESTORE 1
	MOVEM	16,U.ACS+16	;SAVE 0-16
	MOVEI	16,U.ACS
	BLT	16,U.ACS+15
	MOVE	16,U.ACS+16

	HLRE	0,-1(L)		;GET ARG COUNT, IF THE COMPILER PROVIDED ONE
	JUMPL	0,SAVEX		;IT DID, GO USE IT
	SETO	0,		;Count args

ISAVEL:	SKIPN	1,(L)		;GET AN ARG
	  JRST	ISAVEE		;ZERO MEANS END OF LIST
	CAMN	1,[004000000000] ;End of IO arg list?
	 JRST	ISAVEE		;Yes
	SUBI	0,1		;Count args (0= -number of args)
	AOJA	L,ISAVEL	;Bump arg pointer and loop

ISAVEE:	MOVE	L,U.ACS+L	;RESTORE POINTER TO LIST
	MOVE	1,U.ACS+1	;AND AC 1
	JRST	SAVEX		;GO PROCEED LIKE NORMAL LIST


;ROUTINE TO SAVE ACS FOR FIN.
;ALMOST IDENTICAL AGAIN, BUT L HASN'T BEEN SET UP

%FSAVE:	POP	P,RETADR	;REMOVE RETURN ADDRESS FROM STACK
	POP	P,1		;RESTORE 1
	MOVEM	16,U.ACS+16	;SAVE 0-16
	MOVEI	16,U.ACS
	BLT	16,U.ACS+15
	MOVE	16,U.ACS+16

	MOVEI	L,ARGLST	;ZERO ARGS, STARTING AT ARGLST
	SETZM	CPYBLK		;NOTHING TO DEALLOCATE
	MOVSI	0,L		;0 = 0(L)
	JRST	NOARGX		;JOIN COMMON CODE
	SUBTTL	GLOBAL CONSTANTS



%CRLF::	ASCIZ	/
/

IF20,<
ERRIJE:	;ERR	(IJE,?,"Impossible" JSYS error at $P - $J,,%HALT)
	$ECALL	IJE,%HALT
>

%HALT::				;ERROR HALT, DON'T TOUCH ANYTHING
IF10,<
	EXIT	1,
>
IF20,<
	HALTF%
>
	JRST	.-1

;IF TOPS-20, CREATING DATA PAGES IS RELATIVELY EASY

IF20,<
MAKDP:	POPJ	P,
>;END IF20


;IF TOPS-10 AND NON-SHARE, ALSO EASY

IF10,<
IFE FTSHR,<
MAKDP:	POPJ	P,
>>;END IF10 & IFE FTSHR


;IF TOPS-10 SHARABLE FOROTS, MAKE DATA PAGES

IF10,<
IFN FTSHR,<
MAKDP:	MOVEI	T2,1		;SET LENGTH OF PAGE. ARG BLOCK
	MOVEI	T3,F.DATA/1000	;GET FIRST PAGE TO CREATE
	MOVEI	T4,<Z.DATA-F.DATA+777>/1000 ;GET NUMBER OF PAGES TO CREATE
INILP:	MOVE	T1,[.PAGCD,,T2]	;SET TO CREATE PAGE
	PAGE.	T1,		;DO IT
	  JRST	INIHLT		;CAN'T
INILP1:	ADDI	T3,1		;BUMP TO NEXT PAGE
	SOJG	T4,INILP	;CREATE ALL PAGES
	POPJ	P,


INIHLT:
	CAIN	T1,PAGCE%	;PAGE EXISTS?
	  JRST	  INILP1	;  YES, OK
	TXO	T3,PA.GCD	;NO. TRY CREATING ON DISK
	MOVE	T1,[.PAGCD,,T2]
	PAGE.	T1,
	 JRST	FATMEM		;REALLY CAN'T
	JRST	INILP1		;AND CONTINUE ON DISK

FATMEM:	OUTSTR	[ASCIZ /? Insufficient memory for initialization
/]
	JRST	%HALT

>>;END IF10 & IFN FTSHR

	PURGE	$SEG$
	END