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