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