FHOBJBL860

(George Source)

Macros used: ACROSS, AUTFIN, AUTSTART, BC, BITDEFS, BS, BWNZ, BXE, BXGE, COMPQU, FINMOVE, FOUTMOVE, FREECORE, FRITE, JBC, JBS, LOCKCA, MENDAREA, MFREEW, MHUNTW, MTCHECK, PAIR, READB, SEG, SEGENTRY, SETNCORE, SETREP, STEPWRITE, TESTREP2, TESTRPN2, TOPCA, TOPCA1, TOPFCAB2, TOPFCB2, VFREE, VFREEW, WRITEB

FHOBJBL860.txt
22FL          SEG   FHOBJBL,860,FILESTORE   
22^=    #   
23DW    #  THIS SEGMENT DEALS WITH THE BLOCK MODES #21,#22, AND #23. IT IS  
23YG    #  ENTERED ACROSS FROM MASTER SEGMENT FHOBJ WITH SOME BUT NOT ALL THE   
24D6    #  CHECKS COMPLETED. IN PARTICULAR THE 'END OF FILE VIOLATION' CHECKS   
24XQ    #  HAVE NOT BEEN DONE AS THE MEANINGS OF POINTER VALUES FOR BLOCK   
25CB    #  ACCESS DIFFER FROM THE MEANINGS FOR RECORD ACCESS, SO FHOBJ TESTS
25X2    #  WOULD NOT BE APPROPRIATE.
26BL    #   
26W=          SEGENTRY K21FHOBJBL,MODE21
27*W          SEGENTRY K22FHOBJBL,MODE22
27TG          SEGENTRY K23FHOBJBL,MODE23
28*6    #   
28SQ    #  AWORK AND ACC CONVENTIONS ARE AS FOR FHOBJ.  
29#B    #   
29S2    #  BIT IDENTIFIERS:-
2=?L          BITDEFS  AWORK4,23,MFHEOFMULT    [WE'VE RUN OFF THE END OF A  
2=R=                                           [MULTIFILE. NO FURTHER PERIS 
2?=W                                           [CAN BE IMPLEMENTED. 
2?QG          BITDEFS  AWORK4,22,MFHDIRMOD     [THIS IS A DIRECTORY MODE WE'RE  
2#=6                                           [IMPLEMENTING
2#PQ          BITDEFS  AWORK4,21,MFHRECEOF     [LAST READ PERI LEFT US  
2*9B                                           [AFTER EOF.  
2*P2          BITDEFS  AWORK4,20,MFHBLOCKEOF   [SIMILAR BIT FOR BLOCK PERIS.
2B8L                                           [HAS TO BE HANDLED SEPARATELY
2BN=                                           [OWING TO DIFFERENT POINTER  
2C7W                                           [CONVENTIONS.
2CMG          BITDEFS  AWORK4,19,MFHNOT1ST     [THIS IS NOT THE 1ST PERI.   
2D76          BITDEFS  AWORK4,18,MFHDIROWN     [USER OWNS THE FILES IN  
2DLQ                                           [THIS DIRECTORY  
2F6B          BITDEFS  AWORK4,17,MFHNONSER     [THIS IS A DA,DR, OR MT FILE 
2FL2          BITDEFS  AWORK4,16,MFHCHUCKOFF   [WE ARE THROWING THIS FILE   
2G5L                                           [OFFLINE (SET DURING MODE #33).  
2GK=          BITDEFS  AWORK4,15,MFHTRAPSALT   [WE ARE ALTERING THIS FILE'S 
2H4W                                           [TRAPS (SET DURING MODE #33).
2HJG          BITDEFS  AWORK4,14,MFHTABSSET    [THE TAB SYSTEM HAS BEEN 
2J46                                           [INITIALISED.
2JHQ    #   
2K3B    #   
2KH2    #   
2L2L    #  SUBROUTINE TO CHECK THE COUNT FIELD. 
2LG=    #   
2L^W    VALIDCOUNT  
2MFG          LDX   0  ACA3(2)  
2M^6          SBN   0  512  
2NDQ          BNZ   0  NILCOUNT            [J IF COUNT NOT 512  
2NYB          EXIT  6  0
2PD2    #   
2PXL    #  ******************** 
2QC=    #   
2QWW    #  SUBROUTINE TO SET UP A FILE/FWB, MOVE THE USER BUFFER OUT TO IT, 
2RBG    #  AND VALIDATE THE RECORD HEADERS (UNLESS THE FILE IS NOT SERIAL). 
2RW6    #  CALLED ON X6 AND COORDINATES.
2S*Q    #   
2STB    MOVEOUTBUF  
2T*2          SBX   6  FX1                 [RELATIVISE LINK 
2TSL          SETNCORE 512,3,FILE,FWB      [X3->FWB 
2W#=          LDN   4  A1(3)               [X4->DATA DESTINATION
2WRW          LDX   3  AWORK2(2)           [X3->DATA WITHIN PROG
2X?G          LDN   5  512                 [LENGTH OF MOVE  
2XR6          FOUTMOVE APETADDR(2),3,4,5,HLOCK2,2 [DO MOVE  
2Y=Q ...      MHUNTW   3,FILE,FWB          [X3->FWB CONTAINING DATA 
2YQB ...      JBS      NONSERCHK,2,MFHNONSER [J TO NONSER CHECKS IF NONSER  
2^=2          LDN   5  0                   [OFFSET DOWN DATA
2^PL    RECHDLOOP   
2^SQ ...      SMO      5
3259 ...      LDX   0  A1(3)               [NEXT RECORD HEADER  
32*N ...      LDX   4  MS15(1)             [MS 15 BITS MUST NOT BE SET  
32L7 ...      ANDX  4  0                   [IN A VALID USER-SUPPLIED RECORD 
32WL ...      BNZ   4  NILDATA             [HEADER. 
3375 ...      BXE   0  ONE(1),NILDATA      [1 WORD RECORD ILLEGAL   
33CJ ...                                   [(EVEN IN AN AMORPHOUS FILE).
33N6          BZE   0  NOTBAD              [OK IF IT'S END OF BLOCK 
33XY ...      ADX   5  0                   [UPDATE OFFSET   
347Q          BXGE  5  BSBS,NILDATA        [DATA FORMAT ERROR IF OFF END OF BLOC
34MB          BRN      RECHDLOOP
3572    NOTBAD  
35LL          ADX   6  FX1  
366=          EXIT  6  0
366* ...MS15           #77777000
366D ...ONE            1
366K ...#   
366Y ...#  IF THE FILE IS NONSERIAL THE ONLY FORMAT CHECKS APPLIED ARE TO THE   
367? ...#  INDEX BLOCKS OF A *MT FILE. THIS CHECK IS DONE IN THE STANDARD   
367L ...#  'MTCHECK' MACRO, WHICH REQUIRES DATA TO BE CARRIED FORWARD BETWEEN   
367^ ...#  CALLS. WE USE EUSE1 AND EUSE2 OF THE ENT BLOCK LEFT BY ASSIGN TO 
368# ...#  CARRY THIS DATA. 
368M ...#  WE ASSUME THAT EUSE1 IS ZERO FOR TERMINAL FILES. 
3692 ...#   
369* ...#    EUSE1=0 (INITIALLY)
369N ...#          'BULK FILE ADDRESS' STATISTIC NEEDED BY MTCHECK. 
36=3 ...#   
36=B ...#    EUSE2=NO OF INDEX BLOCKS LEFT TO CHECK.
36=P ...#   
36?4 ...NONSERCHK   
36?C ...      MHUNTW   3,FILE,ENT          [X3->ENT 
36?Q ...      JBC      NOTBAD,3,BEMT       [NO CHECK IF NOT *MT 
36#5 ...      BWNZ     EUSE1(3),NOT1STBLK  [J UNLESS FIRST BLOCK ACCEPTED   
36#D ...      TOPFCB2  1                   [X1->FCB 
36#R ...      LDX   0  BULKMOD(1)          [NO OF INDEX BLOCKS  
36*6 ...      STO   0  EUSE2(3)            [INITIALISE EUSE2
36*F ...      LDX   1  FX1  
36*S ...NOT1STBLK   
36B7 ...      LDX   4  EUSE2(3)            [PICK UP NO OF INDEX BLOCKS LEFT 
36BG ...      BZE   4  NOTBAD              [J IF NONE   
36BT ...      MTCHECK  FILE,FWB,EUSE1(3)   [DO CHECK
36C8 ...      TESTREP2 CORRUPT,NILDATA     [ILLEGAL IF CORRUPT  
36CH ...      SBN   4  1                   [DECR COUNT OF INDEX BLOCKS  
36CW ...      BNZ   4  MOREINDEX           [J IF NOT THE LAST EXPECTED  
36D9 ...      TESTRPN2 ENDFILE,NILDATA     [CORRUPT IF LASTBLOCK DID NOT END
36DJ ...                                   [INDEX DATA PROPERLY 
36DX ...STOREDATA   
36F= ...      MHUNTW   3,FILE,ENT   
36FK ...      STO   4  EUSE2(3)            [UPDATE DATA 
36FY ...      LDX   0  ACOMMUNE1(2)        [MTCHECK SENDS NUM BACK FOR STORAGE  
36G? ...      STO   0  EUSE1(3) 
36GL ...      BRN      NOTBAD   
36G^ ...MOREINDEX   
36H# ...      TESTREP2 ENDFILE,NILDATA     [WE EXPECT MORE INDEX BLOCKS SO THAT 
36HM ...                                   [CAN'T HAVE BEEN THE LAST
36J2 ...      BRN      STOREDATA
36J* ...#   
36KW    #   
375G    #  ******************** 
37K6    #  SUBROUTINE TO CHECK WHETHER A MODE #22 WOULD READ END OF FILE.   
384Q    #  IT EXITS 6 0 IF MODE #22 WOULD, OTHERWISE IT EXIT 6 1. EXPECTS   
38JB    #  X1->FCA, X3->FCB.
3942    #   
39HL    WILLREADEOF 
3=3=          LDX   0  FREADBLOCK(1)       [PICK UP BLOCK READ PTR  
3=GW          BPZ   0  NBOF                [J UNLESS AT BEG FILE
3?2G          LDX   0  FBLMOD(3)           [BEG FILE IS STILL EOF IF FILE   
3?G6          SBN   0  FBLKS-A1            [EMPTY   
3?SH ...      BZE   0  (6)                 [EXIT 6 0 IF EMPTY   
3#6Y ...      BRN      NOTEOFNEXT   
3#FB    NBOF
3#^2          SBX   0  FBLMOD(3)
3*DL          SBN   0  A1-1 
3*Y= ...      BPZ   0  (6)                 [EXIT 6 0 IF ABOUT TO READ EOF   
3BCW ...NOTEOFNEXT  
3BXG          EXIT  6  1                   [ELSE EXIT 6 1   
3CC6    #   
3CWQ    #  ******************************************************************** 
3DBB    #   
3DW2    #  MODE #21 IS VERY SIMPLE. WE CHECK THE COUNT, MOVE OUT AND CHECK  
3F*L    #  THE DATA, AND DO A WRITEB.   
3FT=    #   
3G#W    MODE21  
3GSG          CALL  6  VALIDCOUNT          [CHECK COUNT 
3H#6          CALL  6  MOVEOUTBUF          [MOVE OUT BUFFER AND CHECK IT
3HRQ          WRITEB   ,ANSWER  
3J?B          TESTREP2 FILEFULL,XFILEFULL,GLUTTON,TOOMUCH   
3JR2          BRN      SETREP              [JUMP TO WINDUP CODE 
3K=L    #   
3KQ=    #  ******************************************************************** 
3L9W    #   
3LPG    #  MODE #22 IS NOT SO SIMPLE. FIRST WE CHECK THE COUNT WORD AND 
3M96    #  ESTABLISH WHETHER WE ARE ABOUT TO READ END OF FILE, JUMPING INTO 
3MNQ    #  THE EXCEPTION SECTION IF WE ARE. 
3N8B    #   
3NN2    MODE22  
3P7L          CALL  6  VALIDCOUNT          [CHECK COUNT 
3PM=          TOPFCAB2 1,3                 [X1->FCA,X3->FCB 
3Q6W          CALL  6  WILLREADEOF         [ARE WE ABOUT TO READ EOF?   
3QLG          BRN      MODE22EOF           [J IF SO 
3R66          BC       2,MFHBLOCKEOF       [ENSURE EOF INDICATOR CLEAR  
3RKQ    #   
3S5B    #     **********
3SK2    #   
3T4L    #  HAVING REMOVED ALL POSSIBILITY OF FAILURE WE DO AN 'AUTSTART'WHICH   
3TJ=    #  SETS THE PROGRAM RUNNING AUTONOMOUSLY.   
3W3W    #   
3WHG          AUTSTART  
3X36    #   
3XGQ    #     **********
3Y2B    #   
3YG2    #  NOW WE HAVE GONE AUTONOMOUS WE READ THE DATA INTO A FRB  
3Y^L    #   
3^F=          READB 
3^YW    #   
42DG    #     **********
42Y6    #   
43CQ    #  WE NOW MOVE THE DATA INTO THE OBJECT PROGRAM. WE ARE NOT ALLOWED TO  
43XB    #  MOVE IN THE RUBBISH AFTER THE END OF VALID DATA IN A BLOCK OF A SERIA
44C2    #  FILE AS THIS MAY BE SENSITIVE DATA FROM A PREVIOUS USE OF THE BLOCK. 
44WL    #  SO WE ESTABLISH WHERE THE END OF USEFUL DATA IS BY CHAINING DOWN THE 
45B=    #  RECORD HEADERS TILL WE FIND THE ZERO WORD AND THEN MOVE THIS ZERO
45JG ...#  THROUGH THE REMAINDER OF THE BLOCK.  
45QQ ...#  IT IS POSSIBLE THAT THE END OF THE BLOCK WILL BE INDICATED BY
45^2 ...#  A DUMMY RECORD (B0 OF HEADER SET). IN THIS CASE WE ZEROISE IT AND
467= ...#  PROCEED FOR A NORMAL BLOCK END.  
46*G    #   
46T6          MHUNTW   3,FILE,FRB   
47#Q          JBS      NOTSERM22,2,MFHNONSER [J IF NOT SERIAL FILE  
47SB          LDN   7  0                   [OFFSET DOWN BLOCK   
48#2    NEXTRHD 
48RL          SMO      7
48Y4 ...      LDX   0  A1(3)               [PICK UP RECHD   
494G ...      BPZ   0  NOTDUMMY            [J UNLESS DUMMY RECORD.  
498Y ...      LDN   0  0                   [TREAT DUMMY REC HEADER AS ZERO. 
49*B ...      SMO      7
49FS ...      STOZ     A1(3)
49L= ...NOTDUMMY
49QW          ADX   7  0                   [UPDATE OFFSET   
4==G          BNZ   0  NEXTRHD             [LOOP IF NOT OF END OF BLOCK 
4=Q6          LDN   6  511  
4?9Q          SBX   6  7                   [X6 = NO OF WDS TO MOVE ZERO THRU
4?PB          BZE   6  NOZEROMOVE          [J IF NO MOVE NEEDED 
4#92          SMO      7
4#NL          LDN   4  A1(3)               [X4->ZERO
4*8=          LDX   5  4
4*MW          ADN   5  1                   [X5->WORD AFTER ZERO 
4B7G          SMO      6
4BM6          MOVE  4  0                   [DO MOVE 
4C6Q    NOZEROMOVE  
4CLB    NOTSERM22   
4D62    #   
4DKL    #     **********
4F5=    #   
4FJW    #  WE MOVE THE DATA IN USING FINMOVE AND FREE THE BUFFER
4G4G    #   
4GJ6          LDN   3  A1(3)               [DATA
4H3Q          LDX   4  AWORK2(2)           [BUFFER ADDR IN PROG 
4HHB          FINMOVE  APETADDR(2),4,3,ACA3(2),HLOCK2,2 
4J32          MFREEW   FILE,FRB 
4JGL    #   
4K2=    #     **********
4KFW    #   
4K^G    #  FINALLY WE COMPUTE THE REPLY AND DO AN 'AUTFIN' WHICH SETS THE REPLY,
4LF6    #  CLEANS UP, AND SENDS THE OLPA TO SLEEP READY FORTHE NEXT PERI.ON 
4LYQ    #  RETURN WE ENTER FHOBJ TO LOOK AT THE NEW PERI. WE CANNOT USE THE 
4MDB    #  NORMAL WINDUP CODE IN THIS CASE SINCE WE HAVE GONE AUTONOMOUS AND
4MY2    #  THIS INVALIDATES THE USE OF THE NORMAL MACROS.   
4NCL    #   
4NX=          LDX   7  AWORK2(2)           [BUFFER ADDR 
4PBW          ADN   7  512                 [PLUS DATA TRANSFERRED   
4PWG          ANDX  7  REPMASK(1)          [AND OUT MS6 BITS
4QB6          AUTFIN   7                   [SET REPLY AND GO WAITING
4QTQ          BC       2,MFHNOT1ST         [GO ACROSS TO ANALYSE PERI   
4R*B          ACROSS   FHOBJ,1  
4RT2    REPMASK        #777777             [REPLY MASK  
4S#L    #   
4SS=    #  ******************************************************************** 
4T?W    #   
4TRG    #  MODE #23 IS ONLY ALLOWED IF WE ARE NOT AT BEGINNING OF FILE AND IF   
4W?6    #  WE ARE NOT ABOUT TO READ EOF FOR THE SECOND TIME.
4WQQ    #   
4X=B    MODE23  
4XQ2          CALL  6  VALIDCOUNT          [CHECK THE COUNT FIELD   
4Y9L          TOPFCAB2 1,3                 [X1->FCA,X3->FCB 
4YP=          LDX   0  FREADBLOCK(1)
4^8W          BNG   0  NILBOF              [J IF AT BEG FILE
4^NG          JBC      NOTEOF23,2,MFHBLOCKEOF [J IF LAST MODE #22 DIDNT READ EOF
5286          CALL  6  WILLREADEOF         [CHECK THAT MORE DATA HAS BEEN ADDED 
52MQ          BRN      NILEOF              [NO - ILLEGAL EOF
537B    NOTEOF23
53M2    #   
546L    #     **********
54L=    #   
555W    #  AL IS OK. WE SET FREADWORD TO A1 TO TRICK A LATER STEPWRITE INTO 
55KG    #  GETTING A POINTER TO THE DATA DESTINATION AND DOING ALL THE CAREFUL  
5656    #  UPDATING FOR US. WE THEN CALL THE SUBROUTINE WHICH MOVES THE BUFFER  
56JQ    #  OUT INTO A FWB AND VALIDATES IT. 
574B          LDN   0  A1   
57J2          STO   0  FREADWORD(1)        [FIDDLE FREADWORD
583L          LDX   1  FX1                 [RESTORE CORRUPTED ACC   
58H=          CALL  6  MOVEOUTBUF          [MOVE OUT AND CHECK BUFFER   
592W    #   
59GG    #     **********
5=26    #   
5=FQ    #  A CALL TO STEPWRITE NOW GIVES US X3->DATA DESTINATION AND DOES THE   
5=^B    #  CAREFUL UPDATING. WE MOVE THE DATA ACROSS, FREE THE BUFFER, AND  
5?F2    #  ENTER THE WINDUP ROUTINE.
5?YL          STEPWRITE 
5#D=          MHUNTW   2,FILE,FWB   
5#XW ...      ADN   2  A1                  [X2->DATA
5*CG          MOVE  2  0                   [DO 512 WD MOVE  
5*X6          SBN   2  A1                  [X2->FWB 
5BBQ          FREECORE 2                   [FREE FWB
5BLJ ...      FRITE    ,AUT 
5BWB    #   
5CB2    #  ******************************************************************** 
5CTL    #   
5D*=    #  THE WINDUP CODE JUST GOES ACROSS TO FHOBJ ENTRY 2.   
5DSW    #   
5F#G    SETREP  
5FS6          ACROSS   FHOBJ,2             [RETURN TO FHOBJ 
5G?Q    #   
5GRB    #  ******************************************************************** 
5H?2    #   
5HQL    #  THIS SECTION DEALS WITH EXCEPTIONS.  
5J==    #   
5JPW    #  SUBROUTINE TO SET X7=#05000000 (I.E. THE OWN MON EVENT BITS) IF  
5K9G ...#  OWN MONITORING WAS USED. OTHERWISE X7 IS ZEROISED.   
5KP6    #   
5L8Q    MCHOWN  
5LDJ ...      LDN   7  0
5LNB          LDX   0  ACA1(2)             [MODE WORD   
5M82          SRL   0  6
5MML          ANDN  0  #777                [PICK UP ADDITIVE MODE BITS  
5N7=          SBN   0  #300 
5NLW          BNZ   0  (6)                 [EXIT IF NOT OWN MON 
5P6G          LDCT  7  #050                [SET UP OWN MON REPLY
5PL6          EXIT  6  0
5Q5Q    #   
5QKB    #  ******************** 
5R52    #   
5RJL    #  SUBROUTINE TO RESET THE OLPA LINK TO ENTER K1FHOBJ AND TRANSFER TO   
5S4=    #  THE PCA. THIS IS NECESSARY EVERY TIME WE ENTER OLPODD TO ILLEGAL OR  
5SHW    #  TO DEAL WITH LOBS EXCEEDED.  
5T3G    #   
5TH6    TOPCA   
5W2Q          TOPCA1   RESETLINK(1)        [CARRY OUT RESET AND CHANGE  
5WGB          EXIT  6  0
5X22    RESETLINK   
5XFL          PAIR     FHOBJ,1  
5X^=    #   
5YDW    #  ******************** 
5YYG    #   
5^D6    #  SUBROUTINE TO CHECK FOR AND IF POSSIBLE IMPLEMENT A SWITCH OF
5^XQ    #  MULTIFILE ELEMENTS. IF A SWITCH TAKES PLACE WE JUMP BACK TO FHOBJ
62CB    #  TO REPEAT THE PERI WITH THE NEW FILE. OTHERWISE WE EXIT. IF  
62X2    #  NECESSARY THE 'END OF MULTIFILE' MARKER WILL HAVE BEEN SET.  
63BL    #   
63W=    MULTSWITCH  
64*W          SBX   6  FX1  
64TG          COMPQU   NOTAMULT            [EXIT IF NOT A MULTIFILE 
65*6          BRN      TOFHOBJ             [J TO REENTER FHOBJ IF SWITCH DONE   
65SQ          BS       2,MFHEOFMULT        [SET SWITCH TO SHOW MF DEAD  
66#B          LDX   3  APETADDR(2)  
66S2          LOCKCA   3,ACAP(2)           [RESET LOCK ON CA (COMPQU CLEARS LOCK
67?L    NOTAMULT
67R=          ADX   6  FX1  
68=W          EXIT  6  0
68QG    TOFHOBJ 
69=6          ACROSS   FHOBJ,1  
69PQ    #   
6=9B    #  ******************** 
6=P2    #   
6?8L    #  IF WE GET FILE FULL WHILE WRITING WE ATTEMPT A MULTELEM SWITCH.  
6?N=    #  IF THIS FAILS WE EITHER SET AN OWN MON REPLY OR ILLEGAL AS   
6#7W    #  APPROPRIATE. 
6#MG    #   
6*76    XFILEFULL   
6*## ...      VFREE    FILE,FWB                [MAY BE LEFT BY WRITEB   
6*FG ...      LDX   1  FX1  
6*LQ          CALL  6  MULTSWITCH   
6BL2          CALL  6  MCHOWN              [CHECK IF OWN MON
6C5L          BNZ   7  SETREP              [J TO SET REPLY IF SO
6CK=          LDN   3  FYOUTFULL           [ILLEGAL TYPE
6D4W          LDX   4  FTYPNO(2)           [THIS ILLEGAL REQUIRES X4 AS WELL AS 
6DJG    #   
6F46    #     **********
6FHQ    #   
6G3B    #  ILLEGALING IS DONE IN OLPDD. WE TRANSFER TO THE PCA AND ENTER OLPODD.
6GH2    #   
6H2L    OUTILL  
6HG=          CALL  6  TOPCA
6H^W          ACROSS   OLPODD,4 
6JFG    #   
6J^6    #     **********
6KDQ    #   
6KYB    #  A MODE #22 HAS REALISED IT IS ABOUT TO READ EOF. IF BIT MFHBLOCKEOF  
6LD2    #  IS CLEAR THIS IS THE FIRST OCCURENCE SO WE ATTEMPT A MULTIFILE ELEM  
6LXL    #  SWITCH. IF THIS FAILS WE SET BIT MFHBLOCKEOF AND SET UP A REPLY IN X7
6MC=    #  INDICATING END OF FILE, POSSIBLY WITH THE OWN MON EVENTS BIT SET 
6MWW    #  AS WELL. 
6NBG    #   
6NW6    MODE22EOF   
6P*Q          LDX   1  FX1                 [CORRUPT ON ENTRY TO THIS CODE   
6PTB          JBS      SECONDEOF,2,MFHBLOCKEOF [J IF SECOND TIME
6Q*2          CALL  6  MULTSWITCH          [ATTEMPT MULTELEM SWITCH 
6R#=          CALL  6  MCHOWN              [CHECK IF OWN MON AND SET BITS   
6RRW                                       [IN X7 IF APPROPRIATE.   
6S?G          LDX   0  AWORK2(2)           [BUFFER ADDRESS  
6SR6          ANDX  0  REPMASK(1)          [MASK OUT MS 6 BITS  
6T=Q          ORX   7  0                   [ASSEMBLE REPLY  
6TQB          BS       2,MFHBLOCKEOF       [SET EOF SWITCH  
6W=2          BRN      SETREP              [AND JUMP TO WINDUP CODE 
6WPL    #   
6X9=    #     **********
6XNW    #   
6Y8G    #  IF EOF HAS BEEN DETECTED TWICE AN END OF FILE VIOLATION HAS OCCURRED 
6YN6    #  SO WE EITHER SET AN OWN MON REPLY OR ILLEGAL.
6^7Q    #   
6^MB    SECONDEOF   
72LL          CALL  6  MCHOWN              [SET OWN MON BITS IF OWN MON 
736=          BNZ   7  SETREP              [ TO WIND UP IF REPLY SET
73KW    NILEOF  
745G          LDX   1  FX1                 [MODE #23 JOINS HERE WITH X1 CORRUPT 
74K6          LDN   3  FYENDFILE           [ILLEGAL END OF FILE 
754Q          BRN      OUTILL   
75JB    #   
7642    #     **********
76HL    #   
773=    #  IF THE LIMIT ON ONLINE BS IS REACHED WE GO TO OLPODD 
77GW    #   
782G    TOOMUCH 
78G6          CALL  6  TOPCA               [TRANSFER TO PCA 
78^Q          ACROSS   OLPODD,2 
79FB    #   
79^2    #     **********
7=DL    #   
7=Y=    #  OTHER ILLEGAL SITUATIONS ARE:-   
7?CW    #   
7?XG    #  COUNT OUT OF RANGE   
7#C6    #   
7#WQ    NILCOUNT
7*BB          LDN   3  FYCOUNT  
7*W2          BRN      OUTILL   
7B*L    #   
7BT=    #  ILLEGAL BEG FILE VIOLATION   
7C#W    #   
7CSG    NILBOF  
7D#6          LDX   1  FX1                 [CORRUPT ON JUMPING HERE 
7DRQ          LDN   3  FYBEGFILE
7F?B          BRN      OUTILL   
7FR2    #   
7G=L    #  ILLEGAL DATA FORMAT  
7GQ=    #   
7H9W    NILDATA 
7HC4 ...      VFREEW   FILE,FWB 
7HJ= ...      LDX   1  FX1  
7HPG          LDN   3  FYDATAER 
7J96          BRN      OUTILL   
7JNQ    #   
7K8B    #   
7KN2    #   
7L7L    #   
7LM=          MENDAREA 30,K99FHOBJBL
7M6W    #   
7MLG    #END
^^^^ ...705514120016