CLOSEALT864
(George Source)
Macros used: ACROSS, BC, BS, CHAIN, CHAIND, CLOSETOP, DELFCB, ERASEND, FAILCLEAR, FILETRAN, FPUT, FREEBAX, FREECORE, GEOERR, GETDIR, HUNTW, INSERT, JBC, JBCC, JBS, JFNZ, JMBS, LF, LONGCOOR, LONGSET, MFREE, MFREEW, MHUNTW, NAME, NEXTFCB, REPLACE, RERING, SEG, SEGENTRY, SETNCORE, SFCA, SFCAB, STEP, STEPWRITE, STF, SUBRELT, SUBSTITUTE, SUICIDE, TOPFCA2, TOPFCAB, TOPFCB, TOPFCB2, TRACEIF, TRANSFCB
- CLOSEALT864.txt
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