{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: BMCNTRL866)}}
====== BMCNTRL866 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BACKREAD|BACKREAD]], [[george:macro:BS|BS]], [[george:macro:BSOFF|BSOFF]], [[george:macro:BWNZ|BWNZ]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHECKBL|CHECKBL]], [[george:macro:CLOSEFRBS|CLOSEFRBS]], [[george:macro:COOR1|COOR1]], [[george:macro:DOWN|DOWN]], [[george:macro:FILEMOVE|FILEMOVE]], [[george:macro:FINDREC|FINDREC]], [[george:macro:FPUT|FPUT]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETACT|GETACT]], [[george:macro:HUNT|HUNT]], [[george:macro:HUNTMISB|HUNTMISB]], [[george:macro:HUNTW|HUNTW]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:LINK|LINK]], [[george:macro:LINKSET|LINKSET]], [[george:macro:LOCK|LOCK]], [[george:macro:LOCKC|LOCKC]], [[george:macro:MFREE|MFREE]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:MONOUTX|MONOUTX]], [[george:macro:NAME|NAME]], [[george:macro:ON|ON]], [[george:macro:OUTPACK|OUTPACK]], [[george:macro:OUTPACKX|OUTPACKX]], [[george:macro:POP|POP]], [[george:macro:QSTEPC|QSTEPC]], [[george:macro:READAGAIN|READAGAIN]], [[george:macro:REPEAT|REPEAT]], [[george:macro:REWIND|REWIND]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SUICIDE|SUICIDE]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TOPFCA|TOPFCA]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UNLOCK|UNLOCK]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]], [[george:macro:VOP|VOP]], [[george:macro:WAKEUP|WAKEUP]], [[george:macro:WRITEAUTO|WRITEAUTO]]
22FL SEG BMCNTRL,864,EDWARD MOON,BMAP
22^= SEGENTRY K1BMCNTRL,START
23DW SEGENTRY K3BMCNTRL,NEXTFTAB
23YG SEGENTRY K4BMCNTRL,MASTENT
24D6 SEGENTRY K2BMCNTRL,QSTEPC
24MY ... SEGENTRY K5BMCNTRL,QSTEPC1
24XQ [
25CB [
25X2 TYPEFURB
26BL #HAL +FILE+FURB,0
26W= TYPEFUWB
27*W #HAL +FILE+FUWB,0
27TG NSYS
28*6 12HSYSTEM
28SQ NUMDIRMES +BMNUMPRDIR
29#B PRMESS +BMPARTRES
29S2 PRUSER +BMRESTUSER
2=?L STRINGABAND 16HABANDONED :
2=R= STRINGSTART 12HSTARTING
2?=W STRINGFIN 12HFINISHED
2?QG STRUSNOTFND 16HUSER NOT FOUND
2#=6 STRNOTDUMP 16HUSER NOT DUMPED
2#PQ STRNOINC 20HINCREMENT NOT FOUND
2*9B OUTPACK
2*P2 SBX 7 FX1
2B8L OUTPACKX 4,5,6
2BN= ADX 7 FX1
2C7W EXIT 7 0
2CMG MONOUT
2D76 SBX 7 FX1
2DLQ MONOUTX 3
2F6B ADX 7 FX1
2FL2 EXIT 7 0
2G5L XLINK
2GK= LINK BMAPONE,2
2H4W MLINK
2HJG LINK BMCNTRL,4
2J46 [
2JHQ TOHUNTFLIST
2K3B HUNTMISB 3,FI,FLIST
2KH2 EXIT 7 0
2L2L [
2LG= START
2L^W [
2MFG [***************************************************** START
2M^6 [
2NDQ [ ENTRY FOR MASTER ACTIVITY
2NYB [
2PD2 POP START,2,FTABWAIT [SEMAPHOR SET SHOWS MASTER ACTIVE
2PXL STO 1 AWORK1(2)
2QC= TRACEIF K6BMCNTRL,99,299,AWORK3(2),MASTEND
2QWW CALL 7 TOHUNTFLIST
2RBG STOZ A1+1(3)
2RW6 BRN MASTACT
2S*Q [
2STB [************************************************** NEXTFTAB
2T*2 [
2TSL [ ENTRY FOR SLAVE ACTIVITIES
2W#= [
2WRW NEXTFTAB
2X?G STOZ AWORK1(2)
2XR6 MASTACT
2Y=Q HUNTW 3,FILE,FTAB
2YQB BNG 3 UPALEVEL [IF NO SLAVES TO BE SET UP NOW.
2^=2 LDX 0 A1+1(3) [LEVEL @ WHICH TABS APPLY
2^PL LDX 7 AWORK1(2) [NO NEED TO CHECK DEPTH IF MASTER
329= BNZ 7 NODPTHCHEK [(MUST BE 0) & 'AMAPDEPTH' USED FOR
32NW ['FTABWAIT' SEMAPHOR IN MASTER ACT.
338G [ SO CHECK WOULD GIVE WRONG RESULT
33N6 BXU 0 AMAPDEPTH(2),UPALEVEL [J. UNLESS @ THIS LEVEL
347Q NODPTHCHEK
34MB LDX 7 A1(3) [USED SPACE IN FTAB
3572 STO 7 AWORK3(2)
35LL LDX 5 A1+1(3) [DEPTH OF THIS FTAB
366= ADN 5 1 [ DEPTH FOR NEW DIRECRORY
36KW STOZ 4
375G NEXTENTRY
37K6 TOPFCA2 1 [FILE THAT PAIRS WITH FTAB
384Q HUNTW 3,FILE,FTAB
38JB SMO 4
3942 LDX 0 A1+2(3)
39HL BZE 0 RESUME [J. IF ENTRY ALREADY USED
3=3= SMO 4
3=GW STOZ A1+2(3) [ELSE MARK IT USED
3?2G STO 0 FREADBLOCK(1)
3?G6 SMO 4
3?^Q LDX 0 A1+3(3)
3#FB STO 0 FREADWORD(1) [TAB POINT FOR DIRECTORY ENTRY
3#^2 SMO 4
3*DL LDN 6 A1+4(3)
3*Y= LDN 7 ASUPUSER(2) [ TRANSFER SUPERIOR PROPER
3BCW MOVE 6 3 [ USERS NAME
3BXG HUNT 3,FILE,FLOCNB [ NEEDED FOR OPENRELN
3CC6 BPZ 3 NSETFLOCNB [J. IF ONE HERE
3CWQ SETNCORE 6,3,FILE,FLOCNB [ ELSE GET ONE
3DBB NSETFLOCNB
3DW2 READAGAIN
3F*L ... MHUNTW 1,FILE,FRB
3FT= ... NAME 1,FILE,ENT
3G#W BMOPENRE XBR,CLEAN [ OPEN DIRECTORY
3GSG TESTRPN2 OK,XBR
3H#6 CALL 7 TOHUNTFLIST [X3-> FLIST
3HRQ LDX 0 A1+2(3)
3J?B ANDX 0 BITS22LS [MAX. ALLOWED SLAVES
3JR2 SBX 0 A1+1(3) [ NO. RUNNING
3K=L NGX 0 0
3KQ= BNG 0 NEWACT [ J. IF CAN SET UP ANOTHER
3L9W LDX 0 AWORK1(2) [ OR IF MASTER ACT.
3LPG BNZ 0 NEWACT
3M96 [
3MNQ [ CAN'T SET UP SLAVE SO MAP NEXT DIR YOURSELF
3N8B [
3NN2 STO 5 AMAPDEPTH(2) [ LEVEL OF NEW DIRECTORY
3P7L ACROSS BMAPONE,2 [ RECURSE
3PM= [
3Q6W NEWACT
3QLG CALL 7 TOHUNTFLIST
3R66 LDN 0 1
3RKQ ADS 0 A1+1(3) [ INCREMENT COUNT OF SLAVES
3S5B GETACT BSA,AUTOMAP [ SET UP NEW SLAVE
3SK2 LDX 3 BPTR(2)
3T4L JBC NOTPARTR,2,AW2PARTRES
3TJ= BS 3,AW2PARTRES [ IF MAPPING RESTORED LIMB
3W3W NOTPARTR
3WHG LDN 6 ASUPUSER(2)
3X36 LDN 7 ASUPUSER(3)
3XGQ MOVE 6 3 [ TRANSFER SUPERIOR USERNAME
3Y2B STO 5 AMAPDEPTH(3) [DEPTH OF THIS NEW ACTIVITY
3YG2 LINKSET 3,XLINK(1)
3Y^L LOCK 3 [AUTOMAP BLOCK
3^F= CHANGEFI 3 ['SUPERIOR'DIRECTORY TO NEW ACT
3^YW LDX 3 BPTR(2)
42DG UNLOCK 3 [AUTOMAP BLOCK
42Y6 LDX 2 3
43CQ FPUT
43XB RESUME
44C2 ADN 4 6 [RELATIVE POINTER FOR NEXT ENT
44WL BXU 4 AWORK3(2),NEXTENTRY [ J. UNLESS ALL FTAB ENTS DEALT WITH
45B= MFREEW FILE,FTAB
45TW UPALEVEL [FINISHED WITH DIR.@ THIS LEVEL
46*G LDX 0 AWORK1(2)
46T6 BNZ 0 NOFTABS [J. IF MASTER ACT.
47#Q CLOSEFRBS
47SB MHUNTW 3,FILE,FTAB
48#2 BNG 3 NOFTABS
48RL LDN 0 1 [DECREMENT FILESTORE LEVEL
49?= SBS 0 AMAPDEPTH(2) [ & POCESS NEXT FTAB
49QW BRN NEXTFTAB [ IMPLIES DIR. OPEN
4==G [
4=Q6 NOFTABS
4?9Q LDX 0 AWORK1(2)
4?PB BZE 0 SLAVEND
4#92 VOP 2,FTABWAIT [ CLEAR SEMAPHOR - MASTER DORMANT
4#NL CALL 7 TOHUNTFLIST
4*8= LDX 0 A1+1(3)
4*MW BZE 0 MASTENT
4B7G COOR1
4BM6 BRN MASTENT [ ALL SLAVES FINISHED : TIDY UP
4C6Q [
4CLB SLAVEND
4D62 CALL 7 TOHUNTFLIST
4DKL LDN 0 1
4F5= SBS 0 A1+1(3) [ DECREENT COUNT OF SLAVES RUNNING
4FJW WAKEUP
4G4G CALL 7 TOHUNTFLIST
4GJ6 LDX 0 A1+1(3) [ CHECK COUNT TO SEE IF ANY OTHERS
4H3Q BNZ 0 SUICIDE [ J. IF THER ARE OTHERS
4HHB LDX 2 BSACHAPTR
4J32 POP WAKEUP,2,FTABWAIT [ CHECK SEM. TO SEE IF MASTER ACTIVE
4JGL VOP 2,FTABWAIT [ LEAVE SEMAPHOR CLEAR
4JQD ... LDX 2 BSACHAPTR
4K2= FPUT
4KFW SUICIDE
4K^G SUICIDE
4LF6 [
4LYQ [
4MDB [
4MY2 [*************************************************** MASTENT
4NCL [ ALL SLAVES HAVE FINISHED - NOW CHECK IF REPEAT OF
4NX= [ SEARCH IS NECESSARY OR IF PARTIAL RESTORES ARE NEEDED
4PBW [
4PWG MASTENT
4QB6 JBS SFSTSFIN,2,AW2PARTRES
4QTQ BSOFF BMBLKTWICE,XISITWICE [J. IF ON FIRST PASS
4R*B BRN PASSEND
4RT2 SFSTSFIN [ MOVE DIRECTORY (TOP OF LIMB)
4S#L FILEMOVE 0,-1 [ TO BOTTOM OF STACK
4SS= PASSEND
4T?W HUNTMISB 3,FI,FRESTUSER
4TRG LDX 0 FRCNT(3)
4W?6 BNZ 0 RESTUSER [ J. IF RESTORES NEEDED
4WQQ LDX 0 FRTSN(3)
4X=B BZE 0 PHREEIT
4XQ2 DOWN RESTOREA,4 [ TO REWIND TAPE IF LOADED
4Y9L PHREEIT
4YP= HUNTMISB 3,FI,FRESTUSER
4^8W FREECORE 3
4^NG MHUNTW 3,FILE,APROC
5286 BNG 3 NOAPROC
52MQ FREECORE 3
537B NOAPROC
53M2 HUNTMISB 3,FI,FRESUNAV
546L BNG 3 NOFRUNAV
54L= FREECORE 3
555W NOFRUNAV
55KG HUNTMISB 3,FI,FONCE
5656 BNG 3 NOWFREEBS
56JQ LDX 0 A1(3)
574B BNZ 0 NOWFREEBS
57J2 FREECORE 3 [ FREE FONCE IF EMPTY
583L NOWFREEBS
58H= JBC NOPRS,2,AW2PARTRES [ J. IF NO P.R. INITIATED
592W LDN 1 BTHREE
59GG LDN 2 ADMASTDIR [ ELSE SET BEPARTRES
5=26 BACKREAD ,BSBS,,1 [ IN BOTH HALVES OF :MASTTR'S
5=FQ MHUNTW 3,BSTB,BREAD [ DIRECTORY ENTRY
5=^B BS 3,BEPARTRES
5?F2 LDCT 0 #200
5?YL ERS 0 EREC(3)
5#D= LDN 4 A1(3)
5#XW LDN 5 GSBS/2+A1(3)
5*CG MOVE 4 GSBS/2
5*X6 LDX 3 BFILE
5BBQ BS 3,BFPARTRES [ AND BFPARTRES IN HIS FCB
5BWB BACKWRIT FREE,BSBS
5CB2 NOPRS
5CTL #UNS AMTGR
5D*= JBC NEXTFBSIB,,BFREEBS [ J. IF B.S. ALREDY FREED ELSE
5DSW DOWN BACKROOM,11 [ FREE SPARE BACKING STORE
5F#G NEXTFBSIB
5FS6 HUNT 1,BSTB,FBSIB
5G?Q BNG 1 SFTSENDED
5GRB FREECORE 1
5H?2 BRN NEXTFBSIB
5HQL SFTSENDED
5J== ACROSS ADDICT,1 [ TO CHECK DICTIONARY
5JPW [
5K9G [*************************************************** XISITWICE
5KP6 [
5L8Q [ CHECK IF ANY DOUBLY ALLOCATED BLOCKS WERE FOUND
5LNB [ IN THE FIRST PASS OF THE FIRST FILESTORE TREE SEARCH
5M82 [
5MML XISITWICE
5N7= HUNTMISB 3,FI,FONCE
5NLW LDX 0 A1(3) [ IS FONCE EMPTY
5P6G BZE 0 PASSEND [ J. IF NO BLOCKTWICES FOUND
5PL6 ON BMBLKTWICE [ INDICATE ON SECOND PASS
5Q5Q ACROSS BMFIXIT,4 [ TO REINITIALISE AND REPEAT TREE SEA
5QKB RESTUSER
5R52 [
5RJL [************************************************** RESTUSER
5S4= [
5SHW [ THERE ARE USERS TO BE RESTORED - CHECK IF ANY HAVE
5T3G [ -VE. INCREMENT NO.. SELECT HIGHEST INCREMENT NO.
5TH6 [ AND LOWEST FILE NUMBER FOR NEXT RESTORE
5W2Q [
5WGB LDN 7 FRUSE(3)
5X22 ADX 7 A1(3)
5XFL STOZ AWORK4(2) [ SWITCH FOR 'N RESTORES STARTING' ME
5X^= JBS NOSWITCH,2,AW2PARTRES
5YDW NGS 2 AWORK4(2) [ SET -VE. FIRST TIME, ELSE 0
5YG7 ...#UNS AMTGR
5YHD ...(
5YJP ... BWNZ GINCTSN,PRNOTFORB [ J. IF MULTI-TAPE GEN. RES.
5YL2 ... SEGENTRY K80BMCNTRL [ FOR SWAPPR AND NOPARTRES R.T.M.
5YM? ... BRN PRNOTFORB [ NULLED BY BOTH - REINSTATED BY *OFF
5YNJ ... DOWN BMPRCHEK,1 [ TO CHECK IF P.R. ALLOWED
5YPT ... NULL
5YR6 ... BRN PRNOTFORB [ IF ALLOWED OR SWAPPED
5YSC ... SEGENTRY K82BMCNTRL [ FOR NOPARTRES *OFF
5YTN ...PRNOTFORB
5YW^ ...)
5YYG NOSWITCH
5^D6 STOZ AWORK1(2) [ INITIALISE INCREMENT NO. TO 0
5^XQ NGNC 0 1 [ AND
62CB STO 0 AWORK2(2) [ FILE NO. TO HIGHEST POSITIVE NO.
62X2 NEXTINC
63BL LDX 0 FRINC(3)
63W= BNG 0 REPEAT [ J. IF -VE. TO REPEAT SEARCH
64*W LDX 4 AWORK1(2)
64TG BXL 0 4,TRYNEXT [ J. IF INCR. NO. NOT > SO FAR
65*6 BXE 0 4,WHATFNO
65SQ NGNC 6 1 [ RESET FILE NO. IF HIGHER
66#B STO 6 AWORK2(2) [ INCR. NO. FOUND
66S2 WHATFNO
67?L LDX 4 AWORK2(2)
67R= LDX 5 FRFIL(3)
68=W BXGE 5 4,TRYNEXT [ J. IF FILE NO. NOT < SO FAR
68QG THISINC
69=6 STO 0 AWORK1(2) [ REMEMBER HIGHEST INCR. NO. AND
69PQ STO 5 AWORK2(2) [ LOWEST FILE NO. SO FAR
6=9B STO 3 AWORK3(2) [ AND POINTER TO IT
6=P2 TRYNEXT
6?8L ADN 3 8
6?N= LDN 0 FRUSE(3)
6#7W BXU 0 7,NEXTINC [ J. IF ALL ENTRIES NOT YET LOOKED AT
6#MG HUNTMISB 3,FI,FRESTUSER
6*76 LDX 0 AWORK3(2)
6*LQ SBX 0 3
6B6B #UNS AMTGR
6BL2 (
6C5L LDCT 7 #600 [ MASK FOR BITS 0 AND 1
6CK= ANDX 7 FRNXT(3) [ NEED TO KEEP THEM IF SET
6D4W ADX 0 7 [ ADD IN POINTER TO NEXT USER
6DJG )
6F46 STO 0 FRNXT(3)
6F?Y ...#UNS AMTGR
6FHQ ...#SKI
6FRJ ...(
6G3B BWNZ GINCTSN,PRNOTFORB [ J. IF MULTI-TAPE GEN. RES.
6GH2 SEGENTRY K80BMCNTRL [ FOR SWAPPR AND NOPARTTES R.T.M.
6H2L BRN PRNOTFORB [ NULLED BY BOTH - REINSTATED BY *OFF
6HG= DOWN BMPRCHEK,1 [ TO CHECK IF PR ALLOWED
6H^W BRN PRNOTFORB [ ALLOWED IF UP
6JFG BRN PASSEND [ SWAPPED IF UP+1
6J^6 SEGENTRY K82BMCNTRL [ FOR NOPARTRES *OFF
6KDQ PRNOTFORB
6KNJ ...)
6KYB HUNTMISB 3,FI,FRESTUSER
6LD2 LDX 3 FRCNT(3)
6LXL SMO FX2
6MC= LDX 0 AWORK4
6MWW BZE 0 MESSENT [ J. IF 'N RESTORES STARTING'
6NBG SRL 3 3 [ ALREADY OUTPUT
6NW6 LDN 4 3 [ ELSE
6P*Q LDN 5 1 [ OUTPUT MESSAGE
6PTB LDN 6 JPDNUMA
6Q*2 CALL 7 OUTPACK
6QSL LDX 3 NUMDIRMES(1)
6R#= CALL 7 MONOUT
6RRW MESSENT
6S?G [
6SR6 [******************************************************
6T=Q [ WE HAVE SELECTED THE NEXT RESTORE BE DONE
6TQB [ NOW OBTAIN TSNS FOR THE RESTORE FROM INCINDEX.
6W=2 [
6WPL HUNTMISB 3,FI,FRESTUSER
6X9= SMO FRNXT(3)
6XNW LDX 7 FRINC(3) [ INCR. NO. WANTED
6Y8G HUNTW 3,FILE,APROC
6YN6 BNG 3 NOAPROCHERE
6^7Q BXE 7 AINCNO(3),SAMEASLAST [ ALREADY HAVE TSNS SO JUMP.
6^MB FREECORE 3
7272 NOAPROCHERE
72LL REWIND 3 [ INCINDEX
736= FINDREC 3,AINCNO-A1,7,XINCREMENT [ LOCATE RECORD FOR INCREMENT
73KW READAGAIN 3 [ AND READ IT
745G MHUNTW 3,FILE,FRB
74K6 NAME 3,FILE,APROC
754Q SAMEASLAST
75JB [
7642 [*******************************************************
76HL [ OUTPUT 'RESTORE OF %A STARTING' MESSAGE
773= [
77GW HUNTMISB 3,FI,FRESTUSER
782G SMO FRNXT(3)
78G6 LDN 4 FRUSE(3)
78^Q LDN 5 3
79FB LDN 6 JPDUSERNAME
79^2 CALL 7 OUTPACK
7=DL LDN 4 STRINGSTART(1)
7=Y= LDN 5 3
7?CW LDN 6 JPDVARCHAR
7?XG CALL 7 OUTPACK
7#C6 LDX 3 PRMESS(1)
7#WQ CALL 7 MONOUT
7*BB [
7*W2 [*****************************************************
7B*L [ GO DOWN TO RESTOREA TO DO THE RESTORE
7BT= [
7C#W DOWN RESTOREA,3
7CSG LOCKC 2,£ [ RE-LOCK MASTER ACTIVITY
7D#6 LDX 2 FX2 [ AND
7DRQ STO 2 BSACHAPTR [ STORE PTR. TO IT
7F?B TESTRPN2 OK,RESFAIL [ J. IF RESTORE FAILED
7FR2 [
7G=L [*****************************************************
7GQ= [ OUTPUT 'RESTORE OF %A FINISHED' MESSAGE
7H9W [
7HPG TOPFCB2 3
7J96 LDN 4 FME1(3)
7JNQ LDN 5 3
7K8B LDN 6 JPDUSERNAME
7KN2 CALL 7 OUTPACK
7L7L LDN 4 STRINGFIN(1)
7LM= LDN 5 3
7M6W LDN 6 JPDVARCHAR
7MLG CALL 7 OUTPACK
7N66 LDX 3 PRMESS(1)
7NKQ CALL 7 MONOUT
7P5B [
7PK2 [*****************************************************
7Q4L [ OUTPUT '%A RESTORED' MESSAGE FOR TOP DIR. OF LIMB
7QJ= [
7R3W #UNS AMTGR
7RHG BWNZ GINCTSN,NOTIFMTGR [ NOT IF FOR MULTI-TAPE G.R.
7S36 TOPFCB2 3
7SGQ LDN 4 FME1(3)
7T2B LDN 5 3
7TG2 LDN 6 JPDUSERNAME
7T^L CALL 7 OUTPACK
7WF= LDX 3 PRUSER(1)
7WYW CALL 7 MONOUT
7XDG #UNS AMTGR
7XY6 NOTIFMTGR
7YCQ [
7YXB [*****************************************************
7^C2 [ DELETE FRESTUSER ENTRY BY SETTING FRINC=0 AND
7^WL [ REDUCING FRCNT BY 8 - THEN SET ABOUT MAPPING RESTORED LIMB
82B= [
82TW HUNTMISB 3,FI,FRESTUSER
83*G SMO FRNXT(3)
83T6 STOZ FRINC(3)
84#Q LDN 0 8
84SB SBS 0 FRCNT(3)
85#2 SMO FRNXT(3)
85RL LDN 6 FRSUP(3) [ MOVE SUPERIOR PROPER
86?= LDN 7 ASUPUSER(2) [ USER NAME INTO ACTIVITY
86QW MOVE 6 3 [ BLOCK FOR USE IN MAPPING
87=G STOZ AWORK2(2)
87Q6 NEXTFWB
889Q MHUNTW 3,FILE,FWB
88PB BNG 3 NOMORFWB [ FREE ALL FILE/FWB BLOCKS SO THEY
8992 FREECORE 3 [ WON'T CONFUSE CREALEX LATER
89NL BRN NEXTFWB [ (MAY HAVE BEEN LEFT BY RESTORE)
8=8= NOMORFWB
8=MW BS 2,AW2PARTRES [ INDICATE MAPPING RESTORED LIMB
8?7G ACROSS BMAPONE,11 [ TO MAP RESTORED LIMB
8?M6 [
8#6Q [************************************************** RESFAIL
8#LB [ RESTORE HAS FAILED SO DELETE FRESTUSER ENTRY - LOOK
8*62 [ FOR NEXT USER TO BE RESTORED IF ANY
8*KL [
8B5= RESFAIL
8BJW HUNTMISB 3,FI,FRESTUSER
8C4G SMO FRNXT(3)
8CJ6 STOZ FRINC(3)
8D3Q LDN 0 8
8DHB SBS 0 FRCNT(3)
8F32 BRN PASSEND
8FGL [
8G2= [************************************************ XINCREMENT
8GFW [ INCREMENT NO. NOT FOUND IN INCINDEX.(SHOULD NEVER
8G^G [ HAPPEN - MAY BE DUE TO CORRUPTION) OUTPUT 'ABANDONED'
8HF6 [ MESSAGE AND CHECK IF USER CAN BE ERASED, THEN DELETE
8HYQ [ FRESTUSER ENTRY
8JDB [
8JY2 XINCREMENT
8KCL HUNTMISB 3,FI,FRESTUSER
8KX= SMO FRNXT(3)
8LBW STOZ FRINC(3)
8LWG SMO FRNXT(3)
8MB6 LDN 4 FRUSE(3)
8MTQ LDN 5 3
8N*B LDN 6 JPDUSERNAME
8NT2 CALL 7 OUTPACK
8P#L LDN 4 STRINGABAND(1)
8PS= LDN 5 3
8Q?W LDN 6 JPDVARCHAR
8QRG CALL 7 OUTPACK
8R?6 LDN 4 STRNOINC(1)
8RQQ LDN 5 5
8S=B LDN 6 JPDVARCHAR
8SQ2 CALL 7 OUTPACK
8T9L LDX 3 PRMESS(1)
8TP= CALL 7 MONOUT
8W8W ... DOWN BMQUESTB,7 [ TO CHECK IF ERASURE ALLOWED
8WNG NXTRESTUSER
8X86 HUNTMISB 3,FI,FRESTUSER
8XMQ SMO FRNXT(3)
8Y7B STOZ FRINC(3)
8YM2 LDN 0 8
8^6L SBS 0 FRCNT(3)
8^L= BRN PASSEND
925W [
92KG [************************************************ REPEAT
9356 [ -VE. INCR. NO. HAS BEEN FOUND. CHECK IF
93JQ [ NOMINATION BY OPERATORS(= -2). IF NOT CHECK IF
944B [ PREVIOUSLY CORRUPT DIR. WHICH IS O.K. ON THIS PASS
94J2 [(FRFIL -VE.) - IF SO IGNORE ENTRY. ELSE REPEAT SEARCH
953L [
95H= REPEAT
962W ADN 0 2
96GG BNZ 0 REPEATSRCH [ J. IF NOT NOMINATED
9726 HUNTMISB 1,FI,FRESTUSER
97FQ SBX 3 1
97^B STO 3 AWORK3(2) [ DATUMISE POINTER AND SAVE IT
98F2 SMO 3
98YL LDN 4 FRUSE(1)
99D= LDN 5 3
99XW LDN 6 JPDUSERNAME [ OUTPUT
9=CG CALL 7 OUTPACK [
9=X6 LDN 4 STRINGABAND(1) [ ABANDONED
9?BQ LDN 5 3 [
9?WB LDN 6 JPDVARCHAR [ MESSAGE
9#B2 CALL 7 OUTPACK
9#TL LDN 4 STRUSNOTFND(1)
9**= LDN 5 4
9*SW LDN 6 JPDVARCHAR
9B#G CALL 7 OUTPACK
9BS6 LDX 3 PRMESS(1)
9C?Q CALL 7 MONOUT
9CRB NOREPEAT
9D38 ... STOZ FRINC(3)
9D?2 HUNTMISB 3,FI,FRESTUSER
9DQL LDN 0 8 [ DELETE
9F== SBS 0 FRCNT(3) [ FRESTUSER
9GP6 BRN PASSEND
9H8Q REPEATSRCH
9HNB LDX 0 FRFIL(3) [ CHECK IF PREVIOUS FAILURE
9J82 BNG 0 NOREPEAT [ BUT O.K. THIS TIME
9JML ACROSS BMFIXIT,4 [ IF NOT REPEAT SEARCH
9K7= [
9KLW ...[************************************************* QSTEPC/QSTEPC1
9L6G [
9L9# ...[ QSTEPC(K2) AND QSTEPC1(K5) READ THE NEXT BLOCK
9L#6 ...[ FROM BACKING STORE
9LBY ...[
9LFQ ...[ K2 IS USED FROM BMAPONE AND BMAPDIR WHEN CHECKING A
9LJJ ...[DIRECTORY - IN THIS CASE EXISTING FURBS ARE FREED
9LMB ...[AND FUWBS ARE WRITTEN AWAY THEN FREED.
9LQ8 ...[
9LT2 ...[ K5 IS USED FROM BMINDEX WHEN CHECKING INDEXING OF
9LXS ...[VARIOUS SYSTEM FILES. BUFFER BLOCKS ARE NOT FREED.
9M2L ...[
9M5D ...[ IN BOTH CASES EXIT IS:
9M8= ...[ UP IF TRANSFER OKAY
9M?4 ...[ UP+1 IF CORRUPTION DETECTED
9M*W ...[ UP+2 IF EOF REACHED
9MDN ...[IF A READ FAIL OCCURS EXIT IS ACROSS TO BMAPONE,14
9MHG ...[IF K2 ENTRY SO THAT A PARTIAL RESTORE CAN BE
9ML# ...[INITIATED, BUT FOR K5 ENTRY EXIT IS UPPLUS 3 SO THAT
9MP6 ...[THE CALLING SEGMENT CAN TAKE APPROPRIATE ACTION.
9MRY ...[
9MWQ ...QSTEPC1
9M^J ... NGNC 0 1
9N52 [
9NJL QSTEPC
9NPS ... LDN 0 0
9NX2 ... STO 0 AWORK1(2)
9P4= STOZ AWORK2(2) [ NO OF REPEATS
9P#4 ... BNZ 0 NOUBL [DO NOT FREE BUFFER BLOCKS IF K5
9PHW NXTUBL
9Q3G TOPFCA2 3
9QH6 ADX 3 FBACKPOINT(3)
9R2Q LDX 3 FPTR(3)
9RGB LDX 0 ATYPE(3)
9S22 BXE 0 TYPEFURB(1),READFREE[ FURB ?
9SFL BXU 0 TYPEFUWB(1),NOUBL [ J. IF NOT A FUWB
9S^= TOPFCB2 1
9TDW CHECKBL 1,3,WRITEIT [ CHECK RECORD HEADERS
9TYG GEOERR 1,WRITE!
9WD6 WRITEIT [ AND
9WXQ LDX 2 FX2 [ WRITE IT AWAY
9XCB CHAIN 3,2
9XX2 WRITEAUTO FREE,BSBS,,BACK1(3)
9YBL BRN NXTUBL
9YW= READFREE
9^*W FREECORE 3 [ FREE FURB
9^TG BRN NXTUBL
9^^C ...[
=25# ...[ ALL EXISTING USAGE BLOCKS HAVE BEEN FREED.
=299 ...[
=2*6 NOUBL
=4R= TOPFCA2 3
=5=W TRYNXTBLK
=5QG LDX 3 FREADBLOCK(3)
=6=6 TOPFCB2 1
=6PQ LDX 2 FBLMOD(1)
=79B ADN 2 A1
=7P2 SBX 2 3
=88L BNZ 2 NOTEOF
=8N= UPPLUS 2 [ IF END OF FILE REACHED
=97W NOTEOF
=9MG SMO 3
==76 LDX 3 0(1) [ BLOCK NUMBER
==LQ LDX 2 BSPRE(1) [ RESIDENCE NO.
=?6B BACKREAD ,BSBS,READFAIL,2 [ READ BLOCK FROM B.S. - J. IF FAIL
=?L2 MHUNTW 3,BSTB,BREAD
=#5L BNG 3 READFAIL [ J. IF NO BREAD BLOCK FORMED
=#K= TOPFCB2 1
=*4W CHECKBL 1,3,NOTCORUPT [ CHECK RECORD HEADERS- J. IF O.K
=*JG LDX 2 FX2
=B46 LDX 6 BACK1(3)
=BHQ LDX 7 BACK2(3) [ SAVE RES. NO. AND BLOCK NO.
=C3B STO 6 ACOMMUNE2(2) [ FOR READFAIL SEGMENT
=CH2 STO 7 ACOMMUNE3(2) [ ( WOULD BE CORRUPTED BY CHAPTER
=D2L TOPFCA2 3 [ TRANSFER OF SEGMENT READFAIL)
=DG= LDX 0 AWORK2(2)
=D^W SBN 0 5 [ CHECK NO. OF REPEATS
=FFG BZE 0 XRECHEAD [ J. IF 5 ALREADY DONE
=F^6 MFREE BSTB,BREAD
=GDQ LDN 0 1 [ ELSE INCREMENT COUNT
=GYB ADS 0 AWORK2(2)
=HD2 BRN TRYNXTBLK [ AND TRY AGAIN
=HXL [
=JC= [************************************************** XRECHEAD
=JWW [ IN SPITE OF REPEATS RECORD HEADERS ARE STILL CORRUPT
=KBG [
=KW6 XRECHEAD
=L*Q DOWN READFAIL,3 [ TO SEND 'CORRUPT' MESSAGE TO JOURNA
=LTB MFREE BSTB,BREAD
=M*2 UPPLUS 1 [ TO SHOW CORRUPT RECORD HEADERS
=MSL [
=N#= [************************************************** READFAIL
=NLM ...[ TRANSFER HAS FAILED SO NEED TO DO A P.R. FOR DIRECTORY
=N^4 ...[ OR OUTPUT MESSAGE AND RETURN UPPLUS 3 FOR OTHER CASES.
=P?G [
=PR6 READFAIL
=PY# ... LDX 0 AWORK1(2)
=Q5G ... BNZ 0 XUP3
=Q=Q ACROSS BMAPONE,14 [ TO DO P.R. IF REQUIRED
=Q#^ ...XUP3 STO 3 ACOMMUNE3(2) [STORE BLK NO
=QC8 ... TOPFCB2 1
=QFC ... LDX 0 BSPRE(1) [AND RES NO FOR READFAIL
=QHL ... STO 0 ACOMMUNE2(2)
=QKT ... DOWN READFAIL,4
=QN4 ... UPPLUS 3
=QQB [
=R=2 [************************************************ NOTCORUPT
=RPL [ TRANSFER O.K. SO RENAME BREAD BLOCK TO BE A
=S9= [ FURB AND CHAIN IN FRONT OF FSTACK
=SNW [
=T8G NOTCORUPT
=TN6 NAME 3,FILE,FURB
=W7Q TOPFCA 2
=WMB ADX 2 FBACKPOINT(2)
=X72 CHAIN 3,2
=XLL UP [ TO SHOW TRANSFER O.K.
=Y6= XBR
=YKW GEOERR 1,BMCNTRL
=^5G [
=^K6 #END
^^^^ ...203034720002