{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: COMMFILE82)}}
====== COMMFILE82 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BFCBX|BFCBX]], [[george:macro:BLOCKDOWN|BLOCKDOWN]], [[george:macro:BS|BS]], [[george:macro:BXE|BXE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:COOR4|COOR4]], [[george:macro:FCAPCA|FCAPCA]], [[george:macro:FDRMAUTO|FDRMAUTO]], [[george:macro:FDRMQUERY|FDRMQUERY]], [[george:macro:FON|FON]], [[george:macro:FREEBACK|FREEBACK]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:JBC|JBC]], [[george:macro:JBCC|JBCC]], [[george:macro:JBS|JBS]], [[george:macro:LONGON|LONGON]], [[george:macro:LONGSET|LONGSET]], [[george:macro:MAPBCIRC|MAPBCIRC]], [[george:macro:MBC|MBC]], [[george:macro:MBS|MBS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:PSTAC|PSTAC]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETREP|SETREP]], [[george:macro:SFSTACK|SFSTACK]], [[george:macro:SFUB|SFUB]], [[george:macro:SHUFFLE|SHUFFLE]], [[george:macro:SUBCUBS|SUBCUBS]], [[george:macro:TESTSLOWEST|TESTSLOWEST]], [[george:macro:TRACE|TRACE]], [[george:macro:TRACEVER|TRACEVER]], [[george:macro:UPPLUS|UPPLUS]]
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