@ELT,SI TPF$.CHECK,,,135265072623,023 $(1) AXR$ . CONFIG . DEFINE CONFIGURATION PARAMETERS EQUFS . DEFINE TAGS . . THIS ROUTINE VALIDATES EACH DIRECTORY ITEM RETURNED BY DIREC$ . (OR BY DREAD$ FOR SINGLE-FILE MODE) AND DECIDES WHETHER IT IS WORTH . PRINTING. IF SO, IT WILL RETURN TO 'MFD500' IN THE MAIN SEGMENT, . WHERE EITHER OF TWO ACTIONS WILL TAKE PLACE: . . A. IF SORT IS SPECIFIED, RELEASE THE RECORD (LI0 + MI0 + . MI1 + FLAGS) TO THE SORT ROUTINE. . B. IF NO SORT IS SPECIFIED, JUMP TO THE PRINT ROUTINE TO EDIT THE . USEFUL INFORMATION ABOUT THE FILE. . . WHEN SEARCHING DGET FILE, GET LEAD ITEM FIRST...PERFORM WHAT . CHECKS CAN BE DONE ON IT: IF IT PASSES, CHECK ALL MAIN ITEMS . FOR THIS LEAD ITEM. IF IT FAILS, GET ANOTHER LEAD ITEM. . CHK000* TZ SFMODE SINGLE-FILE MODE? J CHK090 ALREADY HAVE MI SEC 0/1 FROM DREAD$ TP USELUT USE DIRLUF$ INSTEAD OF DIRSEC$ J FFOPT1 YES, HANDLE IT CHK001 LA,U A0,LI0 GET L.I. BUFFER ADDRESS TNZ SFMODE2 SINGLE-FILE MODE? LMJ X11,DIRSEC$ NO, GET NEXT L.I./M.I. SECTOR J CHK080 ERROR/EOF RETURN JNZ A0,CHK100 A0=0 IF LEAD ITEM, 1 IF MAIN ITEM . . HAVE LEAD ITEM - PERFORM F,K,I,P,Q (AND O,T) OPTION CHECKS ON IT . IF GOOD, GET MAIN ITEM SEC 0 - IF N.G., GET ANOTHER LEAD ITEM. . CHK002 . ON PROJCK DL A0,PCT+2 GET PROJECT FROM PCT DTE A0,PROJ EQUAL TO PROJECT OF FILE? TZ PRIVLGD NO, PRIVILEGED? J $+2 YES, OK J GALI NO, GET NEW LEAD ITEM OFF PROJCK SZ FLAGS1 CLEAR TAP,GFIL FLAGS SZ RDISC CLEAR RDISC FLAG SZ LISNPD CLEAR L.I. SNAP FLAG ON OLDMFD TZ MFD$F NEW FORMAT MFD FILE? J CHK010 YES, HANDLE FILE TYPE L A0,LI0OLDEQP GET MEDIUM TE,U A0,075 8414/24 TNE,U A0,076 OR 8440 REMOVABLE DISC? S R15,RDISC YES, SET RDISC FLAG TG,U A0,020 TAPE? J CHK020 NO J CHK017 YES, HANDLE IT OFF OLDMFD CHK010 LA A0,FILTYP GET NEW FILE TYPE FIELD JZ A0,CHK020 JUMP IF FIXED MASS STORAGE TNE,U A0,REMTYP REMOVABLE DISC FILE? SR R15,RDISC YES, SET FLAG TE,U A0,TAPTYP TAPE FILE? J CHK020 NO CHK017 . IT'S A TAPE FILE ON OLDSTUFF TP TPT DO WE WANT TAPES? J GALI NO, GET ANOTHER LEAD ITEM OFF OLDSTUFF S R15,TAP SET TAPE FLAG J CHK030 CONTINUE CHK020 . ON OLDSTUFF . . FILE IS NOT A TAPE - DO WE WANT IT? . TZ TPT NOT TAPE: WANT TAPES? EX REVT YES (NO), GET A NEW LEAD ITEM OFF OLDSTUFF . . FILE HAS PASSED TAPE TEST . IF O (OLDSTUFF) OR K-OPTION IS SET, FILE MUST BE REMOVABLE DISC . CHK030 . ON OLDSTUFF TZ OPT WANT REMOVABLE DISC FILES? EX REVO YES, GALI IF NOT REMOVABLE . (NO, GALI IF REMOVABLE) OFF OLDSTUFF TZ KPT K-OPTION SET? JZ RDISC,GALI YES, MUST BE REM DISC . . WE USED TO CHECK FOR G-OPTION FILE HERE, BUT WE FOUND THAT THE . G-OPTION BIT IN THE LEAD ITEM IS UNRELIABLE, SINCE FILES IN AN . F-CYCLE SERIES CAN EACH HAVE DIFFERENT G-OPTION SETTINGS! . SO WE'LL HAVE TO CHECK THE MAIN ITEM BIT INSTEAD. . ON OLDMFD**OLDSTUFF . . IF TAPE EQUIP WAS GIVEN IN SPEC3, CHECK FOR RIGHT TAPE EQUIP . TZ MFD$F OLD FORMAT MFD? J CHK050 NO, MUST CHECK MI0 FOR THIS L A1,TPT GET T-OPTION TNE,U A1,1 IS IT SET (AND NOT REVERSED)? TNZ EQDX AND WAS EQUIP SPEC'D IN SPEC3? J CHK050 NO, CONTINUE TE A0,EQDX RIGHT TAPE EQUIP TYPE? J GALI NO, GET ANOTHER LEAD ITEM CHK050 . OFF OLDMFD**OLDSTUFF TZ LIOPT F,I,Q, OR P OPTION SPEC'D? J 0,X9 YES, CHECK CONDITION J CHK001 NO, GET MAIN ITEM . . DON'T LIKE THIS LEAD ITEM - GET ANOTHER LEAD ITEM . GALI* SZ GOTONE CLEAR DIREC$'S LINCOR FLAG TNZ USELUT DOING ONLY THIS FCYCLE SERIES? J CHK001 NO, GET ANOTHER LEAD ITEM J FFEOF YES, TREAT AS EOF . . DIRSEC ERROR, OR SINGLE-FILE MODE AND FILE HAS BEEN PRINTED . CHK080 TNZ SFMODE2 SINGLE-FILE MODE J DIRECERR NO, HANDLE DIREC$ ERROR ON SORTOK TZ SORT SORT SPECIFIED? J DOSORT YES, DO SORT OFF SORTOK J QF900 ISSUE READ$ FOR ANOTHER FILE . . SINGLE-FILE MODE - ALREADY HAVE MAIN ITEM. . CHK090 SZ SFMODE AVOID LOOPS SZ LISNPD CLEAR L.I. SNAP FLAG . . HAVE MAIN ITEM - LEAD ITEM HAS ALREADY PASSED TESTS . CHK100 SZ BACKEDUP CLEAR BACKED-UP FLAG TZ SFMODE2 IF SINGLE-FILE MODE, J CHK105 SKIP SZ'S SZ BKUPREEL1 CLEAR BACKUP WORD SZ PACKENTRY CLEAR PACKID WORD CHK105 SZ FLAGS2 CLEAR VFIL,BMI1 FLAGS . . SINCE THE NEW DIRECTORY FORMAT IS @MFD'S NATIVE MODE, ALL THE . SUPER SPEC TESTS CHECK THE NEW BITS AND SUCH. MOST OF THEM ARE . THE SAME, BUT THE 'TAPE' INDICATION IS DIFFERENT. AT THIS POINT, . IF WE HAVE AN OLD-FORMAT DIRECTORY, WE SET THE 'TAPE' BIT IN . THE MAIN ITEM ACCORDING TO THE NEW RULES. . ON OLDMFD TZ MFD$F OLD FORMAT DIRECTORY? J CHK108 NO, GO ON LA A0,DESCFLAGS YES, GET DESCRIPTOR FLAGS TNZ TAP IS THIS A TAPE? AND,U A0,-TAPBIT NO, CLEAR BIT TZ TAP CHECK AGAIN OR,U A0,TAPBIT YES, SET TAPE BIT SA A1,DESCFLAGS UPDATE DESCRIPTOR FLAGS CHK108 . OFF OLDMFD LA A0,INHIBITS PICK UP INHIBIT FLAGS ON OLDSTUFF . . CHECK FOR CONDITIONS SPECIFIED VIA V AND G-OPTIONS . TNZ VPT CHECKING FO V-OPTION FILES? J CHK110 NO, SKIP AHEAD EX REVV YES - IS FILE V-OPTION? J CHK001 NO (YES), GET ANOTHER ITEM CHK110 TNZ GPT CHECKING FOR G-OPTION FILES? J CHK120 NO, SKIP AHEAD EX REVG YES - IS FILE G-OPTION? J CHK001 NO (YES), GET ANOTHER ITEM CHK120 . OFF OLDSTUFF . . SET VFIL AND/OR GFIL FLAGS IF INHIBIT BITS WARRANT . TEP,U A0,VBIT V-OPTION FILE? SR R15,VFIL YES, SET FLAG TEP,U A0,MI0GBIT G-OPTION FILE? SR R15,GFIL YES, SET FLAG . . SET FLAG NONZERO IF FILE IS BACKED UP . LA A0,DESCFLAGS GET DESCRIPTOR BITS TEP,U A0,BAKBIT BACKED UP? SR R15,BACKEDUP YES, SO SET FLAG . . CONVERT REFERENCE AND CATALOGUE DATES TO A FORM WHICH IS . MORE EASILY TESTED AND/OR SORTED. . LA,S3 A0,DATLSTASG GET YEAR LA A1,DATLSTASG GET ENTIRE DATE IN A1 LDSL A0,12 SHIFT MO,DAY ONTO YR IN A0 SA,H1 A0,DATLSTASG STORE AS YR,MON,DAY LA,S3 A0,DATCATLGD GET YEAR LA A1,DATCATLGD GET ENTIRE DATE IN A1 LDSL A0,12 SHIFT MO,DAY ONTO YR IN A0 SA,H1 A0,DATCATLGD STORE AS YR,MON,DAY . . DETERMINE WHETHER OR NOT A CALL TO DIRLNK$ IS NECESSARY TO GET THE . FILE'S MAIN ITEM SECTOR 1. IF POSSIBLE, AVOID THE CALL TO DIRLNK$ . TO SAVE I/O, EEC. . ON DSGUNL TP DESCFLAGS FILE UNLOADED? J CHK200 YES, GET M.I. SECTOR 1 OFF DSGUNL ON OLDSTUFF TZ SIZFLG IF SIZE OPT AND FILE BACKED UP JNZ BACKEDUP,CHK200 MUST LINK FOR BACKUP SIZE OFF OLDSTUFF ON NSSP TZ TESTS ANY SUPER SPEC TESTS GIVEN? J CHK130 YES, LINK IF REM OR BACKED UP ON SORTOK TZ SORT IS A SORT BEING DONE? J CHK130 YES, LINK IF REMOVABLE OR BACKED UP OFF SORTOK J CHK140 NO, TRY TO AVOID LINK CHK130 JNZ BACKEDUP,CHK200 IF BACKED UP, OR JNZ RDISC,CHK200 REM DISC, LINK. CHK140 . OFF NSSP . . IF SHORT LISTING, NEED MI1 FOR REMOVABLE FILES ONLY . JNZ LONGLIST,$+2 IF LONG LISTING, LET IT THRU JZ RDISC,CHK220 SHORT LISTING - IF FIXED, . DON'T NEED MAIN ITEM SECTOR 1 JNZ RDISC,CHK200 IF REMOVABLE, GET MAIN ITEM SEC 1 JZ BACKEDUP,CHK220 FIXED - NO LINK IF NO BACKUP . . IF FILE IS BACKED UP OR REMOVABLE, MUST LINK TO MI SEC 1 FOR MORE INFO . CHK200 TZ SFMODE2 SINGLE-FILE MODE? J 0,X9 YES, HAVE MI1 FROM DREAD$ LA A0,DESCFLAGS GET DESCRIPTOR BITS TOP,U A0,BM1BIT BAD MAIN ITEM SECTOR 1? J CHK210 NO, GO LINK SR R15,BMI1 YES, SET FLAG SZ BACKEDUP CLEAR REM DISC & BACKED-UP FLAGS SZ RDISC J CHK220 DON'T LINK CHK210 LA,U A0,MI1 GET M.I. SEC 1 BUFFER ADDRESS LA A1,MI0MI1LNK GET LINK FROM MI0 TO MI1 LMJ X11,DIRLNK$ FIND M.I. SECTOR 1 LNKRTN* J DIRECERR ERROR RETURN . . DIREC$ ERROR ROUTINE RETURNS HERE IF ERROR OCCURRED AT 'CHK210' . CHK220* TZ LIOPT Q,F,I, OR P OPTIONS SET? J GBU YES, ALREADY PERFORMED TESTS J 0,X9 NO, PERFORM TESTS /. CHECK DESIRED PARAMETERS . . ACCOUNT, PROJECT, OR QUALIFIER CHECK . QQOPT* TZ CPT C-OPTION SET FOR PARTIAL SPEC? J CHK280 YES, CHECK PARTIAL SPEC CHK250 DTE A9,0,X7 DOES SPEC MATCH THAT OF FILE? J CHK270 NO, GET ANOTHER . . TEST PASSED . CHK260 TNZ LIOPT LEAD ITEM OPTION J GBU NO, MAIN ITEM, SO GO ON J CHK001 YES, GET MI0 . . TEST FAILED . CHK270 TNZ LIOPT LEAD ITEM OPTION J CHK001 NO, GET ANOTHER ITEM J GALI YES, GET ANOTHER LEAD ITEM . . CATEGORY (PARTIAL SPECS) . CHK280 LX X11,(66,0) KLUDGE - ONCE THROUGH FOR C-OPT TZ YPT IS Y-OPTION SET? LX X11,(3,0) YES, DO IT 11 TIMES CHK290 DL A9,0,X7 GET PARAMATER FROM LI0 OR MI0 DSC A9,0,*X11 ROTATE 0-11 CHARS AND A10,ACMASK+1 MASK OFF DESIRED CHARS AND A9,ACMASK DAN A10,MFD$+9 MATCH? DJZ A10,CHK260 IF SO, TOK TLEM,U X11,66 SHIFTED 11 CHARS YET? J CHK290 NO, SHIFT ANOTHER CHAR J CHK270 YES, NO MATCH - GET ANOTHER /. F OPTION WITH UNAMBIGUOUS QUAL*FILE -- USE 'IIOPT' FOR I, FC, FY . FFOPT* J CHK001 JUST GET THE MAIN ITEM . . USE LOOKUP TABLE ENTRY TO FIND LEAD ITEM . FFOPT1 DS A9,FILE SAVE FILENAME DL A0,PCT GET SPECIFIED QUALIFIER DS A0,QUAL STORE IT LA,U A0,QUAL POINT TO QUAL AND FILENAME LMJ X11,DIRLUF$ FIND THE LEAD ITEM LINK J DIRECERR ERROR RETURN JZ A0,FFEOF IF LINK = 0, TREAT LIKE EOF SA A0,A1 ELSE MOVE IT TO A1 FOR DIRLED$ LA,U A0,LI0 GET LEAD ITEM BUFFER ADDRESS LMJ X11,DIRLED$ LINK TO LEAD ITEM J DIRECERR ERROR RETURN SR R15,USELUT INDICATE THAT WE GOT THE LEAD . ITEM VIA THE LOOKUP TABLE J CHK002 MERGE INTO DIRSEC$ CODE . . ZERO LEAD ITEM LINK - NO SUCH FILE . FFEOF LA,U A1,3 SIMULATE DIRSEC$ EOF J DIRECERR NOW HANDLE LIKE EOF /. I OPTION ONLY, OR F WITH C/Y-OPTION -- FILENAME . IIOPT* TZ IPT IS I-OPTION SET? J CHK310 YES, FILENAME CHECK ONLY DL A0,PCT GET QUAL SPEC SAVED IN PCT DTE A0,QUAL QUAL MATCH? J GALI NO, TRY AGAIN CHK310 TZ CPT PARTIAL FILENAME? J CHK280 YES, HANDLE LIKE PARTIAL ACCOUNT J CHK250 NO, MAKE SIMPLE CHECK . . X-OPTION (EXEC FILES) . XXOPT* DL A0,ACCOUNT GRAB THE ACCOUNT NUMBER DJZ A0,GBU IF ZERO, SNAGGED ONE DTE A0,(OVHDA) OVERHEAD ACCOUNT? J CHK001 NO, TRY AGAIN J GBU YES, SNAGGED ONE . . K-OPTION (REMOVABLE DISC FILE) . KKOPT* TZ BMI1 BAD MI1? J CHK001 YES, DON'T BOTHER CHECKING L,U R1,5 FOR FIRST 5 PACKIDS LXM,U A0,PACKENTRY CHECK SPEC VS. PACK LIST LXI,U A0,2 SE A9,0,*A0 FIND IT? J $+2 NO, MAYBE TRY SECOND SPEC J GBU YES, CONTINUE OTHER CHECKS JZ A10,CHK001 2ND SPEC GIVEN? NO,SEC L,U R1,5 YES, NOW CHECK FOR 2ND SPEC LXM,U A0,PACKENTRY SE A10,0,*A0 FIND IT? J CHK001 NO, TRY NEXT FILE . YES, CONTINUE TO GBU /GBU* . ON OLDSTUFF . . SPECIAL SIZE AND TYPE-OF-FILE CHECKS . TNZ RPT R-OPTION? J CHK410 NOT R, TRY D . . R-OPTION - CHECK FOR VARIOUS DISABLED INDICATIONS . LA,S1 A0,DISABLES PICK UP DISABLE-BITS LA A1,DISDX GET PARAMETER INDEX TNE,U A1,RPRL LAST ITEM (BMI)? LA A0,DESCFLAGS YES, GET OTHER BITS EX REVR CHECK PARAMETER J CHK001 NO, TRY ANOTHER FILE . . DATE OPTION ROUTINE (ONLY FILES NOT REF'D SINCE DATE SPECIFIED) . CHK410 TNZ DPT D-OPTION SET? J CHK420 NO, GO ON LA,H1 A0,DATLSTASG GET YR,MON,DAY IN A0 LA A1,DATREF YR,MO,DA I/P IN H2 OF A1 EX REVD M.I. DATE LE (GT) INPUT DATE? J CHK001 NO, GET ANOTHER CHK420 . OFF OLDSTUFF SZ FILESIZE INITIALIZE TOTAL TRACKS SZ SAVESIZE INITIALIZE SIZE HOLDER ON OLDMFD**OLDSTUFF TZ MFD$F NEW FORMAT MFD FILE? J CHK430 YES, CAN'T CHECK FOR GRANULES BY EQUIP L A0,TPT GET T-OPTION TE,U A0,1 SET (AND NOT REVERSED)? TNZ EQDX SPEC3 GIVEN? J CHK430 NO,CHK430 LA A0,EQDX GET EQUIP INDEX IN A0 AA,U A0,GRANULES-1 POINT TO PROPER WORD OF MI0 TNZ 0,A0 ANY GRANS ON SPEC'D EQUIP? J CHK001 NO, TRY ANOTHER FILE CHK430 . OFF OLDMFD**OLDSTUFF TZ TAP TAPE FILE? ON OLDSTUFF=0 J NSZOPT YES, DON'T ADD UP TRACKS OFF OLDSTUFF=0 ON OLDSTUFF J *SZOPT YES, DON'T ADD UP TRACKS OFF OLDSTUFF . . ADD UP MASS STORAGE GRANULE COUNTS, AND STORE TOTAL IN SAVESIZE. . SHOULD ALL BE ZERO IF FILE IS UNLOADED, BUT DO IT ANYHOW. . LA FILESIZE,GRANULES+7 . START WITH LAST VALUE LX,U A0,6 LA,U A1,GRANULES+6 POINT TO PROPER WORD IN MI0 LXI,XU A1,-1 AA,H2 FILESIZE,0,*A1 ADD TRACKS ON EACH DEVICE JGD A0,$-1 TP PCHAR POSITION GRANULARITY? LSSL FILESIZE,6 YES, MULTIPLY BY 64 TO GET TRACKS SA FILESIZE,SAVESIZE STORE FILE SIZE ON OLDMFD**OLDSTUFF . . IF A SPEC3 EQUIP TYPE WAS GIVEN, USE GRAN COUNT ON THAT EQUIPMENT . ONLY IN THE TOTALS. . TZ MFD$F NEW FORMAT MFD FILE? J CHK440 YES, CAN'T HANDLE THIS LA A0,EQDX GET F-TYPE EQUIP INDEX JZ A0,CHK440 WAS ONE SPECIFIED (IN SPEC3)? AA,U A0,GRANULES-1 POINT TO PROPER WORD OF MI0 LA FILESIZE,0,A0 YES, GET GRANS ON THAT EQUIP TP PCHAR POSITION GRANULARITY? LSSL FILESIZE,6 YES, MULT BY 64 OFF OLDMFD**OLDSTUFF . . IF FILE IS UNLOADED, BE SURE TRACK COUNT IS ZERO FOR TOTALS . CHK440 TP DESCFLAGS UNLOADED? SZ FILESIZE YES, ZERO OUT TOTAL IN A15 ON OLDSTUFF J *SZOPT JUMP TO PROPER ROUTINE . . CHECK AGAINST SIZE IN SPEC2 (USE SECURE TAPE BLOCKS IF UNLOADED) . SZCHK* TZ TAP TAPE FILE? J CHK460 YES, SKIP SIZE CHECK TP DESCFLAGS IS FILE LOADED? J CHK450 NO, SKIP LOADED TRACK CHECK EX SZLOD IS FILE > SPEC2 TRACKS? J CHK460 YES, BUT CHECK FOR U-OPTION J CHK001 NO, GET NEXT FILE CHK450 JZ BACKEDUP,CHK001 IF NO BACKUP, TRY ANOTHER LA FILESIZE,BKUPTEXT YES, GET BACKUP BLOCK COUNT EX SZBAK MORE THAN SPEC2 BLOCKS? J CHK001 NOPE, TRY NEXT FILE CHK460 TNZ UPT U-OPTION SET? J NSZOPT IF NOT, GO ON . . U-OPTION (UNLOADED FILES) . UNOPT* EX UNCHEK U-OPTION J CHK001 FILE IS NOT UNLOADED OFF OLDSTUFF . . NO SPECIAL SIZE OPTIONS (OR THEY ALL PASSED THE TESTS) . NSZOPT* . ON NSSP TNZ TESTS ANY SUPER SPEC TESTS TO DO? J CHK500 NO, GO ON . . PERFORM ALL SUPER SPEC TESTS, PUTTING RESULTS IN POLISH TABLE. . IF TEST PASSES, RESULT = 1. IF FAILURE, RESULT = 0. . THEN CALL POLTRAN TO EVALUATE POLISH EXPRESSION. . (IF ALL THE TESTS ARE AND'S, A SHORT-CUT MAY BE TAKEN). . LA A1,AOX GET AND/OR/XOR BITS AND,U A1,ORBIT+XORBIT; +NOTBIT JUST OR/XOR/NOT BITS TO A2 L R1,TESTS GET NUMBER OF TESTS TO DO JGD R1,$+1 ADJUST FOR JGD LX X2,(SSIZE,0) INITIALIZE INDEX CHK470 EX SSLOAD,X2 EXECUTE LOAD OF DIRECTORY INFO TP SSLOAD,X2 WAS THAT A 'DL' ? J CHK472 YES, SKIP SHIFT AND MASK OPERATIONS TNZ SSHIFT,X2 IS THERE SHIFTING TO BE DONE? J CHK471 NO LA,H1 A1,SSHIFT,X2 YES, GET LEFT SHIFT COUNT LSSL A0,0,A1 SHIFT LEFT LA,H2 A1,SSHIFT,X2 GET RIGHT SHIFT COUNT SSL A0,0,A1 SHIFT RIGHT CHK471 AND A0,SSMASK,X2 PERFORM 'AND' WITH MASK LA A0,SSPVAL,X2 LOAD SPECIFIED VALUE CHK472 EX SSTEST,X2 EXECUTE 'DTE A0,SSPVAL' . OR ' A0,A1' J CHK474 TEST FAILED . TEST SUCCEEDED LA,U A0,TRUE MARK TEST SUCCEEDED J CHK480 GO ON CHK474 LA,U A0,FALSE MARK TEST FAILED CHK480 JNZ A2,CHK490 IF OR'S, XOR'S, OR NOT'S WERE . SPECIFIED, MUST USE POLTRAN JZ A0,CHK495 ONLY AND'S - IF ANY FAIL, . DEFINITELY FALSE J CHK492 THIS ONE PASSED CHK490 LA A1,SSLINK,X2 GET LINK TO POLISH TABLE ENTRY SA A0,POLISH,A1 STORE RESULT IN POLISH TABLE CHK492 NOP 0,0,*X2 INCREMENT TEST INDEX JGD R1,CHK470 PERFORM ALL TESTS TZ A2 SKIP IF ONLY AND'S (ALL TRUE) LMJ X11,POLTRAN EVALUATE POLISH EXPRESSION CHK495 JZ A0,CHK001 IF FALSE, GET NEXT FILE CHK500 . OFF NSSP J MFD500 RETURN TO MAIN SEG END @ELT,RI TPF$.CHECK,,,154260141337 )@@@K"K@J[9@]/[9@@/)]Y@@@@@@@@/K@@@4/,0@@@(0@@@@C8C@@@/K@@]P0@@@@@/K@@@9*4@@@@AA@@@@ )@]@O"@JC@7=@<0@@@^#0@@U:8@@@"%8@@@.C4C@@D/K@@@P*4@@@@ ?@@@@ @@@@U CC@[P/^@@@;AB@@@@ )@^)O$)/[8@J[9@E@@0W@@@N/K@@@Z%8@@@[^#0@@U:8@@@)/@@@@ZC4C@@D/K@@@V/K@@@Z!8@@@KAC@@@@ )@B@K"@/B=@:2@T9@E/)BYK])@@@@@*W@@@E')@@@@*W@@@I')@@@@*W@@@N/K@@@-^38@[P/K@@@0AD@@@@ )@D@K"#2@L8JC[L9@C/B=@)@@@@@@@%0@@@@/K@@@!(0@@@@:8K@@[CWK@@N/K@@@!*4@@@@/#)@@0AE@@@@ )@F@K"#2@GY#2@-9@]/B)@@@@@@@@@/K@@]+/K@@@^(@@@@@ @@@@@/K@@@^/KD@@@*4@@@@/K@@@0AF@@@@ )@H@K"K@JC]R=@V2@(9@Q/)@YK[)@@ @@@@T ?@@@@ 4@@@@/K@@@@/K@@@@*0@@@@/K@@@@(0@@@@AG@@@@ )@J@O"K@J@[9@C/@@@+8@__Z(0C@[PCWC@@*/K@@[D*4@@@@ ^C@[P @C@[E @C@[#/K@@[@*0@@@@AH@@@@ )@L)M)B=@:0YKAJ[9@E@@@@@(W@@@A/K@@@^')@@@@/K@@[I(W@@@PC0C@@![WS@@*)8@@@)*0C@[PAI@@@@ )@N0O"#2@58@@@@@@@^#0@@T=8@@K@CWC@@*^78@[P=8@@@)^$8@[P=8@@@K/K@@@^')@@@@/K@@[MAJ@@@@ )@QKO)@[9@@/@@@@@@/BK@[,*?@@@@[CC@@\;?@@@GC@S@@\C?C@@\[CC@@,;?@@@GC@S@@,C?C@@,AK@@@@ )@S0M"K[\[9@A/B)/B)/B)@@/#)@[;/ 0@[?/B)@[,/BK@[,/K@@[%/K@@[**0@@@@/K@@[***@@@@AL@@@@ )@V@O"#0YK@@J@@@@@ @@@@U @@@@T^<8@[P/K@@[7>8@@]@CWC@@*/KD@@@*0@@@@/#K@[;/B)@[,AM@@@@ )@X)M"@JC#$=[F2@H8#2@O@@*W@@@]/KD@@@/K@@]"*4@@@@/K@@@@/,0@@@C@S@@(C8C@@8/K@@[;AN@@@@ )@Z0M"@/B=@V0Y#2@H8J@@@@/K@@@0/K@@@^(4@@@@/K@@@^/K@@]"(4@@@@/K@@] 9"R@@@/K@@]CAO@@@@ )@+@K"S@JC[R&@@JC#7=[;2[@@@@@@9&)@@D+]K@@@+])@@[;AV)@@9,R@@@R]0@@[*W@@@SR]0@@@AP@@@@ )@=@M"@/B)/[9@+@@@@@@@@@C8C@@[9*C@@[9?@@@@9%S@@#/K@@@^/K@@] /K@@]F$'0@[]9')@]]AQ@@@@ )@&KK"KDJC]R)#2[H9@M/)[@@@@@@@^#0@@@/K@@@@/,0@@@C8C@@@[@@@@H/@@@]+/K@@@@/,0@@@AR@@@@ )@*KM"@/)DYK]\[9@+J[9@E@*W@@@]/K@@@09/C@@[9?@@@@/K@@](*W@@@C/K@@@@C8K@@#/K@@@DAS@@@@ )@%)M"#0B)/0@Y#0B)@@@@@@/K@@@^*)C@[P/K@@]"/K@@@^9/@@@]98@@]"9?C@@1 FOR DIRINT TRACE SNAP EQU 0 NONZERO TO TURN ON SNAP$'S . PRE33 EQU 1 0 TO TURN OFF ALL PRE-MFDF . COMPATABILITY CODE LEVEL27 EQU 0 0 TO TURN OFF 27-20-225 . COMPATABILITY CODE (ASSUMED 0 IF . PRE33 = 0). . DIRSIZ EQU 0 INITIAL SIZE OF DGET$ FILE . . IF DIRSIZ IS NOT LARGE ENOUGH, DIRINT WILL FREE THE DGET$ FILE AND . RE-ASSIGN IT WITH THE PROPER RESERVE (RETURNED BY MSCON$). YOU CAN . AVOID THIS OVERHEAD (2 EXTRA CSF$'S AND 1 EXTRA MSCON$ CALL) . BY ENSURING THAT DIRSIZ IS LARGE ENOUGH TO ACCOMODATE ALL . ANTICIPATED GROWTH. THE COST OF THIS IS THAT ALL DGET$ FILES . WILL BE A LITTLE (OR A LOT) LARGER THAN THEY HAVE TO BE. . EVENTUALLY, IF THE DIRECTORY SIZE GROWS PAST WHAT YOU ANTICIPATED, . YOU WILL GET THE OVERHEAD BACK, ALONG WITH LOG MESSAGES TELLING . YOU TO INCREASE DIRSIZ. IN THE MEANTIME, YOU WASTE THE EXTRA . TRACKS. IF YOU HAVE MANY DEMAND JOBS CARRYING OVERSIZE DGET$ . FILES AROUND, THIS COST MAY BECOME SIGNIFICANT. YOU CAN GET RID . OF THE WHOLE PROBLEM BY SETTING DIRSIZ TO 0 AND LETTING DIRINT . ALWAYS ASSIGN THE OPTIMUM SIZE, WITH THE ASSOCIATED 2 CSF$'S . AND EXTRA MSCON$ CALL. . MAXDIR EQU 01400 MAXIMUM POSSIBLE DIRECTORY TRACKS . . MAXDIR IS THE MAXIMUM SIZE DIRECTORY DIREC$ CAN HANDLE. SETTING . IT TOO HIGH MEANS CARRYING AN OVERSIZE INCORE TABLE. SETTING IT . TOO LOW MEANS GETTING BACK AN ERROR TYPE 6 ON EVERY DIRINT CALL. . THE TABLE MENTIONED HERE IS 'ADDTBL', WHICH IS BUILT IN ONE OF . DIRINT'S TRACK-SIZE DGET$ BUFFERS, SHARING THAT AREA WITH THE . MCT AND LOOKUP TABLE BUFFERS. . LUTL EQU 16 SIZE OF LOOKUP TABLE BUFFER, . IN SECTORS . . LUTL MUST BE AT LEAST 1. MAKING IT A MULTIPLE OF 4 WILL ELIMINATE . READ-BEFORE-WRITES WHEN READING THE LOOKUP TABLE. . THE LUT BUFFER IS CONSTRUCTED IN ONE OF DIRINT'S TRACK-SIZE . DGET$ BUFFERS, SHARING THAT AREA WITH 'ADDTBL' AND THE MCT BUFFER. . . . FORTRAN LINK EQUFS . ECODE EQUF 0 ECODE 2-WORD BUFFER ADDRESS ERRORRTN EQUF 1 ERROR RETURN INTMASK EQUF 2 DIRINT MASK LIBIT EQU 2 WANT LEAD ITEMS MIBIT EQU 4 WANT MAIN ITEMS SEPBIT EQU 010 MIBUF IS LIBUF+28 USERBUFAD EQUF 2 USER'S BUFFER ADDRESS USERFORK EQUF 3 DIRINT FORK$ WORD USERLINK EQUF 3 USER'S LINK WORD (FOR DIRLNK) USERLUTW EQUF 3 USER EXPECTS LUT WORD HERE . . ERROR TYPES STORED IN ECODE (OR A1) ... ERROR CODE STORED IN ECODE+1 (OR A2) . MSCERR EQU 1 MSCON$ ERROR . ECODE+1 = CONTENTS OF A0 IOERR EQU 2 I/O ERROR . ECODE+1 = CONTENTS OF IOPACKET+3 EOFERR EQU 3 EOF ON DIRSEC, DIRLUT, OR DIRLED . CALL. NEXT CALL WILL START AT . THE BEGINNING AGAIN. CSFERR EQU 4 CSF$ ERROR ON @ASG,T OF DGET$ FILE. . ECODE+1 = FAC STATUS INITERR EQU 5 DIRSEC, DIRLNK, OR DIRLED CALLED . BEFORE DIRINT HAS SET UP ADDTBL SIZERR EQU 6 TOO MANY DIRECTORY TRACKS - . OVERFLEW ADDTBL DURING DIRINT. . INCREASE MAXDIR TO VALUE IN ECODE+1 . PLUS SOME EXPANSION FACTOR. LNKERR EQU 7 BAD ADDRESS PASSED TO DIRLNK . ECODE+1 = USER'S LINK WORD MCTERR EQU 8 ERROR RETURN FROM ER MCT$ . ECODE+1 = MCT$ STATUS MSKERR EQU 9 DIRINT MASK ERROR . ECODE+1 = MASK PASSED BY USER MFDFERR EQU 10 IF PRE33=0 AND DGET$ RETURNS . OLD-FORMAT DIRECTORY, THIS ERROR . TYPE WILL BE RETURNED. LUFERR EQU 11 DIRLUF ERROR: SEE DETAILS AT . DIRLUF ENTRY POINT. /$(LC$DATA) LIT . CSFIM '@ASG,T $$--DGET--$$,F/' DGET$ ASSIGN/FREE IMAGE INTRES ' /2000 . ' INITIAL RESERVE IS PLUGGED IN FLAGS + 0 VARIOUS FLAGS AND COUNTERS TRYCNT EQUF FLAGS,,S1 DGET$ ATTEMPT COUNT SEP EQUF FLAGS,,S2 SEPARATE LI/MI BUFFERS FLAG WANTL EQUF FLAGS,,S3 WANT LEAD ITEMS FROM DIRSEC WANTM EQUF FLAGS,,S4 WANT MAIN ITEMS FROM DIRSEC INTERNAL EQUF FLAGS,,S5 SET IF INTERNAL CALL TO DIRLNK DGETP EQUF FLAGS,,S6 NON-ZERO IF DGETP$ . LFLAG + 0 LEAD ITEM STUFF GOTL1 EQUF LFLAG,,H1 NONZERO IF LEAD ITEM SEC 1 INCORE HMANY EQUF LFLAG,,H2 COUNT OF MAIN ITEMS RETURNED . FOR THIS LEAD ITEM . LINKERADD + 0 SAVE LINK ADDRESS FROM DIRLNK ENTRYINFO + 0 SAVE OF ENTRY INFORMATION FORPKT EQUF ENTRYINFO,,H1 FORTRAN PARAMETER PACKET BUFRADDR EQUF ENTRYINFO,,H2 ADDRESS OF USER'S BUFFER . LINDEX + 0 LATEST INDEX INTO LEAD ITEM . SEC 0 OR 1 (M.I. LINK) . GOTONE* + 0 LEAD-ITEM-IN-CORE FLAG DIR$MFDF* + 0 NONZERO IF NEW DIRECOTRY FORMAT . IOPAK '$$--DGET--$$' GENERAL DGET$ FILE I/O PACKET + 0 + 0,R$,0,0,0,0 + 28,BUF + 0 ON PRE33 MCTPKT + 0,MCTTBL MCT$ PACKET MASK1 + 037777777777 MASK FLAG BITS OUT OF ABSOLUTE . WORD ADDRESSABLE ADDRESS OFF PRE33 MASK2 + 037777777700 MASK FLAG BITS OUT OF ABSOLUTE . ADDR AND TRUNCATE SECTOR ADDR . TO NEXT LOWERE TRACK ADDR. ADDL + 0 LENGTH OF ADDTBL NXSEC + 0 SECTOR ADDRESS OF NEXT SECTOR . TO BE ANALYZED BY DIRSEC FIRSTR + 0 TRACK ADDRESS OF FIRST TRACK . CONTAINING MFD ITEMS (AFTER LUT) QSEC + 0 TOTAL SECTOR LENGTH OF DGET$ FILE DX + 0 POINTER INTO 'BUF' WHICH . CONATINS DAS, POINTING TO ENTRY . FOR CURRENT TRACK. RELADD + 0 FOR NEW (MFDF) DIRECTORY . ONLY WORD 0 OF FIRST DAS FOR . A GIVEN UNIT HAS PROPER LDAT INDEX . AND SECTOR ADDRESS. WE MUST . KEEP TRACK OF THE RELATIVE ADDRESS. . MSCON$FN* . TO ALLOW CHANGING OF MSCON$ FUNCTION MSPKT + DGET$ MSCON$ DGET$ PACKET '$$--DGET--$$' DGET$ FILE NAME + DIRSIZ NECESSARY RESERVE RETURNED HERE + TRKBUF,TRKBUF2 BUFFERS FOR DGET$ PAKID$* + 0 PACK ID FOR DGETP$ SAVR2 RES 1 REGISTER SAVE AREA SAVX8 RES 1 SAVX11 RES 1 SAVX11X RES 2 INTERNAL SAVING LUFQF + 0 SAVE USER'S QUALFL ADDRESS LBUF RES 28 BUFFER FOR LEAD ITEM SECTOR 0 + 0 MAIN ITEM LINK LOOP STOPPER L1BUF RES 28 BUFFER FOR LEAD ITEM SECTOR 1 BUF RES 28 DAS AND STAGING BUFFER TRKBUF RES 1792 FIRST DGET$ BUFFER . ALSO USED DURING DIRSEC,DIRLNK TO . HOLD CURRENT DIRECTORY TRACK MCTSIZ EQU 512*(PRE33>0) LENGTH OF MCT$ BUFFER LUTSIZ EQU 28*LUTL SIZE OF LUT BUFFER LEFT EQU 1792-(MCTSIZ+LUTSIZ) REMAINDER OF TRACK BUFFER DO MAXDIRLEFT-1 ,ADDSIZ EQU MAXDIR TRKBUF2 . SECOND DGET$ TRACK BUFFER MCTTBL RES MCTSIZ MCT$ BUFFER LUT RES LUTSIZ LOOKUP TABLE BUFFER ADDTBL RES ADDSIZ TABLE OF DIRECTORY TRACK ADDRESSES . . LOOKUP TABLE INFO . LUTSTART EQU 1 FIRST LUT SECTOR IN DGET$ FILE DCLUTS* + 0 LUT SIZE IN WORDS LUTSECS + 0 LUT SIZE IN SECTORS NXLUTSEC + 0 NEXT LUT SECTOR FOR DIRLUT LUTRD '$$--DGET--$$' LUT I/O PACKET + 0 + 0,R$,0,0,0,0 + LUTSIZ,LUT - LUTL INITIAL CALL INDICATOR . LEDFLG + 0 INDICATES LEAD ITEM WAS RETRIEVED . VIA DIRLED CALL. ON DIRSIZ>0 LOGMSG '@LOG DIREC$ MSG - DIRSIZ SHOULD BE INCREASED . ' OFF DIRSIZ>0 ON SNAP NXSECSNP 'NXSEC ' + 0200005,NXSEC + 0 ADDSNP 'ADDTBL' + 0,ADDTBL + 0 DASSNP 'DAS ' + 28,BUF + 0 LUTSNP 'LUT ' + LUTSIZ,LUT + 0 OFF /$(LC$CODE). . . DIRFIL - SETS DGET$ FILE NAME AS SOMETHING OTHER THAN $$--DGET--$$. . . FORTRAN: CALL DIRFIL (12HDGETFILENAME) . . ASSEMBLY: DL A0,('DGETFILENAME') . LMJ X11,DIRFIL$ . . . THE INPUT PARAMETER MUST BE A 12-CHARACTER FIELDATA FILENAME, . LEFT-JUSTIFIED, SPACE-FILLED. . FILARG EQU 1 NUMBER OF ARGUMENTS . DIRFIL* LA A2,(-1,FILARG) # OF ARGS, NO ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A0,*0,A0 LOAD FILENAME ADDRESS DL A0,,A0 LOAD THE FILENAME DIRFIL$* DS A0,IOPAK STORE NEW NAME IN I/O PACKET DS A0,MSPKT+1 AND MSCON PACKET DS A0,CSFIM+2 AND CSF$ IMAGE DS A0,LUTRD ALSO LUT I/O PACKET J 0,X11 RETURN /. DIREND - FREES DGET$ FILE AND RE-INITIALIZES DIREC$. . THE POINT OF THIS IS THAT DIREC$ TRIES TO AVOID THE . OVERHEAD OF THE MSCON$/DGET$, WHERE POSSIBLE, BY . RETAINING THE COPY OF THE DIRECTORIES ACROSS SEVERAL . EXECUTIONS. THIS IS INAPPROPRIATE IN SOME CASES: YOU . MAY EXECUTE SOMETHING USING DIREC$, THEN DO SOME @CAT'S . AND @DELETE'S, AND EXECUTE THE PROGRAM AGAIN TO SEE . THE CHANGES. THAT WON'T WORK IF DIREC$ IS USING A COPY . OF THE DIRECTORIES FROM BEFORE THE CHANGES. IN THAT CASE, . CALLING DIREND THROWS AWAY THE OLD COPY SO THAT A . SUBSEQUENT DIRINT WILL GET A NEW COPY. . . FORTRAN: CALL DIREND . . ASSEMBLY: LMJ X11,DIREND$ . . ENDARG EQU 0 NUMBER OF ARGUMENTS (DUMMY) . DIREND* LA A2,(-1,ENDARG) # OF ARGS, NO ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS DIREND$* LA A0,('@FREE ') CHANGE CSFIM LA A1,CSFIM TO '@FREE' SA A0,CSFIM AFTER SAVING 'ASG,T' LA A0,(4,CSFIM) GET CSF$ IMAGE LENGTH AND ADDR ER CSF$ FREE THE DGET$ FILE SA A1,CSFIM RESTORE 'ASG,T' SZ NXSEC ZERO DRUM ADDRESS J 0,X11 RETURN TO CALLER /. DIRINT - ASSIGNS DGET$ FILE, OBTAINS A COPY OF THE DIRECTORIES, AND . BUILDS ADDTBL. IF FILE ALREADY EXISTS, JUST BUILDS ADDTBL. . . FORTRAN: CALL DIRINT (ECODE,$ERR,MASK,FORK) . . ASSEMBLY: LA,U A0,MASK MASK BITS . LXI,U A0,(FORK$ PARAMETER) (OPTIONAL) . LMJ X11,DIRINT$ . A1,A2 CONTAIN ERROR CODE . . . MASK VALUES: (BITS MAY BE SET IN ANY COMBINATION) . . LIBIT = 002 - IF SET, DIRSEC WILL RETURN LEAD ITEMS (SECTOR 0) . MIBIT = 004 - IF SET, DIRSEC WILL RETURN MAIN ITEMS (SECTOR 0) . SEPBIT = 010 - IF SET, DIRSEC WILL PUT LEAD ITEMS IN BUFFER ADDRESS . GIVEN IN DIRSEC CALL, AND MAIN ITEMS IN BUFFER+28 . . IF BOTH LIBIT AND MIBIT ARE SET, DIRSEC WILL RETRIEVE LEAD ITEMS . AS WELL AS MAIN ITEMS. FOR ASSEMBLY CALLS, A0 WILL CONTAIN 0 IF A . LEAD ITEM WAS RETURNED, OR 1 IF A MAIN ITEM WAS RETRUEND. FOR . FOR FORTRAN CALLS, THIS VALUE WILL BE RETURNED IN ECODE (WITH A . NORMAL RETURN). IF YOU WANT TO MOVE ON TO THE NEXT LEAD ITEM . WITHOUT RETURNING ALL THE MAIN ITEMS FOR THE CURRENT LEAD ITEM, . DIREC$'S EXTERNALIZED CELL 'GOTONE' SHOULD BE CLEARED BEFORE THE . NEXT DIRSEC CALL. . . FORK$ WORD - WHEN DOING A DGET$, NO OTHER ACTIVITES MAY BE RUNNING. . FOLLOWING THE DGET$, DIRINT MUST BUILD ADDTBL: THIS TAKES A WHILE, . SO IF YOU'D LIKE TO DO SOMETHING ELSE WHILE IT'S GOING ON, YOU MAY . INDICATE SO WITH THE FORK$ WORD. IF IT IS 0, IT WILL BE IGNORED, . BUT IF IT IS NON-ZERO, DIRINT WILL DO AN ER FORK$ TO THE ADDRESS . SPECIFIED, AFTER THE ACTUAL DGET$ IS DONE. . . IF A CALLING PROGRAM WISHES TO SEE THE REMOVABLE COPY OF . DIRECTORIES FOR FILES ON A CURRENTLY MOUNTED REMOVABLE DISK, . THE FOLLOWING SEQUENCE WILL CHANGE DIRINT TO DO A DGETP$ . INSTEAD OF A DGET$: . . L,U A0,DGETP$ . S A0,MSCON$FN CHANGE FUNCTION TO DGETP$ . L A0,('PACKID') . S A0,PAKID$ STORE THE PACKID . LMJ X11,DIREND$ GET RID OF ANY DGET$ FILE . LA,U A0,MASK LOAD THE MASK . LMJ X11,DIRINT$ DO DGETP$ . ...ETC. . . NOTE THAT 'LIBIT' MAY NOT BE SET FOR DGETP$, SINCE THE REMOVABLE . PACK DIRECTORY DOES NOT CONTAIN LEAD ITEMS. 'SEPBIT' WILL . BE IGNORED IN THIS INSTANCE, ALSO. . INTARG EQU 4 NUMBER OF ARGUMENTS . DIRINT* LA,U A2,INTARG # OF ARGUMENTS, WITH ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A3,*USERFORK,A0 POINT TO FORK$ PARAMETER LA A3,,A3 LOAD FORK$ PARAMETER LA,U A0,*INTMASK,A0 POINT TO MASK BITS LA A0,,A0 LOAD MASK BITS J DIRINT2 CONTINUE DIRINT$* SZ FORPKT DECLARE ASSEMBLY ENTRANCE LA A3,A0 LOAD ENTRY PARAMETER SSL A3,18 SHIFT TO GET FORK$ WORD TZ A3 IF THERE'S A FORK$ WORD, LA A3,,A3 GET IT LXI,U X11,,X11 LOAD ERROR RETURN POINT LXM,U X11,1,X11 LOAD NORMAL RETURN POINT DIRINT2 SX X11,SAVX11 SAVE RETURN POINTS SZ FLAGS CLEAR SEP,WANTL,WANTM,INTERNAL, . AND TRYCNT FLAGS AND,U A0,LIBIT++MIBIT MUST WANT EITHER LI'S OR MI'S JZ A1,BADMASK IF NEITHER, MASK ERROR LA A1,MSCON$FN GET MSCON$ FUNCTION CODE TE,U A1,DGETP$ DGETP$ ? J NOTDGETP NO, GO ON SA A0,DGETP YES, SET FLAG TEP,U A0,LIBIT DOES USER WANT LEAD ITEMS? J BADMASK YES, WELL THERE AREN'T ANY! J REASG (NO) OK, SKIP SETTING OF FLAGS NOTDGETP . TEP,U A0,LIBIT WANT LEAD ITEMS? SA A0,WANTL YES, SET FLAG TEP,U A0,MIBIT WANT MAIN ITEMS? SA A0,WANTM YES, SET FLAG TEP,U A0,SEPBIT BIT 3 SET FOR SEPARATE ITEMS? SA A0,SEP YES, SET FLAG . . PLUG INITIAL RESERVE INTO CSF$ IMAGE AND ASSIGN DGET$ FILE . REASG LA A0,MSPKT+3 GET INITIAL RESERVE JZ A0,ZRO IF ZERO, LEAVE IT ALONE SSL A0,5 ADD ABOUT 3% TLE,U A0,3 AT LEAST 3 TRACKS BEING ADDED? LA,U A0,2 NO, ADD 2 TRACKS TO ACCOMODATE AA A0,MSPKT+3 DYNAMIC EXPANSION, TO BE SAFE ZRO LA A2,('/ ') CN DSL A0,36 CONVERT TO FD DECIMAL DI,U A0,10 AA,U A1,'0' CONVERT TO FIELDATA DSL A1,6 LEFT-JUSTIFY IN A2 JNZ A0,CN SA A2,INTRES STORE IN ASG IMAGE L,U A0,CSFIM GET DGET$ FILE @ASG IMAGE ER CSF$ @ASG,T OUR DGET$ FILE JNZ A0,CSFR IF NO GOOD, HANDLE ERROR . . OBTAIN COPY OF DIRECTORIES IN DGET$ FILE . L,U A0,MSPKT DO DGET$ ER MSCON$ JN A0,MSCR JUMP IF NO GOOD DGETOK L A0,A3 WANNA FORK ANYTHING? JZ A0,$+2 IF NOT, GO ON ER FORK$ YES, DO IT DO DEBUG>1 , SLJ TON$ DEBUG MUST BE >1 FOR DIRINT TRACE LA A0,(28,BUF) SET TO READ SEC. 0 INTO BUF SA A0,IOPAK+4 SZ IOPAK+5 INITIALIZE DGET$ DRUM ADDR TO ZERO LA,U A0,IOPAK LOAD I/O PACKET ER IOW$ READ FIRST SECTOR TZ,S1 IOPAK+3 CHECK I/O STATUS SLJ IOR HANDLE I/O ERROR SZ DIR$MFDF ASSUME OLD MFD FORMAT TP BUF+3 NEW MFD FILE (MFDF) FORMAT? SA A0,DIR$MFDF YES, SET NEW-FORMAT FLAG ON PRE33=0 TZ DIR$MFDF CORRECT FORMAT DGET$ FILE? J $+3 YES, GO ON LA,U A1,MFDFERR NO, GET ERROR TYPE J ERREXT1 RETURN ERROR TYPE TO USER OFF PRE33=0 L,H1 A0,BUF+2 FIRST DIR TRK NUMBER AN,U A0,1 CONVERT TO LOGICAL TRACK NUMBER S A0,FIRSTR SAVE ADDR OF FIRST TRK L,H2 A0,BUF+2 GET # OF DIRECTORY TRACKS WRITTEN LSSL A0,6 CONVERT TO # OF SECTORS S A0,QSEC STORE # OF SECTORS WRITTEN LA,H2 A0,BUF+1 GET LENGTH OF LOOKUP TABLE SA A0,DCLUTS STORE FOR DIRLUW/DIRLUT DSL A0,36 SET FOR DIVIDE DI,U A0,28 CONVERT TO SECTOR COUNT TZ A1 ANY REMAINDER? A,U A0,1 YES, BUMP COUNT BY 1 A,U A0,1 BUMP ANOTHER ONE FOR TESTS SA A0,LUTSECS STORE # OF SECS+1 FOR DIRLUT LMJ A1,RESET INITIALIZE NXSEC, DX, ETC. . . DIRLNK PROVIDES THE ABILITY TO ACCEPT A DIRECTORY LINK ADDRESS . (EG, LINK-TO-SECTOR-1-OF-MAIN-ITEM) AND RETRIEVE THE ITEM IT . POINTS TO. IN ORDER TO DO THIS, IT MUST TRANSLATE THE LINK . ADDRESS WHICH POINTS TO THE ACTUAL MFD ITEM INTO A RELATIVE . ADDRESS THAT POINTS TO THE COPY OF THAT ITEM IN THE DGET$ FILE. . IT MAKES USE OF TWO FACTS TO DO THIS: . . 1. THE MFD IS COPIED TO THE DGET$ FILE TRACK BY TRACK. . THEREFORE, IF A GIVEN ITEM STARTS AT SECTOR 49 OR WORD . 1372 WITHIN SOME GIVEN TRACK OF THE MFD, THEN IT WILL START . AT SECTOR 49 OR WORD 1372 OF THE COPY OF THAT TRACK IN . OUR DGET$ FILE. ALL WE NEED TO DO IS FIND THE RIGHT TRACK. . 2. THE DGET$ FILE CONTAINS COPIES OF EACH DIRECTORY ALLOCATION . SECTOR (DAS). THE DAS CONTAINS THE ADDRESS OF THE MFD TRACK . FROM WHICH IT WAS COPIED, AS WELL AS THE MFD ADDRESSES FROM . WHICH THE NEXT FEW (UP TO 8) TRACKS WERE COPIED. . . DURING THE FOLLOWING ROUTINE, WE READ EVERY DAS IN THE DGET$ FILE. . FROM EACH ONE WE PULL OUT THE MFD ADDRESS OF EACH TRACK DESCRIBED IN . THE DAS. THESE ARE BUILT INTO A TABLE CALLED ADDTBL. POSITION IN . ADDTBL INDICATES POSITION IN THE DGET$ FILE (EG, THE 7TH WORD OF . ADDTBL CONTAINS THE MFD ADDRESS FROM WHICH MSCON$ COPIED THE 7TH . TRACK OF DIRECTORY ITEMS INTO THE DGET$ FILE). NOTE THAT THIS IS . ALL ZERO-RELATIVE. ALSO NOTE THAT TRACK ZERO OF THE DGET$ FILE IS . NOT TRACK ZERO OF DIRECTORY ITEMS: THE BEGINNING OF THE DGET$ . FILE CONSISTS OF A TABLE OF CONTENTS AND THE LOOKUP TABLE. THE . TRACK NUMBER OF THE FIRST TRACK IN THE DGET$ FILE WHICH CONTAINS . DIRECTORY ITEMS IS RETURNED BY MSCON$, IN WORD 2,,H1 OF SECTOR 0 . OF THE FILE. THIS IS THE TRACK WHICH WAS COPIED FROM THE MFD . LOCATION WHOSE ADDRESS IS IN WORD 0 OF ADDTBL. . . AFTER INITIALIZATION IS COMPLETE, CALLS MAY BE MADE TO DIRLNK TO . READ A SECTOR CORRESPONDING TO A GIVEN MFD (LINK) ADDRESS. . FIRST WE SEARCH ADDTBL TO FIND THE ADDRESS OF A TRACK WHICH WOULD . CONTAIN THE ADDRESS WE ARE LOOKING FOR. THE INDEX INTO ADDTBL . IS THE RELATIVE TRACK NUMBER IN THE DGET$ FILE FOR THE FIND. . THE OFFSET INTO THE TRACK IS DETERMINED FROM THE DIFFERENCE . BETWEEN THE ADDRESS WE ARE LOOKING FOR AND THE MFD ADDRESS OF THE . TRACK IT IS IN (FROM ADDTBL). THIS OFFSET INTO THE TRACK IN THE . DGET$ FILE GIVES THE ITEM WE WANT. . . DWIGHT ARTHUR . BOSTON, MAY 1976 . L A0,QSEC # OF DIRECTORY SECTORS AN A0,NXSEC SUBTRACT ADDR OF FIRST SECTOR SSL A0,6 CONVERT SECTOR COUNT TO TRACKS TG,U A0,ADDSIZ+1 IS ADDTBL BIG ENOUGH? J OVFL NO, RETURN ERROR STATUS TO USER ON PRE33 TZ DIR$MFDF NEW (MFDF) FORMAT? J NOMCT YES, ALL SECTOR ADDRESSES . (DON'T NEED MCT) L,U A0,MCTPKT GET MASTER CONFIGURATION TABLE ER MCT$ TZ,S1 MCTPKT MCT$ STATUS OK? J MCTR NO ON LEVEL27 LA,T2 A0,MCTTBL+5 GET MCT LEVEL INDICATOR JNZ A0,NOMCT IF NEW FORMAT, GO ON LA,U A0,1 OTHERWISE, MODIFY MASKS SA,S1 A0,MASK1 SA,S1 A0,MASK2 OFF LEVEL27 NOMCT . OFF PRE33 L A0,NXSEC GET ADDR OF FIRST DIR SECTOR S A0,IOPAK+5 SET FOR READ OF FIRST DAS . ACW IS STILL SET FOR 28,BUF L A1,(1,0) SET INDEX INTO ADDTBL LXI,U A2,3 SET INCREMENT FOR DAS LA,U A3,1 SET NEW-UNIT FLAG INITIALLY . . READ NEXT DAS INTO BUF . GETDAS LA,U A0,IOPAK READ DIRECTORY ALLOCATION SECTOR (DAS) ER IOW$ DO THE I/O TZ,S1 IOPAK+3 OK? SLJ IOR NO ON SNAP LA,U A0,DASSNP GET SNAP$ PKT ER SNAP$ SNAP DAS OFF LXM,U A2,0 POINT TO FIRST WORD OF DAS . . PICK UP NEXT DIRECTORY TRACK ADDRESS FROM DAS . GETTRACK LA A0,BUF,A2 GET DIRECTORY TRACK ADDR FROM DAS JN A0,SKIPTRACK IF NEGATIVE, SKIP IT JZ A3,SAMEUNIT GOOD TRACK: JUMP IF NEW-UNIT CLEAR SA A0,RELADD SAVE 1ST REL ADDR ON UNIT . ONLY RELEVANT FOR MFDF FORMAT, . BUT ALWAYS DOING IT SAVES A TEST ON PRE33 AA A0,(0400000,0) MARK AS POSSIBLE SHORT TRACK OFF PRE33 LA,U A3,0 CLEAR NEW-UNIT FLAG J STORETRK GO ON SAMEUNIT . ON PRE33 TNZ DIR$MFDF SAME UNIT: NEW FORMAT ADDRESS? J STORETRK NO, USE ABSOLUTE ADDRESS, AS IS OFF PRE33 LA A0,RELADD YES, GET LAST REL ADDR THIS UNIT AA,U A0,0100 BUMP FOR THIS TRACK SA A0,RELADD UPDATE RELADD STORETRK S A0,ADDTBL,*A1 STORE DIR TRACK ADDR IN ADDTBL . . ANY TRACKS FOUND IN A DAS WILL NOT HAVE DAS'S IN SECTOR 0, . SO BUMP DRUM ADDRESS OF NEXT EXPECTED DAS TRACK FOR EACH TRACK WE FIND. . L A0,IOPAK+5 GET DRUM ADDRESS A,U A0,0100 BUMP ADDR OF NEXT TRACK WITH DAS S A0,IOPAK+5 UPDATE DRUM ADDRESS J NEXTTRACK GET NEXT TRACK FROM DAS . . AN EMPTY DAS TRACK ENTRY HAS BEEN ENCOUNTERED - SKIP IT . SKIPTRACK LA A0,RELADD ACCOUNT FOR MISSING TRACK IN MFDF AA,U A0,0100 RELATIVE ADDRESSING STRUCTURE. SA A0,RELADD (RELEVANT ONLY MFDF FORMAT, BUT . ALWAYS DOING IT SAVES A TEST). . . INCREMENT A2 (INDEX INTO DAS) AND GO GET NEXT TRACK ENTRY. . IF WE'VE REACHED THE END OF A DAS, GO GET THE NEXT ONE. IF NO . MORE EXIST, INITIALIZATION IS COMPLETE. . NEXTTRACK TLEM,U A2,24 REACHED 8TH TRACK IN DAS YET? J GETTRACK NO, CONTINUE WITH THIS DAS TZ BUF,A2 YES, IS LINK-TO-NEXT-DAS ZERO TP BUF,A2 OR NEGATIVE? (LOWER A2=27 HERE) LA,U A3,1 IF SO, SET NEW-UNIT FLAG L A0,IOPAK+5 ADDR OF NEXT EXPECTED DAS TLE A0,QSEC HAVE WE REACHED THE END? J GETDAS NO, READ NEXT DAS . . INITIALIZATION IS COMPLETE - STORE ADDTBL LENGTH, AND RETURN . SA,H2 A1,ADDL STORE ADDTBL LENGTH ON SNAP SA,H1 A1,ADDSNP+1 STORE # OF WORDS TO SNAP LA,U A0,ADDSNP SNAP$ PKT ER SNAP$ SNAP ADDTBL OFF LX X11,SAVX11 LOAD RETURN ADDRESS DO DEBUG>0 , SLJ TOFF$ J 0,X11 TAKE NORMAL RETURN /. DIRSEC - GETS THE NEXT DESIRED ITEM FROM THE DGET$ FILE. . THE TYPE OF ITEM TO BE RETURNED IS DETERMINED BY . THE MASK PASSED TO DIRINT. . . FORTRAN: CALL DIRSEC (ECODE,$ERR,BUFF) . . ASSEMBLY: LA,U A0,BUFF . LMJ X11,DIRSEC$ . A1,A2 CONTAINS ERROR CODE . . . DIRSEC SCANS ALL DIRECTORY TRACKS IN THE DGET$ FILE SEQUENTIALLY. . NXSEC HOLDS THE ADDRESS OF THE NEXT SECTOR IN THE DGET$ FILE TO BE READ. . IF IT IS THE FIRST SECTOR IN A TRACK, WE READ THAT TRACK INTO TRKBUF. . WE THEN CHECK EACH ALLOCATED SECTOR IN THE TRACK TO DETERMINE . WHETHER IT IS THE TYPE OF SECTOR THE USER WANTS. IF SO, WE GIVE IT TO HIM. . . WHEN THE END OF THE DGET$ FILE IS ENCOUNTERED, WE USE AN ERROR RETURN, . AND GIVE THE USER AN EOF STATUS. . . DIRLED MAY OPTIONALLY BE USED TO POINT DIRSEC AT A PARTICULAR LEAD . ITEM. IN THIS CASE, SUCCESSIVE DIRSEC CALLS WILL RETURN THE MAIN ITEMS . ASSOCIATED WITH THAT LEAD ITEM ONLY. WHEN NO MORE MAIN ITEMS ARE . FOUND, THE EOF STATUS IS RETURNED AND DIRSEC REVERTS TO NORMAL . SEARCHING MODE. . SECARG EQU 3 NUMBER OF ARGUMENTS . DIRSEC* LA,U A2,SECARG # OR ARGS, WITH ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A0,*USERBUFAD,A0 GET BUFFER ADDRESS J DIRSEC2 CONTINUE DIRSEC$* SZ FORPKT CLEAR FORTRAN CELL LXI,U X11,,X11 LOAD ERROR ADDRESS LXM,U X11,1,X11 NORMAL RETURN POINT DIRSEC2 SX X11,SAVX11 STORE X11 DO DEBUG>0 , SLJ TON$ SA A0,BUFRADDR SAVE BUFFER ADDRESS TZ GOTONE ARE WE RETRIEVING MAIN ITEMS (IN . WHICH CASE LEAD ITEM IS INCORE) ? J GTMITM YES, GET NEXT MAIN ITEM FOR . THIS LEAD ITEM. SZ LEDFLG NO, BE SURE LEDFLG IS CLEAR . . WE ARE LOOKING FOR THE NEXT LEAD ITEM (OR MAIN ITEM, IF DGETP$) . DIRSC1 L A2,NXSEC GET ADDR OF NEXT SECTOR TNZ A2 ERROR IF NOT INITIALIZED SLJ NOTINT TG A2,QSEC BEYOND LAST SECTOR? J EOF YES, RETURN WITH EOF STATUS . . IF ADDRESS IS SECTOR 0 OF A TRACK, WE MUST READ IN THAT TRACK . AND,U A2,077 FIRST SECTOR IN TRACK? JNZ A3,HAVETRACK NO,HAVETRACK YES,READ TRACK LA A1,(1792,TRKBUF) SET ACW AND DRUM ADDR DS A1,IOPAK+4 IN I/O PACKET LA,U A0,IOPAK READ THE TRACK ER IOW$ TZ,S1 IOPAK+3 IO OK? SLJ IOR NOPE, RETURN IO STATUS . . DX POINTS TO THE ENTRY WITHIN A DAS FOR THE CURRENT TRACK SO THAT DIRSEC . CAN CHECK THE SECTOR ALLOCATION BITS FOR THE TRACK. SINCE WE JUST READ . IN A NEW TRACK, WE MUST FIND THE ENTRY IN THE CURRENT DAS WHICH . CORRESPONDS TO THE NEW TRACK. IF WE HAVE REACHED THE END OF THE CURRENT DAS, . OUR NEW TRACK HAS A DAS IN SECTOR 0, SO WE MUST MOVE THAT INTO OUR . CURRENT-DAS BUFFER, BUF. NOTE THAT DX IS INITIALIZED TO BUF+24 . TO FORCE THIS ACTION ON THE INITIAL DIRSEC CALL. . NEWDX L A0,DX GET CURRENT INDEX INTO DAS . WHICH IS SITTING IN BUF A,U A0,3 INCREMENT TO NEXT TRACK DESC TG,U A0,BUF+27 REACHED END OF CURRENT DAS? J BTDAS YES, MOVE NEW DAS INTO BUF S A0,DX NO, SET NEW INDEX IN CURRENT DAS L A1,0,A0 GET TRACK ADDR FROM DAS JZ A1,NEWDX IF ZERO, TRY ANOTHER JN A1,NEWDX ALSO IF TRACK UNALLOCATED J HAVETRACK HAVE A GOOD TRACK . . MUST GET NEW DAS FROM THE DIRECTORY TRACK WE JUST READ IN . BTDAS LA A0,(1,BUF) SET DAS ENTRY INDEX TO 0 SA,H2 A0,DX (FIRST ENTRY DESCRIBES SELF) LR,U R1,28 SET FOR 28-WORD BT OF DAS LA A1,(1,TRKBUF) FROM TRKBUF TO BUF BT A0,0,*A1 DO IT J BUMP1 THE ADDRESS GIVEN WAS A DAS, SO . BUMP NXSEC AND SEARCH FOR LEAD ITEM. . . AT THIS POINT, A2 CONTAINS SECTOR ADDRESS, AND DX . POINTS TO TRACK INDEX IN CURRENT-DAS BUFFER (BUF). . HAVETRACK SSC A2,5 POSITION ADDRESS TO DETERMINE . WHICH 32-SECTOR ALLOCATION . WORD IN DAS IS APPLICABLE. AND,U A2,1 SET UP A3 AS INDEX TO 1ST OR . 2ND SECTOR ALLOCATION WORD A A3,DX FOLLOWING TRACK ADDRESS IN DAS SSL A2,31 GET SECTOR NUMBER MOD 32 L A0,1,A3 GET BIT MASK FOR THESE 32 SECTORS LSSL A0,0,A2 ISOLATE BIT FOR THIS SECTOR ON SNAP>1 S A0,NXSECSNP+2 L,U A0,NXSECSNP ER SNAP$ OFF JP A0,BUMP1 IF BIT CLEAR, THIS SECTOR NOT IN USE L A2,NXSEC IN USE - GET ADDR AND,U A2,077 ISOLATE SECTOR NUMBER MSI,U A3,28 CONVERT TO WORD INDEX L A0,TRKBUF,A3 GET FIRST WORD OF SECTOR . . DIRECTORY HOUSEKEEPING MAY LEAVE SHREDS OF MAIN ITEMS LYING AROUND WITH . DAS BITS SAYING THEY'RE IN USE. THEREFORE, WE HAVE TO SEARCH THE DGET$ . FILE IGNORING MAIN ITEMS, AND SNAGGING ONLY LEAD ITEMS. IF THE USER . WANTS MAIN ITEMS, WE'LL HAVE TO MAKE INTERNAL CALLS ON DIRLNK TO GET . THEM, FEEDING IT LINKS FROM THE LEAD ITEM. THIS HAS ITS ADVANTAGES: . AT LEAST THIS WAY WE GROUP ALL THE F-CYCLES OF A FILE TOGETHER. . LA A1,(1*/33) SET TO CHECK FOR L.I. SEC 0 TZ DGETP DGETP$ ? LSSL A1,1 YES, CHECK FOR M.I. SEC 0 AND A0,A1 CORRECT TYPE OF SECTOR? JZ A1,BUMP1 NO,BUMP1 YES TNZ WANTM DOES USER WANT MAIN ITEMS? J GTLITM NO, JUST GIVE HIM LEAD ITEM L A0,(1,TRKBUF) AU A0,A3 A1 = (1,TRKBUF+ITEMADDR) LXM,U A0,LBUF L,U R1,28 BLOCK TRANSFER BT A0,0,*A1 LITM TO LBUF FOR FINDING MITMS LA A0,(1,LBUF+11) SET INITIAL INDEX INTO LEAD ITEM 0 SA A0,LINDEX FOR FINDING MAIN ITEM LINKS S A0,GOTONE MARK LITM IN CORE SZ LFLAG CLEAR GOTL1, HMANY TNZ WANTL USER WANTS LITM? J GTMITM NO, GO GET HIM A MITM . . TRANSFER LEAD ITEM 0 TO USER'S BUFFER . GTLITM AA,U A2,1 BUMP SECTOR ADDRESS SA A2,NXSEC UPDATE ADDRESS OF NEXT SECTOR TO READ AA A3,(1,TRKBUF) POINT TO LEAD ITEM SECTOR IN TRKBUF GTLITM2 LA A0,BUFRADDR GET USER'S BUFFER ADDRESS LXI,U A0,1 SET INCREMENT FOR BT LR,U R1,28 BT A0,0,*A3 BT LEAD ITEM TO USER BUFFER LA,U A0,0 SET LEAD-ITEM FLAG, AND TNZ FORPKT FORTRAN CALL ? J DNOTFOR NOPE LA A0,FORPKT LOAD PACKET ADDRESS LA,U A0,*ECODE,A0 POINT TO ECODE CELL SZ 0,A0 CLEAR ERROR CODE SZ ECODE,A0 SET LEAD ITEM FLAG DNOTFOR LX X11,SAVX11 LOAD RETURN ADDRESS DO DEBUG>0 , SLJ TOFF$ J 0,X11 RETURN . . USER WANTS MAIN ITEMS, SO LET'S FIND THEM USING LINKS FROM LEAD ITEM . GTMITM L A0,HMANY HOW MANY MITM'S PASSED SO FAR TG,S4 A0,LBUF+9 ANY MORE IN THIS LEAD ITEM? J NOMORM1 NO, GET NEXT LEAD ITEM A,U A0,1 YES, SHOW WE PASSED 1 MORE S A0,HMANY LA A0,LINDEX PICK UP POINTER TO MAIN ITEM LINK TZ GOTL1 LEAD ITEE SECTOR 1 INCORE? J LIT1 YES, FIND MAIN ITEM LINKS THERE LIT0 TZ 0,A0 FIND NEXT LINK J GOTMILINK GOOD LINK: HANDLE IT TLEM,U A0,LBUF+27 END OF LEAD ITEM SECTOR 0? J LIT0 NO, KEEP GOING LA,U A0,L1BUF STUFF LEAD ITEM SEC 1 IN L1BUF LA A1,LBUF USE LBUF+0 AS LINK WORD ON DEBUG LA,U A2,1 MARK AS INTERNAL CALL SA A2,INTERNAL ON DIRLNK$ OFF LA A2,SAVX11 LOAD USER'S RETURN LA A3,ENTRYINFO LOAD THE REST DS A2,SAVX11X HOLD IT FOR NOW LMJ X11,DIRLNK$ GET LEAD ITEM SECTOR 1 J NOMORM IF ERROR, FORGET THIS LEAD ITEM DL A2,SAVX11X LOAD USER'S RETURN SA A2,SAVX11 REPLACE IT SA A3,ENTRYINFO REPLACE SOME MORE LA,U A0,1 SA A0,GOTL1 SET LEAD-ITEM-SEC-1-INCORE FLAG LA A0,(1,L1BUF+1) SET INDEX INTO LEAD ITEM SEC 1 SA A0,LINDEX FOR FIRST MAIN ITEM LINK LIT1 TZ 0,A0 LOOK FOR LINK J GOTMILINK GOT LINK TLEM,U A0,L1BUF+15 REACHED END OF LEAD ITEM SEC 1? J LIT1 NO, TRY NEXT LINK J NOMORM1 YES, FORGET THIS LEAD ITEM . . ERROR RETURN FROM INTERNAL DIRLNK$ CALL . NOMORM DL A2,SAVX11X LOAD SAVED STUFF SA A2,SAVX11 RESTORE RETURNS SA A3,ENTRYINFO AND OTHER STUFF . . END OF MAIN ITEM LINKS . NOMORM1 TZ LEDFLG ARE WE DOING A SINGLE LEAD ITEM? J EOF YES, TREAT AS EOF SZ LFLAG GOTL1,HMANY=0 SZ GOTONE CLEAR LINCOR FLAG J DIRSC1 NO, SEARCH FOR NEXT LEAD ITEM . . UPDATE NXSEC AND FIND NEXT LEAD ITEM . BUMP1 L A2,NXSEC POINT TO NEXT SECTOR A,U A2,1 S A2,NXSEC J DIRSC1 LOOK FOR A LEAD ITEM . . HAVE LINK TO MAIN ITEM SECTOR 0 - USE INTERNAL DIRLNK CALL TO GET IT FOR USER . GOTMILINK L A1,0,*A0 PICK UP LINK TO MAIN ITEM . AND INCREMENT LINK WORD POINTER SA A0,LINDEX UPDATE LEAD ITEM INDEX POINTER LA A0,BUFRADDR GET USER'S BUFFER ADDR TZ SEP SEPARATE LI/MI BUFFERS? A,U A0,28 YES, PUT MI IN BUFF+28 ON DEBUG LA,U A2,1 MARK AS INTERNAL CALL SA A2,INTERNAL ON DIRLNK$ OFF LA A2,SAVX11 LOAD RETURNS LA A3,ENTRYINFO AND POINTERS DS A2,SAVX11X SAVE THEM LMJ X11,DIRLNK$ INTERNAL DIRLNK CALL FOR MAIN ITEM J NOMORM IF ERR, FORGET THIS FILE LA A2,SAVX11X+1 GET CALLER INFO SA A2,ENTRYINFO RESTORE IN NORMAL PLACE L,U A0,1 SET MAIN-ITEM FLAG TNZ FORPKT FORTRAN CALL ? J MINOFOR NOPE LA A1,FORPKT LOAD PACKET ADDRESS LA,U A1,*ECODE,A1 LOAD ERROR CELL ADDRESS SA A0,,A1 STORE ERROR CODE FOR USER MINOFOR LX X11,SAVX11X RETRIEVE USER'S RETURN ADDRESS DO DEBUG>0 , SLJ TOFF$ J 0,X11 RETURN /. DIRLED - GIVEN A LEAD ITEM LINK ADDRESS (AS FROM THE LOOKUP TABLE, . A SEARCH ITEM, OR A MAIN ITEM BACK LINK), FIND THE SECTOR . IT POINTS TO, AND PLACE IT IN LBUF FOR DIRSEC. IF THE USER . WANTS LEAD ITEMS (AS INDICATED IN THE DIRINT MASK), THEN GIVE . IT TO HIM, ALSO. ON SUBSEQUENT CALLS, IF THE LEAD ITEM IS . STILL IN CORE (GOTONE IS NONZERO), JUST MERGE INTO DIRSEC . CODE AND RETURN THE MAIN ITEMS TO THE USER. . . FORTRAN: CALL DIRLED (ECODE,$ERR,BUFF,LINK) . . ASSEMBLY: LA,U A0,BUFF . LA A1,LINK . LMJ X11,DIRLED$ . A1,A2 CONTAINS ERROR CODE . . LEDARG EQU 4 NUMBER OF ARGUMENTS . DIRLED* LA,U A2,LEDARG # OF ARGS, WITH ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A1,*USERLINK,A0 POINT TO LINK WORD LA A1,,A1 GET LINK WORD FROM USER LA,U A0,*USERBUFAD,A0 GET USER'S BUFFER ADDRESS J DIRLED2 MERGE INTO ASM CODE DIRLED$* SZ FORPKT INDICATE ASM ENTRY LXI,U X11,,X11 SET ERROR RETURN LXM,U X11,1,X11 AND NORMAL RETURN DIRLED2 SX X11,SAVX11 SAVE RETURN INFO DO DEBUG>0 , SLJ TON$ SA A0,BUFRADDR SAVE USER'S BUFFER ADDRESS TZ GOTONE DO WE ALREADY HAVE A LEAD ITEM? J GTMITM YES, MERGE INTO DIRSEC CODE SA A0,LEDFLG NO, SET THIS-LEAD-ITEM-ONLY FLAG LA,U A0,LBUF SET OUR BUFFER ADDRESS FOR DIRLNK$ ON DEBUG LA,U A2,1 SET INTERNAL-DIRLNK$ FLAG SA A2,INTERNAL OFF DEBUG LA A2,SAVX11 SAVE USER'S RETURN, ETC. LA A3,ENTRYINFO DS A2,SAVX11X LMJ X11,DIRLNK$ INTERNAL DIRLNK$ CALL J NOMORM DIRLNK$ ERROR DL A2,SAVX11X GET SAVED RETURN/ENTRY INFO SA A2,SAVX11 AND RESTORE IT SA A3,ENTRYINFO LA A0,(1,LBUF+11) SET MAIN ITEM LINK INDEX SA A0,LINDEX LA,U A0,1 MARK LEAD ITEM INCORE SA A0,GOTONE TNZ WANTL DOES USER WANT THE LEAD ITEM? J GTMITM NO, MERGE INTO DIRSEC CODE LA A3,(1,LBUF) SET FOR BT J GTLITM2 MERGE INTO DIRSEC CODE /. DIRLNK - GIVEN A DIRECTORY LINK ADDRESS, FIND THE SECTOR IT POINTS TO, . AND TRANSFER IT TO THE CALLER'S BUFFER. . . FORTRAN: CALL DIRLNK (ECODE,$ERR,BUFF,LINK) . . ASSEMBLY: LA,U A0,BUFF . LA A1,LINK . LMJ X11,DIRLNK$ . A1,A2 CONTAINS ERROR CODE . . . LNKARG EQU 4 NUMBER OF ARGUMENTS . DIRLNK* LA,U A2,LNKARG # OF ARGS, WITH ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A1,*USERLINK,A0 POINT TO LINK ADDRESS LA A1,,A1 LOAD LINK ADDRESS LA,U A0,*USERBUFAD,A0 LOAD BUFFER ADDRESS J DIRLNK2 CONTINUE DIRLNK$* SZ FORPKT CLEAR FORTRAN PACKET LXI,U X11,,X11 LOAD ERROR RETURN LXM,U X11,1,X11 LOAD NORMAL RETURN DIRLNK2 SX X11,SAVX11 SAVE IT DO DEBUG>0 , SLJ TON$ SA A1,LINKERADD SAVE LINK ADDRESS SA A0,BUFRADDR SAVE BUFFER ADDRESS LINK01 TZ ADDL IS DIRINT INITIALIZATION COMPLETE? TNZ NXSEC SLJ NOTINT NO S R2,SAVR2 YES, SAVE R2 S X8,SAVX8 AND X8 . . CODE RIPPED OFF FROM @SECURE 19R2 ELEMENT 'DIRECT' . LA A0,A1 GET LINK WORD PASSED BY USER JZ A0,ADDCN3 IF ZERO, ERROR ON PRE33 TZ DIR$MFDF NEW FORMAT DIRECTORY FILE? J ADDCN1 YES, GO DIRECTLY TO SEARCH SSL A1,24 SHIFT UNTIL A1 = FLAGS AND SS # AND,U A1,0377 MASK OFF MOST FLAGS TEP,U A2,0200 REMOVABLE DISC? J ADDCN1 YES, GO DIRECTLY TO SEARCH LA,T2 A1,MCTTBL+6 GET MCT HEADER LENGTH ON LEVEL27 TNZ,T2 MCTTBL+5 LEVEL 27 EXEC? LA,T2 A1,MCTTBL+8 YES, GET OLD HEADER LENGTH OFF LEVEL27 A A1,A2 ADD SUBSYSTEM # L,T3 A2,MCTTBL,A1 GET OFFSET FOR SUBSYSTEM STATUS ENTRY L,S1 A3,MCTTBL,A2 PICK UP EQUIPMENT CODE TG,U A3,030 FASTRAND FORMAT MASS STORAGE? J ADDCN1 YES, DO SEARCH L X8,(1,1) GET ADDTBL INDEX ADDCN0 L A1,ADDTBL-1,X8 GET DIR TRACK ADDR FROM ADDTBL AND A1,MASK1 MASK OFF FLAG BITS AN,U A2,1 SET UP FOR RANGE TEST AU,U A2,1792 AND A0,MASK1 REMOVE FLAG BITS FROM INPUT ADDR TNW A2,A1 IS INPUT ADDR WITHIN THIS TRACK? J ADDCN5 YES ADDCN4 TLEM X8,ADDL ARE WE AT END OF TABLE? J ADDCN0 NO, TRY NEXT TRACK IN ADDTBL J ADDCN3 YES, NO FIND: ERROR ADDCN5 L,U A3,0,X8 A3 = INDEX INTO ADDTBL + 1 AN,U A3,1 ADJUST SLIGHTLY A,U A2,1 RESET A2 = TRACK ADDR FROM ADDTBL AN A1,A2 SUBTRACT TO GET WORD INDEX TN ADDTBL,A3 SHORT TRACK CASE? J ADDCN7 NO - SKIP AND A0,(0777777) YES, MASK OFF H1 AN,H2 A1,ADDTBL,A3 SUBTRACT TO GET WORD INDEX JN A1,ADDCN4 JUMP IF SHORT TRACK ADDCN7 LA,U A0,0 CLEAR FOR DIVIDE DI,U A0,034 FORM SECTOR INDEX JNZ A1,ADDCN3 JUMP IF BAD REMAINDER S A0,A1 STORE SECTOR INDEX IN A1 J ADDCN2 CONTINUE OFF PRE33 ADDCN1 L X8,(1,-1) SET ADDTBL INDEX AND INCREMENT L A2,ADDL A2 = TABLE LENGTH S A2,R1 STORE REPEAT COUNT L R2,MASK2 GET MASK FOR MSE MSE A0,ADDTBL+1,*X8 SEARCH FOR EQUAL TRACK ADDRESS J ADDCN3 NO FIND - ERROR L R2,SAVR2 L,U A3,0,X8 A3 = REL INDEX INTO ADDTBL AND A0,(0777777) MASK OFF H1 OF INPUT ADDR AN,H2 A1,ADDTBL,A3 - FOUND TRK ADDR TO GET SECTOR INDEX S A1,A0 STORE SECTOR INDEX IN A0 ADDCN2 L X8,SAVX8 RESTORE X8 A A3,FIRSTR GET LOGICAL TRACK # LSSL A3,6 CONVERT TO SECTOR # A A0,A3 ADD SECTOR INDEX S A0,IOPAK+5 STORE AS DRUM ADDRESS FOR IO L A2,NXSEC GET NEXT SECTOR ADDR AN,U A2,1 ADJUST SSL A2,6 CONVERT TO DGET$ FILE TRACK # SSL A0,6 CONVERT TARGET ADDR ALSO . . WE CURRENTLY HAVE ONE DIRECTORY TRACK INCORE. IF THE REQUIRED . SECTOR IS WITHIN THAT TRACK, WE CAN JUST BLOCK TRANSFER IT TO . THE CALLER'S BUFFER. IF NOT, WE MUST READ THE SECTOR IN . FROM THE DGET$ FILE. . TNE A0,A2 SAME TRACK? J BT YES, ALREADY HAVE IT INCORE LA A0,BUFRADDR LOAD BUFFER ADDRESS LXI,U A0,28 SET TO READ 1 SECTOR S A0,IOPAK+4 LA,U A0,IOPAK READ THE SECTOR ER IOW$ TZ,S1 IOPAK+3 IO OK? SLJ IOR NO J LINKDONE YES, ALL DONE . BT MSI,U A1,034 CONVERT SECTOR INDEX TO WORD INDEX AH A1,(1,TRKBUF) ADD START OF TRK BUFFER, AND INC LA A0,BUFRADDR LOAD BUFFER ADDRESS LXI,U A0,1 SET INC FOR BT L,U R1,28 BT A0,0,*A1 MOVE SECTOR TO USER'S BUFFER LINKDONE . ON DEBUG TNZ INTERNAL INTERNAL DIRLNK$ CALL? SLJ TOFF$ NO, TURN OFF SNOOPY SZ INTERNAL CLEAR INTERNAL-DIRLNK$ FLAG OFF LX X11,SAVX11 LOAD RETURN ADDRESS J 0,X11 RETURN . . LINK ERROR . ADDCN3 L,U A1,LNKERR A0 GETS ERROR TYPE L A2,LINKERADD A2 GETS USER'S LINK WORD L R2,SAVR2 RESTORE R2 L X8,SAVX8 RESTORE X8 ON DEBUG TNZ INTERNAL INTERNAL DIRLNK$ CALL? SLJ TOFF$ NO, TURN OFF SNOOPY SZ INTERNAL CLEAR INTERNAL-DIRLNK$ FLAG OFF J ERREXT2 NO, RETURN ERROR STATUS TO USER /. DIRLUT - RETURNS LUT SECTORS ONE AT A TIME TO USER'B BUFFER. . . FORTRAN: CALL DIRLUT (ECODE,$ERR,BUFF) . . ASSEMBLY: LA,U A0,BUFF . LMJ X11,DIRLUT$ . A1,A2 CONTAINS ERROR CODE . . . THE NEXT 28 WORDS OF LOOKUP TABLE WILL BE TRANSFERRED TO THE SUPPLIED . BUFFER. IF THE END OF THE LOOKUP TABLE IS ENCOUNTERED, THE ERROR . RETURN WILL BE TAKEN, AND AN EOF STATUS RETURNED. . LUTARG EQU 3 NUMBER OF ARGUMENTS . DIRLUT* LA,U A2,LUTARG # OF ARGS, WITH ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A0,*USERBUFAD,A0 GET USER'S BUFFER ADDRESS J DIRLUT2 MERGE INTO ASM CODE DIRLUT$* SZ FORPKT INDICATE ASM ENTRY LXI,U X11,,X11 SET ERROR RETURN LXM,U X11,1,X11 AND NORMAL RETURN DIRLUT2 SX X11,SAVX11 SAVE RETURN INFO DO DEBUG>0 , SLJ TON$ SA A0,BUFRADDR SAVE BUFFER ADDRESS LA A0,NXLUTSEC NEXT LUT SECTOR TO GET TG A0,LUTSECS REACHED END OF LUT? J EOF YES AA,U A0,LUTSTART NO, BUMP TO START OF LUT IN DGETT FILE LMJ X11,GETLUT POINT A0 TO START OF SECTOR IN CORE LXI,U A0,1 SET INCREMENT FOR BT LXM A1,BUFRADDR GET USER'S BUFFER ADDRESS LXI,U A1,1 SET INCREMENT FOR BT LR,U R1,28 SET TO MOVE 1 SECTOR BT A1,,*A0 TRANSFER LUT SECTOR TO USER'S BUFFER LA A0,NXLUTSEC GET NEXT LUT SECTOR AA,U A0,1 BUMP IT SA A0,NXLUTSEC UPDATE NEXT LUT SECTOR LX X11,SAVX11 PICK UP RETURN INFO DO DEBUG>0 , SLJ TOFF$ J 0,X11 NORMAL RETURN /. DIRLUW - GIVEN QUALIFIER AND FILENAME, PERFORMS HASHING AND RETURNS . THE LOOKUP TABLE WORD WHICH IS THUS REFERENCED. . . FORTRAN: CALL DIRLUW (ECODE,$ERR,QUALFL,LUTW) . . ASSEMBLY: LA,U A0,QUALFL . LMJ X11,DIRLUW$ . A1,A2 CONTAINS ERROR CODE . . . WHERE 'QUALFL' IS THE ADDRESS OF A 4-WORD BUFFER CONTAINING THE . FIELDATA QUALIFIER AND FILENAME. FOR FORTRAN CALLS, THE LOOKUP TABLE . WORD WILL BE RETURNED IN 'LUTW' -- FOR ASSEMBLY, IT WILL BE PUT IN A0. . LUWARG EQU 4 NUMBER OF ARGUMENTS . DIRLUW* LA,U A2,LUWARG # OF ARG, WITH ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A0,*USERBUFAD,A0 GET USER'S BUFFER ADDRESS J DIRLUW2 MERGE INTO ASM CODE DIRLUW$* SZ FORPKT INDICATE ASM ENTRY LXI,U X11,,X11 SET ERROR RETURN LXM,U X11,1,X11 AND NORMAL RETURN DIRLUW2 SX X11,SAVX11 SAVE RETURN INFO DO DEBUG>0 , SLJ TON$ TZ ADDL IS INITIALIZATION COMPLETE? TNZ NXSEC SLJ NOTINT NO DL A2,2,A0 YES, GET FILENAME FROM USER'S PACKET DL A0,0,A0 ALSO THE QUALIFIER DA A0,A2 GENERATE LOOKUP TABLE INDEX DSC A0,18 AH A0,A1 H DSL A0,18 A SSL A1,18 S AA A0,A1 H DSL A0,36 DI A0,DCLUTS DIVIDE BY SIZE OF LOOKUP TABLE . NOW HAVE LUT WORD INDEX IN A1 LA,U A0,0 SET FOR DIVIDE AGAIN DI,U A0,28 GET LUT SECTOR INDEX IN A0, . WORD INDEX IN A1 AA,U A0,LUTSTART ADD LUT STARTING SECTOR LMJ X11,GETLUT POINT A0 TO START OF THE DESIRED SECTOR AA A1,A0 ADD WORD OFFSET LA A0,,A1 PICK UP THE LUT ENTRY TNZ FORPKT FORTRAN CALL? J LUWASM NO LA A1,FORPKT YES, GET PARAMETER LIST ADDRESS LA,U A1,*USERLUTW,A1 POINT TO USER'S WORD SA A0,,A1 STORE ENTRY FOR USER LUWASM LX X11,SAVX11 PICK UP RETURN INFO DO DEBUG>0 , SLJ TOFF$ J 0,X11 NORMAL RETURN /. DIRLUF - GIVEN A QUALIFIER AND FILENAME, FINDS LOOKUP TABLE ENTRY, . AND FOLLOWS SEARCH ITEM CHAIN, IF NECESSARY, TO FIND THE . LEAD ITEM LINK. RETURNS LEAD ITEM LINK WORD OR 0. . . FORTRAN: CALL DIRLUF (ECODE,$ERR,QUALFL,LUTW) . . ASSEMBLY: LA,U A0,QUALFL . LMJ X11,DIRLUF$ . A1,A2 CONTAINS ERROR CODE . . . WHERE 'QUALFL' IS THE ADDRESS OF A 4-WORD BUFFER CONTAINING THE . FIELDATA QUALIFIER AND FILENAME. . . FOR FORTRAN CALLS, THE RESULTING LEAD ITEM LINK (OR 0) IS RETURNED . IN 'LUTW': FOR ASSEMBLY, IT IS RETURNED IN A0. . . IF AN ERROR IS ENCOUNTERED IN THE SEARCH ITEM CHAIN, THE ERROR RETURN . WILL BE TAKEN, WITH ECODE (A1) SET TO 'LUFERR'. . LUFARG EQU 4 NUMBER OF ARGUMENTS . DIRLUF* LA,U A2,LUFARG # OF ARG, WITH ERROR RETURN LMJ A3,FORLNK SET UP FORPKT AND RETURN POINTS LA,U A0,*USERBUFAD,A0 GET QUALFL ADDRESS J DIRLUF2 MERGE INTO ASM CODE DIRLUF$* SZ FORPKT INDICATE ASM ENTRY LXI,U X11,,X11 SET ERROR RETURN LXM,U X11,1,X11 AND NORMAL RETURN DIRLUF2 SX X11,SAVX11 SAVE RETURN INFO DO DEBUG>0 , SLJ TON$ TZ ADDL IS INITIALIZATION COMPLETE? TNZ NXSEC SLJ NOTINT NO SZ GOTONE CLEAR L.I. INCORE FLAG SA A0,LUFQF SSAVE QUALFL ADDRESS LA A2,SAVX11 GRAB RETURN INFO LA A3,ENTRYINFO AND ENTRY INFO DS A2,SAVX11X SAVE FOR LATER LMJ X11,DIRLUW$ FIND LOOKUP TABLE WORD J LUFERROR ERROR RETURN JP A0,LUFDONE IF ENTRY IS POSITIVE, RETURN IT . (IT'S EITHER 0 OR A LEAD ITEM LINK) SA A0,A1 OTHERWISE, PUT LINK WORD IN A1 . . LUT ENTRY POINTS TO SEARCH ITEM -- GET IT, AND FIND LEAD ITEM LINK . LUFSEARCH . ON DEBUG LA,U A0,1 SET INTERNAL DIRLNK$ CALL FLAG SA A0,INTERNAL OFF LA,U A0,LBUF USE LBUF FOR SEARCH ITEM LMJ X11,DIRLNK$ LINK TO SEARCH ITEM J LUFERROR ERROR RETURN LA A2,LUFQF OK, GET ADDR OF USER'S QUALFL BUFFER DL A0,0,A2 GET SPECIFIED QUALIFIER DL A2,2,A2 AND FILENAME LXI,U X11,5 SET INCREMENT FOR SEARCH LXM,U X11,LBUF POINT TO SEACH ITEM BUFFER LUFLOOP DTE A0,1,X11 MATCHING QUALIFIER? J LUFLOOPE NO DTE A2,3,X11 YES, MATCHIN FILENAME TOO? J LUFLOOPE NO LA A0,5,X11 YES, GET LEAD ITEM LINK J LUFDONE AND RETURN IT TO THE USER LUFLOOPE TLEM,U X11,LBUF+20 ALL DONE WITH SEARCH ITEM? J LUFLOOP NO, CONTINUE TP LBUF+0 YES, ARE THERE MORE? J LUFZERO NO, RETURN A ZERO LINK LA A1,LBUF+0 YES, GET LINK TO NEXT S.I. J LUFSEARCH CONTINUE SEARCH FOR LEAD ITEM LUFZERO LA,U A0,0 INDICATE NO SUCH FILE . . HAVE LEAD ITEM LINK OR 0: RETURN IT TO THE USER . LUFDONE DL A2,SAVX11X GET SAVED ENTRY/RETURN INFO SA A2,SAVX11 AND RESTORE IT SA A3,ENTRYINFO TNZ FORPKT CALLED FROM FORTRAN? J LUFASM NO, FROM ASSEMBLY LA A1,FORPKT YES, POINT TO PARAMETER LIST LA,U A1,*USERLUTW,A1 POINT TO USER'S DATA WORD SA A0,,A1 STORE LINK WORD OR ZERO LUFASM LX X11,SAVX11 GET NORMAL RETURN ADDRESS DO DEBUG>0 , SLJ TOFF$ J 0,X11 NORMAL RETURN . . DIRLUF ERROR HANDLER . LUFERROR DL A0,SAVX11X RETRIEVE USER'S ENTRY/RETURN INFO SA A0,SAVX11 AND RESTORE THEM SA A1,ENTRYINFO LA,U A1,LUFERR INDICATE DIRLUF ERROR J ERREXT1 TAKE ERROR RETURN /. GETLUT - SUBROUTINE TO GET THE DESIRED LUT SECTOR. . . ENTER WITH DGET$ FILE SECTOR # IN A0. READS UP THE SECTOR, IF . NECESSARY, AND SETS A0 TO THE ADDRESS OF THE SECTOR IN CORE. . . DESTROYS X11, A0, A2, A3 . GETLUT LA A2,LUTRD+5 GET FIRST SECTOR IN CORE TLE A0,A2 IS OURS THERE? J GETLUT1 NO, GET IT A,U A2,LUTL PERHAPS -- GET UPPER LIMIT TLE A0,A2 WELL, IS IT THERE? J GETLUT2 YES, USE IT GETLUT1 SA A0,A2 SAVE DESIRED SECTOR DSL A2,36 SET FOR DIVIDE DI,U A2,LUTL WANT TO READ FULL LUT RECORD SA A0,A2 SAVE DESIRED SECTOR AGAIN ANA A0,A3 CALCULATE 1ST SECTOR OF LUT RECORD SA A0,LUTRD+5 SET IN I/O PACKET LA,U A0,LUTRD GET I/O PACKET ER IOW$ READ THE LUT RECORD TZ,S1 LUTRD+3 OK? SLJ IOR NO ON SNAP LA,U A0,LUTSNP ER SNAP$ OFF LA A0,A2 YES, RESTORE DESIRED SECTOR # GETLUT2 ANA A0,LUTRD+5 CALCULATE INDEX INTO LUT BUFFER MSI,U A0,28 CONVERT SECTOR INDEX TO WORD INDEX LA,U A0,LUT,A0 POINT TO START OF SECTOR IN CORE J 0,X11 RETURN TO CALLER /. FORLNK - INTERFACE FOR FORTRAN CALLS TO DIREC$ SUBROUTINES . . ENTER WITH A2 = (ERROR-RETURN INDICATION,# OF ARGUMENTS). . WILL RETURN WITH A0 POINTING TO USER'S PARAMETER LIST, AND . LOWER X11 = NORMAL RETURN ADDRESS. IF H1 OF A2 IS POSITIVE . ON INPUT, THE ERROR RETURN ADDRESS WILL BE PUT IN UPPER X11. . FORLNK LXI,U X11,0 CLEAR ERROR RETURN TZ,S1 0,X11 IS THIS AN ASCII FTN CALL . (OR 'T' SERIES FORTRAN-V WITH NO . ARGUMENTS) ? J FORLNK2 YES, GO ON LA,U A0,,X11 NO, LOAD PARAMETER LIST ADDRESS AU,U A0,,A2 POINT A1 TO WORD BEYOND LAST ARG TNZ,S1 0,A1 'E' SERIES FORTRAN-V? AA,U A2,1 YES, ACCOUNT FOR WALKBACK WORD . IN NORMAL RETURN AX,U X11,,A2 SET NORMAL RETURN ADDRESS . . NOW HAVE NORMAL RETURN ADDRESS IN LOWER X11, AND ADDRESS OF USER'S . PARAMETER LIST IN A0. . . NOTE - FOR 'T' SERIES FORTRAN-V WITH NO ARGUMENTS, WE DON'T CARE . ABOUT THE PARAMETER LIST, BUT A2 HAD BETTER BE NEGATIVE! . ALSO, SINCE WE USE 'FORPKT' TO INDICATE A FORTRAN CALL . (VS. ASSEMBLY), WE MUST MAKE SURE THAT A0 IS NONZERO. . FORLNK2 TNZ,U 0,A0 'T' SERIES, NO ARGS, AND A0=0? LA,U A0,1 YES (OUCH!), FORPKT MUST BE NONZERO SA A0,FORPKT SAVE A0 AS PACKET ADDRESS JN A2,0,A3 JUMP IF NO ERROR RETURN LXI,U X11,*ERRORRTN,A0 SET ERROR RETURN ADDRESS J 0,A3 RETURN TO CALLER . . RE-INITIALIZE FLAGS AND ADDRESSES . RESET SZ GOTONE CLEAR LEAD-ITEM-IN-CORE FLAG SZ LFLAG CLEAR HMANY,GOTL1 TZ LEDFLG JUST DOING ONE LEAD ITEM? J RESET2 YES, SKIP SOME OF THIS SZ NXLUTSEC INITIALIZE DIRLUT LA A0,FIRSTR GET ADDR PF FIRST DIREC TRK LSSL A0,6 CONVERT TO SECTORS SA A0,NXSEC STORE AS NEXT SECTOR FOR DIRSEC LA,U A0,BUF+24 INITIALIZE DAS ENTRY INDEX TO SA A0,DX BT OF DAS FROM FIRST TRACK LA,XU A0,-LUTL GET A NEGATIVE NUMBER SA A0,LUTRD+5 SET INITIAL CALL ON DIRLUT RESET2 SZ LEDFLG CLEAR JUST-THIS-LEAD-ITEM FLAG J 0,A1 RETURN TO CALLER . . MSCON$ ERROR DURING DIRINT . MSCR L A2,A0 SAVE A0 AS RETURNED BY MSCON$ LSSL A0,12 GET ERROR STATUS - IF IT'S 033, SSL A0,30 EXEC HAS RESET INITIAL RESERVE TNE,U A0,033 IN MSPKT+3 TO NEEDED VALUE, J TRYAGN SO TRY AGAIN DGETER L,U A1,MSCERR NO GOOD, SET ERROR TYPE J ERREXT2 AND DO ERROR RETURN TRYAGN L A0,TRYCNT GET DGET$ ATTEMPT COUNT A,U A0,1 INCREMENT COUNT S A0,TRYCNT STORE IT TG,U A0,3 THIRD ATTEMPT? J DGETER YES, QUIT ON DIRSIZ>0 AN,U A0,1 ADJUST ATTEMPT COUNT FOR TEST JNZ A0,$+3 IF FIRST TIME THRU, L,U A0,LOGMSG TELL 'EM DIRSIZ GOTTA BE CHANGED ER CSF$ SEND @LOG MESSAGE OFF DIRSIZ>0 LMJ X11,DIREND$ FREE DGET$ FILE J REASG TRY RE-ASSIGNING WITH PROPER RESERVE . . I/O ERROR ENCOUNTERED . IOR J 0 ENTERED VIA SLJ L,U A1,IOERR SET I/O ERROR TYPE L A2,3,A0 A1 = STATUS, ETC. J ERREXT2 NO, RETURN ERROR TYPE/CODE TO USER . . MAXDIR TOO SMALL . OVFL LA,U A1,SIZERR GET ERROR TYPE LA A2,MSPKT+3 AND REQUIRED SIZE J ERREXT2 RETURN ERROR STATUS TO USER . . MCT$ ERROR . MCTR LA,U A1,MCTERR SET FOR MCT$ ERROR TYPE LA,S1 A2,MCTPKT GET STATUS IN A2 J ERREXT2 RETURN ERROR STATUS TO USER . . BAD DIRINT MASK SPECIFIED . BADMASK L A2,A0 GET MASK IN A2 L,U A1,MSKERR SET 'BAD MASK' ERROR CODE J ERREXT2 RETURN ERROR TYPE/CODE TO USER . . EOF ENCOUNTERED DURING DIRSEC/DIRLED/DIRLUT OPERATION . EOF LMJ A1,RESET RE-INITIALIZE FLAGS, ETC. . . NOW, IF SOMEONE GETS EOF RTN, THEN CALLS AGAIN, DIRSEC WILL START OVER AT . THE BEGINNING >WITHOUT< RE-INITIALIZING ADDTBL, ETC. . L,U A1,EOFERR SET 'DIRSEC EOF' ERROR TYPE J ERREXT1 RETURN TO USER . . CSF$ ERROR ENCOUNTERED . CSFR XOR A0,(1*/33) FILE ALREADY ASSIGNED? JZ A1,RERUN YES, MAY BE RERUN L A2,A0 NO, A2 GETS STATUS L,U A1,CSFERR A0 GETS CSF$ ERROR CODE J ERREXT2 RETURN ERROR CODE TO CALLER RERUN TNZ NXSEC ALREADY INITIALIZED? J DGETOK NO, DO IT LMJ A1,RESET RE-INITIALIZE FLAGS, ETC. LX X11,SAVX11 LOAD RETURN ADDRESS J 0,X11 RETURN . . DIRSEC/DIRLNK/DIRLUW/DIRLED CALLED BEFORE DIRINT COMPLETE . NOTINT J 0 ENTERED BY SLJ (BECAUSE OF . MORE THAN ONE WAY TO GET HERE) L,U A1,INITERR GET ERROR TYPE . . RETURN ERROR TYPE/CODE TO CALLER . ERREXT1 LA,U A2,0 NO ERROR CODE INVOLVED ERREXT2 TNZ FORPKT FORTRAN CALL ? J ERRASM NO. SKIP STATUS STORE LX X11,FORPKT LOAD PACKET ADDRESS LX,U X11,*ECODE,X11 POINT TO ERROR CELLS DS A1,,X11 STOTRE ERROR CODE FOR USER ERRASM LX,H1 X11,SAVX11 LOAD ERROR RETURN POINT ON DEBUG TNZ INTERNAL INTENRAL DIRLNK$ CALL? SLJ TOFF$ NO, TURN OFF TRACE SZ INTERNAL CLEAR INTERNAL-DIRLNK$ FLAG OFF J 0,X11 TAKE ERROR RETURN END @ELT,RI TPF$.DIREC$,,,154262141337 )@@@Q@@@@@@@@@@@@@@@@@@@@@@@@@. /5000 ,F/ ET--$$$$--DG @ASG,TAA@@@@ )@]0O@])@YG[@@@@@@$$--DG@@@@@@@@@@@@#____@#_____@@@@8"@@@@@[@@@@@@@@@@@@@@@@@@AB@@@@ )@ KC@0M)@@@)@B)]@)@I0]@)PJ)]E@@@@@@[O]@@/@@@@@@@@@@@@@@@@@@@W"@8"@@@@@@ET--$$AC@@@@ )PKKC@@@@@@@)PO)]E@@@@@@)@@@^"S@J@@@/\0@^.C@)[PQZ__[P @@@@@@@@@@@@@@@@@@@@@@@@AD@@@@ )@@)M-9)@/0@YS@#3@[8JG@@C@@[PS/\0@^.C@)[PR/KF@@@9*@@@]9*@@@O9*@[O"9?G@@@C8GK@@AE@@@@ )@]0K"S@JG@B&@#2@ 9)@/0@@@@@@@C8)@@^/KF@@@ @@@@M[@K@@@'=@@@@C@@[PT[@@@@@C@K@@@AF@@@@ )@^0O"@@/B&@@@@@@@*@@@@J;C0@@MC@0@@G C@@@F/K@@@)C@G@@@C8GK@]C@_@@@C8/K@#/\0@^.AG@@@@ )@BKM)YS@JG@[8JG@]=@K@@@%8K@@@C@K@@N/@K@ 2+8@@@A @@@@CA]0@@VQ';@@[&';@@@C@_@@@AH@@@@ )@D)M"#3@@Y#0B&@@/0@@@@@[*@@@C=8@@@^[?@@@C=8@@@]/K@@@1/K@@ 2=8@@@][)@@@C/K@@@:AI@@@@ )@F0M$&@#3@@[8JG@B&@@@@@C@@[PM9?K@@O8#K@@4 @G)@@&;@@@[C8K@@GC@@[PM[0@@@C=8@@@CAJ@@@@ )@I@M$=@S/B&@#0@@@@@@@@@C8@@@]?8@@@#;C@@@ /@@@[]C@@@@Q/^K@ .C4W@@A'=@@@@9*W@@@AK@@@@ )@KKM"S@JG@@[8JG@]&@@@@@C8@@@@[@)@@ /^@@[#;GK@@AG8K@@0W8@@@E;G@@@=C@)[PUG@@@@QAL@@@@ )@M)K"K@\@()@/)^Y@/B=@*@@@@@@@'=@@@@/@@@[MC@@@@J/G@@ M'=@@@@C8@@@N/^@@ 8'=@@@@AM@@@@ )@O)K"S@JG@B&@@/)AY#3@[9)@@@@@[@K[P@[[K[O_/K@@ $/,0@@@C8K@@@C@@[O"9*@@@/9?@@@OAN@@@@ )@Q)O"#3@@B)J[9)@@Q';@@[&';@@@ C@@@F/K@@[=C8GK@]/\0@^.C8)@@#/KF@@@R]0@@V/\K@ FAO@@@@ )@T@K"S@JG@B&@#0YS@JG@B)/0@@@@C@@[O"/^K@[0C@K[P@ @@[P^/K@@]F*@@@@H[^@@@FA]0@@VAP@@@@ )@V@M$=@30Y#3@[9)@JG@B)@/K@@[.(*@@@CC@0@@H[@K@@H @@[P@/@K@ 5/K@@ $/,0@@@C8K@@]AQ@@@@ )@XKM$&@@JG@B&@#3@[8JG@@C^@@@F/K@@]F(?@@@C @@@@D[@@@@HM#H)@@N8K@@WC@@[PV&;K@@[AR@@@@ )@Z)O)[9)@/B&@@@@@ @G@@@C8GK@@CC@@@F/K@@]D(C@@@FC8@@@@M#J)@@N8K@@W&;0@@[&;@@@[AS@@@@ )@+@M$&@@/0@YS@J@YS@JG@@C@@[O"[^@@@DG8@@@[/K@@]=!0@@@*C^@@@D/KF@@@R]0@@V @G@@@AT@@@@ )@=KO$=@30Y#3@@@@@M#H)@@N8K@@W&;@@@[G8@@@W&;K@@[C^@@@F/@K@]W/K@@ $/,0@@@C8K@@^AU@@@@ )@&0K"#3@@YK#J[8JG@B&@@@@@@@@@[@)@@V9?)@@W/K@@]K/K@@ $/,0@@@C8K@@#C@@[O"/K@@]!AV@@@@ )@*0K"S@JG@B)/0@YS@J[9)@@@@@@@G8)@@[C@)@@M/K@@[: @@@@H @@@@D/K@@ 5*@@[P^[@0@@FAW@@@@ )@%0M"S@J@YS@J[9)@#3@@@@R]0@@V[@H@@@C8XK@@CCK@@F/K@@]3(C@@@FC8@@@[/K@@[:[@)@@MAX@@@@ )@!@O-8@J[9)@@@@@@Q';@@[&';@@@ C@@@F/K@@]"C8GK@]C@X@@@C8WK@#/\0@^.C8)@@^/KF@@@AY@@@@ )@\)K"S@JG@B&@#0YS@ G@B&@#3@@@C@0@@FC@)@@VC8@@@Z[@@[P^/K@@]F*@@@@H[^@@@FA]0@@VAZ@@@@ )@1)K"S@J[8JG@B&@#3@@()@/0@@@@G*@@@(C8@@@%[@0@@F[@)@@V9?)@@W/K@@]-/,0@#29*)@@WBA@@@@ )@3)M$&@@/0@YS@J[9)@/@@@&';@@@/K@@[.C@0[PV/K@@]F(?@@@C[@@@@HC8@@@[[@@@@G&;@@@[BB@@@@ )@50M"S@#3@@ES@@/0@@@@@@C8K@@ C@@[O"M#H)@@N8K@@WC8K[PW&;@@@[A]0@@VQ';@@[[^@@@FBC@@@@ )@8@M"K#J[8JG@@[9)@@@@@@RA0@@VM#H)@@N8K@@W&;@@@[&;K@@[C^@@@F/@K@#%/K@@ $/,0@@@BD@@@@ )@'KO$&@@J@[8JG@@@ C@@@F/K@@#5C8GK@]C@X@@@C8WK@#/\0@^.C8)@@^/KF@@@RE0@@V/KF@@@BE@@@@ )@/0M-9)@/0@YS@JG@B&@@/@/@)@^CC@)@@HA]@@@U^@)@@T[^@@@F[@K@@EA]0@@VQ';@@[&';@@@BF@@@@ )@_@M"S@#2@T8J[9)@@@@@@@N8K@@W&;@@@[&;K@@[C^@@@F/@K@^C/K@@ $/,0@@@C8K@@CC@@[O"BG@@@@ )[[KM$&@@JG@B&@#3@[8@@@@C8)@@#/K@@A R]@@@UN@)@@TC@)@@EC8K@@B/KF@@@R]0@@VM#H)@@BH@@@@ )[#)M"@/B&@@JG@B)/0@@@@@R]0@@V/K@@ !A]0@@VQ';@@[&';@@@ C@@@F/K@@^OC8GK@]/\0@^.BI@@@@ )[ 0O-8#0YS@@/0@Y@/K@@ !A]0@@VQ';@@[&';@@@ C@@@F/K@@^ZC8GK@]/\0@^.C8)@@^/KF@@@BJ@@@@ )[CKM"S@J[9)@#3@@B)@@@@@/\0@^.C8)@@^/KF@@@R]0@@V[@H@@@C8XK@#CCK@@F/K@@^&(C@@@FBK@@@@ )[E)M$)/0@[9)@/B&@#0@@@@/K@@^6(C@@@F/K@@ !A]0@@VQ';@@[&';@@@ C@@@F/K@@^\C8GK@]BL@@@@ )[G0M"S@@/0@B&@#3@[9)@@@C8K@@F[@K@@F[@@@@V9?@@@W/KF@@@R]0@@V[@H@@@C8XK@#CCK@@FBM@@@@ )[J@Q"@J@@@@C8@@@[(8G@@@O'"@@@G8)@@[(4H@@@K8I@@@C8F@@@/K@@ *4F@@@&'0@@@/K@@A^BN@@@@ )[L0M"S@@JG@B&@#3@[8JG@@ @@[P#/K@@ K*@@[P^ @@@@D @@@@H/KJ@@@&'/K@[/G\@@@[C@@@FBO@@@@ )[O@O"S@@@/[8JG@@@C4@@@C/K@@A C8K@@[/K@@ T:8@@@V;C@@@Y;*@@@GC@)@@G/KH@@@ @@[P^BP@@@@ )[Q)O$&@@/B)/@B)@@/K@@A C@?@@#C8K@@]/K@@@@/K@@@//,0@@E/K@@ R!8@@@#[4@@@CG8@@@[BQ@@@@ )[T@I$&@#0YS@ G@B=@;0@@@)PO0]@MFDSP$/K@@ :'=@@@@C8@[PN[@@[PP/K@@A C@)@@QC8K@@ABR@@@@ )PP@^@)[U0I$)J@YS@J@@@@@/K@@A C4)@@JC8K@@C/K@@A C8K@@H/K@@A C8K@@G@@@@@@K@@@@@BS@@@@ )[W)O-8J@Y#3@[8@@@C8K@@^C@)@@G/@K@ .-@@[PX/K@@A^C8K@@#/\K@ F/K@@A C8K@@DC@)@@GBT@@@@ )[Z@M"#3@[8J[9)@@@@@@@@@C8)@@@C8K@@ /K@@@@/KF@@@R]0@@V/\K@ F/K@@[J(@@@@M/K@@A BU@@@@ )[-KI"S@J[9)@#3@@@)PP)^@__"@@@__"@@[/KF@@@RE0@@V9*V@@@R';K@@RE0@@F/K@@AE(C@@@FBV@@@@ )PQ@G]) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@@@@@@@@@@@@[@@Z/ @@^@@@@FREE BW@@@@ @EOF P )@@G@@@@ @@]@@B@@C@@R@@S@[7@@@[@@@@@@@E[PY@@@@AGDGET$ CSF$ DGETP$AA )@@G@@ FITEM$ MSCON$ FORK$ MFDSP$ SNAP$ DCLUTSAB )@@G@@ @@@@@@@@@[P[DIREND @@[@@@@@@@@CDIREND$ @@[@@@@@@@@EDIRFILAC )@@G@@ @@[@@@@@@@@@DIRFIL$ @@[@@@@@@@@^DIRINT @@[@@@@@@@@MDIRINTAD )@@G@@$ @@[@@@@@@@@TDIRLED @@[@@@@@@@]5DIRLED$ @@[@@@@@@@];DIRLNKAE )@@G@@ @@[@@@@@@@#?DIRLNK$ @@[@@@@@@@#2DIRLUF @@[@@@@@@@^*DIRLUFAF )@@G@@$ @@[@@@@@@@^?DIRLUT @@[@@@@@@@^HDIRLUT$ @@[@@@@@@@^LDIRLUWAG )@@G@@ @@[@@@@@@@^SDIRLUW$ @@[@@@@@@@^WDIRNSEC$ @@[@@@@@@@#QDIRSECAH )@@G@@ @@[@@@@@@@[XDIRSEC$ @@[@@@@@@@[-DIR$MFDF @@@@@@@@@@@IGOTONEAI )@@G@@ @@@@@@@@@@@HMSCON$FN @@@@@@@@@@@NPAKID$ @@@@@@@@@@@S@@@@@@AJ )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AK )@@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ AL @ELT,SI TPF$.DIRSUB,,,135363072623,023 . @MFD - DIREC$ INITIALIZATION AND ERROR INTERFACE ROUTINES . $(1) LIT . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMETERS EQUFS . DEFINE TAGS . . DIREC$ INITIALIZATION INTERFACE ROUTINE . DIRMASK EQU 016 DIRINT MASK DG$ EQU DGFILE='$$--DGET--$$' . DIR000* . ON DG$=0 . . IF DGET$ FILENAME IS NOT $$--DGET--$$, BETTER INFORM DIREC$. . DL A0,(DGFILE) GET DGET$ FILENAME LMJ X11,DIRFIL$ LET DIREC$ KNOW WHAT IT IS OFF DG$=0 . . IF THE N-OPTION IS SET, GET A NEW COPY OF THE DIRECTORY. IF NOT, . USE THE COPY WE HAVE (IF WE DON'T HAVE ONE, GET ONE). . TNZ NPT N OPTION? J DIR010 NO, USE OLD COPY OF MFD, IF ANY LMJ X11,DIREND$ YES, RESET FOR NEW DGET$ COPY . . GET DGET$ FILE AND DO THE DGET$ (UNLESS YOU ALREADY HAVE A GOOD ONE) . DIR010 LA,U A0,DIRMASK GET DIRINT MASK LMJ X11,DIRINT$ DO DGET$ AND SET UP DIREC$ J DIRECERR ERROR RETURN ON OLDMFD . . USE DIREC$'S TAG 'DIR$MFDF' AS A CONVENIENT WAY TO DETERMINE . WHETHER DIRECTORY ITEMS CONFORM TO THE OLD MFD FORMAT OR TO . THE NEW (MFDF) FORMAT, AND SET MFD$F ACCORDINGLY. . . NOTE - IF DIREC$ IS NOT BEING USED, THE SINGLE-FILE ROUTINE MUST SET . MFD$F PROPERLY. . TZ DIR$MFDF DID DIRINT GET NEW FORMAT DGET$? SR R15,MFD$F YES, SET NEW-FORMAT FLAG OFF OLDMFD . . LOAD CHECK/PRINT SEGMENT, AND RETURN TO MFD100 IN MAIN SEGMENT. . L$OAD CHEKPRTSG,MFD100,1 . LOAD CHK/PRT SEG AND RETURN TO MFD100 /. DIREC$ ERROR ROUTINE . ERRMSG 'MFD ERROR TYPE & CODE &' DIREC$ ERROR MSG DIRECERR* LXI X11,X11 SAVE RETURN ADDR IN UPPER X11 TE,U A1,3 DIRSEC$ EOF? J ERR100 NO ON SORTOK TZ SORT SORT DESIRED? J DOSORT YES, DO IT OFF SORTOK J MFD600 NO, FINISH UP ERR100 DS A1,ECODE SAVE ERROR TYPE & CODE E$DIT EDPACK OPEN EDIT E$MSG ERRMSG EDIT START OF MSG E$DECV ECODE EDIT ERROR TYPE TNZ ECODE+1 ERROR CODE PRESENT? J ERR200 NO, PRINT MSG E$MSGR . CONTINUE MSG E$OCTF 12,ECODE+1 EDIT ERROR CODE ERR200 P$RINT POUT PRINT MSG L A0,X11 GET X11 SSL A0,18 ISOLATE DIRECERR RTN SAVE LXI,U X11,0 PREVENT LOOPS AN,U A0,LNKRTN SR R15,BMI1 MARK AS BAD MAIN ITEM SEC 1 JZ A0,CHK220 TO 'CHK220' IF FROM 'LNKRTN' J MFD700 ELSE EXIT END @ELT,RI TPF$.DIRSUB,,,154267141337 )@@@K"K@J[9@]JC@$)/)#YK]@@@@@@^70@@@*@@@@@/K@@@K/,0@@@C8@@@I/,0@@@/K@@@#(W@@@HAA@@@@ )@]@O%K]-M@T9@I@@@%8K@@#&]0@@FODE & PE & CROR TYMFD ER'=@@@@C8K@@@&;@)@@C8@@@@AB@@@@ )@^)K"#2@-9@M/)EYK >C#B=[(K@@@C8@@@G/,0@@@C/@@@@9*K@@@/K@@@@/K@@@@*0@@@@/K@@@QAC@@@@ )@A)K"KBJC]7=[;2@!8JC^B=[S@@@@C8K@@GC@@@@[/,0@@@/K@@@<(@@@@[/,0@@@C@@@@@/,0@@@AD@@@@ )@C)M"KC>C^-9@&@O)O@@@@@^<8@[PH8@@@@&'0@@@;C@@@MC@@@@F'=@@@@C@G@@@C8@@@@/,0@@@AE@@@@ )@E0^"KE\C )@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/K@@@@/@@@@@AF@@@@ @EOF P )@@G@@@@ @@]@@B@@R@@5@@]@@.@@@[@@@@@@@E@@@@@@@@!OPTIONS DIREND$ DIRINTAA )@@G@@$ DIR$MFDF FLAG5 CHEKPRTSG MFD100 LOAD$ FLAG3 AB )@@G@@ DOSORT MFD600 ECODE EDPACK EDIT$ EMSG$ AC )@@G@@ EDECV$ EMSGR$ EOCTF$ POUT PRINT$ LNKRTNAD )@@G@@ CHK220 MFD700 DIRECERR @@[@@@@@@@@KDIR000 @@[@@@AE )@@G@@@@@@@@^@)^@)^@)^@)^@)^@)^@)^@)^@) 8%^[\IK?^[3H[\I8)E8\ES)H-(IT4 ))I(3G(=AF )@@G@@^[+JC)IC)G92H95I@)I93^@% 8)^@)'. The keyword may be any of the following: SPACE COLUMN 17 TAPE - selects tape files MASS - selects mass storage files REMOVABLE - selects removable disc files UNLOADED - selects unloaded files DISABLED - selects files which are disabled in any way HDW - selects hardware-disabled files WRN - selects warning-only disabled files BBT - selects files disabled due to bad backup tape BM1 - selects files with bad main item links GOPTION - selects guarded (G-option) files VOPTION - selects V-option (unload inhibit) files PUBLIC - selects public files PRIVATE - selects private files BAKDUP - selects files which have @SECURE backups READONLY - selects read-only files WRITEONLY - selects write-only files LAPSES - selects files which have lapse entries OLD - selects old-format (pre-level-33) files POSITION - selects position-granular files WAD - selects word-addressable files XUSE - selects files assigned for exclusive use COLUMN 2 SPACE For example: SPACE CENTER @MFD,A ,,,IF.TAPE SPACE is equivalent to the old format call: SPACE CENTER @MFD,AT SPACE Each of the keywords may be abbreviated to the first three characters, and each is also sortable, so you may list all your tape files separately from your mass storage files, etc. SPACE As can be seen, several additional attributes now have mnemonic names which are easier to use than the more complex ITEM(OFFSET)/TEST/PARTIAL.VALUE type of test. 3New Configuration Parameters 4OLDSTUFF The code to support the D, G, O, R, T, U, and V-options, as well as the special code for spec2 (size/reversed-options) and spec3 (equipment code) may now be proc'ed off using configuation parameter 'OLDSTUFF'. If this tag is set to zero, the D, G, O, R, T, U, and V options will be considered undefined. The newer methods for specifying these options and tests may not be as efficient in some cases, but they provide greater versatility while reducing the number of kludges in @MFD and using common code for all but the primary attribute tests. When 'OLDSTUFF' is set to zero, the special test specs may begin in spec2. SPACE In the shipped version, OLDSTUFF is nonzero. SPACE Although it is doubtful that anyone has configured @MFD with the 'NSSP' parameter set to zero, it should be noted that doing so when 'OLDSTUFF' is also set to zero will result in a version of @MFD which is only marginally useful. 4Filenames The names of the DGET$ and SDF output (W-option) files are now configurable. If the DGET$ filename is set to something other than '$$--DGET--$$', the new DIRFIL$ entry point in DIREC$ will be used to inform DIREC$ of the new filename. SPACE In the shipped version, the filenames are set to the standard '$$--DGET--$$' and 'OUT$$$', and the user documentation reflects these names. 4Maximum Number of 'BREAK' Specs Prior to this level, the maximum number of nested BREAK's which could be specified was governed only by the number of special specs permitted (NSSP). Since that many cells must be reserved for each quantity being subtotaled, a separate parameter has been implemented, resulting in a substantial reduction in the number of data cells required when the BREAK feature is configured. A reasonable setting for the new parameter (BRKMAX) would be 2 or 3. This parameter is ignored if BRKOK is zero. SPACE If BRKMAX is exceeded, a warning message will be printed, and the excess BREAK specs will be treated as SORT specs. SPACE In the shipped version, BRKMAX is set to 3. 4SNAP$ Subroutine The standard 1100 Operating System ER SNAP$ handler has certain disadvantages when used in a program such as @MFD. These include: SPACE COLUMN 11 LENGTH -5 - a format which makes output nearly unreadable on the typical demand terminal - a mostly useless heading with numerous blank lines, resulting in wasted paper or output rolling off CRT screens - printing of program-relative addresses rather than SNAP$ buffer-relative addresses - always printing a word whose address is divisible by 8 in the first column position: if your buffer doesn't start there, neither does your SNAP$ output. SPACE COLUMN 2 LENGTH +5 For these reasons, a SNAP$ subroutine has been implemented. Under configuration parameter control, it may be used rather than ER SNAP$. The subroutine attempts to resolve all of the afore-mentioned disagreeable characteristics of the ER. SPACE The shipped version is configured to use the SNAP$ subroutine. 3Undefined Options If any undefined options are specified, a warning message will be printed, and the undefined option(s) will be ignored. SPACE Also, the 'OPTION ERROR' message has been made more explicit since it really means that more than one primary attribute option was specified. EJECT 3'BREAK' Feature Enhancements 4Suppression of New Heading When a BREAK occurs, normal action is to eject the page and print a new heading following the subtotals. This action may now be suppressed via new forms of the 'BREAK' spec. SPACE BREAKN - same as BREAK, but no page eject or new heading. BREAKDN - same as BREAKD, but no page eject or new heading. EJECT 4Subtotal Descriptions Printed When the 'BREAK' feature is used to obtain a sorted listing with subtotals, the TOTALS routine now attempts to let you know just what the subtotals are for. For instance, let's say you want a list of the files under your Project-id, sorted by qualifier. Each time the qualifier changes, you want subtotals for the previous qualifier to be printed (and possibly a new heading: see above). Furthermore, you want to list the tape files separately from the mass storage files under each qualifier, and you want subtotals for each type. You might then use an @MFD call such as: SPACE CENTER @MFD,P ,BREAK*QUAL.,BREAK*IF.TAPE SPACE and @MFD would produce a listing of the form: SPACE ... Q1*TAPE1 ... ... Q1*TAPE2 ... SPACE TOTALS FOR TAPE, QUALIFIER Q1: ... SPACE ... Q1*MASS1 ... ... Q1*MASS2 ... SPACE TOTALS FOR MASS-STORAGE, QUALIFIER Q1: ... SPACE TOTALS FOR QUALIFIER Q1: ... SPACE ... Q2*TAPE1 ... ... Q2*TAPE2 ... SPACE TOTALS FOR TAPE, QUALIFIER Q2: ... SPACE TOTALS FOR QUALIFIER Q2: ... SPACE GRAND TOTALS: ... SPACE Note that in the above example, there are no mass storage files with qualifier 'Q2'. EJECT 3SORTF Enhancement A few levels back, SORTF was enhanced to permit use of a removable disc pack for the XB file, by configuration option. If, however, the pack or drive was not available, SORTF would just revert to a fixed assign of XB. SPACE The latest enhancement to SORTF involves this situation only. If the removable assign fails, SORTF will still revert to a fixed assign, but without the initial reserve. Furthermore, if the size of the file is such that using track granularity is not likely to cause a PCT expansion limit problem due to numerous granule items, then track granularity will be used. SPACE At ISD, we normally run with one spare disc drive, which has a removable pack ('TEMP00') on it constantly. We use this for sorts and other temporary files, and prohibit the cataloguing of files on it. Since we don't have any other removable pack usage, 'TEMP00' is always there...except when the spare drive is needed because of the failure of a fixed drive. This enhancement to SORTF was introduced to minimize the system impact of sorts while 'TEMP00' is unavailable. 3Other Changes In single-file mode, ER ERRPR$ will now be used to edit facility errors. If ERRPR$ is not available, @MFD will revert to its old method of editing the error status. SPACE The W-option SDFO linkages have been changed to use the new entry points implemented in SYSLIB 72R1. SPACE The remote load and test instruction sequences which are generated to handle the special spec tests and the 'BREAK' feature have been revamped to simplify them and to implement 'special' j-designators for some tests. It is now possible to define a spec4-n item which resides in a non-standard partial word of a directory item. For instance, at ISD, we consider the 'customer number' to be the first four characters of the account number. @MFD will now handle fields such as this by using the appropriate shift instructions. SPACE In addition, a good deal of general cleanup work has been done, and some of the code has been moved around. Separate elements have been formed to handle @MFD's heading and the SNAP feature. SPACE Lastly, both the generation document and the user document have been converted to upper/lower case ASCII. The user document no longer makes reference to the 'OLDSTUFF' options, but specs 2 and 3 are documented as not being used. If 'OLDSTUFF' is set to zero, the user documentation can be updated to show the special specs starting in spec 2. @ELT,SIQ TPF$.DOC/8-1,,,163541062115,007 @MFD Level 8.1 2Level 8.1 06/16/77 (ISD) 3Bug Fix - W/J-option conflict Use of the J-option used to confuse the SDF output routine invoked by the W-option. This has been corrected. 3Conversion to MASM Changes have been made to permit @MFD to be generated using MASM. Specifically, the changes involved are: SPACE column 16 PROCS - This PDP proc is no longer used. AXR$ - New MASM definition mode version of UNIVAC's AXR$ proc. MFDDEF - New MASM definition mode replacement for the PROCS element. SORTDEF - New MASM definition mode version of UNIVAC's sort packge proc element. A few procs were fixed to run correctly under MASM. DESCRIBE - This element has been updated to reflect the above changes. THISGEN - New SGS'es were needed to define the @MASM processor call. space column 2 In addition, each element now uses MASM's $INCLUDE directive to include the appropriate procs in the assembly. space If any of the definition-mode assemblies (AXR$, MFDDEF, and SORTDEF) are being changed in any way during an @MFD generation, they must be processed before any normal assemblies. @ELT,SIQ TPF$.DOC/8-2,,,007023102415,007 @MFD Level 8.2 2Level 8.2 08/20/77 (ISD) This level of @MFD was created using a UNIVAC-compatible version of ISD's enhanced EDIT$ package. It should no longer be necessary to use the special EDIT$ package to eliminate undefined symbols (ETIM$) when generating @MFD at another site. The 'DCFZ' tag in MFDDEF has been turned on, since the EDCFZ$ routine is now likely to be present in most sites' EDIT$ stuff. A bug in DIREC$ resulted in returning the same main item over and over for programs which set the 'I want main items only' bit when calling DIRINT. This has been fixed. @ELT,SIQ TPF$.DOC/8-3,,,211576140215,007 @MFD Level 8.3 2Level 8.3 11/12/77 (ISD) The SORTF subroutine has been enhanced to recognize and correctly process the information returned by level 35 MSALL$. The PRINT, PRINT2, and QF routines still need to be modified for level 35 compatibility. The documentation in DIREC$ regarding FORTRAN calling sequences and return of error codes has been clarified. The maximum number of spec fields has been increased again (from 18 to 30). Some people really get off on Polish notation. @ELT,SIQ TPF$.DOC/8-4,,,211632140215,007 @MFD Level 8.4 2Level 8.4 12/02/77 (ISD) Minor modifications have been made to the PRINT, PRINT2, and QF routines to provide initial Exec level 35 support. The POLDBG configuration parameter has been changed to allow three levels of super spec debug aids. The levels are: column 15 0 - no super spec debug 1 - snaps of the super spec tables will be performed upon request (via 'SNAP*POLISH.' specification). 2 - the snaps will always be performed if this level is configured. column 2 @ELT,SI TPF$.DSEG,,,135417072623,023 $(1) AXR$ . . . DYNAMIC SEGMENT MCORE$ ROUTINE - ADAPTED FROM 'DLOAD$' RLIB$ ELEMENT . DSEG* LSSL A1,2 CONVERT SEGID TO SLT INDEX A,U A1,SLT$ GET ADDR OF SLT ENTRY L,S2 A0,,A1 TEST IF SEG DEFINED AS DSEG TE,U A0,011 TNE,U A0,010 J $+2 IS A DSEG - CONTINUE ER EABT$ MUST BE A DSEG L,H1 A0,1,A1 LOAD IBANK ADDR NEEDED L,S2 A2,SLT$ DETERMINE IF SLT FORMAT COMPLEX TNE,U A2,022 J DLOAD0 IF COMPLEX, DLOAD0 JZ A0,$+3 CHECK FOR VOID SEGMENT A A0,(1*/34) SET PROGRAM-WIDE BIT FOR MCORE ER MCORE$ EXPAND IBANK L,H1 A0,2,A1 LOAD DBANK ADDR NEEDED JZ A0,DLOAD2 CHECK FOR VOID SEG A A0,(1*/34) SET PGM-WIDE BIT ER MCORE$ EXPAND DBANK J DLOAD2 CONTINUE DLOAD0 L A2,A1 SAVE INITIAL SLT ENTRY ADDR DLOAD1 JZ A0,$+4 CHECK FOR VOID SEG LXI,T1 A0,2,A2 LOAD BDI FOR THIS BANK A A0,(1*/34) SET PGM-WIDE BIT ER MCORE$ EXPAND BANK L,H2 A2,2,A2 LOAD LINK TO NEXT EXTENSION JZ A2,DLOAD2 JUMP IF ALL EXTENSIONS DONE A,U A2,SLT$ COMPUTE EXTENSION ADDR L,H1 A0,1,A2 LOAD BANK ADDR NEEDED J DLOAD1 CONTINUE EXPANSION LOOP DLOAD2 L,U A2,024 MARK SEG AS OVERLAY SEG S,S2 A2,,A1 J 0,X11 RETURN END @ELT,RI TPF$.DSEG,,,154270141337 )@@@M+=@@#0YK@<2@@@@@@@@C0)@@@CCH@@['=@@@@/K@@@B:8@@@C%8@@@DC0H@@@G8K@@@;*K@@]AA@@@@ )@]KM$)/B&@#2@CY#3@[9@^@'=@@@@G@@@@@/@@@@XCCH@@]'=@@@@G@@@@@/@@@@I/K@@@N:8)@@MAB@@@@ )@^)M"@/[9)@/)]B)O)@@@@@G8)@@@/@)@@XC^,@@]'=@@@@G@@@@@&ZI@@]/@@@@SC@)@@H/K@@@XAC@@@@ )@A0E$)@@@@@)@@@]@@@@@@@@@@@@@@@@@@@@@@@@@K@@@@@/KF@@@[0!@@@C8)@@O/K@@@OCCI@@[AD@@@@ @EOF P )@@G@@@@ @@]@@B@@#@@H@@[@@L@@@[@@@@@@@E@@[@@@@@)SLT$ EABT$ MCORE$AA )@@G@@ DSEG @@[@@@@@@@@@GD,G-3^@% 8)*U92)/^@)GL\H9?G(-H0)GL3I-(H(>AB )@@^@@BS)^@)^@)^@)^@) 8%^[OELP AC @ELT,DSI TPF$.GEN,,,175567040715,001 @SSG,FGW MAINTSKEL,,,,,,SGS/2,DESCRIBE,THISGEN,PCF/1,PCF,TCF/1,TCF @EOF @EOF @END @ELT,SIQ TPF$.GENDOC,,,211625140215,007 @ M F D --- Generation Notes SPACE 15 CENTER @ M F D -- Master File Directory Information Processor CENTER Generation Notes SPACE 5 CENTER R. Duff Kurland CENTER Information Systems Design, Inc. CENTER 3205 Coronado Drive CENTER Santa Clara, CA 95051 CENTER Tel. 408-249-8100 SPACE CENTER May, 1977 SPACE 15 CENTER (C) Copyright 1977, R. Duff Kurland 1Introduction COLUMN 2 @MFD is a master file directory listing processor usable on all UNIVAC 1100 series systems. It selects files based on a variety of options and specs, and prints the significant attributes of each file so selected in a tabular format. An attempt is made to squeeze all the necessary information into a single print line, although additional lines may be required in special cases. SPACE 2 COLUMN 11 LENGTH -9 CENTER ***** Notice ***** SPACE Although the original work on @MFD was done elsewhere, ISD has made a large number of modifications and extensions to it, and considers levels 8.0 and higher proprietary products of ISD. Recipients may use of modify it as they wish, but are requested not to redistribute it without authroization. COLUMN 2 LENGTH +9 2A Short History of @MFD UOM's @CATALOG was used as a basic guideline for @MFD's predecessor, @WHURP. @WIPE replaced @WHURP when MSCON$ and @SECURE came on the scene, and @WIPE was renamed @MFD after level 3.8 because nobody liked the name @WIPE. SPACE Most of the work on @WHURP and early levels of @WIPE was done at NYU's UHMC computer center (now defunct), by Arthur Kreitman and Dwight Arthur. In particular, the DIREC$ subroutine package was developed by Dwight Arthur. @MFD development and support remained at NYU, under the keyboard of Duff Kurland, through level 6.4E. SPACE During the development period at NYU, a number of significant improvements were suggested and/or implemented by Ed Boyhan, of SIAC, and by Kathy Nocella, Roberta Rankin, and Jessica Newman of AT&T. SPACE Bruce Hirschman of ISD was responsible for levels 6.5 and 6.5A, and Duff Kurland produced levels 7.0 and beyond. @MFD Central is currently ISD. 1Privileged Features This information is for use by installation management and systems programers, and is not intended for the general user. It explains certain features of @MFD that are only available to privileged users. 2The Z-option When in privileged mode, the Z-option may be used to direct @MFD to list all files in the directory, honoring only the secondary attribute options and special spec field tests. That is, no check on filename, account, project, etc., will be done. Thus, SPACE CENTER @MFD,ZLB SPACE will produce a long listing of all files, sorted by qualifier, filename, and F-cycle. 2Read/Write Keys for Specific File @MFD does not include the read/write keys of a file in its normal output. In privileged mode only, the QFK-options used together will cause @MFD to print the read and write keys of the file given in spec1. 2Configuring Privileged Options The tag 'PRVOPS' in the proc element may be changed to declare any option to be a privileged option. The Z-option should always be in this list. Other likely options are I, C, Y, and X. 1@MFD Generation Notes Several elements are included in this file for maintenance of @MFD. Their names and purposes are given below: SPACE COLUMN 16 LENGTH -5 MAINTSKEL - generalized program maintenance skeleton. SPACE DESCRIBE - SGS's which describe the elements of @MFD to MAINTSKEL. SPACE THISGEN - SGS's which stipulate what to do for this gen. As shipped, these are set for a full @MFD gen, without creating updated source. The source input, relocatable output, and absolute output are all assumed to be TPF$. SPACE PCF - the permanent correction file needed to bring the base level symbolics in this file up to the latest version. SPACE TCF - an empty element provided for local site modifications. SPACE GEN - an @ADD stream which uses the above elements to generate an @MFD absolute. As shipped, it will assemble all the elements, creating a full listing. SPACE OLDMAP - users who are still on Exec level 27 must use this @MAP symbolic, with @MAP level 23, and must set tag 'LDJOK' in the proc element to 0. Users of later Exec levels should ignore 'OLDMAP', although 'LDJOK' could still be set to 0 if desired. SPACE TCF/ISD - ISD's @MFD TCF, for informational purposes. COLUMN 2 LENGTH +5 SPACE Included in this file are ISD's versions of @ASM, @PDP, @ELT, and @MAP, all of which have been modified to permit dual-line-number listings via the SJ or LJ-options. MAINTSKEL makes use of this feature also, and SGS's are provided in 'THISGEN' to instruct the skeleton to use these non-standard processors from TPF$. EJECT 2MAINTSKEL The University of Maryland has a program-maintenance skeleton, to which its software releases (such as ASM) are adapted. It has clever features such as cataloguing new files to hold one's output, but these seem to do extremely little that would take any significant effort to do by hand. Also, it lacks some useful features, such as the ability to use non-standard processors (such as one's own assembler). Furthermore, it requires an SGS describing each element in the program; this is typical of its lack of convenient defaults. SPACE Our version of how to maintain programs is embodied in the element 'MAINTSKEL': It was developed by Dan Drake, formerly of ISD, and has been enhanced by other ISD folks since dan left. At some point there will be a proper document describing it; in the meantime this section should give enough information to make it possible to use the thing. 3Features It is assumed that you have a program file containing some source and procs, and a file (probably the same one) with current relocatables. You want (probably) to apply some permanent and/or temporary changes, producing (probably) a new absolute and (perhaps) new source. SPACE MAINTSKEL is designed to do all the above, with a bewildering variety of options. It will not catalogue new files, back up files on tape, or run test cases, as the Maryland skeleton will. In a little more detail, the features offered are as follows: SPACE Distinct files can be specified for source input, source output, procedure input, procedure output, relocatable input, relocatable output, and absolute output. If unspecified, these have allegedly reasonable default values, mostly defaulting to the source input file, which defaults to TPF$. SPACE Because it is assumed that changes will be applied repeatedly to the same source, no new source is produced unless requested. (If neither source output nor procedure output is specified, procedures are updated into a temporary file.) New source can be produced either by a 3-field processor call or by the U option. SPACE Normally, DOC elements are processed first; procedures second; MAPs last; everything else in between. SPACE Within each of those classes, elements will be processed alphabetically if requested. SPACE Elements can be selected for processing in a variety of ways. By default, all elements with changes are processed; but one can select only those with temporary changes, those with both permanent and temporary changes, everything in the file, and so on. SPACE One can select whether elements will be updated by PCF, TCF, both (default), or neither. SPACE Elements can be selected for listing on the basis of whether they have changes. SPACE Instead of updating elements, the skeleton can merge a PCF and TCF to make a new PCF. SPACE The correct processor for any element can be given explicitly (together with options) by an SGS; it can be determined (using standard options) from the table of contents of the source input file; or there can be no processor specification, in which case the element is processed by a default processor, which can be specified by the user (via the 'LANGUAGE' SGS). SPACE The user can specify his own processors to replace the standard ones. He can specify default options for all processors including standard ones. 3Processor Call The user is assumed to know how to call @SSG, giving sources for SGS, PCF, and TCF input. The only special feature relevant to this skeleton is spec2: If this is given as SPACE CENTER ./TOC SPACE the skeleton can read the 'TOC' SGS's to determine element types and subtypes; this determines the processor to be used for any element which does not have a 'DESCRIBE' or 'MAP' SGS (see below). If spec2 is not used in this way, the 'LANGUAGE' SGS gives the processor for non-described elements. REMAIN 20 3SGS Types The following conventions apply in describing SGS input: SPACE can be either a filename or qualifier,filename. SPACE can be element or element,version. SPACE refers to a standard element type or subtype as defined in section 24.2.1.1 Of the Exec-8 PRM, not an actual processor name. For procedures, therefore, one should use ASMP, COBP, or FORP, rather than PDP; the skeleton knows about providing the C or F option. SPACE [bracketed material] is optional. REMAIN 39 4File Definition SGS's COLUMN 2 The following SGS's are all optional. If any of them is omitted, a (hopefully) reasonable default is used. The general syntax is: SPACE CENTER SPACE 2 TABLE File Definition SGS's SPACE COLUMN 3 SGS name Purpose Default ------------------------------------------------------------------ : : : : : SI : Defines the file which contains : TPF$ : : : the source input, excluding : : : : procedures. : : : : : : : SO : Defines the source output file. : None. New source : : : if is 'U' (quotes : not produced. : : : required), U-option updating : : : : will be done. : : : : : : : RI : Defines relocatable input file. : SI : : : : : : RO : Defines relocatable output file. : SO if given, else RI : : : : : : PI : Defines procedure input file. : SI : : : : : : PO : Defines procedure output file. : SO if given, else : : : : RO if given, else a : : : : temporary file. : : : : : : : : To force a temporary : : : : file, use: PO 'TEMP' : : : : : : AO : Defines absolute output file. : RO : : : : : ------------------------------------------------------------------ END COLUMN 13 REMAIN 28 4DESCRIBE Purpose: Explicitly describes an element as being part of a package, and to explicitly define its subtype. May optionally define the options to be used when processing this element, and the name of the output element, if different. SPACE Syntax: DESCRIBE [,] [] SPACE Notes: If is omitted, the default options for the processor corresponding to the given subtype will be used. Generally, listing options (such as S) and update options (U) are not included, but are determined by the skeleton. SPACE If is given, this name will appear in spec 2 of the processor call card: the relocatable or absolute or procedure output. COLUMN 2 SPACE Examples: DESCRIBE NEWASM ASM DESCRIBE TEST1 ASMP TEST1,NEW DESCRIBE E1,V1 MAP,B ABSOUT SPACE Default: None COLUMN 13 REMAIN 28 4SELECT Purpose: This SGS is used to define where the skeleton looks to find elements to be processed. SPACE Syntax: SELECT SPACE COLUMN 24 : PCF - select elements which have PCF corrections. TCF - select elements which have TCF corrections. EITHER - select elements which have either PCF or TCF corrections. BOTH - process elements which have both PCF and TCF corrections. DESCRIBE - select all -and only- those elements which apear in 'DESCRIBE' SGS's. TOC - select all -and only- those elements which appear in 'TOC' SGS's. SPACE Examples: SELECT PCF SELECT TOC SELECT DESCRIBE SPACE COLUMN 13 Default: SELECT EITHER REMAIN 25 4PROCESS Purpose: Forces the given element to be processed regardless of the criterion in the 'SELECT' SGS. May also override 'DESCRIBE' SGS specifications for the element. SPACE Syntax: Two forms are possible: SPACE A. PROCESS SPACE forces processing of element . SPACE B. PROCESS [,] [] SPACE Fields 2 and 3 override the respective fields of any 'DESCRIBE' SGS for this element. SPACE COLUMN 24 Examples: PROCESS ALWAYSELT PROCESS NONSENSE ASM,Z NONSENSE,REL SPACE Default: None COLUMN 13 REMAIN 31 4MAP Purpose: This causes the element to be collected, regardless of the 'SELECT' and 'DESCRIBE' SGS's. SPACE Syntax: MAP MAP[,] [] SPACE Notes: If there is at least one 'MAP' SGS, only elements so specified will be collected; any other map symbolics selected for processing will be processed by @ELT. To prevent all collections, use just one 'MAP' SGS: Map 'NO'. SPACE COLUMN 25 Examples: MAP MAPSYM MAP MAP MAPSYM MAP NEWABS MAP MAP,NEW MAP,B ABS,NEW MAP 'NO' SPACE COLUMN 13 Default: If no 'MAP' SGS's are given, all elements which are found to be MAP symbolics (from 'PROCESS', 'DESCRIBE', or 'TOC' SGS, in that priority) will be @MAP'ed. REMAIN 26 4FIRST Purpose: The skeleton processes procs first, maps last, and everything else in between. The 'FIRST' SGS may be used to specify that a given element or type of element is to be processed -before- the procs. SPACE Syntax: FIRST SPACE COLUMN 24 : ELEMENT - the given (element, or element,version) is to be processed first. SPACE SUBTYPE - elements with the given subtype are to be processed first. SPACE COLUMN 13 Notes: The default is 'FIRST SUBTYPE DOC'. To specify that nothing is to be processed before the procs, the following SGS is needed: FIRST 'NO' (quotes required). COLUMN 24 SPACE Examples: FIRST SUBTYPE ELT FIRST ELEMENT ME,FIRST FIRST 'NO' COLUMN 13 SPACE Default: FIRST SUBTYPE DOC REMAIN 19 4APPLY Purpose: Determines which changes to apply in processing elements. SPACE Syntax: APPLY SPACE COLUMN 24 : PCF - apply PCF corrections only. TCF - apply TCF corrections only. BOTH - apply both PCF and TCF corrections. NEITHER - apply neither PCF nor TCF. SPACE Examples: APPLY PCF APPLY BOTH COLUMN 13 SPACE Default: APPLY BOTH EJECT 4PROCESSOR Purpose: The skeleton creates a set of 'PROCESSOR' SGS's which define the processor to be used upon encountering each element type, the options to use in various situations, and the spec fields required. The user may specify his own 'PROCESSOR' SGS's, to override any of these fields. The SGS's created by the sksleton are known as the standard 'PROCESSOR' cards. If the user does not specify anything for a particular subfield, the skeleton will pick up the value from the standard 'PROCESSOR' card for this element subtype. SPACE It is also possible to define a different standard 'PROCESSOR' SGS. This will be explained below. SPACE Syntax: A. To redefine the options for a given subtype: SPACE PROCESSOR ,,,, SPACE COLUMN 24 - defines the non-listing type options which should be used for this subtype. If this subfield is null, the non-listing options from the standard 'PROCESSOR' card for this subtype will be used. To specify that no non-listing options at all are to be used, specify 'NO' in this subfield (quotes required). - options to be used when no listing is desired. A null subfield results in use of the no-list options from the standard 'PROCESSOR' card for this subtype. If you wish to specify that no options are to be used, specify 'NO' (quotes required). - options to be used for a short listing. Otherwise, same as . - options to be used for a long listing. Otherwise, same as . COLUMN 13 SPACE B. To redefine the processor to be used when processing elements of a given subtype: SPACE PROCESSOR [] SPACE COLUMN 24 - as described aobve. - optional field with following syntax: SPACE [,] SPACE This second is used as a pointer to the standard 'PROCESSOR' card for this subtype. It is usually the same as the in . It is possible to have several 'PROCESSOR' cards for the same subtype: The last one encountered (usually the one supplied by the skeleton) is the standard one, and is used to fill in any subfields the user left null. SPACE If the in is equal to the in of some other 'PROCESSOR' SGS, then that other 'PROCESSOR' SGS becomes the standard 'PROCESSOR' card for this subtype: Any subfields not specified here will be satisfied from that other card. SPACE is a list of 2 or 3 subfields with the SGS-names of the files applicable to each spec. (Examples: ASM,SI,RO,SO or FORP,PI,PO ). COLUMN 13 SPACE and may be used to produce @ or @. in place of @. The usual conventions apply to and . SPACE SPACE Examples: SPACE 1. PROCESSOR ASM,'NO',E,SJ,LJ SPACE Here, the user is redefining the options to be used when processing ASM symbolics. No special non-listing options are desired. When no listing is to be generated, the user wants to use the E-option. Short listings are to use the SJ-options, and long listings are to use LJ. The standard PROCESSOR SGS for the ASM subtype will be used to find the processor name, its location, and the spec fields required. SPACE 2. PROCESSOR ASM,'NO',E,S,S ASM OUR,ASM OUR,FILE SPACE Here, the user is redefining the name and location of the processor to be used upon encountering ASM symbolics, as well as the options. Note that he wants 'long' listings to look just like 'short' listings. When an ASM symbolic is encountered, the skeleton will produce '@OUR*FILE.Our/ASM' with the appropriate options. The standard 'PROCESSOR' SGS for the ASM subtype will still be used to find the spec fields required. SPACE 3. PROCESSOR ASM ASM MASM SPACE Here, the user is just redefining the processor to be called when an ASM symbolic is encountered. Options and spec fields will still be obtained from the standard 'PROCESSOR' SGS for the ASM subtype, but the skeleton will produce '@MASM' instead of '@ASM'. SPACE 4. PROCESSOR ASM XXX 5. PROCESSOR XXX,Z,N,S,L XXX,SI,RO,AO YYY SPACE Example #5 defines a new processor, called @YYY, with specs SI,RO,AO. 'XXX' need not be equal to any of the canned standard subtypes. This 'PROCESSOR' SGS will become the standard 'PROCESSOR' card for the 'XXX' subtype, or for any other 'PROCESSOR' SGS which has 'XXX' as the in , as does example #4. SPACE Default: An entire set of standard 'PROCESSOR' SGS's is generated by the skeleton. See the skeleton for the contents of these standard cards, since you may wish to change them. REMAIN 41 4LIST Purpose: Of the elements selected for processing, determines which ones are to be listed, and at what length. COLUMN 24 SPACE Syntax: LIST [,] SPACE : PCF - list only the elements having PCF corrections. TCF - list only the elements having PCF corrections. EITHER - list only the elements having PCF or TCF corrections. BOTH - list only the elements having PCF and TCF corrections. ALL - list all elements selected for processing. NONE - don't list any elements. SPACE COLUMN 13 Elements which are being processed but are not to be listed will be given the options from the proper 'PROCESSOR' SGS. COLUMN 24 SPACE : SHORT - short listing desired. Use options from proper 'PROCESSOR' SGS. LONG - long listing desired. Use options from proper 'PROCESSOR' SGS. NOT - no listing desired. Use options from proper 'PROCESSOR' SGS. SPACE COLUMN 13 Notes: 'LIST NONE' is equivalent to 'LIST ,NOT'. Otherwise, if is not specified, 'SHORT' is assumed. In all cases, the listing options used are in addition to the (default) options, or the options from the 'MAP', 'PROCESS', or 'DESCRIBE' SGS. SPACE 'MAP' elements are treated as a special case for listing purposes: If 'LIST NONE' or 'LIST ,NOT' is specified, the no-listing options will be used. However, if 'LIST ,' is specified, 'MAP' elements will be given the specified options even if they don't have corrections of the specified type. COLUMN 24 SPACE Examples: LIST ALL,LONG LIST EITHER,SHORT LIST NONE COLUMN 13 SPACE Default: LIST ALL,SHORT REMAIN 17 4LANGUAGE Purpose: Specifies the assumed symbolic subtype of any element for which the subtype can not be determined from a 'MAP', 'PROCESS', 'DESCRIBE', or 'TOC' SGS. (The above is the priority order). SPACE Syntax: LANGUAGE COLUMN 24 SPACE Examples: LANGUAGE ELT LANGUAGE ASM COLUMN 13 SPACE Default: LANGUAGE ASM REMAIN 10 4MERGE Purpose: If this SGS is given, elements will not be updated; instead, the PCF and TCF will be merged to create (by an @ELT,IL) an element of the name given. SPACE Syntax: MERGE SPACE Example: MERGE NEWPCF SPACE Default: Process normally, don't merge. REMAIN 16 4UPDATE Purpose: Specifies that an updated PCF is desired. SPACE Syntax: UPDATE SPACE Notes: If 'UPDATE' is specified, the TCF will be merged into the PCF, updating the PCF. This is different from the 'MERGE' SGS, in that normal processing is still done. (Rather than doing a *CORRECT for each element being processed, a *CORRECT,PK will be done). Note that this SGS should be used only if 'APPLY BOTH' is also used. SPACE Default: Process normally, do not update PCF. REMAIN 16 4CORRECT Purpose: If you have the corrections for a given element separate from the PCF or TCF, or you'd like to use these corrections rather than what's in the PCF and TCF, you may use the 'CORRECT' SGS. SPACE Syntax: CORRECT FROM [] SPACE Notes: When the given is being processed, this will produce an '@ADD,E ' rather than a *CORRECT . SPACE Default: None REMAIN 25 4ALPHA Purpose: If this is specified, elements (within each class) will be processed in alphabetical order. This SGS applies both to updating and to merging operations. SPACE Syntax: ALPHA SPACE Notes: Because of the weaknesses of the SYMSTREAM language, alphabetization is expensive for more than about a dozen elements. For more than two dozen elements, it tends to become prohibitive. Note that if change-files are alphabetical, 'SELECT TCF' (or 'PCF') will produce alphabetical output. To list everything alphabetically while applying updates, it may be desirable to name all elements in the TCF, or even to set up a full set of 'DESCRIBE' SGSses in alphabetical order. Judicious use of the @SSG O and S-options may also help. SPACE We welcome any suggested algorithms for sorting with decent efficiency. SPACE Default: Don't alphabetize. REMAIN 21 4PROGRAM Purpose: Optional SGS which may be used to add descriptive information to the headings produced by the skeleton. SPACE COLUMN 24 Syntax: PROGRAM COLUMN 13 SPACE Notes: This SGS may have as many fields and subfields as necessary. The contents of all fields and subfields will be concatenated and included in the headings. Spaces will be inserted between fields, but not between subfields. COLUMN 24 SPACE Examples: PROGRAM BATCH INTER,FACE PROGRAM MYPROG LEVEL 5,A SPACE COLUMN 13 Default: None REMAIN 35 4LEVEL Purpose: Optional SGS which may be used to add descriptive information to the headings produced by the skeleton. Also may be used to convey level information to the program, through @MAP 'EQU' directives. SPACE Syntax: LEVEL [ ...] SPACE Notes: is field 1 only, but may be composed of several subfields. For heading purposes, a '-' will be inserted between each subfield. SPACE Fields 2 through n are optional. If not given, the 'LEVEL' SGS is used only for heading purposes, and the level number subfields may therefore contain any character which is legal in a heading. SPACE If fields 2 through n are given, they have the following meaning: COLUMN 24 SPACE Field 2: - this field should have the same number of subfields as field 1. It specifies the tags to be associated with each subfield of the level number in field 1. For example: SPACE LEVEL 7,2,5 BASE,PCF,TCF ... ... SPACE Field 3: - the element or element,version name of the MAP element to which the 'EQU' directives are to be added. SPACE Field 4: - the desired correction card for the MAP element given in field 3. SPACE Field 5-n: Same as fields 3 and 4, for additional MAP elements. SPACE COLUMN 13 Note that when used for this purpose, field 1 may contain only those characters which are acceptable for the value in a @MAP 'EQU' directive. SPACE COLUMN 24 Examples: LEVEL 10,4 SPACE This will result in '10-4' being part of the heading. SPACE LEVEL 7,6 BASLEV,UPDLEV MFDMAP ''-1,2'' SPACE This would cause '7-6' to be part of the heading, and would generate: SPACE *MFDMAP -1,2 EQU BASLEV/7 EQU UPDLEV/6 SPACE LEVEL 6 BASE MAPSYM -93 MAP,VERS ''-13,14'' SPACE this would cause '6' to be part of the heading, and would generate: SPACE *MAPSYM -93 EQU BASE/6 *MAP/VERS -13,14 EQU BASE/6 SPACE Default: None EJECT COLUMN 2 2SORTF Usage when sorting, @MFD makes use of the 'SORTF' subroutine, the symbolics for which now accompany the rest of the @MFD source. This routine came from UOM, but we have modified it a bit at ISD: Tags are included to allow the 'XB' file to be assigned on a removable disc medium if its size is above a given limit, or if the required space is not currently available on fixed mass storage. As shipped, the removable disc code is turned off. 2@MAP Options Use of the B-option when collecting @MFD is encouraged. 2Processor Name The signon line will use the name from the processor call statement, so the absolute element may be renamed as desired. For instance, if the following is done: SPACE @COPY,A MFD,FILE.GNARSH @FILE.GNARSH SPACE then the program will sign on with 'GNARSH X.X DATE TIME'. 2Local Modifications If you make any modifications or enhancements to @MFD, please let @MFD Central know about them. If generally useful, we will gladly add them to the next released version. 2Future Plans A general redesign using common banks is contemplated, as is the elimination of the admittedly awkward spec fields and the implementation of an @MFD 'language' to replace them. However, nobody is currently deeply involved in designing or coding either of these enhancements, so if you're interested, contact @MFD Central: some methods have been suggested, and they might prove worthwhile pursuing. 1User Documentation User documentation on @MFD may be found in the element 'USERDOC' in this file. For ease of maintenance, it is not included as part of this element. COLUMN 2 1Description of Changes This section contains a brief description of the changes that were incorporated into recent levels of @MFD. 2 Level 6.0C 09/20/74 (NYU) This is the level which was discussed at the Toronto USE conference in September, 1974. 2 Level 6.0D 09/28/74 (NYU) Added 'REF' and 'CAT' specs, to allow checking or sorting by date last referenced, or date catalogued. This level was on NYU release tape #13. 2 Level 6.0E 10/10/74 (NYU) Allow 'REEL' as sort key for tape files. 2 Level 6.0F 10/27/74 (NYU) A bug was fixed in the use of the 'CAT' spec. A date was requested via tread$ when it was already included in the spec field. 2 Level 6.0G 10/28/74 (NYU) Modified segment configuration to prevent thrashing of CHEKSG and PRTSEG. These two segment have now been combined into one segment, CHEKPRTSG. 2 Level 6.0H 10/30/74 (NYU) Rewrote qualifier and filename editing code to allow for Exec files with spaces and @ signs in their names. Previous code used EFD1$, which squashes out blanks and @ signs. New code counts the trailing blanks, and determines the correct number of characters to edit using ECOPY$. ECOPY$ is now also used for the project-id. This level was on NYU release tape #14. 2 Level 6.0I 11/03/74 (NYU) Enhanced printing routine to allow easy selection of which characters to print for various disable statuses. Also added 'BBT' disable-parameter, meaning bad-backup-tape. 2 Level 6.0J 11/08/74 (NYU) Assume reverse T-option (ignore tape files) if size is given in spec2. 2 Level 6.0K 11/14/74 (NYU) Created two new configuration parameters: SPACE COLUMN 14 LENGTH -5 GVHUSH - permits turning off printing of G and V option and totals. EXTRA - permits turning off printing of additional lines for files with multiple reels, packs, or secure backups. COLUMN 2 LENGTH +5 2Level 6.1 11/16/74 (NYU) Implementedd new routine to print additional lines for multiple tape reels, removable disc packs, and/or secure backup reels, and to edit lapse entries. The backup and lapse lines are only printed if in batch (long line) mode. This was done in a new overlay segment, PR2SG (elemeet PRINT2). @MFD will now handle all reels/packs/backups for a file, not just the first 2 reels, 5 packs, and 2 backups. SPACE When the QF-options are used, level 6.1 Will determine whether or not the user already had the file assigned. If so, an ER FITEM$ will be done to pick up as much information about the file as possible, allowing @MFD to handle temporary files, and to give more information for certain types of files (notably tapes). SPACE If no filename is given when the QF-options are used, TPF$ is now assumed. Also, if no primary attribute options are specifed, the QF-options will now be assumed, rather than the A-option as was the case on previous levels. SPACE The additional print line containing the individual equipment granule counts has been reformatted, and now includes the initial reserve. This line is only printed when a mass storage equipment type (or 'F') is given in spec3. 2Level 6.2 12/04/74 (NYU) Implemented new (configurable) code to augment the FITEM$ code which was added in 6.1. The new code lets @MFD link to the user's PCT (via LDJ) to retrieve information about temporary files which is only available there, such as the granule counts and packids. As a result of this implementation, the MAP symbolics for @MFD had to be revised to cause a bank-named collection. This collection is a bit strange, since we needed the normal data buffers to still be around while the LDJ was in effect, so the 'IBANK' has been set up to contain the even location counters, and the 'DBANK' has the odd location counters (really the instructions). It would have been simpler to do an LIJ of the PCT bank, but you can't do that. SPACE One side effect of this implementation was to point out a bug in the collector: In a bank-named collection, the segment load table entries for DSEG's do not indicate that they are, in fact, DSEG's. One line in the routine 'DSEG' had to be NOP'ed to prevent EABT$ due to this. If the PCT bank LDJ code is to be turned off (LDJOK EQU 0), then the old MAP symbolics (element 'OLDMAP') may be used to collect @MFD. SPACE DIREC$ has been fixed to work with a very small directory. It had been getting MSCON$ type 034 errors when the DGET$ file was very small. 2Level 6.3 12/13/74 (NYU) Enhanced the 'QF' routine to allow PCT search via ER PCT$ if configuration tag 'LDJOK' is set to zero. On level 27 systems, 'LDJOK' should be zero, and the 'OLDMAP' map symbolics should be used. On systems later than level 27, 'LDJOK' should be set to 1, since referencing the PCT via LDJ is more efficient than using ER PCT$. 2Level 6.3A 12/22/74 (NYU) Revised logic in 'QF' routine such that the ER FITEM$ is done first. The @ASG can thus be eliminated in many cases. 2Level 6.3B 12/31/74 (NYU) When the QF-options are used, information on additional files may be requested via data cards, read by the QF routine. A blank card used to mean a request for TPF$ information: This has been changed to mean a repeat of the previous file. SPACE The item snap capability has been made compatible with the sort capability. Previously, all the snaps were done, unsorted, and then all the sorted files were listed. Also enhanced snap capability to handle any combination of snap requests for LI0, MI0, and/or MI1. SPACE Added 'FCYCLE' item for specs 4-n. Can be used in tests or as sort key. The B-option will now sort by qualifier, filename, and F-cycle (after user-specified sort keys). 2Level 6.4 01/22/75 (NYU) Several enhancements were made to the spec4-n tests: SPACE COLUMN 7 LENGTH -5 1. Octal and decimal values are now accepted where applicable. 2. Specification of a mask to be applied to the directory infor- mation before the test is now permitted. 3. The 'SIZE' test item now means the total loaded tracks. 'BTB' was added for backup tape block tests. 4. Logical operations other than 'AND' are now supported between the tests. 'AND', 'OR', and 'XOR' are handled, but the specs must be written in Polish notation. For example: SPACE CENTER @MFD,A ,,,AND,EQUIP.035,OR,QUAL.SYSTEMS,FILE.PF SPACE where the specs are equivalent to the expression: SPACE CENTER (EQUIP=035 .AND. (QUAL=SYSTEMS .OR. FILENAME=PF)) SPACE The old format is still supported (AND's are assumed). 5. A 'GTB' item was added to permit SNAP$ of granule items (not useable with QF options). Also, 'SNAP*ALL.' Will cause @MFD to snap LI0, MI0, MI1, and GTB. COLUMN 2 LENGTH +5 SPACE Spec error messages have been improved to indicate which spec was in error, and the location within @MFD where the error was detected. SPACE When an equipment type is given in spec3, the totals printed at termination will include only the tracks on that equipment type. SPACE An enhancement has been made to permit any option(s) to easily be declared privileged-options at assembly time. Such options will only be useable from privileged runs. The X and Z-options are suggested for this category, as are the C and Y-options. The I-option might also be included. 2Level 6.4A 01/29/75 (NYU) Minor bug fixes 2Level 6.4B 01/30/75 (NYU) Minor bug fixes 2Level 6.4C 02/01/75 (NYU) New relative date test capability added. This level was on NYU release tape #16. 2Level 6.4D 03/13/75 (NYU) Enabled GTB snaps with QF options, except for temporary files. Added 2 new sortable spec4 items: 'ASG' (total assign count), and 'NBR' (number of backup reels). 2Level 6.4E 04/14/75 (NYU) Fixed problem with size specification in spec2. This level was on the last NYU release tape, #17. 2Level 6.5 07/07/75 (ISD) Descending sort capability has been added. SPACE Also, use of 'BREAK' rather than 'SORT' as a spec qualifier causes @MFD to print subtotals, eject the page, and re-print the heading (if desired) each time the key field contents change. Thus, SPACE CENTER @MFD,ZLB ,,,BREAK*ACCT. SPACE will produce a file list sorted by account. Each time a new account is encountered, subtotals for the previous account's files will be printed, and the new account's files will begin on a new page. The B-option will cause sorting by qualifier and filename within each account. 'BREAK' specs may be nested, if desired, as follows: SPACE CENTER @MFD,ZL ,,,BREAK*ACCT.,BREAK*PROJ. SPACE U12/16/20 mode bits are now interpreted. SPACE Configuration parameters have been added to provide the following features at site option: SPACE COLUMN 7 LENGTH -5 - For non-privileged users, hide the fact that a file is unloaded. - Hide Secure backup reel numbers from non-privileged users. - Hide files which are not under the non-privileged user's project. - Provide a legend of special characters for long listings. All special characters are now configurable. COLUMN 2 LENGTH +5 2Level 6.5A 07/17/75 (ISD) Bugs fixed in the handling of U12/16/20 mode bits. 2Level 7.0 06/16/76 (ISD) This is the first level to handle the MFD, FATBL, and equipment code changes implemented by UNIVAC in Exec level 33.R1. The new format is now @MFD's native mode, but compatibility code has been provided for Exec levels 27-20-225 and beyond. The specific areas of @MFD which were affected are: SPACE COLUMN 14 LENGTH -5 DIREC$ - this routine has been totally re-written to handle the MFDF relative addressing scheme as well as the old format. DIRLNK, formerly a separate element, has been included in the 'DIREC$' element. SORTF - modified to handle the new FATBL format. MFD - implement flag (MFD$F) to indicate MFDF format. CHECK - code to ascertain whether a file is mass storage, tape, or removable disc had to be modified. Use of spec3 to check for a specific equipment type, or to check for a nonzero granule count on a particular device type, is not supported for the new MFDF format. The only effect of spec3 will now be to cause printing of the granule counts by group number. INIT1 - the spec4-n item 'EQUIP' may still be used to test old-format equipment codes. A new item, 'TYPE', refers to the 'assign mnemonic' in the new MFDF directory items. Also, granule table snaps may now be performed by specifying 'SNAP*DAD.' INIT2 - sets tag 'MFD$F' based on DIREC$ tag 'DIR$MFDF'. PRINT - for the new-format MFD, the 'assign mnemonic' retained by the system in main item sector 0 word 14 is printed, rather than the old equipment type which was looked up in a table indexed by equipment codes. Also modified granule-count print routine to handle device groups. QF - when 'QF' encounters a temporary file, it creates a fake set of directory items for the rest of the processor to fiddle with, so this routine has been updated to produce directory items in the new format. One problem was encountered in this process: Directory items contain the 'assign mnemonic', but this is unobtainable for temporary files. The best we can do is to use the equipment index from the PCT item and the specific mnemonic table from the MCT to come up with the specific mnemonic of the device type the file is on. Specific mnemonics are not as pretty as the assign mnemonics, but what can we do? Suggestions in this regard are welcome. SPACE COLUMN 2 LENGTH +5 Additional features have been made configurable: SPACE COLUMN 7 LENGTH -5 - For sites with 2 or more systems, code may be enabled to print a 'system id', obtained from the MCT, as part of the sign-on line. - The extent to which the 'QF' routine attempts to get additional information from the PCT (for temporary removable disc files, etc.) Is now configurable. - The account number that @MFD,X checks to see if a file 'belongs to the Exec' is now configurable. - All pre-level-33 compatibility code may be turned off using a configuration parameter. COLUMN 2 LENGTH +5 SPACE A set of EQUF's is now used throughout the code for referencing various directory item fields. Please note that some of the col. 42-43 Special characters have been changed in the released version. As shipped, @MFD will print a legend explaining each of these characters when a heading is requested. 2Level 7.1 06/25/76 (ISD) Installed yet another fix for mode bits and options of MSA tape files. 2Level 7.2 07/16/76 (ISD) Fix for temporary word addressable files: Equipment code was incorrect. Also fix PCHAR bits for temp files. 2Level 7.2A 08/02/76 (ISD) Levels 7.0 through 7.2 would often neglect to list all the F-cycles of a file. The DIREC$ bug which caused this has been fixed in 7.2A. 2Level 7.3 08/02/76 (ISD) To avoid an abundance of gross kludges in @MFD, lead item sector 0 will now be sorted along with main item sectors 0 and 1. Although this will result in a larger sort file, it does clean up the code in several areas. The spec4-n handler in 'INIT1' was overhauled to accomplish this, and, in the process, sort keys were made more general: It is no longer necessary to sort only by items like 'ACCT' or 'QUAL' -- one may now sort by MI0(17)//S2 or any other allowable spec for tests. SPACE A bug in the 'BREAK' spec feature has been fixed. On previous levels, the break-on-change-of-this-spec flag was not being cleared and could result in unwanted breaks and extra overhead. SPACE The sort package returns records in its own buffers, with A0 pointing to the record. Previous levels of @MFD block transferred this returned record into @MFD's buffer. As of level 7.3, all references to the directory item buffers are based using X8. Prior to the sort, X8 points to the old buffer locations: When retrieving records from the sort, X8 is set to the buffer address returned by the sort package. This procedure will eliminate some of the overhead associated with sorting in @MFD. SPACE The design of the DIREC$ subroutine package is such that it normally searches for lead items. If lead items are desired by the caller, they are transdferred to him. If main items are desired, the lead item links are used to retrieve them. DIREC$ has always had a provision for doing a DGETP$ of a particular removable disc pack rather than a DGET$, but this code was never tested. As it turns out, it would never have worked, since the removable pack directory does not contain lead items. Althoguh @MFD does not utilize the DGETP$ feature, the version of DIREC$ which accompanies level 7.3 should be capable of handling a DGETP$ correctly. However, since removable packs are not used at ISD, this feature of DIREC$ has yet to be tested. 2Level 7.3A 08/06/76 (ISD) The maximum granules field for temporary mass storage files was incorrect on level 7.3, and has been fixed in 7.3A. SPACE Code has been added to 'SORTF' so that if removable 'XB' sort file assigns are desired, but the assign fails, the subroutine will revert to using a fixed assign. 2Level 7.4 08/17/76 (ISD) Latest Exec levels return files-extended via FITEM$ for all tape device types, not just MSA tapes. The MSA-tape test in 'PRINT2' has therefore been turned off. Negative (-0) blocks-extended counts will now be set to zero, also. 2Level 7.5 09/01/76 (ISD) Fixed bug in specs 4-n which was introduced in level 7.3. @MFD would go into an infinite loop in 'INIT1' if a spec such as 'BACKUP.XXXXXX' was given ('TE' to be done on full-word FIELDATA string). 2Level 7.6 09/22/76 (ISD) Fixed garbage F-cycle for privileged '@MFD,QFK FILE'. 2Level 7.7 10/13/76 (ISD) Fixed granules-by-equipment-type counts which are printed on additional line, along with initial reserve (requested via 'F' in spec3). SPACE Also, the element 'ID' is no longer used: The base level, update level, and optional local update level numbers are supplied via @MAP 'EQU' directives. 'MAINTSKEL' has been enhanced to provide these using the 'LEVEL' SGS. SPACE This level was on ISD release tapes #4 and #5. 2Level 7.8 12/02/76 (ISD) 3DIREC$ Changes A new version of the DIREC$ subroutine package accompanies this level. The old one is still in the file, as 'DIREC$/OLD'. Several enhancements have been made to DIREC$. They are described below. 4Calling Sequence All the DIREC$ routines may now be called from FORTRAN-V ('E' or 'T' series), ASCII FTN, or assembly language. The assembly calling sequence has been simplified, and does not require a parameter list inline. The assembly entry points all have a $ appended to the old entry point names. SPACE The requirement that DIREC$ be able to determine whether it is being called from FORTRAN-V ('E' or 'T') or ASCII FTN has resulted in an incompatibility with previous levels of DIREC$: The '$ERR' and 'ECODE' in the FORTRAN calling sequences have been reversed. 4New Entry Points A few new subroutines have been added to provide further flexibility: SPACE COLUMN 24 LENGTH -5 DIRFIL / DIRFIL$ - sets the DGET$ file name to something other than $$--DGET--$$. SPACE DIRLUT / DIRLUT$ - transfers the entire lookup table to the user, one sector per call (buffered). SPACE DIRLUW / DIRLUW$ - given a qualifier and filename, returns the appropriate entry from the lookup table. SPACE DIRLUF / DIRLUF$ - same as DIRLUW, but follows search item chain to find lead item link, and returns that. SPACE DIRLED / DIRLED$ - given a lead item link, finds that lead item, returns it to the user, and sets DIRSEC to stop after all associated main items have been passed. SPACE COLUMN 2 LENGTH +5 See DIREC$ code for further details. 3Other @MFD Changes All of @MFD's calls to DIREC$ subroutines have been recoded to use the new assembly calling sequences and entry points. SPACE For the case of @MFD,F (without the C or Y options), where the desired qualifier and filename are defined unambiguously, the new DIRLUF$ and DIRLED$ routines will be used, significantly speeding up @MFD,F . SPACE The size of the buffer supplied to RINF$ has been increased to handle @MFD calls with many specs. SPACE Two new 'SNAP' items have been added: SPACE LI1 - to snap lead item sector 1 if it exists. MI2 - to snap main item sectors 2 through n, if they exist. SPACE If 'SNAP*ALL.' Is specified, these items will now be included, as well. SPACE If neither the S nor the L-option is set, @MFD assumes long listing if batch, and short listing if demand. As of this level, long listing will be assumed for demand if the user has breakpointed PRINT$ to a file. This feature will only work on Exec levels 32 or above, where bit 34 of register A5 is set upon initial load if breakpointed. 2Level 7.9 01/06/77 (ISD) Fixed 'SNAP*ALL.' for temporary files. This caused EABT$ in 7.8 when an attempt was made to snap lead item sector 1. If snaps of lead item sector 1 or main item sectors 2 through n are specified for a temporary file, these snaps will now be bypassed. SPACE Implemented DAD/granule table snaps for temporary files. A subroutine has been added to the 'QF' element to retrieve the DAD/granule items from the PCT, one item at a time. For granule items (old-format directory) each item snap will be preceded by the number of the first granule in that item. Note that this feature is operable only if configuration parameter 'CHKPCT' is nonzero. EJECT 2Level 8.0 05/20/77 (ISD) This level is the first symbolic update since level 7.0. As of this level, ISD considers @MFD a proprietary product. Recipients may use or modify it as they wish, but are requested not to redistribute it without authorization. 3Bug Fixes Previous levels of @MFD checked a bit in the Lead Item to determine whether or not a file was catalogued with the G-option. Since @MFD operates by retrieving Lead Items first, bypassing the Main Items if the Lead Item is found not to satisfy the options and specs, it is with some regret that we have switched to using the Main Item G-option indicator. Tests have shown that various files in an F-cycle series may be catalogued with differing G-option settings. UNIVAC says that this is by design, so we suggest that anyone relying on the Lead Item G-option flag refrain from doing so. SPACE An error in DIREC$ (DIRINT$) which resulted in infinite loops and/or 'MFD ERROR TYPE 7' messages on Exec level 33 has been corrected. When DIRINT$ was scanning the DAS's to create its ADDTBL full of directory track addresses, it treated a zero track entry as an empty slot. However, it is possible to have a directory track at relative address 0 on a unit, and since the LDAT index is only in the first track entry of a DAS, the entire word may be zero. SPACE Polish notation errors in the special spec fields sometimes resulted in guard mode errors or other random failures. A fix has been applied to remedy this. SPACE Bugs resulting in incorrect subtotals when the BREAK feature is used have been fixed. SPACE IGDM errors in the SORTF routine were reported by sites with very many mass storage units. These were caused by the lack of a status check on the ER MSCON$ call to retrieve the mass storage availability table: An IGDM was likely to occur if the buffer size was too small, since in this case nothing is transferred and the buffer will be garbage. A status check and error message have been added to SORTF. 3'NOT' Logical Operator Added The 'NOT' logical operator is now supported for spec4-n special tests. It is applied to the following item or clause only. For example, the specs in the call: SPACE CENTER @MFD,A ,,,AND,QUAL.A,NOT,FILE.B SPACE are equivalent to the expression: SPACE CENTER (QUAL=A .AND. (.NOT. FILE=B)) SPACE while the specs in: SPACE CENTER @MFD,A ,,,NOT,AND,QUAL.A,FILE.B SPACE are equivalent to the expression: SPACE CENTER .NOT. (QUAL=A .AND. FILE=B) 3New Spec4-n Tests Most of the 'secondary attribute' options (G, O, R, T, U, and V) now have equivalent spec4-n test items. Each of the attributes is considered a 'value' for the 'IF' test item, and they are specified as 'IF.'. The keyword may be any of the following: SPACE COLUMN 17 TAPE - selects tape files MASS - selects mass storage files REMOVABLE - selects removable disc files UNLOADED - selects unloaded files DISABLED - selects files which are disabled in any way HDW - selects hardware-disabled files WRN - selects warning-only disabled files BBT - selects files disabled due to bad backup tape BM1 - selects files with bad main item links GOPTION - selects guarded (G-option) files VOPTION - selects V-option (unload inhibit) files PUBLIC - selects public files PRIVATE - selects private files BAKDUP - selects files which have @SECURE backups READONLY - selects read-only files WRITEONLY - selects write-only files LAPSES - selects files which have lapse entries OLD - selects old-format (pre-level-33) files POSITION - selects position-granular files WAD - selects word-addressable files XUSE - selects files assigned for exclusive use COLUMN 2 SPACE For example: SPACE CENTER @MFD,A ,,,IF.TAPE SPACE is equivalent to the old format call: SPACE CENTER @MFD,AT SPACE Each of the keywords may be abbreviated to the first three characters, and each is also sortable, so you may list all your tape files separately from your mass storage files, etc. SPACE As can be seen, several additional attributes now have mnemonic names which are easier to use than the more complex ITEM(OFFSET)/TEST/PARTIAL.VALUE type of test. 3New Configuration Parameters 4OLDSTUFF The code to support the D, G, O, R, T, U, and V-options, as well as the special code for spec2 (size/reversed-options) and spec3 (equipment code) may now be proc'ed off using configuation parameter 'OLDSTUFF'. If this tag is set to zero, the D, G, O, R, T, U, and V options will be considered undefined. The newer methods for specifying these options and tests may not be as efficient in some cases, but they provide greater versatility while reducing the number of kludges in @MFD and using common code for all but the primary attribute tests. When 'OLDSTUFF' is set to zero, the special test specs may begin in spec2. SPACE In the shipped version, OLDSTUFF is nonzero. SPACE Although it is doubtful that anyone has configured @MFD with the 'NSSP' parameter set to zero, it should be noted that doing so when 'OLDSTUFF' is also set to zero will result in a version of @MFD which is only marginally useful. 4Filenames The names of the DGET$ and SDF output (W-option) files are now configurable. If the DGET$ filename is set to something other than '$$--DGET--$$', the new DIRFIL$ entry point in DIREC$ will be used to inform DIREC$ of the new filename. SPACE In the shipped version, the filenames are set to the standard '$$--DGET--$$' and 'OUT$$$', and the user documentation reflects these names. 4Maximum Number of 'BREAK' Specs Prior to this level, the maximum number of nested BREAK's which could be specified was governed only by the number of special specs permitted (NSSP). Since that many cells must be reserved for each quantity being subtotaled, a separate parameter has been implemented, resulting in a substantial reduction in the number of data cells required when the BREAK feature is configured. A reasonable setting for the new parameter (BRKMAX) would be 2 or 3. This parameter is ignored if BRKOK is zero. SPACE If BRKMAX is exceeded, a warning message will be printed, and the excess BREAK specs will be treated as SORT specs. SPACE In the shipped version, BRKMAX is set to 3. 4SNAP$ Subroutine The standard 1100 Operating System ER SNAP$ handler has certain disadvantages when used in a program such as @MFD. These include: SPACE COLUMN 11 LENGTH -5 - a format which makes output nearly unreadable on the typical demand terminal - a mostly useless heading with numerous blank lines, resulting in wasted paper or output rolling off CRT screens - printing of program-relative addresses rather than SNAP$ buffer-relative addresses - always printing a word whose address is divisible by 8 in the first column position: if your buffer doesn't start there, neither does your SNAP$ output. SPACE COLUMN 2 LENGTH +5 For these reasons, a SNAP$ subroutine has been implemented. Under configuration parameter control, it may be used rather than ER SNAP$. The subroutine attempts to resolve all of the afore-mentioned disagreeable characteristics of the ER. SPACE The shipped version is configured to use the SNAP$ subroutine. 3Undefined Options If any undefined options are specified, a warning message will be printed, and the undefined option(s) will be ignored. SPACE Also, the 'OPTION ERROR' message has been made more explicit since it really means that more than one primary attribute option was specified. EJECT 3'BREAK' Feature Enhancements 4Suppression of New Heading When a BREAK occurs, normal action is to eject the page and print a new heading following the subtotals. This action may now be suppressed via new forms of the 'BREAK' spec. SPACE BREAKN - same as BREAK, but no page eject or new heading. BREAKDN - same as BREAKD, but no page eject or new heading. EJECT 4Subtotal Descriptions Printed When the 'BREAK' feature is used to obtain a sorted listing with subtotals, the TOTALS routine now attempts to let you know just what the subtotals are for. For instance, let's say you want a list of the files under your Project-id, sorted by qualifier. Each time the qualifier changes, you want subtotals for the previous qualifier to be printed (and possibly a new heading: see above). Furthermore, you want to list the tape files separately from the mass storage files under each qualifier, and you want subtotals for each type. You might then use an @MFD call such as: SPACE CENTER @MFD,P ,BREAK*QUAL.,BREAK*IF.TAPE SPACE and @MFD would produce a listing of the form: SPACE ... Q1*TAPE1 ... ... Q1*TAPE2 ... SPACE TOTALS FOR TAPE, QUALIFIER Q1: ... SPACE ... Q1*MASS1 ... ... Q1*MASS2 ... SPACE TOTALS FOR MASS-STORAGE, QUALIFIER Q1: ... SPACE TOTALS FOR QUALIFIER Q1: ... SPACE ... Q2*TAPE1 ... ... Q2*TAPE2 ... SPACE TOTALS FOR TAPE, QUALIFIER Q2: ... SPACE TOTALS FOR QUALIFIER Q2: ... SPACE GRAND TOTALS: ... SPACE Note that in the above example, there are no mass storage files with qualifier 'Q2'. EJECT 3SORTF Enhancement A few levels back, SORTF was enhanced to permit use of a removable disc pack for the XB file, by configuration option. If, however, the pack or drive was not available, SORTF would just revert to a fixed assign of XB. SPACE The latest enhancement to SORTF involves this situation only. If the removable assign fails, SORTF will still revert to a fixed assign, but without the initial reserve. Furthermore, if the size of the file is such that using track granularity is not likely to cause a PCT expansion limit problem due to numerous granule items, then track granularity will be used. SPACE At ISD, we normally run with one spare disc drive, which has a removable pack ('TEMP00') on it constantly. We use this for sorts and other temporary files, and prohibit the cataloguing of files on it. Since we don't have any other removable pack usage, 'TEMP00' is always there...except when the spare drive is needed because of the failure of a fixed drive. This enhancement to SORTF was introduced to minimize the system impact of sorts while 'TEMP00' is unavailable. 3Other Changes In single-file mode, ER ERRPR$ will now be used to edit facility errors. If ERRPR$ is not available, @MFD will revert to its old method of editing the error status. SPACE The W-option SDFO linkages have been changed to use the new entry points implemented in SYSLIB 72R1. SPACE The remote load and test instruction sequences which are generated to handle the special spec tests and the 'BREAK' feature have been revamped to simplify them and to implement 'special' j-designators for some tests. It is now possible to define a spec4-n item which resides in a non-standard partial word of a directory item. For instance, at ISD, we consider the 'customer number' to be the first four characters of the account number. @MFD will now handle fields such as this by using the appropriate shift instructions. SPACE In addition, a good deal of general cleanup work has been done, and some of the code has been moved around. Separate elements have been formed to handle @MFD's heading and the SNAP feature. SPACE Lastly, both the generation document and the user document have been converted to upper/lower case ASCII. The user document no longer makes reference to the 'OLDSTUFF' options, but specs 2 and 3 are documented as not being used. If 'OLDSTUFF' is set to zero, the user documentation can be updated to show the special specs starting in spec 2. 2Level 8.1 06/16/77 (ISD) 3Bug Fix - W/J-option conflict Use of the J-option used to confuse the SDF output routine invoked by the W-option. This has been corrected. 3Conversion to MASM Changes have been made to permit @MFD to be generated using MASM. Specifically, the changes involved are: SPACE column 16 PROCS - This PDP proc is no longer used. AXR$ - New MASM definition mode version of UNIVAC's AXR$ proc. MFDDEF - New MASM definition mode replacement for the PROCS element. SORTDEF - New MASM definition mode version of UNIVAC's sort packge proc element. A few procs were fixed to run correctly under MASM. DESCRIBE - This element has been updated to reflect the above changes. THISGEN - New SGS'es were needed to define the @MASM processor call. space column 2 In addition, each element now uses MASM's $INCLUDE directive to include the appropriate procs in the assembly. space If any of the definition-mode assemblies (AXR$, MFDDEF, and SORTDEF) are being changed in any way during an @MFD generation, they must be processed before any normal assemblies. 2Level 8.2 08/20/77 (ISD) This level of @MFD was created using a UNIVAC-compatible version of ISD's enhanced EDIT$ package. It should no longer be necessary to use the special EDIT$ package to eliminate undefined symbols (ETIM$) when generating @MFD at another site. The 'DCFZ' tag in MFDDEF has been turned on, since the EDCFZ$ routine is now likely to be present in most sites' EDIT$ stuff. A bug in DIREC$ resulted in returning the same main item over and over for programs which set the 'I want main items only' bit when calling DIRINT. This has been fixed. 2Level 8.3 11/12/77 (ISD) The SORTF subroutine has been enhanced to recognize and correctly process the information returned by level 35 MSALL$. The PRINT, PRINT2, and QF routines still need to be modified for level 35 compatibility. The documentation in DIREC$ regarding FORTRAN calling sequences and return of error codes has been clarified. The maximum number of spec fields has been increased again (from 18 to 30). Some people really get off on Polish notation. 2Level 8.4 12/02/77 (ISD) Minor modifications have been made to the PRINT, PRINT2, and QF routines to provide initial Exec level 35 support. The POLDBG configuration parameter has been changed to allow three levels of super spec debug aids. The levels are: column 15 0 - no super spec debug 1 - snaps of the super spec tables will be performed upon request (via 'SNAP*POLISH.' specification). 2 - the snaps will always be performed if this level is configured. column 2 @ELT,SI TPF$.HDG,,,135435072623,023 . @MFD HEADING ROUTINE . AXR$ . CONFIG . DEFINE CONFIGUARTION PARAMETERS EQUFS . DEFINE TAGS . PRT FORM 12,6,18 FORMAT T1,S3,H2 . . VARIABLE-LENGTH TABLE OF HEADING PRINT$ PACKETS . P3 . ON LEGEND PRT 2,LG1,LEGND1 PRT 1,LG2,LEGND2 PRT 1,LG3,LEGND3 PRT 1,LG4,LEGND4 PRT 1,LG5,LEGND5 PRT 1,LG6,LEGND6 PRT 1,LG7,LEGND7 PRT 1,LG8,LEGND8 PRT 1,LG9,LEGND9 PRT 1,LG10,LEGND10 P4 PRT -0,22,LIN5 OFF LEGEND ON LEGEND=0 P4 PRT 2,22,LIN5 OFF LEGEND=0 PRT 1,22,LIN6 PRT 1,22,LIN7 P4L EQU $-P4 NUMBER OF HEADING LINES P3L EQU $-P3 SAME, INCLUDING LEGEND LINES . ON LEGEND LEGND1 'SPECIAL CHARACTER MEANINGS (COLS. 42,43)' LG1 EQU $-LEGND1 LEGND2 +' @ : '+(WRNCHR*/18) 'WARNING ONLY DISABLED' LG2 EQU $-LEGND2 LEGND3 +' @ : '+(HDWCHR*/18) 'HARDWARE DISABLED' LG3 EQU $-LEGND3 LEGND4 +' @ : '+(BBTCHR*/18) 'BAD BACKUP TAPE' LG4 EQU $-LEGND4 LEGND5 +' @ : '+(BMICHR*/18) 'BAD MAIN ITEM SECTOR 1' LG5 EQU $-LEGND5 LEGND6 +' @ : '+(LPSCHR*/18) 'LAPSE ENTRIES EXIST' LG6 EQU $-LEGND6 LEGND7 +' @ : '+(NOBCHR*/18) 'NO BACKUP EXISTS' LG7 EQU $-LEGND7 LEGND8 +' @ : '+(BNCCHR*/18) 'BACKUP NOT CURRENT' LG8 EQU $-LEGND8 LEGND9 +' @ : '+(DELCHR*/18) 'FILE MARKED FOR DELETION OR' LG9 EQU $-LEGND9 LEGND10 ' ASSIGNED WITH ''U'' OR ''C'' OPTIONS' LG10 EQU $-LEGND10 OFF LEGEND LIN5 'MAX NO. LAST HIGHES' 'T TOTAL ' ' CATALOG ' 'BACKUP TAPE CREATED ' LIN6 'GRAN OPT EQUP ASG REF. TR' 'ACK FILENAME ' ' ACCOUNT PROJECT DATE N' 'UMBER POS BLK DATE TIME ' LIN7 . DO 22 , '------' /$(1) . . . ENTRY POINT FOR INITIAL HEADING, WITH LEGEND IF CONFIGURED. . CALLED BY INIT2. . HDG100* LR,U R1,P3L-1 NUMBER OF HEADING LINES - 1 . INCLUDING LEGEND LA,U A3,P3 FIRST LINE OF HEADING LMJ X11,HDG300 PRINT THE HEADING L$OAD INSEG,IN2200,1 RETURN TO INITIALIZATION ROUTINE ON BRKOK . . ENTRY POINT USED BY 'PRINT' ROUTINE TO REPRINT THE HEADING IF . 'BREAK' WAS SPECIFIED AND THE SORT KEY VALUE HAS CHANGED. . HDG200* LR,U R1,P4L-1 NUMBER OF HEADING LINES - 1 . EXCLUDING LEGEND LA,U A3,P4 FIRST LINE OF HEADING LMJ X11,HDG300 PRINT THE HEADING L$OAD CHEKPRTSG,PR0095,1 . RETURN TO PRINT ROUTINE OFF BRKOK . . SUBROUTINE TO PRINT HEADING . . ENTER VIA: LMJ X11,HDG300 . WITH: R1 = NUMBER OF LINES TO PRINT (-1) . A3 = ADDRESS OF FIRST PRINT PACKET . HDG300 JNZ LONGLIST,HDG310 LONG LISTING? . YES, HDG310 LA,U A2,12 NO, SHORT LA,U A1,P4L-1 NUMBER OF HEADING LINES - 1 SA,S3 A2,P4,A1 SHORTEN EACH LINE OF HEADING JGD A1,$-1 FROM 22 TO 12 WORDS HDG310 LXI,U A3,1 SET INCREMENT FOR PRINT LINE INDEX HDG320 LA A0,,*A3 GET PRINT PACKET ER PRINT$ PRINT LINE OF HEADING JGD R1,HDG320 PRINT ALL LINES J 0,X11 RETURN TO CALLER END @ELT,RI TPF$.HDG,,,154272141337 )@@@ME[KE[KE[KE[KE@@@@@@@[A@@3@[^@@\@[^@@:@[ @@&@[ @@-@[^@@X@[^@@T@[ @@O@]B@@HAA@@@@ )@]KOE[KE[K@@@@@@@LS. 42GS (COMEANINACTER L CHARSPECIA@[Q@[?@[Q@[Q__Q@[@@[B@@9AB@@@@ )@^0Q@@@@@@@ # : ABLED RE DISHARDWA = : LED DISABG ONLYWARNIN ? : ,43) AC@@@@ )@B)Q@@@@@@@ENTRIELAPSE > : OR 1 M SECTIN ITEBAD MA % : APE CKUP TBAD BAAD@@@@ )@EKQ@@@@@@@ * : URRENT NOT CBACKUP $ : ISTS KUP EXNO BAC & : T S EXISAE@@@@ )@H@Q@@@@@@@ OPTIOOR 'C'H 'U' ED WITASSIGN OR LETIONFOR DEARKED FILE MAF@@@@ )@J0Q@@@@@@@ L T TOTAHIGHESLAST NO. MAX NS AG@@@@ )@M)Q@@@@@@@ CRE TAPE BACKUPLOG CATA AH@@@@ )@PKQ@@@@@@@ILENAM F ACK TRREF. ASG QUP OPT EGRAN ATED AI@@@@ )@S@Q@@@@@@@K DATEPOS BLUMBER TE N DAOJECT PRUNT ACCO E AJ@@@@ )@U0Q@@@@@@@------------------------------------------------------------ TIME AK@@@@ )@X)Q@@@@@@@------------------------------------------------------------------AL@@@@ )@)K]@)@@@I+&@#0B=@[M@^@@@@@@@&;@)@@C8@@@@[@@@@@C8@@@#/,0@@KC80@@@N8K@@G------AM@@@@ )@[0M%K[JC@0()@/[9@C/)@@/KH@@@[@@@@@C@K@@@C8@@@#/,0@@KC80@@EN8K@@]'=@@@@C8K@@@AN@@@@ )@^@O"@JG@B)#2@P8@/KF@@@8KK@@Q'=@@@@C@J)@@&;0@@[8#K@@N[?!@@EC8K@@]C8)@@G/ 0@@PAO@@@@ @EOF P )@@G@@@@ @@]@@B@@A@@N@@]@@V@@@[@@@@@@@E@]]@@@@@ULINECOUNT INSEG IN2200AA )@@G@@ LOAD$ HDGRTN PRINT$ HDG100 @@[@@@@@@@@@HDG200AB )@@^@@ @@[@@@@@@@@DJU92*O AC @ELT,SI TPF$.INIT1,,,135455072623,023 . @MFD INITIALIZATION - PHASE 1 . . ALL USE OF INFOR$ MUST BE COMPLETE BY THE END OF THIS ROUTINE, SINCE . INFOR$ IS COLLECTED IN THE INIT1 SEGMENT, WHICH GETS OVERLAID AFTER . INITIALIZATION. . AXR$ . CONFIG . DEFINE CONFIG PARAMETERS EQUFS . DEFINE EQUF'S . PNAME 'MFD ' ASSUMED PROCESSOR NAME (12 CHAR) . REMOTE LOAD TABLE FOR C/Y OPTION SPEC MASK, ETC. . ACLD LA,S1 A0,0,X2 LA,S2 A0,0,X2 LA,S3 A0,0,X2 LA,S4 A0,0,X2 LA,S5 A0,0,X2 LA,S6 A0,0,X2 LA,S1 A0,1,X2 LA,S2 A0,1,X2 LA,S3 A0,1,X2 LA,S4 A0,1,X2 LA,S5 A0,1,X2 LA,S6 A0,1,X2 . ON NSSP . . INITIAL VALUES FOR REMOTE TEST INSTRUCTIONS . INITLOAD LA A0,MI0 INITTEST TE A0,A1 INITMASK - 0 INITDTE DTE A0,SSPVAL . HSSS FORM 18,6,6,6 TSSSS FORM 12,6,6,6,6 PRT FORM 12,6,18 . . TABLE OF OPCODE MNEMONICS AND OCTAL CODES . THE TAG ON EACH LINE IS SET EQUAL TO THE TABLE INDEX+1 OF THE ENTRY. . THAT IS, THE TAG FOR THE FIRST ENTRY WILL EQUQL 1, ETC. . P PROC 2 OP* NAME . + P(1,1),P(2,1)*/12 GENERATE TABLE ENTRY * EQU $-OPCODE SET INDEX+1 INTO TABLE END . . OPCODE . TZ OP 'TZ ' 050 TNZ OP 'TNZ' 051 TP OP 'TP ' 060 TN OP 'TN ' 061 TEP OP 'TEP' 044 TOP OP 'TOP' 045 TE OP 'TE ' 052 TNE OP 'TNE' 053 TLE OP 'TLE' 054 TNG OP 'TNG' 054 TG OP 'TG ' 055 DTE OP 'DTE' 0 OPCODL EQU $-OPCODE . . TABLE OF J-DESIGNATORS . . ------------------------------------------------------------------- . : J-DESIGNATOR : MS BIT : # BITS : 0 : . ------------------------------------------------------------------- . P PROC 4,1 JDES* NAME . HSSS P(1,1),P(2,1),P(3,1),P(4,1) END . . JSPECIAL EQU 1 'SPECIAL J-DESIGNATOR' FLAG JSIGN EQU 2 SIGN-EXTENDED J-DESIGNATOR . JTAB JDES 'W ' 1 36 . 00 JDES 'H2 ' 19 18 . 01 JDES 'H1 ' 1 18 . 02 JDES 'XH2' 19 18 JSIGN . 03 JDES 'XH1' 1 18 JSIGN . 04 JDES 'T3 ' 25 12 JSIGN . 05 JDES 'T2 ' 13 12 JSIGN . 06 JDES 'T1 ' 1 12 JSIGN . 07 JDES 'S6 ' 31 6 . 10 JDES 'S5 ' 25 6 . 11 JDES 'S4 ' 19 6 . 12 JDES 'S3 ' 13 6 . 13 JDES 'S2 ' 7 6 . 14 JDES 'S1 ' 1 6 . 15 JTABL EQU $-JTAB . JMSBIT EQUF JTAB,,S4 MOST-SIGNIFICANT BIT JBITS EQUF JTAB,,S5 # OF BITS IN FIELD JFLAGS EQUF JTAB,,S6 SPECIAL FLAGS . . TABLE OF LEGAL SUPER SPEC FILENAME (TEST LOCATION) VALUES. . . ------------------------------------------------------------------- . : SPEC (FIRST 3 CHAR) : J-DESIG :TEST INDEX: OFFSET : . ------------------------------------------------------------------- . : CONTROL BITS : VALUE : ITEM # : A/D SORT : ALF/BIN : . ------------------------------------------------------------------- . TB4 . START OF TABLE . TB4SPEC EQUF TB4,,H1 1ST 3 CHARS OF SPEC TB4J EQUF TB4,X9,S4 ASSUMED J-DESIGNATOR (MAY BE OVERRIDDEN) TB4OP EQUF TB4,X9,S5 OPCODE TABLE INDEX FOR ASSUMED TEST . STARTS WITH 1: 0 MEANS NO ASSUMED TEST TB4WRD EQUF TB4,X9,S6 WORD NUMBER WITHIN DIRECTORY ITEM TB4BITS EQUF TB4+1,X9,T1 CONTROL BITS TBSORT EQU 1 B-OPTION SORTS THIS ITEM AUTOMATICALLY TBNUM EQU 2 NUMERIC VALUE IS REQUIRED TBSNAP EQU 4 THIS ITEM IS FOR SNAPS ONLY TBDATE EQU 010 THIS ITEM REQUIRES ABS/REL DATE SPEC TBFD EQU 020 ALWAYS TREAT NUMERIC VALUE AS FIELDATA TB72 EQU 04000 72-BIT SORT KEY FIELD TB4VAL EQUF TB4+1,X9,S3 ASSUMED VALUE IF NONZERO TB4ITM EQUF TB4+1,X9,S4 DIRECTORY ITEM NUMBER TB4ADS EQUF TB4+1,X9,S5 ASSUMED SORT DIRECTION (A/D) TB4TYP EQUF TB4+1,X9,S6 ALPHA/BINARY KEY INDICATOR . . THESE ENTRIES, PLUS THE 'JTAB' TABLE, ARE USED TO CONSTRUCT . TWO-WORD SORT KEY PARAMETERS WITH THE FOLLOWING FORMAT: . . ------------------------------------------------------------------- . : 03 : KEY TYPE : ORDER : MS BIT : 0 : . ------------------------------------------------------------------- . : 77 : WORD NUMBER : NUMBER OF BITS : . ------------------------------------------------------------------- . . 'WORD NUMBER' IS RELATIVE TO THE LI0/MI0/MI1 SORT RECORD. THESE PARAMETERS . ARE CONSTRUCTED IN 'TEMPKEY' AND THEN MOVED TO 'ADDKEYS' (IN ELEMENT 'MFD'). . MOVED TO 'ADDKEYS' (IN ELEMENT 'MFD'). . P PROC 2,2 G0* NAME 0 LEAD ITEM SECTOR 0 G1* NAME 1 MAIN ITEM SECTOR 0 G2* NAME 2 MAIN ITEM SECTOR 1 G3* NAME 3 LEAD ITEM SECTOR 1 G4* NAME 4 MAIN ITEM SECTORS 2-N G5* NAME 5 DAD/GTB ITEMS G6* NAME 6 ALL ITEMS HSSS P(1,1),P(1,2),P(1,3),P(1,4) A(0) EQU 'B' ASSUME BINARY SORT DO P(2,1)='ALPHA' ,A(0) EQU 'A' SET FOR ALPHA SORT B(0) EQU 0 ASSUME SINGLE-WORD KEY DO P(1,3)=DTE ,B(0) EQU TB72 72-BIT KEY C(0) EQU 0 ASSUME NO ASSUMED VALUE DO P(2,1)='ALPHA' , GO GEN1 SKIP, PERHAPS C(0) EQU P(2,1) SET ASSUMED VALUE IF GIVEN GEN1 NAME . D(0) EQU 'A' ASSUME ASCENDING SORT DO P(1,3)=TEP ,D(0) EQU 'D' SET TO DESCENDING FOR TEP TEST TSSSS B(0)+P(0,1),C(0),P(0,0),D(0),A(0) END . . G0 'LI0' . LEAD ITEM SECTOR 0 G0,TBSORT 'QUA',W,DTE,1 'ALPHA' . QUALIFIER G0,TBSORT 'FIL',W,DTE,3 'ALPHA' . FILENAME G0 'PRO',W,DTE,5 'ALPHA' . PROJECT-ID G1 'MI0' . MAIN ITEM SECTOR 0 G1 'ACC',W,DTE,7 'ALPHA' . ACCOUNT G1 'DIS',S1,TOP,11 DISBTA . DISABLED IN ANY WAY G1 'HDW',S1,TOP,11 DISBTH . HARDWARE DISABLED G1 'WRN',S1,TOP,11 DISBTW . WARNING-ONLY DISABLED G1 'BBT',S1,TOP,11 DISBTB . BAD BACKUP TAPE G1 'UNL',S1,TOP,12 UNLBIT*/-6 . UNLOADED G1 'BAK',S1,TOP,12 BAKBIT*/-6 . BACKED UP G1 'LAP',S1,TOP,12 LPSBIT*/-6 . HAS LAPSES G1 'BM1',S1,TOP,12 BM1BIT*/-6 . BAD MAIN ITEM SEC 1 G1 'OLD',S1,TOP,12 OLDBIT*/-6 . OLD ITEM FORMAT G1 'MAS',S2,TEP,12 TAPBIT . MASS STORAGE FILE G1 'TAP',S2,TOP,12 TAPBIT . TAPE FILE G1 'REM',S2,TOP,12 REMBIT . REMOVABLE DISC FILE G1 'DRO',S2,TOP,12 DROPBIT . FILE TO BE DROPPED G1 'POS',S1,TOP,13 POSBIT . POSITION GRANULARITY G1 'WAD',S1,TOP,13 WADBIT . WORD ADDRESSABLE FILE G1 'TYP',W,TE,14 'ALPHA' . FILE TYPE (ASSIGN MNEMONIC) G1,TBNUM 'ASG',H2,TE,15 . TOTAL ASG COUNT DO OLDMFD>0 , G1,TBNUM 'EQU',S1,TE,17 . OLD EQUIPMENT CODE G1 'GOP',S2,TOP,17 MI0GBIT . G-OPTION FILE G1 'VOP',S2,TOP,17 VBIT . V-OPTION FILE G1 'PUB',S2,TEP,17 PBIT . PUBLIC FILE G1 'PRI',S2,TOP,17 PBIT . PRIVATE FILE G1 'XUS',S2,TOP,17 XUSE . ASSIGNED FOR EXCLUSIVE USE G1 'WRI',S2,TOP,17 WONLY . WRITE-ONLY FILE G1 'REA',S2,TOP,17 RONLY . READ-ONLY FILE G1,TBNUM+TBSORT 'FCY',T3,TE,17 . F-CYCLE G1,TBDATE 'REF',H1,TLE,18 . DATE LAST REFERENCED G1,TBDATE 'CAT',H1,TLE,19 . DATE CATALOGUED G1 'REE',W,TE,26 'ALPHA' . TAPE REEL G2 'MI1' . MAIN ITEM SECTOR 1 G2,TBNUM 'NBR',S2,TE,7 . NUMBER OF BACKUP REELS G2,TBNUM 'BTB',H2,TG,9 . BACKUP TAPE BLOCKS G2,TBNUM 'BFP',T2,TE,10 . BACKUP FILE POSITION G2 'BAC',W,TE,11 'ALPHA' . BACKUP REEL G2 'PAC',W,TE,18 'ALPHA' . PACKID G2,TBNUM 'SIZ',H2,TG,28 . SPECIAL-TOT TRKS SAVED IN . MI1+28 (SAVEAREA) ON SNAPOK G3,TBSNAP 'LI1' . SNAP OF LEAD ITEM SEC 1 G4,TBSNAP 'MI2' . SNAP OF MAIN ITEM SEC 2-N DO OLDMFD>0 , G5,TBSNAP 'GTB' . SNAP OF GRANULE TABLES G5,TBSNAP 'DAD' . SNAP OF DAD TABLES G6,TBSNAP 'ALL' . SNAP OF ALL ITEMS OFF SNAPOK TB4L EQU ($-TB4)/2 . ON SNAPOK . . TABLE INDEXED BY TB4ITM TO PICK UP PROPER SNAP BIT(S) . SNAPTB + SNL0 LEAD ITEM SECTOR 0 + SNM0 MAIN ITEM SECTOR 0 + SNM1 MAIN ITEM SECTOR 1 + SNL1 LEAD ITEM SECTOR 1 + SNM2 MAIN ITEM SECTORS 2-N + SNGT GRANULE (DAD) TABLES + SNL0+SNM0+SNM1; +SNGT+SNL1+SNM2 ALL OF THE ABOVE OFF SNAPOK . . TABLE OF ALLOWABLE OPERATION SPECS FOR POLISH NOTATION. . H1 IS 3-CHARACTER SPEC VALUE, S4 IS VALUE FOR POLISH TABLE, . AND S5 IS A BIT TO BE OR'ED INTO THE 'AOX' INDICATOR. . POLOP HSSS 'AND',AND,ANDBIT,0 HSSS 'OR ',OR,ORBIT,0 HSSS 'XOR',XOR,XORBIT,0 HSSS 'NOT',NOT,NOTBIT,0 POLOPL EQU $-POLOP . ON SORTOK . . CANNED SORT KEY PARAMETERS FOR B-OPTION . SRT1 FORM 6,6,6,6,12 SRT2 FORM 6,12,18 . QUKEY SRT1 03,'A','A',1,0 QUALIFIER SRT2 077,1,72 FIKEY SRT1 03,'A','A',1,0 FILENAME SRT2 077,3,72 FCYKEY SRT1 03,'B','A',25,0 F-CYCLE SRT2 077,28+17,12 . . SORT KEY PARAMETERS ARE CONSTRUCTED IN TEMPKEY, THEN MOVED TO ADDKEYS. . TEMPKEY SRT1 03,0,0,0,0 SKELETON SORT KEY PARAMETER SRT2 077,0,0 KEYIDX + 2,0 INDEX INTO ADDKEYS . SRTFLG + 0 SORT FLAGS SDTHSP EQUF SRTFLG,,H1 DESCENDING SORT FLAG SRTHSP EQUF SRTFLG,,H2 SORT THIS SPEC FLAG ON BRKOK BRKFLG + 0 'BREAK' FEATURE FLAGS BRKTSP EQUF BRKFLG,,S1 BREAK-THIS-SPEC FLAG BRKHDG EQUF BRKFLG,,S2 NEW HEADING WANTED FLAG BMAXM 'MAX # OF NESTED BREAK''S EXCEEDED: EXCESS TREATED AS SORT''S.' BMAXP PRT 2,$-BMAXM,BMAXM PRINT$ PACKET OFF BRKOK OFF SORTOK . ON SNAPOK SNTHSP + 0 SNAP-THIS-SPEC FLAG OFF SNAPOK TODAY RES 1 TODAY'S TDATE$ HOLDER FOR DATE TESTS OFF NSSP . . THE FOLLOWING TABLE CONSISTS OF THREE-WORD ENTRIES FOR EACH . ALLOWED QUALIFIER IN THE SUPER SPEC FIELDS. THE FIRST TWO . WORDS OF THE ENTRY IS THE ALLOWED QUALIFIER (UP TO 12 . CHARACTERS) AND THE THIRD WORD IS A JUMP TO THE PROPER ROUTINE. . P PROC 2 Q* NAME . DO (P(0)>1)**(P(0,1)=0) , GO AWAY . SKIP IF NOT CONFIGURED + P(1,1) GENERATE FIELDATA QUALIFIER J P(2,1) AND JUMP TO PROPER ROUTINE AWAY NAME . END . . QUALTBL . Q,SORTOK 'SORT ' IN1098 NORMAL SORT Q,SNAPOK 'SNAP ' IN1090 ITEM SNAP$ DESIRED Q,BRKOK 'BREAKD ' IN1091 REVERSE SORT WITH BREAK Q,BRKOK 'BREAKDN ' IN1092 REVERSE SORT WITH BREAK, NO HDG Q,BRKOK 'BREAK ' IN1093 NORMAL SORT WITH BREAK Q,BRKOK 'BREAKN ' IN1094 NORMAL SORT WITH BREAK, NO HDG Q,SORTOK 'SORTD ' IN1096 REVERSE SORT QUALTL EQU ($-QUALTBL)/3 . ON MULTISYS MCTPKT + 3,SITE MCT$ PACKET TO OBTAIN SYSTEM ID + 1,SYSTEMID**0377777 SITMSG 'SYS- ' START OF MSG SITE '??????' HOLDER FOR SYSTEM ID OFF MULTISYS . PRIOPM 'A MAXIMUM OF ONE PRIMARY ATTRIBUTE OPTION MAY BE SPECIFIED.' PRIOPP PRT 2,$-PRIOPM,PRIOPM . UMSG 'UNDEFINED OPTIONS: & - IGNORED&' ULINE RES 10 UNDEFINED OPTION EDIT$ BUFFER ULINEL EQU $-ULINE LENGTH OF EDIT$ BUFFER UPRT PRT 2,ULINEL,ULINE PRINT PACKET UEDIT E$PKT ULINEL,ULINE EDIT$ PACKET /$(1). SET OPTIONS AS SPECIFIED. IF OPTION IS UNDEFINED, PRINT . MESSAGE, AND IGNORE IT. . IN1000* L,U R15,1 CONSTANT=+1 LX,U X8,RECSTART POINT TO LI0/MI0/MI1 BUFFER SA A5,OPTWRD SAVE OPTIONS FOR INIT2 DS A4,A14 SAVE BATCH/DEMAND IN A14, AND . MOVE OPTIONS TO A15 LSSL A15,10 GET 'A' BIT IN POS. 35 LA,U A6,0 FLAG NO UNDEFINED OPTIONS SET E$DIT UEDIT OPEN EDIT JUST IN CASE E$MSG UMSG START MESSAGE LX X10,(1,0) INITIALIZE OPTION TABLE INDEX IN1005 JPS A15,IN1010 IS OPTION SET? . NO,IN1010 YES TZ,H2 OPTIONS,X10 UNDEFINED OPTION? J IN1009 NO, OK TO SET IT LA,U A6,1 YES, FLAG UNDEFINED OPTION SET . 7.10 E$CHAR 'A',X10,U EDIT OPTION LETTER J IN1010 AND CONTINUE LOOP IN1009 SR,T1 R15,OPTIONS,X10 YES, SET OPTION FLAG IN1010 TLEM,U X10,25 FINISHED YET? J IN1005 NO, CONTINUE JZ A6,IN1015 ANY UNDEFINED OPTIONS SET? . NO,IN1015 YES E$MSGR . COMPLETE MESSAGE J IN1016 GO ON IN1015 SZ UPRT INDICATE NO UNDEF OPTS SET IN1016 . ON SORTOK TZ BPT B-OPTION SET? SR R15,SORT YES, USER WANTS Q*F(C) SORT OFF SORTOK LA,U A7,0 ASSUME INFOR OK LA A0,(82,RECSTART) READ INFOR TABLE LMJ X11,RINF$ ANYTHING THERE? SA A0,A7 STORE PRINT PKT AS NO-INFOR FLAG JNZ A7,IN1020 LA,U A0,0106 GET PROCESSOR NAME LMJ X11,SINF$ IN A0,A1 J $+2 NONE? SKIP STORE DS A0,PNAME STORE PROCESSOR NAME . . SIGN ON . IN1020 E$DIT EDPACK OPEN EDIT E$FD2 PNAME EDIT PROCESSOR NAME E$SKIP 1 E$DECV BASLEV,,U BASE LEVEL NUMBER E$CHAR '.' E$DECV UPDLEV,,U UPDATE LEVEL NUMBER TNZ,U LOCLEV LOCAL UPDATE ZERO? J NOLOC YES, SKIP IT E$CHAR '.' E$DECV LOCLEV,,U LOCAL UPDATE LEVEL NUMBER NOLOC E$SKIP 2 E$DAT2 . DATE E$SKIP 2 E$TD . TIME ON MULTISYS LA,U A0,MCTPKT GET MCT$ PACKET ER MCT$ READ IN SITE FROM MCT E$SKIP 2 SKIP BEFORE PRINTING SYSTEM ID E$FD1 SITMSG START WITH 'SYS-' LA,U A0,SITE POINT TO SYSTEM ID LA A0,SYSTEMID**0777777600000,A0 . E$FD1 . EDIT SYSTEM ID OFF MULTISYS P$RINT POUT PRINT SIGNON LINE . IF ANY UNDEFINED OPTIONS WERE SET, PRINT THE PREVIOUSLY-EDITED MSG . LA A0,UPRT GET UNDEFINED OPTS PRINT PKT TZ A0 IF THERE'S ANYTHING TO PRINT, ER PRINT$ DO SO . . SINGLE-FILE MODE USED TO BE SIGNIFIED BY USE OF THE QF OPTIONS. . PRIVILEGED USERS STILL USE THE QFK OPTIONS TO RETRIEVE FILE KEYS. . IF THE QF OPTIONS ARE SET, CLEAR THEM TO MAKE OTHER STUFF SIMPLER. . TZ QPT Q OPTION SET? TNZ FPT AND F, TOO? J IN1030 NO, GO ON SZ QPT YES, CLEAR THEM BOTH SZ FPT SR R15,SFMODE SET SINGLE-FILE MODE FLAG . . MAKE SURE THAT AT MOST 1 PRIMARY ATTRIBUTE OPTION IS SET . IN1030 LX X11,(1,0) SET INDEX LA,U A1,0 INITIALIZE TOTAL IN1035 TNZ,T1 OPTIONS,X11 THIS OPTION SET? J IN1040 NO, GO ON LA,H2 A0,OPTIONS,X11 GET ROUTINE ADDR TE,U A0,GOON PRIMARY ATTRIBUTE OPTION? A,U A1,1 YES, INCREMENT COUNTER IN1040 TLEM,U X11,25 ALL DONE? J IN1035 NO, DO THEM ALL JZ A1,IN1050 IF NONE, SINGLE-FILE MODE TE,U A1,1 JUST ONE? J IN1045 NO, OPTION ERROR TZ SFMODE YES, BUT WERE QF OPTIONS ALSO GIVEN? TZ KPT IF SO, PERMIT QFK FOR KEY RETRIEVAL J IN1060 NOT QF, OR QFK - O.K. . . PRIMARY ATTRIBUTE OPTION ERROR . IN1045 LA A0,PRIOPP GET 'PRIMARY ATTRIBUTE OPTION . ERROR' PRINT PACKET J MFD900 PRINT IT AND EXIT . . NO PRIMARY ATTRIBUTE OPTION WAS SPECIFIED, SO ASSUME SINGLE-FILE MODE . IN1050 SR R15,SFMODE SET SINGLE-FILE MODE . . OPTIONS OK . IN1060 LA A0,A7 RETRIEVE NO-INFOR FLAG (PRINT PKT) JNZ A0,NOINF JUMP IF NO INFOR SR R15,SPECN SET CURRENT SPEC TO 1 ON OLDSTUFF LA,U A0,010206 LOOK FOR SPEC2 ELT LMJ X11,SINF$ PRESENT? J IN1070 NO, CHECK FOR SPEC3 SA A0,SIZE YES, STORE SPEC (TRACK SIZE) SA A3,SIZFLG SET SIZFLG = CHARS IN ELT SNA A3,TPT IF SIZE GIVEN, DON'T WANT TAPES . . LOOK FOR MASS STORAGE EQUIPMENT TYPE IN SPEC3 . IN1070 LA,U A0,3 SET FOR SPEC3 SA A0,SPECN SET IN SPECN FOR SPECER LA,U A0,010306 LOOK FOR SPEC3 ELT LMJ X11,SINF$ PRESENT? J IN1080 NO,IN1040 YES,TYPE IN A0 ON OLDMFD TNE A0,('F ') 'F' IN SPEC3? J IN1074 YES, JUST SET LINE2 OPT LA A1,(1,0) INITIALIZE EQUIP INDEX L,U R1,EQUCDL EQUIP TABLE LENGTH SE A0,EQUCD,*A1 SEARCH EQUIP CODE TABLE J IN1076 MAY BE TAPE EQUIP TYPE SA A1,EQDX SET EQUIP INDEX SNA A1,TPT SET REVERSE T-OPT (DON'T WANT TAPES) OFF OLDMFD IN1074 SR R15,EPT SET FLAG: PRINT LINE WITH GRAN COUNTS J IN1080 CONTINUE - CHECK SUPER SPECS ON OLDMFD . . NOT MASS STORAGE - TRY TAPE EQUIP . IN1076 LA A1,(1,0) INITIALIZE TAPE EQUIP INDEX L,U R1,15 TABLE LENGTH SE A0,TAPEQP,*A1 SEARCH TAPE TABLE LMJ X10,SPECER NO, SPEC ERROR SA A1,EQDX SET TAPE EQUIP INDEX SR R15,TPT ASSUME T-OPTION OFF OLDMFD OFF OLDSTUFF /. LOOK FOR SUPER SPECS . IN1080 . ON NSSP DO SNAPOK>0 , SZ SNTHSP ZERO SNAP-THIS-SPEC FLAG DO SORTOK>0 , SZ SRTHSP ZERO SORT-THIS-SPEC FLAG DO BRKOK>0 , SZ BRKFLG ZERO 'BREAK' FEATURE FLAGS LA A0,SPECN GET SPEC LAST DONE TNE,U A0,LASTSPEC = LAST ONE CONFIGURED? J IN1900 YES, THAT'S ALL A,U A0,1 NO, INC TO NEXT SPEC SA A0,SPECN SET CURRENT SPEC # FOR SPECER LMJ X11,SELT$ PRESENT? J IN1080 NO, TRY NEXT SPEC TNZ,S2 ELT$ FILENAME GIVEN? J IN1850 NO, CHECK FOR AND/OR/XOR/NOT . . CHECK FOR QUALIFIER. IF PRESENT, MAY BE ANYTHING IN QUALTBL. . TZ,U QUALTL ANY LEGAL QUALIFIERS? TNZ,S1 ELT$ AND QUALIFIER PRESENT? J IN1100 NO, CHECK FOR FILENAME DL A0,ELT$+2 GET THE QUALIFIER LA A2,(3,-3) USE A2 AS SEARCH INDEX LR,U R1,QUALTL REPEAT COUNT IN1081 SE A0,QUALTBL+3,*A2 SEARCH FOR QUALIFIER LMJ X10,SPECER ERROR IF NOT FOUND TE A1,QUALTBL+1,A2 SECOND WORD CORRECT? J IN1081 NO, CONTINUE SEARCH EX QUALTBL+2,A2 YES, JUMP TO PROPER ROUTINE . ON SNAPOK IN1090 SR R15,SNTHSP SET SNAP-THIS-SPEC FLAG J IN1100 AND CONTINUE OFF SNAPOK ON SORTOK ON BRKOK IN1091 SR R15,BRKHDG SET NEW-HEADING-WANTED FLAG IN1092 SR R15,SDTHSP SET DESCENDING SORT FLAG J IN1094 GO ON IN1093 SR R15,BRKHDG SET NEW-HEADING-WANTED FLAG IN1094 SR R15,BRKTSP SET BREAK-THIS-SPEC FLAG LA A0,BRKCNT GET CURRENT BREAK COUNT TLE,U A0,BRKMAX AT MAX NOW? J IN1098 NO, GO SET SORT FLAGS P$RINT BMAXP YES, PRINT MESSAGE SZ BRKTSP AND TREAT EXTRA BREAK'S LIKE SORT'S J IN1098 GO ON OFF BRKOK IN1096 SR R15,SDTHSP SET DESCENDING SORT FLAG IN1098 SR R15,SRTHSP SET SORT-THIS-SPEC FLAG SR R15,SORT SET OVERALL SORT FLAG OFF SORTOK . . FIND SPECIFIED TEST/SORT/SNAP FIELD IN TB4 TABLE. IF FOUND, X9 WILL . POINT TO THE TABLE ENTRY FOR THE REMAINDER OF THE CODE INVOLVING THIS SPEC. . IN1100 LA,H1 A0,ELT$+4 GET FILENAME TE,U A0,'IF ' SPECIAL TEST IN ELEMENT FIELD? J IN1110 NO, GO ON TNZ,S1 ELT$+1 THERE SHOULD BE...IS THERE? LMJ X10,SPECER NO, ERROR LA,H1 A0,ELT$+9 YES, MAKE ELT LOOK LIKE FILE IN1108 SZ,S1 ELT$+1 AND CLEAR ELT FLAG IN1110 L,U R1,TB4L GET LEGAL VALUE TABLE LENGTH L X9,(2,-2) SET INDEX FOR TWO-WORD ENTRIES SE A0,TB4SPEC+2,*X9 FIND SPEC IN TABLE? LMJ X10,SPECER NO, ERROR . YES, CONTINUE . . IF SNAP IS DESIRED, SET PROPER SNAP BIT(S) . ON SNAPOK TNZ SNTHSP SNAP OF THIS SPEC DESIRED? J IN1120 NO, GO ON LA A1,TB4ITM GET ITEM INDEX LA A2,SNAPTB,A1 GET PROPER SNAP BIT(S) OR A2,SNAP ADD TO PREVIOUS SNAP BITS SA A3,SNAP UPDATE SNAP BITS LA A2,TB4BITS GET CONTROL BITS TEP,U A2,TBSNAP IS THIS ITEM FOR SNAPS ONLY? J IN1080 YES, ALL DONE WITH THIS SPEC IN1120 . OFF SNAPOK . . CHECK IF SORT OF THIS SPEC IS DESIRED . ON SORTOK TNZ SRTHSP SORT THIS SPEC? J IN1300 NO, GO ON ON OLDSTUFF LA,U A1,-1 TNE,U A0,'SIZ' SIZE? SA A1,TPT YES, BETTER IGNORE TAPES OFF OLDSTUFF ON BRKOK TNZ BRKTSP IS BREAK-THIS-SPEC CLEAR, AND OFF BRKOK TNZ BPT IS B-OPTION SET? J IN1250 NO, GO ON . YES, IGNORE CERTAIN SORT KEYS LA A0,TB4BITS GET CONTROL BITS TEP,U A0,TBSORT AUTOMATICALLY DONE BY B-OPT? J IN1300 YES, JUST DO IT AT THE END . . CREATE SORT KEY PARAMETER . IN1250 LA A0,TB4ADS GET ASSUMED SORT DIRECTION TNZ SDTHSP REVERSE SORT FOR THIS SPEC? J IN1252 NO, GO ON TNE,U A0,'D' DESCENDING SORT ASSUMED? LA,U A0,'A'-('D'-'A') YES, ADJUST VALUE AA,U A0,'D'-'A' REVERSE SORT DIRECTION . ('A' -> 'D' OR 'D' -> 'A') IN1252 SA,S3 A0,TEMPKEY STORE A/D SORT INDICATOR LA A0,TB4TYP GET KEY TYPE (ALPHA/BINARY) SA,S2 A0,TEMPKEY STORE FOR SORT LA A3,TB4J GET ASSUMED J-DESIGNATOR TNZ,S5 ELT$ WAS A J-DESIGNATOR SPECIFIED? J IN1254 NO, USE ASSUMED J LA,H1 A0,ELT$+8 YES, PICK IT UP LR,U R1,JTABL GET LENGTH OF J TABLE LX A3,(1,-1) SET INDEX INTO J TABLE SE,H1 A0,JTAB+1,*A3 FIND SPEC'D J? LMJ X10,SPECER NO IN1254 LA A0,JMSBIT,A3 GET MOST SIG BIT FOR THIS J . NOTE THAT 'BREAK' CODE BELOW . ASSUMES J-DES IS IN LOWER A3 . . MOST OF THE SPECS WITH ASSUMED VALUES HAVE SINGLE-BIT VALUES AND . TESTS. FOR THESE, WE WILL DO A SINGLE-BIT SORT. . LA,U A2,0 ASSUME NO ADJUSTMENTS NEEDED TNZ TB4VAL ASSUMED VALUE FOR THIS SPEC? J IN1260 NO, GO ON LA A1,TB4OP GET ASSUMED OPERATION TE,U A1,TOP IS IT A TOP TNE,U A1,TEP OR A TEP? J $+2 YES J IN1260 NO, SKIP THIS STUFF LA A2,TB4VAL YES, PICK UP ASSUMED VALUE LSC A1,A2 FIND FIRST BIT AN,U A2,29 COMPENSATE. IF THE VALUE . IS 2**5 (040), A2=0 BECAUSE . THE MS BIT IS ALREADY CORRECT . . NOTE THAT TB4VAL IS ASSUMED TO BE A 6-BIT FIELD . A A0,A2 ADJUST THE MS BIT LA,U A2,1 FLAG SINGLE-BIT SORT IN1260 SA,S4 A0,TEMPKEY STORE IN SORT KEY PARAMETER . WORD 1 OF PARAM COMPLETE LA A0,JBITS,A3 GET ASSUMED # BITS FOR THIS J TZ A2 BUT IS IT A SINGLE-BIT SORT? LA,U A0,1 YES, SO SET # BITS TO 1 JNZ A3,IN1270 IF PARTIAL WORD, GO ON TP TB4BITS FULL WORD: REALLY 72 BITS? LA,U A0,72 YES, SET FOR 72 BIT KEY IN1270 SA,H2 A0,TEMPKEY+1 SET # BITS IN SORT KEY PARAM LMJ X10,IN1340 GET SORT RECORD WORD # IN A2 ON BRKOK LXI A3,A2 SAVE WORD # FOR BREAK, BELOW OFF BRKOK AA A2,(0770000) SORT WANTS 077 IN S1 SA,H1 A2,TEMPKEY+1 STORE IN PARAM AND INC INDEX LA A2,KEYIDX GET CURRENT INDEX INTO ADDKEYS DL A0,TEMPKEY MOVE CONSTRUCTED KEY PARAMETER DS A0,ADDKEYS,*A2 TO ADDKEYS SA A2,KEYIDX RESET ADDKEYS INDEX ON BRKOK . . SET UP REMOTE EX INSTRUCTIONS FOR 'BREAK' FEATURE IF NEEDED . TNZ BRKTSP BREAK THIS SPEC? J IN1290 NOPE LA,U A2,010*/4 'LA A0' INSTRUCTION TP TB4BITS SHOULD IT BE 'DL A0' LA,U A2,(071*/4)+013 YES LA A0,JFLAGS,A3 GET JDES FLAGS TOP,U A0,JSPECIAL IF IT'S A SPECIAL J-DESIGNATOR, DON'T AA,U A2,,A3 ADD IN SAVED J-DESIGNATOR LSSL A2,8 LEFT-JUSTIFY IN H2 AA,U A2,X8 MAKE WRD # REL TO SORT RECORD LDSL A2,18 ADD WORD # IN U FIELD SSL A3,18 MOVE J INDEX BACK INTO POSITION LA,U A4,0 ASSUME 0 LEFT, 0 RIGHT SHIFT TOP,U A0,JSPECIAL SPECIAL J-DESIGNATOR? J IN1278 NO, GO ON LA A0,JMSBIT,A3 GET MOST SIGNIFICANT BIT (BIT 35 = 1) ANA,U A0,1 ADJUST LEFT SHIFT COUNT (0 = NO SHIFT) LSSL A0,18 MOVE LEFT SHIFT COUNT TO UPPER A0 LXM,U A0,36 GET WORD LENGTH IN LOWER A0 ANA A0,JBITS,A3 CALCULATE RIGHT SHIFT COUNT (0 = NONE) SA A0,A4 SET LEFT,RIGHT SIFT COUNTS IN A4 IN1278 LA A3,( TE A0,2,*X5) GET A 'TE A0' INSTRUCTION TP TB4BITS SHOULD IT BE A 'DTE A0' LA A3,( DTE A0,2,*X5) YES LA A1,TB4VAL GET ASSUMED VALUE IF ANY JZ A1,IN1280 SKIP IF NO ASSUMED VALUE LA A0,TB4OP YES, GET ASSUMED OPERATION TE,U A0,TOP IS IT TOP? TNE,U A0,TEP OR TEP? J $+2 YES J IN1280 NO, SKIP AHEAD LA A3,( LMJ X11,BRKBIT) GET AN 'LMJ X11,BRKBIT' INSTR IN1280 LA A0,BRKPNT GET TABLE INDEX NOP 0,0,*A0 ADJUST FOR NEW ENTRY DS A2,BRKLOAD,A0 STORE LOAD AND TEST INSTRUCTIONS SA A1,BRKMASK,A0 STORE SINGLE-BIT MASK IF NEEDED . (CONTENTS IGNORED IF NOT NEEDED) LA A1,TB4SPEC,X9 GET 1ST 3 CHARS OF SPEC (FOR H2) LXI A1,NSSP GET SPEC NUMBER (FOR S3) SA A1,BRKSPEC,A0 STORE FOR SUBTOTAL HEADER LA A1,BRKHDG GET NEW-HEADING-WANTED FLAG SA,S2 A1,BRKSPEC,A0 STORE THAT ALSO SA A4,BRKSHFT,A0 STORE LEFT,RIGHT SHIFT COUNTS SA A0,BRKPNT UPDATE INDEX BUMP,A0 BRKCNT . INCREMENT BREAK COUNT BY 1 OFF BRKOK IN1290 TZ TB4VAL SPEC WITH ASSUMED VALUE? J IN1080 YES, USER WANTS SORT ON IT, . SO THAT'S ALL WE DO WITH IT IN1300 . OFF SORTOK TNZ TB4VAL ASSUMED VALUE FOR THIS ITEM? J IN1310 NO, GO ON . . DON'T PERMIT USER TO OVERRIDE OPERATION, J-DESIGNATOR, ETC., FOR . THE SPECIAL ITEMS WITH ASSUMED VALUES. . LA A0,ELT$ GET SPEC INDICATORS SSL A0,6 MOVE (FCY)/RK/WK TO H2 TZ,U 0,A0 IF ANY OF THOSE ARE SPECIFIED, LMJ X10,SPECER SPEC ERROR TZ,S1 ELT$+1 VALUE GIVEN? LMJ X10,SPECER YES, SPEC ERROR SR,S1 R15,ELT$+1 SET VALUE-GIVEN FLAG IN1310 TZ,S4 ELT$ OP GIVEN? J IN1330 YES, CONTINUE TZ TB4OP ASSUMED TEST FOR THIS ITEM? TNZ,S1 ELT$+1 YES, WAS VALUE GIVEN? J IN1320 NO, HANDLE POSSIBLE ERROR . . NOTE THAT THE ABOVE TEST WILL NOT WORK PROPERLY IF THE ASSUMED . TEST FOR AN ITEM IS TZ, TNZ, TP, OR TN. . LA A2,TB4OP GET ASSUMED TEST INDEX LA,H1 A0,OPCODE-1,A2 GET PROPER OP CODE SA,H1 A0,ELT$+7 STORE AS IF SPEC'D SR,S4 R15,ELT$ SET SPEC-GIVEN FLAG J IN1330 GOT OPERATION IN1320 . ON SNAPOK TZ SNTHSP SNAP ONLY SPECIFIED? J IN1080 YES, NO VALUE NO OFF SNAPOK ON SORTOK TZ SRTHSP SORT ONLY SPECIFIED? J IN1080 YES, OK OFF SORTOK LMJ X10,SPECER NO OPERATION, AND NOT SNAP OR SORT . . DETERMINE WHICH WORD OF DIRECTORY ITEM TO CHECK . IN1330 LA A0,TESTS GET TEST COUNT MSI,U A0,SSIZE ADJUST FOR SUPER SPEC TABLE ENTRY SIZE SA A0,X6 STORE THAT IN X6 FOR TABLE INDEX LA A0,INITLOAD GET INITIAL LOAD INSTRUCTION SA A0,SSLOAD,X6 STORE IN SUPER SPEC TABLE LA A0,INITTEST GET INITIAL TEST INSTRUCTION SA A0,SSTEST,X6 STORE IN SUPER SPEC TABLE LA A0,POLNTH GET INDEX INTO POLISH TABLE SA A0,SSLINK,X6 STORE LINK TO POLISH TABLE ENTRY SZ POLISH,A0 ZERO OUT THAT ENTRY IN POLISH TABLE A,U A0,1 INC POLISH TABLE LENGTH SA A0,POLNTH STORE NEW VALUE LX,U X10,IN1400 SET SUBROUTINE RETURN . . SUBROUTINE TO RETURN SORT RECORD WORD # IN A2, BASED ON . SPECIFIED+ASSUMED ITEM OFFSET. . . ENTER VIA: LMJ X10,IN1340 . . . DESTROYS: A0, A2, X10 . IN1340 LA,U A2,0 INITIALIZE WORD # LA,S3 A0,ELT$ FCYCLE CHAR COUNT JZ A0,IN1350 IF NONE, ASSUME WORD 0 TG,U A0,3 LMJ X10,SPECER MAX 2 CHARS AA,S1 A2,ELT$+6 1ST CHAR OF FCYCLE AN,U A2,060 STRIP OFF FD TP A2 NEGATIVE? LMJ X10,SPECER IF NOT NUMBER, ERROR TNE,U A0,1 1 CHAR? J IN1350 YES MSI,U A2,10 MOVE TO TENS PLACE AA,S2 A2,ELT$+6 ADD UNITS DIGIT ANA,U A2,'0' STRIP OFF FD IN1350 AA A2,TB4WRD ADD ASSUMED OFFSET LA A0,TB4ITM GET ITEM INDEX MSI,U A0,28 POINT TO PROPER ITEM IN RECORD AA A2,A0 J 0,X10 RETURN WORD # IN A2 . IN1400 SA,H2 A2,SSLOAD,X6 STORE IN SUPER SPEC TABLE . . CHECK FOR LEGAL OPERATION . LA,H1 A0,ELT$+7 GET OPERATION (RKEY) LR,U R1,OPCODL # OF OPCODES LA A3,(1,0) FROM OPCODE TABLE SE,H1 A0,OPCODE,*A3 FIND? LMJ X10,SPECER NO, ERROR LA,U A10,,A3 YES, KEEP OPCODE INDEX IN A10 TE,U A10,DTE DTE? J IN1440 NO, CONTINUE TZ,S5 ELT$ J-DESIGNATOR GIVEN? LMJ X10,SPECER YES, CAN'T HAVE J-DES ON DTE TNZ,S1 ELT$+1 WAS A VALUE GIVEN? LMJ X10,SPECER NO, MUST HAVE A VALUE LA A0,INITDTE GET INITIAL DTE INSTRUCTION AA A0,X6 POINT TO PROPER SSPVAL TABLE ADDR SA A0,SSTEST,X6 STORE IN SUPER SPEC TABLE LA,H1 A0,( DL A0,0,X8) GET A 'DL A0,X,X8' INSTR SA,H1 A0,SSLOAD,X6 CHANGE 'LA' TO 'DL' J IN1490 CONTINUE . . OPERATION IS NOT DTE . IN1440 LA,S4 A0,OPCODE-1,A3 GET OCTAL CODE FOR THIS OP SA,S1 A0,SSTEST,X6 STORE IT IN REMOTE TEST INSTR . . CHECK FOR LEGAL J-DESIGNATOR, IF GIVEN . TZ,S5 ELT$ J-DESIGNATOR (WKEY) PRESENT? J IN1470 YES, HANDLE IT LA A0,TB4J NO, GET ASSUMED J FOR THIS ITEM JZ A0,IN1490 IF FULL WORD, SKIP IT J IN1480 CONTINUE IN1470 LA,H1 A0,ELT$+8 PICK UP SPECIFIED J-DES LR,U R1,JTABL LENGTH OF TABLE LA A1,(1,-1) SEARCH J-DESIG TABLE SE,H1 A0,JTAB+1,*A1 FIND? LMJ X10,SPECER NO, ERROR LA,U A0,,A1 A0 NOW CONTAINS J CODE IN1480 LA A1,JFLAGS,A0 PCIK UP JDES FLAGS TEP,U A1,JSPECIAL SPECIAL J-DESIGNATOR? J IN1490 YES, DON'T MODIFY SSLOAD LSSL A0,8 MOVE J CODE INTO POSITION OR,H1 A0,SSLOAD,X6 COMPOSITE LOAD INSTR IN A1 SA,H1 A1,SSLOAD,X6 STORE BACK IN SUPER SPEC TABLE SSL A0,8 MOVE J BACK . . OPCODE INDEX REMAINS IN A10 . . ASSUME SPECIFIED TEST VALUE IS FIELDATA, AND STORE IT. IF NECESSARY, . SET SHIFT VALUE (SSHIFT) TO PERMIT SPECS LIKE MI0(7)/TE/S1.C . . IN1490 DL A2,ELT$+9 GET SUPER SPEC ELEMENT (VALUE) TNZ,S1 ELT$+1 IF NO VALUE WAS GIVEN, DSL A2,72 USE ZEROES INSTEAD DS A2,SSPVAL,X6 STORE SPEC VALUE TNE,U A10,DTE DOES THIS SPEC REQUIRE A DOUBLE TEST? J IN1800 YES, ALL DONE WITH THIS SPEC LA A1,JMSBIT,A0 GET MOST SIGNIFICANT BIT (BIT 35 = 1) ANA,U A1,1 ADJUST (0 IF NO LEFT SHIFT) SA,H1 A1,SSHIFT,X6 STORE LEFT SHIFT COUNT . VALUE IS ALREADY LEFT-JUSTIFIED, . SO DON'T SHIFT IT NOW LA,U A1,36 GET WORD LENGTH ANA A1,JBITS,A0 COMPUTE RIGHT SHIFT (0 IF NONE) SA,H2 A1,SSHIFT,X6 STORE RIGHT SHIFT COUNT LA A3,JFLAGS,A0 PICK UP J-DESIGNATOR FLAGS TEP,U A3,JSIGN SIGN-EXTENDED J FIELD? J IN1492 YES, DO ALGEBRAIC SHIFT SSL A2,0,A1 NO, SHIFT VALUE RIGHT LOGICALLY J IN1494 CONTINUE IN1492 SSA A2,0,A1 SHIFT VALUE RIGHT ALGEBRAICLY IN1494 SA A2,SSPVAL,X6 STORE SHIFTED VALUE TOP,U A3,JSPECIAL SPECIAL J-DESIGNATOR? SZ SSHIFT,X6 NO, ZERO SHIFT COUNTS . . CHECK FOR MASK BEING SPECIFIED. IF SO, SET MASK IN SUPER SPEC TABLE . LA A0,INITMASK GET INITIAL MASK SA A0,SSMASK,X6 STORE IN SSMASK FIELD LA,S2 A3,ELT$+1 GET VERSION CHAR COUNT JZ A3,IN1600 IF NONE, ASSUME -0 AN,U A3,1 LESS 1 FOR JGD LA,H1 A0,ELT$+11 GET FIRST THREE CHARS OF VERSION TNE,U A0,'FD ' 'FD'? J IN1500 YES, NO MASK GIVEN LA,U A1,0 CLEAR RESULT LX,U X2,ELT$+11 SUPER SPEC MASK ADDRESS LX X1,(1,0) SET TABLE INDEX IN1498 EX ACLD,*X1 GET A CHAR TG,U A0,060 NUMERIC? TG,U A0,070 AND OCTAL? LMJ X10,SPECER NO, SPEC ERROR LA A2,A0 YES, MOVE CHAR INTO A2 LSSL A2,33 SHIFT OFF FD LDSL A1,3 ADD DIGIT ONTO A1 JGD A3,IN1498 GET OTHER CHARS SA A1,SSMASK,X6 STORE MASK IN TABLE J IN1600 GO ON . . VERSION FIELD SAYS 'FD' -- IS THAT ALLOWED FOR THIS SPEC? . IN1500 LA A0,TB4BITS GET ITEM FLAGS TEP,U A0,TBNUM NUMERIC VALUE REQUIRED? LMJ X11,SPECER YES . . PICK UP SPEC'D VALUE, IF ANY, AND CONVERT IT IF NECESSARY . IN1600 TLE,U A10,TEP TZ,TNZ,TP OR TN OPERATION? J IN1800 YES, NO VALUE NEEDED TNZ TB4VAL SPECIAL ITEM W/ASSUME VALUE? J IN1610 NO, GO ON LA A1,TB4VAL YES, GET ASSUMED VALUE SA A1,SSPVAL,X6 STORE IN SSPVAL ENTRY J IN1800 ALL DONE WITH VALUE IN1610 TNZ,S1 ELT$+1 ANY ELEMENT (VALUE) GIVEN? LMJ X10,SPECER NO, MUST HAVE A VALUE LA A0,TB4BITS GET ITEM FLAGS TEP,U A0,TBFD ALWAYS TREAT VALUE AS ALPHA? J IN1800 YES, ALL DONE WITH THIS SPEC TEP,U A0,TBNUM MUST SPEC BE NUMERIC? J IN1710 YES, HANDLE NUMERIC SPEC TOP,U A0,TBDATE DOES ITEM REQUIRE A DATE SPEC? J IN1730 NO, COULD BE ALPHA OR NUMERIC . . CAT/REF DATE TEST . IN1700 TZ,S2 ELT$+1 VERSION GIVEN? LMJ X10,SPECER YES, ERROR LA,S1 A3,ELT$+1 ELT CHAR COUNT TE,U A3,6 6 CHARS (MMDDYY) ? J IN1707 NO, MIGHT BE RELATIVE DATE SZ SSPVAL,X6 INITIALIZE SPVAL ENTRY TO ZERO LX,U X2,ELT$+9 POINT TO SPEC LX X1,(1,0) INITIALIZE LOAD INDEX LMJ X11,IN1704 CONVERT MONTH TG,U A1,1 WITHIN RANGE? TG,U A1,13 LMJ X10,SPECER NOPE SA,S5 A1,SSPVAL,X6 YES, STORE MONTH IN SPVAL TABLE LMJ X11,IN1704 CONVERT DAY TG,U A1,1 WITHIN RANGE? TG,U A1,32 LMJ X10,SPECER NOPE SA,S6 A1,SSPVAL,X6 YES, STORE DAY IN SPVAL TABLE LMJ X11,IN1704 CONVERT YEAR AN,U A1,64 ADJUST FOR MOD 1964 TG,U A1,0 WITHIN REASONABLE RANGE? TG,U A1,25 LMJ X10,SPECER NOPE SA,S4 A1,SSPVAL,X6 YES, STORE YEAR FOR TEST J IN1800 ALL DONE WITH THIS SPEC . . DATE CONVERSION SUBROUTINE . IN1704 LA,U A1,0 INITIALIZE RESULT LA,U A3,1 FOR 2 CHARS IN1706 EX ACLD,*X1 PICK UP A CHAR TG,U A0,060 NUMERIC? TG,U A0,072 LMJ X10,SPECER NOPE AN,U A0,060 YES, STRIP OFF FD MSI,U A1,10 A A1,A0 ADD TO RESULT JGD A3,IN1706 DO BOTH CHARS J 0,X11 RETURN WITH RESULT IN A1 . . SPEC MIGHT BE MONTH, DAY, OR YEAR-RELATIVE DATE . DATJ NOP 0,0,0 DAY J IN1708 MONTH J IN1709 YEAR . IN1707 TG,U A3,2 CAN BE 1-4 DIGITS TG,U A3,6 PRECEDED/FOLLOWED BY M, D, OR Y LMJ X10,SPECER NO GOOD LX,U X2,ELT$+9 ADDR OF SPEC . . TRY M/D/Y IN 1ST CHAR FIRST . LA,S1 A2,ELT$+9 GET FIRST CHAR OF ELT LX X1,(1,1) SET FOR NUMBER STARTING WITH 2ND CHAR . . CHECK FOR M/D/Y . IN1707A TE,U A2,'M' MONTH? TNE,U A2,'D' DAY? J IN1707B ONE OF THE ABOVE TNE,U A2,'Y' OR YEAR? J IN1707B YES . . CHAR IS NOT M/D/Y. IF FIRST TIME THRU, TRY LAST CHAR. ELSE, ERROR . TNZ,U 0,X1 FIRST TIME THRU? LMJ X10,SPECER NO, ERROR EX ACLD-1,A3 PICK UP LAST CHAR OF SPEC SA A0,A2 STORE IN A2 JGD X1,IN1707A TRY ALT FORMAT (M/D/Y AFTER #) . . FOUND M/D/Y. NOW CHECK FOR 1-4 DIGIT DECIMAL NUMBER . IN1707B SSL A2,3 D=1, M=2, Y=3 AN,U A3,2 ONE LESS CHAR, -1 FOR JGD LA,U A1,0 INITIALIZE TOTAL LMJ X11,IN1752 CONVERT DEC NUMBER TO BINARY LMJ X10,SPECER NOT DEC NUMBER . . SPEC IS CONVERTED TO BINARY - RESULT IS IN SSPVAL,X6 . ER TDATE$ GET TODAY'S DATE DSL A0,24 GET MON,DAY IN A0 SA,T3 A0,TODAY STORE MON,DAY SSL A1,30 GET YEAR SA,S4 A1,TODAY STORE YR IN YR,MON,DAY FMT EX DATJ-1,A2 JUMP TO PROPER ROUTINE FOR M/D/Y . . DAY . LA A0,SSPVAL,X6 GET DAYS SPEC'D DSL A0,36 PREPARE FOR DIVIDE DI,U A0,30 DIVIDE BY # OF DAYS IN MONTH LA,S6 A2,TODAY CURRENT DAY AN A2,A1 SUBTRACT # OF DAYS TG,U A2,1 NEG OR ZERO? J $+3 NO A,U A2,30 YES, SET FOR PREVIOUS MONTH A,U A0,1 ADD 1 TO MONTH COUNT SA A0,SSPVAL,X6 STORE MONTH COUNT SA,S6 A2,TODAY STORE NEW DAY . . MONTH . IN1708 LA A0,SSPVAL,X6 MONTH COUNT DSL A0,36 SET FOR DIVIDE DI,U A0,12 DIVIDE BY # OF MONTHS IN YEAR LA,S5 A2,TODAY CURRENT MONTH AN A2,A1 SUBTRACT # OF MONTHS TG,U A2,1 NEG OR ZERO? J $+3 NO A,U A2,12 YES, SET FOR PREVIOUS YEAR A,U A0,1 ADD 1 TO YEAR COUNT SA A0,SSPVAL,X6 STORE YEAR COUNT SA,S5 A2,TODAY NEW MONTH . . YEAR . IN1709 LA,S4 A2,TODAY CURRENT YEAR AN A2,SSPVAL,X6 SUBTRACT # OF YEARS TP A2 NEG? LMJ X10,SPECER YES, ERROR SA,S4 A2,TODAY STORE NEW YEAR LA,H2 A0,TODAY GET ABSOLUTE YR,MON,DAY SA A0,SSPVAL,X6 STORE IN SPEC J IN1800 GO ON FOR NEXT SPEC . . SPEC MUST BE DECIMAL OR OCTAL NUMBER . IN1710 LMJ X11,IN1750 CONVERT OCT/DEC SPEC TO BINARY LMJ X10,SPECER NOT OCT OR DEC - ERROR J IN1800 CONVERTED - ALL DONE WITH THIS SPEC . . SPEC PERMITS ALPHA AS WELL AS OCTAL/DECIMAL NUMBER . IN1730 TNZ,S2 ELT$+1 VERSION GIVEN? J $+4 NO, GO ON LA,H1 A0,ELT$+11 YES, GET 1ST 3 CHARS TNE,U A0,'FD ' FD? J IN1800 YES, DON'T CONVERT LMJ X11,IN1750 TRY OCTAL/DECIMAL NUMBER FIRST J IN1800 FD - LEAVE IT AS IS J IN1800 CONVERSION DONE, SPEC STORED . . SUBROUTINE TO CONVERT OCTAL OR DECIMAL FIELDATA SPEC TO BINARY . IN1750 LA,S1 A3,ELT$+1 ELT CHAR COUNT AN,U A3,1 -1 FOR JGD LA,U A1,0 CLEAR RESULT LX,U X2,ELT$+9 POINT TO SPEC LX X1,(1,0) INITIALIZE LOAD TABLE INDEX EX ACLD,*X1 GET 1ST CHAR TE,U A3,11 12 CHARS? TNE,U A0,060 OR FIRST CHAR = 0? J IN1760 YES, ASSUME OCTAL J $+2 NO, CONVEET DECIMAL . . DECIMAL VALUE . IN1752 EX ACLD,*X1 GET NEXT CHAR TG,U A0,060 DECIMAL DIGIT? TG,U A0,072 J 0,X11 NO, ERROR RETURN MSI,U A1,10 YES, ADD TO RESULT AN,U A0,060 A A1,A0 JGD A3,IN1752 DO FOR ALL CHARS J IN1770 EXIT WITH RESULT IN A1 . . OCTAL VALUE . IN1758 EX ACLD,*X1 GET NEXT CHAR IN1760 TG,U A0,060 OCTAL DIGIT? TG,U A0,070 J 0,X11 NO, ERROR RETURN SA A0,A2 YES, PUT IN A2 LSSL A2,33 SHIFT OFF FD LDSL A1,3 SHIFT DIGIT INTO A1 JGD A3,IN1758 DO FOR ALL CHARS . IN1770 SA A1,SSPVAL,X6 STORE BINARY SPEC IN SPVAL TABLE J 1,X11 NORMAL RETURN . . ALL DONE WITH THIS SPEC . IN1800 BUMP TESTS . INCREMENT NUMBER OF TESTS J IN1080 GO BACK FOR MORE, IF ANY . . NO FILENAME GIVEN. CHECK FOR ELEMENT...MUST BE 'AND', 'OR', OR 'XOR' . IN1850 TNZ,S1 ELT$+1 ELEMENT SPECIFIED? LMJ X10,SPECER NO, SPEC ERROR LA,H1 A0,ELT$+9 YES, PICK UP 1ST WORD OF ELT LR,U R1,POLOPL GET LENGTH OF OP TABLE LX X10,(1,-1) SET POLOP INDEX SE,H1 A0,POLOP+1,*X10 FIND ELEMENT IN POLOP TABLE? J IN1108 NO, TRY IT AS SPECIAL ITEM LA,S5 A0,POLOP,X10 YES, GET PROPER BIT FOR AOX . . PUT AND/OR/XOR/NOT FLAG IN PROPER WORD OF POLISH TABLE . OR A0,AOX ADD NEW BIT TO AND/OR/XOR/NOT BITS SA A1,AOX STORE NEW AND/OR/XOR/NOT BITS LA,S4 A0,POLOP,X10 GET VALUE FOR POLISH TABLE LA A1,POLNTH GET CURRENT POLISH TABLE LENGTH SA A0,POLISH,A1 STORE AND/OR/XOR/NOT IN POLISH TABLE A,U A1,1 INCREMENT INDEX SA A1,POLNTH STORE NEW TABLE LENGTH J IN1080 CONTINUE - GET NEXT SPEC OFF NSSP /. IF SORT IS BEING DONE, TERMINATE SORT KEY PARAMETER TABLE. . IN1900 . ON SORTOK TNZ SORT SORT BEING DONE? J IN1930 NO ON BRKOK LA,XH1 A0,BRKPNT PICK UP INITIAL BRKTBL INCREMENT VALUE SNA,H1 A0,BRKPNT REVERSE THE ORDER OFF BRKOK LA A2,KEYIDX GET ADDKEYS INDEX TNZ BPT IS B-OPTION SET? J IN1920 NO, JUST MARK END OF TABLE DL A0,QUKEY GET QUAL SORT KEY STUFF DS A0,ADDKEYS,*A2 STORE IN SORTBL DL A0,FIKEY GET FILENAME SORT KEY STUFF DS A0,ADDKEYS,*A2 ADD TO SORTBL DL A0,FCYKEY ALSO FCYCLE SORT KEY STUFF DS A0,ADDKEYS,*A2 ADD TO SORTBL IN1920 L A0,(0710000,TABLE2) . GET PARAMETER TABLE END SENTINEL S A0,ADDKEYS,A2 STORE IN TABLE OFF SORTOK . . NOW GET SPEC 1 . IN1930 LA,U A0,1 LMJ X11,SELT$ GET SPEC 1 NOOP NOP 0,0,0 NO SPEC1 . . MOVE ELT$ BUFFER INTO MFD$, SINCE THIS SEGMENT WILL SOON BE OVERLAYED. . LA A0,(1,ELT$) LA A1,(1,MFD$) L,U R1,14 BT A1,,*A0 TRANSFER SPEC INFO TO MFD$ BUFFER ON OLDSTUFF . . OPTION REVERSAL ROUTINE . LA,U A0,010207 LOOK FOR SPEC2 VERSION LMJ X11,SINF$ PRESENT? J IN1999 NO, NO REVERSALS DS A0,SNOITPO STORE SPEC'D SNOITPO LA,U A0,2 SET FOR SPEC2 ERROR SA A0,SPECN AN,U A3,1 CHARS-1 FOR JGD LX,U X2,SNOITPO ADDR OF INPUT CHARS LX X1,(1,0) EX REMOTE INDEX IN1960 EX ACLD,*X1 GET A CHAR TG,U A0,040 A LETTER? LMJ X10,SPECER NO, SPEC ERROR TNZ,S3 OPTIONS-6,A0 REVERSIABLE OPTION? LMJ X10,SPECER NO, TELL USER SNA,T1 A0,OPTIONS-6,A0 YES, REVERSE OPTION . BY SETTING OPTION FLAG NEGATIVE JGD A3,IN1960 GET MORE CHARS IF ANY OFF OLDSTUFF J IN1999 GET INIT2 NOINF ER PRINT$ PRINT INFOR$ ERROR MSG . . END OF INITIALIZATION PHASE 1 . IN1999 J IN2000 JUMP TO INIT2 ROUTINE END @ELT,RI TPF$.INIT1,,,154273141337 )@@@Q@@@@@@@C?]@@[C0]@@[C4]@@[C)]@@@C=]@@@C*]@@@C?]@@@C0]@@@C4]@@@ MFD AA@@@@ )@]0Q@@YK@@@TN 1@@TP 0@@TNZ(@@TZ *@@9/@@@@______%@@@@HC@C@@WC)]@@[C=]@@[C*]@@[AB@@@@ )@ )Q@@@@@@@H1 [M@H2 NM@W [=@DTE@@@TG !@@TNG?@@TLE?@@TNE:@@TE %@@TOP>@@TEP=@@AC@@@@ )@CKQ@@@@@@@S1 [A@S2 BA@S3 HA@S4 NA@S5 TA@S6 ZA@T1 [G]T2 HG]T3 TG]XH1[M]XH2NM]AD@@@@ )@F@Q@@@@@@@ACC@GB@@@[ABMI0@@@)@@@AAPRO@G )[@@AAFIL@G#)[@@AAQUA@G[@@@@ABLI0@@@AE@@@@ )@H0Q@@@@@@@@@)[ABUNLHAG@@^[ABBBTHAF@@C[ABWRNHAF@@K[ABHDWHAF@@)[ABDISHAF)@@[AAAF@@@@ )@K)Q@@@@@@@TAPGAG@@)[DBMASG G@@[[ABOLDHAG@@][ABBM1HAG@@^[ABLAPHAG@@K[ABBAKHAGAG@@@@ )@NKQ@@@@@@@@@@[AATYP@BI@@C[ABWADHAH@@)[ABPOSHAH@@[[ABDROGAG@@C[ABREMGAG@@)[ABAH@@@@ )@Q@Q@@@@@@@PRIGAL@@C[DBPUBG L@@K[ABVOPGAL@@)[ABGOPGAL@]@[ABEQUHBL@]@[ABASG[BJAI@@@@ )@S0Q@@@@@@@@C@[ABREF]DM@#@[ABFCY BL@@[[ABREAGAL@@][ABWRIGAL@@^[ABXUSGAL@@C[ABAJ@@@@ )@V)Q@@@@@@@BFPABE@]@]ABBTB[FD@]@]ABNBRGBB@@@]ABMI1@@@@@@[AAREE@BU@C@[ABCAT]DNAK@@@@ )@YKQ@@@@@@@@^@^ABMI2@@@@^@#ABLI1@@@@]@]ABSIZ[FW@@@]AAPAC@BM@@@]AABAC@BF@]@]ABAL@@@@ )@-@Q@@@@@@@@@@@@K@@@@@]@@@@@C@@@@@^@@@@@[@^@AABALL@@@@^@ ABDAD@@@@^@ ABGTB@@@AM@@@@ )@<0Q@@@@@@@#BAT@@_@#@[C#AA[@@_@[@[C#AA[@@NOT )@XOR^K@OR #C@AND]^@@@@@@_@@@@@)AN@@@@ )@&)Q@@@@@@@EXCEEDEAK'S TED BROF NESMAX # @@@@@@@@@@@@@@]@@@_@@@@@#@@@@@_@!@@GAO@@@@ )@(KI@@*@@@@)@:K^@@@@@@@ SORT @@@@@@@]E@])RT'S. AS SOREATEDCESS TED: EXAP@@@@ )@:0MYS@)/0[[9)]@@@@@@@@N BREAKD/K@@]( BREAKD/K@@]< SNAP /K@@]7AQ@@@@ )@,@MYS@)/0[[9)]@@@@@@@@ SORTD /K@@]! BREAKN/K@@]? BREAK /K@@]%AR@@@@ )@0KCYS@>@@@)@5@E@@@@@@@RIMARY ONE PMUM OFA MAXISITE: @@@@@@@@J@@@@@E@# /K@@]6AS@@@@ )@6KQ@@E@@@@ & - ITIONS:NED OPUNDEFI@]E@#PFIED. SPECIMAY BEPTION BUTE O ATTRIAT@@@@ )@9@^@)@/@IE[K@@@@@@@@@@@@@@@@@@@@@@@@@@@@[[@@@@@@@@@@@&E@#&@]E@#&& GNOREDAU@@@@ )@@@M+=@F2@C@()@/)#ES@@@C8@@#)/,0@@@C/@@#1C9)@@@;:0@@E9(@@@U[[K@@@R'@@@@N;0@@[AV@@@@ )@]KM"K]JG@B)/) Y@JC[$)@/K@@@N/,0@@@C8E@@AC9)@@[/K@@@M*^E@@@'F0@@NR])@AU/,0@@@AW@@@@ )@^)K"K]<0Y#2@X8JG@B=@*@@@@@@@*W@@@[ @@@#0/K@@@T/,0@@@/[)@@S/K@@@F$')@@T^Z'@@@AX@@@@ )@A)M"K^#3@[9@MJ@YK J@@@/K@@@=/,0@@@C8@@[A/ 0@@=[@@@@N/,0@@@C@@@AVC90@@@^30@@@AY@@@@ )@C0K"S@ C]7=@V3@[9@SJC#M=[0@@C8@@@@/,0@@@C/@@@[/,0@@@9?@@@@/,0@@@C/@@@@9*@@@@AZ@@@@ )@E0K"KB<2@S(@)/)JEKC\@@@@@@@@C/@@@./K@@@6(8@@@@/,0@@@C8@@@@/,0@@@C/@@@./,0@@@BA@@@@ )@G0K"K# C^R=[8/)HYKDJC^0@@@@@C/@@@]/,0@@@'=@@@@/,0@@@C/@@@]/,0@@@C8@@@@/,0@@@BB@@@@ )@I0K"KA\C^$=]-N@[9@%JC#R&@@@@C@@@#O/,0@@@C/@@@]'=@@@@C8@@#]/,0@@@'=@@@@/,0@@@BC@@@@ )@K0K"KFJG@B=]1M[WYKGJG@@@@@@@*@@@@GC@@@#0'=@@@@C@G@@@C8@@@@/,0@@@C@@@#D/,0@@@BD@@@@ )@M0K"KGJC[R=@:0YK]\C[R=#F3@@@R]0@AU^70@@@ W@@@ W@@@K/K@@[M(W@@@ *W@@@K'=@@@@BE@@@@ )@O0M$=@:0YK]>CA)Y#0@@@@/@K@[@@@@@@@/,0@@@[?@@@@G8@@@[/K@@D\:8@@@YC?@@@@ @@@]Z ^@@]YBM@@@@ )@>KM"#2]T8#2]T8JCD$&@@@N8K@@BC@)@AZ9?@@@]/K@@]9(4@@@@*8@@@B/K@@DZ(0@@@@/K@@]GBN@@@@ )@$)K"S@JCCR&@#0YS@JG@B=^0@@@@%8@POLCC@@@^^#0@]:')I@]\/K@@]Y%@Y@],/,)@@@2@I)]0BO@@@@ )@()K"#2[>8JG@B&@#0YS@JG@@@@@@^70@]Z^30@]Z/K@@]!^F0@]Y^30@]Z/K@@]G^<0@@@/K@@]9BP@@@@ )@:)K"KN<0ES@#2[-9)@/@@@@@@@@@/K@@]7 4@@]Z'=@@@@C@G@@@C8@@]%/K@@]7?8@@@#C@@@@@BQ@@@@ )@!)K"S@JG@B=[#2]SY#2]T9[]@@@@/,)@@@(4@@@[/K@@#@%8@IF CC@@@^^30@@@^B0@]Y^F0@]YBR@@@@ )@\)K"KNJCD-9)@/0@YKK\G@B)@@@@/K@@#H(@@@]:/,)@@@2CD)@,R]K@A)N8K@@\ 4@@@[CC@@@DBS@@@@ )@1)K"S@JG@B=#F2[>9)@J[9)@@@@@(^@@]Y/K@@]G=8)@@^CW(@@![=0@@@)=)@@@C@!@]EC*T@@!BT@@@@ )@3)M"@JC[R&@#2@P8JG@@@@=8@@@[CWD@@!/K@@#S(W@@@[(4@@]Z[WK@@N:8@SIZC8K__"/K@@^7BU@@@@ )@50M"#3@[9)@/@B&@#3@@@@C)D@@![?@@]VG8@@@#C8@@@#:8@@@D/K@@#Y(C@@]YC=D@@!/K@@^7BV@@@@ )@8@K"S@JG@B=^30YKN#3@[9)@@@@@2CJ)@ZR#0@A-N8K@@ICC@@@C/K@@#((=@@@@C*9@@?[0@@]VBW@@@@ )@'@M"KK\G@[9)@/B&@@J@@@/K@@#2:8K@@ %8K@@AC=T@@?/K@@#7(?D@@!C8)@@@C*J@@Y/,)@@@BX@@@@ )@/KM"#3@@@YS@JG@@@@@@@@*@@@@IC=J@@Y[*@@]VC8)@@[G@@@@IH8)@@X;SK@@IC?(@@!/K@@#7BY@@@@ )@")M$)/0@B&@#0B&@#3@@@@[C)@]WG@)@A+�@@I/,)@ W[^@@]WC8@@[C0WD@@!/^0@#"C8@@@[BZ@@@@ )[@0K"S@JG@B= #3@[9)@/[9)@@@@@0WD@@!C8)@]@/K@@^5(4@@]Z[@)@]X9*I)@@9?@@]VC@)@]XCA@@@@ )[]0O$&@@@@@@@@@@@>8@@@[C9@@@@;C0@@M;?)@@MG8)@@C;*)@@CG8\@@@>8@@@[C)J@@YC8)@IVCB@@@@ )[ KM"#3@@[9)@JG@B&@@@@@0WD@@!C@0@A<[@@@@KH=J@@YQ;@@@=;*@@@MH8@@@[C*J@@Y/K@@^WCC@@@@ )[B)M"S@JG@B)/0@[8J[9)@@C@0@A>/K@@^$/K@@^&:8@@@ %8@@@AC=D@@?/@K@^$C?T@@!C@0@A=CD@@@@ )[D0K"KO<2](9[Q/0@B= <3@@@@@@@C0K@]Z[@W@@@&#K@@XCCT@@?[@W@@@9*?@@@/SG)@@C@@@@@CE@@@@ )[F0K"KQJCFR= F2]WYKN\G@B)@@@@/K@@]G*?D@@![@@@@@G8@@@[C@@@@@[@@@@@[[G@@@[0W@@@CF@@@@ )[H0K"S@J[9[G#2] 9[G/)-@@@@@@@/,)@@@*4@@@[/,)@@@*8G@@@;C@@@AC@@@@@/K@@ @(?D@@!CG@@@@ )[J0K"KNJCD$)/0@YKNJ[9)@/0@@@@CCI@@LC=(@@?/K@@ E(4@@@[*=D@@?/K@@ J**@@@@^70@@[CH@@@@ )[L0K"KNJCD$)/0@Y#3@[8JCCK@@@@/,)@@@/K@@]G*^@@]Y/K@@]G*@@@]:/K@@ J^:0@@@[C@@@BCI@@@@ )[N0K"K^ CF-9)@/)\YS@JCGB=#)@@C*@@@@[@A@@@C@@@@J[@A@@@C@@@@I[@@@@AT8@@@@C*@@@@CJ@@@@ )[P0M"KS\CC19@8O[9[G/@@@!8@@@#/@@@ %C?@@@@C8)@@@R')@ \[*@@@@G8@@@[ @G@@@[@A@@@CK@@@@ )[S@M"KK\CD)YKK<0B=^0@@@G0)@@AT8)@@E/K@@ %:8@@@[/,)@@@0@@@@IH8)@@0G4)@@A/,)@@@CL@@@@ )[UKM$&@#3@@[9[Y/)&@@@@@N8K@@GCC@@@B[^&@@@/KE@@@G@)@@GT8@@@WC*D@@!G)(@@?H8)@@0CM@@@@ )[W)K"S@JG@B=^CJ[9[G/)-@@@@@@@/,)@@@*=@@@@/K@@A]%')@@GC'\@@@/,)@@@2CJ)@MC@0@AUCN@@@@ )[Y)K"KNJCCR&@@/)0YS@JCF7)@@@@/K@@AQ[CA@@@CC@@A&[@A@@@G@@@@AC@@@@L/,)@@@(4@@@[CO@@@@ )[))K"S@JCGB=^30YS@J[8JCD)@@@@CC@@@C/K@@AJ/@@@AQC*D@@?/K@@AD*=@@@@[4A@@@C*J@@LCP@@@@ )[+)M$&@#3@[9[]JG@[8@@@@;*@@@C/K@@AQ=8K@@[C)W@@YC8H@@@/,)@@@2CH)@ZC@K@A-N8K@@ICQ@@@@ )[=0M"KR\CF19[G/)&B=@@/@/K@@DV:')@@G9*&@@@;G)@[C(4@@@[9?)@@D;C@@@C[CQ@@@)CA@@@CR@@@@ )[$@M"S@#2#CYS@JCG$&@@/@/K@@A$=80@@]C)/@@Y[^Q@@@H=W@@YC8K@@=[CQ@@@H8K@@[C*W@@YCS@@@@ )[(KM$)JC@[9[=/0@YKT\CD)C00@@[[@A@@@C@@@@K @A@@@>80@@[[@&@@@;K!@@@/K@@A*;C!@@@CT@@@@ )[:)M"@/)&B) CD$&@#3@@@@')[)@]R@K@AUR8)@@FC8K@@@/K@@B@:8@FD CC@@@FH80@@[/@0@B#CU@@@@ )[!0M-9[]@/B=AV0@@@@@@@@/K@@B#[@Q@@@8#0@A6;?K@@#;*)@@-C@)@@G/,)@@@!8@@@8!8@@@0CV@@@@ )[0@K"S@#2]^Y#3@[8JG@@@@@@@@@@C?T@@!/K@@BE(?D@@!/K@@DV?')@@ /,0@@@=8@@@]CWD@@!CW@@@@ )[2@M"K@J[9[G/)-YS@#0B)@/K@@C3=8@@@]/K@@DV=8@@@KCWD@@!/,)@@@(4@@@[/K@@DV[@Q@@@CX@@@@ )[4KK$)/)&YKK\CD-8JC@@@@@@@@@@ @A@@@/K@@B'%80@@AC40@@[/,)@@@*0@@@[/K@@C6>8@@@CCY@@@@ )[6KM%KNJG@B)#2] 9@@/@@@!8K@@[/,0@B?[=Q@@@/,)@@@!8K@@H!8K@@[/,0@B?R@K@AUR8)@@DCZ@@@@ )[8)M$=^F2@[8@JCCR=@@@@@[*Q@@@/,)@@@!8K@@2!8K@@@H8K@[@/,0@B?[)Q@@@/,)@@@!8K@@)DA@@@@ )['0O"@JG@@YKK)@@@G@K@@GT8K@@EH8@@@0/,)@@@!8@@@'!8@@@0')[)@]C80@@[C8K@@@/K@@DVDB@@@@ )[.KM"@J[8@/)-EKN@@@@@@@R8)@@D/,)@@@!80@@A!80@@]/K@@C:/K@@C)/S@@@@/KF@@@8#0@B,DC@@@@ )[_)M"KNJG@@Y@/[9[]@@@@@/,)@@@(8[@@@/K@@CE:8)@@Y/K@@CE:8)@@D%8)@@MR@K@A$C4)@@DDD@@@@ )][0M"S@#0@Y#2] 9@=@@@@@'=@@@@/,)@@@/,0@DCC8K@@@H80@@];C)@@#8@K@C@[@@@@I')J@@[DE@@@@ )]^@M$&@@/0@Y#2@@B&@@@@@C))@]?W8@@@Y;G@@@=C@A@@@')I@B6[*K@]?;CK@@Y[O@@]?;G@@@SDF@@@@ )]AKM-8@/)@YS@JC@@@@@@@@;G@@@=C@A@@@[))@]?[@A@@@G8@@@[G8)@@Y/K@@CY!8)@@[H@)@@HDG@@@@ )]C)M$&@@J@B=@#3@@@@@@@@[=)@]?[@A@@@G8@@@[G8)@@G/K@@C(!8)@@[H@)@@HC=)@]?W8@@@GDH@@@@ )]E0K"S@JC@[9[]/0@YS@JC@B)@@@@/K@@DV[@A@@@C^@@]?[*)@]?/,)@@@0@@@@IH@&@@@C*)@]?DI@@@@ )]G0M"#2] 8JCD$)/)&B)/@@/,0@C"/K@@DV:8@FD CC@@@F/K@@C;(0@@@[/K@@DV/,)@@@/,0@C"DJ@@@@ )]J@M"#0YKN@O)&YS@JG@@@@%80@@F')[)@]R@K@AUR8)@@DC8K@@@H80@@[C40@@[/K@@DV/K@@DVDK@@@@ )]LKO$)/B&@@@@@@@@G@K@@GH8@@@0T8K@@E/KF@@@!8@@@'!8@@@0')[)@]/K@@DD/K@@DM:8@@@0DL@@@@ )]N0O"#0YS@@@J@@@@8#0@DL;?K@@#;*)@@-[@@@@I/KF@@@!8@@@8!8@@@0')[)@]/K@@DT8#0@DCDM@@@@ )]QKK"K@#2@)YK^J[9[G/)-@@@@@@@/,)@@@(4@@@[/K@@]GA%0@@@O'0@@[R%0@@@/KF@@[[@Q@@@DN@@@@ )]SKK"KN#3@[9)@/B&@#2[19@8@@@@[)K@@@))@@@@C=E@]L/K@@]_2CE)]MR])@A-N8K@@^CC@@@DDO@@@@ )]UKK"S@JCBB=^S/)WY#2@-8@@@@@@/K@@D"(0@@@@/K@@]G[*K@@@G8K@@[[@H@@@C*K@@@C*E@]LDP@@@@ )]WKK"KO\CER&@#2@P8JG@B= #3@@@9?@@]R9*I)@@9?@@]P/K@@D/(W@@@[C@)@]X]C@@@@CK@@@@DQ@@@@ )]YKK"KOJG@B= #3@[9[KJCDK@@@@@/S@@@@/,0@@@C8@@@[[@I@@@C@@@A*9*I)@@9?@@]T9*I)@@DR@@@@ )])KM"S@JG@@B=[N0YKU@@@@C8@@@]9*@@@@/K@@ER/,0@@@C8@[]BM#W)@@N8K@@IC@K@A%C@@@A(DS@@@@ )]+)K"KI[M#L9)@/0@B=^F'@O@@@@@(?GJ_9/,)@@@!8@@@)')[)@]R@K@AUR8)@@@H80@@[[?@@@@DT@@@@ )]=)G"KK\*[R)/B=##2#O@@@)[&)]@@@@@@@@@[@@@/K@@@@'=@@@@/K@@ER8#0@EI]WGJ_9/,)@@@DU@@@@ )[&0OE@O)6@@@@@@@@9/ )@]%@ )@]@@@_@@@@[__"@@]__.@@#__/@@@@@@@@[@@@F @]<@#7DV@@@@ )[(KGYKV)O)8EKN CIK@@@@@@@@@@@@@@@@@@@@@@@@@[@@@@@[@@@9@@@@@@@[@@[9?C@@@/,0@@@DW@@@@ @EOF P )@@G@@@@ @@]@@B@@'@[;@@[@[_@@@[@@@@@@@E@A:@@@@ESSSPVAL RECSTART OPTWRDAA )@@G@@ EDIT$ EMSG$ OPTIONS ECHAR$ EMSGR$ FLAG3 AB )@@G@@ RINF$ SINF$ EDPACK EFD2$ ESKIP$ BASLEVAC )@@G@@ EDECV$ UPDLEV LOCLEV TDATE$ EDAY2$ ETIME$AD )@@G@@ MCT$ EFD1$ POUT PRINT$ MRFLGS GOON AE )@@G@@ MFD900 FLAG5 SIZE EQUCDL EQUCD TAPEQPAF )@@G@@ SPECER SSLEN POLISH TRANS SELT$ ELT$ AG )@@G@@ BRKCNT ADDKEYS BRKPNT BRKLOAD BRKMASK BRKSPEAH )@@G@@C BRKSHFT SSIZE SSLOAD SSTEST SSLINK SSHIFTAI )@@G@@ SSMASK SNOITPO IN2000 SSTAB BRKBIT TABLE2AJ )@@G@@ MFD$ IN1000 @@[@@@@@@@@@H-GHD3I)*ID5G(2JDQD9GF94^@% ))AK )@@C@@GL\H9?G(-H0) K(BS)(%93C=GL\H9?G(-H0)CD=H(^G( TRACKS IN SIZE WILL . BE LISTED, BUT IF FIRST CHAR OF SPEC2 IS '-', THEN TEST SHOULD BE REVERSED. . LA,S1 A0,SIZE GET 1ST CHAR OF SAVED SPEC2 TE,U A0,'-' WANT TO DO SIZE <= SPEC2? J IN2210 NO, HANDLE NORMAL SIZE > SPEC2 TNZ A1 IS THE '-' THE ONLY CHARACTER? LMJ X10,SPECER YES, SPEC ERROR AN,U A1,1,*X1 -1 TO IGNORE DASH, AND INC X1 LA,S1 A2,SZLOD GET SZLOD OPCODE (TG) LA,S1 A3,SZBAK GET SZBAK OP CODE (TLE) SA,S1 A3,SZLOD AND SWITCH THEM AROUND SA,S1 A2,SZBAK . . CONVERT SIZE SPEC FROM DECIMAL FIELDATA TO BINARY . IN2210 L,U X2,SIZE X2 = ADDR OF SAVED SPEC2 LA,U A3,0 INITIALIZE ACCUMULATOR IN2215 EX ACLD,*X1 GET A CHAR AN,U A0,060 STRIP OFF FIELDATA TP A0 IS IT A NUMBER? LMJ X10,SPECER NO, SPEC ERROR MSI,U A3,10 CONVERT DECIMAL A A3,A0 VALUE TO BINARY JGD A1,IN2215 LA,U A2,SZCHK SET FOR SIZE CHECK ROUTINE J IN2230 GO ON . . CHECK FOR U-OPTION. IF SET, SECONDARY CHECK ROUTINE = UNOPT, . IF NOT, = NSZOPT. . IN2220 LA,U A2,NSZOPT ASSUME NO SIZE, ETC., CHECK TZ UPT U-OPTION SET? LA,U A2,UNOPT YES, LOAD ADDR OF UNLOADED TEST . . STORE SECONDARY ROUTINE ADDR (AND CONVERTED SIZE, IF SPEC'D) . IN2230 DS A2,SZOPT STORE ADDR OF DESIRED ROUTINE . (AND SIZE, IF APPLICABLE) OFF OLDSTUFF TZ YPT IS Y-OPTION SET? SR R15,CPT YES, ASSUME C-OPTION . . IF SINGLE-FILE MODE IS SET, HANDLE IT. OTHERWISE, . SEARCH OPTION TABLE FOR FIRST PRIMARY ATTRIBUTE OPTION WHICH IS SET, AND . JUMP TO THE APPROPRIATE ROUTINE. IF OPTION IS NOT SET, OR IF IT IS NOT . A PRIMARY ATTRIBUTE OPTION, CONTINUE SEARCH. . IF NO PRIMARY ATTRIBUTE OPTIONS ARE SET, SOMETHING IS WRONG. . TZ SFMODE SINGLE-FILE MODE? J IN2380 YES, JUMP TO SINGLE-FILE THINGEE LX X11,(1,0) INITIALIZE OPTION TABLE INDEX LR,U R1,26 NUMBER OF OPTIONS LA,U A0,1 CHECK FOR SET OPTION SA A0,SPECN SET SPEC=1 FOR SPECER GOON* SE,T1 A0,OPTIONS,*X11 SET? ER EABT$ SHOULD NOT GET HERE! J *OPTIONS-1,X11 YES, GO TO PROPER ROUTINE . . QUALIFIERS . QOPT* LX,U X7,QUAL SET TO CHECK QUAL OF FILE LA,U A3,021 AGAINST QUAL IN PCT J IN2270 CAN CHECK PROJ AND QUAL IN LI0 . . PROJECTS . POPT* LX,U X7,PROJ SET TO CHECK PROJ OF FILE LA,U A3,2 AGAINST PROJ IN PCT IN2270 SR R15,LIOPT SET LI-CHECK FLAG J IN2290 CONTINUE . . ACCOUNTS . AOPT* LX,U X7,ACCOUNT SET TO CHECK ACCT OF FILE LA,U A3,023 AGAINST ACCT IN PCT . . QUALS, PROJS, ACCTS . IN2290 DL A9,PCT,A3 GET THINGO FROM PCT IN CASE . NOTHING IN SPEC FIELD. TZ,S1 MFD$+1 ANYTHING IN SPEC FIELD? DL A9,MFD$+9 YES, GET IT DS A9,MFD$+9 STORE FOR LATER USE LX,U X2,MFD$+9 SPEC IS IN ELT FIEL TZ CPT C-OPTION SET FOR PARTIAL SPEC? LMJ X11,PARTIAL YES, FORM SPEC MASK ON MBPTUA . ********************************************** TNZ QPT LET Q-OPTION THROUGH TZ CPT C-OPTION, TOO OFF MBPTUA . ********************************************** ON MBPTUA=0 . ********************************************** TNZ PPT P-OPTION SPEC'D? OFF MBPTUA=0 . ********************************************** J IN2310 DON'T CHECK FOR PRIV MODE TNZ PRIVLGD IS USER PRIVLEGED? J IN2320 NO - CHECK ACCT OR PROJ IN2310 LX,U X9,QQOPT SET TO RETURN TO QQOPT J IN2430 ALL SET, GO KICK OFF DIREC$ . . CHECK THIS GUY'S CREDENTIALS . IN2320 DTE A9,PCT,A3 CHECK SPEC, IF ANY, VS. PCT J IN2410 NO MATCH, THROW HIM OFF J IN2310 OK, GO ON . . F AND I OPTIONS - ALL F-CYCLES OF A PARTICULAR FILE . FOPT* SR R15,LIOPT SET LI-CHECK FLAG LX,U X2,MFD$+4 ASSUME SPEC IS IN FN FIELD TZ,S2 MFD$ REALLY THERE? J IN2350 YES, GO ON TNZ,S1 MFD$+1 NO, IS ELEMENT THERE? LMJ X10,SPECER NO, SPEC ERROR LX,U X2,MFD$+9 YES, SET FOR SPEC IN ELT FIELD IN2350 DL A9,,X2 GET SPEC TZ CPT C/Y-OPTION SET? LMJ X11,PARTIAL YES, FORM SPEC MASK TZ IPT I-OPTION? J IN2360 YES, SKIP QUAL DL A0,PCT+2 GET PROJ FROM PCT TZ,S1 MFD$ ANY QUAL GIVEN? DL A0,MFD$+2 YES, GET QUAL FROM SPEC FIELD TZ,S6 MFD$ IMPLIED QUAL? DL A0,PCT+021 YES, GET QUAL FROM PCT DS A0,PCT STORE QUAL FOR CHECK ROUTINE . . IF THE QUALIFIER AND FILENAME TO BE LISTED ARE DEFINED UNAMBIGUOUSLY, . WE CAN SPEED THINGS UP BY USING THE LOOKUP TABLE TO POINT TO THE . LEAD ITEM. . IN2360 TNZ CPT IS C OR Y OPTION SET? TZ IPT OR IS I OPTION SET? J IN2365 YES, MUST SEARCH THE LONG WAY LX,U X9,FFOPT NO, USE THE LOOKUP TABLE LA,XU A0,-1 SET FLAG FOR CHK000 SA A0,USELUT INDICATING DIRLED$ VS. DIRSEC$ J IN2430 INITIALIZE DIREC$ IN2365 LX,U X7,FILE POINT TO FILENAME IN L.I. BUF LX,U X9,IIOPT SET FOR FC, FY, OR I OPTIONS J IN2430 ALL SET, GO KICK OFF DIREC$ . . Z-OPTION -- LIST ALL FILES IF PRIVILEGED . ZOPT* LX,U X9,GBU SET UP FOR GO RIGHT ON J IN2430 NO, DON'T DO ANY ADDITIONAL CHECKS . LIKE ON PROJ OR ACCT . . SINGLE-FILE MODE - NO PRIMARY ATTRIBUTE CHECKS NECESSARY . IN2380 LX,U X9,GBU GO RIGHT ON . . SEE COMMENTS ABOVE TAG 'MCTEQ' IN ELEMENT 'MFD' . L,U A0,MCTPK GET MCT$ PKT ER MCT$ GET A PORTION OF THE MCT L,T2 A0,MCT+5 GET MCT VERSION TLE,U A0,4 LEVEL 33R1 OR HIGHER? J IN2385 NO, SKIP THIS STUFF L A0,MCT+027 YES, GET SPEC. MNEM. TBL LENGTH,OFFSET S A0,MCTPK+1 SET IN MCT$ PKT L,U A0,MCTEQ GET ADDR OF BUFFER IN ELEMENT 'MFD' S,H2 A0,MCTPK STORE IN PKT L,U A0,MCTPK GET MCT PACKET ADDR AGAIN ER MCT$ RETRIEVE SPECIFIC MNEMONICS IN2385 L$OAD QFSEG,QF000,1 LOAD AND JUMP TO SINGLE-FILE SEGMENT . X-OPTION LIST EXEC FILES . XOPT* LX,U X9,XXOPT EXEC FILE ROUTINE J IN2430 START UP DIREC$ ON PRVOPS . . NON-PRIVILEGED . IN2410 LA A0,ERR3P GET PRINT$ PACKET J MFD900 PRINT IT AND EXIT OFF PRVOPS . . K-OPTION FOR REMOVABLE DISC PACKS . KOPT* TNZ,S1 MFD$+1 ELEMENT MUST BE GIVEN LMJ X10,SPECER IF NOT, SPEC ERROR LA A9,MFD$+9 PICK UP PACK I.D. LA,U A10,0 CLEAR A10 TZ,S2 MFD$+1 VERSION GIVEN? LA A10,MFD$+11 YES, GET 2ND PACKID LX,U X9,KKOPT SET UP PACK I.D. LABEL . . DIREC$ IS NEEDED, SO WE MUST LOAD SEGMENT DIRSEG AND RELINQUISH CONTROL TO . THE DIREC$ INITIALIZATION INTERFACE ROUTINE, WHICH RETURNS TO MFD100. . IN2430 L,U A1,DIRSEG PREPARE FOR LOADING DIREC$ SEG LMJ X11,DSEG DO NECESSARY MCORE L$OAD DIRSEG,DIR000,1 JUMP TO DIREC$ INTERFACE ROUTINE /. PARTIAL SPEC ROUTINE - $'S IN SPEC FIELD ARE TRANSPARENT . PARTIAL LA,U A1,11 FOR 12 CHARS EX ACLD,A1 GET 1 CHAR OF SPEC TNE,U A0,'$' IS IT A $? EX ACST,A1 YES, STORE ZERO IN MASK JGD A1,PARTIAL+1 CONTINUE FOR 12 CHARS AND A10,ACMASK+1 MASK OUT UNWANTED CHARS AND A9,ACMASK DJZ A10,IN2510 DISALLOW SPEC OF ALL $'S DS A10,MFD$+9 STORE IN SPEC FIELD AGAIN J 0,X11 RETURN . IN2510 LA,U A0,1 SET FOR SPEC 1 SA A0,SPECN SAVE FOR SPECER LMJ X10,SPECER EDIT SPEC ERROR END @ELT,RI TPF$.INIT2,,,154302141337 )@@@Q@@E@@@@C?]@@@C0]@@@C4]@@@@@)@@B@]A@@@ON D OPTIVILEGEOF PRIL USE ILLEGAAA@@@@ )@]0O@@@YK@@@@@@@@ 4@@@@C)]@@[C=]@@[C*]@@[C?]@@[C0]@@[C4]@@[C)]@@@C=]@@@C*]@@@AB@@@@ )@ KIYK@JC@B=@#2@[9@@/)@YK@@@@@@@@@@ 0@@@[ 4@@@[ )@@@@ =@@@@ *@@@@ ?@@@@ 0@@@@AC@@@@ )@B@KYK@JC@B=@#2@[8J[8JC@K@@@@[=@@@@CO@@@&CS@@@&CW@@@& )@@@[ =@@@[ *@@@[ ?@@@[AD@@@@ )@D@^YK@\C@K)@D0G])O#A@G*@@@@@DATE: ENTER @[I@@&@[]@@:@[[@@&/S@@@@[*@@@@[)@@@@AE@@@@ )@FKO@@@*@@@@@@@@@@@S@@@@@#@@7ROR TER ERPARAMEROR PEC ERDATE STER: PARAMEAF@@@@ )@@@K"S@JC@$=@S/)^EK]>C[$)@@@@B_@@@CC8K@@@&;@C@@^:0@@@=8@@@)C0@@@^'=@@@@C@@@[JAG@@@@ )@]@M)B)/)#YK[\G@B=@8@@@'=@@@@C@@@[K9*0@@L9*0@@@B_@@@H9?"@@@G8!@@@G8)@C[CC!@#YAH@@@@ )@^KK"K^JG@B)/)^Y#2@L8 C]K@@@@C8@@@@/K@@@W()@@@@/K@@#2(*@@@@/@K@@Q+@@@@BC@@@@@AI@@@@ )@AKK+=[N2@!9@S/)HYS@JC#$=[8@@[@@@@@0W@@@NC@@@@$/,0@@@*)@@@@'=@@@@C8K@@@&;@)@@AJ@@@@ )@CKK"KC#2@99@)JC#$=]C@@@@@@@@C8@@@=[4@@@@0W@@@#C8@@@![C@@@@0W@@@IG8@@^@CC@@@@AK@@@@ )@EKK"KBJC^$=[32[H9@W/)OB=[0@@0W@@@OC8@@@0[4@@@@0W@@@A[4@@@@0W@@@P[4@@@@0W@@@LAL@@@@ )@GKK"KE\C#$)/)IY#0ES@JC )@@@@'=@@@@C8@@@(/K@@[>/K@@[M*W@@@L/K@@@7*W@@@#[4@@@@AM@@@@ )@IKM+&@@/)R[8#3@@@@@@@@')I@@)C8)@@]/K@@[I%8@@@[C8H@@@'=@@@@C@G@@@C8@@@*[@@@@HAN@@@@ )@K)O)@B&@#0YKB@@@*W@@@L8#)@[[')I@@/K@@[MAP@@@@ )@P@M%#3@@()@/)Q]&@@/)R@C8H@@@'=@@@@C@G@@@C8@@@*[@@@@H'=@@@@C8@@@([C@@@%C8@@[KAQ@@@@ )@RKK$)/0@EKG\G@B=#N0YKA@@@@@@[=K@@@/K@@[K2CH)@@C@K@[NN8K@@@CC@@@&/K@@[K%8@@@[AR@@@@ )@TKM$=[30B=[30YK^JG@B)@/K@@[2=@)@[OC@)@@@/K@@[2*W@@@F:;)@@^/K@@[,*W@@@M^#0@@NAS@@@@ )@V)K$=[0/)IYKBJC#$)/@@@@@@@@@/ 0@['/K@@["*W@@@D(W@@@B[WK@@B-8@@@[CW@@@B @@@@NAT@@@@ )@X)K"KBJC#$)/]=[CO)VYK )@@@@@'=@@@@C8K@@@&;@)@@C8@@@@/K@@["/K@@['*W@@@M*W@@@QAU@@@@ )@Z)M"K]J@YKAJC[[9)@/)W@%8@@@-C4@@@@R@K@[NH8K@@[C?K@@@[?@@@@C8@@@]/K@@]U(?@@@@AV@@@@ )@-0K"@/)XB=#32[.9@//)Z@@@@@@@[4)@@@[40@@@C40@@@C4)@@@H8L)@[/,)@@@(@@@@H/K@@]JAW@@@@ )@<0M%KI#3@@B=#*J@@@@@@@8#K@]LG@0@@GT80@@E/,)@@@0@@@@GH8@@@0')[)@CC80@@@R8)@@@AX@@@@ )@&@K%KKJ@([]/)IEKLJCC7=[32@8@^Z0@@]*W@@@S9*)@@@C8)@@@*W@@@OC8)@@@/K@@]XC8)@@@AY@@@@ )@*@K"K]J[9)@#2@19@W/)=@@@@@@@'=@@@@2WF)@@[?@@@@C8@@@[N8K@@UR]0@[N/K@@#)*4@@@@AZ@@@@ )@%@O_KB@/@YKM\@@@C80@@NR98@@CD$=^30YKNJCBM=^0@@@@9,M@@@R8)@@D/,)@@@(4@@@[/K@@#D*0@@@@R8)@@^^70@@@BD@@@@ )@2)K"KBJ[9@W/B=@V2]T9[G/)&@@@*)@@@@9?@@@]*4@@@@9?@@@]/K@@#O*W@@@C/,0@^[*W@@@]BE@@@@ )@4)K"K[\C@7=[32@98 CE[9[M@@@@[@@@@@C/@__"R'K@@@/K@@#V*W@@@C(W@@@]9*@@@@9?@@@LBF@@@@ )@6)K"@O)%Y[M]!8 CE2&@@@@@@@@@C8@@@5R'K@@@/K@@#;R'K@@@/K@@#;R'K@@@R98@@#/K@@#;BG@@@@ )@8)K"KQJG@[8JG@B&@[M]59)@@@@@[^@@@5C8@@@@[@@@@6C@@@[I/K@@#??8@@@^CS@@@/'=@@@@BH@@@@ )@')K%S@JCF]= 0O)\YK >CGB)@@@@/K@@#;R'K@@@'=@@@@C8K@@@&;@)@@C8@@@@'=@@@@C8@@@5BI@@@@ )@/)K"S@JCAB=^32[59[GJCD$=^0@@C])@@F*0@@@[C')@@@C]K@@D/,)@@@(4@@@[/K@@@@C@@@@ABJ@@@@ )@")K%KS>CG$=ATM#CEKUJC]0@@@@@C8K@@F'=@@@@C8K@@@&;@)@@C8@@@@/,0@@@C8K@@@R'K@@@BK@@@@ )[@)K"S@#3@[8JC@B=@#0YKN@@@@@@9%)@@D9')@^F+]K@@@+])@@[8#K@^]')H@@O:8@@@$')H@@CBL@@@@ )[])C-9@S/)X@@@@@@)@N0AEK[>CHM)@@@@@@[#@@\@@H@@@@@P@@@/,)@@@[?@@@@C8@@@[/KF@@@BM@@@@ )@O)AE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@K@@@@@@@[@@@@[#@@2BN@@@@ @EOF P )@@G@@@@ @@]@@B@@6@[3@@F@]Z@@@[@@@@@@@E@[P@@@@^IACMASK DATREF PCT$ AA )@@G@@ PCT MRFLGS PCTBD$ RPCTA$ FITEM$ OPTWRDAB )@@G@@ CHEKPRTSG SN900 LOAD$ FLAG5 POLTRAN OPTIONAC )@@G@@S REVT REVO REVD REVR REVV REVG AD )@@G@@ UNCHEK TREAD$ PRINT$ MFD900 RPRL RPR AE )@@G@@ HDG100 SIZE SPECER SZLOD SZBAK SZCHK AF )@@G@@ NSZOPT UNOPT SZOPT EABT$ FLAG3 MFD$ AG )@@G@@ QQOPT FFOPT USELUT IIOPT GBU MCT$ AH )@@G@@ MCTEQ QFSEG QF000 XXOPT KKOPT DIRSEGAI )@@G@@ DSEG DIR000 PROJPK AOPT @@[@@@@@@@]0FOPT AJ )@@G@@ @@[@@@@@@@#]GOON @@[@@@@@@@]&IN2000 @@[@@@@@@@@@IN2020AK )@@G@@ @@[@@@@@@@@WIN2200 @@[@@@@@@@["KOPT @@[@@@@@@@#4POPT AL )@@G@@ @@[@@@@@@@]?QOPT @@[@@@@@@@](XOPT @@[@@@@@@@#0ZOPT AM )@@G@@ @@[@@@@@@@#Y@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AN @ELT,SIQ TPF$.MAINTSKEL,,,172657100536,011 *. MAINTSKEL REV 2.3 07/01/77 *. *. *. QUEUE *. *. AND REFER TO A PARTICULAR *. MAP, PROCESS, DESCRIBE, OR TOC SGS, OR *. A PARTICULAR PCF OR TCF ENTRY. THIS PROCEDURE *. ESTABLISHES THE PROCESSOR AND NON-DEFAULT OPTIONS (IF ANY) *. FOR SOME ELEMENT AND PASSES THE INFORMATION TO MAKESGS. *. THIS ASSUMES THAT MAP SGSSES ARE PROCESSED FIRST. *. OTHERWISE, ALL KINDS OF BAD THINGS WILL HAPPEN IN TERMS OF *. PROCESSING TOO MANY MAPS. *. *DEFINE QUEUE *CLEAR FOUND *INCREMENT I TO [DOLIST,1] WHILE FOUND IS CLEAR *PROCESS DOSEARCH [#1] [#2] [DOLIST,1,I,1] *LOOP *IF FOUND IS CLEAR *IF [#3] = MAP *PROCESS MAKESGS [#1] [#2] MAP MAP [#4] *ELSE *. DIDN'T COME FROM MAP SGS. SEE IF DESCRIBE. *IF [#3] = DESCRIBE OR [#3] = PROCESS *IF [#3] = DESCRIBE OR [[#3],[#4]] > 1 *PROCESS MAKESGS [#1] [#2] [[#3],[#4],2,1] [#3] [#4] *SET FOUND *END *END *IF FOUND IS CLEAR *. NOT FROM DESCRIBE. SEE IF IT HAS A DESCRIBE. *INCREMENT DUMMY TO [DESCRIBE] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM DESCRIBE,DUMMY,1,1 FOR [#1] *IF [DESCRIBE,STMT$,1] > 1 *IF [DESCRIBE,STMT$,1,2] = [#2] *SET FOUND TO STMT$ *ELSE *SET DUMMY TO STMT$ *END *ELSE *IF [#2] = 'NO' *SET FOUND TO STMT$ *ELSE *SET DUMMY TO STMT$ *END *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *PROCESS MAKESGS [#1] [#2] [DESCRIBE,FOUND,2,1] DESCRIBE [*FOUND] *ELSE *. NO DESCRIBE. TRY TOC. *CLEAR FOUND *INCREMENT DUMMY TO [TOC] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM TOC,DUMMY,1,1 FOR [#1] *IF [TOC,STMT$,3,1] < +5 *IF [TOC,STMT$,2,1] = [#2] *SET FOUND TO STMT$ *ELSE *IF [#2] = 'NO' AND [TOC,STMT$,2,1] = '''' *SET FOUND TO STMT$ *ELSE *SET DUMMY TO STMT$ *END *END *ELSE *SET DUMMY TO STMT$ *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *SET THING TO [TOC,FOUND,3,1]+TOCNO-2 *IF VALUE OF THING < VALUE OF TOCNO *SET THING TO [TOC,FOUND,3,2]+TOCNO1 *END *PROCESS MAKESGS [#1] [#2] [PROCESSOR,THING,1,1] 0 0 *ELSE *. WELL, IT'S NOT DESCRIBED ANYWHERE. USE DEFAULT. *PROCESS MAKESGS [#1] [#2] [LANGUAGE,1,1,1] 0 0 *END *END *END *END *END *END *EJECT *. *. DOSEARCH *. *. SEE IF ELEMENT ALREADY APPEARS IN A LIST. *. *DEFINE DOSEARCH *CLEAR EXIT *INCREMENT DUMMY TO [[#3]] WHILE EXIT IS CLEAR *IF COLUMN SEARCH FROM [#3],DUMMY,1,1 FOR [#1] *IF [[#3],STMT$,1,2] = [#2] *SET FOUND *SET EXIT *ELSE *SET DUMMY TO STMT$ *END *ELSE *SET EXIT *END *LOOP *END *EJECT *. *. MAKESGS [ / 0 0] *. *. WHERE THE LAST TWO ARGUMENTS TELL OF A MAP OR DESCRIBE OR LANGUAGE *. SGS GIVING OPTIONS AND NON-STANDARD OUTPUT NAME, PERHAPS. *. THIS PROCEDURE CREATES THE DOFIRST, DOPROC, DOLANG, AND DOMAP SGSSES. *. *DEFINE MAKESGS *. FIND PROPER PROCESSOR SGS AND CORRESPONDING STANDARD PROCESSOR SGS. *IF COLUMN SEARCH FROM PROCESSOR,1,1,1 FOR [#3] *SET INDEX TO STMT$ *ELSE #MSG,N MAKESGS ERROR: PROCESSOR [#3] DOES NOT EXIST! (@ELT ASSUMED) *SET INDEX TO +ELTNOF *END *IF [BACKREF,INDEX,1,1] = +MAPNO AND NOT [#4] = MAP AND [MAP] > 0 *SET INDEX TO +ELTNOF *END *SET INDEX2 TO [BACKREF,INDEX,1,1] *IF VALUE OF INDEX2 = -1 *SET INDEX2 TO +ELTNO *END *CLEAR FFRST *IF NOT [FIRST,1,1,1] = 'NO' *INCREMENT IFRST TO [FIRST] WHILE FFRST IS CLEAR *IF [FIRST,IFRST,1,1] = SUBTYPE *IF [FIRST,IFRST,2,1] = [#3] *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *ELSE *IF [FIRST,IFRST,1,1] = ELEMENT *IF [FIRST,IFRST,2,1] = [#1] *IF [FIRST,IFRST,2] = 1 *IF [#2] = 'NO' *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *ELSE *IF [FIRST,IFRST,2,2] = [#2] *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *END *END *ELSE #MSG,N MAKESGS ERROR: IMPROPER 'FIRST' SGS. *END *END *LOOP *END *IF NOT VALUE OF FFRST > 0 *IF +INDEX2=+PDPNO OR +INDEX2=+ASMPNO OR +INDEX2=+COBPNO OR +INDEX2=+FORPNO ; OR +INDEX2=+MASMPNO *CREATE SGS: DOPROC [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *ELSE *IF VALUE OF INDEX2 = VALUE OF MAPNO *CREATE SGS: DOMAP [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *ELSE *CREATE SGS: DOLANG [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *END *END *END *END *EJECT *. *. FSCAN TAKES ONE ARGUMENT, P OR T, REPRESENTING PCF OR TCF ENTRIES. *. FOR EACH SGS BY THE GIVEN NAME, IT CREATES A 'DOIT' SGS. *. IT AVOIDS DUPLICATE DOIT ENTRIES. *. *DEFINE FSCAN *INCREMENT I TO [[#1]] *IF [[#1],I] = 1 *PROCESS QUEUE [[#1],I,1,1] 'NO' [#1] [*I] *ELSE *PROCESS QUEUE [[#1],I,1,1] [[#1],I,2,1] [#1] [*I] *END *LOOP *END *. *. *. COPYNAME *. *. TO SET UP DEFAULT VALUE FOR *SOME* OF THE FILES, *. THIS COPIES SOME SGS SUCH AS SI TO CREATE ANOTHER. *. *DEFINE COPYNAME *IF [[#1]] > 0 AND [[#2]] = 0 *IF [[#1],1,1]>1 *CREATE SGS: [#2] [[#1],1,1,1],[[#1],1,1,2] *ELSE *CREATE SGS: [#2] [[#1],1,1,1] *END *END *END *. *. *. COMPNAME *. *. COMPARES WHETHER THE FILE-NAMING SGSSES ARE THE SAME. *. SETS VALUE OF 'EQUAL' ACCORDINGLY. *. *DEFINE COMPNAME *CLEAR EQUAL *IF [[#1],1,1,1] = [[#2],1,1,1] AND [[#1],1,1] = [[#2],1,1] *IF [[#1],1,1] = 1 *SET EQUAL *ELSE *IF [[#1],1,1,2] = [[#2],1,1,2] *SET EQUAL *END *END *END *END *EJECT *. *. FILENAME *. *. IN EDIT MODE, EDIT THE FILENAME OR QUALIFIER*FILENAME *. FROM THE SPECIFIED FILE SGS (SI, RO, A0, ETC.) *. *DEFINE FILENAME [[#1],1,1,1]& *IF [[#1],1,1] > 1 "[[#1],1,1,2]& *END *END *. *. *. ELTNAME *. *. IN EDIT MODE, EDIT THE ELEMENT OR ELEMENT/VERSION *. FROM FIELD 1 OF THE SPECIFIED SGS. *. *DEFINE ELTNAME [[#1],[#2],1,1]& *IF NOT [[#1],[#2],1,2] = 'NO' /[[#1],[#2],1,2]& *END *END *EJECT *. *. MAPCOR *. *. IF PROCESSING A 'MAP' ELEMENT, 'LEVEL' SGS MAY SPECIFY *. 'EQU' DIRECTIVES TO BE INSERTED IN THE ELEMENT. *. *DEFINE MAPCOR *IF [#1] = DOMAP AND [LEVEL] > 0 *IF [LEVEL,1] > 3 *INCREMENT CORA FROM 3 TO [LEVEL,1] BY 2 *IF [LEVEL,1,CORA,1] = [[#1],[#2],1,1] *IF [[#1],[#2],1,2] = 'NO' *SET CORE TO 1 *ELSE *SET CORE TO 2 *END *IF [LEVEL,1,CORA] = [*CORE] *IF [*CORE] = 2 AND [LEVEL,1,CORA,2] = [[#1],[#2],1,2] OR [*CORE] = 1 *SET CORC TO [*CORA]+1 [LEVEL,1,CORC,1] *INCREMENT CORB TO [LEVEL,1,1] EQU [LEVEL,1,2,CORB]/[LEVEL,1,1,CORB] *LOOP *END *END *END *LOOP *END *END *END *EJECT *. *. GET *. *. FIND ALL SGSSES OF TYPE [#1] (DOFIRST, DOPROC, DOLANG, DOMAP) *. AND PUT OUT SUITABLE CONTROL CARDS, DELETING THE SGS *. AFTERWARDS. IF THERE IS AN ALPHA SGS, PUT THINGS OUT ALPHABETICALLY. *. *DEFINE GET *INCREMENT DUMMY TO [[#1]] *CLEAR QUITI *SET D TO 1 *INCREMENT I TO [[#1]] WHILE QUITI IS CLEAR *IF [ALPHA] > 0 *IF [[#1],I,1,1] < [[#1],D,1,1] *SET D TO I *ELSE *IF [[#1],I,1,1] = [[#1],D,1,1] *IF NOT [[#1],D,1,2] = 'NO' *IF [[#1],I,1,2] = 'NO' OR [[#1],I,1,2] < [[#1],D,1,2] *SET D TO I *END *END *END *END *ELSE *SET QUITI *END *LOOP I *IF [MERGE] = 0 *EDIT ON & *IF NOT [PROCESSOR,[[#1],D,2,1],1,1] = DOC *. *. EDIT A HEADING FOR NON-DOC ELEMENTS *. #HDG & *IF [PROGRAM] PROGRAM:& *INCREMENT W TO [PROGRAM,1] & *INCREMENT Z TO [PROGRAM,1,W] [PROGRAM,1,W,Z]& *LOOP *LOOP *END *IF [LEVEL] LEVEL: & *INCREMENT Z TO [LEVEL,1,1] [LEVEL,1,1,Z]& *IF [*Z] < [LEVEL,1,1] -& *END *LOOP *END ELEMENT: & *PROCESS ELTNAME [#1] [*D] *EDIT OFF *ELSE *. *. FOR DOC ELEMENTS, TURN OFF HEADING *. #HDG,N *END *EDIT ON & #& *SET DOIT21 TO [[#1],D,2,1] *SET DOIT22 TO [[#1],D,2,2] *IF [PROCESSOR,DOIT21] > 3 *. FILENAME GIVEN [PROCESSOR,DOIT21,4,1]& *IF [PROCESSOR,DOIT21,4] > 1 *. QUALIFIER ALSO "[PROCESSOR,DOIT21,4,2]& *END .& *END *IF [PROCESSOR,DOIT21] > 2 *. EXPLICIT PROCESSOR NAME [PROCESSOR,DOIT21,3,1]& *IF [PROCESSOR,DOIT21,3] > 1 *. VERSION GIVEN. /[PROCESSOR,DOIT21,3,2]& *END *ELSE *. NO EXPLICIT PROCESSOR NAME. [PROCESSOR,DOIT22,1,1]& *END *. END OF PROCESSOR NAME! *CLEAR COMMA *CLEAR GOTOPTS *IF [[#1],D,3,1] = MAP OR [[#1],D,3,1] = DESCRIBE ; OR [[#1],D,3,1] = PROCESS *PROCESS USEROPTS [[#1],D,3,1] [[#1],D,3,2] *END *IF GOTOPTS IS CLEAR *. NOT FROM MAP OR DESCRIBE. DEFAULT OPTIONS. *IF [PROCESSOR,DOIT21,1,2] *IF NOT [PROCESSOR,DOIT21,1,2] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT21,1,2] *END *ELSE *IF [PROCESSOR,DOIT22,1,2] *IF NOT [PROCESSOR,DOIT22,1,2] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT22,1,2] *END *END *END *END *IF UOPT IS SET *PROCESS OPTIONS U *END *IF [[#1],D,3,1] = MAP AND NOT [LIST,1,1,1] = NONE *SET LISTIT *END *CLEAR LISTIT *IF [LIST,1,1,1] = ALL *SET LISTIT *ELSE *IF [LIST,1,1,1] = PCF *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *ELSE *IF [LIST,1,1,1] = TCF *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *ELSE *IF [LIST,1,1,1] = BOTH *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *IF LISTIT IS SET *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *END *ELSE *IF [LIST,1,1,1] = EITHER *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *IF LISTIT IS CLEAR *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *END *END *END *END *END *END *. NOW LISTIT TELLS WHETHER TO LIST. *. SET TYPE TO PROPER SUBFIELD OF PROCESSOR SGS: *. 3 = NO LISTING, 4 = SHORT LISTING, 5 = LONG LISTING. *SET TYPE TO 3 . ASSUME NO LISTING *IF LISTIT IS SET *SET TYPE TO 4 . IF LISTING, ASSUME SHORT *IF [LIST,1,1]>1 *IF [LIST,1,1,2]=LONG *SET TYPE TO 5 . SET FOR LONG *ELSE *IF [LIST,1,1,2]=NOT *SET TYPE TO 3 . SET FOR NONE *END *END *END *END *IF [PROCESSOR,DOIT21,1,TYPE] *IF NOT [PROCESSOR,DOIT21,1,TYPE] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT21,1,TYPE] *END *ELSE *IF [PROCESSOR,DOIT22,1,TYPE] *IF NOT [PROCESSOR,DOIT22,1,TYPE] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT22,1,TYPE] *END *END *END & *. END OF OPTION FIELD! *IF [PROCESSOR,DOIT21,2] > 1 *PROCESS SPECS [*D] [*DOIT21] [[#1],D,3,1] [#1] *ELSE *PROCESS SPECS [*D] [*DOIT22] [[#1],D,3,1] [#1] *END *EDIT OFF *. END OF PROCESSOR CARD *ELSE *. MERGE SET: PUT OUT *ELTNAME *EDIT ON & "& *PROCESS ELTNAME [#1] [*D] *EDIT OFF *END *CLEAR FOUND *IF [CORRECT] > 0 *CLEAR EXIT *INCREMENT AA TO [CORRECT] WHILE EXIT IS CLEAR *IF COLUMN SEARCH FROM CORRECT,AA,1,1 FOR [[#1],D,1,1] *IF [CORRECT,STMT$,1] > 1 *IF [CORRECT,STMT$,1,2] = [[#1],D,1,2] *SET FOUND *SET EXIT *ELSE *SET AA TO STMT$ *END *ELSE *IF [[#1],D,1,2] = 'NO' *SET FOUND *SET EXIT *ELSE *SET AA TO STMT$ *END *END *ELSE *SET EXIT *END *LOOP *END *IF FOUND IS SET *EDIT ON #ADD,E & *IF [CORRECT,STMT$] > 3 [CORRECT,STMT$,4,1]& *IF [CORRECT,STMT$,4] > 1 "[CORRECT,STMT$,4,2]& *END .& *END [CORRECT,STMT$,3,1]& *IF [CORRECT,STMT$,3] > 1 /[CORRECT,STMT$,3,2] *END *ELSE *IF [APPLY,1,1,1] = BOTH *IF [[#1],D,1,2] = 'NO' *IF [UPDATE] > 0 *IF NOT [[#1],D,1,1] HAS PERM CORRECTIONS *CREATE PERM: [[#1],D,1,1] *END *CORRECT,PK [[#1],D,1,1] *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1] *PROCESS MAPCOR [#1] [*D] *END *END *ELSE *IF [UPDATE] > 0 *IF NOT [[#1],D,1,1]/[[#1],D,1,2] HAS PERM CORRECTIONS *CREATE PERM: [[#1],D,1,1]/[[#1],D,1,2] *END *CORRECT,PK [[#1],D,1,1]/[[#1],D,1,2] *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] *PROCESS MAPCOR [#1] [*D] *END *END *END *ELSE *IF [APPLY,1,1,1] = PCF *IF [[#1],D,1,2] = 'NO' *CORRECT [[#1],D,1,1] PERM *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] PERM *PROCESS MAPCOR [#1] [*D] *END *END *ELSE *IF [APPLY,1,1,1] = TCF *IF [[#1],D,1,2] = 'NO' *CORRECT [[#1],D,1,1] TEMP *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] TEMP *PROCESS MAPCOR [#1] [*D] *END *END *END *END *END *END *REMOVE SGS [#1],[*D] *LOOP DUMMY *END *EJECT *. *. OPTIONS *. *. ADDS SPECIFIED OPTIONS TO CONTROL STATEMENT. PROVIDES *. COMMA IF NEEDED. *. *DEFINE OPTIONS *IF NOT [#1] = 'NO' *IF COMMA IS CLEAR ,& *SET COMMA *END [#1]& *END *END *. *. *. USEROPTS *. *. ADDS OPTIONS GIVEN ON SPECIFIED MAP, PROCESS, OR DESCRIBE SGS. *. *DEFINE USEROPTS *IF [[#1],[#2],2] > 1 *PROCESS OPTIONS [[#1],[#2],2,2] *SET GOTOPTS *END *END *EJECT *. *. LOOKFOR

*. *. RETURNS WITH GOTCF SET IFF THE CURRENT ELEMENT [[#2],D,...] *. APPEARS IN THE NAMED CHANGE FILE. *. *DEFINE LOOKFOR *CLEAR GOTCF *INCREMENT I TO [[#1]] WHILE GOTCF IS CLEAR *IF COLUMN SEARCH FROM [#1],1,1,1 FOR [[#2],D,1,1] *IF [[#1],STMT$] = 1 *IF [[#2],D,1,2] = 'NO' *SET GOTCF TO STMT$ *END *ELSE *IF [[#1],STMT$,2,1] = [[#2],D,1,2] *SET GOTCF TO STMT$ *END *END *ELSE *SET GOTCF TO -1 *END *LOOP *IF VALUE OF GOTCF < 0 *CLEAR GOTCF *END *END *EJECT *. *. SPECS 2 *CLEAR RPTNAM [[#3],SPECT,3,1]& *IF [[#3],SPECT,3] > 1 /[[#3],SPECT,3,2]& *END *END *END *IF RPTNAM IS SET *PROCESS ELTNAME [#4] [#1] *END *END *SET COMMA TO COMMA+1 *LOOP *END *EJECT *. *. INITIALIZATION *. *CREATE SGS: DOLIST DOFIRST DOLANG DOPROC DOMAP *. *. THE 'NUMS' SGSSES ARE USED TO CREATE VARIABLES WHICH TELL *. MAINTSKEL WHERE CERTAIN STANDARD PROCESSOR SUBTYPES ARE *. LOCATED *. *CREATE SGS: NUMS PDP,PDPNO *CREATE SGS: NUMS ASMP,ASMPNO *CREATE SGS: NUMS COBP,COBPNO *CREATE SGS: NUMS FORP,FORPNO *CREATE SGS: NUMS MASMP,MASMPNO *CREATE SGS: NUMS ELT,ELTNO *CREATE SGS: NUMS MAP,MAPNO *. *. THE FOLLOWING 'PROCESSOR' SGS CARDS MUST BE ARRANGED IN ORDER *. OF ELEMENT SUBTYPE FOR 'SELECT TOC' AND OTHER FEATURES TO *. OPERATE CORRECTLY. *. *CREATE SGS: PROCESSOR PDP,'NO',N,LJ,LJ PDP,PI,PO PDP . 2 *CREATE SGS: PROCESSOR MASMP,'NO',N,SEV,LEV MASMP,PI,PO MASM . 2 *CREATE SGS: PROCESSOR ASMP,'NO',N,LJ,LJ ASMP,PI,PO PDP . 2 *SET TOCNO TO [PROCESSOR] *CREATE SGS: PROCESSOR COBP,C,N,LJ,LJ COBP,PI,PO PDP . 3 *CREATE SGS: PROCESSOR FORP,F,N,LJ,LJ FORP,PI,PO PDP . 4 *CREATE SGS: PROCESSOR SYM,'NO',N,LJ,LJ SYM,SI,SO ELT . 1-00 *SET TOCNO1 TO [PROCESSOR] *CREATE SGS: PROCESSOR ELT,'NO',N,LJ,LJ ELT,SI,SO ELT . 1-01 *IF [MASM] *CREATE SGS: PROCESSOR MASM,'NO',E,SEV,LEV MASM,SI,RO,SO MASM . 1-02 *ELSE *CREATE SGS: PROCESSOR ASM,'NO',E,SJ,LJ ASM,SI,RO,SO ASM . 1-02 *END *CREATE SGS: PROCESSOR COB,'NO',N,S,L COB,SI,RO,SO COB . 1-03 *CREATE SGS: PROCESSOR FOR,'NO',N,S,L FOR,SI,RO,SO FOR . 1-04 *CREATE SGS: PROCESSOR ALG,'NO',N,S,L ALG,SI,RO,SO ALG . 1-05 *CREATE SGS: PROCESSOR MAP,'NO','NO',SJ,LJ MAP,SI,AO,SO MAP . 1-06 *CREATE SGS: PROCESSOR DOC,'NO',NT,SRD,SRD DOC,SI,SO DOC . 1-07 *CREATE SGS: PROCESSOR SEC,'NO',N,LJ,LJ SEC,SI,SO ELT . 1-10 *CREATE SGS: PROCESSOR SSG,'NO',N,LJ,LJ SSG,SI,SO ELT . 1-11 *CREATE SGS: PROCESSOR APL,'NO',N,LJ,LJ APL,SI,SO ELT . 1-12 *CREATE SGS: PROCESSOR BAS,'NO',N,LJ,LJ BAS,SI,SO ELT . 1-13 *CREATE SGS: PROCESSOR LSP,'NO',N,LJ,LJ LSP,SI,SO ELT . 1-14 *CREATE SGS: PROCESSOR PLS,'NO',N,SE,LE PLS,SI,RO,SO PLUS . 1-15 *CREATE SGS: PROCESSOR PL1,'NO',N,S,L PL1,SI,RO,SO PL1 . 1-16 *. *IF [APPLY] = 0 *CREATE SGS: APPLY BOTH *END *IF [SELECT] = 0 *CREATE SGS: SELECT EITHER *END *IF [SELECT,1,1,1] = TOC AND [TOC] = 0 #MSG,N 'SELECT TOC' REQUIRES './TOC' IN SPEC 2 OF @SSG CALL. #!!! *CREATE SGS: TOC DUMMY DUMMY 1,1 *END *IF [LIST] = 0 *CREATE SGS: LIST ALL,SHORT *END *IF [LANGUAGE] = 0 *CREATE SGS: LANGUAGE ASM *END *IF NOT [FIRST] *CREATE SGS: FIRST SUBTYPE DOC *END *. *EJECT *. *. SET UP BACKREF SGSSES TO FIND STANDARD PROCESSORS. *INCREMENT I TO [PROCESSOR] *CLEAR QUITI *CLEAR SAVE *IF [PROCESSOR,I] > 1 *SET I1 TO 2 *ELSE *SET I1 TO 1 *END *INCREMENT J TO [PROCESSOR] WHILE QUITI IS CLEAR *IF COLUMN SEARCH FROM PROCESSOR,J,1,1 FOR [PROCESSOR,I,I1,1] *SET SAVE TO STMT$ *SET J TO STMT$ *ELSE *SET QUITI *END *LOOP *IF SAVE IS CLEAR *SET SAVE TO -1 *ELSE *IF [PROCESSOR,SAVE] = 1 *SET SAVE TO -1 *END *END *CREATE SGS: BACKREF [*SAVE] *IF [NUMS] AND NOT VALUE OF SAVE = -1 *IF COLUMN SEARCH FROM NUMS,1,1,1 FOR [PROCESSOR,SAVE,2,1] *SET [NUMS,STMT$,1,2] TO SAVE *REMOVE SGS NUMS,STMT$ *END *END *LOOP *IF [NUMS] #MSG,N INTERNAL ERROR - NUMS = [NUMS] *END *IF COLUMN SEARCH FROM PROCESSOR,1,1,1 FOR ELT *SET ELTNOF TO STMT$ *ELSE #MSG,N INTERNAL ERROR - PROCESSOR ELT SGS NOT FOUND *END *EJECT *. *IF [MERGE] = 0 *. *. SET UP FILES. *IF [SI] = 0 *CREATE SGS: SI TPF$ *END *. *PROCESS COPYNAME SI RI *PROCESS COPYNAME SI PI *. *CLEAR UOPT *IF [SO] > 0 *IF [SO,1,1,1] = 'U' *SET UOPT *END *END *IF UOPT IS SET OR [SO] = 0 *CLEAR OKSO *ELSE *SET OKSO *END *. *IF [RO] = 0 *PROCESS COPYNAME SO PO *END *PROCESS COPYNAME RO PO *IF [PO] > 0 *IF [PO,1,1,1] = 'TEMP' *REMOVE SGS PO,1 *END *END *IF [PO] = 0 #ASG,T PROCFILE$. *CREATE SGS: PO PROCFILE$ *END *. *IF OKSO IS SET *PROCESS COPYNAME SO RO *ELSE *PROCESS COPYNAME RI RO *END *PROCESS COPYNAME RO AO *EJECT *. *. MOVE ELEMENTS AS NECESSARY. *CLEAR EQUAL *PROCESS COMPNAME RI RO *IF EQUAL IS CLEAR *EDIT ON #COPY,RC & *PROCESS FILENAME RI .,& *PROCESS FILENAME RO .& *EDIT OFF *END *PROCESS COMPNAME PI PO *IF EQUAL IS CLEAR AND NOT [PO,1,1,1] = 'U' *IF [TOC] *INCREMENT A TO [TOC] *IF [TOC,A,3,1] = 2 *EDIT ON #COPY,SC & *PROCESS FILENAME PI .[TOC,A,1,1]/[TOC,1,2,1],& *PROCESS FILENAME PO .& *EDIT OFF *END *LOOP *ELSE *IF [DESCRIBE] *INCREMENT A TO [DESCRIBE] *IF [DESCRIBE,A,2,1]=ASMP OR [DESCRIBE,A,2,1]=FORP OR [DESCRIBE,A,2,1]=COBP ; OR [DESCRIBE,A,2,1]=MASMP OR [DESCRIBE,A,2,1]=PDP *EDIT ON #COPY,S & *PROCESS FILENAME PI *IF [DESCRIBE,A]>2 *SET B TO 3 *ELSE *SET B TO 1 *END .[DESCRIBE,A,B,1]& *IF [DESCRIBE,A,B]>1 /[DESCRIBE,A,B,2]& *END ,& *PROCESS FILENAME PO .& *EDIT OFF *END *LOOP *ELSE #MSG DON'T KNOW WHAT PROCS TO COPY! #!!! *END *END *END *EDIT ON & #USE ASM$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE MASM$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE COB$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE FOR$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *. END SETUP FOR NON-MERGE CASE. *ELSE *. SET UP CHANGE-FILE MERGING. *EDIT ON & #ELT,IL & *IF [MERGE,1] > 1 [MERGE,1,2,1]& *IF [MERGE,1,2] > 1 "[MERGE,1,2,2]& *END .& *END [MERGE,1,1,1]& *IF [MERGE,1,1] > 1 /[MERGE,1,1,2]& *END *EDIT OFF *END *EJECT *. *. *. *. PASS 0 *INCREMENT IMAP TO [MAP] *IF NOT [MAP,IMAP,1,1] = 'NO' *IF [MAP,IMAP,1]>1 *PROCESS QUEUE [MAP,IMAP,1,1] [MAP,IMAP,1,2] MAP [*IMAP] *ELSE *PROCESS QUEUE [MAP,IMAP,1,1] 'NO' MAP [*IMAP] *END *END *LOOP *INCREMENT IPRO TO [PROCESS] *IF [PROCESS,IPRO,1] > 1 *PROCESS QUEUE [PROCESS,IPRO,1,1] [PROCESS,IPRO,1,2] PROCESS [*IPRO] *ELSE *PROCESS QUEUE [PROCESS,IPRO,1,1] 'NO' PROCESS [*IPRO] *END *LOOP *IF [SELECT,1,1,1] = TCF OR [SELECT,1,1,1] = EITHER *PROCESS FSCAN T *END *IF [SELECT,1,1,1] = PCF OR [SELECT,1,1,1] = EITHER *PROCESS FSCAN P *END *IF [SELECT,1,1,1] = DESCRIBE *INCREMENT DESNO TO [DESCRIBE] *IF [DESCRIBE,DESNO,1] > 1 *PROCESS QUEUE [DESCRIBE,DESNO,1,1] [DESCRIBE,DESNO,1,2] DESCRIBE [*DESNO] *ELSE *PROCESS QUEUE [DESCRIBE,DESNO,1,1] 'NO' DESCRIBE [*DESNO] *END *LOOP *END *IF [SELECT,1,1,1] = TOC *INCREMENT TOCNO TO [TOC] *IF [TOC,TOCNO,3,1] < 5 *IF [TOC,TOCNO,2,1] = '' '' *PROCESS QUEUE [TOC,TOCNO,1,1] 'NO' TOC [*TOCNO] *ELSE *PROCESS QUEUE [TOC,TOCNO,1,1] [TOC,TOCNO,2,1] TOC [*TOCNO] *END *END *LOOP *END *IF [SELECT,1,1,1] = BOTH *INCREMENT PNO TO [P] *CLEAR FOUND *INCREMENT TNO TO [T] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM T,TNO,1,1 FOR [P,PNO,1,1] *IF NOT [T,STMT$] = [P,PNO] *SET TNO TO STMT$ *ELSE *IF [T,STMT$] = 1 *SET FOUND TO STMT$ *ELSE *IF [T,STMT$,2,1] = [P,PNO,2,1] *SET FOUND TO STMT$ *ELSE *SET TNO TO STMT$ *END *END *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *IF [P,PNO] > 1 *PROCESS QUEUE [P,PNO,1,1] [P,PNO,2,1] P [*PNO] *ELSE *PROCESS QUEUE [P,PNO,1,1] 'NO' P [*PNO] *END *END *LOOP *END *. *. END OF SELECT ! ! *. *. *EJECT *. *. BEGIN PASS 1: PROCS. *. *PROCESS GET DOFIRST *PROCESS GET DOPROC *PROCESS GET DOLANG *IF [MERGE] = 0 AND [DOMAP] > 0 *EDIT ON & #PREP & *PROCESS FILENAME RO . *END *PROCESS GET DOMAP *IF [DOPROC] > 0 OR [DOLANG] > 0 OR [DOMAP] > 0 OR [DOFIRST] > 0 #MSG,N INTERNAL ERROR:[DOPROC] DOPROCS, [DOLANG] DOLANG, ; [DOMAP] DOMAPS, [DOFIRST] DOFIRSTS *END #HDG,N @ELT,SI TPF$.MFD,,,135501072623,023 AXR$ . CONFIG . DEFINE CONFIGURATION PARAMTERES FLAP EQU 0 NONZERO TO TURN ON FLAP PRT FORM 12,6,18 FORMAT T1,S3,H2 POUT* PRT 1,22,LINOUT PRINT PACKET POUT2* PRT 2,22,LINOUT PRINT PACKET . LINOUT* RES 23 EDIT$ IMAGE BUFFER PROJPK* 'DIAG$ ' FITEM$ PKT FOR REAL PROJ PCT* RES 21 PCT$ BUFFER MFD$* RES 14 ELT$ SPEC1 BUFFER . . ITEMS BETWEEN RECSTART AND RECLEN WILL BE SORTED . RECSTART* . LIBUF0* RES 28 LEAD ITEM BUFFER MIBUF0* RES 28 BUFFER FOR M.I. SECTOR 0 . MI0 MUST BE LI0+28, DUE TO . CODING IN DIRSEC. MIBUF1* . MI SEC 1 BUFFER ON OLDSTUFF SNOITPO* RES 2 REVERSE OPTIONS SPEC'D OFF OLDSTUFF OPTWRD* RES 1 INIT1-INIT2 TMP STORAGE FOR OPTIONS RES 28-($-MIBUF1) REST OF MI SEC 1 BUFFER RES 1 SAVEAREA - ALSO SORTED + 0 FLAGS SORTED WITH FILE RECLEN* EQU $-RECSTART SORT RECORD LENGTH IN WORDS RECCHAR* EQU RECLEN*6 AND CHARACTERS ON SNAPOK LI1* . L.I. SEC 1 BUFFER OFF SNAPOK MI2* RES 28 M.I. SEC 2-N BUFFER ON NSSP . . SUPER SPEC REMOTE TEST INSTRUCTION TABLE - CREATED BY INIT1, AND EXECUTED . BY 'CHECK' ROUTINE. . . FOR SINGLE-WORD SPECS FOR DOUBLE-WORD SPECS . --------------------- --------------------- . LA<,J> A0,,X8 DL A0,,X8 . LSSL A0, AND SSL A0, DTE A0,SSPVAL . AND A0,SSMASK . LA A0,SSPVAL . A0,A1 . SSIZE* EQU 6 SPEC TEST ENTRY LENGTH SSTAB* RES SSIZE*NSSP RESERVE TABLE SPACE . SSLOAD* EQU SSTAB+0 'DL' OR 'LA' OF DIRECTORY INFO SSHIFT* EQU SSTAB+1 SHIFT OR NOP (SKIPPED FOR 'DL') SSTEST* EQU SSTAB+2 'TE' OR 'DTE' WITH SPEC VALUE SSPVAL* EQU SSTAB+3 SPEC VALUE CONVERTED TO PROPER FORM SSMASK* EQU SSTAB+4 MASK, OR SECOND WORD OF SPEC VALUE SSLINK* EQU SSTAB+5 LINK TO POLISH TABLE ENTRY . (FOR RESULT OF TEST) . . POLISH: POLISH NOTATION TABLE. INIT1 DECODES THE AND'S, OR'S, AND . XOR'S INTO NUMBERS, AND PLACES THESE NUMBERS IN THE POLISH . TABLE IN THE ORDER IN WHICH THEY ARE ENCOUNTERED. A BLANK . ENTRY IS LEFT FOR EACH ACTUAL TEST SPEC WHICH IS FOUND, . AND WHEN THE TEST IS PERFORMED, THE RESULT IS PLACED IN THE . PROPER LOCATION IN THE POLISH TABLE. . POLISH* RES NSSP POLISH NOTATION TABLE . . TRANS: THIS TABLE CONTAINS THE INTERMEDIATE RESULTS OBTAINED WHILE . EVALUATING THE POLISH EXPRESSION. . TRANS RES NSSP TRANSLATION TABLE . POLERM 'POLISH NOTATION ERROR' POLTRAN ERROR MESSAGE OFF NSSP . USELUT* + 0 DIRLED$ VS. DIRSEC$ FLAG ECODE* + 0 DIREC$ ERROR CODES + 0 ON OLDSTUFF SZOPT* RES 2 SECONDARY ATTRIBUTE OPTION ROUTINE . AND PARAMETER OFF OLDSTUFF . . INTERMEDIATE AND FINAL TOTALS . TOTSIZ EQU (BRKMAX*BRKOK)+1 # OF TOTALS CELLS NEEDED BRTOT* . REMOVABLE TRACKS DO TOTSIZ , + 0 BVTOT* . V-OPTION TRACKS DO TOTSIZ , + 0 BGTOT* . G-OPTION TRACKS DO TOTSIZ , + 0 BTOT* . FIXED TRACKS (INCLUDING V/G) DO TOTSIZ , + 0 BSECTOT* . SECURE BACKUP BLOCKS DO TOTSIZ , + 0 BUNLTOT* . UNLOADED TRACKS DO TOTSIZ , + 0 CNT1* . V-OPTION FILES, G-OPTION FILES DO TOTSIZ , + 0,0 CNT2* . TAPE FILES, REMOVABLE DISC FILES DO TOTSIZ , + 0,0 CNT3* . UNLOADED FILES, TOTAL FILES SELECTED DO TOTSIZ , + 0,0 . MASK FOR PARTIAL SPECS . ACMASK* - 0D INITIALIZE FOR FULL SPEC ON OLDMFD . . EQUIPMENT CODE TABLE . EQUCD* 'F2' 'FB' 'F4' 'F8' 'F17' 'F14' 'F40' 'FCS' EQUCDL* EQU $-EQUCD SUB30* 'F3' FASTRAND-III SUBCODE 'F60' 8460 SUBCODE SUB35* 'F24' 8424 SUBCODE . TAPEQP* '8C7' 01 '6C7' 02 '8CB' 03 '6CB' 04 '8C9' 05 '6C9' 06 '4C' 07 '4CB' 010 'U12' 011 'U16' 012 '12N' 013 '16N' 014 '20N' 015 '3A' 016 '2A' 017 OFF OLDMFD . . *** K L U D G E F O L L O W S *** . . WHEN THE SINGLE-FILE ROUTINE DOES AN ER FITEM$ FOR A TEMPORARY FILE, FITEM$ . RETURNS THE OLD EQUIPMENT CODE NUMBERS, WHICH WE PREFER NOT TO USE . ANYMORE. SINCE THE FILE IS ASSIGNED, WE CAN PICK UP THE EQUIPMENT . INDEX FROM THE PCT ITEM, AND USE THAT TO PICK UP THE SPECIFIC . MNEMONIC FOR THE EQUIPMENT INDEX. THIS IS NOT QUITE WHAT WE WANT, . SINCE FOR OTHER FILES WE PRINT THE ASSIGN MNEMONIC, BUT IT SEEMS . TO BE THE BEST WE CAN DO FOR NOW. ANYHOW, TO DO THIS, WE MUST GET . THE SPECIFIC MNEMONIC TABLE FROM THE MCT, OR USE THE 'FEQP$' . SUBFUNCTION OF ER INFO$... . MCTEQ* + 0 IF YOU HAVE >40 DISTINCT EQUIPMENT RES 39 TYPES, YOU'LL HAVE TO INCREASE THIS . (SEE ALSO INIT2). . . *** K L U D G E P R E C E D E S *** . . EDPACK* E$PKT 23,LINOUT EDIT$ PACKET ON OLDSTUFF DATREF* + 0 YY,MM,DD DATE FROM D-OPTION RPR* . R-OPTION PARAMETER TABLE + 'DIS',DISBTA DISABLED IN ANY WAY + 'HDW',DISBTH HARDWARE DISABLED + 'WRN',DISBTW WARNING ONLY + 'BBT',DISBTB BAD BACKUP TAPE + 'BMI',BM1BIT BAD MAIN ITEM RPRL* EQU $-RPR LENGTH OF R-OPTIOH PARAMETER TBL . SIZE* + 0 SPEC2 HOLDER OFF OLDSTUFF . MRFLGS* + 0,0,0,0,0,0 MORE FLAGS LINE2* + 0 2ND LINE FLAGS FLAG3* + 0,0,0,0,0,0 MORE FLAGS FLAG4* + 0,0,0,0,0,0 MORE FLAGS FLAG5* + 0 MORE FLAGS . . OPTION TABLE . . ZERO ENTRY INDICATES UNDEFINED OPTION. . OTHERWISE, H2 = PRIMARY ATTRIBUTE ROUTINE ADDRESS. . IF OPTION IS NOT A PRIMARY ATTRIBUTE OPTION, 'GOON' SHOULD BE USED. . INIT1 WILL SET T1 OF THE ENTRY = 1 IF THE OPTION IS DEFINED AND SET. . . IF 'OLDSTUFF' IS TURNED ON, S3 = 040 INDICATES THAT THE OPTION . IS REVERSIBLE, AND T1 WILL BE SET TO -1 IF THE USER HAS REVERSED . IT BY SPECIFYING THE OPTION IN THE SPEC2 VERSION FIELD. . ON OLDSTUFF OLDOP EQU (040*/18)+GOON REVERSIBLE OPTION OFF OLDSTUFF ON OLDSTUFF=0 OLDOP EQU 0 UNDEFINED OPTION OFF OLDSTUFF=0 . OPTIONS* + 0,AOPT A DO 2 , + 0,GOON B-C + OLDOP D + 0,GOON E + 0,FOPT F + OLDOP G + 0,GOON H + 0,FOPT I + 0,GOON J + 0,KOPT K DO 3 , + 0,GOON L-N + OLDOP O + 0,POPT P + 0,QOPT Q + OLDOP R + 0,GOON S DO 3 , + OLDOP T-V + 0,GOON W + 0,XOPT X + 0,GOON Y + 0,ZOPT Z . ON SORTOK . . SORT PARAMETER TABLE, SORTBL, SHOULD CONTAIN EVERYTHING EXCEPT . KEY PARAMETERS, WHICH ARE CREATED IN 'TABLE2' BY INIT1. . SORTBL* R$FILE 'COPY',TABLE2 'RSZW',RECLEN 'FILES','XA','XB' ; 'FPOC',MFD400 'LPOC',LPOC 'CHECK','D','F' TABLE2* + 0,TABLE2 START OF TABLE + 06300,0,0 DELETE CONSOLE MESSAGES . . SORT KEYS ARE INSERTED IN 'ADDKEYS' DYNAMICALLY BY INIT1, BASED ON . SPECS. IF 'B' OPTION IS USED, SORT KEYS FOR QUALIFIER, FILENAME, . AND FCYCLE ARE AUTOMATICALLY ADDED AT THE END OF THE LIST. THE . LIST IS TERMINATED BY AN END-OF-PARAMETER-TABLE SENTINEL. . THEREFORE, A MINIMUM OF 7 WORDS IS NEEDED FOR ADDKEYS. . KEYL EQU 7+(NSSP<6)*(2*NSSP)+(NSSP>5)*(2*5) ADDKEYS* RES KEYL ON BRKOK . . BRKTBL WILL CONTAIN THE NECESSARY INSTRUCTIONS AND DATA TO PROVIDE THE . SUBTOTAL ('BREAK') FEATURE. EACH ENTRY IS BRKSIZ WORDS IN LENGTH, BUT THE . CONTENTS VARY WITH THE SORT KEY TYPE. BRKTBL IS BUILT BY INIT1. . . SINGLE WORD DOUBLE WORD SINGLE BIT . ----------- ----------- ---------- . 0 LA<,J> A0,,X8 DL A0,,X8 LA, A0,,X8 . 1 TE A0,2,*X5 DTE A0,2,*X5 LMJ X11,BRKBIT . 2 + FORMER VALUE + FORMER VALUE + FORMER VALUE . 3 + FORMER VALUE + BIT MASK . 4 + 0, + 0, + 0, . 5 SHIFT LEFT,RIGHT SHIFT LEFT,RIGHT . . WHERE IS THE PARTIAL WORD DESIGNATOR, IF ANY, AND IS THE OFFSET . INTO THE SORT RECORD. IS THE FIRST 3 CHARACTER OF THE SPEC. . BRKSIZ EQU 6 SIZE OF BRKTBL ENTRY BRKPNT* + -BRKSIZ,BRKTBL+(BRKMAX*BRKSIZ) INITIAL BRKTBL POINTER BRKTBL* RES BRKMAX*BRKSIZ BRKSIZ-WORD ENTRIES . BRKLOAD* EQU 0 LOAD OF DIRECTORY INFO BRKTEST* EQU 1 TEST VERSUS PREVIOUS VALUE BRKVAL* EQU 2 PREVIOUS VALUE BRKMASK* EQU 3 MASK FOR SINGLE BIT, OR WORD 2 OF VALUE BRKSPEC* EQU 4 BREAK SPEC FLAGS . S2 = NEW-HEADING-WANTED FLAG . S3 = SPEC NUMBER . H2 = 1ST 3 CHARACTER OF SPEC BRKSHFT* EQU 5 LEFT,RIGHT SHIFT COUNTS . INVALU* + 1,1 BREAK INITIAL VALUE FLAGS BRKCNT* + 0 BRKSTOP* + 0 STARTING BREAK INDEX FOR TOTALS OFF BRKOK OFF SORTOK . . DEFINE EQUF TAGS . EQUFS . EQUF DEFINITIONS ON OLDSTUFF . . THESE INSTRUCTIONS, WHICH GET EXECUTED REMOTELY BY THE . FILE CHECK ROUTINE, HAVE THEIR TESTS REVERSED BY INIT2 . IF THE CORRESPONDING OPTION IS REVERSED ON THE CALL CARD. . REVT* J GALI SELECT (SKIP) TAPE FILES REVO* JZ RDISC,GALI SELECT (SKIP) REMOVABLE DISC FILES REVG* TOP,U A0,MI0GBIT SELECT (SKIP) G-OPTION FILES REVV* TOP,U A0,VBIT SELECT (SKIP) V-OPTION FILES REVR* TOP,H2 A0,RPR-1,A1 SELECT (SKIP) DISABLED FILES UNCHEK* TN DESCFLAGS SELECT (SKIP) UNLOADED FILES REVD* TLE A1,A0 SELECT (SKIP) USING REFERENCE DATE SZLOD* TG FILESIZE,SZOPT+1 SELECT (SKIP) USING FILE SIZE CRITERIA SZBAK* TLE FILESIZE,SZOPT+1 SELECT (SKIP) USING BACKUP BLOCK COUNT OFF OLDSTUFF /$(1). BEGIN . . LOAD INITIALIZATION SEGMENT (INSEG), WHICH IS COMPOSED OF INIT1 . AND INIT2 ROUTINES. INIT1 VALIDATES THE SPEC FIELDS AND DOES MUCH . OF THE OPTION CHECKING. WHEN DONE, INIT1 JUMPS TO INIT2 TO SET . ROUTINE ADDRESSES, INITIALIZE DIREC$ IF NEEDED, AND PRINT THE . HEADING (VIA OVERLAY SEGMENT HDGSEG) IF DESIRED. . IF SINGLE-FILE MODE WAS NOT SPECIFIED, INIT2 WILL THEN NORMALLY . OVERLAY ITSELF WITH THE CHECK/PRINT SEGMENT (CHEKPRTSG) AND . RETURN TO MFD100. . . IF SINGLE-FILE MODE IS SPECIFIED, INIT2 LOADS AND JUMPS TO QFSEG, . WHICH LOADS CHEKPRTSG AND RETURNS TO 'MFD100' IF THE DREAD$ GOES OK. . IF NOT, IT WILL PRINT AN ERROR MESSAGE, ISSUE A READ$ FOR ANOTHER . FILE, AND TRY AGAIN. IF AN @EOF IS ENCOUNTERED, IT WILL RETURN TO 'MFD700'. . IN SINGLE-FILE MODE, THE DIREC$ SEGMENT IS NOT NEEDED, SO QFSEG . AND DIRSEG OCCUPY THE SAME PROGRAM AREA. . MFD . ON FLAP FSKIP$* EQU 1 FJUMP$* EQU 2 FJUMPS$* EQU 1 U1110T* EQU 0 FLOP$STOP* EQU 0 FTIO$* EQU 1 TEP A5,(1*/('Z'-'E')) E-OPTION TO TURN ON FLAP OUTPUT SLJ FLOP$ START FLAP OUTPUT OFF FLAP L$OAD INSEG,IN1000,1 PERFORM INITIALIZATION . QFSEG RETURNS HERE IF DREAD$ GOES OK. . INSEG RETURNS HERE AFTER INITIALIZING DIREC$. . . LOAD SDFO SEGMENT IF W-OPTION IS SET . MFD100* . ON WOPTOK TZ WPT IS W-OPTION SET? TZ SDFLOD AND SDFO SEG NOT ALREADY LOADED? J MFD200 NO, CONTINUE L,U A1,SDFOSG GET SEGID LMJ X11,DSEG ACQUIRE NECESSARY CORE L$OAD SDFOSG,SDF000,1 J TO SDFOO ROUTINE, RETURN TO MFD200 OFF WOPTOK . . OPEN SORT IF NEEDED . MFD200* . ON SORTOK TNZ SORT SORT DESIRED? J MFD400 NO, START DIRECTORY SEARCH . . SORT DESIRED...ACQUIRE CORE AND LOAD SORT DSEG . TZ SORTED SORT SEG ALREADY LOADED? J NOSORTF YES, NO NEED FOR SORTF CALL . JUST OPEN SORT, AND RETURN TO MFD400 DO SRTDBG , P$RINT (0102,('SORT LOAD$ ')) L,U A1,SORTSG GET SEGID LMJ X11,DSEG PREPARE FOR DSEG LOADING L$OAD SORTSG,OPNSRT,1 LOAD AND JUMP TO SORT SEGMENT OFF SORTOK . . FIND NEXT FILE TO BE LISTED . IF SORT NOT BEING DONE, J MFD400...OTHERWISE, GET NEXT RECORD FROM SORT . MFD300* . ON SORTOK TZ SORT SORT BEING DONE? J SRTNXT YES, GET NEXT RECORD FROM SORT . JUMP TO 'PRINT' IF RECORD FOUND, . TO 'MFD600' IF EOF OFF SORTOK . . START DIRECTORY ITEM CHECK ROUTINE. 'OPNSRT' RETURNS HERE AFTER R$OPN . MFD400 . ON SORTOK**SRTDBG TNZ SORT SORT BEING DONE? J MFD401 NO, DON'T PRINT MSG P$RINT (0101,('FPOC ')) MFD401 . OFF SORTOK**SRTDBG J CHK000 J TO ITM CHK ROUTINE, RETURN TO MFD500 . . RELEASE RECORD TO SORT IF SORT IS TURNED ON . MFD500* . ON SORTOK TZ SORT WAS SORT SPEC'D? J GOTREC YES, RELEASE RECORD TO SORT . RETURN TO MFD400 TO GET NEXT FILE OFF SORTOK . . OTHERWISE, JUST JUMP TO PRINT ROUTINE TO EDIT FILE INFO . J PR000 JUMP TO PRINT ROUTINE /. FINISH UP - PRINT TOTALS . MFD600* ON BRKOK SZ BRKSTOP SET HIGHEST BREAK LEVEL FOR GRAND TOTALS OFF BRKOK MFD620 L$OAD TOTSEG,TOT000,1 JUMP TO TOTALS ROUTINE MFD700* . RETURNS HERE AFTER GRAND TOTALS ON MSTITE TNZ SFMODE2 SINGLE-FILE MODE? TZ MPT OR M-OPTION SET? J $+2 YES, DON'T FREE DGET$ FILE LMJ X11,DIREND$ FREE DGET$ FILE OFF MSTITE DO WOPTOK>0 , TNZ WPT . IS W-OPTION SET? ER EXIT$ NO, WE'RE THRU! ON WOPTOK LA,U A0,FCT YES, MUST CLOSE SDF FILE LMJ X11,SDFOC$ CLOSE THE SDF FILE ER ERR$ ERROR RETURN FROM SDFO $(0). OMSG 'OUTPUT IN DATAFILE &' TELL 'EM WHERE IT IS $(1). E$DIT EDPACK OPEN EDIT E$MSG OMSG EDIT 'OUTPUT IN DATAFILE ' E$FD2 (WFILE) EDIT SDF FILENAME LA A0,POUT2 GET PRINT$ PACKET OFF WOPTOK MFD900* ER PRINT$ PRINT THE IMAGE ER EXIT$ NOW WE'RE THRU! . . COMPOSE SPEC ERROR MSG - ENTER VIA LMJ X10,SPECER . SPEC NUMBER SHOULD BE IN SPECN . SPECER* E$DIT EDPACK OPEN EDIT E$MSG SPECERM START MSG E$DECV SPECN ADD SPEC NUMBER E$MSGR . CONTINUE MSG E$OCTF 6,0,X10,U EDIT RETURN ADDRESS LA A0,POUT GET PRINT PACKET J MFD900 PRINT IT SPECERM 'SPEC & ERROR DETECTED AT &' / ON NSSP . . POLISH EXPRESSION EVALUATION ROUTINE . . DECODE THE 'POLISH' TABLE, AND RETURN WITH A0 INDICATING WHETHER OR NOT . THE EXPRESSION IS TRUE. INTERMEDIATE RESULTS GO IN 'TRANS' TABLE. . POLTRAN* TZ POLNTH IS LENGTH OF POLISH TABLE ZERO? TNZ TESTS OR HAVE NO TESTS BEEN SPECIFIED? J POL400 YES, ERROR LR R1,POLNTH GET LENGTH OF POLISH TABLE JGD R1,$+1 ADJUST FOR JGD LX X1,(1,0) INITIALIZE POLISH TABLE INDEX LX X2,(1,0) INITIALIZE TRANS TABLE INDEX POL100 LA A0,POLISH,*X1 PICK UP ITEM FROM POLISH TABLE TG,U A0,TRUE+1 IS IT AN OPERATION? J POL300 YES, STORE IT IN TRANS TABLE TNZ,U 0,X2 IS FIRST SPEC OPERAND? J POL400 YES, OPERATION MUST BE FIRST POL200 LA A1,TRANS-1,X2 OPERAND - GET LAST ITEM PUT IN TRANS SA A1,A2 SAVE IN A2 IN CASE OF 'NOT' TNE,U A1,NOT WAS IT A 'NOT' OPERATION? J POL240 YES, HANDLE IT NOW TG,U A1,TRUE+1 NO, WAS IT ANOTHER OPERATION? J POL300 YES, MUST STORE THIS OPERAND IN TRANS LA A2,TRANS-2,X2 GET LAST OPERATION IN TRANS POL240 ANA,U A2,TRUE+1 CONVERT INTO OP INDEX EX OP,A2 DO AND/OR/XOR A0,A1 LA A0,A1 RESULT IN A0 AGAIN ANX,U X2,1 BACK UP TRANS INDEX TE,U A2,NOT-(TRUE+1) WAS THIS A 'NOT' OPERATION? ANX,U X2,1 NO, BACK UP A LITTLE MORE TNZ,U 0,X2 NO OPERATIONS LEFT IN TRANS? J POL500 GOOD, SHOULD BE ALL DONE J POL200 TRY COMBINING AGAIN POL300 SA A0,TRANS,*X2 STORE OPERAND OR OPERATION IN TRANS JGD R1,POL100 CONTINUE UNTIL ALL DONE . . ERROR IN POLISH EXPRESSION . POL400 LA A0,(PRT 1,4,POLERM) . GET 'POLISH NOTATION ERROR' MSG J MFD900 PRINT IT, AND EXIT . . TABLE OF LOGICAL INSTRUCTIONS . OP AND A0,A1 OR A0,A1 XOR A0,A1 XOR,U A0,TRUE 'NOT' - COMPLEMENT THE OPERAND . POL500 TZ R1 R1 SHOULD BE ZERO J POL400 IF NOT, SOMETHING'S WRONG J 0,X11 RETURN WITH A0 = 0 OR 1 (F OR T) OFF NSSP END MFD @ELT,RI TPF$.MFD,,,154304141337 )@@@C@* @@@@)@A0^@)@>K]@)[&)]@POLISH@@@@@@ DIAG$ @]Q@@^@[Q@@^@@@@@@@@@@@@AA@@@@ )[&0A@@@@@@@)DV)GEK@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ZK@AY@@@@@@ROR ION ER NOTATAB@@@@ )DX@^@)DY@K@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AC@@@@ )D)@Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AD@@@@ )D+0Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AE@@@@ )D>)Q@@@@@@@F4 FB F2 ____________@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AF@@@@ )D*KQ@@@@@@@8CB 6C7 8C7 F24 F60 F3 FCS F40 F14 F17 F8 AG@@@@ )D:@Q@@@@@@@3A 20N 16N 12N U16 U12 4CB 4C 6C9 8C9 6CB AH@@@@ )D!0^@)D8@KE@@@@@@DIS@@)@@@@@@@@@@@@@@@@@@@@@@@@[[@@@@@@@@@@@&R@@^@@@@@@2A AI@@@@ )D'@Q@@@]=@C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BMI@]@BBT@@^WRN@@CHDW@@KAJ@@@@ )D/0IEK[ C@<1)C@+=@LM@G/S]@C(@^@@@@@@@@@@@@@)@@@@@@@@@@@@@@@@@)@@@@@@@@@@@@@@@AK@@@@ )D")IEK[>C@+=@-M@C(@^O)]JA@)]@@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AL@@@@ )E@KIEK]>C[<1)C@+=@L80^@L80^@L80^@K@@@)@@@@@)@@@@@)@@@@@@@@@@@)@@@@@@@@@@@@@@@AM@@@@ )E]@KEK[ C[2=@LM@)* @E@@@@@@@@N@@@(F[@@@[Q8@@@*P@@@@*G@@@@@@@@@@@@@@@@@@@@@@@@AN@@@@ )E^@IE[7KA@D7K^[CO])@@@@@@@@@@@@@@@@3@@@@@@@@@*P9@@@*G0D@F@@<@@@@@+@@@@TN@@@(HAO@@@@ )EE@]E@@@@@@)EI0I@YK JC])@@@@@>8@@@K>8@@@)/#)@@@/K@@@@@@@@@@@@@@@@@@[@@[__9@*;AP@@@@ )EK)EY@J[8@@)@@@A%K -M@0@@@@@@C8K@@@&;@)@@C8@@@@?#0@>7!#0@>7?@K@@G1WC@@*>^H@$&AQ@@@@ )@@0K"KA\C#$=[;0EKCJC^M=]@@@@@&;@)@@C8@@@@/,0@@@C8K@@@/K@@@H*)@@@@*W@@@Q'=@@@@AR@@@@ )@]0K%KDJC#R=[;0YKB\C^2=]<2[^@/,0@@@C8K@@@/K@@@@*=@@@@/K@@@T(0@@@@'=@@@@C8K@@@AS@@@@ )@^0K%KE[M[P9@U/)JYKFJC 7=[8@@*0@@@@/K@@@@/K@@@@*0@@@@'=@@@@C8K@@@&;@)@@C8@@@@AT@@@@ )@A0K"KGJCAR&@[M[*EKH\C#R=#)@@(0@@@@'=@@@@C8K@@@&;@)@@C8@@@@ @@@*./K@@@@/K@@@@AU@@@@ )@C0K"KBJ[9@'/)IYKJ CB7=^#2]^@'=@@@@/,0@@@C8@@@@'=@@@@(W@@@Q/,0@@@/K@@@&*W@@@GAV@@@@ )EL0C@@@@@@@)@E0C%S@JCC+&@#2]G/,0@@@C8@@(B/,0@@@C/@@$) & TAFILE IN DAOUTPUTAW@@@@ )@F0K"S@JCDB&@#2]P9@/O0@YKL @@C8@@[@/,0@@@C/@@$)'=@@@@'=@@@@C@@@@#/,0@@@9?@@(JAX@@@@ )@H0K"KL\CD$=^;2])B= F3@@@@@@@C@@@@]/,0@@@C8K@@AC8E@@@/,0@@@/,0@@@C?@@@@/,0@@@AY@@@@ )@J0M"@@JCD$=[;0@@@@@@@@/K@@[<(*@@@@**@@@@ & TED AT DETEC ERRORSPEC &/K@@@2AZ@@@@ )@M@M"KNJ[9)@/0@YS@#0B)@/K@@[<(8]@@@/K@@[-!8@@@]C@[) )R@)@(LR@K@(L8KK@[EN*K@@@BA@@@@ )@OKO"S@@/[8JG@[8@C@@@@H')I@[,H8)@@]C@+@ ;/K@@[-!8K@@]/K@@[S:8K@@ [@K@@IC@M@ /BB@@@@ )@Q0M)B)/B&@#0YS@@@@@@@@C@@@(M8KK@[G[@]) ./K@@[L/K@@[2(8]@@@P8)@@[%8)@@#P8)@@[BC@@@@ )@T@K"KM\CBB=#0/)WEKP[M]?@@@@@C8K@@@&;@)@@C8@@@@[)@@@@C8@@@_'=@@@@()@@@@'=@@@@BD@@@@ )@V@M"KA\CB)@Y@@@@@@@@@@/KF@@@/K@@[<*@@@[[-8@@@[-@@@@H)@@@@H+@@@@H'=@@@@'=@@@@BE@@@@ )EM0K@@])@@@@@@@@@@@@@@@@@@@@@@[^@AU@@[@@@ $MFD$ XB XA BF@@@@ 0@@@@)@@*@@@@@@@@@@@@@@@@@@@@@@[^@AU@@[@@@ $MFD$ XB XA BG@@@@ @EOF P )@@G@@@@ @@]@@B@@?@[Z@[Y@BR@@@[@@@@@@@E@(N@@@@[5MSALL$ AOPT GOON AA )@@G@@ FOPT KOPT POPT QOPT XOPT ZOPT AB )@@G@@ LPOC GALI INSEG IN1000 LOAD$ OPTIONAC )@@G@@S FLAG3 SDFOSG DSEG SDF000 NOSORTF SORTSGAD )@@G@@ OPNSRT SRTNXT CHK000 GOTREC PR000 TOTSEGAE )@@G@@ TOT000 MRFLGS DIREND$ EXIT$ FCT SDFOC$AF )@@G@@ ERR$ EDIT$ EMSG$ EFD2$ PRINT$ FLAG5 AG )@@G@@ EDECV$ EMSGR$ EOCTF$ CHEKPRTSG SN900 ACMASKAH )@@G@@ @@@@@@@@@@&WADDKEYS @@@@@@@@@@*RBGTOT @@@@@@@@@@&@BRKCNTAI )@@G@@ @@@@@@@@@@*/BRKLOAD @C@@@@@@@@@@BRKMASK @C@@@@@@@@@#BRKPNTAJ )@@G@@ @@@@@@@@@@**BRKSHFT @C@@@@@@@@@ BRKSPEC @C@@@@@@@@@^BRKSTOAK )@@G@@P @@@@@@@@@@*.BRKTBL @@@@@@@@@@*(BRKTEST @C@@@@@@@@@[BRKVALAL )@@G@@ @C@@@@@@@@@]BRTOT @@@@@@@@@@>8BSECTOT @@@@@@@@@@&CBTOT AM )@@G@@ @@@@@@@@@@&^BUNLTOT @@@@@@@@@@&GBVTOT @@@@@@@@@@>/CNT1 AN )@@G@@ @@@@@@@@@@&KCNT2 @@@@@@@@@@&OCNT3 @@@@@@@@@@&SDATREFAO )@@G@@ @@@@@@@@@@$&ECODE @@@@@@@@@@>4EDPACK @@@@@@@@@@$)EQUCD AP )@@G@@ @@@@@@@@@@&YEQUCDL @C@@@@@@@@@CFLAG3 @@@@@@@@@@$\FLAG4 AQ )@@G@@ @@@@@@@@@@$0FLAG5 @@@@@@@@@@$1HDGRTN @@@@@@@@@@@[INVALUAR )@@G@@ @@@@@@@@@@*;LIBUF0 @@@@@@@@@@[@LINECOUNT @@@@@@@@@@@@LINE2 AS )@@G@@ @@@@@@@@@@$,LINOUT @@@@@@@@@@@^LI1 @@@@@@@@@@]QMCTEQ AT )@@G@@ @@@@@@@@@@&8MFD$ @@@@@@@@@@@2MFD100 @@[@@@@@@@@^MFD200AU )@@G@@ @@[@@@@@@@@HMFD300 @@[@@@@@@@@RMFD500 @@[@@@@@@@@UMFD600AV )@@G@@ @@[@@@@@@@@XMFD700 @@[@@@@@@@@+MFD900 @@[@@@@@@@@2MIBUF0AW )@@G@@ @@@@@@@@@@[WMIBUF1 @@@@@@@@@@[8MI2 @@@@@@@@@@]QMRFLGSAX )@@G@@ @@@@@@@@@@$!MSALLPKT @@@@@@@@@@>,MSBUF @@@@@@@@@@AYOPTIONAY )@@G@@S @@@@@@@@@@$2OPTWRD @@@@@@@@@@['PCT @@@@@@@@@@@XPOLISHAZ )@@G@@ @@@@@@@@@@ )POLTRAN @@[@@@@@@@[ POL410 @@[@@@@@@@[!POUT BA )@@G@@ @@@@@@@@@@@]POUT2 @@@@@@@@@@@#PROJPK @@@@@@@@@@@VRECCHABB )@@G@@R @C@@@@@@@@C^RECLEN @C@@@@@@@@[QRECSTART @@@@@@@@@@[@REVD BC )@@G@@ @@@@@@@@@@(^REVG @@@@@@@@@@(@REVO @@@@@@@@@@*_REVR BD )@@G@@ @@@@@@@@@@(]REVT @@@@@@@@@@*"REVV @@@@@@@@@@([RPR BE )@@G@@ @@@@@@@@@@$$RPRL @C@@@@@@@@@ SIZE @@@@@@@@@@$?SNOITPBF )@@G@@O @@@@@@@@@@[8SORTBL @@@@@@@@@@*GSPECER @@[@@@@@@@@4SSHIFTBG )@@G@@ @@@@@@@@@@]3SSIZE @C@@@@@@@@@ASSLEN @C@@@@@@@@],SSLINKBH )@@G@@ @@@@@@@@@@]7SSLOAD @@@@@@@@@@]2SSMASK @@@@@@@@@@]6SSPVALBI )@@G@@ @@@@@@@@@@]5SSTAB @@@@@@@@@@]2SSTEST @@@@@@@@@@]4SUB30 BJ )@@G@@ @@@@@@@@@@&&SUB35 @@@@@@@@@@&*SZBAK @@@@@@@@@@(ASZLOD BK )@@G@@ @@@@@@@@@@( SZOPT @@@@@@@@@@>6TABLE2 @@@@@@@@@@*PTAPEQPBL )@@G@@ @@@@@@@@@@&(TRANS @@@@@@@@@@ .UNCHEK @@@@@@@@@@(#USELUTBM )@@C@@ @@@@@@@@@@>3C-HF9LELTCLCF9RETGD9IC8)AK)^@) BN @ELT,AI TPF$.MFD,,,154372141337,440000020002 )@@G@@======@@^@@ @@@@@@@@@@@@@@ AP>@@@@C9@@C@@,)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AA )@@G@@@@@@@@H<'GFZ@@@@@@@[@^@C@@@@DS@@@A@@@@@@@@@@@@@@@@@@@@@@@@@@@]W@@A@@0@[\AB )@@G@@@E&@@@@[2@@^@@@^TO@@@@@@@^@@C9@^@6@[@ @@C9K^@'@0^NTH@@@@@@@@@@@@@@@@@@@@AC )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AD )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@]A]K1@@@___@%PBJN[>\B93AE )@@G@@)@FB9*@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___AF )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___AG )@@G@@@@@AA*@@@@C^$$--DGET--$$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AH )@@G@@@@@@@@@@@@@@@@@@@@Z__]K3@FREE XA @FREE XB @FREE R$CORE@ASG,T XAAI )@@G@@.,F///******@ASG,T XB.,FXX/***/POS/*** @ASG,T R$CORE.,F2///** @@@@@@AJ )@@G@@RECORD SIZE NEGATIVE OR ZERO NUMBER OF RECORDS NEGATIVE OR ZERO XXXXXXAK )@@G@@ POSITIONS IS TOO LARGE FOR SORTF SORT FILE ASSIGN REJECTED: XXXXXXAL )@@G@@XXXXXX ONLY XXXXXX TRACKS OF STORAGE REMAIN, SORT NEEDS XXXXXX ONLY AM )@@G@@XXXXXX POSITIONS REMAIN, SORT NEEDS XXXXXXSORTF ERROR - MSALL$ BUFFER ISAN )@@G@@ TOO SMALL. SORTF MSCON$ ERROR CODE XX @] ]LP@]A]LU@]B]L)@]B]L$@]E]L,AO )@@G@@@]C]L8@]B]M@@] ]MB@@@@@@@@@@@@@@@@@@@@@@@]@@@@@ @@@@@D@@@@@L@@@@@U@@@@@>AP )@@G@@@@@@@5@@@@[C@@@@[Y@@@@[9@@@@]T@@@@]"@@@@#*@@@@^S@@@@ J@@@@AF@@@@BG@@@@CMAQ )@@G@@@@@@@@@@]]L[@@]]L#@@]]L @@[@@#@@[@IZ/POS/ .,F33/@@ ]LF@@^]LB@@^]LK@]@@@@AR )@@G@@000000 ^$0@\\C@@]L@'=@@@U(4@]K9/K@BJ-CCK]K/CC@]K/;CK@@]G@@@@HT8@@[@AS )@@G@@C@K@@G;CK@@[[@K]K1/K@BJ+C8@GHK*W@@0F[@@]K1/,0BJ'@@@]K1@@@]K2@@@@@@C80@0GAT )@@G@@/,0C[B[3S@[O[\*@[OC8@@D@/,0C[9/K@AUP/,0C#C/,0C#4@@@BJ7R'G@@@C3S@[OC\*@[OAU )@@G@@CB8@[O/K@AY4(0@@\!/K@AQ]/K@A93[])]LOC8KWJG @@@@K:^V@@]C[F@@]/H@BKAC@@]M%AV )@@G@@'=@@@JC@@]M:'=@@@JC@@]M?'=@@@JC8F@@#[^@]M(C@VK@[/GKBMZG8K@@F @@@@GW8@@@AAW )@@G@@T@FK@@/G@BMXS8@@@FW8@@@E;G@@@=[@K@@IW8@W@@/@@BM^G8@@@[[@@]MP!8@@CN/K@BM-AX )@@G@@N8K@@MC@)]M!5^I+MO/K@BM-C8Y@@@T8K@W@G8K@:$ @@@@GW8@@J*[@@]MQS8@#%SH8KN?@AY )@@G@@W8@^4@[@@@@JC@@]MP;G@@@YW8I@@@K@@@@J @@@@GW@@@@JT@@@@J[@@]MOC8@@!,(C@@!0AZ )@@G@@'=@@[P/G@BM5 @@@@QC^)@!1HC)@!1C8K@IYC@0]M,C^J)@@G8H@@@G]?@@#8#)BK8C@K@@QBA )@@G@@;CK@@A?@K]MP/K@BM!C@K]MP;*K@@AG@K]MOG8K@N)?])@@H/K@BM>C@@]MP/@@BLR/,0BL;BB )@@G@@ @@@@GC@K@@I;?J@@@C@K]M\;G@@@AH80@@A;GZ@@@;@J@@@G@K@@G9*K]LIC@@]M0[@@]LHBC )@@G@@C@K]M1/\0BL=C@@]MO/,0BL;[@)]LEC@K]M2/\0BL=C@@]MQ/,0BL;;@)@@S[S)]LNC@K]M3BD )@@G@@/\0BL=C])]LO/K@MM(E@@@@H/[@BL%G@@]M4'=@@@I/HJ@@@E@@@@H'=@@@J/GZ@@@/CJ@@@BE )@@G@@/\0BL\/K@BL9C8)@@ ;G@@@#;CK@@#8#)BL0G@K]M5/@@BL7[@K]L!/K@BL\[@K]L?/KJ@@@BF )@@G@@C@@]MJ/K@BN@ @@@@JC@)]M6;G@@@=W8@@@EG8K@@0;GK@@AG80@@A/^@BL./KF@@@/@)BMVBG )@@G@@ @@@@HG8)@V_W8K@W@[@K]MO!8K@@A/K@BMK;*K@@[C8@@EQ;@H@@@;C@@@+/K@BMTS8K@W@BH )@@G@@W8K@J*C8@@@[C@)@@HK8G@@[T8W@@[G8@@@[?@K@@I/K@BMO[@@]MQ/K@BLR(@FK@@/K@BMZBI )@@G@@C@@]MG/K@BN@C@@]MH/K@BN@/,0BL;[@)]L)C@@]MI/K@BN@C@@@@H/,0BL;[@)]L7C@@@@QBJ )@@G@@/,0BL;[@)]L\C@@]MK/K@BN@C@@@@H/,0BL;[@)]L9C@@]MP/,0BL;[@)]L_C@@]ML/K@BN@BK )@@G@@;C@@@M+8@@@_C@@]MM:8K@@R/K@BN@;?@@@-;*@@@#;?@@@#G8@@00[W@]MFC@@]MN'=@@@IBL )@@G@@C])]LO'=@@@)R]D@#2AA8@@, CC@@,(@D@#[/K@BNE:89@ 6/K@BN(N8K@@!R#@@@C/,0DCFBM )@@G@@C8@BS]C8KBT#C[KBU%R'0@@C*@D@]U/K@BNT*@D@]VC@D@]VC[D@[5[DC@@IC8)@@#/K@BNUBN )@@G@@C@)BU:[@*@@AA28@@:[@C@@-[@S@@Y[[S@@EO'0@@C[[S@@GC@@BU?[[S@@HA28@@>C9@@@@BO )@@G@@[@C@@+[@C@@<[@C@@*[@C@@(C9D@]"CCT@#/:89@ 6/K@BN\CCT@#.C9D@#][CZ@@K[DJ@@EBP )@@G@@C8@BO C8KBOXC8)BQ0C9@BQL[^J@@][^Z@@#[^\@@^[ J@@ @J@@BCDJ@@D[ J@@KCDJ@@JBQ )@@G@@[ J@@J @J@@F @J@@IC@J@@A&'0@@@/,0C.NR]D@#2/KCK@,R]D@#2AA8@@,CCJ@@E9?G@@@BR )@@G@@9*C@@*C4J@@#[0C@@KCCJ@@C[@C@@^K8@@@#[^S@@EK^J@@D[^S@@ G^Z@@D[CS@@ C@S@@ABS )@@G@@[CW@@[ @C@@]CCJ@@K[@C@@R9?J@@I[@C@@F[^S@@G/KCK@,R]D@#2AA8@@,C[J@@FG9@@@[BT )@@G@@[[J@@FC[C@@I*@D@]UC[@@@G;D@@@MN@K@@KKDC@@AC@S@@^GDX@@[! Z@@D: Z@@D/K@BO1BU )@@G@@/,0BO;C[@@[[KDC@@AG[S@@A[DX@@[C@*@@E*@D@]U[ I)@@&;@@@[M#?)@@[@*@@E*@D@]UBV )@@G@@[DI@@@/KCK@,[@8@@SC[C@@]G9@@@[[[C@@]9?S@@^[[H@@]CDX@@[;^K@@M;@K@@M9*S@@^BW )@@G@@%9@@@[/K@BPGC@*@@GC[C@@F[[I)@@[@*@@G/K@BP,[ Y@@[(@C@@R/K@BPN&#*@@R/\0BP7BX )@@G@@C^*@@ [[I@@@0@C@@:'=@@@A*4C@@:/K@BUJ(^I@@[/K@BP1&F,@@[C@8@@F9**@@?C8*@@*BY )@@G@@C08@@K%80@@]/K@BP&CC8@@?G80@[\;G0@@=W80@[0T80@[0[C8@@?C08@@K[?8@@K/\0BQ]BZ )@@G@@[[C@@F[@C@@BC8C@@*'=@@@[C@C@@BK8K@@#[^*@@E/KF@@@C[Y@@]%9K@@[/K@BPTC@8@@SCA )@@G@@&B\@@D/K@BPU @@@@KCDY@@[;^)@@MH9K@@]W9I@@@H9@@@[;=)@@M;H@@@=G[I)@]8^KBP_CB )@@G@@/KJ@@@CDI@@^C!S@@K/[KBQJ%9K@@]/K@BQGG9@@[\;H@@@=W9@@[0;(@@@]/K@BQJG9@@@VCC )@@G@@;H@@@=W9@@@WG[I@@ /KJ@@@R]D@#2AA8@@,C J@@KH9@@@[/H@BUN[ J@@K/,0BO; CH@@[CD )@@G@@/,0BO/C[C@@A[DH@@[ @C@@]0@C@@:'=@@@A*4C@@:/K@BUJ/KCK@,C@C@@^CCW@@[:^S@@ACE )@@G@@/K@BQ8/,0BQLC@8@@TC@D@]W*^J@@K!4J@@[/K@BQ89!C@@F[[J@@I[ Z@@J/K@C"UR]D@#2CF )@@G@@AA8@@,[@8@@T(@J@@F/K@BUCC5J@@]:9@@@#/K@BQ+C^_@@@/,0C.3R]D@#2C@8@@TC J@@@CG )@@G@@[ C@@PC J@@E[ C@@H[[C@@#CDJ@@K[[C@@QCCJ@@E9?G@@@9*C@@+C4J@@#[4C@@KC J@@DCH )@@G@@[ C@@UA@S@@CA@*@@DA@8@@BRC_@@JRCZ@@DP^Z@@KR J@@CA[C@@VC@@@@[/\)DX^R]D@#2CI )@@G@@C@@@@[K8[@@^R@)@@HO[@@@HA[C@@W/\)DX^R]D@#2O@)@@^ @C@@XC@)@@]&#*@@UC@3@@@CJ )@@G@@C@K@@#/,0BTF/,0BTKR[C@@W/\)DXKR]D@#2C^C@@&G8@@@#&#D@[5(@D@]U/K@BR,&BG@@@CK )@@G@@G8@@@[C@K@@#R[C@@V/\)DXKR]D@#2O80@@[O@*@@UP8K@@[*@@@@[/K@BRYC9KBT#[[S@@YCL )@@G@@ @C@@N @C@@OA@*@@ZR@S@@CR@*@@DR@8@@B/K@BSTD/@@@@/K@BSSC^8@@PC@C@@#/,_K@#CM )@@G@@R]D@#2C[C@@NG9@@@[[[C@@NC@C@@@C@*@@HNCS@@@*@D@]U^CS@@#&;@@@[M#?)@@C C@@@CN )@@G@@% C@@[/K@BS$CC8@@[(^J@@[/K@BS@[@8@@Z/,0BTK[@C@@JR[C@@W/\)DXOR]D@#2/@@BT7CO )@@G@@[@C@@[;C@@@M*^G@@[/,0BTACCC@@J;*@@@M;K@@@M/@@BS?&;@@@@G8@@@#&#D@[5(@D@]UCP )@@G@@/K@BS?&BG@@@G8@@@[R[C@@V/\)DXOR#*@@Y[@C@@@&;@@@@C^S@@#/,"@@@/K@BUR/K@BS]CQ )@@G@@R#*@@-/,"@@@/K@BS]C@8@@TC@\@@HG@(@[5[@\@@HC@(@][[C@@Y/K@BSDC[G@@][[C@@XC@*@@Z&B?@@[C@/@@@9**@@&C8C@@+CS )@@G@@ @C@@)'=@@@[/KF@@@0@C@@>'=@@@A*4C@@>/K@BUVC^C@@&(@C@@Q/K@BTWC@)@@G&#*@@QCT )@@G@@/\0BP7%[G@@@/K@BT\C[C@@XG9@@@[%[G@@]/K@BU&CDG@@[C8*@@+C48@@K[?8@@K/\0BQ#CU )@@G@@[[G@@@GCG@@[HCC@@A*@D@]U/K@BT?H^D@[5/K@BT!HCG@@@&BC@@&/KF@@@C@8@@)G80@@[CV )@@G@@!80@@E/K@BUZ[@8@@)C8C@@+'=@@@[/K@BTKC^8@@PC@C@@#/,_K@#R]D@#2C@8@@TC[C@@NCW )@@G@@G9@@@[K[C@@O%[Z@@F/K@BUNG[J@@B[[J@@BR'0BUAAA8@@,/K@BN'C^8@@P/K@C/HC^_@@@CX )@@G@@/,0C.3R]D@#2C@8@@TC J@@@[[C@@P/K@BU#C@8@@S%89@ 6'<(@@\'+T@@\C@8@@T%89@ 6CY )@@G@@'/,;@@@/K@B$T/KCK@%/KCK@:DF )@@G@@R]D@#4AA8@@[RA8@@[C@0@@G;C0@@M+@@B;7)@0@@HH@@@@HC^S@#-[[H@@@K8K@@[K^!@@@DG )@@G@@G80@@[?^8@#+/K@BW<[[C@#:K^*@#]G80@@[?^8@#+/K@BWAC@8@#%C^_@@@;@0@@M[@.@@@DH )@@G@@AA8@@]/,0BX!RA8@@]C[C@#:/K@BV1L^*@#+G80@@]K^8@#:)[@B;7[[S@#:H H@@@] H@@@DI )@@G@@(@@@@J/K@BWPE[@@@JCC8@#+G80@@[[C8@#+/\0BXXH@)B;8C^.@@@;@0@@M[@"@@@G8)@@[DJ )@@G@@AA8@@]/,0BX!RA8@@]C[C@#:[[H@@@K8K@@[K^*@#:G80@@[!^8@#+/K@BWA[^S@#%/K@BXRDK )@@G@@C9@BW*[ C@@%/K@BW(/,0BX=L8@@@[C H@@@CCX@@@C^*@#*/\0BXX/KCK@?H@@@@KL8@@@[DL )@@G@@C[H@@@/,0BV1(^G@@@/K@BW7G8@@@[/K@BVUC@S@#$C^.@@S/,0B)"L8@@@[*@@@@G1@H@@@DM )@@G@@/K@BVUC H@@@[[C@#:C@S@#%K H@@@[ X@@@C^*@#-/,0BWZ/K@BW3[CS@#*(^G@@@/K@BXFDN )@@G@@G8@@@[/K@BVU[^*@#^C^S@#$C^.@@S/,0B)"L8@@@[*@@@@G1@H@@@/K@BVUC^*@#^C H@@@DO )@@G@@/\0BXX/K@BXBCC8@#+G80@@[[C8@#+/\0BXX[^*@#-/KF@@@G@@B;8G@)B;8+D@B;7N@K@@LDP )@@G@@M#?)@@H@@B;8/KJ@@@AA8@@O[^C@##C^8@#LC^_@@@C@C@#*/,_K@#R]D@#4C^C@##/KCK@ODQ )@@G@@AA8@@N[^C@#BAA8@#CC^S@ RH^*@ RK8)@@[[C.@@@C^C@#/K@B$NC8T@BF(^H@@0/K@B$N/,0BZ3C8T@BF/K@B)N/,0BX=C^8@#LEB )@@G@@C^_@@@/K@C/HAA8@@SC@S@#=[^S@#F ^C@[LC^8@#D[^8@#IC80BV)[^8@@(C^C@#ER9C@^+EC )@@G@@/\)DX^C^C@#ER9C@#,/\)DX^/KCK@S/,0BZ3C8T@BF:@S@#1/KCK@CR]D@#4AA8@@D/,0B$ 0@C@#(/KCK@DFC )@@G@@C8T@BGK8K@@[:@*@ QC8(@BFG@)B;8[@*@#?/,0B$E/KCK@DR]D@#4AA8@@EC8@B>N[^J@@]FD )@@G@@C8@B<<[^J@@^C8@B=I[^J@@ /,0B*&[^8@#@/,0B>1C^8@#@CC\@@D:8)@@] @C@#>*@C@@GFE )@@G@@/K@B>J*@C@#>H8)@@[[^*@#E[^\@@K/KCK@ER]D@#4AA8@@F/,0B$ 0@C@#(/KCK@FC8T@BFFF )@@G@@(^C@#[*@C@#>G8K@@[/,0B$E/KCK@FAA8@@+ @C@#>C8K@@E&'0@@@/,0DCT/K@B>>[@S@#>FG )@@G@@CC\@@DH8)@@[[^*@#EC8T@BEC9K$C [DX@@[ @H@@1G8K@@[G9K@[@8#)B>%[@S@ Q/KCK@+FH )@@G@@AA8@@U/,0B&][^8@#LC Z@@D[DS@[L[ S@#MC Z@@C[ S@#DC9KB-Z[ S@@\/,0B>YC@J@@AFI )@@G@@&'0@@@/,0C.N/,0B+1 @C@#(/KCK@UAA8@@VC8KBY#[^S@[#(@D@]U/K@B&PC[T@]U[[S@#&FJ )@@G@@[ S@#]C9KBV$[ S@@:C[Z@@E[[S@#*R'0BV(C8@BZKC8K@@#C8)B-UC9@B&6C9KB&1/K@B&-FK )@@G@@C[T@[5[[S@#&C9KBV$*@D@]VC9KBU'[ S@@:R'0BU!C8@BZPC8K@@]C8)B-RC9@B&!C9KB&(FL )@@G@@[^C@@,[^S@#G[^*@@0[ C@@3[ S@@1AA_@@#R]8@@V/KF@@@C9KBVEC[@B;9[[C@[^/K@B&4FM )@@G@@C[@B;'[[C@[^C9@BVG/K@B&9C9@BW\[ C@@?C9KBW([ S@@%/KF@@@C9@BXA[ C@@?C9@BW>FN )@@G@@AA8@@2 @C@#<[ C@@%C9@BZ\[ C@@*C^8@#LC J@@E[[C@#*C@_@@@/,0C.3R]D@#4/KCK@2FO )@@G@@CCZ@@CK^Z@@D/\@BZ[ 4C@[E/KF@@@[@S@#C80@#@C9@@@]FV )@@G@@&;8@[<;=0@@M9*/@@]C80@D@C9@@@]&;/@@@;=0@@M9*/@@^C8G@@]&;@@@^'=@@[IC@9@[>FW )@@G@@/KCK@WC@C@#[/@@B*:C@C@[A:@@B;;/KF@@@C[K@@FC@@B;/[@C@@@C@@B;.[@C@@$C8C@@*FX )@@G@@G@@B;8C@K@@G @H)@@N8K@@T/,0DCNC@@B;"[@C@[]C8S@[#C@@B;_G@KB;8N8K@@#/,0DCNFY )@@G@@C@@B;;[@C@[AC8S@[BC@@B/@G@KB;8N8K@[7/,0DCNC@@B/[[@C@]"C8C@]_G@@B;8C@K@@GFZ )@@G@@ @H)@@N8K@]&/,0DCNC8K@@C[4T@CO[[K@@F/KF@@@R]D@#4AA8@@GC8@B09[^J@@]C8@B1YGA )@@G@@[^J@@^C8@B1Y[^J@@ /,0B*&[^8@#[C9@@@@C8K@@?&'0@@@/,0DCT/K@B(+C W@@@[ S@@5GB )@@G@@/K@B(7 ^C@@5C8T@CPG@KB;8C8)@[+ @H)@@8#)B(&C8K@@E&'0@@@/,0DCT/K@B(7C[W@@@GC )@@G@@;(K@@A[DT@CPC9@$C C8K@@H&'0@@@/,0DCT/K@B(7Q#W@@@9?X@@@/,0B,#[DD@BF/,0B&]GD )@@G@@ ^D@BFC8K@@*&'0@@@/,0DCT/K@B%JC[G@@@+[@B/]H9K@@[C8K@@%&'0@@@/,0DCT/K@B%IGE )@@G@@C G@@@H9@@@[C8K@@(&'0@@@/,0DCT/K@B?_C80B6^C@)B/]/K@B!R'-(@@2C8K@@:&'0@@@GF )@@G@@/,0DCT/K@B?QC^?@@@C[Y@@[H9K@@[[[T@DD[^*@@4C8K@@U&'0@@@/,0DCT/K@B%Y/,0B,FGG )@@G@@/K@B%Z/,0B8%C@KB/#C^8@@4G@Z@@@[@T@D)C^S@ R[^S@#IC8T@BF[@S@#$/,0B\WCCY@@ GH )@@G@@[^S@#MC@S@#$/,0B0+C@S@["[@S@]OC@@B;B[@C@ VC8C@@@'K@B;C[@C@ WC8C@@@'K@B;DGI )@@G@@[@C@ XC8C@ V'=@@@CC8K@@X&'0@@@/,0DCT/K@B:2C^S@ R(@H@@A/K@B82C?!@@]:8)@@AGJ )@@G@@/K@B82C H@@[H9@@@[*@@@@K/K@B:&C@!@@A[@!@@]C H@@ CC!@@#;K)@@AH8)@@[[0!@@#GK )@@G@@;K)@@A[4!@@#C[X@@#;(K@@S;LK@@SH9K@@[CC.@@^;K0@@AH0.@@[1@@@@J/K@B:)C[X@@#GL )@@G@@;(K@@G;LK@@SG?.@@^C?!@@^[*!@@#;K)@@A[?!@@#[-X@@#;LK@@A[>X@@#[0.@@^;K0@@AGM )@@G@@[4.@@^H9@@@[[ H@@[ @H@@AC@!@@B[@!@@C @H@@BC^!@@^[^*@#W/\0B8+C8KBX'[^S@[#GN )@@G@@/K@B:6C^S@ RC^!@@[H8)@@[[^!@@[C^C@ RC9@@[>[DG@@@C8(@CN/\0BXX[^C@#V/,0B6YGO )@@G@@CCT@CPH8K@@[[^S@@"C0T@CO%^S@#E/K@B83(@D@CV/K@B\BC?T@CVG8T@BF[^S@#XC^T@CVGP )@@G@@[^S@#YCCT@CV;KK@@A[^S@#ZC^S@@%[^S@#)C8KB8M[^S@@%C8KBVA*@D@]UC8KB8Z[^S@[[GQ )@@G@@/K@B\B(^C@@5/K@B?%C^C@@5C8(@CNC9@@[>/\0BXXC8T@CN/\0B8+C8K@@V&'0@@@/,0DCTGR )@@G@@/K@B?=/,0B,F/K@B?>/,0B8%C@T@CP%@KB/^/K@B84/,8K@3/K@B?@C8K@@G&'0@@@/,0DCTGS )@@G@@/K@B?./,0B,FC8K@@V&'0@@@/,0DCT/K@B?7C@KB/^[@T@CP/,8K@3/K@B\BC@KB/ G@T@CPGT )@@G@@[@T@CP/,0B7)/,0B6Y/K@B\BC9K@@@C9@@@@C80B2+C8K@@T&'0@@@/,0DCT/K@B! /\)B!(GU )@@G@@[^8@@8C80B2BC8K@@D&'0@@@/,0DCT/K@B!JRA8@#[C@V@@AT^W@@@[@V@@AC8K@@C&'0@@@GV )@@G@@/,0DCT/K@B%GC@G@@@+@@B/]T@S@#&+@KB/]RA8@#[[@:@@A[^8@@7[ C@#O[[T@CR/\)B!?GW )@@G@@C^8@#[RA8@#[C@F@@A&'0@@@/,0C.NC8K@@A[CT@CNC8K@@A[?T@CPC@KB;'[@S@[ /KCK@GGX )@@G@@C80B6X[^8@@8/KI@@@C V@@DC8K@@F&'0@@@/,0DCT/K@B!3! W@@@C W@@@C@T@[5G8K@@#GY )@@G@@*@D@]UG8K@@]?8K@[&C8K@[&?[K@@H/K@B8\?8K[[*/K@B!_C[K@@H/K@B,[!9K[[*C9K[[*GZ )@@G@@[DT@CS/KI@@@9*S@]/;[@@@A[>C@];;-@@@AC8C@@@'K@B/A'=@@@J/KF@@@AA8@@XC9@$D HA )@@G@@C89@BGC8K@@G&'0@@@/,0DCT/K@B,IC@)B/B[^C@@6Q#W@@@C@X@@@[@Z@]P[DJ@@@/,0B,#HB )@@G@@C^C@@6C8K@@G&'0@@@/,0DCR/K@B,-G9@@[@G80@@[/K@B,N[^8@ QH89@BF[^8@#E[09@COHC )@@G@@/,0B,!/\)B!(/\0B,7/,0B1G/,8K@1C9KB2D[ S@@*/KCK@XAA8@@YC^S@#[[^S@#LC8K@[>HD )@@G@@[CT@CNC8KB-%[^S@@\C@KB/C[@S@[ /KCK@YRA8@#[CCV@@CC8@@@@C^*@#EG8)@@#W@@@@IHE )@@G@@[^F@@D[CC@[LH8)@@]T@@@@IG^F@@C[CF@@CC^F@@C[^C@#D/\)B!?/KJ@@@/,0BZ3 4C@[KHF )@@G@@C8T@BGC^*@#EH8)@@[0@@@@I/K@B)S ^H@@@(@H@]P/K@B\U[@S@#$[^*@#N/,0B\WC^S@#$HG )@@G@@C^*@#A[^*@#$/,0B)+[^S@#AC^*@#NG8K@@[/K@B\FAA8@@Z/,0B+/CC.@@@/,0B* [@8@["HH )@@G@@C^S@#$C@H@["G8@@@[[@H@["C@!@]P[@*@]#/,0DW9[ S@][0@C@[K'=@@@A9?S@[K9*S@ THI )@@G@@CCS@[H[^S@#QC@@B;E[@C@ VC8C@@@'K@B;F[@C@ WC8C@@@'K@B;G[@C@ XC8C@ V'=@@@CHJ )@@G@@C^S@#$/,0B-;0@C@[K'=@@@AC^*@[LC@Y@@][@S@]EC^I@@[/,0DW9[ S@]CC@S@]#%@S@]EHK )@@G@@/K@B0NC^S@][%^S@]C/K@B0N/,0B+#CC9@CSC^*@[L?C"@@ /K@B80C^S@#Q[CS@[H9?C@ THL )@@G@@9*C@[K/KCK@ZC@S@["[@S@]^C@S@#$/,0B+/C@@B;H[@C@ VC8C@@@'K@B;I[@C@ WC8C@@@HM )@@G@@'K@B;J[@C@ XC8C@ V'=@@@C/K@B\\AA8@@)C[H@]P[[C@]KC@H@["/,0DW9[ S@]IC@S@#$HN )@@G@@/,0B+/CC8@[P/,0B* [@8@]FC@@B;K[@C@ VC8C@@@'K@B;L[@C@ WC8C@@@'K@B;M[@C@ XHO )@@G@@C8C@ V'=@@@CC@S@#$/KCK@)R]D@#4AA8@@H/,0B1GC@(@]K:@(@CR/KCK@HC@9@CRG80@@[HP )@@G@@[@9@CQ[@(@CRC^C@#OG8@@@[[^C@#OG8@@J*/,0DW9[ T@CP/,0B7)/,0B6Y/KCK@HAA8@@Y/,0B,!C9KB51[ S@@8/,8K@1C8KB6@[^S@@*HX )@@G@@/KCK@=/,0B2S @D@CTRA8@#[9?F@@C[^C@#D[CS@[LC@@B;T[@C@ VC8C@@@'K@B;U[@C@ WHY )@@G@@C8C@@@'K@B;V[@C@ XC8C@ V'=@@@CCCT@CP[CS@]3 ^C@#R ^C@@9CCT@BF[CS@]2C^S@#OHZ )@@G@@[@T@CQ[^S@@.C C@#E[1D@COL9@@@[T C@#E!@K@@K/K@B2"H@K@@KD8@@@@W@@@@LG^S@#EIA )@@G@@[^S@#S[^S@@/ ^C@@;C^C@#RG8@@@[[^C@#R/,0DW9[>S@]);[K@@A[(S@]);[K@@A[!S@])IB )@@G@@C@@B;W[@C@ VC8C@@@'K@B;X[@C@ WC8C@@@'K@B;Y[@C@ XC8C@ V'=@@@CC@@B;Z[@C@ VIC )@@G@@C8C@@@'K@B;)[@C@ WC8C@@@'K@B;-[@C@ XC8C@ V'=@@@C*^C@@9/K@B3,CCS@]3[CS@]0ID )@@G@@G8K@@[[CS@]3C^S@@.[^S@@' ^C@@.C^C@@9G8@@@[[^C@@9:^C@@' ^C@@9G8@@J*/,0DW9IE )@@G@@[ S@]0C^C@@;C8(@BGG@)@@GCCY@@@[CS@]\G8@@@[[^C@@;:^C@@//K@B4EC@@B;+[@C@ VIF )@@G@@C8C@@@'K@B;<[@C@ WC8C@@@'K@B;=[@C@ XC8C@ V'=@@@C/K@B3>(^C@@9*^C@@./K@B4WIG )@@G@@C@KB/^[@S@]3C8K [CS@]2C@@B;>[@C@ VC8C@@@'K@B;&[@C@ WC8C@@@'K@B;$[@C@ XIH )@@G@@C8C@ V'=@@@C/K@B4,C^C@@.G8@@@[[^C@@.G8@@J*/,0DW9[ S@]3C@@B;*[@C@ VC8C@@@II )@@G@@'K@B;([@C@ WC8C@@@'K@B;%[@C@ XC8C@ V'=@@@CC^S@#E/K@B3AC S@#S @D@CR ^D@COIJ )@@G@@C8(@BG[ S@@_ @I@["CCD@CR;K@@@A*@@@@G/K@B5 CCT@CP[^S@@"G8K@@[[CT@CPC@T@CQIK )@@G@@;*K@@G;KK@@S[?T@CRC^T@CQ;*K@@G[^T@CQ;KK@@M[?T@CQCCD@CRG8@@[@[CD@CR;K@@@AIL )@@G@@C@T@CQ;*K@@G;KK@@S%@@@@H/K@B5K 0D@CR 4D@CRG8@@J*/,0DW9[ Y@]PC^8@@"[C"@]PIM )@@G@@G8)@@[C S@@_H9K@@[*@@@@L/K@B42CCD@CQG8@@[@[CD@CQ;K@@@A/,0DW9;-K@@A[[S@])IN )@@G@@CCD@CR;K@@@A*@@@@G/K@B5(C^D@CQ;*@@@S(@@@@G/K@B2FC^D@CQG8@@@[[^D@CQ;*@@@SIO )@@G@@;C@@@SG8@@J*/,0DW9[ T@CPC@@B;:[@C@ VC8C@@@'K@B;?[@C@ WC8C@@@'K@B;![@C@ XIP )@@G@@C8C@ V'=@@@CC^D@CQ;*@@@S(@@@@G/K@B?3/K@B?'/,0BZD/,0B6_C S@#E/K@B40C9K@@AIQ )@@G@@/K@B6MC8T@BFG8K@@[[@S@#$*^H@@@/,0B0+?@S@ Q/K@B6B/,0B6_C^T@CR%^S@#W/K@B81IR )@@G@@C9K@@B[>S@]SC@@B;,[@C@ VC8C@@@'K@B;\[@C@ WC8C@@@'K@B;0[@C@ XC8C@ V'=@@@CIS )@@G@@/K@C_9AA8@@>C@S@#AA8@@&C T@BFIV )@@G@@[-T@CR;LK@@A[>T@CRC T@CO[ T@CSC@T@CP[@T@CT/,0B7)')C@[ /,0BY-C@S@#[^S@ R/,0B7&C8D@CNCCT@CNJG )@@G@@R]8@ Y/KF@@@@@@BY#/S@@@@/S@@@@ @@@@@@@C@@@@@@@@@@@@@@@@ JH )@@G@@ @@@@@@@K@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@JI )@@G@@ / SORT READ ERROR A . (NO OR GO)@@@@@@@@@@@@ CYC NOJJ )@@G@@. . RECORD NOS. - LABEL: REEL OF JK )@@G@@ MOUNT REEL OF LABEL ERROR: REEL JL )@@G@@ OF DISMOUNT REEL OF + MOUNT BLANK JM )@@G@@ MOUNT BLANKEND REDO END PART MERGE(S) REQUIRED:START MRG NO. :JN )@@G@@:INPUT FILES :OUTPUT FILE UNIT LABEL UNIT LABELJO )@@G@@ OUTPUT SORT ERROR CJP )@@G@@ODE A @USE $ , @[@@@@@@Y@]5@@@@@@@[@@@@@@%@[U@@]@[-@[@@@@JQ )@@G@@@@M@]O@@@@@@@[@@@@@@=@["@@[@[-@[@@@@@@%@]^@@@@@@@[@@@@@@=@]F@@@@@@@[@@@@JR )@@G@@@@0@[0@@@@@@@[@@@@@@G@]T@@@@@@@[@@@@@@M@]V@@@@@@@[@@@@@@%@]Z@@@@@@@[@@@@JS )@@G@@@@%@]&@@@@@@@[@@@@@@S@]!@@@@@@@[@@@@@@0@]!@@@@@@@[@@@@@@%@]!@@@@@@@[@@@@JT )@@G@@@@M@]Y@@@@@@@[@@@@@@G@]R@@@@@@@[@@@@@@=@[8@@@@@@@[@@@@@@2@]F@@[@[-___@@@JU )@@G@@@@[@@@[@*@#*/S@@@@======DDDDDDMMMMMMVVVVVV@@[B9B@@[B9E!!!!!!@B____ @@@@JV )@@G@@FINAL @@B001@@^@]' /,0B7&[@D@[O[@T@@#^@T@[PA]9@[NC8@C@B,0@@@/K@B.[C^D@[T>8@@@CB0G@@@JZ )@@G@@/?KDDGR@T@@ C@D@[U;*@@@S;C@@@S ^D@@$R]9@[#*CD@@@/K@B/_R]T@@*/KF@@@R]T@@*KA )@@G@@B,;@@@[@D@[U9?@B_A9*D@[VC@@B_C[@D@[XC@D@[UC^WB_G;*K@@AG8K@@ [CT@[Y(?GB_GKB )@@G@@/K@B"EC8D@[>9*(@[\9(D@[1C@T@[A9!H@@@9(G@@@C4.@@#[)9@[3'=@@[C80@#@KE )@@G@@C9@@@]&;/@@@;=0@@M9*/@@^C80@D@C9@@@]&;/@@];=0@@M9*/@@A @G@@]C8G@@^&;@@@^KF )@@G@@'=@@[IC@9@[$[@9@[ZC)T@[3;?@@@-;CK@@#;?@@@G)@@C@*[@T@[)/K@B"CC@@C@([@D@[ZKG )@@G@@9?(@[\9!D@[1C@D@[UC4WB_G[CT@#YC8T@[V[^T@#Y @D@#XC8T@[4**GB_G&;K@@][@T@#ZKH )@@G@@C8K GN[CT@[-C8D@#X'=@@@C(^D@#X/K@B"ZC4D@[4%8@@@G:8@@@A/K@B"Z/K@B"=C@D@[OKI )@@G@@N@T@[P+@@C@%*@@@@H/K@B_]C@D@[UA](@[>(8@)^N'=@@@)&'))^NB,)@C[R](@[>N8K@@#KJ )@@G@@C8D@[>&;@@@[C@KC@:M#H)@@N8K@@ @@@@GC^T@@4;*K@@M;*@@@#;?@@@#8KKB"4)@@C@?KK )@@G@@[@T@[*C8D@[>&;@@[^'=@@@IN@T@[PC@D@[AC@T@@#*@D@@_C#(@@_'=@@@)R]9@[NC@D@[AKL )@@G@@C@T@@#/KF@@@SORT ERROR CODE = ***ERROR ADDRESS= @@@@@@O@@@B1O@@@B2O@@@B3KM )@@G@@O@@@B6O@@@B7O@@@B8O@@@M0O@@@M1O@@@M2O@@@M3O@@@M4O@@@M5O@@@M6O@@@E0O@@@E1KN )@@G@@O@@@E2O@@@E3O@@@E4O@@@E5O@@@K1O@@@K2O@@@K9O@@@D0O@@@D4O@@@D5O@@@D6O@@@D7KO )@@G@@O@@@F0O@@@F4O@@@F5O@@@F6O@@@F7O@@@X0O@@@X4O@@@X5O@@@X6O@@@X7O@@@M7O@@@D8KP )@@G@@O@@@P0O@@@S1O@@@C1=@[@A0O@@@A1$@[[A2$@[[A3O@@@F8$@[[A5=@[@A6$@[[A7=@[@A8KQ )@@G@@O@@@L1O@@@L2O@@@L3O@@@L4O@@@L5O@@@X8O@@@B5O@@@B9O@@@M8O@@@C2O@@@C3O@@@C4KR )@@G@@O@@@E7O@@@K3O@@@K4O@@@G1O@@@G2O@@@B0O@@@B4O@@@K5O@@@K6O@@@C0O@@@C5O@@@I0KS )@@G@@O@@@I1O@@@I2O@@@I3O@@@I4O@@@C6O@@@C7O@@@C8O@@@K7O@@@I5O@@@I6O@@@I7 KT )@@G@@@@[@@@[@@@@@000/000 000 000 ON DAS@@@)@@@@[B_D000000 CD@@@&'0@@@/K@C@1KU )@@G@@AET@@@[@K@@WC@K@@D;CK@@M?8K@I(/K@C "[@D@[O[@(@@#C8@@D8C8)AO6(@I@@@G8@@@\KV )@@G@@C8)AJR(@I@@@G8@@ Z?@K@@G/K@C "C@D@[OC@K@@WC@(@@#A]K@@WAAT@@@/K@C[GA]K@@WKW )@@G@@R'KA@, ^D@@@ CD@@@&'0@@@ @D@@]A@T@@ R@K@@WA@T@@*[@9@@=/?KDD@C8@SRT[^D@@$KX )@@G@@A]9@#8)@@CB0J@@@*4D@['/K@C]MR](@@&/,0C;8)@@CB0J@@@/,0C/$R]9@#=A]9@@J/K@C M CD@@@&'0@@@/K@C#[LG )@@G@@AET@@@[@K@@WC8T@@@%^T@@@/K@CA@C@K@@WA]K@@W/K@C#HA]K@@WR'KA@, ^D@@@ CD@@@LH )@@G@@&'0@@@A@T@@ R@K@@WA@T@@*/?KDD@C^(@@$%8)SRT/K@C /(@D@#>A]9@#>B4@@@I[^(@[TLI )@@G@@)8)@@C>8)@@CB0J@@@*4D@['/K@C#)R](@@&/,0C/2/K@C#&R'0@@@(?D@[TR'0@@@&'0@@@LJ )@@G@@&AT@['B,;@@@R]9@#>A]9@@J/K@C M CD@@@&'0@@@/K@C#!AET@@@[@K@@WC8T@@@%^T@@@LK )@@G@@/K@CA@C@K@@WA]K@@W/K@C#9A]K@@WR'KA@, ^D@@@ CD@@@&'0@@@A@T@@ R@K@@WA@T@@*LL )@@G@@/?KDD@C^(@@$%8)SRT/K@C /B4@@@I[^(@[T)8)@@C>8)@@CB0J@@@*)D@#:'-9@@1A]9@#&LM )@@G@@*4D@['/K@C^IR](@@&/,0C_P/K@C^8@@@CB0G@@@/?KDDGR@T@@ *CD@@@/K@C^-R]T@@*LO )@@G@@/KF@@[R]T@@*B,;@@[C^D@[T>8@@@CB0G@@@/?KDDGR@T@@ *CD@@@/K@C^?R]T@@*/KFK@@LP )@@G@@R]T@@*B,;@@@ CD@@@&'0@@@/K@C^2AET@@@[@K@@WC8T@@@%^T@@@/K@CA@C@K@@WA]K@@WLQ )@@G@@/K@C^"A]K@@WR'KA@, ^D@@@ CD@@@&'0@@@A@T@@ R@K@@WA@T@@*/?KDD@C^(@@$%8)SRTLR )@@G@@/K@C /A]9@#&B4@@@I[^(@[T)8)@@C>8)@@CB0J@@@*4D@['/K@C J/,0C_\/K@C M&AT@['LS )@@G@@&'0@@@B,0@@@C^D@[T>8@@@CB0G@@@/?KDDGR@T@@ *CD@@@/K@C VR]T@@*/KF@@@R]T@@*LT )@@G@@B,;@@@ CD@@@&'0@@@/K@C -AET@@@[@K@@WC8T@@@%^T@@@/K@CA@C@K@@WA]K@@W/K@C !LU )@@G@@A]K@@WR'KA@, ^D@@@ CD@@@&'0@@@A@T@@ R@K@@WA@T@@*/?KDD@C^(@@$%8)SRT/K@C /LV )@@G@@B4@@@I[^(@[T)8)@@C>8)@@CB0J@@@/,0B859*D@@K/K@C MC8@@@#/K@CA[C8@@@@/K@CA[LW )@@G@@C8@@@[')GCA^'=@@@I'=@@@)C@@CA(C@@CA%C@@CA:C@@CA? SORT IS NOT INITIALLX )@@G@@IZED NOT ENOUGH D-BANK PROVIDED FOR SORT OR MERGE PROPER LY )@@G@@D-BANK NOT PROVIDED FOR SORT OR MERGE SORT SUBROUTINE CALLED WILZ )@@G@@TH INVALID PARAMETER LIST @[DCAH@[DCAQ@[ECAZ@[ CACR]D@#3AA8@@0 CC@@0MA )@@G@@N8K@@)C8C@@K/,0DCFC8)@@#[C*@@L @@@@JC D@ #W80@@W[@8@@,T^9@ ^[@8@@S&CS@@CMB )@@G@@Q^T@ #/S[)@@A@S@@KC^D@^6&FD@^6N@K@@G;*@@@[G@@COZC^S@@C&#K@@H[@S@@:G@K@@GMC )@@G@@[@S@@?G@K@@G[@S@@ZG@K@[[[@S@@+C8@CBQC8KCCJC8)CG8C9@CFR[^C@@][^S@@#[^*@@^MD )@@G@@[ C@@ /KCK@0R]D@#3AA8@@0R80@@[AC8@@VR^*@@KA@*@@! @]@@]OC*@@LA^*@@LR8K@C@ME )@@G@@R@9@ ] CC@@RR[9@^7A 8@@V&90@@ECCT@^6 @@@@GRDT@^5P9K@@[W@@@@ !^D@^6C^D@^6MF )@@G@@P9X@@[R@)@@G%^D@^6(@@@@H/K@CC[O8)@@[H8K@@[N@K@@H/,0CB'P8)@@[N@K@@ /,0CB'MG )@@G@@/,0CB'/KCK@0/\0CC ACR@@# @B@@AA@$@@BA@7)@C8KKCB'/KF@@@NCT@^58KKCC#/,0CB'MH )@@G@@/KCK@0CCB@@D[^B@@D&;@@@[C^T@ ^H8K@@[ @@@@I[@?)@@G@*@@,8#KCCF/KJ@@@R]D@#3MI )@@G@@AE8@@N(@D@]U&#D@[5[@C@@MC^S@@LKCS@@M*@D@]UG8)@@[C@8@@!KC9@ #?[@@@I/K@CC:MJ )@@G@@L@K@@J[^\@@](@D@]U/K@CC=CC*@@M&#)@@I[@!@@@G8K@@[NCS@@M&;@@@[&;K@@[M#W)@@MK )@@G@@[^S@@LRE8@@N/KF@@@R 8@@V1@B@@B/K@CC1/,0CFRC@C@@M/K@CCO% C@@L*@D@[S/K@CDSML )@@G@@H C@@L*@D@]UH9@@@[/[@CDS% D@]G? D@]G/K@CDSN@K@@KC^S@@LC@C@@!L@K@@G[^?@@]MM )@@G@@(@D@]U/K@CDAC@@@@K&FC@@M[@H@@@G8K@@[C^C@@M&;@@@[&;K@@[M#W)@@[^S@@L/,0CEKMN )@@G@@/,0CDWC^S@@LCCC@@MH@@@@KN@K@@GC^C@@MG@@@@K&;@@@[&;K@@[M#W)@@[^S@@L/K@CC(MO )@@G@@/,0CEK/,0CDWC@C@@M/K@CCOAA8@@NC@C@@!(^D@#./K@CD>KCD@ #H8K@@[/,0CEDC@C@@!MP )@@G@@[@?@@@C@S@@Q[@W@@[CCS@@RG8K@@[[CS@@R[CW@@]KCD@ #L^S@@KH^(@ #(?C@@T/^)CE#MQ )@@G@@C^S@@KC@*@@P&BT@ #0@B@@#'=@@@A*4B@@#')(@@09*R@@^*@D@[K/,0CN\C@@@@B(CD@]@MR )@@G@@/K@CD_'=@@@#/K@CE@'=@@@[C@S@@K;)K@@M[@S@@K[^S@@! ^H@@]GCS@@L[^S@@LRA8@@NMS )@@G@@/KF@@@GCC@@L&BD@#.;C)@@=?8W@@@/KF@@@G@?)@@/K@CEGAE8@@OR $@@DC@A@@@+@@CO)MT )@@G@@[@S@@PC@*@@!GC(@ #H^*@@KC@0@@I @@@@HW8K@@WG@S@@P[@S@@QC@S@@PH^9@ #(?C@@TMU )@@G@@/^0CFPC@$@@C?^(@ ^/K@CE"/G@CE:G@S@@S!@T@^9/K@CE:[@Q@@@[@S@@Q/K@CFHC@)@@AMV )@@G@@/K@CE\:@)@@A/K@CF]:C$@@DG^(@ ^H8)@@[0@I@@@/K@CE!C@I@@@G@C@@S!@D@^9/K@CE!MW )@@G@@[@A@@@[@C@@QC@I@@@)@@CO-[@Y@@@/K@CFHC@)@@A/K@CF]:@)@@A')T@@0:C$@@DG^(@ ^MX )@@G@@H8)@@[(@I@@@/K@CF@C@I@@@+@@CO)[@Q@@@[@S@@QD8@@@@[@I@@@C@R@@CH8K@@[[@R@@CMY )@@G@@!8K@@]/K@CFPC@B@@B)@@CO-[@R@@BRE8@@O/KF@@@R]D@#3AA8@@OR 8@@VC8@@@[[?C@@TMZ )@@G@@/,0CEKC@C@@Q)@@CO-[@S@@Q/,0CDW ?C@@T0@B@@#'=@@@A*4B@@#')(@@0 CC@@RC@R@@ANA )@@G@@G8K@@[[@R@@A0@B@@B/K@CF5C^B@@DG8@@@[CCR@@DG^T@ ^!@@@@HCCB@@D(@G@@@/K@CF!NB )@@G@@[^B@@D(4C@@T/K@CF9RA8@@O/KF@@@C@R@@B;?@@@[H8K@@];G@@@[[@R@@BC^S@@RG8K@@[NC )@@G@@[^S@@RCCD@^6?@@@@H/K@CGGCCD@^5%CC@@V/K@CGD*@B@@C/K@CF7C8@@@Z[0C@@T/K@CGLND )@@G@@ 0C@@T0@B@@B/K@CGL*@B@@B/K@CF7CCC@@VG8@@@[O90@@E:CD@^5/K@CGZ?CD@^5/K@CGTNE )@@G@@'-D@@\1@B@@B(@B@@B/K@CGM[CC@@VA 8@@V/K@CF7C^S@@R?CT@^6(0C@@T/K@CG$ 0C@@TNF )@@G@@R 9@^7C8@@@[/K@CGTR 9@^7CCT@^5H8K@@[L8K@@[1@B@@B/K@CG\H8K@@[/K@CG3C^D@^6NG )@@G@@T@B@@AH@B@@A[@B@@BO90@@E8#)CG:/^KCG=CCD@^5/K@CGTR]D@#3C8@@@[[4C@@TCDD@^5NH )@@G@@H9@@@[R[9@^7/\0CC O90@@E8^@CG"/K@CH]/,0CH)/K@CHG/,0CJY/,0CK&/K@CHD/,0CCJNI )@@G@@/K@CH /,0CCJ/,0CFR/K@CH]C8@@@[[=C@@TC@9@#3C^_@@@/,0C.3R]D@#3/,0CJY/,0CK&NJ )@@G@@/K@CHUC@9@#3C^_@@@/,_K@#R]D@#3/K@CHNC@9@#3C^_@@@/,_K@#C@9@#3C^_@@@/K@C/HNK )@@G@@A]8@@WR[9@^7&90@@E @@@@HCCD@^5H8@@@[G@R)@A8#@CH&[^S@@RCCD@^6?@@@@H/K@CH1NL )@@G@@NCT@^5Q[9@^7C^(@ ^5@$)@A/K@CI/CCC@@V:CD@^5'-D@@\()C@@T/K@CIHR[8@@X(@B@@ANM )@@G@@/K@CIRR[8@@XC^*@@RHC(@^6/G)CI@/@)CI@G8)@@[/K@CI[C^(@^6!@$@@AC@$@@A!^(@^6NN )@@G@@C^(@^6[@*@@\H8)@@[C@S@@Z&;K@@[AD.)@@8#)CIDR]8@@W/KF@@[C8@@@_[)C@@TC@T@#3NO )@@G@@H8K@@E[^S@@VC8@@@C[0H@@#C@D@ ][@H@@C/K@CI*R 8@@V/\0CC R[8@@XA 8@@VC^C@@KNP )@@G@@[@C@@! @G@@]GCC@@L[^C@@L CC@@RC8K@@C[0R@@# @B@@A @B@@BC@T@ ][@R@@C/\0CC NQ )@@G@@CCD@^5H8@@@[R[9@^7 @C@@) @C@@-C@R@@A?@S@@)/K@CI9C@(@ ]H@$@@C%@S@@)/K@CI6NR )@@G@@!@*@@-/K@CI9A[8@@X[@S@@)[@*@@-O90@@E8#@CI!/K@CH9C^S@@R[@S@@\CCT@ #[^T@ #NS )@@G@@()C@@T/K@CJ^R 8@@V/\0CC C@C@@?;)@@@M[@C@@?C@C@@:;)@@@M[@C@@:C@C@@+;)@@@MNT )@@G@@[@C@@+C@C@@Z;)@@@M[@C@@Z&;@@@[R[9@^7CC(@^5H8)@@[(@B@@A/K@CJUC@7@@AH80@@[NU )@@G@@AD/)@@8#0CJSO90@@E8#)CJOR]8@@W/KF@@@A]8@@;C@@@M[CC@@>RD.@@@C@W@@@C^[@@@G^D@ #/!KCM3R C@@:/\)DXO(@@@@G')T@@0OA )@@G@@[@C@@(/SG)@@[^C@@&[@S@@$R]8@@C@9@@>C@C@@(/,_@@@/K@CL>'-T@@0(@D@]V/K@CL>C@9@]V/,_@@@/K@CL0G@T@[5OF )@@G@@[@S@@&C@0@@CC@\@@HG@(@[5[@\@@HC@(@]OI )@@G@@[@S@@$RD.@@@RDC@@>/!KCM_C^S@@>C^7@@^[^.@@@R C@@?/\)DXO/@@CMN[^S@@>;C@@@MOJ )@@G@@[CC@@>RD.@@@C^!@@@C@W@@@C@C@@=[@*@@=/!KCM3C@S@@$C^H@@@G8@@@#*@C@@*/K@CM*OK )@@G@@[@C@@&/K@CK(NCS@@(C^C@@(C@T@]Y&;@@@[&;K@@[M#W)@@[@S@@%C@S@@$C^X@@@G^T@ #OL )@@G@@&;@@@@!@@@@H/K@CL_G8@@@#N^S@@*C@S@@%&;@@@[&;K@@[M#W)@@[@C@@&C@D@]Y&FC@@*OM )@@G@@[@C@@( @C@@*/K@CK( 4B@@#&BD@ #9*B@@^C8@@@K[0B@@#C@@@@B(CD@]@/K@CM.'=@@@#ON )@@G@@/K@CM"'=@@@[/K @@@0@B@@#'=@@@A*4B@@#')(@@0*@D@[K/,0CN\R^$@@^R@8@@=O^9@ #OO )@@G@@PC9@ #CCM@@]:8K@@[/K@CNKCC#@@]G8@@@[%@@@@H'-D@@0C@@@@](^D@#./K@CNTKCD@ #OP )@@G@@H8K@@[/,0CEDC@@@@]%@?@@@')9@@0C@W@@[/CKCN<;*K@@[;CK@@[[@O@@@C@B@@AH8@@@[OQ )@@G@@[@B@@AD8@@@@/K @@@A@)@@#OC(@ #C^$@@^G^(@ #%@)@@]/K@CND[@O@@@G^G@@]*@D@]UOR )@@G@@G8@@@[&#@@@^/K @@@[@D@[JC@D@[K9*W@@D9?KCO+9*W@@@C8K@@C[0W@@#C8W@@F[^W@@^OS )@@G@@C@R@@@[@W@@F9?R@@#9*W@@GC@R@@ [@W@@I @@@@HC^(@ #WCT@ #[@K@[]8K)CO#C8G@@JOT )@@G@@&;@@@[C^R@@^&;K@@[N8K@@^M#H)@@H8K@@^GCT@ #8K)COB[@@@@H&;K@@@C@D@[KC8W@@JOU )@@G@@H@K@@GG8K@@^C@D@[K[CW@@^'=@@@#*4G@@#')(@@0G8K@@B;CK@@#;*K@@#G@W@@ [@W@@ OV )@@G@@9?W@@DC@D@[K/KF@@@@@^@@^Z_____)@@@@@SORTDEBUG$$$A]9@#7N8K@@AC8@C9VC8T@@,OW )@@G@@&;K@@[M#W)@@N8K@@EC8KDDUC8D@@4&;K@@[&;@@@[M#H)@@C@9@@=C^J@@@%8J@@@'-T@@2OX )@@G@@C8K@@>&'0@@@/,0DCT/K@CPF(0G@@@/K@CP]C4W@@[%8K@@_'-T@@2 4(@[ C^W@@@9?!@@@OY )@@G@@9*(@[#/K@CPFC^W@@@[@T@[# @@@@IC4W@@[:8K@@_C^?@@[(@@@@IC^(@[G[C(@[# 0(@]GOZ )@@G@@C@@C9W[@D@]IC@@C9X[@D@]H *(@#?C8K@@7&'0@@@/,0DCT/K@CPTC@W@@@[@T@]J=8K@@]PA )@@G@@ ?(@[TC8K@@K&'0@@@/,0DCT/K@CP/C@?@@@;*)@@A;C)@@AC4W@@[%8K@@_/K@CR[C4W@@]PB )@@G@@:8K@@_/K@CQZG^?@@[!@)C9Y')(@@,C^W@@[[@T@[6[@T@@&G^W@@@H8K@[,[@T@[7C^W@@@PC )@@G@@H8K@[,[@T@[8C@@@@D'=@@[0;*@@@M;C@@@<[CD@]@?8K@J*')9@@,*?D@[T/K@CR5/K@CR:PD )@@G@@9?@C9Z9*D@[>C8D@[>'=@@[GC4W@@A;CK@@#%8K@@#')9@@,C^?@@CT8)@J*!8)3LL/K@CR[PE )@@G@@C@@C9-'=@@[0C^9@[T=80@@KC@@@@H&;@@@@G@@C9+'=@@[0;C@@@M[@D@[H @D@[IK8@@@[PF )@@G@@[@T@[6[@T@@&[@(@[8G@@@@IG@K@@I[@T@[7G8@@[,[@D@#A'=@@@C8K@@<&'0@@@PX )@@G@@/,0DCT/K@CT7C^W@@@[@T@#> @@@@IC4W@@[:8K@@_C^?@@[(@@@@IC^(@[G[C(@#> @D@#$PY )@@G@@C8K@@=&'0@@@/,0DCT/K@CU C@?@@@[@(@#$ @@@@IC4W@@[:8K@@_C^?@@[(@@@@IC^(@[GPZ )@@G@@[C(@#$(4D@['/K@CUFR](@[R&'0@@@/,0@@@/K@C!. CD@ CD@^5R'D@[>R99@#H&90@@[QA )@@G@@C@0C8*[@8@@E @D@]. @D@#[C80$C,[@9@#EC80 [C8@@FC8K@@N&'0@@@/,0DCT/K@CWXQB )@@G@@Q#W@@@9?X@@@9*S@@@C[K@@GC8C@@@&;@Z__'=@@@U(4G@@A/K@CWJC4W@@A?8K@@K/K@CVSQC )@@G@@?8K@@Q/K@CVA?8K@@S'-(@@,!8K@@)'-(@@,CC(@ G8)@@[[C(@ C^?@@CT8)@W@*?G@@AQD )@@G@@T8)@[@!@(@[8:@(@[8/K@CU"(@D@]./K@CV[9?9@]"9/8@@@/K@CVC/K@CWJ^E(@^5[@(@^'QE )@@G@@/K@CWJ[@T@]/[@(@].9?S@@@9*T@]"/K@CWJC@?@@D/K@CU5*@D@#[/K@CWJ?@(@]./K@CVLQF )@@G@@[@T@#@[@(@#[9?S@@@9*T@#]/K@CWJC@9@]/C[D@].[@9@#@[[D@#[9?9@]"9*9@#]/K@CV[QG )@@G@@L8K@@E/C,CVV'-(@@,/K@CV5/K@CV5/K@CV5/K@CV2'-(@@,/K@CV-C@@C9=C8S@@@&;K@@]QH )@@G@@9*D@^"C@@C9>C8S@@B&;K@@[9*D@ @ @C@@BC8D@^"&;@@@^'=@@[IC8C@@@C@S@@B:@KC9&QI )@@G@@Q;)@@B/K@CV5C@W@@B=8K@]@Q;)@@AC0"C9M*4D@#E/K@CV;[49@#F[^(@#F/K@CV.%49@#FQJ )@@G@@/K@CWOC4(@#EG8)@@[!8)@@T/K@CWJ[4(@#EC8) [C*@@FC^(@#E[^*@@FG8)@[@[^(@#EQK )@@G@@9?8@@@9*8@@GC@@C8*[@C@@EC8C@@E&;@@@^'=@@@JC8K@@N&'0@@@/,0DCR/K@CWX/K@CUWQL )@@G@@C09@#E!80@@K/K@CWJC@@@@LC G@@@[[B)@@G80@@[[09@#E/K@CWJ(CD@^5/K@CW+CCD@ QM )@@G@@!8@@@#/K@CY'C@@C8*[@C@@E CD@^5 @D@^' @D@^8 CD@ ^CCD@ ?8@@@#/K@CZ^ @D@[KQN )@@G@@9?@C9$9*D@[>C8D@[>&;@Z__'=@@@U(4G@@A/K@CX@C@T@][C@D@[7N8K@[@H@K@[[H@@@[[QO )@@G@@[@T@][[@D@[78KKCW;C@K@@G&;K@@[ @H)@@8KKCW.[@D@[KC@9@#3C@T@][C@D@[7N8K@@1QP )@@G@@H@K@[[H@@@[[[@T@][[@D@[78KKCXDC@K@@G&;K@@[ @H)@@8KKCXF[@D@#3[^/@@[C8K@@NQQ )@@G@@&'0@@@/,0DCT/K@CZ^/K@CX[@*@@][@*@@# @C@@ C@8@@]?@9@[5RD )@@G@@/K@C)#G80@[\;G0@@=W80@[0T80@[0[@8@@^C@8@@]T80@[=;G0@@=W@8@@^!80@[P/K@C)[RE )@@G@@C[C@@]C@*@@ ?@)@@J[[C@@#?@)@@J[@8@@ H[D@[5[[C@@]/K@CZ%C@8@@][@8@@#C@*@@#RF )@@G@@C@0@@IC@K@@IH8K@@#G80@[\;G0@@=W80@[0T80@[0/K@C)-?9@@@S/K@C)-G80@@V;G0@@=RG )@@G@@W80@@WT80@@W/K@C)-G8K@@[C@)@@HL@(@[5?@9@[5;G)@@>K8K@@^C@K@@JG80@@^?9@@@XRH )@@G@@/K@C)ZG80@[?/K@C)-!9@@@SG80@@SC9@@@@W[@@@JT[@@@HC80@[0T@0@@GG@0@@IH@0@@LRI )@@G@@H[@@@J0@@@@K/KF@@@/KF@@[ @D@]SC8K@@S&'0@@@/,0DCT/K@C)6[CT@]SC8K@@E&'0@@@RJ )@@G@@/,0DCT/K@C+%C8K@@T&'0@@@/,0DCT/K@C-[*CD@]S'-D@@,[CT@]SC8K@@E&'0@@@/,0DCTRK )@@G@@/K@C+%C8K@@U&'0@@@/,0DCT/K@C-G*CD@]S'-D@@,[CT@]SC8K@@E&'0@@@/,0DCT/K@C+%RL )@@G@@C8K@@V&'0@@@/,0DCT/K@C-N*CD@]S'-D@@,[CT@]SC8K@@W&'0@@@/,0DCT/K@C-S[^T@]SRM )@@G@@C8K@@X&'0@@@/,0DCT/K@C-Z*^D@]S'-D@@,[^T@]SC8K@@Y&'0@@@/,0DCT/K@C-&*^D@]SRN )@@G@@'-D@@,[^T@]SC8K@@Z&'0@@@/,0DCT/K@C-!*^D@]S'-D@@,[^T@]SC8K@@$&'0@@@/,0DCTRO )@@G@@/K@C-4*^D@]S'-D@@,[^T@]SC^9@]SCDD@]SC5T@#E:80@@W/K@C+H:80@@Y/K@C+H:80@@XRP )@@G@@/K@C+C:80@@Z/K@C+C%80@@$/K@C+Q:9@@@V/K@C+V%9@@@S'-D@@,?9K@@#'-D@@,/K@C+VRQ )@@G@@:9@@@S/K@C+ :9@@@U/K@C+V'-D@@,:9@@@S/K@C+N%9@@@T'-D@@,/ KC+9'-D@@,?9K@@#RR )@@G@@'-D@@,/K@C+9*@@@@K:9@@@S/K@C+9:9@@@T/K@C+LC@9@]\[DZ@@DC8T@]0[^Z@@@C@T@[7RS )@@G@@H@T@][[^Z@@CH@T@[5[^Z@@EC@T@][[CZ@@CC8)@@Z[@(@]WR]9@#7/KF@@@')D@@2RA9@#FRT )@@G@@S8)@@SC^FC9MS8@@@#G@0@@HC^FC9MS?FC9MS8K[F@C8K@@@W@K@@JS8K@@DW8K@@ES@K@@LRU )@@G@@/KB@@@C5T@#EG1T@#E CD@]#/[KC=V*@D@]U/K@CGC^W@@@T8K@J*T@T@[5SG )@@G@@0@@@@HC@KC9%?@T@^/[@T@^/R[T@[5RD(@ ^R[9@][C8@@W@[^D@^5C8P@W]*@D@]UG8K@@[SH )@@G@@;GK@@=W8K@W@T8K@W@C@D@^';C@@@#?@@@@H/K@C>*KCT@^5G8)@@ TC(@^5G8!@@C!@(@][SI )@@G@@/K@C>*C@)@@HT8)@@ CCD@^5;*@@@[G8?@@Q?@(@][/K@C&MC8@@B@[^D@^5C8P@B]*@D@]USJ )@@G@@G8K@@[;GK@@=W8K@B@T8K@B@KCT@^5G8)@@ TC(@^5G8!@@C!@(@][/K@C>.C@)@@HT8)@@ SK )@@G@@CCD@^5;*@@@[G8?@@Q?@(@][/K@C&MC8@@[0[^D@^5C8P@[2*@D@]UG8K@@[;GK@@=W8K@[0SL )@@G@@T8K@[0KCT@^5G8)@@ TC(@^5G8!@@C!@(@]['+T@@1C@)@@HT8)@@ CCD@^5;*@@@[G8?@@QSM )@@G@@!@(@]['+T@@1R[@@@HN@0@@H CD@ #P D@^5C@@C9%[@D@^;O D@^5C8@B[V?@@@@^/K@C*3SN )@@G@@C@T@^';CK@@#?@K@@^/K@C*3C@@@@BH@@@@^H@@@@^/G@C*3S@D@];W8@@@EC@(@^/ @@@@HSO )@@G@@W@K@@GN8!@@[G8K@@[T@K@@^;CK@@[G@T@^/G@K@@^N@K@@HC@@@@^T8@@@#C@K@@BH8W@@CSP )@@G@@CCD@^5G8^@@B;OK@@=W@K@@G?8K@@]/K@C*3R@)@@HR@0@[#P^9@^5C@@@@#G^D@^5C@)@@^SQ )@@G@@ @@@@HW@K@@G/@)C$J!8K@@#/K@C&"/@KC&SC@@@@^:8K@@[/K@C$J;G@@@>C@)@@HW^D@^5SR )@@G@@T^D@^5%@@@@IC@@@@^R@0@@GC^T@]GG8K@@[;CK@@[H8H@@#(@D@[S/K@C$WC@@@@#H8@@@#SS )@@G@@C@)@@G @@@@HW@T@[5H@@@@IC1AC7:;(@@@[C@K@[[S@K@@#W@K@@GC[K@@H;GK@@=W^QC7:ST )@@G@@R]0@@H;?@@@>C@)@@L @@@@HW@K@@^T@K@@KO]0@@HO]0@@FG@@@@HC@)@@L @@@@HW@K@@#SU )@@G@@T@K@@KG@@@@H!@D@^;/K@C*\C@)@@BH8<@@CCDD@^5G9#@@ @@@@HW@K@@K?CT@^5/K@C&SSV )@@G@@R@K@@H!@K@[]/K@C*QC[@@[]C@)@@K @@@@HW@K@@]*@@@@IG8K@@[?8L@@[/K@C*EG@@@@FSW )@@G@@C[@@@H/K@C*@C@)@@KH@)@@[P8)@@[ @@@@HW@K@@]O8)@@[T@K@@]/@)C*NG8Y@@[S@K@@FSX )@@G@@W@K@@KG@@@@HCDD@^5H9@@@[!@D@^;/K@C&.C@K@@]T8K@@ C@0@@[C8)@@@W@)@@K*@@@@JSY )@@G@@G8)@@[TC(@^5C[@@@BG8Y@@CC@)@@^T8+@@#G@K@@I?[@@@H/K@C&.ACT@^6A^(@^6AC9@ #SZ )@@G@@A D@ #[@D@^;/K@C&.C@@@@#G^D@^5[@@@[#/K@C&.(^D@ #'+T@@1CDD@^5H9@@@[CCD@^6TA )@@G@@;G@@@=W@@@@K*@@@@HG8@@@[?^D@^6C^D@^6[^D@ ^C@T@^' @@@@GW^D@ #[@D@ ]T@@@@ TB )@@G@@T@@@@KC^T@ #;GK@@=WCT@ #T@@@@HCC(@ #H8)@@#*@D@]UO9K@@[ @@@@HW@K@@ T@@@@HTC )@@G@@C@9@#3[@J@@AC@D@^';G@@@=W^D@ #H8@@@[S^D@ #W8@@@WG8@@@[[@D@^9R[9@^7&90@@ETD )@@G@@C@T@][C@D@[7N^T@ ^H@K@[[H@@@[[[@T@][[@D@[78KKC(=C@K@@G&;K@@[ @H)@@8KKC(&TE )@@G@@[CB)@D8^@C(W CD@[_R'D@[> CD@]DC T@ #(@@@@LCDT@]#C@9@][;(K@@[H@0@@LC[T@#[TF )@@G@@/[KC%B;DK@@[?[T@].[[T@].C@(@].C@D@[8T8@@@#?@)@@G')T@@29!D@#@/,0CZG/K@C%;TG )@@G@@[CD@[_[C(@] [[D@["C@9@][T8)@@#H@0@@IHC9@[_[@9@#99!D@]//[KC%.C@(@][S@(@];TH )@@G@@W8)@@FC^9@#9/,0CZG')(@@2:CD@]D/K@C%"[CD@]D[^(@] [[D@]CC@9@][T8)@@#H@0@@ITI )@@G@@HC9@[_H@0@@G[@9@]AC@(@[5*@D@]UC@(@]US@0@@IG8)@@[*@D@]UG8)@@[W@0@@IS@9@];TJ )@@G@@W80@@ET@0@@G?@9@]C/K@C%5*CD@[_%8@@@[/K@C%"CCD@[_CC(@] 9!D@#@9(D@]/9!D@#]TK )@@G@@9(D@]"C[D@[" CD@[_ @D@#[/K@C%MC@9@#99!D@]//,0CZJ'-D@@\/K@C%K')(@@2 @D@#[TL )@@G@@/K@C%B[@9@]AC9K@@[[[T@#1C@9@]%C8@@@[[5Z@@[[4J@@]C@D@[7H@D@][C@T@]A[^Z@@DTM )@@G@@K@K@@GH@D@[5[@D@]YC8@@@@C[D@[5G9@@@[W@@@@KS@D@[5[@Z@@AC8KD@[[^Z@@[C9@@@]TN )@@G@@(CD@]D/K@C:3*4D@#?'+(@@0C@D@]:[^J@@@[@0@@H[@@@@J[CZ@@@G9K@@[[5Z@@[[5J@@]TO )@@G@@[C\@@CC^D@] [^J@@DCCD@]D[CJ@@DC@D@]C[@J@@AC@D@[7HCD@[_HCD@]D[CJ@@J @@@@ITP )@@G@@C@T@]/!8K@@SC8)@@[!8K@@XC8)@@][4\@@#G9@@@[(CD@[_/K@C?LC@D@]?[^J@@@[@0@@HTQ )@@G@@C@0@@G[CZ@@@G9K@@[[5Z@@[[5J@@]C@D@[7HCD@[_[CJ@@JCCT@] [^Z@@DT8K@@#H@@@@HTR )@@G@@[CJ@@CC@T@["[@Z@@ACCT@[_[CZ@@D @@@@IC@T@#@!8K@@SC8)@@[!8K@@XC8)@@][4\@@#TS )@@G@@C9@@@#(CD@ /K@C?>*?D@#?'+(@@0C@D@#3C@K@@J[^J@@@C@0@@GG9K@@[[CZ@@@[5Z@@[TT )@@G@@[5J@@]C^(@^6C^T@ #C@D@[7[C\@@D[^Z@@DH@@@@HH@@@@H[CJ@@CC@D@]*(@@@@G/K@C!]TU )@@G@@C@D@]*[^J@@@[@0@@H[@@@@J*0D@#?'+(@@0[CZ@@@C@D@#4N8K@[^&;@@@[C@(@#4 @G)@@TV )@@G@@M#I)@@G9K@@[[5Z@@[[5J@@]C@(@[7HC(@]#HC(@]#[C\@@CCCD@]#[^J@@DC^D@[_[CJ@@DTW )@@G@@C@D@]^[@J@@ACCD@]SC4(@#E:8@@@T/K@C!D!8)@@#%8@@@S/K@C!9C@D@]\[^J@@@[@0@@HTX )@@G@@[@@@@J[CZ@@@CCT@]S%8K@@S/K@C!O[C\@@DC8D@]0[^J@@@G9K@@[[5T@]F[5Z@@[C8@@@#TY )@@G@@[4J@@]C8K@@F&'0@@@/,0DCT/K@C!0C^?@@@!C(@]#/K@C!0(@D@]U/K@C!>L8)@@A[@0@@LTZ )@@G@@/K@C!:H8)@@^C8K@@@W@T@[5S@T@[5[@)@@LG8)@@^[^(@]#/!0C+:C@9@]\C^T@]#/K@C!2UA )@@G@@CCT@]#C@(@]^[^Z@@D[@(@]EC@(@[7H^\@@DH^\@@D[C\@@C/K@C!.[5T@]FC8D@]0[^J@@@UB )@@G@@[C/@@@C@KC9%[@T@]M[@9@]O @D@]L[^9@]FC8K@@@(^D@]S/K@C,+C8K@@%&'0@@@/,0DCTUC )@@G@@/K@C,ZC^?@@@;*)@@S;K)@@S[@(@]XC8K@@*&'0@@@/,0DCT/K@C,ZC@W@@@[@T@]P 4D@]PUD )@@G@@C T@]SC@)C9%%9K@@W/K@C,)C8K@@(&'0@@@/,0DCT/K@C,ZC@W@@@+@KC9:/K@C,)'-(@@2UE )@@G@@[@(@]QC8K@@Z[4T@#: @D@[.(CD@]S/K@C,\C8K@@C&'0@@@/,0DCT/K@C,\C@W@@@[@T@[.UF )@@G@@ 4D@[.C@T@[.[@T@[/C8K@@3&'0@@@/,0DCT/K@C,7C)W@@@ *D@#?%8K@@[ *(@#?C8K@@5UG )@@G@@&'0@@@/,0DCT/K@C,_C)W@@@ 4D@]G%8K@@[ 4(@]G*8@@@@/K@C\#*4D@]G/K@C1-R'D@[>UH )@@G@@C@@C8([@C@@@9?KC829*S@@[C8@BM *4D@['C8@EM [CC@@[C@KC84[@S@@#C@D@[8/,0DW9UI )@@G@@;>@@@A/D@C\K9(C@@^9?KC859*S@@AC@D@]A/,0DW9;>@@@A/D@C\R9(C@@CC@@@@C&;@@@EUJ )@@G@@*8@@@@/K@C\)'=@@@J/K@C\G@@@:8K@@D CD@#/:8)@@F CD@#.:80@@T ^D@#/:9@@@K ^D@#.C8K@@6UX )@@G@@&'0@@@/,0DCT/K@C2QC??@@@C^W@@@:8)@@^[^T@#.:8)@@#[^T@#/:8)@@][CT@#.:8)@@[UY )@@G@@[CT@#/C8K@@6&'0@@@/,0DCR/K@C2Q/K@C2BC9@@@@C8K@@1&'0@@@/,0DCT/K@C2WC G@@@UZ )@@G@@[DD@#^C9@@@@C8K@@2&'0@@@/,0DCT/K@C2C@@C8([@C@@@9?@C8%9*C@@[9?@C8?9*C@@#9?@C8,9*C@@A9?@C809*C@@CVD )@@G@@'=@@@N*8@@@@/K@C3N(*D@#?/K@C3N*4D@]G/K@C4;C[T@]K/ KC3QC9K@@[H@D@#D[@@@@HVE )@@G@@'=@@@?;=@@@=;*K@@A;CK@@Y%?T@#EG@@C9?T8@@@E;G@@@=W@@@@L/,0DW9[!S@@#;DK@@AVF )@@G@@[5S@@#;DK@@A[-S@@];DK@@A[>S@@]C@D@]K/,0DW9[[S@@ [-C@@^;D@@@A[>C@@^C@D@]+VG )@@G@@/,0DW9[5S@@C;DK@@A[[S@@B[5C@@B;D@@@A[-C@@AC@(@]L;G)@@=(@D@]K/K@C4EW@(@]KVH )@@G@@G8)@@[(@D@]U/K@C4^G8)@@[C[D@]UG9@@@]![@@@IC@)@@KC@9@]A;G0@@=W@0@@IC[D@#1VI )@@G@@%9@@@[/K@C4IC9@ [-C@@DC9KSEQ/K@C4XC@D@]K;G@@@=W@@@@J*@@@@HG8@@@[T8@@@EVJ )@@G@@;G@@@=W@@@@K?8@@@EC8@@@E!8@]WK/K@C4E/,0DW9[-S@@D;DK@@A[(S@@D;[K@@A[!S@@DVK )@@G@@;-K@@A;DK@@G[1S@@D**D@#?/K@C41C8S@@[&;K@@L[@T@#X @D@#YC8D@#W(8@@@@'=@@@CVL )@@G@@C8S@@^&;K@@=[@T@#X(8@@@@'=@@@CC8C@@@&;@@@E*8@@@@/K@C48(4D@]G'=@@@J/K@C4;VM )@@G@@C8C@@[&;@@[D'=@@@I()D@#:/K@C5[C@D@]+G@D@]<%@D@]K')(@@3C@D@[H*@D@#A*?D@[TVN )@@G@@/K@C5I*4D@['/K@C5E'=@@@= @D@#A/K@C5IC@D@[6&'0@@@/,0@@@ @D@#AR]9@#7(4D@['VO )@@G@@/KF@@@B,;@@@A]9@[NC8T@D8[@K@@J&;K@@[ @H)@@N8K@@RM#Z)@@9?KC9!9*Z@@ 9*Z@@FVP )@@G@@C@KC9\[@Z@@C9?KC909*Z@@HC@KC92[@Z@@K9?KC939*Z@@LC8@C9A&;@@@^'=@@@J>@@C95VQ )@@G@@ 4\@@@/G@C7D9494 LC@@N+D9614 GC@@PAWF )@@G@@S9510 GC@@PA??????GC@@PAT30 ??T31 ??FH432 T33 ??FH1782T35 ??D8470 T37 ??WG )@@G@@@USE @LOG SORT: T/R=XXX.XMS, IC=XX, OC=XX X, BIA=XXX.XXX SORT, WH )@@G@@CORE: TOURNAMENT: M1 M2 DISK BLOCK SIZE: MERGE POWER: EQP TYPE WI )@@G@@ EQUIPMENT: ESTIMATED DISK I/O TIME:@ASG,A SYS$*SRT$PAR. . @USE SRT$PARWJ )@@G@@.,SYS$*SRT$PAR. . @FREE SRT$PAR. . E#S@G)F^S@-OG^S@-OH^S@-OI[[@@[JBAGO/WK )@@G@@HAS]]GJCFGO/)L%@CN'^D@@4@@[@@@@@#4D@@@@___R$CORE )@@@@@)@[@@@@@[@#ZWL )@@G@@@#@@@@@C@@@@U47M SORTDEBUG$$$@@]__.Z_____@_____@ D>0@SRT$PAR @K@@@@WM )@@G@@SORTDEFAULTS@@[@@@SORT16R1 C@@@@@AUTOMAMAXIMUMINIMULOG=ONLOG=OFCONSOLWN )@@G@@CONSOLE=OFF TIC=YETIC=NO@[@@@[A]9@@%C@@DC@[@D@@[C@@DC['=@@[0B4@@@I[^(@[TWO )@@G@@=8)@@KC@@@@H;C@@@M[@D@[LC^D@[T)8@@@C>8@@@CB0H@@@C8)@@[R'D@]%&'@@@[C8D@#"WP )@@G@@[@C)@@C8D@ 6C8KBN#(^H@@@[4(@#?/!0C',C8D@AB/!0C',C8D@ASC8KB== 0D@#?(^H@@@WQ )@@G@@[0(@#?/!0C',C8D@A(C8KB=./!0C',C8D@A'C8KB(K/!0C',C8KCA! ?D@#?(^H@@@[?(@#?WR )@@G@@[@T@#3/K@C'1[@C)@@[^W@@[/KB@@@/,0CO=/K@C;TC^9@]F*4D@['/K@C;W[^9@]FC^Z@@[WS )@@G@@(@H@@['+(@@0C[KDC][[Z@@G @J@@H 0J@@[C@D@]Y[^J@@EG@D@[5[^J@@C/,_K@[C^9@]FWT )@@G@@C4J@@[CC_@@@%8@@@[/K@C'6C89@]0C8@C"4[@J@@]C8@C_R[@J@@#C8@C_*[@J@@^[@J@@ WU )@@G@@C@@DC#[@J@@[ @D@]WC@9@]%/,0C.3R]9@@%*0D@['B,;@@@/KF@@@C@D@#>[@D@#!4\@@[/K@C.$C@J@@GC4\@@[CC_@@@/K@C.W:4T@]F/K@C.!C^_@@@XH )@@G@@/K@C.7CDD@]S*^D@]S/K@C"N%9@@@TC89@]0/K@C"NA]9@#%[@D@[> CD@#%CC\@@@C4Z@@[XI )@@G@@!@T@]W/K@C"N&;0@@@C@D@]W%8@@@Z/K@C"H(@D@]S*@D@]*/K@C"H:@9@]?/K@C"L%@9@]:XJ )@@G@@/K@C"HC^J@@@%@D@]?/K@C"F(0G@@[/K@C.(/K@C"H:8D@]0/K@C.(:@9@]:/K@C"N:@9@]?XK )@@G@@/K@C"N(0J@@[/K@C.(C@D@[>C8K@@[[0Z@@[*@@@@I[^"@@@/,_K@]/KDK#%(@J@@H/K@C"/,_@@@/K@D]B/S@@@@CCT@^M+8KZ__C@T@^M/,0D[N/K@D[K/K@D[N/K@D[NYA )@@G@@K@(@^2[@Z@@@C@K@@G;C)@@[/@(K^(K@(@^2C@J@@@/@@D[VC@9@@>')D@^:/K@D[N/G@D[NYB )@@G@@K@(@^2[@Z@@@C@T@^MG@T@^O[@T@^MR]9@^4/KF@@@[@T@^MC8@D[^[^D@^*C8@D[![^D@^(YC )@@G@@C^9@#"/,0C.3C8@D#J[^D@^%/K@D]([@T@^MC^D@^CC@9@@>/,_@@@/K@D["/K@D#RC@9@^$YD )@@G@@/,_@@@/K@D["C89@#"C@\@@HG@(@[5[@\@@HC@(@]')D@^?YG )@@G@@K@(@^2[@Z@@@C@K@@G/K@D[G[@T@^MC^9@#"C^D@^C/,_K@#C^9@#"/,_K@ C@D@^:C@T@^?YH )@@G@@[@T@^:[@D@^?C@(@#1G8)@@[[@(@#1C^D@^MC^T@^CN@T@[5&;@@@[&;K@@[M#W)@@C^9@#"YI )@@G@@C^J@@K%8@@@[/K@D[-C89@#" @@@@G&'0@@@/,0C///K@D[-/S@@@@Q'0D];A]9@^4CCT@^MYJ )@@G@@+8KZ__D/K@@@;C)@@[/@(K^%K@(@^2C@J@@@/@@D#E[@Z@@@-@D@^M/CKD#CC@K@@G/K@D]EYK )@@G@@C@K@@G/K@D[G/G@D]"/K@D[WC^9@#"/,0C.3/K@D#OC^9@#"C@D@^C/,_K@#C^9@#"/,_K@ YL )@@G@@C^9@#"/K@C/H/KF@@@'+D@@0C^D@^A[@D@^2C8@D#-[^D@^@C8@D^F[^D@^[C8@DB8[^D@^]YM )@@G@@/KF@@@C@@D ^[@D@^\C8@D V[^D@^0C8@D#G[^D@^1C@@DCC[@D@^!C@@DCD[@D@^,C8@)@@YN )@@G@@[@D@^MC@(@]UG8)@@] @@@@GC^T@^BW@@@@I[CD@^RK^D@^A[^T@^P[CT@^S;@@@@MK@@@@GYO )@@G@@QBD@^PH8)@@[[^(@^SG@@@@IK@)DC^;@)@@MQB(@^PG@(@]UR[KDC^Q[T@^A @ )@@[@I)@@YP )@@G@@G@@@@J!@K@@G/K@D^]H@(@]UH8)@@[ ^I@@@/KF@@@A]9@^4[@D@^NCC9@^NH@9@]UNCT@^NYQ )@@G@@!80@@[N@T@]U[G9@^QC@0DC^Q#9@^NC@)DC^QB(@^P[C(@^Q(0D@@$/K@D^XC@D@]K[@I)@@YR )@@G@@8KKD^XM#\)@@[C9@^PC^D@^PR](@@&/,0DPJC^D@^PG@D@]UCCT@^N)CT@^M[C?@@@H@D@]UYS )@@G@@ @@@@IC^9@^PHC9@^SW^(@^SGC(@^R')D@^\R[D@@>/,4@@@/K@DB /S@@@@;G)@@[/@(K^0YT )@@G@@G@(@^2/C0D^;CCY@@@;*K@@M;KK@@M[^I@@@/K@D^.CGY@@@[CI@@@H@(@^2/@KD^2R[(@@>YU )@@G@@R[@@@HO[D@]U')D@^,/,6@@@/K@D^2C@@@@H/K@D^2C^T@^PG@T@]UC^!@@@H@T@]U/@>@@@YV )@@G@@CG9@^Q[^(@^P?80@@[/K@DB4H@9@]UNGT@^Q!80@@[N@T@]U[G9@^QG@)DC^C@0DC^QF9@^PYW )@@G@@M#\)@@[C9@^P/K@D B/!KD BC80D &[^9@^0C@0D 1[@9@^\C80D#J[^9@^1[^D@^RC^9@#"YX )@@G@@/,0C.3/K@DBW/!KD BC^T@^CR[D@@>/,4@@@/K@D#R/S@@@@[^D@^RC^9@#"C@D@^C/,_K@#YY )@@G@@C@KDC^Q#T@^CC^D@^RG@D@]UCC?@@@H@D@]U+8)Z__[C9@^C:CD@^Q/K@DB>G@@DC^/K@D "YZ )@@G@@N@K@@J!^9@]UN^T@]UH^9@]UM#W)@@Q#G@@@!80@@[/K@D /C^(@^RC^T@^P[^(@^PCG9@^QZA )@@G@@?80@@[/K@DB4H@9@]UNGT@^Q!80@@[N@T@]U[G9@^QG@T@]U[^!@@@H@T@]UG@)DC^C@0DC^ZB )@@G@@QF9@^PM#\)@@[C9@^PC^9@^P @@@@IHC9@^SW^(@^SGC(@^R;G)@@[/@(K^1G@(@^2/C0DA>ZC )@@G@@ ^I@@@CCI@@@;*@@@M;K@@@M/K@DA$ CI@@@CGI@@@H@(@^2/@@DAWG@D@]UC@/@@@H@D@]UZD )@@G@@-@9@^M/D@D^2/K@DA3R[D@@>/,4@@@/K@DA3C@@@@H;G)@@[/@)DBFG@(@^2/C0DA/CCY@@@ZE )@@G@@;*K@@M;KK@@M[^I@@@/K@DA"CGY@@@[CI@@@H@(@^2/@KDA3R[@@@HO[D@]U')D@^!/K@DA\ZF )@@G@@/K@D CC9@^N)^9@^MG@D@]U[DG@@@H@D@]U/K@DA3/!KD B[^D@^RC^9@#"C@D@^C/,_K@#ZG )@@G@@C@D@^!C@T@^,[@T@^![@D@^,C@D@^M;@@@@M[@D@^MC^9@#"/,_K@ C@(@#1G8)@@[[@(@#1ZH )@@G@@C^9@#"C^J@@K%8@@@[/K@D 0 @@@@GC^9@#"&'0@@@/,0C///K@D 0N@T@]U[^D@^PG@@DC^ZI )@@G@@M#W)@@H@9@]U?80@@[/K@DB2N@K@@JQ#D@^N*0D@@$H8@@@[G@D@]UM#W)@@R]9@^4/KF@@@ZJ )@@G@@G@T@]U ^H@@@R]9@^4/KF@@@ @D@^QR'0DB;A]9@^4C^9@^PG@9@]U ^J@@@H@9@]U/K@DASZK )@@G@@16R1C )@@@@@Z_____@[@@@@@@[@@@@#@@@@/CJ@@@/GJ@@@0@^@@@1@^@@@ (@@@[[ZL )@@G@@/KF@@@[@T@@#C8T@@]&;@@@[M#H)@@C@T@@#/KF@@@&;@@@[&;K@@[M#W)@@/KF@@@C@D@@:8K@@9/K@DC(%4T@@$/K@DCW[@D@@80@@CB0J@@@9*D@@:C@D@[I*@@@@G/K@DE]C@@DZNZU )@@G@@'=@@[0C^9@[T=80@@KC@@@@H[CD@[I&;@@@@G@@DZO'=@@[0&;@@@@[^D@[IC[@@@ ;D@@@MZV )@@G@@:DD@[I/K@DESC@@@@ ;C@@@M:@D@[L/K@DESC@@@@ ;C@@@M(@@@@G/K@DESR]0@@ 9?D@@:ZW )@@G@@A]K@@J&BK@@J;C0@@M&B@@@JB,5@@@/K@DE+/K@DE>/K@DE*9?D@@:A]K@@J&BK@@J;C0@@MZX )@@G@@&B@@@J&'0@@@/,5@@@/K@DE+/K@DE>/K@DE*/,0DE:R]9@[N/KF@@@/,0DE:R]9@[N/KF@@[ZY )@@G@@/,0DE:R]9@[N/KF@@];C@@@M&AK@@G;CK@@MQAK@@HB4@@@G)8@@@C>8@@@CB0H@@@9?D@@:ZZ )@@G@@R@T@[OR@(@@#R@9@[PR]D@[MC@9@[QC@(@@!R[9@[JR](@@(/KF@@@A]9@[NR]9@[EB,;@@@AA )@@G@@/K@DF^/K@DFCR]9@[N/KF@@]R]9@[N?[@@@L/KF@@@/KF@@[R]9@[N![@@@L/KF@@@/KF@@[AB )@@G@@9*@@@KC^(@[T>8)@@CB0I@@@9!(@@Q*@D@[I/K@DFXC@@DZN'=@@[0C^9@[T=80@@KC@@@@HAC )@@G@@[CD@[I&;@)@['=@@[0&;@@@@[^D@[IC@K@@ ;CK@@M:CT@[I/K@DF:C@@@@ ;C@@@M:@D@[LAD )@@G@@/K@DF:R]0@@ 9?@@@KB,;@@@/K@DF2/K@DF4/K@DF09?@@@K&'0@@@/,5@@@/K@DF2/K@DF4AE )@@G@@C9@@@]/K@DF5C9@@@@/K@DF5C9@@@[B4@@@I)8)@@C>8)@@CB0J@@@&'0]@@B,;@@@B@@DI>AF )@@G@@U@@DHNA@@DIDD@@DI?M@@DI%P@@DK6Q@@DK9R@@DLCS@@DLJG@@DJ=L@@DJUT@@DJ6V@@DJXAG )@@G@@J@@DJ%AA'@@@ CE@@@C9@C@@C8K@@[&'0@@@/,0DCT/K@DGQC G@@@C8K@@]&'0@@@/,0DCTAH )@@G@@/K@DGQC G@@@*0D@@$G9@@@[[DE@@BC@0DZP[@'@@# ?E@@ ^E@@B/!0DG1@@^@@_/S@@@@AI )@@G@@[C'@@]/!0DG1@@B@[_/S@@@@[C'@@^G80@]@[^'@@^/!0DG1@@O@#_/K@DH^C8)@]@%^%@@^AJ )@@G@@'-(@@0[C'@@^G80@^@[^'@@^/K@DH^CCR@@@Q;0@@@/,0DCT/KB@@[QB/@@@C^B@@@K@@@@JAK )@@G@@[CX@@@8#@DG7R]0DZPC8J@@@K^J)@@%CX@@@'+9@@,AE.@@@$A7@@@/K@DG/Q#0@@G/KB@@]AL )@@G@@ ^E@@] ^E@@ C8%@@CG@)DZQ[@%@@[C8K@@#&'0@@@/,0DCT/K@DNVC9@@@_*0D@@$C9@@[@AM )@@G@@][I)@C8^@DHK/K@DH=/,0DJ@C8@DQR[CJ@@[C Z@@@G Z@@[0@J@@#G9K@@[!DU@@B'9@@C@C8@@@+:9@_8@C8@@@:/K@DLSC^B@@[T8@WWWBJ )@@G@@G8@@@)/K@DLSC9@@@DC9K@@^[1U@@@/K@DI3(0D@@$/K@DL8*?E@@ /K@DL8C^E@@B*@@@@GBK )@@G@@G8@@@[C@)DZS)@@@@IC@)DZT9*T@[>R;D@[>[?%@@ /K@DH= 0E@@ C^E@@[!^E@@]/K@DNUBL )@@G@@G8@@@CC^W@@@T8K@@=G0W@@^H8K@@[C^?@@^G@)@@HH8)@@[C^'@@[G80@@C!@0@@G/K@DL'BM )@@G@@C J@@@T9@@@=G1J@@^H9@@@[C Z@@^G[K@@KH9K@@[?@)@@K/K@DM ?[K@@H/K@DM *0E@@ BN )@@G@@/K@DM?9*D@[>9*(@[$9(D@[( @@@@GW8@@@=*@@@@HG8@@@[ @@@@HW8K@@= @@@@JW80@@=BO )@@G@@*@@@@KG80@@[ @@@@KW9@@@=C8)@@[!@K@@J?[@@@G @@@@I[0%@@ 9?D@[>9?(@[$9!D@[(BP )@@G@@C5J@@^C5W@@^:9K@@U/K@DM :9K@@A/K@DM5:9K@@S/K@DN^'C8K@@^&'0@@@/,0DCT/K@DNN'C8K@@B&'0@@@/,0DCT/K@DNI'/K@DM Q R S T V C^%@@]G8)@@CBT )@@G@@[@(@@> @D@#C CD@[SC8K@@-&'0@@@/,0DCT/K@DN49*T@@:C^W@@@[@T@[E @@@@IC4W@@[BU )@@G@@:8K@@_C^?@@[(@@@@IC^(@[G[C(@[EC@D@[E[@D@#C9?T@@:C8@DD&[CD@[S[@D@@>/K@DP#BV )@@G@@(^E@@ '+D@@,*?D@[T/K@DO C@D@[8!8@J__C8@J__;*@@@MQ#D@[6'=@@[0(@@@@G'&;)@@]&'0@@[C@'@@[C[@DZU&;@C[G&90N@%/K@DO/BX )@@G@@'9*(@[$H@%@@#C^'@@ACG )@@G@@ @@@@HW8K@@=G@0@@HC@J@@@;)I@@@0@@@@G/K@DQ^C[@DZNG@@@@K;@I@@@[@J@@@/K@DQ CH )@@G@@C9@@@@9?D@[>9?(@[$-[I@@@[[Y)@@8#KDP2$B'@@]/K@DP(/KG@@@CCZ@@[R1_@@@C@%@@#CI )@@G@@G^\@@@N^Z@@[/KH@@@C9@@@[;[B@@[-[I@@@[[Y@@@$B'@@]/K@DQH/KFDQU/\@DPYQ]'@@@CJ )@@G@@/KF@@@G@)@[[0@J@@#G8)@@[')BDS@%8K@@-/K@DQRC@%@@#G^\@@@/K@DQ(')BDS@%8K@@-CK )@@G@@/K@DQRC[J@@]-[I@@@/K@DQ!D[Y@@@[[Y)@@8KKDQ?C[J@@#/K@DQPC9@@@[;[B@@[+[I@@@CL )@@G@@')FDQ6/K@DQ(/[KDQP/ KDQPCDX@@@C X@@@K4I@@@')FDQ8[5Y@@@K0I@@@')FDQ8[1Y@@@CM )@@G@@K?I@@@')FDQ8[!Y@@@K*I@@@')FDQ8[(Y@@@K=I@@@')FDQ8[>Y@@@K)I@@@')FDQ8[-Y)@@CN )@@G@@8KKDQ'/KBDRHK=I@@@')FDQ8[>Y@@@K*I@@@')FDQ8[(Y@@@K?I@@@')FDQ8[!Y@@@K0I@@@CO )@@G@@')FDQ8[1Y@@@K4I@@@')FDQ8[5Y@@@/K@DQRK0I@@@')FDQ8[1Y@@@/K@DQRK0I@@@')FDQ8CP )@@G@@[1Y@@@K?I@@@')FDQ8[!Y@@@/K@DQRK0I@@@')FDQ8[1Y@@@K?I@@@')FDQ8[!Y@@@K*I@@@CQ )@@G@@')FDQ8[(Y@@@/K@DQRK0I@@@')FDQ8[1Y@@@K?I@@@')FDQ8[!Y@@@K*I@@@')FDQ8[(Y@@@CR )@@G@@K=I@@@')FDQ8[>Y@@@/K@DQRC4Y@@@C0Y@@@C?Y@@@C*Y@@@C=Y@@@C)Y@@@C4Y@@[[5Y@@@CS )@@G@@[1Y@@@[!Y@@@[(Y@@@[>Y@@@[-Y@@@[5Y@@[G@)@[[0@J@@#G8)@@[')BDS@')FDSP')BDSBCT )@@G@@/K@DS9K@^@/K@DQRC@%@@#G^\@@@/K@DQ(CXXDU;CTXDU;CWY@@@CKY@@@CV )@@G@@CSY@@@COY@@@CWY@@[CXI@@@CLI@@@CTI@@@CPI@@@CXI@@[[XY@@@[LY@@@[TY@@@[PY@@@CW )@@G@@[XY@@[)9@@^@-9@@^@')BDS0')FDS9')BDS5')BDS%%8K@@!/K@DQR/K@DQ(')BDS\')FDS9CX )@@G@@')BDS4R5_@@@G@)@[[0@J@@#G8)@@[')BDS%%8K@@!/K@DQRC@%@@#G^\@@@/K@DQ((@@@@FCY )@@G@@/!0DT?N^Z@@[R1_@@@')BDS\')FDS9')BDS4R5_@@@G@)@[[0@J@@#G8)@@[')BDS%;*K@@)CZ )@@G@@;CK@@)N8K@@BC@)DZP2@Y(T>/K@DQRN^Z@@[C@%@@#G^\@@@/K@DQ(@@@@@[@@@@@#@@@@@ DA )@@G@@@@@@@B@@@@@D@@@@@F@@@@@HC@K@@I&;K@@[C[J@@ +[H@@@[[X)@@/K@DT5C[J@@A+[H@@@DB )@@G@@[[X)@@8KKDT21@J@@#/KB@@@C[J@@B+[H@@@[[X)@@/KB@@@O90@@[')BDS\')FDS9')BDS4DC )@@G@@P90@@[')BDS%!8K@["/K@DQR')FDS*')BDS4>9K@^@/K@DQR/K@DQ(CCE@@^/KBDUFKWI@@@DD )@@G@@')FDQ8?^U@@^[XY@@@KKI@@@')FDQ8?^U@@^[LY@@@KSI@@@')FDQ8?^U@@^[TY@@@KOI@@@DE )@@G@@')FDQ8?^U@@^[PY@@@G8)@@[8KKDUFC4Z@@@/KHDUYKSI@@@')FDQ8?^U@@^[TY@@@KKI@@@DF )@@G@@')FDQ8?^U@@^[LY@@@KWI@@@')FDQ8?^U@@^[XY@@@CCE@@]/K@DQRKKI@@@')FDQ8?^U@@^DG )@@G@@[LY@@@/K@DU:KKI@@@')FDQ8?^U@@^[LY@@@KSI@@@')FDQ8?^U@@^[TY@@@/K@DU:])O5\*DH )@@G@@]*P57(]0Q5_%]8R6B:#@S6J?#CT6R!#KF6Z,#SG6$\#)H6\0#*I0RM#0JA@0#8KAC1^@LAK2DI )@@G@@^CMAS3^KNA)4^Z7A*5^$8A06^\9A87^7'B@8^_;BC9 B/@@@ J.@C[ R"@K] Z_@S# )U@)^DJ )@@G@@ *V@* 0W@0S 8X@8TA@Y[@UACZ[CVAK)[KWAS-[SXA)+[)Y"0<[*ZA*=[0)A0>[8-A8&]@+DK )@@G@@B@$]CBS%])&B):]*$B*?]0*B0!]8(B8E#@%CB6#C:CC,#K,CK\#S\[KE#)@DL )@@G@@[SF#*@[)G#0@[*H#8@[0I^@@[8J^K@]@K^S@]CL^)@]KM^*@]SN^0@D*'^8'D0; @;D8/ C/DM )@@G@@E@. K.EC" S"[K_ )_EK@ *@[S@ 0@[)@ 8@[*@@@@[0@@@@[8@@@@]@@@@@]C@@@@]K@@@@DN )@@G@@]S@@@@"8@@@@_@@@@@_C@@@@_K@BK@_S@BS@_)@B)@_*@B*@_0@B0@_8@C@@ES@ES@E)@E)@DO )@@G@@E*@E*@E0@E0@E8@E8@F@@F@@FC@FC@FK@FK@FS@FS@F)@F)@F*@F*@F0@F0@F8@F8@G@@G@@DP )@@G@@GC@GC@GK@GK@GS@GS@G)@G)@G*@G*@G0@G0@G8@G8@H@@H@@HC@HC@HK@HK@HS@HS@H)@H)@DQ )@@G@@H*@H*@H0@H0@H8@H8@I@@I@@IC@IC@IK@IK@IS@IS@I)@I)@I*@I*@I0@I0@I8@I8@J@@J@@DR )@@G@@JC@JC@JK@JK@[K@@@@J)@J)@"0@@@@C80@[C9!@DZ);G@@@=W8@@@EG8K@@:G K@@H; @@@ADS )@@G@@H80@@A/^@DW;; J@@@/KF@@@[^=@@[ @^@@@;@@@@/,;@@@/K@DX:/K@DX>C[^@@ ?[J@@[DV )@@G@@/K@DX:[@J@@@C@@@@HC@O@@ C[J@@[[@Z@@[[[^@@ ;C)@@];@)@@/GKDY[DY )@@G@@/K@DX2BIAS ESTIMATE WAS XXX.X @]^DYD[@D@[OR'D@[>9?@DYD9*C@@@9?@DYF9*C@@]DZ )@@G@@9?(@]L;G)@@=W@(@]KG8)@@[(@D@]U/K@DYZG8)@@[C[D@]UG9@@@]![@@@IC@)@@KC@9@]AEA )@@G@@;G0@@=W@0@@IC[D@#1%9@@@[/K@DY(C9@ [ C@@#C9K3.0/K@DY8C@D@]K;G@@@=W@@@@JEB )@@G@@*@@@@HG8@@@[T8@@@E;G@@@=W@@@@K?8@@@EC8@@@E!8@]WK/K@DY>/,0DW9[>S@@#;DK@@AEC )@@G@@[!S@@#;DK@@A[1S@@#;DK@@A[5S@@#C@@DYHQ;C@@@'=@@@IC@D@[O'-T@@\C9@@@@N8K@@ ED )@@G@@C8@@@@;?@@@A:8@@@ /KF@@[H8@@@01@@@@G!8@@@E/KF@@@T9@@@EG[@@@G8KKDZ^/@:@@[EE )@@G@@;?K@@=/K@DZ#@@[@@[)@@@@@)@[@@@@@[@@@@@B__8Z;_Z;_#UAE@@_@@@@V%[@@@L/K@DF EF )@@G@@B,;@@@B,;@@[/KF@@]B,;@@] @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EG )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@EH )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@U]KR)@8]JZ@@@___@^(BE%EI )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___EJ )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___EK )@@G@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ASG,T $MFD$ *SDFF*$MFD$ EL )@@G@@ @@@@@@@C@@@@@@W@@@@@@@@@]JZ]J;@@[@@@@@[]K!@@[@@@*[@@@@*SDFF*@@^]KXEM )@@G@@@@[@CF@@[]KSC@@]K,'=@@@J/G@BE0C8@]K+/,0BG%/,0BFA'=@@@)C8@@@A[W@]K?C8@]KREN )@@G@@[^@]K%^<0@\\/K@AP2N8K@@ C@@]K\C@K]K0M#W)@@C8@@@ [4@]KSC8@]K+/,0BFA'=@@@)EO )@@G@@*W@@\;/K@AP// 0A<7(W@@0^/K@AP//K@A<7C^W@@D&;K@@[C@/@@E[@.)@@;K0@@S0@@@@JEP )@@G@@C0/@@E[^/@@BC^?@@C&;)@@[[^W@@DK^/@@D*@G@@A/K@BFQH G@@^/K@BFRH G@@AHDG@@^EQ )@@G@@/D@BFXN^W@@BM#Y)@@[^W@@D/KF@@[L G@@B#[K@[[M#Y)@@[ G@@B0@G@@#'=@@@AC[W@@ ER )@@G@@GDW@@B[[W@@ C5W@@#/[KBG[C9@@@@%9K@@]/KF@@@*=G@@]/K@BF;C80@@D/\KBGYC80BJ[ES )@@G@@&;0@@KC[G@@^[@/@@^C80@@C/\KBGYC80@@D/\KBGY/\KBGYC80@@C[[G@@^[0/@@#[@@@@HET )@@G@@&;@@@@'=@@[XC@@BJL'=@@@8C@@@@H(@G@@A/K@BGEC[W@@A[ W@@^;[K@@M[[W@@A[ W@@DEU )@@G@@'=@@@[/K@BGHC W@@^[ W@@D'=@@@#C^W@@D&;K@@[C^/@@BC-G@@]/[@BFLKDG@@BT9@@@WEV )@@G@@[DW@@BGDG@@^C[W@@ H-W@@] )G@@]0@G@@#'=@@@A[[W@@ [DG@@^/K@BFL[0/@@#'=@@@#EW )@@G@@C5W@@#:9K@@@/KH@@@%9K@@]:9K@@[/KH@@@C9@@@@/KF@@@&;@__"/K@BG:&;@@@@*@G@@AEX )@@G@@/K@BG\C^W@@^/K@BG0C^W@@A 4G@@#[^W@@D )G@@]C@?@@ CCW@@B+8)@@#+8K@@#?8K@@^EY )@@G@@/K@BHI98)BHI/G@BHB9??@@@C@K@@G9??@@@C^G@@D9*?@@@&;@@@E'=@@@UC4?@@AC@@@@HEZ )@@G@@!8)@@S!8)@@)/K@BHICC?@@B+/)__/C@W@@ +8K@@#[)?@@]H@0@@I[C/@@BCDG@@BL[G@@ FA )@@G@@T9@@@W][W@@ [DG@@^[@@@@H9!G@@@C^G@@D9(G@@@&;@Z__'=@@@UC4?@@AC80@@JC@@@@HFB )@@G@@[*?@@]C^G@@D?@0@@I/K@BH;C@/@@B=80K@@/K@BH;C80@@K9(G@@[[@/@@@C8?@@#N8K@@JFC )@@G@@&;)@@[ @I)@@8KKBH(&;@@@N'=@@[+1@@@@G/K@BH7[@G@@@C??@@@:8)@@_/K@BH;:8)@@EFD )@@G@@/K@BH;:8)@@I/K@BH;C@@@@HC8)@@[[=?@@]/KF@@@C@@@@H =G@@]/KF@@@0@G@@#'=@@@AFE )@@G@@CDG@@BK[G@@ [[W@@ C5W@@#%9K@@]:9K@@@/K@BIDC9@@@@/KF@@@(@G@@A/K@BIHC^W@@AFF )@@G@@[^W@@^C^W@@DC@)BJM[@!@@@*@G@@A/K@BIOH^W@@^/K@BIPH^W@@AG8K@@W;GK@@=W8K@@WFG )@@G@@*)G@@]/K@BIZ?9@@@^/K@BI-K8K@@#+/)__//K@BI+K-G@@][DW@@BC@0@@HT80@@WG@W@@ FH )@@G@@[C/@@^'=@@@#[@W@@ C5W@@#C9@@@@%9K@@]/ V@@@C*?@@]C9@@@B/@:@@@C9@@@@!8)@@KFI )@@G@@/KF@@[C80@@D/\KBGY*=G@@]/K@BI8/\KBGYC80@@:/\KBGY/KF@@[ET^C1JBK)^[JI(4I[5FJ )@@G@@I))E--I[>^[MG(>H))IT7GD0I[>G))?I@@@@C(JEK=C(JEK=C(JEK=C(JEK=C(JEK=C(JEK=FK )@@G@@C(JEK=@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[CBI9_@@@@@@@@@@@FL )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FM )@@G@@@@Z@'[@@E@'/@@E]I_@@G]JN)@W@')-N9@;A)@E]JD@@@___@R]A3*@@@___@@@___@@@___FN )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___FO )@@G@@@@@___@@@___@@@___@@@___@ASG,T $$--DGET--$$,F/ /5000 . FP )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[@@@[2_#_____#____@@@@@@@@@@@@HFQ )@@G@@$$--DGET--$$@@@@@@[Q_[2_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FR )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[O]@'.@@@@@@@@@@@@FS )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Z__]JAMFDSP$K@@@@@@@@@@@__"@@[FT )@@G@@__"@@@@FREE @@^@'[/ @@[@')@@@@@@C@@@@@C@)]JR/\0A8>C8GK@@9?G@@@9*@]I_FU )@@G@@9*@@'P9*@@'#/KF@@@C@)]JS/\0A8>C@@]JTC@K@'[[@@@'[C@@]JU'=@@@J[@K@'[ @@@'NFV )@@G@@/KF@@@C8)@@^/\0A8>C8/K@#C@_@@@C8GK@]C@G@@@/K@A4C C@@'GC@0@@G;C0@@M*@@@@JFW )@@G@@C@_@@@&';@@@Q';@@[A]0@'W @@@'D+8@@@A/@KA9UC@K@'O%8K@@I/K@A4N[)@@'D=8@@@]FX )@@G@@/K@A9U/K@A4T=8@@@][?@@'D=8@@@^[*@@'D=8@@@C[0@@'DC@@]JNC8K@@G&;@@@[ @G)@@FY )@@G@@8#KA4W9?K@'PC@@]JN9*W@@@'=@@@UC4W@@A/^KA9>C@@@'R/@@A4%;C@@@ ?8@@@#C8@@@]FZ )@@G@@G@@@'RC@)]JV;G@@@=W8@@@EG8K@@0;GK@@A/^@A4:[@)@'AC8@@'['=@@@J/^@A9)C8@@'OGA )@@G@@'=@@[P/G@A8'C@@@@J/@@A4''=@@@F9?@@'P9*@@'.C@@]I_C8K@@@/,0A'-/K@A9J[[K]J@GB )@@G@@[@K]J[/\KA83R]0@'W/KF@@@C8)@@#/\0A8>C8GK@]/K@A5G C@@'G&';@@@Q';@@[A]0@'WGC )@@G@@[^@@'G*@@@'I/K@A53 @@]J C@K]J[/^KA5SC@@]I_C8K@@]/,0A'-/K@A9J/@KA9X @@]J[GD )@@G@@[@K@'IC@0@@H(*@@'D/K@A5>&;K@@[C@@]JWN8K@@WM#H)@@[@@@'I @@@'E(?@@'D/K@A53GE )@@G@@C^@@'G&;@@@[&;0@@[N8K@@WM#J)@@C8@@@@(C@@'G/K@A51CC@@'GC8GK@@ @G@@@ @G@@@GF )@@G@@R]0@'W/KF@@@C^@@'E!0@@'(/K@A6GG8@@@[[^@@'EC@@]I_C8K@@^/,0A'-/K@A9J/@KA6^GG )@@G@@C^@@'G&;K@@[G8@@@W&;@@@[N8K@@WM#H)@@/K@A6PC@@]I_C8K@@#/,0A'-/K@A9J/K@A58GH )@@G@@9?)@'X[@)@'W[@0@'G*@@]J /K@A9X @@@'E @@@'I/K@A5NC@)@'NG8)@@[[@)@'N/K@A5NGI )@@G@@C8@@@[(C@@'G/K@A6VCCK@'GC8XK@@[@H@@@R]0@'W/KF@@@C8)@@^/\0A8>C8WK@#C@X@@@GJ )@@G@@C8GK@]/K@A6& C@@'G&';@@@Q';@@[A]0@'W[^@@'G*@@@'I/K@A53[@@]J C8@@')C@)@'WGK )@@G@@C@0@'G9*)@'X/,0A7U/K@A6D9?)@'X[@)@'W[@0@'GC8@@':G*@@'%&;@@@[[@@@'HC8@@@[GL )@@G@@[@@@'I(?@@'D/K@A53C@0]JW/K@A5>&';@@@[^@@'GQ';@@[A]0@'W&;@@@[C8K]JXN8K@@WGM )@@G@@M#H)@@C@@]I_C8K@@ /,0A'-/K@A9J/@KA7MC^@@'G&;K@@[&;@@@[N8K@@WM#H)@@RA0@'WGN )@@G@@/KF@@@RE0@'W/KF@@@C8)@@^/\0A8>C8WK@#C@X@@@C8GK@]/K@A7X C@@'G&';@@@Q';@@[GO )@@G@@A]0@'W[@K@'F[^@@'G^@)@'UA]@@'VC@)@@H/@)A70C@@]I_C8K@@C/,0A'-/K@A9J/@KA70GP )@@G@@C^@@'G&;K@@[&;@@@[N8K@@WM#H)@@R]0@'W/KF@@@C8K@@BC@)@'FN@)@'UR]@@'V/K@A9!GQ )@@G@@C8)@@#/\0A8>C8GK@]/K@A7/ C@@'G&';@@@Q';@@[A]0@'W/K@A9PR]0@'W/KF@@@C8)@@^GR )@@G@@/\0A8>C8GK@]/K@A8B C@@'G&';@@@Q';@@[A]0@'W/K@A9P(C@@'G/K@A8ICCK@'GC8XK@#GS )@@G@@[@H@@@R]0@'W/KF@@@C8)@@^/\0A8>C8GK@]/K@A8R C@@'G&';@@@Q';@@[A]0@'W/K@A9PGT )@@G@@(C@@'G/K@A8YCCK@'GC8XK@#[@H@@@R]0@'W/KF@@@9?@@'X[@@@'W[@K@'GC8K@@F/K@A9?GU )@@G@@&'0@@@*4F@@@/K@A8!C8F@@@K8I@@@(4H@@@G8)@@[O'"@@@(8G@@@C8@@@[[C@@'G/G\@@@GV )@@G@@&'/K@[/KJ@@@ @@@'I @@@'E*@@]J /K@A88 @@]J^ @@]J /KH@@@C@)@@G;*@@@G;C@@@YGW )@@G@@:8@@@V/K@A9[C8K@@[/K@A9!C4@@'DG8@@@[[4@@'D!8@@@#/K@A8_/,0A32/K@A4=/K@@@@GX )@@G@@C8K@@]C@?@@#/K@A9!C8K@@AC@)@'R/K@A9![@@]JQC8@]JO'=@@[Q/K@A9NC8K@@G/K@A9!GY )@@G@@C8K@@H/K@A9!C8K@@CC4)@'K/K@A9!C@)@@GC8K@@D/K@A9!/\KA83C8K@@#/K@A9?-@@]JYGZ )@@G@@/@KA9>C@)@@GC8K@@^/K@A9!(@@@'N/K@A47/\KA83R]0@'W/KF@@@/K@@@@C8K@@ C8)@@@HA )@@G@@(C@@'G/K@A92RE0@'GR';K@@9*V@@@RE0@'W/KF@@@(W@@\_/K@A97/,0A32C8@@@I/,0A4[HB )@@G@@/K@A'^*@@@'J^70@\1C8@@@]&;@)@@C8KAP('=@@[DMFD ERROR TYPE & CODE & &]0@@FHC )@@G@@%8K@@#/K@A'E*0@@\\/K@BJ\/K@AQ]9*K@!4C/@@\)/,0@1OC8@A'@/,0@3)C@@@!4/,0@41HD )@@G@@(@@@!5/K@A'R/,0@3XC@@@!5C8K@@G/,0@3'C8@@C]C@G@@@'=@@@IC@@@@F;C@@@M&'0@@@HE )@@G@@H8@AWJ^<8@[P/@@AWK/K@AQBC@0@@G;C0@@M!80@]W/K@A':C8K@@@C80@@@C8)@@]C9@@@[HF )@@G@@C9K@]W/KF@@@:8K@@@/K@A'\%8K@@[/K@A'9N@)@@G&;@@@^G8@@@];G)@[C;H@@[CN8K@@&HG )@@G@@9*?@@@9(G)@]8KKA'5C@@@[]A]G@@_A]W@[@A]?@[[A]/@[D[@G@@"R])@@G?8K@@@')@BD HH )@@G@@!8K@@E')@BD /KHA;^/K@A;I/K@A;L/K@A;P/K@A.G/K@A.>/K@A"9/K@A_-/K@A_0/K@A_.HI )@@G@@/K@B@] 4E@[0/,0B[N/K@A;PC8@@@[[4E@[0/,0B[N/K@A.>*4E@[0'-KBD @E@[3 4E@[2HJ )@@G@@ ?E@[0/,0B G/K@A.DCDH@@@+9@W@@%9KC@@/K@A;U GE@[0[^U@[L+@0BE)[[E@]JR'X@@EHK )@@G@@C*!@@E!8)@@H/K@A/U[0%@[0C8@@@LO'Y@@@H8I@@@!*H@@DC*H@@DN@K@@G&'K@@[C8@@@@HL )@@G@@3@D)@[/K@A/]C@(@@@/,0BB//K@A;0CDH@@@+9@W@@%9KK@@/K@A;0C[H@@F+[@BE)%[U@]JHM )@@G@@/K@A;0C^U@[LC8)@@#C@'@]J/K@BD8C^U@[LC@!@@@$'U@]J/K@A/U/G)A/UC(H@@D/,0BB/HN )@@G@@/K@A/SH9@@@L!9@@@K/K@A/UG1E@[0/H@A/UN@K@@KC8X@@[C8%@[4&;K@@[&;)@@[M#!)@@HO )@@G@@Q'U@[3N@K@@K/K@A;0C9@@@[[!E@[09!H@@[9?!@@#9))@@K;^)@@M'K)@@J;G)@@M;C0@@MHP )@@G@@G@)@@J;G)@@=W@%@[EC8)@@@W8)@@WG8)@@[C8E@@@[@?@@ '=@@@#G^/@@^C5W@@#C@\@@@HQ )@@G@@/ KA.#/G)A/2%@%@]J/K@A;P/K@A.#/,0BB//K@A.#C^E@[L9!G@@[9??@@#C@H@@@G@KBE-HR )@@G@@N8K@@ 8KKA/"/G@A;PC@)@@G/K@A/29.H)@@/K@A/'H8K@@ 9/!)@]/K@A/'*?E@[0'-)BD HS )@@G@@C^U@[LC@'@]J[@'@[J'<@BDAC80@@[[?'@[2/K@BD6*4E@[0'-KBD /,0B[ /K@A.X%8@@@#HT )@@G@@/K@A.XC@!@@@ @E@[31@@@@I[@%@[3C@%@]J+@)BE)[@'@]K9?.@@[9*'@]L9?.@@#9*'@]NHU )@@G@@C@%@[3/@)BD6/,0BB/'-)BD C8)@@ C@'@[3 @E@[3/K@BD8 @E@]Q @E@]P*4E@[0/K@A"WHV )@@G@@/,0B[ /K@A.\:8@@@#/,0B@ :8@@@ /,0B@?(4E@[2/K@BD6N4U@[2RAE@[2C8@@@@&'@@@[HW )@@G@@3@C)@[C8@@@[C88@@@^4U@[2H^'@[2AAE@[2CG%@[0H@)@@J(@@@@IC8)@J$[G%@[0/^@BD6HX )@@G@@C@*@@@/,0BB/'-0BD CDH@@@+9@W@@%9KK@@'+@BD C@!@@F+@)BE)%@'@]K'+KBD 9?.@@[HY )@@G@@9/'@]L'+)BD 9?.@@#9/'@]N'+)BD C@!@@L+8)@__1GE@[0:G'@[0/K@A"S'+0BD C8)@@MHZ )@@G@@RAE@[2C@8@@@/K@BD8/,0B G/K@A"6CDH@@@+9@W@@%9KK@@/K@A"W[^U@[L+@0BE)[[E@]JIA )@@G@@9?.@@[9*'@]L9?.@@#9*'@]NC@!@@@/G)A"2/,0BB/'-KBDAC@!@@[&F%@]T'O)BE+%@%@]JIB )@@G@@'-KBDAC^U@[LC8)@@MC@'@]J/K@BD8C80@@[[?'@[2/K@BD6/,0B[ '-KBD >8@@@K'-KBD IC )@@G@@:8@@@M/,0B@'C@%@]P/@)BD6/,0BB/'<@BD C@!@@A+@)BE)(4E@[0/K@A_D&F'@]T'O0BE+ID )@@G@@%@'@]R''K0BE>IL )@@G@@N4U@[2M#\)@@/KF@@@ @E@[3&;K@@@C8)@@JG0%@[0C8.@@@[4%@[2[^'@[2C@%@[1G0%@[0IM )@@G@@H8)@@L[G%@[0!8U@@"/KF@@@/K@B@=C@!@@@1@@@@I[@%@]QC@!@@H+@)BE)*@@@@J[@'@]PIN )@@G@@C@%@]J+@)BE)[@'@]R/KF@@@*?E@[2'-KBD CCE@[LC^U@[L/^F@@[/@V@@@CDH@@@+9@W@@IO )@@G@@:9KC@@C8@@@#:9KK@@C8@@@M/^F@@[/KF@@@AA'@[KC8E@@@C8'@@A&;0@@8/,0B[//,0B]AIP )@@G@@C8'@]VGC'@]TGC'@]S[C'@[ C@K@@JH8U@@@G8K@8I[CU@[KH8K@@[!CU@@"'-@BD G80@@BIQ )@@G@@[^'@[ G80@@B&;0@W@CCE@[ /,0B[/C@/@@^G80@W@C^E@[ /,0B[//,0BB@R'0@@) @E@[FIR )@@G@@A6'@[F @E@[G(@E@]U ^E@[N ^E@]T CE@[L ^E@[L @E@]J ?E@[2RA'@[K/KF@@@[@/@@^IS )@@G@@ @G@@] @G@@#9?'@@@9*/@@@C80@@K[0/@@# @G@@ CG@@A/KF@@@ CE@[KC8E@@@ @G@@ IT )@@G@@'=@@@#*4G@@#'-)BDAC^/@@^C^Z@@[[@U@[EC^Z@@]HCZ@@]G8K@@];CK@@[G8K@M^[CU@[KIU )@@G@@H8K@@[!CU@@"')0BD C^Z@@];*K@@A[@U@[#CCZ@@]H8K@@[;*K@@A[@W@@ H8K@[@[@U@[^IV )@@G@@'=@@@#*4G@@#'-0BDA ^E@[C @E@[I(^J@@?/K@B]8C^Z@@?[@U@[I;CK@@A[^U@[C[@U@]UIW )@@G@@[^U@[NC@W@@ G^Z@@?[@W@@ H8K@[@[@U@[^ 4G@@# ^G@@#'=@@@#*4G@@#'+)BDAC8U@[OIX )@@G@@L8K@@#[^%@[M[C%@[NC@)@@JN8K@@W&;K@@[&;)@@[M#Y)@@N8K@@D^4U@[M^0U@[MQ#)@@EIY )@@G@@N8K@J*G8)@]VR'KBE&&;)@@[M#()@@ CE@]TC8)@M^[^%@]SR]KBE+ @E@]RC@\@@@;*)@@AIZ )@@G@@;C)@@S[@%@[H!8)@J*'-@BDA!C%@]T[C%@]TC9D@@@G@)@@E1@I@]V'+@BDA[[I@]V(^E@[CJA )@@G@@/K@B#1C E@[CH9@@@[[[@@[[C[G@@ ;D@@@AH E@[CC8T)@@;GK@@[;C)@@@@@'7/K@A3\C@@@.J'=@@[IC8@@@]&;@)@@C8K@@@LH )@@G@@'=@@[D^30@\!C@@@.K'=@@[[*0@@C2/K@A4]C4@@C3/@@A97[0@@C29?@@C;9*@@C6C?@@C3LI )@@G@@[?@@C2/@@A4]C@@@C_[@@@C8C/@@'[/,0@1O*4@@C2/K@A4F()@@C2/K@A4J9?@@C,/,0@2_LJ )@@G@@/K@A4H9?@@C4/,0@2_C/@@@*/,0@2<9?@@C6/,0@2_(?@@C2/K@A4TC/@@@(/,0@28@@@K/K@A7P^<0@\0N8K@[OC@@@.PC8K@.QM#H)@@^70@\1LP )@@G@@9?@@':9*C@@[9*C@@X9?@@'(9*C@@#9*C@@Z9?@@CZ9*C@@ 9*C@@-9?@@C09*C@@@@@.T/K@A6O^78@[PLU )@@G@@CWS@@EG8K@)@[WS@@EC0S@@!G8K@@)/K@A6PC0S@@!>8@@K@G8K@@C=8@@^@G8K@@[=8@@@CLV )@@G@@G8K@@][0S@@!(0C@[P/K@A7G9?@@';%@@@.U9*C@@2(@@@'7/K@A6?COK@'7C8@@@@=8K@[@LW )@@G@@C8@@@)))@@''[0S@@0C=@@''[4C@@0/K@A7GC^@@'\C4S@@!!8K@@D!8K@@I/K@A7EC8)@@CLX )@@G@@=8@^@@C8)@@K=8@C@@C8)@@S!8K@@F/K@A6'>8@[@@G8)@@)[**@@1C8)@]@=8@)@@C8)@C@LY )@@G@@=8@K@@C8)@^@!8K@@F/K@A7A>8@]@@G8)@@[[W*@@1/K@A7G=8@@)@G8)@)@[W*@@1/K@A7GLZ )@@G@@;C@@@D[*C@@1'=@@@?[@C@@,^B8@@:^V8@@!/K@A76C8@@'W'=@@@J/G@A8,^70@\0 @@@'&MA )@@G@@C@@@.V[@@@'>C8@@'+'=@@[P/G@A87C@@@.W[@@@'>C8@@'+'=@@[P/G@A87 CC@[P @@@@UMB )@@G@@0WC@@E^78@[PCWC@@*>8@@[@/K@A7\ 4@@\1C4C@@D%8@@@.:8@@@"^#0@@U?8@@@K^38@[PMC )@@G@@/K@A76^70@\1C4C@@D/@@A76:8@@@[^38@[P:8@@@)^#0@@U*4@@\0/K@A8G*0C@[P*)@@\0MD )@@G@@/K@A7//K@A8G*)@@\0/K@A8[C0C@@!=8@@@^/K@A8GC@C@@[C@S@@#9/@@.X/K@A8A/K@A8GME )@@G@@R')@@@/K@A8C&'0@@[B%0@;L*@@@@E/KE@@@**@@\0/K@A8$C=@@\!+8@@@2/^KA9A*)@@\0MF )@@G@@/K@A8$(0C@[P/K@A8UC^C@@0!8@@@]/K@A9A*WC@@1/K@A9A/#)A8YCOC@[D!8@@@]/K@A9AMG )@@G@@CWS@@*/[0A8$>8K@K@/K@A8>CWC@@_!8@@@]/K@A9A=8K@^@/K@A9AC8@@@ *4@@\0C8@@@RMH )@@G@@[0@@')C8@@'Z'=@@@J/@@A9A[@@@;KC8@@'Z'=@@@JC8@@;I'=@@]]/@@A93R')@.)C@@@;KMI )@@G@@/K@A8'R')@.-/K@A8'R')@.<[@@@!5C/@@\)/,0@1OC8E@@@/,0@3)C@@@!5C8K@@G/,0@3'MJ )@@G@@C8@@C]C@G@@@'=@@@I/K@A93*W@@\/(*@@\!/K@AP(C/@@\)/,0@1O9?C@@[/,0@2_C/@@@*MK )@@G@@/,0@2<9?C@@#/,0@2_C/@@@(/,0@2'=@@@H/K@A9'C@@@.&[@@@'DC8@@@[C8K . *8G@@@[CW@'D/K@A4\MO )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@[$@5K@@@___@#TAT;@@@___@@@___@@@___@@@___@@@___MP )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___MQ )@@G@@@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___TRKS&: FIXED=& REMOMR )@@G@@V=& V-OPT=& G-OPT=& TOTAL BACKUP TAPE BLOCKS=& FILES: TOTAL=& MS )@@G@@ TAPES=& GRAND TOTALS: @]#@5+TOTALS FOR &NON-& ?? QUALIFMT )@@G@@IER /K@AU>FILENAME /K@AU>PROJECT /K@AU>ACCOUNT /K@AU>TYPE MU )@@G@@ /K@AU?REEL /K@AU?BACKUP /K@AU?PACKID /K@AU?ASG-COMV )@@G@@UNT /K@AU6EQUIPMENT /K@AU.FCYCLE /K@AU6REF-DATE /K@AV^CAT-DAMW )@@G@@TE /K@AV^DISABLED /K@AVGUNLOADED /K@AVLMASS-STORAGE/K@AVOTAPE MX )@@G@@ /K@AVRREMOVABLE /K@AVUGOPT /K@AVGVOPT /K@AVGPRIVATMY )@@G@@E /K@AVXPUBLIC /K@AV)FIXED LOADED @@#@5*SPEC MZ )@@G@@ = @]@@@@R[@@0/(@@@0//K@AV5(@@@@^/K@AV2C/@@\)/,0@1OC8@@5&/,0@3)NA )@@G@@C@@@0/H@@@@^TC@@0*R[K@0*O[K@@GN[@@@^8L@AUFC^ @@^R])@62N8K@@Q2CE)@#/K@AUMNB )@@G@@C@ @@]')E@@]0@ @@@/K@AU9?E@@@/,0@2_C/@@@[ND )@@G@@/,0@2?9? @@]/,0@2_/K@AV=9?E@@@/,0@2_C/@@@[/,0@2?C@ @@]%@@@65(@@@@GC@@@6\NE )@@G@@/,0@2./K@AV=9?E@@@/,0@2_C/@@@[/,0@2?C@ @@]/,0@41/K@AV=9?E@@@/,0@2_C/@@@[NF )@@G@@/,0@2?C@ @@]/,0@3?/K@AV=9?E@@@/,0@2_C/@@@[/,0@2?&]>@@]C@@@@E/,0ASM/K@AV=NG )@@G@@=@ @@#/K@AV+C8@@5*/,0@3)/K@AV+>@ @@#R')@60/K@AV+=@ @@#R')@6V/K@AV+>@ @@#NH )@@G@@R')@6S/K@AV+>@ @@#R')@6!/K@AV+>@ @@#R')@6%/K@AV+=@ @@#R')@6$9?E@@@/,0@2_NI )@@G@@C/@@@,/,0@2C@G@@@'=@@@IC/@@\)/,0@1OC8@@5K/,0@3)CW@@0 :8@@@[/K@AWBNK )@@G@@(0@@\1/K@AWBC/@@@[/,0@2?C/@@@(/,0@2 : LAPSE ENTRIES EXIST & : NO BACKUP EXISTS $ : NZ )@@G@@BACKUP NOT CURRENT * : FILE MARKED FOR DELETION OR ASSIGNED WITOA )@@G@@H 'U' OR 'C' OPTIONS MAX NO. LAST HIGHEST TOTAL OB )@@G@@ CATALOG BACKUP TAPE OC )@@G@@ CREATED GRAN OPT EQUP ASG REF. TRACK FILENAMOD )@@G@@E ACCOUNT PROJECT DATE NUMBER POS BLK DATE TIME OE )@@G@@------------------------------------------------------------------------OF )@@G@@------------------------------------------------------------@[]@@@@@#@@@OG )@@G@@INSTALLATION@@A@@@ V LHS MVH HS CARD ?? PTP ?? HSP OH )@@G@@MHSP ?? 9300 1004 ?? ?? ?? ?? ?? ?? 0770 CONSOLOI )@@G@@?? ?? ?? ?? ?? ?? ?? CTS WTS CTMC C/SP ?? OJ )@@G@@?? ?? ARB [0@@C [?@@C [*@@C [4@@C [)@@C^[=@@C^[*@@C^[?@@C^[0@@C^OK )@@G@@[4@@C^@@[@@@._____ *UNL* ***BAD MI SEC 1****NONE*INIT. RES.: OL )@@G@@ GRANULES: @@[@@[GROUP MORE &PACKS:& REELS:& BACKUPS:& LAPSE OM )@@G@@FROM & AT & TO & AT & UNIT: & REELS: & INDEX: & CURRENT: & NEXT: &ON )@@G@@NOISE: &FILES EXTENDED: & BLOCKS EXTENDED: &8-BIT PACKED & 6-BIT OO )@@G@@PACKED & QUARTER WORD & DATA CONVERSION &BCD/EBCDIC & XS3/ASOP )@@G@@CII (MSA) &XS3/EBCDIC (MSA) & FD/ASCII (MSA) & FD/EBCDIC (MSA) &OQ )@@G@@HDW MODE: & TRANSLATOR: CPU = &, TAPE = & & @@[@@]@@[@@O@@]@@Q@@]@@COR )@@G@@@@[@@C@@]@EYSEC @@W@@@@@@@@@ SNAP OF DAD ITEMS CURRENTLY IN PCT FOLLOWOS )@@G@@S @]C@9XFIRST GRANULE IN THIS GRANULE ITEM: & ALL & WORDS = & OT )@@G@@@@@@@@@@@@@@LI0 LI1 MI0 MI1 MI2 DAD GTB @[@@@@SSTAB POLISHOU )@@G@@TRANS BRKTBLBRKPNTINVALU@@[@@@N8K@@GC80@5K/,0AUFC8@@@#[@@@C@C8@@@[&;@)@@OV )@@G@@C8KA&L'=@@[DN8K@@]C80@5U/,0AUFC8@@@#C@K@C[[@@@C@/KH@@@/ 0AUKC8)@@GC8K@@]OW )@@G@@[?!@5U8#KAUI&;0@@[C@J)@@'=@@@I8KKAUL/KF@@@*4@@\!/K@AVI0@@@!3/K@AW%C8C@@@OX )@@G@@(0@@\!/,0A5D/K@AVD/^@AVK CC@[P @@@@U ?@@\\*4@@\1/K@AU%C4C@@D%8@@@.:8@@@"OY )@@G@@^#0@@U!8@@@K/K@AU4/K@AU0C4C@@D/@@AU4:8@@@)^#0@@U%8@@@[/K@AU40W@@0 /K@AV OZ )@@G@@^38@[P/K@AU6*W@@0 ')@@0"*W@@0@')@@0_*W@@\//#)AV *4@@\1/K@AV]CWK@0 :8K@@[PA )@@G@@(0@@\1/K@AV]%0@@\1/K@AV *4@@\\/KD@@@/K@AUT @@@'I(@@@!3/K@AUT/K@AW7(0@@\!PB )@@G@@/K@A'^*0@@\\/K@BJ\/K@A93 4@@\! ?@@\\ @@@@T*0@@\!/K@AVP @C@[# @C@[E ^C@[PPC )@@G@@*4@@\1/K@AVYCWC@@*(0C@[P+8@__Z*0C@[P)8@@@)[WS@@*C0C@@!(W@@0B/K@AV<')@@1[PD )@@G@@/K@AUT(W@@\8/K@AV$')@@1@/K@AUT=8@@@K^$8@[P=8@@@)^78@[PCWC@@*=8@@K@^#0@@TPE )@@G@@C?C@@,C@S@@,;?@@@G[CC@@,C?C@@\C@S@@\;?@@@G[CC@@\*?@@\!/BKAW#**@@\\/K@AV.PF )@@G@@*0@@\\/K@AV./K@AV_/BKAW#/B)AW#/ 0AW[/#)AWK/B)AW#/#KAWK*0@@\!/KD@@@CWC@@*PG )@@G@@>8@@]@/K@AWG^<8@[P @@@@T @@@@U/K@AWKC8C@@8C@S@@(/,0A6"/K@A'^*4@@\\/K@AXNPH )@@G@@/KD@@@*W@@\4/K@AWX9"R@@@/K@AWU(4@@\\/K@AXN/K@AUT(4@@\\/K@AUT/K@AV R]0@7MPI )@@G@@*W@@0ER]0@7N9,R@@@;AV)@@+])@,X+]K@,W9&)@C;9')AWR$'0@[]/K@AW)/K@AWU/K@AUTPJ )@@G@@9%S@@#9?@@CX9*C@@[C8C@@[/,0A8O/K@A'^/@@AW7[@@@@HC8C@@@/,0A6(@ @@ /K@A)8K@@C')I)7;C8@@@R=8K@@[')I)7;C8@@@V=8K@@K')I)7;C8@@@G=8K@@)')I)7;C8@@@WQI )@@G@@=8K@@]')I)7;CSC@@!*4@@\0H8@@@[/@@A-=C8@@@A=8K@@^C8@@@X*=@@\0C=@@\0*)@@\0QJ )@@G@@C8@@@T')I)7;(0C@[P/K@A+L(*C@@1*WC@@1/K@A-2C0S@@0C8@@@E=8K@@K')I)7;R68@@0QK )@@G@@C4F@7R=8K@@)C0F@7R/K@A+BC*S@@1C8@@@E=8K@@)')I)7;C8@@@I=8K@@^')I)7;(WC@@1QL )@@G@@/K@A+#C4C@@!!8@@@F!8@@@I/K@A+#CWS@@1;CK@@EC?H@7R/K@A+BC*C@@1+8@@@S;CK@@#QM )@@G@@C4H@7R')I)7;C?S@@1C8@@@J=8K@@)')I)7;*4@@\1/K@A+!C4C@@!C@W@,*/K@A+!*4@@\1QN )@@G@@/K@A+*C4C@@!?8@@@)/K@A+SC@W@6;/K@A+!C@W@,A%8@@@S:8@@@X/K@A+X/K@A+=(?C@@EQO )@@G@@/K@A+=C8)@,$:8@@@SC8)@,>G?*@@EC@Y@@@+@K@8AC4C@@(=8@@@CC@K@@I/#)A+!(OC@[DQP )@@G@@/K@A+!C@S@[E/K@A+\*4@@\1C@S@@%C@)@8B;^K@@Y[)K@C [@)@CAC/@@@L/,0@2&C^C@@:QQ )@@G@@C8K@@^/,0@4QC/@@@Q/,0@2&C@C@@,/,0ASM*0C@[P/K@A@C@@@8HC@K@8BQY )@@G@@;^@@@Y[)@@CP[@K@CQC8@@@&[)@@CE/K@A>@(@C@[#/K@A=OC/@@@[/,0@2?C8C@[#C8K@@AQZ )@@G@@/,0@3CC/@@[2/,0@2&CSC@[]C8K@@#/,0@4QC/@@[5/,0@2&C^C@[[C8K@@^/,0@4QC/@@@[RA )@@G@@/,0@2?C4C@[@C8K@@]/,0@3_C0C@[@C8K@@]/,0@3_C/@@[_/,0@2&C@C@[@/,0AR'C8@@@&RB )@@G@@/#KA=_0WC@@*/K@A>@C8@@@$*@C@@&[)@@CECWS@@*C8@@@>=8K@^@[)@@CEC8@@@*=8K@@[RC )@@G@@[)@@CEC@@@C]/,0A&; @@@\,(0C@[P/K@A>LC^C@@0/@@A><*)C@[PRD )@@G@@/K@A>SCOC@[D/@@A>SH8@@@[[4@@\,/[0A>YCWC@@_/@@A>8@@^@/K@A>!(@C@@2*WC@@1/K@A>1**C@@1/K@A>!RF )@@G@@C0C@@0+8@@@J/^KA>1(@@@\,*0@@\0/K@A>1/K@A>2/K@A$^(0C@[P(W@@\6/K@A&0C/@@\)RG )@@G@@/,0@1OC/@@@ /,0@2&C8@@8IC8K@@G/,0@3CCCC@@0/,0@41C8@@@T0@C@@(C8@@@P/,0@28@@@)/K@A*BR[@@9R&')@@U/,)A?!/K@A*BC@@@C]RT )@@G@@/,0A!+CU@@\,/]@A*1C/@@\)/,0@1OC/@@@ /,0@2&C8@@8O/,0@3)C8@@8T/,0@3)C/@@@NRU )@@G@@/,0@2&C@C@[^/,0@2.H'@@@[/]@A*\C8C@@8/K@A*&C8@@EQ/,)A!A/K@A*\C4@@EX>8@@@KRV )@@G@@/K@A*>R[@@9S&')@@V/,)A?!/K@A*>C@@@C]/,0A!+C2@@\,/]@A(VQ9C@[ &9@@@]/,)A( RW )@@G@@$9C@[B/K@A*5C8C@@8/K@A*;C8@@EQ/,)A!A/K@A(VC4@@EX>8@@@C/K@A*'R[@@9T/,)A( RX )@@G@@$9@@E0/K@A([/K@A*'C/@@\)/,0@1OC/@@@ /,0@2&C8@@8V/,0@3)C@^@@@/,0ASM/,0@3XRY )@@G@@C@^@@@/,0AR'/,0@3XC@^@@[/,0ASM/,0@3XC@^@@[/,0AR'C@@@C]/,0A!+H'@@@[/]@A(VRZ )@@G@@/KE@@@*0@@\!*0@@\0/K@A($C=@@\!=8@@@)/K@A($C8@@@ *4@@\0C8@@@R[0@@')C8@@'ZSA )@@G@@'=@@@J(0C@[P/K@A??(0@@\0/K@A:>C/@@\)/,0@1OC/@@@ /,0@2&C8@@8)/,0@3)C@@@'4SB )@@G@@/@@A(;/,0@2.(@@@'5/K@A%HC/@@@,/,0@2(WC@@1/K@A??C/@@\)/,0@1OC/@@@ /,0@2&C K@'\>9K)@@SI )@@G@@/K@A:EC8@@80/,0@3)/K@A:L>9KK@@/K@A:JC8@@83/,0@3)/K@A:LC8@@86/,0@3)C4@@'!SJ )@@G@@!8@@@F/K@A:W=9K]@@/K@A:SC8@@89/,0@3)>9K@)@/K@A:WC8@@8//,0@3)C8@@9G/,0@3)SK )@@G@@;(K@@U;DK@@+C@@@@L/,0@41C@@@C]/,0A!+/K@A??(*C@@1*WC@@1/K@A?DC1C@@0+9@@@JSL )@@G@@/ KA:!(@C@@2/K@A??C/@@\)/,0@1OC/@@@ /,0@2&/[KA?@C8@@@@=9K@@CC8@@80=9K@@^SM )@@G@@C8@@83=9K@@]C8@@86*@@@@G/,0@3)C8@@89=9K@@[/,0@3)(@C@@2/K@A?%C8@@9I/,0@3)SN )@@G@@C@C@@2/,0@2./,0@3XC@C@@3/,0@2./,0@3X/K@A?%(WC@@1/K@A??C/@@\)/,0@1OC/@@@ SO )@@G@@/,0@2&C8@@@@CXS@@1=9K@C@C8@@80=9K@^@C8@@83=9K@]@C8@@86*@@@@G/,0@3)C8@@8/SP )@@G@@=9K@[@/,0@3)C8@@@@=9K@@)C8@@8_=9K@@KC8@@9]=9K@@CC8@@9A=9K@@^C8@@9D*@@@@GSQ )@@G@@/,0@3)/-KA?%C8@@89/,0@3)C@@@C]/,0A!+/K@A>2C/@@@,/,0@2C8K@@]:8C@@WC8K@@@/K@A!XCWK@'&G8K@@[[WK@'&C8@@'+'=@@[P/CE@@[/KE@@@SV )@@G@@'=@@@IC@@@C@G8@@@[[@@@C@?8@@[E/KF@@@ @@@C@AA0@C[/K@AU^ @@@9W*?@@\\/K@A,NSW )@@G@@>8)@@[/K@A!7C@@@92[@@@9UC8C@@@[^@@9V/,)A2]C=)@\!^#0@9W=8)@@]0@C@@@/K@A,NSX )@@G@@*)@@\0/K@A,N*0@@\!/K@A,^C@S@@@C8@@EQ/,0A7U/K@A'^C=)@\!/K@A,G&;@@W@Q;@@EQSY )@@G@@[@@@'>^Z0@'&C8@@'+'=@@[P0@@@@G'=@@@QC@@@93[@@@9UC8@@EQ[^@@9V/,)A2]C=)@\!SZ )@@G@@^#0@9W>8)@@^/K@A,WC@@@94[@@@9UC8C@@W[^@@9V/,)A2]C=)@\!^#0@9W*)C@[P/K@A\LTA )@@G@@/B)A,)/#KA\L>8)@@C/K@A,(C@@@95[@@@9UC8C@@8[^@@9V/,)A2]C=)@\!^#0@9W=8)@@KTB )@@G@@0@C@@8/K@A\L*)@@\0/K@A\LC@@@96[@@@9UC8@@EQ[^@@9V*0@@\!/K@A\BC@S@@8C8C@@8TC )@@G@@/,0A7U/K@A'^C=)@\!/,)A2]C=)@\!^#0@9W0@C@@8/K@A\LCC@@9UG8@@@[[C@@9U(0@@\!TD )@@G@@/K@A,4CW@@'&G8@@@[[W@@'&/K@A\G&;@@W[Q;C@@8[@@@'>C8@@@][W@@'&C8@@'+'=@@[PTE )@@G@@0@@@@G'=@@@Q/K@A,9>8)@@)/K@A0XC@@@97(4@@\1C@@@98[@@@9UC8C@@W[^@@9V*0@@\!TF )@@G@@/K@A\>0@C@@W/K@A0XC8C@@WC@S@@W/,0A7U/K@A'^/,)A2]C=)@\!^#0@9W/K@A\V()@@\0TG )@@G@@/K@A0A**@@\0/K@A0XC8@DAD(4@@\1C8@GTB[^@@9YC8@@9>C@G@@@'=@@@I @@@;H/,)A8CTH )@@G@@/K@A0X*4@@\1/K@A0][@)@@EC/@@\)/,0@1OC8@@9&/,0@3)C@@@@E/,0@41C8@@99C@G@@@TI )@@G@@'=@@@IC8@@C]C@G@@@'=@@@I/,)A2]C=)@\!^#0@9W/K@A\1&;@@W]Q;C@@W[@@@'> W@@'&TJ )@@G@@C8@@'+'=@@[P0@@@@G'=@@@Q/,)A2]C=)@\!^#0@9W0@C@@W/K@A0RCW@@'&G8@@@[[W@@'&TK )@@G@@/K@A0EC8@@@ *4@@\0C8@@@R[0@@')C8@@'Z'=@@@JC@@@99*@@@9W'=@@@I/K@A&3TESTS TL )@@G@@= & AOX = & POLNTH = & SORT = & BRKCNT = & C/@@\)/,0@1OC8@A0-TM )@@G@@/,0@3)C*@@\\/,0@41/,0@3XC)@@\1/,0@3?/,0@3XC*@@\1/,0@41/,0@3XC0@@\\/,0@41TN )@@G@@/,0@3XC@@@0//,0@41C8@@C#C@G@@@'=@@@IC@@@9'[@@@9UC8@@E2[^@@9VC8@@],[C@@9VTO )@@G@@/,)A2]C=)@\!^#0@9WC@@@9;[@@@9UC8@@H)[^@@9VC8@@@X[C@@9V/,)A2]C=)@\!^#0@9WTP )@@G@@C@@@9/[@@@9UC8@@H.[^@@9VC8@@@X[C@@9V/,)A2]C=)@\!^#0@9W(@@@0//K@A18C@@@9.TQ )@@G@@[@@@9UC8@@0([^@@9VC8@@@M[C@@9V/,)A2]C=)@\!^#0@9WC@@@9"[@@@9UC8@@0*[^@@9VTR )@@G@@C8@@@[[C@@9V/,)A2]C=)@\!^#0@9WC@@@9_[@@@9UC8@@0;[^@@9VC8@@@[[C@@9V/,)A2]TS )@@G@@C=)@\!^#0@9WC8@@99C@G@@@'=@@@IC)@@\!:8@@@_/K@ARMC8@@@[&;@)@@C8KA=\'=@@[DTT )@@G@@C/@@\)/,0@1OC8@@9UC8K@@A/,0@3CC/@@@[/,0@2?C^@@9VC8K@@A/,0@3'C8@@C#C@G@@@TU )@@G@@'=@@@ICC@@9V+8@B__/@U@@@[CK@9VR[@@'@O @@9V?8K@@^/K@A2:H8K@@[[@K@[[R#)@@^TV )@@G@@C@I@@@3@I)@[/K@A2Y/K@A2:C/@@\)/,0@1OC8@@9!/,0@3)CC@@9V/,0@41/,0@3XC@^@@@TW )@@G@@/,0@3?C8@@C]C@G@@@'=@@@I/KE@@@C@@@99*@@@@N'=@@@ICC@@9V;G@@@=C8)@@ *@@@@NTX )@@G@@C8)@@C[@)@91W@@@@I*@@@@HG8@@@[H8@@@[[@@@[^C9)@@@/K@A3AC@@@[^/@@A3AN@K@91TY )@@G@@C@@@90R#K@@^3@H)@@/K@A3#/K@A3AC9)@@[O[@@91/K@A3+C/@@\)/,0@1ON@)@@MC9)@@@TZ )@@G@@C8^@@@H^@@9VC8K@@^/,0@3'C/@@@[/,0@2?C8@@@ *@@@[]C8@@@*/,0@2@@TE %@@TNE:@@TLE?@@TNG?@@UH )@@G@@TG !@@DTE@@@W [=@H2 NM@H1 [M@XH2NM]XH1[M]T3 TG]T2 HG]T1 [G]S6 ZA@S5 TA@UI )@@G@@S4 NA@S3 HA@S2 BA@S1 [A@LI0@@@@@@@ABQUA@G[)[@@AAFIL@G#)[@@AAPRO@G )@@@AAUJ )@@G@@MI0@@@@@@[ABACC@GB)@@[AADISHAF@@)[ABHDWHAF@@K[ABWRNHAF@@C[ABBBTHAF@@^[ABUK )@@G@@UNLHAG@@)[ABBAKHAG@@K[ABLAPHAG@@^[ABBM1HAG@@][ABOLDHAG@@[[ABMASG G@@)[DBUL )@@G@@TAPGAG@@)[ABREMGAG@@C[ABDROGAG@@[[ABPOSHAH@@)[ABWADHAH@@C[ABTYP@BI@@@[AAUM )@@G@@ASG[BJ@]@[ABEQUHBL@]@[ABGOPGAL@@)[ABVOPGAL@@K[ABPUBG L@@C[DBPRIGAL@@C[ABUN )@@G@@XUSGAL@@^[ABWRIGAL@@][ABREAGAL@@[[ABFCY BL@#@[ABREF]DM@C@[ABCAT]DN@C@[ABUO )@@G@@REE@BU@@@[AAMI1@@@@@@]ABNBRGBB@]@]ABBTB[FD@]@]ABBFPABE@]@]ABBAC@BF@@@]AAUP )@@G@@PAC@BM@@@]AASIZ[FW@]@]ABLI1@@@@^@#ABMI2@@@@^@^ABGTB@@@@^@ ABDAD@@@@^@ ABUQ )@@G@@ALL@@@@^@AAB@@@@@[@@@@@^@@@@@C@@@@@]@@@@@K@@@@@)@@@@@_AND]^@OR #C@XOR^K@UR )@@G@@NOT )@#AA[@@_@[@[C#AA[@@_@#@[C#BAT@@_@!@@G#@@@@@_@@@@@@@]@@@@@@@@@@@@@@@US )@@G@@MAX # OF NESTED BREAK'S EXCEEDED: EXCESS TREATED AS SORT'S. @]E@70@@@@@@UT )@@G@@@@@@@@SORT /K@AW2SNAP /K@AWYBREAKD /K@AW=BREAKDN UU )@@G@@/K@AW>BREAK /K@AW$BREAKN /K@AW*SORTD /K@AW1@@E@8P@@J@@@UV )@@G@@@@@@@@SITE: A MAXIMUM OF ONE PRIMARY ATTRIBUTE OPTION MAY BE SPECIFIED. UW )@@G@@@]E@8>UNDEFINED OPTIONS: & - IGNORED& @]E@86@&E@86@@@@@@[[@@@@@@@@@@UX )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[@@@@]<@9BF @@[@E2@@@@@@@@#__/@@]__.UY )@@G@@@@[__"@@@_@@%@ )@]9/ )@]/,0AZJ9?C@@@@@[@@[9@@@0P@@[@.Y@@[@C2ILLEGAL USE UZ )@@G@@OF PRIVILEGED OPTION @]A@;;@@)@@BC4]@@@C0]@@@C?]@@@C*]@@@C=]@@@C)]@@@VA )@@G@@C4]@@[C0]@@[C?]@@[C*]@@[C=]@@[C)]@@[ 4@@,W 0@@,W ?@@,W *@@,W =@@,W )@@,WVB )@@G@@ 4@@,X 0@@,X ?@@,X *@@,X =@@,X )@@,XCW@@/-CS@@/-CO@@/-[=@@\&[)@@\&[*@@\&VC )@@G@@@@@@@@/S@@@@@[[@/-@[]@/&A>-@/-ENTER DATE: PARAMETER: DATE SPEC ERROR VD )@@G@@PARAMETER ERROR @@#@/2@@S@@@@@P@CX@@H@CV@[#@/%@[#@/!@@[@@@K@@@@@@@@@@@VE )@@G@@@@@@@@@USE @@@@@@@@@@@@, N;0@@[R'@@D@[[K@D'9(@@@U;:0@@EC9)@@@C/@@9[VF )@@G@@/,0@1OC8@@80/,0@3)R])@;%'F0AUI*^E@\2/K@AUHC9)@@[C8E@@A/,0@28@@@[G8\@@@WB )@@G@@;*)@@CG8)@@C;?)@@M;C0@@MC9@@@@>8@@@[/K@AYRC*J@5,H8@@@[;*@@@MQ;@@@=H=J@5,WC )@@G@@[@@@@KC@0@;30WD@5.C@0@;4C?T@5./@KAY+C=D@5/%8@@@A:8@@@ /K@AY-/K@AY+C@0@;5WD )@@G@@C@@@0*/SG)@@9*?@@@[@W@@#CCT@5/&#K@@X[@W@@^C0K@7\[0W@@^[[G@@ [@@@0*C@@@0/WE )@@G@@G8@@@[[@@@0/*?D@5./K@AWB(?D@5./K@AY;C@@@.Y;C@@@A*8G@@@/,)AQT*4@@.Z/,)AQTWF )@@G@@^70@.Z**@@.Y/K@AZE*=D@5/(4@@.Z/K@AZ C=(@5/CCI@5-[C@@.>^:0@.Y/K@AZE*@@@7;WG )@@G@@/K@AWB*^@@7,/K@AWB/,)AQTC*@@\\T8@@@A[@@@@AC@@@5Y[@A@E2C@@@5Z[@A@E4C*@@\1WH )@@G@@[@A@E7 @G@H)G8@@@[[*@@\1R')AZ%C8)@@@C?@@.Y/@@AZ>!8@@@#/,)AQTG4)@.=H8)@@0WI )@@G@@0@@@@I/,)AQT:8@@@[/K@AZ>T8)@@EG0)@.=H8)@@0G)(@5/C*D@5.T8@@@WG@)@@G/KE@@@WJ )@@G@@[^&@E2CC@@.>N8K@@GC@0@;%2CJ)5+/,)AQTC'\@@@%')@@G/K@AZ.*=@@.Y/,)AQT(4@@.ZWK )@@G@@/,)AQTC@@@5-G@@@@A[@A@E4CC@@;6[CA@E2/K@A)LC*J@5-[4A@E4*=@@.Y/K@A)^C*D@5/WL )@@G@@/@@A)L/K@A)ECC@@.&N8K@@IC@K@;12CH)5\/,)AQTC8H@@@C)W@5,=8K@@[/K@A)L;*@@@CWM )@@G@@)CA@E2[CQ@E2;C@@@C9?)@.$(4@@.Z;G)@[C9*&@E5:')@@G/K@A80@@[ @A@E3WO )@@G@@C@@@5)[@A@E6C00@.Z/@0A)"H80@@[CC@@.(:8@FD /K@A);C8K@@@R8)@.(R@K@;%')[)5MWP )@@G@@!8@@@0!8@@@8/,)AQTC@)@@G;*)@@-;?K@@#8#0A)1[@Q@E6/K@A)"CWD@5.=8@@@]/,0AQTWQ )@@G@@?')@@ /K@A8@@@C/K@A+1*0@@.Z/,)AQTC40@.Z%80@@A/K@A-5 @A@E5R8)@.$R@K@;%WS )@@G@@/,0A-$!8K@@[!8K@@H/,)AQT[=Q@E5/,0A-$!8K@@[!8K@@)/,)AQT[)Q@E5/,0A-$H8K@[@WT )@@G@@!8K@@@!8K@@2/,)AQT[*Q@E5/K@AXF )@@G@@9*I)0R9?@@7$9*I)0R9?@@7(9*I)0RC@@@;8[@I@0RC8@@@[/,0A(N/S@@@@C@@@;9C@K@;'XG )@@G@@N8K@@IM#W)@@C8@[]B/,0A([/K@A=M9*@@D8C8@@@][?@@\1H80@@[R8)@D8R@K@;%')[)5MXH )@@G@@!8@@@)/,)AQT(?G@\?/,)AQT]WG@\?8#0A=D/K@A=M'=@@@I/K@A=NC@@@.E'=@@@4C0@@C-XI )@@G@@=8@@@)^:0@\!&;@C@[C8K_8@B_@A=VCC!@#YG8)@C[G8!@@@9?"@@@B_@A=)9*0@CX9*0@C,XJ )@@G@@C@@@.F'=@@@UC@@@D'+@@@/]/@KA=((*@@\!/K@A* ()@@\!/K@A=\C8@@@]&;@)@@C8KA0:XK )@@G@@'=@@[D*)@@\1/,0AQ%C@@@/+0W@@0 [@@@0"CC@@0_G8@@^@0W@@0@[C@@0_C8@@@!0W@@\5XL )@@G@@[4@@1^C8@@@=0W@@0#[4@@1]0W@@0B[4@@1[0W@@\8[4@@1@C8@@@00W@@0A[4@@1#*W@@\5XM )@@G@@/K@A>E*W@@0#/K@A>>/K@A>8C8@@/='=@@[][@@@@HC8@@/-C8)@@]')I@/VH8@@00;G@@@A;CK@@YT8@@@EG@@@@H:8)@@]H8@@[@')I@/Y8#)A>OXO )@@G@@*W@@0#/K@A>>/K@A>8C@@@.G/K@AQRC@@@.H/K@AQRC8@@/*[^@@/=C8@A><[C@@/>C8@@/=XP )@@G@@'=@@[][@@@@HC8@@/<[=K@\1^#0@@N*W@@0^/K@A&[:;)@@^*W@@\./K@A& C@)@D'=@)@.J/K@A& @@@@NXR )@@G@@CW@@\9-8@@@[[WK@\9(W@@\9*W@@\;/K@A&L/ 0A&H*W@@0C*W@@0^/K@A&H/K@A&LC8@@@]XS )@@G@@&;@)@@C8KAT;'=@@[D(?@@\!/K@A&!C8@@@][?@@\1C?K@\!H8K@@[R@K@.IC4@@\?%8@@@-XT )@@G@@/K@A&+(@@@@H/,)AQTH8L)@[C4)@1 C40@1A[40@1 [4)@1AR8)@\?C80@@@')[)/#H8@@@0XU )@@G@@0@@@@G/,)AQTT80@@EG@0@@G8#KA&=C8)AY#/K@A&0C8)AYM*W@@0AC8)AYK9*)@!6*W@@0EXV )@@G@@^Z0@\4*4@@\!/K@A$3R]0@.IN8K@@UC8@@@[[?@@\12WF)\2'=@@@Q/KFK\1R98@@[C80@@LXW )@@G@@/K@A$[R98@@ C80@@]^70@\\/K@A$ R98@@@@A?&/K@A*9>@@A?$/K@A?PC8H@@@?8I@@@/K@A*(YG )@@G@@C@@A?>C8K@@#/K@A(@C@@A?UC8K@@[/K@A(@[@@@.LC@@A?)C8K@@]/K@A(@/K@A?OL8@@@[YH )@@G@@C@)@.KG8)@@[*@I@@@?CY@@@/K@A(DG),@@@/K@A(#%CI@@@/K@A?OC)"@@@H80@@[T80@@AYI )@@G@@G="@@@9?I@@[?80@@BC@KA?*/K@A?P;CK@@=;^@@@%(@@@@HG8K@@[[@K@[#;C@@@Y[@@@[[YJ )@@G@@C^@@.KG8@@@[(@@@[[/K@A%QC9K@@[ @@@.ZN8)@@@C@W@@@/@KA%E;CK@@Y*@@@@H?@K@[#YK )@@G@@/K@A('%@K@[#/K@A%E%1W@@@/K@A%EC?W@@@!8K@@A/K@A(.%(K@.Z @@@.Y[(K@.Z9??@@[YL )@@G@@C-G@@@:9@@@[C@0A?*')HA%/H9@@@[T9@@@AG>G@@@')HA:^G)G@@@G8@@@[/K@A(-:9K@@[YM )@@G@@/K@A%]C*?@@@:8)@@.N8)@@[%[K@[[/K@A('/K@A(1%@)A?*[5@@.Y:@)A?*[-K@.Y/K@A('YN )@@G@@(@@@[]:(K@.Z/K@A%J[(K@.Z @@@.Y:[K@[[/K@A%TG9K@@[(@G@@@/K@A%Q!4W@@@/K@A()YO )@@G@@ @@@.Y @@@.Z/K@A?O:(K@.Z *@@.Z9?K@.Y98KA?OC8@@@-[=@@.Z(?@@.Z/K@A?PC@@@.:YP )@@G@@D8)@@@C80@@@C!@@.Z8^@A%?1@@@@I!8)@[@C80@@E[))@.Z[=0@.Z/K@A?PC8K@@@;=@@@AYQ )@@G@@?8K@@'?8K@@0/K@A%7(@@@@JC80@[@H8K@@0T8)@@EG8!@@@/K@A%>/^0A%*%8K@@+:8K@@-YR )@@G@@C8.@@@/@0A%*/K@A%>9*)@.)9*)@.+[@)@.=[@)@.>[@)@.&9*)@.$9*)@.([@)@.:/K@A% YS )@@G@@[1@@.Y[!@@.Y[(@@.Y[>@@.Y[5@@.Z[1@@.Z[!@@.ZC80@@F+8K@@_:8)@@ ;^@@@A8#0A:IYT )@@G@@9*@@.NQ;@@.Q&;@@@[C@KA?(Q;)@.Q&;)@@[N8K@@BC@0A?*[@")@@8KKA:UN4K@.Y9!@@.)YU )@@G@@/\)A?DC9K@@*(4@@.Y*)@@.Y')H)@@N0K@.Y9!@@.+*@@@[[/K@A:(C[@A?%N8K@@^/\)A?DYV )@@G@@N?K@.Y(@@@[[/K@A:3C9K@@(')H)@@C[@@.=/\)A?DC9K@@)')H)@@(*@@.Y*=@@.Y/K@A:'YW )@@G@@&;@@@GQ;@@.M'=@@@J/K@A?OC9K@@/')H)@@N*K@.YC[@@.>/\)A?DN=K@.Y(@@@[[/K@A:6YX )@@G@@C9K@@/')H)@@C[@@.&/\)A?D/K@A:6;>@@@A')H)@@8KKA?B/KI@@@[5W@@@[1W@@@[!W@@@YY )@@G@@[(W@@@[>W@@@/\0A?L[-W)@@Q;KA?F/KJ@@@/KF@@@/KF@@[PROCESSOR CALL ERROR YZ )@@G@@@[^A?QABNORMAL RETURN FROM READ$ @[ A?VTOO MANY SPECIFICATIONS @[^A?-ZA )@@G@@]@@@@@[@@@@@ @@[A?FTPF$ @@@@@@@@@@@@@@@@@@@@E@C@@@E@CV@@E@EP@@E@IUZB )@@G@@@[F@!,@@7@\)@^*@0*)@L@CE)[0@C>)#;@EZ)ZE@I=)@$@,9)@L@0R)C0@5K@@@___@@,A@@ZC )@@G@@@^QAP>)O7A@,)) AT;@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___@@@___ZD )@@G@@@@@@@@@@@@@@@[Q@C^@]Q@C^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@DIAG$ ZE )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZF )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@POLISH NOTATION ERROR @@@@@@@@@@@@ZG )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0@ZK@IY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZH )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZI )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZJ )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZK )@@G@@@@@@@@@@@@@@____________F2 FB F4 F8 F17 F14 F40 FCS ZL )@@G@@F3 F60 F24 8C7 6C7 8CB 6CB 8C9 6C9 4C 4CB U12 ZM )@@G@@U16 12N 16N 20N 3A 2A @@@@@@@&R@C^@@@@@@[[@@@@@@@@@@@@@@@@ZN )@@G@@@@@@@@@@@@@@DIS@@)HDW@@KWRN@@CBBT@@^BMI@]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZO )@@G@@@@@@@@@@@A$#@@@A&9@@@A&9@@)A&9@@@A&9@@@A$P@@)A&9@@@A&9@@@A$P@@@A&9@@@A*BZP )@@G@@@@@A&9@@@A&9@@@A&9@@)A&9@@@A&_@@@A&/@@)A&9@@@A&9@@)A&9@@)A&9@@)A&9@@@A&9ZQ )@@G@@@@@A*#@@@A&9@@@A$1@@@@0G8@@@0P[@@@[QN@@@1FN@@@1H+@@AP"<@@BJ00D@F@@9@@@0GZR )@@G@@@@@@0P3@@@@@__9@0;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZS )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[@@[@@@@@@@@@@@@ZT )@@G@@/K@AV /#)AV >8@@@)>8@@@K>^H@\&1WC@@*?@K@@G!#0@!7?#0@!7OUTPUT IN DATAFILEZU )@@G@@ & XA XB $MFD$ @@[@@@@[^@IUK@@@@@A^W@@#A@?@@^ZV )@@G@@A@/@@ Q8W@@@ ?[@@]R@)@5HQ^1@@@&80@@]C?-@@@+8)@@B;C)@@#9?@@5I/K@@1>9*#)@@ZW )@@G@@9*#)@@9*#)@@9*#)@@8#)@1-C8)@@G&80@@[N@K@@JM@")@@Q^1@@@/KF@@@A^W@@#A@?@@^ZX )@@G@@A@/@@ Q8W@@@&8)@@[Q4-@@[&80@@[Q01@@[O^1@@@/KF@@@A4-@@[P^1@@@A01@@[C8[@@@ZY )@@G@@C0L@@[C8+@@@/@)@1_%8)@@AG8K@@[Q^L@@#R@?@@^R@/@@ /KF@@@[4<@@@[0<@@@[?<@@@ZZ )@@G@@[*<@@@[=<@@@[)<)@@[4<@@@[0<@@@[?<@@@[*<@@@[=<@@@/?)@2J[)<)@@A^-@@]Q8)@@@AA )@@G@@/K[K@]C4!@@@C0!@@@C?!@@@C*!@@@C=!@@@C)!)@@C4!@@@C0!@@@C?!@@@C*!@@@C=!@@@AB )@@G@@/\@@2ZC)!)@@[^[@@]Q;@@@@/K[K@]C8?@@@')])2#/KF@@@;G@@@=W8@@@AG^[@@@Q8!@@@AC )@@G@@Q8/@@@/KF@@@C8M@@@!8K@@AH8K@@AG@@@@HC8N@@@H^L@@@T8K@@AG8H@@@/K@@2&C8M@@@AD )@@G@@!8K@@AH8K@@AC8#@@@H^[@@@T8@@@AG@@@@H/KF@@@C80@@ /K@@3@C80@@F;^@@[]+8K@@_AE )@@G@@%8)@@ :8)@@@/K@@3A')])2#8#0@3@/KF@@@C8.@@@;G@@@M;CK@@M&;@@@[&;K@@[/K@@3KAF )@@G@@')G)2N')])2#8#0@3I/KF@@@C8.@@@;G@@@M;CK@@M&;@@@[&;K@@[/K@@3V')G)2N*@@@@IAG )@@G@@')])2#8#0@3S/KF@@@C?[@@[C^L@@[/K@@3+;G@@@M;CK@@M&;@@@[&;K@@[')G)2N:0-@@@AH )@@G@@/K@@3(')])2#/K@@3=[?[@@[[^L@@[/KF@@@C80@@@;G@@@#/@@@34G80@@[;G@@@#/^@@3\AI )@@G@@C8)@@0')])2#C8)@@@;=K@@#G8)@@0')])2#8#0@34/KF@@@C8.@@@T8K@@#;GH@@@H80@@[AJ )@@G@@/K@@34N8X@@@C80@@@/C@@4AC8)@@-')])2#D@@@@G8KK@4A;O@@@=W8@@@E;?)@@AG8.@@0AK )@@G@@8KK@4F/^@@4A9?@@@IC8)@@0/K@@4K')])2#8KK@4J+8K@@_')])2#;G@@@A/^K@4L/KF@@@AL )@@G@@N8X@@@&'0@@@C80@@@/C@@4X&'0@@-D@@@@G8KK@4X;O@@@=W8@@@E;?)@@AG8.@@08KK@4+AM )@@G@@/^@@4X9?@@@IC8)@@ /K@@4$')])2#8KK@4&C@)@@F;C)@@M*@@@@I')])2#+8K@@_')])2#AN )@@G@@;G@@@A/^K@4?/KF@@@C80@@@/C@@46C8)@@-')])2#D@@@@G;O@@@=W8@@@E;?)@@AG8.@@0AO )@@G@@/^@@469?@@@I+8K@@_')])2#;G@@@A/^K@4//KF@@@;*@@@AC8N@@@H^L@@@C8+@@@/@)@5CAP )@@G@@%8)@@AG8K@@[G@@@@H;*@@@MQB[@@@'=@@@I/K@@16@@[@@@ @M@@@@@5J@C@AQ )@@G@@@^@@@@@@@@C9)O@@@@@.:@5K@^@@@Z@@@@C])O@@@@@'@@5K@^@@@-@@@@A;)O@@@@@66@5KAR )@@G@@@^@@@<@@@@A,)O@@@@@.&@'[@^@@@>@@@@AR)D@@@@]JY@'[@^@@@$@@@@ Z)D@@@@]K0]JZAS )@@G@@@^@@@(@@@@ M)D@@@@]M6]K1@^@@@:@@@@@]A?%AT;@ @@@@A3$AT;@ @@@@AXNAT;@ @@@@AT )@@G@@A9.A3*@ @@@@BE(A3*@ @@@@BJMBE%@ @@@@DZ-BJN@ @@@@C8@@@[&;@)@@C8KAT;'=@@[DAU )@@G@@*W@@0C*)@@\\/K@AP2C8K@@A/,0ARUC8@@@A&;@)@@C8KBE%'=@@[D(0@@\\/K@AP"*=@@\\AV )@@G@@/K@BJ*C8K@@B/,0ARUC8@@@B&;@)@@C8KBJN'=@@[D*0@@\\/K@BJ0/K@AUP*0@@\\/K@BJ%AW )@@G@@/K@AY4 @@@0.C8@@@#&;@)@@C8KAT;'=@@[D(0@@\!*W@@\"/K@AQF/,0A32(W@@0C'=@@@DAX )@@G@@C8@]K+/,0BH"'=@@@)C/@@\)/,0@1OC8@@1B/,0@3)9?@@1J/,0@2_C@@@C#'=@@@I'=@@@DAY )@@G@@C/@@\)/,0@1OC8@AQ>/,0@3)C?@@\1/,0@41/,0@3XC8E@@@C8K@@A/,0@3'C@@@C]/K@AQRAZ )@@G@@SPEC & ERROR DETECTED AT & **@@\1(*@@\\/K@ARCN*K@\18KKAQ\R@K@1LR@)@1LBA )@@G@@C@[)H)!8@@@]/K@ARA(8]@@@/K@ARCC@M@H/[@K@@I:8K@@ /K@AQ.!8K@@]/K@ARAC@+@H;BB )@@G@@H8)@@]')IARNC@@@@HP8)@@[%8)@@#P8)@@[(8]@@@/K@ARR/K@AQ6[@])H.8KKAQ1C@@@1MBC )@@G@@'=@@@I()@@\!'=@@@DC8@@@_[)@@\!C8@@@]&;@)@@C8KA0:'=@@[D'=@@@D+@@@@H)@@@@HBD )@@G@@-@@@@H-8@@@[*@@@[[/K@ARC/KF@@@;*K@@]G8KA@@C0H@@@%8@@@D:8@@@C/K@AR-'=@@@QBE )@@G@@CCH@@[C0)A@@:8)@@M/K@AR!/@@AR*G@@@1N'=@@@,EWXRSRTINT$ D"8DOXRTPDB$ F'@DEXRTPM$ F'[DEXRUTIL$CH )@@G@@ F'&DEXSDFO H*WBBYSNAP H<^@)^@)^@)^@) 0?^@) 0) 0)CK )@@G@@@@[EW)^@,^@)@@[EW)@@[EW)R[1@@FR][@@G9!-@@H9,[@@J9,-@@L9\[@@NC#-@@PN#1@@QCL )@@G@@/K@D+'/\)D+%A[1@@FA][@@G@@@@@$@@@@@^@(N@C@@@@@@J@@@@@^@@[@1N@@@@@MK@@[@^CM )@@G@@@#/@1O@@C@@V@@@@@^@]]@5K@@C@@A@@@@@^@@ @7M@@C@@!@@@@@^@@.@7R@@C@@0@@@@@^CN )@@G@@@[A@8O@@C@[X@@@@@^@@$@9U@@G@[(@@@@@^@[$@5K@@O@@D@@@@@^[PY@'[@@K@@3@@@@@^CO )@@G@@@#&@'[@@^@@-@@@@@^@A:@5K@@^@@=@@@@@^@[P@;;@@^@@YK@@]@^@@W@.K@@S@[?@@@@@^CP )@@G@@@[M]JZ@@W@[)@@@@@^@@K]K1@@W@[<@@@@@^@[6]L[@@@@[C0@@]@ @I(A@,@@@@[L0@@]@ CQ )@@G@@@ ZAJR@@@@@60@@]@ @@\AO6@@@@@$)@@[@ @[5AP>@@@@@J)@@[@ @@)ARU@@@@@P0@@[@ CR )@@G@@@][AR'@@C@@V)@@[@ @@UAT;@@C@@A)@@[@ @^ZAUP@@C@@!)@@[@ @CKAY4@@C@@0)@@[@ CS )@@G@@@A$A$^@@C@[X)@@[@ @ .A!:@@G@[()@@[@ @#TAT;@@O@@D)@@[@ @AGA3*@@O@@G)@@[@ CT )@@G@@@@!A94@@O@@%0@@[@ @J-A'-@@O@@%0@@#@ @@*BE]@@K@@3)@@[@ @AQA3*@@^@@-)@@[@ CU )@@G@@@ESAT;@@^@@=)@@[@ @^IA=N@@^@@Y0@@[@ @^EA*-@@S@[?)@@[@ @@WBE%@@S@[U0@@[@ CV )@@G@@@^HBFA@@W@[))@@[@ @@$BJN@@W@[<)@@[@ @#DBJ'@@W@@90@@[@ @B%BN#@@W@[O0@@[@ CW )@@G@@@YUBU!@@W@[O0@@#@ @#]B9B@@W@[F0@@[@ @^=B/D@@W@[I0@@[@ @A@C@!@@W@@/0@@[@ CX )@@G@@@H7CA!@@W@[]0@@[@ @8BSECTOT @@@@&CBTOT @@@@&^BUNLTOT @@@@&GBVTOT DD )@@G@@@@@@>/CHK000 @[C@@@CHK220 @[C@[;CNT1 @@@@&KCNT2 DE )@@G@@@@@@&OCNT3 @@@@&SDATREF @@@@$&DFINT$ @[;@@@DIRECERR DF )@@G@@@[U@@KDIREND$ @[R@@EDIRINT$ @[R@@TDIRLED$ @[R@];DIRLNK$ DG )@@G@@@[R@#2DIRLUF$ @[R@^?DIRNSEC$ @[R@#QDIRSEC$ @[R@[-DIR$MFDF DH )@@G@@@@V@@IDIR000 @[U@@@DOSORT @[5@@WDSEG @@_@@@ECHAR$ DI )@@G@@@@A@[JECODE @@@@>4ECOLN$ @@A@[-ECOL$ @@A@[MECOPY$ DJ )@@G@@@@A@[4EDAY1$ @[]@@SEDAY2$ @[]@@(EDCFZ$ @@A@]:EDECF$ DK )@@G@@@@A@#]EDECV$ @@A@#XEDITX$ @@A@@+EDIT$ @@A@@@EDIT$T DL )@@G@@@@A@@\EDPACK @@@@$)EFD1$ @@A@[(EFD2$ @@A@[:ELT$ DM )@@G@@@@$@@IEMSGR$ @@A@]DEMSG$ @@A@]GEOCTF$ @@A@]&EOCTV$ DN )@@G@@@@A@]SEQUCD @@@@&YESKIP$ @@A@[SETIME$ @[]@@@FCT DO )@@G@@@@%@[#FFOPT @[C@]OFITEM @@Y@@&FLAG3 @@@@$\FLAG4 DP )@@G@@@@@@$0FLAG5 @@@@$1FOPT @[(@#]FREIM @@Y@@YGALI DQ )@@G@@@[C@@0GBU @[C@]"GOON @[(@]&GOTONE @@V@@HGOTREC DR )@@G@@@[5@@RHDGRTN @@@@@[HDG100 @[ @@@HDG200 @[ @@DIIOPT DS )@@G@@@[C@]=INBLOCKSX @@Y@@8INFILESX @@Y@@7INTMODES @@Y@@9INVALU DT )@@G@@@@@@*;IN1000 @[&@@@IN2000 @[(@@@IN2020 @[(@@WIN2200 DU )@@G@@@[(@["KKOPT @[C@]1KOPT @[(@#4LINECOUNT @@@@@@LINE2 DV )@@G@@@@@@$,LINOUT @@@@@^LI1 @@@@]QLNKRTN @[C@['LPOC DW )@@G@@@[5@@XMCTEQ @@@@&8MFDSP$ @[X@@@MFD$ @@@@@2MFD100 DX )@@G@@@@/@@^MFD200 @@/@@HMFD300 @@/@@RMFD500 @@/@@UMFD600 DY )@@G@@@@/@@XMFD700 @@/@@+MFD900 @@/@@2MINT @["@I,MSBUF EA )@@G@@@@@@AYNOSORTF @[5@@PNSZOPT @[C@#.OPNSRT @[5@@@OPTIONS EB )@@G@@@@@@$2OPTWRD @@@@['PCT @@@@@XPCTDAD @[<@^)PCTDADN EC )@@G@@@@Y@[GPMBIAS @]Q@Q^PMORE @[I@@@POLISH @@@@ )POLTRAN ED )@@G@@@@/@[ POL410 @@/@[!POPT @[(@]?POUT @@@@@]POUT2 EE )@@G@@@@@@@#PROJPK @@@@@VPR000 @[F@@@PR300 @[F@ #PR600 EF )@@G@@@[F@A"PR990 @[F@B_QF000 @[<@@@QF900 @[<@AFQOPT EG )@@G@@@[(@](QQOPT @[C@["RCINIT$ @]N@A@RDFD$ @@9@@@RDKINT EH )@@G@@@]E@@@RDPKT @@Y@@-RDTO$ @]Q@Q8REBD$ @]Q@O\RECSTART EI )@@G@@@@@@[@RECYB$ @]N@]&RENDB$ @]N@]GREND$ @]H@YWREREND EJ )@@G@@@]Q@[URERRR @]Q@[KRETB$ @]N@ OREVD @@@@(^REVG EK )@@G@@@@@@(@REVO @@@@*_REVR @@@@(]REVT @@@@*"REVV EL )@@G@@@@@@([REXIT$ @]N@ 8RFIND$ @]Q@@JRFNDZ$ @]Q@@HRGKTC$ EM )@@G@@@]Q@#_RINFP$ @["@YCRINF$ @[?@@@RINIT$ @]H@@@RKTI$ EN )@@G@@@]Q@H RKTO$ @]Q@HFROB$ @]N@#2ROPNB$ @]N@@@ROPN$ EO )@@G@@@]B@@URPR @@@@$$RPTBL$ @]Q@@=RQNDB$ @]N@ ,RRCYC$ EP )@@G@@@]N@^TRRELB$ @]N@[+RREL$ @]B@[GRRET$ @]B@#BRRSTRG EQ )@@G@@@]Q@[]RSELA$ @]Q@O'RSELE$ @]Q@PARSEL$ @]Q@PERSORTD$ ER )@@G@@@@3@@@RSORT$ @]B@]VRSRTB$ @]N@]1RSTRG$ @]Q@@6RSVL1$ ES )@@G@@@]N@];RSVL2$ @]N@#MSDFOC$ @[2@]8SDFOO$ @[2@[=SDFO$ ET )@@G@@@[2@@@SDF000 @[\@@@SDF100 @[\@@HSDROC$ @]Q@[USELT$ EU )@@G@@@[?@@2SINF$ @[?@@)SIZE @@@@$?SNOITPO @@@@[8SN000 EV )@@G@@@[L@@@SN900 @[L@#@SORTBL @@@@*GSORTERR @]^@@@SORTF EW )@@G@@@[8@@@SPECER @@/@@4SRTNXT @[5@@XSSHIFT @@@@]3SSLINK EX )@@G@@@@@@]7SSLOAD @@@@]2SSMASK @@@@]6SSPVAL @@@@]5SSTAB EY )@@G@@@@@@]2SSTEST @@@@]4SUB30 @@@@&&SUB35 @@@@&*SZBAK EZ )@@G@@@@@@(ASZCHK @[C@#,SZLOD @@@@( SZOPT @@@@>6TABLE2 FA )@@G@@@@@@*PTAPEQP @@@@&(TOTRTN @[F@@%TOT000 @[O@@@TPINT FB )@@G@@@["@D7TRANS @@@@ .TSINT @["@EKUNCHEK @@@@(#UNIT1 FC )@@G@@@@Y@@3UNIT2 @@Y@@4UNOPT @[C@#;USELUT @@@@>3XOPT FD )@@G@@@[(@#0XXOPT @[C@]?ZCORE$ @]Q@@[ZOPT @[(@#Y@@@@@@@@@@@@FE )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FF )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BASLEV @@@@@CBRKLOAFG )@@G@@D @@@@@@BRKMASK @@@@@#BRKSHFT @@@@@ BRKSPEC @@@@@^BRKTESFH )@@G@@T @@@@@[BRKVAL @@@@@]CBASCFD$ )TH@CJCODE @@@@@ CREATEFI )@@G@@_EM_WS@@@@@@DATA @@@@@^DELETE_EM_WS@@@@@@EFRST$ @@@@@@EMERROFJ )@@G@@R$ @@@@@@EQUCDL @@@@@CINSPCT_EM_WS@@@@@@KPRCD$ @@@@@@LOCLEVFK )@@G@@ @@@@@ PCTBD$ @@@@@[RDKCAL$ @@@@@@RECCHAR @@@@C^REMCGYFL )@@G@@REG$ @@@@@@RETB$BMP @@@@@@RETB$BMS @@@@@@RGKTC$EM @@@@@@ROPNB$FM )@@G@@EM @@@@@@RPCTA$ @@@_8@RPRL @@@@@ RQNDB$BMS @@@@@@RRELB$FN )@@G@@BMP @@@@@@RRELB$BMS @@@@@@RSRTB$BMP @@@@@@RSRTB$BMS @@@@@@SLT$ FO )@@G@@ @@@A@@SM$ERR @@@)^NSSIZE @@@@@ASSLEN @@@@],UPDLEVFP )@@G@@ @@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FQ )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@FR )@@^@@@@@@@@@@@@@@@@@@@@@@@@@@ FS @ELT,SI TPF$.MFDDEF,,,117774072623,024 . . TAGS AND EQUF'S USED THROUGHOUT @MFD . $DEF . SIGNIFY DEFINITION MODE ASSEMBLY $LEVEL 0,1,0 MAKE TAGS EXTERNALLY DEFINED AXR$ . DEFINE THE REGISTERS FOR THIS ASSEMBLY . . @MFD'S DEFAULT MODE HANDLES THE MASTER FILE DIRECTORY FILE (MFDF) . FORMAT IMPLEMENTED IN EXEC-8 LEVEL 33. TO TURN OFF THE PRE-33 . MFD COMPATABILITY CODE, SET OLDMFD TO 0. . OLDMFD EQU 1 OLD DIRECTORY COMPATABILITY MODE . OLDSTUFF EQU 1 SET TO ZERO TO TURN OFF ALL . THE FUNNY OLD OPTIONS. THE . D,G,O,R,T,U, AND V OPTIONS . ARE REPLACED BY SUPER SPEC TESTS. . MBPTUA EQU 0 MUST-BE-PRIV-TO-USE-A-OPTION FLAG . IF NONZERO, THEN @MFD,A SPEC WITH . SPEC NOT EQUAL TO RUN'S ACCOUNT # . WILL NOT BE ACCEPTED UNLESS RUN . IS PRIVILEGED. IF ZERO, IT'S OK. . . THE SPECIAL SPEC FIELD TESTS KNOWN THROUGHOUT THE CODE AS 'SUPER SPECS' . MAY BEGIN IN SPEC2 IF OLDSTUFF IS 0, OR SPEC4 IF OLDSTUFF IS > 0. . THE LASTSPEC PARAMETER (BELOW) DEFINES THE LAST SUCH SPEC FIELD. . IF SET TO 0, ALL SUPER SPEC CODE WILL BE TURNED OFF. . (THIS IS NOT RECOMMENDED). . LASTSPEC EQU 18 LAST SUPER SPEC . MAY BE 0 OR 2-? . NSSP EQU (LASTSPEC>1); *(LASTSPEC-1) # OF SUPER SPECS (0 IF NONE) . SNAPOK EQU 1*NSSP ZERO IF ITEM SNAP CAPABILITY . NOT DESIRED . SNAPSUB EQU 1 (IGNORED IF SNAPOK IS ZERO) . IF THIS PARAMETER IS NONZERO, A SNAP$ . SUBROUTINE WILL BE USED RATHER THAN . ER SNAP$. THE SUBROUTINE HAS A NICER . OUTPUT FORMAT, ESPECIALLY FOR DEMAND. . SORTOK EQU 1*NSSP 0 IF SORT CAPABILITY NOT DESIRED . SRTDBG EQU 0 NONZERO TO TURN ON SORT DEBUG . POLDBG EQU 0 NONZERO TO TURN ON SUPER SPEC DEBUG . NFILES EQU 6000 APPROX. NUMBER OF FILES (FOR SORT ONLY) . WILL USE HALF THIS NUMBER UNLESS THE . Z-OPTION IS USED IN PRIVILEGED MODE. . PRVSEC EQU 0 SET NON-ZERO TO HIDE SECURE . BACKUP REEL NUMBERS FROM . NON-PRIVILEGED USERS . DSGUNL EQU 0 SET NON-ZERO TO DISGUISE THE . FACT THAT FILES ARE UNLOADED BY . USING THE BACKUP BLOCK COUNT . FOR THE TRACK COUNT AND . ZERO FOR THE HIGH REFERENCE. . PROJCK EQU 0 SET NON-ZERO TO REJECT . ANY FILES WITH A PROJECT . DIFFERENT FROM THE PROJECT . IN THE PCT. . LEGEND EQU 1 SET TO ONE IF A LEGEND . OF SPECIAL CHARACTER MEANINGS . IS DESIRED. . BRKOK EQU 1**SORTOK SET TO 1 IF 'BREAK' QUALIFIER IS ALLOWED. . PERMITS SORTED LISTINGS WITH SUBTOTALS. . BRKMAX EQU 3 MAXIMUM NUMBER OF NESTED BREAK'S . (IGNORED IF BRKOK IS ZERO). . BRKDBG EQU 0 (IGNORED IF BRKOK IS ZERO) . NONZERO TO TURN ON BREAK FEATURE DEBUG . MULTISYS EQU 0 MULTIPLE-SYSTEM FLAG . IF NONZERO, TURNS ON CODE IN . INIT1 TO OBTAIN SYSTEM ID FROM . MCT, AND INCLUDE IT IN SIGNON LINE . SYSTEMID EQUF 021,,S6 SYSTEM ID OFFSET AND PARTIAL . WORD WITHIN MCT. HAS NO EFFECT . IF MULTISYS IS 0. . . @MFD'S DIRECTORY FILE ($$--DGET--$$) MAY BE QUITE LARGE. THE MSTITE . PARAMETER (BELOW) PERMITS A SITE TO SELECT THE LEAST UNDESIRABLE METHOD . OF HANDLING THIS FILE. . . WHEN MSTITE IS ZERO, THE DIRECTORY FILE IS NOT FREE'D AT PROGRAM TERMINATION, . BUT REAMINS USABLE BY THE NEXT @MFD CALL. SITES WITH LARGE DIRECTORIES . MAY FIND THIS MODE UNACCEPTABLE BECAUSE MANY DEMAND USERS MAY CALL @MFD . AND WIND UP WITH LARGE DIRECTORY FILES ASSIGNED AND FORGOTTEN. . . IF MSTITE IS NONZERO, THE M-OPTION IS REQUIRED TO PREVENT THE DIRECTORY . FILE FROM BEING FREED AT PROGRAM TERMINATION. SITES WITH LARGE DIRECTORIES . MAY FIND THIS MODE UNACCEPTABLE DUE TO THE NEED TO DO ANOTHER DGET$ IF . SUCCESSIVE @MFD CALLS ARE NEEDED AND THE M-OPTION WAS FORGOTTEN ON THE . FIRST CALL. . MSTITE EQU 1 MS AT A PREMIUM? . WOPTOK EQU 1 SET NONZERO IF W-OPTION ALLOWED . (PRODUCES SDF OUTPUT FILE) . WFILE EQU 'OUT$$$ ' SDF OUTPUT FILENAME (IGNORED IF . WOPTOK IS ZERO. . 12 CHARS, LEFT-JUSTIFIED, SPACE-FILLED . DGFILE EQU '$$--DGET--$$' DGET$ FILENAME . 12 CHARS, LEFT-JUSTIFIED, SPACE-FILLED . DCFZ EQU 0 SET NON-ZERO IF LEVEL OF EDIT$ . BEING USED HAS EDCFZ$ ROUTINE . GVHUSH EQU 0 0 = PRINT G AND V OPTIONS, AND . INCLUDE IN TOTALS . 1 = PRINT G AND V OPTIONS, BUT ONLY . INCLUDE IN TOTALS IF RUN IS . PRIVILEGED . 2 = NEVER MENTION G AND V OPTIONS . UNLESS RUN IS PRIVILEGED . EXTRA EQU 1 SET TO ZERO TO TURN OFF PRINTING OF . ADDITIONAL LINES FOR FILES WHICH HAVE . LAPSE ENTRIES OR MORE THAN 1 REEL, PACK, . OR BACKUP TAPE. . CHKPCT EQU 1 IF NONZERO, SINGLE-FILE ROUTINE WILL . USE INFORMATION FROM THE RUN'S PCT . TO AUGMENT ITS DREAD$/FITEM$ INFORMATION. . LDJOK EQU 1 (NO EFFECT IF CHKPCT = 0) . IF SET TO 0, A 01000-WORD BUFFER WILL . BE RESERVED, AND ER PCT$ WILL BE USED . RATHER THAN LDJ OF THE PCT BANK. . FATSIZ EQU 300 (NO EFFECT IF CHKPCT=0) . FOR TEMPORARY REMOVABLE DISC FILES, . PCT AND FATBL MUST BE SEARCHED TO FIND . PACKIDS. IF THIS CODE IS NOT NEEDED, . SET FATSIZ TO 0. OTHERWISE, SET TO . THE EXPECTED MSALL$ BUFFER LENGTH. . PRVOPS EQU (1*/('Z'-'Z')); PRIVILEGED OPTIONS (0 IF NONE) ++(1*/('Z'-'C')); ++(1*/('Z'-'Y')); ++(1*/('Z'-'X')) . WRNCHR EQU '?' WARNING-ONLY DISABLED HDWCHR EQU '!' HARDWARE DISABLED BBTCHR EQU '#' BAD BACKUP TAPE BMICHR EQU '%' BAD M.I. SECTOR 1 LINK LPSCHR EQU '>' LAPSES EXIST NOBCHR EQU '&' FILE HAS NO BACKUP DELCHR EQU '*' FILE IS MARKED 'TO BE DROPPED' BNCCHR EQU '^' BACKUP IS NOT CURRENT . OVHDA EQU 'SYS$ ' SYSTEM OVERHEAD ACCOUNT . 12 CHARS, LEFT-JUSTIFIED, SPACE-FILLED . (FOR @MFD,X EXEC FILES) /. DEFINE EQUF'S AND STUFF . RTOT EQUF BRTOT,X4 REMOVABLE TRACK TOTAL VTOT EQUF BVTOT,X4 V-OPTION TRACK TOTAL GTOT EQUF BGTOT,X4 G-OPTION TRACK TOTAL TOT EQUF BTOT,X4 TOTAL FIXED TRACKS SECTOT EQUF BSECTOT,X4 TOTAL SECURE BACKUP BLOCKS UNLTOT EQUF BUNLTOT,X4 TOTAL UNLOADED TRACKS . VFCT EQUF CNT1,X4,H1 V-OPTION FILE COUNT GFCT EQUF CNT1,X4,H2 G-OPTION FILE COUNT TFCT EQUF CNT2,X4,H1 TAPE FILE COUNT RFCT EQUF CNT2,X4,H2 REMOVABLE DISC FILE COUNT UFCT EQUF CNT3,X4,H1 UNLOADED FILE COUNT PFCT EQUF CNT3,X4,H2 TOTAL FILES SELECTED . LONGLIST EQU A7 1=LONG LISTING, 0=SHORT LISTING BACKEDUP EQU A13 FILE-IS-BACKED-UP FLAG RDISC EQU A14 REMOVABLE DISC FILE FLAG FILESIZE EQU A15 TOTAL TRACKS FOR CURRENT FILE . . SORT RECORD DEFINITIONS . LI0 EQUF 0,X8 LEAD ITEM STARTS SORT RECORD MI0 EQUF 28,X8 MAIN ITEM SECTOR 0 MI1 EQUF 56,X8 MAIN ITEM SECTOR 1 SAVEAREA EQUF 84,X8 TOT TRKS SAVE CELL FLAGS EQUF 85,X8 FLAGS SORTED WITH FILE ITEMS . . POLISH NOTATION TRANSLATION TABLE ENTRY VALUES . FALSE EQU 0 OPERAND IS FALSE TRUE EQU 1 OPERAND IS TRUE AND EQU 2 LOGICAL 'AND' OPERATION OR EQU 3 LOGICAL 'OR' OPERATION XOR EQU 4 LOGICAL 'XOR' OPERATION NOT EQU 5 LOGICAL 'NOT' OPERATION . FLAGS1 EQUF FLAGS,,H1 LEAD ITEM FLAGS . (SAVED THROUGH SORT) GFIL EQUF FLAGS,,S1 G-OPTION FILE TAP EQUF FLAGS,,S2 TAPE FILE . FLAGS2 EQUF FLAGS,,H2 MAIN ITEM FLAGS . (SAVED THROUGH SORT) VFIL EQUF FLAGS,,S5 V-OPTION FILE BMI1 EQUF FLAGS,,S6 BAD MAIN ITEM SECTOR 1 . SFMODE EQUF MRFLGS,,S1 SINGLE-FILE MODE SFMODE2 EQUF MRFLGS,,S2 SINGLE-FILE MODE SIZFLG EQUF MRFLGS,,S3 # OF CHARS IN SIZE, IF GIVEN PRIVLGD EQUF MRFLGS,,S4 DLOC$ ASSIGNED (PRIVILEGED) SNAP EQUF MRFLGS,,S5 SNAP$-WANTED SNL0 EQU 001 SNAP LEAD ITEM SECTOR 0 SNL1 EQU 002 SNAP LEAD ITEM SECTOR 1 SNM0 EQU 004 SNAP MAIN ITEM SECTOR 0 SNM1 EQU 010 SNAP MAIN ITEM SECTOR 1 SNM2 EQU 020 SNAP MAIN ITEM SECTORS 2-N SNGT EQU 040 SNAP DAD ITEMS . NRP EQUF LINE2,,S1 # OF REMOVABLE PACKS NLPS EQUF LINE2,,S2 # OF LAPSE ENTRIES NSB EQUF LINE2,,T2 # OF SECURE BACKUP REELS NTP EQUF LINE2,,T3 # OF TAPE REELS CAT'D . LIOPT EQUF FLAG3,,S1 Q,P,F, OR I PRIMARY OPTION SORT EQUF FLAG3,,S2 SORT DESIRED LISNPD EQUF FLAG3,,S3 LEAD-ITEM-SNAPPED FLAG TESTS EQUF FLAG3,,S4 NUMBER OF SPECS 4-N GIVEN SORTED EQUF FLAG3,,S5 SORT-SEG-LOADED FLAG SDFLOD EQUF FLAG3,,S6 SDFO-SEG-LOADED FLAG . SFASG EQUF FLAG4,,S1 FILE WAS ASG'D BY @MFD TO DO DREAD$ SFITEM EQUF FLAG4,,S2 FITEM$ WAS DONE FOR SINGLE-FILE MODE . SINGLE-FILE ROUTINE CLEARS ENTIRE WORD FLAG4: BE CAREFUL. ARB EQUF FLAG4,,S4 ARB DEVICE (NOT TAPE OF MS) . (SINGLE-FILE MODE ONLY) UCOPT EQUF FLAG4,,S5 SET TO 'C' OR 'U' IF FILE SO ASG'D TEMP EQUF FLAG4,,S6 TEMPORARY FILE (SINGLE-FILE MODE ONLY) . MFD$F EQUF FLAG5,,S1 NEW FORMAT DIRECTORY FLAG . (USED ONLY IF 'OLDMFD' IS NONZERO) EQDX EQUF FLAG5,,S2 SPEC3 OLD EQUIP INDEX SPECN EQUF FLAG5,,S3 CURRENT SPEC (FOR SPECER) POLNTH EQUF FLAG5,,S4 LENGTH OF POLISH TABLE DISDX EQUF FLAG5,,S5 DISABLE-PARAMETER INDEX . . A NON-ZERO VALUE IN 'AOX' INDICATES THAT POLISH NOTATION SPECS . WERE USED. THE BITS INDICATE WHICH OPERATIONS WERE SPECIFIED. . AOX EQUF FLAG5,,S6 NONZERO IF POLISH SPECS USED ANDBIT EQU 1*/AND LOGICAL 'AND' ORBIT EQU 1*/OR LOGICAL 'OR' XORBIT EQU 1*/XOR LOGICAL 'XOR' NOTBIT EQU 1*/NOT LOGICAL 'NOT' . SAVEBAK EQUF SAVEAREA,,S2 SAVE BACKED-UP INDICATOR SAVERDISC EQUF SAVEAREA,,S3 SAVE REMOVABLE-DISC FLAG SAVESIZE EQUF SAVEAREA,,H2 SAVE TOTAL TRACKS . APT EQUF OPTIONS+0,,T1 A-Z OPTIONS BPT EQUF OPTIONS+1,,T1 CPT EQUF OPTIONS+2,,T1 DPT EQUF OPTIONS+3,,T1 OLDSTUFF EPT EQUF OPTIONS+4,,T1 NOW BEING USED RATHER THAN . SPEC3 TO REQUEST EXTRA LINE . WITH INITIAL RESERVE, ETC. FPT EQUF OPTIONS+5,,T1 GPT EQUF OPTIONS+6,,T1 OLDSTUFF HPT EQUF OPTIONS+7,,T1 IPT EQUF OPTIONS+8,,T1 JPT EQUF OPTIONS+9,,T1 KPT EQUF OPTIONS+10,,T1 LPT EQUF OPTIONS+11,,T1 MPT EQUF OPTIONS+12,,T1 NPT EQUF OPTIONS+13,,T1 OPT EQUF OPTIONS+14,,T1 OLDSTUFF PPT EQUF OPTIONS+15,,T1 QPT EQUF OPTIONS+16,,T1 RPT EQUF OPTIONS+17,,T1 OLDSTUFF SPT EQUF OPTIONS+18,,T1 TPT EQUF OPTIONS+19,,T1 OLDSTUFF UPT EQUF OPTIONS+20,,T1 OLDSTUFF VPT EQUF OPTIONS+21,,T1 OLDSTUFF WPT EQUF OPTIONS+22,,T1 XPT EQUF OPTIONS+23,,T1 YPT EQUF OPTIONS+24,,T1 ZPT EQUF OPTIONS+25,,T1 /. SEARCH ITEM EQUFS . SI0 EQUF LI0 SEARCH ITEMS GO IN LI0 BUFFER SI0SI1LNK EQUF SI0+0 SEARCH ITEM FORWARD LINK . . LEAD ITEM EQUFS . LI0LI1LNK EQUF LI0+0 LINK TO LEAD ITEM SECTOR 1 QUAL EQUF LI0+1 QUALIFIER FILE EQUF LI0+3 FILENAME PROJ EQUF LI0+5 PROJECT-ID RDKEY EQUF LI0+7 READ KEY WRKEY EQUF LI0+8 WRITE KEY FILTYP EQUF LI0+9,,S1 FILE TYPE MSTYP EQU 0 FIXED MASS STORAGE (JZ IS DONE) TAPTYP EQU 1 MAGNETIC TAPE FILE REMTYP EQU 040 REMOVABLE DISC FILE LI0OLDEQP EQUF FILTYP OLD EQUIPMENT TYPE FIELD LI0STAT EQUF LI0+10,,T1 LEAD ITEM STATUS BITS LI0GBIT EQU 04000 G-OPTION FILE . (NOT TO BE TRUSTED) OLDSUBCOD EQUF LI0+10,,S3 OLD EQUIPMENT SUBCODE . . MAIN ITEM SECTOR 0 EQUFS . MI0DADLNK EQUF MI0+0 LINK TO FIRST DAD TABLE MI0QUAL EQUF MI0+1 QUALIFIER MI0FILE EQUF MI0+3 FILENAME MI0PROJ EQUF MI0+5 PROJECT-ID ACCOUNT EQUF MI0+7 ACCOUNT NUMBER TIM1STWRT EQUF MI0+10 BACKUP TIME, OR TIME OF 1ST . WRITE FOLLOWING UNLOAD DISABLES EQUF MI0+11 DISABLE FLAGS (TOP 4 BITS) DISBTA EQU 040 DISABLED IN ANY WAY (TP/TN IS DONE) DISBTH EQU 020 HARDWARE DISABLED DISBTW EQU 010 WARNING-ONLY DISABLE DISBTB EQU 004 BAD BACKUP TAPE MI0LI0LNK EQUF MI0+11 LINK TO LEAD ITEM SECTOR 0 . (TOP 4 BITS = DISABLE FLAGS) DESCFLAGS EQUF MI0+12,,T1 DESCRIPTOR FLAGS UNLBIT EQU 04000 FILE UNLOADED (TP/TN IS DONE) BAKBIT EQU 02000 FILE IS BACKED UP LPSBIT EQU 0400 FILE HAS LAPSES BM1BIT EQU 0200 BAD MAIN ITEM SECTOR 1 OLDBIT EQU 0100 OLD ITEM FORMAT TAPBIT EQU 040 TAPE FILE REMBIT EQU 010 REMOVABLE DISC FILE DROPBIT EQU 01 FILE IS TO BE DROPPED PCHAR EQUF MI0+13 GRANULARITY FLAGS (TOP 4 BITS ONLY) POSBIT EQU 040 POS. GRANULARITY (TP/TN IS DONE) WADBIT EQU 010 WORD-ADDRESSABLE FILE MI0MI1LNK EQUF MI0+13 LINK TO MAIN ITEM SECTOR 1 . (EXCEPT TOP 4 BITS) MNEMONIC EQUF MI0+14 ASSIGN MNEMONIC (EQUIP TYPE) TOTASGCNT EQUF MI0+15,,H2 TOTAL ASSIGN COUNT MI0OLDEQP EQUF MI0+17,,S1 OLD EQUIPMENT TYPE FIELD INHIBITS EQUF MI0+17,,S2 INHIBIT FLAGS MI0GBIT EQU 040 G-OPTION FILE VBIT EQU 020 V-OPTION FILE PBIT EQU 010 PRIVATE FILE FLAG XUSE EQU 04 ASSIGNED EXCLUSIVELY WONLY EQU 02 WRITE ONLY RONLY EQU 01 READ ONLY CURASGCNT EQUF MI0+17,,T2 CURRENT ASSIGN COUNT FCYCLE EQUF MI0+17,,T3 ABSOLUTE F-CYCLE NUMBER DATLSTASG EQUF MI0+18 DATE/TIME OF LAST ASSIGN DATCATLGD EQUF MI0+19 DATE/TIME CATALOGUED . . MASS STORAGE FILES ONLY . INITRESV EQUF MI0+20,,H1 INITIAL GRANULES RESERVED GRANULES EQUF MI0+20,,H2 START OF GRANULES-BY-GROUP MAXGRAN EQUF MI0+21,,H1 MAXIMUM NUMBER OF GRANULES HIGRANULE EQUF MI0+22,,H1 HIGHEST GRANULE # ASSIGNED HITRACK EQUF MI0+23,,H1 HIGHEST TRACK WRITTEN . . TAPE FILES ONLY . NBRREELS EQUF MI0+20,,H2 # OF REELS CAT'D TMSAMODES EQUF MI0+21,,T1 MSA TAPE MODES TAPEJOPT EQUF MI0+21,,S3 UNDOCUMENTED J-OPTION FLAG? TAPEMODES EQUF MI0+21,,S4 NON-MSA TAPE MODES TAPEREEL1 EQUF MI0+26 FIRST REEL OF CATALOGUED TAPE TAPEREEL2 EQUF MI0+27 SECOND REEL . . MAIN ITEM SECTOR 1 EQUFS . MI1MI2LNK EQUF MI1+0 LINK TO MAIN ITEM SECTOR 2 MI1MI0LNK EQUF MI1+6 LINK TO MAIN ITEM SECTOR 0 BKUPREELS EQUF MI1+7,,T1 NUMBER OF BACKUP REELS NBRLAPSES EQUF MI1+7,,T2 NUMBER OF LAPSE ENTRIES BKUPTIME EQUF MI1+8 DATE/TIME OF BACKUP CREATION MI1OLDEQP EQUF MI1+9,,S1 OLD EQUIPMENT TYPE BKUPTEXT EQUF MI1+9,,H2 BACKUP TEXT BLOCK COUNT BKUPFILE EQUF MI1+10,,T2 STARTING FILE POSITION, 1ST REEL BKUPREEL1 EQUF MI1+11 FIRST REEL NUMBER BKUPREEL2 EQUF MI1+12 SECOND REEL NUMBER LAPSENTRY EQUF MI1+13 FIRST LAPSE ENTRY NBRPACKS EQUF MI1+17,,T3 NUMBER OF DISC PACKS PACKENTRY EQUF MI1+18 FIRST DISC PACK ENTRY . P PROC 2,3 BUMP* NAME 0 INCREMENT PROC INC* NAME 0 SAME THING DEC* NAME 1 DECREMENT PROC A(0) EQU X11 ASSUME REGISTER TO USE A(1) EQU P(2,1) U FIELD A(2) EQU P(2,2) X FIELD A(3) EQU P(2,3) J FIELD DO P(0)>1 ,A(0) EQU P(0,1) USE SPEC'D REGISTER, IF GIVEN L A(0),P(1,1),P(1,2),P(1,3) GET INPUT DO P(0,0)=1 , GO DEC1 JUMP IF DECREMENT DO P=2 , A,U A(0),1 INCREMENT BY 1, OR DO P>2 , A A(0),A(1),A(2),A(3) BY SOMETHING ELSE GO BUMP1 SKIP DECREMENT STUFF DEC1 NAME . DECREMENT DO P=2 , AN,U A(0),1 DECREMENT BY 1, OR DO P>2 , AN A(0),A(1),A(2),A(3) BY SOMETHING ELSE BUMP1 NAME . S A(0),P(1,1),P(1,2),P(1,3) AND STORE RESULT END . . END . @ELT,DSIQ TPF$.MFDGEN/ADD,,,152574141337,001 @Run,A/R MFDGen,0/MFD,MFD,360,5000/0 @SetC,P @Free Tpf$. @Cat,P MFD*Util(+1).,F///5000 . Gen work file @Cat,P MFD*NewSi(+1).,F///5000 . Cull input file @Cat,P MFD*IAcull(+1).,F///5000 . Cull output file @Cat,P MFDGenPr(+1).,F///5000 . Gen printfile @Prt,FC MFD*MFD.,MFD*Util. @Prt,FC MFD*NewSi.,MFDGenPr. @Asg,A MFD*MFD. . Si file @Asg,A MFD*Util. . Gen work file @Asg,A MFD*NewSi. . @Asg,A MFD*IAcull. . @Use NewSi.,MFD*NewSi. @Use IAcull.,MFD*IAcull. @Use Util.,MFD*Util. @Use Tpf$.,MFD*Util. @C: . Sym,F Print$,,Pr @Sym,D Print$ @Bk1,A MFDGenPr. @Prt,SC MFDGen/ADD @Copy,S MFD.,Tpf$. @Asg,A Sys$Lib$*SysLib. . Syslib 75R1 @Use SysLib.,Sys$Lib$*SysLib. . Use default @Use Map$Pf.,Sys$Lib$*SysLib. . " " @Ssg,FGWIKE MaintSkel,,,,,,Sgs/2,Tpf$.Describe,Tpf$.ThisGen,; Pcf/1,Tpf$.Pcf,Tcf/1,Tpf$.Tcf Sgs,I So NewSi Ro Tpf$ Processor MASMP,'NO',N,SWEVY,LWEVY MASMP,PI,PO,SO MASM @Eof @Eof @Hdg,P ----------> Cull of MFD <---------- @Cull,FIRE IAcull./38,NewSi. @Eof @Hdg,P ----------> Toc of Gen files <--------- @Prt,TLC Map$pf. @Prt,TLC MFD. @Prt,TLC Util. @Prt,TLC NewSi. @Hdg,N @Bk2,N Pr @C: . Sym,F Print$,,Pr @Sym,D Print$ @END @ELT,SI TPF$.MFDMAP,,,167505131624,006 EQU BASLEV/8 . BASE LEVEL NUMBER EQU UPDLEV/0 . UPDATE LEVEL NUMBER EQU LOCLEV/0 . LOCAL UPDATE LEVEL NUMBER IBANK,M DATA,01000 $EVEN SEG MAIN IN MFD,DSEG,EDIT$($ALL),EDIT$T SEG HDGSEG,(MAIN) IN HDG SEG INSEG,(MAIN) IN INIT1,INIT2,INFOR$ SEG CHEKPRTSG,(MAIN) IN CHECK,PRINT SEG PR2SG,(MAIN) IN PRINT2,SNAP SEG TOTSEG,(MAIN) IN TOTALS SEG QFSEG,(CHEKPRTSG,TOTSEG,PR2SG,HDGSEG) IN QF DSEG DIRSEG,(CHEKPRTSG,TOTSEG,PR2SG,HDGSEG) IN DIREC$,DIRSUB DSEG SDFOSG,() IN WOUT,SDFO DSEG SORTSG,() IN SORTER,PRATTS,BKEYS,RDFM$,PCORE,REBD$ IN KRFIND,BCONSG,SORTF DBANK,MC CODE,(DATA,060000) $ODD SEG MAIN IN MFD,DSEG,EDIT$T SEG HDGSEG,(MAIN) IN HDG SEG INSEG,(MAIN) IN INIT1,INIT2,INFOR$ SEG CHEKPRTSG,(MAIN) IN CHECK,PRINT SEG PR2SG,(MAIN) IN PRINT2,SNAP SEG TOTSEG,(MAIN) IN TOTALS SEG QFSEG,(CHEKPRTSG,TOTSEG,PR2SG,HDGSEG) IN QF DSEG DIRSEG,(CHEKPRTSG,TOTSEG,PR2SG,HDGSEG) IN DIREC$,DIRSUB DSEG SDFOSG,() IN WOUT,SDFO DSEG SORTSG,() IN SORTER,PRATTS,BKEYS,RDFM$,PCORE,REBD$ IN KRFIND,BCONSG,SORTF RLIB SYSLIB. END @ELT,SI TPF$.OLD/MAINTSKEL,,,167616070115,011 *. MAINTSKEL REV 2.3 07/01/77 *. *. *. QUEUE *. *. AND REFER TO A PARTICULAR *. MAP, PROCESS, DESCRIBE, OR TOC SGS, OR *. A PARTICULAR PCF OR TCF ENTRY. THIS PROCEDURE *. ESTABLISHES THE PROCESSOR AND NON-DEFAULT OPTIONS (IF ANY) *. FOR SOME ELEMENT AND PASSES THE INFORMATION TO MAKESGS. *. THIS ASSUMES THAT MAP SGSSES ARE PROCESSED FIRST. *. OTHERWISE, ALL KINDS OF BAD THINGS WILL HAPPEN IN TERMS OF *. PROCESSING TOO MANY MAPS. *. *DEFINE QUEUE *CLEAR FOUND *INCREMENT I TO [DOLIST,1] WHILE FOUND IS CLEAR *PROCESS DOSEARCH [#1] [#2] [DOLIST,1,I,1] *LOOP *IF FOUND IS CLEAR *IF [#3] = MAP *PROCESS MAKESGS [#1] [#2] MAP MAP [#4] *ELSE *. DIDN'T COME FROM MAP SGS. SEE IF DESCRIBE. *IF [#3] = DESCRIBE OR [#3] = PROCESS *IF [#3] = DESCRIBE OR [[#3],[#4]] > 1 *PROCESS MAKESGS [#1] [#2] [[#3],[#4],2,1] [#3] [#4] *SET FOUND *END *END *IF FOUND IS CLEAR *. NOT FROM DESCRIBE. SEE IF IT HAS A DESCRIBE. *INCREMENT DUMMY TO [DESCRIBE] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM DESCRIBE,DUMMY,1,1 FOR [#1] *IF [DESCRIBE,CARD,1] > 1 *IF [DESCRIBE,CARD,1,2] = [#2] *SET FOUND TO CARD *ELSE *SET DUMMY TO CARD *END *ELSE *IF [#2] = 'NO' *SET FOUND TO CARD *ELSE *SET DUMMY TO CARD *END *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *PROCESS MAKESGS [#1] [#2] [DESCRIBE,FOUND,2,1] DESCRIBE [*FOUND] *ELSE *. NO DESCRIBE. TRY TOC. *CLEAR FOUND *INCREMENT DUMMY TO [TOC] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM TOC,DUMMY,1,1 FOR [#1] *IF [TOC,CARD,3,1] < +5 *IF [TOC,CARD,2,1] = [#2] *SET FOUND TO CARD *ELSE *IF [#2] = 'NO' AND [TOC,CARD,2,1] = '''' *SET FOUND TO CARD *ELSE *SET DUMMY TO CARD *END *END *ELSE *SET DUMMY TO CARD *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *SET THING TO [TOC,FOUND,3,1]+TOCNO-2 *IF VALUE OF THING < VALUE OF TOCNO *SET THING TO [TOC,FOUND,3,2]+TOCNO1 *END *PROCESS MAKESGS [#1] [#2] [PROCESSOR,THING,1,1] 0 0 *ELSE *. WELL, IT'S NOT DESCRIBED ANYWHERE. USE DEFAULT. *PROCESS MAKESGS [#1] [#2] [LANGUAGE,1,1,1] 0 0 *END *END *END *END *END *END *EJECT *. *. DOSEARCH *. *. SEE IF ELEMENT ALREADY APPEARS IN A LIST. *. *DEFINE DOSEARCH *CLEAR EXIT *INCREMENT DUMMY TO [[#3]] WHILE EXIT IS CLEAR *IF COLUMN SEARCH FROM [#3],DUMMY,1,1 FOR [#1] *IF [[#3],CARD,1,2] = [#2] *SET FOUND *SET EXIT *ELSE *SET DUMMY TO CARD *END *ELSE *SET EXIT *END *LOOP *END *EJECT *. *. MAKESGS [ / 0 0] *. *. WHERE THE LAST TWO ARGUMENTS TELL OF A MAP OR DESCRIBE OR LANGUAGE *. SGS GIVING OPTIONS AND NON-STANDARD OUTPUT NAME, PERHAPS. *. THIS PROCEDURE CREATES THE DOFIRST, DOPROC, DOLANG, AND DOMAP SGSSES. *. *DEFINE MAKESGS *. FIND PROPER PROCESSOR SGS AND CORRESPONDING STANDARD PROCESSOR SGS. *IF COLUMN SEARCH FROM PROCESSOR,1,1,1 FOR [#3] *SET INDEX TO CARD *ELSE #MSG,N MAKESGS ERROR: PROCESSOR [#3] DOES NOT EXIST! (@ELT ASSUMED) *SET INDEX TO +ELTNOF *END *IF [BACKREF,INDEX,1,1] = +MAPNO AND NOT [#4] = MAP AND [MAP] > 0 *SET INDEX TO +ELTNOF *END *SET INDEX2 TO [BACKREF,INDEX,1,1] *IF VALUE OF INDEX2 = -1 *SET INDEX2 TO +ELTNO *END *CLEAR FFRST *IF NOT [FIRST,1,1,1] = 'NO' *INCREMENT IFRST TO [FIRST] WHILE FFRST IS CLEAR *IF [FIRST,IFRST,1,1] = SUBTYPE *IF [FIRST,IFRST,2,1] = [#3] *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *ELSE *IF [FIRST,IFRST,1,1] = ELEMENT *IF [FIRST,IFRST,2,1] = [#1] *IF [FIRST,IFRST,2] = 1 *IF [#2] = 'NO' *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *ELSE *IF [FIRST,IFRST,2,2] = [#2] *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *END *END *ELSE #MSG,N MAKESGS ERROR: IMPROPER 'FIRST' SGS. *END *END *LOOP *END *IF NOT VALUE OF FFRST > 0 *IF +INDEX2=+PDPNO OR +INDEX2=+ASMPNO OR +INDEX2=+COBPNO OR +INDEX2=+FORPNO ; OR +INDEX2=+MASMPNO *CREATE SGS: DOPROC [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *ELSE *IF VALUE OF INDEX2 = VALUE OF MAPNO *CREATE SGS: DOMAP [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *ELSE *CREATE SGS: DOLANG [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *END *END *END *END *EJECT *. *. FSCAN TAKES ONE ARGUMENT, P OR T, REPRESENTING PCF OR TCF ENTRIES. *. FOR EACH SGS BY THE GIVEN NAME, IT CREATES A 'DOIT' SGS. *. IT AVOIDS DUPLICATE DOIT ENTRIES. *. *DEFINE FSCAN *INCREMENT I TO [[#1]] *IF [[#1],I] = 1 *PROCESS QUEUE [[#1],I,1,1] 'NO' [#1] [*I] *ELSE *PROCESS QUEUE [[#1],I,1,1] [[#1],I,2,1] [#1] [*I] *END *LOOP *END *. *. *. COPYNAME *. *. TO SET UP DEFAULT VALUE FOR *SOME* OF THE FILES, *. THIS COPIES SOME SGS SUCH AS SI TO CREATE ANOTHER. *. *DEFINE COPYNAME *IF [[#1]] > 0 AND [[#2]] = 0 *IF [[#1],1,1]>1 *CREATE SGS: [#2] [[#1],1,1,1],[[#1],1,1,2] *ELSE *CREATE SGS: [#2] [[#1],1,1,1] *END *END *END *. *. *. COMPNAME *. *. COMPARES WHETHER THE FILE-NAMING SGSSES ARE THE SAME. *. SETS VALUE OF 'EQUAL' ACCORDINGLY. *. *DEFINE COMPNAME *CLEAR EQUAL *IF [[#1],1,1,1] = [[#2],1,1,1] AND [[#1],1,1] = [[#2],1,1] *IF [[#1],1,1] = 1 *SET EQUAL *ELSE *IF [[#1],1,1,2] = [[#2],1,1,2] *SET EQUAL *END *END *END *END *EJECT *. *. FILENAME *. *. IN EDIT MODE, EDIT THE FILENAME OR QUALIFIER*FILENAME *. FROM THE SPECIFIED FILE SGS (SI, RO, A0, ETC.) *. *DEFINE FILENAME [[#1],1,1,1]& *IF [[#1],1,1] > 1 "[[#1],1,1,2]& *END *END *. *. *. ELTNAME *. *. IN EDIT MODE, EDIT THE ELEMENT OR ELEMENT/VERSION *. FROM FIELD 1 OF THE SPECIFIED SGS. *. *DEFINE ELTNAME [[#1],[#2],1,1]& *IF NOT [[#1],[#2],1,2] = 'NO' /[[#1],[#2],1,2]& *END *END *EJECT *. *. MAPCOR *. *. IF PROCESSING A 'MAP' ELEMENT, 'LEVEL' SGS MAY SPECIFY *. 'EQU' DIRECTIVES TO BE INSERTED IN THE ELEMENT. *. *DEFINE MAPCOR *IF [#1] = DOMAP AND [LEVEL] > 0 *IF [LEVEL,1] > 3 *INCREMENT CORA FROM 3 TO [LEVEL,1] BY 2 *IF [LEVEL,1,CORA,1] = [[#1],[#2],1,1] *IF [[#1],[#2],1,2] = 'NO' *SET CORE TO 1 *ELSE *SET CORE TO 2 *END *IF [LEVEL,1,CORA] = [*CORE] *IF [*CORE] = 2 AND [LEVEL,1,CORA,2] = [[#1],[#2],1,2] OR [*CORE] = 1 *SET CORC TO [*CORA]+1 [LEVEL,1,CORC,1] *INCREMENT CORB TO [LEVEL,1,1] EQU [LEVEL,1,2,CORB]/[LEVEL,1,1,CORB] *LOOP *END *END *END *LOOP *END *END *END *EJECT *. *. GET *. *. FIND ALL SGSSES OF TYPE [#1] (DOFIRST, DOPROC, DOLANG, DOMAP) *. AND PUT OUT SUITABLE CONTROL CARDS, DELETING THE SGS *. AFTERWARDS. IF THERE IS AN ALPHA SGS, PUT THINGS OUT ALPHABETICALLY. *. *DEFINE GET *INCREMENT DUMMY TO [[#1]] *CLEAR QUITI *SET D TO 1 *INCREMENT I TO [[#1]] WHILE QUITI IS CLEAR *IF [ALPHA] > 0 *IF [[#1],I,1,1] < [[#1],D,1,1] *SET D TO I *ELSE *IF [[#1],I,1,1] = [[#1],D,1,1] *IF NOT [[#1],D,1,2] = 'NO' *IF [[#1],I,1,2] = 'NO' OR [[#1],I,1,2] < [[#1],D,1,2] *SET D TO I *END *END *END *END *ELSE *SET QUITI *END *LOOP I *IF [MERGE] = 0 *EDIT ON & *IF NOT [PROCESSOR,[[#1],D,2,1],1,1] = DOC *. *. EDIT A HEADING FOR NON-DOC ELEMENTS *. #HDG & *IF [PROGRAM] PROGRAM:& *INCREMENT W TO [PROGRAM,1] & *INCREMENT Z TO [PROGRAM,1,W] [PROGRAM,1,W,Z]& *LOOP *LOOP *END *IF [LEVEL] LEVEL: & *INCREMENT Z TO [LEVEL,1,1] [LEVEL,1,1,Z]& *IF [*Z] < [LEVEL,1,1] -& *END *LOOP *END ELEMENT: & *PROCESS ELTNAME [#1] [*D] *EDIT OFF *ELSE *. *. FOR DOC ELEMENTS, TURN OFF HEADING *. #HDG,N *END *EDIT ON & #& *SET DOIT21 TO [[#1],D,2,1] *SET DOIT22 TO [[#1],D,2,2] *IF [PROCESSOR,DOIT21] > 3 *. FILENAME GIVEN [PROCESSOR,DOIT21,4,1]& *IF [PROCESSOR,DOIT21,4] > 1 *. QUALIFIER ALSO "[PROCESSOR,DOIT21,4,2]& *END .& *END *IF [PROCESSOR,DOIT21] > 2 *. EXPLICIT PROCESSOR NAME [PROCESSOR,DOIT21,3,1]& *IF [PROCESSOR,DOIT21,3] > 1 *. VERSION GIVEN. /[PROCESSOR,DOIT21,3,2]& *END *ELSE *. NO EXPLICIT PROCESSOR NAME. [PROCESSOR,DOIT22,1,1]& *END *. END OF PROCESSOR NAME! *CLEAR COMMA *CLEAR GOTOPTS *IF [[#1],D,3,1] = MAP OR [[#1],D,3,1] = DESCRIBE ; OR [[#1],D,3,1] = PROCESS *PROCESS USEROPTS [[#1],D,3,1] [[#1],D,3,2] *END *IF GOTOPTS IS CLEAR *. NOT FROM MAP OR DESCRIBE. DEFAULT OPTIONS. *IF [PROCESSOR,DOIT21,1,2] *IF NOT [PROCESSOR,DOIT21,1,2] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT21,1,2] *END *ELSE *IF [PROCESSOR,DOIT22,1,2] *IF NOT [PROCESSOR,DOIT22,1,2] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT22,1,2] *END *END *END *END *IF UOPT IS SET *PROCESS OPTIONS U *END *IF [[#1],D,3,1] = MAP AND NOT [LIST,1,1,1] = NONE *SET LISTIT *END *CLEAR LISTIT *IF [LIST,1,1,1] = ALL *SET LISTIT *ELSE *IF [LIST,1,1,1] = PCF *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *ELSE *IF [LIST,1,1,1] = TCF *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *ELSE *IF [LIST,1,1,1] = BOTH *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *IF LISTIT IS SET *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *END *ELSE *IF [LIST,1,1,1] = EITHER *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *IF LISTIT IS CLEAR *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *END *END *END *END *END *END *. NOW LISTIT TELLS WHETHER TO LIST. *. SET TYPE TO PROPER SUBFIELD OF PROCESSOR SGS: *. 3 = NO LISTING, 4 = SHORT LISTING, 5 = LONG LISTING. *SET TYPE TO 3 . ASSUME NO LISTING *IF LISTIT IS SET *SET TYPE TO 4 . IF LISTING, ASSUME SHORT *IF [LIST,1,1]>1 *IF [LIST,1,1,2]=LONG *SET TYPE TO 5 . SET FOR LONG *ELSE *IF [LIST,1,1,2]=NOT *SET TYPE TO 3 . SET FOR NONE *END *END *END *END *IF [PROCESSOR,DOIT21,1,TYPE] *IF NOT [PROCESSOR,DOIT21,1,TYPE] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT21,1,TYPE] *END *ELSE *IF [PROCESSOR,DOIT22,1,TYPE] *IF NOT [PROCESSOR,DOIT22,1,TYPE] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT22,1,TYPE] *END *END *END & *. END OF OPTION FIELD! *IF [PROCESSOR,DOIT21,2] > 1 *PROCESS SPECS [*D] [*DOIT21] [[#1],D,3,1] [#1] *ELSE *PROCESS SPECS [*D] [*DOIT22] [[#1],D,3,1] [#1] *END *EDIT OFF *. END OF PROCESSOR CARD *ELSE *. MERGE SET: PUT OUT *ELTNAME *EDIT ON & "& *PROCESS ELTNAME [#1] [*D] *EDIT OFF *END *CLEAR FOUND *IF [CORRECT] > 0 *CLEAR EXIT *INCREMENT AA TO [CORRECT] WHILE EXIT IS CLEAR *IF COLUMN SEARCH FROM CORRECT,AA,1,1 FOR [[#1],D,1,1] *IF [CORRECT,CARD,1] > 1 *IF [CORRECT,CARD,1,2] = [[#1],D,1,2] *SET FOUND *SET EXIT *ELSE *SET AA TO CARD *END *ELSE *IF [[#1],D,1,2] = 'NO' *SET FOUND *SET EXIT *ELSE *SET AA TO CARD *END *END *ELSE *SET EXIT *END *LOOP *END *IF FOUND IS SET *EDIT ON #ADD,E & *IF [CORRECT,CARD] > 3 [CORRECT,CARD,4,1]& *IF [CORRECT,CARD,4] > 1 "[CORRECT,CARD,4,2]& *END .& *END [CORRECT,CARD,3,1]& *IF [CORRECT,CARD,3] > 1 /[CORRECT,CARD,3,2] *END *ELSE *IF [APPLY,1,1,1] = BOTH *IF [[#1],D,1,2] = 'NO' *IF [UPDATE] > 0 *IF NOT [[#1],D,1,1] HAS PERM CORRECTIONS *CREATE PERM: [[#1],D,1,1] *END *CORRECT,PK [[#1],D,1,1] *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1] *PROCESS MAPCOR [#1] [*D] *END *END *ELSE *IF [UPDATE] > 0 *IF NOT [[#1],D,1,1]/[[#1],D,1,2] HAS PERM CORRECTIONS *CREATE PERM: [[#1],D,1,1]/[[#1],D,1,2] *END *CORRECT,PK [[#1],D,1,1]/[[#1],D,1,2] *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] *PROCESS MAPCOR [#1] [*D] *END *END *END *ELSE *IF [APPLY,1,1,1] = PCF *IF [[#1],D,1,2] = 'NO' *CORRECT [[#1],D,1,1] PERM *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] PERM *PROCESS MAPCOR [#1] [*D] *END *END *ELSE *IF [APPLY,1,1,1] = TCF *IF [[#1],D,1,2] = 'NO' *CORRECT [[#1],D,1,1] TEMP *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] TEMP *PROCESS MAPCOR [#1] [*D] *END *END *END *END *END *END *REMOVE SGS [#1],[*D] *LOOP DUMMY *END *EJECT *. *. OPTIONS *. *. ADDS SPECIFIED OPTIONS TO CONTROL STATEMENT. PROVIDES *. COMMA IF NEEDED. *. *DEFINE OPTIONS *IF NOT [#1] = 'NO' *IF COMMA IS CLEAR ,& *SET COMMA *END [#1]& *END *END *. *. *. USEROPTS *. *. ADDS OPTIONS GIVEN ON SPECIFIED MAP, PROCESS, OR DESCRIBE SGS. *. *DEFINE USEROPTS *IF [[#1],[#2],2] > 1 *PROCESS OPTIONS [[#1],[#2],2,2] *SET GOTOPTS *END *END *EJECT *. *. LOOKFOR

*. *. RETURNS WITH GOTCF SET IFF THE CURRENT ELEMENT [[#2],D,...] *. APPEARS IN THE NAMED CHANGE FILE. *. *DEFINE LOOKFOR *CLEAR GOTCF *INCREMENT I TO [[#1]] WHILE GOTCF IS CLEAR *IF COLUMN SEARCH FROM [#1],1,1,1 FOR [[#2],D,1,1] *IF [[#1],CARD] = 1 *IF [[#2],D,1,2] = 'NO' *SET GOTCF TO CARD *END *ELSE *IF [[#1],CARD,2,1] = [[#2],D,1,2] *SET GOTCF TO CARD *END *END *ELSE *SET GOTCF TO -1 *END *LOOP *IF VALUE OF GOTCF < 0 *CLEAR GOTCF *END *END *EJECT *. *. SPECS 2 *CLEAR RPTNAM [[#3],SPECT,3,1]& *IF [[#3],SPECT,3] > 1 /[[#3],SPECT,3,2]& *END *END *END *IF RPTNAM IS SET *PROCESS ELTNAME [#4] [#1] *END *END *SET COMMA TO COMMA+1 *LOOP *END *EJECT *. *. INITIALIZATION *. *CREATE SGS: DOLIST DOFIRST DOLANG DOPROC DOMAP *. *. THE 'NUMS' SGSSES ARE USED TO CREATE VARIABLES WHICH TELL *. MAINTSKEL WHERE CERTAIN STANDARD PROCESSOR SUBTYPES ARE *. LOCATED *. *CREATE SGS: NUMS PDP,PDPNO *CREATE SGS: NUMS ASMP,ASMPNO *CREATE SGS: NUMS COBP,COBPNO *CREATE SGS: NUMS FORP,FORPNO *CREATE SGS: NUMS MASMP,MASMPNO *CREATE SGS: NUMS ELT,ELTNO *CREATE SGS: NUMS MAP,MAPNO *. *. THE FOLLOWING 'PROCESSOR' SGS CARDS MUST BE ARRANGED IN ORDER *. OF ELEMENT SUBTYPE FOR 'SELECT TOC' AND OTHER FEATURES TO *. OPERATE CORRECTLY. *. *CREATE SGS: PROCESSOR PDP,'NO',N,LJ,LJ PDP,PI,PO PDP . 2 *CREATE SGS: PROCESSOR MASMP,'NO',N,SEV,LEV MASMP,PI,PO MASM . 2 *CREATE SGS: PROCESSOR ASMP,'NO',N,LJ,LJ ASMP,PI,PO PDP . 2 *SET TOCNO TO [PROCESSOR] *CREATE SGS: PROCESSOR COBP,C,N,LJ,LJ COBP,PI,PO PDP . 3 *CREATE SGS: PROCESSOR FORP,F,N,LJ,LJ FORP,PI,PO PDP . 4 *CREATE SGS: PROCESSOR SYM,'NO',N,LJ,LJ SYM,SI,SO ELT . 1-00 *SET TOCNO1 TO [PROCESSOR] *CREATE SGS: PROCESSOR ELT,'NO',N,LJ,LJ ELT,SI,SO ELT . 1-01 *IF [MASM] *CREATE SGS: PROCESSOR MASM,'NO',E,SEV,LEV MASM,SI,RO,SO MASM . 1-02 *ELSE *CREATE SGS: PROCESSOR ASM,'NO',E,SJ,LJ ASM,SI,RO,SO ASM . 1-02 *END *CREATE SGS: PROCESSOR COB,'NO',N,S,L COB,SI,RO,SO COB . 1-03 *CREATE SGS: PROCESSOR FOR,'NO',N,S,L FOR,SI,RO,SO FOR . 1-04 *CREATE SGS: PROCESSOR ALG,'NO',N,S,L ALG,SI,RO,SO ALG . 1-05 *CREATE SGS: PROCESSOR MAP,'NO','NO',SJ,LJ MAP,SI,AO,SO MAP . 1-06 *CREATE SGS: PROCESSOR DOC,'NO',NT,SRD,SRD DOC,SI,SO DOC . 1-07 *CREATE SGS: PROCESSOR SEC,'NO',N,LJ,LJ SEC,SI,SO ELT . 1-10 *CREATE SGS: PROCESSOR SSG,'NO',N,LJ,LJ SSG,SI,SO ELT . 1-11 *CREATE SGS: PROCESSOR APL,'NO',N,LJ,LJ APL,SI,SO ELT . 1-12 *CREATE SGS: PROCESSOR BAS,'NO',N,LJ,LJ BAS,SI,SO ELT . 1-13 *CREATE SGS: PROCESSOR LSP,'NO',N,LJ,LJ LSP,SI,SO ELT . 1-14 *CREATE SGS: PROCESSOR PLS,'NO',N,SE,LE PLS,SI,RO,SO PLUS . 1-15 *CREATE SGS: PROCESSOR PL1,'NO',N,S,L PL1,SI,RO,SO PL1 . 1-16 *. *IF [APPLY] = 0 *CREATE SGS: APPLY BOTH *END *IF [SELECT] = 0 *CREATE SGS: SELECT EITHER *END *IF [SELECT,1,1,1] = TOC AND [TOC] = 0 #MSG,N 'SELECT TOC' REQUIRES './TOC' IN SPEC 2 OF @SSG CALL. #!!! *CREATE SGS: TOC DUMMY DUMMY 1,1 *END *IF [LIST] = 0 *CREATE SGS: LIST ALL,SHORT *END *IF [LANGUAGE] = 0 *CREATE SGS: LANGUAGE ASM *END *IF NOT [FIRST] *CREATE SGS: FIRST SUBTYPE DOC *END *. *EJECT *. *. SET UP BACKREF SGSSES TO FIND STANDARD PROCESSORS. *INCREMENT I TO [PROCESSOR] *CLEAR QUITI *CLEAR SAVE *IF [PROCESSOR,I] > 1 *SET I1 TO 2 *ELSE *SET I1 TO 1 *END *INCREMENT J TO [PROCESSOR] WHILE QUITI IS CLEAR *IF COLUMN SEARCH FROM PROCESSOR,J,1,1 FOR [PROCESSOR,I,I1,1] *SET SAVE TO CARD *SET J TO CARD *ELSE *SET QUITI *END *LOOP *IF SAVE IS CLEAR *SET SAVE TO -1 *ELSE *IF [PROCESSOR,SAVE] = 1 *SET SAVE TO -1 *END *END *CREATE SGS: BACKREF [*SAVE] *IF [NUMS] AND NOT VALUE OF SAVE = -1 *IF COLUMN SEARCH FROM NUMS,1,1,1 FOR [PROCESSOR,SAVE,2,1] *SET [NUMS,CARD,1,2] TO SAVE *REMOVE SGS NUMS,CARD *END *END *LOOP *IF [NUMS] #MSG,N INTERNAL ERROR - NUMS = [NUMS] *END *IF COLUMN SEARCH FROM PROCESSOR,1,1,1 FOR ELT *SET ELTNOF TO CARD *ELSE #MSG,N INTERNAL ERROR - PROCESSOR ELT SGS NOT FOUND *END *EJECT *. *IF [MERGE] = 0 *. *. SET UP FILES. *IF [SI] = 0 *CREATE SGS: SI TPF$ *END *. *PROCESS COPYNAME SI RI *PROCESS COPYNAME SI PI *. *CLEAR UOPT *IF [SO] > 0 *IF [SO,1,1,1] = 'U' *SET UOPT *END *END *IF UOPT IS SET OR [SO] = 0 *CLEAR OKSO *ELSE *SET OKSO *END *. *IF [RO] = 0 *PROCESS COPYNAME SO PO *END *PROCESS COPYNAME RO PO *IF [PO] > 0 *IF [PO,1,1,1] = 'TEMP' *REMOVE SGS PO,1 *END *END *IF [PO] = 0 #ASG,T PROCFILE$. *CREATE SGS: PO PROCFILE$ *END *. *IF OKSO IS SET *PROCESS COPYNAME SO RO *ELSE *PROCESS COPYNAME RI RO *END *PROCESS COPYNAME RO AO *EJECT *. *. MOVE ELEMENTS AS NECESSARY. *CLEAR EQUAL *PROCESS COMPNAME RI RO *IF EQUAL IS CLEAR *EDIT ON #COPY,RC & *PROCESS FILENAME RI .,& *PROCESS FILENAME RO .& *EDIT OFF *END *PROCESS COMPNAME PI PO *IF EQUAL IS CLEAR AND NOT [PO,1,1,1] = 'U' *IF [TOC] *INCREMENT A TO [TOC] *IF [TOC,A,3,1] = 2 *EDIT ON #COPY,SC & *PROCESS FILENAME PI .[TOC,A,1,1]/[TOC,1,2,1],& *PROCESS FILENAME PO .& *EDIT OFF *END *LOOP *ELSE *IF [DESCRIBE] *INCREMENT A TO [DESCRIBE] *IF [DESCRIBE,A,2,1]=ASMP OR [DESCRIBE,A,2,1]=FORP OR [DESCRIBE,A,2,1]=COBP ; OR [DESCRIBE,A,2,1]=MASMP OR [DESCRIBE,A,2,1]=PDP *EDIT ON #COPY,S & *PROCESS FILENAME PI *IF [DESCRIBE,A]>2 *SET B TO 3 *ELSE *SET B TO 1 *END .[DESCRIBE,A,B,1]& *IF [DESCRIBE,A,B]>1 /[DESCRIBE,A,B,2]& *END ,& *PROCESS FILENAME PO .& *EDIT OFF *END *LOOP *ELSE #MSG DON'T KNOW WHAT PROCS TO COPY! #!!! *END *END *END *EDIT ON & #USE ASM$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE MASM$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE COB$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE FOR$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *. END SETUP FOR NON-MERGE CASE. *ELSE *. SET UP CHANGE-FILE MERGING. *EDIT ON & #ELT,IL & *IF [MERGE,1] > 1 [MERGE,1,2,1]& *IF [MERGE,1,2] > 1 "[MERGE,1,2,2]& *END .& *END [MERGE,1,1,1]& *IF [MERGE,1,1] > 1 /[MERGE,1,1,2]& *END *EDIT OFF *END *EJECT *. *. *. *. PASS 0 *INCREMENT IMAP TO [MAP] *IF NOT [MAP,IMAP,1,1] = 'NO' *IF [MAP,IMAP,1]>1 *PROCESS QUEUE [MAP,IMAP,1,1] [MAP,IMAP,1,2] MAP [*IMAP] *ELSE *PROCESS QUEUE [MAP,IMAP,1,1] 'NO' MAP [*IMAP] *END *END *LOOP *INCREMENT IPRO TO [PROCESS] *IF [PROCESS,IPRO,1] > 1 *PROCESS QUEUE [PROCESS,IPRO,1,1] [PROCESS,IPRO,1,2] PROCESS [*IPRO] *ELSE *PROCESS QUEUE [PROCESS,IPRO,1,1] 'NO' PROCESS [*IPRO] *END *LOOP *IF [SELECT,1,1,1] = TCF OR [SELECT,1,1,1] = EITHER *PROCESS FSCAN T *END *IF [SELECT,1,1,1] = PCF OR [SELECT,1,1,1] = EITHER *PROCESS FSCAN P *END *IF [SELECT,1,1,1] = DESCRIBE *INCREMENT DESNO TO [DESCRIBE] *IF [DESCRIBE,DESNO,1] > 1 *PROCESS QUEUE [DESCRIBE,DESNO,1,1] [DESCRIBE,DESNO,1,2] DESCRIBE [*DESNO] *ELSE *PROCESS QUEUE [DESCRIBE,DESNO,1,1] 'NO' DESCRIBE [*DESNO] *END *LOOP *END *IF [SELECT,1,1,1] = TOC *INCREMENT TOCNO TO [TOC] *IF [TOC,TOCNO,3,1] < 5 *IF [TOC,TOCNO,2,1] = '' '' *PROCESS QUEUE [TOC,TOCNO,1,1] 'NO' TOC [*TOCNO] *ELSE *PROCESS QUEUE [TOC,TOCNO,1,1] [TOC,TOCNO,2,1] TOC [*TOCNO] *END *END *LOOP *END *IF [SELECT,1,1,1] = BOTH *INCREMENT PNO TO [P] *CLEAR FOUND *INCREMENT TNO TO [T] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM T,TNO,1,1 FOR [P,PNO,1,1] *IF NOT [T,CARD] = [P,PNO] *SET TNO TO CARD *ELSE *IF [T,CARD] = 1 *SET FOUND TO CARD *ELSE *IF [T,CARD,2,1] = [P,PNO,2,1] *SET FOUND TO CARD *ELSE *SET TNO TO CARD *END *END *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *IF [P,PNO] > 1 *PROCESS QUEUE [P,PNO,1,1] [P,PNO,2,1] P [*PNO] *ELSE *PROCESS QUEUE [P,PNO,1,1] 'NO' P [*PNO] *END *END *LOOP *END *. *. END OF SELECT ! ! *. *. *EJECT *. *. BEGIN PASS 1: PROCS. *. *PROCESS GET DOFIRST *PROCESS GET DOPROC *PROCESS GET DOLANG *IF [MERGE] = 0 AND [DOMAP] > 0 *EDIT ON & #PREP & *PROCESS FILENAME RO . *END *PROCESS GET DOMAP *IF [DOPROC] > 0 OR [DOLANG] > 0 OR [DOMAP] > 0 OR [DOFIRST] > 0 #MSG,N INTERNAL ERROR:[DOPROC] DOPROCS, [DOLANG] DOLANG, ; [DOMAP] DOMAPS, [DOFIRST] DOFIRSTS *END #HDG,N @ELT,SI TPF$.OLDMAP,,,152565033015,006 EQU BASLEV/8 . BASE LEVEL NUMBER EQU UPDLEV/0 . UPDATE LEVEL NUMBER EQU LOCLEV/0 . LOCAL UPDATE LEVEL NUMBER . . THIS UNBANKED COLLECTION SHOULD ONLY BE USED IF 'LDJOK' IS ZERO. . SEG MAIN IN MFD,DSEG,EDIT$,EDIT$T SEG HDGSEG,(MAIN) IN HDG SEG INSEG,(MAIN) IN INIT1,INIT2,INFOR$ SEG CHEKPRTSG,(MAIN) IN CHECK,PRINT SEG PR2SG,(MAIN) IN PRINT2,SNAP SEG TOTSEG,(MAIN) IN TOTALS SEG QFSEG,(CHEKPRTSG,TOTSEG,PR2SG,HDGSEG) IN QF DSEG DIRSEG,(CHEKPRTSG,TOTSEG,PR2SG,HDGSEG) IN DIREC$,DIRSUB DSEG SDFOSG,() IN WOUT,SDFO DSEG SORTSG,() IN SORTER,PRATTS,BKEYS,RDFM$,PCORE,REBD$ IN KRFIND,BCONSG,SORTF END @ELT,SIQ TPF$.PCF,,,141507043117,001 *MFDDEF -31,31- MFDDEF INCREASE MAX SPECS . 8.3 /18/30/ . 8.3 -50,50 MFDDEF . 8.4 POLDBG EQU 1 SUPER SPEC DEBUG LEVEL . 8.4 . 0 = NO DEBUG SNAPS . 8.4 . 1 = DEBUG SNAPS UPON REQUEST . 8.4 . 2 = ALWAYS SNAP . 8.4 -120,120- MFDDEF TURN ON DCFZ CODE . 8.2 /0/1/ . 8.2 -227 MFDDEF . 8.4 POLSNP EQUF MRFLGS,,S6 SUPER SPEC DEBUG SNAP REQUESTED . 8.4 -374 MFDDEF . 8.4 TAPEDENS EQUF MI0+20,,S1 NEW DENSITY INDICATION . 8.4 TAPEDTF EQUF MI0+20,,S2 NEW TAPE DATA TRANSFER FORMAT . 8.4 -378 MFDDEF . 8.4 XLTCPU EQUF MI0+22 TRANSLATION: PROCESSOR MNEMONIC . 8.4 XLTTAPE EQUF MI0+23 TRANSLATION: TAPE MNEMONIC . 8.4 *CHECK -1,3 CHECK . 8.1 $(1) AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DIREC$ -59,59 DIREC$ . 8.3 . IF AN ERROR IS DETECTED BY A DIREC$ SUBROUTINE, THE ERROR RETURN . 8.3 . WILL BE TAKEN. FOR THE ASSEMBLY LANGUAGE CALLING SEQUENCES, ERROR . 8.3 . INDICATIONS WILL BE RETURNED IN REGISTERS A1 AND A2 (A1 = ERROR TYPE, . 8.3 . A2 = ERROR CODE). FOR THE FORTRAN CALLING SEQUENCES, THE ERROR TYPE . 8.3 . AND CODE ARE RETURNED IN ECODE(1) AND ECODE(2), RESPECTIVELY. . 8.3 . . 8.3 . ERROR TYPE ASSOCIATED ERROR CODE . 8.3 . ---------- --------------------- . 8.3 . 1 - ER MSCON$ ERROR MSCON$ STATUS . 8.3 . 2 - I/O ERROR I/O STATUS . 8.3 . 3 - END OF FILE . 8.3 . 4 - ER CSF$ ERROR FAC STATUS . 8.3 . 5 - INITIALIZATION ERROR . 8.3 . (DIRINT WASN'T CALLED) . 8.3 . 6 - TABLE OVERFLOW DIREC$ SHOULD BE RE-BUILT WITH . 8.3 . MAXDIR >= TO THIS VALUE . 8.3 . 7 - BAD LINK ADDRESS USER'S LINK WORD . 8.3 . PASSED TO DIRLNK . 8.3 . 8 - ER MCT$ ERROR MCT$ STATUS . 8.3 . 9 - IMPROPER DIRINT MASK USER'S MASK WORD . 8.3 . 10 - OLD-FORMAT DIRECTORY . 8.3 . 11 - ERROR IN SEARCH ITEM . 8.3 . CHAIN DETECTED BY DIRLUF . 8.3 . . 8.3 . . 8.3 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 -321,321 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), MASK, FORK . 8.3 . CALL DIRINT (ECODE,$ERR,MASK,FORK) . 8.3 -338,339- DIREC$ . 8.3 /RUEN/URNE/ . 8.3 /ECODE/ECODE(1)/ . 8.3 -617,617 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28+(28*SEPBIT)) . 8.3 . CALL DIRSEC (ECODE,$ERR,BUFF) . 8.3 -628 DIREC$ . 8.3 . . 8.3 . IF BOTH 'LIBIT' AND 'MIBIT' WERE SET IN THE DIRINT MASK, DIRSEC WILL . 8.3 . PROVIDE AN INDICATION OF WHICH TYPE OF ITEM IS BEING RETURNED. . 8.3 . FOR ASSEMBLY CALLS, A0 WILL BE 0 FOR LEAD ITEMS AND 1 FOR MAIN ITEMS. . 8.3 . FOR FORTRAN CALLS, ECODE(1) WILL BE 0 FOR A LEAD ITEM AND 1 FOR A . 8.3 . MAIN ITEM. THE NORMAL RETURN WILL BE TAKEN UNLESS AN ACTUAL ERROR . 8.3 . OCCURS. . 8.3 . . 8.3 . IF 'SEPBIT' WAS SET IN THE DIRINT MASK, MAIN ITEMS WILL BE PASSED . 8.3 . STARTING IN BUFF+28 (BUFF(29) FOR FORTRAN). . 8.3 -724 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 AA,U A2,1 POINT TO NEXT SECTOR . 8.2 SA A2,NXSEC UPDATE NEXT SECTOR CELL . 8.2 -739,739 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 JZ A1,DIRSC1 IF NOT, FIND NEXT CORRECT ONE . 8.2 -756,758 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 GTLITM AA A3,(1,TRKBUF) POINT TO LI SECTOR IN TRKBUF . 8.2 -869,869 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28), LINK . 8.3 . CALL DIRLED (ECODE,$ERR,BUFF,LINK) . 8.3 -918,918 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28), LINK . 8.3 . CALL DIRLNK (ECODE,$ERR,BUFF,LINK) . 8.3 -1061,1061 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28) . 8.3 . CALL DIRLUT (ECODE,$ERR,BUFF) . 8.3 -1103,1103 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), QUALFL(4), LUTW . 8.3 . CALL DIRLUW (ECODE,$ERR,QUALFL,LUTW) . 8.3 -1158,1158 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), QUALFL(4), LUTW . 8.3 . CALL DIRLUF (ECODE,$ERR,QUALFL,LUTW) . 8.3 *DIRSUB -4,6 DIRSUB . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DSEG -1,1 DSEG . 8.1 $(1) AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *HDG -3,5 HDG . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *INIT1 -7,9 INIT1 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -312,312 INIT1 . 8.1 UEDIT E$PKT ULINEL,ULINE . EDIT$ PACKET . 8.1 SPECAREA EQU ((LASTSPEC+1)*5)//27 . 8.3 IBUF RES (SPECAREA*27)+1 INFOR DATA AREA . 8.3 IBUFL EQU $-IBUF LENGTH OF INFOR DATA AREA . 8.3 -347,347 INIT1 . 8.3 LA A0,(IBUFL,IBUF) READ INFOR TABLE . 8.3 -446,446 INIT1 . 8.4 J IN1078 NO,IN1078 YES,TYPE IN A0 . 8.4 -458,458 INIT1 . 8.4 J IN1078 CONTINUE - CHECK SUPER SPECS . 8.4 -470 INIT1 . 8.4 . . 8.4 . CLEAR SUPER SPEC TABLES IF CONFIGURED . 8.4 . . 8.4 IN1078 . . 8.4 ON NSSP . 8.4 LX A0,(1,SSTAB) SET ADDR AND INCR FOR BLOCK XFER . 8.4 LX,U A1,(0) TRANSFER ZEROES . 8.4 LR,U R1,SSLEN SET BT REPEAT COUNT . 8.4 BT A0,,*A1 ZERO THE SUPER SPEC TABLE . 8.4 LXM,U A0,POLISH NOW DO POLISH TABLE, TOO . 8.4 LR,U R1,NSSP SET BT REPEAT COUNT . 8.4 BT A0,,*A1 ZERO THAT TABLE, TOO . 8.4 LXM,U A0,TRANS DO TRANS TABLE, ALSO . 8.4 LR,U R1,NSSP SET BT REPEAT COUNT . 8.4 BT A0,,*A1 ZERO THAT TABLE, TOO . 8.4 OFF NSSP . 8.4 -504,504 INIT1 . 8.4 $IF POLDBG=1 . 8.4 . . 8.4 . IF SNAP*POLISH. IS SPECIFIED, JUST SET THE SUPER SPEC . 8.4 . DEBUG SNAP FLAG, AND GET THE NEXT SPEC. . 8.4 . . 8.4 LA,H1 A0,ELT$+4 GET FILENAME . 8.4 TE,U A0,'POL' SUPER SPEC DEBUG WANTED ? . 8.4 J IN1100 NO, CONTINUE PROCESSING . 8.4 SR R15,POLSNP YES, SET SUPER SPEC DEBUG FLAG . 8.4 J IN1080 IGNORE REST OF THIS SPEC . 8.4 $ELSE . 8.4 J IN1100 CONTINUE PROCESSING . 8.4 $ENDF . 8.4 *INIT2 -3,5 INIT2 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -96 INIT2 . 8.4 ON POLDBG=1 . 8.4 TNZ POLSNP SUPER SPEC DEBUG SNAP WANTED ? . 8.4 J IN2020 NO, SKIP IT . 8.4 OFF POLDBG=1 . 8.4 *MFD -1,2 MFD . 8.1 . @MFD - MAIN PROGRAM . 8.1 . . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 ON SORTOK . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 OFF SORTOK . 8.1 . . 8.1 -48,48 MFD . 8.4 SSLEN* EQU SSIZE*NSSP LENGTH OF SUPER SPEC TABLE . 8.4 SSTAB* RES SSLEN RESERVE TABLE SPACE . 8.4 -70,70- MFD . 8.4 / /*/ . 8.4 -160,160 MFD . 8.1 EDPACK* E$PKT 23,LINOUT . EDIT$ PACKET . 8.1 -276,278 MFD . 8.1 -475,475 MFD . 8.4 $IF POLDBG>0 . 8.4 ER PRINT$ PRINT THE MESSAGE . 8.4 $IF POLDBG<2 . 8.4 TNZ POLSNP SUPER SPEC SNAP DESIRED? . 8.4 ER EXIT$ NO . 8.4 $ENDF . 8.4 LA,U A0,077 GET SPECIAL FLAG FOR SNAP . 8.4 SA A0,POLSNP SET FLAG . 8.4 L$OAD PR2SG,SN900,1 SNAP SUPER SPEC TABLES . 8.4 POL410* ER EXIT$ AND EXIT . 8.4 $ELSE . 8.4 J MFD900 PRINT MSG AND EXIT . 8.4 $ENDF . 8.4 *PRINT -3,5 PRINT . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -16 PRINT . 8.4 . . 8.4 . TAPE DENSITY OPTION TABLE . 8.4 . . 8.4 DENSITY ' V ' S1 = SEVEN TRACK . 8.4 'LHS ' S2 = NINE TRACK (LEVEL 35) . 8.4 'MVH ' S3 = NINE TRACK (PRE-35) . 8.4 'HS ' . 8.4 -236,237 PRINT . 8.1 . BUT IF THE W-OPTION IS SET, WE MUST STILL EDIT THE INFORMATION. . 8.1 . . 8.1 PR020 TZ WPT DOES USER WANT SDF OUTPUT ? . 8.1 J PR030 YES, MUST EDIT INFORMATION . 8.1 TZ JPT NO, DOES HE WANT JUST THE TOTALS? . 8.1 -287,325 PRINT . 8.4 TNZ TAPEMODES PRE-35 WORD TAPE ? . 8.4 TZ TMSAMODES OR PRE-35 BYTE TAPE ? . 8.4 J PR070 YES, HANDLE THEM . 8.4 . . 8.4 . LEVEL 35 WORD OR BYTE TAPE . 8.4 . . 8.4 LA A1,TAPEDTF GET DATA TRANSFER FORMAT FLAGS . 8.4 CHECK 'E',020 EDIT LETTER IF EVEN PARITY . 8.4 LX X11,TAPEDENS LOAD DENSITY INDICATOR . 8.4 LA,S1 A0,DENSITY,X11 LOAD SEVEN TRACK DENSITY LETTER . 8.4 TEP,U A1,040 BUT IS IT A 9-TRK BYTE TAPE ? . 8.4 LA,S2 A0,DENSITY,X11 YES, LOAD 9-TRACK DENSITY LETTER . 8.4 J PR090 JUMP TO STORE DENSITY LETTER . 8.4 . . 8.4 . PRE-35 WORD OR BYTE TAPE . 8.4 . . 8.4 . THE PRM STATES THAT 'TAPEMODES' (WORD 21, S4 OF THE MAIN . 8.4 . ITEM) IS ZERO FOR BYTE-TYPE TAPES, BUT THIS IS NOT TRUE. . 8.4 . . 8.4 PR070 LA A1,TAPEMODES LOAD WORD TAPE MODE BITS . 8.4 CHECK 'E',040 EDIT LETTER IF EVEN PARITY . 8.4 CHECK 'I',004 EDIT LETTER IF SOFTWARE XLATE . 8.4 TNZ TMSAMODES BYTE TAPE ? . 8.4 J PR080 NO, HANDLE WORD TAPE . 8.4 . . 8.4 . PRE-35 BYTE TAPE . 8.4 . . 8.4 . BIT 2**35 OF MI0+21 IS USED TO INDICATE 800-FPI MODE FOR . 8.4 . DUAL-DENSITY 9-TRACK BYTE TAPE UNITS. IT IS SET FOR 800, . 8.4 . AND CLEAR FOR 1600. THIS IS THE ONLY WAY TO CHECK FOR . 8.4 . 'V' OPTION. HOWEVER, THIS BIT IS ALWAYS CLEAR FOR 7-TRACK . 8.4 . BYTE TAPE UNITS, SO WE MUST CHECK FOR 9-TRACK BEFORE . 8.4 . ADDING THE 'V'. I DON'T LIKE THIS, SINCE IT RELIES ON THE . 8.4 . 'OLD EQUIPMENT CODE'. . 8.4 . . 8.4 LA A0,MI0OLDEQP GET OLD EQUIPMENT CODE . 8.4 TG,U A0,013 9-TRACK BYTE TAPE UNIT ? . 8.4 TG,U A0,016 . 8.4 J PR080 NO, IT'S SEVEN TRACK . 8.4 . . 8.4 . PRE-35 9-TRACK BYTE TAPE . 8.4 . . 8.4 LA A1,TMSAMODES LOAD BYTE TAPE MODES . 8.4 SSL A1,10 TURN BITS 35 AND 34 INTO INDEX . 8.4 LA,S3 A0,DENSITY,A1 LOAD PROPER DENSITY LETTER . 8.4 J PR090 JUMP TO EDIT THE LETTER . 8.4 . . 8.4 . PRE-35 WORD OR 7-TRACK BYTE TAPE . 8.4 . . 8.4 PR080 LA A0,TAPEMODES LOAD WORD TAPE MODE BITS . 8.4 AND,U A0,030 ISOLATE DENSITY BITS . 8.4 SSL A1,3 ADJUST FOR USE AS INDEX . 8.4 LA,S1 A0,DENSITY,A1 LOAD PROPER DENSITY LETTER . 8.4 . . 8.4 PR090 EX ST,*A2 EDIT THE DENSITY LETTER . 8.4 . . 8.4 . . 8.4 -623,624 PRINT . 8.4 TNZ XLTCPU TRANSLATOR TO EDIT, OR . 8.4 TZ TMSAMODES PRE-35 BYTE TAPE ? . 8.4 J PR530 YES, FORCE LOAD OF PRINT2 . 8.4 TZ TAPEMODES NO, PRE-35 WORD TAPE ? . 8.4 J PR525 YES, NO REASON TO FORCE PRINT2 . 8.4 . . 8.4 . LEVEL 35 TAPE, BUT NO TRANSLATOR . 8.4 . . 8.4 LA A0,TAPEDTF LOAD DATA TRANSFER FORMAT BITS . 8.4 AND,U A0,017 ANYTHING SPECIAL TO PRINT ? . 8.4 JNZ A1,PR530 YES, FORCE LOAD OF PRINT2 . 8.4 *PRINT2 -8,10 PRINT2 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -28 PRINT2 . 8.4 XLTMSG 'TRANSLATOR: CPU = &, TAPE = & &' . 8.4 -201 PRINT2 . 8.4 LA A0,UNIT1 GET UNIT NAME FROM INFO$ . 8.4 JZ A0,PM605 USE FITEM$ SS/UU IF NONE . 8.4 E$FD1 . EDIT UNIT NAME . 8.4 TNZ UNIT2 IS THERE A SECOND UNIT ? . 8.4 J PM610 NO, SKIP SECOND UNIT EDIT . 8.4 E$CHAR ',' EDIT A COMMA BETWEEN UNITS . 8.4 E$FD1 UNIT2 YES, EDIT THE NAME . 8.4 J PM610 GO ON . 8.4 PM605 . . 8.4 -245,245 PRINT2 . 8.4 LA A0,INFILESX GET # FILES EXTENDED FROM INFO$ . 8.4 TNZ A0 ANYTHING THERE ? . 8.4 LA,S4 A0,FITEM+10 NO, TRY GETTING IT FROM FITEM$ . 8.4 E$DECV . EDIT # FILES EXTENDED . 8.4 -248,248 PRINT2 . 8.4 LA A0,INBLOCKSX GET BLOCKS EXTENDED FROM INFO$ . 8.4 TNZ A0 ANYTHING THERE ? . 8.4 LA,T3 A0,FITEM+10 NO, GET IT FROM FITEM$ . 8.4 -252 PRINT2 . 8.4 TZ INTMODES MODE BITS SUPPLIED BY INFO$ ? . 8.4 J PM700 YES, WE STUCK THEM IN MAIN ITEM . 8.4 -287,288 PRINT2 . 8.4 PM700 TNZ TAPEMODES PRE-35 WORD TAPE, OR . 8.4 TZ TMSAMODES PRE-35 BYTE TAPE ? . 8.4 J PM740 YES, HANDLE THEM . 8.4 . . 8.4 . LEVEL 35 TAPE . 8.4 . . 8.4 LA A4,TAPEDTF LOAD DATA TRANSFER FORMAT BITS . 8.4 AND,U A4,017 ANY NEAT MODES TO EDIT? . 8.4 JNZ A5,PM710 YES, GO ON . 8.4 TNZ XLTCPU NO, IS THERE A TRANSLATOR ? . 8.4 J PM900 NO, NOTHING MORE TO PRINT . 8.4 PM710 E$DIT EDPACK OPEN EDIT . 8.4 E$COL COL1 MOVE TO STARTING COLUMN . 8.4 JZ A5,PM720 JUMP IF ONLY EDITING TRANSLATOR . 8.4 . . 8.4 . EDIT TAPE DATA TRANSFER FORMAT MESSAGES . 8.4 . . 8.4 LA,U A0,0 ASSUME NO MESSAGE . 8.4 TEP,U A5,1*/3 8-BIT PACKED ? . 8.4 LA,U A0,MSA8 GET SET FOR 8-BIT PACKED MSG . 8.4 TEP,U A5,1*/2 6-BIT PACKED ? . 8.4 LA,U A0,MSA6 GET SET FOR 6-BIT PACKED MSG . 8.4 TEP,U A5,1*/1 QUARTER-WORD SET ? . 8.4 LA,U A0,MSAQ GET SET FOR QUARTER-WORD MSG . 8.4 TZ A0 IF THERE'S A MESSAGE, . 8.4 E$MSG . EDIT IT . 8.4 LA,U A0,DCONV GET SET FOR DATA CONVERTER MSG . 8.4 TEP,U A5,1*/0 DATA CONVERTER ON ? . 8.4 E$MSG . YES, EDIT MESSAGE . 8.4 . . 8.4 . EDIT TAPE TRANSLATOR IF ANY . 8.4 . . 8.4 TNZ XLTCPU IS A TRANSLATOR SPECIFIED ? . 8.4 J PM750 NO, GO ON . 8.4 PM720 E$MSG XLTMSG YES, EDIT MESSAGE . 8.4 E$FD1 XLTCPU EDIT PROCESSOR MNEMONIC . 8.4 E$MSGR . CONTINUE MSG . 8.4 E$FD1 XLTTAPE EDIT TAPE MNEMONIC . 8.4 E$MSGR . END MSG . 8.4 J PM750 PRINT THE IMAGE . 8.4 . . 8.4 . PRE-35 WORD OR BYTE TAPE . 8.4 . . 8.4 PM740 TNZ TMSAMODES PRE-35 BYTE TAPE ? . 8.4 J PM900 NO, SKIP TAPE MODE STUFF . 8.4 *QF -3,5 QF . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -18 QF . 8.4 . . 8.4 . THE FOLLOWING IS FILLED IN BY ER INFO$ . 8.4 . . 8.4 UNIT1* + 0 UNIT 1 MNEMONIC . 8.4 UNIT2* + 0 UNIT 2 MNEMONIC . 8.4 INMNEM + 0 SPECIFIC MNEMONIC . 8.4 INEQUIP + 0 EQUIPMENT TYPE BITS . 8.4 INFILESX* + 0 FILES EXTENDED . 8.4 INBLOCKSX* + 0 BLOCKS EXTENDED . 8.4 INTMODES* + 0 TAPE MODES . 8.4 XLATE + 0D TAPE TRANSLATION MNEMONICS . 8.4 . . 8.4 . ER INFO$ PACKET . 8.4 . . 8.4 INFO + INFILE$,0,0 TELL INFO$ WHAT FILE . 8.4 + 2,FITEM INTERNAL NAME . 8.4 + FEQP$,0,0 GET SPECIFIC MNEMONIC . 8.4 + 1,INMNEM AND PUT IT THERE . 8.4 + EQUIP$,0,0 GET EQUIPMENT TYPE BITS . 8.4 + 1,INEQUIP AND PUT THEM HERE . 8.4 + LNAME$,0,0 GET DEVICE NAME(S) . 8.4 + 2,UNIT1 AND SET IN UNIT1 AND UNIT2 . 8.4 + MODE$,0,0 GET TAPE MODE INFORMATION . 8.4 + 3,INTMODES AND STORE THEM . 8.4 + FFILEX$,0,0 RETRIEVE FILES EXTENDED . 8.4 + 1,INFILESX AND STORE IT . 8.4 + FBLKSX$,0,0 RETRIEVE BLOCKS EXTENDED . 8.4 + 1,INBLOCKSX AND STORE IT . 8.4 INFOL EQU $-INFO LENGTH OF ER INFO$ PACKET . 8.4 . . 8.4 . END OF ER INFO$ STUFF . 8.4 . . 8.4 -84 qf . 8.4 . IF THE FILE IS ALREADY ASSIGNED, AN ER INFO$ IS PERFORMED . 8.4 . TO OBTAIN ADDITIONAL INFORMATION ABOUT THE FILE. . 8.4 -152 QF . 8.4 LA A0,(INFOL,INFO) PREPARE FOR ER INFO$ . 8.4 ER INFO$ DO IT . 8.4 -219,219 QF . 8.4 FIT030 LA A1,INMNEM GET MNEMONIC SUPPLIED BY INFO$ . 8.4 TZ A1 ANYTHING THERE ? . 8.4 SA A1,MNEMONIC YES, STORE IT . 8.4 LA,T3 A1,FITEM+6 GET FCYCLE . 8.4 -273 QF . 8.4 DL A0,XLATE LOAD TRANSLATOR MNEMONICS . 8.4 TE A0,(' ') IF NOT BLANK, . 8.4 DS A0,XLTCPU STORE IN MAIN ITEM . 8.4 TNZ INEQUIP STUFF RETURNED BY ER INFO$ ? . 8.4 J FIT112 NO, CARRY ON WITHOUT IT . 8.4 LA,T3 A1,INEQUIP YES, GET EQUIPMENT TYPE BITS . 8.4 LA,U A0,0 ASSUME TAPE IS SEVEN TRACK . 8.4 TEP,U A1,1*/6 9-TRACK BIT SET ? . 8.4 LA,U A0,040 YES, INDICATE NINE TRACK . 8.4 OR,S6 A0,INTMODES COMBINE WITH DATA XFER FORMAT BITS. 8.4 SA A1,TAPEDTF SET IN MAIN ITEM . 8.4 LA,S5 A0,INTMODES GET DENSITY INDICATOR . 8.4 SA A0,TAPEDENS STORE IN MAIN ITEM . 8.4 J FIT120 GO ON . 8.4 FIT112 . . 8.4 -484 QF . 8.4 TZ INMNEM WAS MNEMONIC SUPPLIED BY INFO$ ? . 8.4 J PCT325 YES, SKIP MCT STUFF . 8.4 *SNAP -3,4 SNAP . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -6,6 SNAP . 8.1 -233,233 SNAP . 8.4 -249,249 SNAP . 8.4 SNAPP 'SSTAB ',SSTAB,SSLEN . 8.4 -250 SNAP . 8.4 SNAPP 'TRANS ',TRANS,NSSP . 8.4 -259 SNAP . 8.4 LA A0,POLSNP LOOK FOR SPECIAL FLAG . 8.4 TNE,U A0,077 CALL FROM POLTRAN? . 8.4 J POL410 YES, RETURN TO MAIN SEGMENT . 8.4 -281,281 SNAP . 8.4 E$DIT EDPACK OPEN EDIT . 8.4 E$COPY 6,SNAPKT EDIT SNAP HEADER . 8.4 E$SKIP 1 MOVE OVER . 8.4 E$OCTF 6,SNAPKT+1,,H2 EDIT BUFFER ADDRESS . 8.4 P$RINT POUT2 PRINT THE HEADER . 8.4 *SORTER -25,27 SORTER . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -28 SORTER . 8.1 r$ncds . disable run time parameters *TOTALS -9,11 TOTALS . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *WOUT -6,8 WOUT . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -56 WOUT . 8.1 TZ JPT DOES USER WANT JUST TOTALS PRINTED. 8.1 J MFD300 YES, GET NEXT FILE, SKIPPING CHECK. 8.1 . FOR LISTING OPTIONS . 8.1 *userdoc -575,575 userdoc (If this letter does not appear, the tape is odd parity). S: Super density (6250 BPI) -580,580 userdoc @ELT,SIQ TPF$.PCF/8-1,,,136061072623,001 *CHECK -1,3 CHECK . 8.1 $(1) $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DIREC$ -59,59 DIREC$ $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *DIRSUB -4,6 DIRSUB . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DSEG -1,1 DSEG . 8.1 $(1) $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *HDG -3,5 HDG . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *INIT1 -7,9 INIT1 . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -312,312 INIT1 . 8.1 UEDIT E$PKT ULINEL,ULINE . EDIT$ PACKET . 8.1 *INIT2 -3,5 INIT2 . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *MFD -1,2 MFD . 8.1 . @MFD - MAIN PROGRAM . 8.1 . . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 ON SORTOK . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 OFF SORTOK . 8.1 . . 8.1 -160,160 MFD . 8.1 EDPACK* E$PKT 23,LINOUT . EDIT$ PACKET . 8.1 -276,278 MFD . 8.1 *PRINT -3,5 PRINT . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -236,237 PRINT . 8.1 . BUT IF THE W-OPTION IS SET, WE MUST STILL EDIT THE INFORMATION. . 8.1 . . 8.1 PR020 TZ WPT DOES USER WANT SDF OUTPUT? . 8.1 J PR030 YES, MUST EDIT INFORMATION . 8.1 TZ JPT NO, DOES HE WANT JUST THE TOTALS? . 8.1 *PRINT2 -8,10 PRINT2 . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *QF -3,5 QF . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *SNAP -3,4 SNAP . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -6,6 SNAP . 8.1 *SORTER -25,27 SORTER . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -28 SORTER . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 *SORTF -1,1 SORTF $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *TOTALS -9,11 TOTALS . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *WOUT -6,8 WOUT . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -56 WOUT . 8.1 TZ JPT DOES USER WANT JUST TOTALS PRINTED. 8.1 J MFD300 YES, GET NEXT FILE, SKIPPING CHECK. 8.1 . FOR LISTING OPTIONS . 8.1 @ELT,SIQ TPF$.PCF/8-2,,,136124072623,001 *MFDDEF -120,120- MFDDEF TURN ON DCFZ CODE . 8.2 /0/1/ . 8.2 *CHECK -1,3 CHECK . 8.1 $(1) $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DIREC$ -59,59 DIREC$ $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 -724 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 AA,U A2,1 POINT TO NEXT SECTOR . 8.2 SA A2,NXSEC UPDATE NEXT SECTOR CELL . 8.2 -739,739 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 JZ A1,DIRSC1 IF NOT, FIND NEXT CORRECT ONE . 8.2 -756,758 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 GTLITM AA A3,(1,TRKBUF) POINT TO LI SECTOR IN TRKBUF . 8.2 *DIRSUB -4,6 DIRSUB . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DSEG -1,1 DSEG . 8.1 $(1) $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *HDG -3,5 HDG . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *INIT1 -7,9 INIT1 . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -312,312 INIT1 . 8.1 UEDIT E$PKT ULINEL,ULINE . EDIT$ PACKET . 8.1 *INIT2 -3,5 INIT2 . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *MFD -1,2 MFD . 8.1 . @MFD - MAIN PROGRAM . 8.1 . . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 ON SORTOK . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 OFF SORTOK . 8.1 . . 8.1 -160,160 MFD . 8.1 EDPACK* E$PKT 23,LINOUT . EDIT$ PACKET . 8.1 -276,278 MFD . 8.1 *PRINT -3,5 PRINT . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -236,237 PRINT . 8.1 . BUT IF THE W-OPTION IS SET, WE MUST STILL EDIT THE INFORMATION. . 8.1 . . 8.1 PR020 TZ WPT DOES USER WANT SDF OUTPUT? . 8.1 J PR030 YES, MUST EDIT INFORMATION . 8.1 TZ JPT NO, DOES HE WANT JUST THE TOTALS? . 8.1 *PRINT2 -8,10 PRINT2 . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *QF -3,5 QF . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *SNAP -3,4 SNAP . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -6,6 SNAP . 8.1 *SORTER -25,27 SORTER . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -28 SORTER . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 *SORTF -1,1 SORTF $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *TOTALS -9,11 TOTALS . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *WOUT -6,8 WOUT . 8.1 $INCLUDE 'AXR$' DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -56 WOUT . 8.1 TZ JPT DOES USER WANT JUST TOTALS PRINTED. 8.1 J MFD300 YES, GET NEXT FILE, SKIPPING CHECK. 8.1 . FOR LISTING OPTIONS . 8.1 @ELT,SIQ TPF$.PCF/8-3,,,136172072623,001 *MFDDEF -31,31- MFDDEF INCREASE MAX SPECS . 8.3 /18/30/ . 8.3 -120,120- MFDDEF TURN ON DCFZ CODE . 8.2 /0/1/ . 8.2 *CHECK -1,3 CHECK . 8.1 $(1) AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DIREC$ -59,59 DIREC$ . 8.3 . IF AN ERROR IS DETECTED BY A DIREC$ SUBROUTINE, THE ERROR RETURN . 8.3 . WILL BE TAKEN. FOR THE ASSEMBLY LANGUAGE CALLING SEQUENCES, ERROR . 8.3 . INDICATIONS WILL BE RETURNED IN REGISTERS A1 AND A2 (A1 = ERROR TYPE, . 8.3 . A2 = ERROR CODE). FOR THE FORTRAN CALLING SEQUENCES, THE ERROR TYPE . 8.3 . AND CODE ARE RETURNED IN ECODE(1) AND ECODE(2), RESPECTIVELY. . 8.3 . . 8.3 . ERROR TYPE ASSOCIATED ERROR CODE . 8.3 . ---------- --------------------- . 8.3 . 1 - ER MSCON$ ERROR MSCON$ STATUS . 8.3 . 2 - I/O ERROR I/O STATUS . 8.3 . 3 - END OF FILE . 8.3 . 4 - ER CSF$ ERROR FAC STATUS . 8.3 . 5 - INITIALIZATION ERROR . 8.3 . (DIRINT WASN'T CALLED) . 8.3 . 6 - TABLE OVERFLOW DIREC$ SHOULD BE RE-BUILT WITH . 8.3 . MAXDIR >= TO THIS VALUE . 8.3 . 7 - BAD LINK ADDRESS USER'S LINK WORD . 8.3 . PASSED TO DIRLNK . 8.3 . 8 - ER MCT$ ERROR MCT$ STATUS . 8.3 . 9 - IMPROPER DIRINT MASK USER'S MASK WORD . 8.3 . 10 - OLD-FORMAT DIRECTORY . 8.3 . 11 - ERROR IN SEARCH ITEM . 8.3 . CHAIN DETECTED BY DIRLUF . 8.3 . . 8.3 . . 8.3 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 -321,321 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), MASK, FORK . 8.3 . CALL DIRINT (ECODE,$ERR,MASK,FORK) . 8.3 -338,339- DIREC$ . 8.3 /RUEN/URNE/ . 8.3 /ECODE/ECODE(1)/ . 8.3 -617,617 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28+(28*SEPBIT)) . 8.3 . CALL DIRSEC (ECODE,$ERR,BUFF) . 8.3 -628 DIREC$ . 8.3 . . 8.3 . IF BOTH 'LIBIT' AND 'MIBIT' WERE SET IN THE DIRINT MASK, DIRSEC WILL . 8.3 . PROVIDE AN INDICATION OF WHICH TYPE OF ITEM IS BEING RETURNED. . 8.3 . FOR ASSEMBLY CALLS, A0 WILL BE 0 FOR LEAD ITEMS AND 1 FOR MAIN ITEMS. . 8.3 . FOR FORTRAN CALLS, ECODE(1) WILL BE 0 FOR A LEAD ITEM AND 1 FOR A . 8.3 . MAIN ITEM. THE NORMAL RETURN WILL BE TAKEN UNLESS AN ACTUAL ERROR . 8.3 . OCCURS. . 8.3 . . 8.3 . IF 'SEPBIT' WAS SET IN THE DIRINT MASK, MAIN ITEMS WILL BE PASSED . 8.3 . STARTING IN BUFF+28 (BUFF(29) FOR FORTRAN). . 8.3 -724 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 AA,U A2,1 POINT TO NEXT SECTOR . 8.2 SA A2,NXSEC UPDATE NEXT SECTOR CELL . 8.2 -739,739 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 JZ A1,DIRSC1 IF NOT, FIND NEXT CORRECT ONE . 8.2 -756,758 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 GTLITM AA A3,(1,TRKBUF) POINT TO LI SECTOR IN TRKBUF . 8.2 -869,869 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28), LINK . 8.3 . CALL DIRLED (ECODE,$ERR,BUFF,LINK) . 8.3 -918,918 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28), LINK . 8.3 . CALL DIRLNK (ECODE,$ERR,BUFF,LINK) . 8.3 -1061,1061 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28) . 8.3 . CALL DIRLUT (ECODE,$ERR,BUFF) . 8.3 -1103,1103 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), QUALFL(4), LUTW . 8.3 . CALL DIRLUW (ECODE,$ERR,QUALFL,LUTW) . 8.3 -1158,1158 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), QUALFL(4), LUTW . 8.3 . CALL DIRLUF (ECODE,$ERR,QUALFL,LUTW) . 8.3 *DIRSUB -4,6 DIRSUB . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DSEG -1,1 DSEG . 8.1 $(1) AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *HDG -3,5 HDG . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *INIT1 -7,9 INIT1 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -312,312 INIT1 . 8.1 UEDIT E$PKT ULINEL,ULINE . EDIT$ PACKET . 8.1 SPECAREA EQU ((LASTSPEC+1)*5)//27 . 8.3 IBUF RES (SPECAREA*27)+1 INFOR DATA AREA . 8.3 IBUFL EQU $-IBUF LENGTH OF INFOR DATA AREA . 8.3 -347,347 INIT1 . 8.3 LA A0,(IBUFL,IBUF) READ INFOR TABLE *INIT2 -3,5 INIT2 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *MFD -1,2 MFD . 8.1 . @MFD - MAIN PROGRAM . 8.1 . . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 ON SORTOK . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 OFF SORTOK . 8.1 . . 8.1 -160,160 MFD . 8.1 EDPACK* E$PKT 23,LINOUT . EDIT$ PACKET . 8.1 -276,278 MFD . 8.1 *PRINT -3,5 PRINT . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -236,237 PRINT . 8.1 . BUT IF THE W-OPTION IS SET, WE MUST STILL EDIT THE INFORMATION. . 8.1 . . 8.1 PR020 TZ WPT DOES USER WANT SDF OUTPUT? . 8.1 J PR030 YES, MUST EDIT INFORMATION . 8.1 TZ JPT NO, DOES HE WANT JUST THE TOTALS? . 8.1 *PRINT2 -8,10 PRINT2 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *QF -3,5 QF . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *SNAP -3,4 SNAP . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -6,6 SNAP . 8.1 *SORTER -25,27 SORTER . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -28 SORTER . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 *SORTF -24 SORTF . 8.3 PRE35 EQU 1 NONZERO TO TURN ON PRE-LEVEL-35 . 8.3 . MSALL$ COMPATIBILITY CODE . 8.3 . . 8.3 -90 SORTF . 8.3 MSVER EQUF MSPKT+0,,T1 MSALL$ REVISION INDICATOR . 8.3 -206 SORTF . 8.3 ON PRE35 . 8.3 TZ MSVER LEVEL 35R1 OR ABOVE? . 8.3 J MS35 YES, HANDLE NEW FORMAT . 8.3 -220 SORTF . 8.3 J MSPRE35 SKIP LEVEL 35 STUFF . 8.3 MS35 . . 8.3 OFF PRE35 . 8.3 LA,H2 A2,MSBUF GET # OF ENTRIES (INCL THIS WORD) . 8.3 AN,U A2,2 COMPUTE EQUIP TYPES - 1 FOR JGD . 8.3 MSLOOP LA,H2 A0,MSBUF+1,A2 GET POINTER TO EQUIPMENT SUMMARY . 8.3 AA A10,MSBUF+3,A0 ACCUMULATE TRACKS AVAILABLE . 8.3 JGD A2,MSLOOP DO FOR ALL CONFIGURED MSG EQUIP . 8.3 LA A1,A10 COPY AVAILABLE TRACKS TO A1 . 8.3 SSL A1,6 CONVERT TO POSITIONS . 8.3 ON PRE35 . 8.3 MSPRE35 . . 8.3 OFF PRE35 . 8.3 *TOTALS -9,11 TOTALS . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *WOUT -6,8 WOUT . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -56 WOUT . 8.1 TZ JPT DOES USER WANT JUST TOTALS PRINTED. 8.1 J MFD300 YES, GET NEXT FILE, SKIPPING CHECK. 8.1 . FOR LISTING OPTIONS . 8.1 @ELT,SIQ TPF$.PCF/8-4,,,170570140215,001 *MFDDEF -31,31- MFDDEF INCREASE MAX SPECS . 8.3 /18/30/ . 8.3 -50,50 MFDDEF . 8.4 POLDBG EQU 1 SUPER SPEC DEBUG LEVEL . 8.4 . 0 = NO DEBUG SNAPS . 8.4 . 1 = DEBUG SNAPS UPON REQUEST . 8.4 . 2 = ALWAYS SNAP . 8.4 -120,120- MFDDEF TURN ON DCFZ CODE . 8.2 /0/1/ . 8.2 -227 MFDDEF . 8.4 POLSNP EQUF MRFLGS,,S6 SUPER SPEC DEBUG SNAP REQUESTED . 8.4 -374 MFDDEF . 8.4 TAPEDENS EQUF MI0+20,,S1 NEW DENSITY INDICATION . 8.4 TAPEDTF EQUF MI0+20,,S2 NEW TAPE DATA TRANSFER FORMAT . 8.4 -378 MFDDEF . 8.4 XLTCPU EQUF MI0+22 TRANSLATION: PROCESSOR MNEMONIC . 8.4 XLTTAPE EQUF MI0+23 TRANSLATION: TAPE MNEMONIC . 8.4 *CHECK -1,3 CHECK . 8.1 $(1) AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DIREC$ -59,59 DIREC$ . 8.3 . IF AN ERROR IS DETECTED BY A DIREC$ SUBROUTINE, THE ERROR RETURN . 8.3 . WILL BE TAKEN. FOR THE ASSEMBLY LANGUAGE CALLING SEQUENCES, ERROR . 8.3 . INDICATIONS WILL BE RETURNED IN REGISTERS A1 AND A2 (A1 = ERROR TYPE, . 8.3 . A2 = ERROR CODE). FOR THE FORTRAN CALLING SEQUENCES, THE ERROR TYPE . 8.3 . AND CODE ARE RETURNED IN ECODE(1) AND ECODE(2), RESPECTIVELY. . 8.3 . . 8.3 . ERROR TYPE ASSOCIATED ERROR CODE . 8.3 . ---------- --------------------- . 8.3 . 1 - ER MSCON$ ERROR MSCON$ STATUS . 8.3 . 2 - I/O ERROR I/O STATUS . 8.3 . 3 - END OF FILE . 8.3 . 4 - ER CSF$ ERROR FAC STATUS . 8.3 . 5 - INITIALIZATION ERROR . 8.3 . (DIRINT WASN'T CALLED) . 8.3 . 6 - TABLE OVERFLOW DIREC$ SHOULD BE RE-BUILT WITH . 8.3 . MAXDIR >= TO THIS VALUE . 8.3 . 7 - BAD LINK ADDRESS USER'S LINK WORD . 8.3 . PASSED TO DIRLNK . 8.3 . 8 - ER MCT$ ERROR MCT$ STATUS . 8.3 . 9 - IMPROPER DIRINT MASK USER'S MASK WORD . 8.3 . 10 - OLD-FORMAT DIRECTORY . 8.3 . 11 - ERROR IN SEARCH ITEM . 8.3 . CHAIN DETECTED BY DIRLUF . 8.3 . . 8.3 . . 8.3 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 -321,321 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), MASK, FORK . 8.3 . CALL DIRINT (ECODE,$ERR,MASK,FORK) . 8.3 -338,339- DIREC$ . 8.3 /RUEN/URNE/ . 8.3 /ECODE/ECODE(1)/ . 8.3 -617,617 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28+(28*SEPBIT)) . 8.3 . CALL DIRSEC (ECODE,$ERR,BUFF) . 8.3 -628 DIREC$ . 8.3 . . 8.3 . IF BOTH 'LIBIT' AND 'MIBIT' WERE SET IN THE DIRINT MASK, DIRSEC WILL . 8.3 . PROVIDE AN INDICATION OF WHICH TYPE OF ITEM IS BEING RETURNED. . 8.3 . FOR ASSEMBLY CALLS, A0 WILL BE 0 FOR LEAD ITEMS AND 1 FOR MAIN ITEMS. . 8.3 . FOR FORTRAN CALLS, ECODE(1) WILL BE 0 FOR A LEAD ITEM AND 1 FOR A . 8.3 . MAIN ITEM. THE NORMAL RETURN WILL BE TAKEN UNLESS AN ACTUAL ERROR . 8.3 . OCCURS. . 8.3 . . 8.3 . IF 'SEPBIT' WAS SET IN THE DIRINT MASK, MAIN ITEMS WILL BE PASSED . 8.3 . STARTING IN BUFF+28 (BUFF(29) FOR FORTRAN). . 8.3 -724 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 AA,U A2,1 POINT TO NEXT SECTOR . 8.2 SA A2,NXSEC UPDATE NEXT SECTOR CELL . 8.2 -739,739 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 JZ A1,DIRSC1 IF NOT, FIND NEXT CORRECT ONE . 8.2 -756,758 DIREC$ FIX MAIN-ITEMS-ONLY LOOP . 8.2 GTLITM AA A3,(1,TRKBUF) POINT TO LI SECTOR IN TRKBUF . 8.2 -869,869 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28), LINK . 8.3 . CALL DIRLED (ECODE,$ERR,BUFF,LINK) . 8.3 -918,918 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28), LINK . 8.3 . CALL DIRLNK (ECODE,$ERR,BUFF,LINK) . 8.3 -1061,1061 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), BUFF(28) . 8.3 . CALL DIRLUT (ECODE,$ERR,BUFF) . 8.3 -1103,1103 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), QUALFL(4), LUTW . 8.3 . CALL DIRLUW (ECODE,$ERR,QUALFL,LUTW) . 8.3 -1158,1158 DIREC$ . 8.3 . FORTRAN: INTEGER ECODE(2), QUALFL(4), LUTW . 8.3 . CALL DIRLUF (ECODE,$ERR,QUALFL,LUTW) . 8.3 *DIRSUB -4,6 DIRSUB . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *DSEG -1,1 DSEG . 8.1 $(1) AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 *HDG -3,5 HDG . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *INIT1 -7,9 INIT1 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -312,312 INIT1 . 8.1 UEDIT E$PKT ULINEL,ULINE . EDIT$ PACKET . 8.1 SPECAREA EQU ((LASTSPEC+1)*5)//27 . 8.3 IBUF RES (SPECAREA*27)+1 INFOR DATA AREA . 8.3 IBUFL EQU $-IBUF LENGTH OF INFOR DATA AREA . 8.3 -347,347 INIT1 . 8.3 LA A0,(IBUFL,IBUF) READ INFOR TABLE . 8.3 -446,446 INIT1 . 8.4 J IN1078 NO,IN1078 YES,TYPE IN A0 . 8.4 -458,458 INIT1 . 8.4 J IN1078 CONTINUE - CHECK SUPER SPECS . 8.4 -470 INIT1 . 8.4 . . 8.4 . CLEAR SUPER SPEC TABLES IF CONFIGURED . 8.4 . . 8.4 IN1078 . . 8.4 ON NSSP . 8.4 LX A0,(1,SSTAB) SET ADDR AND INCR FOR BLOCK XFER . 8.4 LX,U A1,(0) TRANSFER ZEROES . 8.4 LR,U R1,SSLEN SET BT REPEAT COUNT . 8.4 BT A0,,*A1 ZERO THE SUPER SPEC TABLE . 8.4 LXM,U A0,POLISH NOW DO POLISH TABLE, TOO . 8.4 LR,U R1,NSSP SET BT REPEAT COUNT . 8.4 BT A0,,*A1 ZERO THAT TABLE, TOO . 8.4 LXM,U A0,TRANS DO TRANS TABLE, ALSO . 8.4 LR,U R1,NSSP SET BT REPEAT COUNT . 8.4 BT A0,,*A1 ZERO THAT TABLE, TOO . 8.4 OFF NSSP . 8.4 -504,504 INIT1 . 8.4 $IF POLDBG=1 . 8.4 . . 8.4 . IF SNAP*POLISH. IS SPECIFIED, JUST SET THE SUPER SPEC . 8.4 . DEBUG SNAP FLAG, AND GET THE NEXT SPEC. . 8.4 . . 8.4 LA,H1 A0,ELT$+4 GET FILENAME . 8.4 TE,U A0,'POL' SUPER SPEC DEBUG WANTED ? . 8.4 J IN1100 NO, CONTINUE PROCESSING . 8.4 SR R15,POLSNP YES, SET SUPER SPEC DEBUG FLAG . 8.4 J IN1080 IGNORE REST OF THIS SPEC . 8.4 $ELSE . 8.4 J IN1100 CONTINUE PROCESSING . 8.4 $ENDF . 8.4 *INIT2 -3,5 INIT2 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -96 INIT2 . 8.4 ON POLDBG=1 . 8.4 TNZ POLSNP SUPER SPEC DEBUG SNAP WANTED ? . 8.4 J IN2020 NO, SKIP IT . 8.4 OFF POLDBG=1 . 8.4 *MFD -1,2 MFD . 8.1 . @MFD - MAIN PROGRAM . 8.1 . . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 ON SORTOK . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 OFF SORTOK . 8.1 . . 8.1 -48,48 MFD . 8.4 SSLEN* EQU SSIZE*NSSP LENGTH OF SUPER SPEC TABLE . 8.4 SSTAB* RES SSLEN RESERVE TABLE SPACE . 8.4 -70,70- MFD . 8.4 / /*/ . 8.4 -160,160 MFD . 8.1 EDPACK* E$PKT 23,LINOUT . EDIT$ PACKET . 8.1 -276,278 MFD . 8.1 -475,475 MFD . 8.4 $IF POLDBG>0 . 8.4 ER PRINT$ PRINT THE MESSAGE . 8.4 $IF POLDBG<2 . 8.4 TNZ POLSNP SUPER SPEC SNAP DESIRED? . 8.4 ER EXIT$ NO . 8.4 $ENDF . 8.4 LA,U A0,077 GET SPECIAL FLAG FOR SNAP . 8.4 SA A0,POLSNP SET FLAG . 8.4 L$OAD PR2SG,SN900,1 SNAP SUPER SPEC TABLES . 8.4 POL410* ER EXIT$ AND EXIT . 8.4 $ELSE . 8.4 J MFD900 PRINT MSG AND EXIT . 8.4 $ENDF . 8.4 *PRINT -3,5 PRINT . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -16 PRINT . 8.4 . . 8.4 . TAPE DENSITY OPTION TABLE . 8.4 . . 8.4 DENSITY ' V ' S1 = SEVEN TRACK . 8.4 'LHS ' S2 = NINE TRACK (LEVEL 35) . 8.4 'MVH ' S3 = NINE TRACK (PRE-35) . 8.4 'HS ' . 8.4 -236,237 PRINT . 8.1 . BUT IF THE W-OPTION IS SET, WE MUST STILL EDIT THE INFORMATION. . 8.1 . . 8.1 PR020 TZ WPT DOES USER WANT SDF OUTPUT ? . 8.1 J PR030 YES, MUST EDIT INFORMATION . 8.1 TZ JPT NO, DOES HE WANT JUST THE TOTALS? . 8.1 -287,325 PRINT . 8.4 TNZ TAPEMODES PRE-35 WORD TAPE ? . 8.4 TZ TMSAMODES OR PRE-35 BYTE TAPE ? . 8.4 J PR070 YES, HANDLE THEM . 8.4 . . 8.4 . LEVEL 35 WORD OR BYTE TAPE . 8.4 . . 8.4 LA A1,TAPEDTF GET DATA TRANSFER FORMAT FLAGS . 8.4 CHECK 'E',020 EDIT LETTER IF EVEN PARITY . 8.4 LX X11,TAPEDENS LOAD DENSITY INDICATOR . 8.4 LA,S1 A0,DENSITY,X11 LOAD SEVEN TRACK DENSITY LETTER . 8.4 TEP,U A1,040 BUT IS IT A 9-TRK BYTE TAPE ? . 8.4 LA,S2 A0,DENSITY,X11 YES, LOAD 9-TRACK DENSITY LETTER . 8.4 J PR090 JUMP TO STORE DENSITY LETTER . 8.4 . . 8.4 . PRE-35 WORD OR BYTE TAPE . 8.4 . . 8.4 . THE PRM STATES THAT 'TAPEMODES' (WORD 21, S4 OF THE MAIN . 8.4 . ITEM) IS ZERO FOR BYTE-TYPE TAPES, BUT THIS IS NOT TRUE. . 8.4 . . 8.4 PR070 LA A1,TAPEMODES LOAD WORD TAPE MODE BITS . 8.4 CHECK 'E',040 EDIT LETTER IF EVEN PARITY . 8.4 CHECK 'I',004 EDIT LETTER IF SOFTWARE XLATE . 8.4 TNZ TMSAMODES BYTE TAPE ? . 8.4 J PR080 NO, HANDLE WORD TAPE . 8.4 . . 8.4 . PRE-35 BYTE TAPE . 8.4 . . 8.4 . BIT 2**35 OF MI0+21 IS USED TO INDICATE 800-FPI MODE FOR . 8.4 . DUAL-DENSITY 9-TRACK BYTE TAPE UNITS. IT IS SET FOR 800, . 8.4 . AND CLEAR FOR 1600. THIS IS THE ONLY WAY TO CHECK FOR . 8.4 . 'V' OPTION. HOWEVER, THIS BIT IS ALWAYS CLEAR FOR 7-TRACK . 8.4 . BYTE TAPE UNITS, SO WE MUST CHECK FOR 9-TRACK BEFORE . 8.4 . ADDING THE 'V'. I DON'T LIKE THIS, SINCE IT RELIES ON THE . 8.4 . 'OLD EQUIPMENT CODE'. . 8.4 . . 8.4 LA A0,MI0OLDEQP GET OLD EQUIPMENT CODE . 8.4 TG,U A0,013 9-TRACK BYTE TAPE UNIT ? . 8.4 TG,U A0,016 . 8.4 J PR080 NO, IT'S SEVEN TRACK . 8.4 . . 8.4 . PRE-35 9-TRACK BYTE TAPE . 8.4 . . 8.4 LA A1,TMSAMODES LOAD BYTE TAPE MODES . 8.4 SSL A1,10 TURN BITS 35 AND 34 INTO INDEX . 8.4 LA,S3 A0,DENSITY,A1 LOAD PROPER DENSITY LETTER . 8.4 J PR090 JUMP TO EDIT THE LETTER . 8.4 . . 8.4 . PRE-35 WORD OR 7-TRACK BYTE TAPE . 8.4 . . 8.4 PR080 LA A0,TAPEMODES LOAD WORD TAPE MODE BITS . 8.4 AND,U A0,030 ISOLATE DENSITY BITS . 8.4 SSL A1,3 ADJUST FOR USE AS INDEX . 8.4 LA,S1 A0,DENSITY,A1 LOAD PROPER DENSITY LETTER . 8.4 . . 8.4 PR090 EX ST,*A2 EDIT THE DENSITY LETTER . 8.4 . . 8.4 . . 8.4 -623,624 PRINT . 8.4 TNZ XLTCPU TRANSLATOR TO EDIT, OR . 8.4 TZ TMSAMODES PRE-35 BYTE TAPE ? . 8.4 J PR530 YES, FORCE LOAD OF PRINT2 . 8.4 TZ TAPEMODES NO, PRE-35 WORD TAPE ? . 8.4 J PR525 YES, NO REASON TO FORCE PRINT2 . 8.4 . . 8.4 . LEVEL 35 TAPE, BUT NO TRANSLATOR . 8.4 . . 8.4 LA A0,TAPEDTF LOAD DATA TRANSFER FORMAT BITS . 8.4 AND,U A0,017 ANYTHING SPECIAL TO PRINT ? . 8.4 JNZ A1,PR530 YES, FORCE LOAD OF PRINT2 . 8.4 *PRINT2 -8,10 PRINT2 . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -28 PRINT2 . 8.4 XLTMSG 'TRANSLATOR: CPU = &, TAPE = & &' . 8.4 -201 PRINT2 . 8.4 LA A0,UNIT1 GET UNIT NAME FROM INFO$ . 8.4 JZ A0,PM605 USE FITEM$ SS/UU IF NONE . 8.4 E$FD1 . EDIT UNIT NAME . 8.4 TNZ UNIT2 IS THERE A SECOND UNIT ? . 8.4 J PM610 NO, SKIP SECOND UNIT EDIT . 8.4 E$CHAR ',' EDIT A COMMA BETWEEN UNITS . 8.4 E$FD1 UNIT2 YES, EDIT THE NAME . 8.4 J PM610 GO ON . 8.4 PM605 . . 8.4 -245,245 PRINT2 . 8.4 LA A0,INFILESX GET # FILES EXTENDED FROM INFO$ . 8.4 TNZ A0 ANYTHING THERE ? . 8.4 LA,S4 A0,FITEM+10 NO, TRY GETTING IT FROM FITEM$ . 8.4 E$DECV . EDIT # FILES EXTENDED . 8.4 -248,248 PRINT2 . 8.4 LA A0,INBLOCKSX GET BLOCKS EXTENDED FROM INFO$ . 8.4 TNZ A0 ANYTHING THERE ? . 8.4 LA,T3 A0,FITEM+10 NO, GET IT FROM FITEM$ . 8.4 -252 PRINT2 . 8.4 TZ INTMODES MODE BITS SUPPLIED BY INFO$ ? . 8.4 J PM700 YES, WE STUCK THEM IN MAIN ITEM . 8.4 -287,288 PRINT2 . 8.4 PM700 TNZ TAPEMODES PRE-35 WORD TAPE, OR . 8.4 TZ TMSAMODES PRE-35 BYTE TAPE ? . 8.4 J PM740 YES, HANDLE THEM . 8.4 . . 8.4 . LEVEL 35 TAPE . 8.4 . . 8.4 LA A4,TAPEDTF LOAD DATA TRANSFER FORMAT BITS . 8.4 AND,U A4,017 ANY NEAT MODES TO EDIT? . 8.4 JNZ A5,PM710 YES, GO ON . 8.4 TNZ XLTCPU NO, IS THERE A TRANSLATOR ? . 8.4 J PM900 NO, NOTHING MORE TO PRINT . 8.4 PM710 E$DIT EDPACK OPEN EDIT . 8.4 E$COL COL1 MOVE TO STARTING COLUMN . 8.4 JZ A5,PM720 JUMP IF ONLY EDITING TRANSLATOR . 8.4 . . 8.4 . EDIT TAPE DATA TRANSFER FORMAT MESSAGES . 8.4 . . 8.4 LA,U A0,0 ASSUME NO MESSAGE . 8.4 TEP,U A5,1*/3 8-BIT PACKED ? . 8.4 LA,U A0,MSA8 GET SET FOR 8-BIT PACKED MSG . 8.4 TEP,U A5,1*/2 6-BIT PACKED ? . 8.4 LA,U A0,MSA6 GET SET FOR 6-BIT PACKED MSG . 8.4 TEP,U A5,1*/1 QUARTER-WORD SET ? . 8.4 LA,U A0,MSAQ GET SET FOR QUARTER-WORD MSG . 8.4 TZ A0 IF THERE'S A MESSAGE, . 8.4 E$MSG . EDIT IT . 8.4 LA,U A0,DCONV GET SET FOR DATA CONVERTER MSG . 8.4 TEP,U A5,1*/0 DATA CONVERTER ON ? . 8.4 E$MSG . YES, EDIT MESSAGE . 8.4 . . 8.4 . EDIT TAPE TRANSLATOR IF ANY . 8.4 . . 8.4 TNZ XLTCPU IS A TRANSLATOR SPECIFIED ? . 8.4 J PM750 NO, GO ON . 8.4 PM720 E$MSG XLTMSG YES, EDIT MESSAGE . 8.4 E$FD1 XLTCPU EDIT PROCESSOR MNEMONIC . 8.4 E$MSGR . CONTINUE MSG . 8.4 E$FD1 XLTTAPE EDIT TAPE MNEMONIC . 8.4 E$MSGR . END MSG . 8.4 J PM750 PRINT THE IMAGE . 8.4 . . 8.4 . PRE-35 WORD OR BYTE TAPE . 8.4 . . 8.4 PM740 TNZ TMSAMODES PRE-35 BYTE TAPE ? . 8.4 J PM900 NO, SKIP TAPE MODE STUFF . 8.4 *QF -3,5 QF . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -18 QF . 8.4 . . 8.4 . THE FOLLOWING IS FILLED IN BY ER INFO$ . 8.4 . . 8.4 UNIT1* + 0 UNIT 1 MNEMONIC . 8.4 UNIT2* + 0 UNIT 2 MNEMONIC . 8.4 INMNEM + 0 SPECIFIC MNEMONIC . 8.4 INEQUIP + 0 EQUIPMENT TYPE BITS . 8.4 INFILESX* + 0 FILES EXTENDED . 8.4 INBLOCKSX* + 0 BLOCKS EXTENDED . 8.4 INTMODES* + 0 TAPE MODES . 8.4 XLATE + 0D TAPE TRANSLATION MNEMONICS . 8.4 . . 8.4 . ER INFO$ PACKET . 8.4 . . 8.4 INFO + INFILE$,0,0 TELL INFO$ WHAT FILE . 8.4 + 2,FITEM INTERNAL NAME . 8.4 + FEQP$,0,0 GET SPECIFIC MNEMONIC . 8.4 + 1,INMNEM AND PUT IT THERE . 8.4 + EQUIP$,0,0 GET EQUIPMENT TYPE BITS . 8.4 + 1,INEQUIP AND PUT THEM HERE . 8.4 + LNAME$,0,0 GET DEVICE NAME(S) . 8.4 + 2,UNIT1 AND SET IN UNIT1 AND UNIT2 . 8.4 + MODE$,0,0 GET TAPE MODE INFORMATION . 8.4 + 3,INTMODES AND STORE THEM . 8.4 + FFILEX$,0,0 RETRIEVE FILES EXTENDED . 8.4 + 1,INFILESX AND STORE IT . 8.4 + FBLKSX$,0,0 RETRIEVE BLOCKS EXTENDED . 8.4 + 1,INBLOCKSX AND STORE IT . 8.4 INFOL EQU $-INFO LENGTH OF ER INFO$ PACKET . 8.4 . . 8.4 . END OF ER INFO$ STUFF . 8.4 . . 8.4 -84 qf . 8.4 . IF THE FILE IS ALREADY ASSIGNED, AN ER INFO$ IS PERFORMED . 8.4 . TO OBTAIN ADDITIONAL INFORMATION ABOUT THE FILE. . 8.4 -152 QF . 8.4 LA A0,(INFOL,INFO) PREPARE FOR ER INFO$ . 8.4 ER INFO$ DO IT . 8.4 -219,219 QF . 8.4 FIT030 LA A1,INMNEM GET MNEMONIC SUPPLIED BY INFO$ . 8.4 TZ A1 ANYTHING THERE ? . 8.4 SA A1,MNEMONIC YES, STORE IT . 8.4 LA,T3 A1,FITEM+6 GET FCYCLE . 8.4 -273 QF . 8.4 DL A0,XLATE LOAD TRANSLATOR MNEMONICS . 8.4 TE A0,(' ') IF NOT BLANK, . 8.4 DS A0,XLTCPU STORE IN MAIN ITEM . 8.4 TNZ INEQUIP STUFF RETURNED BY ER INFO$ ? . 8.4 J FIT112 NO, CARRY ON WITHOUT IT . 8.4 LA,T3 A1,INEQUIP YES, GET EQUIPMENT TYPE BITS . 8.4 LA,U A0,0 ASSUME TAPE IS SEVEN TRACK . 8.4 TEP,U A1,1*/6 9-TRACK BIT SET ? . 8.4 LA,U A0,040 YES, INDICATE NINE TRACK . 8.4 OR,S6 A0,INTMODES COMBINE WITH DATA XFER FORMAT BITS. 8.4 SA A1,TAPEDTF SET IN MAIN ITEM . 8.4 LA,S5 A0,INTMODES GET DENSITY INDICATOR . 8.4 SA A0,TAPEDENS STORE IN MAIN ITEM . 8.4 J FIT120 GO ON . 8.4 FIT112 . . 8.4 -484 QF . 8.4 TZ INMNEM WAS MNEMONIC SUPPLIED BY INFO$ ? . 8.4 J PCT325 YES, SKIP MCT STUFF . 8.4 *SNAP -3,4 SNAP . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -6,6 SNAP . 8.1 -233,233 SNAP . 8.4 -249,249 SNAP . 8.4 SNAPP 'SSTAB ',SSTAB,SSLEN . 8.4 -250 SNAP . 8.4 SNAPP 'TRANS ',TRANS,NSSP . 8.4 -259 SNAP . 8.4 LA A0,POLSNP LOOK FOR SPECIAL FLAG . 8.4 TNE,U A0,077 CALL FROM POLTRAN? . 8.4 J POL410 YES, RETURN TO MAIN SEGMENT . 8.4 -281,281 SNAP . 8.4 E$DIT EDPACK OPEN EDIT . 8.4 E$COPY 6,SNAPKT EDIT SNAP HEADER . 8.4 E$SKIP 1 MOVE OVER . 8.4 E$OCTF 6,SNAPKT+1,,H2 EDIT BUFFER ADDRESS . 8.4 P$RINT POUT2 PRINT THE HEADER . 8.4 *SORTER -25,27 SORTER . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -28 SORTER . 8.1 $INCLUDE 'SORTDEF' DEFINE SORT PACKAGE PROCS . 8.1 *SORTF -24 SORTF . 8.3 PRE35 EQU 1 NONZERO TO TURN ON PRE-LEVEL-35 . 8.3 . MSALL$ COMPATIBILITY CODE . 8.3 . . 8.3 -90 SORTF . 8.3 MSVER EQUF MSPKT+0,,T1 MSALL$ REVISION INDICATOR . 8.3 -206 SORTF . 8.3 ON PRE35 . 8.3 TZ MSVER LEVEL 35R1 OR ABOVE ? . 8.3 J MS35 YES, HANDLE NEW FORMAT . 8.3 -220 SORTF . 8.3 J MSPRE35 SKIP LEVEL 35 STUFF . 8.3 MS35 . . 8.3 OFF PRE35 . 8.3 LA,H2 A2,MSBUF GET # OF ENTRIES (INCL THIS WORD) . 8.3 AN,U A2,2 COMPUTE EQUIP TYPES - 1 FOR JGD . 8.3 MSLOOP LA,H2 A0,MSBUF+1,A2 GET POINTER TO EQUIPMENT SUMMARY . 8.3 AA A10,MSBUF+3,A0 ACCUMULATE TRACKS AVAILABLE . 8.3 JGD A2,MSLOOP DO FOR ALL CONFIGURED MSG EQUIP . 8.3 LA A1,A10 COPY AVAILABLE TRACKS TO A1 . 8.3 SSL A1,6 CONVERT TO POSITIONS . 8.3 ON PRE35 . 8.3 MSPRE35 . . 8.3 OFF PRE35 . 8.3 *TOTALS -9,11 TOTALS . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 *WOUT -6,8 WOUT . 8.1 AXR$ . DEFINE REGISTERS & PARTIAL-WORDS . 8.1 $INCLUDE 'MFDDEF' DEFINE CONFIG PARAMETERS AND TAGS . 8.1 -56 WOUT . 8.1 TZ JPT DOES USER WANT JUST TOTALS PRINTED. 8.1 J MFD300 YES, GET NEXT FILE, SKIPPING CHECK. 8.1 . FOR LISTING OPTIONS . 8.1 *userdoc -18,18 userdoc center November, 1977 -- For @MFD level 8.4 -575,575 userdoc (If this letter does not appear, the tape is odd parity). S: Super density (6250 BPI) -580,580 userdoc @ELT,SI TPF$.PRINT,,,135515072623,023 . @MFD PRINT ROUTINE - FORMS ONE-LINE SUMMARY LISTING FOR EACH FILE . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMTERES EQUFS . DEFINE TAGS . PRT FORM 12,6,18 FORM T1,S3,H2 . P PROC 1,3 CHECK* NAME 0 FOR TEP TEST CHOCK* NAME 1 FOR TOP TEST LA,U A0,P(1,1) GET OPTION LETTER DO P(0,0)=0 , TEP,U A1,P(1,2) CHECK OPTION BIT DO P(0,0)=1 , TOP,U A1,P(1,2) CHECK OPTION BIT EX ST,*A2 STORE LETTER IN PRINT LINE END . . ON OLDMFD OTHEQP 'CARD' . 040 '??' . 041 'PTP' . 042 '??' . 043 'HSP' . 044 'MHSP' . 045 '??' . 046 '9300' . 047 '1004' . 050 '??' . 051 '??' . 052 '??' . 053 '??' . 054 '??' . 055 '??' . 056 '0770' . 057 'CONSOL' . 060 '??' . 061 '??' . 062 '??' . 063 '??' . 064 '??' . 065 '??' . 066 '??' . 067 'CTS' . 070 'WTS' . 071 'CTMC' . 072 'C/SP' . 073 '??' . 074 '??' . 075 '??' . 076 'ARB' . 077 OFF OLDMFD . . STORE TABLE FOR CAT OPTIONS . ST SA,S2 A0,LINOUT+1 A SA,S3 A0,LINOUT+1 AB SA,S4 A0,LINOUT+1 ABC SA,S1 A0,LINOUT+1 DABC SA,S6 A0,LINOUT EDABC SA,S5 A0,LINOUT FEDABC SA,S4 A0,LINOUT GFEDABC SA,S3 A0,LINOUT HGFEDABC SA,S2 A0,LINOUT IHGFEDABC SA,S1 A0,LINOUT JIHGFEDABC /$(1),PR000* . START PRINT ROUTINE . . BETTER CONVERT THE CAT AND REF DATES BACK TO TDATE$ FORMAT . LA,H1 A0,DATLSTASG GET DATE IN YR,MON,DAY FORMAT SA,T1 A0,DATLSTASG STORE MON,DAY IN T1 SSL A0,12 GET YEAR ALONE IN A0 SA,S3 A0,DATLSTASG STORE IT IN TDATE$ FORMAT LA,H1 A0,DATCATLGD GET DATE IN YR,MON,DAY FORMAT SA,T1 A0,DATCATLGD STORE MON,DAY IN T1 SSL A0,12 GET YEAR ALONE IN A0 SA,S3 A0,DATCATLGD STORE IT IN TDATE$ FORMAT TZ SFMODE2 SINGLE-FILE MODE? J PR030 YES, SKIP TOTALS AND BREAK CHECKS ON BRKOK=0 LX,U X4,0 NO, ASSUME GRAND TOTALS INDEX OFF BRKOK=0 ON BRKOK LX X4,BRKCNT SET TOTALS INDEX TO BREAK COUNT TZ BRKCNT WERE NO BREAKS SPECIFIED, OR TZ,H1 INVALU IS THIS THE VERY FIRST PRINTABLE FILE? J COUNT YES, JUST INCREMENT TOTALS AND PRINT INFO LX X5,BRKPNT YES, GET BREAK TABLE POINTER AND INDEX . . PERFORM THE TESTS INDICATED BY EACH 'BREAK' SPECIFICATION TO DETERMINE . WHETHER THE PARTICULAR SORT KEY FIELDS FOR THIS FILE ARE DIFFERENT FROM . THOSE OF THE PREVIOUS FILE. IF THEY'RE ALL THE SAME, COUNT THIS FILE, . AND PRINT THE NORMAL INFORMATION ABOUT IT. IF DIFFERENT, CHARGE OFF INTO . THE TOTALS ROUTINE TO PRINT SUBTOTALS. THEN COUNT THE FILE AND PRINT IT. . BRKCHK TNZ X4 ARE WE AT THE GRAND TOTALS INDEX? J BRKCHK3 YES, SKIP IT EX BRKLOAD,X5 EXECUTE LOAD INSTRUCTION TNZ BRKSHFT,X5 ANY SHIFTING TO BE DONE? J BRKCHK0 NO LA,H1 A1,BRKSHFT,X5 GET LEFT SHIFT COUNT LSSL A0,0,A1 SHIFT LEFT LA,H2 A1,BRKSHFT,X5 GET RIGHT SHIFT COUNT SSL A0,0,A1 SHIFT RIGHT BRKCHK0 EX BRKTEST,X5 EXECUTE TEST INSTRUCTION J DOBREAK TEST FAILED J BRKCHK2 TEST PASSED . . THIS SUBROUTINE IS USED ONLY FOR 'BREAK' SPECS WHERE THE KEY FIELD . IS A SINGLE-BIT VALUE, AS IN THE SPECS WITH ASSUMED VALUES. . THE ABOVE CODE REMOTELY EXECUTES AN 'LMJ X11,BRKBIT' FOR SUCH . A KEY FIELD, WITH THE VALUE FOR THE CURRENT FILE IN A0. . BRKBIT* LA A1,BRKVAL,X5 GET PREVIOUS VALUE AND A1,BRKMASK,X5 MASK OFF ASSUMED VALUE BIT AND A0,BRKMASK,*X5 DO THE SAME WITH CURRENT VALUE TE A1,A2 EQUAL? J 0,X11 NO J 1,X11 YES . . A KEY FIELD FOR THIS FILE IS DIFFERENT FROM THAT OF THE PREVIOUS FILE. . SET A FLAG, AND SAVE THE BREAK LEVEL FOR LATER USE. . DOBREAK SR,H2 R15,INVALU SET INITIAL VALUE FLAG SX X4,BRKSTOP SET HIGHEST-LEVEL-BREAK INDICATOR BRKCHK2 JGD X4,BRKCHK CHECK ALL BREAK LEVELS . . IF ANY BREAK LEVEL HAS TRIGGERED A BREAK, PRINT THE SUBTOTALS UP TO . THE HIGHEST BREAK LEVEL WHICH DID SO. . BRKCHK3 TNZ,H2 INVALU HAS A BREAK OCCURRED? J TOTRTN NO, JUST COUNT AND PRINT THE FILE L$OAD TOTSEG,TOT000,1 GO PRINT SUBTOTALS TOTRTN* . TOTSEG RETURNS HERE LX X4,BRKCNT SET TOTALS INDEX TO BREAK COUNT COUNT . OFF BRKOK . . INCREMENT TOTALS . BUMP PFCT . INCREMENT TOTAL FILES SELECTED TNZ TAP TAPE FILE? J PR0035 NO BUMP TFCT . INCREMENT TAPE FILE COUNT J PR0070 NO OTHER TOTALS FOR TAPE FILE PR0035 JZ RDISC,PR0040 REMOVABLE DISC FILE? BUMP RTOT FILESIZE YES, INCREMENT REMOVABLE TRACK COUNT BUMP RFCT . AND REMOVABLE FILE COUNT PR0040 TNZ VFIL V-OPTION FILE? J PR0050 NO BUMP VTOT FILESIZE YES, INCREMENT V-OPT TRACK COUNT BUMP VFCT . AND V-OPT FILE COUNT PR0050 TNZ GFIL G-OPTION FILE? J PR0055 NO BUMP GTOT FILESIZE YES, INCREMENT G-OPT TRACK COUNT BUMP GFCT . AND G-OPT FILE COUNT PR0055 JNZ RDISC,PR0070 SKIP UNLOADED TEST IF REMOVABLE TP DESCFLAGS UNLOADED? J PR0060 YES, DON'T COUNT AS LOADED TRACKS BUMP TOT FILESIZE NO, INCREMENT TOTAL FIXED TRACKS J PR0070 GO ON PR0060 BUMP UNLTOT BKUPTEXT INCREMENT UNLOAADED TRACKS BUMP UFCT . AND UNLOADED FILE COUNT PR0070 JZ LONGLIST,PR0080 JUMP IF SHORT LISTING JZ BACKEDUP,PR0080 JUMP IF NO BACKUP TNZ BKUPREEL1 BACKED UP? J PR0080 NO BUMP SECTOT BKUPTEXT YES, INCREMENT BACKUP BLOCK COUNT PR0080 . ON BRKOK ON BRKDBG P$RINT ( PRT 2,DBGL,DBG) E$DIT EDPACK E$DECF 2,0,X4,U E$DECF 7,PFCT E$DECF 7,TFCT E$DECF 7,VFCT E$DECF 7,UFCT E$DECF 7,TOT E$DECF 7,VTOT E$DECF 7,UNLTOT E$DECF 7,SECTOT P$RINT POUT $(0) . DBG 'X4 PFCT TFCT VFCT UFCT TOT VTOT UNLTOT SECTOT' DBGL EQU $-DBG $(1) . OFF BRKDBG JGD X4,COUNT INCREMENT ALL NECESSARY SUBTOTALS, . FOLLOWED BY GRAND TOTALS . . ALL NECESSARY SUBTOTALS HAVE NOW BEEN PRINTED, AND THE GRAND TOTALS ARE . UP TO DATE. IF THIS FILE CAUSED A BREAK BY VIRTUE OF HAVING A DIFFERENT . KEY FIELD VALUE THAN THAT OF THE PREVIOUS FILE, WE MUST STASH AWAY THE . CONTENTS OF THOSE FIELDS (FOR THIS FILE) FOR FUTURE COMPARISONS. . TZ BRKCNT ANY BREAKS SPECIFIED? TNZ INVALU YES, NEED TO SET VALUES? J PR020 NOPE LX X4,BRKCNT YES, GET BREAK COUNT LX X5,BRKPNT GET BREAK TABLE POINTER AND INDEX ANX,U X4,1 SUBTRACT 1 FOR JGD PR0090 EX BRKLOAD,X5 GET THE VALUE TP BRKLOAD,X5 WAS THAT A 'DL A0' ? J PR0092 YES, DO 'DS A0' TNZ BRKSHFT,X5 NO, ANY SHIFTING TO BE DONE? J PR0091 NO, GO ON LA,H1 A1,BRKSHFT,X5 GET LEFT SHIFT COUNT LSSL A0,0,A1 SHIFT LEFT LA,H2 A1,BRKSHFT,X5 GET RIGHT SHIFT COUNT SSL A0,0,A1 SHIFT RIGHT PR0091 SA A0,BRKVAL,*X5 STORE NEW VALUE FOR BREAK TEST J PR0093 GO ON PR0092 DS A0,BRKVAL,*X5 STORE NEW DOUBLE-WAORD VALUE PR0093 JGD X4,PR0090 DO IT AGAIN . . OUR NEW FILE HAS CAUSED A BREAK, SO LET'S PRINT A NEW HEADING IF REQUESTED . TZ,H1 INVALU HAVE WE ALREADY PRINTED SOME FILES? J PR0095 NO, WE JUST DID A HDG, SO SKIP THIS ONE LA A0,BRKCNT GET BREAK COUNT ANA A0,BRKSTOP WE WANT THE HIGHEST LEVEL ONE MSI,H1 A0,BRKPNT SO GET SET TO SKIP LOWER LEVEL ENTRIES LX X5,BRKPNT POINT TO BREAK TABLE AX X5,A0 ADJUST TO HIGHEST LEVEL BREAK TNZ,S2 BRKSPEC,X5 IS A NEW HEADING DESIRED? J PR0095 NO, GO ON TNZ HPT H-OPTION SET OR... TZ JPT J-OPTION SET? J PR0095 YES, NO HEADING L$OAD HDGSEG,HDG200,1 PRINT NEW HEADINGS PR0095* . HDGSEG R SZ INVALU CLEAR INITIAL VALUE FLAG OFF BRKOK . . CHECK FOR J-OPTION: IF SET, DON'T PRINT ANYTHING . PR020 TZ JPT J-OPTION SET? J MFD300 YES - DON'T PRINT, JUST GET NEXT FILE PR030 E$DIT EDPACK OPEN EDIT TNZ ARB ARBITRARY DEVICE FILE, OR TZ TAP CAT'D TAPE FILE? J PR040 YES, SKIP MAX GRAN STUFF E$DECF 4,MAXGRAN MAX GRAN LA,U A0,'T' ASSUME TRACK GRANULARITY TP PCHAR POSITION GRAN? LA,U A0,'P' YES, SAY SO E$CHAR . . . EDIT CATALOGUE OPTION LETTERS . PR040 LA A1,INHIBITS GET OPTION BITS LA A2,(1,0) SET TO STORE OPTIONS IN PRINT LINE CHOCK 'P',PBIT CHECK FOR PUBLIC FILE CHECK 'R',RONLY READ-ONLY? ON GVHUSH>1 TNZ PRIVLGD IS USER PRIVILEGED? J PR050 NO, SKIP PRINT OF G/V OPTIONS OFF GVHUSH>1 CHECK 'V',VBIT V-OPTION? CHECK 'G',MI0GBIT G-OPTION? PR050 CHECK 'W',WONLY WRITE-ONLY? . EDIT A LETTER INDICATING FILE @ASG STATE: . BLANK - FILE NOT CURRENTLY ASSIGNED TO ANYONE . A - FILE ASSIGNED TO AT LEAST ONE RUN . X - FILE EXCLUSIVELY ASSIGNED TO SOME RUN . C - (SINGLE-FILE MODE ONLY) FILE @ASG,C BY THIS RUN . U - (SINGLE-FILE MODE ONLY) FILE @ASG,U BY THIS RUN . T - (SINGLE-FILE MODE ONLY) TEMPORARY FILE ASSIGNED TO THIS RUN . LA A0,CURASGCNT GET ASG COUNT TZ SFASG ASSIGNED FOR SINGLE-FILE DREAD$ ? AN,U A0,1 YES, DON'T COUNT IT JZ A0,PR060 ASSIGNED TO ANYONE? LA,U A0,'A' YES, GET SET FOR 'A' TEP,U A1,XUSE IS IT EXCLUSIVELY ASG'D? LA,U A0,'X' YES, CHANGE TO 'X' TZ UCOPT @ASG,U OR @ASG,C? LA A0,UCOPT YES, GET LETTER TZ TEMP TEMPORARY FILE? LA,U A0,'T' YES, GET A 'T' EX ST,*A2 STORE PROPER CHAR . . IF TAPE FILE, EDIT MODE BITS AND EQUIPMENT TYPE . PR060 TNZ TAP CAT'D TAPE FILE? J PR110 NO, GET F-EQUIP TYPE LA A1,TAPEMODES GET TAPE MODES LA,U A0,'H' ASSUME HIGH DENSITY TOP,U A1,020 LOW DENSITY? TOP,U A1,010 J PR061 NO - JUMP LA,U A0,'L' YES, SET FOR 'L' J PR063 GO ON PR061 TEP,U A1,010 MEDIUM DENSITY? J PR062 NO - JUMP LA,U A0,'M' YES, SET FOR 'M' J PR063 GO ON PR062 TZ TMSAMODES MSA TAPE EQUIPMENT? TP TMSAMODES YES - 1600 DENSITY? J PR063 NO - SKIP . . BIT 2**35 OF MI0+21 IS USED TO INDICATE 800-FPI MODE FOR DUAL- . DENSITY 9-TRACK MSA TAPE DRIVES. IT IS SET FOR 800, CLEAR . FOR 1600. THIS IS THE ONLY WAY TO CHECK FOR 'V' OPTION. . HOWEVER, THIS BIT IS CLEAR FOR 7-TRACK MSA DRIVES, SO WE . MUST CHECK FOR 9-TRACK BEFORE ADDING THE 'V'. I DON'T LIKE . THIS, SINCE IT RELIES ON THE 'OLD EQUIPMENT CODE'. . LA A3,MI0OLDEQP GET OLD EQUIPMENT CODE TG,U A3,013 9-TRACK MSA TAPE? TG,U A3,016 J PR063 NO, KEEP THE 'H' LA,U A0,'V' SET FOR 'V' PR063 EX ST,*A2 STORE DENSITY LETTER LA,U A0,'O' ASSUME ODD PARITY TEP,U A1,040 EVEN PARITY? LA,U A0,'E' YES EX ST,*A2 STORE CORRECT LETTER LA,U A0,'I' SET FOR SOFTWARE TRANSLATE TEP,U A1,04 SOFTWARE TRANSLATE SET? EX ST,*A2 YES, STORE I-OPTION TNZ TMSAMODES MSA TAPE EQUIPMENT? J PR100 NO, CONTINUE LA A1,TMSAMODES GET MODE BITS CHECK 'D',0200 DUAL DENSITY? PR100 LA A1,TAPEJOPT GET OTHER BITS CHECK 'J',040 J-OPTION? ON OLDMFD TZ MFD$F NEW FORMAT MFD FILE? J PR150 YES, USE ASG MNEMONIC LA A0,MI0OLDEQP GET EQUIPMENT CODE LA A1,TAPEQP-1,A0 GET TAPE EQUIP TYPE OFF OLDMFD J PR150 STORE EQUIP TYPE IN PRINT IMAGE . . NOT A TAPE FILE - EDIT EQUIPMENT TYPE . PR110 . ON OLDMFD TZ MFD$F NEW FORMAT MFD FILE? J PR145 YES, USE ASG MNEMONIC OR PACKID LA A0,MI0OLDEQP GET EQUIPMENT CODE TLE,U A0,040 MASS STORAGE? J PR120 YES, HANDLE IT LA A1,OTHEQP-040,A0 NO, SOME OTHER DEVICE TYPE J PR150 EDIT IT . . MASS STORAGE FILE - TAKE SUBCODE INTO ACCOUNT. IF REMOVABLE DISC, . EDIT THE PACKID INSTEAD. . PR120 LA A1,EQUCD-030,A0 GET NORMAL MASS STORAGE EQUIP TYPE TE,U A0,030 F2/3/60 OR F14/24 ? TNE,U A0,035 J $+2 YES, CHECK FOR SUBCODE J PR140 NO, NORMAL EQUIP TYPE PR130 TNZ OLDSUBCOD SUBCODE PRESENT? J PR140 NO L,U A2,SUB35-1 ASSUME F14/24 TNE,U A0,030 REALLY F2/3/60? L,U A2,SUB30-1 YES A A2,OLDSUBCOD ADD SUBCODE TO GET INDEX L A1,0,A2 LOAD SUBTYPE PR140 AND A1,(0757777777777) CHANGE 'F' TO 'D' L,S1 A0,PCHAR GET PCHAR FLAGS TEP,U A0,010 BIT 33 SET (WORD ADDRESSABLE)? L A1,A2 GET 'D' VERSION OFF OLDMFD PR145 JZ RDISC,PR150 IF FIXED, SKIP PACKID TNZ NBRPACKS SHOULD HAVE A NONZERO PACK COUNT J PR150 BUT IF IT DOESN'T, SKIP PACKID LA A1,PACKENTRY PICK UP FIRST PACK ID J PR151 EDIT PACKID . . STORE EQUIPMENT TYPE IN PRINT IMAGE . PR150 . ON OLDMFD TZ MFD$F NEW FORMAT MFD FILE? OFF OLDMFD LA A1,MNEMONIC YES, GRAB THE ASSIGN MNEMONIC . NO, USE EQUIP CODE IN A1 PR151 LA A2,(' ') DSC A1,30 SA,S6 A1,LINOUT+1 STORE EQUIP TYPE SA A2,LINOUT+2 E$COL 17 LEAVE ROOM FOR PACKID . EDIT TOTAL ASSIGN COUNT AND DATE LAST REFERENCED . E$DECF 4,TOTASGCNT ASG COUNT E$COL 22 E$DAY1 DATLSTASG DATE LAST REF'D TZ TAP CAT'D TAPE FILE? J PR170 YES, PICK UP REEL NUMBER TZ ARB ARBITRARY DEVICE? J PR180 YES, GO ON TO QUALIFIER . . EDIT HIGHEST/TOTAL TRACKS (*UNL* IF UNLOADED) . E$COL 36 TN DESCFLAGS IS FILE UNLOADED? J PR160 NO ON DSGUNL TZ PRIVLGD PRIVILEGED? J PR155 YES, JUMP E$DECF 4,BKUPTEXT SECURE BACKUP BLOCKS E$COL 31 BACK UP A BIT LA,U A0,0 ZERO HIGH REFERENCE E$DECF 4 PUT IT IN IMAGE J PR180 SKIP NEXT PART PR155 . OFF DSGUNL E$FD1 ('*UNL* ') YES, PRINT *UNL* J PR180 GO GET QUALIFIER PR160 E$DECF 4,SAVESIZE TOTAL LOADED TRACKS E$COL 31 BACK UP FOR HIGHEST TRACK E$DECF 4,HITRACK HIGHEST TRACK REFERENCED J PR180 GET QUALIFIER, FILENAME, ETC . . EDIT REEL NUMBEER FOR CATALOGUED TAPE FILE . PR170 TNZ NBRREELS ANY REELS? J PR180 NO, SKIP IT E$COL 31 YES, MOVE OVER E$COPY 6,TAPEREEL1 INSERT REEL NUMBER . EDIT Q*F(C) PRECEDED BY A CHAR DENOTING DISABLED STATUS . PR180 E$COL 42 LA,U A0,' ' ASSUME NOT DISABLED TN DISABLES IS FILE DISABLED IN ANY WAY? J PR190 NO, EDIT A SPACE HERE LA,S1 A1,DISABLES YES, GET DISABLE-BITS LA,U A0,WRNCHR ASSUME WARNING-ONLY DISABLED TEP,U A1,DISBTB BAD BACKUP TAPE? LA,U A0,BBTCHR YES, GET BAD-TAPE CHAR TZ BMI1 BAD MAIN ITEM SECTOR 1? LA,U A0,BMICHR YES, GET BAD-MI1 CHAR TEP,U A1,DISBTH HARDWARE-DISABLED? LA,U A0,HDWCHR YES, GET CHAR PR190 E$CHAR . STORE DISABLE-CHAR . . EXEC FILENAMES MAY HAVE @ SIGNS AND SPACES IMBEDDED WITHIN . THE QUALIFIER AND FILENAME. MUST COUNT CHARACTERS, AND USE ECOPY$. . DL A2,QUAL GET QUAL LMJ X11,TRAIL COUNT CHARS - TRAILING BLANKS LA,U A0,QUAL LMJ X11,ECOPY$ EDIT CORRECT NUMBER OF CHAR E$CHAR '*' ASTERISK DL A2,FILE GET FILENAME LMJ X11,TRAIL COUNT CHARS - TRALING BLANKS LA,U A0,FILE LMJ X11,ECOPY$ EDIT CORRECT NUMBER OF CHARS E$CHAR '(' OPEN PAREN E$DECV FCYCLE F-CYCLE E$CHAR ')' CLOSE PAREN ON WOPTOK ************************************** . . CHECK FOR W-OPTION: IF SET, WRITE Q*F(C) TO SDF FILE . TZ WPT W-OPTION SET? J SDF100 YES, JUMP TO SDF OUTPUT ROUTINE PR300* . OFF WOPTOK ************************************** JZ LONGLIST,PR460 IF SHORT LIST, SKIP ACCT, PROJ, ETC. . . LONG LISTING - CONTINUE EDITING: ADD ACCOUNT, PROJ, DATE CAT'D . E$COL 72 SET FOR ACCOUNT E$COPY 12,ACCOUNT EDIT ACCOUNT NUMBER E$COL 85 E$COPY 12,PROJ PROJECT-ID E$COL 98 TZ TEMP TEMPORARY FILE? J PR310 YES, NO CAT DATE E$DAY1 DATCATLGD NO, EDIT CATALOGUE DATE J PR320 CONTINUE PR310 E$COPY 6,('') SAY IT'S TEMPORARY PR320 . . . EDIT SECURE BACKUP INFORMATION . JNZ BACKEDUP,PR430 IF THERE'S A BACKUP, GO GET IT TNZ BMI1 BAD MAIN ITEM SECTOR 1? J PR420 NO, CONTINUE DL A0,('***BAD MI SE') . GET MSG DS A0,LINOUT+18 STORE IN PRINT LINE LA A0,('C 1***') GET END OF MSG SA A0,LINOUT+20 STORE IN PRINT LINE J PR480 CHECK FOR LAPSES AND PRINT . . NO BACKUP . PR420 LA A0,('*NONE*') NO BACKUP LA A1,(' ') DSC A0,30 SA,S6 A0,LINOUT+17 SA A1,LINOUT+18 STORE IN IMAGE LA,U A0,NOBCHR GET NO-BACKUP CHAR SA,S6 A0,LINOUT+6 STORE IN PRINT LINE J PR480 CHECK FOR LAPSES AND PRINT . . MAKE SURE BACKUP EXISTS BEFORE TRYING TO EDIT IT . PR430 TNZ BKUPREEL1 IS THERE REALLY A BACKUP? J PR420 NO . . EDIT BACKUP REEL NUMBER, FILE POSITION, BLOCK COUNT, AND CREATION TIME/DATE . E$SKIP 1 ON PRVSEC TNZ PRIVLGD PRIVILEGED? J PR440 NOPE OFF PRVSEC E$COPY 6,BKUPREEL1 BACKUP REEL ON PRVSEC J PR450 SKIP THE SLASHES PR440 E$COPY 6,('//////') SLASH OUT REEL NUMBER PR450 . OFF PRVSEC E$COL 114 E$DECF 3,BKUPFILE BACKUP POSITION E$COL 117 E$DECF 4,BKUPTEXT SEC TRACKS ON DCFZ E$SKIP 1 E$DCFZ 2,BKUPTIME,,S1 EDIT MONTH E$DCFZ 2,BKUPTIME,,S2 EDIT BACKUP DATE OFF DCFZ ON DCFZ<1 LA,U A0,0 LA,S1 A1,BKUPTIME MONTH TAPE WRITTEN (TDATE$) DI,U A0,10 GET FD DECIMAL NUMBER AA,U A0,'0' SA,S3 A0,LINOUT+20 FOR OUTPUT IMAGE AA,U A1,'0' SA,S4 A1,LINOUT+20 LA,S2 A1,BKUPTIME DAY TAPE WRITTEN (TDATE$) LA,U A0,0 DI,U A0,10 GET FD DECIMAL NUMBER AA,U A0,'0' SA,S5 A0,LINOUT+20 FOR OUTPUT IMAGE AA,U A1,'0' SA,S6 A1,LINOUT+20 OFF DCFZ<1 E$COL 127 E$TIME BKUPTIME EDIT IN TIME TAPE WRITTEN . ADD CHAR TO PRINT LINE INDICATING WHETHER BACKUP IS CURRENT OR NOT . PR460 LA,U A0,NOBCHR ASSUME NO BACKUP - GET NO-BACKUP CHAR JZ BACKEDUP,PR470 IF NO BACKUP, SAY SO TP DESCFLAGS UNLOADED? J PR480 YES, BACKUP MUST BE CURRENT LA,U A0,BNCCHR GET BACKUP NOT CURRENT CHAR TZ TIM1STWRT UPDATED SINCE BACKUP CREATED? PR470 SA,S6 A0,LINOUT+6 STORE BACKUP STATUS . . CHECK FOR LAPSE ENTRIES . PR480 LA A1,DESCFLAGS GET DESCRIPTOR FLAGS LA,U A0,LPSCHR GET LAPSE CHAR TEP,U A1,LPSBIT BIT 32 (LAPSE) SET? SA,S6 A0,LINOUT+6 YES, ADD CHAR TO OUTPUT LINE LA,U A0,DELCHR GET TO-BE-DROPPED CHAR TEP,U A1,DROPBIT BIT 24 SET (TO BE DROPPED)? SA,S6 A0,LINOUT+6 YES, STORE IN OUTPUT IMAGE . . THE TIME HAS COME TO PRINT THE INFORMATION . P$RINT POUT PRINT LINE SZ LINE2 CLEAR NRP,NTP,NLPS,NSB FLAGS ON EXTRA . . DETERMINE WHETHER OR NOT ADDITIONAL PRINT LINES ARE NEEDED TO EDIT . MORE STUFF. . TNZ TAP TAPE? J PR500 NO . . TAPE FILE: SECOND LINE NEEDED IF >1 REEL IN DIRECTORY . LA A0,NBRREELS GET NUMBER OF REELS CATALOGUED JZ A0,PR520 SKIP IF NONE AN,U A0,1 LESS ONE SA A0,NTP SET NUMBER OF REELS LEFT TO DO J PR520 CONTINUE PR500 TZ BMI1 BAD MAIN ITEM SEC 1? J PR520 YES, SKIP AHEAD JZ RDISC,PR510 REM DISC? NO,PR510 . . REMOVABLE DISC FILE: SECOND LINE NEEDED IF >1 PACK IN DIRECTORY . LA A0,NBRPACKS YES, GET NUMBER OF PACKS JZ A0,PR510 IF NONE, SKIP AN,U A0,1 BUT ONE HAS ALREADY BEEN DONE SA A0,NRP STORE REMAINING PACK COUNT . . LAPSE ENTRIES AND ADDITIONAL BACKUP TAPES REQUIRE SECOND LINE, BUT . DON'T DO IT IF DEMAND (SHORT LISTING). . PR510 JZ LONGLIST,PR520 NO BACKUPS OR LAPSES IF SHORT JZ BACKEDUP,PR515 SKIP IF NO BACKUP ON PRVSEC TNZ PRIVLGD IS USER PRIVILEGED? J PR515 NO, HIDE BACKUP REEL #'S OFF PRVSEC LA A0,BKUPREELS SECURE BACKUP REEL COUNT JZ A0,PR520 IF NONE, SKIP AN,U A0,1 LESS ONE SA A0,NSB NUMBER OF BACKUPS LEFT TO DO PR515 LA A0,DESCFLAGS GET DESCRIPTOR BITS TOP,U A0,LPSBIT ANY LAPSES? J PR520 NO, GO ON LA A0,NBRLAPSES GET NUMBEER OF LAPSE ENTRIES SA A0,NLPS AND STORE IT . . IF ADDITIONAL LINES ARE NECESSARY FOR ANY OF THE ABOVE REASONS, OVERLAY . THIS SEGMENT WITH 'PR2SG' AND JUMP TO IT. ALSO GO TO PR2SG IF IN . SINGLE-FILE MODE, SINCE THE FITEM$ GIVES ADDITIONAL INFORMATION . ABOUT SUCH THINGS AS TAPES. . PR520 TNZ TAP TAPE FILE? J PR525 NO, GO ON TZ TMSAMODES YES - MSA TAPE EQUIPMENT? J PR530 YES, FORCE LOAD OF PRINT2 PR525 TNZ LINE2 ANYTHING TO PRINT ON 2ND LINE? TZ SFITEM FITEM$ DONE FOR SINGLE-FILE MODE? J $+2 YES, PRINT MORE STUFF J PR600 NOPE PR530 L$OAD PR2SG,PMORE,1 JUMP TO ADDITIONAL-LINES PRINT ROUTINE OFF EXTRA . . IF MASS STORAGE EQUIPMENT TYPE WAS GIVEN IN SPEC3, AN ADDITIONAL LINE . IS PRINTED GIVING INITIAL RESERVE AND BREAKDOWN OF GRANULE COUNTS BY . EQUIPMENT TYPE. . PR600* TNZ TAP SKIP IF FILE IS TAPE TNZ EPT FOR MASS STORAGE, PRIN 2ND . LINE WITH INITIAL RESERVE AND . GRANULE COUNTS IF REQUESTED J PR900 CHECK FOR SNAP$ E$DIT EDPACK OPEN EDIT E$COL 5 E$COPY 12,('INIT. RES.: ') . INITIAL RESERVE E$DECV INITRESV EDIT RESERVE LA,U A0,'T' ASSUME TRACKS TP PCHAR POSITION? LA,U A0,'P' YES E$CHAR . EDIT GRANULARITY INDICATOR TP DESCFLAGS LOADED FILE? TZ SAVESIZE OR UNLOADED WITH GRANS LYING AROUND? J $+2 YES, BETTER PRINT THOSE GRANULES J PR640 NO, NO GRANULE COUNT . . EDIT GRANULE COUNTS . E$COPY 12,(' GRANULES: ') . LX X4,(1,1) INITIALIZE FOR NO. OF EQUIP TYPES PR610 LA,U A1,GRANULES-1 POINT TO GRANULE ENTRIES AA,U A1,,X4 BUMP TO PROPER GROUP TNZ,H2 0,A1 ANY GRANS ON THIS EQUIP? J PR630 NO, TRY THE NEXT ONE E$COLN . GET CURRENT COLUMN LA,U A1,122 ASSUME BATCH MODE TNZ LONGLIST SHORT LISTING? LA,U A1,62 YES, SHORTER LINES TLE A0,A1 REACHED MAX YET? J PR620 NO, CONTINUE EDITING P$RINT POUT YES, PRINT CURRENT LINE E$DIT EDPACK AND START ANOTHER E$COL 19 START AT 19, AND GO ON PR620 . ON OLDMFD TZ MFD$F NEW FORMAT MFD FILE? J PR621 YES E$FD1 EQUCD-1,X4 GET EQUIP CODE J PR622 GO ON PR621 . OFF OLDMFD E$COPY 5,('GROUP ') EDIT 'GROUP' E$DECV 0,X4,U EDIT GROUP NUMBER PR622 E$CHAR '=' EDIT = SIGN LA,U A1,GRANULES-1 POINT TO GRANULE ENTRIES AA,U A1,,X4 BUMP TO PROPER GROUP E$DECV 0,A1,H2 EDIT NO. OF GRANULES E$SKIP 2 MOVE OVER FOR NEXT ONE PR630 TLEM,U X4,8 MORE TYPES? J PR610 YES, GO GET THEM PR640 P$RINT POUT NO, PRINT THE LINE /PR900 . ON SNAPOK . . PERFORM SNAP$ OF DIRECTORY ITEMS IF DESIRED . LA A2,SNAP GET SNAP FLAG JZ A2,PR990 SKIP IF NO SNAPS WANTED L$OAD PR2SG,SN000,1 LOAD AND ENTER SNAP$ ROUTINE PR990* . RETURN HERE FROM SNAP$ ROUTINE OFF SNAPOK J MFD300 GET NEXT FILE . . TRAILING-BLANK COUNTING ROUTINE FOR QUAL AND FILENAME EDITING . TRAIL L,U A1,12 ASSUME 12-CHAR NAME AND,U A3,077 ISOLATE LAST CHAR TE,U A4,5 BLANK? J 0,X11 NO, RETURN WITH CHAR COUNT IN A1 AN,U A1,1 YES, 1 LESS CHAR DSL A2,6 GET NEXT CHAR INTO POSITION J TRAIL+1 CHECK UNTIL NON-BLANK FOUND END @ELT,RI TPF$.PRINT,,,154312141337 )@@@Q@@@@@@@?? MHSP HSP ?? PTP ?? CARD HS MVH LHS V AA@@@@ )@]0Q@@@@@@@?? CONSOL0770 ?? ?? ?? ?? ?? ?? 1004 9300 AB@@@@ )@ )Q@@@@@@@?? C/SP CTMC WTS CTS ?? ?? ?? ?? ?? ?? AC@@@@ )@CKK@YK@JC@B=@#2@[9@@@@@@@@@@[)@@@@[4@@@[[*@@@[[?@@@[[0@@@[ARB ?? ?? AD@@@@ )@EKEYK@JC@B=@#2@[9@@@@@)@@@^)@@@@@@[WC@@,CCC@@,[4@@@@[0@@@@[?@@@@[*@@@@[=@@@@AE@@@@ )@@)M)@YK@\[9@^@@@@@@@@@R[@@@@/K@@]B*0@@@@[?C@@\;C@@@G[WC@@\CCC@@\[?C@@,;C@@@GAF@@@@ )@]0K"K[JC@7)/)^B)/) YK#@@@@@@(@ @@@') @@@/K@@@=(@@@@^R[K@@@/K@@@:*C@@@@*@@@@@AG@@@@ )@^0M"#2@SYK##2@X8J[9@K@C@P@@@/K@@@@M"S@@/0@[9)@@@@@@@@@=8K@@KC8@@@V')I)@==8K@@[C8@@@R')I)@=>8K@@CC8@@@PC@)@@,AW@@@@ )@$KM"S@@/0@[9)@JCB)@@@@*4@@@@CSC@@!')I)@==8K@@]C8@@@W')I)@==8K@@)C8@@@G')I)@=AX@@@@ )@()M$)@/)YYKJJCB)@@@@@@C8@@@T*)@@@@C=@@@@*=@@@@C8@@@X=8K@@^C8@@@A/@@@]0H8@@@[AY@@@@ )@:0O"S@#0[8@JG@@@')I)@==8K@@KC8@@@EC0S@@0/K@@]"*WC@@1(*C@@1/K@@#X(0C@[P')I)@=AZ@@@@ )@,KM$&@@/0@Y@#3@@@@@@@@')I)@==8K@@)C8@@@EC*S@@1/K@@#NC0F@@@=8K@@)C4F@@@R68@@0BA@@@@ )@0)O-9)@J@[8@@@@@CWS@@1/K@@#J!8@@@I!8@@@FC4C@@!/K@@#J(WC@@1')I)@==8K@@^C8@@@IBB@@@@ )@3@M$&@#0@YS@JG@@@@@@@@C?S@@1')I)@=C4H@@@;CK@@#+8@@@SC*C@@1/K@@#NC?H@@@;CK@@EBC@@@@ )@5KM-9)@/)-Y@")+Y#2]^@@*4@@@@/K@@#9C@WJ_"C4C@@!/K@@#9*4@@@@')I)@==8K@@)C8@@@JBD@@@@ )@7)M"@J[.)@/B4^S@@@@@@@:8@@@X%8@@@SC@WJ_$/K@@#9C@WJ_CWS@@*[)@@@A*@C@@&C8@@@$BX@@@@ )[=0M"KR\[9[)J@Y@/)0@@@@[O@@@@H8@@@[/@@@A\C^C@@0/K@@AX(0C@[P @@@@@/,0@CBC@@@@@BY@@@@ )[$@M"@/B)J@YKSJ@@@@@@@@/[0@A\[4@@@@H8@@@[/@@@A=COC@[D/#)@A=/K@@A\*)C@[P/K@@A\BZ@@@@ )[(KO"@/[9[)#0B=A@[0@@@@CSC@@_/K@@A\>8@@^@CWC@@*[S@@@@H8@@@[/@@@A\CWC@@_/#K@A%CA@@@@ )[:0O$)#0B)#0@@@@@/^K@A.+8@@@JC0C@@0/K@@A9**C@@1/K@@A.*WC@@1(@C@@2/K@@A9(0C@[PCB@@@@ )[,KK"KSJCB$)/B=AC/)SY@@@@@@@@/K@@B/(W@@@^(0C@[P/K@@@@/K@@A"/K@@A.*0@@@@(@@@@@CC@@@@ )[0KK%KIJCBL9[GO0@B= C@@@@@@@@CCC@@0/,0@@@C8K@@GC8@@@7/,0@@@C/@@@ /,0@@@C/@@@@CD@@@@ )[2KM"KP@JCC@Y#0@@@@@@@@/K@@B'/K@@BM*^C@[O0WC@@*/,0@@@C8@@@P0@C@@(C8@@@T/,0@@@CE@@@@ )[4)M%S@#2]>9)@@/B=AK@@@/,0@@@/K@@B8(^H@@@G8O@@@C/S@@\R[@@@;/,0@@@C8K@@GC8@@@9CF@@@@ )[60M)B)/)\Y[M[19@'@@@@@/,0@@@C/@@@@/,0@CBC@@@@@/K@@B&?@@@@HC8K@@"(@@@@NC8K@['CG@@@@ )[9@K$=^32] 8J*C7= #0ES@@@@@@@C8@@@//K@@B0/,0@@@C@^J_"/K@@B:*4@@@@/,0@@@C/@@@NCH@@@@ )[;@M$= C/)%B=^@@@@@@@@@C^H@@@G8O@@@C/S@@\/,0@@@C/@@@=/,0@@@C8^@@@/,0@@@C8K@@ CI@@@@ )[.KM"KP#2]0Y#2].8JC@R)@/@)@B_C=)@@@/,0@CBC@@@@@/K@@BQ$9@@@C/,0@@@C/@@@]/,0@@@CJ@@@@ )[_)M"KT\CA0@B)@@@@@@@@@/K@@C[;G)@@AH8K@@[/KF@@@%9@@@ +80@@_C8K@@G/K@@@@/K@@@@CK@@@@ )][0K"KUJCHL9[%#2#P9@2@@@@@@@@AA0@@@ @@@@@/KF@@@?8@@[E[@@@@@G8@@@[C@@@@@'=@@@@CL@@@@ )]#0]"KH@@@@)@F)K@@@@@@@C 1*** MI SE***BAD*UNL* ._____@@[@@@/K@@@@CM@@@@ )@H)I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GROUP @@[@@[ULES: GRANRES.: INIT. *NONE*CN@@@@ @EOF P )@@G@@@@ @@]@@B@@6@[3@@B@]J@@@[@@@@@@@E@@.@@@@CKLINOUT MRFLGS BRKCNTAA )@@G@@ INVALU BRKPNT BRKLOAD BRKSHFT BRKTEST BRKVALAB )@@G@@ BRKMASK BRKSTOP TOTSEG TOT000 LOAD$ CNT3 AC )@@G@@ CNT2 BRTOT BVTOT CNT1 BGTOT BTOT AD )@@G@@ BUNLTOT BSECTOT BRKSPEC OPTIONS HDGRTN HDG200AE )@@G@@ MFD300 EDPACK EDIT$ FLAG4 EDECF$ ECHAR$AF )@@G@@ FLAG5 TAPEQP EQUCD SUB35 SUB30 ECOL$ AG )@@G@@ EDAY1$ EFD1$ ECOPY$ EDECV$ SDF100 ESKIP$AH )@@G@@ EDCFZ$ ETIME$ POUT LINE2 PMORE ECOLN$AI )@@G@@ SN000 PRINT$ LINECOUNT BRKBIT @@[@@@@@@@@VPR000 AJ )@@G@@ @@[@@@@@@@@@PR0095 @@[@@@@@@@]]PR300 @@[@@@@@@@ #PR600 AK )@@G@@ @@[@@@@@@@A"PR990 @@[@@@@@@@B_TOTRTN @@[@@@@@@@@%I@)GD2AL )@@G@@G(-^@)^@)^@)^@)^@) K\^@)G2939^^@)G(8I->IL,^@)GT*GD2^@) LJI(4C9GD9]BS)^@)AM )@@G@@^@)^@)^@)^@) 8%^[\I(4I[5I))H[>GD0^[-IL>GC)^@)^@)^@)^@) K\^@)H'939^^@)G(8AN @ELT,SI TPF$.PRINT2,,,135525072623,023 . @MFD PRINT2 ROUTINE . . CALLED BY PRINT ROUTINE IF ADDITIONAL LINES ARE NEEDED FOR MULTIPLE . TAPE REELS, DISC PACKS, AND/OR SECURE BACKUPS. ALSO EDITS . LAPSE ENTRIES AND EXTRA INFORMATION PROVIDED BY FITEM$ WHEN . SINGLE-FILE MODE IS SET. . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMETERS EQUFS . DEFINE TAGS MORE 'MORE &' PACKS 'PACKS:&' REELS 'REELS:&' BAKS 'BACKUPS:&' LAPS 'LAPSE FROM & AT & TO & AT &' TAP1 'UNIT: & REELS: & INDEX: & CURRENT: & NEXT: &' TAP2 'NOISE: &FILES EXTENDED: &' TAP3 'BLOCKS EXTENDED: &' MSA8 '8-BIT PACKED &' MSA6 '6-BIT PACKED &' MSAQ 'QUARTER WORD &' DCONV 'DATA CONVERSION &' BCDEBC 'BCD/EBCDIC &' XS3ASC 'XS3/ASCII (MSA) &' XS3EBC 'XS3/EBCDIC (MSA) &' FDASC 'FD/ASCII (MSA) &' FDEBC 'FD/EBCDIC (MSA) &' HDWMOD 'HDW MODE: &' COL1 EQU 5 COL2 EQU 19 COL3 EQU 124 COL4 EQU 64 MI2PAKBIT EQU 040 DISC PACK ENTRIES MI2BAKBIT EQU 020 BACKUP REEL ENTRIES MI2LPSBIT EQU 010 LAPSE ENTRIES /$(1),PMORE* . . . HANDLE EXTRA TAPE REELS FIRST . LA A8,NTP GET NUMBER OF EXTRA REELS JZ A8,PM200 IF NONE, SKIP TO PACKS E$DIT EDPACK OPEN EDIT E$COL COL1 POSITION E$MSG MORE 'MORE' E$MSG REELS 'REELS:' E$COL COL2 POSITION E$FD1 TAPEREEL2 EDIT SECOND REEL AN,U A8,1 ONE LESS TO DO JZ A8,PM110 PRINT IF THAT'S ALL LA,U A0,MI0DADLNK FIRST LINK WORD ADDR J $+2 PM100 LA,U A0,MI2 GET NEXT LINK WORD ADDR LMJ X10,GETNXT GET NEXT SECTOR J PM110 NO MORE, SO PRINT LX X4,(1,2) GET SECTOR INDEX AND INCREMENT LXI,U X10,26 WORD LIMIT IN SECTOR LMJ X10,EDSUB FORM PRINT LINES J PM100 NEED ANOTHER SECTOR PM110 P$RINT POUT PRINT THE LINE . NOW DO REMOVABLE DISC PACKS . PM200 LA A8,NRP GET NUMBER OF EXTRA PACKS JZ A8,PM300 IF NONE, GO ON TO BACKUPS E$DIT EDPACK OPEN EDIT E$COL COL1 POSITION E$MSG MORE 'MORE' E$MSG PACKS 'PACKS:' E$COL COL2 POSITION TNZ TEMP TEMPORARY FILE? J PM208 NO, HANDLE NORMALLY E$FD1 PACKENTRY+1 YES, QF SETS UP 1-WRD ENTRIES LX X4,(1,20) SET INDEX AND INC FOR PACKS 3-10 J PM210 CONTINUE PM208 E$FD1 PACKENTRY+2 EDIT SECOND PACKID LX X4,(2,22) SET INDEX AND INC FOR PACKS 3-5 PM210 AN,U A8,1 ONE LESS PACK JZ A8,PM230 IF NO MORE, JUST PRINT LINE E$CHAR ',' OTHERWISE, EDIT COMMA E$SKIP 1 POSITION LA,U A0,MI1 AA,U A0,,X4 E$FD1 0,A0 EDIT NEXT PACKID L,U A0,26 ASSUME 5 2-WORD ENTRIES TZ TEMP TEMPORARY FILE? L,U A0,27 YES, 10 1-WORD ENTRIES TLEM X4,A0 ANY MORE IN THIS SECTOR? J PM210 YES, GO GET THEM AN,U A8,1 NO MORE THIS SECOTR...ONE LESS TO DO JZ A8,PM230 IF NO MORE, PRINT LINE LA,U A0,MI1 FIRST LINK WORD ADDR J $+2 PM220 LA,U A0,MI2 NEXT LINK WORD ADDR LMJ X10,GETNXT GET NEXT SECTOR J PM230 NO MORE, PRINT LINE LA,S1 A0,MI2+7 GET DESCRIPTOR BITS TOP,U A0,MI2PAKBIT IS THIS A PACKID SECTOR? J PM220 NO, TRY NEXT SECTOR LX X4,(2,8) GET SECTOR INDEX AND INC LXI,U X10,26 SECTOR WORD LIMIT LMJ X10,EDSUB FORM PRINT LINES J PM220 NEED NEXT SECTOR PM230 P$RINT POUT PRINT LINE . NOW FOR EXTRA BACKUP REELS . PM300 LA A8,NSB GET NUMBER OF EXTRA BACKUPS ON PRVSEC TNZ PRIVLGD IS RUN PRIVILEGED? J PM400 NO, FORGET REEL NUMBER OFF PRVSEC JZ A8,PM400 IF NONE, GO ON E$DIT EDPACK OPEN EDIT E$COL COL1 POSITION E$MSG MORE 'MORE' E$MSG BAKS 'BACKUPS:' E$COL COL2 POSITION E$FD1 BKUPREEL2 EDIT SECOND BACKUP REEL AN,U A8,1 ONE LESS TO DO JZ A8,PM320 IF NO MORE, PRINT LINE LA,U A0,MI1 FIRST LINK WORD ADDR J $+2 PM310 LA,U A0,MI2 NEXT LINK ADDR LMJ X10,GETNXT GET NEXT SECTOR J PM320 NO MORE SECTORS, SO PRINT LA,S1 A0,MI2+7 GET DESCRIPTOR BITS TOP,U A0,MI2BAKBIT IS THIS A BACKUP SECTOR? J PM310 NO, GET NEXT SECTOR LX X4,(1,8) GET SECTOR INDEX AND INC LXI,U X10,27 SECTOR WORD LIMIT LMJ X10,EDSUB FORM PRINT LINES J PM310 NEED NEXT SECTOR PM320 P$RINT POUT . LAPSE EDITING . PM400 LA A8,NLPS GET NUMBER OF LAPSE ENTRIES JZ A8,PM500 IF NONE, WE'RE THROUGH LXM,U X4,LAPSENTRY GET MI1 INC AND INDEX LXI,U X4,2 PM410 LMJ X10,LPSED EDIT LAPSE ENTRY TLEM,U X4,LAPSENTRY+2 THAT ALL? J PM410 NO, GET NEXT ONE LA,U A0,MI1 GET FIRST LINK ADDR J $+2 PM420 LA,U A0,MI2 GET NEXT LINK ADDR LMJ X10,GETNXT GET NEXT SECTOR J PM500 NO MORE, GO ON LA,S1 A0,MI2+7 GET DESC BITS TOP,U A0,MI2LPSBIT LAPSE ENTRIES? J PM420 NO, TRY ANOTHER SECTOR LX X4,(2,MI2+8) SET MI2 INDEX AND INC PM430 LMJ X10,LPSED EDIT LAPSE ENTRY TLEM,U X4,MI2+26 FINISHED WITH THIS SECTOR? J PM430 NOT YET, CONTINUE EDITING J PM420 YES, GET NEXT SECTOR . LPSED E$DIT EDPACK OPEN EDIT E$COL COL1 POSITION E$MSG LAPS 'LAPSE FROM' E$DAY1 0,X4 EDIT START DATE E$MSGR . 'AT' E$TIME 0,X4 EDIT START TIME E$MSGR . 'TO' E$DAY1 1,X4 EDIT END DATE E$MSGR . 'AT' E$TIME 1,X4 END TIME P$RINT POUT PRINT LINE AN,U A8,1 JZ A8,PM500 IF THAT'S ALL, STOP J 0,X10 RETURN . . IF SINGLE-FILE MODE IS SET AND FITEM$ WAS NOT DONE, USE NAME MAY NOW BE . FREED, SINCE NO MORE DREAD$ WILL BE NECESSARY (UNLESS DAD SNAP IS WANTED). . IF FITEM$ WAS DONE, SINGLE-FILE MODE ROUTINE ALREADY FREED THE USE NAME. . PM500 TZ SFMODE2 SINGLE-FILE MODE? TZ SFITEM WITHOUT FITEM$ DONE? J PM600 NO . . FITEM$ HAVING BEEN DONE INDICATES THAT FILE WAS ASSIGNED BY THE USER. . ON SNAPOK LA A0,SNAP GET SNAP BITS TEP,U A0,SNGT GRANULE ITEM TO BE SNAPPED? J PM600 YES OFF SNAPOK LA,U A0,' ' YES, HAVE TO FREE FILE. TZ SFASG ASG'D BY SINGLE-FILE MODE ROUTINE? LA,U A0,'R' YES, DO @FREE,R INSTEAD OF @FREE,A SA,S2 A0,FREIM+1 STORE CORRECT OPTION LA,U A0,FREIM GET IMAGE ER CSF$ FREE THE FILE PM600 TNZ TAP TAPE FILE? J PM900 NO, JUMP TNZ SFITEM FITEM$ DONE? J PM700 NO . . FILE IS TAPE FILE, ASSIGNED BY THE USER. WE CAN EDIT ADDITIONAL . INFORMATION ABOUT IT NOW, USING INFO FROM FITEM$. . E$DIT EDPACK OPEN EDIT E$COL COL1 POSITION E$MSG TAP1 'TAPE IS ON' E$DECV FITEM+9,,T1 EDIT FIRST SS# E$CHAR '/' E$DECV FITEM+9,,S3 UNIT #1 LA,S3 A0,FITEM+6 GET UNIT COUNT TNE,U A0,1 JUST ONE? J PM610 YES, SKIP SECOND ONE E$CHAR ',' LA,H2 A0,FITEM+9 GET SECOND SUBSYSTEM # SSL A0,6 GET RID OF UNIT # E$DECV . EDIT SS # E$CHAR '/' E$DECV FITEM+9,,S6 EDIT UNIT # PM610 E$MSGR . TOTAL REEL COUNT E$DECV FITEM+8,,S1 EDIT COUNT E$MSGR . CONTINUE WITH 'REEL INDEX' E$DECV FITEM+10,,S3 EDIT INDEX TNZ,S1 FITEM+8 ANY REELS? J PM620 NO TNZ FITEM+11 CURRENT REEL THERE? J PM620 NO E$MSGR . CURRENT REEL= E$FD1 FITEM+11 EDIT CURRENT REEL TNZ FITEM+12 ANOTHER ONE? J PM620 NO, PRINT THIS ONE E$MSGR . YES, EDIT NEXT REEL= E$FD1 FITEM+12 EDIT REEL PM620 P$RINT POUT PRINT LINE E$DIT EDPACK START ANOTHER LINE E$COL COL1 POSITION E$MSG TAP2 EDIT 'NOISE' E$DECV FITEM+8,,S3 EDIT NOISE CONSTANT E$SKIP 2 POSITION ON 0 TURN ON IF NEEDED . . EXEC LEVELS PRIOR TO 32.R2 RETURNED FILES-EXTENDED ONLY FOR . MSA TAPE DEVICES...IT IS NOW RETURNED FOR ALL TAPE DEVICES. . IF YOU0'RE RUNNING AN OLD EXEC, YOU MAY WANT TO TURN ON THIS . CODE TO CHECK FOR MSA TAPE. . TNZ TMSAMODES U12/16/20? J PM630 NO OFF E$MSGR . YES, EDIT MSG E$DECV FITEM+10,,S4 EDIT FILES EXTENDED E$SKIP 2 POSITION PM630 E$MSG TAP3 EDIT MSG LA,T3 A0,FITEM+10 GET BLOCKS EXTENDED TP A0 NEGATIVE? LA,U A0,0 YES, SET TO ZERO E$DECV . EDIT BLOCKS EXTENDED P$RINT POUT PRINT LINE TNZ TMSAMODES U12/16/20? J PM900 NO . . U12/16/20. USE FITEM$ MODE BITS FOR EXTRA INFORMATION . E$DIT EDPACK OPEN EDIT E$COL COL1 TAB OVER LA,H2 A5,FITEM+8 GET MODE BITS TOP,U A5,1*/17 8-BIT PACKED? J PM640 NO E$MSG MSA8 YES J PM660 CONTINUE PM640 TOP,U A5,1*/16 6-BIT PACKED? J PM650 NO E$MSG MSA6 YES J PM660 CONTINUE PM650 E$MSG MSAQ MUST BE QUARTER WORD PM660 LA,S1 A0,FITEM+6 GET EQUIPMENT TYPE TG,U A0,013 7-TRACK? J PM680 NO, JUMP TEP,U A5,1*/13 DATA CONVERSION? J PM670 NO E$MSG DCONV YES PM670 TOP,U A5,1*/11 BCD/EBCDIC UNIT TRANSLATE? J PM680 NO E$MSG BCDEBC YES PM680 E$MSG HDWMOD HARDWARE MODE MESSAGE LSSL A5,26 GET RID OF SOME BITS SSL A5,34 SLIDE IT BACK LA A0,A5 MOVE TO A0 E$DECV . EDIT INTO LINE PM690 P$RINT POUT PRINT THE LINE J PM900 CONTINUE . PM700 TNZ TMSAMODES U12/16/20? J PM900 NO . . U12/16/20. USE DIRECTORY INFORMATION FOR EXTRA LINE . E$DIT EDPACK OPEN EDIT E$COL COL1 TAB OVER LA,U A0,0 CLEAR A0 LA A5,TMSAMODES GET MODE BITS TEP,U A5,1*/9 8-BIT PACKED? LA,U A0,MSA8 YES TEP,U A5,1*/8 6-BIT PACKED? LA,U A0,MSA6 YES TEP,U A5,1*/7 QUARTER WORD? LA,U A0,MSAQ YES TZ A0 ANY OF THE ABOVE? E$MSG . YES LA,U A0,BCDEBC MAYBE TEP,U A5,1*/6 BCD/EBCDIC UNIT TRANSLATE? E$MSG . YES LA,U A0,0 CLEAR A0 TEP,U A5,1*/5 XS3/ASCII IN MSA? LA,U A0,XS3ASC YES TEP,U A5,1*/4 XS3/EBCIDC IN MSA? LA,U A0,XS3EBC YES TEP,U A5,1*/3 FD/ASCII IN MSA? LA,U A0,FDASC YES TEP,U A5,1*/2 FD/EBCDIC IN MSA? LA,U A0,FDEBC YES TZ A0 ANY OF THE ABOVE? E$MSG . YES JNB A5,PM750 JUMP IF NO DATA CONVERSION E$MSG DCONV DATA CONVERSION PM750 P$RINT POUT PRINT THE LINE . RETURN TO CHECK/PRINT SEG . PM900 L$OAD CHEKPRTSG,PR600,1 RETURN TO MAIN PRINT SEG /. EDITING SUBROUTINE . EDSUB E$CHAR ',' EDIT A COMMA E$SKIP 1 AND SPACE TO SEPARATE ITEMS E$COLN . GET CURRENT COL L,U A1,COL3 ASSUME LONG LISTING TNZ LONGLIST SHORT LISTING? L,U A1,COL4 YES, SHORTER LINE TLE A0,A1 ROOM FOR ANOTHER ITEM? J EDSUB2 YES P$RINT POUT NO, PRINT THIS LINE E$DIT EDPACK AND START ANOTHER ONE E$COL COL2 POSITION EDSUB2 E$FD1 MI2,X4 EDIT NEXT ITEM AN,U A8,1 ONE LESS TO DO JZ A8,1,X10 IF NO MORE, RETURN TO 1,X10 LA A0,X10 GET LIMIT AND RETURN ADDR SSL A0,18 ISOLATE LIMIT TLEM X4,A0 REACHED END OF THIS SECTOR? J EDSUB NO, KEEP GOING J 0,X10 YES, RETURN TO 0,X10 /. SUBROUTINE TO READ UP NEXT DIRECTORY ITEM . GETNXT TZ SFMODE2 SINGLE-FILE MODE? J DREAD YES, DO DREAD$ FOR DESIRED SECTOR . . SINGLE-FILE MODE NOT SET: USE DIRLNK TO GET NEXT SECTOR . LA A1,,A0 GET LINK WORD IN A1 JN A1,,X10 ERR RTN IF LINK IS NEGATIVE LA,U A0,MI2 GET MI2 BUFFER ADDRESS LMJ X11,DIRLNK$ LINK TO DESIRED SECTOR J 0,X10 ERROR RETURN J 1,X10 NORMAL RETURN . . SINGLE-FILE MODE IS SET: GET NEXT SECTOR VIA DREAD$ . DREAD TP 0,A0 LINK WORD NEGATIVE? NORTN J 0,X10 YES, ERROR RETURN TNE,U A0,MI2 FIRST TIME THROUGH? J DREAD1 NO, PACKET ALREADY SET UP LXI,U A1,03401 GET MAIN ITEMS, TNE,U A0,MI0 UNLESS LINK WORD IS MI0+0, LXI,U A1,03402 IN WHICH CASE, GET GRANULE ITEMS LXM,U A1,MI2 FOR TAPE REEL NUMBERS SA A1,RDPKT+3 STORE IN MSCON$ PACKET LA,U A1,2 ASSUME START WITH SECTOR 2 TNE,U A0,MI0 GETTING GRANULE ITEMS? LA,U A1,0 YES, START WITH SECTOR 0 J DREAD2 CONTINUE DREAD1 L,T1 A1,RDPKT+4 GET PREVIOUS STARTING SECTOR A,U A1,1 INCREMENT TO NEXT SECTOR DREAD2 SA,T1 A1,RDPKT+4 AND STORE IN MSCON$ PACKET LA,U A0,RDPKT GET ADDR OF PACKET ER MSCON$ DO THE DREAD$ JP A0,1,X10 IF OK, NORMAL RETURN J 0,X10 OTHERWISE, ERROR RETURN END @ELT,RI TPF$.PRINT2,,,154321141337 )@@@Q@@@@@@@TO & A AT & FROM &LAPSE S:& BACKUP& REELS:& PACKS:MORE &AA@@@@ )@]0Q@@@@@@@ &FILENOISE:EXT: &: & NURRENT: & C INDEXLS: & & REEUNIT: T & AB@@@@ )@ )Q@@@@@@@PACKED6-BIT & PACKED8-BIT DED: & EXTENBLOCKS& NDED: S EXTEAC@@@@ )@CKQ@@@@@@@XS3/AS& CDIC BCD/EBION &ONVERSDATA C & R WORDQUARTE & AD@@@@ )@F@Q@@@@@@@DIC (MFD/EBCA) & II (MSFD/ASC& MSA) CDIC (XS3/EBSA) &CII (MAE@@@@ )@H0M@@@@@@@@@@@@@@@@@@@ & E = & &, TAPCPU = ATOR: TRANSLDE: & HDW MOSA) &AF@@@@ )@@@K"K@J@(@]/)]B=@TN@[9@C@@@@/,0@@@C8@@@@/,0@@@C/@@@ /,0@@@C/@@@@/]@@@VCQ@@@@AG@@@@ )@]@M%S@JC[[9@AJC[L8@@@@C8C@@W/]@@@TH'@@@[/,0@@@C@C@@7/,0@@@C/@@@N/,0@@@C8@@@#AH@@@@ )@^KM"[M@T8J[9)@J[8JC[0@C@@@@@/K@@@M/,)@ (&')@@UR[@@[@/K@@@T/,)@A]C8@@@@/K@@@NAI@@@@ )@A)K"#2@[8 C@R=@K/)#ES@@@@@@@C8@@@@/,0@@@C/@@@ /,0@@@C/@@@@/]@@[JC6@@@@/,0@AYAJ@@@@ )@C)K"K] G@B=@)/)#YK^J@@@@@@@@C@C@[F/K@@@!()@@@@/,0@@@C/@@@N/,0@@@C8@@@[/,0@@@AK@@@@ )@E)M"K]\G@B)JC[R&@@/@@@C/@@@,/]@@[HH'@@@[R[@@[]/,0@@@C@C@[G/K@@@0R[@@[[/,0@@@AL@@@@ )@G0M"K^<2@*[9@EJC]@@@@@*)@@@@C8@@@U/,0@@@C@G@@@G8^@@@C8C@@8/,0@@@C/@@@[/,0@@@AM@@@@ )@J@O-8#0B)O)AY#0@/K@@[H/,)@A]C8@@@@/K@@[^C8C@@8/]@@[HH'@@@[/K@@@0$[@@@GC8@@@VAN@@@@ )@L)M"K##0YS@#0Y#2@X8@@@/,0@AYC@@@@@/K@@[#/,)@ (&')@@UR[@@[#/K@@[#>8@@@)C4@@@BAO@@@@ )@N0K"K@J@(@]/)]B=@TN@[9@C@@@@/,0@@@C8@@@@/,0@@@C/@@@ /,0@@@C/@@@@/]@@[!CU@@@@AP@@@@ )@P0M%S@JC[[9@AJC[L8@@@@C8C@@8/]@@[:H'@@@[/,0@@@C@C@[^/,0@@@C/@@@N/,0@@@C8@@@ AQ@@@@ )@S@M"[M@T8J[9@GJ[9)@@@@&')@@VR[@@[^/K@@[->8@@@KC4@@@B/K@@[:/,)@A]C8@@@@/K@@[+AR@@@@ )@UKM"#0YK#\[9@@/@Y@@@@@/,)@][&9@@@]Q9C@[ /]@@]RC2@@@@/,0@AYC@@@@@/K@@[-/,)@ (AS@@@@ )@W)M$)J@(@G/B)/)A@@@@@@>8@@@CC4@@@B/K@@]R/,)@A]C8@@@@/K@@[7C8C@@8/K@@[1$9C@[BAT@@@@ )@Y0K"#3@[8 C[$)/]=@F2@C@@@@@@/,0@@@C/@@@@/K@@[6/K@@[.$9@@@U/,)@][R[@@[ /K@@[6AU@@@@ )@)0K$=@TN@[9@CJC]7=[)@@@@@@@@C@^@@@/,0@@@/,0@@@C@^@@@/,0@@@C8@@@B/,0@@@C/@@@ AV@@@@ )@+0K"KA\C#[9@Q/)GB=[:2@W@@@@@C@@@@@/,0@@@C@^@@[/,0@@@/,0@@@C@^@@[/,0@@@/,0@@@AW@@@@ )@=0M"@/[9@W/)CY#2@8@@@@=8@@@)C=@@@@/K@@]<*0@@@@*0@@@@/KE@@@/]@@]RH'@@@[/,0@AYAX@@@@ )@$@M"@/)CB=[9M@.9@)J@@@/K@@ *(0C@[P'=@@@@C8@@@@[0@@@[C8@@@R*4@@@@C8@@@ /K@@]9K)@@C K@@C/,0@@@C/@@@ /,0@@@BK@@@@ )[[KK"@/]&@#2@L8 G@B=@)@@@@@@@/,0@@@C8@@@+/K@@^H/,0@@@C8@@@Z/K@@^F>9KK@@/K@@^HBL@@@@ )[#KM"KD<0B)O0@YK]#0@@@@/K@@^S>9K@)@/,0@@@C8@@@>/K@@^O=9K]@@/K@@^S!8@@@FC4@@@ABM@@@@ )[ )K%S@JC[]&@#2@K[9@*@@@@@@@@/,0@@@C@@@@L;DK@@+;(K@@U/,0@@@C8@@@8/,0@@@C8@@@*BN@@@@ )[B)O"K#\[8@/@Y@@@(@C@@2/ K@^(+9@@@JC1C@@0/K@@ *WC@@1(*C@@1/K@@ */,0@AYC@@@@@BO@@@@ )[E@M"[M@ 9@^JC@7)[N@@@@C8@@@W=9K@@CC8@@@@/[K@^//,0@@@C/@@@ /,0@@@C/@@@@/K@@ *BP@@@@ )[GKM+&@@O0@B=@-N@@YK]@@/,0@@@=9K@@[C8@@@>/,0@@@*@@@@GC8@@@+=9K@@]C8@@@Z=9K@@^BQ@@@@ )[I)M$)O0@YK]#2@P9@SJC[K/,0@@@C@C@@3/,0@@@/,0@@@C@C@@2/,0@@@C8@@@'/K@@ &(@C@@2BR@@@@ )[K0M"KAJ@Y[M@ 9@^JC@0@@C8@@@@/,0@@@C/@@@ /,0@@@C/@@@@/K@@ *(WC@@1/K@@ &/,0@@@BS@@@@ )[N@M)()@ G@@()@JC[@@@@@/,0@@@*@@@@GC8@@@+=9K@]@C8@@@Z=9K@^@C8@@@W=9K@C@CXS@@1BT@@@@ )[PKM%S@#2@K]&@@O0@@@@@@=9K@@CC8@@@,=9K@@KC8@@@:=9K@@)C8@@@@/,0@@@=9K@[@C8@@@*BU@@@@ )[R)K%S@[N@@YK]J@()@/)^@@@@@@@/,0@@@C8@@@>/-K@ &/,0@@@*@@@@GC8@@@5=9K@@^C8@@@2BV@@@@ )[T)M"K#\[9@0JC]L9@O/)T@C8K@[//,0@@@/,0@@@C/@@@[/,0@@@C/@@@,/K@@@@/,0@AYC@@@@@BW@@@@ )[V0M)Y#2@X8 C@R=@K@@@@@C/@@@N/,0@@@C/@@@@/,0@AYC@@@@@/K@@ 9?@@@@HC8K@[@(@@@@NBX@@@@ )[Y@M"K[\C[$=@*@J@@@@@@@/K@@ ($[@@@G;C@@@MC@@@@E/]E@@[H'@@@[/,0@@@C@^@@@/,0@@@BY@@@@ )[)KM$=[30@(@G/)U@@@@@@@/KE@@[/KE@@@/,0@@@C8@@@@/GU@@@C@W@@@/K@@AE*0@@@@/KE@@@BZ@@@@ )[+)M)(@G/@]=@32[?@@@@@@[@K@@#Q;K@@@&;K@W]:8C@@W&;K@W[/K@@AR:8@@@@/KE@@@0@G@@@CA@@@@ )[=0M)Y#2[?YKH>CA7=#)@@@'=@@@@C8@@@@[WK@@^G8K@@[CWK@@^/K@@ATC8K@@@:8C@@WC8K@@]CB@@@@ )[$@M-9@'/)YB=#0JCB)@@@@ @@@@@/KF@@@?8@@[E[@@@@@G8@@@[C@@@@@'=@@@@/KE@@@/CE@@[CC@@@@ )[(K^"KJ\CC@)@K@G@@(@G@@@@@@@@@@]@@C@@[@@C@@]@@C@@]@@Q@@[@@O@@[@@]/K@@@@AA0@@@CD@@@@ @EOF P )@@G@@@@ @@]@@B@@-@[D@@[@[H@@@[@@@@@@@E@[A@@@@A$LINE2 EDPACK EDIT$ AA )@@G@@ ECOL$ EMSG$ EFD1$ MI2 POUT FLAG4 AB )@@G@@ ECHAR$ ESKIP$ EDAY1$ EMSGR$ ETIME$ MRFLGSAC )@@G@@ FREIM CSF$ UNIT1 UNIT2 FITEM EDECV$AD )@@G@@ INFILESX INBLOCKSX INTMODES PR600 ECOLN$ DIRNSEAE )@@G@@C$ RDPKT MSCON$ PRINT$ LINECOUNT HDGRTN HDG200AF )@@G@@ PMORE @@[@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AG @ELT,SI TPF$.QF,,,135537072623,023 . @MFD SINGLE FILE DREAD$ / FITEM$ ROUTINE . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMETERS EQUFS . DEFINE TAGS QFEP E$PKT 14,RBUFF . @USE IMAGE EDIT$ PACKET USEIM '@USE USE$,' RBUFF RES 15 EXTERNAL FILENAME PRT FORM 12,6,18 PRINT$ PKT FORM ERR4 'ILLEGAL FILENAME SYNTAX' ASGIM '@ASG,AQYZ USE$ . ' DREAD$ FILE ASG IMAGE FREIM* '@FREE,A USE$ . ' FREE IMAGE RDPKT* + DREAD$ PACKET FOR MSCON$ 'USE$ ' FILENAME + 03400,RECSTART BUFFER SIZE AND ADDR. + 0 SECTOR START FITEM* 'USE$ ' FITEM$ PACKET RES 11 ON (CHKPCT>0)**(FATSIZ>0) FATBL RES FATSIZ INFO RETURNED BY MSALL$ PUT HERE FATPK + 1,MSALL$ FLAG AS 5-WORD PACKET + FATSIZ,FATBL LENGTH AND ADDR OF BUFFER + 0 (FILLED BY MSCON$) + 0 '' + 0 '' MSBEG EQUF FATPK+3,,H1 MS EQUIP - BEGINNING INDEX MSEND EQUF FATPK+3,,H2 MS EQUIPMENT - LAST INDEX DSCBEG EQUF FATBL+4,,H1 DISC EQUIP - BEGINNING INDEX DSCEND EQUF FATPK+4,,H2 DISC EQUIP - LAST INDEX OFF (CHKPCT>0)**(FATSIZ>0) ON (CHKPCT>0)**(LDJOK=0) PCTBUF RES 01000 PCT$ BUFFER PCTNAM + 0 OFF (CHKPCT>0)**(LDJOK=0) ON CHKPCT PCTDADN* + 0 POINTER TO NEXT PCT DAD/GTB . ITEM, FOR TEMP FILE DAD SNAP OFF CHKPCT . . ER ERRPR$ PACKET . ERRPKT + 040,0,0,0,0,0 FOR FACILITY ERROR MESSAGES + 0 + 0 FAC STATUS BITS GO HERE /$(1),QF000* . . . SINGLE-FILE MODE WAS SPECIFIED, SO WE'LL GET THE . INFORMATION ABOUT A PARTICULAR FILE WITHOUT DOING A DGET$. . . 1. FIRST, ATTACH AN INTERNAL NAME TO THE SPECIFIED FILE. . 2. NOW TRY AN ER FITEM$ ON THAT FILE. IF IT DOES NOT WORK, . ASSIGN THE FILE, AND GO ON TO STEP 4. IF THE FITEM$ DOES WORK, . THE FILE IS ASSIGNED BY THE USER. . 3. USING INFO FROM FITEM$, CHECK FOR TAPE FILE, TEMPORARY FILE, . ARBITRARY DEVICE FILE (NOT TAPE OR MS), ETC., AND SET APPROPRIATE . FLAGS. IF FILE IS NOT TEMPORARY OR ARBITRARY DEVICE, GO ON . TO STEP 4. IF FILE IS TEMPORARY OR ARB DEVICE, CREATE . FAKE LEAD ITEM AND MAIN ITEM BASED ON INFORMATION FROM FTIEM$. . THEN GO ON TO STEP 5. . 4. FILE IS CATALOGUED MASS STORAGE OR TAPE FILE, AND MAY OR MAY . NOT BE ASSIGNED BY THE USER. AN ER MSCON$ IS NOW DONE, USING . THE DREAD$ FUNCTION, TO OBTAIN THE DIRECTORY INFORMATION FOR THIS . FILE. FIRST THE LEAD ITEM IS READ, AND THEN THE MAIN ITEM. . CHECKS ARE MADE TO DETERMINE WHETHER THE FILE IS REMOVABLE DISC, . TAPE, OR G-OPTION, AND APPROPRIATE FLAGS ARE SET. . 5. IF THE FILE IS NOT ASSIGNED BY THE USER, OR IF IT IS A TAPE FILE, . THIS STEP IS SKIPPED. IF NOT, WE LOAD THE RUN'S PCT BANK, VIA AN LDJ . (OR ER PCT$), AND FIND THE FILE DESCRIPTION ENTRY FOR THIS FILE. THIS . IS THE ONLY WAY TO FIND THE GRANULE COUNTS AND PACKIDS FOR . TEMPORARY FIXED AND REMOVABLE MASS STORAGE FILES, AND SOMETIMES . PROVIDES MORE UP-TO-DATE GRANULE COUNTS FOR CATALOGUED FILES, . AS WELL. AFTER GATHERING AS MUCH INFORMATION AS IS USEFUL FOR THE . SPECIFIC CASE, WE LDJ BACK TO THE NORMAL DBANK. . FOR TEMPORARY REMOVABLE DISC FILES, ADDITIONAL CODE IS NEEDED TO . OBTAIN A COPY OF THE FASTRAND-FORMAT MASS STORAGE AVAILABILTY TABLE . (FATBL), BECAUSE THE PCT ONLY HAS SUBSYSTEM AND UNIT NUMBERS . FOR THE DISC DRIVES INVOLVED, NOT THE PACKIDS. FATBL MUST BE . SEARCHED AND CHECKED AGAINST THE PCT 'PACKID' TABLE. . 6. IF THE FILE IS TEMPORARY OR ARBITRARY DEVICE, THE @USE NAME . IS NOW FREED. . IF NOT, WE DETERMINE WHETHER OR NOT TO FREE THE @USE RELATIONSHIP . NOW. IF A SECOND PRINT LINE WILL BE NECESSARY FOR THE FILE, . THEN WE WON'T FREE IT NOW: ROUTINE 'PRINT2' WILL FREE IT. . L$OAD CHEKPRTSG,,1 LOAD CHECK/PRINT SEGMENT . ****** SR R15,SFMODE SET SINGLE-FILE MODE FLAG SR R15,SFMODE2 SET OTHER SINGLE-FILE MODE FLAG LA A0,(0100000,QF700) . SET UP CONTINGENCY ROUTINE ER IALL$ REGISTER IT TZ,S2 MFD$ FILENAME GIVEN? J QF004 YES, NO ELEMENT SUBSTITUTION LA,S1 A0,MFD$+1 GET CHARS IN ELEMENT NAME JZ A0,QF910 IF NOTHING THERE EITHER, ASSUME TPF$ SA,S2 A0,MFD$ STORE AS CHARS IN FILENAME DL A0,MFD$+9 GET ELEMENT NAME DS A0,MFD$+4 STORE IN FILENAME FIELD LA,S3 A0,MFD$+1 GET ELEMENT CYCLE CHAR COUNT SA,S3 A0,MFD$ STORE AS F-CYCLE CHAR COUNT JZ A0,QF004 IF NONE, GO ON LA A0,MFD$+13 GET ELT CYCLE SA A0,MFD$+6 STORE AS FCYCLE . . COMPOSE @USE IMAGE FROM FILENAME IN SPEC FIELD . QF004 E$DIT QFEP OPEN @USE IMAGE EDIT TZ,S1 MFD$ QUAL GIVEN? J QF006 YES TNZ,S6 MFD$ IMPLIED QUALIFIER? J QF010 NO E$FD2 PCT+021 PICK UP LATEST @QUAL J QF008 CONTINUE QF006 E$FD2 MFD$+2 ADD QUALIFIER QF008 E$CHAR '*' AND AN ASTERISK QF010 E$FD2 MFD$+4 ADD FILENAME TNZ,S3 MFD$ F-CYCLE? J QF012 NO E$CHAR '(' E$FD1 MFD$+6 ADD FCYCLE E$CHAR ')' QF012 TNZ,S4 MFD$ READ KEY? J QF014 NO E$CHAR '/' E$COPY 6,MFD$+7 ADD READ KEY TNZ,S5 MFD$ WRITE KEY? J QF018 NO J QF016 READ AND WRITE KEYS QF014 TNZ,S5 MFD$ WRITE KEY? J QF018 NO E$CHAR '/' ONE FOR THE READ KEY, QF016 E$CHAR '/' AND ONE FOR THE WRITE KEY E$COPY 6,MFD$+8 ADD WRITE KEY QF018 E$COPY 4,('. . ') TERMINATE IMAGE . NOW HAVE @USE IMAGE, EITHER COMPOSED FROM SPEC FIELD OR . CREATED BY PUTTING '@USE USE$' IN FRONT OF IMAGE READ VIA READ$. . QF020 LA A0,(16,USEIM) GET IMAGE ADDR AND MAX LENGTH ER CSF$ PERFORM @USE JNZ A0,QF430 HANDLE ERROR . . TRY ER FITEM$. IF IT WORKS, FILE IS ASG'ED TO USER, AND MAY BE . TEMPORARY FILE. IF NOT, MUST BE CATALOGUED FILE: WE MUST ASG IT . TO DO DREAD$. . SZ FLAG4 ZERO SFASG,SFITEM,ARB,UCOPT,TEMP FLAGS SZ FITEM+10 INITIALIZE SUBCODE SZ FITEM+11 CLEAR TAPE REELS IN CASE LEFT SZ FITEM+12 BY PRVIOUS FITEM$ LA A0,(0377777,FITEM) . ER FITEM$ GET FILE INFO TNZ,S1 FITEM+6 IS FILE ASSIGNED? J QF070 NO, ASG AND DO DREAD$ SR R15,SFITEM YES, SET FITEM FLAG . . CHECK FOR @ASG,C OR @ASG,U . LA,S1 A0,FITEM+6 GET EQUIP CODE TG,U A0,070 COMMUNICATIONS STUFF? J FIT005 YES, SKIP THIS L A1,FITEM+7 GET OPTION BITS LA,U A2,0 ASSUME NOT C OR U TEP A1,(1*/('Z'-'C')) C-OPTION USED? L,U A2,'C' YES, GET FD 'C' TEP,U A1,1*/('Z'-'U') U-OPTION USED? L,U A2,'U' YES, GET FD U S A2,UCOPT STORE ZERO OR CHAR IN FLAG . . CHECK FOR ARBITRARY DEVICE FILE (NOT TAPE OR MASS STORAGE) . FIT005 TLE,U A0,040 TAPE OR MASS STORAGE? J FIT010 YES, CHECK FOR TEMP FILE SR R15,ARB YES, SET FLAG J FIT020 SKIP TEMP FILE CHECK . . CHECK FOR TEMPORARY FILE . FIT010 LA,S1 A0,FITEM+7 GET DESC BITS TOP,U A0,020 TEMPORARY FILE? J QF080 NO, DO DREAD$ FOR CATALOGUED FILE . . TEMPORARY FILE: CREATE FAKE LEAD/MAIN ITEMS USING INFO FROM FITEM$ . FIT020 SR R15,TEMP SET TEMP FILE FLAG L,U R1,28*3 LA A0,(1,RECSTART) LA,U A1,(0) BT A0,,*A1 ZERO-FILL LI0, MI0, AND MI1 ON OLDMFD SR R15,MFD$F ASSUME NEW-FORMAT 'MFD' OFF OLDMFD DL A0,FITEM+4 QUALIFIER DS A0,QUAL DS A0,MI0QUAL DL A0,FITEM+2 FILENAME DS A0,FILE DS A0,MI0FILE DL A0,PCT+2 PROJECT-ID DS A0,PROJ DS A0,MI0PROJ DL A0,PCT+023 ACCOUNT DS A0,ACCOUNT LA,S1 A0,FITEM+6 EQUIP CODE TG,U A0,020 WORD ADDRESSABLE? TG,U A0,026 J $+2 NO A,U A0,012 YES, CHANGE TO F-TYPE CODE SA A0,MI0OLDEQP SET OLD EQUIP CODE IN MI0 SZ FLAGS CLEAR TAP,GFIL,VFIL,BMI1 SZ RDISC CLEAR RDISC FLAG L A1,('F ') ASSUME NORMAL MASS STORAGE EQUIP S A1,MNEMONIC STORE AS ASSIGN MNEMONIC . AT THIS POINT, FILTYP = MSTYP (0) TG,U A0,020 TAPE FILE? J FIT030 NO, GO ON SR R15,TAP YES, SET FLAG L,U A1,TAPTYP GET TAPE FILE TYPE INDICATOR S A1,FILTYP SET IN LI0 L A1,('T ') GET TAPE EQUIP TYPE S A1,MNEMONIC STORE AS ASSIGN MNEMONIC FIT030 LA,T3 A1,FITEM+6 GET FCYCLE TLE,U A0,040 TAPE OR MASS STORAGE? SA A1,FCYCLE YES, STORE FCYCLE IN MI0 LA,S6 A1,FITEM+10 GET SUBCODE TG,U A0,030 MASS STORAGE? TG,U A0,040 J FIT100 NO . . TEMPORARY MASS STORAGE FILE . SA A1,OLDSUBCOD YES, STORE SUBCODE IN LI0 DL A0,FITEM+8 INITIAL GRAN,MAX GRAN . AND HIGHEST TRK,HIGHEST GRAN NBR SA A0,MAXGRAN STORE MAX GRAN SSL A0,18 ISOLATE INITIAL GRAN SA A0,INITRESV STORE IT SA A1,HIGRANULE STORE HIGHEST GRAN NBR SSL A1,18 ISOLATE HIGHEST TRACK REF SA A1,HITRACK STORE IT LA,S1 A1,PCHAR PCHAR (ASSUMED = 0 AT THIS POINT) TZ,S3 FITEM+6 POSITION GRANULARITY? AA,U A1,POSBIT YES, SET BIT FOR PCHAR LA,S2 A0,FITEM+6 GET FILE MODE BITS TEP,U A0,01 WORD ADDRESSABLE? AA,U A1,WADBIT YES, SET BIT FOR PCHAR SA,S1 A1,PCHAR STORE PCHAR BITS IN MAIN ITEM FIT100 L,S1 A0,FITEM+6 A0 = EQUIPMENT CODE TG,U A0,070 COMM THING? J FIT120 YES, NO ASG OPTIONS . . TAPE OR MASS STORAGE . LA A0,FITEM+7 A0 = ASSIGN OPTIONS TOP A0,(1*/('Z'-'G')) G-OPTION FILE? J FIT110 NO SR R15,GFIL YES, SET FLAG LA A1,LI0STAT L.I. STATUS (ASSUMED=0 AT THIS POINT) AA,U A1,LI0GBIT SET G-BIT IN LEAD ITEM SA A1,LI0STAT STORE L.I. STATUS BITS LA A1,INHIBITS INHIBIT BITS (ASSUMED=0 NOW) AA,U A1,MI0GBIT SET M.I. G-OPTION INDICATOR J FIT111 GO ON FIT110 LA A1,INHIBITS INHIBIT BITS (ASSUMED=0 NOW) FIT111 TOP,U A0,1*/('Z'-'P') ASG'D WITH P-OPTION? AA,U A1,PBIT NO, SET PRIVATE BIT TEP,U A0,1*/('Z'-'R') READ ONLY? AA,U A1,RONLY YES, SET READ ONLY BIT TEP,U A0,1*/('Z'-'W') WRITE ONLY? AA,U A1,WONLY YES, SET BIT SA A1,INHIBITS STORE INHIBIT BITS TNZ TAP TAPE FILE? J FIT120 NO . . TAPE FILE: SET MODE BITS . LA,H2 A0,FITEM+8 GET MODE BITS L A1,MI0OLDEQP GET OLD EQUIPMENT CODE TG,U A1,011 MSA TAPE DEVICE? TG,U A1,016 J FIT118 NO, NON-MSA TAPE . . TEMPORARY TAPE FILE ON MSA TAPE DEVICE: . UNIVAC'S DOCUMENTATION SAYS THAT THE NON-MSA TAPE MODES . CELL IN MI0+21,,S4 IS ZERO FOR MSA TAPES, BUT THIS IS NOT TRUE. . LA,U A2,010 ASSUME LOW DENSITY TEP,U A0,1*/14 LOW DENSITY SET? LA,U A2,020 YES TEP,U A0,1*/15 HIGH DENSITY SET? LA,U A2,030 YES TG,U A1,013 7-TRACK UNIT? J $+3 NO, 9-TRACK TOP,U A0,1*/12 YES, EVEN PARITY? AA,U A2,040 YES, SET EVEN PARITY BIT SA A2,TAPEMODES SET NON-MSA MODES IN MAIN ITEM . . CONTINUE WITH MSA TAPE MODES . LA,U A2,00200 ASSUME QUARTER-WORD TRANSFER TEP,U A0,1*/17 8-BIT PACKED? LA,U A2,01000 YES TEP,U A0,1*/16 6-BIT PACKED? LA,U A2,00400 YES TG,U A1,013 7-TRACK MSA TAPE DEVICE? J FIT114 NO, 9-TRACK UNIT TOP,U A0,1*/13 DATA CONVERTER ON? AA,U A2,01 YES, SET BIT FOR MAIN ITEM SA A2,TMSAMODES STORE IN MAIN ITEM CELL J FIT120 AND GO ON FIT114 . 9-TRACK UNIT TEP,U A0,1*/11 800 FPI? AA,U A2,04000 YES, SET HIGH-DENSITY BIT SA A2,TMSAMODES STORE IN MAIN ITEM J FIT120 AND GO ON . . TEMPORARY TAPE FILE ON NON-MSA DEVICE . FIT118 . SSL A0,9 ADJUST THEM SA A0,TAPEMODES STORE THEM . . ALL TEMPORARY FILES: SET TIME/DATE OF ASG, ASG COUNT . FIT120 ER TDATE$ GET CURRENT TIME/DATE SA A0,DATLSTASG STORE AS LAST ASG TIME SR R15,TOTASGCNT TOTAL ASSIGNS SR R15,CURASGCNT NUMBER OF RUNS ASG'D TO THIS FILE J QF090 DON'T DO DREAD$ FOR TEMP/ARB FILE . . CATALOGUED FILE - DO MSCON$ DREAD$ FOR DIRECTORY INFORMATION . QF070 LA,U A0,ASGIM MUST FIRST ASSIGN THE FILE ER CSF$ JN A0,QF410 HANDLE ASSIGN ERROR SR R15,SFASG ASSIGN OK - SET FLAG QF080 . DO SNAPOK>0 , SZ RDPKT+4 SET FOR SECTOR 0 LA A0,(03400,RECSTART) . SET UP DREAD$ FOR LEAD ITEM SA A0,RDPKT+3 STORE ACW LA,U A0,RDPKT GET DREAD$ PKT ADDR ER MSCON$ DREAD$ FOR LI0 JN A0,QF420 HANDLE ERROR LA A0,(07001,RECSTART+28) . RESET DREAD$ FOR MI0 & 1 SA A0,RDPKT+3 STORE IN DREAD$ PKT LA,U A0,RDPKT SET UP DREAD$ PACKET ER MSCON$ DO DREAD$ MSCON$ JN A0,QF420 NO GOOD? TELL USER SZ FLAGS1 CLEAR TAP,GFIL SZ RDISC CLEAR RDISC FLAG TP LI0STAT G-OPTION FILE? SR R15,GFIL YES, SET FLAG ON OLDMFD LA A0,DESCFLAGS GET DESCRIPTOR FLAGS TOP,U A0,OLDBIT OLD FORMAT ITEM? J QF084 NO, SKIP AHEAD SZ MFD$F CLEAR NEW-FORMAT MFD FLAG LA A0,LI0OLDEQP GET MEDIUM TE,U A0,075 8414/24 TNE,U A0,076 OR 8440 REM DISC? SR R15,RDISC YES, SET RDISC FLAG TLE,U A0,020 TAPE FILE? SR R15,TAP YES, SET FLAG J QF090 GO ON QF084 SR R15,MFD$F SET NEW-FORMAT MFD FLAG OFF OLDMFD LA A0,FILTYP GET FILE TYPE FROM LEAD ITEM JZ A0,QF090 JUMP IF FIXED MASS STORAGE TNE,U A0,TAPTYP MAGNETIC TAPE? SR R15,TAP YES, SET FLAG TNE,U A0,REMTYP REMOVABLE DISC FILE? SR R15,RDISC YES, SET FLAG ON CHKPCT . . IF THE USER HAS ASSIGNED THE FILE (RATHER THAN @MFD ITSELF, . TO DO THE DREAD$), THEN WE CAN GET ADDITIONAL INFORMATION ON THE FILE . FROM THE USER'S PCT. IF THE FILE IS A TEMPORARY REMOVABLE DISC FILE, . FOR INSTANCE, THIS IS THE ONLY WAY WE WILL GET THE PACKID(S). . ALSO, SINCE THE DIRECTORY IS NOT UPDATED UNTIL THE USER FREES THE . FILE, THE DREAD$ MAY NOT PROVIDE UP-TO-DATE INFORMATION ON SUCH ITEMS . AS THE GRANULE COUNTS, ETC. THIS INFORMATION MAY BE MORE CURRENT . IN THE PCT, IF THE INFORMATION IS NOT IN EXPOOL. . QF090 TZ SFASG ASG'D BY SINGLE-FILE MODE ROUTINE? J PCT700 YES, DON'T SEARCH PCT TZ TAP CATALOGUED TAPE FILE? TZ TEMP J $+2 NO, CHECK PCT J PCT700 YES, DON'T BOTHER WITH PCT . . PCT DOES NOT SEEM TO HAVE CORRECT HIGHEST/TOTAL TRACK COUNTS . WHEN CATALOGUED FILE IS EXCLUSIVELY ASSIGNED . TZ TEMP TEMPORARY FILE? J QF092 YES, SKIP X-ASG TEST LA A0,INHIBITS GET INHIBIT FLAGS TEP,U A0,XUSE ASG,X ? J PCT700 YES, SKIP PCT SEARCH QF092 LA A0,QUAL GET FIRST WORD OF QUALIFIER LA A1,FILE AND FIRST WORD OF FILENAME . . SYS$*LIB$ PCT ITEM DOES NOT HAVE GRANULE COUNTS...DON'T USE IT . DTE A0,('SYS$ LIB$ ') . IS FILE SYS$*LIB$ J $+2 NO, GO ON J PCT700 YES, DON'T BOTHER WITH PCT LX,U X10,0 INDICATE NOT 'PCTDAD' SUB CALL J PCT000 GO ON . . ENTRY POINT FOR USE BY 'PRINT' ROUTINE IF DAD/GTB SNAP IS WANTED . FOR A TEMPORARY FILE. . PCTDAD* . ENTER VIA LMJ X10,PCTDAD . PCT000 . ON LDJOK LXI,U X11,PCTBD$ GET BDI FOR PCT LDJ X11,PCT100 LOAD PCT BANK $(0). THESE INSTRUCTIONS IN IBANK PCT100 . . . CHECK FOR 1108 OR 1110, AND GET PROPER PCT ADDRESS . LX,U X4,RPCTA$-1 X4 = RELATIVE PCT ADDRESS FOR 1108/6 DI,U A4,0 DIVIDE BY ZERO JNDF U1108 IF 1108, ALWAYS JUMPS LX,U X4,RPCTA$ 1110 - GET REL PCT ADDR OFF LDJOK ON LDJOK=0 L,U A0,PCTBUF GET ADDR OF PCT BUFFER L A1,(01000,0) REQUEST FIRST PCT BLOCK ER PCT$ L,U A0,0777241 FAKE ADDR OF PCTNAM, SINCE S A0,PCTNAM LINKS WILL BE RELATIVE TO IT LX,U X4,PCTBUF POINT TO PCT BUFFER OFF LDJOK=0 U1108 A,U X4,0241 POINT TO FIRST PCTNAM BUFFER TNZ X10 PCTDAD CALL? J PCT120 NO, GO ON TZ PCTDADN YES: FIRST TIME FOR THIS FILE? J PCTDAD2 NO, ALREADY HAVE ITEM LINK PCT120 . DL A4,FITEM GET FILENAME PCT200 L X3,X4 X3 = ADDR OF PCTNAM BUFFER LXI,U X3,3 SET FOR 3-WORD NAME ENTRIES L,S3 A0,,X4 GET NUMBER OF FILES THIS BUFFER JZ A0,PCT500 IF NONE, CHECK FOR ANOTHER BUFFER AN,U A0,1 ADJUST FOR JGD S A0,R1 R1 = NUMBER OF FILES-1 FOR LOOP . . SINCE WE JUST DID A @USE, WE SHOULD FIND THE FILENAME ON FIRST TRY . PCT300 DTE A4,1,X3 CHECK FILENAME VS. NAME IN BUFFER J PCT400 NO MATCH, TRY NEXT ENTRY IN BUFFER L,H2 A0,3,X3 MATCH - PICK UP DESC TABLE INDEX A A0,X4 ADD PCTNAM ADDR DO LDJOK=0 , LMJ A3,PCTLNK OBTAIN CORRECT PCT BLOCK TNZ X10 PCTDAD CALL? J PCT305 NO, GO ON LA,H2 A1,0,A0 GET LINK TO FIRST DAD/GTB ITEM LXI,U A1,0,A0 GET DESC ITEM ADDR ALSO SA A1,PCTDADN UPDATE NEXT ITEM ADDR J PCTDAD2 HANDLE SUBROUTINE CALL . . NO GRANULE COUNTS FOR TAPE/ARB FILES . PCT305 TNZ TAP TAPE FILE? TZ ARB OR ARB DEVICE? J PCT320 YES, SKIP GRANULE COUNTS LA,S3 A1,3,A0 GET PCFIND TNE,U A1,1 EXPOOL ITEM EXISTS? J PCT320 YES, WON'T FIND GRANULE COUNTS HERE L A3,A0 SET FOR TRANSFER OF GRANULE COUNTS LXI,U A3,-1 FROM DESC TABLE TO MI0 L,U A1,7 LXM,U X3,GRANULES+7 POINT TO LAST GRANULE ENTRY LXI,U X3,-1 SET INC PCT310 L,H2 A2,016,*A3 SA,H2 A2,0,*X3 STORE GRANULE COUNTS JGD A1,PCT310 GET COUNTS FOR EQUIP TYPES 030-037 LA,H1 A1,012,A0 GET HIGHEST TRACK WRITTEN SA A1,HITRACK STORE IN MAIN ITEM . . SEE COMMENTS AT TAG 'MCTEQ' IN ELEMENT 'MFD' . PCT320 TNZ TEMP TEMPORARY FILE? J PCT600 NO, NO NEED FOR MSALL$, ETC. TNZ MCTEQ ANYTHING IN SPECIFIC MNEMONIC TABLE? J PCT325 NO, GO ON L,T1 X3,1,A0 YES, PICK UP EQUIP INDEX FROM PCT ITEM L A1,MCTEQ-1,X3 GET SPECIFIC MNEMONIC S A1,MNEMONIC STORE IN MAIN ITEM SECTOR 0 J PCT330 GO ON PCT325 . ON OLDMFD SZ MFD$F WELL, CAN'T BE NEW FORMAT 'MFD' OFF OLDMFD PCT330 TNZ TAP TAPE FILE? TZ ARB OR ARB DEVICE? J PCT600 YES, ALL DONE WITH PCT ON FATSIZ=0 J PCT600 RETURN TO NORMAL OFF FATSIZ=0 ON FATSIZ TNZ,H1 014,A0 TEMP FILE WITH PACKID LINK (REMOVABLE) J PCT600 NO, NO NEED FOR MSALL$ . . IT'S A TEMPORARY REMOVABLE DISC FILE - GET FATBL TO FIND PACKIDS . S A0,X4 STORE DESC ITEM ADDR IN X4 L,U A0,FATPK GET MSCON$ PACKET ER MSCON$ DO MSALL$ JN A0,PCT600 IF NO GOOD, FORGET IT L X3,MSBEG GET STARTING MS DEVICE INDEX AN,T1 X3,1,X4 - EQUIP INDEX FOR THIS FILE . = INDEX INTO FATBL ON OLDMFD TZ MSBEG NEW-TYPE FATBL? J $+3 YES, GO ON L,S1 X3,1,X4 NO, GET OLD EQUIPMENT CODE AN,U X3,030 ADJUST FOR FATBL INDEX OFF OLDMFD L,H1 A0,014,X4 GET REL LINK TO PACKID TABLE A A0,X4 ADD CURRENT ITEM ADDR DO LDJOK=0 , LMJ A3,PCTLNK OBTAIN CORRECT PCT BLOCK S A0,X4 X4 = ADDR OF PACKID TABLE L A1,X3 A1 = EQUIP INDEX INTO FATBL ON OLDMFD TZ MSBEG NEW-TYPE FATBL? J $+3 YES, GO ON TNZ,H1 FATBL,A1 ANY OF THESE DISCS CONFIGURED? J PCT600 NO, FORGET THE WHOLE THING OFF OLDMFD L,H1 X3,FATBL,A1 YES, GET LINK TO STATUS TABLE A,U X3,FATBL X3 = ABS LOC OF STATUS TBL IN FATBL L,T1 R3,,X3 R3 = NUMBER OF UNITS JGD R3,$+1 ADJUST FOR JGD A X3,(5,3) SET INC, MOVE UP TO UNIT INFO . . FOR EACH DISC UNIT IN FATBL, CHECK TO SEE IF THIS UNIT IS IN . THE FILE'S PACKID TABLE. . FAT100 L,H2 A0,,X4 GET NUMBER OF PACKS THIS FILE TG,U A0,11 MORE THAN 10? L,U A0,10 YES, LIMIT TO 10 S A0,R1 SET SEARCH REPEAT COUNT IN R1 L,H1 A0,1,X3 GET SS/U FROM FATBL L,U A1,1,X4 GET ADDR OF 1ST SS/U IN TABLE LXI,U A1,1 ONE-WORD ENTRIES SE,H1 A0,,*A1 IS THIS UNIT ONE OF THEM? J FAT200 NO, TRY NEXT UNIT S R15,RDISC YES, SET REM DISC FLAG LA A1,NBRPACKS BUMP PACK COUNT IN MI1 A,U A1,1 SA A1,NBRPACKS L A0,4,X3 GET PACKID FROM FATBL . AND STORE IT IN MI1 LA,U A2,PACKENTRY-1 POINT TO PACKID ENTRIES AA,U A2,,A1 ADD CURRENT INDEX S A0,0,A2 NOTE: WE ARE STORING UP TO 10 . PACKIDS, IN ONE-WORD ENTRIES, . WHEREAS NORMAL FORMAT IS UP TO 5 . IN 2-WORD ENTRIES . PRINT2 ROUTINE WILL HAVE TO CHECK . FOR TEMP FILE, AND CHANGE THINGS . ACCORDINGLY. FAT200 NOP 0,0,*X3 INC TO NEXT UNIT ENTRY JGD R3,FAT100 CHECK ALL UNITS J PCT600 ALL DONE OFF FATSIZ . . HAVE NOT YET FOUND CORRECT PCT ITEM ...CONTINUE LOOKING . PCT400 NOP 0,0,*X3 INDEX TO NEXT ENTRY IN PCTNAM BUFFER JGD R1,PCT300 CHECK ALL ENTRIES IN THIS BUFFER PCT500 . REACHED END OF THIS PCTNAM BUFFER TNZ,H2 0,X4 DOES ANOTHER BUFFER EXIST? J PCT600 NO, THAT'S ALL L,H2 A0,,X4 YES, GET LINK TO NEXT PCTNAM BUFFER A A0,X4 ADD ADDR OF CURRENT BUFFER DO LDJOK=0 , LMJ A3,PCTLNK OBTAIN CORRECT PCT BLOCK S A0,X4 X4 = ADDR OF NEW PCTNAM BUFFER J PCT200 SEARCH NEW BUFFER FOR FILENAME /. . . CONTINUATION OF 'PCTDAD' SUBROUTINE. FINDS NEXT DAD/GRANULE ITEM . (FOR A PARTICULAR FILE) IN THE PCT, AND RETURNS IT TO THE . CALLER IN MI0. THE ONLY CALLER AT THE TIME OF THIS WRITING . IS THE 'PRINT' ROUTINE, WHICH USES IT TO SNAP THE DAD/GTB OF . TEMPORARY FILES. . PCTDAD2 LA,H2 A0,PCTDADN PICK UP DAD/GTB ITEM LINK JZ A0,PCT600 IF NO MORE, RETURN 0,X10 AA,H1 A0,PCTDADN IT'S RELATIVE TO PREVIOUS ITEM DO LDJOK=0 , LMJ A3,PCTLNK OBTAIN CORRECT PCT BLOCK SA,H1 A0,PCTDADN STORE ADDR OF NEW ITEM LA,H2 A1,0,A0 GET LINK TO NEXT ITEM SA,H2 A1,PCTDADN AND STORE IT FOR NEXT CALL LA,H1 A2,1,A0 GET GRANULE # OF 1ST GRAN . IN ITEM ***OLDMFD ONLY*** AA,U A0,3 BUMP TO START OF DAD/GTB INFO LXI,U A0,1 SET INC FOR BT LXM,U A1,MI0 SET BT DESTINATION AS MI0 LXI,U A1,1 SET INC FOR BT LR,U R1,28 BT ONE DAD/GTB ITEM BT A1,,*A0 DO THE TRANSFER LX,U X10,1,X10 SET TO RETURN TO 1,X10 . FALL THRU TO PCT600 TO . RETRIEVE DBANK & RTN TO CALLER /. ALL THROUGH WITH PCT ...RELOAD MFD'S DBANK . PCT600 . NO MORE BUFFERS, OR GOT WHAT WE WANTED DO LDJOK>0 , LDJ X11,PCT610 RELOAD PROGRAM DBANK $(1). THESE INSTRUCTIONS IN DBANK AGAIN PCT610 TZ X10 WAS THIS A PCTDAD SUB CALL? J 0,X10 YES, RETURN TO CALLER OFF CHKPCT . PCT700 TZ ARB ARBITRARY DEVICE? J QF400 YES, FREE THE USE NAME . . IF FILE HAS MORE THAN ONE TAPE REEL, OR MORE THAN ONE PACKID, OR . MORE THAN ONE BACKUP REEL (IN BATCH MODE), THEN A SECOND LINE WILL . BE PRINTED WITH THIS INFORMATION. ROUTINE 'PRINT2' WILL DO DREAD$'S, . SO WE SHOULD NOT FREE THE FILE HERE IF THIS IS THE CASE. . ALSO, NO FREE SHOULD BE DONE NOW IF A SNAP$ IS REQUESTED FOR THE . GRANULE (DAD) ITEMS, LEAD ITEM SECTOR 1, OR MAIN ITEM SECTORS 2-N. . ON SNAPOK LA A0,SNAP GET SNAP BITS AND,U A0,SNGT+SNL1+SNM2 FUNNY SNAP$ WANTED? JNZ A1,QF500 YES, DON'T FREE THE FILE YET OFF SNAPOK TZ TEMP TEMP FILE? J QF400 YES, FREE THE USE NAME TNZ TAP TAPE FILE? J QF100 NO LA A0,NBRREELS YES, GET NUMBER OF REELS TG,U A0,2 MORE THAN ONE? J QF500 YES, DON'T FREE FILE (PRINT2 . WILL DO IT). TZ TMSAMODES MSA TAPE EQUIPMENT? J QF500 YES, DON'T FREE FILE QF100 JZ RDISC,QF200 REMOVABLE? NO,QF200 YES LA A0,NBRPACKS GET NUMBER OF PACKS TG,U A0,2 MORE THAN ONE? J QF500 YES, DON'T FREE FILE QF200 LA A1,DESCFLAGS GET DESCRIPTOR BITS JZ LONGLIST,QF400 IF SHORT LISTING, DON'T WORRY . ABOUT BACKUPS OR LAPSES TOP,U A1,BAKBIT BACKED UP? J QF300 NO LA A0,BKUPREELS GET NUMBER OF BACKUP REELS TG,U A0,2 MORE THAN ONE? J QF500 YES, DON'T FREE FILE QF300 TEP,U A1,LPSBIT LAPSES? J QF500 YES, DON'T FREE FILE . . FREE THE @USE RELATIONSHIP. IF THE USER ALREADY HAD THE FILE . ASSIGNED, JUST FREE THE INTERNAL NAME 'USE$'. OTHERWISE, FREE THE . NAME AND THE FILE (BUT RETAIN ANY OTHER @USE RELATIONS). . QF400 LA,U A0,' ' ASSUME @FREE,A TZ SFASG ASG'D BY SINGLE-FILE MODE ROUTINE? LA,U A0,'R' YES, DO @FREE,AR INSTEAD SA,S2 A0,FREIM+1 STORE CORRECT OPTION LA,U A0,FREIM GET FREE IMAGE ER CSF$ DO CSF$ JZ A0,QF500 OK . . ERROR ASSIGNING (OR FREEING) THE FILE . QF410 S A0,ERRPKT+2 STORE FAC ERROR BITS FOR ERRPR$ LA,U A0,FREIM GET @FREE IMAGE ER CSF$ FREE USE NAME LA,U A0,ERRPKT POINT TO ERRPR$ PACKET QF415 ER ERRPR$ EDIT THE INFO (IF ERRPR$ IS UNDEFINED, . WE AUTOMATICALLY REVERT TO THE OLD METHOD) JZ A0,QF900 IF OK, TRY ANOTHER DATA CARD QF416 LX,U X10,('FAC: &') GET ADDR OF ERROR MSG LA A0,ERRPKT+2 RESTORE FAC REJECT CODE J QF440 PRINT ERROR CODE . . ERROR DOING MSCON$ DREAD$ . QF420 LX,U X10,('MSCON ERR: &') . GET MSG ADDR J QF440 PRINT IT . . ERROR TRYING TO DO A '@USE USE$,Q*F(C). ' ??? . QF430 LX,U X10,('USE: &') GET MSG ADDR . . PRINT CORRECT ERROR MSG . QF440 SA A0,ECODE+1 HANG ON TO ERROR E$DIT EDPACK OPEN EDIT E$MSG 0,X10 EDIT MSG E$OCTF 12,ECODE+1 EDIT ERROR CODE QF450 P$RINT POUT PRINT ERROR MSG J QF900 TRY AGAIN VIA READ$ . . IF RUN IS PRIVILEGED AND QFK OPTIONS ARE SET, PRINT KEYS ONLY . QF500 TZ KPT K-OPTION SET? TNZ PRIVLGD AND RUN PRIVILEGED? J MFD100 NO, DO NORMAL STUFF E$DIT EDPACK YES, OPEN EDIT E$FD2 QUAL QUALIFIER E$CHAR '*' E$FD2 FILE FILENAME E$CHAR '(' E$DECV FCYCLE F-CYCLE E$CHAR ')' E$CHAR '/' E$COPY 6,RDKEY READ KEY E$CHAR '/' E$COPY 6,WRKEY WRITE KEY J QF450 PRINT IT / ON (CHKPCT>0)**(LDJOK=0) . . THIS SUBROUTINE IS FOR USE WHEN LDJ OF PCT BANK IS NOT DESIRED . (LDJOK EQU 0). IT CONVERTS THE RELATVIE PCT BUFFER ADDRESS . INTO AN ADDRESS USABLE BY ER PCT$, AND LOADS THE PROPER PCT BLOCK. . UPON EXIT, A0 CONTAINS THE ADDRESS WITHIN PCTBUF CORRESPONDING TO . THE DESIRED PCT RELATIVE ADDRESS. . PCTLNK TG,U A0,PCTBUF+01000 ADDR IN CURRENTLY-LOADED PCT BLOCK? J NOTCUR NO L A1,A0 YES, GET ADDR IN A1 AN A1,X4 SUBTRACT REL PCTBUF ADDR, LEAVING LINK A A1,PCTNAM ADD CURRENT ITEM BASE ADDR S A1,PCTNAM STORE NEW BASE ADDR J 0,A3 RETURN WITH A0=REL ADDR WITHIN PCTBUF . . DESIRED BLOCK NOT IN PCTBUF . NOTCUR AN A0,X4 SUBTRACT REL PCTBUF ADDR, LEAVING LINK A,H2 A0,PCTNAM ADD CURRENT ITEM BASE S,H2 A0,PCTNAM STORE NEW BASE AND,U A0,0777000 ISOLATE BLOCK NUMBER A,U A1,01000 ADJUST FOR PCT$ LXI,U A1,01000 GET 1 PCT BLOCK S A0,A2 SAVE REL ADDR L,U A0,PCTBUF GET ADDR OF PCT BUFFER ER PCT$ GET PCT BLOCK L A0,A2 RETRIEVE ADDR AND,U A0,0777 MASK OUT BLOCK INFO L,U A0,PCTBUF,A1 FORM REL ADDR INTO PCTBUF J 0,A3 RETURN OFF (CHKPCT>0)**(LDJOK=0) /. CSF$ CONTINGENCY ROUTINE FOR BAD FILENAME INPUT VIA READ$. . QF700 + 0D LA,T1 A0,QF700 GET ERROR TYPE AND CODE TE,U A0,0440 SYNTAX ERROR ON CSF$ CALL? J QF710 NO, CHECK SOME MORE THINGS P$RINT (PRT 1,4,ERR4) PRINT ERROR MSG J QF900 AND TRY ANOTHER DATA CARD QF710 TE,U A0,0401 ER INDEX OUT OF RANGE? TNE,U A0,0403 OR NOT IN USE? J $+2 YES, MAY BE ATTEMPT AT ER ERRPR$ ER EABT$ NO, BETTER LUCK NEXT TIME LA,H2 A0,QF700 GET ERROR ADDRESS TE,U A0,QF415 ER ERRPR$ ROUTINE? ER EABT$ NO, SOMEBODY GOOFED J QF416 YES, DO IT THE OLD WAY . USE READ$ TO GET ANOTHER FILE TO DO . QF900* SR R15,SFMODE RESET SINGLE-FILE MODE INDICATOR LA A0,(MFD700,RBUFF) GET READ$ PACKET ER READ$ READ A CARD J QF920 GO AHEAD QF910 LA A0,('TPF$ ') NO, ASSUME TPF$ SA A0,RBUFF PUT IT IN IMAGE LA,U A0,1 FUDGE FOR 1 WORD READ QF920 LA,U A1,' . ' GET SET TO TERMINATE THE IMAGE TZ,U 0,A0 SKIP IF REPEATING PREVIOUS FILE SA,H1 A1,RBUFF,A0 TERMINATE WITH SPACE-PERIOD-SPACE J QF020 DO THE @USE END @ELT,RI TPF$.QF,,,154334141337 )@@@KE@@@@@@)@ 0^@L FILEILLEGA USE$,@USE @@@@@@@@@@@@@@@@@@[[@@@@@@@@@@@&I@@CAA@@@@ )@AKO@@@/S]@@@@@@@USE$ @@@@@@E$ . A US@FREE,E$ . QYZ US@ASG,AYNTAX NAME SAB@@@@ )@C0E]=@C@@@)@G0C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ USE$ @@@@@@@W@@@@ AC@@@@ )@H0M@@/V]@C*B@@@@@@@[@@5@@@@@@@@]@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AD@@@@ )@K@IJA0)^E[86^@(KJA0)]E[86^@0@@@@@@@@@@@@@@]@@&@@@@@@@@]@@3@@@@@@@@[@@6@@@@@@AE@@@@ )@L0ME[86^@9KJA0)CE@@@@@@@@@@@@@@@@@)@@@@@@@@@@@@@[@@8@@@@@@@@[@@7@@@@@@@@#@@9AF@@@@ )@@@K"S@JC]L9)@/B&@#2@=(@O@@@@C8@@@@'=@@@@C@@@#I/K@@@B>@@@@6C8@@@['=@@@@C@@@#HAG@@@@ )@]@K-9@Q/)GYS@JC#R=[30@@@@@@@/K@@@U*0@@@@'=@@@@C@@@#J^30@@@'=@@@@C8K@@@&;@)@@AH@@@@ )@^@K"KBJ[9@W/)IYKBJC#$=[30@@@/@@@@U[?@@@@C?@@@[9*@@@^9?@@@D[0@@@@/@@@AJC4@@@[AI@@@@ )@A@K"KBJC#+&@#2@.9@W/B=[30@@@/K@@@$()@@@@/K@@@<*4@@@@/,0@@@C/@@@@[@@@@AC@@@@HAJ@@@@ )@C@K"KCJC^R)/)IYKC<2[D9@W@@@@9?@@@^/,0@@@C/@@@*/,0@@@9?@@@]/K@@@>/,0@@@9?@@@LAK@@@@ )@E@K"KC\C#$)JC^$=[32[G@@@@@@@C/@@@)/,0@@@C@@@@A/,0@@@C/@@@(/K@@@1(?@@@@/,0@@@AL@@@@ )@G@K"KDJC#$)JC^+=[0/)O@@@@@@@/,0@@@C8K@@AC8@@@B/,0@@@C/@@@//K@@@;(*@@@@/,0@@@AM@@@@ )@I@M"KBJ[8JC#$)JC^-9@=@/,0@@@C/@@@//,0@@@C/@@@//K@@[^(=@@@@/K@@@_/K@@[^(=@@@@AN@@@@ )@KKK%KB#2[K()@JC B&@#2[O@@@@@'=@@@@C@@@#L/,0@@@C8K@@^C8@@#K/,0@@@C8K@@AC8@@@CAO@@@@ )@MKK"#2[T9)@/0@YS@JG@B=];3@@@(4@@@?'=@@@@C@@@#M @@@@2 @@@@1 @@@@0 @@@@@/^@@ LAP@@@@ )@OKM"#2[T9)@J[9)@JG@@@@C8)@@C=@K@#NC8)@@@C@K@@!/K@@[X!8@@@8C4@@@?^30@@@/K@@#(AQ@@@@ )@Q)M-9@?J[9@?/B&@@@@@@@>8@@@KC4@@@!/K@@[=^:0@@@/K@@[-?8@@@)[=)@@@C8)@@U=8K@@)AR@@@@ )@S0M"#2[SYS@ G@[9@0/0@@9*C@@[9?@@@%^70@@@M#H)@@C8K@#PC@@@#ON8K@[O^<0@@@/K@@#!AS@@@@ )@V@M$&@@JC^@YKC@@@@@@@@9*C@@<9?@@@N9*C@@-9*C@@ 9?@@@]9*C@@Z9*C@@#9?@@@*9*C@@XAT@@@@ )@XKO"S@@/@[9)@@@@[@S@@%C@K@#Q @@@@U @C@[P[4C@@!G8@@@E/K@@['!8@@@Q!8@@@KC4@@@?AU@@@@ )@Z0O$)@/0@B&@@@@@[@S@@%*@@@@HC@K@@5[@S@@%C@K@#R[4S@@DC8K@@[^38@[P/K@@]A!8@@@KAV@@@@ )@+KM"S@@/0@[8#3@@@@@@@@9?@@@,[?S@@E/K@@]Z!8@@@)!8@@@SC)K@@0[OS@@!?8@@@)COK@@?AW@@@@ )@=)O)@B&@@/0@@@@@C0@@@?G8K@@)*?@@@?C4S@@([CS@@3;CK@@M[CS@@2[CC@@0;C@@@M[CC@@1AX@@@@ )@$@M)YS@#0YS@JG@B)@@@@@/K@@]?>@@@#SC@@@@!/K@@#=!8@@@8C4@@@?[4S@@(G8K@@C=8@@@[AY@@@@ )@(KQ)@Y@@@@=8@@^@G8K@@C>8@@K@C0S@@!/K@@]!G8K@@)C0S@@![WS@@EG8K@)@CWS@@E^78@[PAZ@@@@ )@?@M)[8JG@B&@@@@@@@@@@@9*C@@2%@@@#T9?@@@'/K@@#=(0C@[P[0S@@!G8K@@]=8@@@CG8K@@[BA@@@@ )@,KM"S@J[9)@@/0@B&@@@@@C=@@@9[0S@@0))@@@9C8@@@)=8K@[@C8@@@@COK@@6/K@@#^(@@@@6BB@@@@ )@0)O$)/0@@Y@@@@@@C8)@@K=8@^@@C8)@@C/K@@#+!8K@@I!8K@@DC4S@@!C^@@@,/K@@#=[4C@@0BC@@@@ )@3@Q)Y@@@@@=8@K@@C8)@C@=8@)@@C8)@]@[**@@1G8)@@)>8@[@@/K@@#M!8K@@FC8)@@S=8@C@@BD@@@@ )@50O-8@J@@@@@@@@@[W*@@1G8)@)@=8@@)@/K@@#=[W*@@1G8)@@[>8@]@@/K@@#Y!8K@@FC8)@^@BE@@@@ )@8KM"@JCAKB)O0@@@@@@@@@C8@@@V/K@@^I^V8@@!^B8@@:[@C@@,'=@@@@[*C@@1;C@@@D/K@@#=BF@@@@ )@')K"KE\[9@?/0@YS@JG@]&@#2[*@'=@@@@C8@@@-[@@@@=C@@@#U @@@@>^70@@@/G@@ A'=@@@@BG@@@@ )@/)M"#3@[9)@O0@YKHJ@@@@0WC@@E @@@@U CC@[P/G@@ J'=@@@@C8@@@-[@@@@=C@@@#V/G@@ JBH@@@@ )@"0O)Y#2[)@@@@@@@?8@@@K^#0@@U:8@@@"%8@@@.C4C@@D 4@@@@/K@@^B>8@@[@CWC@@*^78@[PBI@@@@ )[[KO$)/)SB)@JC )@*4@@@@^#0@@U:8@@@)^38@[P:8@@@[/@@@^IC4C@@D^70@@@/K@@^I^38@[PBJ@@@@ )[#0M"@/)QY#0YKFJ@@@@@@@=8@@@^C0C@@!/K@@^T*)@@@@/K@@^=/K@@^O*)@@@@*0C@[P/K@@^=BK@@@@ )[A@M"@JG@B)/[8 CA0@@@@@&'0@@@/K@@^)R')@@@/K@@^=/K@@^Y9/@@#WC@S@@#C@C@@[/K@@^=BL@@@@ )[CK]"S@@@@@)@O@IFKI#0EKI@/@@@/K@@[T(@@@@EO9@@]-R9@@@@/40@[OW9@@@@R9@__"B%0@[KBM@@@@ )@P0OY#0Y@#0@@@@@@9.#@@[[@@@[[H8@@@[/@@@]8C?^@@@&80@@#R@0@@^9!@@@&/K@@]"*@@@[GBN@@@@ )@SKOY@#0[8J@@@@@@(0C@[P/K@@]"[@K@[G&;W@@@C^W@@@/K@@[%(@@@@EG@@@@^C^#@@#/K@@]6BO@@@@ )@U0OYKFJ@B)@@@@@@&80__"Q/8@@7C8K@@B&;0__"C@0@@G/K@@[':8K@@[C?W@@#/K@@['**@@@@BP@@@@ )@XKM[8@/)QY#0Y@@@@@@@@@/K@@]^*@@@@5/K@@#G()@@@@[CS@@3CCW@@E8#K@[5[^<)@@C^\)@IBQ@@@@ )@Z)MYKI\@ZKI<0YKG#2[S@@**@@@@(0C@[P 4@@@@/K@@] [@S@@%C@NJ_"RW/@@[/K@@]^(@@@@@BR@@@@ )@-0MY@/@(@//)YYKHJ[9@/@RC0@@#/G@@#G'=@@@@(C@@@]C8@@@@[@@@@^/K@@#G(CG@@G/K@@#GBS@@@@ )@=@OB=#30@@YKJ@@@*C@@@#C@K@@#[@@@@^G@@@@^CC^@@GP80@@SR44@@[/K@@]P*C@@@#PW4@@[BT@@@@ )@&)MY#2[.8JCB2=#8/B)@@@C^^@@@O@0@#Y8K0@]-NW3@@@O80@@@RC.@@@/K@@#G(@H@@@/K@@]XBU@@@@ )@*0Q@@B)@@@G8K@@[COS@[D^#0@@U/K@@]32CH)@@&;K@@[C8O@@[CC#@@[[@@@[[C8@@@E!8@@@FBV@@@@ )@:)O@@Y#0B)@@@@@@8KK@[)/S#)@@/K@@#G8K0@]+/S#)@@[@I@@@G8!@@@C8*@[DC@#@@^[OS@[DBW@@@@ )@,@OB)@/B)/B)/@@@[C@@[GGC@@[G/@@@#GC^@@[G/K@@[U[@@@@^G@@@@^C^^@@@/K@@#G(^^@@@BX@@@@ )@0)OB)@@@@@@@@@@@R'%@@[M#W)@@N8K@@W&;K@@[Q;S@@W&;@@@[G8@@@#CC?@@[[^K@[GC^W@@@BY@@@@ )@3@]YS@)@@@)[C)I-9@?/B=[)/@@@/^K@ Y+8@@@2C=@@@@/K@@^_**@@@@/KE@@@*@@@@EB%0@^+BZ@@@@ )[EKO"KFJ@Y@J@Y#0@/#)@^6/K@@ Y*WC@@1/K@@ Y!8@@@]C^C@@0/K@@^2(0C@[P/K@@^_*)@@@@CA@@@@ )[G0O-8#0B)#0@@@@@/K@@ Y!8@@@]CWC@@_/K@@^.>8K@K@/[0@^_CWS@@*/K@@ Y!8@@@]COC@[DCB@@@@ )[JKM$)JC -9)@O0@YKE\@@@/@@@ Y'=@@@@C8@@@Y[0@@@ZC8@@@R*4@@@@C8@@@ /K@@ Y=8K@^@CC@@@@ )[L)K"S@ G@B=](N@[9[@/]&@#3@@@C@@@[JR')@#Z/@@@AF'=@@@@C8@@[H'=@@@@C8@@@Y[@@@[JCD@@@@ )[N)K"[N@[8 G@B=^DM]D9@Y@@@@@@C8E@@@/,0@@@C/@@@@[@@@@[R')@#+/K@@ MR')@#)/K@@ MCE@@@@ )[P)K"KL\CCL9[CO)>B=^30@@@@@@@/K@@AF'=@@@@C@G@@@C8@@@@/,0@@@C8K@@GC@@@@[/,0@@@CF@@@@ )[R)K"KN\C#B= [M]D9@YJC^K@@@@@C/@@@*/,0@@@9?C@@[/,0@@@C/@@@@/K@@@@(*@@@@*W@@@ECG@@@@ )[T)M"KD#2[^YKD#2]=YKD@@/,0@@@C/@@@)/,0@@@COC@@!/,0@@@C/@@@(/,0@@@9?C@@#/,0@@@CH@@@@ )[V0M$=]KJC [9@=@@@@@@@@C8K@@AC8C@@C/,0@@@C/@@@//,0@@@C8K@@AC8C@@B/,0@@@C/@@@/CI@@@@ )[Y@M"KEJ@B)J@()@@@@@@@@C@G@@@C8@@#/K@@AM'=@@@@C@@@#=^70@@@/K@@ GCL@@@@ )[=)C-9)@/@@)@3KCE[KES@)@@@@@@. . C@@@ '@@C@[^@@C@@//K@@[B[CW@@C*8G@@@C8K . CM@@@@ )@4KOE[K]=@C@ C@K@@W@@@@ @@]@@@T F @@@@@@@@[@@@@@)@@@Z__@@&@@K@@ACN@@@@ )@60OEK@)@[KGKQM)@@@@@@C@[^@@RUSE: &ERR: &MSCON FAC: &@@ @@#LIB$ SYS$ @8[@@WCO@@@@ )@9K]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@TPF$ CP@@@@ @EOF P )@@G@@@@ @@]@@B@@!@[-@@G@]L@@@[@@@@@@@E@#&@@@@AQDREAD$ RECSTART INFILEAA )@@G@@$ FEQP$ EQUIP$ LNAME$ MODE$ FFILEX$ FBLKSXAB )@@G@@$ INFO$ CHEKPRTSG LOAD$ MRFLGS IALL$ MFD$ AC )@@G@@ EDIT$ PCT EFD2$ ECHAR$ EFD1$ ECOPY$AD )@@G@@ CSF$ FLAG4 FITEM$ FLAG5 TDATE$ MSCON$AE )@@G@@ PCTBD$ RPCTA$ MCTEQ MSALLPKT MSBUF ERRPR$AF )@@G@@ ECODE EDPACK EMSG$ EOCTF$ POUT PRINT$AG )@@G@@ OPTIONS MFD100 EDECV$ EABT$ READ$ MFD700AH )@@G@@ FITEM @@@@@@@@@@@&FREIM @@@@@@@@@@@YINBLOCKSX @@@@@@AI )@@G@@@@@@@8INFILESX @@@@@@@@@@@7INTMODES @@@@@@@@@@@9PCTDAD @@[@@@AJ )@@G@@@@@@^)PCTDADN @@@@@@@@@@[GQF000 @@[@@@@@@@@@QF900 @@[@@@AK )@@G@@@@@@AFRDPKT @@@@@@@@@@@-UNIT1 @@@@@@@@@@@3UNIT2 @@@@@@AL )@@G@@@@@@@4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AM )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AN @ELT,SI TPF$.SNAP,,,135550072623,023 . @MFD SNAP$ ROUTINE - DUMPS DIRECTORY ITEMS SELECTED BY THE USER . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMTERES ON SNAPOK EQUFS . DEFINE TAGS PRT FORM 12,6,18 FORM T1,S3,H2 . P PROC 1 SNAPP* NAME 0 SETSNAP* NAME 1 DO P(1)=0 , GO ERONLY SKIP IF NO PARAMETERS GIVEN LA A0,(P(1,1)) GET HEADER INFO DO OLDMFD=0 , GO ON SKIP 'DAD' CHECK IF NEW FORMAT ONLY DO 1-(P(1,1)='DAD ') , GO ON SKIP IF NOT 'DAD' TNZ MFD$F NEW FORMAT DIRECTORY? LA A0,('GTB ') NO, USE 'GTB' RATHER THAN 'DAD' ON NAME . SA A0,SNAPKT STORE IN SNAP$ PACKET LA,U A0,P(1,2) GET BUFFER ADDRESS SA A0,BUFAD STORE IT IN SNAP$ PACKET DO P(1)<3 , GO ERONLY IF NOT SPECIFIED, LEAVE # WORDS AS IS LA,U A0,P(1,3) BUT IF SPECIFIED, USE IT SA A0,NWRDS SET # OF WORDS TO SNAP ERONLY NAME . DO P(0,0)>0 , GO AWAY SKIP IF JUST SETTING UP PACKET ON SNAPSUB=0 LA,U A0,SNAPKT GET SNAP$ PACKET ADDRESS ER SNAP$ DO THE SNAP$ OFF SNAPSUB=0 ON SNAPSUB LMJ X10,SNAP$ DO THE SNAP$ LA A2,SNAP RELOAD SNAP BITS OFF SNAPSUB SR R15,SNAPKT+2 SET SNAPPED-SOMETHING INDICATOR DO (P(1,1)='LI0')++(P(1,1)='LI1') , ; SR R15,LISNPD SET LEAD-ITEM-SNAPPED FLAG AWAY NAME . END . SNAPKT 'SEC ' SNAP$ PACKET + 28,0 ASSUME 1 SECTOR + 0 NWRDS EQUF SNAPKT+1,,H1 # OF WORDS TO SNAP BUFAD EQUF SNAPKT+1,,H2 ADDRESS OF BUFFER TO SNAP . ON CHKPCT=0 TEMPGT 'TEMP FILE DAD SNAP NOT CONFIGURED' TEMPGTP + 0200+($-TEMPGT),TEMPGT OFF CHKPCT=0 ON CHKPCT TDAD ' SNAP OF DAD ITEMS CURRENTLY IN PCT FOLLOWS' TDADP + 0200+($-TDAD),TDAD ON OLDMFD TGTBF 'FIRST GRANULE IN THIS GRANULE ITEM: &' OFF OLDMFD OFF CHKPCT $(1) . /. PRINT ROUTINE ENTERS HERE WITH A2 = SNAP FLAG IF SNAP FLAG IS NONZERO. . SN000* SZ SNAPKT+2 CLEAR SNAPPED-SOMETHING FLAG TZ LISNPD CAN WE SNAP LEAD ITEM? J SN200 NO, DONE ALREADY TOP,U A2,SNL0 SNAP LEAD ITEM SECTOR 0? J SN120 NO, TRY SEC 1 . . SNAP LEAD ITEM SECTOR 0 . SN100 SNAPP 'LI0 ',LI0 SNAP LEAD ITEM SECTOR 0 SN120 TEP,U A2,SNL1 LEAD ITEM SEC 1 SNAP WANTED? TP LI0LI1LNK AND IS THERE A SECTOR 1? J SN200 NO TZ TEMP TEMPORARY FILE? J SN200 YES, NO L.I. SEC 1 TZ SFMODE2 SINGLE-FILE MODE? J SN150 YES, MUST USE DREAD$ LA A1,LI0LI1LNK PICK UP LINK WORD LA,U A0,LI1 GET BUFFER ADDRESS LMJ X11,DIRLNK$ FIND LEAD ITEM SECTOR 1 J DIRECERR ERROR RETURN LA A2,SNAP RELOAD SNAP BITS J SN170 GO DO THE SNAP$ SN150 LXI,U A0,03400 SET FOR LEAD ITEM DREAD$ LXM,U A0,LI1 INTO LI1 BUFFER SA A0,RDPKT+3 SET ACW SR,T1 R15,RDPKT+4 SET FOR L.I. SECTOR 1 LA,U A0,RDPKT GET DREAD$ PACKET ADDRESS ER MSCON$ READ UP L.I. SEC 1 TP A0 OK? ER EABT$ NO . YES, DO THE SNAP$ SN170 SNAPP 'LI1 ',LI1 SNAP LEAD ITEM SECTOR 1 SN200 TOP,U A2,SNM0 MI0 SNAP DESIRED? J SN300 NO, PR930 . . SNAP MAIN ITEM SECTOR 0 . SNAPP 'MI0 ',MI0 SNAP MAIN ITEM SECTOR 0 SN300 TZ BMI1 BAD MI1 LINK? J SN400 YES, CAN'T SNAP MI1 OR MI2-N JNZ RDISC,$+2 JUMP IF M.I. SEC 1 AVAILABLE JZ BACKEDUP,SN400 OTHERWISE SKIP MI1/2/N SNAPS TOP,U A2,SNM1 MAIN ITEM SEC 1 SNAP WANTED? J SN320 NO, CHECK FOR SEC 2-N . . SNAP MAIN ITEM SECTOR 1 . SNAPP 'MI1 ',MI1 SNAP MAIN ITEM SECTOR 1 SN320 TEP,U A2,SNM2 SNAP MAIN ITEM SECTORS 2-N? TP MI1MI2LNK AND M.I. SEC 2 EXISTS? J SN400 NO TZ TEMP TEMPORARY FILE? J SN400 YES, NO M.I. SECS 2-N SETSNAP 'MI2 ',MI2 SET SNAP$ PACKET FOR MAIN ITEM SEC 2-N TZ SFMODE2 SINGLE-FILE MODE? J SN350 YES SN330 LA A1,MI1MI2LNK YES, PICK UP LINK WORD LA,U A0,MI1 SET BUFFER ADDRESS AS MI1 LMJ X11,DIRLNK$ FIND NEXT M.I. SECTOR J DIRECERR ERROR RETURN LA A2,SNAP RESTORE SNAP BITS SN340 SNAPP . SNAP THE SECTOR TP MI1MI2LNK MORE SECTORS TO DO? J SN400 NO, GO ON BUMP,A0 SNAPKT,,H1 . INCREMENT TO 'MI3' OR WHATEVER TNZ SFMODE2 SINGLE-FILE MODE? J SN330 NO, LINK TO NEXT SECTOR BUMP,A0 RDPKT+4,,T1 . YES, INCREMENT STARTING SECTOR J SN360 AND DO DREAD$ SN350 LXI,U A0,03401 SET FOR MAIN ITEM SECTORS LXM,U A0,MI1 PUT THEM IN MI1 SA A0,RDPKT+3 SET ACW LA,U A0,2 START WITH SECTOR 2 SA,T1 A0,RDPKT+4 SN360 LA,U A0,RDPKT GET PACKET ADDRESS ER MSCON$ DO THE DREAD$ TP A0 OK? ER EABT$ NO J SN340 SNAP IT SN400 TOP,U A2,SNGT GRANULE ITEM SNAPS WANTED? J SN880 NO . . SNAP DAD ITEMS . SETSNAP 'DAD ',MI0 SET SNAP$ PACKET FOR DAD/GTB ITEMS TZ SFMODE2 SINGLE-FILE MODE? J SN520 YES, HANDLE VIA DREAD$ SN500 TP MI0DADLNK ANY MORE DAD ITEMS? J SN880 NO, THAT'S ALL LA,U A0,MI0 GET ADDRESS OF MI0 BUFFER LA A1,MI0DADLNK AND LINK WORD LMJ X11,DIRLNK$ LINK TO NEXT GRANULE ITEM J DIRECERR ERROR RETURN SNAPP . DO IT J SN500 AND GO BACK FOR MORE . . SINGLE FILE MODE: GET DAD/GT TABLE VIA DREAD$ OR FROM PCT . SN520 TNZ TEMP TEMPORARY FILE? J SN600 NO, USE DREAD$ . . SINGLE FILE MODE, TEMPORARY FILE - USE PCT ROUTINE IN 'QF' . TZ ARB ARBITRARY DEVICE? J SN880 YES, CAN'T SNAP DAD/GTB ON CHKPCT=0 P$RINT TEMPGTP CAN'T DO IT J SN880 OFF CHKPCT=0 ON CHKPCT ON OLDMFD LA,U A0,'DAD' GET SNAP HEADER TNZ MFD$F OLD-FORMAT MFD? LA,U A0,'GTB' YES SA,H2 A0,TDAD+1 SET IN PRINT IMAGE OFF OLDMFD P$RINT TDADP PRINT HEADING SZ PCTDADN INITIALIZE SUBROUTINE IN 'QF' SN540 LMJ X10,PCTDAD GET TABLE FROM PCT J SN880 ALL DONE WITH THIS FILE ON OLDMFD TZ MFD$F OLD-FORMAT MFD? J SN560 NO, GO ON SA A2,X10 YES, SAVE FIRST GRANULE NUMBER E$DIT EDPACK OPEN EDIT E$MSG TGTBF EDIT 'FIRST GRANULE' MSG E$DECV X10 EDIT GRANULE NUMBER P$RINT ( PRT 1,0,0) SKIP A LINE P$RINT POUT PRINT MESSAGE OFF OLDMFD SN560 SNAPP . DO THE SNAP$ J SN540 GET NEXT GTB/DAD SECTOR OFF CHKPCT . . SINGLE FILE MODE, CATALOGUED FILE - DO DREAD$ TO GET DAD/GTB . SN600 LXI,U A0,03402 SET FOR GRANULE ITMES LXM,U A0,MI0 PUT THEM IN MI0 SA A0,RDPKT+3 SET ACW SZ,T1 RDPKT+4 START WITH SECTOR 0 SN620 LA,U A0,RDPKT GET PKT ADDR ER MSCON$ DO DREAD$ TP A0 OK? ER EABT$ NO SNAPP . DO THE SNAP$ TP MI0DADLNK ANY MORE GRANULE ITEMS? J SN640 NO LA,T1 A0,RDPKT+4 GET SECTOR START AA,U A0,1 INC BY 1 SA,T1 A0,RDPKT+4 AND RESET J SN620 READ NEXT SECTOR . . NO MORE SECTORS - FREE FILE . SN640 LA,U A0,' ' ASSUME JUST FREE USE NAME TZ SFASG ASSIGNED BY SINGLE-FILE MODE ROUTINE? LA,U A0,'R' YES, FREE FILE ALSO SA,S2 A0,FREIM+1 STORE CHAR IN FREE IMAGE LA,U A0,FREIM GET IMAGE ADDR ER CSF$ FREE THE FILE . . ALL SNAPS DONE - SKIP A LINE BEFORE PRINTING NEXT FILE . SN880 LA A0,( PRT 1,0,0) GET SET TO SKIP A LINE TZ SNAPKT+2 WAS ANYTHING SNAPPED? ER PRINT$ YES, SKIP A LINE L$OAD CHEKPRTSG,PR990,1 RETURN TO PRINT ROUTINE / ON POLDBG . . DEBUG SNAPS . POLDBM 'TESTS = & AOX = & POLNTH = & SORT = & BRKCNT = &' SSIZE EQU 6 SUPER SPEC TABLE ENTRY SIZE BRKSIZ EQU 6 BRKTBL ENTRY SIZE . SN900* . E$DIT EDPACK OPEN EDIT E$MSG POLDBM START MSG E$DECV TESTS E$MSGR . E$OCTV AOX E$MSGR . E$DECV POLNTH E$MSGR E$DECV SORT E$MSGR . E$DECV BRKCNT P$RINT POUT2 SNAPP 'SSTAB ',SSTAB,SSIZE*NSSP SNAPP 'POLISH',POLISH,NSSP ON BRKOK TNZ BRKCNT J NOBREAK SNAPP 'BRKTBL',BRKTBL,BRKMAX*BRKSIZ SNAPP 'BRKPNT',BRKPNT,1 SNAPP 'INVALU',INVALU,1 NOBREAK . OFF BRKOK P$RINT ( PRT 1,0,0) SKIP A LINE L$OAD INSEG,IN2020,1 RETURN TO INITIALIZATION SEGMENT OFF POLDBG / ON SNAPSUB . . THIS SUBROUTINE PEFORMS A MORE READABLE SNAP$-TYPE DUMP THAN IS . AVAILABLE THROUGH ER SNAP$. IT INCLUDES A SHORTER FORMAT FOR DEMAND . USE. THIS ROUTINE IS USED ONLY IF CONFIG PARAMETER 'SNAPSUB' IS NONZERO. . . ENTER VIA: LMJ X10,SNAP$ . DESTROYS: X4, X10, X11, A6, R2, R4, PLUS REGISTERS USED BY EDIT$ . $(0) . ENTIRE 'ALL & WORDS = &' LASTWD RES 1 LAST WORD OF EACH LINE IS STORED . HERE FOR COMPARISON WPL RES 1 # OF WORDS PER LINE . SLEN EQU 5 WORDS/LINE FOR SHORT LISTING LLEN EQU 8 WORDS/LINE FOR LONG LISTING . $(1),SNAP$. P$RINT ( PRT 2,1,SNAPKT) PRINT SNAP HEADER LA A0,NWRDS GET NUMBER OF WORDS TO SNAP AND,U A0,077777 MASK OF XAR BITS TO BE SAFE JZ A1,,X10 IF NO WORDS TO SNAP, RETURN SA A1,NWRDS OTHERWISE, PUT MASKED # WORDS BACK LX X4,(1,0) INITIALIZE WORD INDEX AX X4,BUFAD ADD BUFFER ADDRESS TLE,U A1,4 IF ONLY 1-3 WORDS BEING SNAPPED, J NOTSAM SKIP ALL-THE-SAME TEST AN,U A1,1 MINUS 1 FOR SEARCH COUNT SA A1,R1 SET SEARCH COUNT LX A2,X4 COPY WORD INDEX AND INCREMENT TO A2 LA A0,0,A2 GET 1ST WORD OF AREA SNE A0,1,*A2 FIND ANY DIFFERENT WORDS? J $+2 NO, ALL THE SAME J NOTSAM YES, NOT ALL THE SAME . . THE ENTIRE AREA IS EQUAL: PRINT MESSAGE AND RETURN . E$DIT EDPACK OPEN EDIT E$MSG ENTIRE START MSG E$DECV NWRDS EDIT NUMBER OF WORDS E$MSGR . CONTINUE MSG E$OCTV 0,X4 ADD VALUE P$RINT POUT PRINT MSG J 0,X10 RETURN . . ENTIRE AREA IS NOT EQUAL: DUMP IT LINE BY LINE . NOTSAM LA A0,( PRT 1,0,0) GET SET TO SKIP A LINE TZ LONGLIST LONG LISTING? ER PRINT$ YES, DO IT LA A0,NWRDS GET # OF WORDS TO SNAP DSL A0,36 GET SET FOR DIVIDE LA,U A2,SLEN GET SHORT WORDS/LINE TZ LONGLIST LONG LISTING? LA,U A2,LLEN YES, GET LONG WORDS/LINE SA A2,WPL STORE WORDS PER LINE DI A0,A2 CALCULATE # OF LINES NEEDED TZ A1 REMAINDER ON PARTIAL LINE? AA,U A0,1 YES ANA,U A0,1 ADJUST FOR JGD SA A0,R4 SET LOOP COUNT LA,U A6,0 INITIALIZE SKIP INDICATOR J PRINTLINE ALWAYS PRINT FIRST LINE . . BEFORE PRINTING EACH LINE (EXCEPT THE FIRST AND LAST LINES), CHECK TO SEE . IF ALL WORDS ON THIS LINE ARE EQUAL TO THE LAST WORD OF THE PREVIOUS LINE. . IF SO, DO NOT PRINT THIS LINE, BUT INDICATE, VIA A '*' ON THE NEXT PRINTED . LINE, THAT AT LEAST ONE LINE HAS BEEN SKIPPED. . LINELOOP LA A0,R4 GET LINE NUMBER JZ A0,PRINTLINE IF LAST LINE, DON'T SKIP IT LR R1,WPL GET # OF WORDS PER LINE LA A0,LASTWD GET LAST WORD FROM PREVIOUS LINE LX A1,X4 COPY CURRENT INDEX AND INCREMENT TO A1 SNE A0,0,*A1 ANYTHING DIFFERENT ON THIS LINE? J $+2 NO, SKIP THIS LINE J PRINTLINE YES, PRINT THIS LINE LA,U A6,1 SET SKIP INDICATOR AX X4,WPL POINT TO NEXT LINE J NEXTLINE SKIP THIS LINE . . WE DON'T WANT TO SKIP THIS LINE: COMPOSE AND PRINT IT . PRINTLINE E$DIT EDPACK OPEN EDIT LR R2,A6 HOLD PREVIOUS SKIP INDICATOR LA,U A6,0 CLEAR NEW SKIP INDICATOR LA,U A0,0,X4 GET INDEX OF FIRST WORD IN LINE ANA A0,BUFAD MAKE IT RELATIVE TO 0 E$OCTF 4 EDIT THE NUMBER E$SKIP 1 SKIP A SPACE LA,U A0,' ' ASSUME ANOTHER SPACE TZ R2 BUT WAS SKIP FLAG PREVIOUSLY SET? LA,U A0,'*' YES, INDICATE SKIPPED LINES E$CHAR . EDIT A SPACE OR ASTERISK LR R2,WPL GET # OF WORDS PER LINE JGD R2,$+1 LESS 1 FOR JGD . . EDIT PROPER NUMBER OF WORDS PER LINE. THE LAST LINE MAY BE A PARTIAL LINE. . WORDLOOP E$OCTF 12,0,*X4 EDIT VALUE AND POINT TO NEXT WORD E$SKIP 2 2 SPACES BETWEEN WORDS LA,U A0,0,X4 GET CURRENT WORD INDEX ANA A0,BUFAD MAKE IT RELATIVE TO 0 TLE A0,NWRDS ALL DONE YET? . IF SO, MAY BE PARTIAL LINE JGD R2,WORDLOOP NO, GO BACK AND FINISH THIS LINE P$RINT POUT DONE WITH THIS LINE: PRINT IT . . SAVE LAST WORD OF THIS LINE FOR SKIP COMPARISON, AND SET FOR NEXT LINE. . NEXTLINE LA,U A0,0,X4 GET CURRENT WORD INDEX ANA,U A0,1 BACK UP TO LAST WORD PRINTED LA A0,0,A0 PICK UP THE LAST WORD PRINTED SA A0,LASTWD AND STORE IT FOR SKIP TEST JGD R4,LINELOOP MORE LINES? DO THEM J 0,X10 ALL DONE: RETURN TO CALLER OFF SNAPSUB OFF SNAPOK END @ELT,RI TPF$.SNAP,,,154343141337 )@@@Q@@@@@@@S FOLLOWN PCT NTLY I CURRE ITEMSOF DAD SNAP @@@@@@@@W@@@SEC AA@@@@ )@]0KE@@@@@@)@@@]"S@@@@@ @@@@]& ITEM: ANULE HIS GRE IN TGRANULFIRST @]C@@#AB@@@@ )@@KM"K@J@Y#3@[9)@JG@B)@/,)@^R[^@@@[C8C@@@[@@@@@C@@@@S/K@@@G>8)@@[/K@@@**?@@@@AC@@@@ )@])M"K@\G@@Y#2@D8JC@R)@/K@@@T*0@@@@/K@@@**)@@@@/K@@@*0@C@@@=8)@@]^#0@@]C=)@@@AD@@@@ )@^0K+=@V2@L9@E/)[Y@O)#@@@@@@@Q;@@@@&;@@W@/K@@@-C=)@@@/K@@@@/,0@@@C8@@@@C@S@@@AE@@@@ )@A0K"K#JC[+=@32@WYK^JG@B&@@@@[@@@@@C@@@@T'=@@@@0@@@@G'=@@@@C8@@@@^Z0@@^[@@@@#AF@@@@ )@C0K%K[\G@B)/)[YS@#0YS@@@@@@@C@@@@U/K@@@1>8)@@^^#0@@]C=)@@@/,)@^R[^@@@[C8@@@@AG@@@@ )@E0M"S@#3@[8JC@R&@@/B)@/B)@@5/K@@[&*)C@[P^#0@@]C=)@@@/,)@^R[^@@@[C8C@@W[@@@@@AH@@@@ )@H@M"@/B&@#3@@YS@J[9@]@C=)@@@/,)@^R[^@@@[C8C@@8[@@@@@C@@@@V/K@@@">8)@@C/#K@[&AI@@@@ )@JKK"S@@/B=@N0YS@JG@@@@@@@@@@[@@@@@C@@@@W/K@@[&*)@@@@/K@@[&0@C@@8=8)@@K^#0@@]AJ@@@@ )@LKK%K^\G@B=@F0[9@C/) @@@@@@@/K@@@@/,0@@@C8C@@8C@S@@8/K@@[W*0@@@@[^@@@[C8@@@@AK@@@@ )@NKK"K@\[9@]/0@B)/0@@@@@@@@@@G8@@@[CC@@@@/K@@[&0@C@@8^#0@@]C=)@@@/,)@^RC=)@@@AL@@@@ )@PKM"S@JC@R)/)AB=@30@@@Q;C@@8&;@@W[/K@@[-[W@@@^G8@@@[CW@@@^/K@@[D(0@@@@[C@@@@AM@@@@ )@R)M"K##2@S(@G/)BB=[#0@>8)@@)/K@@[I'=@@@@0@@@@G'=@@@@C8@@@@[W@@@^C8@@@][@@@@#AN@@@@ )@T0K"#3@[9@O/0@YS@#3@[9@]@@@@*0@@@@[^@@@[C8C@@W[@@@@@C@@@@Y(4@@@@C@@@@X/K@@]2AO@@@@ )@V0M"@/@YK]JC[R)/)[@@@@C=)@@@/,)@^R/K@@@@/,0@@@C@S@@WC8C@@W/K@@]20@C@@W/K@@['AP@@@@ )@Y@M"S@J[9@^/B=@N0B=[K@C8@GTB(4@@@@C8@DAD/K@@]2**@@@@/K@@]V()@@@@/K@@[0^#0@@]AQ@@@@ )@)KK"S@ G@[9@Q/)GYKA\[9@O@@@@*4@@@@/K@@]2/,)@@@ @@@@@'=@@@@C@G@@@C8@@@F[^@@@^AR@@@@ )@+KK"@O)IYKB>G@B=]@/)L@@@@@@@/,0@@@C@@@@E/,0@@@C8@@@G/,0@@@C/@@@@[@)@@E/K@@]RAS@@@@ )@=KK%S@#2@?(@=JC]7)/)[@@@@@@@C=)@@@/,)@^R'=@@@@C@G@@@C8@@@@'=@@@@C@G@@@C8@@@ZAT@@@@ )@&KM"S@J@B=@32@S(@G/)B@0@@@@G'=@@@@C8@@@@ W@@@^[@@@@#Q;C@@W&;@@W]/K@@]A^#0@@]AU@@@@ )@*)K"K^J[9@]/0@B)/)A@@@@@@@@@G8@@@[CW@@@^/K@@]?0@C@@W^#0@@]C=)@@@/,)@^R'=@@@@AV@@@@ )@%)K"K#J@YK[#2[G(@&/)O@@@@@@@'=@@@@C8@@@@[0@@@[C8@@@R*4@@@@C8@@@ /K@@]Z[W@@@^AW@@@@ )@?)M"S@JG@B=[V2[O@@@@@@LNTH =& POAOX = = & TESTS /K@@@@'=@@@@*@@@@]C@@@@ZAX@@@@ )@,0M)@(@W/)JE#2[@@@@@@@/,0@@@C8@@]6/,0@@@C/@@@@ & KCNT =& BRORT = & SAY@@@@ )@1@I"K@JC^R=]32@(9@,/)QYK @@@@@@@@@C*@@@@/,0@@@/,0@@@C)@@@@/,0@@@/,0@@@C*@@@@AZ@@@@ )@20I"KC\C $=@#2[ 9@?/)SYKC)@@@@@@@@/,0@@@C@@@@@/,0@@@/,0@@@C0@@@@/,0@@@/,0@@@BA@@@@ )@4)K%KG<2@!9)@/0@EKHJG@]=#S@@C8@@@@[^@@@[C8@@@@[@@@@@C@@@@)'=@@@@C@G@@@C8@@@@BB@@@@ )@6)K"S@J[9@]/0@YS@JG@]=#<3@@@[^@@@[C8@@@@[@@@@@C@@@@-^#0@@]C=)@@@/,)@^R[C@@@[BC@@@@ )@8)K$&@#0YK@\G@B&@#3@@(@'@@@@C8@@@@[@@@@@C@@@@+^#0@@]C=)@@@/,)@^R[C@@@[C8@@@XBD@@@@ )@')K"S@#3@[8JC@R&@#2[-8@@@@@@/K@@^H(@@@@@^#0@@]C=)@@@/,)@^R[C@@@[C8@@@X[^@@@[BE@@@@ )@/)K"S@JG@]=#33@@YS@J[9@]@@@@C=)@@@/,)@^R[C@@@[C8@@@M[^@@@[C8@@@@[@@@@@C@@@@^#0@@]C=)@@@BH@@@@ )[])K"#2@ 9)@O0@B=[V2@^@@@@@@@:8@@@_C)@@@@'=@@@@C@G@@@C8@@@Z^#0@@]C=)@@@/,)@^RBI@@@@ )[^)E"KK>CC)([A/)=@@@@@@)@^0^@@@@@@@WORDS ALL & '=@@@@C8K@@@&;@)@@C8@@@@/K@@@@BJ@@@@ )@ K]@)[ 0I%KBJC#2&@@/)>B=^0@@/,0@@@C/@@@[/,0@@@C8K@@AC8@@@@/,0@@@C/@@@@= & BK@@@@ )[B)M"S@#2]W(@2JC]7&@@@@/@U@@@+8@B__CC@@@['=@@@@C@G@@@C8@@@@/,0@@@C8K@@AC^@@@[BL@@@@ )[D0M"S@JG@B&@@/@@@@@@@@C@I@@@R#)@@^[@K@[[H8K@@[/K@@ @?8K@@^O @@@[R[@@@&[CK@@[BM@@@@ )[G@K$)/]=[32@/()@/)KYS@@@@@@@CC@@@[/,0@@@C8@@@N/,0@@@C/@@@@/K@@ @/K@@^33@I)@[BN@@@@ )[I@K"KC\C -9@,O)MB=[S@@@@@@@@/KE@@@'=@@@@C@G@@@C8@@@@/,0@@@C@^@@@/,0@@@/,0@@@BO@@@@ )[K@M"S@#2@!9)@@JG@@@@@@[@)@@RC8)@@C*@@@@NC8)@@ ;G@@@=CC@@@['=@@@@*@@@@NC@@@@ZBP@@@@ )[MKO)@Y@/B&@@@@@@N@K@@R/@@@ VC@@@[^/K@@ VC9)@@@[@@@[^H8@@@[G8@@@[*@@@@HW@@@@IBQ@@@@ )[O0M"S@@/B)JG@B)O)I@@@@C/@@@@/K@@ 7O[@@@RC9)@@[/K@@ V/K@@ S3@H)@@R#K@@^C@@@@QBR@@@@ )[R@M"KB)JG@[9[IJCD)@@@@/,0@@@C/@@@[/,0@@@C8K@@^H^@@@[C8^@@@C9)@@@N@)@@M/,0@@@BS@@@@ )[TKM)YKOJG@B)#2]W@@@@@@/,0@@@C8K@@GC@^)@@8K)@ :N@)@@R/,0@@@C8@@@**@@@[]C8@@@ BT@@@@ )[V)M$=^0/0@YS@J@(@=JC]0'=@@@@C@G@@@C8@@@@8K)@ :?C@@@[H^@@@[C8^@@@/,0@@@C/@@@]BU@@@@ )[X0G)YS@J@@)@A@A@@@@@@@MI0 LI1 LI0 /KE@@@8L@@ K[@@@@QC@G@@@H8@@@[C8^@@@BV@@@@ )@A0Q@@@@@@@INVALUBRKPNTBRKTBLTRANS POLISHSSTAB @[@@@@GTB DAD MI2 MI1 BW@@@@ )@D)]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[@@@BX@@@@ @EOF P )@@G@@@@ @@]@@B@@(@[T@@]@[-@@@[@@@@@@@E@@$@@@@ .FLAG3 MRFLGS FLAG4 AA )@@G@@ LI1 DIRLNK$ DIRECERR RDPKT MSCON$ EABT$ AB )@@G@@ MI2 FLAG5 PRINT$ PCTDADN PCTDAD EDPACKAC )@@G@@ EDIT$ EMSG$ EDECV$ POUT FREIM CSF$ AD )@@G@@ PR990 EMSGR$ EOCTV$ BRKCNT POUT2 SSTAB AE )@@G@@ SSLEN POLISH TRANS BRKTBL BRKPNT INVALUAF )@@G@@ POL410 INSEG IN2020 LOAD$ ECOPY$ ESKIP$AG )@@G@@ EOCTF$ ECHAR$ SN000 @@[@@@@@@@@@SN900 @@[@@@AH )@@G@@@@@@#@^@)^@)^@)^@)^@)^@)^@)^[F9\I[4HD\H0?^@),+94S8^@)^@)AI )@@^@@^@)^@)^@)^@)^@)^@)^@)^[< AJ @ELT,SI TPF$.SORTDEF,,,120024072623,024 . THIS IS A MASM DEFINITION MODE ASSEMBLY VERSION OF THE . UNIVAC SORT PACKAGE PROC ELEMENT (ELEMENT 'PROCS'). . IN ADDITION TO MAKING IT A DEFINITION MODE ASSEMBLY, WE HAVE . ALSO FOUND IT NECESSARY TO FIX SOME OF THE PROCS SO THAT THEY . WORK CORRECTLY UNDER MASM. . UNIVAC HAS SUPPOSEDLY DONE THIS IN SORT LEVEL 11, BUT WE . CAN'T WAIT FOR THAT, CAN WE? . DEF LEVEL 0,1,0 P PROC R$INFO* NAME . LMJ 11,RINFO$ . END P PROC . R$FILE* NAME. REVISION 10 , 1108 SORT FEB 11,74 F1 FORM 6,30 . F2 FORM 6,6,6,6,12 . F3 FORM 6,12,18 . F4 FORM 6,6,24 . F5 FORM 6,6,18,6 . F6 FORM 6,6,6,18 . G1 FORM 6,66 . G2 FORM 72 . PL FUNC LJ* NAME 0 I(0) EQU +(G2 PL(1)) DO 12 , ; DO (I(0)**(G1 0,-0))=I(0) ,; I(0) EQU (I(0)*/6)+5. END +(G2 I(0)). Q* PROC . K(1) EQU 0 . GO LOOP . A1A* NAME . 'RSZ',CHS/REC,CHS/LINK(VAR) DO P(K(1),2)=0 ,A(0) EQU 0100. F1 1,P(K(1),2)//6 . DO P(K(1),3)>0 , F1 2,P(K(1),3)//6 . GO LOOP . A1B* NAME . 'RSZW',WDS/REC,WDS/LINK(VAR) DO P(K(1),2)=0 ,A(0) EQU 0100. F1 1, P(K(1),2) . DO P(K(1),3)>0 , F1 2, P(K(1),3) . GO LOOP . A2A* NAME . 'KEY',CHPOS,CHS,'TYPE','ORDER',KEYNO Z(K(1)) EQU 6*P(K(1),2)-(P(K(1),2)-1)/6*36-5. F2 3,P(K(1),4),P(K(1),5),Z(K(1)),P(K(1),6) . F3 077,P(K(1),2)//6-1,6*P(K(1),3) . GO LOOP . A2B* NAME . 'KEYW',WDPOS,BTPOS,BITS,'TYPE','ORDER',KEYNO Z(K(1)) EQU 36-P(K(1),3) . F2 3,P(K(1),5),P(K(1),6),Z(K(1)),P(K(1),7) . F3 077,P(K(1),2)-1,P(K(1),4) . GO LOOP . A4* NAME . 'EPOC',ADDRESS F1 040,P(K(1),2) . GO LOOP . A4A* NAME. 'FPOC',ADDRESS F1 042,P(K(1),2). GO LOOP. A4B* NAME. 'LPOC',ADDRESS F1 043,P(K(1),2). GO LOOP. A4C* NAME. 'FINAL',ADDRESS F1 044,P(K(1),2). GO LOOP. A5* NAME . 'COMP',ADDRESS F1 041,P(K(1),2) . GO LOOP . A6* NAME . 'CORE',NO OF WDS F1 020,P(K(1),2) . F1 077,C(K(1),1) . GO LOOP . A7* NAME . 'DRUM',TYPE,NO OF WDS,LOC.CTR D(K(1)) EQU 0 . DO P(K(1),2)=432 ,D(K(1)) EQU 1 . DO P(K(1),2)=880 ,D(K(1)) EQU 2 . DO D(K(1))=0 ,A(0) EQU 0100. F4 021,D(K(1)),P(K(1),3) . F4 077,,D(K(1),1) . GO LOOP . A8* NAME . 'TAPES','TYPE','LOGUNIT', ,'LOGUNIT' 1CH/LOG T(K(1)) EQU 0 . DO P(K(1),2)='2A' ,T(K(1)) EQU 1 . DO P(K(1),2)='3A' ,T(K(1)) EQU 2 . DO P(K(1),2)='3C' ,T(K(1)) EQU 3 . DO P(K(1),2)='4C' ,T(K(1)) EQU 4 . DO P(K(1),2)='6C' ,T(K(1)) EQU 5 . DO P(K(1),2)='8C' ,T(K(1)) EQU 6 . DO T(K(1))=0 ,A(0) EQU 0100. I1 DO P(K(1))-2 , F5 022,T(K(1)),,P(K(1),I1+2) . GO LOOP . A10A* NAME. 'PARTA',OUTPUT LABEL PREFIX,RECORDS/CYCLE,REELS/CYCLE,OBS F1 031,0. DO P(K(1),5)>0 , F3 013,,P(K(1),5). GO A9A. A9* NAME. 'SMRG',OUTPUT LABEL PREFIX,RECORDS/CYCLE,REELS/CYCLE F1 030,0. A9A* NAME. DO P(K(1),2)=0 ,A(0) EQU 080. F4 012,,P(K(1),2). DO P(K(1),3)>0 , F1 010,P(K(1),3). DO P(K(1),4)>0 , F1 011,P(K(1),4). GO LOOP. A10B* NAME. 'PARTB',OLPREFIX,EXFILOUT(12CHMAX),EXFIN1(6CHSORTLABEL),EXFIN2,. F1 032,0. DO P(K(1),2)=0 ,A(0) EQU 080. F4 012,,P(K(1),2). DO P(K(1))-5<0 ,A(0) EQU 080. F3 015,,(+ LJ(P(K(1),3))) I2 DO P(K(1))-3 , F3 014,,(+ P(K(1),I2+3)) . GO LOOP. A10C* NAME. 'PARTC',EXFIN1(6CHSORTLABEL),EXFIN2,.... F1 033,0. DO P(K(1))-3<0 ,A(0) EQU 080. I3 DO P(K(1))-1 , F3 014,,(+ P(K(1),I3+1)) . GO LOOP. A11A* NAME. 'REDOA',CYN,FRN,TRN F1 034,0. F1 050,P(K(1),3). F1 051,P(K(1),4). F1 052,P(K(1),2). GO LOOP. A11B* NAME. 'REDOB',TAPE LABEL,REEL NO. F1 035,0. F3 053,,ID(K(1)). GO LOOP. A12A* NAME. 'CONTA',CYN,FRN F1 036,0. F1 050,P(K(1),3). F1 052,P(K(1),2). GO LOOP. A12B* NAME. 'CONTB',TAPE LABEL,REEL NO. F1 037,0. F3 053,,ID(K(1)). GO LOOP. A12C* NAME. 'CONTC',ADDR OF REPOSITIONING TABLE F1 047,0. F3 054,,P(K(1),2). GO LOOP. A16* NAME . 'COPY',NXPLIST F3 070,,P(K(1),2) . GO LOOP . A17* NAME . 'PAD', N WDS DO P(K(1),2) , F1 072,0. GO LOOP . A18* NAME. 'CHECK','D','T','F' C(K) EQU 0. J DO P(K(1))-1 , DO P(K(1),J+1)='D' ,C(K) EQU C(K)++'D'*/24 . J DO P(K(1))-1 , DO P(K(1),J+1)='T' ,C(K) EQU C(K)++'T'*/18 . J DO P(K(1))-1 , DO P(K(1),J+1)='F' ,C(K) EQU C(K)++'F'*/12 . DO C(K)>0 , F1 060,C(K). GO LOOP. A19* NAME. 'DRUMA',TYPE,ABS SA,NUM WDS D(K(1)) EQU 0. DO P(K(1),2)=432 ,D(K(1)) EQU 1. DO P(K(1),2)=880 ,D(K(1)) EQU 2. DO D(K(1))=0 ,A(0) EQU 080. F4 021,D(K(1)),P(K(1),4). F4 077,,P(K(1),3). GO LOOP. A20* NAME . 'FILES',EXFN1(UP TO 12 CHS),EXFN2,...... N DO P(K(1))-1 , F3 023,,(+ LJ(P(K(1),N+1))) . GO LOOP. A21* NAME . F1 063,0 . GO LOOP . A22* NAME . F1 065,0 . GO LOOP . A41* NAME . RTPT$*** F1 016,0 . RTST$*** F1 016,0 . RTMT$*** F1 016,0 . RLBLK$*** F1 016,0 . RTMIN$*** F1 016,0 . RTMAX$*** F1 016,0 . GO LOOP. A45* NAME. RFSTR$*** F1 017,0 . RDRMT$*** F1 017,0 . F1 017,0 . GO LOOP. A3A* NAME . 'SEQA',C1,C2 TO C128 F1 07,TA(K(1)). GO LOOP . A3B* NAME . 'SEQB' F1 07,TB(K(1)). GO LOOP. A3G* NAME . F1 04,TG(K(1)) . GO LOOP. A3F* NAME. F1 04,TFF(K(1)). GO LOOP. B1A* NAME . ASCII WITH 'UPTO' 'ALL' TA(K(1)) EQU $ . EE(1) EQU 0 . EE(2) EQU 0 . EE(3) EQU 0 . EE(4) EQU 0 . JJ(1) EQU 1 . SEQM* NAME . JJ(1) EQU JJ(1)+1 . DO JJ(1)>129 , GO LOOPCK . DO P(K(1),JJ(1))='ALL' , GO LOOPCK . DO P(K(1),JJ(1))='UPTO' , GO SEQM6 . DO P(K(1),JJ(1))>95 , GO SEQM4 . DO P(K(1),JJ(1))>63 , GO SEQM3 . DO P(K(1),JJ(1))>31 , GO SEQM2 . DO 1*/P(K(1),JJ(1))**EE(1)>0 ,A(0) EQU 0100. F1 0,P(K(1),JJ(1)) . EE(1) EQU EE(1)++1*/P(K(1),JJ(1)) . GO SEQM . SEQM2* NAME . DO 1*/(P(K(1),JJ(1))-32)**EE(2)>0 ,A(0) EQU 0100. F1 0,P(K(1),JJ(1)) . EE(2) EQU EE(2)++1*/(P(K(1),JJ(1))-32) . GO SEQM . SEQM3* NAME . DO 1*/(P(K(1),JJ(1))-64)**EE(3)>0 ,A(0) EQU 0100. F1 0,P(K(1),JJ(1)) . EE(3) EQU EE(3)++1*/(P(K(1),JJ(1))-64) . GO SEQM . SEQM4* NAME . DO 1*/(P(K(1),JJ(1))-96)**EE(4)>0 ,A(0) EQU 0100. F1 0,P(K(1),JJ(1)) . EE(4) EQU EE(4)++1*/(P(K(1),JJ(1))-96) . GO SEQM. SEQM6* NAME . JJ(2) EQU JJ(1)-1 . JJ(3) EQU JJ(1)+1 . BA(1) EQU P(K(1),JJ(2)) . AF(1) EQU P(K(1),JJ(3)) . DO BA(1)='UPTO' ,A(0) EQU 0100. DO BA(1)=AT(1) ,A(0) EQU 0100. DO BA(1)>AT(1) ,A(0) EQU 0100. DO AF(1)='ALL' ,AF(1) EQU 0177 . SEQM7* NAME . BA(1) EQU BA(1)+1 . DO BA(1)=AF(1) , GO SEQM . DO BA(1)>AF(1) , GO SEQM . DO BA(1)>95 , GO SEQMX . DO BA(1)>63 , GO SEQMY . DO BA(1)>31 , GO SEQMZ . DO 1*/BA(1)**EE(1)>0 ,A(0) EQU 0100. F1 0,BA(1) . EE(1) EQU EE(1)++1*/BA(1) . GO SEQM7 . SEQMZ* NAME . DO 1*/(BA(1)-32)**EE(2)>0 ,A(0) EQU 0100. F1 0,BA(1) . EE(2) EQU EE(2)++1*/(BA(1)-32) . GO SEQM7 . SEQMY* NAME . DO 1*/(BA(1)-64)**EE(3)>0 ,A(0) EQU 0100. F1 0,BA(1) . EE(3) EQU EE(3)++1*/(BA(1)-64) . GO SEQM7 . SEQMX* NAME . DO 1*/(BA(1)-96)**EE(4)>0 ,A(0) EQU 0100. F1 0,BA(1) . EE(4) EQU EE(4)++1*/(BA(1)-96) . GO SEQM7 . LOOPCK* NAME . BMPA DO 32 , DO 1*/(BMPA-1)**EE(1)=0 , F1 0,+BMPA-1 . BMPB DO 32 , DO 1*/(BMPB-1)**EE(2)=0 , F1 0,+BMPB+31 . BMPC DO 32 , DO 1*/(BMPC-1)**EE(3)=0 , F1 0,+BMPC+63 . BMPD DO 32 , DO 1*/(BMPD-1)**EE(4)=0 , F1 0,+BMPD+95 . GO LOOP2 . B1B* NAME . ASCII ALPHA NUMERIC TB(K(1)) EQU $ . AB(1) EQU 0101 . AB(2) EQU 0141 . AB(3) EQU 057 . AB(4) EQU -0 . ASCB* NAME . DO AB(1)=0133 , GO ASCB1 . F1 0,AB(1) . F1 0,AB(2) . AB(1) EQU AB(1)+1 . AB(2) EQU AB(2)+1 . GO ASCB . ASCB1* NAME . ASCB2 DO 10 , F1 0,+AB(3)+ASCB2 . ASCB2A DO 1 , F1 0,040 . AB(1) EQU AB(1)-1 . AB(2) EQU AB(2)-1 . ASCB3 DO 31 , F1 0,+AB(4)+ASCB3 . ASCB4 DO 15 , F1 0,+ASCB4+040 . ASCB5 DO 7 , F1 0,+AB(3)+ASCB5+012 . ASCB6 DO 6 , F1 0,+AB(1)+ASCB6 . ASCB7 DO 5 , F1 0,+AB(2)+ASCB7 . GO LOOP2 . B1G* NAME . FIELD DATA WITH 'UPTO' 'ALL' TG(K(1)) EQU $ . EA(1) EQU 0 . EA(2) EQU 0 . JA(1) EQU 1 . SEQCF* NAME . JA(1) EQU JA(1)+1 . DO JA(1)>65 , GO LOOPC . DO P(K(1),JA(1))='ALL' , GO LOOPC . DO P(K(1),JA(1))='UPTO' , GO SEQC3 . DO P(K(1),JA(1))>31 , GO SEQC1 . DO 1*/P(K(1),JA(1))**EA(1)>0 ,A(0) EQU 0100 . F1 0,P(K(1),JA(1)). EA(1) EQU EA(1)++1*/P(K(1),JA(1)) . GO SEQCF . SEQC1* NAME . DO 1*/(P(K(1),JA(1))-32)**EA(2)>0 ,A(0) EQU 0100. F1 0,P(K(1),JA(1)) . EA(2) EQU EA(2)++1*/(P(K(1),JA(1))-32) . GO SEQCF . SEQC3* NAME. JA(2) EQU JA(1)-1 . JA(3) EQU JA(1)+1 . BT(1) EQU P(K(1),JA(2)) . AT(1) EQU P(K(1),JA(3)) . DO BT(1)='UPTO' ,A(0) EQU 0100. DO BT(1)=AT(1) ,A(0) EQU 0100. DO BT(1)>AT(1) ,A(0) EQU 0100. DO AT(1)='ALL' ,AT(1) EQU 077 . SEQC4* NAME . BT(1) EQU BT(1)+1 . DO BT(1)=AT(1) , GO SEQCF. DO BT(1)>AT(1) , GO SEQCF. DO BT(1)>31 , GO SEQC5. DO 1*/BT(1)**EA(1)>0 ,A(0) EQU 0100. F1 0,BT(1) . EA(1) EQU EA(1)++1*/BT(1) . GO SEQC4 . SEQC5* NAME . DO 1*/(BT(1)-32)**EA(2)>0 ,A(0) EQU 0100. F1 0,BT(1) . EA(2) EQU EA(2)++1*/(BT(1)-32) . GO SEQC4 . LOOPC* NAME . BMPE DO 32 , DO 1*/(BMPE-1)**EA(1)=0 , F1 0,+BMPE-1 . BMPF DO 32 , DO 1*/(BMPF-1)**EA(2)=0 , F1 0,+BMPF+31 . GO LOOP2 . B1F* NAME . FIELD DATA ALPHA NUMERIC TFF(K(1)) EQU $ . FLDA DO 26 , F1 0,+FLDA+05 . FLDB DO 10 , F1 0,+FLDB+057 . F1 0,05 . F1 0,00 . FLDD DO 4 , F1 0,+FLDD . FLDE DO 16 , F1 0,+FLDE+037 . FLDF DO 6 , F1 0,+FLDF+071 . GO LOOP2 . B2* NAME. 'REDOB' OR 'CONTB' .GENERATE LABEL-REEL NO. PACKET ID(K(1)) + P(K(1),2). + P(K(1),3). GO LOOP2. AEND* NAME . F3 071,,PARA . K(1) EQU 0 . LOOP2* NAME . K(1) EQU K(1)+1 . DO K(1)=P , GO BEXIT . DO P(K(1),1)='SEQA' , GO B1A . DO P(K(1),1)='SEQB' , GO B1B . DO P(K(1),1)='SEQ' , GO B1G. DO P(K(1),1)='SEQF' , GO B1F . DO P(K(1),1)='CONTB' , GO B2. DO P(K(1),1)='REDOB' , GO B2. GO LOOP2 . LOOP* NAME K(1) EQU K(1)+1 . DO K(1)=P , GO AEND . DO P(K(1),1)='RSZ' , GO A1A . DO P(K(1),1)='VRSZ' , GO A1A . DO P(K(1),1)='RSZW' , GO A1B . DO P(K(1),1)='VRSZW' , GO A1B . DO P(K(1),1)='KEY' , GO A2A . DO P(K(1),1)='KEYW' , GO A2B . DO P(K(1),1)='SEQA' , GO A3A . DO P(K(1),1)= 'SEQB' , GO A3B . DO P(K(1),1)='SEQF' , GO A3F . DO P(K(1),1)='SEQ' , GO A3G. DO P(K(1),1)='DROC' , GO A4. WAS 'EPOC' DO P(K(1),1)='FPOC' , GO A4A. DO P(K(1),1)='LPOC' , GO A4B. DO P(K(1),1)='FINAL' , GO A4C. DO P(K(1),1)='COMP' , GO A5 . DO P(K(1),1)='CORE' , GO A6 . DO P(K(1),1)='DRUM' , GO A7 . DO P(K(1),1)='TAPES' , GO A8 . DO P(K(1),1)='DELCON' , GO A21. DO P(K(1),1)='DELLOG' , GO A22. DO P(K(1),1)='NOTAPE' , GO A41. DO P(K(1),1)='NOMASS' , GO A45. DO P(K(1),1)='SMRG' , GO A9. DO P(K(1),1)='PARTA' , GO A10A. DO P(K(1),1)='PARTB' , GO A10B. DO P(K(1),1)='PARTC' , GO A10C. DO P(K(1),1)='REDOA' , GO A11A. DO P(K(1),1)='REDOB' , GO A11B. DO P(K(1),1)='CONTA' , GO A12A. DO P(K(1),1)='CONTB' , GO A12B. DO P(K(1),1)='CONTC' , GO A12C. DO P(K(1),1)='COPY' , GO A16 . DO P(K(1),1)='PAD' , GO A17 . DO P(K(1),1)='CHECK' , GO A18. DO P(K(1),1)='DRUMA' , GO A19. DO P(K(1),1)='FILES' , GO A20. GO LOOP . BEXIT* NAME . K1 DO P-1 , DO P(K1,1)='CORE' ,C(K1,1) RES P(K1,2) . DAREA* PROC . INFO 3 31 $(31) D*(K2,1) RES P(K2,3) . $(0) END . K2 DO P-1 , DO P(K2,1)='DRUM' , DAREA END . PARA EQU $ . * F3 0,,$ . Q . END . R$REGS* PROC B0* EQU 0 . B1* EQU 1 . B2* EQU 2 . B3* EQU 3 . B4* EQU 4 . B5* EQU 5 . B6* EQU 6 . B7* EQU 7 . B8* EQU 8 . B9* EQU 9 . B10* EQU 10 . B11* EQU 11 . B12* EQU 12 . B13* EQU 13 . B14* EQU 14 . B15* EQU 15 . A0* EQU 12 . A1* EQU 13 . A2* EQU 14 . A3* EQU 15 . A4* EQU 16 . A5* EQU 17 . A6* EQU 18 . A7* EQU 19 . A8* EQU 20 . A9* EQU 21 . A10* EQU 22 . A11* EQU 23 . A12* EQU 24 . A13* EQU 25 . A14* EQU 26 . A15* EQU 27 . R0* EQU 64 . R1* EQU 65 . R2* EQU 66 . R3* EQU 67 . U* EQU 14. END . P PROC R$OB* NAME . DO P(1)=1 , L 15,P(1,1) . SLJ ROB$ . END . P PROC R$P* NAME DO P(1)>0 , L 15,P(1,1) . DO P(1)=2 , L 12,P(1,2) . SLJ *3,15 . END . P PROC R$EB* NAME DO P(1)=1 , L 15,P(1,1) . J RENDB$. END P PROC R$ES* NAME DO P(1)=1 , L 15,P(1,1) . SLJ *5,15 . END . P PROC R$R* NAME DO P(1)=1 , L 15,P(1,1),,14 . J RRCYC$. END . P PROC R$SVL1* NAME RSVL1$ . DO P(1)>0 , L 15,P(1,1),,14 . DO P(1)=2 , L 12,P(1,2) . SLJ RSVL1$ . END . P PROC . R$SVL2* NAME RSVL2$ . DO P(1)>0 , L 15,P(1,1),,14 . DO P(1)=2 , L 12,P(1,2) . SLJ RSVL2$ . END . P PROC . .USED ONCE PER SORT,AT BEGINNING R$OPN* NAME . P(1,1) IS NAME OF PARA LIST L,14 15,P(1,1) . LMJ 11,ROPN$ . END . P PROC . .USED ONCE PER ITEM TO PUT ITEM R$REL* NAME . P(1,1) IS LNGTH,LOC OF ITEM INPUT TO SORT DO P(1)=1 , L 12,P(1,1) . LMJ 11,RREL$ . END . P PROC . .USED ONCE PER SORT WHEN NO MORE ITEMS TO PUT R$SORT* NAME . LMJ 11,RSORT$ . END . P PROC . .USED ONCE PER ITEM TO GET ITEM R$RET* NAME . P(1,1) IS LOC FOR NO MORE ITEMS LMJ 11,RRET$ . + 0,P(1,1) . END . P PROC R$FIND* NAME RFIND$ . L,14 13,P(1,1) . LMJ 11,RFIND$ . J P(1,2) . END . P PROC . R$FNDZ* NAME RFNDZ$ . L,14 13,P(1,1) . LMJ 11,RFNDZ$ . J P(1,2) . END. P PROC. R$DRED* NAME. DO P(1)>0 , L,14 15,P(1,1). L 14,13,15. A 14,RRECS$. S 14,13,15. END. P PROC. R$ENCY* NAME. LMJ 11,RENCY$. CHGED APRIL 8, 66 END. P PROC. R$DLT* NAME. J 1,11. END. P PROC. R$NDLT* NAME. J ,11. END. R$A0* PROC. ADDED APRIL 8, 66 J ,11. END. R$A1* PROC. ADDED APRIL 8, 66 J 1,11. END. R$AE* PROC. ADDED APRIL 8, 66 J 2,11. END. P PROC . ADDED JAN 6,1974 R$NCDS* NAME . ROPN$** S 01,RNEW1$ . LMJ 01,RSTRG$ . 'ROPN$ ' . J RBPN$ . END. END @ELT,SI TPF$.SORTER,,,135555072623,023 . @MFD SORT INTERFACE ROUTINES . . . M.I. SEC 0 WORDS 18-19, WHICH CONTAIN THE DATE/TIME OF LAST REFERENCE . AND OF CATALOGUING, ARE MODIFIED SO THAT THEY ARE MORE EASILY SORTED. . . ------------------------------------------------------------------- . : YEAR : MON : DAY : TIME : . ------------------------------------------------------------------- . : : . :<-- THIS PORTION IS SORTED -->: . . TWO EXTRA WORDS ARE SORTED ALONG WITH LI0/MI0/MI1, TO SAVE FLAGS, ETC. . . ------------------------------------------------------------------- . : : BAK : RDISC : TOTAL SIZE : . ------------------------------------------------------------------- . : FLAGS : . ------------------------------------------------------------------- . . 'BAK' IS BACKED-UP FLAG IN A13, AND 'RDISC' . IS REMOVABLE-DISC FLAG IN A14. TOTAL SIZE IS NUMBER ACCUMULATED . IN A15 BY 'CHECK' ROUTINE. . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMETERS EQUFS . DEFINE TAGS ON SORTOK NREC + NFILES/2 NUMBER OF RECORDS NCHAR + RECCHAR CHARACTERS PER RECORD . $(1). CALL SORTF TO ASSIGN SORT FILES . OPNSRT* SR R15,SORTED MARK SORT-SEG-LOADED LA,U A0,NFILES GET NUMBER OF FILES TZ ZPT PRIVILEGED AND DOING EVERYTHING? SA A0,NREC YES, BETTER INCREASE NREC DO SRTDBG , P$RINT (0101,('SORTF ')) LMJ X11,SORTF ASSIGN SORT FILES + NREC NUMBER OF RECORDS + NCHAR NUMBER OF CHAR PER RECORD + 0 WB NOSORTF* R$OPN SORTBL OPEN SORT, RETURN TO FPOC . DON'T NEED PARAMETER CARD PROCESSING, SO REPLACE KPARCD WITH: . ROPN$* LMJ X1,RSTRG$ 'ROPN$ ' J RBPN$ RTMIN$* . RTMAX$* . RTPT$* . RTST$* . RTMT$* . RLBLK$* . . . RELEASE RECORD TO SORT . GOTREC* . SA BACKEDUP,SAVEBAK SAVE RDISC AND BACKED-UP FLAGS SA RDISC,SAVERDISC DO SRTDBG , P$RINT (0101,('RREL$ ')) L,U A0,RECSTART PASS THIS FILE TO SORT R$REL . J CHK000 GET NEXT FILE (SEG IS LOADED) . . DIRSEC EOF HAS OCCURRED; DO THE SORT . DOSORT* . DO SRTDBG , P$RINT (0101,('RSORT$')) R$SORT . DO THE SORT, RETURN TO LPOC LPOC* . DO SRTDBG , P$RINT (0101,('LPOC ')) . . GET NEXT RECORD FROM SORT, AND JUMP TO PRINT ROUTINE WITH IT . SRTNXT* . DO SRTDBG , P$RINT (0101,('RRET$ ')) R$RET SRTEOF . GET NEXT RECORD - IF EOF, GO TO SRTEOF LX,U X8,,A0 POINT TO LI0/MI0/MI1 ETC. LA BACKEDUP,SAVEBAK RETRIEVE RDISC, BAK FLAGS LA RDISC,SAVERDISC LA FILESIZE,SAVESIZE RETRIEVE SIZE J PR000 JUMP TO PRINT ROUTINE (SEG IS LOADED) . . EOF STATUS RECEIVED FROM SORT . SRTEOF TNZ SFMODE2 SINGLE-FILE MODE? J MFD600 NO, RETURN TO MAIN SEG J QF900 YES, RETURN FOR ANOTHER FILE OFF SORTOK END @ELT,RI TPF$.SORTER,,,154350141337 )@@@C#1)C@@@)@#0]E@@@@@@)@@@^"K@\G@@C@@@@J^$0@@@Z__@@]ET--$$$$--DG@@@@@@@@@AA*AA@@@@ )@@)M"K[JG@B)/0@YS@@@@@@C@K@@GT8@@[@G@@@@H;CK@@]CC@@@FCCK@@F/K@@@I(4@@@C'=@@@@AB@@@@ )@]0K$&@#0B=@V3@[9@CYG[)@@@@@@@@@@@@/,0@@@[@@@@@*W@@@TC8@GHK/K@@@J[@K@@@;CK@@[AC@@@@ )@^0K\A@0@]=@:2@S]=@;2@)@@@@@@/,0@@@C8@@@@[\*@[O[3S@[O/,0@@@C80@@@@@@@@@@@@@@[AD@@@@ )@A0M"K^\C]$=[TK@B=[)@@@/K@@@@CB8@[OC\*@[OC3S@[OR'G@@@@@@@@=/,0@@@/,0@@@/K@@@@AE@@@@ )@D@A"KA\C#$=[8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/K@@@@/K@@@@(0@@@@AF@@@@ @EOF P )@@G@@@@ @@]@@B@@K@@$@@H@[V@@@[@@@@@@@E@@K@@@@@$RECCHAR FLAG3 FITEM$AA )@@G@@ OPTIONS SORTF SORTBL ROPN$ RECSTART RREL$ AB )@@G@@ CHK000 RSORT$ RRET$ PR000 MRFLGS MFD600AC )@@G@@ QF900 DOSORT @@[@@@@@@@@WGOTREC @@[@@@@@@@@RKPRCD$AD )@@G@@ @C@@@@@@@@@@LPOC @@[@@@@@@@@XNOSORTF @@[@@@@@@@@POPNSRTAE )@@G@@ @@[@@@@@@@@@RLBLK$ @@[@@@@@@@@RRTMAX$ @@[@@@@@@@@RRTMIN$AF )@@G@@ @@[@@@@@@@@RRTMT$ @@[@@@@@@@@RRTPT$ @@[@@@@@@@@RRTST$ AG )@@G@@ @@[@@@@@@@@RSRTNXT @@[@@@@@@@@X@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AH )@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AI )@@^@@@@@@@@@@@@@@@@@@@@@@@@@@ AJ @ELT,SI TPF$.SORTF,,,135572072623,023 AXR$ . . . SORTF - FORTRAN CALLABLE ROUTINE TO ASSIGN SORT FILES . . ORIGINALLY BY WALT GILBERT (UOM) . UPDATED BY R. DUFF KURLAND (ISD) TO PROVIDE: . . - EXEC LEVEL 33 COMPATABILITY . - REMOVABLE DISC USAGE FOR XB FILE . . IF AN 'XB' FILE IS NEEDED, IT WILL BE ASSIGNED ON TYPE , . UNLESS THE MAXIMUM DRUM FILE SIZE (XBMAXF) IS EXCEEDED, OR THE . REQUIRED NUMBER OF POSITIONS EXCEEDS THE AMOUNT CURRENTLY AVAILABLE. . IN THIS CASE, 'XB' WILL BE ASSIGNED ON A REMOVABLE DISC, USING . EQUIPMENT TYPE , AND PACKID . IF NO REMOVABLE . DISC ASSIGNS ARE DESIRED, SHOULD BE SET TO ZERO. . . IF A REMOVABLE ASSIGN OF 'XB' IS ATTEMPTED AND FAILS (DUE TO THE . DRIVE NOT BEING AVAILABLE, ETC.), SORTF WILL REVERT TO A FIXED . ASSIGN, BUT WITHOUT THE INITIAL RESERVE. FURTHERMORE, IF THE FILE . IS LESS THAN POSITIONS, TRACK GRANULARITY WILL BE USED. . THIS IS ALL TO MINIMIZE THE SYSTEM IMPACT OF A SORT WHEN MASS . STORAGE AVAILABILITY IS LOW. . REMTYPE EQU 0 TYPE FOR REMOVABLE XB ASGS . MUST BE 3 CHARS, RJSF FIXTYPE EQU 'F40' TYPE TO USE FOR FIXED XB ASGS . (3 CHARS, RJSF) REMPACK EQU 'TEMP00' PACKID FOR REMOVABLE XB ASGS (LJSF) . IGNORED IF REMTYPE = 0. XBMAXF EQU 0 MAX SIZE OF FIXED XB FILE (POSITIONS) . IGNORED IF REMTYPE = 0. XBMAX EQU 150 MAX XB SIZE, ANY ASG TYPE . (ONLY TO PREVENT ABUSE) MSIZE EQU 300 MSALL$ FATBL BUFFER SIZE . RTYPE EQU ('.,'*/24)+(REMTYPE*/6)+'/' FTYPE EQU ('.,'*/24)+(FIXTYPE*/6)+'/' . . ALL FILES ARE FREED FIRST . FREXA '@FREE XA ' FREXB '@FREE XB ' FRECOR '@FREE R$CORE' . . XA FILE ASSIGN IMAGE . ASGXA '@ASG,T XA.,F///******' ASGXAL EQU $-ASGXA . . XB FILE ASSIGN IMAGES . . . NORMAL (FIXED) XB ASSIGN, EXTENDED FOR REMOVABLE ASSIGN IF . CONFIGURED AND NECESSARY. . ASGXB '@ASG,T XB.,FXX/***/POS/*** ' ASGXBL EQU $-ASGXB LENGTH OF NORMAL XB ASSIGN IMAGE ON REMTYPE XBPACK + REMPACK PACKID TAGGED ONTO END OF XB ASG IMAGE DISC + 0 NONZERO IF REMOVABLE ASG NEEDED . . REMOTE EXECUTE TABLE TO STUFF COMMA AFTER MAX GRANS . COMMA S,S2 A0,ASGXB+4 FOR MAX = INITIAL = 1 DIGIT S,S4 A0,ASGXB+4 FOR MAX = INITIAL = 2 DIGITS S,S6 A0,ASGXB+4 FOR MAX = INITIAL = 3 DIGITS . . XB ASSIGN IMAGE USED WHEN REMOVABLE ASSIGN FAILS. . ASGXB2 '@ASG,T XB.,FXX//POS/ ******' ASGXB2L EQU $-ASGXB2 . XBREVP EQU 10 POINT AT WHICH TO STOP SWITCHING . TO TRACK GRANULARITY OFF REMTYPE . . R$CORE ASSIGN IMAGE . ASGCOR '@ASG,T R$CORE.,F2///** ' ASGCORL EQU $-ASGCOR . . MSALL$ PACKET . MSPKT + 1,MSALL$ LEVEL-33 FORMAT MSCON$/MSALL$ CALL + MSIZE,MSBUF BUFFER LENGTH, ADDRESS + 0 FILLED BY MSCON$ + 0 FILLED BY MSCON$ + 0 FILLED BY MSCON$ . MSBEG EQUF MSPKT+3,,H1 STARTING MS DEVICE INDEX MSEND EQUF MSPKT+3,,H2 LAST MS DEVICE INDEX DSCBEG EQUF MSPKT+4,,H1 STARTING DISC DEVICE INDEX DSCEND EQUF MSPKT+4,,H2 LAST DISC DEVICE INDEX . . MSALL$ FATBL BUFFER . MSBUF RES MSIZE RESERVE SPACE FOR FATBL . SAV RES 1 SAVE AREA FOR A10 . E(1) 'RECORD SIZE NEGATIVE OR ZERO'. E(2) 'NUMBER OF RECORDS NEGATIVE OR ZERO'. E(3) 'XXXXXX POSITIONS IS TOO LARGE FOR SORTF'. E(4) 'SORT FILE ASSIGN REJECTED: XXXXXXXXXXXX'. E(5) ' ONLY XXXXXX TRACKS OF STORAGE REMAIN, SORT NEEDS XXXXXX' E(6) ' ONLY XXXXXX POSITIONS REMAIN, SORT NEEDS XXXXXX' E(7) 'SORTF ERROR - MSALL$ BUFFER IS TOO SMALL.' E(8) 'SORTF MSCON$ ERROR CODE XX' E(9) . I DO 8 ,; EE(I) + 0200+E(I+1)-E(I),E(I). GENERATE PRINT CONTROL WORDS XA + 0 XA (SMALL) FILE SIZE, TRK XB + 0 XB (LARGE) FILE SIZE, POS CORE + 0 CORE SIZE, THOUSANDS OF WORDS . . MERGE POWER LLOKUP TABLE . MGPS + 2 4 + 5 5 + 9 6 + 17 7 + 26 8 + 37 9 + 53 10 + 72 11 + 94 12 + 121 13 + 153 14 + 190 15 + 232 16 + 280 17 + 335 18 + 395 19 + 460 20 + 530 21 NMGPS EQU $-MGPS. NUMBER OF ENTRIES IN TABLE . RETURN + 0 RETURN ADDRESS STORE HERE /$(1). SORTF* . S A10,SAV L,U A1,'WJG' LOAD @SORTF CALL IDENTITY FLAG SZ A4 SET FLAG. 0=SUBROUTINE CALL, _0=@SORTF TNE,H2 A1,2,X11 IS THIS SORTF-DRIVER CALLING? L A4,2,X11 YES, LOAD ENTIRE WORD TO GET SIGN FLAG JN A4,NOCSF DON'T ISSUE CSF$'S IF 'X' OPTION ON L A0,(2,FREXA) FREE ALL OF THE FILES: XA, XB, R$CORE ER CSF$ L A0,(2,FREXB) ER CSF$ L A0,(2,FRECOR) ER CSF$ NOCSF L,U A0,3,X11 GET RETURN ADDRESS S,H2 A0,RETURN SAVE IT. L A1,*1,X11 LOAD RECORD SIZE IN CHARS JN A1,ERR2 ERROR IF NEGATIVE A,U A1,11 . SZ A0 DI,U A0,6 CONVERT TO WORD COUNT MSI A0,*0,X11 TIMES NUMBER OF RECORDS JN A0,ERR1 ERROR IF NEGATIVE MI,U A0,11 ADD 10% SAFETY FACTOR DI,U A0,10 DSL A0,36 S A1,A2 SAVE VALUE. DI,U A0,114688 GET FILE SIZE IN POS JZ A0,SMALL JUMP IF LESS THAN 1 POSITION A,U A0,1 ROUND UPWARD S A0,XB STORE XB SIZE, POSITIONS TG,U A0,XBMAX+1 MAX XB SIZE EXCEEDED? J ERR3 YES, PRINT ERROR MSG L,U R1,NMGPS SEARCH MERGE-POWER TABLE L A2,(1,3) SG,H2 A0,MGPS-3,*A2 LOOKUP XB SIZE IN MERGE-POWER TABLE J ERR3 MUCH TOO BIG! L,U A1,0,A2 RESULT, MGP (MERGE-POWER) IN A2 MSI,U A1,1792 FIND AMOUNT OF CORE USING 1792-WD BUFFER A,U A1,2791 2791=1792+999 = 1TRK + ROUNDING SZ A0 DI,U A0,1000 S A0,CORE CORE REQUIRED IN THOUSANDS. MI,U A0,15000 15 (1.5) IS DEFAULT BIAS, 1000 TO GET WD AN,U A1,80640 CALC. EXPECTED STRING SIZE, 3*15*1792 DI,U A0,19712 11*1792 TO GET TRKS, 11 = 10 ALMOST S A0,A3 SAVE VALUE L A0,XB NOW CALCULATE XA SIZE DSL A0,30 (CONV POS TO TRK) DI,U A0,0,A2 XA = XB/(MGP)+1 ROUNDED UP TO STRING SIZ AU A0,A3 NOW ROUND UP TO WHOLE EXPECTED ST. SIZE. SZ A0 DI A0,A3 MSI A0,A3 S A0,XA STORE XA SIZE, TRKS ON REMTYPE L A0,XB LOAD XB SIZE, IN POSITIONS TLE,U A0,XBMAXF+1 MAX FIXED POS EXCEEDED? J MAVCHK NO, CHECK MS AVAILABILITY DISCON L,U A0,1 YES, SET REMOVABLE ASG FLAG S A0,DISC J CHEKD TRY ASSIGNING XB ON REMOBAVLE PACK OFF REMTYPE MAVCHK L,U A0,MSPKT GET FATBL ER MSCON$ JN A0,ERR7 IF NO GOOD, HANDLE ERROR SZ A10 CLEAR TOTAL TRACKS AVAILABLE SZ A1 CLEAR TOTAL POSITIONS AVAILLABLE L A2,MSEND GET LAST MS DEVICE INDEX AN A2,MSBEG GET # OF MS TYPES - 1 TNZ MSBEG NEW-TYPE FATBL? L,U A2,7 NO, GET OLD LENGTH OF FATBL FATLOOP L,H1 A0,MSBUF,A2 GET INDEX TO STATUS TABLE TNZ MSBEG NEW-TYPE FATBL? JZ A0,FATEND NO, IF ZERO, NONE CONFIGURED A,H2 A1,MSBUF+2,A0 BUMP AVAILABLE POSITIONS L A0,MSBUF+1,A0 GET POSITIONS AVAIL LSSL A0,12 GET RID OF ROT POINTER SSL A0,12 A A10,A0 BUMP AVAILABLE TRACKS FATEND JGD A2,FATLOOP HANDLE ALL MS DEVICES TLE A1,XB ENOUGH POSITIONS FOR THE XB FILE? DO REMTYPE=0 , J ERR6 NO, PRINT ERROR MSG DO REMTYPE>0 , J DISCON NO, SWITCH TO REMOVABLE ASG L A1,XB GET POSITIONS NEEDED FOR XB LSSL A1,6 CONVERT TO TRACKS A A1,XA ADD TRACKS REQUIRED FOR XA A,U A1,1248 ??? TLE A10,A1 ARE ENOUGH TRACKS AVAILABLE? J ERR5 NO, PRINT ERROR MSG . . ASSIGN THE XB FILE . CHEKD L A0,XB JZ A0,CVXA SKIP IF NO XB FILE NEEDED LMJ X11,CV CONVERT TO FIELDATA DECIMAL SZ A0 L A1,A2 LDSL A0,0,A3 MOVE INIT RESV TO A0 L A1,('/POS/ ') DSL A0,6 MOVE LAST CHAR OF INIT RESV TO A1 AN,U A3,6 DECREMENT SHIFT COUNT BY 1 CHAR DSL A1,0,A3 SHIFT X/POS/ AND MAX GRAN SSC A0,0,A3 ADJUST REMAINING CHARS OF INIT RESV A A1,A0 ADD REMAINING INIT RESV CHARS DS A1,ASGXB+3 STORE XXX/POS/XXX IN ASG IMAGE LA A0,(FTYPE) GET FIXED XB EQUIP TYPE SA A0,ASGXB+2 STORE IN ASG IMAGE L A1,(ASGXBL,ASGXB) GET IMAGE LENGTH, ADDR ON REMTYPE TNZ DISC AH! SHOULD WE DO REM ASG? J DOIT NO, ASSIGN AS FIXED L A2,(RTYPE) GET DESIRED REM EQUIP TYPE S A2,ASGXB+2 STORE IN ASG IMAGE . . ADD A COMMA FOR PACKID CLAUSE . SZ A2 A3=INIT RESV BIT COUNT - 6 DI,U A2,6 CONVERT TO CHAR COUNT L,U A0,',' GET A COMMA EX COMMA,A2 STORE COMMA IN ASG IMAGE LNA A1,(ASGXBL+1,ASGXB) . INDICATE WE CHECK THE STATUS OFF REMTYPE . DOIT LMJ A3,ISSUE ASSIGN THE XB FILE ON REMTYPE JP A0,CVXA IF OK, GO ASG XA TNZ DISC WAS THIS A DISC ASG? J ISSUE3 NO, PRINT ERROR MSG AND EXIT . . MAYBE PACK CAN'T BE MOUNTED. REVERT TO FIXED ASSIGN, . WITHOUT INITIAL RESERVE. IF FILE IS SMALL ENOUGH . (LESS THAN POSITIONS) USE TRACK GRANULARITY. . JZ A4,SKIPIT IF NOT SORTF-DRIVER, SKIP MSG LMJ A3,ERR4 FORM ERROR MSG P$RINT EE(4) PRINT MSG SKIPIT SZ DISC CLEAR REMOVABLE-ASG FLAG LA A0,(FTYPE) GET CONFIGURED FIXED EQUIPMENT TYPE SA A0,ASGXB2+2 SET IN ASSIGN IMAGE LA A0,XB GET XB SIZE IN POSITIONS TG,U A0,XBREVP+1 WILL WE ZONK THE GUY'S PCT WITH GRANULE . ITEMS IF WE USED TRACK GRANULARITY? J XBPOS YES, SO REMAIN IN POSITION GRANULARITY LA A1,('/TRK/ ') YES, SO CHANGE ASSIGN IMAGE SA A1,ASGXB2+3 TO TRACK GRANULARITY LSSL A0,6 AND CONVERT POSITIONS TO TRACKS XBPOS LMJ X11,CV CONVERT SIZE TO FIELDATA DECIMAL SA A2,ASGXB2+4 AND STORE IN ASSIGN IMAGE LA A1,(ASGXB2L,ASGXB2) LMJ A3,ISSUE ASSIGN THE XB FILE ON FIXED STORAGE OFF REMTYPE . . ASSIGN XA FILE . CVXA L A0,XA LMJ X11,CV CONVERT XA SIZE TO FIELDATA DECIMAL S A2,ASGXA+3 STORE MAX GRAN IN ASG IMAGE L A1,(ASGXAL,ASGXA) GET IMAGE LENGTH AND ADDRESS LMJ A3,ISSUE DISPLAY & ISSUE @ASG,T XA. CARD L A0,CORE GET AMOUNT OF CORE NEEDED LMJ X11,CV CONVERT TO FD DECIMAL SSC A2,24 S,T2 A2,ASGCOR+3 STORE IN ASG IMAGE L A1,(ASGCORL,ASGCOR) . LMJ A3,ISSUE DISPLAY & ISSUE @ASG,T R$CORE CARD L A10,SAV J *RETURN RETURN TO CALLING PROGRAM . . SUBROUTINE TO DISPLAY AND ISSUE CSF$ REQUEST . . ENTER WITH A1 = IMAGE LENGTH,ADDRESS OR -(IMAGE LENGTH,ADDRESS) . A1 NEGATIVE INDICATES THAT CALLER WISHES TO CHECK STATUS HIMSELF. . ISSUE LMA A0,A1 RETRIEVE IMAGE LENGTH, ADDR JZ A4,ISSUE2 JUMP IF NOT SORTF-DRIVER USE A A0,(2,0,0) SET IN DOUBLE-LINE SPACING ER PRINT$ PRINT @ASG CARD JN A4,0,A3 DON'T ER CSF$ IF 'X' OPTION IS SET LMA A0,A1 RETRIEVE IMAGE LENGTH, ADDR ISSUE2 ER CSF$ ISSUE THE @ASG CARD IMAGE JN A1,0,A3 RETURN IF CALLER WANTS TO . CHECK STATUS HIMSELF JP A0,0,A3 OTHERWISE, RETURN IF OK. ISSUE3 LMJ A3,ERR4 FORM ERROR MSG J ERR4B PRINT IT AND EXIT . . CSF$ ERROR ENCOUNTERED . ERR4 L,U A2,5 WOOPS, AN ERROR DSL A0,3 CONVERT STATUS TO OCTAL FOR MESSAGE. SSL A1,3 JGD A2,$-2 A A1,('000000') JZ A0,ERR4A DONE? S A1,E(4)+6 SET IN RIGHT HALF J ERR4 ERR4A S A1,E(4)+5 SET IN LEFT HALF J 0,A3 RETURN TO CALLER . ERR4B L A0,EE(4) J PRTERR PRINT ERROR MSG . . BINARY TO FIELDATA DECIMAL CONVERSION ROUTINE: INPUT IN A0, . OUTPUT LEFT-JUSTIFIED, SPACE FILLED IN A2. A3 = CHAR COUNT * 6. . CV SZ A3 CONVERT FROM BINARY TO FIELDATA DECIMAL L A2,(' ') CV1 DSL A0,36 DI,U A0,10 A,U A1,060 DSL A1,6 A,U A3,6 JNZ A0,CV1 J 0,X11 . . HANDLE REQUIREMENTS OF SMALL SORT . SMALL JZ A2,ERR0 SZ A1 A,U A2,1791 ROUND UPWARD DI,U A1,1792 CALC. XA SIZE IN TRKS S A1,XA THIS IS THE XA FILE SIZE IN TRACKS TG,U A1,6 TEST FOR FEWER THAN 6 TRACKS. J SM0 FILE IS GREATER THAN 5 TRACKS LSSL A1,1 A1 NOW CONTAINS 2, 4, 6, 8, OR 10. L,U A0,01226 0,2,2,1,1,2 (FORM 26,2,2,2,2,2) SSC A0,0,A1 SELECT CORE SIZE FOR 1,2,3,4, & 5 TRK XA SSL A0,34 (IF XA IS 1 TRK, DO IN-CORE SORT) J SM2 SM0 MI,U A1,1792 GET CORE EQUIVALENT DI,U A1,1000 WHAT IS THAT IN K? L,U A0,1 (START WITH 2K OF CORE) L A2,A1 NOW FIND CORE NEEDED BY TRIAL AND ERROR SM1 AU,U A0,1,A0 (A0) = CORE IN K -1K, (A1) = 2*C-1 MSI,U A1,1,A0 (A1) = C*(2*C-1). ASSUMING DRUM BUFFER A,U A0,1 OF 500 WORDS ( = 1/2 K) TLE A1,A2 IS DRUM FOR THIS AMNT OF CORE ENOUGH? J SM1 NO, INCREASE CORE & TRY AGAIN. SM2 S A0,CORE YES. J CVXA GO GENERATE @ASG,T CARDS ERR0 TNZ *0,X11 IS NREC = 0? J ERR2 ERR1 L A0,EE(1) J PRTERR ERR2 L A0,EE(2) J PRTERR . . XB MAX SIZE EXCEEDED . ERR3 LMJ X11,CV S A2,E(3) L A0,EE(3) J PRTERR . . SORT REQUIREMENTS EXCEED AVAILABLE TRACKS . ERR5 L A0,A1 LMJ X11,CV S A2,E(5)+9 L A0,A10 LMJ X11,CV S A2,E(5)+1 L A0,EE(5) J PRTERR . . XB REQUIREMENTS EXCEED AVAILABLE POSITIONS . ERR6 L A0,A1 LMJ X11,CV S A2,E(6)+1 L A0,XB LMJ X11,CV S A2,E(6)+7 L A0,EE(6) J PRTERR PRINT ERROR MSG . . ER MSCON$ (MSALL$) ERROR . ERR7 SSL A0,18 MOVE ERROR CODE TO S6 AND,U A0,077 MASK OFF EXTRANEOUS BITS LA A0,EE(7) ASSUME MSALL$ BUFFER IS TOO SMALL TNE,U A1,027 IS THAT REALLY THE ERROR? J PRTERR YES, PRINT ERROR MSG LDSL A0,33 MOVE UPPER DIGIT INTO A0 LSSL A0,3 ADJUST IN SIXTH-WORD LDSL A0,3 MOVE LOWER DIGIT INTO A0 AA,U A0,'00' CONVERT ERROR CODE TO FIELDATA SA,T1 A0,E(8)+4 STORE IN MESSAGE LA A0,EE(8) GET ALTERNATE ERROR MSG . . PRINT ERROR MSG . PRTERR ER PRINT$ L A10,SAV ER ERR$ END. WALTER GILBERT 7/4/71 @ELT,RI TPF$.SORTF,,,154352141337 )@@@Q@@@@@@@@ASG,T******.,F/// XA@ASG,TR$CORE@FREE XB @FREE XA @FREE AA@@@@ )@]0K@@@@@@@)@ @^@ SIZE RECORD//** E.,F2/ R$COR@ASG,TS/*** ***/PO.,FXX/ XBAB@@@@ )@ )Q@@@@@@@ POSITXXXXXXZERO VE OR NEGATICORDS OF RENUMBERZERO VE OR NEGATIAC@@@@ )@CKQ@@@@@@@XXXXXXD: EJECTESIGN RILE ASSORT FRTF FOR SOLARGE S TOO IONS IAD@@@@ )@F@Q@@@@@@@XXXXXXEEDS SORT NIN, REMATORAGES OF S TRACKXXXXXX ONLY XXXXXXAE@@@@ )@H0Q@@@@@@@- MSALERROR SORTF XXXXXXNEEDS SORT EMAIN,IONS R POSITXXXXXX ONLY AF@@@@ )@K)Q@@@E[K@@]A@@T@] @@OXX CODE ERRORMSCON$SORTF MALL. TOO SFER ISL$ BUFAG@@@@ )@NKOE[KE[KE[K@@@@@@@@@]@@@@@@@@@@@@@@@@@@@] @[A@]B@@_@]C@@7@]E@@!@]B@@&@]B@@ZAH@@@@ )@P0Q@@@@@@@@@@@]"@@@@]T@@@@[9@@@@[Y@@@@[C@@@@@5@@@@@>@@@@@U@@@@@L@@@@@D@@@@@ AI@@@@ )@S)I@@@@@@@)@@@^"S@@@@@C8KWJG[])@@N@@@@@@@@@@CM@@@@BG@@@@AF@@@@ J@@@@^S@@@@#*AJ@@@@ )@@)M)Y#3@[9@@/0@YK@JG@@C@@@[:'=@@@@C@@@[%'=@@@@C@@@[(/H@@@GC[F@@]:^V@@] @@@@KAK@@@@ )@]0O"K@#3@@Y@@/@@/G@@]C@VK@[[^@@[*C8F@@#'=@@@@AL@@@@ )@ KO)[8#3@@Y@@@@@/K@@]$!8@@CN[@@@[OG8@@@[/@@@]EW8@W@@[@K@@I;G@@@=W8@@@ES8@@@FAM@@@@ )@B0M$&@#3@[8@@@@@@@@@@@W8@@J* @@@@GG8K@:$T8K@W@C8Y@@@/K@@]$5^I)[NC@)@[?N8K@@MAN@@@@ )@E@O"S@@#3@@@@@@@ @@@@GK@@@@JW8I@@@;G@@@YC@@@[O[@@@@JW8@^4@H8KN?@S8@#%S[@@@[PAO@@@@ )@G)M-9)@O)[YK@\C@$)JC@KC^)@@# @@@@Q/G@@];'=@@@@(C@@@]C8@@@@[@@@[NT@@@@JW@@@@JAP@@@@ )@I0M"K@>C@7&@@#0@@@@@@@;CK@@AC@K@@Q8#)@@"G]?@@#G8H@@@C^J)@@C@0@[!C8K@@@HC)@@#AQ@@@@ )@L@M"S@J[9)@JG@@Y#3@@@@C@@@[O/K@@]:?])@@HG8K@N)G@K@[N;*K@@AC@K@[O/K@@]3?@K@[OAR@@@@ )@NKO"#0@YS@@@@@@@;@J@@@;GZ@@@H80@@A;G@@@AC@K@[,;?J@@@C@K@@I @@@@G/,0@][/@@@[XAS@@@@ )@P0K$&@#3@[9)@/0@Y#3@[8@@@@@@/,0@][C@@@[N/\0@[%C@K@[0[@@@@GC@@@[\9*K@@HG@K@@GAT@@@@ )@R0K"S@JG@B)/0@Y@/0@YS@@@@@@@C@K@[2[S)@@M;@)@@S/,0@][C@@@[P/\0@[%C@K@[1[@)@@DAU@@@@ )@T0M"#3@[9)@J[9)@/)^@@@E@@@@H/HJ@@@'=@@@@G@@@[3/[@@[0E@@@@H/K@K[*C])@@N/\0@[%AV@@@@ )@W@O"K@@/B)@/B&@@G@K@[48#)@[6;CK@@#;G@@@#C8)@@ /K@@[_/\0@[5/CJ@@@/GZ@@@'=@@@@AW@@@@ )@Y)M"#3@[8JG@[9)@/[9)@@C@)@[5 @@@@J/K@@#AC@@@[I/KJ@@@[@K@@:/K@@[5[@K@@?/@@@[.AX@@@@ )@)0Q)[8#0@@W8K@W@G8)@V_ @@@@H/@)@]-/KF@@@/^@@]#G80@@A;GK@@AG8K@@0W8@@@E;G@@@=AY@@@@ )@<)O"S@#0@B)@@@@@W8K@J*S8K@W@/K@@]Z;C@@@+;@H@@@C8@@EQ;*K@@[/K@@]Q!8K@@A[@K@[NAZ@@@@ )@&@O)@Y#3@[8@@@@@(@FK@@/K@@[X[@@@[P/K@@]U?@K@@IG8@@@[T8W@@[K8G@@[C@)@@HC8@@@[BA@@@@ )@*)K"#3@[8JG@B)/B&@#3@@@@@@@@C@@@[H[@)@@Z/,0@][/K@@#AC@@@[G/K@@#AC@@@[F/K@@]>BB@@@@ )@%)M"@/B&@@/B&@#3@[8@@@/K@@#AC@@@[J[@)@@,/,0@][C@@@@Q[@)@@6/,0@][C@@@@H/K@@#ABC@@@@ )@?0M$)/0@YS@J[9)@/0@Y@@;C@@@M/K@@#AC@@@[K[@)@@"/,0@][C@@@[O[@)@@8/,0@][C@@@@HBD@@@@ )@\@M$&@@/@[9)@@@@@@@@@@[W@@[EG8@@00;?@@@#;*@@@#;?@@@-/K@@#A:8K@@RC@@@[L+8@@@_BE@@@@ )@1KC"S@JC[B&@#2@O)@UKCE[KE@@@@@[@@#@@]@@^@@]@@]@@]@@@'=@@@@C])@@N'=@@@@C@@@[MBF@@@@ )@VKMEK[)O])O@@@@@@@@@@@ 000000@]@@@@@@^@@J@@^@@A@@ @@E.,F33//POS/ @@[@@[BG@@@@ @EOF P )@@G@@@@ @@]@@B@@A@@N@@[@@R@@@[@@@@@@@E@[6@@@@#DCSF$ MSALLPKT MSCON$AA )@@G@@ MSBUF PRINT$ ERR$ SORTF @@[@@@@@@@@@P(K(1)AB )@@^@@,3)>0 , F1 2, P(K(1), AC @ELT,SIQ TPF$.TCF,,,153300141337,001 *CHECK -246,246 . MJB 1994-08-05 Utilize MFDSP$ for directory LMJ X11,DIRNSEC$ . Find main item sector 1 *DIREC$ -59,59/23 . 12 - MFDSP$ error MFDSP$ error code . 8.5 . 13 - Unsupported function . 8.5 -91,91- /01400/9000 / -100,100- /16/64/ -149 . MJB 1994-08-05 Add new error codes MSPERR $EQU 12 . MFDSP$ error . FNCERR $EQU 13 . Unsupported function . -153,153- DIREC$ /2000/5000/ -176,176 . MJB 1994-08-05 Mark new directory format DIR$MFDF* + 1 NONZERO IF NEW DIRECOTRY FORMAT -178,182 . MJB 1994-08-08 -191,191 . MJB 1994-08-08 -194,204 . MJB 1994-08-08 -219,233 . MJB 1994-08-05 Setup MFDSP$ packet . . MFDSP$ packet . MFDSPFN $RES 2 . DGET$ filename $RES 1792 . Scratch space TRKBUF $RES 1792 . First DGET$ buffer TRKBUF2 . . Second DGET$ buffer MCTTBL $RES 1792 . . MFDSPPK + $LCV-MFDSPFN,MFDSPFN . . . MFDSP$ function codes . MINIT $EQU 0 . Initialize DGET$ MINITP $EQU 1 . Initialize DGETP$ MGETNLI $EQU 2 . Get next lead item MGETS1 $EQU 3 . Get sector 1 of LI MGETNMI $EQU 4 . Get next main item MGETNS $EQU 5 . Get next sector of main item MGETD $EQU 6 . Get first DAD table MGETND $EQU 7 . Get next DAD table MFIND $EQU 8 . Find MFD item MCONV $EQU 9 . Convert MFD adress . . MFDSP$ storage area . MFDSPSIZ $RES 1 . Actual packet size required LIADDR $RES 1 . Address of lead item, returned by init . -240,244 . MJB 1994-08-08 -251,264 . mjb 1984-12-06 changes for level 39 exec . . SNAP$ packet to snap user buffer . SF $FORM 3,15,18 . SNAP$ form USRSNAP $EQU 0 . Turn off snap . $IF USRSNAP=1 . USNAP + 'USRBUF' . SF 0,56,0 . + 0 . + 0 . Storage for A1 $ENDF . . FITMBUF $RES 13 . FITEM$ buffer FITMSIZ $EQU $LCV-FITMBUF . Buffer size FITMPKT + 0377777,FITMBUF. -278,288 . MJB 1994-08-08 FILARG $EQU 1 . Number of arguments . DIRFIL* . . LA A2,(-1,FILARG) . # of args, No error return LMJ A3,FORLNK . Set up FORPKT and return points L,U A0,*0,A0 . Load filename address DL A0,0,A0 . Load the filename DIRFIL$* . . DS A0,MFDSPPK . Store new name into the MFDSP$ packet DS A0,MSPKT+1 . and MSCON$ packet DS A0,CSFIM+2 . and CSF$ image J 0,X11 . Return -397,397 . mjb 1984-12-06 changes for level 39 exec J CKONASG . no, skip setting of flags -407 . mjb 1984-12-06 changes for level 39 exec CKONASG . . L A0,FITMPKT . Get FITEM$ packet L,U A1,FITMSIZ-1 . and Length LXI,U A0,1 . Set increment SZ 0,*A0 . Clear packet JGD A1,$LCV-1 . DL A1,MSPKT+1 . Get DGET file filename L A0,FITMPKT . Get FITEM$ packet DS A1,0,A0 . Put filename in FITEM$ packet ER FITEM$ . Get file info L,S1 A1,6,A0 . Get equip type JNZ A1,RERUN . if not 0, file asg'd -434,609 . MJB 1994-08-05 remove old code . . Use MFDSP$ . DL A0,MSPKT+1 . Get DGET filename DS A0,MFDSPFN . Place into packet L A0,MFDSPPK . Get MFDSP$ packet L,U A1,MINIT . Get Initialize function code LMJ X11,MFDSP$ . Go to it J MFDSPERR . Whoops S A5,MFDSPSIZ . Save packet size S A1,LIADDR . Save address of 1st lead item LMJ A1,RESET . . -650,655 . MJB 1994-08-05 SA A0,BUFRADDR . Save user's buffer address TZ GOTONE . Are we retrieving main items (in . . which case lead item is oncore)? J GTMITM . Yes, get next main item for this . . lead item. SZ LEDFLG . No, be sure LEDFLG is clear L A1,LIADDR . Get possible lead item address? JNZ A1,DIRSC2 . We have one, skip MFDSP$ call -659,690 . MJB 1994-08-05 DIRSC1 . . L A0,MFDSPPK . L,U A1,MGETNLI . Get lead item function LMJ X11,MFDSP$ . J MFDSPERR . JZ A1,EOF . All done with the MFD DIRSC2 . . Have a lead item SZ LIADDR . Clear initilization flag S A1,GOTONE . Mark lead item in core L A3,A1 . Put item address into A3 TNZ WANTM . Does user want main items? J GTLITM . No, just give him lead items LXI,U A1,1 . L A0,(1,LBUF) . L,U R1,28 . Transfer lead item BT A0,0,*A1 . to LBUF for finding main items S A0,GOTONE . Mark lead item in code SZ LFLAG . Clear GOTL1, HMANY TNZ WANTL . User wants lead items? J GTMITM . No, go get him a main item -691,691 . MJB 1994-08-05 -692,724 . MJB 1994-08-05 -724/0,2 . MJB 1994-08-05 -725,738 . MJB 1994-08-05 -739,739/1,1 . MJB 1994-08-05 -740,752 . MJB 1994-08-05 -756,758/1,1 . MJB 1994-08-05 -759,761 . MJB 1994-08-05 GTLITM . . GTLITM2 . . L A0,BUFRADDR . Get user's buffer address LXI,U A0,1 . Set increment for BT LXI,U A3,1 . Set increment for BT L,U R1,28 . Set length for BT -770,772 . MJB 1994-08-05 DNOTFOR . . $IF USRSNAP=1 . S A0,USNAP+2 . Save A0 S A1,USNAP+3 . Save A1 L,U A0,USNAP . Point at SNAP$ packet L A1,BUFRADDR . Get user's buffer address S,H2 A1,USNAP+1 . Set address into SNAP$ packet L A1,USNAP+3 . Restore A1 ER SNAP$ . Issue SNAP$ $ENDF . . L X11,SAVX11 . Load return address DO DEBUG>0 , SLJ TOFF$ J 0,X11 . Return -777,777 . MJB 1994-08-05 Check proper cell TG,S2 A0,LBUF+9 . Any more in this lead item? -781,810 . MJB 1994-08-05 GTMITMS1 . . L A0,MFDSPPK . L,U A1,MGETNMI . Get next main item LMJ X11,MFDSP$ . J MFDSPERR . JZ A1,GETNEXTLI . All done w/lead item sector 0 L A0,BUFRADDR . Get user's buffer address LXI,U A1,1 . Set increment A,U A0,28 . Bump for storing main item LXI,U A0,1 . Set increment L,U R1,28 . Count BT A0,0,*A1 . BT main item to user buffer J GOTMILINK . . GETNEXTLI . . L A0,MFDSPPK . L,U A1,MGETS1 . Get lead item sector 1 LMJ X11,MFDSP$ . J MFDSPERR . J GTMITMS1 . Try again -835,851 . MJB 1994-08-05 GOTMILINK . . -858,860 . MJB 1994-08-05 MINOFOR . $IF USRSNAP=1 . S A0,USNAP+2 . Save A0 S A1,USNAP+3 . Save A1 L,U A0,USNAP . Point at SNAP$ packet L A1,BUFRADDR . Get user's buffer address S,H2 A1,USNAP+1 . Set address into SNAP$ packet L A1,USNAP+3 . Restore A1 ER SNAP$ . Issue SNAP$ $ENDF . . L X11,SAVX11 . RETRIEVE USER'S RETURN ADDRESS DO DEBUG>0 , SLJ TOFF$ J 0,X11 . RETURN -907,907 . MJB 1988-02-11 Adjust for security wds L,U A0,LBUF+11 . Get address of 1st link A,S4 A0,LBUF+10 . Adjust for security wds LXI,U A0,1 . Set incr -914 . MJB 1994-08-05 /. DIRNSEC$* . . Get next main item sector . . Routine to return the successive main item items . LXI,U X11,0,X11 . Error return address into H1 S A0,BUFRADDR . Save user's buffer address LXM,U X11,1,X11 . Normal return address S X11,SAVX11 . Save return addresses . L$SNAP 'MJB',7,0,0,0 . . LXI,U A0,1 . Set increment L,U A1,(+0) . L,U R1,28 . BT A0,0,*A1 . Clear user's buffer . L A0,MFDSPPK . L,U A1,MGETNS . Get next sector function LMJ X11,MFDSP$ . J MFDSPERR . JZ A1,NOITEM . . L A0,BUFRADDR . Get user's buffer address LXI,U A1,1 . LXI,U A0,1 . L,U R1,28 . BT A0,0,*A1 . Transfer item to user's buffer . L,H2 X11,SAVX11 . Get return address J 0,X11 . Return . NOITEM L,H1 X11,SAVX11 . Get error return address J 0,X11 . Return -942,944 . MJB 1994-08-05 LINK01 . . -947,1037 . MJB 1994-08-05 L A2,A1 . Get link word passed by user JZ A2,ADDCN3 . If zero, error . L A0,MFDSPPK . L,U A1,MFIND . LMJ X11,MFDSP$ . J MFDSPERR . JZ A1,ADDCN3 . Didn't find it . L A0,BUFRADDR . Load user's buffer address LXI,U A1,1 . Set increment LXI,U A0,1 . Set increment L,U R1,28 . BT A0,0,*A1 . Move sector to user,s buffer -1083,1096 . MJB 1994-08-08 . J UNSUPPORT . Unsupported function . -1125,1145 . MJB 1994-08-05 . J UNSUPPORT . Unsupported function . -1185,1232 . MJB 1994-08-05 . J UNSUPPORT . Unsupported function . -1249,1280 . MJB 1994-08-08 -1322,1328 . MJB 1994-08-08 -1366 . MJB 1994-08-05 . MFDSP$ error . MFDSPERR . . L$SNAPI 'MFDSP$',2,0,0,0 . Snap registers on MFDSP$ error L,U A1,MSPERR . Set for MFDSP$ error type . . Status in A2 J ERREXT2 . Return error status to user . . Unsupported function . UNSUPPORT . . L,U A1,FNCERR . Set for error type J ERREXT2 RETURN ERROR STATUS TO USER . *HDG -81 . mjb 1984-11-19 L,U A0,P4L . Get length of page heading S A0,LINECOUNT . Initialize line counter -92,92 . mjb 1984-11-19 L,U A0,P4L . Total page heading length L A1,HDGRTN . Get Return address S A0,LINECOUNT . Reset line count J 0,A1 . Return *INIT1 -299,302 . mjb 1984-11-07 MCTPKT + 10,IDTBL . MCT packet to obtain system id + IDTBLL,0 . + 0 . IDTBL $RES 15 . Space for MCT system id table IDTBLL $EQU $LCV-IDTBL . . SITE $EQUF IDTBL+4 . Position of site id . SITMSG 'SITE:'L . -377,379 . mjb 1984-11-07 E$FD1 SITE . Get Site-id -927,927 TG,U A1,50 . *INIT2 -81,81 . MJB 1994-08-05 Fix reference to qualifier . LXI,U A0,1*/15+PCTBD$ . PCT's BDI L,U A1,RPCTA$ . PCT's entry point LBJ A0,$LCV+1 . Base PCT L,H1 A2,0336,A1 . A,U A2,01001 . A,U A2,0,A1 . Make absolute address DL A3,0,A2 . Get qualifier LBJ A0,$LCV+1 . DS A3,PCT . DS A3,PCT+021 . . L A0,(13,PROJPK) . Do FITEM$ of DIAG$ to pick up real -97,97 . mjb 1984-11-19 L$OAD CHEKPRTSG,SN900,1 . Jump to SNAP$ routine -219,219 . mjb 1984-11-19 IN2170 L$OAD CHEKPRTSG,HDG100,1 . Jump to heading routine *MFD -3 . mjb 1984-11-07 . The following two cells are for the heading routine. . They control the start and return of the heading printing . LINECOUNT* + 0 . detail lines printed HDGRTN* + 0,0 . Caller flag, Return point . -74 . MJB 08-08-83 MSBUF* RES FATSIZ . MSALL BUFFER MSALLPKT* + 0,MSALL$ . . MJB 12-90 + FATSIZ,MSBUF . + 0 . + 0 . + 0 . -475,475/9,9 . mjb 1984-11-19 L$OAD CHEKPRTSG,SN900,1 . Load SNAP$ routine *MFDDEF -52- . 1988-02-11 MJB Approx. files 50K / 6/50/ . APPROX FILES 50K 1988-02-11 MJB -84- . MJB 7-83 /0/1/ . MJB 7-83 -89,92 . mjb 1984-11-07 LPP $EQU 75 . Printable lines per page . Including heading . -113- . MJB 7-83 /OUT$$$/$MFD$ / . MJB 7-83 -145- . MJB 7-83 /300 /2000/ . BIG FATBL -158- . MJB 7-83 /!/=/ . MJB 7-83 -164- . MJB 7-83 /^/$/ . MJB 7-83 -166- . MJB 7-83 /SYS$ /INSTALLATION/ . MJB 7-83 -296 . MJB 08-08-83 . . DEFINE MSALL PACKET POINTERS . LNFAT $EQUF MSALLPKT+2,,H1 . LENGTH OF TABLES RET MSBEG $EQUF MSALLPKT+3,,H1 . MSEND $EQUF MSALLPKT+3,,H2 . DSCBEG $EQUF MSALLPKT+4,,H1 . DSCEND $EQUF MSALLPKT+4,,H2 . *MFDMAP -3,3 . MJB 1994-08-05 Update level Equ LocLev/5 . Not C$sname . Type BlockSize64 . -8,9 . mjb 1984-11-19 -13,15 . mjb 1984-11-19 in Hdg,Check,Print,Print2,Snap -18,18 . mjb 1984-11-20 Seg Qfseg,(Chekprtsg,Totseg) -20,20 . mjb 1984-11-20 Dseg Dirseg,(Chekprtsg,Totseg) -21,21 . MJB 1994-08-05 Add MFDSP$ into DIRSEG In Direc$,DirSub,MfdSp$ -25,26 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ -31,32 . mjb 1984-11-19 -36,38 . mjb 1984-11-19 in Hdg,Check,Print,Print2,Snap -41,41 . mjb 1984-11-20 Seg Qfseg,(Chekprtsg,Totseg) -43,43 . mjb 1984-11-20 Dseg Dirseg,(Chekprtsg,Totseg) -44,44 . MJB 1994-08-05 Add MFDSP$ into DIRSEG In Direc$,DirSub,MfdSp$ -48,49 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ *PRINT -230,230 . mjb 1984-11-19 L,U A0,PR0095 . Get return address S A0,HDGRTN . Save J HDG200 . Go print heading -569,569 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -629,629 . mjb 1984-11-19 PR530 J PMORE . Print more info -668,668 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -688,688 . mjb 1984-11-07 PR640 . . L A0,POUT . LMJ X11,PRTLINE . -696,696 . mjb 1984-11-19 J SN000 . Jump to SNAP$ routine -709 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer J HDG200 . Go print heading *PRINT2 -59,59 . mjb 1984-11-07 PM110 L A0,POUT . LMJ X11,PRTLINE . -102,102 . mjb 1984-11-07 PM230 L A0,POUT . LMJ X11,PRTLINE . -131,131 . mjb 1984-11-07 PM320 L A0,POUT . LMJ X11,PRTLINE . -165,165 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -228,228 . mjb 1984-11-07 PM620 L A0,POUT . LMJ X11,PRTLINE . -252/0,0/252,252 L A0,POUT . LMJ X11,PRTLINE . -284,284 . mjb 1984-11-07 PM690 L A0,POUT . LMJ X11,PRTLINE . -320,320 . mjb 1984-11-07 PM750 L A0,POUT . LMJ X11,PRTLINE . -323,323 . mjb 1984-11-19 PM900 J PR600 . Back to main print routine -334,334 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -355,355 . MJB 1994-08-05 Utilize MFDSP$ to get items LMJ X11,DIRNSEC$ . Request desired sector -380 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer J HDG200 . Go print heading *QF -18/15,15 INFO1 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 -18/22 INFO1L EQU $-INFO1 . LENGTH OF 1ST ER INFO$ PKT . 8.4.2 INFO2 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 + 2,FITEM . INTERNAL NAME . 8.4.2 -18/29,29 INFO2L EQU $-INFO2 . LENGTH OF 2ND ER INFO$ PKT . 8.4.2 -19,30 -152/0,2 . 8.4.2 LA A0,(INFO1L,INFO1) . ER INFO$ . . 8.4.2 L,U A0,1 . . 8.4.2 TOP A0,INEQUIP . . 8.4.2 J NOTTAPE . . 8.4.2 LA A0,(INFO2L,INFO2) . . 8.4.2 ER INFO$ . . 8.4.2 NOTTAPE . . 8.4.2 -508,508 . MJB 08-08-83 L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY DONE? -528,528 . MJB 08-08-83 TNZ MSBUF,A1 . ANY OF THESE DISCS CONFIGURED? -531,532 . MJB 08-08-83 L,H1 X3,MSBUF,A1 . YES, GET LINK TO STATUS TABLE A,U X3,MSBUF . X3 = ABS LOC OF STATUS TBL IN FATBL *SNAP -227,227 . mjb 1984-11-19 J PR990 . Return to print routine *SORTER -31 . MJB 08-08-83 FTM . . + $SS($CFS(DGFILE),1,12). RES 11 . FTMPKT + 0377777,FTM . . -34 . MJB 08-08-83 L A0,FTMPKT . ER FITEM$ . GET FILE INFO TNZ,S1 FTM+6 . FILE ASSIGNED? J USEEST . NO, USE ESTIMATED SIZE L,H1 A1,FTM+9 . GET HIGH TRK REF L,H1 A0,FTM+9 . GET HIGH TRK REF SSL A1,2 . A A0,A1 . GIVES HT + 25% MSI,U A0,+(1792/28) . Assume 64 items per track L A1,A0 . PUT IN A1 + 1/2 SSL A1,1 . DIV BY 2 S A1,NREC . SAVE J COMM . JUMP TO COMMON CODE USEEST . . -35 . MJB 08-08-83 COMM . . -44,48 *SORTF -1 $INCLUDE 'MFDDEF' . DEFINE FATBL BUFFER SIZE . MJB 07-83 -27- /F40/F33/ . MJB 07-83 -33,33 . MJB 1995-Dec-11 XBMAX EQU 530 . MAX XB SIZE, ANY ASG TYPE -35,35 -82,98 . MJB 08-08-83 -203,203 . MJB 08-08-83 MAVCHK L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY PERFORMED? -207,207 . MJB 1988-07-13 Fix track accum for size check -210,220 . MJB 1988-07-13 Fix track accum for size check L,U A1,MSBUF . Point at the buffer start L A3,(1,MSBUF+1) . Point at 1st entry in EIT TRKLP . . Accumulate avail fixed trks L,H2 A0,0,*A3 . Get rel addr of EST A,U A0,0,A1 . Make addr absolute A A10,3,A0 . Add in # fixed tracks avail JGD A2,TRKLP . Continue L A1,A10 . Get total fixed avail SSL A1,6 . Convert to positions for test *USERDOC -1,18 MFD - MASTER FILE DIRECTORY PROCESSOR SPACE 18 ************************************************ * * * * * MASTER FILE DIRECTORY PROCESSOR * * * * USER'S GUIDE * * * * LEVEL 8.4 * * 04/24/79 * * * ************************************************ COLUMN 2 @ELT,SIQ TPF$.TCF/07-13-88,,,131566071530,001 *DIREC$ -91,91- /01400/9000 / -100,100- /16/64/ -153,153- DIREC$ /2000/5000/ -264 . mjb 1984-12-06 changes for level 39 exec FITMBUF $RES 13 . FITEM$ buffer FITMSIZ $EQU $LCV-FITMBUF . Buffer size FITMPKT + 0377777,FITMBUF. -397,397 . mjb 1984-12-06 changes for level 39 exec J CKONASG . no, skip setting of flags -407 . mjb 1984-12-06 changes for level 39 exec CKONASG . . L A0,FITMPKT . Get FITEM$ packet L,U A1,FITMSIZ-1 . and Length LXI,U A0,1 . Set increment SZ 0,*A0 . Clear packet JGD A1,$LCV-1 . DL A1,MSPKT+1 . Get DGET file filename L A0,FITMPKT . Get FITEM$ packet DS A1,0,A0 . Put filename in FITEM$ packet ER FITEM$ . Get file info L,S1 A1,6,A0 . Get equip type JNZ A1,RERUN . if not 0, file asg'd -691,691 -747,747 . MJB 1988-02-11 Adjust for security wds L,U A0,LBUF+11 . Get address of 1st link A,S4 A0,LBUF+10 . Adjust for security wds LXI,U A0,1 . Set incr -907,907 . MJB 1988-02-11 Adjust for security wds L,U A0,LBUF+11 . Get address of 1st link A,S4 A0,LBUF+10 . Adjust for security wds LXI,U A0,1 . Set incr *HDG -81 . mjb 1984-11-19 L,U A0,P4L . Get length of page heading S A0,LINECOUNT . Initialize line counter -92,92 . mjb 1984-11-19 L,U A0,P4L . Total page heading length L A1,HDGRTN . Get Return address S A0,LINECOUNT . Reset line count J 0,A1 . Return *INIT1 -299,302 . mjb 1984-11-07 MCTPKT + 10,IDTBL . MCT packet to obtain system id + IDTBLL,0 . + 0 . IDTBL $RES 15 . Space for MCT system id table IDTBLL $EQU $LCV-IDTBL . . SITE $EQUF IDTBL+4 . Position of site id . SITMSG 'SITE:'L . -377,379 . mjb 1984-11-07 E$FD1 SITE . Get Site-id *INIT2 -97,97 . mjb 1984-11-19 L$OAD CHEKPRTSG,SN900,1 . Jump to SNAP$ routine -219,219 . mjb 1984-11-19 IN2170 L$OAD CHEKPRTSG,HDG100,1 . Jump to heading routine *MFD -3 . mjb 1984-11-07 . The following two cells are for the heading routine. . They control the start and return of the heading printing . LINECOUNT* + 0 . detail lines printed HDGRTN* + 0,0 . Caller flag, Return point . -74 . MJB 08-08-83 MSBUF* RES FATSIZ . MSALL BUFFER MSALLPKT* + 1,MSALL$ . + FATSIZ,MSBUF . + 0 . + 0 . + 0 . -475,475/9,9 . mjb 1984-11-19 L$OAD CHEKPRTSG,SN900,1 . Load SNAP$ routine *MFDDEF -52- . 1988-02-11 MJB Approx. files 50K / 6/50/ . APPROX FILES 50K 1988-02-11 MJB -84- . MJB 7-83 /0/1/ . MJB 7-83 -89,92 . mjb 1984-11-07 LPP $EQU 75 . Printable lines per page . Including heading . -113- . MJB 7-83 /OUT$$$/$MFD$ / . MJB 7-83 -145- . MJB 7-83 /300 /2000/ . BIG FATBL -158- . MJB 7-83 /!/=/ . MJB 7-83 -164- . MJB 7-83 /^/$/ . MJB 7-83 -166- . MJB 7-83 /SYS$ /INSTALLATION/ . MJB 7-83 -296 . MJB 08-08-83 . . DEFINE MSALL PACKET POINTERS . LNFAT $EQUF MSALLPKT+2,,H1 . LENGTH OF TABLES RET MSBEG $EQUF MSALLPKT+3,,H1 . MSEND $EQUF MSALLPKT+3,,H2 . DSCBEG $EQUF MSALLPKT+4,,H1 . DSCEND $EQUF MSALLPKT+4,,H2 . *MFDMAP -3,3 Equ LocLev/4 . Not C$sname . Type BlockSize64 . -8,9 . mjb 1984-11-19 -13,15 . mjb 1984-11-19 in Hdg,Check,Print,Print2,Snap -18,18 . mjb 1984-11-20 Seg Qfseg,(Chekprtsg,Totseg) -20,20 . mjb 1984-11-20 Dseg Dirseg,(Chekprtsg,Totseg) -25,26 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ -31,32 . mjb 1984-11-19 -36,38 . mjb 1984-11-19 in Hdg,Check,Print,Print2,Snap -41,41 . mjb 1984-11-20 Seg Qfseg,(Chekprtsg,Totseg) -43,43 . mjb 1984-11-20 Dseg Dirseg,(Chekprtsg,Totseg) -48,49 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ *PRINT -230,230 . mjb 1984-11-19 L,U A0,PR0095 . Get return address S A0,HDGRTN . Save J HDG200 . Go print heading -569,569 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -629,629 . mjb 1984-11-19 PR530 J PMORE . Print more info -668,668 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -688,688 . mjb 1984-11-07 PR640 . . L A0,POUT . LMJ X11,PRTLINE . -696,696 . mjb 1984-11-19 J SN000 . Jump to SNAP$ routine -709 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer J HDG200 . Go print heading *PRINT2 -59,59 . mjb 1984-11-07 PM110 L A0,POUT . LMJ X11,PRTLINE . -102,102 . mjb 1984-11-07 PM230 L A0,POUT . LMJ X11,PRTLINE . -131,131 . mjb 1984-11-07 PM320 L A0,POUT . LMJ X11,PRTLINE . -165,165 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -228,228 . mjb 1984-11-07 PM620 L A0,POUT . LMJ X11,PRTLINE . -252/0,0/252,252 L A0,POUT . LMJ X11,PRTLINE . -284,284 . mjb 1984-11-07 PM690 L A0,POUT . LMJ X11,PRTLINE . -320,320 . mjb 1984-11-07 PM750 L A0,POUT . LMJ X11,PRTLINE . -323,323 . mjb 1984-11-19 PM900 J PR600 . Back to main print routine -334,334 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -380 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer J HDG200 . Go print heading *QF -18/15,15 INFO1 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 -18/22 INFO1L EQU $-INFO1 . LENGTH OF 1ST ER INFO$ PKT . 8.4.2 INFO2 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 + 2,FITEM . INTERNAL NAME . 8.4.2 -18/29,29 INFO2L EQU $-INFO2 . LENGTH OF 2ND ER INFO$ PKT . 8.4.2 -19,30 -152/0,2 . 8.4.2 LA A0,(INFO1L,INFO1) . ER INFO$ . . 8.4.2 L,U A0,1 . . 8.4.2 TOP A0,INEQUIP . . 8.4.2 J NOTTAPE . . 8.4.2 LA A0,(INFO2L,INFO2) . . 8.4.2 ER INFO$ . . 8.4.2 NOTTAPE . . 8.4.2 -508,508 . MJB 08-08-83 L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY DONE? -528,528 . MJB 08-08-83 TNZ MSBUF,A1 . ANY OF THESE DISCS CONFIGURED? -531,532 . MJB 08-08-83 L,H1 X3,MSBUF,A1 . YES, GET LINK TO STATUS TABLE A,U X3,MSBUF . X3 = ABS LOC OF STATUS TBL IN FATBL *SNAP -227,227 . mjb 1984-11-19 J PR990 . Return to print routine *SORTER -31 . MJB 08-08-83 FTM . . + $SS($CFS(DGFILE),1,12). RES 11 . FTMPKT + 0377777,FTM . . -34 . MJB 08-08-83 L A0,FTMPKT . ER FITEM$ . GET FILE INFO TNZ,S1 FTM+6 . FILE ASSIGNED? J USEEST . NO, USE ESTIMATED SIZE L,H1 A1,FTM+9 . GET HIGH TRK REF L,H1 A0,FTM+9 . GET HIGH TRK REF SSL A1,2 . A A0,A1 . GIVES HT + 25% MSI,U A0,+(1792/28) . Assume 64 items per track L A1,A0 . PUT IN A1 + 1/2 SSL A1,1 . DIV BY 2 S A1,NREC . SAVE J COMM . JUMP TO COMMON CODE USEEST . . -35 . MJB 08-08-83 COMM . . -44,48 *SORTF -1 $INCLUDE 'MFDDEF' . DEFINE FATBL BUFFER SIZE . MJB 07-83 -27- /F40/F33/ . MJB 07-83 -35,35 -82,98 . MJB 08-08-83 -203,203 . MJB 08-08-83 MAVCHK L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY PERFORMED? -207,207 . MJB 1988-07-13 Fix track accum for size check -210,220 . MJB 1988-07-13 Fix track accum for size check L,U A1,MSBUF . Point at the buffer start L A3,(1,MSBUF+1) . Point at 1st entry in EIT TRKLP . . Accumulate avail fixed trks L,H2 A0,0,*A3 . Get rel addr of EST A,U A0,0,A1 . Make addr absolute A A10,3,A0 . Add in # fixed tracks avail JGD A2,TRKLP . Continue L A1,A10 . Get total fixed avail SSL A1,6 . Convert to positions for test *USERDOC -1,18 MFD - MASTER FILE DIRECTORY PROCESSOR SPACE 18 ************************************************ * * * * * MASTER FILE DIRECTORY PROCESSOR * * * * USER'S GUIDE * * * * LEVEL 8.4 * * 04/24/79 * * * ************************************************ COLUMN 2 @ELT,SIQ TPF$.TCF/08-20-86,,,172107102426,001 *DIREC$ -91,91- /01400/9000 / -100,100- /16/64/ -153,153- DIREC$ /2000/5000/ -264 . mjb 1984-12-06 changes for level 39 exec FITMBUF $RES 13 . FITEM$ buffer FITMSIZ $EQU $LCV-FITMBUF . Buffer size FITMPKT + 0377777,FITMBUF. -397,397 . mjb 1984-12-06 changes for level 39 exec J CKONASG . no, skip setting of flags -407 . mjb 1984-12-06 changes for level 39 exec CKONASG . . L A0,FITMPKT . Get FITEM$ packet L,U A1,FITMSIZ-1 . and Length LXI,U A0,1 . Set increment SZ 0,*A0 . Clear packet JGD A1,$LCV-1 . DL A1,MSPKT+1 . Get DGET file filename L A0,FITMPKT . Get FITEM$ packet DS A1,0,A0 . Put filename in FITEM$ packet ER FITEM$ . Get file info L,S1 A1,6,A0 . Get equip type JNZ A1,RERUN . if not 0, file asg'd -691,691 *HDG -81 . mjb 1984-11-19 L,U A0,P4L . Get length of page heading S A0,LINECOUNT . Initialize line counter -92,92 . mjb 1984-11-19 L,U A0,P4L . Total page heading length L A1,HDGRTN . Get Return address S A0,LINECOUNT . Reset line count J 0,A1 . Return *INIT1 -299,302 . mjb 1984-11-07 MCTPKT + 10,IDTBL . MCT packet to obtain system id + IDTBLL,0 . + 0 . IDTBL $RES 15 . Space for MCT system id table IDTBLL $EQU $LCV-IDTBL . . SITE $EQUF IDTBL+4 . Position of site id . SITMSG 'SITE:'L . -377,379 . mjb 1984-11-07 E$FD1 SITE . Get Site-id *INIT2 -97,97 . mjb 1984-11-19 L$OAD CHEKPRTSG,SN900,1 . Jump to SNAP$ routine -219,219 . mjb 1984-11-19 IN2170 L$OAD CHEKPRTSG,HDG100,1 . Jump to heading routine *MFD -3 . mjb 1984-11-07 . The following two cells are for the heading routine. . They control the start and return of the heading printing . LINECOUNT* + 0 . detail lines printed HDGRTN* + 0,0 . Caller flag, Return point . -74 . MJB 08-08-83 MSBUF* RES FATSIZ . MSALL BUFFER MSALLPKT* + 1,MSALL$ . + FATSIZ,MSBUF . + 0 . + 0 . + 0 . -475,475/9,9 . mjb 1984-11-19 L$OAD CHEKPRTSG,SN900,1 . Load SNAP$ routine *MFDDEF -52- / 6/10/ . APPROX FILES 10K -84- . MJB 7-83 /0/1/ . MJB 7-83 -89,92 . mjb 1984-11-07 LPP $EQU 75 . Printable lines per page . Including heading . -113- . MJB 7-83 /OUT$$$/$MFD$ / . MJB 7-83 -145- . MJB 7-83 /300 /2000/ . BIG FATBL -158- . MJB 7-83 /!/=/ . MJB 7-83 -164- . MJB 7-83 /^/$/ . MJB 7-83 -166- . MJB 7-83 /SYS$ /INSTALLATION/ . MJB 7-83 -296 . MJB 08-08-83 . . DEFINE MSALL PACKET POINTERS . LNFAT $EQUF MSALLPKT+2,,H1 . LENGTH OF TABLES RET MSBEG $EQUF MSALLPKT+3,,H1 . MSEND $EQUF MSALLPKT+3,,H2 . DSCBEG $EQUF MSALLPKT+4,,H1 . DSCEND $EQUF MSALLPKT+4,,H2 . *MFDMAP -3,3 EQU LOCLEV/3 not c$sname TYPE BLOCKSIZE64 . -8,9 . mjb 1984-11-19 -13,15 . mjb 1984-11-19 in Hdg,Check,Print,Print2,Snap -18,18 . mjb 1984-11-20 Seg Qfseg,(Chekprtsg,Totseg) -20,20 . mjb 1984-11-20 Dseg Dirseg,(Chekprtsg,Totseg) -25,26 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ -31,32 . mjb 1984-11-19 -36,38 . mjb 1984-11-19 in Hdg,Check,Print,Print2,Snap -41,41 . mjb 1984-11-20 Seg Qfseg,(Chekprtsg,Totseg) -43,43 . mjb 1984-11-20 Dseg Dirseg,(Chekprtsg,Totseg) -48,49 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ *PRINT -230,230 . mjb 1984-11-19 L,U A0,PR0095 . Get return address S A0,HDGRTN . Save J HDG200 . Go print heading -569,569 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -629,629 . mjb 1984-11-19 PR530 J PMORE . Print more info -668,668 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -688,688 . mjb 1984-11-07 PR640 . . L A0,POUT . LMJ X11,PRTLINE . -696,696 . mjb 1984-11-19 J SN000 . Jump to SNAP$ routine -709 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer J HDG200 . Go print heading *PRINT2 -59,59 . mjb 1984-11-07 PM110 L A0,POUT . LMJ X11,PRTLINE . -102,102 . mjb 1984-11-07 PM230 L A0,POUT . LMJ X11,PRTLINE . -131,131 . mjb 1984-11-07 PM320 L A0,POUT . LMJ X11,PRTLINE . -165,165 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -228,228 . mjb 1984-11-07 PM620 L A0,POUT . LMJ X11,PRTLINE . -252/0,0/252,252 L A0,POUT . LMJ X11,PRTLINE . -284,284 . mjb 1984-11-07 PM690 L A0,POUT . LMJ X11,PRTLINE . -320,320 . mjb 1984-11-07 PM750 L A0,POUT . LMJ X11,PRTLINE . -323,323 . mjb 1984-11-19 PM900 J PR600 . Back to main print routine -334,334 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -380 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer J HDG200 . Go print heading *QF -18/15,15 INFO1 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 -18/22 INFO1L EQU $-INFO1 . LENGTH OF 1ST ER INFO$ PKT . 8.4.2 INFO2 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 + 2,FITEM . INTERNAL NAME . 8.4.2 -18/29,29 INFO2L EQU $-INFO2 . LENGTH OF 2ND ER INFO$ PKT . 8.4.2 -19,30 -152/0,2 . 8.4.2 LA A0,(INFO1L,INFO1) . ER INFO$ . . 8.4.2 L,U A0,1 . . 8.4.2 TOP A0,INEQUIP . . 8.4.2 J NOTTAPE . . 8.4.2 LA A0,(INFO2L,INFO2) . . 8.4.2 ER INFO$ . . 8.4.2 NOTTAPE . . 8.4.2 -508,508 . MJB 08-08-83 L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY DONE? -528,528 . MJB 08-08-83 TNZ MSBUF,A1 . ANY OF THESE DISCS CONFIGURED? -531,532 . MJB 08-08-83 L,H1 X3,MSBUF,A1 . YES, GET LINK TO STATUS TABLE A,U X3,MSBUF . X3 = ABS LOC OF STATUS TBL IN FATBL *SNAP -227,227 . mjb 1984-11-19 J PR990 . Return to print routine *SORTER -31 . MJB 08-08-83 FTM . . + $SS($CFS(DGFILE),1,12). RES 11 . FTMPKT + 0377777,FTM . . -34 . MJB 08-08-83 L A0,FTMPKT . ER FITEM$ . GET FILE INFO TNZ,S1 FTM+6 . FILE ASSIGNED? J USEEST . NO, USE ESTIMATED SIZE L,H1 A1,FTM+9 . GET HIGH TRK REF L,H1 A0,FTM+9 . GET HIGH TRK REF SSL A1,2 . A A0,A1 . GIVES HT + 25% MSI,U A0,+(1792/28)/4 . Assume 4 items per file L A1,A0 . PUT IN A1 + 1/2 SSL A1,1 . DIV BY 2 S A1,NREC . SAVE J COMM . JUMP TO COMMON CODE USEEST . . -35 . MJB 08-08-83 COMM . . -44,48 *SORTF -1 $INCLUDE 'MFDDEF' . DEFINE FATBL BUFFER SIZE . MJB 07-83 -27- /F40/F33/ . MJB 07-83 -35,35 -82,98 . MJB 08-08-83 -203,203 . MJB 08-08-83 MAVCHK L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY PERFORMED? *USERDOC -1,18 MFD - MASTER FILE DIRECTORY PROCESSOR SPACE 18 ************************************************ * * * * * MASTER FILE DIRECTORY PROCESSOR * * * * USER'S GUIDE * * * * LEVEL 8.4 * * 04/24/79 * * * ************************************************ COLUMN 2 @ELT,SIQ TPF$.TCF/ISD,,,012756071215,001 *. ISD'S LOCAL CODE TCF FOR @MFD LEVEL 8.XX *. *MFDDEF -60,60 MFDDEF DSGUNL EQU 1 SET NON-ZERO TO DISGUISE THE -84,84 MFDDEF MULTISYS EQU 1 MULTIPLE-SYSTEM FLAG -152,155 MFDDEF PRVOPS EQU 0 SET FOR NO PRIVILEGED OPTIONS -318 MFDDEF RRANGE EQUF LI0+10,,S5 ISD PRIVACY: READ RANGE RANGEBIT EQU 040 SET IF NEW-FORMAT PRIVACY WRANGE EQUF LI0+10,,S6 ISD PRIVACY: WRITE RANGE -417 MFDDEF . . DEFINE PRIVILEGE BUFFER FIELDS . PRIVS* PROC . . $LEVEL 0,1,0 . externalize the symbols . PRIV$PID1 EQUF PRIVBUF+0 PRIVACY-ID #1 PRIV$PID2 EQUF PRIVBUF+2 PRIVACY-ID #2 UACCNT EQUF PRIVBUF+4 ACCT FOR ACCOUNT MATCH CHECK URANGES EQUF PRIVBUF+10 RANGES WORD URRANGE EQUF URANGES,,S1 READ RANGE UWRANGE EQUF URANGES,,S2 WRITE RANGE UPRRANGE EQUF URANGES,,S3 PUBLIC READ RANGE UPWRANGE EQUF URANGES,,S4 PUBLIC WRITE RANGE UCRANGE EQUF URANGES,,S5 CREATE RANGE UARANGE EQUF URANGES,,S6 ACCOUNT CHECK RANGE . END . *MFDMAP . SO THAT 'LIST TCF' WILL LIST IT *CHECK -3 CHECK PRIVS . PRIVILEGE BUFFER EQUATE -33,39 CHECK . . WE NOW ASSUME THAT THE EXEC HAS PERFORMED ALL NECESSARY . CENSORING. ANY FILE WHICH THIS RUN CANNOT ACCESS HAS HAD ITS . QUALIFIER AND FILENAME SLASHED OUT. . LA A0,FILE PICK UP LEAD ITEM FILENAME TNE A0,('//////') CENSORED? J GALI YES, SKIP THIS FILE ALTOGETHER -253 CHECK /. CHECK LEAD ITEM PRIVACY/PROJECT VS. MY PRIVACY/PROJECT . ppopt* LA,S1 A0,PROJ GET 1ST CHAR OF PRIVACY-ID TLE,U A0,'0' NUMERIC? J OLDPROJ NO, MUST BE OLD FORMAT LA,S6 A0,PROJ GET 6TH CHAR OF PRIVACY-ID TG,U A0,'0' NUMERIC? J OLDPROJ YES, IT'S OLD PRIVACY . RNGCHK EQU 0 SET TO 0 IF FULL DTE WANTED . ON RNGCHK LA,U A1,PRIV$PID1 NO, GET MY PRIVACY-ID #1 LMJ X11,RANGECHECK MATCH? OFF RNGCHK ON RNGCHK=0 DL A9,PRIV$PID1 GET PRIVACY-ID #1 DTE A9,,X7 MATCH PRIVACY-ID IN LEAD ITEM? OFF RNGCHK=0 J $+2 NO, CHECK USING PRIVACY-ID #2 J CHK001 YES, GET MAIN ITEM TNZ PRIV$PID2 ANY PRIVACY-ID #2? J GALI NO, SKIP THIS FILE ON RNGCHK LA,U A1,PRIV$PID2 YES, POINT TO IT LMJ X11,RANGECHECK MATCH? OFF RNGCHK ON RNGCHK=0 DL A9,PRIV$PID2 GET PRIVACY-ID #2 DTE A9,,X7 MATCH PRIVACY-ID IN LEAD ITEM? OFF RNGCHK=0 J GALI NO, SKIP THIS FILE J CHK001 YES, GET MAIN ITEM . OLDPROJ DL A0,PCT+023 GET ACCOUNT FROM PCT DTE A0,0,X7 ACCT = PROJ IN LEAD ITEM?? J GALI NO, SKIP THIS FILE J CHK001 YES, GET MAIN ITEM . OLDACCT LA A0,PCT+023 GET MAJOR ACCOUNT FROM PCT TE A0,0,X7 MAJOR ACCT = WD1 OF PROJ? J CHK001 NO, GET NEXT MAIN ITEM J GBU YES, GO ON . . CHECK MAIN ITEM ACCOUNT VS. MY ACCOUNT . aaopt* LA,S1 A0,ACCOUNT GET 1ST CHAR OF ACCOUNT TLE,U A0,'0' NUMERIC? J OLDACCT NO, MUST BE OLD FORMAT LA,S6 A0,ACCOUNT GET 6TH CHAR OF MI0 ACCT TG,U A0,'0' NUMERIC? J OLDACCT YES, IT'S IN OLD FORMAT LA,U A1,UACCNT NO, POINT TO MY ACCOUNT LMJ X11,RANGECHECK MATCH? J CHK001 NO, GET NEXT MAIN ITEM J GBU YES, GO ON /. RANGECHECK - DOUBLE TEST EQUAL OF N CHARACTERS . . ENTER VIA: LMJ X11,RANGECHECK . . . . INPUT: A1 = ADDR OF ARG1 . X7 = ADDR OF ARG2 . . DESTROYS: A0, A9, A10 . RANGECHECK. LA,U A0,12 GET MAX RANGE IN CHARS ANA A0,UARANGE SUBTRACT MY RANGE JN A0,0,X11 IF NEG, NO-MATCH RETURN MSI,U A0,6 CONVERT TO BITS ANA,U A0,36 A0=BITS IN WORD 1 TO IGNORE LA A9,0,A1 GET ITEM 1 WORD 1 LA A10,0,X7 GET ITEM 2 WORD 1 JP A0,RANGE1 IF POSITIVE, ONLY CHECK WORD 2 TE A9,A10 WORD 1 EQUAL? J 0,X11 NO, NO-MATCH RETURN LA A9,1,A1 GET ITEM 1 WORD 2 LA A10,1,X7 GET ITEM 2 WORD 2 AA,U A0,36 MAKE COUNT POSITIVE FOR WORD 2 RANGE1 . CHECK PARTIAL WORD SSL A9,,A0 SHIFT ITEM 1 SSL A10,,A0 SHIFT ITEM 2 TE A9,A10 CHECK FOR EQUALITY J 0,X11 NOT =, TAKE NO-MATCH RETURN J 1,X11 ITEMS MATCH -256,256 CHECK . QUALIFIER CHECK (AND ACCOUNT/PROJECT, WHERE SPEC WAS GIVEN) *HDG -65,66- HDG /G /G P/ /BACKUP TAPE CREATED /RIVACY ----- BACKUP -----/ -69,69 HDG ' ACCOUNT PRIVACY-ID DATE ' -70,70- HDG /UMBER POS BLK/R - W TAPE / *INIT1 -92 INIT1 JDES 'F1 ' 1 24 JSPECIAL . SPECIAL (T1-T2) F1 EQU 016 SPECIAL J-DESIGNATOR -164,164 INIT1 G0 'PID',W,DTE,5 'ALPHA' . ISD PRIVACY: PRIVACY-ID G0,TBNUM 'RRA',S5,TE,10 . ISD PRIVACY: READ RANGE G0,TBNUM 'WRA',S6,TE,10 . ISD PRIVACY: WRITE RANGE G0 'RAN',S5,TOP,10 RANGEBIT . ISD PRIVACY: NEW-FORMAT -165 init1 G1 'USE',W,DTE,5 'ALPHA' . USER NAME OF CREATOR -166 INIT1 G1,TBFD 'MAJ',W,TE,7 'ALPHA' . MAJOR ACCOUNT ONLY G1,TBFD 'CUS',F1,TE,7 'ALPHA' . CUSTOMER NUMBER G1,TBFD 'CST',F1,TE,7 'ALPHA' . CUSTOMER NUMBER G1 'DIV',T3,TE,7 'ALPHA' . DIVISION CODE G1 'OWN',W,TE,8 'ALPHA' . OWNER (SUBACCOUNT OR USERNAME) -836 INIT1 LA A1,TB4SPEC,X9 PICK UP FILENAME TE,U A1,'CUS' EITHER FORM OF CUSTOMER NUMBER? TNE,U A1,'CST' J $+2 YES, HANDLE IT J IN1491 NO, GO ON LA,U A3,4 GET MAX # OF CHARS IN CUST NUMBER TLE,S1 A3,ELT$+1 DID USER SPECIFY MORE THAN THAT? LMJ X10,SPECER YES, SPEC ERROR ANA,S1 A3,ELT$+1 NO, CALCULATE HOW MANY 0'S TO ADD MSI,U A3,6 CONVERT TO # OF BITS LA A1,('000000') SET TO PREFACE WITH FD ZEROES DSL A1,0,A3 ADD PROPER # OF 0'S TO CUST NUMBER IN1491 . *INIT2 -83 INIT2 LA A0,(16,PACHY) GET PACHYDERM$ PACKET ER PACHYDERM$ RETRIEVE PRIVILEGE BUFFER TP A0 DID THAT GO OK? ER EABT$ NO -304 INIT2 TZ,S1 MFD$+1 WAS A SPEC GIVEN? J IN2270 YES, GO ON SR R15,LIOPT NO, BUT IT'S STILL A LI CHECK LX,U X9,PPOPT SET PRIMARY ATTRIBUTE ROUTINE J IN2430 GO KICK OFF DIREC$ -311 INIT2 TZ,S1 MFD$+1 ANYTHING IN SPEC FIELD? J IN2290 YES, USE IT LX,U X9,AAOPT NO, SET FOR MY-ACCT CHECK J IN2430 AND KICK OFF DIREC$ -323,332 INIT2 -335,340 INIT2 *MFD -33 MFD PACHY* 'PRIVS ' ER PACHYDERM$ BUFFER PRIVBUF* RES 16 PRIVILEGE BUFFER *PRINT -64 PRINT . . THE 'RANGE' PROC IS USED TO GENERATE A TABLE OF ABBREVIATIONS . FOR THE PRIVACY RANGE MNEMONICS. THE 'PRINT' ROUTINE WILL DISPLAY . THE 3-CHARACTER MNEMONIC IN H1 OF THE APPROPRIATE TABLE ENTRY, . AS PART OF THE STANDARD ONE-LINE SUMMARY OF INFORMATION. . . THE FIRST CHARACTER OF EACH MNEMONIC SHOULD BE UNIQUE, SINCE THE . 'NONSTD' PROC USES THIS CHARACTER, APPENDING '-N' FOR THE . NUMBER OF CHARACTERS IN THE NON-STANDARD PRIVACY RANGE. . P PROC *2 ONE-PASS PROC NONSTD* NAME . A(0) EQU (P(1,1)*/-12)*/12 ISOLATE FIRST CHAR OF MNEMONIC A(1) EQU +'-0'+P(2,1) GENERATE '-N' + A(0)+A(1),0 GENERATE 'X-N' RANGE MNEMONIC END . . . RNG(0) EQU 0 INITIALIZE COUNTER P PROC *2 ONE-PASS PROC RANGE* NAME . . . CALL: RANGE '3-CHARS' STANDARD-RANGE-IN-CHARS . I DO P(2,1)-RNG(0) , NONSTD P(1,1) I GENERATE AS MANY 'NON-STANDARD' . ENTRIES AS NECESSARY + P(1,1),0 AND THE 'STANDARD' ENTRY RNG*(0) EQU P(2,1)+1 BUMP THE COUNTER END . . RANGES . RANGE 'ANY' 0 ANYBODY RANGE 'CST' 4 CUSTOMER RANGE 'DIV' 6 DIVISION RANGE 'OWN' 12 OWNER (FULL 12 CHARS) RANGE 'NO ' 13 NOBODY RANGEMAX EQU $-RANGES LENGTH OF RANGE TABLE RANGE,1 '???' RANGEMAX SPECIAL ENTRY: UNKNOWN RANGE . -252 PRINT TZ RRANGE NEW FORMAT PRIVACY? J PR045 YES, IGNORE P-BIT -254,254- PRINT / /PR045/ -399,417 PRINT E$COL 31 MOVE OVER TO EDIT HIGHEST TRK TN DESCFLAGS IS FILE UNLOADED? J PR160 NO, EDIT NORMALLY ON DSGUNL TZ PRIVLGD YES, IS USER PRIVILEGED? J PR155 YES, LET HIM KNOW SZ A0 NO, DISGUISE UNLOADED STATUS E$DECF 4 BY HIGHEST TRACK = 0 J PR157 NOW USE SECURE BLOCK COUNT PR155 . FOR TOTAL TRACKS OFF DSGUNL E$FD1 ('*UNL* ') INDICATE FILE IS UNLOADED PR157 E$COL 36 SET TO EDIT TOTAL TRACKS E$DECF 4,BKUPTEXT USE SECURE BLOCK COUNT J PR180 GO ON PR160 E$DECF 4,HITRACK EDIT HIGHEST TRACK E$COL 36 SET TO EDIT TOTAL TRACKS E$DECF 4,SAVESIZE EDIT TOTAL TRACKS J PR180 GO ON -469 PRINT . DEBUGPRIV EQU 1 PRINT OLD PROJECT IF NONZERO . ON DEBUGPRIV=0 TNZ RRANGE NEW-FORMAT PRIVACY? J PR195 NO, LEAVE PRIVACY FIELD BLANK OFF DEBUGPRIV=0 -472,472- PRINT / /PR195/ -478 PRINT . . EDIT ISD NEW-FORMAT PRIVACY RANGES . TNZ RRANGE NEW FORMAT PRIVACY? J PR400 NO, SKIP THIS STUFF E$COL 107 SET FOR READ RANGE LA A0,RRANGE PICK UP READ RANGE AND,U A0,037 MASK OFF 040 BIT TG,U A1,RANGEMAX UNKNOWN RANGE? LA,U A1,RANGEMAX YES, SET TO '???' E$COPY 3,RANGES,A1 EDIT RANGE MNEMONIC E$COL 111 SET FOR WRITE RANGE LA A0,WRANGE PICK UP WRITE RANGE AND,U A0,037 MASK OFF 040 BIT TG,U A1,RANGEMAX UNKNO2N RANGE? LA,U A1,RANGEMAX YES, SET TO '???' E$COPY 3,RANGES,A1 EDIT RANGE MNEMONIC PR400 E$COL 115 SET TO EDIT SECURE BACKUP TAPE -485,488 PRINT E$COPY 12,('* BAD MI 1 *') -493,497 PRINT PR420 E$FD1 ('*NONE*') NO BACKUP -509,509 PRINT -517,517 PRINT PR440 E$FD1 ('//////') SLASH OUT TAPE NUMBER -520,523 PRINT *SORTF -25,25 SORTF REMTYPE EQU 'F40' TYPE FOR REMOVABLE XB ASGS *TOTALS -12,12 TOTALS TOTM01 'TEXT TRKS&: FIXED=&' -16 TOTALS TOTM06 'TOTAL CHARGES (INCLUDES DIRECTORY ITEMS): & TRACKS&' -36,36 TOTALS BRK 'PID ' TOTPID . ISD PRIVACY: PRIVACY-ID BRK 'RRANGE ' TOTRRA . ISD PRIVACY: READ RANGE BRK 'WRANGE ' TOTWRA . ISD PRIVACY: WRITE RANGE CUSMSG BRK 'CUSTOMER-NO.' TOTFD1 . CUSTOMER NUMBER BRK 'CST ' TOTCUS . ALTERNATE FORMAT BRK 'DIVISION ' TOTDIV . DIVISION CODE BRK 'OWNER ' TOTFD1 . OWNER BRK 'MAJOR-ACCT ' TOTFD2 . MAJOR ACCT # (OLD FORMAT) BRK 'USERNAME ' TOTFD2 . USER NAME OF CREATOR -59 TOTALS RRAMSG 'READ-RANGE ' ISD PRIVACY: READ RANGE WRAMSG 'WRTIE-RANGE ' ISD PRIVACY: WRITE RANGE PIDMSG 'PRIVACY-ID ' ISD PRIVACY: PRIVACY-ID -102 TOTALS TOTPID . LX,U X10,PIDMSG POINT TO 'PRIVACY-ID' MSG J TOTFD2 AND GO ON TOTDIV . E$FD2 0,X10 EDIT MESSAGE E$SKIP 1 MOVE OVER ONE SPACE LA A0,BRKVAL,X5 GET SIGN-EXTENDED VALUE (SSSSDD) LSSL A0,24 GET RID OF SIGNS (DD@@@@) E$FD1 . EDIT INFO J TOT060 GO ON TOTRRA . LX,U X10,RRAMSG POINT TO 'READ RANGE' MSG J TOTOCTV EDIT IT TOTWRA . LX,U X10,WRAMSG POINT TO 'WRITE RANGE' MSG J TOTOCTV EDIT IT TOTCUS . LX,U X10,CUSMSG POINT TO 'CUSTOMER NUMBER' MSG J TOTFD1 EDIT IT -246 TOTALS ON DSGUNL . . THIS DIRECTORY CHARGE BUSINESS WILL ONLY WORK IF DSGUNL IS SET . E$DIT EDPACK OPEN EDIT E$MSG TOTM06 START MESSAGE LA A0,TOT GET TOTAL FIXED TRACKS AA A0,UNLTOT ADD IN UNLOADED TRACKS AA A0,PFCT ONE MORE PER FILE E$DECV . PUT IT IN LINE E$MSGR . MORE MESSAGE E$DITX . CLOSE EDIT P$RINT POUT PRINT IT OFF DSGUNL *USERDOC -81 USERDOC @MFD will only list those files which the caller may access. However, this may be thousands of files, so the primary attribute options are used to further restrict the number of files to be listed. SPACE -89,90 userdoc given as . If none was specified, the 'use range' portion of the account number on the @RUN card is assumed. -93,93 userdoc assumed qualifier -103,103 USERDOC privacy-id -105,105 userdoc privacy-id of the run is used. -108,108 USERDOC assumed qualifier) -111,113 USERDOC Z - Perform no primary attribute check. Enables listing all the files the caller may access. 4Examples COLUMN 2 For the examples below, assume the @MFD calls are in the following run: SPACE @RUN MFD,0987/TESTER,,2,100 (Account = 0987AATESTER) (Assumed qualifier = 0987) (Privacy-id = 0987AATESTER) ('Use range' = Customer) @QUAL NEW .... @MFD ..... .... @FIN SPACE and remember that only files accessable by this run will be considered for listing. SPACE COLUMN 24 @MFD,AL - Generate a long listing of all files catalogued under customer number 0987. (if 'Use range' was Owner, this would list all files catalogued under account 0987AATESTER.) SPACE @MFD,A 0999 - List all files catalogued under account 0999. The account in the master file directory must exactly match the specified account. (see C and Y-options, below). Note: since neither the S nor the L-option was specified, the assumed listing format will be used (short for demand, long for batch). SPACE @MFD,F ISD*DOC. - Will list all F-cycles of the file ISD*DOC if any exist and are accessable by this user. SPACE @MFD,F DOC. - Same as above, but for all F-cycles of the file 0987*DOC. SPACE @MFD,F *DOC. - Same as above, but for all F-cycles of NEW*DOC. SPACE @MFD,I DOC. - Same as above, but for all F-cycles of ???*DOC, where any qualifier is acceptable. SPACE @MFD,P - List all files catalogued with privacy-id 0987AATESTER. Note that 'Use range' is not used for privacy-id test: the user's privacy-id must match that of the file exactly. SPACE @MFD,P 0999 - List all files catalogued with a privacy-id of 0999. The privacy-id in the master file directory must exactly match the one which is specified. (see C and Y-options, below). SPACE @MFD,Q - List all files catalogued with the qualifier 'NEW'. (If the @QUAL had not been done, this would list all files with the qualifier '0987'. The 'Use range' is not used for qualifier checks. SPACE @MFD,Q ISD - This would list all files which are catalogued with the qualifier 'ISD'. The qualifier in the master file directory must exactly match the specified qualifier. (See C and Y-options, below). SPACE @MFD,ZB - List all files accessable by this run, sorted by qualifier, filename, and F-cycle. -118,118 USERDOC -234 USERDOC CUST - customer number (first four digits of account number) CST - same as CUST DIV - division code (fifth and sixth characters of account) OWNER - last six characters of account number PID - privacy-id USER - username of the creator of the file RRANGE - new:format privacy read range WRANGE - new-format privacy write range -237,237 userdoc -268,268 userdoc PID - same as for QUAL USER - same as for QUAL -276 USERDOC OWNER - same as for PACK CUST - value must be a 1-4 digit number. DIV - value must be a two-letter FIELDATA string. -282 userdoc RRANGE - same as for FCYCLE WRANGE - same as for FCYCLE -315 userdoc (old-format privacy only) -316 userdoc (old-format privacy only) -324 userdoc RANGE - selects files with new-format privacy -555,555 USERDOC P: Public file (for old-format privacy only) -609,610 USERDOC -667,669 USERDOC Col. 86-97 Privacy-id of the file. This field, when combined with the reqd/write privacy ranges, enables the operating system to shield files from unauthorized users. This field will be slashed out for a user who is not permitted to see it. -673,673 USERDOC Col. 108-114 Read/write privacy ranges. These fields indicate who may access the file. Read and write privacy are separate, and are listed using the following abbreviations: SPACE COLUMN 22 LENGTH -3 ANY: Anybody. CST: Users with the same 4-digit customer number. DIV: Users with the same 4-digit customer number and 2-letter division code. OWN: Users with the same twelve-character privacy-id. NO : Nobody. COLUMN 16 LENGTH +3 SPACE In the event that the privacy ranges for a particular file are not equal to the standard settings described above, the first character of the appropriate abbreviation is used, appended with the number of aharacters which are significant. For example, a range of 'DIVISION(1)' would print as 'D-1'. SPACE Col. 116,121 @SECURE backup tape number. If '*NONE*' there are no -677 USERDOC This field contains '//////' for non-privileged users. -679,683 USERDOC @ELT,SIQ TPF$.TCF/OLD,,,151114132324,001 *DIREC$ -91,91- /01400/9000 / -100,100- /16/64/ -153,153- DIREC$ /2000/5000/ -691,691 *HDG -81 . mjb 1984-11-19 L,U A0,P4L . Get length of page heading S A0,LINECOUNT . Initialize line counter -91 . mjb 1984-11-07 L,U A0,P4L . Get number of heading lines L,H1 A1,HDGRTN . Get calling flag S A0,LINECOUNT . Set new line count TZ A1 . PRINT or PRINT2? J PRT2 . PRINT2 -92 . mjb 1984-11-07 PRT2 . . L$OAD PR2SG,PRT2RTN,1 . Back to PRINT2 *INIT1 -299,302 . mjb 1984-11-07 MCTPKT + 10,IDTBL . MCT packet to obtain system id + IDTBLL,0 . + 0 . IDTBL $RES 15 . Space for MCT system id table IDTBLL $EQU $LCV-IDTBL . . SITE $EQUF IDTBL+4 . Position of site id . SITMSG 'SITE:'L . -377,379 . mjb 1984-11-07 E$FD1 SITE . Get Site-id *MFD -3 . mjb 1984-11-07 . The following two cells are for the heading routine. . They control the start and return of the heading printing . LINECOUNT* + 0 . detail lines printed HDGRTN* + 0,0 . Caller flag, Return point . -74 . MJB 08-08-83 MSBUF* RES FATSIZ . MSALL BUFFER MSALLPKT* + 1,MSALL$ . + FATSIZ,MSBUF . + 0 . + 0 . + 0 . *MFDDEF -52- / 6/10/ . APPROX FILES 10K -84- . MJB 7-83 /0/1/ . MJB 7-83 -89,92 . mjb 1984-11-07 LPP $EQU 57 . Printable lines per page . Including heading . -113- . MJB 7-83 /OUT$$$/$MFD$ / . MJB 7-83 -145- . MJB 7-83 /300 /2000/ . BIG FATBL -158- . MJB 7-83 /!/=/ . MJB 7-83 -164- . MJB 7-83 /^/$/ . MJB 7-83 -166- . MJB 7-83 /SYS$ /INSTALLATION/ . MJB 7-83 -296 . MJB 08-08-83 . . DEFINE MSALL PACKET POINTERS . LNFAT $EQUF MSALLPKT+2,,H1 . LENGTH OF TABLES RET MSBEG $EQUF MSALLPKT+3,,H1 . MSEND $EQUF MSALLPKT+3,,H2 . DSCBEG $EQUF MSALLPKT+4,,H1 . DSCEND $EQUF MSALLPKT+4,,H2 . *MFDMAP -3,3 EQU LOCLEV/3 not c$sname TYPE BLOCKSIZE64 . -25,26 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ -48,49 IN SORTER,SORTF,RDFM$,RTPM$,RSRTERR$,RSRTINT$ IN RDKM$,RINIT$,RSORT$,RUTIL$ *PRINT -229 . mjb 1984-11-07 SZ HDGRTN . Clear heading return -231 . mjb 1984-11-07 L X11,HDGRTN . Get heading return address TZ HDGRTN . Any return specified? J 0,X11 . Yes, back to where we came from -569,569 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -668,668 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -688,688 . mjb 1984-11-07 PR640 . . L A0,POUT . LMJ X11,PRTLINE . -709 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer SZ,H1 HDGRTN . Indicate PRINT call L$OAD HDGSEG,HDG200,1 . Load heading segment *PRINT2 -59,59 . mjb 1984-11-07 PM110 L A0,POUT . LMJ X11,PRTLINE . -102,102 . mjb 1984-11-07 PM230 L A0,POUT . LMJ X11,PRTLINE . -131,131 . mjb 1984-11-07 PM320 L A0,POUT . LMJ X11,PRTLINE . -165,165 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -228,228 . mjb 1984-11-07 PM620 L A0,POUT . LMJ X11,PRTLINE . -252/0,0/252,252 L A0,POUT . LMJ X11,PRTLINE . -284,284 . mjb 1984-11-07 PM690 L A0,POUT . LMJ X11,PRTLINE . -320,320 . mjb 1984-11-07 PM750 L A0,POUT . LMJ X11,PRTLINE . -334,334 . mjb 1984-11-07 L A0,POUT . LMJ X11,PRTLINE . -380 . mjb 1984-11-07 PRTLINE . . Routine to print detail line . and check for new heading. ER PRINT$ . Print it L A0,LINECOUNT . Get lines printed A,U A0,1 . Bump S A0,LINECOUNT . TLE,U A0,LPP-1 . Need heading? J 0,X11 . No, not yet SZ LINECOUNT . Yes, clear line counter S,H2 X11,HDGRTN . Save return pointer SP1,H1 HDGRTN . Indicate PRINT2 call L$OAD HDGSEG,HDG200,1 . Load heading segment PRT2RTN* . . Return point from heading L X11,HDGRTN . Get return address J 0,X11 . And go to it *QF -18/15,15 INFO1 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 -18/22 INFO1L EQU $-INFO1 . LENGTH OF 1ST ER INFO$ PKT . 8.4.2 INFO2 + INFILE$,0,0 . TELL INFO$ WHAT FILE . 8.4.2 + 2,FITEM . INTERNAL NAME . 8.4.2 -18/29,29 INFO2L EQU $-INFO2 . LENGTH OF 2ND ER INFO$ PKT . 8.4.2 -19,30 -152/0,2 . 8.4.2 LA A0,(INFO1L,INFO1) . ER INFO$ . . 8.4.2 L,U A0,1 . . 8.4.2 TOP A0,INEQUIP . . 8.4.2 J NOTTAPE . . 8.4.2 LA A0,(INFO2L,INFO2) . . 8.4.2 ER INFO$ . . 8.4.2 NOTTAPE . . 8.4.2 -508,508 . MJB 08-08-83 L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY DONE? -528,528 . MJB 08-08-83 TNZ MSBUF,A1 . ANY OF THESE DISCS CONFIGURED? -531,532 . MJB 08-08-83 L,H1 X3,MSBUF,A1 . YES, GET LINK TO STATUS TABLE A,U X3,MSBUF . X3 = ABS LOC OF STATUS TBL IN FATBL *SORTER -31 . MJB 08-08-83 FTM . . + $SS($CFS(DGFILE),1,12). RES 11 . FTMPKT + 0377777,FTM . . -34 . MJB 08-08-83 L A0,FTMPKT . ER FITEM$ . GET FILE INFO TNZ,S1 FTM+6 . FILE ASSIGNED? J USEEST . NO, USE ESTIMATED SIZE L,H1 A1,FTM+9 . GET HIGH TRK REF L,H1 A0,FTM+9 . GET HIGH TRK REF SSL A1,2 . A A0,A1 . GIVES HT + 25% LSSL A0,6 . CONVERT TO SECTORS SSL A0,2 . DIV BY 4 L A1,A0 . PUT IN A1 + 1/2 SSL A1,1 . DIV BY 2 S A1,NREC . SAVE J COMM . JUMP TO COMMON CODE USEEST . . -35 . MJB 08-08-83 COMM . . -44,48 *SORTF -1 $INCLUDE 'MFDDEF' . DEFINE FATBL BUFFER SIZE . MJB 07-83 -27- /F40/F33/ . MJB 07-83 -35,35 -82,98 . MJB 08-08-83 -203,203 . MJB 08-08-83 MAVCHK L,U A0,MSALLPKT . TNZ LNFAT . MSALL ALREADY PERFORMED? *USERDOC -1,18 MFD - MASTER FILE DIRECTORY PROCESSOR SPACE 18 ************************************************ * * * * * MASTER FILE DIRECTORY PROCESSOR * * * * USER'S GUIDE * * * * LEVEL 8.4 * * 04/24/79 * * * ************************************************ COLUMN 2 @ELT,DSI TPF$.TEST,,,155746140215,001 @BK1 @SSG,W MAINTSKEL,,,,,,SGS/1,DESCRIBE,PCF/1,PCF SGS PROGRAM @MFD . LEVEL 8,4 BASLEV,UPDLEV MFDMAP ''-1,2'' MAP MFDMAP MAP,B MFD . HOW TO CREATE @MFD ABSOLUTE SELECT DESCRIBE . SOURCE OF ELEMENT NAMES LIST ALL,SHORT . WHAT TO LIST, AND HOW PO TPF$ . BASE AND LATEST PROCS IN TPF$ PROCESSOR MASM,'NO',E,SEV,LEV ASM MASM . USE MASM FOR ASSEMBLIES @EOF @BK2,E @END @ELT,SI TPF$.THISGEN,,,112503132424,001 PROGRAM @MFD . LEVEL 8,5 BASLEV,UPDLEV MFDMAP ''-1,2'' PROCESSOR MASM,'NO',E,SWEVY,LWEVY ASM MASM . USE MASM FOR ASSEMBLIES MAP MFDMAP MAP,BW MFD . HOW TO CREATE @MFD ABSOLUTE PROCESSOR MAP,'NO','NO',L,L MAP,SI,AO,SO MAP SELECT DESCRIBE . SOURCE OF ELEMENT NAMES LIST ALL,SHORT . WHAT TO LIST, AND HOW PO NEWSI . BASE AND LATEST PROCS IN NEWSI @ELT,SI TPF$.TOTALS,,,135606072623,023 . @MFD SUMMARY PRINTING ROUTINE . . CALLED AT TERMINATION UNLESS SINGLE-FILE MODE IS SET. . ALSO CALLED BY 'PRINT' ROUTINE IF THE 'BREAK' FEATURE IS TURNED ON . AND THE NEW FILE DIFFERS FROM THE PREVIOUS FILE IN THE SPECIFIED WAY. . IN THAT CASE, WE PRINT EACH LEVEL OF SUBTOTALS UP TO THE LEVEL AT . WHICH THE BREAK OCCURRED. . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMETERS EQUFS . DEFINE TAGS TOTM01 'TRKS&: FIXED=&' TOTAL FIXED STORAGE ON-LINE TOTM02 ' REMOV=& V-OPT=& G-OPT=&' TOTM03 ' TOTAL BACKUP TAPE BLOCKS=&' TOTM04 'FILES: TOTAL=&' TOTAL FILES PRINTED TOTM05 ' TAPES=&' TOTAL CAT'D TAPES PRINTED ON DSGUNL UNL ' UNL=& TOTAL=&' OFF DSGUNL PRT FORM 12,6,18 PRINT$ FORM ON BRKOK GRAND 'GRAND TOTALS:' FOR GRAND TOTALS GRANDP PRT 2,$-GRAND,GRAND TOTALS 'TOTALS FOR &' NON 'NON-&' WHAT '?? ' . P PROC 2 BRK* NAME . + P(1,1) J P(2,1) END . TOTTAB BRK 'QUALIFIER ' TOTFD2 BRK 'FILENAME ' TOTFD2 BRK 'PROJECT ' TOTFD2 BRK 'ACCOUNT ' TOTFD2 BRK 'TYPE ' TOTFD1 BRK 'REEL ' TOTFD1 BRK 'BACKUP ' TOTFD1 BRK 'PACKID ' TOTFD1 BRK 'ASG-COUNT ' TOTDECV DO OLDMFD>0 , BRK 'EQUIPMENT ' TOTOCTV BRK 'FCYCLE ' TOTDECV BRK 'REF-DATE ' TOTDATE BRK 'CAT-DATE ' TOTDATE BRK 'DISABLED ' TOTBIT BRK 'UNLOADED ' TOTUNL MASSMSG BRK 'MASS-STORAGE' TOTMASS TAPEMSG BRK 'TAPE ' TOTTAPE BRK 'REMOVABLE ' TOTREM BRK 'GOPT ' TOTBIT BRK 'VOPT ' TOTBIT PRIMSG BRK 'PRIVATE ' TOTPRI PUBMSG BRK 'PUBLIC ' TOTPUB TOTTABL EQU ($-TOTTAB)/3 FIXMSG 'FIXED ' NONEMSG '' LODMSG 'LOADED ' OFF BRKOK /$(1),TOT000* . ON BRKOK=0 LX,U X4,0 BE SURE WE'RE LOOKING AT GRAND TOTALS OFF BRKOK=0 ON BRKOK LX X4,BRKCNT START WITH LOWEST LEVEL BREAK TNZ BRKCNT ANY BREAKS SPECIFIED? J TOT100 NO TOT010 . TNZ X4 GRAND TOTALS? J TOT090 YES E$DIT EDPACK OPEN EDIT E$MSG TOTALS START MESSAGE LA A0,BRKCNT GET BREAK COUNT ANA A0,X4 NUMBER OF LOWER LEVELS TO SKIP MSI,H1 A0,BRKPNT MULTIPLY BY LENGTH OF ENTRIES LX X5,BRKPNT GET TABLE POINTER AX X5,A0 SKIP PROPER NUMBER OF ENTRIES LR R4,X4 MOVE CURRENT BREAK LEVEL TO R4 JGD R4,$+1 ADJUST FOR LOOP COUNT TOT020 LA,H2 A0,BRKSPEC,X5 GET 1ST 3 CHARS OF SPEC LX X10,(3,TOTTAB-3) INITIALIZE SEARCH INDEX AND INCREMENT LR,U R1,TOTTABL SET SEARCH LENGTH SE,H1 A0,3,*X10 FIND SPEC IN TABLE? J TOTWHAT NO, USE ?? LA A0,BRKVAL,X5 LOAD FORMER CONTENTS OF FIELD EX 2,X10 YES, JUMP TO PROPER ROUTINE TOTWHAT . TP BRKLOAD,X5 IS VALUE TWO FIELDATA WORDS (DL ?) J TOTWHAT3 YES, HANDLE IT E$FD1 ('SPEC ') NO E$DECV BRKSPEC,X5,S3 EDIT SPEC NUMBER E$COPY 3,(' = ') SPACE OVER DL A0,BRKVAL,X5 PICK UP VALUE AND MASK (IF ANY) JZ A1,TOTWHAT2 SKIP IF NO MASK AND A0,A1 MASK OFF PROPER BIT LA,U A0,0 ASSUME BIT WAS NOT SET TZ A1 WELL, WAS IT? LA,U A0,1 YES TOTWHAT2 E$OCTV . EDIT VALUE J TOT060 GO ON TO NEXT LEVEL TOTWHAT3 LX,U X10,WHAT POINT TO '??' J TOTFD2 WE DON'T KNOW WHAT IT IS, BUT PRINT IT TOTFD2 . E$FD2 0,X10 EDIT KEY FIELD NAME E$SKIP 1 SPACE OVER E$FD2 BRKVAL,X5 EDIT FIELD CONTENTS J TOT060 GO ON TOTFD1 . E$FD2 0,X10 EDIT KEY FIELD NAME E$SKIP 1 SPACE OVER LA A0,BRKVAL,X5 PICK UP FIELD VALUE TE A0,(' ') TNZ A0 BUT IS IT ZERO? LA A0,NONEMSG YES, SO SAY '' E$FD1 . EDIT FIELD CONTENTS J TOT060 GO ON TOTDECV . E$FD2 0,X10 EDIT KEY FIELD NAME E$SKIP 1 SPACE OVER E$DECV BRKVAL,X5 EDIT FIELD CONTENTS J TOT060 GO ON TOTOCTV . E$FD2 0,X10 EDIT KEY FIELD NAME E$SKIP 1 SPACE OVER E$OCTV BRKVAL,X5 EDIT FIELD CONTENTS J TOT060 GO ON TOTDATE . E$FD2 0,X10 EDIT KEY FIELD NAME E$SKIP 1 SPACE OVER LXI X10,BRKVAL,X5 GET DATE IN UPPER X10 E$DAY1 X10 EDIT THE DATE J TOT060 GO ON TOTBIT . TEP A0,BRKMASK,X5 WAS BIT SET? J TOT050 YES E$MSG NON NO, EDIT 'NON-' J TOT050 GO ON TOTUNL . TOP A0,BRKMASK,X5 WAS IT UNLOADED? LX,U X10,LODMSG NO J TOT050 GO ON TOTMASS . TEP A0,BRKMASK,X5 WAS IT A TAPE? LX,U X10,TAPEMSG YES J TOT050 GO ON TOTTAPE . TOP A0,BRKMASK,X5 WAS IT MASS STORAGE? LX,U X10,MASSMSG YES J TOT050 GO ON TOTREM . TOP A0,BRKMASK,X5 FIXED? LX,U X10,FIXMSG YES J TOT050 TOTPRI . TOP A0,BRKMASK,X5 WAS IT PUBLIC? LX,U X10,PUBMSG YES J TOT050 GO ON TOTPUB . TEP A0,BRKMASK,X5 WAS IT PRIVATE? LX,U X10,PRIMSG YES TOT050 . E$FD2 0,X10 EDIT TYPE OF FILE TOT060 . E$CHAR ',' GET SET FOR NEXT LEVEL E$SKIP 1 SPACE OVER NOP 0,0,*X5 INCREMENT TO NEXT BREAK SPEC JGD R4,TOT020 IF MORE, DO THEM E$SKIP -2 BACK UP OVER LAST COMMA E$CHAR ':' END WITH A COLON P$RINT POUT2 PRINT MESSAGE J TOT100 PRINT FIRST LINE OF TOTALS TOT090 . P$RINT GRANDP PRINT 'GRAND TOTALS:' TOT100 . OFF BRKOK E$DIT EDPACK E$MSG TOTM01 TRKS: FIXED = ON OLDSTUFF LA A0,TPT GET T-OPTION TNE,U A0,1 SET (AND NOT REVERSED)? J TOT120 YES, DO NORMAL STUFF TNZ EQDX F-TYPE EQUIP GIVEN IN SPEC3? J TOT120 NO, DO NORMAL STUFF E$SKIP 1 YES, SKIP A SPACE E$CHAR '(' OPEN PAREN LA A0,EQDX GET EQUIP INDEX E$FD1 EQUCD-1,A0 EDIT EQUIP TYPE E$CHAR ')' CLOSE PAREN OFF OLDSTUFF TOT120 E$MSGR . RESUME MSG EDIT LA A0,TOT GET TOTAL FIXED TRACKS ON DSGUNL TNZ PRIVLGD PRIVILEGED? AA A0,UNLTOT ADD IN UNLOADED TRACKS OFF DSGUNL E$DECV . PUT IT IN LINE ON DSGUNL TNZ PRIVLGD PRIVILEGED? J TOT150 NO, SKIP UNLOADED BIZ E$MSG UNL EDIT 'UNL=' E$DECV UNLTOT EDIT IN UNLOADED TRACKS E$MSGR . CONTINUE EDITING WITH 'TOTAL=' LA A0,TOT GET LOADED TRACKS AA A0,UNLTOT ADD IN UNLOADED TRACKS E$DECV . PUT IT IN IMAGE TOT150 . OFF DSGUNL E$MSG TOTM02 REMOVABLE = E$DECV RTOT EDIT TOTAL REM. TRACKS ON GVHUSH TNZ PRIVLGD IS RUN PRIVILEGED? J TOT200 NO, SKIP V/G TOTALS OFF GVHUSH E$MSGR . V-OPT = E$DECV VTOT EDIT V-OPTION TRACKS E$MSGR . G-OPT = E$DECV GTOT EDIT G-OPTION TRACKS TOT200 JZ LONGLIST,TOT300 IF SHORT LISTING, SKIP SEC TRKS E$MSG TOTM03 BACKUP TAPE BLOCKS = E$DECV SECTOT EDIT SECURE TRACKS TOT300 E$DITX . P$RINT POUT2 PRINT FIRST TOTALS LINE E$DIT EDPACK E$MSG TOTM04 FILES: TOTAL = E$DECV PFCT EDIT TOTAL FILES ON DSGUNL TNZ PRIVLGD IS USER PRIVILEGED? J TOT350 NO, SKIP AHEAD E$MSG UNL EDIT 'UNL=' E$DECV UFCT EDIT UNLOADED FILE COUNT OFF DSGUNL TOT350 E$MSG TOTM02 REMOVABLE = E$DECV RFCT EDIT REMOVABLE FILE TOTAL ON GVHUSH TNZ PRIVLGD IS RUN PRIVILEGED? J TOT400 NO, SKIP V/G TOTALS OFF GVHUSH E$MSGR . V-OPT = E$DECV VFCT EDIT V-OPTION FILE TOTAL E$MSGR . G-OPT = E$DECV GFCT EDIT G-OPTION FILE TOTAL TOT400 E$MSG TOTM05 TAPES = E$DECV TFCT EDIT TAPE FILE COUNT E$DITX . P$RINT POUT PRINT SECOND TOTALS LINE ON BRKOK TNZ BRKCNT ANY BREAKS SPECIFIED? J TOT480 NO, GO ON SZ RTOT RESET REMOVABLE TRACK COUNT SZ RFCT RESET REMOVABLE DISC FILE COUNT SZ VTOT RESET V-OPT TRACK COUNT SZ VFCT RESET V-OPT FILE COUNT SZ GTOT RESET G-OPT TRACK COUNT SZ GFCT RESET G-OPT FILE COUNT SZ TOT RESET TOTAL FIXED TRACKS SZ SECTOT RESET SECURE BACKUP BLOCKS SZ PFCT RESET TOTAL FILES SELECTED SZ TFCT RESET TAPE FILE COUNT SZ UNLTOT RESET UNLOADED TRACK COUNT SZ UFCT RESET UNLOADED FILE COUNT ANX,U X4,1 DECREMENT BREAK INDEX FOR LOOP LA A0,X4 MOVE BREAK INDEX TO AN A REGISTER TG A0,BRKSTOP REACHED OUR LIMIT YET? J TOT010 NO, PRINT HIGHER LEVEL TOTALS TOT480 TNZ BRKSTOP WERE THESE THE GRAND TOTALS? J MFD700 YES, RETURN TO MAIN SEG TZ JPT ARE FILES BEING LISTED? J TOT490 NO, DON'T WORRY ABOUT SKIPPING A LINE LA A0,( PRT 2,0,0) GET SET TO SKIP A LINE OR TWO LX X5,BRKPNT POINT TO LOWEST LEVEL BREAK TNZ HPT ARE HEADINGS BEING PRINTED, AND WAS A TNZ,S2 BRKSPEC,X5 NEW HDG REQUESTED FOR THIS LEVEL? ER PRINT$ NO, SKIP BEFORE NEXT FILE IS PRINTED TOT490 L$OAD CHEKPRTSG,TOTRTN,1 AND RETURN TO PRINT ROUTINE OFF BRKOK ON BRKOK=0 J MFD700 RETURN TO MAIN SEG OFF BRKOK=0 END @ELT,RI TPF$.TOTALS,,,154355141337 )@@@Q@@@@@@@UP TAPL BACK TOTAT=& G-OP-OPT=&V=& V REMOD=& FIXETRKS&:AA@@@@ )@]0Q@@@])@@@]#@@M: TOTALSGRAND S=& TAPE=& TOTALFILES:KS=& E BLOCAB@@@@ )@ )O@@B&@C@@@@@@@ME FILENA/K@@@%IER QUALIF ?? NON-& FOR &TOTALSAC@@@@ )@C@MYS@)/0[[9)]@@@@@@@@ TYPE /K@@@%T ACCOUN/K@@@%T PROJEC/K@@@%AD@@@@ )@EKMYS@)/0[[9)]@@@@@@@@ PACKID/K@@@1 BACKUP/K@@@1 REEL /K@@@1AE@@@@ )@G)MYS@)/0[[9)]@@@@@@@@ FCYCLE/K@@[]ENT EQUIPM/K@@@;UNT ASG-CO/K@@@1AF@@@@ )@I0MYS@)/0[[9)]@@@@@@@@ED DISABL/K@@[DTE CAT-DA/K@@[DTE REF-DA/K@@@;AG@@@@ )@L@MYS@)/0[[9)]@@@@@@@@ TAPE /K@@[TTORAGEMASS-S/K@@[QED UNLOAD/K@@[LAH@@@@ )@NKMYS@)/0[[9)]@@@@@@@@ VOPT /K@@[L GOPT /K@@[ZBLE REMOVA/K@@[WAI@@@@ )@P)OYS@)/0[[9)]@@ FIXED /K@@[> PUBLIC/K@@[+E PRIVAT/K@@[LAJ@@@@ )@S@^@)@@@G"K@JC@B)J@(@]@@@@@@C/@@@@/K@@[7(@@@@^/K@@['(@@@@@R[@@@@ LOADEDAK@@@@ )@[)K"K[ G@B=@V2@@YK]JC[@@@@@@O[K@@GR[K@@@TC@@@@H@@@@^C@@@@@/,0@@@C8@@@Q/,0@@@AL@@@@ )@#)M$)/) YS@@/B=@0@@@@@')E@@]C@ @@@/K@@@R2CE)@#N8K@@QR])@[+C^ @@@8L@@@KN[@@@^AM@@@@ )@ 0K"K#\[9)@/)CYK]\C]M&@@@@@@C8K@@#C8@@[=/,0@@@C? @@@/,0@@@C@@@[C@ @@@/,0@@@C/@@@[/,0@@@9?E@@@/K@@[(AQ@@@@ )@IKK"K^J@YKA#2@59@G/)D@@@@@@@/,0@@@C@ @@@/,0@@@C/@@@[/,0@@@9?E@@@/K@@[(/,0@@@AR@@@@ )@KKM"@/)GB=[:2@T9@Q/@@@9?E@@@/K@@[(/,0@@@C@ @@@/,0@@@C/@@@[/,0@@@9?E@@@/K@@[(AS@@@@ )@M)K"KA#2@59@GJC#$)/)J@@@@@@@=@ @@@/K@@[(/,0@@@C@@@@E&]>@@@/,0@@@C/@@@[/,0@@@AT@@@@ )@O)K"[N@[9@A/B=[9N@[8JC#0@@@@=@ @@@/K@@[$R')@[)>@ @@@/K@@[$/,0@@@C8@@@S/K@@[$AU@@@@ )@Q)K%S@J[9@YO0@Y#2@/()@/@@@@@/K@@[$R')@[X>@ @@@/K@@[$R')@[C>@ @@@/K@@[$R')@[FAV@@@@ )@S)K"KB>G@B)/)JES@#2@0@@@@@@@C/@@@,/,0@@@9?E@@@R')@[R=@ @@@/K@@[$R')@[U>@ @@@AW@@@@ )@U)M"KC#2@4Y@/)HB=]@@@@/,0@@@C/@@@:/,0@@@C/@__.8L@@@K/S )@@/,0@@@C/@@@[/,0@@@AX@@@@ )@W0K%KC<2[D8 G@[9@=O)[@@@@@@@C/@@@@'=@@@@C@G@@@C8@@@P/K@@[''=@@@@C@G@@@C8@@@@AY@@@@ )@Y0K"K[ G@B=@V2[GY#2[L8@@@@@@/K@@]G(0@@@@/K@@]G:8@@@[CW@@@N/,0@@@C8@@@@/,0@@@AZ@@@@ )@)0K$=[*/)KYKEJ* R=[@@@@@@@@@C/@@@)/,0@@@C@GJ_"C0@@@@/,0@@@C/@@@(/,0@@@C/@@@[BA@@@@ )@+0I"KCJC $=];2@=()@/)#YKG@@@@@@@@@C@^@@@/,0@@@C8@@@#/,0@@@C@^@@@/,0@@@/,0@@@BB@@@@ )@=)K"K^\C $=#F2@>9@?/)UYK^\@@/[0@]Y/,0@@@C@^@@@/,0@@@/,0@@@C@^@@@/,0@@@/,0@@@BC@@@@ )@&)K%S@JC@7=#V2@>9@8O)LB=]K@@'=@@@@C@G@@@C8@@@@/,0@@@/,0@@@C@^@@@/,0@@@C8@@@CBD@@@@ )@*)I%K@\C@+&@#2@H9@'/)DES@@@@@@@@@@C8@@@#/,0@@@C^^@@@/,0@@@C8@@@H/,0@@@C/@@@@BE@@@@ )@%KI"K[\CB$=[F2[T9@"/)DYKF@@@@@@@@@/,0@@@/,0@@@CC^@@@/,0@@@/,0@@@C^^@@@/,0@@@BF@@@@ )@?@I"KJ\C]M&@#2@H9@//)DYKI@@@@@@@@@/,0@@@/,0@@@CC^@@@/,0@@@C8@@@K/,0@@@C^^@@@BG@@@@ )@!0K%KK#2[D9@@/B=##2[99@2@@@@ @^@@@ ^^@@@ @^@@@/K@@#G(@@@@@'=@@@@C@G@@@C8@@@@BH@@@@ )@\0I"KJ\CA$=#;2[X9@6/)XYKJ@@@@@@@@@ C^@@@ ^^@@@ @^@@@ @^@@@ ^^@@@ @^@@@ C^@@@BI@@@@ )@1)K"KK\CBKYKLJ[9[^/)<@@@@@@@/K@@@@(@@@@@/K@@@#!@@@@@C@@@@^P9@@@[ C^@@@ @^@@@BJ@@@@ )@3)K"KD\[9)@/)^YKD\C[R=]LM]K@C8@@@@'=@@@@(0 @@@(W@@@BR[K@@@C@@@[&/K@@#P*W@@@DBK@@@@ )@5)A+=^:2]S)@S)EE@@@@@@@@@@@@@]@@@@ = SPEC @@#@@S'=@@@@C8K@@@&;@)@@BL@@@@ @EOF P )@@G@@@@ @@]@@B@@$@[P@@[@[T@@@[@@@@@@@E@[$@@@@#TBRKCNT EDPACK EDIT$ AA )@@G@@ EMSG$ BRKPNT BRKSPEC BRKVAL BRKLOAD EFD1$ AB )@@G@@ EDECV$ ECOPY$ EOCTV$ EFD2$ ESKIP$ EDAY1$AC )@@G@@ BRKMASK ECHAR$ POUT2 PRINT$ OPTIONS FLAG5 AD )@@G@@ EQUCD EMSGR$ BTOT BRTOT BVTOT BGTOT AE )@@G@@ BSECTOT EDITX$ CNT3 CNT2 CNT1 POUT AF )@@G@@ BUNLTOT BRKSTOP MFD700 CHEKPRTSG TOTRTN LOAD$ AG )@@G@@ TOT000 @@[@@@@@@@@@^@2BS)^@) 8%^[B^@'^[(H1H(>H14^[&H--G8)AH )@@G@@ K\^@)5M94*4^@)HD,I))H17IL=IS)BK)AC6BS) 8%^[,I(!GL>IK)H9&^[7H92G-3^[4IL-AI )@@^@@H13G1>IL>G)) K\^@)6U94*/ AJ @ELT,SIQ TPF$.USERDOC,,,161202071723,007 @ M F D --- User Guide COLUMN 2 SPACE 15 CENTER ********************************* CENTER * * CENTER * *** * * ***** **** * CENTER * * * ** ** * * * * CENTER * * *** * * * * * * * CENTER * * *** * * * **** * * * CENTER * * ** * * * * * * CENTER * * * * * * * * CENTER * *** * * * **** * CENTER * * CENTER ********************************* SPACE 2 CENTER Users Guide SPACE CENTER April, 1977 -- For @MFD Level 8.0 1Introduction @MFD is a system processor which scans the master file directory and prints a one-line summary for each file found to fit in a certain category or have certain attributes. The information thus listed could be found in a @PRT,F or @PRT,P output, but @MFD tries to condense the useful information into one line, and has a much more versatile file selection algorithm. SPACE @MFD is also capable of printing totals (number of files, total tracks, etc.) for the set of files which has been selected. Sorting is possible as well, and a subtotal feature is provided. SPACE In addition, if an SDF file containing the names of the files selected is desired, @MFD can provide it directly, when requested to do so. 1Processor Call The call is: SPACE CENTER @MFD<,options> ,,,,..., SPACE All options and specs are optional...If none are specified, @MFD will print information about your TPF$ file. SPACE Header lines may be requested to identify output information. The processor termination produces totals for all the files selected. 2Options @MFD recognizes four basic types of options... 3Listing Options The listing options may be used with any other legal options, and merely serve to instruct @MFD how to display its output. SPACE COLUMN 9 LENGTH -5 B - Performs a sort (by QUAL*FILE(C)) of each file being listed. E - Requests a second print line for each mass storage file. This line will contain additional information such as the initial reserve and the granule counts for each equipment group. H - Reverses normal heading mode (see S and L-options). J - Suppresses all printing except for the I.D. line and the end totals. L - Produces a long (132-column) listing. This option is assumed for batch runs, and for demand runs which have printout directed (breakpointed) to a user file. When this option is used (or assumed), a heading is normally printed: The H-option may be used to suppress the heading. S - Produces a short (72-column) listing. This option is assumed for non-breakpointed demand runs. When this option is used (or assumed), a heading will normally not be printed: The H-option may be used to request a heading. W - Assigns a temporary file (called OUT$$$) into which an entry is made for each file selected by the other options and specs. The SDF images written to OUT$$$ have blanks in columns 1-7: the QUAL*FILE(C) begins in column 8, and completes the image. For demand runs, no regular @MFD listing will be printed unless the S or L-option is also used. If neither of these options is given, the J-option will be assumed and only the totals will be printed. A listing will always be produced for batch runs, unless the J-option is used. COLUMN 2 LENGTH +5 3Primary Attribute Options The primary attribute options may be called 'category' options. A maximum of one of these options may be specified: If none are used, single-file mode is assumed (see section 2.2). SPACE COLUMN 9 LENGTH -5 A - Selects only those files catalogued under the account number given as . If none was specified, the account number on the @RUN card is used. F - Provides for selecting all F-cycles of the QUAL*FILE indicated in . If no qualifier is specified, the project-id of the run is used. Implied-qualifier syntax is also accepted. I - Same as F-option, but ignores qualifier. Selects all files with the indicated filename, regardless of qualifier. K - Selects all registered files on the removable disc pack whose pack-id is in . Does not require the pack to be mounted, since the fixed directory items are used. (@PRT,D gets its information from the pack itself, so it can print the contents of a pack which has not been registered). P - Selects only those files catalogued under the project-id in . If none is given, the project-id is taken from the @RUN card. Q - Selects only those files whose qualifiers match . If no was given, the run's latest @QUAL (or project-id) is used. X - Selects the files catalogued to the Exec (For use by privileged users only). Z - For privileged users, indicates that no primary attribute is to be checked. COLUMN 2 LENGTH +5 3Primary Attribute Masking Options The following options are for privileged users only. They are used to indicate that includes transparent characters, and that special masking operations are to be done as part of the primary attribute tests. SPACE COLUMN 9 LENGTH -5 C - When used with the A, P, Q, F, or I options, allows partial checks. Dollar signs ($) within spec1 are treated as transparaent characters, and the match is made on the basis of matching characters in non-transparent character positions. For example: SPACE CENTER @MFD,CA T$$-$$$$$$$$ SPACE would list all those files whose accounts start with 'T' and whose 4th character is a '-'. All other character positions will be ignored. SPACE Note - when used with the F-option, only the filename (and not the qualifier) is treated as a masked spec. SPACE Y - Like the C-option above, but only relative character positions are counted. The spec is shifted circularly and the non-transparent character positions are checked at each step. Thus, SPACE CENTER @MFD,FY PROJ*FILE$$$$$$$$. SPACE might find files named 'PROJ*FILE,' 'PROJ*FILEB,' 'PROJ*MY-FILE,' and so on. COLUMN 2 LENGTH +5 3Directory File Disposition Options When @MFD is executed, it normally creates a temporary file called '$$--DGET--$$' and obtains a copy of the system's master file directory in that file. At program termination, the file is normally @FREE'ed, since it may be quite large. The options listed below may be used to control the assigning and freeing of this file. SPACE COLUMN 9 LENGTH -5 M - Prevents @MFD from freeing its work file ($$--DGET--$$) at program termination. If you anticipate doing several calls on @MFD in succession, you should use the M-option on all but the last one, to avoid having to recreate this file. N - Causes a new copy of the directory to be gotten. This is assumed on the first call to @MFD. Subsequent calls will re-use the initial copy, if the M-option had been set on the previous call. SPACE Note: The $$--DGET--$$ directory file is not used at all in single-file mode (see below). COLUMN 2 LENGTH +5 REMAIN 24 2Single-file Mode If no primary attribute options are given, single-file mode is assumed. Only the directory item for the given file will be read, instead of the entire directory, speeding up @MFD considerably if all you need is information about one file. Thus, a demand user might use- SPACE CENTER @MFD PF. SPACE to get a quick, short listing for the file PROJ*PF (latest F-cycle). If you need a heading, include the H-option. Since only one file is being printed, no totals are given. If no spec1 is given, the single-file mode will print information about the user's TPF$ file. SPACE In single-file mode, @MFD will accept additional filenames on data cards (one per card). These will be listed without the need to reload @MFD. A blank line will cause the previous file to be repeated. SPACE Note that in single-file mode, @MFD never references the $$--DGET--$$ directory file, and neither assigns nor frees it, so the M and N-options are meaningless in this mode. EJECT 2Specification Fields 3Spec1 Spec1 is used only for single-file mode, and for the A, F, I, K, P, and Q primary attribute options. When the A, P, or Q options are used, spec1 may be omitted, in which case the appropriate information is taken from the run's PCT. When the K-option is used, spec1 must contain a removable disc packid. When the F or I options are used, this spec should contain a filename in any of the following formats: SPACE QUAL*FILE. (F-cycle also accepted) *FILE. (latest @QUAL is used) FILE. (run's project is used for qualifier) FILE (ok in element field) SPACE These spec1 formats are also applicable to single-file mode, but in this case spec1 may be omitted, and TPF$ will be assumed. 3Specs 2 and 3 These specs are no longer used, and should be null. In the next level of @MFD, the fields which now start at spec4 will be permitted to start at spec2. EJECT 3Spec4 - Specn Spec fields 4 thru n (where n is configurable, and is currently set to 18) may be used to specify extra tests to be performed on each file, in order to further define the set of files to be listed. These specs may be of the form: SPACE . SPACE where is any of the following key words: SPACE COLUMN 16 LENGTH -5 QUAL - qualifier ACCT - account number FILE - filename FCYCLE - absolute F-cycle PROJ - project-id PACK - first packid for removable disc files REEL - first reel number for catalogued tape files BACKUP - first @SECURE backup reel BFP - @SECURE backup file position BTB - number of @SECURE backup tape blocks EQUIP - old equipment code as found in Main Item sector 0 prior to Exec level 33 TYPE - equipment type (mnemonic used when creating file). Valid as of Exec level 33. SIZE - for mass storage files: total number of tracks allocated (loaded) REF - date last referenced CAT - date catalogued IF - for special tests (see , below) SPACE COLUMN 2 LENGTH +5 Any of the items may be shortened to the first three characters, since only those characters are checked. SPACE must be given for each of these items, but the format of the value varies. SPACE COLUMN 16 LENGTH -5 QUAL - value is 12-character FIELDATA string, which will be left-justified and space filled. A 'DTE' (double test equal) will be done by @MFD. ACCT - same as for QUAL FILE - same as for QUAL PROJ - same as for QUAL PACK - value is six-character FIELDATA string, and a 'TE' (test equal) is done by @MFD. If the value is all numeric, 'FD' will be needed in the version subfield to avoid its being treated as numeric. For example: @MFD,A ,,,PACK.123/FD REEL - same as for PACK BACKUP - Same as for PACK TYPE - same as for PACK FCYCLE - value is decimal or octal integer, where octal is denoted by a leading zero. A 12-digit value will be assumed to be octal, also. Here again, a 'TE' (test equal) is done by @MFD. EQUIP - same as for FCYCLE BFP - same as for FCYCLE SIZE - value is decimal or octal integer, but @MFD will do a 'TG' (test greater). This enables listing all the files which are larger than the specified size. BTB - same as for SIZE REF - value is date, in the form mmddyy. @MFD will do a 'TLE' (test less than or equal) so that only the files last referenced on or before the given date will be listed. Alternatively, value may be the letter M, D, or Y followed by a 1-4 digit decimal number, indicating a relative date (relative to today's date). For example, 'M5' would indicate a date 5 months ago. M, D, and Y indicate months, days, and years, respectively. The number may also precede the letter: e.g., '14D'. CAT - same as for REF. IF - value must be one of the following keywords: SPACE COLUMN 28 LENGTH -3 TAPE - selects tape files MASS - selects mass storage (non-tape) files REMOVABLE - selects removable disc files UNLOADED - selects unloaded files DISABLED - selects files which are disabled in any way HDW - selects hardware-disabled files WRN - selects warning-only disabled files BBT - selects files disabled due to bad backup tape BM1 - selects files with bad main item links GOPTION - selects G-option (guarded) files VOPTION - selects V-option (unload inhibit) files PUBLIC - selects public files PRIVATE - selects private files BAKDUP - selects files which have @SECURE backups READONLY - selects read-only files WRITEONLY - selects write-only files LAPSES - selects files which have lapse entries OLD - selects old-format (pre-level-33) files POSITION - selects position-granular files WAD - selects word-addressable files XUSE - selects files assigned for exclusive use SPACE COLUMN 16 LENGTH +3 Here again, only the first three characters are significant. SPACE COLUMN 2 LENGTH +5 The indicated item and value must pass the appropriate test for the file to be selected. When more than one of these specs is given, all of the tests must pass for the file to be selected. (Logical 'AND' operations are implied between the tests). Thus, SPACE CENTER @MFD,Q MYQUAL,,,ACCT.MYACCT,IF.REMOVABLE,PACK.MYPACK SPACE would list all those files with qualifier 'MYQUAL' which also have the account 'MYACCT' and reside on removable pack 'MYPACK'. SPACE 2 It is possible to reverse the tests being performed, perform more complex tests, and/or specify that logical operations other than 'AND' are to be done between the tests, but these features are a bit more complicated to use. The sophisticated user is referred to the 'advanced features' section of this document. 1Sorting Although the B-option provides a means of sorting the selected files by qualifier, filename, and F-cycle, it is often useful to be able to sort using other key fields, such as project or account. This may be done using special forms of specs 4-n. Each of the items listed above may be designated as a sort key by using the following spec format: SPACE *. SPACE where is one of the following qualifiers specifying the type of sort to be performed: SPACE COLUMN 16 LENGTH -5 SORT - normal ascending sort. SORTD - descending sort on this key. BREAK - ascending sort, but each time this key field changes, print sub-totals, eject the page, print a new heading, and continue. BREAKN - same as BREAK, but no page eject or new heading. BREAKD - same as BREAK, but descending sort. BREAKDN - same as BREAKD, but no page eject or new heading. LENGTH +5 COLUMN 2 SPACE is not necessary, but may be included if a test is to be performed on that item as well as a sort. SPACE More than one such key field may be given, by using additional specs of this type. If this is done, each succeeding key field will be assumed to be the next lower in significance. If the B-option is used when specs of this type are given, the qualifier, filename, and F-cycle are automatically added as the least significant key field. Thus, SPACE CENTER @MFD,PB MYPROJ,,,SORT*ACCT.,SORT*PACKID. SPACE would result in a listing of all the files under project 'MYPROJ' sorted first by account number, then by packid, and lastly by qualifier, filename, and F-cycle. 1Advanced Features Sophisticated users may use specs 4 thru n to perform special tests in addition to those already described. This may be accomplished through use of an alternate format for these specs: SPACE item(offset)/operation/partial.value/mask SPACE where: SPACE COLUMN 14 LENGTH -5 Item is any of the following: SPACE LI0 - Lead Item sector 0 MI0 - Main Item sector 0 MI1 - Main Item sector 1 SPACE It is also possible to use the items listed above, such as ACCT or QUAL (but -NOT- 'IF'). An item must be specified. SPACE Offset is a positive decimal integer, specifying which word in the item is to be checked. If ommitted, word 0 is assumed. SPACE Operation is the test to be performed. May be any of the following: SPACE TZ TP TOP TE TLE DTE TNZ TN TEP TNE TG TNG SPACE One of these must be specified. SPACE Partial may be any of the following partial word designators: SPACE H1 XH1 S1 S3 S5 T1 T3 H2 XH2 S2 S4 S6 T2 W SPACE May not be used with 'DTE' operation. Whole word (W) is assumed if none is specified. SPACE Value is an octal or decimal number against which the specified word or partial word is to be compared. A leading zero denotes an octal number, and a 12-digit number is assumed to be octal. If a non-numeric character is found in this field, the field will be treated as a FIELDATA string, blank filled. A value is required for all but the TZ, TNZ, TP, and TN operations. For the 'DTE' operation, the value is assumed to be a FIELDATA string. SPACE Mask is an octal number to be AND'ed with the specified directory information before the test is done. If omitted, a mask of all 7's is assumed. Not permitted for 'DTE' test. An 'FD' in this field indicates that, although the is all numeric, it is to be treated as a FIELDATA string. SPACE COLUMN 2 LENGTH +5 If any of the special items (ACCT, PROJ, FCYCLE, etc.) are given, the proper directory item, operation, offset, and partial word are assumed. Thus, 'FCYCLE' assumes 'MI0(17)/TE/T3'. It is possible to override these assumptions, but this should be done with care. Changing the assumed operation, as in 'EQUIP/TNE.035', is never a problem, but the partial word designator should only be overridden if whole word (W) is assumed, as in 'ACCT', 'PACKID', etc. A spec such as 'ACCT(1)/TNE/S2.Q' is thus possible. This particular example would check S2 of the second word of the account number, to make sure it is not equal to a 'Q'. SPACE The desired test will be performed on every file that passes the tests specified by the primary attribute option. If the test fails, the file will be bypassed. As with the simplified format, several of these tests may be specified at once, in which case logical AND's are implied between them. For example: SPACE CENTER @MFD,Q MYQUAL,,,IF.GOPTION,SIZE.53,MI0(17)/TOP/S2.010 SPACE would list all G-option files with qualifier 'MYQUAL' which are at least 54 tracks in size, and, in addition, are private files. Note that this illustrates the 'hard' way of testing for a private file. 2Polish Expressions It is possible to specify that logical operations besides 'AND' are to be performed between the tests. This gets a bit more complicated, since the syntax of spec fields does not lend itself to expressions like (FCYCLE=4 .AND. (QUAL=SYS$ .OR. FILE=PF)) . It is possible to do tests such as this, but they must be coded in the spec fields in a form of Polish notation. Using the above expression as an example, we would have an @MFD call of the following form: SPACE CENTER @MFD,Z ,,,AND,FCYCLE.4,OR,QUAL.SYS$,FILE.PF SPACE or SPACE CENTER @MFD,Z ,,,AND,OR,QUAL.SYS$,FILE.PF,FCYCLE.4 SPACE 'AND', 'OR', 'XOR', and 'NOT' logical operations are permitted. SPACE The expression is scanned from left to right. When a 'NOT' operation is encountered, it is applied to the following operand. Each time an 'AND', 'OR', or 'XOR' operation is found followed by two operands, this sub-expression is evaluated and becomes an operand itself. When all the intermediate expressions have been evaluated, the final result is either true or false. If true, and the file in question meets the requirements of the normal options and specs, the file will be selected. Otherwise it will be skipped. SPACE Specs which indicate a sort key, but do not perform any tests, are ignored when encountered in the midst of one of these Polish expressions, but for readability's sake (?) it is suggested that these sort-only specs be placed before or after the specs comprising the Polish expression. SPACE A string of tests with no intervening logical operations is a special case, and is treated as though AND's were specified between each of the tests. 1Directory Item Snaps Specs 4-n may be used to request an ER SNAP$ of portions of the directory. The spec format is then: SPACE SNAP*. SPACE where the may be any of the following: SPACE COLUMN 15 LI0 - Lead Item sector 0 for each file listed. * LI1 - same, but Lead Item sector 1. MI0 - same, but Main Item sector 0. MI1 - same, but Main Item sector 1. * MI2 - same, but Main Item sectos 2-n. * DAD - granule items (DAD's) for each file. * ALL - all of the above. COLUMN 2 SPACE Items marked with a * are honored for SNAP purposes only: No tests are possible on them. SPACE The is only needed if a test is also to be performed on this . If the special items are used ('ACCT', 'FCYCLE', etc.), The directory item in which they reside will be snapped. SPACE The snap output will be done following the listing for the file. In the case of files with several F-cycles, the Lead Item (LI0 and/or LI1) is snapped just once, following the first file of the F-cycle series which has been selected for listing. In all cases, an item will be snapped only if it exists. 1Output Format The format of @MFD's printed output is as follows: SPACE COLUMN 16 Col. 1-4 For mass storage files, these columns contain the maximum number of granules to which the file can expand, followed by the granularity: 'T' for track, 'P' for position. For tape files, this field is an extension of the options field. SPACE Col. 7-10 Cataloguing options: SPACE COLUMN 22 LENGTH -5 P: Public R: Read-only W: Write-only G: Guarded (@SECURE will not save it) V: Unload inhibit (@SECURE will not unload it) A: Currently assigned to at least one run X: Currently assigned exclusively to some run T: (Single-file mode) temporary file assigned to this run C: (Single-file mode) @ASG,C to this run U: (Single-file mode) @ASG,U to this run SPACE LENGTH +5 COLUMN 16 For tape files, the following option letters also apply: SPACE COLUMN 22 LENGTH -5 E: Even parity O: Odd parity V: Very high density (1600 BPI) H: High density ( 800 BPI) M: Medium density ( 556 BPI) L: Low density ( 200 BPI) D: Dual density I: Software translate J: No tape label SPACE LENGTH +5 COLUMN 16 col 12-17 catalogued equipment type: SPACE For catalogued files, this will be the type mnemonic which was used to create the file. For temporary files, it will be the mnemonic of the specific device type assigned. SPACE For removable disc files, the first packid in the file's pack list will appear in this field. The remaining packs, if any, will appear on additional lines. SPACE Col. 18-21 Number of times the file has been assigned. SPACE Col. 23-30 Date on which the file was last assigned. SPACE Col. 32-35 Highest track referenced. For tape files, this field contains the first reel number in the file's reel list. The remaining reels, if any, will appear on additional lines. SPACE Col. 37-40 Number of tracks currently allocated. For tape files, this field is blank. SPACE '*UNL*' if the file is currently unloaded. SPACE Col. 42 @SECURE backup status, indicated by one of the following special characters: SPACE COLUMN 22 LENGTH -5 &: No @SECURE backup ^: Updated since last backup >: File has lapse entries. *: File is marked for deletion, or was assigned with the C or U-option. SPACE COLUMN 16 LENGTH +5 If blank, the file has a current backup. SPACE COLUMN 9 Note: A lapse occurs when a non-current @SECURE backup becomes the primary copy of a file, thus losing any updates to the file which were done between the time of last backup and the time of file restoration from the non-current backup. In long listing mode, @MFD will edit the lapse entries, showing the interval the lapse(s) spanned. To clear the lapse entries for a file, do: COLUMN 16 SPACE @SECURE,IF CLEAR LAPSES FILE QUAL*FILE(C) END SPACE Col. 43 Disabled status, indicated by one of the following special characters: SPACE COLUMN 22 ?: File is warning-only disabled !: File is hardware-disabled #: Backup tape is bad %: Bad Main Item sector 1 COLUMN 16 SPACE If blank, file is not disabled. SPACE Hardware-disabled status takes precedence over all the others, and bad-backup/bad-main-item-sector-1 takes precedence over warning-only, since only one character is printed, and a file may have more than one disable bit set. SPACE Col. 44-72 Qualifier*filename(cycle) SPACE -------------------------------------------------- Short listing stops here - long listing continues -------------------------------------------------- SPACE Col. 73-84 Account under which the file is catalogued. SPACE Col. 86-97 Project under which the file is catalogued. (This field will be slashed out if run is not privileged and project is not same as that of executing run). SPACE Col. 99-106 Date on which the file was catalogued. SPACE Col. 108-113 @SECURE backup tape number. If '*NONE*' there are no @SECURE backups for this file: The remaining columns will be blank. If the backup spans more than one reel, the remaining reels will appear on additional lines. SPACE Col. 115-117 Position of the file on the first backup tape. SPACE Col. 118-121 Number of blocks the file occupies on the backup tape(s). SPACE Col. 123-126 Date on which the backup was made. SPACE Col. 128-132 Time at which the backup was made. @ELT,SI TPF$.WOUT,,,135620072623,023 . @MFD SDF OUTPUT ROUTINE . . CALLED IF W-OPTION IS SET. WRITES EACH QUALIFIER*FILENAME(CYC) . INTO SDF FILE WHOSE NAME IS DEFINED BY CONFIG PARAMETER 'WFILE'. . AXR$ . CONFIG . DEFINE CONFIGURATION PARAMETERS EQUFS . DEFINE TAGS ON WOPTOK BUFFA RES 28 BUFFB RES 28 FILES ' ' RES 5 ASG '@ASG,T ' + WFILE OUTPUT FILE NAME ASGL EQU $-ASG LENGTH OF CSF$ IMAGE SDFF '*SDFF*' FCT* + WFILE OUTPUT FILE NAME + 0 + W$,0,0 + 28,0 + 0 + BUFFA,BUFFB + 1,0 + 1,('*SDFF*') + 1,0 + 05001,0,0 /$(1). . . SDF INITIALIZATION: SET UP FCT AND OPEN SDFO . SDF000* LA A0,(ASGL,ASG) ASSIGN OUTPUT FILE ER CSF$ JN A0,SDF010 ERR$ IF NO GOOD LA,U A0,FCT OK, OPEN SDFO LMJ X11,SDFOO$ LMJ X11,SDFO$ WRITE '*SDFF*' LABEL SDF010 ER ERR$ GET OUT IF NO GOOD LA,U A0,06 SA,T1 A0,FCT+10 SET TO WRITE 6 WORDS LA,U A0,FILES STARTING WITH WORD OF BLANKS SA,H2 A0,FCT+8 ALL SET, GO TO IT! SR R15,SDFLOD SET SDF OPENED FLAG J MFD200 RETURN TO PRINT ROUTINE . . SDF OUTPUT ROUTINE . SDF100* L,U R1,5 BT 5 WORDS L A0,(1,LINOUT+7) FROM PRINT BUFFER L A1,(1,FILES+1) TO SDF OUTPUT BUFFER BT A1,0,*A0 DO THE BT LA,U A0,5 BLANK SA,S1 A0,FILES+1 BLANK OUT DISAB CHAR, IF ANY LA,U A0,FCT ADDR OF FCT LMJ X11,SDFO$ WRITE IT OUT ER ERR$ JNZ LONGLIST,PR300 IF LONG LISTING, PRINT INFO ALSO . . W-OPTION WAS USED IN DEMAND (SHORT LISTING) MODE. IF THE S-OPTION . WAS ALSO USED EXPLICITLY, PRINT THE INFO. IF NOT, JUST GO BACK . FOR ANOTHER FILE. . TNZ SPT S-OPTION SET? J MFD300 NO, GET NEXT FILE (NO PRINTING) J PR300 RETURN TO MAIN SEG OFF WOPTOK END @ELT,RI TPF$.WOUT,,,154362141337 )@I@]@)@J)K@@@@@@@@@@@@@@@@@@@ $MFD$ *SDFF* $MFD$ @ASG,T AA@@@@ )@L)KJA0)@@0M) @@@@@@@@@@@@@@@*[@@@@@@[@@@@@[@[I@@[@@@@@@@@W@@@@@@@@W@@@@@@@@@AB@@@@ )@@@K"S@JC@R)O0@YK[JC@7=@)@@@@C8@@@A'=@@@@/,0@@@/,0@@@C8@@[#/G@@@A'=@@@@C@@@[JAC@@@@ )@]@K"S@ G@B&@#2@P9@GJG@B&@@@@C@K@[LC@@@[KN8K@@ /K@@@@^<0@@@[^@@[FC8@@@8[W@@[HAD@@@@ )@^@K-9)@O0@YK[\C[B=@;2@)@@@@@/K@@@@*W@@@D'=@@@@/,0@@@C8@@[#[4@@@9C8@@@ M#W)@@AE@@@@ )@A@C"K^\C[7=[#2@=)@N)C])O)EE@@@[@@9@@[@@B@@^@@"*SDFF*/K@@@@/K@@@@(W@@@M/ 0@@@AF@@@@ @EOF P )@@G@@@@ @@]@@B@@F@@X@@#@@(@@@[@@@@@@@E@[M@@@@@WW$ CSF$ SDFOO$AA )@@G@@ SDFO$ ERR$ FLAG3 MFD200 OPTIONS MFD300AB )@@G@@ PR300 LINOUT FCT @@@@@@@@@@[#SDF000 @@[@@@AC )@@G@@@@@@@@SDF100 @@[@@@@@@@@HH8)GL>^[0G(2G1\IL!G(=^@% 8)^@)G2T4-C^@)HD,AD )@@C@@I))HD!H9=G*)BK)AC8BS)^@\ K)H(\G->^@'^[0IL\I1(G-> AE @EOF