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
  • Last modified: 17/01/2024 11:55
  • by 127.0.0.1