There are 27 other files named forots.mac in the archive. Click here to see a list.
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
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
***** Begin Revision History *****
1100 CKS 12-MAR-79
1101 CKS 20-Mar-80
Only give truncated-record warning once per unit
1102 CKS 20-Mar-80
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
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
1112 CKS 17-Apr-80
Correct off-by-1 bug in filename move, results in an extra char used
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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.
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
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
1722 JLC 16-Sep-81
Code for IRPOS had to be much more complicated than originally
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
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
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
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
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
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 *****
IF20,< EXTERN %PSIINI >
IF10,< EXTERN %CHMSK >
EXTERN Z.DATA >
SUBTTL VESTIGIAL JOBDAT
;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
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
SUBTTL DISPATCH VECTOR
DEFINE X (E) <
IF2,<IFNDEF E'%,<EXTERN E'%>>
IFIDN <E><DBMS>,<PORTAL E'%% ;>
IFIDN <E><FUNCT>,<PORTAL %'E ;>
FOROT%=1B0+FOROT ;SIGN BIT ON IF FOROTS LOADED WITH PROG
;IF NOT, LINK DEFINES FOROT%=400010
;TOPS-20 ENTRY VECTOR
%EVEC:: FOROT ;START ADDRESS OF DISPATCH VECTOR
0 ;REENTER ADDRESS
VER ;VERSION NUMBER
;TOPS-10 VERSION NUMBER
;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
FUNCT%==:FUNCT.## ;FOR DBMS 5A
FUNCT%==0 ;TO KEEP LINK HAPPY
SUBTTL INIT% INITIALIZATION
SETZ F, ;CLEAR FLAGS
RESET ;RESET I/O, RESET .JBFF
HLRZ T1,.JBSA ;RESET .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.
;DBMS Crock: Save the address of DBPST$, passed to us by RESET
; (Unless it was -1 like it was during most of field test..)
XMOVEI T1,-2(L) ;GET START ADDRESS
MOVEM T1,I.SA ;SAVE IT FOR TRACEBACK
;GET INITIAL RUNTIME AND TIME OF DAY
MOVEI T1,.FHSLF ;GET RUNTIME FOR THIS FORK
MOVEM T1,I.RUNTM ;SAVE FOR END-OF-JOB STATISTICS
TIME% ;GET SYSTEM UP-TIME
MOVEM T1,I.DAYTM ;SAVE FOR END OF JOB
SETZ T1, ;GET RUNTIME FOR THIS JOB
MOVEM T1,I.RUNTM ;SAVE
MOVE T1,[%CNSUP] ;GET UPTIME IN JIFFIES
MULI T1,^D1000 ;GET UPTIME IN JIFFIES*1000
MOVE T3,[%CNTIC] ;GET JIFFIES/SEC
ADDI T1,-1(T3) ;ROUND UP
DIVI T1,(T3) ;GET UPTIME IN MILLISECS
MOVEM T1,I.DAYTM ;SAVE
HRROI T1,.GTWCH ;GET ERR MESSAGE CONTROL BITS
GETTAB T1, ;IN WATCH TABLE
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)
SETZM I.MSG ;DEFAULT ON 20 IS FIRST
;GET RUN FILESPEC FOR OVERLAY HANDLER
HRROI T1,.GTRDV ;GET DEVICE WE WERE RUN FROM
MOVEM T1,I.DEV ;SAVE FOR FUNCT.
HRROI T1,.GTRFN ;FILE NAME
HRROI T1,.GTRDI ;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
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
;SET NO COMPATIBILITY PACKAGE
;FOROTS MEMORY MANAGER AND PA1050 DO NOT GET ALONG
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
> ;IFN 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
MOVEI T2,677777 ;GET 700000-ORIGIN-1 = LENGTH OF BIG HS
PUSH P,T2 ;SAVE IT
MOVEI T1,-1(T1) ;GET 677777,,ORIGIN-1
CORE T1, ;MAKE LOWSEG+HIGHSEG GO FROM 0 TO 677777
JFCL ; (WELL, MAYBE NOT)
POP P,T1 ;SET .JBHRL TO 700000-ORG-1,,677777
NOHS: MOVEI T1,677777 ;IF NO HIGH SEG, GROW LOW SEG TO ALL
CORE T1, ; MEMORY UP TO PA1050
> ;IFE FTSHR
> ;IFN FT20UUO
MOVEI T1,.FHSLF ;SET NO UUO SIMULATION
;INITIALIZE OTHER STUFF
MOVSI T1,377774 ;MARK ALL I/O CHANNELS AVAILABLE
MOVE T1,[%CNHXC] ;GET MAX EXTENDED CHANNEL
SETZ T1, ;NONE
CAILE T1,17 ;ARE THERE ANY?
TXO F,F%XCHAN ;YES, REMEMBER TO USE THEM
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
RESET% ;RESET I/O
;MUST BE AFTER MEMINI SO FILE PAGES GET
SETZM BEGZER ;CLEAR DATA THAT MUST BE ZERO ON RESTART
PUSHJ P,%PSIINI ;INITIALIZE PSI SYSTEM
PUSHJ P,%TRPINI ;INITIALIZE TRAP HANDLER
MOVSI T1,'TTY' ;GET IO INDEX OF CONTROLLING TERM
HRROI T1,.GTLIM ;GET BATCH STATUS
HRROI T1,DEVTMP ;CONVERT TTY: DESIGNATOR TO STRING
MOVEI T2,":" ;END WITH COLON FOR GTJFN
MOVX T1,GJ%PHY+GJ%SHT ;NOW A PHYSICAL-ONLY GTJFN
DVCHR% ;AND CONVERT THAT TO A REAL DEV DESIGNATOR
MOVEM T1,TT.DES ;STORE DEV DESIGNATOR OF WHERE ERRORS GO
POP P,T1 ;RELEASE THE JFN
SETO T1, ;GET BATCH STATUS
MOVEM F,I.FLAGS ;REMEMBER INITIAL FLAGS
JRST %POPJ1 ;RETURN FROM RESET., SKIP ARG
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
DBSTP.:: BLOCK 1 ;Address of DBPST$, or 0
DEVTMP: BLOCK 5 ;TEMP FOR DEVICE NAME OF CONTROLLING TTY
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
G.EFS:: BLOCK 1 ;NONZERO IF [ENTER CORRECT FILESPECS]
;ALREADY TYPED IN THIS STATEMENT
G.PRL:: BLOCK 1 ;PROMPT STRING LENGTH
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
SVP1T: BLOCK 1 ;Holds P1 temporarily
; for %SAVEn routines
SUBTTL AC SAVE ROUTINES
;ROUTINES TO SAVE P1-P4
%SAVE1: MOVEM P1,SVP1T ;Save P1 (temp)
EXCH P1,0(P) ;Save P1, get return addr
%SAVE2: MOVEM P1,SVP1T ;Save P1
EXCH P1,0(P) ;Save p1, get return addr
PUSH P,P2 ;Save p2
%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
%SAVE4: MOVEM P1,SVP1T ;Save P1
EXCH P1,0(P) ;Save P1, get return addr
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
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
EXCH T0,(P) ;RESTORE T0
POPJ P, ;RETURN
;Called by PJRST %JPOPT
%JPOPT: POP P,T5 ;RESTORE T5-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
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
HLL L,-1(L) ;PUT COUNT IN LH
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
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
;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
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, ;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 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 /
ERRIJE: ;ERR (IJE,?,"Impossible" JSYS error at $P - $J,,%HALT)
%HALT:: ;ERROR HALT, DON'T TOUCH ANYTHING
;IF TOPS-20, CREATING DATA PAGES IS RELATIVELY EASY
MAKDP: POPJ P,
;IF TOPS-10 AND NON-SHARE, ALSO EASY
MAKDP: POPJ P,
>>;END IF10 & IFE FTSHR
;IF TOPS-10 SHARABLE FOROTS, MAKE DATA PAGES
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
CAIN T1,PAGCE% ;PAGE EXISTS?
JRST INILP1 ; YES, OK
TXO T3,PA.GCD ;NO. TRY CREATING ON DISK
JRST FATMEM ;REALLY CAN'T
JRST INILP1 ;AND CONTINUE ON DISK
FATMEM: OUTSTR [ASCIZ /? Insufficient memory for initialization
>>;END IF10 & IFN FTSHR