COMMFILE82
(George Source)
Macros used: ACROSS, BFCBX, BLOCKDOWN, BS, BXE, BXL, BXU, COOR4, FCAPCA, FDRMAUTO, FDRMQUERY, FON, FREEBACK, FREECORE, GEOERR, JBC, JBCC, JBS, LONGON, LONGSET, MAPBCIRC, MBC, MBS, MENDAREA, MHUNTW, NAME, PSTAC, SEGENTRY, SETNCORE, SETREP, SFSTACK, SFUB, SHUFFLE, SUBCUBS, TESTSLOWEST, TRACE, TRACEVER, UPPLUS
- COMMFILE82.txt
22FL #SEG COMMFILE [JUDY BIDGOOD. 22^= #OPT K0COMMFILE=K0ACCESS>K0FILESTORE>K0ALLGEO 23DW #LIS K0COMMFILE 23YG #OPT K6COMMFILE=K6ACCESS>K6FILESTORE>K6ALLGEO 24D6 8HCOMMFILE 24XQ # 25CB SEGENTRY K1COMMFILE,SHUFFLE 25X2 SEGENTRY K2COMMFILE,STEPWAIT 26BL SEGENTRY K3COMMFILE,XAPPWAIT 26W= #SKI 27*W SEGENTRY K4COMMFILE,TRUPT 27TG # 28*6 # THIS SEGMENT DEALS WITH COMMUNICATION AND D.C. FILES FOR READFILE 28SQ # AND APPEND. 29#B # IT ALSO DEALS WITH CORRUPT FILES FOUND BY READFILE. 29S2 # ENTRY POINTS ARE AS FOLLOWS:- 2=?L # 2=R= # K1COMMFILE - ENTRY FROM READFILE TO RESHUFFLE BLK NOS FOR DCF'S 2?=W # K2COMMFILE - ENTRY FROM READFILE TO WAIT FOR REC. TO BE APPENDED 2?QG # K3COMMFILE - ENTRY FROM APPEND TO WAIT FOR BLK TO BE FREED(DCF'S) 2#=6 # K4COMMFILE - ENTRY FROM READFILE TO DEAL WITH CORRUPT FILES. 2#PQ # 2*9B ZGEOER1 2*P2 GEOERR 1,APPCOMM 2B8L ZGEOER2 2BN= GEOERR 1,GDRCARE! 2C7W ZGEOER3 2CMG GEOERR 1,NOFURB [USAGE BLOCK MISSING. 2D76 ZGEOER5 2DLQ GEOERR 1,COMMSET [READ PTRS. WRONG 2F6B # 2FL2 SFUTIL 2G5L #HAL FI+FUTILITY,0 2GK= # 2H4W POINTERS 2HJG # THIS SUBROUTINE ,GIVEN POINTER TO A FILE ELEMENT IN X3 2J46 # SETS X2 -> FILE/FSTACK BLOCK & X1 -> FILE/FCB 2JHQ PSTAC 2,3 [X2 -> FSTACK 2K3B BFCBX 1,2 [X1 -> FCB 2KH2 EXIT 4 0 2L2L # 2LG= ZEXTRO 2L^W # THIS ENTRY DOES AN SFSTACK ON THE FILE OPEN AT DEPTH [7] 2MFG # & LEAVES THE POINTER IN X3 2M^6 SFSTACK 7,3 2NDQ EXIT 4 0 2NYB # 2PD2 # --------------------------------------------------------------------- 2PXL # 2QC= SHUFFLE [ENTRY FROM READFILE 2QWW LDX 7 ACOMMUNE1(2) 2RBG CALL 4 ZEXTRO 2RW6 CALL 4 POINTERS 2S*Q JBC NGDRA,1,BFGDR [J IF NOT GDR. 2STB LDX 1 3 2T*2 TESTSLOWEST 1,SLOWGDR,2 [J IF STILL SLOWEST READER. 2TSL LDN 0 1 2W#= ADS 0 FREADBLOCK(1) 2WRW NGS 1 FREADWORD(1) 2X?G BRN NOCOOR1 2XR6 SLOWGDR 2Y=Q LDX 3 1 2YQB CALL 4 POINTERS 2^=2 NGDRA 2^PL RESHUFL 329= LDX 2 FUSEBL(1) [CALCULATE 32NW ADN 2 A1-1 [NUMBER OF 338G SBX 2 FREADBLOCK(3) [BLOCKS TO MOVE 33N6 BZE 2 ZGEOER5 347Q ADX 1 FREADBLOCK(3) [X1 -> CURRENT BLOCK NO. 34MB LDX 6 0(1) [X6 CONTAINS IT 3572 LDN 4 0(1) 35LL LDX 5 4 [PREPARE TO MOVE BL.NOS.UP 366= ADN 4 1 [ONE.NB. CAN'T BE LAST BLOCK. 36KW SBX 1 FREADBLOCK(3) [READJUST FCB PTR. 375G MOVE 4 0(2) [BRUTAL ! 37K6 SMO FUSEBL(1) 384Q STO 6 A1-1(1) [STORE SPENT BLOCK NUMBER 38JB LDN 0 1 3942 SBS 0 FBLMOD(1) [DOWNDATE FBLMOD 39HL JBC SUBFBL,1,BFCARE [J IF NOT A 'CAREFUL' FILE. 3=3= JBS ZGEOER2,1,BFGDR [ERROR IF GDR. 3=GW MAPBCIRC 1 [RESHUFFLE BIT IN FMAPP BLOCK FROM 3?2G [BEGINNING OF MAP TO END. 3?G6 CALL 4 ZEXTRO [POINTERS 3?^Q CALL 4 POINTERS 3#FB SMO FUSEBL(1) 3#^2 LDX 6 A1-1(1) 3*DL SUBFBL 3*Y= NGS 6 FREADWORD(3) [SET RD.PTRS.ABOUT TO READ 1STRRE.. 3BCW LDN 0 4 [DON'T FREE BLOCKS ANYWAY 3BXG ANDX 0 FCOMM(1) [IF CAREFUL. 3CC6 BNZ 0 NOEXTRA 3CWQ JBC NGDR,1,BFGDR [J IF NOT GDR. 3DBB LDN 0 1 3DW2 ADS 0 FREADBLOCK(3) [INCREMENT "OUR" FREADBLOCK 3F*L PSTAC 2,3 3FT= BLOCKDOWN 2,1 [DECREMENT EACH FREADBLOCK IN FSTACK 3G#W BFCBX 1,2 [X1->FCB 3GSG BRN NOEXTRA 3H#6 NGDR 3HRQ LDX 0 FUSEBL(1) [IF THE D.C. FILE IS LARGER THAN 3J?B SBN 0 FBLKS-A1+1 [THE SIZE IT OUGHT TO BE,THROW 3JR2 BXL 0 FSIZE(1),NOEXTRA [AWAY BLOCK. 3K=L LDX 5 BSPRE(1) 3KQ= LDN 0 1 [DECREASE SIZE OF FCB 3L9W SBS 0 ALOGLEN(1) 3LPG SBS 0 FUSEBL(1) 3M96 TRSF SFUB 1,6,1,SFRBCK [LOOK FOR USAGE BLOCK 3MNQ BXU 5 BACK1(1),TRSF [J BACK & TRY AGAIN IF BL.N.EQUAL,BUT 3N8B FREECORE 1 [B.S.HOME NOT 3NN2 SFRBCK 3P7L FREEBACK 5 [FREE BLOCK 3PM= CALL 4 ZEXTRO [RESET X3,X2,X1 3Q6W CALL 4 POINTERS 3QLG NOEXTRA 3R66 MBS 1,BFALTR,BFALTB [SET FILE AND BLOCK NOS. ALTERED BITS 3RKQ JBCC READZZ,1,BFFREEW [IS AN APPENDER WAITING FOR A BLOCK T 3S5B [BE FREED,TO APPEND A RECORD? IF SO,U 3SK2 ['WAITING' BIT. J IF NOT. 3T4L #SKI K6COMMFILE>159-159 3TJ= TRACEVER BACK2(1),FONDESTW 3W3W LONGON IWTDEST,BACK2(1) [RELEASE 'EM. 3WHG READZZ 3X36 FDRMAUTO APPWAIT,NOCOOR [AUTO ALL PROGS DOING A SUSIN.J IF NO 3XGQ NOCOOR 3Y2B LDN 6 1 3YG2 SUBCUBS 7,6,JOB,DEPTH [DECREMENT NO. OF BLOCKS USED. 3Y^L NOCOOR1 3^F= ACROSS READFILE,5 [BLK NOS NOW RESHUFFLED. 3^YW # ----------------------------------------------------------------- 42DG # 42Y6 # THIS SECTION IS TO TRAP OR DEAL WITH COMPLEX COMMUNICATION FILES 43CQ # INTERLOCKS. 43XB # IF WE HAVE SEVERAL READERS & APPENDERS TO A FILE,THE READERS,IN 44C2 # GENERAL WILL BE FASTER THAN THE APPENDERS. 44WL # THEREFORE,WHEN A READER COMES TO END OF FILE,HE COOR3'S TO ALLOW 45B= # AN APPENDER A CHANCE TO GET IN & APPEND HIS RECORD. HOWEVER SPRING 45TW # CLEAN WILL OCCASIONALLY WAKE EVERYONE UP BEFORE THE APPENDER HAS 46*G # FINISHED,SO IN THIS CASE,WE COOR3 AGAIN.OTHERWISE WE LONGWAIT. 46T6 # 47#Q # 47SB # CONTENTS OF AWORK3 ARE PASSED ACROSS FROM READFILE IN ACOMMUNE3 48#2 # AND ARE USED AS SWITCHES 48RL # B22- WE HAVE COORDINATED TWICE 49?= # B23- WE HAVE COORDINATED ONCE 49QW # IF ZERO,WE HAVEN'T YET COORDINATED 4==G # 4=Q6 STEPWAIT [ENTRY FROM READFILE 4?9Q LDX 7 ACOMMUNE1(2) [X7 = FILE DEPTH 4?PB LDX 6 ACOMMUNE3(2) [SWITCH 4#92 LDX 5 ACOMMUNE2(2) [VALUE OF CMOD BEFORE ENTRY 4#NL CALL 4 ZEXTRO 4*8= CALL 4 POINTERS 4*MW LDX 0 CMOD(1) 4B7G BXU 0 5,YREAD 4BM6 SMO FX2 4C6Q LDX 5 ACOMMUNE4 [VALUE OF FBLMOD BEFORE ENTRY. 4CLB LDX 0 FBLMOD(1) 4D62 BXU 0 5,YREAD 4DKL SMO FX2 4DY3 ... LDX 0 ATYPE 4F=D ... SRL 0 18 4FJW SBN 0 CPAT/64 4G4G BZE 0 YCPAU 4GJ6 FDRMQUERY UPPLUS1 4H3Q YCPAU 4HHB BZE 6 T5X [J IF NOT YET COORED 4J32 SBN 6 1 4JGL BNZ 6 REPSET [J IF COORED 2X 4K2= ADN 6 1 4KFW T5X 4K^G JBS REPSET,1,BFAPPLW [HAS SOMEONE ELSE LONGSTOPPED WAITING 4LF6 [FOR A RECORD TO BE APPENDED. J IF SO 4LYQ ADN 6 1 4MDB BS 1,BFAPPC [SET 'SOMEONE COORED WAITING FOR A 4MY2 [RECORD TO BE APPENDED' BIT. 4NCL #SKI K6COMMFILE>99-99 4NX= TRACE FX2,WTSTYL 5 4PBW LDX 4 FONINT 4PWG #SKI K6COMMFILE>159-159 4QB6 TRACEVER CMOD(1),READCOOR 4QTQ COOR4 #5 4R*B SBN 4 FONINTP*1000/4 4RT2 BPZ 4 YLUCKY [DECREMENT CT. OF COORS AGAIN 4S#L SBN 6 1 4SS= YLUCKY 4T?W STO 6 ACOMMUNE3(2) 4TRG YREAD 4W?6 ACROSS READFILE,7 4WQQ REPSET 4X=B #SKI K6COMMFILE>159-159 4XQ2 TRACEVER CMOD(1),READWAIT 4Y9L BS 1,BFAPPLW [SET BIT TO INDICATE LONGSTOPPING FOR 4YP= [A RECORD TO BE APPENDED. 4^8W LDX 2 FX2 4^NG LDCH 0 ATYPE(2) 5286 SBN 0 CPAT/64 52MQ BZE 0 YCPAV 537B FCAPCA 2,APETADDR(2) 53M2 YCPAV 546L LONGSET 5,ZGEOER5,BACK2(1),2 54L= UPPLUS1 555W SETREP STEPWAIT 55KG UPPLUS 1 5656 # -------------------------------------------------------------------- 56JQ # 574B # THIS SECTION IS ENTERED FROM APPEND WHEN USING D.C. FILES AND 57J2 # FILEFULL IS REACHED,TO WAIT FOR A BLOCK TO BE FREED BY A READER. 583L # 58H= XAPPWAIT [ENTRY FROM APPEND 592W LDX 7 ACOMMUNE2(2) [FILE DEPTH. 59GG STOZ 6 [SWITCH TO SAY NOT YET TESTED DRM AS 5=26 BRN YUNLUCKY [JUST ENTERED COMMFILE 5=FQ TESTDRM 5=^B NGN 6 1 5?F2 LDCH 0 ATYPE(2) 5?YL SBN 0 CPAT/64 5#D= BZE 0 NDRM 5#XW FDRMQUERY UPPLUS 5*CG NDRM 5*X6 LDCT 0 #300 5BBQ ORS 0 AWORK2(2) 5BWB ERS 0 AWORK2(2) [ZEROISE COUNT OF WAITS. 5CB2 NDRMB 5CTL BS 3,BFFREEW [SET BIT TO INDICATE 'WAITING FOR A 5D*= [BLOCK TO BE FREED,TO APPEND A RECORD 5DSW LDX 4 FONINT 5F#G #SKI K6COMMFILE>159-159 5FS6 TRACEVER FBLMOD(3),APP COOR 5G?Q COOR4 IWTDEST 5GRB SBN 4 FONINTP*1000/4 [SECONDS 5H?2 BNG 4 YUNLUCKY [IF NOT DON'T UPDATE COUNT OF COORS 5HQL LDCT 0 #100 [UPDATE "TIMES COORDINATED" CT. 5J== ADS 0 AWORK2(2) 5JPW YUNLUCKY 5K9G CALL 4 ZEXTRO [X3 -> FCA 5KP6 PSTAC 1,3 [X1 -> FSTACK 5L8Q BFCBX 3,1 5LNB LDX 0 FBLMOD(3) [IS THE FCB STILL FULL? 5M82 #SKI K6COMMFILE>159-159 5MML TRACEVER FBLMOD(3),APP WAKE 5N7= SBN 0 FBLKS-A1 5NLW BXL 0 FSIZE(3),NOTFULDEST 5P6G BZE 6 TESTDRM 5PL6 LDCT 0 #200 5Q5Q SMO FX2 5QKB ANDX 0 AWORK2 [J IF WE HAVEN'T COORDINATED 2X 5R52 BZE 0 NDRMB 5RJL #SKI K6COMMFILE>159-159 5S4= TRACEVER FBLMOD(3),APPWAIT 5SHW BS 3,BFFREEW [SET 'WAITING FOR A BLK TO BE FREED' 5T3G LDX 2 FX2 5TH6 LDCH 0 ATYPE(2) 5W2Q SBN 0 CPAT/64 5WGB BZE 0 YCPAT 5X22 FCAPCA 2,APETADDR(2) 5XFL YCPAT 5X^= LONGSET IWTDEST,ZGEOER1,BACK2(3),2 [LONGSET THE CPA. 5YDW UPPLUS 5YYG JBC NFON,3,BFAPPW [J IF NOONE WAITING FOR APPEND TO FIN 5^D6 FON #131 [FON WAITERS. 5^XQ NFON 62CB MBC 3,BFAPP,BFAPPW [UNSET 'APPEND BEING DONE' BIT AND 62X2 [UNSET WAITING BIT,IF SET. 63BL SETREP APPWAIT 63W= UPPLUS 2 64*W NOTFULDEST 64TG ACROSS APPEND,5 [APPEND RECORD NOW FCB NOT FULL 65*6 # -------------------------------------------------------------------- 65SQ #SKI 66#B ( 66S2 # THIS SECTION DEALS WITH CORRUPT FILES BY TRUNCATING THE CORRUPT BL 67?L # AND OUTPUTTING AN ERROR MESSAGE TOGETHER WITH THE CONTENTS OF THE 67R= # BLOCK. THE FILE IS WOUND TO THE END AND RE-ENTRY IS MADE TO READFI 68=W # TO FOLLOW NORMAL E.O.F. PROCEDURE. 68QG TRUPT [ENTRY FROM READFILE 69=6 LDX 7 ACOMMUNE1(2) [FILE DEPTH 69PQ SETNCORE GSBS,1,FILE,FRB [TO HOLD CORRUPT BLOCK FOR OUTPUT. 6=9B CALL 4 ZEXTRO [X3->FCA 6=P2 CALL 4 POINTERS [X1->FCB,X2->FSTACK 6?8L TRACE FREADBLOCK(3),BLKRUPT 6?N= TRACE FREADWORD(3),WRDRUPT 6#7W BS 1,BFALTR [SET 'FILE ALTERED' BIT. 6#MG SFFURB 6*76 LDX 1 FPTR(2) [SEARCH ROUND FILE CHAIN FOR 6*LQ BXE 1 CXFI,ZGEOER3 [FI/FUTILITY BLOCK. 6B6B LDX 0 ATYPE(1) 6BL2 BXE 0 FILEPLUSFCB,ZGEOER3 [ERROR IF MISSING. 6C5L SMO FX1 6CK= BXU 0 SFUTIL,SFFURB 6D4W NAME 1,FILE,FUWB [RENAME IT A FILE/FUWB 6DJG MHUNTW 2,FILE,FRB [HOLDS CORRUPT BLOCK. 6F46 LDX 0 BACK1(1) 6FHQ STO 0 BACK1(2) [MOVE OVER BACKING STORE HOME. 6G3B LDX 0 BACK2(1) 6GH2 STO 0 BACK2(2) [BLOCK NO. 6H2L ADN 1 A1 6HG= ADN 2 A1 6H^W MOVE 1 0 [MOVE ACROSS DATA FOR OUTPUT. 6JFG # NOW TRUNCATE BLOCK AT CORRUPT RECORD HEADER. 6J^6 SBN 1 A1 [X1->FUWB 6KDQ LDN 4 A1 6KYB XREC 6LD2 SMO 4 [PICK UP NEXT R.H. IN BLOCK. 6LXL LDX 0 FRH(1) 6MC= BZE 0 ZGEOER5 [ERROR IF ZERO REC. 6MWW LDEX 6 0 6NBG ANDX 0 BRHMASK 6NW6 BNZ 0 XRUPT [J IF CORRUPT R.H. 6P*Q ADX 4 6 [ADD IN R.H. 6PTB BXL 4 BSBSA1,XREC [J IF WITHIN RANGE OF BLOCK. 6Q*2 SBX 4 6 6QSL XRUPT 6R#= SMO 4 6RRW STOZ FRH(1) [TRUNCATE BLOCK AT CORRUPT RECORD. 6S?G SBN 4 A1 [X4 RELATIVE PTR TO CORRUPT WORD IN B 6SR6 FDUDFILE 7,4 [OUTPUT ERROR MESSAGE AND 6T=Q [CONTENTS OF CORRUPT BLOCK. 6TQB CALL 4 ZEXTRO [X3->FCA 6W=2 CALL 4 POINTERS [X1->FCB,X2->FSTACK 6WPL LDX 0 FREADBLOCK(3) 6X9= SBX 0 FBLMOD(1) 6XNW SBN 0 A1-1 6Y8G BNZ 0 NOTLASTB [J IF NOT LAST BLOCK. 6YN6 NGS 1 CMOD(1) [RE-INITIALIZE CMOD. 6^7Q NOTLASTB 6^MB LDX 0 FBLMOD(1) 7272 ADN 0 A1 72LL STO 0 FREADBLOCK(3) [POINTS TO UNUSED BLK NO. 736= SMO FX2 73KW LDX 0 AWORK4 745G SBN 0 2 74K6 BZE 0 XSAGG [J IF STEPAGAIN. 754Q NGS 1 FREADWORD(3) [SET READ POINTERS AT 'ABOUT TO READ 75JB BRN SEND [E.O.F.' 7642 XSAGG 76HL LDN 0 A1 [SET READ POINTERS AT 'READ E.O.F.' 773= STO 0 FREADWORD(3) 77GW SEND 782G ACROSS READFILE,9 [NORMAL E.O.F. PROCEDURE. 78G6 # 78^Q ) 79FB MENDAREA 30,K99COMMFILE 79^2 # 7=DL #END ^^^^ ...47303624000400000000