{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: CLOSEALT864)}}
====== CLOSEALT864 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BC|BC]], [[george:macro:BS|BS]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHAIND|CHAIND]], [[george:macro:CLOSETOP|CLOSETOP]], [[george:macro:DELFCB|DELFCB]], [[george:macro:ERASEND|ERASEND]], [[george:macro:FAILCLEAR|FAILCLEAR]], [[george:macro:FILETRAN|FILETRAN]], [[george:macro:FPUT|FPUT]], [[george:macro:FREEBAX|FREEBAX]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETDIR|GETDIR]], [[george:macro:HUNTW|HUNTW]], [[george:macro:INSERT|INSERT]], [[george:macro:JBC|JBC]], [[george:macro:JBCC|JBCC]], [[george:macro:JBS|JBS]], [[george:macro:JFNZ|JFNZ]], [[george:macro:JMBS|JMBS]], [[george:macro:LF|LF]], [[george:macro:LONGCOOR|LONGCOOR]], [[george:macro:LONGSET|LONGSET]], [[george:macro:MFREE|MFREE]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:NEXTFCB|NEXTFCB]], [[george:macro:REPLACE|REPLACE]], [[george:macro:RERING|RERING]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SFCA|SFCA]], [[george:macro:SFCAB|SFCAB]], [[george:macro:STEP|STEP]], [[george:macro:STEPWRITE|STEPWRITE]], [[george:macro:STF|STF]], [[george:macro:SUBRELT|SUBRELT]], [[george:macro:SUBSTITUTE|SUBSTITUTE]], [[george:macro:SUICIDE|SUICIDE]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCAB|TOPFCAB]], [[george:macro:TOPFCB|TOPFCB]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:TRANSFCB|TRANSFCB]]
22FL ... SEG CLOSEALT,863,SECTION FILE,CLOSE
24XQ [
25CB SEGENTRY K1CLOSEALT,XENT1
25X2 SEGENTRY K2CLOSEALT,XENT2
26BL SEGENTRY K3CLOSEALT,XENT3
26W= SEGENTRY K4CLOSEALT,XENT4
27*W SEGENTRY K5CLOSEALT,XENT5
27TG ... SEGENTRY K7CLOSEALT,XENT7
28*6 ... SEGENTRY K8CLOSEALT,XENT8
28SQ #
29#B # IF ONE BLOCK ONLY HAS CHANGED, THIS IS THE LAST STAGE OF THE
29S2 # CAREFUL UPDATE - WE DO A NON-AUTONOMOUS FILE WRITE FOR THE
2=?L # NEW DIRECTORY ENTRY, FREE THE BS, DERING THE TRAILING FILES,
2=R= # RELEASE ANY CLOSESET WAITERS ON THESE FILES AND CLOSE THE
2?=W # DIRECTORY
2?QG # IF MORE THAN ONE BLOCK NUMBER HAS CHANGED, WE REWRITE THE BLOCKS
2#=6 # RECORD BY A STEPWRITE, AND THEN GO ACROSS TO K8CLOSEDIR TO
2#PQ # CLOSE THE DIRECTORY JUST UPDATED
2*9B # IF THE LENGTH OF THE BLOCKS RECORD HAS ALTERED, WE REWRITE BY
2*P2 # INSERT/REPLACE BEFORE GOING ACROSS TO K8CLOSEDIR
2B8L #
2BDD ...N4AST 4H****
2BN= SFULLB
2C7W #HAL BSTB+FULLB,0
2CMG SMAPP
2D76 #HAL FILE+FMAPP,0
2DLQ SFINDEXF
2F6B #HAL FI+FINDEXF,0
2FL2 FILETRAN [SUBROUTINE MACRO FOR FILEWRITE
2G5L SUBRELT
2GK= SUBRELT 2
2H4W EXIT 7 0
2HJG OLDFCA
2J46 LDN 0 1
2JHQ SFCA 0,3 [X3->FCA AT LEVEL 1
2K3B EXIT 7 0
2KH2 OLDFCAB
2L2L LDN 0 1
2LG= SFCAB 0,3,2 [X2->FCB X3->FCA AT LEVEL 1
2L^W EXIT 7 0
2MFG TOPFCB
2M^6 SFCAB ,2,2 [X2->FCB
2NDQ EXIT 7 0
2NYB TOPFCAB
2PD2 SFCAB ,3,2 [X2->FCB X3->FCA
2PXL EXIT 7 0
2QC= #
2QWW STEPWRITE
2RBG SBX 7 FX1
2RW6 STEPWRITE
2S*Q ADX 7 FX1
2STB EXIT 7 0
2T*2 #
2TSL # FIND THE FMAPP AFTER THE BLOCK ADDRESSED BY X2
2W#= SFMAPP
2WRW LDX 1 FX1
2X?G LDX 0 SMAPP(1)
2XR6 XAGMAP
2Y=Q LDX 2 FPTR(2)
2YQB TXU 0 ATYPE(2)
2^=2 BCS XAGMAP
2^PL EXIT 7 0
384Q #
38JB # FREE THE FCB, FSTACK AND FMAPP IF POSSIBLE
3942 # WE CANT FREE THE FCB IF
39HL # SOMEONE'S WAITING TO EMPTY
3=3= # THERE'S AN AUTOCLOSE ON THE FILE
3=GW # IT'S STILL OPEN
3?2G # THERE ARE CLOSECTS ON THE FILE
3?G6 # THERE ARE WAITERS
3?^Q # IT'S OPEN IN COPY MODE
3#FB # OR BEING OPENED IN COPY MODE
3#^2 [ THE FCA/FCB MAY BE REMOVED OVER A CO-ORDINATION, IF SO
3*DL [ EXIT IS AT 0+
3*Y= [ EXIT AT
3BCW [ 0+ FCB FREED.
3BXG [ 1+ FCB STILL IN USE
3CC6 [ 1+ FCB NOT TO BE REMOVED FROM FILE-CHAIN, OR OPEN IN
3CWQ [ COPY MODE
3DBB TFRFCB
3DW2 SMO FBACKPOINT(3) [REL. PTR. TO START OF BLOCK
3F*L LDN 0 0(3) [WRT WD 0 OF FCA
3FT= TXU 0 FX2
3G#W BCC (7) [BRN IF FCA WAS REALLY ACTIVITY BLOC
3GSG ADN 7 1
3H#6 ... JMBS (7),2,BFSOLE,BFEMPTY,BFMCOP,BFFCB,BFTIDYLOCK
3HRQ ... LF 2,FFAUTCLCT,0 [X0= COUNT OF AUTOCLOSES ON FILE
3J?B ... ORX 0 CTOPEN(2)
3JR2 ORX 0 FWAITCOUNT(2)
3K=L BNZ 0 (7)
3KQ= [ FCB MAY BE FREED.
3L9W LDX 3 2 [X2->FCB
3LPG FREECORE FPTR(2) [THE FSTACK
3M96 LDN 6 0
3MNQ TRYNEXT
3N8B LDX 2 FPTR(3) [X2->FINDEXF, FMAPP, FCB OR FILE CHAI
3NN2 TRYX TXU 2 CXFI
3P7L BCC OVERCHECK [J IF BASE OF FILE CHAIN
3PM= LDX 0 ATYPE(2)
3Q6W TXU 0 FILEPLUSFCB
3QLG BCC OVERCHECK [J IF NEXT FCB
3R66 TXU 0 SFINDEXF(1)
3RKQ BCS TRYFMAPP [J IF NOT FINDEXF
3S5B LDN 6 #77
3SK2 ANDX 6 FINFC(3)
3T4L BZE 6 ODDALT [J IF FINDEXF BUT NO INDEX NUMBER
3TJ= LDX 2 FPTR(2) [NEXT BLOCK
3W3W BRN TRYX
3WHG TRYFMAPP
3X36 TXU 0 SMAPP(1)
3XGQ BCS ODDALT [J IF NOT FMAPP
3Y2B JBCC ODDALT,3,BFCARE [CAREFUL BIT UNSET! WHY!?!?
3YG2 FREECORE 2 [THE FMAPP
3Y^L BRN TRYNEXT
3^F= ODDALT
3^YW GEOERR BRIEFPM,ODD ALT
42DG OVERCHECK
42Y6 JBS YDIRECTORY,3,BFDIR
43CQ BZE 6 NOFINDEXF
43XB FREECORE FPTR(3) [THE FINDEXF
44C2 NOFINDEXF
44WL ... DELFCB 3,FILE
45B= BRN NOFREE
45TW YDIRECTORY
46*G BZE 6 NOINDEX
46T6 CHAIND FPTR(3),BHALF [PUT THE FINDEXF IN THE HALF-OPEN CH.
47#Q NOINDEX
47SB ... TRANSFCB 3,FILE,HALF [TRANSFER FCB FROM FILE TO HALF
49?= NOFREE
49QW SBN 7 1
4==G EXIT 7 0
4=Q6 #
4?9Q # LOOK FOR AN FCA, IN THE FSTACK CONTAINING THE FCA ADDRESSED BY X3,
4?PB # WITH THE SAME BIT SET IN FGENERAL1 AS IN X6, AND LEAVE ITS
4#92 # ADDRESS IN X2
4#NL SEARCHFCA
4*8= SMO FBACKPOINT(3)
4*MW LDN 2 0(3)
4B7G LDEX 4 ARINGNO(2) [PICK COUNT OF ELEMENTS
4BM6 ADN 2 A1 [SET X2-> FIRST ELEMENT
4C6Q SFCAPT
4CLB TXU 2 3
4D62 BCC OURFCA [J.IF OWN FCA
4DKL LDX 0 FGENERAL1(2)
4F5= ANDX 0 6 [CHECK AGAINST MASK
4FJW BNZ 0 (7) [AND EXIT IF FIT
4G4G OURFCA
4GJ6 ADN 2 FELLEN [STEP TO NEXT ELEMENT
4HHB BCT 4 SFCAPT [EXIT +1 WHEN NOMORE FCAS IN STACK
4J32 EXIT 7 1
4JGL #
4K2= # ANY FULLB'S BEHIND THE FMAPP ADDRESSED BY X6 ARE RECHAINED AFTER
4KFW # THE FMAPP ADDRESSED BY X5, OR AFTER THE FIRST FULLB IF PRESENT
4K^G MOVEFULLBS
4LF6 TXU 6 5
4LYQ BCC (7) [EXIT IF THE SAME FMAPP - SAME FILE
4MDB LDX 1 FX1
4MY2 LDX 4 SFULLB(1)
4NCL SMO 5
4NX= LDX 2 FPTR
4PBW TXU 4 ATYPE(2)
4PWG BCS NOCURR [CHECK THAT THERE IS NO CURRENT FULLB
4QB6 LDX 5 2
4QTQ NOCURR
4R*B MVFLBS
4RT2 SMO 6 [X6->OLD FMAPP
4S#L LDX 2 FPTR [X2->NEXT BLOCK
4SS= TXU 4 ATYPE(2)
4T?W BCS (7) [EXIT IF NO MORE FULLB'S TO MOVE
4TRG CHAIN 2,5 [A FULLB
4W?6 BRN MVFLBS
4WQQ #
4X=B # IF THE FILE, WHOSE DIRECTORY ENTRY WAS THE LAST TO BE MPDATED
4XQ2 # (I E ITS ENT BLOCK IS STILL PRESENT), IS MARKED
4Y9L # TO-BE-ERASED, WE ERASE IT IF
4YP= # NOT FROZEN, AND
4^8W # IF A DIRECTORY, IT IS EMPTY
4^NG # N B THE FCB MAY HAVE BEEN FREED BY NOW
5286 XERASCH
52MQ SBX 6 FX1
537B MHUNTW 1,FILE,ENT
538* ... LDX 0 ELAN(1)
539# ... SMO FX1
53=? ... SBX 0 N4AST
53#9 ... BNZ 0 NOTJOB [J IF NOT USER JOBLIST FILE
53*8 ... LDX 0 ECOPS(1)
53B7 ... SRL 0 15
53C6 ... BNZ 0 NOERASE [J IF NOT EMPTY
53D5 ... CALL 7 OLDFCAB
53F4 ... LDX 0 CTOPEN(2)
53G3 ... ADX 0 FWAITCOUNT(2)
53H2 ... BNZ 0 NOERASE
53H^ ... JBS NOERASE,2,BFMCOP [J IF FILE OPEN IN COPY MODE
53J6 ...#UNS CLOSESTATS
53J? ...(
53JD ... LDN 0 1
53JK ... ADS 0 CLSTAT8 [NO. OF ERASES OF JOBLIST **** FILES
53JQ ...)
53JY ... BRN YERASE [ERASE EMPTY JOBLIST FILE
53KX ...NOTJOB
53M2 JBC NOERASE,1,BEERASE
53WS ...YERASE
546L LDEX 0 EAUTOCOUNT(1)
54L= ADX 0 ESVCT(1)
555W BNZ 0 NOERASE [J IF FROZEN
55KG LDX 0 EUSE1(1)
5656 BZE 0 YESTER [J IF IT'S A TERMINAL FILE
56JQ LDCT 0 #777
574B ANDX 0 ECOPS(1)
57J2 BNZ 0 NOERASE [J IF DIRECTORY NOT EMPTY
583L YESTER
58H= SETNCORE 6,3,FILE,FLOCNB
592W MHUNTW 2,FILE,ENT
59GG LDX 0 ELAN(2)
5=26 STO 0 A1+5(3)
5=FQ ADN 3 A1
5=^B ADN 2 ELOC1
5?F2 MOVE 2 5
5?YL GETDIR 3
5#D= ERASEND
5#XW MFREE FILE,FLOCNB
5*CG MHUNTW 1,FILE,ENT
5*X6 NOERASE
5BBQ FREECORE 1 [THE ENT BLOCK
5BWB MFREE FILE,FABSNB
5CB2 ADX 6 FX1
5CTL EXIT 6 0
5D*= #
5DSW # ENTRY FROM CLOSEFUL WHEN NO BLOCK NUMBERS HAVE BEEN CHANGED
5F#G XENT1
5H?2 ... TRACEIF K6CLOSEALT,99,299,FX2,NOALT
5HQL ... CALL 7 OLDFCAB [X2->FCB, X3->FCA OF FILE
5M82 CALL 7 TFRFCB [SEE IF WE CAN FREE THE FCB AT LEV 1
5MML BRN SUPDIRCLOSE [FCB FREED
5N7= BRN SUPDIRCLOSE [FCB STILL IN USE
5NLW #
5P6G # ENTRY FROM CLOSEFUL WHEN
5PL6 # THE LENGTH OF THE BLOCKS RECORD HAS CHANGED
5Q5Q # COMPLETELY REWRITE THE DIRECTORY ENTRY CAREFULLY - STEPWRITE THE
5QKB # NAME RECORD AND INSERT/REPLACE THE BLOCKS RECORD
5R52 XENT2
5S4= ... TRACEIF K6CLOSEALT,99,299,FX2,NUMCHANG
5T3G CALL 7 STEPWRITE
5TH6 MHUNTW 2,FILE,ENT
5W2Q ADN 2 A1
5WGB SMO FRH(2)
5X22 MOVE 2 0 [THE NAME RECORD
5XFL STEP
5X^= MHUNTW 1,FILE,FINTER3
5YDW NAME 1,FILE,FWB
5YYG LDEX 0 AWORK3(2)
5^D6 BZE 0 NOCOPS [J IF THERE WAS NO BLOCKS RECORD
5^XQ REPLACE [REPLACE THE OLD BLOCKS RECORD
62CB BRN UPDMJ
62X2 NOCOPS
63BL INSERT [INSERT THE NEW BLOCKS RECORD
63W= UPDMJ
64*W MFREEW FILE,FWB
64TG HUNTW 1,FI,CFINDEXF [IF CFINDEXF EXISTS THEN
65*6 BNG 1 TOENDUNCL [INDEX HAS CHANGED & THUS MUST
65SQ NAME 1,FILE,FWB [BE UPDATED IN DIRECTORY
65^Y ... LDEX 0 AWORK3(2)
6676 ... BZE 0 NOSTEP [J IF ALREADY POSITIONED ON INDEXREC
66#B STEP
66J8 ...NOSTEP
66S2 REPLACE
67?L MFREEW FILE,FWB
67R= TOENDUNCL
68=W CALL 6 XERASCH [CHECK IF TO-BE-ERASED
68QG ... ACROSS CLOSEDIR,4
69=6 #
69PQ # ENTRY FROM CLOSEFUL WHEN
6=9B # MORE THAN ONE BLOCK NUMBER HAS CHANGED
6=P2 # REWRITE THE DIRECTORY ENTRY CAREFULLY - SINCE THE RECORD LENGTHS
6?8L # ARE UNCHANGED USE STEPWRITE
6?N= ...XENT3
6#MG ... TRACEIF K6CLOSEALT,99,299,FX2,MANYALT
6*LQ CALL 7 STEPWRITE
6B6B MHUNTW 2,FILE,ENT
6BL2 ADN 2 A1
6C5L SMO FRH(2)
6CK= MOVE 2 0 [THE NAME RECORD
6D4W YINF
6DJG STEP
6F46 CALL 7 STEPWRITE
6FHQ MHUNTW 2,FILE,FINTER3
6G3B ADN 2 A1
6GH2 SMO FRH(2)
6H2L MOVE 2 0 [THE BLOCKS RECORD
6HG= SBN 2 A1
6H^W FREECORE 2 [THE FINTER3
6JFG HUNTW 1,FI,CFINDEXF [IF CFINDEXF EXISTS
6J^6 BNG 1 TOENDUNCL [INDEX HAS CHANGED AND THUS MUST
6KDQ STEP [BE UPDATED IN DIRECTORY
6KYB CALL 7 STEPWRITE
6LD2 MHUNTW 2,FI,CFINDEXF
6LXL ADN 2 A1
6MC= SMO FRH(2)
6MWW MOVE 2 0
6NBG SBN 2 A1
6NW6 FREECORE 2
6P*Q BRN TOENDUNCL
6PTB #
6Q*2 # ENTRY FROM CLOSEFUL WHEN
6QSL # ONLY ONE BLOCK NUMBER HAS CHANGED, SO WE CAN UPDATE THE DIRECTORY
6R#= # CLEANLY, DO A NON-AUTONOMOUS FILE WRITE - THE ENTRY IS THEN
6RRW # SECURE ON BACKING STORE, AND ALL THE BACKING STORE IN THE
6S?G # ACCUMULATION OF FULLB'S AFTER THE DIRECTORY CAN BE FREED,
6SR6 # THE TRAILING CONVERTED CLOSECT FILES DETACHED AND CLOSESET
6T=Q # WAITERS FREED. CLOSE THE DIRECTORY. END OF CAREFUL UPDATE.
6TQB # HOWEVER, IF THERE'S AN AUTOCLOSE OR A COPIER ON THE DIRECTORY
6W=2 # WE WONT BE SECURE UNTIL THEY'VE FINISHED.- SO HAND OVER THE
6WPL # FULLB'S, AND OUR FILE RING, AND GIVE UP
6X9= XENT4
6Y8G ... TRACEIF K6CLOSEALT,99,299,FX2,ONE ALT
6^7Q HUNTW 1,FI,CFINDEXF [UPDATE NO LONGER CLEAN IF
6^MB [ TWO RECORDS NEED UPDATING
7272 [RECORDS NEED UPDATING
72LL BPZ 1 YINF
736= STEP
73KW MHUNTW 2,FILE,FINTER3
745G ADN 2 A1
74K6 SMO FRH(2)
754Q MOVE 2 0 [THE BLOCKS RECORD
75JB SBN 2 A1
7642 FREECORE 2 [FREE FINTER3
76HL TOPFCA2 2
773= SBX 3 FREADWORD(2)
77GW CHAIN 3,FX2
782G FILEWRIT ,FREE,,,,,TFAIL
78G6 SUPDIRCLOSE
78^Q ... CALL 7 TOPFCAB [X2->FCB & X3->FCA OF TOP FILE (DIR.)
79FB ... JFNZ QWAIT,2,FFAUTCLCT [J IF AUTOCLOSE ON FILE
7=Y= JBS NONZCLSCT,2,BFMCOP
7?CW JBC TOFREEBS,2,BFALTB
7?H2 ... SMO FBACKPOINT(3)
7?L6 ... LDEX 0 ARINGNO(3)
7?P= ... SBN 0 1
7?SB ... BZE 0 TOENDUNCL [J IF NO OTHER CLOSE ACTIVITY
7?XG #
7#C6 # WAIT FOR THE AUTOCLOSE TO GET GOING AND CONVERT THE FILE TO
7#WQ # CLOSECT TYPE, BEFORE HANDING OVER
7*BB #
7*W2 QSETWAIT
7B*L BS 2,BFAUTOW
7BT= ... TRACEIF K6CLOSEALT,99,299,FLOC1(2),WT CLWT
7CSG LDX 7 BACK2(2)
7D#6 LONGSET CLOSEWAIT,XBRK,7
7DRQ LONGCOOR
7F?B BRN SUPDIRCLOSE
7FR2 QWAIT
7G=L JBS NONZCLSCT,2,BFAUTO
7GQ= JBS QSETWAIT,2,BFSOLE
7H9W [ IF SLOECLOSE & NOT BELONG TO AUTOCLOSE THEN GO WAITING
7HPG NONZCLSCT
7J96 LDCT 6 #10
7JNQ CALL 7 SEARCHFCA
7K8B BRN SIOUX [J IF COPIER'S FCA FOUND
7KN2 LDN 6 #40
7L7L CALL 7 SEARCHFCA
7LM= BRN SFOU [J IF 'MOST-RECENT-CONVERT' FCA FOUND
7M6W GEOERR BRIEFPM,FCA???
7MLG [
7N66 [ FIND THE SOLECLOSER, IF THIS IS NOT FOUND, THE TOP LEVEL FILE
7NKQ [ IS CORRECT AND HAND FULLBS OVER TO THIS FILE.
7P5B SFOU JMBS SFFCA,2,BAMCOPY,BASOLE
7PK2 LDX 2 BPTRF(2)
7Q4L SMO FBACKPOINT(2)
7QJ= LDX 0 ATYPE(2)
7R3W TXL 0 CACT [TEST IF ACTIVITY REACHED
7RHG BCS SFOU
7S36 LDX 7 FPTRF(2) [STEP FORWARD
7SGQ BRN SFFCA1 [TO FCA
7T2B SFFCA [FOUND MERGE
7TG2 LDX 7 2
7T^L SFFCA2
7WF= LDX 2 BPTRF(2)
7WYW SMO FBACKPOINT(2)
7XDG LDX 0 ATYPE(2)
7XY6 TXL 0 CACT
7YCQ BCS SFFCA2
7YXB SFFCA1 [X7 -> FCA,X2 -> ACTIVITIES FILERING
7^C2 ADX 2 FBACKPOINT(2)
7^WL SMO FX2
82B= STO 2 AWORK1 [-> ACTIVITY
82TW LDX 2 7 [-> FCA
83T6 ADX 2 FBACKPOINT(2)
84#Q CALL 7 SFMAPP [X2->OTHER FMAPP
84SB LDX 5 2
85#2 TOPFCB 2
85RL CALL 7 SFMAPP [X2->OUR FMAPP
86?= LDX 6 2
86QW CALL 7 MOVEFULLBS [AND PASS THE BS UP
87Q6 LDX 2 FX2
889Q LDX 2 AWORK1(2)
88PB BRN TOCLOS
8992 SIOUX
89NL LDX 2 BPTRF(2)
8=8= SMO FBACKPOINT(2)
8=MW LDX 0 ATYPE(2)
8?7G TXL 0 CACT
8?M6 BCS SIOUX [J IF NOT THE ACTIVITY YET
8#6Q ADX 2 FBACKPOINT(2)
8#LB TOCLOS
8*62 LDX 5 FILEBRING(2) [X5->FCA OF BOTTOM FILE IN OTHER RING
8*KL CALL 7 OLDFCA
8B5= LDX 6 BPTRF(3) [X6->FCA OF DIRECTORY IN OUR RING
8BJW NEXONE
8C4G RERING 3,5 [GIVE THE FCA TO OTHER ACT
8CJ6 SMO 6
8D3Q LDX 3 FPTRF
8DHB SMO FBACKPOINT(3) [PICK UP NEXT FCA ETC.
8F32 LDN 2 0(3)
8FGL TXU 2 FX2
8G2= BCS NEXONE [J.IF LAST FCA
8GFW #
8G^G # EITHER WE'VE JUST FINISHED A CAREFUL UPDATE, OR WE'VE HANDED OVER
8HF6 # TO ANOTHER AUTOCLOSE - IN EITHER CASE WE'VE HAD ENOUGH SO. AFTER
8HYQ # CHECKING TO SEE IF WE CAN ERASE THE LAST FILE CLOSED, WE CLOSE
8JDB # THE DIRECTORY AND SUICIDE
8JY2 TOEND
8KCL LDX 2 FX2
8KX= LDN 0 FILERING(2)
8LBW TXU 0 FILERING(2)
8LWG BCC SUICIDE [NO DIRECTORY OPEN IF K6 ENTRY
8MB6 TOPFCB 2
8MTQ TXU 2 BFILE
8N*B BCC MAS
8NT2 CALL 6 XERASCH [CHECK IF THE FILE IS TO-BE-ERASED
8P#L MAS
8PS= CLOSETOP
8Q?W BRN SUICIDE
8QRG #
8R?6 # CAREFUL UPDATE FINISHED - SO FREE THE BACKING STORE IN THE FULLB'S
8RQQ # AFTER THE DIRECTORY, EMPTY THE FILE RING, RELEASE ANY
8S=B # CLOSESET WAITERS ON ANY FILE IN THE RING AND GIVE UP
8SQ2 # K5CLOSEALT IS THE ENTRY FROM CLOSEMAS AFTER MASTER'S DIRECTORY
8T9L # ENTRY HAS BEEN UPDATED
8TP= XENT5
8W8W TOFREEBS
8WNG LDX 4 SFULLB(1)
8X86 TCHBS
8XMQ CALL 7 TOPFCB [X2->DIRECTORY
8Y7B CALL 7 SFMAPP [X2->DIRECTORY'S FMAPP
8YM2 LDX 7 2
8^6L LDN 3 0
8^L= NEXTBS
925W SMO 7
92KG LDX 2 FPTR
9356 TXU 4 ATYPE(2)
93JQ BCS NMORBS [J IF NO MORE FULLB'S
944B CHAIN 2,FX2 [THE FULLB'S
94J2 BUX 3 NEXTBS [COUNT THEM
953L NMORBS
95H= BZE 3 NONFREE [J IF NO FULLB'S
962W YESFREE
96GG FREEBAX
9726 MFREEW BSTB,EMPTYB
97FQ BCT 3 YESFREE
97^B BRN TCHBS [J BACK TO CHECK NO MORE B.S. TO FREE
98F2 NONFREE
98YL LDN 5 0
99D= NEXTFCB
99XW BNG 5 NODIR [J IF K8 ENTRY - NO DIRECTORY OPEN
9=CG CALL 7 OLDFCAB
9=X6 BRN YESDIR
9?BQ NODIR
9?WB CALL 7 TOPFCAB
9#B2 YESDIR
9#TL SMO FBACKPOINT(3)
9**= LDN 0 0(3)
9*SW TXU 0 FX2
9B#G BCC TOEND [J IF ONLY THE DIRECTORY LEFT
9DQL ... TRACEIF K6CLOSEALT,99,299,FLOC1(2),CL FL
9F7L ... TRACEIF K6CLOSEALT,99,299,FINFD(2),CL CC
9FJM ... LF 2,FFAUTCLCT,7 [X7= COUNT OF AUTOCLOSES ON FILE
9FX4 ... BZE 7 XCLCCNEG [GEOERR IF NONE
9G9F ... SBN 7 1
9GHW ... STF 2,FFAUTCLCT,7 [REDUCE AUTOCLOSE COUNT BY 1
9GW? ... BNZ 7 SCLCT [J TO DERING IF THERE'S ANOTHER FCA
9H8Q BC 2,BFAUTO
9HNB JBCC NCLST,2,BFCLOSESET [J IF CLOSESET
9J82 [ I'M NOT APPY ABOUT THIS BIT!
9JML ... TRACEIF K6CLOSEALT,99,299,FLOC1(2),REL CLST
9KLW TRYFCAS
9L6G LDN 6 #200
9LL6 CALL 7 SEARCHFCA
9M5Q BRN PICKEDFCA [J. IF CLOSESET FCA FOUND
9MKB SMO FBACKPOINT(3)
9N52 LDX 2 BPTR(3)
9NJL NCLST CALL 7 TFRFCB [TRY TO FREE THE FCB AT LEVEL 1
9P4= BRN NEXTFCB
9PHW SCLCT LDX 2 3
9Q3G CALL 7 SUBRELT [CANT FREE FCB AT LEV 1 - DERING FCA
9QH6 BRN NEXTFCB
9R2Q ...PICKEDFCA
9RGB LDX 7 2
9S22 LDX 1 2
9SFL NOTACT
9S^= LDX 1 BPTRF(1)
9TDW SMO FBACKPOINT(1)
9TYG LDN 2 0(1)
9WD6 LDX 0 ATYPE(2)
9WXQ TXL 0 CACT
9XCB BCS NOTACT [J IF NOT THE CLOSESET ACTIVITY YET
9XX2 FPUT [SET THE CLOSESET GOING
9YBL LDX 2 7
9YW= CALL 7 SUBRELT [AND REMOVE ITS FCA
9^*W CALL 7 OLDFCAB
9^TG BRN TRYFCAS [REL ANY MORE CLOSESETS ON THIS FILE
=2*6 #
=2SQ ...# THE FILE BEING CLOSED HAS BEEN REMOVED BY A CLOSESHORT OR
=3#B ...# CLOSEABANDON. THE DIRECTORY ISN'T OPEN. ENTERED FROM CLOSEONE.
=3S2 ...XENT8
=4?L NGN 5 1
=4R= BRN WRNGTRACE
=5=W #
=5QG ...# AS K8, BUT THE DIRECTORY IS OPEN. ENTERED FROM CLOSEONE.
=6=6 ...XENT7
=79B LDN 5 0
=7P2 WRNGTRACE
=88L ... TRACEIF K6CLOSEALT,99,299,5,WRNG FCB
=8N= BRN NEXTFCB
=97W #
=9MG # BRANCH HERE IF THERE'S A FAILURE DURING THE FILEWRITE
==76 TFAIL
==LQ MHUNTW 1,BSTB,BWRITE
=?6B FAILCLEAR BACK1(1),BACK2(1)
=?L2 TOPFCB2 2
=#5L MHUNTW 1,BSTB,BWRITE
=#K= NAME 1,FILE,FUWB
=*4W CHAIN 1,FPTR(2)
=*JG SUBSTITUTE [SWAP BLOCK NOS
=B46 BRN TOENDUNCL
=BHQ SUICIDB
=C3B CLOSETOP
=D2L ... TRACEIF K6CLOSEALT,99,299,FX2,CLOSED
=D^W SUICIDE
=FFG SUICIDE
=F^6 XBRK
=GDQ GEOERR BRIEFPM,CL BRKIN
=GR7 ...XCLCCNEG
=H25 ... GEOERR BRIEFPM,CL CCNEG [FFAUTCLCT ZERO (COUNT OF AUTOCLOSES)
=H93 ... [ & THIS IS AN AUTOCLOSE
=HD2 #END
^^^^ ...14274715000200000000