1
0
mirror of https://github.com/PDP-10/stacken.git synced 2026-03-02 17:45:26 +00:00
Files
Lars Brinkhoff 6e18f5ebef Extract files from tape images.
Some tapes could not be extracted.
2021-01-29 10:47:33 +01:00

7277 lines
226 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE PIP V.033D(546)
SUBTTL VJC/PMH/AK-DAG/DMN/JHT/DLC/MD/LCR/MHK/CGN/RL/MRB/KMR 15-AUG-85
;PERIPHERAL INTERCHANGE PROGRAM
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1980,1984,1985,1986.
;ALL RIGHTS RESERVED.
;
;
;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.
VPIP==33 ;VERSION NUMBER
VUPDATE==4 ;DEC UPDATE LEVEL
VEDIT==546 ;EDIT NUMBER
VCUSTOM==0 ;NON-DEC UPDATE LEVEL
SUBTTL REVISION HISTORY
;
;
; EDIT # FUNCTION
; ==== ========
;
; 124 IMPLEMENTES (DX) FACILITY
; 125 ALLOWS USER TO CLEAR DECTAPE ID
; 126 FIXES LOSE OF 662ND. CHAR IN LINE WHEN USING /T
; 127 CORRECTS RETURN ADDRESS FROM DERR5A WHEN NO UFD
; 130 CORRECTS THE PROTECTION CODE ERROR WHEN UFD IS
; PROTECTED BUT FILE ISN'T AND USER EXPLICITLY TYPES
; FILE NAME (I.E. */X_DSK:FILE.MAC[10,1])
; 131 STOPS TEMPORARY PPN FROM BECOMING PERMANENT
;
;VERSION 33A
;
; 132 DATE75 HACK (BY DAVE NIXON)
; 133 PREVENTS "?NO FILE NAMED" FROM BEING TYPED 4
; TIMES. FIX EXTRACTED FROM 33A WHERE IT WAS
; ALREADY IMPLEMENTED.
; 134 MAKE PIP UNDERSTAND AND USE DEVICES 'OLD',
; 'NEW' AND 'LIB
; 135 PREVENTS TRANSLATION OF CHARACTERS TO ^CHAR+100
; IF OUTPUT TO TTY
; 136 HELPS PREVENTION OF LINE SEQUENCE NUMBER
; WHEN LAST CHARACTER OF A BLOCK
;
; 137 ACCOMMODATES FOR POSSIBLE SKIP RETURN AT
; DSKDIR+2 FOR THE MONITOR CALL GETPPN
;
; 140 ALLOWS MULTIPLE FILES TO BE SEQUENCED CORRECTLY
; IF A NON-SEQUENCED FILE FOLLOWS A SEQUENCED FILE(SPR #12349)
;
; 141 PREVENT PRIV'D JOB FROM ZEROING SYS: UNINTENTIONALLY
; SPRS 12984,13318
; AREAS AFFECTED: OMOD1, DTCLR, DSKDIR
;
; 142 CLEAR TAB SEEN FLAG BEFORE GOING TO GET FOR THE FIRST TIME.
; OTHERWISE IF THE FIRST TAB OF A FILE IS AT A TAB STOP,
; AND THE /W SWITCH IS USED, THE TAB WOULD NOT BE REPLACED
; WITH A BLANK.
; SPRS 12238,13123
; AREA AFFECTED: GETT8
;
;
; 143 FIX TO EDIT 142. EDIT 142 CLEARED THE WRONG
; BITS SO MOST SWITCHES WOULDN'T WORK.
; AREA AFFECTED: GETT8
;
; 144 PREVENTS PIP FROM LOOPING ON CCL ENTRY IF
; NO CMD FILE EXISTS
;
; 145 MAKES PIP LOOK IN CORRECT UFD WHEN THERE IS A
; PPN ON OUTPUT SIDE OF FILE SPEC
;
; 146 MAKES PIP ABLE TO COPY FROM TMPCOR TO TMPCOR
;
; 147 PREVENTS PIP FROM RENAMING OR DELETING FROM
; ANOTHER PPN UNLESS EXPLICITLY SPECIFIED
; (PREVENTS ?AMBIGUOUS MESSAGE WHEN FILES WITH
; SAME NAME.EXT ARE IN USER'S PPN AND LIB.)
;
; 150 MAKES PIP DO PHYSICAL-ONLY OPEN SO THERE IS NO
; AMBIGUITY BETWEEN PHYS & LOG FILE STRUCTURES
;
; 151 FIX EDIT 150. DO A PHYSICAL-ONLY OPEN ONLY WHEN
; THE DEVICE IS GENERIC DISK. THIS MAKES /L FIND ALL
; FILES PROPERLY AND PREVENTS ?AMBIGUOUS FOR /D AND /R
; IF WE HAVE .AS DSKA DSKB. CORRECTION TO SPR 13541.
; 28-SEP-74, JNT.
;
; 152 CHECK FOR SOURCE DEVICE SPECIFICATION ON A DELETE
; OR RENAME AND PRINT ERROR IF THERE IS. SPR 13939.
; 26-SEP-74, JNT.
;
; 153 KEEP THE FILE NAME AND EXTENSION UNDER CONTROL.
; DON'T ALLOW ".FOO" TO FIND A FILE "FOO".
; DON'T ALLOW "UFD[P,PN]" TO FIND "[P,PN].UFD".
; NO SPR. 29-SEP-74, JNT.
;
; 154 MAKE /C COUNT LOWER CASE CHARACTERS AND ESCAPES COUNT
; AS PRINTING CHARACTERS, INSTEAD OF JUST SPACE THRU ^.
; SPR'S 14,285 & 14,308. 09-OCT-74, JNT.
;
; 155 CORRECT 133 TO ELIMINATE LOOP ON /D OR /R WHEN
; FILENAME AND EXTENSION ARE NULL, E.G. DSK:/D=
; NO SPR. 10-OCT-74, JNT.
;
; 156 CHECK FOR DEVICES WHICH CARE WHAT MODE THEY ARE
; INITED IN, AND REOPEN THEM IF THE NEW MODE IS
; DIFFERENT, I.E. CHANGE PTP: TO /B IF PUNCHING
; A REL FILE. SPR 14,310. 10-OCT-74, JNT.
;
; 157 FIX NEW:, SYS:, OLD:, AND LIB: A LITTLE MORE SO THAT
; LOGICAL ASSIGNMENTS WILL NOT FOOL PIP. NO SPR.
; 13-OCT-74, JNT.
;
; 160 WHEN CONCATENATING FILES, MAKE PIP TREAT THE LAST
; FILE THE SAME AS THE OTHERS, I.E. NOT CHANGE FROM ASCII
; LINE MODE TO BINARY. NO SPR. 13-OCT-74, JNT.
;
; 161 REMOVE EDIT 145 SO THAT PPN'S DON'T ALL BECOME STICKY.
; REPLACE DELETED INSTRUCTIONS. SER FROM CO'T.
; 19-OCT-74, JNT.
;
; 162 REMOVE EDIT 131. I DON'T KNOW WHAT IT WAS SUPPOSED
; TO DO, BUT IT BREAKS TOO MANY THINGS: E.G.
; TTY:/L=[#,#].UFD
; TTY:/L=FOO[#,#] WHERE #,# IS NOT YOUR PPN
; NO SPR. 19-OCT-74, JNT.
;
;VERSION 33B
;
; 163 WHOLESALE CHANGES TO ERSATZ DEVICE HANDLING, EDIT 134.
; THIS EDIT IS MOSTLY COURTESY OF JAEDGECOMBE.
; MANY SPR'S, 11,988. 20-OCT-74, JNT.
;
; 164 CORRECTION TO EDIT 151 TO CLEAR THE UU.PHS BIT
; EACH TIME ININIT IS CALLED.
; NO SPR. 21-OCT-74, JNT.
;
; 165 EDIT 163 CAUSES @ CONSTRUCTIONS TO FAIL SINCE WHEN
; THE @ IS SEEN, DEVICE IS NOW 0 FOR DEFAULT TRAPPING.
; NO SPR. 21-OCT-74, JNT.
;
; 166 ALLOW [-] OR [#,], [,#], [,] AS PPN SPEC.
; NO SPR. 21-OCT-74, JNT.
;
; 167 REMOVED BY EDIT 224.
;
; 170 ON SEQUENCING A FILE WITH /O OR /S, ANY LINES WHICH
; CONSIST OF JUST END OF LINE CHARACTERS, ADD A TAB
; INSTEAD OF ANOTHER CARRIAGE RETURN.
; SPR 14408. 23-OCT-74, JNT.
;
; 171 SKIP THE CLOSE BETWEEN THE LOOKUP AND RENAME IF
; RUNNING LEVEL D, SO FUNNY PATHS WON'T BE LOST.
; SPRS ?/?. 25-OCT-74, JNT.
;
; 172 CLOSE THE /L/F DEVICE BEFORE PRINTING "NO FILES NAMED",
; SO THAT ANY LEFT OVER UFD STUFF WILL PRINT.
; SPR 12533,?. 25-OCT-74, JNT.
;
; 173 FIX THE FIND THE NEXT EXISTING FILE ROUTINE SO THAT
; AN EXISTING FILE FOLLOWED BY A NON-EXISTING FILE
; WILL NOTICE THE NON-EXISTING FILE.
; SPRS 12533,+?. 25-OCT-74, JNT.
;
; 174 FIX PROBLEM WITH RUBBISH IN THE MIDDLE OF FILES
; WHICH HAVE BEEN MERGED WITH WILD CARD SPECS.
; SPRS 12900,9527,???. 26-OCT-74, JNT.
;
; 175 FIX PROBELM WITH I/O ERROR MESSAGES DESTROYING
; OUTPUT TO TTY.
; SPR 12256. 26-OCT-74, JNT.
;
; 176 FIX PROBLEM WITH FILE NOT FOUND MESSAGES DURING
; WILD CARD INPUT DESTROYING OUTPUT TO TTY.
; NO SPR. 26-OCT-74, JNT.
;
; 177 FIX PROBLEM WITH MISSING DIRECTORIES AFTER NOT FOUND
; FILES, AND PRINT THE NAMES OF THE FILES NOT FOUND.
; NO SPR. 26-OCT-74, JNT.
;
; 200 MAKE LOGICAL ASSIGNMENTS AND ALL: WORK BETTER.
; NO SPR. 26-OCT-74, JNT.
;
; 201 MAKE NUL: WORK BETTER.
; NO SPR. 27-OCT-74, JNT.
;
; 202 HACK TO ALLOW UFD PROTECTION CHANGES AGAIN.!!!
; PROBLEM IS SOMEWHERE IN NON-ZERO PPN FOOLISHNESS.
; NO SPR. 28-OCT-74, JNT.
;
; 203 CHANGE INITFS TO DETERMINE SEARCH LIST TO USE
; BY DOING A PATH. INSTEAD OF COMPARING DEVPPN TO
; OUR PPN.
; NO SPR. 31-OCT-74, JNT.
;
; 204 MAKE /Z SAVE THE TYPED FILE NAME, INSTEAD OF USING
; THE LAST FILE NAME THE ZEROED DIRECTORY.
; NO SPR. 01-NOV-74, JNT.
;
; 205 FIX EDIT 163 TO NOT LOOSE THE DEFAULT OUTPUT DEVICE.
; NO SPR. 01-NOV-74, JNT.
;
; 206 REDO WHAT WAS ORIGINALLY EDIT 117 FROM SPR 8069.
; IF WILD CARDS ARE USED IN THE OUTPUT SPEC OF A COPY
; WITHOUT /X, MAKE THAT ILLEGAL.
; SPR'S 11041, 11633, 12332. 01-NOV-74, JNT.
;
; 207 WORK ON STRAIGHTENING OUT PATH USAGE. USE FLAG BITS
; TO DETERMINE WHAT PPN OR PATH TO USE.
; SPR'S MANY. 03-NOV-74, JNT.
;
; 210 CORRECT EDIT 156 TO DO CLOSE-OPEN INSTEAD OF SETSTS AND
; DO THESE ONLY ON CDP: AND PTP:. SETSTS DOESN'T PUNCH
; BLANK TAPE AND FOOLS PTPSER.
; SPR 14310. 07-NOV-74, JNT.
;
; 211 MORE OF 207, WORK ON PATHS AND PPN'S.
; MANY SPR'S. 14-NOV-74, JNT.
;
; 212 ADD CODE TO THE SETPTH ROUTINE TO MAKE SURE THAT NON-SFD
; MONITORS DO NOT GET PATH POINTERS IN LOOKUP BLOCKS.
; NO SPR. 17-NOV-74, JNT.
;
; 213 FIX EDIT 211 SO THAT DIRECTORIES OF ERSATZ DEVICES AND
; DEFAULT PPN'S WORK AGAIN.
; NO SPR. 17-NOV-74, JNT.
;
; 214 FIX EDIT 203 TO LOOK AT THE RIGHT WORD FOR THE DEVICE'S
; SEARCH LIST CODE AFTER THE PATH. UUO.
; NO SPR. 17-NOV-74, JNT.
;
; 215 FIX EDIT 211 TO ALLOW TMP: AGAIN.
; NO SPR. 18-NOV-74, JNT.
;
; 216 FIX EDIT 207 TO SAVE THE PPN FOR /X COPIES SO
; THAT DEFAULT PATHS AND OTHER PPNS WILL WORK AGAIN.
; QAR MD. 21-NOV-74, JNT.
;
; 217 FIX EDIT 211 TO ALLOW MULTIPLE DELETES TO DEFAULT
; PPN'S AND POSSIBLY OTHER THINGS.
; MY QAR. 21-NOV-74, JNT.
;
; 220 CORRECT THE MEANING OF THE DEFAULT PPN IN [,] TO BE
; THE JOB'S UFD, NOT THE DEFAULT PATH.
; MY QAR. 25-NOV-74, JNT.
;
; 221 CLEAR OUT THE OUTPUT PATH BEFORE SCANNING THE INPUT.
; NEEDED NOW DUE TO CHANGES FOR EDIT 211.
; MD QAR. 25-NOV-74, JNT.
;
; 222 MAKE UP FOR MONITOR DEFICIENCY WITH RENAMES AND SFD'S,
; AND MAKE RENAME SUPER DEFENSIVE FOR OLD MONITORS.
; TH SER. 26-NOV-74, JNT.
;
; 223 PUT THE /N AND /S PATH SCANNING SWITCH UNDER A NORMALLY
; OFF CONDITIONAL. THESE WERE SPECIFIED IN THE MANNER:
; [1,2,SFD,SFD/S] OR [-/N] OR ETC.
; HOWEVER THIS IS INCOMPATIBLE WITH SCAN AND WAS REMOVED
; FOR THIS REASON. THEY ARE UNSUPPORTED.
; AGREEMENT. 26-NOV-74, JNT.
;
; 224 REMOVE EDIT 167, IT WAS A BAD IDEA.
; NO SPR. 26-NOV-74, JNT.
;
; 225 FIX FILE SPECIFICATIONS TO FOLLOW DIRECT STANDARDS.
; NO SPR. 26-NOV-74, JNT.
;
; 226 FIX PART OF EDIT 211, CHANGE HRLZ TO HLRZ TO MAKE WILD
; UFD DIRECTORY PRINTOUTS CORRECT.
; MY QAR. 27-NOV-74, JNT.
;
; 227 ALLOW EQUAL SOURCE AND OBJECT DEVICES FOR /R/D
; SEER. 02-DEC-74, JNT.
;
; 230 FIX THE /Q SWITCH TO CHECK BOTH SYS: AND HLP:
; NO SPR. 02-DEC-74, JNT.
;
; 231 FIX RENAMES TO NOT CHANGE UFD FROM ERSATZ TO JOB'S
; DEFAULT PATH!!!!
; JMF SER. 07-DEC-74, JNT.
;
; 232 WHEN DOING FILE STRUCTURE SCANNING IN AN SFD, ALLOW
; LOOKUP ERROR 1 ALSO SINCE THAT MEANS THERE IS NOT
; EVEN A UFD FOR THE STRUCTURE.
; TC QAR. 09-DEC-74, JNT.
;
; 233 FIX PART OF EDIT 211 TO MAKE [30,] WORK AGAIN.
; MY SER. 29-DEC-74, JNT.
;
; 234 FIX SETPATH FOR NON-PATHING MONITORS.
; MY SER. 01-JAN-75, JNT.
;
; 235 CORRECT DEVICE NAME FOR NON-DISK ERROR MESSAGES FROM
; DELETE OR RENAME.
; MY SER. 01-JAN-75, JNT.
;
; 236 FIX ERROR NUMBER MESSAGE DURING /R OR /D WHEN THE MONITOR
; RETURNS THE WRONG PPN ON A PATH.
; MY SER. 11-JAN-75, JNT.
;
; 237 TREAT SYS: THE SAME WAY WILD DOES, I.E. USE A PATH. UUO
; INSTEAD OF A DEVPPN. WHEN THE MONITOR IS FIXED, THEN
; PIP WILL STILL ACT THE SAME WAY AS WILD.
; QAR, GRIPES, COMMENTS. 11-JAN-75, JNT.
;
; 240 MOVE EDIT 235 UP SO THAT IT WILL FIX TMP: MESSAGES TOO.
; MY SER. 12-JAN-75, JNT.
;
; 241 CHANGE EDIT 135 TO BE A CONDITIONAL ASSEMBLY PARAMETER.
; WJF,CLR,JMF SER. 12-JAN-75, JNT.
;
; 242 CHANGE THE /L/F NO UFD ERROR MESSAGE TO SAY EXISTS INSTEAD
; OF CREATED.
; WJF QAR. 12-JAN-75, JNT.
;
; 243 MAKE EDIT 232 CLEANER.
; WJF QAR. 12-JAN-75, JNT.
;
; 244 CHANGE EDIT 206 TO ASSUME /X IF WILD CARDS ARE GIVEN IN A
; COPY COMMAND OUTPUT SPEC. THIS MAKES PIP'S OPERATION
; COMPATIBLE WITH COMPIL, USING THE LEAST CONFUSION PRINCIPLE.
; WJF QAR. 12-JAN-75, JNT.
;
; 245 FINISH FIXING 235 AND 240.
; OPR SER. 18-JAN-75, JNT.
;
; 246 PUT IN LOST FIX FROM SPR 10-7752.
; SPR 7752. 18-JAN-75, JNT.
;
; 247 PRESERVE MODE OF FILES COPIED TO DISK OR DECTAPE FROM DISK OR DECTAPE
; REGARDLESS OF /B/I/H.
; SPR 7863,... 18-JAN-75, JNT.
;
; 250 PUT WHAT WAS EDIT 116 BACK IN, ERROR MESSAGES ON FILES
; FOUND BUT NOT VALID IN /R/D (I.E. RIB ERROR).
; SPR 8285, 8231. 18-JAN-75, JNT.
;
; 251 CHANGE EDIT 241 TO DEFAULT TO SENDING ACTUAL CHARACTERS TO A
; TTY UNLESS /J SWITCH IS USED, WHERE THEY WILL ECHO AS ^C
; PFC SUGGESTION. 19-JAN-75, JNT.
;
; 252 ACCEPT SWITCHES, PPN'S, AND PROTECTIONS AFTER OCTAL FILE
; NAME SPECIFICATIONS, #12/X=FOO.
; WJF QAR. 19-JAN-75, JNT.
;
; 253 FIX /T/C TO CHECK CORRECTLY FOR NULL LINES.
; WJF QAR. 19-JAN-75, JNT.
;
; 254 MAKE /Z WORK WHEN USED WITH COPYING.
; MY SER. 20-JAN-75, JNT.
;
; 255 MOVE EDITS 142 AND 143 TO FIX MAG TAPE SWITCHES AND TO GET
; RID OF ONE INSTRUCTION.
; SPR 15194. 01-FEB-75, JNT.
;
; 256 REFORMAT THE LISTING AND ADD SUBTITLES.
; 15-FEB-75, JNT.
;
; 257 FIX IO TO UNASSIGNED CHANNEL (DTA ONLY, WHEN FILE NOT FOUND).
; MY SER. 15-FEB-75, JNT.
;
; 260 REMOVE EDIT 237. IT WAS A BAD IDEA. IT MADE PIP INCONSISTENT
; AND POINTED OUT A NEW MONITOR BUG.
; MY SER. 15-FEB-75, JNT.
;
; START OF VERSION 33C
;
; 261 MAKE REN OLDN:=SYSN: WORK.
; MT SER. 15-APR-75, JNT.
;
; 262 FIX BUG ON FTSFD==0 MONITORS DURING RENAME
; AC SER. 18-APR-75, JNT.
;
; 263 CHECK FOR A DECTAPE DEVICE BY CHECKING DTA BIT INSTEAD
; OF ASSUMING IF DIRECTORY DEVICE AND NOT DISK THEN IS
; DECTAPE. SPR #10-16560 17-JUN-75 ILG
;
; 264 SKIP REST OF CCL LINE ON COMMAND ERROR.
; JMF SER. 29-JUL-75, JNT.
;
; 265 BYPASS COMMENTS CORRECTLY.
; SPR 16840. 30-JUL-75, JNT.
;
; 266 DON'T LOOK ON WRONG STRUCTURE FOR WILD CARDS TO BE DELETED
; MY QAR. 17-AUG-75, JNT.
;
; 267 DON'T I/O TO UNASSIGNED CHANNEL WHEN /X TO TMP:
; SPR 17327. 11-SEP-75, JNT.
;
; 270 HANDLE LOOKUP ERRORS BETTER IN DELETE AND RENAME
; JNG SER. 13-SEP-75, JNT.
;
; 271 DON'T ZERO SYS UNINTENTIONALLY (I THOUGHT WE FIXED THAT)
; MY SER. 14-SEP-75, JNT.
;
; 272 FOLLOW MONITOR STANDARD OF EXITING ON A ^Z IN TTY: COMMAND STRING
; * SER. 14-SEP-75, JNT.
;
; 273 USE EXTENDED LOOKUP'S, ETC. WHEREEVER POSSIBLE.
; SPR 17316. 14-SEP-75, JNT.
;
; 274 RECOGNIZE THAT ERSATZ DEVICES CAN HAVE SFD'S TOO.
; SPR 17383. 19-SEP-75, JNT.
;
; 275 DON'T PUT JUNK IN .RBEST ON COPY FROM DTA TO DSK.
; * SER. 17-OCT-75, JNT (IN ABSTENTIA).
;
; 276 DON'T FORGET STICKY PPNS WHEN A DEVICE IS ENCOUNTERED.
; SPR 17516. 17-OCT-75, JNTia
;
; 277 DON'T EXIT WHEN TMP:PIP CONTAINS "FOO@".
; JNG SER. 9-NOV-75, JNTia
;
; 300 /W DOES NOT CONVERT ALL TABS TO SPACES WHEN
; FILE HAS SEQUENCE NUMBERS.
; SPR 17485, MD, 7-JAN-76
;
; 301 IF THE DEFAULT PATH IS AN SFD, PIP WILL NOT FIND
; COMMAND FILES. (STILL WORKING ON EXPLICIT PROBLEM).
; SPR 17577, 19-Jan-76, JNTia
;
; 302 DON'T TYPE ## BLOCKS FREED AFTER ?AMBIGUOUS MESSAGE.
; * SER. 19-Jan-76, JNTia
;
; 303 DON'T LOSE TABS TO SPACE CONVERSION WHEN THE LINE
; BUFFER OVERFLOWS (AT THE 662'nd CHARACTER).
; SPR 10-18878. 02-Apr-76, JNTir.
;
; 304 CREATE FILES NAMED FXX001 INSTEAD OF F 001 WHEN MAKING
; UP FILE NAMES.
; SPR 18757. 04-Apr-76, JNTir.
;
; 305 Lessen the amount of buffer space PIP tries to allocate
; for the output device when a large blocksize is used.
; SPR 18024. 04-Apr-76, JNTir.
;
; 306 Make RENAME code defensive about monitor bug causing
; junk to appear in .RBSTS.
; TW SER. 04-Apr-76, JNTir.
;
; 307 Fix edit 275 to work with TSK:, also.
; * SER. 05-Apr-76, JNTir.
;
; 310 Make [11,$ work as a PPN spec.
; MY SER. 05-Apr-76, JNTir.
;
; 311 Get rid of the last INIT.
; MY SER. 05-Apr-76, JNTir.
;
; 312 Don't put anything into SFD's we have been
; asked to copy.
; Also (by mistake) handle device TSK.
; * SER. 05-Apr-76, JNTir.
;
; 313 Make RENAME FOO.* and DELETE ALL:FOO.BAR
; work where FOO or FOO.BAR exist on more than
; one structure.
; * SER. 11-Apr-76, JNTir.
;
; 314 Make non-wild DELETEs and RENAMEs not read the
; user's directory (e.g. DELETE FOO.BAR).
; SPR 18184. JNTir, 11-Apr-76.
;
; 315 Fix edit 313.
; * SER. JNTia, 14-Apr-76.
;
; 316 Eliminate (0) Illegal file name message.
; JNG SER. JNTia, 14-Apr-76.
;
; 317 Print full error number when monitor goofs
; (e.g. Rename between SFD's on different structures.
; My SER. JNTia, 24-Apr-76.
;
; 320 Make file name printers print internal spaces.
; My SER. JNTia, 24-Apr-76.
;
; 321 Fix 314 to handle PPN's right for /R and
; /D of specific files. Clean up PPN defaulter.
; My SER. JNTia, 25-Apr-76.
;
; 322 Finish adding IFN LEVELC conditionals.
; My SER. JNTia, 30-Apr-76.
;
; 323 Fix /R to handle disks properly, i.e. allow
; source and destination devices to be specified and
; then do the right thing with them. In the
; process, SEARCH MACTEN and UUOSYM and change
; a bunch of symbols to standard.
; * SER. JNTia, 04-May-76.
;
; 324 On copying a file with a requested output protection
; of <000>, do the initial ENTER with a protection
; of <100> in case the user will not be able to do the
; RENAME from <057> to <000>.
; SPR 19758. JNTia, 18-May-76.
;
; 325 When removing sequence numbers, the character after
; the sequence number is thrown away without checking
; to see if it is actually a TAB.
; SPR 19753. JNTia, 18-May-76.
;
; 326 Finish edit 265 by making ; work at TTY level again.
; My SER. JNTia, 25-May-76.
;
; 327 Make renames work from one ersatz device to
; another again when there are wild cards.
; My SER. JNTia, 08-Jun-76.
;
; 330 Fix DSK:/D=FOO[,,1],BAR looking for BAR in [,,1].
; My SER. JNTia, 09-Jun-76.
;
; 331 Fix TMP: output routine to ignore nulls. Only ASCII
; files can be in TMP anyway, so use the space wisely.
; My SER. JNTia, 08-Jul-76.
;
; 332 Edit 330 broke sticky PPN's. It also pointed out
; a potential sticky PPN bug.
; My SER. JNTia, 08-Jul-76.
;
; 333 Fix RENAMEs on DECtape, broken by 323.
; My SER. JNTia, 16-Jul-76.
;
; 334 Fix /X/D, broken by 323.
; My SER. JNTia, 28-Jul-76.
;
; 335 Change 312 to correspond to my PCM as put into 603.
; My SER. JNTir, 17-Aug-76.
;
; 336 273 provided the opportunity for some big files to be
; shortened when copied to a protection of <000> due to a
; small value of .RBALC being returned.
; SPR 10-19582. JNTir, 18-Aug-76.
;
; 337 Fix NXTFS to understand private structures.
; JNG SER. JNTir, 18-Aug-76.
;
;
; 340 Fix the switch processor to accept only M
; switches after the first input file spec.
; This fixes foo=bar,oof/b and is the way it
; was supposed to work.
; SPR 10-20556 LCR/JNTIA 27-DEC-77.
;
; 341 /X/D copies the output device across
; the equal sign.
; My SER. JNTIA/LCR 27-DEC-77.
;
; 342 OUTPUTTING BINARY FILES MISTAKENLY IN ASCII MODE
; CAN GENERATE ?ILL MEM REF OR ?ADDRESS CHECK FOR ...
; SPR 10-20557 LCR/JNTIA 27-DEC-77.
;
; 343 /W does not correctly process a line with
; carriage returns without line feeds.
; SPR # 10-21013 LCR/JNTIA 28-DEC-77.
;
; 344 Make NUL: work as an input file spec
; for copy commands.
; SPR # 10-20718 LCR/JNTIA 28-DEC-77.
;
; 346 Make things presentable for MACRO 52.
; LCR/JNTia 28-dec-77.
;
; 351 Make PIP look for .CCL before . if no extension
; is typed for an indirect file.
;
; SPR 10-21081. JNITIA/MHK 28-DEC-77
;
; 352 Give a reasonable error message when wild
; devices are tried.
; SPR # 10-21448 LCR/JNTIA 28-DEC-77.
;
; 353 Fix a problem pointed out by 603. When
; multiple input files are given and the second
; or following are found by searching(either LIB
; or up the Path), they aren't found.
; SPR # * LCR/JNTIA 28-DEC-77.
;
; 354 Wait until the EOF is finished on MTA
; before checking status.
; SPR 10-21710 JNTIA/MHK 29-Dec-77
;
; 355 Make the command DSK:[1,2]/D=FOO,BAR
; look for FOO BAR in [1,2]
; SPR# 10-22585 JNITA/MHK 29-DEC-77
;
; 356 REALIZE THAT BACKSPACES BACKSPACE
; WHEN FIGURING TAB STOPS FOR /C
; SPR# 10-24932 MHK 2-MAR-78
;
; 357 DON'T ASSUME A TAB AFTER A LSN, AND DON'T
; RESET TABCT.
; SPR# 10-23544 MHK 6-MAR-78
;
; RETRACT EDIT 337 DEALING WITH PRIVATE STRUCTURES.
; MONITOR VERSION 7.01 HANDLES THEM DIFFERENTLY NOW.
; DMN SER. MHK, 30-JUN-78
;
; 360 FIX /S SWITCH BROKEN BY EDIT 342
; MHK SER MHK 10-JUL-78
;
; 361 WHEN USING LSN'S, USE PAGE MARKS TOO.
; SPR# 10-25713 MHK 10-JUL-78
;
; 362 MAKE WILD-CARD RENAMES/DELETES WORK IN
; SFD'S. BROAKEN BY EDIT 353.
; MHK SER MHK 23-AUG-78
;
; 363 MAKE WILD-CARD RENAMES/DELETES WORK FOR
; UFD'S.
; SPR 10-26449
; AREA AFFECTED: NM6C
; CGN 28-AUG-78
;
; 364 MAKE RENAMES TO IDENTICAL RB??? VALUES WORK
; CORRECTLY INSTEAD OF RETURNING A PROTECTION
; FAILURE.
; SPR 10-26760
; AREA AFFECTED: DSKR4A
; CGN 7-NOV-78
;
; 365 MAKE DELETION WITH ERSATZ DEVICES WORK CORRECTLY;
; (SOMEBODY BROKE IT SINCE EDIT 344).
; NO SPR
; AREA AFFECTED: LOOK7B
; CGN 8-NOV-78
;
; 366 PRINT DEVICE USED FOR OPEN ALONG WITH FILENAME
; COPIED/RENAMED/DELETED.
; NO SPR
; AREA AFFECTED: INFO3
; CGN 10-NOV-78
;
; 367 MAKE PIP MORE CONSISTENT WHEN COPYING /X FROM
; GENERIC DSK: TO NON-DIRECTORY DEVICES.
; SPR 10-26984
; AREAS AFFECTED: DTCOPY, CAL6
; CGN 10-NOV-78
;
; 370 PREVENT PIP FROM CARRYING THE PPN ACROSS THE
; EQUALS-SIGN AS A STICKY DEFAULT ON RENAMES.
; SPR 10-26819
; AREAS AFFECTED: DSKDR0 AND FOLLOWING
; CGN 10-NOV-78
;
; 371 MORE OF EDIT 366.
; NO SPR
; AREAS AFFECTED: AUXFLG, DSKDRG, INFO3
; CGN 13-NOV-78
;
; 372 MORE OF EDIT 366
; NO SPR
; AREAS AFFECTED: INFO3, DSKDR7
; CGN 15-NOV-78
;
; 373 FIX /W, BROKEN BY EDIT 361.
; NO SPR, BUT LOTS OF GARBAGED FILES.
; AREA AFFECTED: GET1
; CGN 02-DEC-78
;
; 374 FIX "PROTECT FOO.BAR[,,SFD]<123>", BROKEN WHEN
; STICKY PPN'S WERE REMOVED.
; AREA AFFECTED: DSKR4A
; CGN 06-DEC-78
;
; 375 FIX A PROBLEM WITH RENAME MESSAGES.
; AREAS AFFECTED: DSKDR7, DSKDR9
; CGN 07-DEC-78
;
; 376 DISCARD A CREATED FILE IF A FATAL ERROR OCCURS DURING
; DISK OUTPUT, TO PRESERVE FILE BEING SUPERCEDED.
; SPR 10-27235
; AREA AFFECTED: IOERRN
; CGN 11-DEC-78
;
; 377 IF A SHR OR EXE FILE IS BEING RENAMED, AND NOTHING IN
; THE RIB IS CHANGING, DO A RENAME ANYWAY IF THE OWNER
; ACCESS PROTECTION IS 0, 1, OR 4 IN ORDER TO RELEASE
; ANY DORMANT HIGH SEGMENT.
; IF THE OWNER ACCESS PROTECTION IS 2, 3, 5, 6, OR 7,
; PRINT A WARNING MESSAGE WHEN THE RENAME IS BYPASSED
; SO USER WILL KNOW THAT ANY DORMANT HIGH SEGMENT WAS
; NOT RELEASED.
; NO SPR; CGN/ER/TW/JMF CONSENSUS
; AREA AFFECTED: DSKDR9
; CGN 11-DEC-78
;
; 400 IF DOING SINGLE-FILE ALL: RENAME/DELETE, RESTORE
; .RBPPN AFTER THE LOOKUP, BUT DON'T POP IT.
; NO SPR
; AREA AFFECTED: DSKDR3
; CGN 11-DEC-78
;
; 401 CLEAN UP FOR FIELD TEST.
; CGN 12-DEC-78
;
;
; 402 CORRECT RENAME ACROSS DIRECTORIES USING ERSATZ DEVICES.
; CGN 17-JAN-79
;
; 403 INCREASE SIZE OF TMPCOR BUFFERS FOR SERIES 7 MONITORS.
; CGN 18-JAN-79
;
; 404 FIX MAGTAPE EOF OPERATION.
; CGN 29-JAN-79
;
; 405 FIX FILE PROTECTION IN SFD'S THAT ARE NOT THE DEFAULT
; PATH.
; AREA AFFECTED: DSKR4A
; CGN 1-FEB-79
;
; 500 CHANGE EDIT NUMBER TO 500 TO ALLOW MAINTENANCE OF
; VERSION 33B DURING FIELD-TEST.
; CGN 01-FEB-79
;
; 501 MAKE FILENAMES LIKE "FO*BAR.FOO" ILLEGAL
; AREAS AFFECTED: NM3A, NM4A, NM10, NMSTAR
; RL 30-OCT-80
;
; 502 MAKE PIP COPY TMPCOR FILES IN BINARY TO DISK,
; MAGTAPE, &DECTAPE, ASCII TO OTHER DEVICES.
; AREA AFFECTED: TMPIN
; RL 31-OCT-80
;
; 503 DEFINE NEW LOOKUP/ENTER/RENAME ERROR CODES
; AREA AFFECTED: TABLE
; RL 31-OCT-80
;
; 504 FINISH 501 BY CLEARING "*"-SEEN FLAG (SPLAT1) UPON
; SEEING PUNCTUATION OF SOME SORT.
; AREA AFFECTED: NM5
; RL 4-NOV-80
;
; 505 MAKE THE INPUT PATH STICKY ON A RENAME WITH NO EXPLICIT
; OUTPUT PATH.
; AREA AFFECTED: DSKDR0, RENTST
; RL 25-NOV-80
; NO SPR
;
; 506 ALLOW "/X=NUL:FILE.EXT" TO CREATE EMPTY "FILE.EXT".
; AREA AFFECTED: LOOK6
; RL 23-FEB-81
; QAR #:10-05579
;
; 507 MAKE ERROR MESSAGE FOR WILDCARD SFD SPECIFICATION
; AREAS AFFECTED: GTPTH1, ERR2B
; RL 24-FEB-81
; NO SPR
;
; 510 ALLOW SETTING 1600 AND 6250 BPI FOR TAPE
; AREAS AFFECTED: DISPTB,MTC1,INMTA,SETBPI,BPIERR,BPIARG
; RL 4-MAR-81
; NO SPR
;
; 511 MAKE PROGRAM OUTPUT LINE SEQUENCE NUMBERS WITH
; WORD-ALIGNED LSN'S, BIT 35 SET.
; AREAS AFFECTED: ALL OVER
; RL 13-MAR-81
; NO SPR
;
; 512 MAKE [-] WORK IN SFD'S BY POINTING TO PATH WHEN "-" IS SEEN
; AREAS AFFECTED: GETMY1
; RL 8-APR-81
; NO SPR
;
; 513 ADD FTSMP SWITCH FOR USE WITH /P FUNCTION TO PREVENT TRASH
; AREAS AFFECTED: GETPC4
; RL 5-JUN-81
; SPR: 10-31129
;
; 514 FINISH EDIT 364 SO UFD RENAMES WHICH DO NOT CHANGE ANYTHING
; DO NOT CAUSE FATAL ERRORS.
; AREAS AFFECTED: DSKR4C
; RL 11-JUN-81
; QAR: 10-06089
;
; 515 BYPASS OWNER PROTECTION CODE CHECKING WHEN USER PPN
; IS [1,2].
; AREAS AFFECTED: PIP1, DSKDR9
; RL 12-JUN-81
; QAR: 10-06012
;
; 516 CLEAR MTFLAG WHEN END OF MAGTAPE SWITCH IS SEEN
; AREAS AFFECTED: GETT3
; RL 1-JUL-81
; QAR: 10-06122
;
; 517 COPY .RBNCA WORD OF ENTER BLOCK
; AREAS AFFECTED: CPYRI1
; RL 2-OCT-81
; SPR: 10-31474
;
; 520 LENGTHEN LOOKUP/ENTER BLOCKS AND COPY .RBPCA
; AREAS AFFECTED: CPYRI1
; RL 7-JAN-82
; SPR: 10-31474, continued
;
; 521 IN DELETES AND RENAMES, CHECK THAT THE FILE
; FOUND MATCHES THE PPN OR PATH SPECIFIED, OR THE
; DEFAULT PATH IF NONE WAS GIVEN.
; AREAS AFFECTED: DSKDR3, CHKFIL
; RL 8-JAN-82
; SPR: NONE
;
; 522 WHEN COPYING FROM DTA: TO AN EXISTING FILE ON DSK:,
; THE FILEMODE OF THE EXISTING FILE GETS ZEROED.
; THIS AFFECTS EDIT 247 WHICH DID NOT ALLOW THAT
; DTA: HAS NO FILEMODE.
; AREAS AFFECTED: EXTEN0
; RL 28-JAN-82
; SPR: 10-31878
;
; 523 MAKE ROUTINE IOERR WORK.
; COURTESY OF WESTERN AUSTRALIA INSTITUTE OF TECHNOLOGY
; AREAS AFFECTED: IOERR
; RL 28-JAN-82
; SPR: 10-31916
;
; 524 DONT DELETE NONEXISTANT DTA: FILES. PRINT
; ERROR MESSAGE "NO FILE NAMED XXXXXX.XXX".
; AREAS AFFECTED: LOOK
; MRB 08-APR-82
; SPR: 10-32271
;
; 525 MAKE ^P THROUGH ^T PRINT OUT AS UPARROW-CHARACTER
; WHEN THE /J SWITCH IS USED TO A TTY:
; KMR 11-JAN-83
; SPR: 10-32655
;
; 526 MAKE COPY FROM TSK TO DSK COPY LOOKUP/ENTER
; BLOCKS CORRECTLY
; KMR 29-MAR-83
; SPR: 10-33080
;
; 527 MAKE NON-RECOVERABLE FATAL ERRORS SUCH AS DISK
; QUOTA EXCEEDED DELETE THE OUTPUT FILE ON ERROR.
; FIX TO EDIT 376 TO KEEP FILE CONCATENATION ON
; COPY WORKING.
; KMR 12-MAY-83
; SPR: 10-33251,10-32831
;
; 530 MAKE A BLANK LINE STAY A BLANK LINE WHEN
; /C AND /T USED TO DROP SPACES AND CONVERT
; TABS.
; KMR 22-JUN-83
; SPR: 10-33839
;
; 531 FIX EDIT 357 SO THAT TABS AFTER LSN'S ARE DONE
; CORRECTLY.
; KMR 29-JUN-83
; SPR: 10-33818
;
; 532 FIX EDIT 151 SO THAT LOGICAL NAMES WORK ON
; DELETION OF FILES
; KMR 29-FEB-84
; SPR: 10-34483
;
; 533 DON'T SEARCH LIB: OR SYS: WHEN DELETING FILES.
; DRB 29-Jan-85
; SPR 10-33508
;
; 534 357 BROKE /W, 531 BROKE /C. FIX THEM BOTH BY
; RE-IMPLEMENTING CODE FROM 357, AND CLEARING
; THE "TAB SEEN" FLAG AFTER THE LSN, INSTEAD OF
; INCREMENTING THE TAB COUNTER.
; DRB 31-Jan-85
; SPR 10-34733
;
; 535 WILDCARD PROTECT COMMANDS WHERE THE SAME FILE NAME
; EXISTS ON TWO STRUCTURES RESULTS IN BOTH FILES BEING
; RENAMED TWICE EACH. DON'T LOOK FOR A FILE ON ALL
; STRUCTURES WHEN DOING WILDCARD RENAME, JUST LOOK FOR
; THE FILE ON THE STRUCTURE THAT THE DIRECTORY SAYS
; IT'S ON.
; DRB 31-Jan-85
; SPR 10-35079
;
; 536 532 BROKE DELETING A LIST OF FILES. ALL FILES LISTED AFTER
; A WILDCARDED FILE SPECIFICATION WOULD NOT GET DELETED, AND
; A PIP COMMAND ERROR MESSAGE WOULD BE ISSUED. AS PER THE
; SPR RESPONSE CARD SENT BY THE CUSTOMER OF 532, SAVE AND
; RESTORE GENERI AROUND THE CALL TO ININIT.
; DRB 13-Feb-85
; No SPR
;
; 537 ADD SOME CONSISTENCY CHECKS IN THE CODE THAT READS LINE
; SEQUENCE NUMBERS TO WATCH FOR A FILE THAT'S REALLY BINARY
; AND NOT LINE SEQUENCED ASCII.
; DRB 25-Feb-85
; SPR 10-33544
;
; 540 FIX A DATE75 BUG WHEN CREATING FILES WITH A PROTECTION OF
; <000>. THIS NORMALLY HAPPENS WHEN CONCATENATING INPUT FILES.
; DRB 27-Mar-85
; SPR 10-35149
;
; 541 MAKE SURE NON-WILDCARDED DELETES ON A SPECIFIC STRUCTURE DON'T
; SEARCH LIB:. ALSO, LITE RB.DSL SO WE DON'T GET PROTECTION
; FAILURE ON FILES FROM /SYS OR /LIB.
; DRB 30-Apr-85
; SPR 10-31791
;
; 542 541 DIDN'T KNOW THAT CHKFIL ASSUMES THAT A PPN IS PUSHED BEFORE
; THE CALL. NOW WE KNOW.
; DRB 06-May-85
; No SPR
;
; 543 EDIT 306 ALLOWS FILES TO BE CREATED WITH A COPY COMMAND THAT
; HAVE RP.DIR SET. ONLY COPY RP.DIR IF A RENAME IS IN PROGRESS.
; CREATION OF .SFD AND .UFD FILES GET RP.DIR SET AUTOMAGICALLY.
; DRB 24-JUL-85
; SPR 10-32940
; 544 DO COPYRIGHTS.
; LEO 15-AUG-85
;
; 545 COPY THE QUOTA WORDS WHEN RENAMING DIRECTORIES.
; DRB 05-Nov-85
; QAR 868386
;
; 546 EDIT 537 IS SO SMART, THAT YOU CAN'T TYPE AN .EXE FILE ANYMORE
; TO SEE THE NEAT COPYRIGHT NOTICE. IT JUST SAYS THAT IT'S A
; BINARY FILE, AND TO USE /X. THAT DOESN'T WORK, SINCE /X USES
; A MODE THAT'S ILLEGAL ON A TTY.
; DRB 13-Nov-85
; NO SPR
;
;[END OF REVISION HISTORY]
SUBTTL CONDITIONAL ASSEMBLY SWITCHES
LOC 124
PIP1 ;SET REENTER ADDRESS
RELOC
LOC 137
<VCUSTOM>B2+<VPIP>B11+<VUPDATE>B17+VEDIT
RELOC
SEARCH MACTEN,UUOSYM ;[323]
;RIMSW==0 /Y SWITCH OPTION UNAVAILABLE.
;RIMSW==1 /Y SWITCH OPTION AVAILABLE.
;CCLSW==0 PIP WILL NOT PROCESS CCL COMMANDS.
;CCLSW==1 PIP WILL EXECUTE CCL COMMANDS FROM DISK.
;TEMP==1 PIP WILL GET CCL COMMANDS FROM CORE (TMPCOR UUO)
;REENT==1 PIP IS REENTRANT (AK-DAG)
;FTDSK==0 NON-DSK SYSTEM
;FTDSK==1 DSK SYSTEM
;LEVELC==0 LEVEL C SUPPORT ELIMINATED (GETTAB'S, CLOSE-RENAME, ETC)
;LEVELC==1 INCLUDE LEVEL C SUPPORT (AND ALL SMALL MONITOR CODE)
;SCANSW==0 NO /N & /S SCAN SWITCH ALLOWED IN PPN SPEC
;SCANSW==1 ALLOW /N & /S
;CTLTTY==0 SEND CONTROL CHARACTERS TO TTY
;CTLTTY==1 TRANSLATE CONTROL CHARACTERS TO ^CH TO TTY IF /J SWITCH IS USED
;**;[513] Insert assembly switch description RLUSK 5-Jun-81
;[513] The FTSMP is a temporary assembly switch for those installations which
;[513] run 7.01 SMP and have significant use of PIP's /P switch (invoking
;[513] conversion of printer carriage control characters to ASCII control
;[513] characters). The code compiled when this switch is set is
;[513] dependent on the hardware algorithm for cache use, and as such is
;[513] only suitable for a temporary patch. This code and all code related
;[513] to edit 513 may be changed in the future.
;[513] FTSMP==0 PROCEED WITH NORMAL INPUT
;[513] FTSMP==1 FLUSH CACHE AFTER TOUCHING INPUT BUFFER AT GETPC4+1
;CONDITIONAL ASSEMBLY SWITCH SETUP (DEC CONFIGURATION)
;---------------------------------
IFNDEF FTDSK, <FTDSK==1>
IFE FTDSK, <CCLSW==0>
IFNDEF CCLSW, <CCLSW==1>
IFE CCLSW, <TEMP==0>
IFNDEF TEMP, <TEMP==1>
IFNDEF REENT, <REENT==1>
IFNDEF RIMSW, <RIMSW==1>
IFNDEF LEVELC, <LEVELC==0>
IFNDEF SCANSW, <SCANSW==0>
IFNDEF CTLTTY, <CTLTTY==1>
;**;[513] Add default FTSMP setting RLUSK 5-Jun-81
IFNDEF FTSMP, <FTSMP==0> ;[513] DEFAULT FOR FTSMP IS OFF
IFN REENT,< TWOSEGMENTS
RELOC 400000>
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1968,1986. ALL RIGHTS RESERVED.
\;END COPYRIGHT MACRO
MLON
SALL
SUBTTL REGISTER BIT DEFINITIONS
;FLAG ASSIGNMENTS (RIGHT HALF)
LINE==1 ;ASCII LINE MODE PROCESSING
BMOD==2 ;BINARY PROCESSING
TBMOD==4 ;SUPPRESS TRAILING SP, CHANGE MULTIPLE SP TO TABS
DFLG==10 ;DELETE FILES MODE
LFLG==20 ;LIST DIRECTORY
NSMOD==40 ;IGNORE INPUT SEQUENCE NUMBERS
RFLG==100 ;RENAME FILE MODE
SQMOD==200 ;GENERATE SEQUENCE NUMBERS
STS==400 ;END OF LINE SEEN, OUTPUT SEQUENCE NUMBER NEXT
SPMOD==1000 ;SUPPRESS TRAILING SPACES
XFLG==2000 ;COPY DECTAPE MODE
ZFLG==4000 ;CLEAR DECTAPE DIRECTORY
SUS==10000 ;SEQUENCE NUMBER GENERATION IN PROGRESS
SPOK==20000 ;SPACE WAS LAST CHARACTER
ESQ==40000 ;STOP OUTPUTTING SEQ NUM, RESUME OUTPUTTING DATA
SNI==100000 ;DO NOT INCREMENT SEQUENCE NUMBER
MTFLG==200000 ;MTA REQUEST RECEIVED
OSFLG==400000 ;GENERATE SEQ. NOS. INCR. BY ONE
;FLAG ASSIGNMENTS (LEFT HALF)
OFLG==1 ;BLOCK 0 COPY
RIMFLG==2 ;RIM FORMAT INPUT /OUT TO DTA. ILLEG IF RIMSW==0
PFLG==4 ;FORTRAN PROGRAM OUTPUT FORMAT CONVERSION
PCONV==10 ;COLUMN 1 CONVERSION IN PROGRESS
NEWFIL==20 ;NEW FILE JUST INITIATED
CHKFLG==40 ;PARENTHESES CHECK MODE
IFLG==100 ;SELECT IMAGE MODE
GFLG==200 ;KEEP GOING IF THERE ARE I/O ERRORS
IBFLG==400 ;SELECT IMAGE BINARY MODE
JFLG==1000 ;NON-STANDARD MODE
WFLG==2000 ;/W CONVERT TABS TO SPACES
TBSN==4000 ;TAB ALREADY SEEN DURING /W
TID==10000 ;[125] TAPE ID TO BE ALTERED
;**;[530] AT FLAG ASSIGNMENTS (LEFT HALF) +13L, INSERT 1L, KMR, 22-JUN-83
SPCNV==20000 ;[530] SPACE ALREADY DROPPED FROM LINE
DSKDBC==40000 ;[130] DSKDIR BEEN CALLED
;AUXFLG ASSIGNMENTS (LEFT HALF)
QFLG==1 ;PLEASE PRINT SWITCH SET
NSPROT==2 ;NON-STANDARD DISK OUTPUT PROTECTION
SBIN==4 ;36-BIT PR. ON REL. ETC. FILES
NOMORE==20 ;IGNORE ANY SWITCHES BUT MTA FROM NOW ON
CDRFLG==40 ;CONVERT COLS 73-80 TO SPACES + /C
INFOFL==100 ;FLAG USED BY ERR3A:
RSDCFL==200 ;USED FOR MERGING FILES, ==1 IF FILE HAS EXTENSION
;REL,SAV,DMP,CHN OR OTHERWISE == 0
FRSTIN==400 ;THIS IS THE FIRST INPUT FILE (USED IN FILE
;MERGE COMMAND) == 0 FOR FIRST INPUT
AMBIGU==1000 ;[371] AMBIGUOUS ERROR SENSED.
;MTAREQ ASSIGNMENTS (RIGHT HALF)
MTAFLG==1 ;MTA ADVANCE ONE FILE
MTBFLG==2 ;MTA BACKSPACE ONE FILE
MTTFLG==4 ;MTA SKIP TP LOGICAL EOT
MTWFLG==10 ;MTA REWIND
MTFFLG==20 ;MTA MARK EOF
MTUFLG==40 ;MTA REWIND AND UNLOAD
MTDFLG==100 ;MTA ADVANCE ONE RECORD
MTPFLG==200 ;MTA BACKSPACE ONE RECORD
;**;[510] Insert 2 lines after "MTAREQ ASSIGNMENTS" RLUSK 25-Feb-81
MT62FL==10000 ;[510] MTA SET 6250 B.P.I.
MT16FL==20000 ;[510] MTA SET 1600 B.P.I.
MT8FLG==400 ;MTA SET 800 B.P.I.
MT5FLG==1000 ;MTA SET 556 B.P.I.
MT2FLG==2000 ;MTA SET 200 B.P.I.
MTEFLG==4000 ;MTA SELECT EVEN PARITY
;AUXFLG ASSIGNMENTS (RIGHT HALF)
REDFLG==1 ;==1 IF ANY FILES ARE INPUT (OTHER THAN DIRECTORIES)
SYSFLG==2 ;[163] USE SYSSTR FOR SEARCH LIST, IE ALL:
NULIN==4 ;[211] NUL: IS THE INPUT DEVICE
LPTOUT==10 ;LPT OUTPUT
FFLG==20 ;LIST SHORT DISK DIRECTORY
ONEOUT==40 ;ONE OUTPUT FILE INITIALIZED
CDRIN==100 ;CARDS IN
MTAOUT==200 ;OUTPUT TO MTA
MTAIN==400 ;INPUT FROM MTA
TTYIN==1000 ;INPUT FROM TTY
READ1==2000 ;LOOK FOUND NEW INPUT FILE, NO READ YET.
DTAOUT==4000 ;OUTPUT TO DTA
DSKOUT==10000 ;OUTPUT TO DSK
DTAIN==20000 ;INPUT FROM DTA
DSKIN==40000 ;INPUT FROM DSK
TTYOUT==100000 ;OUTPUT TO TTY
PPTIN==200000 ;INPUT FROM PTR
PPTOUT==400000 ;OUTPUT TO PTP
;CALFLG ASSIGNMENTS (RIGHT HALF) FOR DESCRIBING A BLOCK OF INFORMATION
;FOUND BY THE COMMAND SCANNER.
FNEX==1 ;==1 WHEN FN.EX==*.*, *.EXT, FN.* (WHEN MORE
;THAN ONE FN.EX IS IMPLIED).
MATEX==2 ;FILE EXTENSIONS MUST MATCH
MATFN==4 ;FILE NAMES MUST MATCH
NEWDEV==10 ;A NEW INPUT DEVICE WAS GIVEN
NEWPP==20 ;A NEW #P-P WAS GIVEN
ASTFLG==40 ;FLAG SET WHEN FILE NAMED IN CS FOUND
;BY LOOK ROUTINE EVEN IF FN OR EXT =*
DEV==100 ;DEVICE NAME INDICATOR
DVSWTH==200 ;OUTPUT DEVICE SEEN
NSWTCH==400 ;INDICATES NULL NAME
SSWTCH==1000 ;LEFT ARROW SEEN (TEMPORARY SWITCH)
LISTTY==2000 ;LIST TO TTY
TMPI==4000 ;INPUT DEVICE TMPCOR SEEN
TMPO==10000 ;OUTPUT DEVICE TMPCOR
RXFLG==20000 ;(RX) SEEN
RTRNFL==40000 ;RETURN (POPJ ) FROM ERROR PRINTER (PTEXT)
ARWSW==100000 ;LEFT ARROW SEEN IN THIS LINE
SQNSN==200000 ;A SEQUENCE NUMBER HAS BEEN SEEN FOR THIS LINE
COMAFL==400000 ;A COMMA SEEN ON INPUT SIDE OF SPECIFICATIONS
ALLCLF==FNEX!MATEX!MATFN!NEWDEV!NEWPP
;MORE FLAGS IN LEFT HALF
MFLG==1 ;A WILD CHAR MASK HAS BEEN SET UP FOR ??????.???
LDVFLG==2 ;WE HAVE A DEVICE TO OUTPUT (DIR COMMAND)
LPPFLG==4 ;WE HAVE A PPN TO OUTPUT (DIR)
OSPLFL==10 ;OUTPUT DEVICE IS SPOOLED
SDEVSN==20 ;[152] SOURCE DEVICE SEEN IN SCAN
FNSEEN==40 ;[153] FILE NAME NOT SEEN IN SCAN
DDEVSN==100 ;[323] DESTINATION DEVICE SEEN IN SCAN
TSKOUT==1000 ;[312] OUTPUT DEVICE IS A TASK
TSKIN==2000 ;[312] INPUT DEVICE IS A TASK
SUBTTL MISCELLANEOUS DEFINITIONS
;DEVICE CHANNEL ASSIGNMENTS
IFN CCLSW,<
COM==0 ;STORED COMMAND INPUT CHANNEL>
CON==1 ;COMMAND INPUT CHANNEL
OUT==2 ;OUTPUT DEVICE
IN==3 ;INPUT DEVICE
TAPE==4 ;MTA POSITIONING
DIR==5 ;DISK DIR. READ
DD==6 ;DUMP MODE CHANNEL FOR DTA DIR (TAPE ID ONLY)
;ACCUMULATOR ASSIGNMENTS
T1=1 ;GENERAL PURPOSE
T2=2 ;G.P.
T3=3 ;G.P.
CHR=4 ;INPUT CHARACTER
FL=5 ;MORE FLAGS
FLAG=6 ;FLAG REGISTER
T4=7 ;G.P.
IOS=10 ;IO STATUS BITS
T5=11 ;G.P.
T6=12 ; G.P.
AUXFLG=13 ;AUXILIARY FLAG REGISTER
T7=14 ;G.P.
DOUT=15 ;DIVIDED NO. FOR OUTPUT
DOUT1=16 ;REMAINDER, DOUT+1
P=17 ;PUSHDOWN POINTER
CALFLG==FL ;OLD NAME - TOO LONG TO TYPE
;MISCELLANEOUS PARAMETERS
;**;[510] Insert 1 line at "MISCELLANEOUS PARAMETERS" RLUSK 25-Feb-81
DENS0==INSVL. (0,IO.DEN);[510] SET 1600, 6250 USING TAPOP. UUO
DENS2==INSVL. (1,IO.DEN);MTA 200 BPI
DENS5==INSVL. (2,IO.DEN);MTA 556 BPI
DENS8==INSVL. (3,IO.DEN);MTA 800 BPI
PARE==INSVL. (1,IO.PAR) ;MTA EVEN PARITY
PTHLEN==6 ;NUMBER OF SFD'S ALLOWED (1 MORE THAN 5.04)
;ASCII CHARACTERS
TABSP==10 ;SPACES PER TAB
CR==15 ;CARRIAGE RETURN
LF==12 ;LINE FEED
FF==14 ;FORM-FEED
HPAGE==20 ;HALF PAGE
ALTMOD==33 ;NEWEST ALTMODE
ALT175==175 ;OLDEST ALTMODE
ALT176==176 ;OLDER ALTMODE
LA==137 ;LEFT ARROW
CZ==32 ;CONTROL Z
XON==21 ;^Q,START TTY PTR
XOFF==23 ;^S,STOP TTY PTR MODE
COMMA==54
PERIOD==56 ;PERIOD
COLON==72
SPACE==40
DEL==177 ;DELETE,RUBOUT,REPEAT MOD.35
TAB==11 ;TAB
SUBTTL MACRO DEFINITIONS
DEFINE SKIP (J)<JRST .+1+'J>
DEFINE LSTLIN (Z),<
MOVEI T1,Z
PUSHJ P,LISTIT>
DEFINE ERRPNT (X),<
JSP T1,PTEXT
XLIST
ASCIZ X
LIST>
DEFINE ERRPN2 (X),<
JSP T1,PTEXT2
XLIST
ASCIZ X
LIST>
;MACRO TO THROW AWAY CURRENT LINE BEFORE PRINTING ERROR MESSAGE
DEFINE ERRPNX (X)<
JSP T1,PRETXT
XLIST
ASCIZ X
LIST>
DEFINE SWSEG <
IFN REENT, <RELOC>>
SUBTTL INITIALIZE AND FIND TMP FILES IF CCL ENTRY
PIP1: IFN CCLSW,<
TDZA FLAG,FLAG ;NORMAL ENTRY TO ACCEPT COMMANDS FROM TTY
SETO FLAG, ;CCL ENTRY TO READ COMMANDS FROM DISK FILE>
MOVE 0,[LOW,,LOW+1] ;XWD FOR BLT TO
SETZM LOW ;CLEAR DATA AREA
BLT 0,LOWTOP-1 ;TO ZERO
MOVSI 'TTY' ;TEST TTY TO SEE IF NOT A REAL TTY
DEVCHR
TXNE 0,DV.TTY ;WELL IS IT
SKIP 2 ;YES
OUTSTR [ASCIZ /?Logical TTY must be physical TTY/]
EXIT 1, ;NO, DO MONRET
MOVEI P,PDL-1 ;[144] INIT PDL
IFN FTDSK,<
MOVE [PTHLEN+3,,JOBPTH]
SETOM JOBPTH ;FIND JOB'S DEFAULT PATH
PATH. ;GET PATH
SETZM JOBPTH ;FAILED NOT SFD'S
IFN LEVELC,< ;[322]
MOVE [XWD 17,11] ;STATES WORD
GETTAB ;GET IT
SETZ ;ERROR RETURN
TLNN (7B9) ;TEST FOR LEVEL D
TDZA ;NOT LEVEL D
>;[322] END IFN LEVELC
HRROI -2 ;THIS IS LEVEL D
MOVEM LEVEL ;SAVE
GETPPN 0, ;[163] GET OUR PPN
JFCL ;[163] ALLOW FOR PRIVILEDGED
MOVEM 0,JOBPPN ;[163] AND SAVE IT
SKIPN JOBPTH ;[211] SEE IF PATH WORKED
MOVEM 0,JOBPTH+2 ;[211] NO, SAVE OUR PPN AS DEFAULT PATH
MOVX 0,%LDSYS ;[163] GET PPN OF SYS:
GETTAB 0, ;[163]
MOVE 0,[XWD 1,1] ;[163] LEVEL C
MOVEM 0,SYSPPN ;[163] AND SAVE IT
MOVX 0,%LDMFD ;[163] GET PPN OF MFD:
GETTAB 0, ;[163]
MOVE 0,[XWD 1,1] ;[163] LEVEL C
MOVEM 0,MFDPPN ;[163] AND SAVE IT
;**;[514] Insert 4 lines at PIP1+40L RLUSK 12-June-81
MOVX 0,%LDFFA ;[514] GET PPN OF FFA:
GETTAB 0, ;[514]
MOVE 0,[XWD 1,1] ;[514] LEVEL C
MOVEM 0,FFAPPN ;[514] AND SAVE IT
>;[163] END IFN FTDSK
IFE REENT,<
IFE FTDSK,<HLRZ T1,.JBSA ;NO DSK SO USE JOBFF>
IFN FTDSK,<MOVEI T1,DSKDR0 ;ASSUME NO DISK FOR TEST, LOC OF DSK RTNS
MOVSI 0,'DSK'
DEVCHR ;DEVCHR REQUEST: IS THERE A DSK
JUMPE 0,P1 ;0 IF NO DISK: USE DSKDR
MOVE T1,.JBFF ;DISK: PREPARE TO SAVE C(JOBFF)
HRRZ T2,.JBREL ;HIGHEST REL LOC AVAILABLE TO USER
CAIL T2,6000 ;CURRENT SIZE 4K
JRST P1 ;YES
MOVEI T2,7777 ;NO. EXPAND TO 4K
HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED
CORE T2, ;CORE UUO
JRST CERR7 ;CORE UNAVAILABLE>
>
IFN REENT,<
HLRZ T1,.JBSA ;GET JOBFF>
P1: HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED
RESET ;RESET. MOVES JOBSA (LH) TO C (JOBFF)
IFE CCLSW,<JRST PIP>
IFN CCLSW,<JUMPE FLAG,PIP ;ENTER PIP IF NO COMMAND FILE
MOVEI PIP1 ;GET STARTING ADDRESS
HRRM .JBSA ;RESET IT SO ^C START WILL WORK
;THIS IS MODIFICATION FOR USING TMPCOR WITH CCL
IFN TEMP,< ;[167]
MOVE T1,[XWD 1,TMPFIL];SET BLOCK POINTER FOR TMPCOR UUO
;1=READ ONLY, LOC OF FILENAME
MOVSI T2,'PIP'
MOVEM T2,TMPFIL
MOVSI T2,-1000 ;[403]
HRR T2,SVJBFF ;CALCULATE TMPFIL ADDRESS FOR BUFFER
HRRZ T5,.JBREL ;GET TOP OF CORE
CAIGE T5,1000(T2) ;[403] WILL BUFFER FIT IN AVAILABLE CORE?
JRST [ADDI T5,1000 ;[403] NO, TRY FOR ONE MORE K
CORE T5,
JRST OMODER ;FAILED, GIVE UP
JRST .+1] ;WILL BE OK NOW
MOVEM T2,TMPFIL+1 ;STORE IN TMPFIL+1
SOS TMPFIL+1 ;MAKE IT AN IOWD
TMPCOR T1, ;READ AND DELETE PIP FILE
;T1 ON RETURN=NOWDS IN CS
JRST P11 ;NO PIP FILE IN CORE TRY DSK
HRLI T2,440700 ;SET UP BYTE POINTR FOR COMMANDS
MOVEM T2,TMPPNT ;USE LATER IN GETSC
SETOM TMPFLG ;SIGNAL THAT TMPCOR WAS USED
MOVNI 0,(T1) ;GET NUMBER OF WORDS
HRLM 0,TMPFIL+1 ;IN CASE COMMAND FAILS
ADDB T1,SVJBFF ;CALCULATE END OF TMPCOR BUFFER
MOVEM T1,TMPEND ;STORE FOR LATER USE
SETOM COMFLG ;MARK THAT CCL IS IN ACTION
JRST PIP2A ;START PIP
P11:>
PJOB T1, ;GET JOB NBR.
MOVEI 0,3 ;SET TO GENER. 3 DIGIT JOB NO
IDIVI T1,^D10 ;DIVIDE BY 10
ADDI T2,"0"-40 ;REMAINDER MAKE SIXBIT
LSHC T2,-6 ;SHIFT T2 RIGHT INTO T3
SOJG 0,.-3 ;DECREMENT AND LOOP
HRRI T3,'PIP'
MOVEM T3,CFILE ;INSERT JOB NBR IN CCL INIT
MOVSI T3,'DSK'
MOVEM T3,CCLINI+1 ;DEFAULT DEVICE
MOVSI T3,'TMP'
SETZM CFILE+3
P12: MOVEM T3,CFILE+1
SETZM CCLINI ;CLEAR MODE
MOVEI T3,CFI ;COMMAND FILE BUFFER HEADER
MOVEM T3,CCLINI+2
MOVE T1,CFILE+3 ;[301] SAVE PPN IN CASE OF ERROR
OPEN COM,CCLINI ;INIT DEVICE FOR CCL OR @
JRST CER1 ;CAN'T INIT
LOOKUP COM,CFILE ;LOOKUP COMMAND FILE
JRST [TRNN FL,NSWTCH ;[351] UNLESS A DOT WAS TYPED
SKIPN CFILE+1 ;[351] IF CCL FILE NOT FOUND
JRST CER2 ;NO, REAL FILE NOT FOUND
SETZM CFILE+1 ;[351] TRY AGAIN WITH NO EXTENSION
JRST .-1]
INBUF COM,1 ;1 BUFFER ONLY
MOVE 0,.JBFF ;SAVE JOBFF NOW
HRRZM 0,SVJBFF ;TO LEAVE COMMANDS INTACT WHEN BUFFERS RECREATED
SETOM COMFLG ;SUCCESS: COMMAND FILE REQUESTED
JRST PIP2A
CER1: ERRPNT </?File />
PUSHJ P,P6BIT
CFILE
ERRPN2 </.TMP init failure!/>
CER2: SETOM COMEOF ;FORCE EXIT AFTER MESSAGE
ERRPNT </?Command file />
MOVEI T3,CFILE ;ADDRESS OF FILE NAME
PUSHJ P,FN.EX ;PUT IT IN MESSAGE
ERRPN2 </ not found!/>
PIP2: TLNE FLAG,TID;[125] NEED TO SET TAPE ID?
PUSHJ P,WRTID ;YES
SKIPE COMFLG ;LAST COMMAND CCL?
SKIPN COMEOF ;ANY MORE CCL COMMAND?
JRST PIP2A ;YES,GET NEXT PIP COMMAND
CLOSE CON, ;FORCE OUTPUT OF ERROR MESSAGE
EXIT 1, ;NO,CAN EXIT
SETZM COMFLG ;CLEAR FLAG NOW
JRST PIP2A ;JUST INCASE MONITOR RETURNS>
IFE REENT,<IFN FTDSK,<
CERR7: ERRPNT </?4K needed/>
EXIT ;EXIT TO MONITOR>>
SUBTTL SCAN COMMAND STRING
PIP:
;NEW COMMAND STRING SCAN STARTS HERE
IFE CCLSW,<PIP2: >
PIP2A: JSP T5,INICN1 ;INITIALIZE THE TTY AND PDL
IFN CCLSW,<SKIPE COMFLG ;ACCEPT NEW PIP COMMAND?
JRST PIP2B ;NOT PIP (TTY) COMMD, BUT CCL>
MOVEI 0,"*" ;TYPE ASTERISK******
IDPB 0,TFO+1 ;READY TO ACCEPT
OUTPUT CON, ;COMMAND FROM TTY
PIP2B: SETZM TOTBRK ;CLEAR PAREN COUNTER
MOVEI 0,TABSP ;SPACES PER TAB
MOVEM 0,TABCT ;INITIALIZE TAB COUNT
MOVE 0,ZRO ;ASCII /00000/
MOVEM 0,SQNUM ;INITIALIZE SEQUENCE NUMBERS
RELEAS CON, ;RELEASE TTY FOR USE AS IN-OUT DEVICE
MAINA1: SETZB FLAG,FZERO ;INITIALIZE FOR FIRST/NEXT COMMAND STRING
SETZB AUXFLG,DEVICE
IFN FTDSK,<HRRZI 0,'SYS' ;SYSTEM DIRECT DEV, DSK/DTA
HRLZM 0,ADSK ;PUT IN SYSTEM DEVICE>
MOVE 0,[XWD FZERO,FZERO+1]
BLT 0,LZERO ;CLEAR STORAGE AREA
SETZ CALFLG, ;CLEAR OTHER FLAGS
;**;[520] Change 1 line at MAINA1+7L RLUSK 7-January-1982
MOVEI 0,.RBPCA ;[520] [273] SET UP EXTENDED BLOCKS
MOVEM 0,ZRFEX+.RBCNT ;[273]
MOVEM 0,DTONEX+.RBCNT ;[273]
IFN CCLSW,<SKIPE COMFLG ;CCL COMMAND?
JRST COMPRO ;YES, GET FROM CORE OR DSK>
MOVE T3,.JBFF ;FREE CORE POINTER
HRLI T3,(POINT 7) ;FORM BYTE POINTER
MOVEM T3,COMPTR ; FOR STORING CS IN CORE
;ACCUMULATE CS CHARS IN CORE
COMSTO: PUSHJ P,GETTA ;GET CS CHAR
AOS COMCNT ;COUNT CHARS
MOVEI T4,1(T3) ;GET BYTE POINTER ADDRESS PLUS SOME
CAMGE T4,.JBREL ;SEE IF IT WILL BE IN BOUNDS
JRST .+3 ;YES, ALL IS WELL
CORE T4, ;GET WHAT WE NEED
JRST OMODER ;FAILED, UNLIKELY TO HAPPEN
CAIN 0,CZ ;CHECK FOR ^Z
COMASK: PUSHJ P,GETEN2 ;SET ^Z IN 0
IDPB 0,T3 ;STORE IN COMBUF
SKIPE COMEOF ;END-OF-FILE SET?
AOJA T3,COMSTD ;YES, PROCESS CS IN COMBUF
CAIG 0,CR ;NOT EOF
CAIGE 0,LF ;LF,VT,FF,CR?
CAIN 0,ALTMODE ;NO, $?
JRST COMASK ;YES
JRST COMSTO ;NO, KEEP STORING
COMSTD: HRRM T3,.JBFF ;RESET JOBFF TO RETAIN STORED COMMAND
HRRM T3,DTJBFF ;ALSO JOBFF AFTER 2 TTY BUFFERS (PLUS COMMAND)
; AND FALL INTO COMPRO
;********************************************************************
;BEGIN SCAN OF DESTINATION PORTION OF COMMAND STRING
COMPRO:
SETZM DEVICE ;[163] ENSURE THAT WE GET DEFAULT
COMPRP: RELEASE CON, ;RELEASE TTY
PUSHJ P,NAME ;GO SCAN DESTINATION PORTION OF COMMAND STRING
SKIPE XNAME ;NO SCAN OVERSHOOT ALLOWED
JRST ERR6A
SKIPL ESWTCH ;11/25/69 END OF CS ?
JRST MAINC ;NO
IFN CCLSW,<SKIPE COMFLG ;STILL IN CCL
JRST PIP2 ;YES>
TLNE AUXFLG,QFLG ;PERHAPS JUST /Q?
JRST MAINQ ;YES IT WAS
TRNN CALFLG,NSWTCH ;NON-NULL DESTINATION
TRNE CALFLG,SSWTCH ;_ NOT SEEN?
SKIPE FILNAM ;OR ANYTHING IN FILENAME
JRST ERR6A ;YES, ERROR
JRST PIP2 ;NO, ALL OK
MAINQ: MOVSI 0,'TTY' ;[163] /Q DEFAULT IS TTY
SKIPE DEVICE ;[163] SO USE IT IF NOTHING TYPED
MAINC: MOVE 0,DEVICE ;[163] SEE IF ANYTHING TYPED
SKIPN 0 ;[163]
MOVSI 0,'DSK' ;[163] NOTHING TYPED, USE DSK:
IFN FTDSK,< ;[240]
MOVEM 0,ADSK ;[240] SAVE FOR ERROR TYPEOUT
>;[240] END IFN FTDSK
MOVEM 0,DEVICE ;[205] IF DEFAULT, SAVE IT
MOVEM 0,ODEV ;SAVE DEVICE NAME FOR LATER USAGE
PUSHJ P,DEVTST ;SAVE DEVICE TYPE, SET XXXOUT.E.G. DTAOUT
PUSHJ P,ABCHK ;CHECK MTA BACKSPACE/ADV VALUES
PUSHJ P,PROTK ;CHECK PROTECTION
MOVE 0,AB ;MTA VALUE SWITCHES
MOVEM 0,ABOUT ;GET MTA CONTROL NUMBERS FO R OUT
MOVE 0,AUX
MOVEM 0,AUXOUT
MOVE 0,[FILNAM,,DTON]
BLT 0,DTON+3 ;SAVE DESTINATION FILE NAME
IFN FTDSK,<TRNN AUXFLG,DSKOUT ;DISK OUTPUT?>
SETZM DTON+3 ;ZERO 4TH WD OF DIRECTORY ENTRY
IFN FTDSK,< ;[211]
MOVE 0,DTON+3 ;[273] GET PPN FROM OLD PLACE
MOVEM 0,DTONEX+.RBPPN ;[273] AND SAVE IT EXTENDED
SKIPN PP ;[323] SEE IF EXPLICIT PPN GIVEN
JRST M3 ;[211] NO, SKIP COPY
MOVE 0,[PTHADD,,PTHOUT]
HRRZM 0,DTON+3 ;[323] ALSO CHANGE OLD PLACE
HRRZM 0,DTONEX+.RBPPN ;[273] SAVE PATH ADDRESS EXTENDED
BLT 0,PTHOUT+PTHLEN+3
>
M3: TRZ CALFLG,SSWTCH ;TERMINATE DESTINATION FILE SCAN
IFE FTDSK,<SETZM DEVICE ;DONT CARRY OVER INPUT DEVICE>
IFN FTDSK,<SETZM PPP ;CLEAR OUTPUT PPN
SETZM DEVPP ;[163] AND ERSATZ DEVICE PPN
SETZM PP ;JUST IN CASE
SETZM PTHADD ;AND FULL PATH JUNK
MOVE 0,[XWD PTHADD,PTHADD+1] ;[221] CLEAR ALL OF PATH SPEC
BLT 0,PTHADD+PTHLEN+3 ;[221]
SETZM DEFPTH ;AND ITS DEFAULT
MOVE 0,[XWD DEFPTH,DEFPTH+1] ;[211] CLEAR ALL OF PATH SPEC
BLT 0,DEFPTH+PTHLEN+3 ;[221]
MOVSI 0,'DSK' ;DEFAULT CASE DSK
TRNN FLAG,XFLG ;[341] CLEAR OUTPUT FOR /X/D
TRNN FLAG,RFLG!DFLG ;[163] FORCE CONSTANT DEV: FOR /D & /R
MOVEM 0,DEVICE ;MUST NOT LET O/DEV. CARRY OVER AS I/DEV.>
M3A: PUSHJ P,DESCRP ;GET A UNIT DESCRIPTOR (INPUT).
TLNN AUXFLG,QFLG ;[230] /Q?
JRST M2 ;NO
HRRZI 0,'SYS' ;YES MAKE INPUT DEVICE SYS
HRLZM 0,DEVICE
HRLZM DEVA ;SAVE COPY OF INPUT DEVICE
MOVE 0,['PIPHLP'] ;NAME.EXT FOR HELP TEXT
HLLZM 0,FILNAM
HRLZM 0,FILEX
TDZ FLAG,[XWD -1-GFLG-WFLG-TID,-1-SPMOD-TBMOD-BMOD-SQMOD-MTFLG-ZFLG];[230]
TDZ FL,[XWD MFLG,FNEX+TMPI+NSWTCH];[230] CLEAR ANY EXTRA
TRO FL,DEV+NEWDEV+MATEX+MATFN ;[230] SET WHAT WE WANT
SETZM PP ;[163] CLEAR PPN FOR SYS:
SOS ESWTCH ;NO MORE COMMAND STRING
PUSHJ P,CHECK1 ;CHECK INPUT DEVICE
M2: TLO AUXFLG,NOMORE ;NO MORE SWITCHES BUT MTA ALLOWED
TLNE FLAG,OFLG ;BLOCK 0 COPY?
JRST BLOCK0 ;YES
;CHECK TO SEE IF IN COPY MODE WITH WILD CARD OUTPUT BUT /X WASN'T GIVEN
TRNN FLAG,RFLG!DFLG ;[244] DON'T FORCE /X FOR /R/D
TRNN AUXFLG,DTAOUT!DSKOUT ;[244] SEE IF DIRECTORY OUTPUT
JRST M2B ;[244] NO
SKIPN OQMASK ;[244] YES, SEE IF WILD CARDS
SKIPE OQMASK+1 ;[244] IN NAME OR EXTENSION
SKIPA ;[244] YES
JRST M2B ;[244] NO
TRNN FLAG,LFLG ;[244] YES, SEE IF /L OR /F
TRNE AUXFLG,FFLG ;[244] CAUSE THAT WON'T WORK
JRST ERR13 ;[244] THAT'S A NONO
TLNE FL,TSKOUT ;[312] BUT IS THE OUTPUT DEVICE TSK:?
JRST ERR14 ;[312] YES, WELL THAT WON'T WORK
TRO FLAG,XFLG ;[244] OK, SWITCH TO /X
M2B: ;[244]
TRNN FLAG,XFLG ;/X ?
JRST M2A ;NO
TRNE FLAG,RFLG ;(RX)?
JRST M5 ;YES, (RX)
MOVE 0,DTON ;GET FILE NAME
JUMPN 0,M5 ;BELIEVE ANYTHING BUT ZERO
HLRZ 0,DTON+1 ;SAME FOR EXT
JUMPN 0,M5
M2A: IFN RIMSW,<
TLNN FLAG,RIMFLG ;RIM OUTPUT?
JRST M1 ;NO
TRNE AUXFLG,PPTOUT ;RIM IS ONLY DTA TO PTP
TRNN AUXFLG,DTAIN!DSKIN!MTAIN
JRST ERR5B>
M1: MOVEI T4,1 ;ASCII LINE MODE ASSUMED
PUSHJ P,OUTLOOK ;SEE IF OUTPUT DEV MTA
PUSHJ P,M4 ;NOT MTA
TLNE FLAG,JFLG ;NON STARDARD MODE ?
TRO T4,IO.D29 ;TO PUNCH 029 ON CDP
TRNN AUXFLG,TTYOUT ;[251] SEE IF OUTPUT TO TTY
TRZ T4,IO.D29 ;[251] YES, THEN DON'T SET /J IO.SEM
HRRZM T4,OMOD ;SET MODE OF OUTPUT DEV
MOVEI T4,1
PUSHJ P,INLOOK ;SEE IF INPUT DEV MTA
PUSHJ P,M4 ;NOT MTA
HRRZM T4,ININI1 ;SET MODE OF INPUT DEV
PUSHJ P,FNSET ;NOW DEVICE, DEVA CORRECT FOR START
JRST OMOD1 ;INIT OUTPUT DEVICE
SUBTTL INITIALIZE INPUT AND OUTPUT DEVICES
;SET MODE IF /I,/B,/H,
M4: TRNN FLAG,BMOD ;BINARY MODE?
JRST .+3 ;NO
TXZ T4,IO.MOD ;CLEAR ALL MODES
TXO T4,.IOBIN ;BIN. MODE
TLNN FLAG,IFLG ;IMAGE BINARY MODE?
JRST .+3 ;NO
TXZ T4,IO.MOD ;CLEAR ALL MODES
TXO T4,.IOIMG ;IM. MODE
TLNN FLAG,IBFLG ;IMAGE BINARY MODE?
JRST .+3 ;NO
TXZ T4,IO.MOD ;CLEAR ALL MODES
TXO T4,.IOIBN ;YES
TRNE FLAG,XFLG ;COPY MODE?
POPJ P, ;YES, DON'T ALTER DATA MODE
TRNE FLAG,DFLG+RFLG ;DELETE OR RENAME?
TXO T4,IO.UWC ;DIRECTORY WILL BE WRITTEN, DON'T
POPJ P, ;COMPUTE WORD COUNT MODE NEEDED.
;FORCE MONITOR TO USE WORD COUNT
;IN FIRST DATA WORD OF BUFFER
M5: TRZ FLAG,RFLG ;CLEAR /R FLAG
TRO CALFLG,RXFLG ;SET (RX) FLAG
MOVE 0,[DTON,,MATCH]
BLT 0,MATCH+1 ;SAVE NAME AND EXT
JRST M2A ;RETURN
;IF OUTPUT DEVICE IS MTA PERFORM ALL PRE-TRANSFER REQUESTS
;SUCH AS REWIND. IF OUTPUT DEVICE IS MTA, AND THERE IS NO
;INPUT DEVICE, EXIT. FOR OTHER MTA OUTPUT, PREPARE INIT
;DENSITY AND PARITY.
OUTLOOK:
MOVE T3,ABOUT ;AB FOR OUTPUT DEV
MOVE T1,AUXOUT ;AUX FOR OUTPUT DEV
MOVEI T6,INOMTA ;SET TO INIT
JRST MT1 ;MTA FOR OUTPUT
;SAME FOR INPUT DEVICE.
INLOOK: SKIPE T3,FILNAM ;IF NO FILENAME
TRNN FLAG,XFLG ;OR NOT /X
JRST INLUK1 ;CONTINUE
SKIPE DTON ;IF OUTPUT NAME SET UP
JRST INLUK1 ;CONTINUE
HLRZ T1,FILEX ;GET EXT
MOVEM T3,DTON ;SET OUT NAME
HRLZM T1,DTON+1 ;AND EXTENSION
INLUK1: MOVE T3,AB ;ADV OR BKSPACE
MOVE T1,AUX ;AUX FOR INPUT DEV
MOVEI T6,INIMTA ;SET TO INIT
JRST MT1 ;MTA FOR INPUT
;ROUTINE TO INITIALIZE OUTPUT DEVICE
OMODE: IFN TEMP,<
TRNE CALFLG,TMPO ;TMPCOR OUTPUT DEVICE?
JRST OMOD2 ;YES, NO OUTBUFS>
TRNN FLAG,RFLG!DFLG ;[334][323] IF DOING DELETE OR RENAME
JRST OMODE3 ;[334] NO
TRNN FLAG,XFLG ;[334] EXCEPT FOR /X/D
TRNE AUXFLG,DTAIN!DTAOUT ;[333] OR DECTAPE
JRST OMODE3 ;[334][333] WHICH USE OUT
JRST OMOD2 ;[323] DON'T WASTE THE EFFORT
OMODE3: MOVE T1,[XWD OBF,IBF] ;[334]
MOVEM T1,ODEV+1
MOVE T1,DTJBFF ;JOBFF AFTER 2 TTY BUFS
MOVEM T1,.JBFF ;SET UP
OPEN OUT,OMOD ;INITIALIZE OUTPUT DEVICE
JRST ERR1 ;UNAVAILABLE ERROR
OUTBUF OUT,1 ;TRY ONE OUTBUFFER FOR SIZE
EXCH T1,.JBFF ;JOBFF_DTJBFF+BUFSZ
;NOTE JOBFF RESET TO DTJBFF
SUB T1,DTJBFF ;T1=BUFSZ
HRRZ 0,.JBREL ;HIGHEST CORE AVAILABLE
SUB 0,DTJBFF ;0=TOTAL CORE AVAILABLE
IDIVM 0,T1 ;FIT IN HALF THE AVAILABLE SPACE
CAILE T1,2 ;[305] DID WE GET MORE THAN 2 TO FIT?
ASH T1,-1 ;[305] YES, THEN DIVIDE NUMBER BY 2
MOVEI T4,OMODE ;SET RETURN FROM CORCHK
PUSHJ P,CORCHK ;LOOP BACK OR ERROR IF NOT ENOUGH CORE
OUTBUF OUT,(T1) ;SET UP OUTPUT BUFFERS
MOVE 0,OBF+1
MOVEM 0,SVOBF ;SAVE ORIGINAL MODE SETTING
OMOD2: MOVE 0,.JBFF
HRRZM 0,SVJBF1 ;PREPARE TO RECLAIM INBUFFER SPACE
POPJ P,
OMOD1: PUSHJ P,OMODE ;GO INITIALIZE OUTPUT DEVICE
TRZN FLAG,ZFLG ;[163] /Z IN COMMAND STRING
JRST MAINA2 ;NO,
PUSH P,DTON ;[204] SAVE TYPED FILE NAME WHICH GETS CLOBBERED
PUSHJ P,DTCLR ;[204] YES, GO CLEAR DIRECTORY
POP P,DTON ;[204] RESTORE CLOBBERED OUTPUT FILE NAME
MOVE 0,DEVICE ;[254] RESTORE ADSK
MOVEM 0,ADSK ;[254] SINCE DISK ZERO CLOBBERED IT
RELEASE OUT,
RELEASE DIR,
TRNN CALFLG,NSWTCH ;SEE IF DEVICE WAS TYPED
JRST OMOD1 ;YES
JRST PIP2 ;GET NEXT COMMAND
;ROUTINE TO CHECK FOR ENOUGH CORE FOR I/O BUFFERS
;ENTER T1: COMPUTED NUMBER OF BUFFERS WE WANT
; T4: WHERE TO GO IF WE EXPAND CORE
CORCHK: CAIL T1,2 ;ROOM NOW FOR AT LEAST 2 BUFFERS?
POPJ P, ;YES, RETURN OK
JUMPLE T1,MORCOR ;HAVE TO GET MORE ROOM IF NONE
HRRZ 0,.JBREL ;WANTED 1, SEE IF WE CAN GET 2
ADDI 0,1000 ;TRY 1/2K MORE
CORE 0,
POPJ P, ;NO, LIVE WITH 1 BUFFER
POP P,0 ;YES, POP OFF PUSHJ CALL
JRST (T4) ;AND RECOMPUTE
MORCOR: HRRZ 0,.JBREL ;TRY TO GET
ADDI 0,2000 ;1K MORE OF CORE
CORE ;ASK MONITOR FOR 1K CORE
JRST OMODER ;NOT AVAILABLE
JRST (T4) ;GOT IT
OMODER: ERRPNT</?Not enough core/>
EXIT
SUBTTL PROCESS INPUT COMMAND STRING
MAINA2: TRNE FLAG,RFLG+DFLG ;RENAME OR DELETE FILE MODE?
JRST DTDELE ;YES./D,/X,OR(DX)
IFN RIMSW,<
TLNE FLAG,RIMFLG ;RIM?
JRST RIMTB ;YES./Y
>
TRNE FLAG,XFLG ;TRANSFER EVERYTHING MODE?
JRST PRECOP ;YES./X
;LOOP TO COPY ALL FILES BEGINS HERE FROM MAIN2
MAINA3: TRNN AUXFLG,FFLG ;LIST DSK DIR SHORT?
TRNE FLAG,LFLG ;LIST DIRECTORY?
JRST DTPDIR ;YES./F OR /L
IFN TEMP,<
TRNE CALFLG,TMPI ;TEMCOR:
JRST TMPIN ;YES THIS IS SPECIAL>
MANA3A: ;[206]
PUSHJ P,ININIT ;INITIALIZE INPUT FILE
TRNN AUXFLG,NULIN ;[344] NUL: INPUT OR
TRNN CALFLG,FNEX ;SINGLE FILE SPECIFICATION?
JRST [MOVE 0,[FILNAM,,ZRF] ;YES, DON'T READ DIRECTORY
BLT 0,ZRF+3 ;SET UP FILE NAME,EXT, AND PPN
MOVE 0,ZRF+3 ;[273] GET PPN BACK
MOVEM 0,ZRFEX+.RBPPN ;[273] AND SAVE EXTENDED
SETZM GENERI ;JUST IN CASE
JRST MANA42] ;[211]
TRNE AUXFLG,DTAIN ;DEC TAPE INPUT?
PUSHJ P,DTADIR ;INIT DTA DIR
IFN FTDSK,<TRNN AUXFLG,DSKIN ;NO, DISK INPUT?
JRST MAINA4 ;NO
PUSHJ P,INITFS ;INIT SEARCH LIST IF LEVEL D
JRST MANA41 ;[211] NOT GENERIC "DSK"
MAINAD: PUSHJ P,NXTFSU ;GET NEXT F/S
JRST [TRNN AUXFLG,REDFLG ;WAS FILE FOUND?
PUSHJ P,ERR3A ;NO
JRST MAINA7] ;NO MORE F/S
TROA CALFLG,FNEX ;KEEP THE FLAG FLYING
MANA41: ;[211]
PUSHJ P,DSKDIR ;INIT DSK UFD CHANNEL>
MAINA4: PUSHJ P,LOOK ;GET A FILE TO COPY
JRST MAINA5 ;NO MORE
MANA42: ;[211]
IFN FTDSK,<PUSHJ P,SETPTH ;SEE IF FULL PATH
MOVEM 0,ZRFEX+.RBPPN ;[273] NON-SKIP RETURN, USE IT
MOVE T1,LEVEL ;[273] GET -2 FOR LEVELD
TRNN AUXFLG,DSKIN ;[273] SEE IF DISK INPUT FOR EXTENDED LOOKUP
>;[273] END IFN FTDSK
SETZ T1, ;[273] CLEAR INDEX IF NOT DISK
LOOKUP IN,ZRF(T1) ;[273] DO EXTENDED LOOKUP FOR DISK
JRST MAINQ1 ;[230] LOOKUP FAILURE, GO SEE IF /Q
IFN TEMP,<TRNE CALFLG,TMPO
JRST TMPOUT ;OUTPUT TO TMPCOR>
TLO FLAG,NEWFIL
PUSHJ P,FILTYP
TRNE AUXFLG,ONEOUT
JRST PSCANA ;OUT HAS BEEN INITIALIZED
PUSHJ P,EXTENT ;[273] GO DO ENTER OF RIGHT FLAVOR
JRST PSCANA
MAINQ1: TLZN AUXFLG,QFLG ;[230] SEE IF /Q, FIRST TIME THRU
JRST ERR3 ;[230] NO, ERROR
MOVSI 0,'HLP' ;[230] YES, TRY HLP: AFTER SYS:
MOVEM 0,DEVICE ;[230]
JRST MANA3A ;[230] GO DO LOOKUP AGAIN
MAINA5:
IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT
JRST MAINAD ;YES, GET NEXT F/S>
MAINA7: TRZE AUXFLG,REDFLG ;[257] SEE IF READ ANYTHING
JRST MAIN1 ;[257] YES, CONTINUE
TRNE AUXFLG,DTAIN ;[257] NO, IF DECTAPE IN, THEN
PUSHJ P,ERR3A ;[257] PRINT FILE NOT FOUND MESSAGE
JRST IOERRN ;[257] AND RELEASE EVERYTHING
PSCANB: TRNE AUXFLG,MTAIN!CDRIN!TTYIN!PPTIN ;ON NON-DIR DEVICE?
TRZ CALFLG,ALLCLF ;END OF THE ONE OR MANY FILES SPECIFIED
TRON AUXFLG,ONEOUT ;HAS OUT JUST BEEN INIT?
OUTPUT OUT, ;YES, AND FIRST FILE IS EOF ONLY, INIT OUT IN
;CASE NO MORE SOURCE FILES
JRST PSCAN5 ;EMPTY FILE, CLOSE INPUT, RETURN FOR MORE
SUBTTL FILE COPYING ROUTINES
PSCANA: TRO AUXFLG,REDFLG ;SET FLAG FOR INPUT FILE READ
PUSHJ P,INP ;GO READ INPUT FILE
TRZ AUXFLG,READ1
PUSHJ P,TTYZ ;CHECK IF INPUT IS TTY
TXNE IOS,IO.EOF ;EOF FIRST DATA?
JRST PSCANB
SKIPN IBF+2
JRST PSCANA
PSCAN: TRO AUXFLG,ONEOUT ;INDICATE ONE OUTPUT FILE INITED
TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN. OR NO CHAR. PROCESSING
TLNE AUXFLG,SBIN
JRST PSCAN3 ;YES
MOVE 0,OPTRA ;PRESCAN A LINE, INITIALIZE LINE BUFFER PTR
MOVEM 0,OPTR
SETZM CDRCNT
PUSHJ P,CLRBUF ;CLEAR LINE BUFFER
TRO FLAG,STS ;START A FRESH LINE
PSCAN2: PUSHJ P,GET ;GET CHARACTER
JRST PSCAN1 ;END OF FILE RETURN
CAIN CHR,DEL ;VJC 4/16/69
JRST PSCAN2 ;GET NEXT CHAR
HRRZ T1,OPTR ;GET DEPOSIT ADDRESS
CAIL T1,LBUFE
PUSHJ P,PSCLNG ;LINE TOO LONG
IDPB CHR,OPTR ;DEPOSIT CHAR. IN LINE BUFFER
CAIG CHR,24
CAIGE CHR,20 ;LINE PRINTERR CONTROL CHAR
;**;[525] REPLACE 1 LINE WITH TWO AT PSCAN2: + 10 L, 11-JAN-83, KMR
SKIP 2 ;[525] NO
TRNE AUXFLG,LPTOUT ;[525] CHECK TO MAKE SURE IT ISN'T A LPT
JRST PSCAN4 ;YES, TREAT AS END OF LINE
CAIG CHR,14
CAIGE CHR,12 ;END OF LINE CHARACTER?
SKIP 1 ;NO
JRST PSCAN4 ;YES
CAIGE CHR," " ;TEST FOR CONTROL CHARS.
CAIN CHR,CR ;BUT ALLOW CR
JRST PSCAN2 ;NONE, SO CONTINUE
CAIE CHR,TAB ;TAB IS O.K. THOUGH
TRNN AUXFLG,LPTOUT!IFN CTLTTY,<TTYOUT> ;[241] LPT? OR <TTY?>
JRST PSCAN2 ;[135] NO, DON'T CONVERT CHARACTER
IFN CTLTTY,< ;[251]
TRNN AUXFLG,LPTOUT ;[251] SEE IF TTY
TLNE FLAG,JFLG ;[251] YES, SEE IF /J
SKIPA ;[251] LPT OR /J TO TTY
JRST PSCAN2 ;[251] NOT /J TO TTY
>;[251] END IFN CTLTTY
PUSH P,CHR ;IT WAS, SO SAVE IT
MOVEI CHR,"^" ;STANDARD UP ARROW
DPB CHR,OPTR;WIPE OUT BAD CHAR
POP P,CHR ;GET IT BACK
TRC CHR,100 ;MAKE IT VISIBLE
IDPB CHR,OPTR
JRST PSCAN2 ;AND CONTINUE
PSCAN4: TRNN FLAG,TBMOD!SPMOD;REMOVED TRAILING SPACES?
JRST PSCAN7 ;NO
HLRZ T2,LBUF ;[253] GET FIRST TWO CHARACTERS
ANDI T2,(BYTE (7)-1,-1) ;[253] CLEAR RIGHT BITS
CAIE T2,(BYTE (7)CR,LF) ;[253] BLANK LINE?
JRST PSCAN7 ;NOT A BLANK LINE
;**;[530] AT PSCAN4: + 6L, INSERT 2 LINES, KMR, 22-JUN-83
TLNN FLAG,SPCNV ;[530]ALREADY DUMPED SPACES?
JRST PSCAN7 ;[530] NO, SO DON'T LEAVE A SPACE BEHIND
MOVE T2,[BYTE (7) 40,15,12,40,40]
MOVEM T2,LBUF ;GUARENTEE ONE SPACE
IBP OPTR ;DON'T FORGET THE LINE BUFFER
;**;[530] AT PSCAN7:, INSERT 1L, KMR, 22-JUN-83
PSCAN7: TLZ FLAG,SPCNV ;[530]RESET THE FLAG
PUSHJ P,OUTLBF ;YES, SO DUMP THE LINE BUFFER
JRST PSCAN ;SCAN THE NEXT LINE
PSCAN1: TRZ CALFLG,SQNSN ;[140-12349] CLEAR SEQ. NO. FOUND THIS LINE
LDB CHR,OPTR ;PICK UP LAST CHAR.
CAIN CHR,CZ ;IS IT ^Z
TRNN AUXFLG,TTYIN ;FROM TTY?
JRST PSCAN6 ;NO
SETZ CHR, ;YES,CLEAR CHAR.
DPB CHR,OPTR ;AND REMOVE FROM BUFFER
PSCAN6: PUSHJ P,OUTLBF ;DUMP THE REMAINING BUFFER
TRNE FLAG,XFLG ;COPY MODE?
JRST COPY2A ;YES, GO COPY THE NEXT FILE
PSCAN5: CLOSE IN,
JRST MAINA4
;[273] ROUTINE TO DO ENTER FOR OUTPUT FILE(S), CHECKING ON MODE OF FILE
;[273] AND DOING EXTENDED ENTER FOR DISK WITH .RBVER AND .RBSPL RIGHT
EXTENT: PUSHJ P,OKBLKS
IFN FTDSK,<
SKIPE T3,LEVEL ;[273] LOADLEVELER AND CHECK ON D
TLNN AUXFLG,NSPROT ;AND NON-STANDARD PROTECTION
JRST EXTEN0 ;[324] NOT BOTH TRUE
LDB 0,PRPTL ;GET PROTECTION CODE
SKIPN 0 ;[324] REQUESTING <000>?
MOVEI 0,100 ;[324] YES, MAKE IT <100> FOR NOW
DPB 0,PRPTD ;INTO ENTER BLOCK
EXTEN0: MOVE 0,DTONEX+.RBPPN ;[324][273][207] SAVE PPN FOR RENAME
PUSHJ P,CPYRIB ;[247] GO SET UP NEW RIB
SETO T2, ;[247] SET FLAG FOR AFTER ENTER
;**;[522] At EXTEN0+3 change 2 lines RLUSK 28-JAN-82
TRNE AUXFLG,DSKIN ;[522] [247] IF DTA OR DISK INPUT
TRNN AUXFLG,DSKOUT ;[522] [247] AND DTA OR DISK OUTPUT
JRST MANA43 ;[247] NOPE
TLNE FL,TSKOUT ;[312] BUT NOT FOR TASKS (NO DUMP MODE)
JRST MANA43 ;[312] HOPE RECEIVER WILL GET IT RIGHT
GETSTS OUT,T1 ;[247] GET CURRENT STATUS
LDB T2,[POINT 4,ZRF+2,12] ;[247] GET ORIGINAL STATUS
SETSTS OUT,(T2) ;[247] MAKE NEW FILE THE SAME
MANA43: ;[247]
TRNN AUXFLG,DSKOUT ;[273] SKIP ZEROING T3 FOR DISK OUTPUT
>;[273] END IFN FTDSK
SETZ T3, ;[273] EXCEPT FOR DISK, DO SHORT ENTER
ENTER OUT,DTON(T3) ;[273] CREATE OUTPUT FILE
JRST ERR4 ;DIR. FULL OR 0 FILE NAME
SKIPL T2 ;[247] SEE IF MODE CHANGED
SETSTS OUT,(T1) ;[247] YES, RESTORE PROCESSING MODE
MOVEM 0,DTONEX+.RBPPN ;[273][207] RESTORE PPN
POPJ P, ;[273]
;COPY RIB INFO FROM ZRF TO DTON
CPYRIB: MOVE T1,[XWD DTONEX+.RBSIZ,DTONEX+.RBSIZ+1];[273]
SETZM DTONEX+.RBSIZ ;[273] CLEAR EXTENDED AREA
;**;[520] Change 1 line at CPYRIB+2 RLUSK 7-January-1982
BLT T1,DTONEX+.RBPCA ;[520] [273] OF ANY JUNK
TRC AUXFLG,DSKIN!DSKOUT ;[307] ANYTHING BUT DISK INVOLVED?
TRCE AUXFLG,DSKIN!DSKOUT ;[307] SKIP IF DISK
JRST CPOPJ ;[275] YUP, FORGET IT
;**:[526] Insert 2 lines at CPYRIB:+ 6L, 29-MAR-83, KMR
TLNE FL,TSKIN!TSKOUT ;[526] ANY TSK DEVICES INVOLVED?
JRST CPOPJ ;[526] YES, ALL DONE
TRNE FLAG,XFLG!RFLG ;[273] /X/R?
JRST CPYRI1 ;[273] YES, ALWAYS COPY .RBSPL,.RBVER
SKIPE ESWTCH ;[273] NO, ARE WE AT END OF LINE?
TLNE FL,MFLG ;[273] WITHOUT ANY WILD CARDS?
JRST CPOPJ ;[273] NO, CONCATENATE, DON'T COPY
CPYRI1: MOVE T1,ZRFEX+.RBSPL ;[273] COPY .RBSPL
MOVEM T1,DTONEX+.RBSPL ;[273]
MOVE T1,ZRFEX+.RBVER ;[273] COPY .RBVER
MOVEM T1,DTONEX+.RBVER ;[273]
;**;[517] Add 2 lines at CPYRI1+3 RLUSK 30-October-1981
MOVE T1,ZRFEX+.RBNCA ;[517] COPY .RBNCA
MOVEM T1,DTONEX+.RBNCA ;[517]
;**;[520] Add 2 lines at CPYRI1+5 RLUSK 7-January-1982
MOVE T1,ZRFEX+.RBPCA ;[520] COPY .RBPCA
MOVEM T1,DTONEX+.RBPCA ;[520]
;**;[545] Add 6 lines at CPYRI1+7 DRB 5-November-1985
HLRZ T1,DTONEX+.RBEXT;[545] GET THE EXTENSION
TRNE FLAG,RFLG ;[545] IS THIS A RENAME?
CAIE T1,'UFD' ;[545] YES, IS THIS A UFD?
JRST CPYRI2 ;[545] NO, DON'T BOTHER WITH THE QUOTA WORDS
MOVE T1,[ZRFEX+.RBQTF,,DTONEX+.RBQTF] ;[545] SETUP BLT POINTER
BLT T1,DTONEX+.RBUSD ;[545] TO COPY THE QUOTA WORDS
CPYRI2: MOVE T1,ZRFEX+.RBSTS ;[306] GET STATUS WORD
;**;[543] Replace one line at CPYRI1+11 DRB 24-July-1985
TRNE FLAG,RFLG ;[543] IS THIS A RENAME?
TRNN T1,RP.DIR ;[306,543] YES, IS THIS A DIRECTORY?
SKIPA ;[543] NO, DON'T STORE STATUS BITS
MOVEM T1,DTONEX+.RBSTS;[306] YES, THEN MAKE SURE DATA STAYS AROUND
TRNE FLAG,RFLG ;[273] IS IT RENAME?
POPJ P, ;[273] YES, WE'RE DONE
MOVE T1,ZRFEX+.RBSIZ ;[273] NO, COPY - GET SIZE OF FILE
ADDI T1,177 ;[273] HALF ADJUST TO CHANGE TO BLOCKS
LSH T1,-7 ;[273] DIVIDE BY ^D128
MOVEM T1,DTONEX+.RBEST ;[273] AND PUT IN OUTPUT SIZE
POPJ P, ;[273]
;HERE IF LINE IS TOO LONG FOR LINE BUFFER
PSCLNG: TRNE FLAG,LINE ;FATAL IF /A LINE BLOCKING
JRST ERR10 ;SINCE WE DON'T KNOW HOW TO
PUSH P,CHR ;[511][303] SAVE CHARACTER (MAY HAVE BEEN CHANGED FROM BUFFER)
PUSHJ P,OUTLBF ;DUMP THE LINE
MOVE 0,OPTRA ;FIX UP LINE BUFFER AGAIN
MOVEM 0,OPTR
POP P,CHR ;[303] RESTORE (MAY BE TAB IN BUFFER)
JRST CLRBUF ;CLEAR LINE BUFFER AND RETURN
;HERE FOR BINARY TRANSFER
PSCAN3: SETZB T3,T4 ;SAVES TIME LATER
TLNN FLAG,PFLG ;FORTRAN BINARY DATA (BP) ?
JRST PSCAN8 ;NO
ILDB T3,IBF+1 ;GET DATA COUNT
TRZE T3,-1 ;INCASE ONLY ONE BLOCK
SETO T4, ;IT WAS, SO FLAG THAT FACT
SOS IBF+2 ;COUNT ONE LESS
PSCAN8: SKIPG IBF+2 ;[511] BUFFER EMPTY?
JRST [PUSHJ P,INP ;YES, INPUT A BUFFER
TXNE IOS,IO.EOF ;END OF FILE?
JRST PSCAN6+1 ;YES, RETURN
TLNN FLAG,PFLG ;FORTRAN BINARY?
JRST .+1 ;NO
ILDB CHR,IBF+1 ;GET FIRST DATA WORD
TRZE CHR,-1 ;INCASE LAST BLOCK
HRLI T4,-1 ;FLAG IT WAS
ADD T3,CHR ;ADD TO WORD COUNT
SOS IBF+2 ;DECREMENT WORD COUNT
JRST .+1] ;BUFFER FULL NOW
SKIPG OBF+2 ;ANY ROOM IN OUTPUT BUFFER?
JRST [PUSHJ P,OUTP ;OUTPUT FULL BUFFER
TLNN FLAG,PFLG ;FORTRAN BINARY?
JRST .+1 ;NO
SOS CHR,OBF+2 ;GET WORD COUNT-1
HRLZS CHR ;PUT COUNT IN LEFT HALF
SUB T3,CHR ;ACCOUNT FOR LAST BLOCK OUTPUT
IDPB CHR,OBF+1 ;STORE AS FIRST WORD
ADDI T3,1 ;INCREMENT BLOCK COUNT
HRR T4,OBF+1 ;SAVE INITIAL ADDRESS
JRST .+1] ;CONTINUE
MOVE T1,IBF+2 ;NUMBER OF WORDS TO GO
CAMLE T1,OBF+2 ;WILL THEY FIT?
MOVE T1,OBF+2 ;NO, SO FILL BUFFER ONLY
HRLZ T2,IBF+1 ;BLT FROM INPUT
HRR T2,OBF+1 ;TO OUTPUT
AOBJP T2,.+1 ;BUT START ON DATA WORDS
ADDM T1,IBF+1 ;ADJUST BYTE POINTER
ADDM T1,OBF+1
MOVNS T1 ;NEGATE WORDS TO GO
ADDM T1,IBF+2 ;ADJUST WORD COUNT
ADDM T1,OBF+2
BLT T2,@OBF+1 ;MOVE WORDS
JUMPGE T4,PSCAN8 ;NOT FORTRAN BINARY, OR NOT LAST BLOCK
SKIPE IBF+2 ;FINISHED WITH THIS BUFFER?
JRST PSCAN8 ;NO, WILL FIX WORD COUNT NEXT TIME
ADDM T3,(T4) ;SET FINAL WORD COUNT
SETZB T3,T4 ;JUST IN CASE
SETZM OBF+2 ;FORCE OUTPUT
JRST PSCAN8 ;GET MORE
SUBTTL FINISHED AN OUTPUT FILE, SEE IF MORE
;COME HERE AFTER /L,/D,/R ON DISK OR THROUGH COPYING
MAIN1: RELEAS DIR, ;RELEASE THE DIRECTORY DEVICE
RELEAS IN,CL.OUT ;RELEASE THE INPUT DEVICE
SKIPL T4,ESWTCH ;MORE COMMAND STRING TO PROCESS?
JRST MAIN2 ;YES
;COME HERE AFTER /D,/R ON DTA. ALSO FROM ABOVE
MAINB: ;[207]
IFN LEVELC,< ;[207]
SKIPL LEVEL ;[207] SEE IF LEVEL C
CLOSE OUT, ;[207] YES, THEN CLOSE FIRST
>;[207] END IFN LEVELC
IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-ST. PROT?
TRNN AUXFLG,DSKOUT ;DISK OUT/
JRST MAINB1 ;NO
LDB 0,PRPTL
IFN LEVELC,< ;[322]
SKIPE LEVEL ;IF LEVEL D
>;[322] END IFN LEVEL C
JUMPN 0,MAINB1 ;ALREADY SET UNLESS 0
DPB 0,PRPTD
;**;[540] Insert four lines at MAINB+14 DRB 27-Mar-85
MOVX 0,RB.CRX ;[540] CLEAR THE
ANDCAM 0,DTONEX+.RBEXT ;[540] CREATION DATE
MOVX 0,RB.CRD ;[540] TO ENSURE
ANDCAM 0,DTONEX+.RBPRV ;[540] TODAY'S DATE
SETZM DTONEX+.RBPPN ;[273][207] CLEAR OUT PPN
SETZM DTONEX+.RBALC ;[336] DON'T SHORTEN THE FILE
RENAME OUT,DTONEX ;[273] SET UP RENAME REQUEST
JRST DERR6 ;DISK ERROR
SKIPA ;[207] SKIP CLOSE
MAINB1:>
CLOSE OUT, ;[207] FINISH THE OUTPUT FILE
TRNN FL,TMPO ;[207] DON'T CHECK STATUS IF TMPCOR
PUSHJ P,OUTP1 ;[207] CHECK FINAL ERROR BITS
RELEAS OUT, ;RELEASE THE OUTPUT DEVICE
JRST PIP2 ;PROCESS THE NEXT COMMAND
MAIN2: PUSHJ P,DESCRP ;GET THE NEXT INPUT FILE TO PROCESS
PUSHJ P,INLOOK
PUSHJ P,M4
HRRZM T4,ININI1
JRST MAINA3
;END OF LOOP BEGINNING AT MAINA3
SUBTTL INITIALIZE THE INPUT FILE
ININIT: IFN TEMP,<
TRNE CALFLG,TMPI ;IF DEV IS TMPCOR:
POPJ P, ;RETURN>
HRRZ 0,ININI1 ;[164] GET THE PREVIOUS MODE (OR FIRST)
SKIPE GENERI ;[164] SEE IF GENERIC DISK
TXO 0,UU.PHS ;[164] YES, SET PHYSICAL ONLY TO GET REAL STRUCTURES
MOVEM 0,ININI1 ;[164] SAVE OLD MODE AND UU.PHS
MOVE T1,SVJBF1 ;SVJBF1=END OF OUTPUT BUFFERS
MOVEM T1,.JBFF ;COMPARE OMODE CODE
MOVEI 0,IBF
MOVEM 0,DEVICE+1
OPENIT: OPEN IN,ININI1
JRST ERR1A ;NOT AVAILABLE ERROR
INBUF IN,1 ;TRY ONE INPUT BUFFER FOR SIZE
EXCH T1,.JBFF ;HOW MANY INBUFFERS WILL FIT?
SUB T1,SVJBF1
HRRZ 0,.JBREL
SUB 0,.JBFF ;JOBREL-SVJBF1=TOTAL SPACE LEFT
IDIVM 0,T1
MOVEI T4,ININIT ;RETURN FROM CORCHK IS ININIT
PUSHJ P,CORCHK ;LOOP BACK OR ERROR IF NOT ENOUGH CORE
INBUF IN,(T1) ;SET UP AS MANY BUFFS AS FIT
MOVE 0,IBF+1 ;SAVE ORIGINAL MODE
MOVEM 0,SVIBF
POPJ P,
SUBTTL READ AN INPUT FILE SPEC AND POSITION TAPE
;THIS ROUTINE GETS AN INPUT UNIT DESCRIPTOR AND, FOR
;ADVANCE FILE AND BSPF ON MTA, ENSURES THE VALUE 1 IF NO
;NUMBER WAS GIVEN.
DESCRP: SETZM AUX ;WILL GET ANY MTA REQ. GOING TO AUXFLG.
SETZM AB ;MTA VALUE SWITCHES
SETZM PR ;PROTECTION
IFN FTDSK,<SETZM PP ;PROJ-PROG NUMBER
STORE 0,PTHADD,PTHADD+PTHLEN+3,0 ;[330] CLEAR PATH BLOCK ALSO
>;END IFN FTDSK
PUSHJ P,NAME ;GO SCAN INPUT SIDE OF COMMAND STRING
HLLZS PR ;[211] IGNORE PROTECT BIT IN RH ON INPUT
PUSHJ P,CHECK1 ;CHECK UNIT, AND FOR _
DESCR1: SKIPE XNAME ;NO OVERSHOOT ALLOWED
JRST ERR6A
ABCHK: HLRZ T2,AB ;NO RECS/FILES TO BACKSPACE
JUMPN T2,.+2 ;IF 0
MOVEI T2,1 ;GUARANTEE ONE
HRLM T2,AB ;SET AB LH
HRRZ T2,AB ;NO RECS/FILES TO ADV
JUMPN T2,FNSET ;IF 0
AOS AB ;GUARANTEE 1
JRST FNSET ;FIND OUT DETAILS OF FILENAME
;IF A NON-STANDARD OUTPUT PROTECTION IS REQUESTED, SAVE FOR RENAME.
PROTK: MOVE T1,PR
TRNN T1,1
JRST PROTK1
HLLZM T1,PROTS
HLLZM T1,PR
TLOA AUXFLG,NSPROT
PROTK1: SETZB T1,PR
POPJ P,
SUBTTL DETERMINE OUTPUT DEVICE TYPE
;TEST "DEVICE" TO SEE IF DESTINATION DEVICE IS DTA, DSK, PTP, LPT, TTY, MTA
;IF ANY IS TRUE, SET RELEVANT BIT IN AUXFLG. "0" CONTAINS
;"DEVICE" ON ENTRY.
DEVTST: DEVCHR ;GET DEVICE CHARACTERISTICS
IFN FTDSK,<TXNN 0,DV.DSK ;IS OUTPUT DEV DSK?
JRST DEVTSU ;NO
TRO AUXFLG,DSKOUT ;YES, SET BIT
POPJ P, ;[211] RETURN, DON'T CARE WHAT DEVPPN IS
DEVTSU:>;[163] END IFN FTDSK
JUMPE 0,DEVER2 ;NON-EXISTENT DEVICE
TXNN 0,DV.OUT ;CAN DEV DO OUTPUT?
JRST ERR6A ;NO
TXNE 0,DV.DTA ;DECTAPE?
TRO AUXFLG,DTAOUT ;YES
TXNE 0,DV.PTP ;PAPER TAPE PUNCH?
TRO AUXFLG,PPTOUT
TXNE 0,DV.LPT ;LINE PRINTER?
TRO AUXFLG,LPTOUT
TXNE 0,DV.TTY ;TELETYPE?
TRO AUXFLG,TTYOUT
TXNE 0,DV.MTA ;MAGTAPE?
TRO AUXFLG,MTAOUT
MOVE 0,ODEV ;GET OUTPUT DEVICE AGAIN
DEVTYP 0, ;NEED TO FIND OUT ABOUT SPOOLING
SETZ 0, ;NEED 5.03 TO SPOOL
TXNE 0,TY.SPL ;IS DEVICE SPOOLED
TLOA CALFLG,OSPLFL ;YES
TLZ CALFLG,OSPLFL ;NO
TXZ 0,<-1-TY.DEV> ;[312] CLEAR ALL BUT DEVICE CODE
HRRZ 0,0 ;[312] AND LEFT HALF
CAIN 0,.TYTSK ;[312] IS THIS TSK:?
TLOA FL,TSKOUT ;[312] YES, SAY IT'S TASK, BUT ALSO DISK
POPJ P,
TRO AUXFLG,DSKOUT ;[312] TSK: IS A DISK EXCEPT FOR ERRORS
POPJ P, ;[312]
SUBTTL SET UP THE ERSATZ DEVICE PPN IF NECESSARY
;ROUTINE TO CHECK IF DEVICE SYS,OLD,LIB,NEW AND SET [P,PN] IF NONE GIVEN
IFN FTDSK,<
;[163] CHANGE ROUTINE TO GET PPN OF ANY ERSATZ DEVICE
PSYSP: SETZM DEVPP ;[211] CLEAR ERSATZ DEVICE PPN
DEVPPN 0, ;[163] GET PPN FOR DEVICE IN 0
IFE LEVELC,< ;[211]
SETZ 0, ;[322][211] IGNORE ERRORS
>;[211] END IFE LEVELC
IFN LEVELC,< ;[211]
PUSHJ P,TRYSYS ;[163] UNSUPPORTED, DO IT THE HARD WAY
>;[211] END IFN LEVELC
CAME 0,JOBPTH+2 ;[211] UNLESS DEVICE DIFFERENT FROM OUR DEFAULT
;[211] PATH PPN, IT'S NOT ERSATZ
MOVEM 0,DEVPP ;[163] AND ERSATZ DEVICE PPN
POPJ P, ;[163]
IFN LEVELC,< ;[211]
TRYSYS: DEVNAM 0, ;[163] NO DEVPPN, SEE IF WAS LOGICAL NAME
JFCL ;[163]
CAMN 0,['SYS '] ;[163] SEE IF SYS:
SKIPA T1,SYSPPN ;[163] YES, USE SYS'S PPN
MOVE T1,JOBPPN ;[163] NO, USE OURS
MOVE 0,T1 ;[163] COPY FOR PSYSP
POPJ P, ;[163] AND GO BACK
>;[211] END IFN LEVELC
>;[163] END IFN FTDSK
SUBTTL NON-EXISTANT DEVICE, INIT P & CTY
DEVER1: IFN TEMP,<
TROA CALFLG,TMPI>
DEVER2: IFN TEMP,<
TRO CALFLG,TMPO>
IFN TEMP,< ;[211]
MOVE T1,DEVICE ;[211] GET NON-EXISTANT DEVICE NAME
DEVNAM T1, ;[211] IN CASE LOGICAL
MOVE T1,DEVICE ;[215] RESTORE DEVICE NAME SINCE TMP: GONE
HLRZ T1,T1 ;[211] SWITCH FOR COMPARE
CAIN T1,'TMP'
POPJ P, ;ALLOW DEVICE TMPCOR:
TRZ CALFLG,TMPI!TMPO ;JUST IN CASE>
MOVE T1,DEVICE
DEVER: MOVEM T1,DEVERR
ERRPNT </?Device />
PUSHJ P,P6BIT
DEVERR
ERRPN2 </ does not exist!/>
;ROUTINE TO INIT PDL POINTER AND TTY
INICN1: MOVEI P,PDL-1 ;INITIALIZE PUSHDOWN POINTER
SETZM DTJBFF ;ALWAYS REINITIALIZE IF * OUTPUT
INICN2: MOVE 0,SVJBFF ;IS INITIALIZED AT PIP1
MOVEM 0,.JBFF ;SET JOBFF TO BEGINNING OF BUFFER AREA
PUSHJ P,INICON ;INITIALIZE THE TTY
INBUF CON,1 ;ONE INBUFFER
OUTBUF CON,1 ;ONE OUTBUFFER
MOVE 0,DTJBFF ;SEE IF THIS IS FIRST TIME HERE
JUMPN 0,[MOVEM 0,.JBFF ;NO, SO SAVE POSSIBLE STORED COMMAND
JRST INICN3]
MOVE 0,.JBFF
HRRZM 0,DTJBFF ;JOBFF AFTER 2 TTY BUFFERS SET
INICN3: OUTPUT CON, ;INITIALIZE BUFFER POINTERS
JRST (T5)
;ROUTINE TO CLEAR LINE BUFFER
CLRBUF: SETZM LBUF ;SUBR. TO CLEAR LINE BUFFER
MOVE 0,[LBUF,,LBUF+1]
BLT 0,LBUFE
POPJ P,
SUBTTL TRADITIONAL COMMAND SCANNER
;COMMAND SCANNER ROUTINE
NAME: TRNN CALFLG,SSWTCH ;RETURN NULL IF _ OR END-OF-LINE SEEN
SKIPGE ESWTCH
JRST NM13 ;
TLZ FL,FNSEEN ;[323][153,207] CLEAR SINGLE SPEC FLAGS
TRZ CALFLG,NSWTCH
SKIPE T1,XNAME ;IF COMMAND SCAN OVERSHOOT PICKED UP
;DEVICE NAME, USE IT NOW
JRST NM7
TRZ CALFLG,DEV
;LOOK FOR FILE NAME, EXT
NM1: SETZM FILEX
SETZM QMASK+1 ;CLEAR WILD CHAR. MASK
TLZ CALFLG,MFLG ;AND FLAG
;[160] THIS FLAG IS USED ONLY TO TELL FILTYP THAT WE'RE DOING
;[160] CONCATENATION, AND SHOULD NOT BE CLEARED FOR THE LAST FILE
;[160] IN THE STRING. CLEARING IT MAKES PIP CHANGE TO BINARY FOR
;[160] THE LAST FILE ONLY, WASTING SPACE.
NM2: SETZM FILNAM
SETZM QMASK
SKIPA T1,NM15
IDFIN: POP P,T1 ;RESTORE OLD POINTER
;LOOP TO PICK OFF FILENAME, EXT
NM3: PUSHJ P,GETCOM ;GO GET 7 BIT ASCII CHAR. FROM COMMAND STRING
NM3A: CAIN 0,"*" ;TO ALLOW FN.EX = *.*
JRST NMSTAR ;GO SET MASK
CAIL 0,"A" ;ALPHABETIC CHARACTER?
CAILE 0,"Z"
JRST NM4A ;NO
;**;[501] Insert at NM3A+5 RLUSK 30-Oct-80
SKIPE SPLAT1 ;[501] HAVE WE SEEN A "*" IN THIS PART OF
;[501] THE FILESPEC ALREADY?
;[501] IF SO, NO A-Z ALLOWED
JRST ERR501 ;[501] YES, SIGNAL AN ERROR
NM4: SUBI 0,40 ;CONVERT TO SIXBIT
TLNE T1,770000 ;6 CHARS. YET?
IDPB 0,T1 ;NO
JRST NM3 ;GET NEXT CHAR.
NM4A: CAIL 0,"0" ;NUMERIC?
CAILE 0,"9"
JRST NM5 ;NO
;**;[501] Insert at NM4A+3 RLUSK 30-Oct-80
SKIPE SPLAT1 ;[501] HAVE WE SEEN A "*" IN THIS PART OF
;[501] THE FILESPEC ALREADY?
;[501] IF SO, NO 0-9 ALLOWED
JRST ERR501 ;[501] YES, SIGNAL AN ERROR
JRST NM4
NMBIN: TLC T1,500 ;MAKE BYTE SIZE 3
NMBIN1: PUSHJ P,GETBUF ;GET A CHARACTER
CAIL 0,"0" ;MUST BE OIT
CAILE 0,"7"
JRST NMBIN2 ;NOT NUMERIC
SUBI 0,"0" ;MAKE BINARY
TLNE T1,770000 ;STILL ROOM?
IDPB 0,T1 ;YES
JRST NMBIN1 ;GET NEXT
NMBIN2: TLNE T1,010000 ;ODD NUMBER OF 3 BIT BYTES?
IBP T1 ;YES, MAKE EVEN
TLC T1,500 ;BACK TO SIXBIT BYTES
PUSHJ P,GETCM1 ;[251] GO SEE IF A SPEC CHAR (/[<>
JRST NM3A ;PROCESS THIS CHAR.
;CHARACTER NOT *,0-9,A-Z
;**;[504] Insert 1 line at NM5 RLUSK 4-Nov-80
NM5: SETZM SPLAT1 ;[504] CLEAR FLAG INDICATING A "*" SEEN
CAIG 0,CR ;CARRIAGE RETURN
CAIGE 0,LF ;LINE FEED
CAIN 0,ALTMOD ;ALTMODE
JRST NM5A ;YES
CAIN 0,CZ ;END-OF-FILE(CCL)?
NM5A: JRST NM5C ;YES, OR EOF
CAIN 0,COMMA ;COMMA
JRST NM6 ;YES
CAIN 0,PERIOD ;PERIOD
JRST NM10 ;YES
CAIN 0,COLON ;COLON
JRST NM9 ;YES
CAIN 0,";" ;IS THE REST A COMMENT?
JRST NM16 ;YES
IFN CCLSW,<CAIN 0,"@" ;INDIRECT COMMAND
JRST INDRCT ;YES
CAIN 0,"!" ;RUN COMMAND?
JRST RUNIT ;YES>
CAIN 0,"?" ;WILD CHAR.?
JRST WLDCH ;YES, SET UP MASK
CAIN 0,"^" ;TAPE ID ?
JRST ID ;YES
CAIN 0,"#" ;SPECIAL OCTAL FILE NAME ?
JRST NMBIN ;YES
CAIE 0,LA ;LEFT ARROW
CAIN 0,"=" ;OR EQUALS
SKIP 1 ;YES
JRST NM5B ;NO
TRNE CALFLG,DEV ;HAS A DEVICE BEEN SEEN?
TRO CALFLG,DVSWTH ;YES-NEEDED FOR /Z/,/D
TROA CALFLG,SSWTCH!ARWSW ;SET LEFT ARROW SWITCHES
NM5C: SOS ESWTCH ;END OF LINE OR FILE
JRST NM6A ;BUT NOT COMMA
NM6: TRNN CALFLG,ARWSW ;COMMA'S ILLEGAL BEFORE "_"
JRST ERR6A ;GIVE MESSAGE
TRO CALFLG,COMAFL ;MARK COMMA SEEN, MORE TO COME
NM6A:
IFN FTDSK,< ;[332]
SKIPN T1,PP ;[332] SEE IF A PPN GIVEN
SKIPN T1,PPP ;[332] NO, SEE IF A STICKY ONE IS AROUND
JRST NM6C ;[332] NO, NO CHANGE (ZERO OR AS IS)
TLNE T1,-1 ;[332] IS STICKY PATH SPEC?
JRST NM6B ;[332] NO, SAVE PPN
MOVSS T1 ;[332] YES, COPY PATH TO PTHADD
HRRI T1,PTHADD ;[332]
BLT T1,PTHADD+PTHLEN+3 ;[332]
MOVEI T1,PTHADD ;[332] AND POINT TO IT
NM6B: MOVEM T1,PP ;[332] UPDATE PPN
>;[332] END IFN FTDSK
NM6C: SKIPN T1,FILEX ;[332] COMMA ROUTINE - FIGURE OUT WHAT WE HAVE
JRST NM17 ;NO FILE NAME TEMPORARILY IN FILEX
EXCH T1,FILNAM ;PUT THE FILE NAME WHERE IT BELONGS
HLLZM T1,FILEX ;PUT THE EXTENSION WHERE IT BELONGS
MOVE T1,QMASK+1 ;GET FILE NAME MASK
EXCH T1,QMASK ;INTO RIGHT PLACE
HLR T1,T1 ;PUT MASK IN BOTH HALVES
MOVEM T1,QMASK+1 ;SINCE NEEDED IN EITHER HALF
MOVE T1,[QMASK,,OQMASK] ;PUT MASK ON OUTPUT SIDE
TRNE CALFLG,SSWTCH ;SEEN LEFT ARROW YET?
BLT T1,OQMASK+1 ;SINCE IT MAY DIFFER FROM INPUT MASK
MOVS T1,FILEX ;[363] GET FILE EXTENSION
MOVE T2,MFDPPN ;[363] GET MFD PPN
CAIN T1,(SIXBIT 'UFD') ;[363] IS IT A .UFD?
CAMN T2,PP ;[363] AND ALSO NOT SPECIFYING THE MFD?
POPJ P, ;[363] NO, SO NO SPECIAL CASE NEEDED.
MOVEM T2,PP ;[363] SET P-P TO THE MFD
MOVEI T1,DEFPTH ;[363] DEFAULT PATH...
MOVEM T1,PPP ;[363] . .
MOVE T1,JOBPTH+2 ;[363] MAKE THE UFD THE FILENAME
MOVEM T1,FILNAM ;[363] . .
SETZM QMASK ;[363] SO FILENAME'S NO LONGER WILD.
TLZ FL,MFLG ;[363] . .
POPJ P,
NM7: SETZM XNAME ;USE XNAME ONLY ONCE
CAIN T1,1 ;1 FLAGS A NULL OVERSHOOT
JRST NM13 ;RETURN NULL NAME
NM8: MOVEM T1,DEVICE ;NEW DEVICE
SKIPE QMASK ;[352] ANYTHING WILD?
JRST ERR22 ;[352] YES, ERROR
SETZM FILNAM ;FILE NAME OUT OF DATE BY NOW
TRO CALFLG,DEV
TRNE FL,ARWSW ;[152] IF LEFT ARROW SEEN,
TLOA FL,SDEVSN ;[323][152] SAY WE'VE SEEN A SOURCE DEVICE
TLO FL,DDEVSN ;[323] SAY WE'VE SEEN A DESTINATION DEVICE
JRST NM1 ;LOOK FOR A FILE NAME AND EXTENSION
NM9: TRNN CALFLG,DEV ;COLON ROUTINE - IS DEVICE NAME IN YET?
JRST NM12 ;NO
SKIPN T1,FILNAM ;SCAN OVERSHOOT - NULL OVERSHOOT?
MOVEI T1,1 ;YES - FLAG NULL OVERSHOOT WITH A 1
MOVEM T1,XNAME ;XNAME = OVERSHOOT NAME
JRST NM14
ID: PUSH P,T1 ;SAVE BYTE POINTER
TLO FLAG,TID ;[125] SET FLAG TO CHANGE TAPEID
MOVE T1,[POINT 6,TAPEID]
ID1: PUSHJ P,GETBUF ;ALLOW ALL 6 BIT CHARS.
CAIN 0,"^" ;END OF TAPE ID?
JRST IDFIN ;YES
SUBI 0,40 ;MAKE SIXBIT
JUMPL 0,ERR6 ;MUST BE SIXBIT
TLNN T1,770000 ;TOO MANY CHAR.?
JRST ERR6 ;YES, GIVE ERROR
IDPB 0,T1 ;STORE CHAR.
JRST ID1 ;GET MORE
NM10: SKIPE FILEX ;FILENAME SEEN ALREADY?
JRST ERR6 ;YES, GIVE COMMAND ERROR
;**;[501] Insert at NM10+2 RLUSK 10-Oct-80
SETZM SPLAT1 ;[501] CLEAR FLAG WHICH TELLS IF "*"
;[501] APPEARED IN FILNAM, SO WE CAN
;[501] SEE IF A CHARACTER FOLLOWS A "*"
;[501] IN THE .EXT
MOVE 0,FILNAM ;PERIOD ROUTINE - SAVE FILE NAME
MOVEM 0,FILEX ;TEMPORARILY IN FILEX
SKIPN 0 ;[153] SEE IF ANY FILE NAME THERE
TLO FL,FNSEEN ;[153] NO, SET FNSEEN FOR NM17 TO CHECK
MOVE 0,QMASK ;GET WILD CHAR. MASK
MOVEM 0,QMASK+1 ;SAVE IT ALSO
JRST NM2 ;LOOK FOR EXTENSION
NM11: SKIPN FILNAM ;WAS A FILE NAME SPECIFIED?
TRNE CALFLG,DEV ;WAS ANYTHING SPECIFIED?
POPJ P, ;YES
NM12: SKIPE T1,FILNAM ;NULL NAME SPECIFIED?
JRST NM8 ;NO - SO REMEMBER AND LOOK FOR FILE NAME
NM13: TRO CALFLG,NSWTCH ;RETURN A NULL NAME
SETZM FILEX
NM14: SETZM FILNAM
POPJ P,
NM15: POINT 6,FILNAM
NM5B: CAIE 0,TAB ;IGNORE TAB
CAIN 0,SPACE ;SPACES IGNORED
JRST NM3 ;IGNORE NOT LEGAL SIXBIT
PUSH P,0 ;SAVE CHARACTER
ERRPNX </?Illegal character />
POP P,0 ;RECOVER CHAR.
CAIL 0,SPACE ;INVISIBLE CHAR.?
JRST .+4 ;NO
MOVEI CHR,"^" ;USUAL UP ARROW MARKER
PUSHJ P,PUTCON ;OUTPUT TO TTY
TRC 0,100 ;MAKE CHAR. VISIBLE
MOVE CHR,0 ;NOW FOR THE CHAR.
PUSHJ P,PUTCON
ERRPN2 </ in command!/>
NM16: SKIPN COMFLG ;[326] CHECK FOR END OF LINE AT THIS LEVEL,
SKIPE COMCNT ;[326] SINCE TO DO SO AT ANY OTHER LEVEL
SKIP 1 ;[326] WILL BREAK LOTS
JRST NM5C ;[326] END OF LINE AFTER ; FROM TTY
PUSHJ P,GETBUF ;[326] GET NEXT ASCII CHAR.
CAIE 0,ALTMOD ;[265] RETURN IF ALTMOD
CAIN 0,CZ ;OR ^Z
JRST NM5A
CAIL 0,LF ;[265] OR END OF LINE CHARACTER
CAIL 0,CR ;[265] BUT BYPASS <CR>
JRST NM16 ;GET NEXT CHARACTER
JRST NM5A ;[265] CARRY ON
IFE FTDSK,<SYN NM11,NM17>
IFN FTDSK,<
NM17: MOVE T1,[QMASK,,OQMASK] ;PUT MASK ON OUTPUT SIDE
TRNE CALFLG,SSWTCH ;SEEN LEFT ARROW YET?
BLT T1,OQMASK+1 ;SINCE IT MAY DIFFER FROM INPUT MASK
TLZN FL,FNSEEN ;[153] SEE IF WE SAW A DOT
JRST NM11 ;[153] NO, WE MAY HAVE LEGIT FILE NAME
MOVS T1,FILNAM ;GET EXT
CAIN T1,(SIXBIT 'UFD') ;CHECK FOR .UFD
SKIPN PP ;AND [PPN]
JRST ERR12 ;[153] ONLY LEGAL EXTENSION ONLY IS
;[153] [P,PN].UFD, NOT .FOO
MOVSM T1,FILEX ;EXT IN CORRECT PLACE
SKIPN T1,PP ;[211] GET PPN TYPED
MOVE T1,JOBPTH+2 ;[211] IF NONE, USE DEFAULT PATH
MOVEM T1,FILNAM ;INTO FILNAM
MOVE T1,MFDPPN ;[163] GET PPN OF MFD
MOVEM T1,PP ;FOR DSK LOOKUP
POPJ P,>
IFN CCLSW,<
INDRCT: SKIPN T3,DEVICE ;[165] GET TYPED DEVICE
MOVSI T3,'DSK' ;[165] NONE, USE DEFAULT DSK:
MOVEM T3,CCLINI+1 ;SET IT UP FOR OPEN
SKIPN T3,PP ;SOMEONE ELSES AREA
SETZ T3, ;NO, USE OWN
MOVEM T3,CFILE+3 ;STORE PPN
MOVE T1,FILNAM ;[351] GET FILE NAME (MAYBIE)
SKIPN T3,FILEX ;[351] AND EXTENSION
TLNE FL,FNSEEN ;[351] SKIP IF NO DOT-NOT IF DOT
;[351] BUT NO NAME
EXCH T1,T3 ;[351] A DOT WAS SEEN, SWAP NAME
;[351] AND EXIT.
JUMPE T1,ERR12 ;[351] IF BOTH NULL, ERROR
SKIPE FILEX ;[351] SKIP IF NO "." TYPED
TROA FL,NSWTCH ;[351] . TYPED, ONLY LOOKUP ONCE
SKIPE T3 ;[351] ANY EXTENSION?
SKIP 1 ;[351] YES OR JUST .
MOVSI T3,'CCL' ;[351] NO, LOOK FOR CCL
MOVEM T1,CFILE ;[351] SAVE NAME
JRST P12 ;STORE EXT
RUNIT: TRNE CALFLG,DEV ;USE SYS IF NO DEVICE SEEN
SKIPN T3,DEVICE ;GET DEVICE IF SPECIFIED
MOVSI T3,'SYS'
MOVEM T3,RUNDEV
MOVE T3,FILNAM ;GET FILE NAME
MOVEM T3,RUNFIL ;SAVE IT
PUSHJ P,GETEND ;DELETE COMMAND FILE
SKIPN T3,PP ;SOMEONE ELSES AREA?
SETZ T3, ;NO, SO USE OWN
MOVEM T3,RUNPP
MOVEI 16,RUNDEV ;XWD 0,RUNDEV
SKIPE COMFLG ;CCL IN PROGRESS?
HRLI 16,1 ;YES START AT C(JOBSA)+1
RUN 16,
HALT ;SHOULD NOT RETURN
>
;HERE IF A "?" SEEN IN FILE NAME OR EXTENSION
WLDCH: TLO CALFLG,MFLG ;SET FLAG
TLNN T1,770000 ;6 CHAR. YET?
JRST NM3 ;YES, NO MORE
IDPB 0,T1 ;DEPOSIT IN NAME
HRRI T1,QMASK ;MASK BYTE POINTER
DPB 0,T1 ;PUT IN MASK ALSO
HRRI T1,FILNAM ;BACK AS IT WAS
JRST NM3 ;RETURN FOR MORE
;HERE IF "*" SEEN IN FILE NAME OR EXTENSION
;**;[501] Insert at NMSTAR RLUSK 30-Oct-80
NMSTAR: SETOM SPLAT1 ;[501] REMEMBER "*" WAS SEEN
SKIPE (T1) ;NAME BETTER BE ZERO
JRST NMSTR1 ;[225] NO, ADD ?????
SETOM QMASK ;MASK ALL CHARACTERS
SETOM (T1) ;AND NAME OF ??????
TLZ T1,770000 ;MAKE SURE NOTHING ELSE GETS HERE
TLO FL,MFLG ;SET FLAG
JRST NM3 ;BACK FOR MORE
NMSTR1: MOVEI 0,"?" ;[225] SET WILD CHARACTER
NMSTR2: TLNN T1,770000 ;[225] SEE IF ANY MORE CHARS TO FILL
JRST NM3 ;[225] NO, DONE
TLO FL,MFLG ;[225] YES, SET WILD BIT, (ONLY IF SOME GENERATED)
IDPB 0,T1 ;[225] DEPOSIT ? IN FILENAME
HRRI T1,QMASK ;[225] CHANGE TO MASK WORD
DPB 0,T1 ;[225] AND DEPOSIT ? IN MASK WORD
HRRI T1,FILNAM ;[225] RESTORE TO FILE NAME
JRST NMSTR2 ;[225] AND GO SEE IF MORE TO DO
SUBTTL COPY BY CHARACTER OUTPUT ROUTINES
;ROUTINE TO OUTPUT ONE LINE FROM LBUF
;**;[511] Change 1 line at OUTLBF RLUSK 13-Mar-81
OUTLBF: TRNE FLAG,LINE+SQNSN ;[511] LINE-BY-LINE OUTPUT
;[511] IF SEQUENCED OR BLOCKED
JRST OUTLBA ;OUTPUT LINE-BY-LINE
OUTCH1: MOVE T2,OPTRA ;OUTPUT CHARACTER-BY-CHARACTER
OUTLB1: CAMN T2,OPTR ;ARE ALL CHARACTERS OUT?
POPJ P, ;YES
ILDB CHR,T2 ;NO
PUSHJ P,PUT ;GO OUTPUT CHARACTER
JRST OUTLB1
OUTLBA: TLNE FLAG,CHKFLG;PAREN COUNTING?
JRST OUTCHK ;YES, SO DO IT
TRNE AUXFLG,TTYOUT+LPTOUT
JRST OUTCH1 ;IF OUTPUT TO TTY OR LPT DO CHR BY CHR
MOVEI T1,4 ;CLEAR UNUSED PORTION OF LAST WORD USED IN LBUF
MOVEI T2,0
MOVE T3,OPTR
IDPB T2,T3
SOJG T1,.-1
MOVEI T2,5
HRRZ T1,OPTR ;COMPUTE NUMBER OF WORDS FILLED
SUBI T1,LBUF-1
JUMPE T1,OUTLB3 ;DO NOTHING IF BUFFER EMPTY
IMULM T1,T2 ;COMPUTE CHARACTER COUNT=5 TIMES WORD CT
;THIS IS WHERE OLD FORTRAN MODE WAS TESTED.
CAMG T2,OBF+2 ;WILL LINE FIT IN THE OUTBUFFER?
JRST OUTLB2 ;YES
PUSHJ P,OUTP ;NO, SO DUMP BUFFER AND CHECK ERROR BITS
MOVEI T6 ,1
TDNE T6,LBUF ;SEQUENCED?
TRNN AUXFLG,DTAOUT ;YES, ON DTA?
SKIP 1 ;NO
ADDI T2,40*5 ;LEAVE EDITING ROOM
OUTLB2: MOVNS T2
ADDM T2,OBF+2 ;UPDATE OUTBUFFER CHARACTER COUNT
HRLI T2,LBUF
HRR T2,OBF+1
ADDI T2,1
ADDB T1,OBF+1 ;UPDATE OUTBUFFER BYTE POINTER
BLT T2,(T1) ;MOVE DATA TO OUTBUFFER
OUTLB3: POPJ P,
;ROUTINE TO PUT ONE CHAR INTO OUT BUFFER
TABOUT: MOVEI CHR,TAB ;OUTPUT A TAB
PUT: SOSG OBF+2 ;SUBR. TO OUTPUT ONE CHARACTER IN AC CHR
PUSHJ P,OUTP ;IF BUFFER FULL, DUMP AND CHECK ERR BITS
IDPB CHR,OBF+1 ;PUT CHARACTER IN BUFFER
POPJ P,
LISTIT: TLOA T1,(POINT 7) ;FORM BYTE POINTER
PUSHJ P,PUT ;OUTPUT CHAR
ILDB CHR,T1 ;GET CHAR.
JUMPN CHR,.-2 ;BACK FOR MORE
POPJ P, ;DONE
;ROUTINE TO DUMP OUT BUFFER WHEN FULL
OUTP: OUT OUT, ;SUBR. TO DUMP OUTBUFFER AND CHECK ERR BITS
JRST CPOPJZ ;NO ERRERS,BUT CLEAR IOS JUST IN CASE
OUTP1: GETSTS OUT,IOS ;HERE FOR BIT CHECKING ONLY
PUSHJ P,OUTP4
SETSTS OUT,(IOS);ERRORS WERE DETECTED
POPJ P, ;NO ERRORS
OUTP4: TRNN AUXFLG,MTAOUT
JRST .+3
OUTP3: TXNE IOS,IO.EOT ;EOT?
JRST .+3 ;YES
TXNN IOS,IO.ERR ;ANY ERROR BITS ON?
JRST CPOPJ1 ;NO
PUSHJ P,COMERR ;YES
JSP T5,INICN2 ;INIT TTY
PUSHJ P,QUEST
ERRPN2 </Output device />
PUSHJ P,P6BIT
ODEV
SKIPN DTON ;ONLY IF THERE IS A FILE NAME
JRST .+4 ;DON'T PRINT IF NOT
ERRPN2 </: file />
MOVEI T3,DTON ;OUTPUT FILE NAME LOC
PUSHJ P,FN.EX ;PRINT FILE NAME EXT
MOVE T2,AUXFLG
ANDI T2,MTAOUT+DSKOUT+DTAOUT
;AND FALL INTO IOERR
SUBTTL COPYING I/O ERRORS
IOERR: PUSHJ P,TCRLF ;[523] TYPE A CRLF
ERRPN2 </Status bits /> ;[523]
MOVE T1,IOS ;[523] GET ERROR STATUS
PUSHJ P,.TGSTS ;[523] SHOW THE ERROR BITS
TXNN IOS,IO.BKT!IO.IMP ;[523] IS ERROR POSSIBLY RECOVERABLE?
;**;[527] @IOERR: + 5L, change one line, 11-May-83, KMR
JRST IOERN0 ;[523][527] NO
JRST IOERRG ;[523] YES -- SEE IF /G SPECIFIED
;[523]
;[523] .TGSTS prints out the error status bits and an
;[523] appropriate message, if possible, before returning.
;[523]
.TGSTS: PUSH P,T1 ;[523] SAVE STATUS BITS
MOVEM T1,DOUT ;[523] STORE VALUE TO BE TYPED
MOVEI T2,PUTCON ;[523] ADDRESS OF OUTPUT ROUTINE
PUSHJ P,OUTOCT ;[523] TYPE BITS
OUTPUT CON, ;[523] FLUSH OUT BEGINNING OF MESSAGE
POP P,T2 ;[523] RESTORE STATUS TO T2
ANDI T2,IO.ERR!IO.EOT ;[523] USE ONLY ERROR BITS AND EOT
MOVSI T4,-.TGSLN ;[523] MAKE AOBJN POINTER TO BIT TABLE
TGSSTL: HRRZ T3,TGSERR(T4) ;[523] GET NEXT ERROR BIT
TDZN T2,T3 ;[523] MATCH?
JRST TGSAOB ;[523] NO -- TRY NEXT ONE
HLRZ T1,TGSERR(T4) ;[523] YES -- GET ADDRESS OF ERROR MESSAGE
OUTSTR (T1) ;[523] TYPE TO TTY:
TGSAOB: SKIPE T2 ;[523] END OF ERROR BITS?
AOBJN T4,TGSSTL ;[523] NO -- STILL SOME LEFT
POPJ P, ;[523] YES -- RETURN
TGSERR: [ASCIZ\
(Hardware device error)\],,IO.DER ;[523]
[ASCIZ\
(Device write-locked or 7-9 punch not found on binary card)\],,IO.IMP;[523]
[ASCIZ\
(Hard data parity error)\],,IO.DTE ;[523]
[ASCIZ\
(Quota exceeded or block too large)\],,IO.BKT ;[523]
[ASCIZ\
(Physical end of tape encountered)\],,IO.EOT ;[523]
.TGSLN==.-TGSERR ;[523] ERROR MESSAGE TABLE LENGTH
;**;[527] @IOERRN: move 2 lines and add new tag, 11-May-83, KMR
IOERN0: TRNE AUXFLG,DSKOUT ;[376][527] ERROR WHILST DOING DISK OUTPUT?
CLOSE OUT,CL.RST ;[376][527] YES - DISCARD NEW FILE.
IOERRN: PUSHJ P,TCRLF ;OUTPUT A CR-LF ON TTY
RELEAS TAPE, ;NO RECOVERY ERRORS EXIT HERE
RELEAS DIR,
RELEAS OUT,
RELEAS IN,
TLZ FLAG,TID;[125] CLEAR REQUEST TO WRITE TAPE ID
IFN CCLSW,< ;[264]
SKIPE COMFLG ;[264] IF FROM CCL, EAT REST OF LINE
SKIPE COMEOF ;[264] AND NOT END OF FILE
>;[264] END IFN CCLSW
JRST PIP2 ;GET NEXT COMMAND
IFN CCLSW,< ;[264]
LDB 0,CFI+1 ;[264] GET LAST CHARACTER
IFN TEMP,< ;[264]
SKIPE TMPFLG ;[264] IF FROM TMPCOR
LDB 0,TMPPNT ;[264] GET IT FROM THERE
>;[264] END OF IFN TEMP
IOERRA: CAIL 0,LF ;[264] SEE IF ALREADY AT END OF LINE
CAIL 0,CR ;[264] (GO PAST <CR>)
CAIN 0,ALTMOD ;[264]
JRST PIP2 ;[264] GOT END OF LINE
PUSHJ P,GETSC ;[264] EAT ANOTHER CHARACTER
SKIPN COMEOF ;[264] UNLESS END OF FILE
JRST IOERRA ;[264] TRY AGAIN
JRST PIP2 ;[264] LOST
>;[264] END IFN CCLSW
IFN FTDSK,<
TXTD3: ASCIZ /monitor detected software error/>
;TEST IF /G FLAG(IGNORE ERRORS) SET
IOERRG: TLNN FLAG,GFLG ;PRINTED CURRENT MESSAGE
JRST IOERRN ;NO RECOVERY
ERRPN2</
/> ;PRINT CR, LF DON'T MOVE>
RELEAS CON,
TRNE AUXFLG,TTYOUT ;TTY OUTPUT DEVICE?
PUSHJ P,OMODE ;YES, INIT OUTPUT DEVICE
TRNE AUXFLG,TTYIN ;REINIT TTYIN,TTYOUT
PUSHJ P,ININIT
TXZ IOS,IO.ERR ;CLEAR FILE STATUS, I/O ERRORS
TRNE T2,MTAIN+MTAOUT
TXZ IOS,IO.EOT ;CLEAR PHYSICAL EOT I/O ERROR
MOVS 0,[XWD 1,SAVAC]
BLT 0,3
MOVE T5,SAVAC+3
MOVE T6,SAVAC+4
POPJ P,
COMERR: MOVE 0,[XWD 1,SAVAC] ;SAVE ACS T1,T2,T3,T5,T6
BLT 0,SAVAC+2
MOVEM T5,SAVAC+3
MOVEM T6,SAVAC+4
TRNE AUXFLG,TTYOUT ;RELEASE ANY TTYIO
RELEAS OUT,
TRNE AUXFLG,TTYIN
RELEAS IN,
POPJ P,
;PRINT FILE NAME AND EXTENSION FROM (T3), 1(T3).
FN.EX: MOVE T1,(T3) ;T1=FILENAME
HLRZ T6,1(T3) ;T6=FILE EXT
MOVEM T1,DERR2 ;STORE FILE NAME
JUMPE T6,DERR2A ;FILE EXT=0?
JUMPL T1,DERR2B ;MUST BE SIXBIT, SIGN BIT ON
CAIE T6,'UFD'
JRST DERR2B ;NO
SETZB T1,DERR2 ;CLEAR FILE NAME IF 'UFD'
HLRZ DOUT,(T3) ;YES, GET PROJ. NO.
MOVEI T2,PUTCON ;PRINT PROJ-PROG. NO.
MOVEI CHR,"[" ;BETWEEN SQUARE BRACKETS
PUSHJ P,PUTCON
PUSHJ P,OUTOCT ;CONVERT TO ASCII
MOVEI CHR,COMMA
PUSHJ P,PUTCON
HRRZ DOUT,(T3) ;GET PROG. NO.
PUSHJ P,OUTOCT ;CONVERT TO ASCII
MOVEI CHR,"]"
PUSHJ P,PUTCON
DERR2B: TLO T6,"."-40 ;PUT SIXBIT PERIOD
LSH T6,14 ;[320] POSITION SO SPACES WON'T PRINT
DERR2A: MOVEM T6,DERR2+1 ;INTO EXTENSION
PUSHJ P,P6BIT
DERR2
PUSHJ P,P6BIT
DERR2+1
MOVEI CHR," "
JRST PUTCON
SUBTTL COMMAND STRING CHARACTER GETTER WITHOUT /[]<>
;THIS ROUTINE GETS A 7 BIT ASCII CHARACTER FROM THE COMMAND STRING
;AND RETURNS IT TO THE COMMAND SCANNER ROUTINE (NAME) IN AC0
GETCOM: PUSHJ P,GETBUF
GETCM1: ;[252] ENTRY AFTER # PROCESSED
CAIN 0,"/" ;SINGLE CHARACTER SWITCH
JRST GETT6
CAIN 0,"(" ;LOOK FOR (MULTI-CHAR.) SWITCH
JRST GETT3
CAIN 0,"<" ;GO LOOK FOR PROTECTION
JRST GETT9
CAIE 0,"["
POPJ P,
GETT10: ;[211]
IFN FTDSK,< ;[211]
SETZM PTHADD ;[211]
MOVE T7,[XWD PTHADD,PTHADD+1] ;[211] CLEAR PATH
BLT T7,PTHADD+PTHLEN+3 ;[211]
>;[211] END IFN FTDSK
PUSHJ P,GETNUM ;[211] GO GET PPN
IFN FTDSK,< ;[211]
CAIN 0,"-" ;[166] SEE IF [-] PPN SPEC
JRST GETMYP ;[166] YES, EXPLICITLY USE OURS
>;[211] END IFN FTDSK
CAILE T7,-1 ;[211] GREATER THAN HALF WORD?
JRST ERR2A ;[211] YES, ERROR
IFN FTDSK,< ;[211]
SKIPN T7 ;[166] SEE IF PROJECT SPECIFIED
MOVS T7,JOBPPN ;[220] NO, USE JOB'S UFD
>;[211] END IFN FTDSK
MOVSM T7,PP ;[211] SAVE PPN, BOTH HALVES ([] WORKS)
CAIE 0,"," ;SEPARATOR?
JRST GETT11 ;OR TERMINATOR (NON-NUMERIC)
PUSHJ P,GETNUM ;GET RIGHT HALF
IFN FTDSK,< ;[240]
SKIPN T7 ;[233] SEE IF ANY PROGRAMMER NUMBER
HRRZ T7,JOBPPN ;[233] NO, USE OURS
>;[240] END IFN FTDSK
CAILE T7,-1 ;GREATER THAN HALF WORD
JRST ERR2A ;YES, ERROR
HRRM T7,PP ;STORE RIGHT HALF
GETT12: ;[211]
IFN FTDSK,< ;[211]
SKIPE T7,PP ;[211] GET WHATEVER WAS TYPED
MOVEM T7,PTHPPN ;[211] AND PUT INTO PATH
CAIE 0,"," ;[211] SEE IF SFD SPECIFIED
JRST GETT11 ;NO
PUSHJ P,GETPTH ;GET FULL PATH
>;[211] END IFN FTDSK
GETT11: ;[211]
IFN FTDSK,< ;[211]
IFN SCANSW,< ;[223]
CAIN 0,"/" ;[211] SEE IF SCAN SWITCH SPECIFIED
PUSHJ P,GTPTH4 ;[211] YES, GO DECODE IT
>;[223] END IFN SCANSW
>;[211] END IFN FTDSK
CAIE 0,ALTMOD ;[310] THIS IS ALSO END OF LINE
CAIG 0,CR ;[211] ALLOW END OF LINE
CAIGE 0,LF ;TO TERMINATE PPN
JRST .+3 ;NOT CR/LF
AOS COMCNT ;ALLOW FOR EXTRA CHAR READ
JRST .+3 ;AND SKIP TEST
CAIE 0,"]" ;FORCE CORRECT TERMINATOR
JRST ERR2
IFN FTDSK,<
SKIPN FILNAM ;[211] IF FILE SPEC SEEN ALREADY
SKIPE FILEX ;[211] IF PPN IS IN MIDDLE, FORCE NO DEFAULT
;[211] I.E. FILE.[PPN]EXT
JRST GETCOM ;[161] THEN NOT DEFAULT PPN
MOVE T7,[XWD PTHADD,DEFPTH] ;[211] COPY PATH TO DEFAULT
HRRZM T7,PPP ;[211] AND POINT PERMANENT TO IT
BLT T7,DEFPTH+PTHLEN+3 ;[211]
MOVE T7,PP ;[211] IF NO PATHING
SKIPN JOBPTH ;[211] ON THIS SYSTEM
MOVEM T7,PPP ;[211] SAVE ACTUAL PPN
>;[211] END IFN FTDSK
JRST GETCOM ;CONTINUE SCAN
IFN FTDSK,< ;[211]
GETMYP: JUMPN T7,ERR2A ;[166] IF ANY NUMBERS WITH [-], ERROR
MOVE T7,[XWD JOBPTH,PTHADD] ;[207] COPY TO PATH AREA
BLT T7,PTHADD+PTHLEN+3 ;[207] COPY IT
GETMY1: PUSHJ P,GETBUF ;[166] SKIP - AND ANY BLANKS
CAIN 0," " ;[166]
JRST GETMY1 ;[166]
;**;[512] At GETMY1+3 change 1 line RLUSK 8-Apr-81
MOVEI T7,PTHADD ;[512] GET THE PATH ADDRESS
MOVEM T7,PP ;[211] AND SAVE IT FOR REFERENCE
JRST GETT11 ;[166] FORCE ] OR CRLF
>;[211] END IFN FTDSK
GETT9: PUSHJ P,GETNUM
CAIN 0,">" ;TERMINATE ON RIGHT BRKT ONLY
CAILE T7,777 ;PR. IN RANGE?
JRST ERR2A
ROT T7,-11
HLLOM T7,PR ;RHS=1'S MEANS <> SEEN (PR MAY BE 0)
JRST GETCOM
GETNUM: MOVEI T7,0 ;TO PICK UP P-P NUMBER
GETN1: PUSHJ P,GETBUF ;AND PROTECTION
CAIN 0," " ;IGNORE SPACES
JRST GETN1
CAIL 0,"0"
CAILE 0,"7"
POPJ P, ;GOT A NON-NUMERIC
MOVE T5,0
LSH T7,3
ADDI T7,-60(T5) ;PROCESS TO BINARY
JRST GETN1
GETT3: PUSHJ P,GETT5 ;PROCESS SWITCH CHARACTER
;**;[516] Change after GETT3 RLUSK 1-July-1981
CAIE 0,")" ;[516] CLOSING PAREN?
JRST GTT3.. ;[516] NO
TRZ FLAG,MTFLG ;[516] CLEAR MAGTAPE FLAG
JRST GETCOM ;YES
GTT3..: CAIN 0,"M" ;[516] MTA FLAG?
TRO FLAG,MTFLG ;SET MTA, LOOK FOR MULTI CHAR. SWITCH
CAIE 0,"#" ;MTA#
JRST GETT3 ;NO
TRNN FLAG,MTFLG ;ONLY LOOK AFTER # IF MTFLG IS ON.
JRST ERR6A ;I.E. IF MT SWITCH IS IN PROGRESS.
PUSHJ P,GETNUD ;GET A NUMBER
SKIPN T7 ;SKIP IF NOT EXPLICIT ZERO
SETO T7, ;MAKE IT DIFFERENT FROM DEFAULT ZERO
CAIE 0,"D" ;TERMINATED BY D?
CAIN 0,"A" ;TERMINATED BY A?
JRST GETT3A ;YES, MARK AB UPPER
CAIE 0,"P" ;ONLY A,D,P AND B CAN BE
CAIN 0,"B" ;PRECEDED BY #.
SKIP 1
JRST ERR6A
HRRM T7,AB ;NO. FILES/RECS TO ADVANCE
;GOES IN AB (RH)
GETT3B: PUSHJ P,GETT5A
JRST GETT3
GETT3A: HRLM T7,AB ;NO. FILES/RECS TO BACK SPACE
JRST GETT3B ;GOES IN AB (LH)
GETT6: PUSHJ P,GETT5 ;PROCESS ONE SWITCH CHAR
CAIE 0,"M"
CAIN 0,")" ;THESE ARE ILLEGAL 1-SWITCH CHARS.
JRST ERR6A
JRST GETCOM
GETNUD: MOVEI T7,0 ;GET A DECIMAL NUMBER
GETN2: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING
CAIN 0,SPACE ;SPACE?
JRST GETN2 ;YES, IGNORE
CAIL 0,"0" ;NUMBER?
CAILE 0,"9"
POPJ P, ;NO
IMULI T7,^D10 ;T7*10
ANDI 0,17 ;ADD ON LAST DIGIT
ADD T7,0 ;+ LOW 4 BITS
JRST GETN2
;GET NEXT COMMAND STRING CHAR(SWITCH),CHECK WITH TABLE,SET FLAGS
GETT5: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING
TRNN FLAG,MTFLG ;[340] IS THIS A MAG-TAPE SWITCH
TLNN AUXFLG,NOMORE ;[340] OR THE FIRST INPUT SPEC?
JRST GETT5A ;[340] YES
CAIE 0,"M" ;[340] NO, THEN ALL WE'LL TAKE
;[340] IS AN "M".
JRST ERR6C ;[340] BAD NEWS.
GETT5A: MOVE T2,[POINT 7,DISPTB,6] ;SET DISPTB NEXT SEARCH
MOVEI T6,MTAREQ ;SET MTAREQ NEXT SEARCH
TRNN FLAG,MTFLG ;SET UP TABLE TO SEARCH AND FLAG TO SET.
HRRI T2,DISPTA ;PUT IN BYTE POINTER, NOT MTA REQUEST
;SET TO LOOK AT NON-MTA LETTERS FIRST
TRNN FLAG,MTFLG ;IF MTFLG SET, START AT DISPTB AND STORE RESULT IN
MOVEI T6,AUXFLG ;MTAREQ, ELSE START AT DISPTA AND STORE RESULT IN
;AUXFLG OR FLAG
;GET FIRST CHAR DISPTA OR DISPTB, LOOK FOR MATCH, SET SWITCH FLAGS.
GETT7: LDB T3,T2 ;COMPARE WITH LEFT 7 BITS OF
JUMPE T3,ERR6A ;[340] IF END OF TABLE, IT'S AN ERROR.
GETT8: CAIN T3,1 ;END OF DISPTA 1ST HALF?
MOVEI T6,FLAG ;YES, SEARCH DISPTA 2ND HALF FROM NOW ON
CAIN T3,2 ;END OF DISPTA 2ND HALF?
JRST ERR6A ;SEARCHED TABLE 3, ERROR EXIT
CAME T3,0 ;MATCHING CHARACTER?
AOJA T2,GETT7 ;NO, GET NEXT SWITCH IN TABLE.
MOVE T5,(T2) ;YES, SET FLAG OR AUXFLG OR MTAREQ
TLZ T5,774000 ;[255] CLEAR THE SWITCH CHARACTER
ORM T5,(T6) ;FLAG OR AUXFLG
TRNE FLAG,MTFLG
ORM T5,AUX ;MTA REQUESTS SAVED IN AUX
IFE RIMSW,<
TLNE FLAG,RIMFLG
JRST RIMTB ;NO RIM IF RIMSW=0
> ;PRINT ERROR MESSAGE
POPJ P, ;EXIT ON MATCHING CHAR
;ROUTINE TO GET ONE TTY OR CCL COMMAND STRING CHAR INTO AC 0
GETTA:
IFN CCLSW,<
SKIPE COMFLG ;STORED COMMANDS?
JRST GETSC ;YES>
SOSLE TFI+2 ;SUBR TO GET ONE TTY CHAR IN AC 0
JRST GETT2 ;BUFFER NOT EMPTY
MOVE 0,TFI ;BUFFER EMPTY, SAVE
MOVE T5,TFO ;CURRENT BUFFER LOCS
PUSHJ P,INICON ;BUFFER EMPTY SO RE-ATTACH TTY
HRROM 0,TFI ;RESTORE OLD BUFFER LOCS
HRROM T5,TFO ;USE PREVIOUSLY ASSIGNED I/O BUF. FOR TTY
INPUT CON, ;GET THE NEXT LINE
MOVE T5,TFI+2 ;SAVE CHAR COUNT
RELEAS CON, ;LET GO OF TTY FOR USE AS IN-OUT DEVICE
MOVEM T5,TFI+2 ;RESTORE CHAR COUNT LOST DURING RELEASE
GETT2: ILDB 0,TFI+1 ;FETCH CHAR
GETT4: CAIE 0,ALT175 ;OLD ALTMODE?
CAIN 0,ALT176
MOVEI 0,ALTMOD ;YES,MAKE NEW ALTMOD
JUMPE 0,GETTA ;IGNORE NULL CHARS
CAIL 0,140 ;LOWER CASE?
TRZ 0,40 ;YES MAKE UPPER CASE?
CAIE 0,XON ;IGNORE XON,XOFF ONLY FOR
CAIN 0,XOFF ;TTY SERVICE TO SIGNAL TTY
JRST GETTA ;PTR READ IN MODE
CAIE 0,CZ ;[272] ^Z SHOULD EXIT PRONTO
POPJ P,
EXIT 1, ;[272] GO RIGHT AWAY
JRST PIP1 ;[272] BUT RESTART IF HE CONTINUES
;ROUTINE TO GET ONE TTY CHAR FROM COMBUF INTO AC0
GETBUF: IFN CCLSW,<
SKIPE COMFLG ;CCL COMMAND?
JRST GETSC ;YES, GET CHARS FROM DSK, CORE>
SOSGE COMCNT ;ANY CHARS LEFT?
JRST ERR6B ;NO, COMMAND ERROR
ILDB 0,COMPTR ;PICK UP CHAR FROM COMBUF
POPJ P,
;ROUTINE TO INITIALIZE THE TTY, ASCII LINE MODE
INICON: OPEN CON,[ ;[311] SUBR TO INITIALIZE THE TTY
EXP .IOASL ;[311]
SIXBIT /TTY/ ;[311]
XWD TFO,TFI];[311] TTY OUT/IN BUFFER HEADERS
EXIT ;IF TTY NOT AVAILABLE,FATAL.JOB DET?
POPJ P,
;GET 7 BIT ASCII CHARACTER - INPUT FROM CCL COMMAND FILE
IFN CCLSW,<GETSC:
IFN TEMP,<SKIPN TMPFLG ;IS TMPCOR UUO IN ACTION?
JRST GETTM1 ;NO CONTINUE AS USUAL
GETTM2: ILDB 0,TMPPNT ;PICK UP NEXT CHARACTER
HRRZ DOUT1,TMPPNT ;GET BYTE POINTER POISITION
CAML DOUT1,TMPEND ;HAS THE COMMAND FINISHED YET
JRST GETEND ;YES, EXIT
JRST GETT4 ;CHECK FOR ALTMODE,NULL,LOWER CASE
GETTM1: >
SOSLE CFI+2 ;ANY REMAINING?
JRST GETSC0 ;YES
IN COM,
JRST GETSC0 ;NO ERRORS
STATZ COM,IO.EOF ;END-OF-FILE
JRST GETEND ;YES
ERRPNT </Read error-CCL command file!/>
GETSC0: ILDB 0,CFI+1 ;GET A CHARACTER
MOVE DOUT1,@CFI+1 ;GET PRESENT WORD
TRNN DOUT1,1 ;IS IT A SEQUENCE NUMBER?
JRST GETT4 ;NO - CONTINUE
AOS CFI+1 ;YES - ADD 1 TO BYTE POINTER
MOVNI DOUT1,5 ;I.E. IGNORE SEQ. NO.
ADDM DOUT1,CFI+2 ;SUBTRACT 5 FROM COUNT FOR SEQ. NO.
JRST GETSC ;CONTINUE
GETEND:
IFN TEMP,<SKIPE TMPFLG ;TMPCOR
JRST GETEN3 ;YES>
SKIPN COMFLG ;CCL END OF CS?
JRST GETEN2 ;NO
GETEN1: CLOSE COM, ;NO, DSK FILE CCL
SETZ 0, ;DIRECTORY ENTRY FOR RENAME
HLRZ 1,CFILE+1 ;GET EXT
CAIN 1,'TMP' ;IF EXT IS TMP
RENAME COM,0 ;WIPE OUT COMMAND FILE
JFCL
RELEASE COM,0 >
GETEN2: SETOM COMEOF ;INDICATE END OF FILE
MOVEI 0,CZ ;NEEDED TO TERM CCL CS SCAN
POPJ P,
IFN TEMP,<
GETEN3: MOVE 1,[XWD .TCRDF,TMPFIL]
TMPCOR 1, ;READ AND DELETE
JFCL ;NOT FOUND
JRST GETEN2 ;CONTINUE>
;TABLE OF RECOGNIZED COMMAND LETTERS AND CORRESPONDING FLAG BITS
DEFINE DISP (A,B)
< XWD <"A">*4000,B>
;MAGTAPE SWITCHES AND FLAG BITS. TABLE 1 (MTAREQ)
DISPTB: DISP A,MTAFLG
DISP B,MTBFLG
DISP T,MTTFLG
DISP W,MTWFLG
;**;[510] Insert 2 lines after DISPTB+3 RLUSK 25-Feb-81
DISP 6,MT62FL ;[510] 6250 B.P.I. FLAG
DISP 1,MT16FL ;[510] 1600 B.P.I. FLAG
DISP 8,MT8FLG
DISP 5,MT5FLG
DISP 2,MT2FLG
DISP E,MTEFLG
DISP U,MTUFLG
DISP F,MTFFLG
DISP D,MTDFLG
DISP P,MTPFLG
DISP <)>,0 ;[340] END OF MAG-TAPE SWITCH.
DISP #,0
OCT 000000000000
;1ST BYTE 0=END OF DISPTB
;------------------------
;COMMAND STRING LETTERS AND FLAG BITS. TABLE 2 (AUXFLG)
DISPTA: XWD <"Q">*4000+QFLG,0
XWD <"E">*4000+CDRFLG,0
DISP F,FFLG
OCT 004000000000
;1ST BYTE 1=END OF DISPTA 1ST HALF
;------------------------
;COMMAND STRING LETTERS AND FLAG BITS. TABLE 3 (FLAG)
DISP A,LINE
DISP B,BMOD
DISP C,TBMOD
DISP D,DFLG
DISP L,LFLG
DISP M,0
DISP <)>,0
DISP N,NSMOD
DISP O,SQMOD+NSMOD+STS+OSFLG
XWD <"P">*4000+PFLG+PCONV,0
DISP R,RFLG
DISP S,SQMOD+NSMOD+STS+LINE ;[360]
DISP T,SPMOD
XWD <"V">*4000+CHKFLG,LINE
XWD <"W">*4000+WFLG,0
DISP X,XFLG
DISP Z,ZFLG
XWD <"U">*4000+OFLG,0
XWD <"Y">*4000+IBFLG+RIMFLG,0
XWD <"J">*4000+JFLG,0
XWD <"I">*4000+IFLG,0
XWD <"H">*4000+IBFLG,0
XWD <"G">*4000+GFLG,0
OCT 010000000000
;FIRST BYTE 2=END OF DISPTA 2ND HALF
SUBTTL COPYING INPUT A CHARACTER CHECKING LSN
;SUBR TO GET NEXT CHAR INTO AC CHR
;NO SKIP RETURN IS END OF FILE, SINGLE SKIP IS NORMAL RETURN
GET: TLNN FLAG,NEWFIL ;NEW FILE?
TLZN FLAG,PCONV+NEWFIL ;NO,CONVERT THIS CHAR?
JRST GETPC1 ;YES
LDB CHR,IBF+1 ;GET CHAR
CAIN CHR," " ;SPACE?
JRST GETPC2 ;YES, CONVERT TO LINE FEED
CAIG CHR,"3" ;IS THE CHAR A PROPER FORMAT CONTROL CHAR?
CAIGE CHR,"*"
JRST GETPC3 ;NO, SO OUTPUT LINE FEED FOLLOWED BY BAD CHAR
CAIG CHR,"." ;USE LEFT HALF OF TABLE?
SKIPA CHR,PCHTAB-<"*">(CHR)
MOVS CHR,PCHTAB-<"/">(CHR)
GETPC4: DPB CHR,IBF+1 ;CLOBBER OLD CHAR, USUALLY BECOMES NULL
;**;[513] At GETPC4+1 insert conditional code RLUSK 5-Jun-81
;[513] *** THIS PATCH IS HARDWARE DEPENDENT! ***
;[513] *** *** TEMPORARY PATCH ONLY! *** *** ***
IFN FTSMP,< ;[513] WE TOUCHED THE INPUT BUFFER AND
;[513] WE'RE RUNNING SMP. CLEAR THE WORD
;[513] OUT OF THE CACHE SO THE INPUT BUFFER
;[513] WON'T BE FOULED BY A CACHE SWEEP.
PUSH P,T1 ;[513] SAVE AN INPUT BUFFER
MOVE T1,IBF+1 ;[513] GET THE ADDRESS OF THE WORD WE TOUCHED
ANDI T1,777 ;[513] REDUCE ADDRESS TO OFFSET OF WORD IN PAGE
;[513] AT THIS POINT, WE ASSUME THAT THE WORD WE CHANGED IS IN THE CACHE.
;[513] THERE IS A POSSIBILITY THAT THE OTHER CPU MAY HAVE PUT NEW DATA
;[513] INTO THE INPUT BUFFER WE THINK WE'RE REFERENCING (IT'S REALLY IN
;[513] CACHE). IF A CACHE SWEEP OCCURRED, THE WORD WE TOUCHED WITH THE
;[513] "DPB" ABOVE WOULD BE WRITTEN BACK INTO A NEW BUFFER, TRASHING THE
;[513] DATA IN THE NEW BUFFER. THIS WILL BE CURED IN THE FUTURE BY REWRITING
;[513] THIS ROUTINE SO THAT IT DOES NOT WRITE INTO THE INPUT BUFFER, BUT NOW
;[513] WE FIX IT BY FLUSHING THE CHANGED WORD OUT OF THE CACHE.
;[513] THIS METHOD DEPENDS ON THE CACHE HOLDING ONLY 4 QUADWORDS
;[513] OF DATA HASHED BY THE LAST 9 BITS OF AN ADDRESS. IF WE GET FOUR OTHER
;[513] QUADWORDS WHICH HASH TO THIS LOCATION, WE CAN GUARANTEE THAT THE
;[513] LATEST DATA IS THROWN OUT OF THE CACHE. THUS, TO PREVENT TRASH,
;[513] WE INVOKE CACHE HASH CLASH.
CAM 400000(T1) ;[513] REFERENCE A WORD WITH SAME HASH
CAM 401000(T1) ;[513] AND ANOTHER
CAM 402000(T1) ;[513] AND ANOTHER
CAM 403000(T1) ;[513] AND ANOTHER
POP P,T1 ;[513] CACHE FLUSHED, RESTORE REGISTER>
LSH CHR,-7 ;BUT OTHERWISE BECOMES ANOTHER FORMAT CHAR
ANDI CHR,377 ;EXTRACT THE CHAR TO BE OUTPUT
TRZE CHR,200 ;=1 FOR GENERATING MULTIPLE LINE FEEDS
TLO FLAG,PCONV ;CONTINUE TO CONVERT
JUMPN CHR,CPOPJ1;OUTPUT THE GENERATED CHAR UNLESS NULL
POP P,(P) ;IGNORE NULL CHARS
JRST PSCAN4 ;DUMP THE LINE BUFFER
GETPC1: TRNN FLAG,SUS ;SUPPLYING SEQ. NUM. NOW?
JRST GET2 ;NO
ILDB CHR,PTRPT ;YES, SO GET CHAR OF SEQ NUM
JUMPN CHR,CPOPJ1 ;0 MARKS LAST CHAR
AOS LBUF ;[360] MAKE SURE THE BIT IS ON
LDB CHR,IBF+1 ;GET FIRST CHAR OF THIS LINE
CAIG CHR,15 ;PREPARE TO OUTPUT A CR,LF
CAIGE CHR,12 ;IS FIRST CHAR OF LINE AN END OF LINE CHAR?
JRST [TRNE CALFLG,SQNSN ;REPLACING OLD SQ. NUM.?
TRZA FLAG,ESQ ;YES, SO DON'T REPEAT CHAR.
MOVEI CHR,TAB ;NO, SO OUTPUT A TAB
JRST .+4] ;[361] SKIP RETURN
CAIN CHR,14 ;[361] FORM FEED?
JRST GETPM ;[361] THEN PUT A PAGE MARK
MOVEI CHR,TAB ;[170] ADD A TAB TO A NULL LINE
TRZ FLAG,SUS ;TURN OFF SUS SUPPLY
CAIE CHR,TAB ;[531][357] TAB?
;**;[534] Replace five lines at GETPC1+18 DRB 30-Jan-85
JRST [MOVNI 0,6 ;[534] NO, ACCOUNT FOR THE
ADDM 0,TABCT ;[534] LSN AND WHAREVER FOLLOWED
JRST CPOPJ1] ;[534] AND RETURN WITH THIS CHARACTER
TLZ FLAG,TBSN ;[534] SAY WE HAVEN'T SEEN THIS TAB BEFORE
JRST GETA5 ;[534] RESET THE TAB COUNTER AND RETURN
GET5: AOS IBF+1 ;HERE IF A SEQ NUM FOUND IN INBUFFER
TRO CALFLG,SQNSN ;SIGNAL SQ. NUM. SEEN
;**;[537] Insert at GET5+2 DRB 25-Feb-85
TLNE T2,(177B6) ;[537] ARE THERE LEADING
TLNN T2,(177B13) ;[537] NULLS IN THE SEQUENCE NUMBER?
;**;[546] Insert at GET5+4 DRB 13-Nov-85
TRNE AUXFLG,TTYOUT ;[546] YES, ARE WE OUTPUTTING TO A TERMINAL?
SKIPA ;[546] NO, YES - GO AHEAD
JRST ERR537 ;[537] YES. COMPLAIN LOUDLY
MOVNI T1,5 ;IGNORE SEQ NUM, AND DECREMENT CHAR COUNT
ADDB T1,IBF+2
SKIPL T1,IBF+2 ;[136] END OF BLOCK?
;**;[537] Replace 1 at GETJ-8 DRB 25-Feb-85
JRST [MOVE T1,@IBF+1 ;[537] NO. GET THE NEXT WORD
;**;[546] Insert at GETJ-10 DRB 13-nov-85
TRNN AUXFLG,TTYOUT ;[546] DON'T WORRY ABOUT IT IF TTY:
TRNN T1,1 ;[537] DOES IT LOOK LIKE AN LSN TOO?
JRST GETJ ;[537] NO. GO ON WITH IT THEN
JRST ERR537] ;[537] YES. REPORT AN ERROR
PUSHJ P,INP ;[136] YES, DO INPUT
TXNE IOS,IO.EOF ;[136] EOF?
POPJ P, ;[136] YES
TRNN FLAG,NSMOD ;[136] ARE WE REMOVING SEQ NUMS
JRST GETJ ;[136] NO
SOS T1,IBF+2 ;[136] STEP
ILDB CHR,IBF+1 ;[136]
GETJ: TRNE FLAG,NSMOD ;[136] REMOVE SEQ NUMS MODE?
JRST GET2A ;YES, SO GET NEXT CHAR
MOVEM T2,SQNUM ;SEQ NUM FROM BUFFER BECOMES NEW SEQ NUM
PUSHJ P,OUTLBF ;DUMP THE LINE BUFFER (IF REQUIRED)
TRON FLAG,STS+SNI ;TURN ON START OF LINE
;AND NO-INCREMENT SEQ NUM FLAG
PUSHJ P,CLRBUF ;CLEAR LBUF IF IN THE MIDDLE OF A LINE
JRST GET1 ;GET CHAR. AFTER SEQ. NUMBER
GET2A: LDB CHR,IBF+1 ;[325] GET THE CHARACTER FOLLOWING THE SEQ N
TRNN FLAG,SQMOD ;[325] IF RESEQUENCING COPY FIRST CHAR.
CAIE CHR,TAB ;[325] OR IF TAB DOESN'T FOLLOW SEQ N
JRST GET1 ;[325] COPY THE NEXT CHARACTER
GET2: TRZE FLAG,ESQ ;REPROCESS LAST CHAR?
JRST GET1 ;YES
SOSL T1,IBF+2 ;CHARS REMAINING IN INBUFFER?
JRST GET4 ;YES
PUSHJ P,INP ;NO, SO REFILL AND CHECK ERR BITS
TXNE IOS,IO.EOF ;END OF FILE? IOS HAS STATUS BITS
POPJ P, ;YES
JRST GET2 ;NO, SO PROCESS INBUFFER
GETPC3: TRO FLAG,ESQ ;REPROCESS BAD CHAR
TROA CHR,12*200 ;PRECEED BAD CHAR WITH LINE FEED
GETPC2: MOVEI CHR,12*200;CHANGE SPACE TO LINE FEED
JRST GETPC4
PCHTAB: XWD 24*200,23*200+"." ;/ *
XWD 212*200+" ",177*200 ;0 + VJC 4/16/49
XWD 14*200,21*200 ;1 ,
XWD 20*200,212*200+"0" ;2 -
XWD 13*200,22*200 ;3 .
GET4: ILDB CHR,IBF+1 ;FETCH CHAR FROM INBUFFER
TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN, IB, I OR SBIN MODE?
TLNE AUXFLG,SBIN
JRST CPOPJ1 ;YES, SO NO PROCESSING REQUIRED
GET1: LDB CHR,IBF+1 ;AFTER SEQ NUM, HERE FOR 1ST CHAR
JUMPE CHR,GET2 ;IGNORE NULL CHARS
TLNE FLAG,WFLG ;CONVERTING TABS TO SPACES?
CAIE CHR,11 ;A TAB?
JRST GET1D ;NO
MOVEI CHR,40 ;YES, PREPARE A SPACE INSTEAD
TLZN FLAG,TBSN ;SEEN THIS TAB BEFORE?
JRST GET1B ;NO, THIS SPACE OUTPUT UNCONDITIONALLY
SKIPE T2,TABCT ;[343] YES, AT A TAB STOP
CAIN T2,TABSP ;[343] (AT EITHER END)?
JRST GET2 ;[343] YES, STOP CONVERSION & GET NEXT CHR.
JRST GET1B ;[373] NO, GO HANDLE NORMALLY.
GETPM: MOVE 0,[<BYTE(7) 40,40,40,40,40>+1] ;[361]
MOVEM 0,LBUF ;[361] USE A PAGE MARK INSTEAD OF A LSN
MOVEI CHR,15 ;[361] AND ADD A CR
TRO FLAG,SNI ;[361] DON'T SKIP A NUMBER
TRZ FLAG,SUS ;[361] DONE WITH THIS LSN
JRST CPOPJ1 ;[361] AND RETURN
GET1B: TDOA FLAG,[XWD TBSN,ESQ] ;[300] NO, SIGNAL REPROCESS THIS TAB
GET1D: TLZ FLAG,TBSN ;[300] WE HAVE SEEN SOMETHING ELSE THAN A TAB
CAIN CHR,LF ;IGNORE LINE FEED IN FORTRAN OUTPUT
TLNN FLAG,PFLG ;/P SWITCH IN EFFECT?
JRST GET1A ;NO
TLO FLAG,PCONV ;CONVERT THE NEXT LIVE CHAR
JRST GET2 ;GET NEXT CHAR
GET1A: MOVE T2,@IBF+1 ;BIT 35 OF BUFFER SET?
TRZE T2,1
JRST GET5 ;YES, THIS IS A SEQ NUM
TRZE FLAG,STS ;START SEQ (NEW LINE) FLAG ON?
TRNN FLAG,SQMOD+SNI ;YES, SEQ MODE OR SEQ COPY?
JRST GET7 ;NO, SO PROCESS CHAR
;**;[511] Insert one line after GET1A+5 RLUSK 13-MAR-81
TRO FLAG,LINE ;[511] SET LINE BLOCKING MODE FOR LSN'S
MOVE T2,SQNUM ;NO, SO ADD 10. TO SEQ NUM
MOVE T1,K1
TRNE FLAG,OSFLG ;TEST FOR INCR. BY ONE
MOVE T1,K4
ADD T2,T1 ;ASCII INCREMENT
AND T2,K3 ;MASK SIGNIFICANT DIGITS
MOVE T1,T2
AND T1,ZRO ;MASK CARRY BITS
ASH T1,-3
SUB T2,T1 ;ADJUST CARRIES
IOR T2,ZRO
TRZN FLAG,SNI ;NON-INCREMENT SEQ NUM FLAG ON?
MOVEM T2,SQNUM ;NO, SO SAVE THE RESULT
TRO FLAG,SUS+ESQ ;[342] TURN ON SUPPLY SEQ, REPROCESS
;LAST CHAR.
AOS LBUF ;SET BIT 35 IN LBUF TO MARK SEQ NUM
MOVE T1,[POINT 7,SQNUM]
MOVEM T1,PTRPT ;INITIALIZE SEQ NUM PICK-UP POINTER
PUSHJ P,OUTLBF ;[360] OUTPUT LINE AND
PUSHJ P,CLRBUF ;[360] CLEAR LINE SO LSN STARTS ON WORD
JRST GET ;GO OUTPUT FIRST CHAR OF SEQ NUM
SUBTTL INPUT
;ROUTINE TO INPUT INPUT FILE
INP: IN IN, ;INPUT DATA
JRST CPOPJZ ;NO ERRORS ,BUT CLEAR IOS JUST IN CASE
GETSTS IN,IOS ;CHECK INPUT ERR BITS
TRNN AUXFLG,MTAIN ;MTA INPUT?
TXNE IOS,IO.ERR ;ANY ERROR BITS SET?
TXNN IOS,IO.ERR+IO.EOT ;EOT FOR MTA?
POPJ P, ;NO
PUSHJ P,COMERR ;SAVE AC'S RELEASE TTY
JSP T5,INICN2 ;YES SO PRINT OUT COMPLETE FILE DESCRIPTOR
PUSHJ P,QUEST
ERRPN2 </Input device />
PUSHJ P,P6BIT
DEVICE
SKIPN ZRF ;IS THERE A FILE NAME
JRST .+4 ;NO,SO DON'T PRINT
ERRPN2 </: file />
MOVEI T3,ZRF ;LOC OF INPUT FILE NAME TO T3
PUSHJ P,FN.EX ;DEPOSIT FILE NAME, EXT INTO TTY OUT BUFFER
MOVE T2,AUXFLG
ANDI T2,CDRIN+DTAIN+DSKIN+MTAIN
PUSHJ P,IOERR ;GO PRINT ERROR DESCRIPTOR
SETSTS IN,(IOS)
POPJ P,
;ROUTINE TO TEST IF BLOCK TOO LARGE, OR WRITE LOCKED
QUEST: MOVEI CHR,"?" ;DEPOSIT "?" IN ERROR MSG
TLNN FLAG,GFLG ;ONLY IF /G NOT ON
JRST PUTCON ;/G NOT ON, PRINT ?(FATAL) BEFORE ERR MSG
TXNN IOS,IO.BKT ;BLOCK NO. TOO LARGE?
JRST QUEST2 ;NO
TRNN AUXFLG,DTAIN+DTAOUT ;YES
POPJ P, ;BLOCK TOO LARGE
JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON
QUEST2: TXNE IOS,IO.IMP ;WRITE LOCKED?
TRNN AUXFLG,DTAIN+DTAOUT+MTAIN+MTAOUT+DSKOUT
POPJ P, ;NO
JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON
SUBTTL TAB AND SPACE HANDLER
GET7: TLNE FLAG,PCONV ;CONVERTING FORTRAN CARRAIGE CONTROL CHAR?
JRST GET+1 ;YES, GO DO IT
AOS T1,CDRCNT
CAIN CHR,SPACE ;SPACE?
JRST GETA2 ;YES
CAIN CHR,CR ;CAR. RET.?
JRST GETA3 ;YES
TLNE AUXFLG,CDRFLG
JRST GET7B ;CARD READER INPUT
GET7C: TRZ FLAG,SPOK ;CHAR NOT A SPACE STOP COUNTING CONSEC. SPACES
CAIN CHR,TAB ;TAB?
JRST GETA5 ;KEEP TRACK OF TAB STOPS
CAIN CHR,10 ;BACKSPACE?
AOS TABCT ;YES, FIX THE COUNTER.
CAIG CHR,176 ;[154] ALLOW LOWER CASE & ESC TO COUNT
;[154] IN ADDITION TO NUMBERS, UPPER, ETC
CAIGE CHR,SPACE ;NON-SPACING CHARACTER?
JRST CPOPJ1 ;YES, SO RETURN IMMEDIATELY
SOSG TABCT ;COUNT DOWN THE TAB STOP COUNTER
JRST GETA5 ;RESET THE COUNTER IF TAB STOP IS PASSED
CPOPJ1: AOSA (P) ;SKIP RETURN
CPOPJZ: SETZ IOS, ;CLEAR IOS JUST IN CASE
CPOPJ: POPJ P,
GETA3: TRZE FLAG,SPOK ;CAR. RET. SEEN, ANY TRAILING SPACES?
TRNN FLAG,SPMOD+TBMOD ;YES, ARE WE FLUSHING TRAILING SPACES
JRST GETA5 ;NO, RESET TAB COUNTER ONLY
MOVE 0,SVPTR1
MOVEM 0,OPTR ;CLOBBER THE OUTPUT POINTER TO LBUF
;**;[530] AT GETA3: + 4L, INSERT 1L, KMR, 22-JUN-83
TLO FLAG,SPCNV ;[530]YES, WE JUST DUMPED A SPACE ON THE LINE
GETA5: MOVEI 0,TABSP
MOVEM 0,TABCT ;RESET THE TAB COUNTER
JRST CPOPJ1
GET7B: CAIG CHR,SPACE
JRST GET7C ;DON'T CONSIDER CONTROL CHARS.
CAIL T1,^D73 ;LT COL 73?
CAILE T1,^D80 ;NO, LE COL 80?
JRST GET7C ;CAN'T BE A CARD SEQUENCE NUMBER
MOVEI CHR,SPACE ;REPLACE CARD SEQUENCE NOS. BY SPACE
GETA2: TROE FLAG,SPOK ;SPACE WAS SEEN, IS THIS ONE OF A SEQUENCE?
JRST GETA7 ;YES
MOVE 0,OPTR ;THIS IS THE FIRST SPACE SEEN, SAVE LBUF
;POINTER IN CASE THIS SPACE MUST BE FLUSHED
MOVEM 0,SVPTR1 ;THIS POINTER FOR FLUSHING FINAL SPACES
MOVEM 0,SVPTR2 ;THIS POINTER FOR CHANGING MULT. SPACES TO TABS
SETZM SPCT ;INITIALIZE THE SPACE COUNTER
GETA7: AOS T1,SPCT
SOSLE TABCT ;ARE WE AT THE NEXT TAB STOP?
JRST CPOPJ1 ;NO
CAIL T1,2 ;DONT BOTHER CHANGING ONE SPACE TO A TAB
TRNN FLAG,TBMOD ;TAB GENERATING MODE?
JRST GETA5A ;NO, GO RESET TAB COUNTER
MOVE 0,SVPTR2
MOVEM 0,OPTR ;BACK UP THE OUTPUT POINTER OVER THE LAST
;GROUP OF SPACES
MOVEI CHR,TAB ;OUTPUT A TAB
SETZM SPCT ;RESET THE SPACE COUNTER
GETA5A: IBP SVPTR2 ;UPDATE THE CHANGE-SPACES-TO-TABS POINTER
JRST GETA5 ;RESET THE TAB COUNTER
SUBTTL ERROR MESSAGES (GENERAL)
;ERROR ROUTINES
IFN RIMSW,<
ERR8A: MOVEI T4,ERR382
JRST E10B
ERR3B: MOVEI T4,ERR381
JRST E10B>
ERR10: MOVEI T4,E10A
E10B: SKIPN ZRF
SKIP 3
ERRPNT </?File />
MOVEI T3,ZRF
PUSHJ P,FN.EX
JRST (T4)
IFN RIMSW,<
ERR381: ERRPN2 </illegal extension!/>
ERR382: ERRPN2 </illegal format!/>
ERR5B: ERRPN2 </? DTA to PTP only!/>>
ERR9: MOVEI T3,DTON
IFN FTDSK,<MOVEI T7,4 ;REALLY ERROR TYPE 4
SKIPE DTON ;UNLESS FILE NAME IS ZERO
JRST DERR4 ;NOT, SO USE DSK ERROR ROUTINES>
ERRPNT </?/>
PUSHJ P,FN.EX
IFE FTDSK,<SKIPN DTON ;SKIP IF NON-ZERO FILE NAME>
JRST ERR12 ;[316]
IFE FTDSK<ERRPNT </(4) rename file name already exists!/>>
ERR11: ;[211]
MOVE 0,DEVICE ;[227] GET SOURCE DEVICE NAME
CAMN 0,ODEV ;[227] ALLOW EXACTLY THE SAME
JRST DELE2 ;[227] EQUAL, CONTINUE /R/D
IFN FTDSK,< ;[211]
TLNN FL,DDEVSN ;[323] WAS THERE A DESTINATION DEVICE?
JRST [MOVEM 0,ODEV ;[323] NO, THEN JUST USE SOURCE
JRST DELE2] ;[323] AND OK IT
TRC AUXFLG,DSKIN!DSKOUT ;[323] ARE BOTH DEVICES DISK?
TRCE AUXFLG,DSKIN!DSKOUT ;[323]
JRST ERR11Z ;[323] NO, YOU LOSE
MOVE T1,DEVICE ;[323] DO DSKCHR'S ON BOTH DEVICES
MOVEM T1,INDCHR ;[323] TO FIND OUT WHETHER THEY ARE
MOVE T1,[XWD .DCUPN+1,INDCHR];[323] GENERIC AND TO SEE
DSKCHR T1, ;[323] WHAT STRUCTURE THEY ARE PART OF
JRST ERR11Z ;[323]
MOVE T2,ODEV ;[323] *NOTE* THIS MAKES LOGICAL NAMES,
MOVEM T2,OUDCHR ;[323] PHYSICAL NAMES, AND ANY OTHER
MOVE T2,[XWD .DCUPN+1,OUDCHR];[323] FALL RIGHT THROUGH
DSKCHR T2, ;[323] WELL, WOULD YOU BELIEVE
JRST ERR11Z ;[323] ALMOST?
LDB T1,[POINTR (T1,DC.TYP)];[323] ISOLATE ARGUMENT
LDB T2,[POINTR (T2,DC.TYP)];[323] TYPE BYTES
JUMPE T1,ERR11F ;[323] IF INPUT GENERIC, GO CHECK OUTPUT
CAIE T1,.DCTCN ;[323] IF INPUT IS CONTROLLER TYPE
CAIN T1,.DCTCC ;[323] OR CONTROLLER
JRST ERR11N ;[323] THEN CHECK SPECIALLY
JUMPE T2,DELE2 ;[323] IF OUTPUT ALSO GENERIC, THEN USE
;[323] INPUT DEVICE FOR OPENS
MOVE T1,T2 ;[323] COPY OUTPUT TYPE FOR ERR11P
CAIE T2,.DCTCN ;[323] IF OUTPUT IS DP OR DPA
CAIN T2,.DCTCC ;[323] THEN USE INPUT IF CONTROLLER MATCHES
JRST ERR11P ;[323] GO CHECK
MOVE T1,INDCHR+.DCSNM;[323] BOTH ARE SPECIFIC
CAME T1,OUDCHR+.DCSNM;[323] ARE THEY THE SAME STRUCTURE?
JRST ERR11Z ;[323] NO, LOSE
JRST DELE2 ;[323] OK, LET IT THROUGH USING INPUT DEVICE
ERR11F: JUMPE T2,DELE2 ;[323] INPUT IS GENERIC, IF OUTPUT
;[323] IS ALSO, USE INPUT
;HERE IF INPUT IS GENERIC AND OUTPUT IS NOT (OR NOT VERY IN THE CASE
; OF .DCTCN AND .DCTCC). WE WANT TO USE THE INPUT DEVICE'S SEARCH
; LIST (e.g. SYS) WHEN WE ARE DOING FILE STRUCTURE STUFF,
; BUT ONLY WANT TO FIND THE FILE ON THE DEVICE SPECIFIED BY THE
; NON-GENERIC OUTPUT SPEC. THIS CATCHES SUCH ABOMINATIONS AS:
; RPA:/R=SYS:FOO
; BTSS:/R=SYS:FOO
; CRC:/R=D:FOO
; OLDB:/R=ALL:FOO
MOVEI T1,.DCUPN ;[323] ASSUME .DCTCN OR .DCTCC AND
;[323] INDEX OFF PHYSICAL NAME
CAIN T2,.DCTCN ;[323] IF CONTROLLER TYPE
JRST [HRLOI T2,77 ;[323] COMPARE CONTROLLER TYPE
JRST ERR11G] ;[323]
CAIN T2,.DCTCC ;[323] IF CONTROLLER
JRST [HRLOI T2,0 ;[323] COMPARE CONTROLLER NAME
JRST ERR11G] ;[323]
MOVEI T1,.DCSNM ;[323] IT'S NEITHER, USE STRUCTURE NAME
SETZ T2, ;[323] AND COMPARE IT ALL
ERR11G: MOVE 0,OUDCHR(T1) ;[323] GET NAME TO COMPARE AGAINST
ANDCM 0,T2 ;[323] CLEAR UNWANTED CHARACTERS
MOVEM 0,RENDCH ;[323] SAVE NAME
MOVEM T1,RENDCH+1 ;[323] AND INDEX
MOVEM T2,RENDCH+2 ;[323] AND MASK
MOVE 0,DEVICE ;[323] RESTORE INPUT DEVICE FOR USE
JRST DELE2 ;[323] AND OK IT
; HERE WHEN INPUT DEVICE IS SEMI-GENERIC (.DCTCN OR .DCTCC)
; HAVE TO SPECIAL CASE THIS TO SEE IF DEVICES MATCH
ERR11N: JUMPE T2,DELE2 ;[323] IF OUTPUT GENERIC, USE INPUT
CAIN T2,.DCTCN ;[323] IF OUTPUT IS CONTROLLER TYPE
CAIE T1,.DCTCC ;[323] AND INPUT IS CONTROLLER
JRST ERR11O ;[323] NO
HLLZ T1,INDCHR+.DCUPN;[323] YES, THEN IF THEY ARE THE SAME
HLLZ T2,OUDCHR+.DCUPN;[323] TYPE, USE INPUT, IT'S MORE SPECIFIC
CAME T1,T2 ;[323] WELL?
JRST ERR11Z ;[323] NOT THE SAME, YOU LOSE
JRST DELE2 ;[323] THE SAME, YOU WIN WITH INPUT
ERR11O: MOVE 0,ODEV ;[323] USE OUTPUT DEVICE IF CONTROLLER MATCHES
;[323] NOTE, NO PROBLEM WITH SEARCH LISTS
;[323] SINCE ONLY GOT HERE WITH =DPA: OR =DP:
ERR11P: HLLZ T2,OUDCHR+.DCUPN;[323] OUTPUT IS SPECIFC OR .DCTCC
CAIN T1,.DCTCN ;[323] THEN THEY MUST MATCH TO
TLZ T2,77 ;[323] 2
HLLZ T1,INDCHR+.DCUPN;[323] OR
TLNN T2,77 ;[323] 3
TLZ T1,77 ;[323] CHARACTERS
CAME T1,T2 ;[323] DO THEY?
JRST ERR11Z ;[323] NO, LOSE
JRST DELE2 ;[323]
ERR11Z: ;[323] HERE FOR ERRORS
>;[211] END IFN FTDSK
ERRPNT </?Different source device specification not allowed!/> ;[227] /R OR /D
ERR12: ERRPNT </?Null file name illegal!/> ;[153] FIX .FOO
ERR13: ERRPNT <%?Wild card not allowed for /L or /F!%> ;[244]
ERR14: ERRPNT </?Wild cards not allowed for TSK:!/> ;[312]
ERR15: ERRPNT </?No directories on TSK:!/> ;[312]
ERR16: ERRPNT </?No DELETEs or RENAMEs on TSK:!/> ;[312]
ERR22: ERRPNT </?Wild Devices Illegal!/> ;[352]
ERR1: SKIPA T2,ODEV ;OUTPUT UNAVAILABLE
ERR1A: MOVE T2,DEVICE ;INPUT UNAVAILABLE
ERR1B: ERRPNT </?Device />
PUSHJ P,P6BIT
T2
ERRPN2 </ not available!/>
ERR3:
IFN FTDSK,<TRNE AUXFLG,DSKIN
JRST DERR5 ;ERR ON DSK>
PUSHJ P,ERR3A
JRST IOERRN ;EXIT
ERR3A: TLO AUXFLG,INFOFL ;SIGNAL RETURN TO ERR3AA
TRNE AUXFLG,TTYOUT ;[176] SEE IF OUTPUT IS TO TTY
CLOSE OUT, ;[176] YES, THEN PRINT BEFORE NEW INIT
JRST INFO
ERR3AA: TRNE FLAG,DFLG ;DELETING?
JRST ERR3AD ;YES, GIVE NON-FATAL MESSAGE
ERRPN2 </? /> ;NO, FATAL
ERR3AB: ERRPN2 </No file named />
ERR3AC: ;[177] LABEL FOR /L/F TO USE FOR NOT FOUND
IFN FTDSK,< ;[240]
PUSHJ P,P6BIT ;[211] GO PRINT DEVICE NAME
ADSK ;[211] FROM ADSK
MOVEI CHR,":" ;[211] WITH COLON
PUSHJ P,PUTCON ;[211]
>;[240] END IFN FTDSK
SKIPN T3,QMASK ;USING WILD CHAR. ?
JRST ERR3AX ;NO
ANDCAM T3,FILNAM ;CLEAR GARBAGE CHARS.
AND T3,['??????'] ;CREATE MASK OF ??S
IORB T3,FILNAM ;FILL IN FILE NAME
CAME T3,['??????'] ;BUT IF ALL CHARS ARE WILD
JRST ERR3AX ;NOT
MOVSI T3,'* ' ;USE *
MOVEM T3,FILNAM
ERR3AX: SKIPN T3,QMASK+1 ;SAME FOR EXT
JRST ERR3AY
ANDCAM T3,FILNAM+1
AND T3,['??????']
IORB T3,FILNAM+1
CAME T3,['??????'] ;BUT IF ALL CHARS ARE WILD
JRST ERR3AY ;NOT
MOVSI T3,'* ' ;USE *
MOVEM T3,FILNAM+1
ERR3AY: MOVEI T3,FILNAM
PUSHJ P,FN.EX ;PRINT NAME OF FILE THAT CANNOT BE FOUND
PUSHJ P,INFO2 ;OUTPUT MESS. WITH CR-LF
TRNN AUXFLG,TTYIN!TTYOUT ;WAS TTY IN USE?
POPJ P, ;NO
TRNE AUXFLG,TTYIN ;INPUT DEVICE?
JRST ININIT ;YES ,RE-INIT
JRST OMODE ;MUST BE OUTPUT
ERR3AD: ERRPN2 </% /> ;NON-FATAL
JRST ERR3AB ;AND COMMON MESSAGE
ERR4: SKIPN DTON
JRST ERR12 ;[316]
IFN FTDSK,<TRNE AUXFLG,DSKOUT ;ERR ON DSK
JRST DERR6>
ERRPNT </? Directory full!/>
ERR6: TLZ FLAG,TID ;[125] CLEAR ID REQUEST TO PREVENT LOOP
ERR6A: ERRPNX </?PIP command error!/>
ERR6B: ERRPNT </?PIP command too long!/>
ERR6C: PUSH P,0 ;[340] SAVE SWITCH
ERRPNX <\?/\> ;[340] START THE ERROR MESSAGE.
POP P,CHR ;[340] GET SWITCH BACK
PUSHJ P,PUTCON ;[340] TYPE THE SWITCH OUT
ERRPN2 </ TOO LATE IN COMMAND STRING!/> ;[340]
E10A: ERRPN2 </ line too long!/>
ERR5A: ERRPNT </?Too many input devices!/>
;FILE MANIPULATION COMMANDS TO NON-DIRECTORY DEVICES COME HERE
ERR5: ERRPNT </?Disk or DECtape input required!/>
ERR2: ERRPNX </?Incorrect Project-Programmer number!/>
ERR2A: ERRPNX </?Illegal protection!/>
;**;[507] Insert 1 line after ERR2A RLUSK 24-Feb-81
ERR2B: ERRPNX </?Wildcard SFDs are not supported!/> ;[507]
ERR7A: ERRPNT <Z?DECtape I/O only!Z>
ERR8: ERRPNT </?Explicit output device required!/>
;**;[501] Insert at ERR8+1 RLUSK 30-Oct-80
ERR501: PUSH P,0 ;[501] SAVE CHARACTER
ERRPNX </?Illegal character "/> ;[501]
POP P,0 ;[501] RECOVER CHAR.
MOVE CHR,0 ;[501] CHARACTER MUST BE IN CHR
PUSHJ P,PUTCON ;[501] PUT OUT THE CHARACTER
ERRPN2 </" following "*" in command!/> ;[501]
;**;[537] Insert at ERR501+6 DRB 25-Feb-85
ERR537: ERRPNT <\?Illegally formatted sequence number or binary file (use /B)!\>
SUBTTL DETERMINE INPUT DEVICE TYPE
;ROUTINE TO CHECK INPUT DEV, SET XXXIN.E.G.DTAIN
CHECK1: TRZ AUXFLG,DTAIN+DSKIN+CDRIN+PPTIN+TTYIN+MTAIN+NULIN ;[211]
TLZ FL,TSKIN ;[312] ALSO CLEAR TASK INPUT
MOVE 0,DEVICE ;INPUT DEVICE NAME TO AC 0
JUMPE 0,CHECK ;IGNORE IF NO INPUT DEVICE
IFN FTDSK,< ;[245]
MOVEM 0,ADSK ;[245] SAVE DEVICE FOR INIT AND ERRORS
>;[245] END IFN FTDSK
DEVCHR ;GET INPUT DEVCHR
IFN FTDSK,<TXNN 0,DV.DSK ;INPUT DEVICE DISK?
JRST CHECK2 ;NO
TRO AUXFLG,DSKIN;INPUT DEVICE IS DSK, SET BIT
TLC 0,-1-<(DV.TTA)> ;[211] CHECK FOR NULL
TLCN 0,-1-<(DV.TTA)> ;[211] BY LOOKING FOR ALL BITS ON
TRO AUXFLG,NULIN ;[211] IT IS NUL:
MOVE 0,DEVICE ;[163] GET DEVICE INTO 0 FOR PSYSP
PUSHJ P,PSYSP ;[163] GO CHECK ERSATZ
JRST CHECK
>;[163] END IFN FTDSK
CHECK2: JUMPE 0,DEVER1 ;NON-EX. DEVICE
TXNN 0,DV.IN ;CAN DEVICE DO INPUT?
JRST ERR6A ;NO, COMMD ERROR
TXNE 0,DV.PTR ;PAPER TAPE READER?
TRO AUXFLG,PPTIN;YES
TXNE 0,DV.DTA ;DECTAPE?
TRO AUXFLG,DTAIN
TXNE 0,DV.MTA ;MAGTAPE?
TRO AUXFLG, MTAIN
TXNE 0,DV.CDR ;CARD READER?
TRO AUXFLG,CDRIN
TXNE 0,DV.TTY ;TELETYPE?
TRO AUXFLG,TTYIN
CHECK: TRNE CALFLG,SSWTCH ;_FLAG STILL ON?
JRST ERR6A ; YES ,COMMAND ERROR
TRNE AUXFLG,DTAIN+DSKIN+CDRIN+PPTIN+TTYIN+MTAIN+TTYIN ;[312]
POPJ P, ; NO, RETURN
MOVE 0,DEVICE ;[312] GET INPUT DEVICE NAME
DEVTYP 0, ;[312] SEE IF IT IS TSK:
SETZ 0, ;[312]
TXZ 0,<-1-TY.DEV> ;[312] CLEAR RIGHT BITS
HRRZ 0,0 ;[312] AND LEFT
CAIN 0,.TYTSK ;[312] WELL, IS IT?
TLOA FL,TSKIN ;[312] YES
POPJ P, ;[312]
TRO AUXFLG,DSKIN ;[312] TSK:, SAY IT IS DISK ALSO
POPJ P, ;[312]
SUBTTL ERROR MESSAGE PRINTERS
;SUBR TO PRINT ERROR MESSAGES
;! MARKS THE END OF MESSAGE & SIGNALS GO TO PIP2
;NULL IS A FLAG TO RETURN TO THE NEXT LOCATION
PRETXT: IFN CCLSW,<
SKIPN COMFLG ;IN CCL MODE
JRST PTEXT ;NO, SO DON'T BOTHER
PRTXT1: PUSHJ P,GETBUF ;GET A CHAR.
CAIG 0,FF ;TEST FOR LF, VT, FF
CAIGE 0,LF
JRST PRTXT1 ;NOT A LINE TERMINATOR>
PTEXT: TRNE AUXFLG,TTYOUT ;[175] SEE IF OUTPUT DEVICE IS TTY
CLOSE OUT, ;[175] YES, THEN OUTPUT LAST BUFFER
JSP T5,INICN2 ;[175] GO INIT TTY ON CON
PUSHJ P,TCRLF ;OUTPUT A CR-LF
PTEXT2: HRLI T1,440700 ;GET SET TO SCAN 7-BIT DATA
PTEXT1: ILDB 0,T1 ;GET CHAR OF ERR MESSAGE
JUMPE 0,1(T1) ;RETURN ON ZERO
CAIN 0,"!" ;!?
JRST [TRZN CALFLG,RTRNFL ;FATAL
JRST IOERRN ;YES, END OF MESSAGE, APPEND CAR.RET., LF
JRST TCRLF] ;RETURN TO CALLING ROUTINE
IDPB 0,TFO+1 ;DEPOSIT CHAR IN OUTBUFFER
JRST PTEXT1 ;GET NEXT CHAR
;ROUTINE TO DEPOSIT CHARACTER IN TTY OUT BUFFER
PUTCON: SOSG TFO+2 ;STORED MORE THAN BUFFER HOLDS?
OUTPUT CON, ;YES
IDPB CHR,TFO+1
POPJ P,
;ROUTINE TO CONVERT ONE WORD OF SIXBIT
;FROM ADDRESS IN LOCATION AFTER CALL AND DEPOSIT INTO TTY OUT BUFFER
P6BIT: MOVE T1,@(P) ;PICK UP WORD OF 6-BIT
MOVE 0,(T1) ;[320] GET ACTUAL WORD
MOVSI T1,(POINT 6,0,5);[320] SET UP BYTE POINTER
P6BIT1: JUMPE 0,CPOPJ1 ;[320] EXIT WHEN NOTHING LEFT
LDB CHR,T1 ;[320] GET LEFT MOST BYTE
ADDI CHR,SPACE ;[320] CONVERT IT TO ASCII
PUSHJ P,PUTCON ;[320] TYPE IT OUT
LSH 0,6 ;[320] ON TO NEXT BYTE
JRST P6BIT1 ;[320]
SUBTTL DTA /Z AND ^^
;ROUTINE TO CLEAR DSK OR DTA DIRECTORY (/Z SWITCH)
DTCLR: TRNN CALFLG,DVSWTH ;HAS A DEVICE BEEN SEEN?
JRST ERR8 ;NO,SO DON'T SCREW USER
IFN FTDSK,<TRNE AUXFLG,DSKOUT ;CLEAR DSK OR DTA DIR.
JRST DSKZRO>
IFN TEMP,<TRNE CALFLG,TMPO ;TMPCOR
JRST TMPZRO>
TRNN AUXFLG,DTAOUT ;MUST BE DTA
JRST ERR5
UTPCLR OUT, ;CLEAR DIRECTORY
POPJ P,
;ROUTINE TO WRITE ID IN DTA
SYN QMASK,DDIOW ;SAVE SPACE
WRTID: MOVX 0,IO.NSD+.IODMP ;NON-STANDARD DUMP MODE
MOVEM 0,OMOD ;IN OPEN DATA
SETZM OMOD+2 ;NO BUFFERS
OPEN DD,OMOD ;INIT DEVICE
JRST ERR1 ;NOT AVAILABLE
USETI DD,144 ;SET ON DIRECTORY
HRRZ T1,.JBFF ;GET CURRENT TOP OF FREE CORE
ADDI T1,200 ;DIRECTORY BUFFER
CAMLE T1,.JBREL ;WILL IT FIT
JSP T4,MORCOR ;NO, GET SOME
SUBI T1,201 ;IOWD ADDRESS
HRLI T1,-200 ;NUMBER OF WORDS
MOVEM T1,DDIOW ;STORE I/O WORD
SETZM DDIOW+1 ;TERMINATE LIST
INPUT DD,DDIOW ;DO INPUT
MOVE 0,TAPEID ;GET ID
MOVEM 0,200(T1) ;PUT IT IN DIRECTORY
USETO DD,144 ;SET TO WRITE IT OUT
OUTPUT DD,DDIOW ;OUT IT GOES
RELEAS DD,0 ;CLEAR DIRECTORY IN CORE BIT
TLZ FLAG,TID ;[125] SO WE DON'T COME BACK TOO OFTEN
POPJ P,
SUBTTL /X COPY ROUTINES
;ROUTINE TO SET UP TO COPY EVERYTHING
PRECOP:IFN TEMP,<
TRNE CALFLG,TMPI!TMPO;[267] IS ANYTHING TMPCOR?
SKIPGE ESWTCH ;[267] IS THERE MORE THAN ONE FILE?
JRST .+2 ;[267] NO, IT'S OK
JRST TMPERR ;[267] OOPS
TRNE CALFLG,TMPI ;INPUT DEV. IS TMPCOR?
JRST TMPIN ;YES>
TRO CALFLG,FNEX ;/X IMPLIES MANY FILES
PUSHJ P,ININIT ;INIT INPUT FILE
TRNN AUXFLG,DTAIN ;DECTAPE INPUT
SKIP 2 ;NO
PUSHJ P,DTCH2 ;YES, GET DIRECT, SET POINTERS TO DIRECT
DTCOPY: PUSHJ P,DTADI1 ;START (T5)
IFN FTDSK,<
TRNN AUXFLG,NULIN ;[344] SKIP DIRECTORY READS FOR NUL:
TLNN FL,MFLG ;[130] NO NEED TO CALL DSKDIR IF
JRST COPY1A ;[130] EXPLICIT FILE NAME TYPED
TRNE FL,TSKIN ;[312] WAS THIS TASK INPUT?
JRST ERR14 ;[312] YES, NO WILD CARDS ALLOWED
TRNN AUXFLG,DSKIN ;DSK INPUT. ENTER HERE FROM DTD2
JRST COPY1A ;[367] NOT DISK INPUT, BE STRAIGHTFORWARD
TRNN AUXFLG,DSKOUT+DTAOUT ;[367] DIRECTORY OUTPUT?
PUSHJ P,INITFS ;[367] NO, INIT FILE STRUCTURES
JRST DTCOP2 ;[367] YES, BE SOMEWHAT STRAIGHTFORWARD
DTCOP1: PUSHJ P,NXTFSU ;[367] GET NEXT FS
JRST [TRNN AUXFLG,REDFLG ;[367] FOUND A FILE?
TLNN FL,MFLG ;[367] YES - EXPLICIT FILE?
SKIPA ;[367] YES
PUSHJ P,ERR3A ;[367] NO - ERROR
JRST MAIN1 ;[367] DONE
]
TROA CALFLG,FNEX ;[367] FLAG, AND SKIP DSKDIR
DTCOP2: PUSHJ P,DSKDIR ;YES, PREPARE TO LOOKUP FILES>
COPY1A: MOVEI T2,6 ;FILL 0 CHARS. IN DEST-FILE
MOVE T1,[POINT 6,DTON] ;NAME WITH X'S. THIS IS
TRNN FL,RXFLG ;TWO NAMES GIVEN?
JRST .+3 ;NO
MOVE 0,[FILNAM,,DTON] ;GET INPUT FILE NAME
BLT 0,DTON+1 ;AS OUTPUT
MOVE 0,QMASK ;GET INPUT MASK
ANDCAM 0,DTON ;AND CLEAR WILD CHARACTERS
HLLZ 0,QMASK+1 ;SAME FOR EXT
ANDCAM 0,DTON+1
XSS: ILDB 0,T1 ;THEN THE BASE FOR GENERATED
JUMPN 0,.+2 ;DESTINATION FILES FROM
MOVEI 0,"X"-40 ;NON-DIR. DEVICES IN /X
DPB 0,T1
SOJG T2,XSS ;DON'T YET KNOW IF ONE
;OF THE INPUT DEV. WILL BE NON-DIR
MOVE 0,[DTON,,DTONSV]
BLT 0,DTONSV+1
COPY1: PUSHJ P,SR2 ;SET INIT. COPYING MODE
PUSHJ P,LOOK ;GET A FILE TO COPY
JRST CAL6 ;NO MORE
IFN FTDSK<PUSHJ P,XDDSK ;GOT ONE, CHECK (XD) FROM DSK, NAMTAB
JRST COPY1 ;IN LIST, DON'T COPY>
TRNN AUXFLG,MTAIN+PPTIN+CDRIN+TTYIN ;OK, COPY FILE
JRST COPY6A ;MUST BE DIRECTORY DEVICE
PUSHJ P,MTPTCR ;SET UP A DEST. FN.
JRST COPY6
COPY6A:
IFN FTDSK,<PUSHJ P,SETPTH ;SEE IF FULL PATH
MOVEM 0,ZRFEX+.RBPPN ;[273] YES, USE IT>
MOVE T1,LEVEL ;[273] GET INDEX FOR LOOKUP
TRNN AUXFLG,DSKIN ;[273] IS THIS DISK
SETZ T1, ;[273] NO, DON'T DO EXTENDED
LOOKUP IN,ZRF(T1) ;[273] LOOKUP INPUT FILE NAME
JRST CAL5 ;INPUT FILE FILE PROTECTED
COPY6: TRO AUXFLG,REDFLG ;[367] FLAG READ-A-FILE
PUSHJ P,FILTYP ;CHECK FOR DMP,SAV,REL,CHN
TRNE CALFLG,TMPO ;[267] IS THIS TMP: OUTPUT?
JRST TMPOCK ;[267] YES, GO CHECK WILD CARDS
TRNN AUXFLG,DSKIN!DTAIN ;ALLOW NULL FILE ON DIRECTORY DEVICES
PUSHJ P,COPY3 ;INPUT FIRST BLOCK AND CHECK FOR EOF
COPY6B: MOVE 0,ZRF ;INPUT FILE NAME
MOVEM 0,DTON ;IS OUTPUT FILE NAME
HLLZ 0,ZRF+1 ;LIKEWISE EXT
HLLZM 0,DTON+1
;THIS CODE OPERATES AS FOLLOWS - FOR E+2, SET = 0
;TO START (ASSUMING /X)
;DSK TO DSK IF EDIT SWITCHES PUT E+2 = 0 IF NO EDITS TRANSFER
; DATE, TIME, BITS 13-35
;DSK TO DTA FOR EDITS E+2 = 0, NO EDITS TRANSFER 24-35 FOR
;DATE, FOR"SAV" FILES TRANSLATE NO. 1K BLOCKS
;DTA TO DSK FOR NO EDITS XFER BITS 24-35, ELSE E+2 = 0
;DTA TO DTA ALWAYS XFER 18-23, (1K BLOCK) NO EDITS XFER 24-35(DATE)
SETZM DTON+2 ;CLEAR DATE. OUTPUT FILE, DSK/DTA
LDB 0,DATE ;GET DSK/DTA DATE CREATED
TDNN FLAG,[XWD PFLG+WFLG,LINE+TBMOD+NSMOD+SQMOD+SPMOD]
TLNE AUXFLG,CDRFLG
JRST COPY6C
DPB 0,DATED ;DEPOSIT IF NO EDITS
LDB 0,XDATE ;[132] HIGH ORDER BITS OF DATE
DPB 0,XDATED ;[132] MUST BE COPIED ALSO
IFN FTDSK,<LDB 0,TIME
TRC AUXFLG,DSKIN+DSKOUT
TRCN AUXFLG,DSKIN+DSKOUT
DPB 0,TIMED ;DSK TO DSK TIME>
COPY6C: PUSHJ P,EXTENT ;[273] GO DO RIGHT KIND OF ENTER
HLRZ 0,ZRF+1 ;[312] GET FILE'S EXTENSION
CAIE 0,'UFD' ;[312] IS IT A UFD?
CAIN 0,'SFD' ;[312] OR AN SFD?
JRST COPY2A ;[312] YES, DON'T PUT ANY DATA IN IT
MOVE 0,ZRO ;GET ASCII/00000/AND
MOVEM 0,SQNUM ;RESET SEQUENCE NO.
TLO FLAG,NEWFIL ;SET NEW FILE FLAG
SETZM TOTBRK ;CLEAR PAREN COUNTER
TLNN AUXFLG,CDRFLG+SBIN ;SPECIAL PROCESSING?
TDNE FLAG,[XWD PFLG+WFLG+IFLG+IBFLG,LINE+BMOD+TBMOD+NSMOD+SQMOD+SPMOD]
JRST PSCAN ;YES, DO IT
TRNE AUXFLG,LPTOUT!TTYOUT
TLNE CALFLG,OSPLFL ;IS IT HARD COPY BUT NOT SPOOLED
JRST COPY5 ;NO
JRST PSCAN ;YES, MAKE SURE CONTROL CHARS. ARE HANDLED
COPY5: SOSGE IBF+2 ;INPUT BUFFER EMPTY?
JRST COPY4 ;YES
ILDB CHR,IBF+1 ;GET NEXT WORD AND
PUSHJ P,PUT ;OUTPUT IT
JRST COPY5
COPY4: PUSHJ P,COPY3 ;GET NEXT FULL SOURCE BLOCK
PUSHJ P,OUTP ;OUTPUT PREV. BLOCK-DONT ALTER DATA
AOS OBF+2 ;MAKE PUT HAPPY BECAUSE OF
JRST COPY5 ;OUTPUT HERE.
COPY2A: CLOSE IN,
IFN LEVELC,< ;[207]
SKIPL LEVEL ;[207] SEE IF LEVEL C
CLOSE OUT, ;[207] ONLY DO CLOSE IF LEVEL C
>;[207] END IFN LEVELC
IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-STANDARD PROTECTION?
TRNN AUXFLG,DSKOUT ;RENAME ALL OUTPUT FILES IF
JRST COPY2B ;NON-STANDARD PROTECTION
LDB 0,PRPTL ;GET NEW PROTECTION
IFN LEVELC,< ;[322]
SKIPE LEVEL ;IF LEVEL D
>;[322] END IFN LEVELC
JUMPN 0,COPY2B ;AND NOT ZERO, DONE ALREADY
DPB 0,PRPTD
IFE LEVELC,< ;[207]
SETZM DTONEX+.RBPPN ;[273][207] CLEAR PPN FOR LEVEL D
SETZM DTONEX+.RBALC ;[336] JUST IN CASE
>;[207] END IFE LEVELC
RENAME OUT,DTONEX ;[273] RENAME OUTPUT FILE
JRST DERR6
IFE LEVELC,< ;[207]
SKIPA ;[207] SKIP CLOSE
>;[207] END IFE LEVELC
>;[207] END IFN FTDSK
COPY2B: ;[207]
IFE LEVELC,< ;[207]
CLOSE OUT, ;[207] CLOSE OUT IF NO RENAME
>;[207] END IFE LEVELC
PUSHJ P,OUTP1 ;[207]
JRST COPY1 ;GO GET NEXT FILE
IFE FTDSK,<SYN COPY1,CAL5>
IFN FTDSK,<
CAL5: PUSHJ P,DERR5R ;PRINT DSK ERROR TYPE
JRST COPY1 ;COUNT READ FAILURES>
;NO MORE FILES TO COPY
CAL6:
IFN FTDSK,< ;[367]
TRNE AUXFLG,DSKIN ;[367] DISK INPUT?
TRNE AUXFLG,DSKOUT+DTAOUT ;[367] AND NON-DIR OUTPUT?
SKIPA ;[367] NO
JRST DTCOP1 ;[367] YES - GO DO MORE STRUCTURES
>
TLZ AUXFLG,NSPROT
JRST MAIN1
COPY3B: SKIPE IBF+2 ;EMPTY BLOCK?
POPJ P, ;NO, RETURN
COPY3: PUSHJ P,INP ;READ NEXT BLOCK
TRZE AUXFLG,READ1
PUSHJ P,TTYZ ;END OF FILE FROM TTY?
TXNN IOS,IO.EOF ;END OF FILE? IOS HAS STATUS BITS
JRST COPY3B ;NO.
POP P,0 ;CLEAR ITEM FROM STACK
HRRZS 0 ;ADDRESS ONLY
TRNN AUXFLG,DSKIN!DTAIN ;ALLOW NULL FILE FOR THESE ONLY
CAIE 0,COPY6B ;DID WE COME FROM COPY6B-1?
JRST COPY2A ;NO, CLOSE OUT FILES
TRZ CALFLG,ALLCLF ;YES, END OF INFO ON NON-DIR DEVICE
JRST COPY1
;CREATE DESTINATION FILE NAME. RANGE IS ...001 TO ...999
MTPTCR: TRNN FL,RXFLG ;[304] OUTPUT NAME SEEN?
JRST MPC1 ;[304] NO, GENERATE XXXnnn
HLRZ T1,MATCH ;[304] YES, GET LEFT PART OF OUTPUT NAME
TRNN T1,7700 ;[304] ONE CHARACTER?
TLOA T1,7700 ;[304] YES, CHANGE MASK TO USE xXX
TRNN T1,77 ;[304] TWO CHARACTERS?
TLO T1,77 ;[304] YES, CHANGE MASK TO USE xxX
IOR T1,OQMASK ;[304] OR IN ANY WILD CHARS FROM MASK - X'S IN RESULT
HLLOM T1,OQMASK ;[304] UPDATE MASK
MPC1: ;[304]
AOS T1,NO.
CAILE T1,^D999
JRST MPC2
PUSHJ P,MTPTC1
MOVE 0,[DTONSV,,ZRF] ;FILNAM=DTON IS ONLY WAY TO IDENTIFY
BLT 0,ZRF+1 ;INPUT FILE
POPJ P,
MPC2: ERRPNT <Z?Terminate /X, max. of 999 files processed!Z>
MTPTC1: MOVEI DOUT,^D1000(T1)
MOVE T1,[POINT 6,DTONSV,17]
JSP T2,OUTDC1
AOJA T2,CPOPJ
SUBI CHR,40
IDPB CHR,T1
POPJ P,
;ROUTINE TO RESTORE BYTE POINTERS TO INITED MODE
;FOR INPUT AND OUTPUT DEVICES
SR2: MOVE 0,SVIBF
HLLM 0,IBF+1
MOVE 0,SVOBF
HLLM 0,OBF+1
POPJ P,
;ROUTINE TO SEE IF ^Z FIRST CHAR ON TTY
TTYZ: TRNN AUXFLG,TTYIN ;SEE IF FIRST CHAR. IS ^Z
POPJ P, ;NOT TTY INPUT
HRRZ T1,IBF+1 ;ON TTY
HLRZ 0,1(T1) ;GET FIRST CHARACTER
TRZ 0,3777 ;CLEAR ANY OTHER CHAR.
CAIN 0,(<CZ>B6) ;IS IT ^Z?
TXOA IOS,IO.EOF ;YES,SET END OF FILE
CAIE 0,(<XON>B6) ;IS IT XON "^Q"
POPJ P, ;NO
MOVSI 0,(<DEL>B6) ;A RUBOUT
IORM 1(T1) ;CLEAR "^Q" FROM BUFFER
POPJ P, ;AND RETURN
;DTA TO DTA MAINTAIN BITS 18-23 OF E+2 IF SET
;DSK TO DSK NO TRANSLATION (E+2)
;DSK TO DTA TRANSLATE E+3 (LHS) INTO E+2 (18-23)
;DTA TO DSK NO TRANSLATION (E+2)
;THIS ROUTINE ENSURES "SAVE" FILES MAINTAIN
;CORRECT DATA FOR LOADING. FOR DSK INPUT
;A "SAVE" FILE IS ONE WITH THE EXTENSION
;"SAV". E+3 = (-[(200XN)+NO. WDS IN LAST BLOCK]
;IN LHS TRANSLATE TO NO. 1K BLOCKS NEEDED
;TO LOAD FILE - BEFORE IT IS EXPANDED IN CORE.
OKBLKS: TRNN CALFLG,RXFLG ;(RX)?
JRST OKBLK0 ;NO
MOVE 0,MATCH ;GET FILE NAME
HLRZ T1,MATCH+1 ;AND EXT.
MOVEM 0,DTON ;REPLACE NAME
HRLM T1,DTON+1
SKIPN T1,OQMASK ;WILD CARD OUTPUT
JRST .+4 ;NO
ANDCAM T1,DTON ;CLEAR OUT MASK CHARS
AND T1,ZRF ;GET SUBSTITUTE ONES
ORM T1,DTON ;PUT THEM IN
HLLZ T1,OQMASK+1 ;TRY EXT
JUMPE T1,.+4 ;NO
ANDCAM T1,DTON+1 ;SAME AS ABOVE
AND T1,ZRF+1
ORM T1,DTON+1
OKBLK0: MOVE 0,DTON ;GET OUTPUT FILE NAME
HLRZ T1,DTON+1 ;AND EXT
CAIE T1,'SAV' ;SAV FILE?
CAIN T1,'SVE' ;OR SVE (SPMON) FILE?
TRNN AUXFLG,DTAOUT ;AND OUTPUT TO DTA?
SKIP 1 ;NO
UGETF OUT,0 ;SET TO FIRST FREE BLOCK
IFN FTDSK,<TRC AUXFLG,DSKIN+DSKOUT ;DSK I/O
TRCN AUXFLG,DSKIN+DSKOUT
POPJ P, ;YES, EXIT
TRC AUXFLG,DTAIN+DTAOUT ;NO
TRCE AUXFLG,DTAIN+DTAOUT ;DTA I/O
JRST OKBLK1 ;NO>
LDB 0,OKB ;DTA I/O - 1K BLKS
DPB 0,OKBD ;DEPOSIT IN DTON
POPJ P,
IFN FTDSK,<
OKBLK1: TRC AUXFLG,DTAIN+DSKOUT ;DTA-TO-DSK
TRCN AUXFLG,DTAIN+DSKOUT
POPJ P, ;YES
TRC AUXFLG,DSKIN+DTAOUT ;NO,DSK-TO-DTA?
TRCE AUXFLG,DSKIN+DTAOUT ;NO
POPJ P,
HLRZ 0,ZRF+1 ;YES DSK-TO-DTA
CAIE 0,'SAV' ;GET LOOKED UP EXT,(INPUT).
CAIN 0,'SVE'
SKIP 1
POPJ P,
HLRO T1,ZRF+3 ;EXTENSION=SAV
MOVNS T1 ;WORD COUNT
IDIVI T1,2000 ;DIVIDE BY 1K CORE(OCTAL LOCS.)
JUMPN T2,.+2
SOJ T1, ;N-1
DPB T1,OKBD
POPJ P,>
SUBTTL /X/D COPY EXCEPT ROUTINE
IFN FTDSK,<
;ARE WE DOING (XD) FROM DSK? IF NOT, EXIT.
;SEE IF CURRENT FILE SELECTED IN ZRF IS IN THE
;LIST OF FILES NOT TO BE COPIED. (POPJ IF IT IS)
XDDSK: TRC FLAG,XFLG+DFLG ;COMPLEMENT
TRCN FLAG,XFLG+DFLG ;RESET AND TEST
TRNN AUXFLG,DSKIN ;/X AND /D WERE SET
JRST CPOPJ1 ;NOT DSKIN SO COPY FILE
HRROI T1,-12 ;SET TO LOOP NAMTAB
XDDSK2: MOVE T2,ZRF ;GET FILE NAME
SKIPN T3,NAMTAB+12(T1) ;END OF TABLE ENTRIES?
JRST CPOPJ1 ;YES, EXIT
IOR T2,NAMASK+12(T1) ;[124] MASK OUT WILD CHARS
CAME T2,T3 ;FN IS * OR MATCH?
JRST XDDSK1 ;NO MATCH
HLLZ T2,ZRF+1 ;GET EXT
SKIPN T3,NAMTAB+24(T1) ;NO EXT MATCH WANTED
POPJ P, ;EXIT THEN
IOR T2,NAMASK+24(T1) ;[124] MASK OUT WILD CHARS
CAMN T2,T3 ;EXT IS * OR MATCH?
POPJ P, ;FN EX MATCH, NO COPY
XDDSK1: AOJL T1,XDDSK2 ;TRY ANOTHER FOR MATCH
JRST CPOPJ1 ;SEARCHED TABLE, NO MATCH>
SUBTTL SET UP THE MULTIPLE NAME MATCHING TABLE
;ROUTINE TO DELETE OR RENAME FILES ON DTA OR DSK OR SET UP NAMTAB
;FOR (DX) (DISK ONLY)
DTDELE: IFN TEMP,<
TRNE CALFLG,TMPO ;TMPCOR
JRST TMPDEL ;YES>
TRNE FLAG,XFLG ;/X
JRST DELE1 ;YES
TRNN FLAG,DFLG ;/D NEED EXPLICIT DEVICE
SKIP 2
TRNN CALFLG,DVSWTH ;-1 IF DEVICE SEEN
JRST ERR8 ;NO, ERROR
TLZE FL,SDEVSN ;[152] SEE IF WE SAW A SOURCE DEVICE
JRST ERR11 ;[152] YES, DON'T ALLOW THAT
MOVE 0,ODEV ;OUTPUT DEVICE
DELE2: ;[211] RETURN IF =SYS:
MOVEM 0,DEVICE ;NO,SET DEVICE FOR INPUT
MOVEM 0,DEVA
DELE1: PUSHJ P,CHECK1 ;RESET INPUT DEVICE DESCRP
MOVE 0,[DTON,,NAMTAB] ;FOR /R GET NEW NAME
;SET TO BLT OUTPUT DIRECT ENTRY
BLT 0,NAMTAB+3 ;TO NAMTAB
TRNN AUXFLG,DTAIN+DSKIN
JRST ERR5 ;NOT DTA OR DSK
PUSHJ P,FNSET ;SET UP CALFLG CORRECTLY
TRNE FLAG,XFLG ;/X?
JRST DTD1 ;YES, (DX). RX ILLEGAL
IFN FTDSK,<TRNE AUXFLG,DSKOUT ;NO, HAS TO BE /D OR /R
JRST DSKDR0 ;ON DSK>
JRST DTADR ;OR DTA
DTD1:
IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT?
JRST DTD1A ;YES>
PUSHJ P,DTCHECK ;NO, HAS TO BE DTA, GET DIR
JRST DELE3 ;DELETE, FILES FROM DIR
IFN FTDSK,<
DTD1A: SETZM NAMTAB ;COLLECT NAMES FOR DX, DSK SOURCE
MOVE T1,[XWD NAMTAB,NAMTAB+1]
HLRZM T1,LOCNAM ;[124] SAVE TABLE LOCATION
BLT T1,NAMTAB+23 ;[124] FIRST CLEAR TABLE
SETZM NAMASK ;[124]
MOVE T1,[NAMASK,,NAMASK+1] ;[124]
HLRZM T1,LOCMSK ;[124]
BLT T1,NAMASK+23 ;[124] AND MASK TABLE
DTD4: MOVE 0,FILNAM
JUMPE 0,DTD4A ;FN=0 ILLEGAL
MOVE T1,LOCNAM
MOVEM 0,(T1) ;STORE FILENAME FROM CS
MOVE 0,FILEX ;STORE FILE EXT
MOVEM 0,12(T1) ;TABLE FULL?
MOVE 0,QMASK ;[124]
MOVE T2,LOCMSK ;[124] CORRESPONDING MASK
MOVEM 0,(T2) ;[124] FOR FILENAME
HLLZ 0,QMASK+1 ;[124]
MOVEM 0,12(T2) ;[124] FOR EXTENSION
MOVEI T2,NAMTAB+11
CAMN T2,T1
SOS ESWTCH ;YES
SKIPE ESWTCH ;NO, END OF CS SCAN?
JRST DTD2 ;END OF NAME PROCESSING
AOS LOCMSK ;[124] POINT TO NEXT MASK ENTRY
AOSA T1,LOCNAM ;SET TO STORE IN NEXT SLOT NAMTAB
DTD4A: PUSHJ P,ERR3A
DTD4B: PUSHJ P,DESCRP ;NO, GET NEXT FILENAME FROM CS
TRNE CALFLG,NEWPP!NEWDEV
JRST ERR5A ;ERROR, NEW DEV OR# PP
JRST DTD4
;END OF CS OR NAMTAB FULL
DTD2: PUSHJ P,ININIT ;INIT INPUT FILE
MOVEI T1,1 ;SET TO RETURN DTCOPY+1
JRST DTD5>
SUBTTL DELETE OR RENAME FOR DECTAPE
;ROUTINE TO DELETE OR RENAME FILES ON DTA
DTADR: PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY
MOVE T1,IBF ;CURRENT INPUT BUFFER
USETO OUT,144 ;THIS SHOULD GIVE ERROR MSG
OUTPUT OUT,(T1) ;IF DTA WRITE LOCKED
PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY
PUSHJ P,INFO ;WRITE "FILES DELETED/RENAME
;*********************************************************************
;LOOP TO DELETE/RENAME. FOR (DX) DELETE FILES FROM DTA DIR
;THEN USE REVISED DIRECTORY TO COPY ALL REMAINING FILES
DELE3: PUSHJ P,LOOK ;GET FILE TO DELETE OR RENAME FROM CS
JRST DELE5 ;NO MORE FILES
TRNN FLAG,XFLG ;/X?
PUSHJ P,INFO3 ;PRINT FILENAME-EXT
MOVE T1,DIRST ;GOT A MATCH - PROCESS IT
TRNE FLAG,RFLG ;AND IT IS AT (T5) IN (DTA) DIR
JRST DTRNAM ;RENAME
SETZM (T1) ;DELETE FILENAME IN CORE DIRECT
SETZM 26(T1) ;DELETE EXT
TRNE FLAG,XFLG ;(DX)?
JRST DELE3 ;YES, DON'T ACTUALLY DELETE FILE FROM TAPE
LOOKUP OUT,ZRF ;DO LOOKUP
JRST DELE3 ;SHOULD NEVER FAIL
SETZM DTON ;SET NAME TO ZERO
DELE4: RENAME OUT,DTON ;GET RID OF IT
JRST ERR9 ;SHOULD NEVER HAPPEN EITHER
JRST DELE3 ;GET NEXT FILE NAME
DELE5: MOVE T1,IBF ;LOC OF INPUT BUFFER
TRNE FLAG,XFLG ;DX SWITCH?
JRST DTD6 ;YES, NOW MUST COPY REMAINING FILES
RELEAS CON, ;OUTPUT DELETE OR RENAME INFO TO TTY
JRST MAINB
;ROUTINE TO RENAME FILE ON DECTAPE
DTRNAM: PUSHJ P,RENAME ;SET UP FILE NAME
SETZM DTON+3 ;
SKIPE DTON ;JUST INCASE 0 FILE NAME
LOOKUP OUT,ZRF ;LOOK UP FILENAME-EXT ON OUTPUT DEV
JRST DELE3 ;SHOULD NEVER FAIL
JRST DELE4 ;RENAME TO NEW NAME
;END OF LOOP
;*********************************************************************
;DX SWITCH ON, COPY ALL BUT SPECIFIED FILES. I.E. THOSE NOT DELETED
DTD6: MOVEI T1,0 ;SET TO RETURN TO DTCOPY
DTD5: SETOB 0,FILNAM ;FORCE COPY-ALL
HLLZM 0,FILEX ;BY MAKING FILE-EXT=*.*
SETOM QMASK ;AND MASKS
HLLZM 0,QMASK+1
SETOM OQMASK ;SAME FOR OUTPUT SIDE
HLLZM 0,OQMASK+1
TLO FL,MFLG ;SET FLAG ALSO
PUSHJ P,FNSET ;FIND DETAILS OF FILE-EXT
TRNE AUXFLG,DTAIN ;DTA INPUT
PUSHJ P,DTCH1 ;INIT DIRST,DIRST1
IFN RIMSW, <
TLNE FLAG,RIMFLG ;NO
JRST RIMTB
>
JRST DTCOPY(T1)
SUBTTL SET UP BLOCK FOR RENAME
;SET UP OUTPUT DIRECTORY ENTRY FOR RENAME
;ONLY ONE FILE NAME ALLOWED, BUT MAY BE *.EXT OR FN.*
;ALSO MUST HANDLE WILD CARD MASK
RENAME: SKIPL ESWTCH ;SKIP IF CR,LF SEEN IN C.S.
JRST ERR6A ;ONLY 1 SOURCE FILE DESCRIPTOR ALLOWED
SKIPN T2,NAMTAB ;AN OUTPUT NAME SPECIFIED?
JRST RENAM0 ;NO, USE INPUT
MOVEM T2,DTON ;STORE IT
MOVE 0,OQMASK ;WILD CHARS.
JUMPE 0,.+4 ;NO
ANDCAM 0,DTON ;YES, CLEAR FROM OUTPUT NAME
AND 0,ZRF ;PICKUP FROM INPUT NAME
ORM 0,DTON ;PUT IN OUTPUT
HLLZ 0,NAMTAB+1 ;USER SUPPLIED EXT
MOVEM 0,DTON+1
HLLZ 0,OQMASK+1 ;SAME FOR EXT
JUMPE 0,.+4 ;NO CHARS.
ANDCAM 0,DTON+1
AND 0,ZRF+1
ORM 0,DTON+1
SETZM DTON+2 ;LET MONITOR SUPPLY
POPJ P,
RENAM0: MOVE 0,[XWD ZRF,DTON];NO NAME SET SO USE LOOKUP NAME
BLT 0,DTON+2 ;AND EXT SO FILE NOT DELETED
POPJ P,
SUBTTL GET INPUT FILE SPEC AND MATCH IT TO DIRECTORY
;THIS ROUTINE GETS NEXT FILENAME.EXT FROM CS
;THEN SEES IF ONE IN DIRECTORY MATCHES
;IF IT DOES - EXIT IS CPOPJ1
;NO-MORE-FN.EX-TO-HANDLE-EXIT IS POPJ
;PREPARE ZRF FOR A "LOOKUP" ON THE NEXT REQUESTED FILE.
LOOK: TRNE CALFLG,NSWTCH ;NULL NAME?
TLNN FLAG,TID ;[125] AND TAPE ID SEEN?
JRST LOOK0 ;NO
SETZM GENERI ;YES, SAVES TIME
TRO AUXFLG,REDFLG ;FAKE SO COMMAND WILL BE ERROR FREE
TRO CALFLG,ASTFLG ;SAME AGAIN
POPJ P, ;RETURN TO WRITE ID
LOOK0: TRNE CALFLG,FNEX ;DOES FILNAM, FILEX CONTAIN
JRST LOOK6 ;A FILE TO THINK ABOUT? YES
TRZ FL,ASTFLG ;[173] CLEAR THAT WE'VE SEEN ONE
LOOK01: PUSHJ P,LOOKA ;GET ONE (NOTE: DEVICE MAY ALTER)
POPJ P, ;NONE, END OF CS
;RETURN SKIP FROM LOOKA
LOOK6: TRNN AUXFLG,NULIN ;[344] GOT ENOUGH INFO IF IT'S NUL
;**;[506] Change at LOOK6+1 RLUSK 23-Feb-81
JRST L6..A ;[344] [506] NOT NUL:
TRZ FL,FNEX ;[344] USED UP THIS FILE SPEC
TRNN FLAG,XFLG ;[506] "/X"? -- IS OK
JRST CPOPJ1 ;[344] AND IT IS NUL:
L6..A: MOVE T2,FILEX ;[506] GET FILE EXT INTO T2
SKIPN T1,FILNAM ;FILNAME AND EXT=0?
JUMPE T2,LOOK7C ;FN.EX=0, ONE FILE COPY
TLNE CALFLG,MFLG ;WILD CHAR. MASKING?
JRST LOOK1 ;YES, ALLOW FOR MANY FILES
TRNE AUXFLG,DTAIN+DSKIN ;DONT REQUIRE FILENAME
JUMPE T1,LOOK6C ;HERE FOR 0.EX,FN.EX OR FN.0,0.EX ILLEGAL
LOOK7B: TRZ CALFLG,FNEX ;IF HERE, ONLY ONE FILE WAS ENTAILED IN REQUEST.
TRNN AUXFLG,DTAIN+DSKIN
JRST LOOK4 ;GOT A FILE TO HANDLE
MOVE T1,[FILNAM,,ZRF] ;SET UP NAME AND EXT
BLT T1,ZRF+1 ;IN LOOKUP BLOCK
PUSHJ P,DSKPPS ;[365] GET A DIRECTORY
MOVEM T1,ZRFEX+.RBPPN ;[273] ALSO
;**;[524] Add 1 line at LOOK7B+6 MRB 8-Apr-82
IFN FTDSK,<TRNE AUXFLG,DSKIN> ;[524] SKIP IF NOT DSK
JRST CPOPJ1 ;OK RETURN
LOOK8: PUSHJ P,PICUP ;GET A FILE (ANY) FROM DIRECTORY
JRST LOOK2 ;[133 COR] WE GOT A FILE, DOES IT MATCH?
TRZ CALFLG,FNEX ;[133 COR] SEE IF A PARTIC. FILE WAS REQUESTED?
LOOK6D:
IFN FTDSK,<SKIPE GENERI ;SEARCHING F/S ?
POPJ P, ;YES, WAIT TIL END OF F/S SEARCH LIST>
TRZN CALFLG,ASTFLG ;DID WE FIND AT LEAST ONE
PUSHJ P,ERR3A ;NO, PRINT MSG.
JRST LOOK ;GET NEXT FILE FROM CS
;CHECK IF FILE.EXT IN DIRECTORY MATCHES FILE TO /D,/R
;NOTE WE MAY HAVE *.EXT,FIL.*, OR *.*
MLOOK2: XOR T1,FILNAM ;XOR TOGETHER
ANDCM T1,QMASK ;MASK
JUMPN T1,LOOK8 ;NO MATCH
MOVE T1,ZRF ;GET GOOD FILENAME
MOVEM T1,FILNAM ;WHERE IT BELONGS
JRST LOOK3
MLOOK3: XOR T1,FILEX
ANDCM T1,QMASK+1
JUMPN T1,LOOK8
MOVE T1,ZRF+1
MOVEM T1,FILEX
JRST LOOK5
LOOK2: TRNN CALFLG,MATFN ;SHOULD FILENAMES MATCH
JRST LOOK3 ;NO
MOVE T1,ZRF ;YES
TLNE CALFLG,MFLG ;MASKING NEEDED?
JRST MLOOK2 ;YES
CAME T1,FILNAM
JRST LOOK8 ;NO MATCH
LOOK3: TRNN CALFLG,MATEX ;SHOULD EXTENSIONS MATCH
JRST LOOK5 ;NO
MOVE T1,ZRF+1 ;YES
TLNE CALFLG,MFLG ;MASKING?
JRST MLOOK3 ;YES
CAME T1,FILEX
JRST LOOK8 ;NO MATCH
LOOK5:
LOOK4: TRO AUXFLG,READ1 ;READY FOR FIRST READ
TRO CALFLG,ASTFLG ;FOUND A FILE *.EXT, F.*,*.*
JRST CPOPJ1 ;MATCH OR NO CARES
LOOK7C: TRNE AUXFLG,DSKIN+DTAIN
JRST LOOK6C ;0.0 ON DIR DEVICE
SETZM ZRF
SETZM ZRF+1
JRST LOOK7B ;0.0 ON NON-DIR. DEV.
LOOK6C: TRNE FLAG,XFLG+DFLG+RFLG ;[217] ONLY PRINT MESSAGE IF /X/R/D
PUSHJ P,ERR3A ;[211] NON /X WILL PRINT LATER
POPJ P, ;[211] GIVE ERROR RETURN IMMEDIATELY
LOOK1: TRNE AUXFLG,DTAIN+DSKIN
JRST LOOK8
SETZM ZRF
SETZM ZRF+1
JRST LOOK4
SUBTTL GET A FILE NAME FROM DTA OR DSK DIRECTORY
;ROUTINE TO GET NEXT FILE NAME FROM DIRECTORY
;FILNAM, FILEX CONTAIN THE FILE NAME. EXT TO BE
;MATCHED WITH DIR. NAMES. PUT SUGGESTED FILE
;NAME EXT IN ZRF, ZRF+1 AND #P-P IN ZRF+3
;NOTE THAT WE HAVE TO HANDLE *.EXT,FILE.*
PICUP:
IFN FTDSK,<TRNN AUXFLG,DSKIN ;DSK INPUT?
JRST PICUP2 ;[130] NO - DTA
TLON FLAG,DSKDBC ;[130COR]HAS DSKIDR BEEN CALLED?
PUSHJ P,DSKDIR ;[130] NO - LOOKUP UFD
SOSLE UFDIN+2 ;[130]
JRST .+3
PICUP1: PUSHJ P,UIN ;INPUT USER'S FILE DIRECTORY
JRST CPOPJ1 ;EOF ON DSK
ILDB 0,UFDIN+1 ;PICK UP FILENAME
JUMPE 0,PICUP1 ;IGNORE NULL
MOVEM 0,ZRF ;SET FILE NAME
MOVE 0,FNPPN
MOVEM 0,ZRFEX+.RBPPN ;[273] SET DSK #P-P
SOS UFDIN+2 ;COUNT DOWN FOR NEXT TIME
ILDB 0,UFDIN+1 ;SET FILE EX
HLLZM 0,ZRF+1
POPJ P,>
PICUP2: MOVE T3,DIRST1 ;SETUP TO CHECK ALL FILENAME SLOTS
ADDI T3,26 ;IN DIRECTORY (22 FILE NAMES)
MOVE T5,DIRST ;LOC OF FIRST/NEXT FILE
PICUP4: ADDI T5,1 ;
CAMLE T5,T3 ;END OF FILE SLOTS?
JRST CPOPJ1 ;END OF FILE NAMES
MOVEM T5,DIRST ;NEXT SLOT TO LOOK AT
MOVE 0,(T5) ;GOT FILE NAME FROM DIRECT
JUMPE 0,PICUP4 ;IGNORE IF 0
MOVEM 0,ZRF
MOVE 0,26(T5) ;GET EXT ETC
HLLZM 0,ZRF+1
POPJ P,
;READ DTA DIR. AND PREPARE T5 TO PICK UP FIRST ENTRY.
DTADIR: PUSHJ P,DTCH2 ;READ DTA DIR INTO INPUT BUF
DTADI1: MOVEI T3,DBUF ;SET BLT FROM INBUF TO DBUF
HRL T3,T5 ;FIRST DATA WORD OF DIRECTORY IN T5
BLT T3,DBUF+176 ;MOVE FROM INBUF TO DBUF
MOVEI T5,DBUF+123-1 ;LOC OF FIRST FILE NAME
MOVEM T5,DIRST ;T5 POINTS TO FILNAME JUST HANDLED
MOVEM T5,DIRST1 ;TO RESTORE DIRST
POPJ P, ;(IE NONE BUT NEXT WILL BE FIRST)
SUBTTL ROUTINE TO OUTPUT FILENAMES THAT WERE DELETED OR RENAMED
;PRINT "FILES DELETED:" OR "FILES RENAMED:"
;ALSO USED TO PRINT "NO FILE NAMED XXX.XXX"
INFO: MOVE T1,TFO ;SETUP TTY FOR OUTPUT
MOVE T2,TFI ;SAVE BUFFER LOCS
PUSHJ P,INICON ;INIT TTY
HRROM T2,TFI ;SET BUFFER LOCS
HRROM T1,TFO
OUTPUT CON,
TLZE AUXFLG,INFOFL ;ERROR PRINT ONLY?
JRST ERR3AA ;YES
TRNN FLAG,DFLG ;DELETE?
JRST INFO1 ;NO, MUST BE RENAME
IFN CCLSW,<SKIPE COMFLG
SKIPG RENSN
SKIP 1
POPJ P,
HRRZM T1,RENSN ;SET POSITIVE>
ERRPN2 </Files deleted:/>
IFN FTDSK,<SETZM BLKSUM ;SET TOTAL TO ZERO>
JRST INFO2
INFO1: IFN CCLSW,<
SKIPE COMFLG ;IF NOT CCL
SKIPL RENSN ;OR FIRST TIME
SKIP 1
POPJ P, ;ONLY PRINT ONCE IF CCL
SETOM RENSN ;DON'T PRINT IT TWICE>
ERRPN2 </Files renamed:/> ;RENAME (/R)
TCRLF:
INFO2: MOVEI CHR,CR ;OUTPUT CR/LF
PUSHJ P,PUTCON ;ON TTY
MOVEI CHR,LF
PUSHJ P,PUTCON
OUTPUT CON,
POPJ P,
;**********************************************************************
;PRINT FILENAME.EXT OR [P,P].UFD OF FILE DELETED
INFO3: TLZN AUXFLG,AMBIGU ;[366] UNAMBIGUOUS SPEC?
SKIPN DSCARG+.DCSNM ;[372] ANY F/S IN DSKCHR BLOCK?
JRST INFO3B ;[366] NO
PUSHJ P,P6BIT ;[366] PRINT THE DEVICE NAME
DSCARG+.DCSNM ;[372] FROM THE DSKCHR BLOCK
SETZM DSCARG+.DCSNM ;[372] CLEAR AFTER PRINT
MOVEI CHR,":" ;[372] PRINT COLON
PUSHJ P,PUTCON ;[372]
INFO3B: MOVEI T3,ZRF ;LOCATION OF FILENAME
PUSHJ P,FN.EX
IFN FTDSK,<TRNE FLAG,DFLG ;SKIP IF /D
TRNN AUXFLG,DSKIN ;AND INPUT DEVICE IS DSK>
JRST INFO2 ;NO
IFN FTDSK,<MOVN DOUT,ZRFEX+.RBSIZ ;[273] GET BLOCK SIZE
PUSHJ P,BLKSD ;STORE BLOCK SIZE
JRST INFO2 ;AND CR-LF>
SUBTTL /X OR /D. FIND OUT DETAILS OF FILE NAME AND
;EXTENSION (0 FN.EX=*.*) AND ANY CHANGE IN
;SOURCE DEV. SET BITS IN CALFLG.
FNSET: TRZ CALFLG,ALLCLF ;CLEAR FLAGS ON ENTRY
SKIPN FILNAM
TROA CALFLG,FNEX ;FILENAME = * OR 0
TRO CALFLG,MATFN ;FILENAME MUST BE MATCHED
SKIPN FILEX ;EXT=0?
TRNN AUXFLG, MTAIN+CDRIN+PPTIN+TTYIN ;YES
TROA CALFLG,MATEX ;FILE EXTENSION MUST BE MATCHED
TRO CALFLG,FNEX ;YES
IFN FTDSK,<TRNN AUXFLG,DSKIN
JRST FNSET1
MOVE T2,[XWD JOBPTH,COMPTH] ;[211] FOR 1ST TIME WITH NO PPN USE DEFAULT
SKIPN PP ;[323] SEE A PPN TYPED?
SKIPE COMPTH ;[211] AND 1ST TIME THROUGH
SKIPA ;[211] NO
JRST FNSET6 ;[211] YES, SET FOR DEFAULT PATH
SKIPN COMPTH ;[211] SEE IF NOT HERE BEFORE & HAVE PPN
JRST FNSET5 ;[211] YES, SET UP WITH FIRST PPN
MOVEI T2,.PTPPN ;[211] START AT PPN FOR COMPARES
FNSET3: MOVE 0,PTHADD(T2) ;[211] GET A PPN OR SFD NAME
CAME 0,COMPTH(T2) ;[211] SEE IF SAME AS PREVIOUS
JRST FNSET4 ;[211] NO, SET NEW PPN FLAG
JUMPE 0,FNSET1 ;[211] YES, SEE IF END OF LIST
AOJA T2,FNSET3 ;[211] NO, MORE TO COMPARE
FNSET4: TRO FL,NEWPP ;[211] SAY WE SAW NEW ONE FOR /XD /R
FNSET5: MOVE T2,[XWD PTHADD,COMPTH] ;[211] COPY SPECIFIED INTO
FNSET6: BLT T2,COMPTH+PTHLEN+3 ;[211] COMPARE AREA FOR NEXT TIME
FNSET2: SETOM COMPTH ;[211] MAKE SURE WE KNOW WE HAVE ONE
>;[211] END IFN FTDSK
FNSET1: MOVE T2,DEVICE
CAME T2,DEVA
TRO CALFLG,NEWDEV ;CHANGE IN SOURCE DEV.
MOVEM T2,DEVA ;SET DEVA=DEVICE
TRNN FLAG,XFLG!RFLG!DFLG ;NEED MULTIPLE FILES FOR THESE
TLNE CALFLG,MFLG ;WILD CHAR.?
TRO CALFLG,FNEX ;YES, SET FOR MULTIPLE FILES
POPJ P,
;POPJ EXIT IF END OF COMMAND STRING, OTHERWISE RESET
;POINTER TO START OF DIRECTORY, READING IN NEW DIR.
;IF DEV OR #P-P CHANGED (EXIT CPOPJ1)
;IF DIR. IS ON DSK RESET BY REINIT.
LOOKA: SKIPE T4,ESWTCH ;MORE C.S.?
POPJ P, ;NO
PUSHJ P,DESCRP ;YES, GET NEXT FN.EX FROM CS
PUSHJ P,INLOOK ;CHECK FOR MTA REQUESTS, MODE
PUSHJ P,M4 ;CHECK FOR /I,/B,/H
HRRZM T4,ININI1 ;SET MODE
RELEAS DIR,
TRNN FLAG,DFLG ;FOR DELETE, ONE SOURCE FILE
JRST LOOKB ;...
TRNE CALFLG,NEWDEV ;ONLY IS PERMITTED
JRST ERR5A
LOOKB: TRNN CALFLG,NEWDEV!NEWPP ;PREPARE TO LOOK FOR NEW FILE
JRST LOOKC ;NAME AT HEAD OF DIRECTORY
PUSHJ P,ININIT ;INIT INPUT FILE
TRNN AUXFLG,NULIN ;[344] IF NUL:, NO DIRECTORIES NEEDED.
TRNN AUXFLG,DTAIN+DSKIN
JRST CPOPJ1
IFN FTDSK,<TRNN AUXFLG,DTAIN ;DTA INPUT?
JRST LOOKD ;NO, MUST BE DSK>
PUSHJ P,DTADIR ;YES, READ IN DTA DIRECT
LOOKC:
IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT?
JRST LOOKD ;YES>
MOVE T5,DIRST1 ;NO, RESET DIRECTORY START
MOVEM T5,DIRST
JRST CPOPJ1
IFN FTDSK,<
LOOKD: TRNE FLAG,DFLG!RFLG ;[314] IF DELETE OR RENAME
TLNE FL,MFLG ;[314] AND NOT WILD, NO DSKDIR
PUSHJ P,DSKDIR ;GET USER'S FILE DIRECTORY
SETZM UFDIN+2 ;DSK DIR BUF EMPTY
JRST CPOPJ1>
SUBTTL ROUTINE TO LIST DTA OR DSK DIRECTORIES
DEFINE P6 (A,B)<
MOVEI T2,A ;;NUMBER OF CHARACTERS
MOVE 0,[POINT 6,B] ;;BYTE POINTER TO SIXBIT STRING
PUSHJ P,PDIR2 ;;OUTPUT THE STRING
>
DTPDIR: TROE AUXFLG,ONEOUT ;ONLY DO ENTRY ONCE
JRST DTPDN ;SO MULTIPLE LISTINGS DON'T LOSE
ENTER OUT,DTON ;OUTPUT DEV ENTRY
JRST ERR4 ;DIRECTORY FULL
DTPDN: IFN FTDSK,<
TRNE AUXFLG,FFLG ;/F? SHORT FORM?
SKIPE DEVICE ;INPUT DEVICE SPECIFIED?
JRST PDIR1A ;YES
HRRZI 0,'DSK' ;ASSUME DSK IF NO DEVICE GIVEN
HRLZM 0,DEVICE
TROA AUXFLG,DSKIN ;SET DSK INPUT
PDIR1A: TRNE AUXFLG,DSKIN ;DSK INPUT?
JRST DSKLST ;YES, GO AND TRY TO LIST DSK>
IFN TEMP,<
TRNE CALFLG,TMPI ;LIST TMPCOR DIRECTORY?
JRST TMPLST ;YES>
TRNN AUXFLG,DTAIN ;DECTAPE INPUT?
JRST ERR5 ;NOT DSK OR DTA. ERROR
;ROUTINE TO LIST DTA DIRECTORY. /L OR /F SWITCH
DTALST: PUSHJ P,DTCHECK ;CHECK FOR DTA INPUT-MUST BE DECTAPE AND
;GET DIRECTORY
PUSHJ P,CRLF ;PRINT NO. OF FREE BLOCKS LEFT
MOVE T1,IBF ;START OF BUFFER
MOVE DOUT,200(T1) ;GET POSSIBLE TAPE ID
JUMPE DOUT,NOTPID ;NOT IF ZERO
CAMN DOUT,[-1] ;OR -1
JRST NOTPID ;JUST GARBAGE
P6 9,[SIXBIT /TAPE ID: /]
P6 6,DOUT
PUSHJ P,CRLF ;NEW LINE
NOTPID: SETZ DOUT, ;CLEAR NO. FREE BLOCKS
MOVEI T4,1102 ;OCTAL NO. OF BLOCKS ON DECTAPE
MOVSI T1,(POINT 5,0) ;5 BIT BYTES
HRRZ T5,IBF ;CURRENT INPUT BUFFER
ADDI T1,1(T5) ;POINTER TO 1ST DATA WORD IN DIRECT
PDIR8: SOJLE T4,PDIR1 ;ALL THROUGH?
ILDB T3,T1 ;CALCULATE NO. OF FREE BLOCKS
JUMPN T3,PDIR8
;THIS BLOCK FULL
AOJA DOUT,PDIR8 ;COUNT NO. WITH ZERO IN
PDIR1: P6 6,['FREE: ']
PUSHJ P,OUTDC3 ;PRINT RESULT
P6 6,<[' BLKS,']>
PUSHJ P,DTCH1 ;FIX T5, TO POINT AT BEGIN OF DIR
MOVE T4,T5 ;ANOTHER COPY
MOVEI T2,26 ;NUMBER OF POSSIBLE FILES
MOVEI DOUT,26
SKIPE 123(T4) ;SKIP IF NO FILE THERE
SUBI DOUT,1 ;ONE LESS FREE
ADDI T4,1 ;SET FOR NEXT FILE
SOJG T2,.-3 ;LOOP FOR ALL FILES
PUSHJ P,OUTDC3 ;OUTPUT NUMBER FREE
P6 6,[' FILES']
PUSHJ P,CRLF ;CARRIAGE RET, LINEFEED
SUBTTL LOOP TO EXAMINE FILE NAMES DTA DIRECTORY
PDIR4:
SKIPN 123(T5) ;NULL (=0) FILE NAME?
JRST PDIR6 ;YES SO LOOK FOR ANOTHER
MOVEI T2,6 ;TRANSMIT UP TO 6 CHARACTERS
MOVSI 0,440600+T5 ;SET UP SOURCE BYTE POINTER
HRRI 0,123 ;SET TO PICK UP FILE NAME
SETZ T4,
;FOLLOWING CODE TO OUTPUT PROJ, PROG FILENAME
HLRZ CHR,151(T5) ;GET EXT
CAIE CHR,'UFD' ;UFD?
JRST PDIR4A ;NO
HLRZ DOUT,123(T5) ;PROJ NO.
MOVEI T2,PUT
PUSHJ P,OUTOCT
MOVEI CHR,COMMA ;COMMA
PUSHJ P,PUT
HRRZ DOUT,123(T5) ;PROG NO.
PUSHJ P,OUTOCT
JRST PDIR4B
PDIR4A: PUSHJ P,PDIR2 ;OUTPUT 6-BIT DATA AND INCR DIRECTORY PTR
PDIR4B: HLLZ CHR,151(T5) ;PICK UP EXTENSION
MOVSI 0,440600+T5 ;SET BYTE POINTER
HRRI 0,151 ;PICK UP EXTENSION
MOVEI T2,4 ;PRINT UP TO 4 CHRS. (PERIOD+3*EXT)
JUMPN CHR,.+3 ;EXTENSION NULL?
PUSHJ P,PDIR2A+1 ;YES
SKIP 2 ;NO
MOVEI CHR,PERIOD-40 ;NO, SO PRINT A PERIOD
PDIR3: PUSHJ P,PDIR2A ;OUTPT 6 BIT OR INCR T5
MOVEI CHR,SPACE ;OUTPUT 2 SPACES
PUSHJ P,PUT
PUSHJ P,PUT
TRNE AUXFLG,FFLG ;SHORT FORM DIRECT ?
JRST PDIR3A ;YES VJC 4/16/69
SETZ DOUT, ;CALCULATE NBR OF BLOCKS PER FILE
MOVEI T4,1101
MOVSI 0,(POINT 5,0)
HRRZ T2,IBF
ADDI 0,1(T2)
HRRZ T7,T5
SUBI T7,(T2)
ILDB T6,0 ;LOAD CONTENTS OF S.A.T. BLOCK
CAMN T6,T7 ;COMPARE WITH FILE SLOT NBR
ADDI DOUT,1 ;ADD 1 TO COUNT IF EQUAL
SOJG T4,.-3
PUSHJ P,OUTDC3 ;OUTPUT NBR OF BLOCKS PER FILE
MOVEI CHR,TAB
PUSHJ P,PUT
MOVE 0,151(T5) ;GET ENTRY DATE
ANDI 0,7777 ;LEFT BITS ARE IRRELEVENT
MOVEI T2,1 ;[132] SET UP TO TEST FOR HIGH ORDER BITS
TDNE T2,0(T5) ;[132] WHICH ARE LOW ORDER BITS IN DIR.
IORI 0,1B23 ;[132] ON SO SET BIT IN DATE
TDNE T2,^D22(T5) ;[132] REPEAT FOR EACH BIT
IORI 0,1B22 ;[132] ...
TDNE T2,^D44(T5) ;[132] ...
IORI 0,1B21 ;[132] ...
PUSHJ P,DATOUT ;OUTPUT THE DATE
PDIR3A: PUSHJ P,CRLF ;GIVE CR,LF 4/16/69
PDIR6: HRRZ T1,IBF ;PROCESS NEXT ENTRY
SUBM T5,T1
CAIL T1,26 ;FILE "NUMBER" OK?
JRST MAIN1 ;NO, END OF ENTRIES
AOJA T5,PDIR4 ;END OF LOOP, GET NEXT FILENAME
IFN FTDSK,<
CLRF: SOS LIN>
CRLF: MOVEI CHR,CR ;OUTPUT CAR. RET.
PUSHJ P,PUT
MOVEI CHR,LF ;LINE FEED
JRST PUT
PDIR2: ILDB CHR,0 ;ROUTINE TO OUTPUT 6-BIT DATA
TRNN 0,-1 ;PRINT SPACES WHEN PRINTING THE FREE BLOCKS
PDIR2A: JUMPE CHR,PDIR21 ;TERMINATE ON SPACE
ADDI CHR,40 ;CONVERT TO 7 BIT
PUSHJ P,PUT ;OUTPUT CHARACTER
ADDI T4,1
SOJG T2,PDIR2 ;COUNT DOWN MAX-CHARS COUNTER
PDIR21: POPJ P, ;CONTINUE
SUBTTL DATE OUTPUT FOR DIRECTORY
;OUTPUT THE DATE FOUND IN AC 0.
DATOUT: MOVEI T2,PUT ;PUT CHAR IN OUT
IDIVI 0,^D31
MOVEI T3,1(1)
IDIVI 0,^D12
MOVE DOUT,T3 ;DOUT=DAY
PUSHJ P,OUTDC1 ;PRINT DAY
PUSHJ P,DATO2 ;PRINT -MONTH-
MOVE DOUT,0
ADDI DOUT,^D64 ;DOUT=YEAR
CAIL DOUT,^D100 ;[132] AFTER YEAR 2000?
SUBI DOUT,^D100 ;[132] YES, KEEP IT CORRECT FOR NEXT 100 YEARS
OUTDC1: SKIPA DOUT+1,TWL ;RADIX 10
;*******************************************************************
;ROUTINE TO CONVERT OCTAL TO ASCII
;DOUT CONTAINS OCTAL VALUE ON ENTRY
OUTOCT: MOVEI DOUT+1,10 ;RADIX 8
PRNUMA: HRRZM DOUT+1,T4
MOVEI CHR,"0"
CAMGE DOUT,DOUT+1 ;PRINT AT LEAST 2 DIGITS
PUSHJ P,(T2) ;PUT OR PUTCON
PRN: IDIVI DOUT,(T4) ;DIVIDE BY RADIX
HRLM DOUT+1,(P) ;SAVE NO. FOR PRINT
JUMPE DOUT,.+2 ;ENUF DIGITS?
PUSHJ P,PRN ;NO, GET MORE
HLRZ CHR,(P) ;YES, GET LEFTMOST
ADDI CHR,60 ;CONVERT TO ASCII
JRST (T2) ;PUT OR PUTCON
OUTDE4: MOVEI CHR," " ;SET UP FOR SPACES
CAIL DOUT,^D1000 ;PRINT 4 CHAR.
JRST OUTDC1 ;AT LEAST 4 SEEN
PUSHJ P,(T2) ;OUTPUT ONE SPACE
CAIGE DOUT,^D100 ;3 CHAR.?
PUSHJ P,(T2) ;NO,SO ANOTHER SPACE
JRST OUTDC1
OUTDC3: MOVEI CHR," " ;GET A SPACE READY
CAIGE DOUT,^D100 ;LESS THAN 3 CHAR.
PUSHJ P,PUT ;YES, COMPENSATE WITH A SPACE
OUTDEC: MOVEI T2,PUT ;PUT CHAR IN OUT BUF
JRST OUTDC1
DATO2: MOVEI T4,5
MOVE T6,MNPT
ADDM 1,T6
ILDB CHR,T6
PUSHJ P,(T2) ;PUT OR PUTCON
SOJG T4,.-2
POPJ P,
SUBTTL DTA DIRECTORY READ
;READ DTA DIRECTORY AND INITIALIZE DIRST AND DIRST1
DTCHECK:PUSHJ P,ININIT ;INITIALIZE INPUT DEVICE
DTCH2:
USETI IN,144 ;GET DTA DIR
PUSHJ P,INP ;INPUT DIRECTORY
CLOSE IN, ;FINISHED WITH CHAN FOR NOW
DTCH1: HRRZ T5,IBF ;LOC. OF CURRENT BUF, 2ND WORD
MOVEI 0,123(T5) ;83 WORDS,7, FIVE-BIT BYTES
ADDI T5,1 ;COMPUTE ADD. OF DIR. START
MOVEM 0,DIRST ;FIRST FILE NAME LOC
MOVEM 0,DIRST1 ;TO RESTORE DIRST
POPJ P,
;ROUTINE TO CHECK BRACKET COUNT/MATCHING
OUTCHK: SETZB T3,TLBRKT ;COUNT <> ON THIS LINE, CLEAR THINGS
MOVE T1,OPTRA ;BYTE POINTER FOR READING OUT THE LINE
OUTCH2: CAMN T1,OPTR ;LINE DONE?
JRST OUTCH3 ;YES, SO DECIDE WHETHER TO PRINT
ILDB T2,T1 ;GET CHAR
CAIN T2,"<" ;LEFT BRACKET?
AOS TLBRKT ;YES, SO INCREMENT BRACKET COUNT
CAIN T2,">" ;RIGHT BRACKET?
SOSL TLBRKT ;YES, SUBTRACT BRACKET COUNT, GONE NEG?
JRST OUTCH2 ;NO, SO DO NEXT CHAR
AOJA T3,OUTCH2 ;YES, SO FLAG COUNT GONE NEG.
OUTCH3: SKIPN T2,TLBRKT ;BRACKET COUNT OFF THIS LINE?
JUMPE T3,CPOPJ ;NO, WENT NEG.?
ADDM T2,TOTBRK ;YES, SO ADD INTO CUMULATIVE COUNT
MOVEI CHR,"-" ;PRINT MINUS FOR NEG TOTAL
SKIPGE TOTBRK
PUSHJ P,PUT
MOVM DOUT,TOTBRK;PRINT MAGNITUDE OF TOTAL
PUSHJ P,OUTDEC
MOVEI CHR,TAB ;FOLLOW WITH TAB
PUSHJ P,PUT
JRST OUTCH1 ;AND PRINT THE LINE
SUBTTL ROUTINE TO FIND FILE TYPE AND SET MODE
FILTYP: TDNE FLAG,[XWD IFLG+IBFLG,BMOD]
POPJ P, ;BIN MODE DON'T CARE IF DMP, ETC
TLZ AUXFLG,SBIN ;CLEAR BINARY FLAG
TDNN FLAG,[XWD PFLG!WFLG,LINE!TBMOD!NSMOD!SQMOD!SPMOD]
TLNE AUXFLG,CDRFLG ;/E FROM DSK IS NOT BINARY
JRST FIL2 ;SO TURN OFF SBIN
TRNN FLAG,XFLG ;NO CONCATENATION ALLOWED
TRNN CALFLG,COMAFL ;CONCATENATION, SO TAKE IT SLOWLY
TRNN AUXFLG,DSKIN!DTAIN!MTAIN ;BINARY INPUT POSSIBLE?
JRST FIL11 ;NO
TRNE AUXFLG,DSKOUT!DTAOUT!MTAOUT ;BINARY OUTPUT?
JRST FIL3 ;YES, USE BINARY MODE
FIL11: HLLZS ZRF+1 ;CLEAR RIGHT HALF
MOVE T1,[-TYTLEN,,TYPTAB]
FIL11A: HLLZ 0,(T1) ;GET AN EXT
CAMN 0,ZRF+1 ;MATCH?
JRST FIL3 ;YES, USE BINARY
HRLZ 0,(T1) ;TRY OTHER
CAMN 0,ZRF+1
JRST FIL3
AOBJN T1,FIL11A ;NO, KEEP TRYING
HLLZS DTON+1 ;CLEAR RIGHT HALF INCASE NOT ZERO
MOVE T1,[-TYTLEN,,TYPTAB]
FIL11B: HLLZ 0,(T1) ;GET AN EXT
CAMN 0,DTON+1 ;MATCH?
JRST FIL3 ;YES, USE BINARY
HRLZ 0,(T1) ;TRY OTHER
CAMN 0,DTON+1
JRST FIL3
AOBJN T1,FIL11B ;NO, KEEP TRYING
TRNN FLAG,XFLG ;DO NORMAL PROCESSING ON ALL
JRST FIL2 ;BUT DMP ETC FILES IF NOT /X
POPJ P, ;NO SIGNIFICANT SWITCHES
TYPTAB: 'SHR',,'HGH'
'SAV',,'LOW'
'XPN',,'SVE'
'REL',,'CHN'
'DMP',,'BIN'
'RIM',,'RTB'
'RMT',,'BAC'
'BUG',,'CAL'
'DAE',,'DCR'
'MSB',,'OVR'
'QUC',,'QUE'
'QUF',,'SFD'
'SYS',,'UFD'
'EXE',,'UNV'
TYTLEN==.-TYPTAB
FIL4: TLO AUXFLG,RSDCFL ;SET REL,SAV,DMP,CHN FLAG
FIL1: HRLZI 0,004400 ;FORCE 36-BIT.
HLLM 0,IBF+1 ;INPUT BYTE POINTER
HLLM 0,OBF+1 ;OUTPUT BYTE POINTER
TRNE AUXFLG,DSKOUT!DTAOUT!TTYOUT!MTAOUT ;[210] CDP OR PTP?
POPJ P, ;CHANGE TO FORCED BINARY
CLOSE OUT, ;[210] PUNCH BLANK TAPE OR CARD
MOVEI 0,.IOBIN ;[210] CHANGE TO BINARY MODE
HRRM 0,OMOD ;[210] PUT IN OPEN BLOCK
OPEN OUT,OMOD ;[210] REOPEN
OUTPUT OUT, ;[210] DUMMY OUTPUT
POPJ P, ;[156]
FIL3: TLO AUXFLG,SBIN ;INPUT EXT = DMP,SAV,CHN,REL
TRNE FLAG,XFLG
JRST FIL1
TLON AUXFLG,FRSTIN ;NOT /X TEST FURTHER
JRST FIL4 ;IS THIS FIRST SOURCE, YES
TLOE AUXFLG,RSDCFL ;NOT FIRST, WAS PREVIOS FILE RSCD?
JRST FIL1 ;ENSURE BINARY AT ALL TIMES
OUTPUT OUT, ;NO CHANGE TO 36-BIT
MOVE 0,OBF+2 ;CURRENTLY 7-BIT I/O, MUST CHANGE TO 36-BIT
;OUTPUT CURRENT BUFFER
IDIVI 0,5 ;DIVIDE OBF+2 BY 5 (CHAR. COUNT)
MOVEM 0,OBF+2
JRST FIL1
FIL2: TLOE AUXFLG,FRSTIN ;NOT A RSCD FILE
TLZN AUXFLG,RSDCFL ;NO, WAS PREV. FILE RSCD?
POPJ P, ;NO, NO CHANGE
OUTPUT OUT, ;YES, CHANGE 36-BIT TO 7-BIT
MOVEI 0,5
IMULM 0,OBF+2
MOVE 0,SVIBF ;RESTORE 7-BIT
HLLM 0,IBF+1
MOVE 0,SVOBF
HLLM 0,OBF+1
TRNE AUXFLG,DSKOUT!DTAOUT!TTYOUT!MTAOUT ;[210] CDP OR PTR?
POPJ P,
CLOSE OUT, ;[210] PUNCH BLANK TAPE OR CARD
SETZM OMOD ;[210] CHANGE MODE TO ASCII
OPEN OUT,OMOD ;[210] REOPEN AS ASCII
OUTPUT OUT, ;[210] DUMMY OUTPUT
POPJ P, ;[156]
SUBTTL ROUTINES TO HANDLE DEVICE TMPCOR:
IFN TEMP,<
;ZERO TMPCOR DIRECTORY
TMPZRO: MOVE T1,[XWD .TCRDD,TMPNAM]
PUSHJ P,TMPXCT
JRST TMPNAV ;ONLY GETS HERE IF NO TMPCOR
JRST PIP2 ;GET NEXT COMMAND
;LIST TMPCOR DIRECTORY
TMPLST: SETZ T1, ;0 TO GET FREE SPACE
TMPCOR T1, ;GET IT
JRST TMPNAV ;NO TMPCOR IN THIS MONITOR
MOVE 0,T1 ;GET WORD COUNT
PUSHJ P,OCTLS2 ;OUTPUT IT
LSTLIN TMPHDR ;AND MESSAGE
MOVE T1,[XWD .TCRRD,TMPNAM]
PUSHJ P,TMPXCT
JRST MAIN1 ;SHOULD NEVER HAPPEN
JUMPLE T1,MAIN1 ;DIRECTORY EMPTY
MOVNS T1 ;GET - WORD COUNT
HRL T5,T1 ;MAKE AOBJN WORD
TMPLS2: HLLZ 0,(T5) ;GET NAME
PUSHJ P,SIXOUT ;OUTPUT IT
PUSHJ P,TABOUT ;AND A TAB
HRRZ 0,(T5) ;GET WORD COUNT
PUSHJ P,OCTLS2 ;OUTPUT IN OCTAL
PUSHJ P,CRLF ;NEW LINE
AOBJN T5,TMPLS2
JRST MAIN1 ;END OF DIRECTORY
;INPUT ONE FILE FROM TMPCOR
TMPIN: SKIPL ESWTCH ;MORE COMMAND
JRST TMPERR ;YES
MOVE T1,[XWD .TCRRF,TMPNAM]
PUSHJ P,TMPXCQ
JRST [PUSHJ P,ERR3A ;ERROR
PUSHJ P,GETEND;DELETE CCL FILE
JRST PIP2]
TROE AUXFLG,ONEOUT ;ONLY DO ENTRY ONCE
JRST TMPIN1 ;DONE ALREADY
TRNE CALFLG,TMPO ;[146] TMP:-TO-TMP: XFER?
JRST TMITMO ;[146] YES -- DO TMPCOR OUTPUT
ENTER OUT,DTON ;ENTER FILE IN CASE DIRECTORY DEV.
JRST ERR4 ;FAILURE
;**;[502] Insert at TMPIN1 before "HRLI ..." RLUSK 31-Oct-80
TMPIN1: TRNE AUXFLG,MTAOUT!DTAOUT!DSKOUT ;[502] FULLWORD OUTPUT?
JRST TMPINB ;[502] YES -- USE BINARY ROUTINE
HRLI T5,440700 ;MAKE A BYTE POINTER
IMULI T1,5 ;WORD COUNT
ADDI T1,1 ;BONUS FOR SOSGE
SOJLE T1,MAIN1 ;JUMP WHEN DONE
ILDB CHR,T5 ;GET CHARACTER
PUSHJ P,PUT ;OUTPUT IT
JRST .-3 ;LOOP 'TIL DONE
;**;[502] Insert 6 lines before TMITMO RLUSK 31-Oct-80
TMPINB: HRLI T5,444400 ;[502] MAKE 36-BIT BYTE POINTER
HLLM T5,OBF+1 ;[502] PUT IT IN BUFFER HEADER
SOJL T1,MAIN1 ;[502] RETURN WHEN DONE
ILDB CHR,T5 ;[502] GET A WORD
PUSHJ P,PUT ;[502] OUTPUT IT
JRST .-3 ;[502] LOOP UNTIL DONE
;[146] ROUTINE TO WRITE TMPCOR FILE FROM TMPCOR FILE
TMITMO: MOVE T2,DTON ;[146] GET OUTPUT FILE NAME
MOVEM T2,TMPNAM ;[146] PUT IN TMPCOR BLOCK
MOVN T2,T1 ;[146] GET NEGATIVE NO. OF WORDS READ
HRLZS T2,T2 ;[146] PUT IN LH
HRRM T5,T2 ;[146] GET BEGINNING ADDR OF FILE READ
SUBI T2,1 ;[146] MAKE IT AN IOWD
MOVEM T2,TMPNAM+1 ;[146] SET UP TMPCOR BLOCK
MOVE T1,[XWD .TCRWF,TMPNAM] ;[146] SET UP TO WRITE FILE
TMPCOR T1, ;[146] DO IT
JRST TMPFUL ;[146] NO TMPCOR UUO
JRST MAIN1 ;[146] RETURN
;DELETE ONE FILE FROM TMPCOR
TMPDEL: TRNE FLAG,RFLG!XFLG
JRST TMPERR
MOVE T1,[XWD .TCRDF,TMPNAM]
PUSHJ P,TMPXCQ
JRST [PUSHJ P,ERR3A
PUSHJ P,GETEND
JRST PIP2]
ERRPNT </File deleted: />
PUSHJ P,P6BIT ;OUTPUT FILE NAME
FILNAM
PUSHJ P,TCRLF ;OUTPUT CR-LF
JRST PIP2
;OUTPUT ONE FILE TO TMPCOR
TMPOCK: SKIPN OQMASK ;[267] ANY OUTPUT WILDS?
TLNE FL,MFLG ;[267] ANY WILD CARDS?
JRST TMPERR ;[267] YES, BOMB OUT
SKIPN T1,MATCH ;[267] OUTPUT NAME GIVEN?
MOVE T1,ZRF ;[267] NO, USE INPUT
JRST .+2 ;[267]
TMPOUT: MOVE T1,DTON ;OUTPUT FILE NAME
MOVEM T1,TMPNAM ;FOR TMPCOR
SETZ T1, ;GET FREE WORD
PUSHJ P,TMPXCT ;DO IT
JRST TMPNAV ;NO TEMPCOR
MOVEM T5,TMPNAM+1 ;SAVE START
HLL T5,IBF+1 ;FORM BYTE POINTER
HRRZ T2,.JBFF ;TOP OF BUFFER
INPTMP: PUSHJ P,INP ;GET A BUFFER FULL
PUSHJ P,TTYZ ;CHECK TTY FOR EOF
TXNE IOS,IO.EOF ;CHECK FOR EOF ON ALL DEVICES
JRST TMPEOF ;YES IT WAS
TMPILP: SOSGE IBF+2 ;ANYTHING IN BUFFER?
JRST INPTMP ;NO, GET MORE
ILDB T1,IBF+1 ;GET A CHARACTER
JUMPE T1,TMPILP ;[331] IGNORE NULLS
CAIGE T2,(T5) ;TOO MANY CHARS.?
JRST TMPFUL ;YES, ERROR
IDPB T1,T5 ;DEPOSIT CHAR
JRST TMPILP ;LOOP
TMPEOF: HRRZ T5 ;CLEAR OUT BYTE POSITION
SUB T5,TMPNAM+1 ;TOTAL NO OF WORDS
MOVNS T5 ;NEGATE IT
HRLM T5,TMPNAM+1 ;MAKE IOWD
MOVE T1,[XWD .TCRWF,TMPNAM] ;SET TO WRITE
TMPCOR T1, ;DO IT
JRST TMPFUL ;FAILED, NOT ENOUGH ROOM
JRST PIP2 ;ONLY ONE BUFFER ALLOWED
;SET UP AND XCT TMPCOR UUO
TMPXCQ: MOVE T2,FILNAM ;GET FILE NAME
SKIPE QMASK ;CANN'T HANDLE WILD CHARS. YET
JRST TMPERR ;YES
MOVEM T2,TMPNAM ;PUT IN LOOKUP BLOCK
TMPXCT: MOVSI T2,-1000 ;[403] ALLOW 1000 WORDS
HRR T2,.JBFF ;WHERE TO PUT CHARS.
HRRZ T5,.JBREL ;GET TOP OF CORE
CAIGE T5,1000(T2) ;[403] WILL BUFFER FIT IN
JRST [ADDI T5,1000 ;[403] ASK FOR ENUF CORE
CORE T5, ;TRY TO GET IT
JRST OMODER ;FAILED
JRST .+1] ;OK NOW
MOVEM T2,TMPNAM+1 ;STORE IN LOOKUP BLOCK
SOS TMPNAM+1 ;MAKE AN IOWD
TMPCOR T1, ;THIS IS IT
POPJ P, ;ERROR RETURN
MOVE T5,T1 ;NUMBER OF WORDS
ADD T5,.JBFF ;FIX UP JOBFF JUST IN CASE
EXCH T5,.JBFF ;PUT START OF BUFFER IN T5
JRST CPOPJ1 ;AND SKIP RETURN
TMPERR: ERRPNT </?Command not yet supported for TMPCOR!/>
TMPFUL: ERRPNT </?Not enough room in TMPCOR:!/>
TMPHDR: ASCIZ / TMPCOR words free
/
TMPNAV: ERRPNT </?TMPCOR not available!/>
>
SUBTTL BLOCK 0 CODE
;THIS CODE COPIES BLOCK 0,1,2 ONLY. I/O MUST BE DECTAPE.
;MODE SELECTED MUST BE BIT 100, 20 AND NOT DUMP MODE (134).
BLOCK0: TRC AUXFLG,DTAIN+DTAOUT
TRCE AUXFLG,DTAIN+DTAOUT;FORCE DTA I/O
JRST ERR7A
MOVX 0,IO.NSD+IO.UWC+.IOBIN
MOVEM 0,OMOD
MOVEM 0,ININI1
MOVSI 0,OBF
MOVEM 0,ODEV+1
MOVEI 0,IBF
MOVEM 0,DEVICE+1
OPEN OUT,OMOD
JRST ERR1 ;UNAVAILABLE
OUTBUF OUT,1
OUTPUT OUT,
OPEN IN,ININI1
JRST ERR1A
INBUF IN,1
SETZB T1,BL0CNT
BL4: USETI IN,(T1)
INPUT IN, ;READ
GETSTS IN,IOS
TXNN IOS,IO.ERR ;ANY ERRORS
JRST BL1 ;NO
JSP T5,INICN2
PUSHJ P,QUEST
ERRPN2 </Input device />
PUSHJ P,P6BIT
DEVICE
ERRPN2 </: />
MOVE T2,AUXFLG ;DECTAPE FOR ERROR MESSAGE
ANDI T2,DTAIN
PUSHJ P,IOERR ;PRINT ERROR TYPE
BL1: HRLZ T5,IBF+1
HRR T5,OBF+1
MOVEI T4,177(T5)
BLT T5,(T4) ;SHIFT DATA TO OUTPUT BUFFER
USETO OUT,@BL0CNT
OUTPUT OUT, ;WRITE BLOCK
PUSHJ P, OUTP1 ;CHECK ERRORS
AOS T1,BL0CNT
CAIGE T1,3
JRST BL4
BL3: RELEASE OUT, ;IF ANY, PDL IS RESET
JRST PIP2
SUBTTL MAGTAPE ROUTINES
;TEST TO SEE IF MORE THAN ONE OF THE LOWEST EIGHT MTA FLAGS
;HAVE BEEN SELECTED. IF SO ERROR. OTHERWISE, IMPLEMENT
;REQUEST. T1, T3, T6 SET AT ENTRY BY INLOOK OR OUTLOOK
;TO EQUAL AUX/AUXOUT, AB/ABOUT,INIMTA/INOMTA
MT1: HRRZ T2,T1 ;T1 CONTAINS REQUEST
ANDI T2,-1(T2) ;KNOCK OFF RIGHT MOST 1
TRNE T2,377
JRST MTR1 ;PRINT ERROR MESSAGE
TRNN T1,MTAFLG+MTBFLG+MTWFLG+MTTFLG+MTFFLG+MTUFLG+MTDFLG+MTPFLG
JRST MTC1
CAIN T6,INOMTA ;OUTPUT DEVICE?
TRNE CALFLG,DVSWTH ;YES, AN EXPLICIT DEVICE?
JRST .+2 ;INPUT DEVICE, OR EXPLICIT OUTPUT ONE
JRST ERR8 ;NOT OUTPUT DEVICE SEEN
PUSHJ P,(T6) ;THERE IS A REQUEST
;GO TO INIMTA/INOMTA
;PERFORM POSITIONING REQUESTS
TRNE T1,MTUFLG
JRST UNLOAD
TRNE T1,MTWFLG
JRST REWIND
TRNE T1,MTFFLG
JRST MARKEF
TRNE T1,MTTFLG
JRST SLEOT
TRNE T1,MTBFLG+MTPFLG ;MULTIPLE REQUESTS ALLOWED
JRST BSPF
TRNE T1,MTAFLG+MTDFLG ;MULTIPLE REQUESTS ALLOWED
JRST ADVF
;T1=AUX,AUXOUT. T3=AB,ABOUT. T6=INIMTA,INOMTA.
MTCONT: RELEAS TAPE,
TRNN T1,MTUFLG ;UNLOAD?
TRNE CALFLG,NSWTCH ;IS THERE AN INPUT DEVICE?
CAIE T6,INOMTA ;OUTPUT TAPE?
POPJ P, ;NO
JRST PIP2 ;YES, END OF COMMAND
;ROUTINE TO CHECK AND SET DENSITY FOR NEW DEVICE
MTC1: MOVE T4,T1 ;GET AUX/AUXOUT
;**;[510] Change 1 line at MTC1+1 RLUSK 25-Feb-81
ANDI T4,MT2FLG+MT5FLG+MT8FLG+MT16FL+MT62FL ;[510] CHECK # OF REQ'S
ANDI T4,-1(T4) ;REMOVE RIGHT MOST 1
JUMPN T4,MTR1 ;MORE THAN 1 REQ, ERROR
MOVX T4,.IOASL ;ASCII LINE STANDARD MODE
TRNE T1,MT2FLG
TXO T4,DENS2 ;SET 200 BPI
TRNE T1,MT5FLG
TXO T4,DENS5 ;SET 556 BPI
TRNE T1,MT8FLG
TXO T4,DENS8 ;SET 800 BPI
;**;[510] Insert 4 instructions after MTC1+10 RLUSK 25-Feb-81
TRNE T1,MT16FL ;[510]
TXO T4,DENS0 ;[510] SET 1600 BPI USING TAPOP. AFTER OPEN
TRNE T1,MT62FL ;[510]
TXO T4,DENS0 ;[510] SET 6250 USING TAPOP. AFTER OPEN
TRNE T1,MTEFLG
TXO T4,PARE ;EVEN PARITY
POPJ P,
;REWIND AND UNLOAD
UNLOAD: MTUNL. TAPE,
JRST MTCONT
;REWIND ONLY
REWIND: MTREW. TAPE,
MTWAIT: MTWAT. TAPE,
JRST MTCONT
;MARK END OF FILE
MARKEF: MOVE T5,MTANAM
EXCH T5,ODEV
MTEOF. TAPE,
MTWAT. TAPE, ;[404] WAIT FOR THE I/O TO FINISH
GETSTS TAPE,IOS
PUSHJ P,OUTP3
SETSTS TAPE,(IOS)
MOVEM T5,ODEV
JRST MTCONT
;SKIP TO LOGICAL END OF TAPE.
SLEOT: MTEOT. TAPE,
JRST MTWAIT
;BACKSPACE MTA 1 FILE, T3=AB OR ABOUT
;AB/ABOUT = INPUT/OUTPUT DEVICE
BSPF: HRRE T3,T3 ;T3=NO. OF FILES/RECORDS TO BACK
MOVEI T5,7 ;BSPR
TRNN T1,MTPFLG ;BSPR?
MOVEI T5,17 ;BSPF
BSPF2: MTWAT. TAPE, ;WAIT
STATO TAPE,IO.BOT ;AT LOAD POINT?
JRST BSPF3 ;NOT LDP
ERRPNT </?Load point before end of backspace request!/>
BSPF3: MTAPE TAPE,(T5) ;BACKSPACE FILE/RECORD
SOJGE T3,BSPF2 ;MORE FILES/RECORDS TO BSP?
;NO, END OF LOOP
MTWAT. TAPE,
GETSTS TAPE,IOS
TRNN T1,MTBFLG ;BACKSPACE FILE?
JRST MTCONT ;NO
TXNN IOS,IO.BOT ;IF AT LOAD POINT
MTSKF. TAPE, ;(MOVE FWD. OVER EOF)
JRST MTCONT ;DON'T SKIP A RECORD
;ADVANCE MTA 1 FILE, T3=AB OR ABOUT
;AB/ABOUT = INPUT/OUTPUT DEVICE
ADVF: HLRE T3,T3 ;T3=NO. FILES (OR REC) TO ADVANCE
MOVEI T5,6 ;ADVR
TRNN T1,MTDFLG ;ADVR ?
MOVEI T5,16 ;ADVF
MTAPE TAPE,(T5) ;ADVANCE FILE/RECORD
SOJG T3,.-1 ;MORE FILES/RECORDS TO ADV?
;NO, END OF LOOP
SKIPGE T3 ;WAS ITEXPLICIT ZERO
MTBSR. TAPE, ;YES , POSITION BEFORE EOF MARK
MTWAT. TAPE, ;WAIT...
GETSTS TAPE,IOS
TXZE IOS,IO.EOF
SETSTS TAPE,(IOS) ;END OF FILE
JRST MTCONT
;ROUTINE TO INITIALIZE MAGTAPE FOR INPUT OR OUTPUT
INOMTA: SKIPA T2,ODEV ;INIT OUTPUT DEVICE
INIMTA: MOVE T2,DEVICE ;INIT INPUT DEVICE
SETZM MTANAM+1
MOVEM T2,MTANAM
TRNN CALFLG,NEWDEV
JRST INMTA ;SAME DEVICE
PUSHJ P,MTC1 ;NEW DEVICE
HRRZM T4,INMTA1 ;SET MODE,DENSITY,PARITY
INMTA: OPEN TAPE,INMTA1
JRST ERR1B
;**;[510] Insert 2 lines after INMTA+1 RLUSK 25-Feb-81
TRNE T1,MT16FL!MT62FL ;[510] DO WE NEED TO SET DENSITY NOW?
PUSHJ P,SETBPI ;[510] YES, GO DO TAPOP.
POPJ P,
;**;[510] Insert routine after INMTA+2 RLUSK 25-Feb-81
;[510] ROUTINE TO SET TAPE DENSITY TO 1600 BPI OR 6250 BPI
SETBPI: PUSH P,T2 ;[510] SAVE AN AC
MOVE T2,[EXP .TFDEN+.TFSET] ;[510] SET UP TAPOP. BLOCK
MOVEM T2,BPIARG ;[510] TO SET DENSITY
MOVEI T2,TAPE ;[510] FOR THE TAPE CHANNEL
MOVEM T2,BPIARG+1 ;[510]
MOVE T2,[EXP .TFD16] ;[510] ASSUME 1600 BPI
TRNE T1,MT62FL ;[510] IS IT REALLY 6250?
MOVE T2,[EXP .TFD62] ;[510] YES -- SET FOR 6250 BPI
MOVEM T2,BPIARG+2 ;[510] PUT VALUE IN ARG BLOCK
MOVE T2,[XWD BPILEN,BPIARG] ;[510] SET UP FOR TAPOP. UUO
TAPOP. T2, ;[510] SET THE DENSITY
JRST BPIERR ;[510] SOMETHING WENT WRONG
POP P,T2 ;[510] RESTORE THE AC
POPJ P, ;[510] RETURN
;[510] PRINT ERROR MESSAGE AND DIE
BPIERR: ERRPNT <\?TAPOP. to set MTA: density failed!\> ;[510]
;ROUTINE TO PRINT ERROR MSG IF MORE THAN 1/8 FLAGS SET
MTR1: MOVE T4,DEVICE ;TENTATIVELY SET I/DEV
CAIE T6,INIMTA ;INPUT DEVICE?
MOVE T4,ODEV ;NO, SET O/DEV
ERRPNT </?Too many requests for />
PUSHJ P,P6BIT
T4
JRST PIP2
SUBTTL CONSTANTS/STORAGE/VARIABLES
;CONSTANTS
OKBD: POINT 6,DTON+2,23 ;FOR NO. 1K BLOCKS
OKB: POINT 6,ZRF+2,23
DATE: POINTR ZRF+2,RB.CRD
DATED: POINTR DTON+2,RB.CRD ;CREATION DATE /X
XDATE: POINTR ZRF+1,RB.CRX ;[132] HIGH ORDER PART
XDATED: POINTR DTON+1,RB.CRX ;[132] ...
ZRO: ASCII /00000/
OPTRA: XWD 700,LBUF-1 ;INITIAL POINTER TO LINE BUFFER
K1: 432150643240 ;MAGIC ASCII INCREMENT BY 10
K3: 375767737576 ;CHARACTER MASK 077
K4: 432150643216 ;MAGIC ASCII INCREMENT BY 1
TWL: OCT 12
IFN FTDSK,<
PRPTL: POINTR PROTS,RB.PRV ;PROTECTION FOR RENAME
PRPTD: POINTR DTON+2,RB.PRV
PRNM: POINTR ZRF+2,RB.PRV ;PROT FOR /R
TIME: POINTR ZRF+2,RB.CRT ;CREATE TIME /X
TIMED: POINTR DTON+2,RB.CRT ;DEPOSIT CREATE TIME
ADATE: POINTR FILNAM+1,RB.ACD ;[132] 15 BIT ACCESS DATE
CTIME: POINTR FILNAM+2,RB.CRT ;CREATION TIME
CDATE: POINTR FILNAM+2,RB.CRD ;CREATION DATE
XCDATE: POINTR FILNAM+1,RB.CRX ;[132] HIGH ORDER BIT
PROT: POINTR FILNAM+2,RB.PRV ;PROTECTION
MODE: POINTR FILNAM+2,RB.MOD ;RECORDING MODE
>
MONTH: ASCII /-Jan-/
ASCII /-Feb-/
ASCII /-Mar-/
ASCII /-Apr-/
ASCII /-May-/
ASCII /-Jun-/
ASCII /-Jul-/
ASCII /-Aug-/
ASCII /-Sep-/
ASCII /-Oct-/
ASCII /-Nov-/
ASCII /-Dec-/
MNPT: POINT 7,MONTH
;PROGRAM STORAGE AREA
SWSEG
LOW:
IFN TEMP,<
TMPPNT: BLOCK 1
TMPFLG: BLOCK 1
TMPEND: BLOCK 1
TMPFIL: BLOCK 2
TMPNAM: BLOCK 2 >
BL0CNT: BLOCK 1 ;COUNT
IFN CCLSW,<
CFI: BLOCK 3 ;STORED COMMAND INPUT HEADER
CFILE: BLOCK 4 ;NAME OF STORED CCL COMMAND FILE
COMFLG: BLOCK 1 ;-1 IF STORED COMMANDS,0 IF TTY>
SVIBF: BLOCK 1 ;SAVE INIT MODE (INPUT)
SVOBF: BLOCK 1 ;SAVE INIT MODE (OUTPUT)
IBF: BLOCK 3 ;INPUT BUFFER HEADER
OBF: BLOCK 3 ;OUTPUT BUFFER HEADER
OBI: BLOCK 3 ;OUTPUT BUFFER INPUT HEADER FOR DSK /Z
TFI: BLOCK 3 ;CONSOLE INPUT HEADER
TFO: BLOCK 3 ;CONSOLE OUTPUT HEADER
SAVAC: BLOCK 5 ;SAVE SOME ACS
NAMTAB: BLOCK 24 ;FOR (XD) ON DSK OR RENAME
NAMASK: BLOCK 24 ;[124] CORRESPONDING NAMTAB MASK
IFN FTDSK,<
JOBPPN: BLOCK 1 ;[163] OUR PPN
SYSPPN: BLOCK 1 ;[163] PPN OF SYS:
MFDPPN: BLOCK 1 ;[163] PPN OF MFD
;**;[514] Insert FFAPPN after MFDPPN: RLUSK 12-June-81
FFAPPN: BLOCK 1 ;[514] PPN OF FFA: (FREE FILE ACCESS)
DEVPP: BLOCK 1 ;[163] PPN OF CURRENT ERSATZ
TDSK: BLOCK 1 ;[163] LAST DEV: RETURNED IN STR SEARCH
LOCNAM: BLOCK 1 ;POINTER FOR NAMTAB
>;[163] END IFN FTDSK
LOCMSK: BLOCK 1 ;[124] LOC OF MASK TABLE
DIRST: BLOCK 1 ;LOC. OF LAST DIR. FILE NAME REFERENCED
DIRST1: BLOCK 1 ;SAVE INITIAL DIRST
SQNUM: BLOCK 1 ;CURRENT SEQUENCE NUMBER
DTJBFF: BLOCK 1 ;VALUE OF JOBFF AFTER CONSOLE I/O BUFFERS
SVJBFF: BLOCK 1 ;INITIAL VALUE OF JOBFF
SVJBF1: BLOCK 1 ;VALUE OF JOBFF AFTER OUTBUF UUO
OPTR: BLOCK 1 ;CURRENT POINTER FOR LINE PRESCAN
DTONSV: BLOCK 2 ;OUTPUT DIRECTORY ENTRY COPY
SVPTR1: BLOCK 1 ;POINTER TO LAST PRINTING CHARACTER
SVPTR2: BLOCK 1 ;POINTER TO LAST GENERATED TAB
TLBRKT: BLOCK 1 ;TOTAL PARENS ON THIS LINE
TOTBRK: BLOCK 1 ;TOTAL CUMULATIVE PARENS
TABCT: BLOCK 1 ;SPACES TO NEXT TAB STOP
SPCT: BLOCK 1 ;CONSECUTIVE SPACES COUNTER
ABOUT: BLOCK 1 ;AB FOR OUTPUT UNIT
AUXOUT: BLOCK 1 ;AUX FOR OUTPUT UNIT
PROTS: BLOCK 1 ;SAVE PROTECTION
CDRCNT: BLOCK 1 ;COUNT CARD COLS.
PTRPT: BLOCK 1 ;STORE SEQ. NO. POINTER
;THIS IS A BLOCK OF VARIABLE LOCATIONS, ZEROED AT THE START OF EACH
;PIP RUN, I.E EACH TIME PIP TYPES *.
FZERO==.
;***** DO NOT SPLIT THIS BLOCK *****
IFN FTDSK,<
RIBFIR: BLOCK 1 ;NUMBER OF WORDS IN LOOKUP
PPN: BLOCK 1 ;PROJ-PROG FOR EXTENDED LOOKUP>
FILNAM: BLOCK 1 ;FILE NAME FROM COMMAND SCANNER
FILEX: BLOCK 1 ;EXTENSION
PR: BLOCK 1 ;PROTECTION
PP: BLOCK 1 ;P-P NUMBER TYPED BY USER
;**;[520] Change at PP+1L RLUSK 7-January-1982
IFN FTDSK,<BLOCK .RBPCA+1+RIBFIR-.> ;[520] TOTAL LENGTH OF LOOKUP BLOCK
;***** END OF BLOCK *****
;**;[520] Change at DTON+1L RLUSK 7-January-1982
DTONEX: BLOCK 2 ;[273] EXTENDED BLOCK FOR DISK
DTON: BLOCK 4 ;OUTPUT DIR. ENTRY
BLOCK .RBPCA-5 ;[520] [273] REST OF BLOCK
DEVA: BLOCK 1 ;SAVE INPUT DEV. NAME
NO.: BLOCK 1 ;GENERATE FILE NAMES
;**;[520] Change at ZRF+1L RLUSK 7-January-1982
ZRFEX: BLOCK 2 ;[273] EXTENDED BLOCK FOR DISK
ZRF: BLOCK 4 ;LOOKUP FILE NAMES
BLOCK .RBPCA-5 ;[520] [273] REST OF BLOCK
MTAREQ: BLOCK 1 ;STORE MTA REQUESTS
COMEOF: BLOCK 1 ;EOF INDICATOR
COMCNT: BLOCK 1 ;COMBUF CHARS COUNT
COMPTR: BLOCK 1 ;POINTER FOR STORING/EXTRACTING CS
;**;[501] Insert at COMPTR+1 RLUSK 30-Oct-80
SPLAT1: BLOCK 1 ;[501] SET WHEN "*" SEEN IN FILNAM OR
;[501] EXT, SO NO EMBEDDED "*" ALLOWED
AUX: BLOCK 1 ;COPT AUXFLG (MTA)
IFN FTDSK,<
PPP: BLOCK 1 ;PERMANENT PPN
FNPPN: BLOCK 1 ;RESERVE #P-P
UFDPPN: BLOCK 1 ;[211] PPN FOR LSTU8 TO PRINT FROM, MAY BE PATH
ESWTCH: BLOCK 1 ;-1 INDICATES END OF LINE
XNAME: BLOCK 1 ;-1 INDICATES SCAN OVERSHOOT WITH A NULL NAME
;0 INDICATES NO SCAN OVERSHOOT
;CONTAINS OVERSHOOT NAME IF NOT NULL
AB: BLOCK 1 ;MTA VALUE SWITCHES
PTHADD: BLOCK 1 ;FIRST ADDRESS OF FULL PATH
PTHSCN: BLOCK 1 ;SCAN SWITCH
PTHPPN: BLOCK 1 ;PATH PPN
PTHSFD: BLOCK PTHLEN+1 ;SFD LIST + 0
DEFPTH: BLOCK PTHLEN+4 ;DEFAULT PATH
PTHOUT: BLOCK PTHLEN+4 ;OUTPUT PATH
WRKPTH: BLOCK PTHLEN+4 ;[207] WORK AREA FOR PATHING
COMPTH: BLOCK PTHLEN+4 ;[211] COMPARE SAVE AREA TO SEE IF NEW PPN TYPED
SAVPTH: BLOCK PTHLEN+4 ;[211] INPUT PATH SAVE AREA FOR /Z
INDCHR: BLOCK .DCUPN+1 ;[323] BLOCK FOR INPUT DSKCHR FOR /R
OUDCHR: BLOCK .DCUPN+1 ;[323] BLOCK FOR OUTPUT DSKCHR FOR /R
RENDCH: BLOCK 3 ;[323] BLOCK FOR STRUCTURE ACCEPTANCE TESTS
;[323] FOR /R/D
;**;[521] Change at CHKPTH RLUSK 8-Jan-82
CHKPTH: BLOCK .PTMAX+1 ;[521][147] TO CHECK REAL PATH OF FILE
MATCH: BLOCK 2 ;NAME AND EXT FOR /L OR (RX)
TAPEID: BLOCK 1 ;TAPE ID IN SIXBIT
QMASK: BLOCK 2 ;MASK FOR MATCHING FILE NAME AND EXT
OQMASK: BLOCK 2 ;SAME BUT FOR OUTPUT
STRARG: BLOCK 3 ;ARGUMENTS FOR GOBSTR UUO
DSCARG: BLOCK .DCSNM+1 ;[372] DSKCHR ARG BLOCK
GENERI=STRARG+2 ;FILE STRUCTURE NAMES IF GENERIC DSK
LZERO==.-1 ;THIS IS THE END OF THE INIT. ZEROED BLOCK.
PDL: BLOCK 20 ;PUSHDOWN LIST
LBUF: BLOCK 204 ;LINE BUFFER. ALLOW FOR FORTRAN DATA
LBUFE: BLOCK 1 ;ALLOW FOR OVERFLOW
DBUF: BLOCK 204 ;DIRECTORY BUFFER
OMOD: BLOCK 1 ;OUTPUT DEVICE MODE, STATUS
ODEV: BLOCK 2 ;OUTPUT DEVICE NAME
;BUFFER HEADER(S) LOC
ININI1: BLOCK 1 ;INPUT DEVICE
DEVICE: BLOCK 2
IFN CCLSW,<
RENSN: BLOCK 1 ;-1 IF RENAME MESSAGE SEEN
RUNDEV: BLOCK 1 ;RUN UUO DEVICE
RUNFIL: BLOCK 3 ;FILE NAME
RUNPP: BLOCK 2
CCLINI: BLOCK 3 ;CCL INPUT DEVICE OPEN BLOCK>
DEVERR: BLOCK 1
DERR2: BLOCK 2
INMTA1: BLOCK 1
MTANAM: BLOCK 2
;**;[510] After MTANAM insert 2 lines RLUSK 4-Mar-81
BPIARG: BLOCK 3 ;[510] ARGBLK FOR TAPOP. IN SETBPI
BPILEN==.-BPIARG ;[510] ARGUMENT BLOCK LENGTH
IFN FTDSK,<
ADSK1: BLOCK 1 ;OPEN DIRECTORY, MODE
ADSK: BLOCK 2 ;FILENAME, EXT
LIN: BLOCK 1 ;COUNT FOR DSK DIR LIST
PGCNT: BLOCK 1 ;COUNT OF PAGES FOR DSK DIR
UFDIN: BLOCK 3 ;HEADER FOR READING DISK DIRECTORY
UFD: BLOCK 4 ;[P,P] OR *FD*
;UFD OR SYS
BLKSUM: BLOCK 1 ;TOTAL NBR BLOCKS PER PROJ. PROG NBR
LEVEL: BLOCK 1 ;-2 IF LEVEL D DISK SERVICE
JOBPTH: BLOCK PTHLEN+4 ;DEFAULT JOB PATH
DEVPTH: BLOCK 3 ;[203] AREA FOR DOING PATH. ON DEVICE
>
IFN RIMSW,<
CHKSM: BLOCK 1 ;CHECKSUM ACCUMULATED (RIM10B)
POINTA: BLOCK 1 ;SAVE POINTER FOR RIM10B BLOCK
LENGTH: BLOCK 1 ;CALC. LENGTH OF RIM10 FILE
ZERO: BLOCK 1 ;NO OF 0'S NEEDED TO FILL SPACES IN
COUNT: BLOCK 1 ;RIM10B COUNT WORDS OUT
XFERWD: BLOCK 1 ;RIM-10-B XFER WD. ;FILE.
>
VAR ;JUST IN CASE
LOWTOP: ;LAST DATA LOCATION PLUS ONE
SWSEG
SUBTTL RIM LOADER
IFE RIMSW,<
RIMTB: ERRPNT <Z? /Y switch option not available this assembly!Z>
XLIST>
IFN RIMSW,<
LODAL==16 ;LENGTH OF RIM LOADER
HLTBIT==200 ;CHANGES JRST TO HALT
BLKSZ==17 ;NORMAL BLOCK LENGTH IN RIM10B
.JBDA==140 ;START OF USER AREA
RIMTB: TRNN AUXFLG,DTAIN!DSKIN!MTAIN
JRST ERR5B
PUSHJ P,ININIT
OUTPUT OUT,
PUSHJ P,FNSET ;SEE WHAT WE HAVE FOR FILNAM.EXT
TRNN CALFLG,FNEX ;SINGLE FILE SPECIFICATION?
JRST [MOVE 0,[FILNAM,,ZRF] ;YES, DON'T READ DIRECTORY
BLT 0,ZRF+3 ;SET UP FILE NAME,EXT, AND PPN
MOVE 0,ZRF+3 ;[273] GET PPN
MOVEM 0,ZRFEX+.RBPPN ;[273] FOR EXTENDED
SETZM GENERI ;JUST IN CASE
JRST RIMTB0+2]
TRNE AUXFLG,DTAIN
PUSHJ P,DTADIR
IFN FTDSK,<
TRNE AUXFLG,DSKIN
PUSHJ P,DSKDIR>
RIMTB0: PUSHJ P,LOOK ;GET FILE TO CONVERT
JRST MAIN1 ;NONE LEFT
IFN FTDSK,<PUSHJ P,SETPTH ;SEE IF FULL PATH
MOVEM 0,ZRFEX+.RBPPN ;[273] NON-SKIP RETURN, USE IT
MOVE T1,LEVEL ;[273] GET EXTENDED INDEX
TRNN AUXFLG,DSKIN ;[273] USE IF DISK
>;[273] END IFN FTDSK
SETZ T1, ;[273] IF NOT DISK, DO SHORT LOOKUP
LOOKUP IN,ZRF(T1) ;[273]
JRST ERR3
MOVEI 0,254000
HRLM 0,XFERWD ;ASSUME JRST
HLRZ 0,ZRF+1
CAIN 0,'RTB'
JRST RIMTB1
CAIE 0,'SAV'
CAIN 0,'RMT'
JRST RIMTB2
JRST ERR3B ;NO LEGAL EXTENSION - SAVE JOBFF TOO
RIMTB1: MOVE T1,OBF+1 ;PUNCH RIM10B LOADER
HRLI T1,RMLODA
AOS T2,T1 ;XFER IT TO OUTPUT BUFFER
BLT T1,LODAL(T2)
ADDI T2,LODAL
HRRM T2,OBF+1 ;FIX BUFFER POINTER
MOVNI T2,LODAL
ADDM T2,OBF+2 ;AND COUNTER
CLOSE OUT, ;BLANK TAPE
RIMTB2: PUSHJ P,RINP ;GET FIRST BUFFER
JRST ERR8A ;FILE OF ZERO LENGTH
JUMPGE CHR,ERR8A ;FIRST WORD MUST BE POINTER
HLRZ 0,ZRF+1
CAIN 0,'SAV'
JRST RIMTB4 ;"SAV" FILE
MOVEI T2,^D126(CHR) ;FIND VALUE OF .JBSA
MOVEI T3,.JBDA-1
CAMGE T2,T3 ;(JOBDA) IS FIRST LOC. OF USER PROF,
JRST ERR8A ;NO, ERROR
MOVE T1,IBF+1
MOVEI T3,.JBSA
PUSHJ P,RMS1
HRRM CHR,XFERWD ;SAVE TRANSFER WORD
MOVEI T3,.JBFF
MOVE T1,IBF+1
PUSHJ P,RMS1
HRRZM CHR,LENGTH ;SAVE (JOBFF)
HLRZ 0,ZRF+1
CAIN 0,'RTB' ;RIM 10B CONVERSION
JRST RIMTB4
;RIM10 1ST WD IS -N,X X IS 1ST WORD IN DATA BLOCK
;CONTAINING FIRST NON-ZERO WORD AFTER END
;OF JOBDATA AREA, FROM THERE TO JOBFF GIVES
;VALUE OF N. XFER ADD. COMES FROM JOBSA.
RMT1: MOVEI T1,.JBDA ;FIRST LOC. AVAILABLE TO USER
LDB CHR,IBF+1
SUBI T1,1(CHR)
JUMPLE T1,RMT2 ;CURRENT "X" GT OR EQ JOBDA
HLRO T2,CHR
MOVNS T2 ;GET "N"
AOJ T1, ;GET REL. LOC. OF JOBDA IN BLOCK
CAMG T1,T2
JRST RMT2
AOJ T2, ;NOT IN BLOCK, TRY NEXT
ADDM T2,IBF+1
MOVNS T2
ADDM T2,IBF+2 ;READY TO GET NEXT POINTER
JRST RMT1
RMT2: LDB CHR,IBF+1 ;POINTS TO FIRST USEFUL I/O WORD
MOVNI T1,(CHR)
ADDB T1,LENGTH
MOVNS T1 ; -N
HRLM T1,POINTA
HRRM CHR,POINTA ;(-N,X) IN POINTA
SETZM ZERO
;NOW OUTPUT RIM10 FILE. IBF+1 POINTS TO FIRST I/O WORD. POINTA HAS I/O
;WORD FOR FILE. LENGTH = NO. WDS TO GO OUT INCLUDING XFER WD.
;COUNT COUNTS NO. WDS IN CURRENT LOGICAL BLOCK
;ZERO COUNTS ZERO FILL
MOVE CHR,POINTA
PUSHJ P,PUT ;PUNCH I/O WORD
RMT8: LDB CHR,IBF+1 ;-N,X
MOVEM CHR,POINTA
HLRO T1,CHR
MOVNM T1,COUNT
RMT6: SETZ CHR, ;PUNCH ZERO IF NECESSARY
SOSL ZERO
JRST RMT4 ;DEPOSIT ZERO
SOSGE COUNT
JRST RMT5 ;GET NEW LOGICAL BLOCK
PUSHJ P,RINP1
JRST ERR8A
RMT4: SOSG LENGTH
JRST RIMTB8
PUSHJ P,PUT
JRST RMT6
RMT5: HRRZ T1,POINTA
HLRO T2,POINTA
SUBM T1,T2
PUSHJ P,RINP1
JRST RMT9
JUMPGE CHR,RIMTB8
HRRZ CHR,CHR
SUB CHR,T2
JUMPL CHR,ERR8A
MOVEM CHR,ZERO
JRST RMT8
RMT9: MOVE CHR,LENGTH
SOJ CHR,
MOVEM CHR,ZERO
SETZ CHR,
RMT10: SOSGE ZERO
JRST RIMTB8
PUSHJ P,PUT
JRST RMT10
;RIM10B: COMES FROM RTB AND SAV FILES. SAV=RTB EXCEPT IT HAS NO
;RIM LOADER AND NO TRANSFER WORD
RIMTB3: PUSHJ P,RINP1 ;NONE, GET NEW POINTER
JRST RIMTB8 ;EOF
JUMPL CHR,RIMTB4 ;POINTER WORD
CAME CHR,XFERWD ;IS IT FINAL JRST XXX
JRST ERR8A ;NO,ERROR
JRST RIMTB8 ;YES,OUTPUT IT
RIMTB4: LDB CHR,IBF+1
HRRZM CHR,POINTA ;LOAD WORDS HERE
HLROM CHR,COUNT
MOVNS COUNT ;NO. WDS IN THIS BLOCK
RIMTB7: SKIPN T1,COUNT ;ANY WORDS LEFT IN BLOCK?
JRST RIMTB3 ;NONE
SETZM CHKSM ;INITIALIZE CHECKSUM
CAIL T1,BLKSZ
MOVEI T1,17
MOVN T2,T1 ;T1 HAS NO. OF WDS TO GO OUT
ADDM T2,COUNT ;ADJUST COUNT
HRL CHR,T2
HRR CHR,POINTA ;I/O WD IN CHR
ADDM T1,POINTA ;SET POINTA FOR NEXT TIME
ADDM CHR,CHKSM ;ADD I/O WD TO CHECKSUM
RIMTB5: PUSHJ P,PUT ;PUTPUT I/O WORD
SOJL T1,RIMTB6 ;FINISHED THIS BLOCK
PUSHJ P,RINP1 ;GET DATA
JRST ERR8A ;EOF (ILLEGAL)
ADDM CHR,CHKSM ;CHECKSUM
JRST RIMTB5
RIMTB6: MOVE CHR,CHKSM
PUSHJ P,PUT
OUTPUT OUT,
JRST RIMTB7
RIMTB8: MOVE CHR,XFERWD ;EOF HERE, XFERWD=JOBSA
TRNN CHR,-1
TLO CHR,HLTBIT
HLRZ 0,ZRF+1
CAIN 0,'SAV' ;NO XFER WD FOR "SAV" FILES
JRST RIMA
PUSHJ P,PUT
SETZ CHR,
PUSHJ P,PUT ;TRAILING ZERO
OUTPUT OUT,
RIMA: CLOSE IN,
TRNN FLAG,XFLG
JRST MAIN1 ;END OF SINGLE FILE
CLOSE OUT,
JRST RIMTB0
;THIS IS THE I/O SECTION
RINP: PUSHJ P,INP
TXNE IOS,IO.EOF ;EOF?
POPJ P, ;EOF EXIT
RINP1: SOSGE IBF+2
JRST RINP
ILDB CHR,IBF+1
JRST CPOPJ1
RMS2: SUB T1,T4 ;(IBF+1)+N
AOJ T1,
RMS1: LDB CHR,T1 ;GET POINTER
HRRZ T2,CHR ;X
HLRO T4,CHR ;-N
SUB T2,T4 ;X+N IN T2
CAMGE T2,T3
JRST RMS2
SUBI T3,(CHR) ;HOW FAR FROM POINTER?
ADD T1,T3 ;INCREMENT POINTER
LDB CHR,T1 ;(JOBSA/FF)
POPJ P,
;THIS IS THE RIM LOADER FOR THE PDP-10
RMLODA: PHASE 0
XWD -16,0
ST:! CONO PTR,60
ST1:! HRRI A,RD+1
RD:! CONSO PTR,10
JRST .-1
DATAI PTR,@TBL1-RD+1(A)
XCT TBL1-RD+1(A)
XCT TBL2-RD+1(A)
A:! SOJA A,
TBL1:! CAME CKSM,ADR
ADD CKSM,1(ADR)
SKIPL CKSM,ADR
TBL2:! HALT ST
AOBJN ADR,RD
ADR:! JRST ST1
CKSM:! BLOCK 0
DEPHASE>
LIST
IFE FTDSK,< END PIP1>
SUBTTL DISK DELETE AND RENAME ROUTINES
;* * * ALL THE FOLLOWING ARE DISK ROUTINES * * *
;DISK DELETE AND RENAME ROUTINES
SYN AB,STRCNT ;SOMEWHERE TO COUNT NO. OF F/S SEEN
SYN MTAREQ,SAVSTR ;FIRST F/S NAME SEEN
DSKDR0: TLNE FL,TSKOUT ;[312] IS THIS ON TSK:?
JRST ERR16 ;[312] YES, WELL THAT DOESN'T WORK
;**;[505] Change one line at DSKDR0+2 RLUSK 25-Nov-80
TRNN FLAG,DFLG ;[505][370] DELETING?
;**;[505] Insert 3 lines after DSKDR0+3 RLUSK 25-Nov-80
JRST RENTST ;[505] NO -- MUST BE A RENAME
;[505] GO SET UP THE PATHS
;[505] FOR INPUT AND OUTPUT,
;[505] RETURN TO DSKDRE
DSKDRD: SKIPN T1,DTON+3 ;[355] YES - WAS AN OUTPUT PPN GIVEN?
JRST DSKDRE ;[355] NO
TLNN T1,-1 ;[355] YES - IS IT A PATH?
MOVEI T1,DEFPTH ;[355] YES, POINT IT WHERE IT WILL BE
MOVEM T1,PPP ;[355] MAKE THE PPN PERMANEN
MOVE T1,[XWD PTHADD,DEFPTH] ;[355] COPY THE PATH
BLT T1,DEFPTH+PTHLEN+3 ;[355]
DSKDRE: ;[211]
PUSHJ P,ININIT ;GET DSK AS INPUT DEVICE
PUSHJ P,INFO ;PRINT FILES DELETED:/RENAMED:
DSKDR5: PUSHJ P,LOOK ;PREPARE FOR LOOKUP/ENTER
;OF FILE TO /D OR /R
JRST DSKDR1 ;ALL THROUGH WITH UFD
MOVE 0,DEVICE ;[327] GET INPUT DEVICE AND
PUSHJ P,PSYSP ;[327] RESET DEVPP FOR WILD CARDING
TRNN FLAG,DFLG ;ONLY MAKE NON-AMBIGUITY CHECK FOR /D
;**;[535] Replace one line at DSKDR5:+6 DRB 31-Jan-85
JRST [TLNE FL,MFLG ;[535] /R - WILDCARD?
TRNN AUXFLG,DSKIN ;[535] YES. ARE WE A DISK?
JRST DSKDR ;[535] NO, DO THE NORMAL THING
JRST RENPHY] ;[535] YES. USE EXPLICIT STRUCTURE NAMES
TRC CALFLG,MATEX!MATFN
TRCE CALFLG,MATEX!MATFN
JRST DSKDR+1 ;YES MUST NOT BE AMBIGUOUS
TLNN CALFLG,MFLG ;TEST FOR ???
DSKDR: PUSHJ P,INITFS ;INITIALIZE THE F/S SEARCH LIST
JRST RENFI0 ;[315][261] LEVEL C, OR NOT GENERIC "DSK"
SETOM STRCNT ;START WITH -1
PUSH P,DEVICE ;SAVE DSK DEVICE
DSKDR3: PUSHJ P,NXTFS ;GET NEXT F/S
JRST RENFIN ;NO MORE
PUSH P,ZRFEX+.RBPPN ;[273] SAVE PPN
PUSHJ P,SETPTH ;SEE IF FULL PATH
MOVEM 0,ZRFEX+.RBPPN ;[273] NON-SKIP RETURN, USE IT
MOVX 0,RB.DSL ;[533] GET THE "DON'T SEARCH LIB:" BIT
IORM 0,ZRFEX+.RBCNT ;[533] TURN IT ON IN OUR LOOKUP BLOCK
HLLZS ZRFEX+.RBEXT ;[323] CLEAR ANY PREVIOUS ERROR CODES
;[323] 6.02 CAN RETURN ERROR CODES IN .RBCNT
LOOKUP IN,ZRFEX ;[273] TRY THIS F/S
JRST [MOVE T7,(P) ;[400] GET SAVED PPN
TLNN FL,MFLG ;[400] SINGLE FILE?
TRNN AUXFLG,SYSFLG;[400] AND ALL:?
SKIPA ;[400] NO
MOVEM T7,ZRFEX+.RBPPN;[400] FIX UP ZRFEX
HRRZ T7,ZRFEX+.RBEXT;[270][250] GET ERROR CODE FROM LOOKUP
CAILE T7,ERIPP% ;[270][250] FILE NOT FOUND, DON'T PRINT ERROR
CAIN T7,ERSNF% ;[270][250] SFD NOT FOUND, DON'T PRINT ERROR
JRST DSKDRF ;[270][250] 0,1,23
PUSHJ P,DERR5R;[270][250] SOMETHING ELSE, PRINT ERROR
JRST DSKDRG] ;[270] BUT COUNT FILE AS FOUND
TLNN FL,MFLG ;[400] SINGLE FILE?
TRNN AUXFLG,SYSFLG ;[400] AND ALL?
SKIP 2 ;[400] NO.
MOVE T7,(P) ;[400] GET SAVED PPN
MOVEM T7,ZRFEX+.RBPPN;[400] AND FIX UP ZRFEX.
;**;[521] Change at DSKDR3+25L RLUSK 6-Jan-81
PUSHJ P,CHKFIL ;[521][147] SEE IF FILE'S PATH IS OK
JRST DSKDRF ;[521][147] WRONG PATH -- DON'T TOUCH
SKIPN T1,RENDCH+1 ;[323] ARE WE CHECKING FOR PARTICULAR DEVICES?
JRST DSKR3A ;[323] NO, SKIP FOLLOWING
MOVE T2,ZRFEX+.RBDEV ;[323] YES, GET DEVICE FILE WAS FOUND ON
MOVEM T2,INDCHR+.DCNAM;[323] INTO DSKCHR BLOCK
MOVE T2,[XWD .DCUPN+1,INDCHR] ;[323] SET POINTER
DSKCHR T2, ;[323] FIND OUT ABOUT DISK
JRST DSKR3A ;[323] SOMEHOW DSKCHR HAS GONE AWAY?
MOVE 0,INDCHR(T1) ;[323] GET STRUCTURE OR PHYSICAL NAME
ANDCM 0,RENDCH+2 ;[323] AND WITH MASK
CAME 0,RENDCH ;[323] AND SEE IF SAME STRUCTURE
JRST DSKDRF ;[323] NO, WE DIDN'T SEE IT THEN
DSKR3A: ;[323]
TLNN FL,MFLG ;[313] IF HERE WITH WILD /R
TRNE AUXFLG,SYSFLG ;[313] OR WITH DEVICE ALL:
SKIP 1 ;[313] DON'T AMBIGUOUS IT
JRST DSKDRG ;[313] NEITHER, CHECK AMBIGUITY
PUSHJ P,DSKR6S ;[315] FIX ANY SYS: RENAMES
PUSHJ P,ININIT ;[313] OPEN DEVICE
PUSHJ P,DSKDR6 ;[313] DELETE OR RENAME FILE
SETZ 0, ;[313] SET STRCNT SPECIALLY
HLLOM 0,STRCNT ;[313] SO RENFIN WON'T COMPLAIN
JRST DSKDRF ;[313] AND CONTINUE WITH NEXT STRUCTURE
DSKDRG: MOVE 0,STRCNT ;[270] GET COUNT
AOS STRCNT ;INCREMENT COUNT
JUMPL 0,[MOVE 0,GENERI
MOVEM 0,SAVSTR ;SAVE FIRST F/S
JRST DSKDRF] ;AND CONTINUE
JUMPG 0,DSKDRA ;NOT FIRST TIME
ERRPN2 </?Ambiguous /> ;GIVE MESSAGE
PUSHJ P,P6BIT ;PRINT
SAVSTR ;FIRST F/S
PUSHJ P,TYPSTR ;AND :
TLO AUXFLG,AMBIGU ;[371] SET AMBIGUOUS FLAG
DSKDRA: PUSHJ P,P6BIT ;PRINT THIS F/S
GENERI
PUSHJ P,TYPSTR ;FOLLOWED BY COLON SPACE
DSKDRF: POP P,ZRFEX+.RBPPN ;[273] PUT PPN BACK
JRST DSKDR3 ;TRY NEXT F/S
TYPSTR: MOVEI CHR,":" ;FOLLOW WITH COLON
PUSHJ P,PUTCON
MOVEI CHR," " ;AND A SPACE
JRST PUTCON ;POPJ RETURN
;**;[521] Change routine CHKPPN to CHKFIL RLUSK 6-Jan-82
;[521] THIS ROUTINE NOW CHECKS THE FILE'S PATH AGAINST THE PATH
;[521] OF THE USER OR SPECIFIED BY THE USER
CHKFIL: MOVEI 0,IN ;[521][147] SET UP TO GET PATH OF FILE
MOVEM 0,CHKPTH ;[521][147] TO COMPARE WITH PATH IN LOOKUP BLK
MOVE 0,[XWD .PTMAX+1,CHKPTH];[521][147] JUST NEED WHOLE BLOCK
PATH.
JRST CPOPJ1 ;[521][147] CAN'T PATH.: ASSUME PPN OK
MOVE 0,-1(P) ;[521][147] GET PPN SPECIFIED BY LOOKUP
JUMPE 0,CHKDPT ;[521] IF NO DIRECTORY, CHECK DEFAULT PATH
TLNE 0,-1 ;[521] IS A PATH ADDRESS GIVEN?
JRST CHKPPN ;[521] NO -- USER GAVE ONLY A PPN
JRST CHKPAT ;[521] YES -- USER GAVE A PATH
CHKDPT: ;[521] COMPARE FILE'S PATH WITH JOB'S PATH
MOVE T1,[IOWD .PTMAX-.PTPPN,.PTPPN+1] ;[521] START AT PPN COMPARISON
CHKDPL: MOVE T2,CHKPTH(T1) ;[521] GET A WORD FROM FILE'S PATH
CAME T2,JOBPTH(T1) ;[521] COMPARE WITH JOB'S PATH
JRST CHKBAD ;[521] FILE IS IN WRONG DIRECTORY
AOBJN T1,CHKDPL ;[521] GO AROUND AGAIN
JRST CHKOK ;[521] WE MADE IT, TAKE GOOD RETURN
CHKPAT: ;[521] COMPARE FILE'S PATH WITH GIVEN PATH
MOVE T1,[IOWD .PTMAX-.PTPPN,.PTPPN+1] ;[521] START WITH PPNS
CHKPTL: MOVE T2,CHKPTH(T1) ;[521] GET A WORD FROM FILE'S PATH
CAME T2,WRKPTH(T1) ;[521] COMPARE WITH PATH GIVEN BY USER
JRST CHKBAD ;[521] FILE IS IN WRONG DIRECTORY
AOBJN T1,CHKPTL ;[521] GO AROUND AGAIN
JRST CHKOK ;[521] WE MADE IT, TAKE GOOD RETURN
CHKPPN: CAME 0,CHKPTH+.PTPPN ;[521] COMPARE GIVEN PPN WITH FILE'S PPN
JRST CHKBAD ;[521] NOT EQUAL, SO TAKE BAD RETURN
JRST CHKOK ;[521] EQUAL PPNS, SO LEAVE HAPPILY
CHKOK: JRST CPOPJ1 ;[521][236] WIN
CHKBAD: HLLZS ZRF+1 ;[521][236] NO, CLEAR DATE TO FILE NOT FOUND CODE
SETZM ZRF+2 ;[521][236] TO BE SUPER SURE FOR DATE75
POPJ P, ;[521][236] ERROR RETURN
DSKR6S: MOVE T1,ZRFEX+.RBDEV ;[323] GET DEVICE FILE FOUND ON
MOVEM T1,SAVSTR ;[323] AND SAVE IN SAVSTR
;[323] THIS ELIMINATES PROBLEMS WITH
;[323] OPENING SYS: AND THEN TRYING
;[323] A RENAME TO SOMEWHERE ELSE
POPJ P, ;[323]
DSKR6I: MOVE 0,SAVSTR ;[163] USE SAVED STRUCTURE
PUSH P,DEVICE ;[163] SAVE FOR LATER
MOVEM 0,DEVICE ;[163] FOR SPEED AND TO ALLOW RENAMES
;**;[536] Insert 1 line at DSKR6I: +3L, 13-Feb-85, DRB
PUSH P,GENERI ;[536] SAVE PHYSICAL ONLY FLAG
;**:[532] Insert 1 line at DSKR6I: +3L, 29-Feb-84, KMR
SETOM GENERI ;[532] GET PHYSICAL ONLY SET ON OPEN
PUSHJ P,ININIT ;[163] GO INIT INPUT
;**;[536] Insert 1 line at DSKR6I: +8L, 13-Feb-85, DRB
POP P,GENERI ;[536] RESTORE THE PHYSICAL ONLY SPECIFIER
POP P,DEVICE ;[163] GET IT BACK
DSKDR6: PUSHJ P,SETPTH ;SEE IF FULL PATH
MOVEM 0,ZRFEX+.RBPPN ;[273] NON-SKIP RETURN, USE IT
MOVE 0,ZRFEX+.RBPPN ;[273][217] GET WHATEVER IS BEING USED
MOVEM 0,DTONEX+.RBPPN ;[273][217] AND SAVE IT FOR DELETE (RENAME IS DIFF)
LOOKUP IN,ZRFEX ;[273] IS SOURCE FILE THERE?
JRST [PUSHJ P,DERR5R;[270] IT MOVED, PRINT ERROR
POPJ P,] ;[313][270] BUT CONTINUE WITH COMMAND
IFN LEVELC,< ;[207]
SKIPL LEVEL ;[171] DON'T DO CLOSE IF LEVEL D
CLOSE IN, ;YES
>;[207] END IFN LEVELC
TRNN FLAG,DFLG ;DELETE?
JRST DSKDR4 ;NO, RENAME
SETZM DTON ;YES
JRST DSKDR7
;**;[535] Insert before RENFIN:+0 DRB 31-Jan-85
RENPHY: MOVEI 0,DIR ;[535] GET OUR DIRECTORY CHANNEL NUMBER
MOVEM 0,WRKPTH ;[535] STORE IN AN EMPTY PATH BLOCK
MOVE 0,[.PTMAX,,WRKPTH] ;[535] POINT TO THE BLOCK
PATH. 0, ;[535] FIND OUT WHAT STRUCTURE THIS FILE IS ON
SKIPA T7,[SIXBIT \DSK\] ;[535] ERROR, JUST GET GENERIC NAME
MOVE T7,WRKPTH ;[535] GET THE STRUCTURE THIS FILE LIVES ON
MOVEM T7,DEVICE ;[535] STORE THE NEW DEVICE NAME
JRST RENFI0 ;[535] AND JOIN THE COMMON CODE BELOW
RENFIN: POP P,DEVICE ;GET DSK DEVICE BACK
MOVE 0,STRCNT ;GET COUNT
JUMPL 0,RENFI2 ;[314] NOT EVEN ONE FOUND
CAIL 0,-1 ;[313] HAVE WE ALREADY DONE THE WORK?
JRST DSKDR5 ;[315][313] YES, DON'T TRY AGAIN
JUMPE 0,RENFI1 ;[313] UNIQUE, DO RENAME/DELETE
SETZM ZRFEX+.RBPPN ;[273] CLEAR PPN IN LOOKUP BLOCK
SETZM ZRFEX+.RBSIZ ;[302] PREVENT NNN BLOCKS FREED MSG
PUSHJ P,INFO3 ;[313] PRINT BAD FILE NAME
JRST DSKDR5 ;[313] SINCE TOO MANY F/S
RENFI0: PUSHJ P,ININIT ;[323] SET UP INPUT CHANNEL
PUSH P,ZRFEX+.RBPPN ;[323] SAVE PPN FIRST
PUSHJ P,SETPTH ;[323] AND PPN
MOVEM 0,ZRFEX+.RBPPN ;[323]
MOVX 0,RB.DSL ;[541] GET THE "DON'T SEARCH LIB:" BIT
IORM 0,ZRFEX+.RBCNT ;[541] SO NO PROTECTION FAILURE FROM /SYS/LIB
LOOKUP IN,ZRFEX ;[323] FIND FILE FOR DSKR6S
JRST [POP P,ZRFEX+.RBPPN ;[323] RESTORE
HRRZ T7,ZRFEX+.RBEXT ;[323] GET ERROR CODE
CAILE T7,ERIPP% ;[323] IF NOT FOUND
CAIN T7,ERSNF% ;[323] BECAUSE 0,1,23
JRST RENFI2 ;[323] THEN %not found
PUSHJ P,DERR5R ;[323] ELSE PRINT ERROR
JRST DSKDR5] ;[323] AND TRY NEXT FILE SPEC
PUSHJ P,CHKFIL ;[541] MAKE SURE THIS CAME FROM THE RIGHT PLACE
JRST [POP P,ZRFEX+.RBPPN ;[542] RESTORE PPN
JRST RENFI2] ;[541] NOPE, PRETEND NO SUCH FILE
POP P,ZRFEX+.RBPPN ;[323] RESTORE PPN
PUSHJ P,DSKR6S ;[315] GO CHECK FOR SYS
RENFI1: PUSHJ P,DSKR6I ;[313] DELETE OR RENAME THE FILE
JRST DSKDR5 ;[313] AND CONTINUE WITH COMMAND
RENFI2: PUSHJ P,ERR3A ;[314] PRINT %No files ....
JRST DSKDR5 ;[314] AND CONTINUE
DSKDR4: PUSHJ P,RENAME
MOVE 0,ZRF+2 ;GET DATE,MODE,PROT ETC.
MOVEM 0,DTON+2 ;SAVE AS BEFORE
LDB 0,XDATE ;[132] HIGH ORDER BIT
DPB 0,XDATED ;[132] ...
LDB 0,[POINTR (NAMTAB+2,RB.PRV)]
TLNE AUXFLG,NSPROT ;USE THE CURRENT PROTECTION
DPB 0,PRPTD ;UNLESS NEW PROT. SPECIFIED
PUSHJ P,CPYRIB ;[273] GO CLEAR AND COPY RIB STUFF
MOVE 0,ODEV ;[231] CHECK FOR ERSATZ DEVICES
PUSHJ P,PSYSP ;[231] USING ERSATZ DEVICE ROUTINE
MOVE T1,NAMTAB+3 ;[323] GET ANY SPECIFIED PPN (IN CASE OF SFD'S)
PUSHJ P,DSKPPZ ;[323] AND INTEGRATE DEVPPN INTO ANY PATHS
SKIPN T1 ;[323] IF NOTHING, IT MUST BE US
MOVEI T1,PTHOUT ;[323] AND MONITOR WILL NOT MOVE W/O SOMETHING
TLNN T1,-1 ;[222] SEE IF WE HAVE A PATH POINTER
SKIPE JOBPTH ;[222] YES, SEE IF SMALL MONITOR
JRST DSKR4A ;[323][222] NO, LEAVE ALL ALONE
SKIPN T1,.PTPPN(T1) ;[323][222] YES, USE PPN WITHOUT PATH BLOCK
MOVE T1,JOBPTH+.PTPPN;[323] UNLESS NONE, THEN USE JOB'S
DSKR4A: ;[262]
MOVEM T1,DTONEX+.RBPPN ;[273][222] AND SAVE IT ALL IN RENAME BLOCK
MOVE 0,[XWD JOBPTH,PTHOUT] ;[222] SINCE THE CURRENT MONITOR
SKIPN PTHOUT+.PTPPN ;[222] CANNOT HANDLE A RENAME WITH A ZERO
SKIPE PTHOUT+.PTPPN+1 ;[222] PATH BLOCK, WE MUST CHECK FOR THAT
JRST DSKR4G ;[222] AND COPY IN THE DEFAULT PATH IF
TDNN CALFLG,[DVSWTH!DDEVSN] ;[405] ANY OUTPUT DEVICE?
SKIPE NAMTAB ;[374] ANY OUTPUT NAME?
JRST DSKR4F ;[374] YES - GO USE DEFAULT PATH
MOVE T1,ZRFEX+.RBPPN ;[374] NO - USE INPUT PATH
TLNN T1,-1 ;[374] INPUT PATH A PPN?
SKIP 2 ;[374] NO
MOVEM T1,DTONEX+.RBPPN;[374] YES - SAVE IT
JRST DSKR4G ;[374] THAT'S ALL WE NEED.
HRLM T1,0 ;[374] PATH - WE NEED TO BLT I-TO-O
DSKR4F: BLT 0,PTHOUT+PTHLEN+3 ;[222] THIS IS THE CASE.
DSKR4G: HRR T1,ZRFEX+.RBEXT ;[364] DATES DON'T CHANGE.
HRRM T1,DTONEX+.RBEXT ;[364]
HRRZI T1,.RBPRV-.RBPPN ;[364] SET UP COUNTER FOR COMPARING
DSKR4B: ;[364] LOOKUP AND RENAME BLOCKS.
MOVE T2,.RBPPN+ZRFEX(T1) ;[364] GET NEXT LOOKUP BLOCK WORD
CAME T2,.RBPPN+DTONEX(T1) ;[364] SAME AS RENAME BLOCK?
JRST DSKR4E ;[364] NO - THEN GO AHEAD AND RENAME.
SOJG T1,DSKR4B ;[364] MOVE POINTER AND CHECK MORE IF ANY.
MOVE T1,DTONEX+.RBPPN ;[364] GET RENAME .RBPPN
TLNE T1,-1 ;[364] IS IT A PATH POINTER?
JRST DSKR4D ;[364] NO - GO HANDLE PPN'S.
HRRZI T1,IN ;[364] PREPARE TO DO A PATH CHECK ON
HRRZM T1,WRKPTH ;[364] THE LOOKUP CHANNEL.
HRRI T1,WRKPTH ;[364] BLOCK ADDR.
HRLI T1,PTHLEN+4 ;[364] BLOCK LEN.
PATH. T1, ;[364] CHECK THE CHANNEL PATH
JRST DSKR4E ;[364] LOSE - GO TRY RENAMING.
ADDI T1,.PTPPN ;[364] POINT T1 TO THE PATH PPN
MOVE T2,DTONEX+.RBPPN ;[364] GET RENAME PATH BLOCK ADDR
ADDI T2,.PTPPN ;[364] AND POINT TO PATH PPN
;**;[514] Insert 3 lines after DSK4RB+16L RLUSK 11-June-81
MOVE T3,(T1) ;[514] GET FILE'S PPN
CAMN T3,MFDPPN ;[514] IS THIS A UFD?
JRST DSKDR9 ;[514] THEN ONLY PRETEND TO RENAME IT
DSKR4C: MOVE T3,(T1) ;[364] GET CHANNEL PATH BLOCK WORD
CAME T3,(T2) ;[364] SAME AS RENAME PATH BLOCK?
JRST DSKR4E ;[364] NO - GO DO RENAME
JUMPE T3,DSKDR9 ;[364] IF GOT TO END, DON'T RENAME
AOJ T1, ;[364] INCREMENT CHANNEL POINTER
AOJA T2,DSKR4C ;[364] INCREMENT RENAME POINTER, LOOP
DSKR4D: CAMN T1,ZRFEX+.RBPPN ;[364] NO PATH - PPN'S SAME?
JRST DSKDR9 ;[364] YES - DON'T RENAME
DSKR4E: HLRZ T1,DTON+1 ;[202] HACK HACK HACK HACK
CAIN T1,'UFD' ;[202] HACK TO CHECK FOR UFD RENAME
SETZM DTONEX+.RBPPN ;[273][202] IT IS, ZERO PPN
DSKDR7: RENAME IN,DTONEX ;[273]
JRST [PUSHJ P,DERR7 ;OUTPUT ERROR CODE
POPJ P,] ;[313] AND CONTINUE
DSKDR8: MOVE T1,ZRFEX+.RBDEV ;[377] GET THE UNIT LOOKED ON
MOVEM T1,DSCARG ;[375] PUT IN ARG BLOCK
MOVE T1,[.DCSNM+1,,DSCARG] ;[375] SET UP FOR DSKCHR
DSKCHR T1, ;[375] DSKCHR TO GET F/S FOR UNIT
SETZM DSCARG+.DCSNM ;[375] LOSE - ZERO F/S
PUSHJ P,INFO3 ;PRINT FILENAME DELETED/RENAMED
POPJ P, ;[313]
DSKDR1: TLZ AUXFLG,NSPROT ;NON-ST. PROT FIXED
SOS ESWTCH ;ENSURE ESWTCH NEGATIVE
SKIPE DOUT,BLKSUM ;GET TOTAL FREED BLOCKS
TRNN FLAG,DFLG ;BUT ONLY IF /D
JRST DSKDR2 ;BOTH NOT TRUE
MOVEI T2,PUTCON ;ON TTY
PUSHJ P,OUTDC1 ;OUTPUT IN DECIMAL
ERRPN2 </ Blocks freed/>
PUSHJ P,TCRLF ;FINISH WITH CR-LF
SETZM BLKSUM ;CLEAR RUNNING TOTAL
DSKDR2: RELEAS CON,
RELEAS DIR, ;[323] CLEAR CHANNELS
RELEAS IN, ;[323]
JRST PIP2 ;[323] AND START NEW COMMAND
; WE GET HERE IF NOTHING IN THE RIB IS CHANGING,
; E.G. A "PROTECTION NOP".
DSKDR9: HLRZ T1,DTONEX+.RBEXT ;[377] GET FILE EXTENSION
CAIE T1,'EXE' ;[377] EXE EXTENSION?
CAIN T1,'SHR' ;[377] OR SHARE?
SKIPA ;[377]
JRST DSKDR8 ;[377] NO - BYPASS RENAME.
;**;[514] Insert 3 lines at DSKDR9+5L RLUSK 12-June-81
MOVE T1,JOBPPN ;[514] CHECK OUR PPN
CAMN T1,FFAPPN ;[514] DO WE HAVE FREE FILE ACCESS?
JRST DSKR4E ;[514] YES INDEED -- GO DO RENAME
LDB T1,PRPTD ;[377] GET ACCESS PROTECT
LSH T1,-6 ;[377] SHIFT OUT ALL BUT OWNER
TRNN T1,2 ;[377] IS IT 2, 3, 6, OR 7?
CAIN T1,5 ;[377] OR 5?
SKIPA T3,[ZRFEX+.RBNAM] ;[377] YES - MUST WARN USER
JRST DSKR4E ;[377] ELSE GO REALLY RENAME.
MOVEI CHR,"%" ;[377] WARNING MESSAGE.....
PUSHJ P,PUTCON ;[377]
PUSHJ P,FN.EX ;[377] PRINT NAME.EXT
ERRPN2 </any dormant high-seg not removed due to file protection/>
PUSHJ P,TCRLF ;[377] DO CRLF
JRST DSKDR8 ;[377] GO BACK TO MAINLINE.
SUBTTL DISK /Z
;ZERO DSK DIRECTORY OF ALL POSSIBLE FILES. IF ANY ARE PROTECTED, GIVE
;A MESSAGE AND DO NOT PROCESS ANY OTHER SWITCHES.
DSKZRO: TLNE FL,TSKOUT ;[312] TRYING TO ZERO TSK:?
JRST ERR16 ;[312] NO YOU CAN'T
SKIPE T1,ODEV ;GET REAL DSK
MOVEM T1,ADSK ;SO AS TO INIT CORRECT F/S
MOVE 0,[XWD PTHADD,SAVPTH] ;[211] SAVE INPUT PATH
BLT 0,SAVPTH+PTHLEN+3 ;[211]
MOVS 0,[XWD PTHADD,PTHOUT] ;[211] AND COPY OUTPUT OVER TO
BLT 0,PTHADD+PTHLEN+3 ;[211] INPUT FOR ALL LOOKUPS
PUSHJ P,DIRSK1
INBUF OUT,1 ;FOR LOOKUPS ON OUT
DSKZ1: SOSLE UFDIN+2
SKIP 2
DSKZ3: PUSHJ P,UIN
JRST DSKZ4 ;[211] GO COPY INPUT PATH BACK
ILDB 0,UFDIN+1
JUMPE 0,DSKZ3
MOVEM 0,ZRF
MOVEM 0,DTON ;INCASE OF FAILURE
SOS UFDIN+2
ILDB 0,UFDIN+1
HLLZM 0,ZRF+1 ;EXTENSION
MOVE 0,FNPPN
MOVEM 0,ZRFEX+.RBPPN ;[273]
PUSHJ P,SETPTH ;SEE IF FULL PATH
MOVEM 0,ZRFEX+.RBPPN ;[273] NON-SKIP RETURN, USE IT
LOOKUP OUT,ZRFEX ;[273]
JRST [PUSHJ P,DERR5R ;ERROR
JRST DSKZ1] ;IGNORE RENAME TO ZERO
IFN LEVELC,< ;[211]
SKIPL LEVEL ;[211] SKIP CLOSE FOR LEVEL D
CLOSE OUT,
>;[211] END IFN LEVELC
SETZM ZRF
MOVE 0,FNPPN
MOVEM 0,ZRFEX+.RBPPN ;[273]
PUSHJ P,SETPTH ;SEE IF FULL PATH
MOVEM 0,ZRFEX+.RBPPN ;[273] NON-SKIP RETURN, USE IT
RENAME OUT,ZRFEX ;[273]
PUSHJ P,DERR7Z
JRST DSKZ1 ;REPEAT
DSKZ4: MOVS 0,[XWD PTHADD,SAVPTH] ;[211] COPY INPUT PATH BACK
BLT 0,PTHADD+PTHLEN+3 ;[211] WHERE IT BELONGS
POPJ P, ;[211] AND CONTINUE
SUBTTL LEVEL D FILE STRUCTURES AND ERSATZ STRUCTURES
;ROUTINES TO HANDLE LEVEL D FILE STRUCTURES
;TO INITIALIZE THE SEARCH LIST
INITFS:
IFN LEVELC,< ;[322]
SKIPN LEVEL ;ONLY IF LEVEL D
POPJ P, ;LEVEL C - NON-SKIP RETURN
>;[322] END IFN LEVELC
SETZM GENERI ;CLEAR INCASE OF ERROR RETURN
TRZ AUXFLG,SYSFLG ;[163] CLEAR ALL: BIT
MOVEI 0,ADSK ;ADDRESS OF DEVICE
DSKCHR 0, ;SEE IF DSK
POPJ P, ;NOT LEVEL D DSK
TXNE 0,DC.TYP ;GENERIC DEVICE DSK
POPJ P, ;NO
PUSH P,T1 ;[163]
MOVE T1,ADSK ;[200] GET THE GENERIC DEVICE NAME
MOVEM T1,TDSK ;[200] SAVE THE ORIGINAL
DEVNAM T1, ;[200] CONVERT ANY LOGICALS FOR ALL:
JFCL ;[200] IN CASE
MOVS T1,T1 ;[200] SWAP FOR COMPARE
CAIN T1,'NUL' ;[201] CHECK ON NUL:
JRST ININUL ;[201] YUP, DO IT W/O SEARCH
MOVSM T1,DEVPTH ;[203] PUT DEVICE IN PATH BLOCK
MOVE 0,[XWD .PTPPN+1,DEVPTH];[203] SET FOR PATH
PATH. 0, ;[203] GET DEVICE'S SEARCH LIST
JRST INIFSO ;[203] NO PATH., CHECK PPN
LDB T1,[POINTR (DEVPTH+1,PT.SLT)];[214] GET SEARCH LIST BITS
JRST @[INIFS1 ;[203] SET PROPER LIST - 0=NON-STANDARD
INIFS1 ;[203] 1=JOB'S
INIALL ;[203] 2=ALL:
INISUS ;[203] 3=SYS:
INIFS1 ;[203] 4=NOT DEFINED
INIFS1 ;[203] 5=NOT DEFINED
INIFS1](T1) ;[203] 6=NOT DEFINED
INIFSO: ;[203] PATH. FAILED, TRY AN OLDER WAY
MOVE 0,DEVPP ;[163] GET ITS PPN
CAME 0,JOBPPN ;[163] SEE IF IT'S OURS
JRST INISYS ;[163] NO, GO SEE IF SYS: SEARCH LIST
CAIN T1,'ALL' ;[163] YES, SEE IF IT'S ALL:
INIALL: ;[203] SET FOR ALL: FROM PATH.
TROA AUXFLG,SYSFLG ;[163] YES, SET SPECIAL SEARCH FLAG
INIFS1: SETOM GENERI ;[163] SET FOR INITIAL STRUCTURE
SETOM STRARG ;[163] AND OUR SEARCH LIST
INIFS2: SETOM STRARG+1 ;[163] USE OUR SEARCH LIST (UNLESS STRARG=0)
POP P,T1 ;[163] RESTORE SAVED AC
JRST CPOPJ1 ;GIVE SKIP RETURN
ININUL: POP P,T1 ;[201] DEVICE NUL:, GET T1 BACK
POPJ P, ;[201] AND GIVE NON SEARCH RETURN
;TO INITIALIZE SYSTEM SEARCH LIST
INISYS: CAIN T1,'LIB' ;[163] HERE WHEN DEVPP DOESN'T MATCH OUR
JRST INIFS1 ;[163] PPN, BUT LIB: USES OUR SEARCH LIST
CAIN T1,'ALL' ;[200] SEE IF ALL: FOR SOMEONE ELSE
TROA AUXFLG,SYSFLG ;[200] YES, SAY SO AND LEAVE GENERI 0
INISUS: ;[203] SET SYS: SEARCH LIST FROM PATH.
SETOM GENERI ;[163] FOR INITIAL FILE
SETZM STRARG ;[163] ON SYSTEM SEARCH LIST
JRST INIFS2 ;[163]
;TO FIND NEXT F/S IN SEARCH LIST
NXTFS: TRNE AUXFLG,SYSFLG ;[163] SEE IF DOING ALL:
JRST NXTSYS ;[163] YES, IT'S DIFFERENT
MOVEI 0,STRARG ;[163] SET ADDRESS OF STR LIST, LENGTH 3
SKIPE GENERI ;FINISHED IF IT IS ZERO
GOBSTR 0, ;GET FILE STRUCTURE
TDZA 0,0 ;ERROR
MOVE 0,GENERI ;GET DEVICE
CAMN 0,[-1] ;MIGHT BE MISSING FENCE, CHECK FOR END
JRST NOFNCE ;IT WAS
NXTFS1:
JUMPE 0,ENDFS ;FINISHED
MOVEM 0,DEVICE ;FOR RETRIEVAL INFO
PUSHJ P,ININIT ; INIT
JRST CPOPJ1 ;GIVE SKIP RETURN
NXTSYS: MOVE 0,GENERI ;[163] GET LAST ALL: SYSSTR VALUE
SYSSTR 0, ;[163] GET NEXT ALL: STRUCTURE
TDZ 0,0 ;[163] CLEAR IF ERROR
MOVEM 0,GENERI ;[163] SAVE NEXT STRUCTURE
JRST NXTFS1 ;[163] CONTINUE
;TO INIT NEXT UFD
NXTFSU: PUSHJ P,NXTFS ;GET NEXT F/S
POPJ P, ;SIMPLE SKIP RETURN
MOVE 0,DEVICE ;OTHERWISE GET IT
MOVEM 0,ADSK ;FOR DIR INIT
AOS (P) ;SET FOR SKIP RETURN
JRST DSKDIR ;INIT NEW UFD AND RETURN TO USER
NOFNCE: AOS GENERI ;SIGNAL END OF F/S
ENDFS: MOVE 0,TDSK ;[163] GET SAVED ORIGINAL DEVICE
MOVEM 0,ADSK ;[163] AND RESTORE IT IN CASE
MOVEM 0,DEVICE ;INPUT TO PROCESS
POPJ P, ;RETURN
SUBTTL SFD SPECIFICATIONS AND PATH BLOCK SETUPS
;ROUTINES TO HANDLE SFD'S
GETPTH: SETOM PTHADD ;SIGNAL FULL PATH TO BE USED
MOVEI T7,PTHADD ;[274] ADDRESS OF PATH
MOVEM T7,PP ;[274] SAVE AS NEW PPN
MOVEI T7,PTHSFD ;ADDRESS OF SFD LIST
GTPTH1: HRLI T7,(POINT 6,,) ;ILDP LOOP
PUSHJ P,GETBUF ;GET A CHARACTER
;**;[507] Insert 3 lines after GTPTH1+1 RLUSK 24-Feb-81
CAIE 0,"*" ;[507] NO WILDCARD CHARACTERS ALLOWED
CAIN 0,"?" ;[507] IN SFD SPECIFICATION
JRST ERR2B ;[507] PRINT ERROR MESSAGE AND END
CAIL 0,"A" ;ALPHABETIC
CAILE 0,"Z"
JRST .+2 ;NO
JRST GTPTH2 ;YES , FOUND ONE
CAIL 0,"0" ;NUMERIC
CAILE 0,"9"
JRST GTPTH3 ;NO
GTPTH2: SUBI 0,40 ;MAKE SIXBIT
TLNE T7,770000 ;SIX CHAR. YET?
IDPB 0,T7 ;NO DEPOSIT
JRST GTPTH1+1 ;LOOP
GTPTH3: MOVE T5,JOBPTH-PTHADD(T7) ;[211] GET DEFAULT SFD NAME
SKIPN (T7) ;[211] SEE IF HE SPECIFIED ANYTHING
MOVEM T5,(T7) ;[211] NO, USE DEFAULT
CAIE 0,"," ;[211] SEE IF ANY MORE
JRST GTPTH4 ;NO
MOVEI T7,1(T7) ;ADVANCE BYTE POINTER
CAIGE T7,PTHSFD+PTHLEN-1 ;TOO MANY SFD'S
JRST GTPTH1 ;NO, GET NEXT SFD
ERRPNX </?SFD list too long!/>
GTPTH4: ;[223]
IFN SCANSW,< ;[223]
CAIE 0,"/" ;[223] SEE IF IT'S A SCAN SWITCH
POPJ P, ;[211] NO
PUSHJ P,GETBUF ;[211] YES, GET NEXT CHARACTER
MOVEI T5,.PTSCN ;[211] SET NO SCAN
CAIN 0,"N" ;[211] IF /N
MOVEM T5,PTHADD+.PTSWT;[211] SET NO SCAN SWITCH
MOVEI T5,.PTSCY ;[211] SET SCAN
CAIN 0,"S" ;[211] IF /S
MOVEM T5,PTHADD+.PTSWT;[211] SET SCAN SWITCH
PUSHJ P,GETBUF ;[211] BYPASS SWITCH
>;[223] END IFN SCANSW
POPJ P,
;PUT PATH ADDRESS IN AC0
;SKIP IF ZER0, NON-SKIP IF FULL PATH IN USE
SETPTH: MOVE 0,@(P) ;[353] GET THE ADDRESS OF THE PPN IN QUESTION
MOVE 0,@0 ;[353] GET THE PPN OR PATH POINTER
JUMPE 0,CPOPJ1 ;[353] NO PROBLEM IF NONE
TLNE 0,-1 ;[353] OR IF A REAL PPN
JRST CPOPJ1 ;[353]
SKIPN JOBPTH ;[353] DOES THIS MONITOR HAVE PATHS?
JRST STPTH1 ;[353] NO, FIX UP
MOVS 0,0 ;[353] YES, COPY FROM WHERE IT IS
HRRI 0,WRKPTH ;[353] TO THE WORK AREA
BLT 0,WRKPTH+PTHLEN+3 ;[353]
MOVEI 0,WRKPTH ;[353] POINT TO THE PATH BLOCK
POPJ P, ;[353]
STPTH1: ADDI 0,2 ;[353] [212] YES, GET PPN SO NON-PATHING
MOVE 0,@0 ;[353] MONITORS DO NOT LOSE
MOVE 0,@0 ;[212] MONITORS DO NOT LOSE
POPJ P, ;[212] AND LET NORMAL RETURN STORE IT
;HERE TO FIGURE OUT WHAT PPN TO USE FOR LOOKUPS OR UFD READS
;USE ANY SPECIFIED PPN'S, OVERRIDDEN BY ANY ERSATZ DEVICES.
;ALLOW ERSATZ DEVICES WITH SFD SPECS.
;CALL PUSHJ P,DSKPPS ;[321] (OR DSKPPZ FOR /Z)
; ALWAYS RETURN, PPN OR PATH POINTER OR 0 IN T1
DSKPPS: SKIPN T1,PP ;[321] IS THERE A SPECIFIC PPN?
MOVE T1,PPP ;[321] OR A STICKY ONE?
DSKPPZ: ;[321] ENTRY FOR /Z
SKIPN T2,DEVPP ;[321] IS THIS AN ERSATZ DEVICE?
POPJ P, ;[321] NO, RETURN PPN IN T1
SKIPE T1 ;[321] IF NO GIVEN PPN, RETURN ERSATZ
TLNE T1,-1 ;[321] IF PATH GIVEN, PUT ERSATZ IN PATH BLOCK
SKIPA T1,T2 ;[321] NO PPN OR ONE NEEDING OVERRIDDING
MOVEM T2,.PTPPN(T1) ;[321] PATH BLOCK, PUT ERSATZ THERE
POPJ P, ;[321] AND RETURN
SUBTTL READ DIRECTORY FOR WILD CARDS AND /L/F/R/D
;PREPARE TO LOOKUP FILES IN PARTICULAR DISK DIRECTORY
DIRSK1: MOVE T1,DTONEX+.RBPPN ;[274][273][271] ENTRY FOR /Z.... BE CAREFUL
PUSH P,DEVPP ;[274][271] SAVE INPUT ERSATZ PPN
MOVE 0,ODEV ;[271] GET OUTPUT DEVICE NAME
PUSHJ P,PSYSP ;[271] AND SEE IF IT HAS ANY PPN
PUSHJ P,DSKPPZ ;[321] GO DO ANY ERSATZ PPN'S
POP P,DEVPP ;[321] RESTORE INPUT, IF ANY
SKIPA ;[321] FALL INTO DSKDIR
DSKDIR: PUSHJ P,DSKPPS ;[321] FIGURE OUT WHAT PPN TO USE
JUMPN T1,DSKDRB ;[163] SEE IF ANY SPECIFIED
MOVE T1,[XWD JOBPTH,PTHADD] ;[211] GET DEFAULT PATH
BLT T1,PTHADD+PTHLEN+3 ;[211] AS PATH TO USE
MOVEI T1,PTHADD ;[353] POINT AT PATH BLOCK
DSKDRB: MOVEM T1,FNPPN ;[134] NO
MOVEM T1,UFDPPN ;[211] SAVE PPN FOR PRINTOUT
TLNN T1,-1 ;[211] SEE IF REALLY PATH POINTER
MOVE T1,.PTPPN(T1) ;[211] YES, GET PPN IN CASE NO SFD'S
MOVE 0,[XWD FILNAM,UFD]
BLT 0,UFD+3 ;SAVE LOOKUP BLOCK
MOVEM T1,FILNAM ;[P,P] TO UFD
MOVSI 0,'UFD'
MOVEM 0,FILEX ;USER HAS SPECIFIED [P,P]
MOVE 0,MFDPPN ;[163] GET PPN OF MFD'S
IFN LEVELC,< ;[211]
MOVEM 0,PP ;[211] SAVE PP IN SHORT LOOKUP FOR C
>;[211] END IFN LEVELC
MOVEM 0,PPN ;SAVE FOR EXTENDED LOOKUP
PUSHJ P,DSKDST ;INIT TO READ DIRECTORY
;**;[520] Change 1 line at DSKDRB+15L RLUSK 7-January-1982
MOVEI T1,.RBPCA ;[520] [273] LENGTH FOR EXTENDED LOOKUP
MOVEM T1,RIBFIR
SKIPE PTHSFD ;[211] ANY SFD SPECIFIED
JRST SFDDIR ;YES, LOOKUP PATH
IFN LEVELC,< ;[322]
MOVE T1,LEVEL ;LEVEL D = -2
LOOKUP DIR,FILNAM(T1) ;GET USERS FILE DIRECTORY
JRST DERR5A ;ONE OF MANY LOOKUP ERRORS
>;[322] END IFN LEVELC
IFE LEVELC,< ;[322]
LOOKUP DIR,RIBFIR ;[322] GET USERS FILE DIRECTORY
JRST DERR5A ;[322] ONE OF MANY LOOKUP ERRORS
>;[322] END IFE LEVELC
DIRSK2: MOVS T1,[XWD FILNAM,UFD]
BLT T1,PP ;RESTORE LOOKUP BLOCK
POPJ P, ;LOOKUP OK
;HERE TO DO LOOKUP ON SPECIFIED PATH
SFDDIR: MOVSI 0,'SFD' ;CHANGE EXTENSION
MOVEM 0,FILEX ;TO EXPECTED
MOVEI 0,PTHADD ;ADDRESS OF FULL PATH
MOVEM 0,PPN ;THIS IS THE DIRECTORY REQUIRED
MOVEM 0,UFDPPN ;[211] SAVE POINTER FOR PRINTOUT
MOVEI T1,PTHSFD+PTHLEN ;LOOP FOR ALL SFD'S
MOVE T2,(T1) ;[211] GET A POSSIBLE SFD NAME
SKIPN T2 ;[211] END LOOP WHEN NON-ZERO
SOJA T1,.-2 ;NOT YET
SETZM (T1) ;BACKUP PATH ONE SFD
MOVEM T2,FILNAM ;[211] THIS IS NAME OF FILE WE WANT TO LOOK UP
PUSHJ P,SETPTH ;[211] GO MOVE PATH TO WORK AREA
MOVEM 0,PPN ;[211] AND SAVE POINTER
LOOKUP DIR,RIBFIR ;GIVE IT A TRY
JRST DERR5S ;[211] .SFD FAILED, ERROR DIFF FROM UFD
MOVEM T2,(T1) ;[211] RESTORE FULL PATH SPEC
JRST DIRSK2 ;[322] AND RETURN TO COMMON CODE
SUBTTL DISK DIRECTORY LISTS
;ROUTINE TO LIST DISK DIRECTORY. /L OR /F SWITCH
SYN AB,FILCNT ;COUNT OF NUMBER OF FILES FOUND
SYN MTAREQ,FILERR ;ERROR BIT IN FILE
DSKLST: TLNE FL,TSKIN ;[312] NO DIRECTORIES FOR TSK:
JRST ERR15 ;[312] YOU LOSE
PUSHJ P,ININIT ;[312] ASSIGN "IN" FOR RETRIEVAL INFO
SETZM BLKSUM ;CLEAR TOTAL BLOCKS FOR ALL FILES
SETZM FILCNT ;START AT ZERO
SETZM LIN ;SET UP APPROPRIATE CONTROLS
MOVS T1,ODEV ;FOR THIS LISTING DEVICE
CAIN T1,'TTY' ;IF ODEV IS TTY
TRO CALFLG,LISTTY ;SET LISTTY=1 (TTY)
SKIPN FILNAM ;IF NO FILNAM GIVEN
TRZ CALFLG,MATFN!MATEX ;LIST ALL OF DIRECTORY
MOVE T1,FILNAM
MOVEM T1,MATCH
HLRZ T1,FILEX
MOVEM T1,MATCH+1
PUSHJ P,DSKDIR
PUSHJ P,CRLF ;GIVE A BLANK LINE
TRNN AUXFLG,FFLG ;SHORT LISTING
PUSHJ P,HEADER ;PUT OUT HEADER LINES
TLO CALFLG,LPPFLG ;OUTPUT PPN LATER
PUSHJ P,INITFS ;INIT F/S SEARCH LIST
JRST LSTU0A ;NOT GENERIC "DSK"
LSTU0: PUSHJ P,NXTFSU ;GET NEXT F/S IN LIST
JRST DIRFIN ;NO MORE
LSTU0A: TLO CALFLG,LDVFLG ;SIGNAL NEW DEVICE TO OUTPUT
LSTU1: SOSLE UFDIN+2
SKIP 2
LSTU2: PUSHJ P,UIN ;GO READ DIRECTORY
JRST BLKLST ;(EOF) - OUTPUT BLOCKS USED
ILDB 0,UFDIN+1
JUMPE 0,LSTU2
MOVEM 0,FILNAM ;PREPARE TO GET RETRIEVAL INFO
MOVE T1,FNPPN ;EACH LOOKUP DESTROYS P-P NO.
MOVEM T1,PPN ;[353] RESTORE PPN NO.
MOVEM T1,FILNAM+3 ;RESTORE P-P NO.
SKIPG LIN
PUSHJ P,HEDR3 ;YES, PUT OUT HEADER LINES
SOS UFDIN+2
ILDB DOUT,UFDIN+1 ;PICK UP EXTENSION
HLRZS DOUT ;CLEAR RIGHT HALF
HRLZM DOUT,FILNAM+1 ;KEEP FOR LOOKUP
TLNE CALFLG,MFLG ;NEED TO MASK?
JRST MLSTU ;YES
TRNN CALFLG,MATEX ;MATCH EXTENSIONS?
SKIP 2 ;NO,TRY MATFN
CAME DOUT,MATCH+1 ;MATCH?
JRST LSTU1 ;NO,GET NEXT FILE
TRNN CALFLG,MATFN ;MATCH FILENAME?
JRST LSTU2A ;NO
CAME 0,MATCH ;FILNAM MATCH?
JRST LSTU1 ;NO
LSTU2A: CAIE DOUT,'UFD' ;IS FILE MFD
JRST LSTU3 ;GO PRINT NAME HELD IN 0.
HLRZ DOUT,FILNAM ;HERE FOR MFD ONLY
MOVEI T2,PUT
PUSHJ P,OUTOCT ;PRINT #,#. PROJ. NO.
MOVEI CHR,COMMA ;","
PUSHJ P,PUT ;...
HRRZ DOUT,FILNAM ;PROG. NO.
PUSHJ P,OUTOCT
JRST LSTU3A ;...
LSTU3: MOVE 0,FILNAM
PUSHJ P,SIXOUT ;OUPUT FILENAME
LSTU3A: MOVEI T4,5 ;SET LOOP FOR OUTPT EXT
MOVE 0,FILEX
JUMPE 0,LSTU4
PUSHJ P,TABOUT
PUSHJ P,SIXOUT ;OUTPUT EXTENSION
LSTU4: AOS FILCNT ;COUNT ONE MORE FILE SEEN
TRNN AUXFLG,FFLG ;SHORTEST LISTING?
SKIP 2
PUSHJ P,CLRF ;YES
JRST LSTU1
SKIPN FILEX
PUSHJ P,TABOUT ;ACCOUNT FOR LACK OF EXTENSION
PUSHJ P,SPACES
PUSHJ P,SETPTH ;[211] GO SET UP PATH
MOVEM 0,PPN ;[211] AND SET POINTER
IFN LEVELC,< ;[322]
MOVE T4,LEVEL ;-2 IF LEVEL D,0 IF LEVEL C
LOOKUP IN,FILNAM(T4) ;GET RETRIEVAL INFO.
JRST LSTU5 ;NOT AVAILABLE
JUMPE T4,LSTU4A ;LEVEL C OR NO UFD ERRORS
>;[322] END IFN LEVELC
IFE LEVELC,< ;[322]
LOOKUP IN,RIBFIR ;[322] GET RETRIEVAL INFO
JRST LSTU5 ;[322] NOT AVAILABLE
>;[322] END IFE LEVELC
HRRZ DOUT,RIBFIR+.RBSTS ;[273] FILE ERROR STATUS
ANDI DOUT,777 ;ONLY ERROR BITS
MOVEM DOUT,FILERR ;STORE ERROR BIT OR ZERO
LSTU4A: PUSHJ P,BLKS ;DETERMINE NO. BLK IN FILE
;AND TOTAL FOR UFD
LDB 0,PROT ;GET PROTECTION BITS
PUSHJ P,PROTO ;PRINT OCTAL NUMBERS
TRNE CALFLG,LISTTY ;OUTPUT DEVICE A TTY?
JRST LSTU7 ;YES, SKIP LONG DIRECTORY
LDB 0,ADATE ;PRINT ACCESS DATE
PUSHJ P,DATOUT
PUSHJ P,TABOUT
LDB 0,CTIME ;PRINT CREATION TIME
PUSHJ P,TIMOUT
LDB 0,CDATE
LDB T1,XCDATE ;[132] HIGH ORDER BITS
DPB T1,[POINT 3,0,23] ;[132] MERGE
PUSHJ P,DATOUT ;PRINT CREATION DATE
PUSHJ P,SPACE2
LDB 0,MODE ;PRINT MODE
PUSHJ P,OCTLS2
JRST LSTU8
LSTU5: PUSHJ P,TABOUT ;THE FILE WAS PROTECTED
HRRZ T7,FILEX ;GET PARTICULAR ERROR TYPE
CAIL T7,TABLND-TABLE ;IS IT LEGAL ERROR
PUSHJ P,DERRQ ;NO,PICK UP CATCH ALL MESSAGE
MOVE T1,TABLE(T7) ;PICK UP POINTER FOR ERROR MSG
LSTU6: ILDB CHR,T1 ;PICK UP CHAR FROM ERROR MSG
JUMPE CHR,LSTU8 ;PRINT ERROR MESSAGE, END SEEN
CAIN CHR,"!"
JRST LSTU8 ;ALTERNATE END SEEN (!)
IFE REENT,<
PUSHJ P,CCASE> ;DEPOSIT CHARACTER
PUSHJ P,PUT
JRST LSTU6
LSTU7: LDB 0,CDATE
LDB T1,XCDATE ;[132] HIGH ORDER BITS
DPB T1,[POINT 3,0,23] ;[132] MERGE
PUSHJ P,DATOUT ;PRINT CREATION DATE ONLY FOR TTY
LSTU8: CLOSE IN,
SKIPE DOUT,FILERR ;ANY FILE ERRORS
PUSHJ P,ERROUT ;YES, LIST CODE INSIDE PARENS.
PUSHJ P,LSTU8A ;COMMON ROUTINE TO OUTPUT "DEV:[PPN]"
JRST LSTU1
LSTU8A: TLZN CALFLG,LDVFLG ;DEVICE TO OUTPUT?
JRST LSTU9 ;NO
PUSHJ P,SPACE2
MOVE 0,ADSK ;GET F/S NAME
PUSHJ P,SIXOUT ;PRINT IT
MOVEI CHR,":" ;FOLLOW WITH COLON
PUSHJ P,PUT
LSTU9: TLZN CALFLG,LPPFLG ;PPN TO LIST?
JRST LSTU9A ;NO
PUSHJ P,SPACE2
MOVEI CHR,"[" ;FORM PPN
PUSHJ P,PUT
MOVE T5,UFDPPN ;[211] GET PPN OR POINTER TO PATH
TLNN T5,-1 ;[211] SEE IF PATH
MOVE T5,.PTPPN(T5) ;[211] YES, GET PPN FROM PATH
HLRZ 0,T5 ;[211] PUT PROJECT NUMBER IN 0
PUSHJ P,OCTLST
MOVEI CHR,","
PUSHJ P,PUT
HRRZ 0,T5 ;[211] GET PROGRAMMER NUMBER
PUSHJ P,OCTLST
MOVE T5,UFDPPN ;[211] GET PPN
TLNE T5,-1 ;[211] SEE IF IT IS POINTER TO PATH
JRST LSTU9B ;[211] NO, SKIP SFD PRINT
MOVEI T5,.PTPPN+1(T5) ;[211] START AT FIRST SFD
LSTU9C: MOVE 0,(T5) ;[211] GET SFD NAME
JUMPE 0,LSTU9B ;[211] 0 ENDS LIST
MOVEI CHR,"," ;[211] PUT COMMA'S BETWEEN
PUSHJ P,PUT ;[211] OUTPUT ,
PUSHJ P,SIXOUT ;[211] OUTPUT SFD NAME
AOJA T5,LSTU9C ;[211] LOOP TILL NULL SFD NAME
LSTU9B: ;[211]
MOVEI CHR,"]"
PUSHJ P,PUT
LSTU9A: JRST CLRF ;PRINT CR-LF AND RETURN
ERROUT: PUSHJ P,SPACE2 ;SEPARATE BY SOME SPACES
MOVEI CHR,"(" ;PUT ERROR CODE IN PARENS
PUSHJ P,PUT
SKIPA T4,[POINT 7,[ASCII /a*cm**rwf*/]]
LSH DOUT,-1 ;SHIFT ERROR BIT TOWARDS BIT 35
ILDB CHR,T4 ;GET AN ERROR CHARACTER
TRNN DOUT,1 ;IS IT THIS ERROR?
JRST .-3 ;NO
PUSHJ P,PUT ;YES,OUT IT GOES
MOVEI CHR,")"
JRST PUT ;RETURN
DIRFIN: SKIPE FILCNT ;HAVE WE SEEN ANY FILES?
JRST MAIN1 ;YES, EXIT
;[177] TELL USER HE DOESN'T HAVE ANY OF THOSE, AND TELL HIM WHICH
ERRPNT </Directory has no such files as />;[177]
MOVE 0,MATCH ;[177] MOVE NAME AND EXTENSION TO
MOVEM 0,FILNAM ;[177] FILNAM FOR FN.EX TO PRINT OUT
HRLZ 0,MATCH+1 ;[177] AFTER ERR3AC FIGURES OUT ANY
MOVEM 0,FILNAM+1 ;[177] WILD CARD STUFF
PUSHJ P,ERR3AC ;[177] GO PRINT FILNAM, IF OUTPUT IS TTY
;[177] IT WILL BE REOPENED HERE
JRST MAIN1 ;[177] GO SEE IF ANY MORE TO DO
;**;[505] Insert a page after DIRFIN routine RLUSK 25-Nov-80
COMMENT ~
RENTST IS ENTERED ON RENAMES (AND PROTECTS) AND SETS UP THE
INPUT AND OUTPUT PATH SPECIFICATIONS AS FOLLOWS:
OUTPUT PATH SPECIFIED?
YES NO
-------------------------------------------------
! USE OUTPUT PATH ! USE INPUT PATH !
! AS SPECIFIED ! FOR OUTPUT PATH !
YES ! ! !
! USE INPUT PATH ! USE INPUT PATH !
! AS SPECIFIED ! AS SPECIFIED !
INPUT PATH !-----------------------------------------------!
SPECIFIED? !-----------------------------------------------!
! USE OUTPUT PATH ! USE DEFAULT PATH !
! AS SPECIFIED ! FOR OUTPUT PATH !
NO ! ! !
! USE DEFAULT PATH ! USE DEFAULT PATH !
! FOR INPUT PATH ! FOR INPUT PATH !
-------------------------------------------------
~
RENTST: ;[505]
;[505]
;[505] WAS AN OUTPUT PATH (OR PPN) GIVEN?
;[505]
SKIPN DTON+3 ;[505] IF DTON+3 IS ZERO, NO OUTPUT
;[505] PATH HAS BEEN GIVEN
JRST RENTT3 ;[505] NO OUTPUT PATH SPECIFIED
RENTT1: SKIPE PP ;[505] HAS AN INPUT PATH (OR PPN) BEEN GIVEN?
JRST RENTT2 ;[505] YES -- AN INPUT PATH EXISTS
;[505]
;[505] THIS CODE IS REACHED WHEN AN OUTPUT PATH EXISTS AND NO INPUT PATH
;[505] HAS BEEN GIVEN. THIS JUMPS TO THE END OF RENTST ROUTINE
;[505]
JRST RENEND ;[505] NO INPUT PATH SPECIFIED, RETURN
RENTT2: ;[505]
;[505]
;[505] THIS CODE IS ENTERED WHEN AN OUTPUT PATH AND INPUT PATH BOTH EXIST
;[505] THIS ALSO JUMPS TO THE END OF RENTST ROUTINE.
;[505]
JRST RENEND ;[505] RETURN
RENTT3: ;[505]
;[505]
;[505] NO OUTPUT PATH EXISTS
;[505]
SKIPN PP ;[505] IS THERE AN INPUT PATH?
JRST RENEND ;[505] NO -- RETURN AND USE DEFAULTS
RENTT4: ;[505]
;[505]
;[505] NO OUTPUT PATH EXISTS, BUT AN EXPLICIT INPUT PATH HAS BEEN GIVEN.
;[505] THEREFORE, COPY THE INPUT PATH INTO THE OUTPUT PATH
;[505]
MOVE T1,[XWD PTHADD,PTHOUT] ;[505] SET UP FOR COPY OF PATH
HRRZM T1,DTON+3 ;[505] AND SET POINTER TO OUTPUT PATH
BLT T1,PTHOUT+PTHLEN+3 ;[505] COPY THE PATH
JRST RENEND ;[505] RETURN
;[505]
;[505] A COMMON RETURN IS USED TO KEEP THIS MAINTAINABLE
;[505]
RENEND: JRST DSKDRE ;[505] RETURN
MLSTU: TRNN CALFLG,MATFN ;MATCH FILE NAME
JRST MLSTU1 ;NO, TRY EXT
XOR 0,MATCH
ANDCM 0,QMASK
JUMPN 0,LSTU1 ;MATCH FAILED
MLSTU1: TRNN CALFLG,MATEX ;MATCH EXT
JRST LSTU2A ;NO
XOR DOUT,MATCH+1
ANDCM DOUT,QMASK+1
JUMPN DOUT,LSTU1 ;FAILED
HLRZ DOUT,FILNAM+1 ;[226] RESTORE EXTENSION (I.E. 'UFD')
JRST LSTU2A ;MATCH FOUND
;ROUTINE TO OUTPUT SPACES, T4=NO. TO OUTPUT
SPACE2: MOVEI T4,2 ;SET FOR 2 SPACES
SPACES: MOVEI CHR,SPACE
PUSHJ P,PUT
SOJG T4,.-1
POPJ P,
;ROUTINE TO DEPOSIT SIXBIT CHARACTERS
;FROM AC0 INTO OUTPUT BUFFER
;DECREMENTING COUNT IN T4
SIXOUT: MOVSI T2,(POINT 6,0,5);[320] SET UP BYTE POINTER
SIXO1: JUMPE 0,CPOPJ ;[320] DONE IF NOTHING LEFT
LDB CHR,T2 ;[320] GET LEFT MOST CHARACTER
ADDI CHR,SPACE ;[320] MAKE IT ASCII
PUSHJ P,PUT ;[320] ADD TO BUFFER
LSH 0,6 ;[320] ON TO NEXT BYTE
SOJA T4,SIXO1 ;[320] COUNTING THIS ONE
;DETERMINE NUMBER OF BLOCKS PER FILE AND TOTAL NUMBER OF
;BLOCKS USED BY USERS PROJECT,PROGRAMMER NUMBER
BLKS: MOVEI T2,PUT ;SET OUTPUT
MOVE DOUT,RIBFIR+.RBSIZ ;[273]
IFE LEVELC,< ;[322]
JRST BLKSE ;[322] CONVERT TO BLOCKS
>;[322] END IFE LEVELC
IFN LEVELC,< ;[322]
SKIPE LEVEL ;SKIP IF LEVEL C
SKIP 3 ;LEVEL D WORD COUNT
HLRE DOUT,PP ;GET WORD COUNT OF FILE
>;[322] END IFN LEVELC
BLKSD: JUMPGE DOUT,BLKADD ;IF POS = NO. OF BLOCKS
MOVNS DOUT ;MAKE POSITIVE
BLKSE: TRZE DOUT,177 ;[322] TAKE CARE OF PARTIAL BLOCKS
ADDI DOUT,200
IDIVI DOUT,200 ;CALCULATE BLOCK COUNT
BLKADD: ADDM DOUT,BLKSUM ;CALCULATE TOTAL FOR ALL FILES
TRNE FLAG,DFLG ;IF /D
POPJ P, ;JUST RETURN
PUSHJ P,OUTDE4 ;OUTPUT NUMBER OF BLOCKS IN DECIMAL
JRST SPACE2 ;RETURN WITH 2 SPACES
;END OF FILE ON UFD OUTPUT TOTAL BLOCKS XXX
BLKLST: SKIPN BLKSUM ;ANY INFORMATION TO OUTPUT
JRST BLKLS1 ;NO - FINISHED
LSTLIN TOTAL ;OUTPUT CR,LF "TOTAL BLOCKS"
MOVE DOUT,BLKSUM
MOVEI T2,PUT ;SET OUTPUT
PUSHJ P,OUTDE4 ;PRINT TOTALS
PUSHJ P,CRLF ;BONUS CR-LF
BLKLS1: SKIPN GENERI ;MORE FILE STRUCTURES?
JRST MAIN1 ; FINISHED
SETZM BLKSUM ;START AFFRESH
MOVE T1,UFDPPN ;[211] RESTORE PP
MOVEM T1,PP
JRST LSTU0 ;YES
TOTAL: ASCIZ /
Total Blocks /
IFE REENT,<
CCASE: CAIL CHR,"a" ;FLUSH LOWER CASE LETTERS
CAILE CHR,"z" ;FROM OUTPUT IN CASE PDP-6 LPT
POPJ P,
SUBI CHR,40
POPJ P,>
SUBTTL SET UP DIRECTORY CHANNEL
;INPUT USERS FILE DIRECTORY
UIN: SETZ IOS, ;JUST IN CASE
IN DIR,
JRST CPOPJ1 ;NO ERRORS
STATUS DIR,IOS
TXZN IOS,IO.EOF
JRST UIN2 ;ERROR PRINT
POPJ P,
;INIT DIRECTORY DEVICE
DSKDST: MOVE T2,.JBFF ;SAVE JOBFF IN T2
MOVEI T1,DBUF
MOVEM T1,.JBFF ;MAKE MONITOR USE DBUF FOR DISK DIR.
MOVX T1,.IOBIN ;BINARY MODE
SKIPE GENERI ;[151] SEE IF IT WAS A GENERIC SPEC
TXO T1,UU.PHS ;[151] YES, SET PHYSICAL-ONLY TO AVOID AMBIGUITY
MOVEM T1,ADSK1
MOVEI T1,UFDIN ;LOC OF DIRECTORY ENTRY
MOVEM T1,ADSK+1 ;FOR UFD
OPEN DIR,ADSK1
JRST ERR1A
INBUF DIR,1 ;RESET JOBFF SAME AS ENTRY
MOVEM T2,.JBFF
POPJ P,
SUBTTL MISCELLANEOUS DIRECTORY LIST ROUTINES
;OUTPUT THE DIRECTORY LISTING HEADER
HEDR3: TRNN AUXFLG,FFLG ;POP BACK IF SHORT LISTING
TRNE CALFLG,LISTTY
POPJ P,
HEADER: PUSHJ P,HEDR4
HEDR1: LSTLIN HEDL1
DATE ;DATE REQ.
PUSHJ P,DATOUT
PUSHJ P,TABOUT
PUSHJ P,NOWOUT ;PRINT CURRENT TIME, DATE
AOS PGCNT ;INCREMENT PAGE COUNT
LSTLIN HEDPG
MOVE 0,PGCNT ;GET PAGQ NUMBER
IDIVI 0,^D10 ;DECIMAL PAGES
JUMPE 0,.+4
MOVE CHR,0
ADDI CHR,"0" ;[246] CONVERT TO ASCII
PUSHJ P,PUT
MOVEI CHR,"0"(1)
PUSHJ P,PUT
SOS LIN
LSTLIN HEDLIN
HEDR2: JRST CLRF
HEDLIN: ASCIZ /
Name Extension Len Prot Access ---Creation--- Mode
/
HEDL1: ASCIZ / Directory listing /
HEDPG: ASCIZ / Page /
UIN2: PUSHJ P,COMERR
JSP T5,INICN2
ERRPN2 </?Disk directory read />
MOVEI T3,UFD ;LOCATION OF FILENAME(AND EXT)
PUSHJ P,FN.EX ;PRINT FILE NAME EXTENSION
MOVE T2,AUXFLG
ANDI T2,DSKIN
PUSHJ P,IOERR
SETSTS DIR,(IOS)
JRST CPOPJ1
;OUTPUT THE TIME FOUND IN AC 0
NOWOUT: MSTIME ;CALL MILLISEC TIMER
IDIVI 0,^D60000 ;CONVERT TO MINUTES
TIMOUT: IDIVI 0,^D60
MOVE DOUT,0
PUSHJ P,OUTDEC
MOVEI CHR,":" ;SEPARATE BY A COLON
PUSHJ P,PUT
MOVE DOUT,1
PUSHJ P,OUTDEC
JRST TABOUT
;SKIP TO HEAD OF FORM OR NEXT HALF PAGE, RESET COUNT
HEDR4: TRNE CALFLG,LISTTY
JRST [POP P,(P) ;BACKUP ONE LEVEL
POPJ P,] ;AND EXIT IF TTY
SKIPLE LIN
JRST HEDR6 ;ANYTHING ON THIS PAGE?
HEDR5: MOVEI CHR,FF ;FORM FEED IF FULL OR
MOVEI T2,^D50
HEDR5A: MOVEM T2,LIN ;ALMOST FULL
PUSHJ P,PUT
MOVEI CHR,LF
PUSHJ P,PUT
PUSHJ P,PUT
JRST PUT ;PRINT LINEFEEDS AND EXIT
HEDR6: CAIGE T2,^D25
JRST HEDR5
MOVEI CHR,HPAGE
MOVEI T2,^D16
JRST HEDR5A
;OUTPUT OCTAL WORD FOUND IN AC 0
OCTLS2: MOVEI CHR," "
CAIGE 0,10 ;AT LEAST 2 CHAR.?
PUSHJ P,PUT ;NO,SO OUTPUT A BLANK
OCTLST: MOVSI T1,(POINT 3,0)
ILDB CHR,T1
TLNE T1,770000 ;ALLOW UPTO 12 OCTAL NOS
JUMPE CHR,.-2 ;GET MOST SIG. NUMBER
OCTL1: ADDI CHR,60 ;CONVERT TO ASCII
PUSHJ P,PUT ;OUTPUT CHAR
ILDB CHR,T1 ;GET SUCCEEDING CHARS
TLNN T1,400000 ;WAIT TILL POINTING TO NEW
JRST OCTL1 ;WORD, THEN EXIT. MEAN WHILE
POPJ P, ;PRINT OCTAL NUMBERS
;OUTPUT PROTECTION BITS FOUND IN AC 0
PROTO: MOVEI CHR,"<"
MOVSI T1,(POINT 3,,26)
PUSHJ P,OCTL1+1
MOVEI CHR,">"
PUSHJ P,PUT
MOVEI T4,3 ;SET FOR THREE SPACES
JRST SPACES ;AND EXIT
SUBTTL DISK ENTER/LOOKUP/RENAME ERROR PRINTER
;THIS IS THE DISK ERROR ROUTINE. CALL DERR4 WITH T3=FIRST WORD ADDRESS
;OF LOOKUP OR ENTER. USE T7 FOR SAVING THE ERROR CODE.
DERR5A: MOVEI T3,FILNAM ;LOCATION OF FILENAME
HRRZ T7,1(T3) ;GET ERROR CODE
SKIPE GENERI ;FATAL IF NOT GENERIC "DSK"
CAILE T7,ERIPP% ;NO UFD IF 0 OR 1
JRST DERR4 ;ANY OTHER ERROR
TRNN AUXFLG,FFLG ;[174] ONLY OUTPUT %NO UFD IF DOING
TRNE FLAG,LFLG ;[174] /L OR /F
SKIPN STRARG ;[163] IF DOING SYS: SEARCH LIST
JRST DERR5B ;[163] THEN IGNORE MISSING UFD'S
LSTLIN NOUFD
TLO CALFLG,LDVFLG!LPPFLG ;PRINT "DEV:[PPN]"
PUSHJ P,LSTU8A
TLO FL,LDVFLG!LPPFLG ;[163] RESET TO PRINT DEV AND PP AGAIN
DERR5B: ;[163]
SOS (P) ;[127] CORRECT RETURN ADDRESS
SOS (P) ;[127] TO MAINAD OR LSTU0
JRST DIRSK2 ;GET NEXT FILE STRUCTURE
NOUFD: ASCIZ /%No UFD exists for / ;[242]
;HERE IF THE SFD LOOKUP FAILED
DERR5S: MOVEI T3,FILNAM ;[211] GET ADDRESS OF LOOKUP BLOCK
HRRZ T7,1(T3) ;[211] GET LOOKUP ERROR CODE
CAIE T7,ERSNF% ;[211] ONLY ACCEPT ERROR 23
CAIG T7,ERIPP% ;[243] OR 0 OR 1
SKIPN GENERI ;[211] AND ONLY ON NON-GENERIC
JRST DERR4 ;[211] FATAL ERROR
MOVEM T2,(T1) ;[211] RESTORE SFD NAME
JRST DERR5B ;[211] AND BACKWARDS SKIP RETURN
DERR7Z: MOVE T3,DTON ;RECOVER NAME
MOVEM T3,ZRF
JRST DERR5R ;PRINT AND RETURN
DERR6R: TRO CALFLG,RTRNFL
DERR6: MOVEI T3,DTON ;LOCATION OF FILENAME (OUTPUT)
JRST DERTYP
DERR7: HRRZ T3,DTON+1 ;GET ERROR CODE
CAIN T3,ERAEF% ;IF RENAME ERROR =4
JRST DERR6R ;USE OUTPUT NAME
HRRM T3,ZRF+1 ;PUT IT IN EXPECTED PLACE
DERR5R: TRO CALFLG,RTRNFL ;SET TO RETURN FROM ERROR PRINTER
DERR5: MOVEI T3,ZRF ;LOCATION OF FILENAME (INPUT)
DERTYP: HRRZ T7,1(T3) ;ERROR TYPE
DERR4: ERRPNT </? />
PUSHJ P,FN.EX ;PRINT FILE NAME .EXT
CAIL T7,TABLND-TABLE ;LEGAL ERROR?
PUSHJ P,DERRQ ;NO USE CATCHALL MESSAGE
MOVE T1,TABLE(T7) ;PICK UP BYTE POINTER
JRST PTEXT1 ;AND PRINT MESSAGE
DERRQ: MOVEI CHR,"(" ;ENCLOSE ERROR NUMBER IN PARENS.
PUSHJ P,PUTCON ;OUTPUT IT
MOVE 0,T7 ;GET ERROR NUMBER
MOVEI T7,TABLND-TABLE ;SETUP MESSAGE
DERRQ1: IDIVI 0,10 ;[317] GET RIGHTMOST DIGIT
HRLM 1,(P) ;[317] SAVE IT ON STACK
SKIPE 0 ;[317] ENOUGH ALREADY?
PUSHJ P,DERRQ1 ;[317] NOT YET
HLRZ CHR,(P) ;[317] GET NEXT DIGIT BACK
ADDI CHR,"0" ;[317] MAKE IT ASCII
JRST PUTCON ;PRINT REMAINDER AND RETURN
TABLE: POINT 7,[ASCII /(0) file was not found!/]
POINT 7,[ASCII /(1) no directory for project-programmer number!/]
POINT 7,[ASCII /(2) protection failure!/]
POINT 7,[ASCII /(3) file was being modified!/]
POINT 7,[ASCII /(4) rename file name already exists!/]
POINT 7,[ASCII /(5) illegal sequence of UUOs!/]
POINT 7,[ASCII /(6) bad UFD or bad RIB!/]
POINT 7,[ASCII /(7) not a SAV file!/]
POINT 7,[ASCII /(10) not enough core!/]
POINT 7,[ASCII /(11) device not available!/]
POINT 7,[ASCII /(12) no such device!/]
POINT 7,[ASCII /(13) not two reloc reg. capability!/]
POINT 7,[ASCII /(14) no room or quota exceeded!/]
POINT 7,[ASCII /(15) write lock error!/]
POINT 7,[ASCII /(16) not enough monitor table space!/]
POINT 7,[ASCII /(17) partial allocation only!/]
POINT 7,[ASCII /(20) block not free on allocation!/]
POINT 7,[ASCII /(21) can't supersede (enter) an existing directory!/]
POINT 7,[ASCII /(22) can't delete (rename) a non-empty directory!/]
POINT 7,[ASCII /(23) SFD not found!/]
POINT 7,[ASCII /(24) search list empty!/]
POINT 7,[ASCII /(25) SFD nested too deeply!/]
POINT 7,[ASCII /(26) no-create on for specified SFD path!/]
POINT 7,[ASCII /(27) segment not on swap space!/]
POINT 7,[ASCII /(30) cannot update file!/]
POINT 7,[ASCII /(31) LOW segment overlaps HIGH segment!/]
POINT 7,[ASCII /(32) not logged in!/]
POINT 7,[ASCII /(33) file has outstanding locks!/] ;[335]
POINT 7,[ASCII /(34) bad EXE directory!/] ;[335]
POINT 7,[ASCII /(35) bad extension for EXE file!/] ;[335]
POINT 7,[ASCII /(36) EXE directory too big!/] ;[335]
POINT 7,[ASCII /(37) network capacity exceeded!/] ;[335]
POINT 7,[ASCII /(40) task not available!/] ;[335]
POINT 7,[ASCII /(41) undefined network node!/] ;[335]
;**;[503] Insert 4 lines at TABLE+33 RLUSK 31-Oct-80
POINT 7,[ASCII /(42) RENAME - SFD is in use by another job!/] ;[503]
POINT 7,[ASCII /(43) DELETE - file has an NDR lock!/] ;[503]
POINT 7,[ASCII /(44) too many readers!/] ;[503]
POINT 7,[ASCII /(45) RENAME - SFD to lower level!/] ;[503]
TABLND: POINT 7,[ASCII /) lookup,enter,or rename error!/]
END PIP1