{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: BMSJRNL866)}}
====== BMSJRNL866 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BACKREAD|BACKREAD]], [[george:macro:BACKSPACE|BACKSPACE]], [[george:macro:BMCHECKRF|BMCHECKRF]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHAIND|CHAIND]], [[george:macro:CLOSETOP|CLOSETOP]], [[george:macro:CREATEB|CREATEB]], [[george:macro:DELETE|DELETE]], [[george:macro:DOWN|DOWN]], [[george:macro:FPUT|FPUT]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FSHTEST|FSHTEST]], [[george:macro:FULLBPAS|FULLBPAS]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETACT|GETACT]], [[george:macro:GETDIR|GETDIR]], [[george:macro:HUNT|HUNT]], [[george:macro:HUNT2J|HUNT2J]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:JMBS|JMBS]], [[george:macro:KEEPREP|KEEPREP]], [[george:macro:LINK|LINK]], [[george:macro:LINKSET|LINKSET]], [[george:macro:LOCK|LOCK]], [[george:macro:LOCKC|LOCKC]], [[george:macro:MBC|MBC]], [[george:macro:MBS|MBS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:NAME|NAME]], [[george:macro:NAMEX|NAMEX]], [[george:macro:NEWDIR|NEWDIR]], [[george:macro:OPEN|OPEN]], [[george:macro:PROPTEST|PROPTEST]], [[george:macro:PUTREP|PUTREP]], [[george:macro:PUTREP2|PUTREP2]], [[george:macro:READ|READ]], [[george:macro:READAGAIN|READAGAIN]], [[george:macro:REPLACE|REPLACE]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETREP2|SETREP2]], [[george:macro:SKIP|SKIP]], [[george:macro:STARTACT|STARTACT]], [[george:macro:STEP|STEP]], [[george:macro:STEPREWRITE|STEPREWRITE]], [[george:macro:STEPWRITE|STEPWRITE]], [[george:macro:SUICIDE|SUICIDE]], [[george:macro:TESTNAMX|TESTNAMX]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TOPFCB|TOPFCB]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UNLOCK|UNLOCK]], [[george:macro:UP|UP]]
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