INCPTRES864
(George Source)
Macros used: BC, BS, BSXD, BXE, BXL, BXU, CLOSETOP, GETDIR, HUNTMISB, INSERT, JBS, MBS, MENDAREA, MFREE, MFREEW, MHUNT, MHUNTW, NAME, OPEN, REWIND, SEG, SEGENTRY, SETBIT, SETNCORE, STEP, STEPAGAIN, TESTNAMX, TESTRPN2, TOPFCB2, UP
- INCPTRES864.txt
22FL SEG INCPTRES,864,FILESTORE 22^= # 23DW # THIS SEGMENT IS ENTERED DOWN AT EMS WHEN :DUMPER HAS BEEN PARTIAL 23YG # RESTORED. ITS FUNCTION IS TO DETECT TAPES WHICH EXIST IN INCINDEX 24D6 # AND SYSTEM.SERIAL BUT WHICH HAVE HAD THEIR :DUMPER ENTRIES LOST DUE 24XQ # TO THE PARTIAL RESTORE. FOR EACH SUCH TAPE IT CONCOCTS A DIRECTORY 25CB # ENTRY AND INSERTS IT INTO :DUMPER. 25X2 # 26BL SEGENTRY K1INCPTRES,X1 26W= # 27*W # SUNDRY CONSTANTS 27TG # 28*6 MDUMPER 12HDUMPER 28SQ MGEO3PROC 12HGEO3PROCTAPE 29#B MGEO3DUMP 12HGEO3DUMPTAPE 29S2 # 2=?L # ******************************************************************** 2=R= # 2?=W # THE MAIN PATH STARTS HERE. ON ENTRY :SYSTEM.INCINDEX IS OPEN AT 2?QG # DEPTH -1 AND THE MISCELLANEOUS CHAIN CONTAINS THE FI/FTAPES BACKMAP 2#=6 # BLOCK WHICH GIVES DETAILS OF WHAT TAPES HAVE WHICH DIRECTORY ENTRIES. 2#PQ # 2*9B # FIRST WE PREPARE FOR THE JOB. WE OPEN :DUMPER AND EXAMINE ITS FCB 2*P2 # TO SEE IF IT HAS BEEN PARTIAL RESTORED. IF IT HAS NOT WE JUMP STRAIGH 2B8L # TO THE END OF THE SEGMENT AS THERE IS NOTHING FOR INCPTRES TO DO. 2BN= # 2C7W X1 2CMG SETNCORE 4,2,FILE,FABSNB [X2-> 4 WORD FABS. 2D76 LDN 0 4 [SET UP RECORD HEADER 2DLQ STO 0 A1(2) 2F6B ADN 1 MDUMPER [X1->12HDUMPER 2FL2 ADN 2 A1+1 [X2->DESTINATION 2G5L MOVE 1 3 [MOVE NAME IN 2GK= OPEN (GEOERR),GENERAL [OPEN :DUMPER 2H4W MFREE FILE,FABSNB [FREE FABS. 2HJG TOPFCB2 3 [X3->:DUMPER'S FCB 2HQQ ... JBS X1A,3,BFPARTRES [J IF NOT PARTIAL RESTORED 2H^2 ... LDX 0 GINCTSN 2J7= ... BZE 0 UP 2J*G ...X1A 2JHQ # 2K3B # WE HAVE OPENED :DUMPER AND ESTABLISHED THAT THERE IS WORK FOR US 2KH2 # TO DO. WE REWIND INCINDEX ( AT DEPTH -1) AND SET UP A FLOCNB, 2L2L # ENT, AND FTRAP WHICH WILL COME IN USEFUL WHEN AN ENTRY HAS TO BE 2LG= # INSERTED INTO :DUMPER. THE ENT AND FLOCNB ARE SET UP WITH ALL THE 2L^W # NECESSARY DETAILS EXCEPT LOCAL NAME AND TSN. WE HAVE TO ASSUME THAT 2MFG # THE TAPES HAVE REEL/GEN OF 0/0 AND WE SET THE TIMES AND DATES TO 2M^6 # THE CURRENT TIME AND DATE. 2NDQ # 2NYB REWIND -1 [REWIND INCINDEX 2PD2 SETNCORE 8,3,FILE,FLOCNB [SET UP TAPE TYPE FLOCNB 2PXL MBS 3,BFABTSN,BFABLIB 2QC= SETNCORE FRDE,3,FILE,ENT [SET UP ENT 2QWW LDN 6 A1(3) [X6->START OF ENT 2RBG LDN 7 A1+1(3) [X7->NEXT WORD 2RW6 STOZ A1(3) [ZERO FIRST WORD 2S*Q MOVE 6 FRDE-1 [AND MOVE ZEROES THRU BLOCK 2STB LDN 0 FRDE [SET UP REC HEADER 2T*2 STO 0 EREC(3) 2TSL LDN 0 1 [ONE TRAP 2W#= STO 0 ENUSE(3) 2WRW LDCT 0 #405 [T/M FOR TAPES 2X?G STO 0 ETM(3) 2XR6 BS 3,BELIB [INDICATE TAPE ENTRANT 2Y=Q LDX 0 EDATE [INITIALISE DATE/TIME OF ACCESS ETC 2YQB STO 0 EDLA(3) [TO NOW 2^=2 STO 0 EWRITDAY(3) 2^PL LDX 0 CLEANCT 329= STO 0 ETLA(3) 32NW STO 0 EWRITTIME(3) 338G LDX 0 GMTNOW 33N6 STO 0 EGMTLA(3) 347Q SETNCORE ETRAP,3,FILE,FTRAP [SET UP A TRAP BLOCK 34MB LDN 0 ETRAP [SET UP RECORD HEADER 3572 STO 0 ETRAPRH(3) 35LL LDN 0 CALL [SET UP 'ALL' TRAP 366= STO 0 ETRAPMODES(3) 36KW LDN 6 MDUMPER(1) [X6->12HDUMPER 375G LDN 7 ETRUSER1(3) [X7->DESTINATION 37K6 MOVE 6 3 [MOVE NAME INTO TRAP RECORD 384Q # 38JB # NOW WE STEP THROUGH INCINDEX A RECORD AT A TIME. 3942 # 39HL STEP STEP -1 [X3->NEXT INCINDEX RECORD 3=3= BZE 3 YESEOF [J IF FINISHED 3=GW JBS STEP,3,BIOBSR [IGNORE OBSOLETE INCREMENTS 3?2G LDX 5 AMTSR(3) [AND INCS WITH NO TAPES 3?G6 BZE 5 STEP 3?^Q # 3#FB # WE HAVE AN INCREMENT WITH TAPES. X5= NO OF TAPES. WE EXAMINE EACH 3#^2 # TAPE ENTRY IN THE RECORD. 3*DL # 3*Y= LDN 4 0 [OFFSET DOWN REC TO CURRENT ENTRY 3BCW NEXTENTRY 3BMN ... STEPAGAIN -1 [ RESET POINTER IN INCINDEX 3BXG STO 4 AWORK1(2) [SAVE OFFSET OVER REUSE OF X4 3CC6 STO 5 AWORK2(2) [DITTO: COUNT OF ENTRIES 3CWQ SMO 4 3DBB LDX 6 AMAGR(3) [X6=TSN 3DW2 BNG 6 NOTSN [IGNORE IF DUMMY ENTRY 3F*L # 3FT= # HAVING FOUND A TAPE WE HUNT FOR THE FI/FTAPE BLOCK SET UP WITH ALL 3G#W # SYSTEM.SERIAL ENTRIES BY BACKMAP. IT LIVES IN THE MISC CHAIN. 3GSG # ONCE WE HAVE FOUND IT WE LOOK FOR AN ENTRY FOR THE TAPE USING A 3H#6 # BINARY CHOP. IF NO ENTRY EXISTS WE IGNORE THIS ENTRY - THE DISCREPANC 3HRQ # CANNOT BE RECTIFIED AND DIDN'T ARISE FROM THE PARTIAL RESTORE. 3J?B # 3JR2 HUNTMISB 2,FI,FTAPE [X2->FTAPE 3K=L LDX 0 A1(2) 3KQ= LDX 4 2 3L9W ADX 4 0 3LPG ADN 4 A1+1 [DISTANCE MARKER FOR CHOP 3M96 LDN 5 A1+1(2) [HOME MARKER FOR CHOP 3MNQ NEXTCHOP 3N8B SRL 0 3 3NN2 SLL 0 2 3P7L STO 0 2 3PM= NGNC 7 1 [MASK OUT B0 OF INDICATED ENTRY 3Q6W SMO 5 3QLG ANDX 7 0(2) 3R66 BXE 7 6,WEHAVEIT [J IF ENTRY FOUND 3RKQ BZE 2 NOACTION [[J IF NEXT CHOP WOULD GIVE SAME ENTR 3S5B BXL 7 6,MOREBIG 3SK2 STO 5 4 3T4L ADX 4 0 3TJ= BRN NEXTCHOP 3W3W MOREBIG 3WHG ADX 5 0 3X36 LDX 0 4 3XGQ SBX 0 5 3Y2B BRN NEXTCHOP 3YG2 WEHAVEIT 3Y^L ADX 2 5 [X2->ENTRY 3^F= # 3^YW # WE HAVE FOUND AN ENTRY. IF IT IS MARKED 'FOUND' BY BACKMAP (B0 OF 42DG # TSN SET) WE TAKE NO ACTION - THERE IS A DIRECTORY ENTRY FOR IT. 42Y6 # IF IT IS MARKED 'NOT FOUND' (B0 CLEAR) BUT DOES NOT BELONG TO 43CQ # :DUMPER WE TAKE NO ACTION - THE DISCREPANCY CANNOT BE REPAIRED, AND 43XB # WASN'T CAUSED BY THE PARTIAL RESTORE ANYWAY. OTHERWISE WE SET UP 44C2 # THE FLOCNB AND ENT TO INDICATE THE TAPE, LOCATE THE ENTRY POSITION 44WL # IN :DUMPER AND INSERT IT. 45B= # 45TW LDXC 0 0(2) 46*G BCS NOACTION [IGNORE IF 'FOUND' 46T6 TESTNAMX 3,1(2),MDUMPER(1),NOACTION[IGNORE IF NOT :DUMPER 47#Q ... SETBIT 0,0(2) [INDICATE ENTRY NOW 'FOUND' 47SB MHUNT 2,FILE,FLOCNB [X2->FLOCNB 48#2 STO 6 A1+7(2) 48RL STOZ A1+6(2) 49?= STOZ A1+5(2) 49QW STOZ A1+4(2) 4==G STOZ A1+3(2) 4=Q6 BSXD 0,BMPROCTR [BIT IN MAGSTATE IDENTIFYING PROCTS 4=^Y ... SMO FX2 4?9Q ... LDX 5 AWORK1 4?FJ ... SMO 5 4?PB ANDX 0 AMAGSTATER(3) 4#92 BNZ 0 PROCTAPE [J IF A PROCTAPE 4#NL LDN 4 MGEO3DUMP(1) [X4->12HGEO3DUMPTAPE 4*8= BRN MOVENAME 4*MW PROCTAPE 4B7G LDN 4 MGEO3PROC(1) [X4->12HGEO3PROCTAPE 4BM6 MOVENAME 4C6Q LDN 5 A1(2) [X5->DESTINATION OF NAME 4CLB MOVE 4 3 [MOVE IN NAME 4D62 MHUNTW 2,FILE,ENT [X2->ENT 4DKL LDN 5 ELOC1(2) [X5->LOCAL NAME POSITION 4F5= MOVE 4 3 [MOVE LOCAL NAME INTO ENT 4FJW STO 6 ESER(2) [STORE TSN 4FLK ... LDX 0 MGEO3DUMP+1(1) ['DUMP' 4FN# ... BXU 0 ELOC2(2),PROCTAPE2 [J IF NOT A DUMP TAPE 4FQ3 ... BS 2,BEUSEDUMP [FOR DUMP TAPES ENSURE 'IN USE' BIT 4FRQ ... [SET 4FTF ... BRN NPROCTAPE2 4FX8 ...PROCTAPE2 4FYX ... BC 2,BEUSEDUMP [BIT NEVER SET FOR PROC TAPES 4G2L ...NPROCTAPE2 4G4G NAME 2,FILE,FWB [RENAME READY FOR INSERT 4GJ6 GETDIR 3 [POSITION DIR 4H3Q TESTRPN2 NOFILE,(GEOERR) [REPLY MUST BE NOFILE 4HHB INSERT [INSERT THE ENT 4J32 MHUNTW 3,FILE,FWB 4JGL NAME 3,FILE,ENT [RENAME ENT BACK 4K2= MHUNTW 3,FILE,FTRAP [TRAPS TURN NOW 4KFW NAME 3,FILE,FWB 4K^G INSERT [INSERT IT 4LF6 MHUNTW 3,FILE,FWB 4LYQ NAME 3,FILE,FTRAP [RENAME IT BACK 4MDB # 4MY2 # WE NOW MOVE ONTO A NEW ENTRY. 4NCL # 4NX= NOTSN 4PBW NOACTION 4PWG LDX 2 FX2 4QB6 LDX 4 AWORK1(2) [OFFSET TO ENTRY 4QTQ LDX 5 AWORK2(2) [COUNT OF TSNS 4R*B ADN 4 INCMAGLEN [UPDATE OFFSET 4RT2 BCT 5 NEXTENTRY [LOOP IF MORE ENTRIES IN RECORD 4S#L BRN STEP [OTHERWISE LOOK FOR NEW RECORD 4SS= # 4T?W # THAT'S THE LOT. WE CLOSE :DUMPER AND EXIT UP. 4TRG # 4W?6 YESEOF 4WQQ MFREE FILE,FLOCNB 4X=B MFREEW FILE,ENT 4XQ2 MFREEW FILE,FTRAP 4Y9L UP 4YP= CLOSETOP 4^8W UP 4^NG # 5286 # 52MQ MENDAREA 30,K99INCPTRES 537B # 53M2 #END ^^^^ ...472642130001