22FL SEG BMSJRNL,7,GEORGE PORTER,BMAP 22^= SEGENTRY K1BMSJRNL,Z1BMSJRNL 23DW SEGENTRY K2BMSJRNL,ZBMCHECKRF 23NN ... SEGENTRY K3BMSJRNL,Z3BMSJRNL 23QL ...#DEF CURREC=ASUPUSER 23SJ ...#DEF ENDUSED=CURREC+1 23WG ...#DEF ENDBLOCK=ENDUSED+1 23YG [ 245N ...NSWAPID +ASWAPID 24=W ...[ 24D6 NJOURNAL +4 24XQ 12HJOURNAL 25CB NSYSJ +10 25X2 12HSYSTEM 26BL ... 12HJOURNAL 26W= 1,1,4HC1 27*W NLOC 12HSJFILE 27TG 1,1 28*6 NLAN 4HB1 28G# ...XJRNLINK 28MG ... LINK BMSJRNL,3 28NB ...PMSJ 4HPMSJ 28NS ...PMSQ 4HPMSQ 28P= ...[ 28Q6 ...SUB1 28R2 ... MHUNTW 2,FI,FUTILITY 28RW ... EXIT 1 0 28SQ [ 29#B STEPWRITE 29S2 SBX 6 FX1 2=?L STEPWRITE 2=R= ADX 6 FX1 2?=W EXIT 6 0 2?QG [ 2#=6 RDELETE 2#PQ SBX 6 FX1 2*9B LDX 3 7 2*P2 ADN 7 1 2B8L BZE 3 RDLOOP 2BN= READ 2C7W MHUNTW 1,FILE,FRB 2CMG NGN 0 #100 [B0-17 2D76 ANDX 0 EDESCRIBE+A1(1) 2DLQ BNZ 0 RNOTBLOCKS [J IF INDEX OR TRAPS 2F6B NAME 1,BSTB,FULLB 2FL2 FULLBPAS 1,2 2G5L BRN RDSKIP 2GK= RNOTBLOCKS 2H4W FREECORE 1 2HJG RDSKIP 2J46 SBN 3 1 2JHQ BZE 3 RDLOOP 2K3B SKIP ,0(3) 2KH2 RDLOOP 2L2L DELETE 2LG= BCT 7 RDLOOP 2L^W ADX 6 1 2MFG EXIT 6 0 2M^6 [ 2NDQ Z1BMSJRNL [ENTRY TO SORT OUT SJFILES 2NYB [ 2PD2 MHUNT 2,FILE,FABSNB 2PXL ADN 1 NJOURNAL 2QC= ADN 2 A1 2QWW MOVE 1 4 2RBG OPEN XBR,GENERAL,QUERY [OPEN :JOURNAL 2RW6 TESTREP2 OK,XISTS [J IF IT EXISTS 2S*Q MHUNTW 2,FILE,FABSNB 2STB ADN 1 NSYSJ 2T*2 ADN 2 A1 2TSL MOVE 1 10 2W#= CREATEB 2 2WRW ADN 2 CEUSE1 2X?G ADN 1 NJOURNAL+1 2XR6 MOVE 1 3 2Y=Q NEWDIR XBR [ATTEMPT TO CREATE :JOURNAL 2YQB TESTRPN2 OK,XBR [GEOERR IF NEWDIR UNSUCCESSFUL 2YXH ... TRACEIF K6BMSJRNL,99,,2,CE JDIR 2Y^= ... BRN Z1BMSJRNL 33N6 STARTACT 347Q LDX 2 GSIGN 34MB #SKI K6BMSJRNL>199-199 3572 ( 35LL ANDX 2 JSJPTR 366= BZE 2 XBR [SHOULD BE -VE AT THIS STAGE 36KW ) 375G ERX 2 JSJPTR [CLEAR B0 37K6 FPUT [JOURNAL ACTIVITY 384Q ADN 2 FPROPUSER 38JB SMO JSJPTR 3942 LDN 3 JNLUSER 39HL MOVE 2 3 3=3= ... SUICIDE 3=GW XISTS 3=J4 ... GETACT BSA,AUTOMAP 3=K= ... LDX 3 BPTR(2) 3=LD ... LINKSET 3,XJRNLINK(1) 3=ML ... LOCK 3 3=NS ... CHANGEFI 3 3=Q2 ... LDX 3 BPTR(2) 3=R8 ... UNLOCK 3 3=SB ... LDX 2 3 3=TJ ... FPUT 3=WQ ... ACROSS BMJLIST,1 3=XY ...Z3BMSJRNL 3=Y3 ...[ 3=Y6 ...[****************************************************** Z3BMSJRNL 3=Y9 ...[ FIRST TRY TO RECOVER JOURNAL CHAIN AND USAGE 3=Y# ...[ BLOCKS FROM THE LOWEST NUMBER SWAPFILE - P.M. 3=YC ...[ SHOULD HAVE WRITTEN THEM THERE. 3=YG ...[ 3=^= ...[ 3=^* ...[ FIRST FIND LOWEST NUMBER SWAPFILE. 3=^D ...[ 3=^H ... LDX 3 ALFTP [ ALFTABLE POINTER 3=^L ... LDX 5 ALOGLEN(3) 3=^P ... ADX 5 3 [ => TO END OF BLOCK 3=^S ... LDN 6 0 [ RESIDENCE NO. 3=^X ...TRYNXT 3?22 ... LDX 0 A1(3) 3?25 ... BNG 0 NXTNTRY [ J. IF NO RES OF THIS NUMBER 3?28 ... LDCT 0 #200 [ CHECK IF SWAP RESIDENCE 3?2? ... ANDX 0 A1(3) 3?2B ... BNZ 0 SWAPFND [ J. IF LOWEST SWAP RESIDENCE 3?2F ...NXTNTRY 3?2J ... ADN 6 1 [ ELSE UPDATE RES. NO. 3?2M ... ADN 3 2 [ AND POINTER 3?2Q ... TXL 3 5 [ CHECK IF PAST END OF BLOCK 3?2T ... BCS TRYNXT [ J. BACK TO TRY NEXT IF NOT 3?2Y ... CALL 4 XBR [ IF NO SWAP RESIDENCE FOUND 3?33 ...SWAPFND [ THEN J. TO GEOERR OTHERWISE 3?36 ... [ SWAP RESIDENCE NO. NOW IN X6 3?39 ... STO 6 AWORK1(2) [ REMEMBER RES. NO. 3?3# ... STOZ AWORK2(2) [ INITIAL BLOCK NUMBER TO READ 3?3C ... SETNCORE 2048,3,FI,FUTILITY,1 [ SET UP BUFFER BLOCK FOR READS 3?3G ... LOCKC 3,SUB1 [ LOCK IT FOR DURATION 3?3K ... CALL 1 SUB1 3?3N ... LDN 5 A1(2) [ ADDRESS OF START OF BLOCK 3?3R ... LDN 6 A1+2048(2) [ ADDRESS OF END OF BLOCK 3?3W ... LDX 2 FX2 3?3^ ... STO 5 CURREC(2) [ INITIALISE PTR. TO CURRENT REC. 3?44 ... STO 5 ENDUSED(2) [ AND PTR. TO END OF USED SPACE 3?47 ... STO 6 ENDBLOCK(2) [ AND PTR. TO END OF BLOCK 3?4= ... LDN 7 0 [ SWITCH WORD SET ZERO 3?4* ...READBLOX 3?4D ... LDX 0 ENDBLOCK(2) [ CALCULATE SPARE SPACE 3?4H ... SBX 0 ENDUSED(2) [ IN BUFFER 3?4L ... SBN 0 512 [ MORE THAN 512 ? 3?4P ... BPZ 0 ROOMENUFF [ J. IF THERE IS ENOUGH ELSE 3?4S ... [ MOVE CURRENT RECORD ETC. TO 3?4X ... [ START OF THE BUFFER 3?52 ... CALL 1 SUB1 [ 3?55 ... LDN 5 A1(2) 3?58 ... LDX 2 FX2 [ SET UP POINTERS IN X4 AND X5 3?5? ... LDX 4 CURREC(2) [ TO MOVE USED DATA TO START OF 3?5B ... NGN 3 513 [ OF BLOCK 3?5F ... ADX 3 ENDUSED(2) [ CALCULATE AMOUNT OF 3?5J ... SBX 3 CURREC(2) [ DATA TO MOVE 3?5M ...SEEIFMORE 3?5Q ... BNG 3 NOTMORE [ J. IF < 513 ELSE 3?5T ... MOVE 4 512 [ MOVE 512 WORDS 3?5Y ... ADN 4 512 3?63 ... ADN 5 512 [ UPDATE POINTERS 3?66 ... SBN 3 512 [ LESS 512 ALREADY MOVED 3?69 ... BRN SEEIFMORE 3?6# ...NOTMORE 3?6C ... ADN 3 513 [ RESET AMOUNT TO MOVE 3?6G ... MOVE 4 0(3) [ MOVE REST OF USED DATA 3?6K ... ADX 5 3 3?6N ... STO 5 ENDUSED(2) [ UPDATE END OF USED SPACE PTR. 3?6R ... CALL 1 SUB1 3?6W ... LDN 0 A1(2) 3?6^ ... LDX 2 FX2 3?74 ... STO 0 CURREC(2) [ UPDATE CURRENT RECORD PTR. 3?77 ...ROOMENUFF 3?7= ...[ 3?7* ...[************************************************************* 3?7D ...[ THERE IS NOW ENOUGH SPACE IN THE BUFFER FOR THE NEXT 3?7H ...[ 512 WORDS TO BE READ IN FROM THE SWAPFILE 3?7L ...[ 3?7P ... BACKREAD BSET,BSBS,RFAIL,AWORK1(2),,ENDUSED(2) 3?7S ... LDN 0 512 3?7X ... ADS 0 ENDUSED(2) [ UPDATE END OF USED SPACE PTR. 3?82 ... LDN 0 4 3?85 ... ADS 0 AWORK2(2) [ UPDATE NEXT BLOCK NO. TO READ 3?88 ... BNG 7 NXTRECORD [ J. IF NOT ON FIRST BLOCK 3?8? ... ORX 7 GSIGN [ SHOW FIRST BLOCK READ 3?8B ... CALL 1 SUB1 3?8F ... LDX 0 A1(2) [ FIRST WORD OF DATA 3?8J ... LDX 1 FX1 3?8M ... SBX 0 PMSJ(1) [ CHECK IF 'PMSJ' 3?8Q ... BNZ 0 RFAIL [ J. TO GIVE UP 3?8T ... LDX 0 A1+1(2) [ PICK UP CONVERSION IDENT. 3?8Y ... SBX 0 NSWAPID(1) [ IF NOT SAME AS CURRENT 3?93 ... BNZ 0 RFAIL [ J. TO GIVE UP 3?94 ... LDX 0 A1+2(2) [IS THIRD WORD 3?95 ... SBX 0 PMSQ(1) [PMSQ 3?96 ... BNZ 0 NOPMSQ [J IF NO 3?97 ... LDX 0 A1+3(2) [ELSE STORE SEQUENCE NO 3?98 ... STO 0 ERLSEQNO [IN FIXED 3?99 ... LDN 0 A1+4(2) [ADDRESS FIRST RECORD 3?9= ... BRN UPPTR 3?9? ...NOPMSQ 3?9# ... LDN 0 A1+2(2) [ ADDRESS OF FIRST RECORD 3?9* ...UPPTR 3?9B ... LDX 2 FX2 3?9C ... STO 0 CURREC(2) [ UPDATE CURRENT RECORD PTR. 3?9D ...[ IF GENERAL (OR PARTIAL INVOLVING :JOURNAL) RESTORE 3?9F ...[ IS BEING DONE, DON'T RECOVER DATA FROM SWAPFILE. 3?9G ...[ 3?9H ... LDX 0 GINCTSN 3?9J ... BNZ 0 NDOFSWAP [IF GEN. RES. DONE 3?9K ... TOPFCB 3 [OR IF PARTIAL RESTORE 3?9L ... JBS NDOFSWAP,3,BFPARTRES [INVOLVING :JOURNAL 3?9M ...# 3?9N ...NXTRECORD 3?9P ... LDX 3 CURREC(2) 3?9Q ... LDX 0 0(3) [ IF FIRST WORD IS 'PMSJ' 3?9R ... BXE 0 PMSJ(1),NDOFSWAP [ THEN NO MORE DATA TO CHECK 3?9S ... LDX 0 ASIZE(3) [ CHECK SIZE OF THIS BLOCK 3?9W ... BZE 0 RFAIL [ ASIZE CANT BE ZERO 3?=5 ... BNG 0 RFAIL [OR NEGATIVE 3?=* ... SBN 0 1024 [ CHECK IF ASIZE > 1024 3?=D ... BPZ 0 RFAIL [ TREAT AS FAIL IF CORRUPT 3?=F ... LDX 0 ASIZE(3) 3?=G ... ADX 0 3 3?=H ... BXGE 0 ENDUSED(2),READBLOX [ J.IF REC. GOES INTO NEXT BLOCK 3?=J ... LDX 0 ASIZE(3) 3?=K ... ADS 0 CURREC(2) [ UPDATE CURRENT RECORD POINTER 3?=L ... LDX 4 ALOGLEN(3) [ LOGICAL LENGTH OF RECORD 3?=M ... BZE 4 RFAIL [ ALOGL CANT BE ZERO 3?=P ... LDN 6 8 [ AND 3?=S ... ADX 6 4 [ MUST BE < OR = ASIZE-9 3?=X ... BXGE 6 ASIZE(3),RFAIL [ IF NOT, TREAT AS FAIL 3??2 ... LDN 0 1024 3??5 ... SBX 0 4 [ CHECK IF ALOGLEN < 1024 3??8 ... BNG 0 RFAIL [ TREAT AS READFAIL IF CORRUPT 3??? ... SETUPCOR 4,2,FILE,FTAB [ SET UP BLOCK FOR DATA 3??B ... LDX 0 ATYPE(3) [ BLOCK TYPE 3??F ... ANDX 0 HALFTOP [ MASK OUT TOP 12 BITS 3??J ... BXE 0 FILEPLUSFCB,NORENAME [ DONT RENAME IF ITS FCB AS 'OPEN' 3??M ... [ MAY FREE FCBS FROM ACT. CHAIN 3??Q ... NAMEX 2 [ RENAME BLOCK 3??T ...NORENAME 3??Y ... LDX 0 BACK1(3) 3?#3 ... STO 0 BACK1(2) [ TRANSFER BACKING STORE 3?#6 ... LDX 0 BACK2(3) [ HOME FOR THIS BLOCK 3?#9 ... STO 0 BACK2(2) 3?## ... LDN 4 A1(3) 3?#C ... LDN 5 A1(2) [ SET UP PTRS. FOR MOVE 3?#G ... LDX 3 ALOGLEN(2) [ LOGICAL LENGTH OF USED DATA 3?#K ... SBN 3 513 [ CHECK IF > 512 WORDS TO MOVE 3?#N ...NYMORE 3?#R ... BNG 3 NMORE [ J. IF < 512 TO MOVE 3?#W ... MOVE 4 512 [ ELSE MOVE 512 3?#^ ... ADN 4 512 3?*4 ... ADN 5 512 [ AND UPDATE POINTERS 3?*7 ... SBN 3 512 3?*= ... BRN NYMORE 3?** ...NMORE 3?*D ... ADN 3 513 [ RESET AMOUNT TO MOVE 3?*H ... MOVE 4 0(3) [ MOVE REST OF DATA 3?*L ... LDX 2 FX2 3?*P ... BRN NXTRECORD [ LOOP FOR NEXT RECORD 3?*S ...RFAIL 3?*X ... MONOUT JSJTRUNC [INFORM OF LOST DATA IF FAILED 3?B2 ...NDOFSWAP 3?B5 ...[ 3?B8 ...[*************************************************** NDOFSWAP 3?B? ...[ ALL DATA HAS BEEN READ FROM THE SWAPFILE - FIRST 3?BB ...[ OVERWRITE RECOVERED DATA ON SWAPFILE, THEN 3?BF ...[ FREE THE BACKING STORE ON ALL SWAPFILES, NEXT 3?BJ ...[ CHAIN ANY GMON/JRNL BLOCKS AT FRONT OF JOURNAL 3?BM ...[ CHAIN.(N.B. WHEN READ BACK AND SET UP IN ACTIVITY 3?BQ ...[ CHAIN THE ORDER OF THE BLOCKS WAS REVERSED, SO 3?BT ...[ BY CHAINING EACH AT FRONT OF JOURNAL CHAIN THE 3?BY ...[ ORDERING IS CORRECTED) 3?C3 ...[ 3?C6 ... LDN 7 GZERO 3?C9 ... LDN 6 0 [ OVERWRITE SWAPFILE BLOCK 0 3?C# ... BACKWRIT BSET,BSBS,NORECOVRY,AWORK1(2),EX6,EX7 3?CC ...NORECOVRY 3?CD ...#UNS FSHTEST [ OMIT IF IN TESTING ENVIR. AS 3?CF ...#SKI [ THIS WILL HAVE BEEN DONE EARLIER 3?CG ... DOWN SETLIST,2 [ TO FREEBAX SWAPFILES 3?CK ...NXTGJRNL 3?CN ... HUNT 2,GMON,JRNAL [ FIND NEXT GMON/JRNAL BLOCK 3?CR ... BNG 2 XLASTGJRNL [ J. IF NONE LEFT 3?CW ... STOZ JWAITER(2) [ SO IF NON-AUTO MESS.JRNL ACT WONT 3?C^ ... [ TRY TO WAKE IT UP - 'COS ITS GONE ! 3?D4 ... CHAIND 2,BSJC [ CHAIN IN JOURNAL CHAIN 3?D7 ... BRN NXTGJRNL 3?D= ...XLASTGJRNL 3?D* ...[ 3?DD ...[************************************************** XLASTGJRNL 3?DH ...[ ALL GMON/JRNL BLOCKS SHOULD NOW BE IN JOURNAL CHAIN 3?DL ...[ ANY OTHER BLOCKS LEFT ARE FILE BLOCKS 3?DP ...[ 3?DS ... SETNCORE 6,3,FILE,FLOCNB 3?DX ... PROPTEST 3?G6 LDN 0 ACOMMUNE1(2) 3?^Q LDN 1 FPROPUSER(2) 3#FB MOVE 0 3 3#^2 LDN 5 0 3*DL LDN 4 0 3*Y= LDX 0 GSIGN 3BCW STO 0 AWORK1(2) [1ST SEARCH 3BXG STO 0 AWORK2(2) [NO FAILS 3CC6 SCRUB 3CWQ STEP 3DBB BZE 3 NDJRNL [END OF :JOURNAL 3DW2 LDX 0 EDESCRIBE(3) 3F*L BNZ 0 SCRUB [J IF NOT NAME 3FT= TESTNAMX 3,NLOC(1),ELOC1N(3),SCRUB,6 3G#W # JUMP IF LOCAL NAME DIFFERENT 3GSG LDX 0 AWORK1(2) 3H#6 BPZ 0 SJCLOSE [J IF SECOND TIME ROUND 3HRQ LDX 0 ELAN-A1(3) 3J?B BXU 0 NLAN(1),QDELETE [WRONG LANGUAGE 3JR2 JBC QDELETE,3,BNSERIAL [J IF NOT SERIAL OR IF MULT 3K=L ... JMBS QDELETE,3,BNMDF,BNMULT 3KQ= LDX 0 EVERSION-A1(3) 3L9W BZE 0 QDELETE [NOT CREATED BY JOURNAL ACT 3LPG BXGE 5 EVERSIONN(3),SCRUB [J UNLESS HIGHEST VERSION YET FOUND 3M96 LDX 5 EVERSION-A1(3) 3MNQ LDX 4 EGEN-A1(3) 3N8B BRN SCRUB 3NN2 QDELETE 3P7L TRACEIF K6BMSJRNL,99,299,EGEN-A1(3),NOTSJFIL 3PM= TRACEIF K6BMSJRNL,199,299,ELAN-A1(3),ELAN 3Q6W TRACEIF K6BMSJRNL,199,299,EINF1-A1(3),EINF1 3QLG TRACEIF K6BMSJRNL,199,299,EVERSION-A1(3),EVERSION 3R66 LDEX 7 ECOPSN(3) 3RKQ ADX 7 ENUSEN(3) 3S5B CALL 6 RDELETE [DELETE FILE 3SK2 BRN SCRUB 3T4L SJCLOSE [FNISH CLOSE IN PROGRESS BEORE BREAK 3TJ= JBC SCRUB,3,BNREVERE [J UNLESS REVERED 3W3W TRACEIF K6BMSJRNL,99,299,EGEN-A1(3),SJFCLOSE 3WHG LDX 0 EDATE 3X36 STO 0 EWRITDAYN(3) 3XGQ STO 0 EDLAN(3) 3Y2B LDX 0 CLEANCT 3YG2 STO 0 EWRITTIMEN(3) 3Y^L STO 0 ETLAN(3) 3^F= MBC 3,BNREVERE,BNBMUWB 3^LD ... LDN 0 FILESIZE 3^RL ... DEX 0 EINF3N(3) 3^SY ... LDX 1 BFILE 3^W= ... LDX 0 FGMTBS(1) [ G.M.T. FROM MASTER'S FCB 3^XJ ... STO 0 EGMTLAN(3) [ UPDATE DIRECTORY ENTRY. 3^YW STEPREWRITE 42DG BRN SCRUB 42Y6 NDJRNL 43CQ LDX 0 AWORK1(2) 43XB BPZ 0 SCLOSE [J IF SECOND TIME THRU 44C2 TRACEIF K6BMSJRNL,99,299,5,MAXEVERS 44WL TRACEIF K6BMSJRNL,99,299,4,MAXSJGEN 45B= BZE 5 SCLOSE [J IF NO SJFILES FOUND 45TW STOZ AWORK1(2) 46*G MHUNTW 2,FILE,FLOCNB 46T6 ADN 1 NLOC 47#Q ADN 2 A1 47SB MOVE 1 6 48#2 SEARCH 48RL TRACEIF K6BMSJRNL,99,299,5,NEXEVERS 49?= MHUNTW 1,FILE,FLOCNB 49QW STO 4 A1+4(1) [GENERATION REQUIRED 4==G GETDIR 1 4=Q6 TRACEIF K6BMSJRNL,99,299,ACOMMUNE9(2),GDE REP 4?9Q TESTRPN2 OK,NOFILE [CANT HAPPEN 1ST TIME 4?PB MHUNTW 1,FILE,ENT 4#92 JBC NDFOUND,1,BEREVERE [J UNLESS REVERED 4#NL LDEX 0 ECOPS(1) 4*8= BZE 0 NDFOUND [OFFLINE SO IGNORE 4*MW BMCHECKRF 4B7G MHUNTW 1,FILE,ENT 4BM6 TESTREP2 FULL,SFULL,SHORT,NDFOUND,CORRUPT,REVFAIL 4C6Q SDELETE 4CLB TRACEIF K6BMSJRNL,99,299,EVERSION(1),SJF DEL 4D62 LDEX 7 ECOPS(1) 4DKL ADX 7 ENUSE(1) 4F5= FREECORE 1 4FJW BACKSPACE 4G4G CALL 6 RDELETE [DELETE FILE IF EMPTY OR FAILED 1ST B 4GJ6 NOFILE 4H3Q SBN 5 1 4HHB BZE 5 SCLOSE [NO MORE - SO GIVE UP 4J32 SBN 4 1 [REDUCE GEN TO CORRESPOND 4JGL BNZ 4 SEARCH [IF ZERO CORRECT TO 4095 4K2= LDN 4 4095 4KFW BRN SEARCH 4K^G REVFAIL 4LF6 LDX 0 ACOMMUNE1(2) 4LYQ BNZ 0 SLOSTDATA [J IF NOT FAILED ON 1ST BLOCK FF FILE 4MDB STOZ AWORK2(2) [TO MARK FAILED ON 1ST BLOCK 4MY2 BRN SDELETE 4NCL SLOSTDATA 4NX= FREECORE 1 4PBW MONOUT JSJTRUNC 4PWG BRN SETUP 4QB6 NDFOUND 4QTQ FREECORE 1 4R*B SETUP 4RT2 LDX 2 JSJPTR 4S#L STO 4 JGEN(2) 4SS= STO 5 JVERSION(2) 4T?W FASTREWI 3 4TRG BRN SCRUB [TIDY UP ANY REMAINING REVERED FILES 4W?6 SCLOSE 4WGX ... TOPFCB 3 4WHH ... JBC NONLOST,3,BFPARTRES 4WJ7 ... MONOUT JSJTRUNC 4WJR ...NONLOST 4WKG ... MBS 3,BFALLINCS,BFDIRUPDATE 4WQQ CLOSETOP 4X=B BRN STARTACT 4XQ2 SFULL 4Y9L LDX 0 AWORK2(2) 4YP= BNG 0 NDFOUND [OK IF PREVIOUS FILE DIDNT FAIL ON 1S 4^8W BRN SLOSTDATA [ELSE DATA MAY HAVE BEEN LOST 4^NG #PAGE 5286 [ 52MQ ZBMCHECKRF [ENTRY FOR BMCHECKRF MACRO 537B [ 53M2 READ [BLOCKS RECORD 546L MHUNTW 1,FILE,FRB 54L= LDEX 7 A1(1) 555W SBN 7 2 55KG BZE 7 MPTYFILE [J IF FILE HAS NO BLOCKS 5656 LDN 5 0 [BLOCK MOD 56JQ READBLOCK 56K3 ...[ 56K# ...[*************************************************** READBLOCK 56KK ...[ FIRST FIND THE FCB FOR THIS SJFILE IF RECOVERED 56KW ...[ 56L7 ... LDX 1 FX1 56LD ... LDX 2 FX2 56LP ... STOZ AWORK4(2) [ SHOW USING ORIGINAL BLOCK 56M2 ... MHUNTW 3,FILE,ENT [ PRESENT ON ENTRY 56M? ... LDX 0 EGEN(3) 56MJ ... STO 0 AWORK3(2) [ REMEMBER GENERATION BEING CHECKED 56MT ... LDX 3 2 56N6 ...NXTFCB [ FIND NEXT FCB IF THERE IS ONE 56NC ... STO 3 2 [ REMEMBER LAST FCB FOUND 56NN ... HUNT2J 3,FILE,FTAB,,NOTRECOVRD [ N.B. ITS CALLED A'FTAB' !! 56N^ ... LDX 0 FGEN(3) 56P= ... SMO FX2 [ X2 NOT = FX2 !! 56PH ... BXU 0 AWORK3,NXTFCB [ J. IF WRONG GENERATION 56PS ... TESTNAMX 3,NJOURNAL+1(1),FUSE1(3),NXTFCB,4 56Q5 ... TESTNAMX 3,NLOC(1),FLOC1(3),NXTFCB,4 56QB ... LDX 0 FLAN(3) [ OR IF NAME OR 56QM ... BXU 0 NLAN(1),NXTFCB [ LANGUAGE WRONG 56QY ...[ 56R9 ...[****************************************************** 56RG ...[ WE HAVE THE FCB - IF RECOVERED, THE REQUIRED BLOCK 56RR ...[ MUST BE BETWEEN THIS FCB AND THE LAST ONE (OR THE 56S4 ...[ CURRENT ACTIVITY) SO HUNT BACKWARDS AND COMPARE 56S* ...[ BACK1/2 . FIRST FIND RES. NO. AND BLOCK NO. REQUIRED 56SL ...[ 56SX ... MHUNTW 1,FILE,FRB 56T8 ... SMO 5 56TF ... LDX 4 A1+2(1) 56TQ ...NEXTBACK 56W3 ... LDX 3 BPTR(3) [ POINTER TO PREVIOUS BLOCK 56W# ... BXE 3 2,NOTRECOVRD [ J. IF NOT FOUND BEFORE => FX2 56WK ... LDX 0 BACK1(3) 56WW ... BXU 0 A1+1(1),NEXTBACK [ J. IF RESIDENCE NO.WRONG 56X7 ... LDX 0 BACK2(3) 56XD ... BXU 0 4,NEXTBACK [ J. IF WRONG BLOCK NO. 56XP ... LDX 0 ALOGLEN(3) 56Y2 ... SBN 0 512 [ CHECK IF BLOCK LENGTH RIGHT 56Y? ... BNZ 0 NOTRECOVRD [ J. IF RIGHT BLOCK BUT WRONG LENGTH 56YJ ... LDX 2 FX2 56YT ... CHAIN 3,2 [ RECHAIN BLOCK IN FRONT OF ACTIVITY 56^6 ... LDX 1 FPTR(2) [ AND GET PTR. TO IT 56^C ... NGN 0 1 56^N ... STO 0 AWORK4(2) [ SHOW USING RECOVERED BLOCK 56^^ ... NAME 1,BSTB,BREAD [ NAME RECOVERED BLOCK A BREAD 572= ... BRN USERECBLOK [ J. TO USE RECOVERED BLOCK 572H ...NOTRECOVRD 572S ...[ 5735 ...[********************************************************** 573B ...[ BLOCK NOT SUCCESSFULLY RECOVERED SO READ OLD VERSION 573M ...[ FROM BACKING STORE AND USE THAT 573Y ...[ 574B LDN 6 2 [NUMBER OF ATTEMPTS TO READ FAILING B 57J2 READAGAIN 583L MHUNTW 1,FILE,FRB 58H= SMO 5 592W LDX 2 A1+2(1) [NEXT BLOCK NUMBER 59GG BACKREAD BUSE,BSBS,TRYAGAIN,A1+1(1),2 5=26 [USE BFREEW : J TO TRANFAIL IF FAIL 5=FQ MHUNTW 1,BSTB,BREAD 5=PJ ...USERECBLOK 5=^B LDX 0 A1(1) 5?F2 BZE 0 MPTYBLOCK [J IF BLOCK HAS NEVER BEEN WRITTEN TO 5?YL LDN 3 A1(1) 5#D= LDN 6 GSBS(3) 5#XW NEXTREC 5*CG LDXC 0 FRH(3) 5*X6 BCC NOTDUMMY [J UNLESS DUMMY RECORD 5BBQ ANDX 0 BRHMASK 5BWB BNZ 0 SCORRUPT [J IF RECORD HEADER CORRUPT 5CB2 LDEX 0 FRH(3) 5CTL BZE 0 SCORRUPT [BLOCK CANT END WITH DUMMY 5D*= ADX 3 0 [UPDATE PTR 5DSW BXGE 3 6,SCORRUPTND [OFF END OF BLOCK 5F#G BRN NEXTREC 5FS6 NOTDUMMY 5G?Q ANDX 0 BRHMASK 5GRB BNZ 0 SCORRUPT 5H?2 LDEX 0 FRH(3) 5HQL BZE 0 NDBLOCK [J IF END OF BLOCK 5J== ADX 0 3 5JPW BXGE 0 6,SCORRUPT 5K9G SBN 0 2(3) [NO OF WORDS OF USER DATA 5KP6 ADN 3 2 [->USER DATA 5L8Q SMO 0 5LNB SUM 2 0 5M82 BNZ 2 SCORRUPTCH [CHECKSUM FAIL 5MML ADX 3 0 [UPDATE POINTER 5N7= BRN NEXTREC 5NLW NDBLOCK 5NP5 ... LDX 2 FX2 5NR# ... LDX 0 AWORK4(2) [ CHECK IF USING RECOVERED BLOCK 5NTH ... BPZ 0 USINGOLD [ J. IF NOT 5NXQ ... BACKWRIT ,BSBS,WFAIL [ WRITE RECOVERED BLOCK AWAY 5N^^ ... LDX 1 FPTR(2) [ RECOVER POINTER TO WRITE BLOCK 5P48 ...USINGOLD 5P6G NAME 1,BSTB,BFREEW 5PL6 ADN 5 1 5Q5Q BCT 7 READBLOCK 5QKB FREECORE 1 5R52 MFREEW FILE,FRB 5RJL SETREP2 FULL [ALL BLOCKS USED 5S4= UP 5S7B ...WFAIL 5S=G ... MONOUT JSJTRUNC [ INFORM OF POSS. LOST DATA 5S*L ... STOZ AWORK4(2) [ INDICATE USING OLD BLOCK 5SDQ ... BRN NOTRECOVRD 5SHW MPTYBLOCK 5T3G FREECORE 1 5TH6 KEEPREP 4,SHORT [SOME UNUSED BLOCKS 5W2Q BNZ 5 SHORT 5WGB KEEPREP 4,EMPTY [NO USED BLOCKS 5X22 SHORT 5XFL BZE 7 USEDALL [TRUNCATED IN LAST BLOCK - UPDATE UNN 5X^= BACKSPACE [TO NAME RECORD 5YDW CALL 6 STEPWRITE 5YYG SMO 5 5^D6 LDCT 0 0 5^XQ ORN 0 1 62CB STO 0 ECOPS-A1(3) [UPDATE ECOPS 62X2 READ [BLOCKS RECORD AGAIN 63BL MHUNTW 1,FILE,FRB 63W= NAME 1,FILE,FWB [FOR REPLACE MACRO 64*W ADN 5 2 [RECORD HEADER FOR SHORTENED BLOCKS R 64TG STO 5 A1(1) 65*6 REPLACE [BLOCKS RECORD 65SQ MFREEW FILE,FWB 66#B MHUNTW 1,FILE,FRB [FROM 1ST READ 66S2 NAME 1,BSTB,FULLB 67?L LDX 3 1 67R= SBN 5 2 68=W BZE 5 SFREE [J IF ALL BLOCKS TO BE FREED 68QG SBS 5 A1(1) [SHORTEN HEADER BY NO OF USED BLOCKS 69=6 ADN 1 A1+2 69PQ LDX 2 1 6=9B ADX 1 5 6=P2 SMO 7 6?8L MOVE 1 0 [MOVE BLOCKS DOWN FULLB 6?N= SFREE 6#7W FULLBPAS 3,2 6#MG LDX 2 FX2 6*76 USEDALL 6*LQ STO 5 ACOMMUNE1(2) [REPLY 6B6B PUTREP 6BL2 TRACEIF K6BMSJRNL,99,299,4,CHRFREP 6C5L PUTREP2 4 6CK= UP 6D4W SCORRUPTND 6DJG SBX 3 0 [RECOVER RECORD POINTER 6F46 BRN SCORRUPT 6FHQ SCORRUPTCH 6G3B SBN 3 2 [RECOVER RECORD POINTER 6GH2 SCORRUPT 6GJY ... LDX 2 FX2 6GLW ... LDX 0 AWORK4(2) 6GNS ... BPZ 0 USEDOLD [ J. IF USING OLD BLOCK ELSE 6GQQ ... MONOUT JSJTRUNC [ INFORM OF POSS. LOST DATA 6GSN ... STOZ AWORK4(2) [ SHOW USING OLD 6GWL ... BRN NOTRECOVRD [ TO TRY OLD BLOCK 6GYJ ...USEDOLD 6H2L STOZ FRH(3) [TRUNCATE BLOCK BEFORE CORRUPT RECORD 6HG= SBN 3 A1(1) 6H^W BZE 3 RECORDONE [J IF 1ST RECORD IN BLOCK IS CORRUPT 6JFG BACKWRIT FREE,BSBS,RECORDONE [REWRITE BLOCK - IF FAIL LOSE WHOLE B 6J^6 ADN 5 1 [TO INCLUDE THIS BLOCK 6KDQ SBN 7 1 6KYB BRN TRANFAIL 6LD2 RECORDONE 6LXL FREECORE 1 6MC= TRANFAIL 6MWW KEEPREP 4,CORRUPT 6NBG BRN SHORT 6NW6 MPTYFILE 6P*Q FREECORE 1 6PTB KEEPREP 4,EMPTY 6Q*2 BRN PUTREP 6QSL TRYAGAIN 6R#= BCT 6 READAGAIN 6RRW BRN TRANFAIL 6S?G XBR 6SR6 GEOERR 1,BMSJRNL 6T=Q [ 6TQB MENDAREA BMAPGAP,K99BMSJRNL 6W=2 #END ^^^^ ...12756607000200000000