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