(George Source)
Macros used: ALTLENG, BACKSPACE, BBS, BC, BITDEFS, BS, BWNZ, BWZ, BXU, DOWN, FINDFCB, GEOERR, GETDIR, HUNTMISB, JBC, JBCS, JBS, JBSS, MENDAREA, MFREEW, MHUNTW, REWIND, SEG, SEGENTRY, SETBIT, SETNCORE, TESTREP, TESTREP2, TOPFCA, TOPFCB, TRACEIF, TRF, UP, UPPLUS
22FL ... SEG INCVFCHK,850,MIKE PUTNAM:BACK,INCDUMP 22^= # 23DW SEGENTRY K1INCVFCHK,X1 23YG SEGENTRY K2INCVFCHK,X2 24D6 SEGENTRY K3INCVFCHK,X3 24XQ SEGENTRY K4INCVFCHK,X4 252* ...#UNS FNSAD 254Y ...( 257H ... SEGENTRY K5INCVFCHK,X5 25=6 ... SEGENTRY K7INCVFCHK,X7 25#P ...) 25CB # 25X2 # THIS SEGMENT VALIDATES BLOCKS OF VITAL SYSTEM FILES AS THEY ARE 26BL # DUMPED. 26W= # ENTRY 1 IS CALLED WHEN SEGMENT INCMON REALISES IT HAS AN INDEXED 27*W # FILE ON ITS HANDS. THIS ENTRY SETS UP AND INITIALISES ANY BLOCKS 27TG # NEEDED. 28*6 # ENTRY 2 IS CALLED WHEN INCMON HAS FINISHED ITS INITIAL VALIDATION 28SQ # OF A BLOCK (RECORD HEADERS AND INDEXING). THIS BLOCK CAN BE 29#B # FOUND AS A FILE/FRB IN THE ACTIVITY CHAIN. 29S2 # ENTRY 3 IS CALLED WHEN THE FILE HAS BEEN FULLY DUMPED. IT CARRIES 2=?L # OUT ANY FINAL CHECKS NEEDED AND TIDIES UP. 2=R= # ENTRY 4 IS CALLED ON EOT/FAIL TO TIDY UP WITHOUT THE FINAL CHECKS. 2?=W # 2?QG # FOR ALL ENTRIES THE CHECKING REQUIRED IS DEFINED BY THE INDEX NUMBER 2#=6 # WHICH IS HELD IN AWORK3 2#PQ # 2*9B # USEFUL SUBROUTINES:- 2*P2 # 2*W8 ...#UNS FNSAD 2B3B ...MLANCOMP 4HC1 [ LANGUAGE OF DIRECTORY 2B8L XGEOERR [CALLED ON X0. GEOERRS 2BN= GEOERR BRIEFPM,DUD VSF 2C7W # 2CMG SWITCH [VALIDATES AWORK3 AND USES IT 2D76 [AS A SWITCH TO THE APPROPRIATE CODE 2DLQ [CALLED ON X0 2F6B LDX 7 AWORK3(2) 2F8^ ...#UNS FNSAD 2F?J ... BNZ 7 SW1 [ JUMP IF INDEXED 2FB7 ...#UNS FNSAD 2FDQ ...#SKI 2FH* ...( 2FL2 SBN 7 2 2G5L BPZ 7 SW1 [J IF NO > 1 (DIRS AND NONINDEXEDS 2GK= [NOT HANDLED BY INCVFCHK) 2GT4 ...) 2H4W SWGEO GEOERR BRIEFPM,INDEXNO 2H82 ...#UNS FNSAD 2H?6 ...SW1 SBN 7 8 2HB= ...#UNS FNSAD 2HFB ...#SKI 2HJG SW1 SBN 7 6 2J46 BPZ 7 SWGEO [J IF NO > 7 2JHQ ADX 0 AWORK3(2) 2JKF ...#UNS FNSAD 2JM8 ...( 2JNX ... SBN 0 1 [ EXIT 0 0 FOR INDEXNO 1 2JQL ... EXIT 0 0 [ EXIT 0 1 FOR INDEXNO 2 ETC 2JS* ...) 2JW4 ...#UNS FNSAD 2JXR ...#SKI 2J^G ...( 2K3B SBN 0 2 [EXIT 0 0 FOR INDEXNO 2 2KH2 EXIT 0 0 [EXIT 0 1 FOR INDEXNO 3 ETC 2KQS ...) 2L2L # 2LG= # 2L^W # 2MFG # ENTRY 1:- 2M^6 # 2NDQ X1 CALL 0 SWITCH [SWITCH TO APPROPRIATE CODE 2NKY ...#UNS FNSAD 2NR6 ... BRN MDIR1 [ DIRECTORY 2NYB BRN MDICT1 [DICTIONARY 2PD2 BRN MSER1 [SERIAL 2PXL BRN MINC1 [INCINDEX 2QC= BRN MOUT1 [OUTPUT 2QWW BRN MJOB1 [JOBLIST 2RBG BRN MUSERJ1 [USER JOBLISTS 2RW6 # 2S*Q # 2STB # ENTRY 2:- WE SET UP A POINTER TO EACH RECORD IN THE BLOCK IN TURN 2T*2 # AND SWITCH TO THE APPROPRIATE CODE. 2TSL # 2W#= X2 2WRW LDN 0 A1 [OFFSET DOWN BLOCK 2X?G STO 0 AWORK4(2) 2XR6 MHUNTW 3,FILE,FRB 2Y=Q ADN 3 A1 [POINTER TO CURRENT RECORD 2YQB X2REC 2^=2 LDX 0 0(3) [GET RECORD HEADER 2^PL BNG 0 X2ENDRECB [IF ITS A DUMMY REC IGNORE IT 329= BNZ 0 X2YREC [IF ITS END OF BLOCK GO UP 32#B ...#UNS FNSAD 32CG ... UPPLUS 1 32GL ...#UNS FNSAD 32KQ ...#STR 32NW UP 338G X2YREC 33N6 CALL 0 SWITCH [SWITCH TO APPROPRITE CODE 33T# ...#UNS FNSAD 342G ... BRN MDIR2 [ DIRECTORY 347Q BRN MDICT2 [DICTIONARY 34MB BRN MSER2 [SERIAL 3572 BRN MINC2 [INCINDEX 35LL BRN MOUT2 [OUTPUT 366= BRN MJOB2 [JOBLIST 36KW BRN MUSERJ2 [USER JOBLISTS 375G # 37K6 X2ENDREC [CONTROL RETURNS HERE WHEN THE 384Q [INDIVIDUAL PATHS HAVE FINISHED 38JB [WITH A RECORD 3942 LDX 2 FX2 39HL MHUNTW 3,FILE,FRB 3=3= ADX 3 AWORK4(2) [POINTER TO RECORD 3=GW X2ENDRECB 3?2G LDEX 0 0(3) [LENGTH OF REC 3?G6 ADS 0 AWORK4(2) [UPDATE OFFSET 3?^Q ADX 3 0 [AND REC POINTER 3#FB BRN X2REC 3#^2 # 3*DL # 3*Y= # ENTRY 3:- 3BCW # 3BXG X3 CALL 0 SWITCH [SWITCH TO APPROPRIATE CODE 3C4N ...#UNS FNSAD 3C9W ... BRN MDIR3 [ DIRECTORY 3CC6 BRN MDICT3 [DICTIONARY 3CWQ BRN MSER3 [SERIAL 3DBB BRN MINC3 [INCINDEX 3DW2 BRN MOUT3 [OUTPUT 3F*L BRN MJOB3 [JOBLIST 3FT= BRN MUSERJ3 [USER JOBLISTS 3G#W # 3GSG # 3H#6 # ENTRY 4:- 3HRQ # 3J?B X4 CALL 0 SWITCH [SWITCH TO APPROPRIATE CODE 3JDJ ...#UNS FNSAD 3JKQ ... BRN MDIR4 [ DIRECTORY 3JR2 BRN MDICT4 [DICTIONARY 3K=L BRN MSER4 [SERIAL 3KQ= BRN MINC4 [INCINDEX 3L9W BRN MOUT4 [OUTPUT 3LPG BRN MJOB4 [JOBLIST 3M96 BRN MUSERJ4 [USER JOBLISTS 3MNQ # 3N8B # 3NN2 # INCINDEX IS NOT YET INDEXED, OUTPUT IS EMPTIED AFTER A GENRES 3P7L # AND THERE IS NO CHECKING DONE ON JOBLISTS OF ANY SORT SO THE 3PM= # BRANCHES ASSOCIATED WITH THESE GO STRAIGHT UP. 3Q6W # 3Q=2 ...MSER1 3Q*6 ...MSER2 3QD= ...MSER3 3QHB ...MSER4 3QLG MINC1 3R66 MINC2 3RKQ MINC3 3S5B MINC4 3SK2 MOUT1 3T4L MOUT2 3TJ= MOUT3 3W3W MOUT4 3WHG MJOB1 3X36 MJOB2 3XGQ MJOB3 3Y2B MJOB4 3YG2 MUSERJ1 3Y^L MUSERJ2 3^F= MUSERJ3 3^YW MUSERJ4 4242 ...#UNS FNSAD 4276 ... UPPLUS 1 42== ...#UNS FNSAD 42*B ...#STR 42DG UP 42Y6 # 43CQ # 43XB # 44C2 # THE SERIAL + DICTIONARY CHECKS ARE AS FOLLOWS:- 44WL # 1) THE SPACEMT AND REALTIME BUDGETS MUST BE DEFINED IN THE LIST 45B= # RECORD AT THE START OF DICTIONARY. 45TW # 2) ALL USERS NOTED IN SERIAL AS OWNING TAPES MUST HAVE A SPACEMT 46*G # BUDGET RECORD THOUGH THIS ENTRY MAY BE ZERO. 46T6 # 3) EVERY USERNAME QUOTED AS BEING THE SUPERIOR OF ANOTHER USER 47#Q # MUST BE DEFINED IN ITS OWN DICTIONARY RECORD 47SB # 4)LOCAL NAMES IN DICTIONARY MUST HAVE BIT 0 OF THE 1ST WORD SET 48#2 # 5)THE CNEWZ WORD MUST BE SET CORRECTLY FOR EACH RECORD IN DICTIONARY 48RL # 49?= # THIS IS ACHIEVED AS FOLLOWS:- 49QW # 1)ON INITIAL ENTRY FOR SERIAL CHECKING A FILE/FINTER5 BLOCK IS 4==G # SET UP. THIS HOLDS DICTIONARY/SERIAL CROSSCHECKING DATA. THE FORMAT 4=Q6 # IS:- 4?9Q # NSWITCH = A1 SWITCH WORD 4?PB # B23=>DICTIONARY LIST RECORD HAS BEEN CHECKED 4#92 # NSPACEMT = A1+1 BIT PATTERN IDENTIFYING THE SPACEMT BUDGET RECOR 4#NL # PICKED UP FROM LIST RECORD WHEN WE PROCESS IT 4*8= # NUSER = A1+2 1ST OF A LIST OF 4WD ENTRIES 4*MW # WORD 0-2 USERNAME 4B7G # WORD 3 BIT WORD 4BM6 # B23=>REFERRED TO AS A SUP USER 4C6Q # B22=>DEFINED IN DICTIONARY 4CLB # B21=>HOLDS TAPES SO MUST HAVE 4D62 # SPACEMT RECORD 4DKL # THE END OF THESE ENTRIES IS DENOTED BY A ZERO WO 4F5= # AN ENTRY FOR :MASTER WITH B22 SET IS PRESET 4FJW # INTO THE BLOCK 4G4G # 4GJ6 # 2)AS EACH SERIAL AND DICTIONARY RECORD IS PROCESSED THE BLOCK IS 4H3Q # UPDATED AS NECESSARY 4HHB # 4J32 # 3)AFTER DICTIONARY IS COMPLETED EACH ENTRY IS CHECKED TO ENSURE 4JGL # THAT NONE ARE REFERRED TO BUT NOT DEFINED 4K2= # 4KFW # FINTER5 DEFINITIONS 4K^G #DEF NSWITCH=A1 4LF6 #DEF NSPACEMT=A1+1 4LYQ #DEF NUSER=A1+2 4MDB BITDEFS NSWITCH,23,NBLISTREC 4MY2 BITDEFS 3,21,NBTAPES,NBDEF,NBSUP 4NCL # 4NX= # 4PBW MASTENT 4PWG 12HMASTER [PRESET ENTRY FOR MASTER IN FINTER5 4QB6 2 [STATE WORD 4QTQ 0 [ZERO INDICATING EMPTY ENTRY 4R*B SPACEMT 8HSPACEMT 4RT2 REALTIME 8HREALTIME 4S#L # 4SS= SFINDFINT [S/R TO LOCATE FINTER5 FOR ALTLENG 4T?W MHUNTW 2,FILE,FINTER5 4TRG EXIT 1 0 4W?6 # 4WQQ MADDFINT [S/R TO ADD USERNAME IN X4-6 TO 4X=B [FINTER5 IF NECESSARY. CALLED ON X0 4XQ2 [WITH X2=FX2. USES AWORK1+X7. 4Y9L [ON EXIT X3->ENTRY,X1=FX1,X2=FX2 4YP= [MAY COORDINATE 4^8W SBX 0 FX1 4^NG STO 0 AWORK1(2) [RELATIVISE AND SAVE LINK 5286 MHUNTW 3,FILE,FINTER5 52MQ LDX 1 ALOGLEN(3) 537B SBN 1 NUSER-A1 53M2 SRL 1 2 [COUNT OF ENTRIES IN BLOCK 546L ADN 3 NUSER [X3->1ST ENTRY 54L= NXENT 555W LDX 0 0(3) 55KG BZE 0 NOTIN [FOUND AN UNUSED ENTRY - J TO 5656 TXU 4 0(3) [INSERT NEW ENTRY HERE 56JQ TXU 5 1(3) 574B TXU 6 2(3) 57J2 BCC YIN [J IF FOUND ENTRY 583L ADN 3 4 [INCREMENT POINTER 58H= BCT 1 NXENT [IF SPACE LEFT IN BLOCK CONTINUE SEAR 592W [OTHERWISE LENGTHEN BLOCK AND ADD 59GG [ENTRY 5=26 MHUNTW 2,FILE,FINTER5 5=FQ LDX 3 ALOGLEN(2) 5=^B ADN 3 100 [SPACE FOR 25 MORE USERS 5?F2 ALTLENG 2,3,SFINDFINT 5?YL MHUNTW 2,FILE,FINTER5 5#D= ADN 3 A1(2) 5#XW SBN 3 101 5*CG NOTIN 5*X6 STO 4 0(3) [STORE USERNAME 5BBQ STO 5 1(3) 5BWB STO 6 2(3) 5CB2 STOZ 3(3) [ZERO STATE WORD 5CTL STOZ 4(3) [SHOW NEXT ENTRY EMPTY 5D*= YIN 5DSW LDX 1 FX1 5F#G LDX 2 FX2 5FS6 LDX 0 AWORK1(2) [RESTORE AND RESET LINK 5G?Q ADX 0 FX1 5GRB EXIT 0 0 5H?2 # 5HQL # 5J== ...MDICT1 [STARTING SERIAL. SET UP AND 5JPW [INITIALISE BLOCK 5K9G SETNCORE NUSER-A1+101,3,FILE,FINTER5 5KP6 [ROOM FOR 25 ENTRIES + 1WD TO HOLD 5L8Q [ZERO 5LNB STOZ NSWITCH(3) 5M82 LDN 1 MASTENT(1) 5MML LDN 2 NUSER(3) 5N7= MOVE 1 5 5N=B ...#UNS FNSAD 5N*G ... UPPLUS 1 5NDL ...#UNS FNSAD 5NHQ ...#STR 5NLW UP 5P6G # 5PL6 # 62X2 MDICT2 [X3->DICTIONARY RECORD 63BL MHUNTW 1,FILE,FINTER5 63W= JBSS NOTLIST,1,NBLISTREC [J IF LISTREC PROCESSED ALREADY 64*W LDX 0 CNEWZ-A1(3) [VALIDATE CNEWZ FOR LISTREC 64TG SBN 0 1 65*6 BZE 0 NEWZOK1 65SQ CALL 0 XGEOERR 66#B NEWZOK1 66S2 LDX 4 IZCOUNT-A1(3) [COUNT OF PRIV+BUDG SUBRECORDS 67?L LDN 2 IZLIST-A1(3) [ADDR OF 1ST SUBREC 67R= LDX 1 FX1 68=W LDX 5 SPACEMT(1) [PICK UP SPACEMT NAME 68QG LDX 6 SPACEMT+1(1) 69=6 NXBUDG1 69PQ TXU 5 1(2) [IS THIS SUBREC SPACEMT 6=9B TXU 6 2(2) 6=P2 BCC SPACEFO [J IF SO 6?8L ADN 2 4 [OTHERWISE UPDATE POINTER 6?N= BCT 4 NXBUDG1 [AND LOOP IF THERE ARE MORE 6#7W CALL 0 XGEOERR [BREAK IF SPACEMT NOT DEFINED 6#MG SPACEFO 6*76 LDX 4 0(2) 6*LQ MHUNTW 1,FILE,FINTER5 6B6B STO 4 NSPACEMT(1) [REMEMBER BIT PATTERN FOR LATER USE 6BL2 LDX 4 IZCOUNT-A1(3) [COUNT OF BUDG/PRIV SUBRECORDS 6C5L LDN 2 IZLIST-A1(3) [X2->1ST SUBREC 6CK= LDX 1 FX1 6D4W LDX 5 REALTIME(1) [GET REALTIME 6DJG LDX 6 REALTIME+1(1) 6F46 NXBUDG2 6FHQ TXU 5 1(2) [IS THIS SUBREC IT 6G3B TXU 6 2(2) 6GH2 BCC X2ENDREC [J IF SO 6H2L ADN 2 4 [OTHERWISE UPDATE SUBRECPOINTER 6HG= BCT 4 NXBUDG2 [AND LOOP IF MORE SUBRECS 6H^W CALL 0 XGEOERR [REALTIME NOT DEFINED - BREAK 6JFG # 6J^6 NOTLIST [NOT THE LIST RECORD 6KDQ LDX 0 CUSER-A1(3) 6KYB BNG 0 NUPDATE [J IF NOT AN UPAATE RECORD 6LD2 LDX 0 CNEWZ-A1(3) 6LXL SBN 0 2 [VALIDATE CNEWZ FOR UPDATE REC 6MC= BZE 0 X2ENDREC 6MWW CALL 0 XGEOERR 6NBG # 6NW6 NUPDATE [NEITHER LIST NOR UPDATE=> USER REC 6P*Q LDX 0 CNEWZ-A1(3) [VALIDATE CNEWZ FOR USER REC 6PTB SBN 0 1 6Q*2 BZE 0 NEWZOK2 6QSL CALL 0 XGEOERR 6R#= NEWZOK2 6RRW LDX 0 CLOCN-A1(3) 6S?G BNG 0 YLOCNAME [J IF NAMEREC APPARENTLY OK 6SR6 [NOT A VERY GOOD TEST 6T=Q CALL 0 XGEOERR 6TQB YLOCNAME 6W=2 LDX 4 CSUPUSER-A1(3) [PICK UP USERNAME OF SUP 6WPL LDX 5 CSUPUSER-A1+1(3) 6X9= LDX 6 CSUPUSER-A1+2(3) 6XNW CALL 0 MADDFINT [INSERT ENTRY IF NEC 6Y8G BS 3,NBSUP [SET BIT TO SHOW REFERRED TO 6YN6 MHUNTW 3,FILE,FRB 6^7Q ADX 3 AWORK4(2) [X3->REC 6^MB LDX 4 CUSER-A1(3) [PICK UP USERNAME 7272 LDX 5 CUSER-A1+1(3) 72LL LDX 6 CUSER-A1+2(3) 736= CALL 0 MADDFINT [LOCATE OR SET UP ENTRY 73KW JBCS USEDEF,3,NBDEF [CHECK NOT ALREADY DEFINED 745G CALL 0 XGEOERR 74K6 USEDEF 754Q MHUNTW 1,FILE,FRB 75JB ADX 1 AWORK4(2) [X1->REC 7642 TXU 4 CSUPUSER-A1(1) [CHECK USER NOT HIS OWN SUP 76HL TXU 5 CSUPUSER-A1+1(1) 773= TXU 6 CSUPUSER-A1+2(1) 77GW ... BCS X2ENDREC 782G CALL 0 XGEOERR [USER=SUPERIOR 7CSG # 7D#6 # 7DRQ MDICT3 [END OF DICTIONARY 7F?B MHUNTW 3,FILE,FINTER5 7FR2 LDN 3 NUSER(3) [X3->1ST ENTRY 7G=L MD3LOOP 7GQ= LDX 4 0(3) [EXIT IF FINISHED 7H9W BZE 4 MDICT4 7HPG LDX 5 1(3) [PICK UP USERNAME TO IDENTIFY IT IF B 7J96 LDX 6 2(3) 7JNQ JBC NOTSUP,3,NBSUP [J IF NOT REFERRED TO AS A SUP 7K8B JBS NOTSUP,3,NBDEF [OR IF ACTUALLY DEFINED 7KN2 CALL 0 XGEOERR [OTHERWISE BREAK 7L7L NOTSUP 7LM= ADN 3 4 [INCREMENT POINTER 7M6W BRN MD3LOOP 7MLG # 7N66 # 7P5B MDICT4 7PK2 MFREEW FILE,FINTER5 7PN6 ...#UNS FNSAD 7PR= ... UPPLUS 1 7PWB ...#UNS FNSAD 7P^G ...#STR 7Q4L UP 7Q4N ...#UNS FNSAD 7Q4Q ...( 7Q4S ...MDIR1 [ START OF DIRECTORY 7Q4W ... MHUNTW 1,FI,INDEXCHK 7Q4Y ... LDN 0 NAME2A [ SET LINK 7Q52 ... STO 0 INDEXLINK(1) [ IN BLOCK 7Q54 ... STOZ INDEXECOPS(1) [ ZEROIZE REST OF BLOCK 7Q56 ... STOZ INDEXNUM(1) [ 7Q58 ... STOZ INDEXTRAPS(1) [ 7Q5= ... UPPLUS 1 7Q5# ...# 7Q5B ...# 7Q5D ...MDIR2 [ BLOCK OF DIRECTORY 7Q5G ... MHUNTW 2,FI,INDEXCHK 7Q5J ... LDX 0 INDEXLINK(2) [ PICK UP LINK FROM PREVIOUS 7Q5L ... ADX 0 FX1 [ RELATIVISE LINK 7Q5N ... EXIT 0 0 [ BLOCK AND EXIT 7Q5Q ... [ X3 IS POINTING TO RECORD 7Q5S ...# 7Q5W ...# 7Q5Y ...MDIR3 [END OF DIRECTORY 7Q62 ... MHUNTW 2,FI,INDEXCHK 7Q64 ... LDX 0 INDEXLINK(2) [ POINTER FROM LAST BLOCK 7Q66 ... LDN 3 0 [ SHOW END OF DIRECTORY 7Q68 ... ADX 0 FX1 7Q6= ... EXIT 0 0 [ FINISH CHECKING 7Q6# ...# 7Q6B ...# 7Q6D ...XENDIR 7Q6G ...MDIR4 [ EOT OR TAPE FAIL 7Q6J ... UPPLUS 1 7Q6L ...# 7Q6N ...NEXTDIREC [ GETS POINTER TO NEXT RECORD OF DIRE 7Q6Q ... SBX 0 FX1 7Q6S ... STO 0 INDEXLINK(2) [ PRESERVE LINK 7Q6W ... BRN X2ENDREC [ GET RECORD 7Q6Y ...NAME2 7Q72 ... CALL 0 NEXTDIREC [ X3-> NEXT RECORD 7Q74 ...NAME2A 7Q76 ... BZE 3 XENDIR [ END OF FILE 7Q78 ...# 7Q7= ...# THE FOLLOWING CHECKS MUST BE IDENTICAL WITH THOSE IN B/MAP 7Q7# ...# BEFORE CHANGING ANY OF IT, CONSULT OWNER OF SEG BMAPONE 7Q7B ...# 7Q7D ... LDEX 0 FRH(3) 7Q7G ... SBN 0 41 7Q7J ... BNZ 0 XCORRUPT 7Q7L ... BWNZ ERESN(3),XCORRUPT 7Q7N ...XRET 7Q7Q ... LDN 1 0 7Q7S ... JBC NINDEX2,3,BNINDEX [J IF NOT INDEXED 7Q7W ... LDX 1 EINDEXN(3) [GET INDEX NO 7Q7Y ...NINDEX2 7Q82 ... STO 1 INDEXNUM(2) [STORE EITHER 0 OR INDEX NO 7Q84 ... [FOR LATER CHECKS AND FILE DUMPIMG 7Q86 ... LDX 0 ECOPSN(3) 7Q88 ... STO 0 INDEXECOPS(2) [STORE FOR LATER CHECKS 7Q8= ... JBC NWK,3,BNWORK [J IF NOT A WKFILE 7Q8# ... SETBIT 11,INDEXECOPS(2) [SO LATER CODE KNOWS ITS A WF 7Q8B ...NWK 7Q8D ... LDX 0 ENUSEN(3) 7Q8G ... STO 0 INDEXTRAPS(2) [SIM. FOR TRAPS COUNT 7Q8J ... LDEX 0 ECOPSN(3) 7Q8L ... SBN 0 2 7Q8N ... BPZ 0 XBENTA [J IF MORE THAN 1 BLOCKS REC 7Q8Q ...XRETA 7Q8S ... JBC NCAREFUL,3,BNCARE [J IF NOT CAREFUL 7Q8W ... LDX 0 EAUTOCOUNTN(3) 7Q8Y ... ORX 0 ESAVECOUNTN(3) 7Q92 ... BNZ 0 XBENTB [J IF FROZEN- CAN'T FREEZE 7Q94 ... [CAREFUL FILES 7Q96 ...NCAREFUL 7Q98 ... JBS TAPE,3,BNLIB [J IF A TAPE 7Q9= ... BWNZ ESERN(3),XCORRUPT [J IF NONZERO TSN 7Q9# ... LDX 0 ELOC1N(3) 7Q9B ... BPZ 0 XCORRUPT [J IF 1ST CHAR LESS THEN #40 7Q9D ... LDX 0 EREELN(3) 7Q9G ... SBN 0 1 7Q9J ... BNZ 0 XCORRUPT [J IF REEL NO NOT 1 7Q9L ... JBS NODUMP2,3,BNTEMP [J IF NOT PERMANENT 7Q9N ... BWZ EUSE1N(3),NODUMP2 [J IF TERMINAL FILE 7Q9Q ... BWNZ INDEXECOPS(2),ONLDIR [J IF BLOCKS REC PRESENT 7Q9S ... JBC XCORRUPT,3,BNERASE [J IF A DIR OFFLINE AND NOT 7Q9W ... [TO-BE-ERASED 7Q9Y ...ONLDIR 7Q=2 ... LDX 1 FX1 7Q=4 ... LDX 0 ELANN(3) 7Q=6 ... BXU 0 MLANCOMP(1),XCORRUPT [J IF LANG NOT C1 FOR DIR 7Q=8 ... LDX 0 EGENN(3) 7Q== ... SBN 0 1 7Q=# ... BNZ 0 XCORRUPT [J IF GEN NOT 1 FOR DIR 7Q=* ...# 7Q=B ...# CHECK THAT BFDIRBELOW IS SET OTHER WISE LIMB MAY BE LOST 7Q=C ...# IF A RESTORE IS DONE 7Q=D ... TOPFCB 1 7Q=F ... JBC XCORRUPT,1,BFDIRBELOW 7Q=G ... LDX 1 FX1 7Q=H ...# 7Q=J ...NODUMP2 [SKIP TO NEXT NAME REC 7Q=K ... LDEX 4 INDEXECOPS(2) 7Q=L ... BZE 4 NOTBLOCK [J IF NOT EXPECTING A BLOCKS REC 7Q=M ... CALL 0 NEXTDIREC [ X3-> BLOCKS RECORD 7Q=N ... BZE 3 XCORRUPT [J IF ENEXPCTED EOF 7Q=P ... BBS 11,INDEXECOPS(2),WK [SKIP NEXT TEST FOR WFS TILL 7Q=Q ... [B7641 IS CURED 7Q=S ... LDEX 0 FRH(3) 7Q=W ... SBN 0 2 [X0=NO OF BLOCKS IN REC 7Q=Y ... LDX 4 INDEXECOPS(2) 7Q?2 ... SRL 4 15 [ X4=NO OF BLOCKS EXPECTED 7Q?4 ... BXU 0 4,XBENTC [J IF DIFFERENT 7Q?6 ...WK 7Q?8 ... LDX 0 1(3) [X0=RESIDENCE NO 7Q?= ... SBN 0 3 7Q?# ... BNG 0 XBENTC [J IF OUT OF RANGE 7Q?B ... SBN 0 64-3 7Q?D ... BPZ 0 XBENTC [J IF OUT OF RANGE 7Q?G ...NOTBLOCK 7Q?J ... LDX 0 INDEXNUM(2) 7Q?L ... BZE 0 NOTINDEX [J IF INDEX REC NOT EXPECTED 7Q?N ... CALL 0 NEXTDIREC [ X3-> INDEX RECORD 7Q?Q ... BZE 3 XCORRUPT [J IF UNEXPECTED EOF 7Q?S ... LDEX 0 FRH(3) 7Q?W ... SBN 0 3 [X0=NO OF BLOCKS INDEXED 7Q?Y ... LDX 4 INDEXECOPS(2) 7Q#2 ... SRL 4 15 [X4= NO OF BLOCKS EXPECTED 7Q#4 ... BXU 0 4,XBENTD [J IF DIFFERENT 7Q#6 ... LDCT 0 #200 7Q#8 ... ERX 0 INDEXID-A1(3) 7Q#= ... BNZ 0 XBENTD [J IF NOT INDEX REC 7Q## ...NOTINDEX 7Q#B ... LDX 4 INDEXTRAPS(2) [GET NO OF TRAPS EXPECTED 7Q#D ... BZE 4 NAME2 [J IF NONE 7Q#G ...NXTRAP 7Q#J ... STO 4 INDEXTRAPS(2) [ SAVE NO OF TRAPS RECORDS 7Q#L ... CALL 0 NEXTDIREC [ X3-> TRAPS RECORD 7Q#N ... BZE 3 XCORRUPT [J IF UNEXPECTED EOF 7Q#Q ... LDX 4 INDEXTRAPS(2) [ RESTORE NO OF TRAPS RECORDS LEF 7Q#S ... LDEX 0 FRH(3) 7Q#W ... SBN 0 5 [J IF REC HEADER NOT 5 7Q#Y ... BNZ 0 XCORRUPT 7Q*2 ... LDX 0 ETRUSER1-A1(3) 7Q*4 ... BPZ 0 XCORRUPT [J IF 1ST CHAR OF USERNAME<#40 7Q*6 ... BCT 4 NXTRAP [J TO DEAL WITH NEXT TRAP IF ANY 7Q*8 ... BRN NAME2 7Q*= ...TAPE 7Q*# ... NGX 0 ESERN(3) 7Q*B ... BPZ 0 XCORRUPT [TSN MUST BE +VE 7Q*D ... BRN NODUMP2 7Q*G ...# CHECK FAILURES BRANCHING TO XCORRUPT CAUSE IMMEDIATE GEOERR 7Q*J ...# THIS IS BECAUSE THE DUMP WOULD ITSELF BE CORRUPT ENOUGH TO BREAK 7Q*L ...# BACKMAP. THOSE BRANCHING TO A 'XBENT' LABEL SET A BIT WHICH CAUSES A 7Q*N ...# GEOERR AFTER THE DUMP IS COMPLETE. THESE ERRORS WILL BE CORRECTED BY 7Q*Q ...# GEN RES 7Q*S ...XBENT 7Q*W ... BS ,BDOGENRES [ST CORRUPTION BIT IN INCWORD 7Q*Y ... BRN XRET [J BACK INTO MAINSTREAM CODE 7QB2 ...XBENTA 7QB4 ... BS ,BDOGENRES 7QB6 ... LDN 0 1 7QB8 ... DEX 0 INDEXECOPS(2) [ASSUME HAS 1 BLOCKS REC 7QB= ... BRN XRETA 7QB# ...XBENTB 7QBB ... BS ,BDOGENRES 7QBD ... BRN NCAREFUL 7QBG ...XBENTC 7QBJ ... BS ,BDOGENRES 7QBL ... BRN NOTBLOCK 7QBN ...XBENTD 7QBQ ... BS ,BDOGENRES 7QBS ... BRN NOTINDEX 7QBW ...XCORRUPT 7QBX ...# SET POINTERS AS IF REGULAR STEPS HAVE BEEN TAKEN 7QBY ...# 7QB^ ... TOPFCA 2 7QC2 ... SMO FX2 7QC3 ... LDX 0 AWORK4 7QC4 ... STO 0 FREADWORD(2) 7QC8 ... DOWN INCEOT,4 [OUTPUT WARNING MESSAGE 7QC= ... UP [ PRETEND EOT OCCURRED TO 7QC# ... [GIVE OPS A CHANCE 7QCB ...# 7QCD ...# END OF BACKMAP CHECKS CODE 7QCG ...# 7QCJ ...# 7QCL ...# 7QCN ...) 7QJ= # 7R3W # 7R46 ...#UNS FNSAD 7R4B ...( 7R4L ...# COMES DOWN HERE FROM INCWRITE WHEN UPDATING DIRENT 7R4W ...# FOR A DIRECTORY 7R56 ...X5 7R5B ... HUNTMISB 1,FI,FDUMPCOM [ 7R5L ... JBC SETBITS,1,BFDUMPCOM [ 7R5W ... MHUNTW 2,FILE,FINC [ 7R66 ... JBS SETBITS,2,BINCMDUMP [ 7R6B ...# BFDUMPCOM SET , BINCMDUMP CLEAR - DONT CHANGE THE BITS 7R6L ... UP 7R6W ...# OTHERWISE SET BITS IF BFDUMPCOM SET,CLEAR THEM IF BFDUMPCOM CLEAR 7R76 ...SETBITS 7R7B ... LDX 7 1 [ STORE POINTER TO FDUMPCOM 7R7L ... MHUNTW 3,FILE,FWB [ RENAMED DIR ENT 7R7W ... LDN 2 0 [ POINTER IN FABSNB 7R86 ... FINDFCB 2,6,NORC [ SEARCH FOR FCB IN CHAINS 7R8B ... LDX 1 7 [ POINTER TO FDUMPCOM 7R8L ... 7R8W ... TESTREP NOTFOUND,XNOTFOUND [ JUMP IF FCB NOT THERE 7R96 ... LDX 2 6 [ POINTER TO FCB 7R9B ... TRF 1,BFDUMPCOM,2,BFDUMP [ MOVE BIT FROM FDUMPCOM TO FCB 7R9L ...XNOTFOUND 7R9W ... TRF 1,BFDUMPCOM,3,BEDUMP [SET,CLEAR BIT IN DIR ENT 7R=6 ... UP 7R=B ...# 7R=L ...# COMES DOWN HERE FROM INCWRITE WHEN ONLY A JOBLIST(****) 7R=W ...# IS TO BE DUMPED IN THIS DIRECTORY 7R?6 ...XJOBLIST 7R?B ... 12HJOBLIST 7R?L ... 1 7R?W ... 1 7R#6 ... 4H**** 7R#B ...X7 7R#L ... MHUNTW 3,FILE,FLOCNB [ MOVE 'JOBLIST' 7R#W ... 7R*6 ... LDN 1 XJOBLIST(1) [ INTO FLOCNB 7R*B ... LDN 2 A1(3) 7R*L ... MOVE 1 6 7R*W ... GETDIR 1 [POSITION AT JOBLIST DIRENT 7RB6 ... TRACEIF K6INCVFCHK,99,299,FUSER1(2),JOBLISTG 7RBB ... TESTREP2 OK,ZFOUNDJOBL 7RBL ... REWIND [ CANT FIND JOBLIST 7RBW ... MHUNTW 1,FILE,FINC [ BETTER SEARCH WHOLE DIRECTORY 7RC6 ... BC 1,BINCGETDIR [ CLEAR JOBLIST BIT 7RCB ... TRACEIF K6INCVFCHK,99,299,FUSER1(2),JLISTMIS 7RCL ... TRACEIF K6INCVFCHK,99,299,ACOMMUNE9(2),JLISTREP 7RCW ... UP 7RD6 ...ZFOUNDJOBL 7RDB ... BACKSPACE [ ABOUT TO READ NAME REC 7RDL ... MFREEW FILE,ENT [ FREE ENT SET UP BY GETDIR NOT NE 7RDW ... MHUNTW 1,FILE,FINC [ SET BIT TO DHOW SUCCESS IN GETDIR 7RF6 ... BS 1,BINCGETDIR 7RFB ... UP [OK FOUND JOBLIST 7RFL ...) 7RFW ... 7RHG MENDAREA 20,K99INCVFCHK 7S36 # 7SGQ #END ^^^^ ...174253040021