11 22FL SEG FHOBJDIR,860,FILE 4 22_= # 21 23DW # THIS IS THE FILEHANDLER SEGMENT WHICH IMPLEMENTS 'DIRECTORY ENTRY' 12 23YG # MODE PERIS (#30,#32,#33,#34,#37) 21 24D6 # IT IS ENTERED ACROSS FROM MASTER SEGMENT FHOBJ WITH MOST PRELIMINARY 18 24XQ # CHECKS COMPLETED ( INCLUDING THE 'CHECKB' ON THE BUFFER). 4 25CB # 11 25X2 SEGENTRY K1FHOBJDIR,PERI 20 26BL SEGENTRY K2FHOBJDIR,MDIR2RETURN [OK RETURN FROM MODE #33 NAME 21 26W= [REC ALTERATION CHECKS IN FHDIRTWO 16 27*W SEGENTRY K3FHOBJDIR,NILDATA [ILLEGAL RETURN 16 27TG SEGENTRY K4FHOBJDIR,REJECT [REJECTION RETURN 4 28*6 # 15 28SQ # AWORK AND ACC CONVENTIONS ARE AS FOR FHOBJ. 4 29#B # 8 29S2 # BIT IDENTIFIERS:- 20 2=?L BITDEFS AWORK4,23,MFHEOFMULT [WE'VE RUN OFF THE END OF A 20 2=R= [MULTIFILE. NO FURTHER PERIS 18 2?=W [CAN BE IMPLEMENTED. 21 2?QG BITDEFS AWORK4,22,MFHDIRMOD [THIS IS A DIRECTORY MODE WE'RE 16 2#=6 [IMPLEMENTING 19 2#PQ BITDEFS AWORK4,21,MFHRECEOF [LAST READ PERI LEFT US 16 2*9B [AFTER EOF. 20 2*P2 BITDEFS AWORK4,20,MFHBLOCKEOF [SIMILAR BIT FOR BLOCK PERIS. 20 2B8L [HAS TO BE HANDLED SEPARATELY 20 2BN= [OWING TO DIFFERENT POINTER 16 2C7W [CONVENTIONS. 20 2CMG BITDEFS AWORK4,19,MFHNOT1ST [THIS IS NOT THE 1ST PERI. 19 2D76 BITDEFS AWORK4,18,MFHDIROWN [USER OWNS THE FILES IN 17 2DLQ [THIS DIRECTORY 20 2F6B BITDEFS AWORK4,17,MFHNONSER [THIS IS A DA,DR, OR MT FILE 20 2FL2 BITDEFS AWORK4,16,MFHCHUCKOFF [WE ARE THROWING THIS FILE 21 2G5L [OFFLINE (SET DURING MODE #33). 20 2GK= BITDEFS AWORK4,15,MFHTRAPSALT [WE ARE ALTERING THIS FILE'S 20 2H4W [TRAPS (SET DURING MODE #33). 19 2HJG BITDEFS AWORK4,14,MFHTABSSET [THE TAB SYSTEM HAS BEEN 16 2J46 [INITIALISED. 4 2JHQ # 4 2K3B # 10 2KH2 # SUNDRY PRESET CONSTANTS:- 21 2L2L MASKREPADDR #60777777 [MASK OF MS2 AND LS18 BITS FOR USE 19 2LG= [ASSEMBLING READ MODE REPLIES 7 2L_W VALUEFIVE 5 19 2MFG ...MBIT2SET #10000000 [USED IN VALIDATING GEN NOS. 4 2M_6 # 8 2NDQ # SOME BIT MASKS 4 2NYB # 20 2PD2 ...MEINF1SAME #21357177 [BITS TO BE UNCHANGED IN EINF1 15 2PXL MEINF2SAME #37501242 [DITTO EINF2 21 2QC= MEINF1REJ5 #06000200 [BITS IN EINF1 CAUSING REJECTION 5 15 2QWW [IF CHANGED 15 2RBG MEINF2REJ5 #02000000 [DITTO EINF2 18 2RW6 MASKECOPS #77700001 [PERMITTED BITS IN ECOPS 4 2S*Q # 4 2STB # 4 2T*2 # 4 2TSL # 21 2W#= # ******************************************************************** 4 2WRW # 20 2X?G # THIS SECTION CONTAINS THE SUBROUTINES USED IN THE IMPLEMENTATION 6 2XR6 # SECTIONS. 4 2Y=Q # 9 2YQB # ******************** 16 2_=2 # SUBROUTINE TO VALIDATE A NAME OR LANGUAGE CODE. 16 2_PL # CALLED ON X6. EXPECTS X4->DATA,X5=NO OF CHARS. 4 329= # 6 32NW NAMECHECK 14 338G LDX 1 4 [X1->DATA 21 33N6 LDX 0 0(1) [CHECK 1ST WD NEGATIVE ( 1ST CHAR A 14 347Q BPZ 0 NILDATA [LETTER) 5 34MB NAMECHAR 15 3572 LDCH 0 0(1) [PICK UP CHAR 8 35LL SBN 0 10 15 366= BNG 0 NMCHAROK [OK IF NUMBER 9 36KW SBN 0 #20-10 15 375G BZE 0 NMCHAROK [AND IF ' ' 9 37K6 SBN 0 #35-#20 15 384Q BZE 0 NMCHAROK [AND IF '-' 9 38JB SBN 0 #41-#35 21 3942 BNG 0 NILDATA [OTHERWISE ILLEGAL IF NOT A LETTER 9 39HL SBN 0 #73-#41 9 3=3= BPZ 0 NILDATA 5 3=GW NMCHAROK 17 3?2G BCHX 1 / [UPDATE CHAR POINTER 19 3?G6 BCT 5 NAMECHAR [LOOP IF MORE CHARS TO CHECKS 8 3?_Q LDX 1 FX1 7 3#FB EXIT 6 0 4 3#_2 # 9 3*DL # ******************** 4 3*Y= # 21 3BCW # SUBROUTINE TO MOVE USER BUFFER OUT INTO A FILE/FRB AND PERFORM BASIC 12 3BXG # FORMAT CHECKS AND CONVERSIONS. 11 3CC6 # CALLED ON X6, COORDINATES. 4 3CWQ # 20 3DBB # FIRST WE SET UP THE FRB AND MOVE THE ENTIRE BUFFER OUT. THIS IS 20 3DW2 # SOMEWHAT WASTEFUL SINCE WE ARE ONLY GOING TO THROW THE BLOCKS AND 21 3F*L # INDEX RECORDS AWAY BUT TO IMPLEMENT IT USING REPEATED ACCESS TO THE 16 3FT= # CORE IMAGE WOULD BE VERY COMPLICATED AND LONG. 4 3G#W # 6 3GSG OUTBUFFER 16 3H#6 SBX 6 FX1 [RELATIVISE LINK 18 3HRQ SETUPCORE ACA3(2),3,FILE,FRB [X3->FRB OF RIGHT SIZE 18 3J?B LDN 3 A1(3) [X3->DESTINATION OF DATA. 18 3JR2 LDX 4 AWORK2(2) [X4->BUFFER IN PROGRAM 16 3K=L LDX 5 ACA3(2) [SIZE OF BUFFER 15 3KQ= LDN 1 512 [MAXIMUM MOVE 5 3L9W OUTMLOOP 18 3LPG BXGE 5 1,MAXMOVE [DO MAX MOVE IF SIZE>MAX 20 3M96 LDX 1 5 [OTHERWISE DO ONLY MOVE REQUIRED 5 3MNQ MAXMOVE 14 3N8B OUTMOVE APETADDR(2),4,3,1 [DO MOVE 17 3NN2 ADX 3 1 [UPDATE FRB POINTER 17 3P7L ADX 4 1 [AND BUFFER POINTER 19 3PM= SBX 5 1 [DECREMENT SIZE LEFT TO MOVE 17 3Q6W BNZ 5 OUTMLOOP [IF MORE TO MOVE LOOP 17 3QLG LDX 1 FX1 [RESTORE CORRUPTED X1 4 3R66 # 7 3RKQ # ********** 4 3S5B # 21 3SK2 # WE NOW PARTLY VALIDATE THE NAME RECORD AND CARRY OUT NECESSARY CONVER 4 3T4L # 10 3TJ= MHUNTW 3,FILE,FRB 17 3W3W LDX 0 A1(3) [CHECK RECORD HEADER 8 3WHG SBN 0 FRDE 18 3X36 BNZ 0 NILDATA [ILLEGAL IF WRONG SIZE 2 3XGQ 21 3Y2B BWNZ ERES(3),NILDATA [ILLEGAL IF DOESNT LOOK LIKE NAME REC 2 3YG2 19 3Y_L LDX 0 EGMTLA(3) [IF GMTLA NONZERO CONVERT IT 9 3_F= BZE 0 NOGMTSET 9 3_YW SBX 0 GMTNOW 9 42DG NGS 0 EGMTLA(3) 5 42Y6 NOGMTSET 4 43CQ # 21 43XB # IF THE ENTRY APPEARS TO BE FOR A FILESTORE FILE WE SET OR CLEAR BITS 15 44C2 # BEMT+BESERIAL SO AS TO BE CONSISTENT WITH ETM 4 44WL # 13 45B= JMBS NOTAFILE,3,BELIB,BEEXO 16 45TW MBC 3,BEMT,BESERIAL [CLEAR THE BITS 20 46*G LDXC 0 ETM(3) [PICK UP TYPE MODE DROPPING B0 15 46T6 SRL 0 15 [GET TYPE NO 18 47#Q SBN 0 5 [COMPARE IT AGAINST *MT 17 47SB BPZ 0 NOTSERTYPE [J UNLESS SERIAL FILE 16 48#2 BS 3,BESERIAL [SET SERIAL BIT 9 48RL BRN NOTAFILE 6 49?= NOTSERTYPE 19 49QW BNZ 0 NOTAFILE [NO BITS REQD FOR DA OR DR 17 4==G BS 3,BEMT [OTHERWISE MUST BE MT 5 4=Q6 NOTAFILE 4 4?9Q # 21 4?PB # WE CHECK THAT SIZE<=MAXSIZE, INCREASING MAXSIZE TO SIZE IF THIS IS 6 4#92 # NOT SO. 4 4#NL # 9 4*8= LDX 0 ECOPS(3) 13 4*MW SRL 0 15 [SIZE 14 4B7G LDEX 4 EINF3(3) [MAXSIZE 16 4BM6 SBX 0 4 [X0=SIZE-MAXSIZE 17 4C6Q BNG 0 SIZEOK [OK IF SIZE1ST TRAP 16 5FS6 LDN 3 A1+FRDE(3) [X3->DESTINATION 5 5G?Q TRMOVE 15 5GRB MOVE 2 5 [MOVE TRAP 17 5H?2 ADN 2 5 [UPDATE THE POINTERS 7 5HQL ADN 3 5 21 5J== BCT 5 TRMOVE [AND LOOP IF THERE ARE MORE TO MOVE 17 5JPW LDX 2 FX2 [RESTORE CORRUPTED X2 10 5K9G LDX 0 ACOMMUNE1(2) 20 5KP6 SBN 0 FRDE [X0=AMOUNT BY WHICH BUFFER TO BE 15 5L8Q [SHORTENED 9 5LNB LDX 4 ACA3(2) 16 5M82 SBX 4 0 [NEW BUFFER SIZE 10 5MML MHUNTW 3,FILE,FRB 18 5N7= BRN SHORTENBUF [JUMP TO SHORTEN BUFFER 4 5NLW # 7 5P6G # ********** 4 5PL6 # 20 5Q5Q # IF WHILE CHECKING BLOCKS AND INDEX RECORDS WE DISCOVER THERE ARE 21 5QKB # NO TRAPS WE JUST ZEROISE ENUSE AND SHORTEN THE BUFFER TO THE LENGTH 21 5R52 # OF A NAME RECORD. IF WE HAVE JUST MOVED SOME TRAPS UP WE ALSO SHORTEN 16 5RJL # IT TO THE SIZE CALCULATED IN THE LAST SUBSECTION. 4 5S4= # 5 5SHW NOTRAPS 9 5T3G STOZ ENUSE(3) 16 5TH6 LDN 4 FRDE [NEW BUFFER SIZE 6 5W2Q SHORTENBUF 8 5WGB ALTLENG 3,4 5 5X22 NOMOVE 4 5XFL # 7 5X_= # ********** 4 5YDW # 11 5YYG # THATS THE LOT, WE JUST EXIT 4 5_D6 # 8 5_XQ ADX 6 FX1 7 62CB EXIT 6 0 4 62X2 # 9 63BL # ******************** 4 63W= # 21 64*W # SUBROUTINE TO MOVE A RECORD INDICATED BY AN OFFSET REL TO FPTR OF A F 20 64TG # UP TO THE TOP OF THE FWB AND ADVANCE THE OFFSET IN X5 TO POINT TO 8 65*6 # THE NEXT RECORD. 16 65SQ # CALLED ON X6, DOES NOT COORDINATE, USES X0,2,3 4 66#B # 6 66S2 MOVERECUP 10 67?L MHUNTW 3,FILE,FWB 7 67R= SMO 5 15 68=W LDN 2 0(3) [X2->RECORD 16 68QG LDN 3 A1(3) [X3->DESTINATION 17 69=6 LDEX 0 0(2) [PICK UP RECORD SIZE 15 69PQ ADX 5 0 [ADVANCE X5 7 6=9B SMO 0 16 6=P2 MOVE 2 0 [MOVE RECORD UP 18 6?8L LDX 2 FX2 [RESTORE OVERWRITTEN X2 7 6?N= EXIT 6 0 4 6#7W # 9 6#MG # ******************** 4 6*76 # 21 6*LQ # SUBROUTINE TO CARRY OUT THE INDEXED SEARCH FOR AN ENTRANT. EXPECTS 18 6B6B # A FILE/FRB CONTAINING THE NAME RECORD PART OF THE BUFFER. 11 6BL2 # THE ACTION IS AS FOLLOWS:- 19 6C5L # 1. VALIDATE THE KEYS AND SET UP A FLOCNB. IF THE KEYS GIVEN 21 6CK= # MAKE IT OBVIOUS WHAT TYPE OF ENTRANT IS WANTED THE APPROPRIATE 21 6D4W # TYPE IS SET TN THE FLOCNB. IF A MODE #34 IS BEING IMPLEMENTED 20 6DJG # THE TYPE CAN BE OBTAINED FROM OTHER PARTS OF THE NAME RECORD 20 6F46 # BUT FOR A MODE #30 THE USER WILL PROBABLY HAVE SUPPLIED ONLY 11 6FHQ # THE KEYS AND SUBKEYS. 19 6G3B # 2. DO A GETDIR 7. THIS LOCATES THE ENTRY (IF ANY) NOTICING 20 6GH2 # TO-BE-ERASED ENTRIES, POSITIONING THE DIRECTORY 'HAVING JUST 20 6H2L # READ' THE NAME RECORD AND SETTING THE 'SINGLE' AND 'MULTI' 11 6HG= # SUBREPLIES IF NECESSARY. 21 6H_W # 3. EXAMINE THE REPLIES. IF THE REPLY IS 'OK' THE FLOCNB IS FREED 20 6JFG # AND THE SUBROUTINE EXITS 6 1. IF A 'NOFILE' REPLY IS GIVEN 20 6J_6 # THE FLOCNB IS RETAINED AND THE SUBROUTINE EXITS 6 0. IN THE 20 6KDQ # MODE #34 CASE THE SUBREPLIES ARE ALSO EXAMINED TO ENSURE NO 20 6KYB # SINGLE/MULTIFILE CLASHES OCCUR. OTHER MAIN REPLIES RESULT 12 6LD2 # IN AN APPROPRIATE REJECTION. 4 6LXL # 20 6MC= # THE FIRST OBJECTIVE IS THE SETTING UP OF THE FLOCNB. IF A TSN IS 19 6MWW # PRESENT WE NEED AN 8 WORD FLOCNB, OTHERWISE 6 WORDS WILL DO. 18 6NBG # INITIALLY WE MAKE IT AN 'ANY TYPE' FLOCNB AND ZEROISE IT. 4 6NW6 # 5 6P*Q MGETDIR 8 6PTB SBX 6 FX1 16 6Q*2 MHUNTW 3,FILE,FRB [X3->NAME RECORD 16 6QSL LDN 4 6 [SIZE IF NO TSN 15 6R#= BWZ ESER(3),NOTSN1 [J IF NO TSN 17 6RRW LDN 4 8 [SIZE FOR TSN FLOCNB 5 6S?G NOTSN1 15 6SR6 SETUPCORE 4,2,FILE,FLOCNB [X2->FLOCNB 21 6T=Q BS 2,BFABANY [SHOW FLOCNB IS FOR ANY TYPE OF ENTRA 8 6TQB STOZ A1(2) 9 6W=2 LDN 3 A1+1(2) 8 6WPL LDN 2 A1(2) 7 6X9= SBN 4 1 7 6XNW SMO 4 18 6Y8G MOVE 2 0 [MOVE ZEROS THRU FLOCNB 4 6YN6 # 7 6_7Q # ********** 4 6_MB # 19 7272 # IF A LOCAL NAME IS PRESENT WE VALIDATE IT AND MOVE IT IN. THE 19 72LL ...# VALIDATION CONSISTS OF ENSURING THAT THE NAME REEL AND GEN 9 736= ...# NUMBERS ARE VALID. 21 73?D ...# IN THE EXTERNAL INTERFACE THE MEANINGS OF EGEN=0 AND EGEN=#10000000 17 73DL ...# ARE REVERSED AND HERE IS WHERE THEY ARE TRANSLATED. 4 73KW # 10 745G MHUNTW 3,FILE,FRB 10 74K6 MHUNT 2,FILE,FLOCNB 9 754Q LDX 0 ELOC1(3) 17 75JB BZE 0 NOLOCNAME [J IF NO LOCAL NAME 8 7642 SMO FX2 15 76HL STO 6 ACOMMUNE2 [SAVE LINK 17 773= LDN 5 12 [NO OF CHARS TO CHECK 14 77GW LDN 4 ELOC1(3) [X4->NAME 17 782G CALL 6 NAMECHECK [VALIDATE LOCAL NAME 8 78G6 SMO FX2 9 78_Q LDX 6 ACOMMUNE2 2 79FB 21 79_2 LDX 0 EREEL(3) [VALIDATE THE REEL NO. ACCEPTED VALUE 15 7=DL ... SRL 0 9 [ARE 0-511 18 7=Y= ... BNZ 0 NILDATA [OK IF NO BITS IN B0-14 20 7*BB LDX 0 EGEN(3) [VALIDATE THE GENERATION NUMBER. 20 7*W2 [ACCEPTABLE VALUES ARE #4000XXXX, 20 7B*L [#2000XXXX, #XXXX AND #10000000 21 7BGS ... BXE 0 MBIT2SET(1),ZEROG [OK IF #10000000 AND JUMP TO ZER0 IT 21 7BN2 ... BNZ 0 NOTZEROGEN [OK IF ZER0 BUT MUST BE CHANGED TO 21 7BT8 ... LDCT 0 #100 [#10000000 (THE MEANINGS OF THESE TWO 21 7C2B ... STO 0 EGEN(3) [NUMBERS ARE REVERSED IN THE EXTERNAL 19 7C7J ... BRN YGENOK [INTERFACE). 0->#10000000. 5 7C#Q ...ZEROG 16 7CFY ... STOZ EGEN(3) [#10000000->0. 9 7CM6 ... BRN YGENOK 6 7CS# ...NOTZEROGEN 20 7C_G ... SLL 0 2 [IF NOT 0 OR #10000000 NONE OF 17 7D6N ... SRL 0 14 [BITS 2-11 MAY BE SET 9 7D#6 BNZ 0 NILDATA 5 7DRQ YGENOK 2 7F?B 18 7FR2 LDN 4 ELOC1(3) [X4->1ST WD OF LOCAL NAME 16 7G=L LDN 5 A1(2) [X5->DESTINATION 15 7GQ= MOVE 4 5 [TRANSFER IT 20 7H9W LDX 0 ELAN(3) [NOT FORGETTING THE LANGUAGE CODE 9 7HPG STO 0 A1+5(2) 4 7J96 # 7 7JNQ # ********** 4 7K8B # 20 7KN2 # IF A TSN IS PRESENT WE MOVE IT INTO THE FLOCNB, SET BITS BFABTSN 13 7L7L # AND BFABLIB AND CLEAR BIT BFABANY. 4 7LM= # 9 7M6W LDX 0 ESER(3) 15 7MLG BZE 0 NOTSN2 [J IF NO TSN 4 7N66 YTSN 17 7N*Y ... BNG 0 NILDATA [TSN MUST BE POSITIVE 18 7NKQ STO 0 A1+7(2) [STORE IT IN THE FLOCNB 21 7P5B MBS 2,BFABTSN,BFABLIB [SHOW FLOCNB WITH TSN FOR LIB ENTRANT 18 7PK2 BWNZ EUSE1(3),NILDATA [CANT HAVE TSN+USERNAME 5 7Q4L NOTANY 20 7QJ= BC 2,BFABANY [CLEAR THE 'ANY ENTRANT' MARKER 5 7R3W NOTSN2 4 7RHG # 7 7S36 # ********** 4 7SGQ # 20 7T2B # IF WE ARE IMPLEMENTING A MODE #34 WE SET THE CORRECT TYPE IN THE 20 7TG2 # FLOCNB USING DATA OTHER THAN THE KEYS FROM THE NAME RECORD. FIRST 20 7T_L # WE CHECK THAT THE TYPE HAS NOT ALREADY BEEN DECIDED BY THE ABOVE 21 7WF= # CODE AS THIS ONLY HAPPENS FOR DIRS AND TAPES, NEITHER OF WHICH CAN 21 7WYW # BE THE SUBJECT OF A MODE #34. WE THEN CLEAR THE 'ANY' BIT AND EXAMINE 20 7XDG # BIT BEEXO IN THE NAME RECORD, SETTING BIT BFABEXO IN THE FLOCNB 8 7XY6 # IF BEEXO IS SET. 19 7YCQ # THIS SEQUENCE LEAVES THE FLOCNB MARKED 'FILE' OR 'SECUREX' AS 7 7YXB # APPROPRIATE. 4 7_C2 # 14 7_WL LDCT 0 #020 [BIT 4 8 82B= SMO FX2 17 82TW ANDX 0 AWORK1 [J IF NOT MODE #34 9 83*G BZE 0 NOWGETDIR 20 83T6 JBCC NILDATA,2,BFABANY [CHECK ABOVE CODE HASN'T DECIDED 21 84#Q [TYPE ALREADY AND CLEAR BIT BFABANY 18 84SB JBC NOWGETDIR,3,BEEXO [J UNLESS SECUREX NEEDED 18 85#2 BS 2,BFABEXO [MARK FLOCNB 'SECUREX' 20 85RL BRN NOWGETDIR [AND JUMP INTO NEXT STAGE OF S/R 4 86?= # 7 86QW # ********** 4 87=G # 21 87Q6 # A LOOSE END FROM ABOVE: IF AN ENTRY HAS NO LOCAL NAME IT MUST HAVE 21 889Q # A TSN OR USERNAME. IF IT'S A TSN WE JUMP TO MOVE IT IN. OTHERWISE WE 20 88PB # VALIDATE THE USERNAME (IE ENSURE IT STARTS WITH A LETTER), PUT IT 20 8992 # IN THE FLOCNB, AND JUMP TO CLEAR THE 'ANY' BIT (THUS MARKING THE 10 89NL # FLOCNB AS FOR A FILE). 4 8=8= # 6 8=MW NOLOCNAME 9 8?7G LDX 0 ESER(3) 17 8?M6 BNZ 0 YTSN [J IF TSN SUPPLIED 8 8#6Q SMO FX2 15 8#LB STO 6 ACOMMUNE2 [SAVE LINK 16 8*62 LDN 5 12 [CHARS IN NAME 14 8*KL LDN 4 EUSE1(3) [X4->NAME 17 8B5= CALL 6 NAMECHECK [VALIDATE USERAAME 8 8BJW SMO FX2 15 8C4G LDX 6 ACOMMUNE2 [RESTORE LINK 15 8CJ6 LDN 4 EUSE1(3) [X4->USERNAME 16 8D3Q LDN 5 A1+1(2) [X5->DESTINATION 19 8DHB MOVE 4 3 [MOVE USERNAME INTO FLOCNB 20 8F32 LDX 0 HCOLUSER [PUT COLON IN 1ST WD OF FLOCNB 8 8FGL STO 0 A1(2) 19 8G2= LDX 0 ACES [AND BLANKS IN LAST BUT ONE 9 8GFW STO 0 A1+4(2) 21 8G_G STOZ A1+5(2) [AND ZERO IN LAST ONE. THIS FORMAT SE 19 8HF6 [TO BE CONTRA-SPEC BUT GETDIR 20 8HYQ [WILL ASSUME THAT BLANKS IN WORD 21 8JDB [A1+5 ARE THE KEY FOR THE DIRECTORY 19 8JY2 [- PROBABLY A GETDIR FAULT 20 8KCL BRN NOTANY [JUMP TO CLEAR THE 'ANY' MARKER 4 8KX= # 7 8LBW # ********** 4 8LWG # 21 8MB6 # THE FLOCNB HAS NOW BEEN SET UP SO WE DO OUR GETDIR 7. IF THE REPLY 20 8MTQ # IS 'OK' WE FREE THE FLOCNB AND EXIT 6 1 WITHOUT FURTHER DELAY. 4 8N*B # 6 8NT2 NOWGETDIR 8 8P#L LDX 2 FX2 20 8PS= BC 2,MFHRECEOF [IF WE WERE POSITIONED AFTER EOF 21 8Q?W [WE PROBABLY WONT BE AFTER THE GETDIR 21 8QRG [SO WE CLEAR THE EOF SWITCH AND SET 18 8R?6 [IT AGAIN IF WE HAVE TO. 16 8RQQ GETDIR 7 [DO THE SEARCH 17 8S=B TESTRPN2 OK,NONOKREP [J IF ENTRY NOT FOUND 17 8SQ2 MFREE FILE,FLOCNB [TAKE SUCCESS ACTION 8 8T9L ADX 6 FX1 7 8TP= EXIT 6 1 4 8W8W # 7 8WNG # ********** 4 8X86 # 21 8XMQ # A NON-OK REPLY EITHER MEANS THAT THE ENTRANT DOES NOT EXIST OR THAT 20 8Y7B # THE USER HAS MADE SOME MISTAKE IN HIS DETAILS. IF THE REPLY IS 19 8YM2 # 'NOFILE' WE PERFORM SOME FINAL CHECKS (MODE #34 CASE ONLY) 15 8_6L # AND EXIT, LEAVING THE FLOCNB IN EXISTENCE. 4 8_L= # 20 925W # THE FINAL CHECKS CONSIST OF ENSURING WE ARE NOT ABOUT TO CREATE 20 92KG # A MULTIFILE OF THE SAME NAME AND LANGUAGE AS A NON-MULTIFILE,OR 20 9356 # VICE VERSA. THE INFORMATION IS PASSED UP BY GETDIR IN THE FORM OF 18 93JQ # OF SUBREPLIES. IF AN MDF IS BEING CREATED WE CHECKITS GEN 19 944B # IS 1, IF A MULTEL IS BEING CREATED WE ENSURE ITS GEN IS IN 8 94J2 # THE RANGE 2-127 4 953L # 5 95H= NONOKREP 18 962W TESTRPN2 NOFILE,NOTNOFILE [J IF NOT 'NOFILE' CASE 14 96GG LDCT 0 #020 [BIT 4 9 9726 ANDX 0 AWORK1(2) 21 97FQ BZE 0 NOMFCHECK [JUMP IF NOT IMPLEMENTING MODE #34 12 97_B MHUNT 1,FILE,FLOCNB [ 21 98F2 JBS NOMFCHECK,1,BFABEXO [CHECK NOT APPLICABLE TO SECUREXES 10 98YL MHUNTW 3,FILE,FRB 20 99D= JMBS MFTEST,3,BEMULT,BEMDF[J IF TRYING TO CREATE MULTIFILE 21 99XW TREP2 MULTI,REJECT5 [REJECT PERI IF MF OF SAME NAME/LANG 9 9=CG BRN NOMFCHECK 5 9=X6 MFTEST 21 9?BQ TREP2 SINGLE,REJECT5 [REJECT IF SINGLE FILE OF SAME NAME 17 9?WB LDX 4 A1+4(1) [X4=GENERATION NUMBER 15 9#B2 ... JBS MDFGEN,3,BEMDF [JUMP IF MDF 19 9#TL ... SBN 4 2 [MUST BE MULTEL. CHECK GEN 18 9**= ... BNG 4 REJECT6 [AND JUMP IF OUT OF RANGE 8 9*SW SBN 4 128-2 9 9B#G BPZ 4 REJECT6 9 9BS6 BRN NOMFCHECK 5 9C?Q MDFGEN 17 9CRB SBN 4 1 [CHECK MDF GEN IS 1 9 9D?2 BNZ 4 REJECT6 6 9DQL NOMFCHECK 4 9F== # 7 9FPW # ********** 4 9G9G # 21 9GP6 # THE NOFILE REPLY MAY HAVE LEFT US AFTER END OF FILE, IN WHICH CASE WE 20 9H8Q # SET THE EOF SWITCH MFHRECEOF. IN ANY CASE WE NOW EXIT 6 0 TO THE 14 9HNB # CALLING ROUTINE WITH THE FLOCNB INTACT 17 9J82 STEPAGAIN [X3 ZERO IF AFTER EOF 18 9JML BNZ 3 NOTEOF [OK IF NOT END OF FILE 18 9K7= BS 2,MFHRECEOF [OTHERWISE SET THE SWITCH 5 9KLW NOTEOF 8 9L6G ADX 6 FX1 7 9LL6 EXIT 6 0 4 9M5Q # 7 9MKB # ********** 4 9N52 # 20 9NJL # THE REMAINING REPLIES ALL TRANSLATE INTO SOME SORT OF REJECTION. 4 9P4= # 6 9PHW NOTNOFILE 11 9Q3G TESTREP2 VRYWRONG,REJECT5 9 9QH6 BRN REJECT6 4 9R2Q # 9 9RGB # ******************** 4 9S22 # 19 9SFL # SUBROUTINE TO MOVE A RECORD INTO THE PROGRAM. CALLED ON X6. 18 9S_= # X3->RECORD. X7=ADDRESS IN PROGRAM. ON EXIT X7 HAS BEEN 11 9TDW # UPDATED. DOES NOT COORDINATE. 4 9TYG # 6 9WD6 MOVERECIN 15 9WXQ INMOVE APETADDR(2),7,3,FRH(3) [DO MOVE 17 9XCB ADX 7 FRH(3) [UPDATE OBJ PROG PTR 7 9XX2 EXIT 6 0 4 9YBL # 9 9YW= # ******************** 4 9_*W # 19 9_TG # SUBROUTINE TO BACKSPACE OVER DIRENT, LEAVING X3->NAME RECORD. 4 =2*6 # 6 =2SQ MBACKSPACE 16 =3#B SBX 6 FX1 [RELATIVISE LINK 9 =3S2 BRN MBSPLOOP1 5 =4?L MBSPLOOP 16 =4R= BACKSPACE [BACK ONE RECORD 6 =5=W MBSPLOOP1 17 =5QG STEPAGAIN [TAKE A LOOK AT IT 18 =6=6 BZE 3 MBSPEXIT [EOF COUNTS AS NAME REC 18 =6PQ BWNZ ERESN(3),MBSPLOOP [LOOP IF NOT NAME RECORD 5 =79B MBSPEXIT 15 =7P2 ADX 6 FX1 [RESTORE LINK 7 =88L EXIT 6 0 4 =8N= # 9 =97W # ******************** 4 =9MG # 18 ==76 # SUBROUTINE TO ENSURE DIRECTORY IS NOT WITHIN 16 BLOCKS OF 6 ==LQ # OVERFLOW. 4 =?6B # 6 =?L2 OFLOWCHECK 7 =#5L TOPFCB 1 9 =#K= LDX 0 FBLMOD(1) 8 =*4W LDX 1 FX1 12 =*JG SBN 0 FBLKS-A1+FILESIZE-16 9 =B46 BPZ 0 NILOFLOW 7 =BHQ EXIT 6 0 4 =C3B # 9 =CH2 # ******************** 4 =D2L # 16 =DG= # SUBROUTINE TO RESET THE CURRENT TAB PTR TO TAB 0. 4 =D_W # 6 =FFG TABREWIND 7 =F_6 TABREWIND 7 =GDQ EXIT 6 0 4 =GYB # 9 =HD2 # ******************** 4 =HXL # 21 =JC= # SUBROUTINE TO RESET THE CURRENT TAB TO THE CURRENT DIRECTORY POSITION 4 =JWW # 5 =KBG TABRESET 7 =KW6 TABRESET 7 =L*Q EXIT 6 0 4 =LTB # 9 =M*2 # ******************** 4 =MSL # 20 =N#= # SUBROUTINE TO REPOSITION THE DIRECTORY ACCORDING TO THE CURRENT 8 =NRW # TAB. COORDINATES. 4 =P?G # 5 =PR6 TABULATE 8 =Q=Q SBX 6 FX1 7 =QQB TABULATE 8 =R=2 ADX 6 FX1 7 =RPL EXIT 6 0 4 =S9= # 21 =SNW # ******************************************************************** 21 =T8G # ******************************************************************** 4 =TN6 # 10 =W7Q # MAIN PATH STARTS HERE. 4 =WMB # 21 =X72 # ******************************************************************** 21 =XLL # ******************************************************************** 4 =Y6= # 4 =YKW PERI 4 =_5G # 21 =_K6 # WE CHECK THAT THE BUFFER IS BIG ENOUGH TO HOLD AT LEAST A NAME REC, 18 ?24Q # UNLESS THE MODE IS #37 FOR WHICH THE COUNT HAS NO MEANING 4 ?2JB # 14 ?342 LDCT 0 #002 [BIT 7 9 ?3HL ANDX 0 AWORK1(2) 17 ?43= BNZ 0 NOCOUNTCHK [SKIP CHECK IF M #37 14 ?4GW LDX 0 ACA3(2) [COUNT 8 ?52G SBN 0 FRDE 18 ?5G6 BNG 0 NILCOUNT [J IF COUNT OUT OF RANGE 6 ?5_Q NOCOUNTCHK 4 ?6FB # 7 ?6_2 # ********** 4 ?7DL # 21 ?7Y= # BEFORE WE JUMP INTO THE INDIVIDUAL MODE SECTIONS WE MUST SET A TAB 20 ?8CW # ON THE CURRENT DIRECTORY POSITION. THIS IS NECESSARY SINCE SOME 21 ?8XG # MODES REPOSITION THE DIRECTORY BEFORE DECIDING TO REJECT THE PERI. 20 ?9C6 # SO ALL REJECTION PATHS ASSUME THAT TAB 0 IS SET ON THE ORIGINAL 20 ?9WQ # POSITION. IF THE TAB SYSTEM HAS NOT ALREADY BEEN INITIALISED WE 20 ?=BB # SET IT UP AND CREATE TWO TABS . TAB 0 WILL ALWAYS BE USED ON THE 15 ?=W2 # ORIGINAL POSITION, TAB 1 IS USED BY MODE #33. 4 ??*L # 19 ??T= JBSS TABSSET,2,MFHTABSSET[J IF TAB INITIALISED ALREADY 18 ?##W SETUPTAB [INITIALISE TAB SYSTEM 19 ?#SG LDN 5 2 [NO OF TABS TO BE CREATED. 5 ?*#6 TABLOOP 15 ?*RQ TABSET [SET A TAB UP 17 ?B?B BCT 5 TABLOOP [J IF MORE TO SET UP 9 ?BR2 BRN TABSINIT 5 ?C=L TABSSET 19 ?CQ= CALL 6 TABREWIND [ENSURE TAB PTR SET TO TAB 0 21 ?D9W CALL 6 TABRESET [AND RESET THE TAB TO CURRENT POSITIO 5 ?DPG TABSINIT 7 ?F96 # ********** 4 ?FNQ # 16 ?G8B # NOW WE SWITCH TO THE INDIVIDUAL MODE SECTIONS. 4 ?GN2 # 8 ?H7L LDN 4 #7777 14 ?HM= ANDX 4 ACA1(2) [X4=MODE 17 ?J6W SBN 4 #30 [NORMALISE FOR SWITCH 7 ?JLG ADX 4 1 14 ?K66 EXIT 4 1+0? [SWITCH 9 ?KKQ BRN MODE30 21 ?L5B BRN (GEOERR) [FHOBJ HAS ILLEGALED ILLEGAL MODES 9 ?LK2 BRN MODE32 9 ?M4L BRN MODE33 9 ?MJ= BRN MODE34 9 ?N3W BRN (GEOERR) 9 ?NHG BRN (GEOERR) 9 ?P36 BRN MODE37 4 ?PGQ # 21 ?Q2B # ******************************************************************** 4 ?QG2 # 19 ?Q_L # MODE #30 SETS UP A FRB WITH THE NAME REC AREA OF THE BUFFER. 21 ?RF= # IT USES THIS TO CALL MGETDIR, WHICH RETURNS THE NAME REC IN AN ENT, 18 ?RYW # AND LEAVES THE DIR POSITIONED ABOUT TO READ THE NEXT REC. 13 ?SDG # MODE #30 THEN MERGES WITH MODE #32. 4 ?SY6 # 5 ?TCQ MODE30 11 ?TXB SETNCORE FRDE,3,FILE,FRB 19 ?WC2 LDN 4 A1(3) [DESTINATION OF NAME REC AREA 17 ?WWL LDX 3 AWORK2(2) [BUFFER ADDR IN PROG 16 ?XB= LDN 6 FRDE [LENGTH OF MOVE 20 ?XTW FOUTMOVE APETADDR(2),3,4,6,HLOCK2,2 [MOVE OUT DATA INTO FRB 19 ?Y*G CALL 6 MGETDIR [VALIDATE KEYS, SET UP FLOCNB 16 ?YT6 [AND DO GETDIR. 15 ?_#Q BRN M30NOTFOUND [NOFILE CASE. 19 ?_SB MFREEW FILE,FRB [IF SUCCESSFUL FREE OLD FRB 10 #2#2 MHUNTW 3,FILE,ENT 14 #2RL ADN 3 A1 [X3->DATA 17 #3?= BRN READENTRY [MERGE WITH MODE #32 4 #3QW # 7 #4=G # ********** 4 #4Q6 # 21 #59Q # IF MGETDIR COULDNT FIND THE RECORD WE SET UP A ZERO-LENGTH TRANSFER 21 #5PB # UNLESS THE READ PTRS ARE NOW POSITIONED AFTER END OF FILE, IN WHICH 16 #692 # CASE WE JUMP TO THE APPROPRIATE EXCEPTION CODE. 4 #6NL # 6 #78= M30NOTFOUND 9 #7MW MFREEW FILE,FRB 10 #87G MFREE FILE,FLOCNB 18 #8M6 JBS READEOF,2,MFHRECEOF [J IF MGETDIR READ EOF. 5 #96Q NULLREC 19 #9LB LDX 0 AWORK2(2) [PUT LS18 BITS OF BUFFER ADDR 15 #=62 ANDX 0 MASKLS18(1) [INTO REPLY 7 #=KL ORX 7 0 17 #?5= BRN SETREP [AND JUMP TO SET REPLY 9 #?JW MASKLS18 #777777 4 ##4G # 7 ##J6 # ********** 4 #*3Q # 15 #*HB # MODE #32 LOOPS UNTIL IT FINDS A NAME RECORD. 4 #B32 # 5 #BGL MODE32 6 #C2= STEP 16 #CFW BZE 3 READEOF [J IF END OF FILE 17 #C_G BWNZ ERESN(3),MODE32 [LOOP IF NOT NAME REC 4 #DF6 # 7 #DYQ # ********** 4 #FDB # 4 #FY2 # 19 #GCL # THE TWO READ MODES NOW MERGE WITH X3-> NAME RECORD. WE MOVE 20 #GX= # THIS RECORD INTO THE OBJECT PROGRAM, AND LEAVE X7-> WORD AFTER 5 #HBW # IT. 4 #HWG # 6 #JB6 READENTRY 18 #JTQ LDX 7 AWORK2(2) [X7->BUFFER WITHIN PROG 20 #K*B CALL 6 MOVERECIN [CARRY OUT MOVE AND ADVANCE X7 4 #KT2 # 7 #L#L # ******** 4 #LS= # 20 #M?W # WHILE WE HAVE THE NAME RECORD AVAILABLE WE WORK OUT THE NUMBER OF 20 #MRG # AS YET UNREAD RECORDS IN THIS DIRECTORY ENTRY SO THAT WE KNOW HOW 16 #N?6 # MANY TIMES TO GO ROUND THE 'MOVE IN RECORD' LOOP 4 #NQQ # 15 #P=B LDX 5 ENUSEN(3) [NO OF TRAPS 7 #PQ2 LDN 0 1 9 #Q9L ANDX 0 ECOPSN(3) 21 #QP= ADX 5 0 [PLUS 1 FOR BLOCKS REC IF THERE IS 13 #R8W [ONE 18 #RNG JBC NOTINDM30,3,BNINDEX [J IF NOT INDEXED FILE 17 #S86 ADN 5 1 [PLUS 1 FOR THE INDEX 6 #SMQ NOTINDM30 18 #T7B VFREEW FILE,ENT [SET UP IN MODE #30 CASE 17 #TM2 LDX 1 FX1 [CORRUPTED BY VFREE 4 #W6L # 7 #WL= # ********** 4 #X5W # 20 #XKG # WE NOW LOOP ROUND READING UP TO [X5] RECORDS AND MOVING THEM INTO 21 #Y56 # THE BUFFER. IF A RECORD WILL NOT FIT WE EXIT, ADDING THE 'LONG BLOCK' 16 #YJQ # BIT INTO THE REPLY WORD AND BACKSPACING SO THAT A 16 #_4B # SUBSEQUENT MODE #2 WILL READ THE OFFENDING RECORD 4 #_J2 # 19 *23L BZE 5 READFIN [J IF NO MORE RECS TO READ 5 *2H= READLOOP 16 *32W STEP [X3->NEXT RECORD 19 *3GG BZE 3 (GEOERR) [CANT BE AN ED OF FILE REPLY 18 *426 BWZ ERESN(3),(GEOERR) [NOR ANOTHER NAME RECORD 16 *4FQ LDEX 0 FRH(3) [SIZE OF RECORD 21 *4_B ADX 0 7 [PLUS ADDRESS WEVE GOT TO IN BUFFER 20 *5F2 SBX 0 AWORK2(2) [LESS START OF BUFFERGIVES TOTAL 18 *5YL [SIZE IF WE MOVE THIS IN. 16 *6D= SBX 0 ACA3(2) [SUBTRACT COUNT 20 *6XW SBN 0 1 [PLUS 1 MORE TO MAKE IT -VE IF 15 *7CG [RECORD FITS 15 *7X6 BNG 0 RECFITS [J IF IT DOES 20 *8BQ LDCT 0 #200 [ELSE SET LONG BLOCK BIT IN REPLY 7 *8WB ORX 7 0 7 *9B2 BACKSPACE 19 *9TL BRN READFIN [AND JUMP TO SET UP REPLY. 5 *=*= RECFITS 18 *=SW CALL 6 MOVERECIN [MOVE RECORD INTO BUFFER 19 *?#G BCT 5 READLOOP [LOOP IF MORE RECS IN DIRENT 4 *?S6 # 15 *#?Q # WE NOW MODIFY THE 'EGMTLA' FIELD IF IT'S SET. 4 *#RB # 5 **?2 READFIN 19 **QL LDX 3 AWORK2(2) [ADDR OF BUFFER WOTHIN PROG 19 *B== ADN 3 EGMTLAN [ADDR OF EGMTLA WITHIN PROG 17 *BPW FADDRESS APETADDR(2),3,HLOCK2,2 [X3->WORD REQUIRED 16 *C9G LDX 6 0(3) [PICK UP VALUE 15 *CP6 BZE 6 READREP [J IF NOT SET 9 *D8Q SBX 6 GMTNOW 18 *DNB NGS 6 0(3) [STORE CONVERTED VALUE 4 *F82 # 7 *FML # ********** 4 *G7= # 20 *GLW # FINALLY WE SET UP THE REPLY WORD BY MASKING UNWANTED BITS OUT OF 12 *H6G # X7 AND JUMPING TO WINDUP CODE. 4 *HL6 # 5 *J5Q READREP 21 *JKB ANDX 7 MASKREPADDR(1) [MASK OUT ALL BUT MS2 AND LS18 BITS. 16 *K52 BRN SETREP [JUMP TO WINDUP 4 *KJL # 21 *L4= # ******************************************************************** 4 *LHW # 19 *M3G # THIS SECTIONS IMPLEMENTS MODE #37 (BACKSPACE OVER DIRENT). 20 *MH6 # MODE #37 IS TRIVIAL. WE JUST CALL MBACKSPACE AND THEN BACKSPACE 21 *N2Q # ONCE MORE TO POSITION THE DIRECTORY JUST ABOUT TO READ THE NAME RECOR 9 *NGB # FOUND BY MBACKSPACE. 4 *P22 # 5 *PFL MODE37 19 *P_= CALL 6 MBACKSPACE [BACKSPACE TO THE NAME RECORD 17 *QDW BACKSPACE [BACKSPACE OVER IT 17 *QYG BC 2,MFHRECEOF [CLEAR ANY EOF STATE 17 *RD6 BRN SETREP [JUMP TO WINDUP CODE 4 *RXQ # 21 *SCB # ********************************************************************* 4 *SX2 # 19 *TBL # THIS SECTION IMPLEMENTS MODE #33 (REWRITE LAST DIRENT READ). 20 *TW= # MODE #33 IS THE MOST COMPLICATED OF THE LOT. THE BASIC APPROACH 5 *W*W # IS 20 *WTG # 1. MOVE OUT AND MODIFY USER BUFFER, PERFORMING BASIC CHECKS. 19 *X*6 # 2. BACKSPACE TO THE NAME RECORD AND CARRY OUT NAME RECORD 10 *XSQ # ALTERATION CHECKS. 21 *Y#B # 3. IF THE DIRENT WILL BE BIGGER AFTER REWRITING WE APPLY AN OFLOW 7 *YS2 # CHECK. 21 *_?L # 4. WORK OUT WHETHER THE TRAPS ARE BEING ALTERED, AND IF SO CHECK 20 *_R= # THE USER OWNS THE FILE. THIS MAY INVOLVE READING THE TRAPS. 16 B2=W # 5. TAB BACK TO THE NAME RECORD AND REWRITE IT. 18 B2QG # 6. IF THE FILE IS TO BE THROWN OFFLINE READ THE BLOCKS 20 B3=6 # RECORD INTO A FULLB AND CHAIN IT INTO THE FILE CHAIN WHERE 20 B3PQ # IT WILL BE FREED WHEN THE DIRECTORY IS CLOSED. THEN DELETE 15 B49B # THE BLOCKS RECORD FROM THE DIRECTORY. 15 B4P2 # 7. SKIP TO THE END OF THE DIRECTORY ENTRY. 19 B58L # 8. IF THE TRAPS ARE BEING ALTERED DELETE THE OLD ONES AND 9 B5N= # INSERT THE NEW. 4 B67W # 21 B6MG # FIRST WE MOVE OUT THE USER BUFFER INTO A FILE/FRB, BACKSPACE TO THE 12 B776 # NAME RECORD, AND SET A TAB ON IT. 4 B7LQ # 5 B86B MODE33 21 B8L2 CALL 6 OUTBUFFER [MOVE OUT BUFFER, SCRUB BLOCKS AND 21 B95L [AND INDEX RECORDS, ADJUST GMTLA ETC 18 B9K= TAB ,1 [MOVE TAB PTR TO TAB 1 18 B=4W CALL 6 MBACKSPACE [BACKSPACE TO NAME RECORD 16 B=JG CALL 6 TABRESET [SET TAB 1 ON IT. 4 B?46 # 7 B?HQ # ********** 4 B#3B # 19 B#H2 # WE NOW CARRY OUT THE NAME RECORD ALTERATION CHECKS. THIS CODE 20 B*2L # IS LOCATED IN FHDIRTWO WHERE IT WAS PUT WHEN FHOBJDIR OVERFLOWED. 4 B*G= # 10 B*_W ACROSS FHDIRTWO,1 16 BBFG MDIR2RETURN [NORMAL RETURN 4 BB_6 # 7 BCDQ # ********** 4 BCYB # 21 BDD2 # WE NOW CHECK THAT THE OVERFLOW CONDITION HAS NOT OCCURRED. NO CHECK 20 BDXL # IS NECESSARY IF THE NEW ENTRY WILL NOT BE BIGGER THAN THE OLD. WE 20 BFC= # COMPUTE THE DECREASE IN SIZE AS (NO. OF OLD TRAPS- NO. OF NEW)*5+ 21 BFWW # SIZE OF BLOCKS RECORD IF FILE IS BEING THROWN OFFLINE. THE DIFFERENCE 21 BGBG # IN THE NUMBER OF TRAPS RECORDS IS SAVED IN X7 AS IT IS USED IN THE 7 BGW6 # NEXT SECTION. 4 BH*Q # 7 BHTB STEPAGAIN 10 BJ*2 MHUNTW 2,FILE,FRB 9 BJSL LDX 4 ENUSEN(3) 17 BK#= SBX 4 ENUSE(2) [DIFFERENCE IN TRAPS. 15 BKRW LDX 7 4 [SAVE VALUE 20 BL?G JBC NOTHROWB,FX2,MFHCHUCKOFF[THAT VALUE IS SUFFICIENT FOR 20 BLR6 [DECISION UNLESS WE ARE THROWING 20 BM=Q [THE FILE OFFLINE, IN WHICH CASE 20 BMQB [WE HAVE TO TAKE THE SIZE OF THE 21 BN=2 [DISAPPEARING BLOCKS REC INTO ACCOUNT 10 BNPL MPY 4 VALUEFIVE(1) 18 BP9= LDX 4 5 [X4=DECREASE IN TRAP SIZE 12 BPNW LDX 0 ECOPSN(3) [ 8 BQ8G SRL 0 15 17 BQN6 ADN 0 2 [X0=BLOCKS REC SIZE 17 BR7Q ADX 4 0 [X4=TOTAL DECREASE. 5 BRMB NOTHROWB 16 BS72 BPZ 4 SAMEORSMALL [J IF NOT GROWING 19 BSLL CALL 6 OFLOWCHECK [PERFORM CHECK. S/R DOES NOT 21 BT6= [CORRUPT X7 WHICH IS NEEDED BY NEXT 14 BTKW [SECTION. 6 BW5G SAMEORSMALL 4 BWK6 # 7 BX4Q # ********** 4 BXJB # 21 BY42 # NEXT WE FIND OUT WHETHER THE TRAPS ARE BEING ALTERED. IF THEY ARE WE 21 BYHL # CARRY OUT AN OWNERSHIP CHECK AND SET BIT MFHTRAPSALT TO REMIND US TO 20 B_3= # CARRY OUT THE ALTERATION. IF THE NUMBER OF TRAPS ARE DIFFERENT IN 20 B_GW # OLD AND NEW DIRENTS WE MUST BE ALTERING THEM OTHERWISE WE HAVE 18 C22G # TO CARRY OUT A COMPARISION OF EACH OLD/NEW PAIR OF TRAPS. 20 C2G6 # NOTE THAT OUR CHECKS INSIST ON OWNERSHIP EVEN FOR SHUFFLING TRAPS 21 C2_Q # WITHOUT CHANGING THEM. THIS IS UNAVOIDABLE - A FULL TRAP EQUIVALENCE 13 C3FB # CHECK WOULD BE COMPLEX AND EXPENSIVE. 4 C3_2 # 19 C4DL BNZ 7 TRAPSALT [J IF DIFFERING NOS OF TRAPS 19 C4Y= LDX 4 ENUSEN(3) [X4=NO OF TRAPS TO COMPARE. 15 C5CW BZE 4 TRAPSNOALT [J IF NONE 20 C5XG LDN 5 A1+FRDE [OFFSET DOWN FRB OF 1ST NEW TRAP 6 C6C6 TRAPCLOOP 17 C6WQ STEP [X3->NEXT NEW RECORD. 18 C7BB LDX 0 ERESN(3) [LOOP IF NOT A TRAPS REC. 17 C7W2 BPZ 0 TRAPCLOOP [ELSE X3->OLD TRAP 10 C8*L MHUNTW 2,FILE,FRB 15 C8T= ADX 2 5 [X2->NEW TRAP 18 C9#W LDN 6 4 [NO OF WORDS TO COMPARE 6 C9SG TRAPCHECK 7 C=#6 SMO 6 16 C=RQ LDX 0 0(3) [WORD OF OLD TRAP 7 C??B SMO 6 18 C?R2 BXU 0 0(2),TRAPSALT [J IF DIFFERS FROM NEW 19 C#=L BCT 6 TRAPCHECK [J IF MORE WORDS TO COMPARE 18 C#Q= ADN 5 5 [UPDATE OFFSET DOWN FRB 19 C*9W BCT 4 TRAPCLOOP [J IF MORE TRAPS TO CHECK 6 C*PG TRAPSNOALT 8 CB96 LDX 2 FX2 20 CBNQ BC 2,MFHTRAPSALT [SHOW TRAPS NOT BEING ALTERED. 10 CC8B BRN TRAPSNOAL2 5 CCN2 TRAPSALT 8 CD7L LDX 2 FX2 19 CDM= JBC REJECT1,2,MFHDIROWN [J IF USER DOESNT OWN FILE. 19 CF6W BS 2,MFHTRAPSALT [NOTE TRAPS TO BE ALTERED. 6 CFLG TRAPSNOAL2 4 CG66 # 7 CGKQ # ********** 4 CH5B # 21 CHK2 # THAT COMPLETES THE CHECKS. WE TAB BACK TO THE NAME RECORD AND REWRITE 21 CJ4L # IT WITH THE NEW ONE AFTER PICKING OUT INTO X4 THE NUMBER OF OLD TRAPS 4 CJJ= # 17 CK3W CALL 6 TABULATE [TAB TO NAME RECORD 7 CKHG STEPAGAIN 17 CL36 LDX 4 ENUSEN(3) [X4=NO OF OLD TRAPS 16 CLGQ MHUNTW 3,FILE,FRB [X3->NEW BUFFER 19 CM2B NAME 3,FILE,FWB [CALL IT A FWB FOR REWRITE'S 14 CMG2 [BENEFIT 17 CM_L REWRITE [UPDATE NAME RECORD 4 CNF= # 7 CNYW # ********** 4 CPDG # 21 CPY6 # IF WE ARE THROWING THE FILE OFFLINE WE READ THE BLOCKS RECORD INTO 21 CQCQ # A FULLB AND DO A FULLBPAS, SO THAT WHEN THE DIRECTORY IS CLOSED THE 16 CQXB # BLOCKS WILL BE FREED. WE THEN DELETE THE RECORD. 4 CRC2 # 21 CRWL JBC NOTHROW2,2,MFHCHUCKOFF [J IF NOT THROWING FILE OFFLINE 6 CSB= READ 18 CSTW MHUNTW 3,FILE,FRB [CALL BLOCKS REC A FULLB 10 CT*G NAME 3,BSTB,FULLB 17 CTT6 FULLBPAS 3,2 [PUT IT IN FILE CHAIN 6 CW#Q DELETE 5 CWSB NOTHROW2 4 CX#2 # 7 CXRL # ********** 4 CY?= # 20 CYQW # WE NOW SKIP TO THE END OF THE DIRECTORY ENTRY. THE LENGTH OF THE 21 C_=G # SKIP IS WORKED OUT FROM THE NUMBER OF OLD TRAPS RECORDS ( IN X4) AND 20 C_Q6 # WHETHER THERE ARE ANY BLOCKS OR INDEX RECS ( FOUND FROM BUFFER). 4 D29Q # 15 D2PB LDX 3 4 [NO OF TRAPS 10 D392 MHUNTW 2,FILE,FWB 17 D3NL JBC NINDREC,2,BEINDEX [J IF NO INDEX REC 15 D48= ADN 3 1 [INCR COUNT 5 D4MW NINDREC 17 D57G BBUS 23,ECOPS(2),NBLKREC [J IF NO BLOCKS REC 15 D5M6 ADN 3 1 [INCR COUNT 5 D66Q NBLKREC 9 D6LB BZE 3 NOSKIP33 13 D762 SKIP ,0(3) [SKIP 5 D7KL NOSKIP33 8 D85= LDX 2 FX2 4 D8JW # 7 D94G # ********** 4 D9J6 # 20 D=3Q # IF WE ARE ALTERING THE TRAPS WE NOW DELETE ALL THE OLD TRAPS AND 21 D=HB # LOOP INSERTING THE NEW. THIS IS NOT THE MOST EFFICIENT WAY OF DOING 20 D?32 # IT BUT THIS IS NOT ANTICIPATED TO BE THE MOST COMMON OF ACTIONS 16 D?GL # AND A REALLY EFFICIENT WAY IS RATHER TORTUOUS. 4 D#2= # 19 D#FW JBC NOTRAPALT,2,MFHTRAPSALT [J IF NO TRAP ALTERATION 19 D#_G BZE 4 NOTRDELETE [J IF NO OLD TRAPS TO DELETE 5 D*F6 TRDEL 18 D*YQ DELETE [LOOP DELETING OLD TRAPS 8 DBDB BCT 4 TRDEL 6 DBY2 NOTRDELETE 15 DCCL MHUNTW 3,FILE,FWB [X3->BUFFER 16 DCX= LDX 4 ENUSE(3) [NO OF NEW TRAPS 15 DDBW BZE 4 NOTRAPALT [J IF NONE 21 DDWG STEP [READ 1ST REC OF NEXT DIRENT SO CAN 18 DFB6 [USE INSERT ON NEW TRAPS. 20 DFTQ LDN 5 A1+FRDE [OFFSET DOWN FWB TO 1ST NEW TRAP 5 DG*B TRINSERT 21 DGT2 CALL 6 MOVERECUP [MOVE UP RECORD IN FWB INDICATED BY 20 DH#L [X5 AND ADVANCE X5 TO INDICATE 14 DHS= [NEXT REC 16 DJ?W INSERT [INSERT NEW TRAP 18 DJRG BCT 4 TRINSERT [LOOP IF MORE TO INSERT 21 DK?6 BACKSPACE [BACKSPACE OVER 1ST REC OF NEXT ENT 6 DKQQ NOTRAPALT 4 DL=B # 7 DLQ2 # ********** 4 DM9L # 20 DMP= # THAT'S THE LOT. WE JUST FREE THE BUFFER, SET A ZERO REPLY (X7 GOT 19 DN8W # CORRUPTED IN THE IMPLEMENTATION OF THE PERI) AND JUMP TO THE 7 DNNG # WINDUP CODE. 4 DP86 # 9 DPMQ MFREE FILE,FWB 7 DQ7B LDN 7 0 9 DQM2 BRN SETREP 4 DR6L # 21 DRL= # ******************************************************************** 4 DS5W # 21 DSKG # THE LAST MODE IS #34, WHICH IS RELATIVELY SIMPLE. FIRST WE CARRY OUT 21 DT56 # AN OVERFLOW CHECK. THEN WE MOVE OUT THE USER BUFFER AND PERFORM THE 12 DTJQ # BASIC CHECKS AND MODIFICATIONS. 4 DW4B # 5 DWJ2 MODE34 20 DX3L JBC REJECT1,2,MFHDIROWN [CHECK USER ALLOWED TO DO M#34 16 DXH= CALL 6 OFLOWCHECK [OVERFLOW CHECK 18 DY2W CALL 6 OUTBUFFER [MOVE BUFFER OUT INTO FRB 10 DYGG MHUNTW 3,FILE,FRB 4 D_26 # 15 D_FQ # THE SPECIAL CHECKS APPLIED FOR MODE #34 ARE:- 8 D__B # BELIB CLEAR. 9 F2F2 # EREEL 1 OR ZERO. 10 F2YL # EUSE1-3 AND ESER ZERO. 14 F38D ...# IF BEEXO CLEAR THEN EGEN MUST NOT BE 0. 14 F3D= ...# ELAN MUST BE ZERO OR A VALID LANGUAGE. 19 F3N4 ...# IF EINC IS NONZERO THEN THE ALIEN FILESTORE NUMBER MUST BE 20 F3XW ...# SET. IN ANY CASE THE INCNO MUST BE NON-NEGATIVE. THE FILESTORE 18 F47N ...# NUMBER CHECK CAN BE INHIBITED BY A RESTORE TIME MACRO. 4 F4CG # 11 F4X6 JBS NILDATA,3,BELIB 9 F5BQ LDX 0 EREEL(3) 9 F5WB BZE 0 ZEROREEL 7 F6B2 SBN 0 1 5 F6TL ZEROREEL 9 F7*= ORX 0 ESER(3) 9 F7SW ORX 0 EUSE1(3) 9 F8#G ORX 0 EUSE2(3) 9 F8S6 ORX 0 EUSE3(3) 9 F9?Q BNZ 0 NILDATA 12 F9RB JBS NOTFILEGEN,3,BEEXO 9 F=?2 LDX 0 EGEN(3) 9 F=QL ... BZE 0 NILDATA 6 F?== NOTFILEGEN 9 F?PW LDX 0 ELAN(3) 16 F#9G BZE 0 ZEROLAN [OK IF LANG ZERO 17 F#P6 BXE 0 ACES,ZEROLAN [OK IF LANG SPACES 15 F*8Q LDN 4 ELAN(3) [X4->LANGUAGE 18 F*NB LDN 5 4 [NO OF CHARS TO CHECKS 9 FB82 CALL 6 NAMECHECK 5 FBML ZEROLAN 18 FBPJ ... LDX 0 EINC(3) [NEG INCNO CAUSES GENRES. 9 FBRG ... BNG 0 REJECT7 20 FBTD ... SEGENTRY K98FHOBJDIR [LABEL FOR RESTORE TIME MACRO. 18 FBXB ... BZE 0 ZEROINCNUM [REJECT7 IF INCNO NONZERO 17 FB_# ... JFZ REJECT7,3,FEFSNO [AND ALIEN FSNO ZERO. 17 FC3= ... SEGENTRY K97FHOBJDIR [ANOTHER MACRO LABEL. 6 FC58 ...ZEROINCNUM 4 FC7= # 7 FCLW # ********** 4 FD6G # 20 FDL6 # THERE APPEARS NOTHING WRONG WITH THE BUFFER SO WE CALL MGETDIR TO 20 FF5Q # VALIDATE THE KEYS IN IT AND TO POSITION THE DIRECTORY READY TO 9 FFKB # INSERT THE NEW ENTRY. 16 FG52 # IF THE FILE ALREADY EXISTS WE REJECT THE PERI. 4 FGJL # 19 FH4= CALL 6 MGETDIR [VALIDATE KEYS AND DO SEARCH 21 FHHW BRN M34OK ['NOFILE' REPLY - JUST WHAT WE WANT 20 FJ3G BRN REJECT4 [FILE ALREADY EXISTS, REJECT PERI 5 FJH6 M34OK 4 FK2Q # 7 FKGB # ********** 4 FL22 # 20 FLFL # WE NOW UPDATE THE KEYS IN THE BUFFER FROM THE FLOCNB WHICH GETDIR 21 FL_= # LEAVES IN THE NOFILE CASE. WE DONT HAVE TO TAKE THE DIR AND TAPE FLOC 21 FMDW # FORMATS INTO CONSIDERATION AS WE HAVE ALREADY REJECTED ANY ATTEMPT 10 FMYG # TO INSERT ONE OF THESE. 4 FND6 # 15 FNXQ MHUNTW 3,FILE,FRB [X3->BUFFER 15 FPCB MHUNT 2,FILE,FLOCNB [X2->FLOCNB 8 FPX2 LDN 4 A1(2) 9 FQBL LDN 5 ELOC1(3) 20 FQW= MOVE 4 5 [MOVE ALL OF NAME EXCEPT LANGUAGE 17 FR*W LDX 0 A1+5(2) [TRANSFER LANGUAGE 9 FRTG STO 0 ELAN(3) 15 FS*6 FREECORE 2 [FREE FLOCNB 4 FSSQ # 7 FT#B # ********** 4 FTS2 # 21 FW?L # IF THE ENTRY IS FOR AN INDEXED FILE WE CLEAR THE INDEX BIT AND WORD. 4 FWR= # 20 FX=W ... JBCC NOTINDM34,3,BEINDEX [J IF NOT AN INDEXED FILE ENTRY 9 FXQG STOZ EINDEX(3) 6 FY=6 NOTINDM34 4 FYPQ # 7 F_9B # ********** 4 F_P2 # 21 G28L # SOME MORE MODIFICATIONS ARE NECESSARY BEFORE WE CAN MAKE THE INSERTIO 21 G2N= # IN PARTICULAR WE ZEROISE THE FREEZECOUNTS, CLEAR A NUMBER OF BITS. 18 G37W # THE BITS WHICH ARE CLEARED ARE THOSE WHICH IN MODE #33 19 G3MG # WE DID NOT PERMIT THE USER TO CHANGE BUT INSTEAD COPIED THE 13 G476 # OLD VALUES ACROSS FROM OLD TO NEW. 4 G4LQ # 10 G56B LDX 0 MEINF1SAME(1) 9 G5L2 ORS 0 EINF1(3) 9 G65L ERS 0 EINF1(3) 10 G6K= LDX 0 MEINF2SAME(1) 9 G74W ORS 0 EINF2(3) 9 G7JG ERS 0 EINF2(3) 10 G846 FLIPS ECOPS(3),23 9 G8HQ STOZ ESVCT(3) 10 G93B STOZ EAUTOCOUNT(3) 10 G9H2 LDX 0 MASKECOPS(1) 21 G=2L ANDS 0 ECOPS(3) [CLEAR FORBIDDEN BITS OUT OF ECOPS 4 G=G= # 7 G=_W # ********** 4 G?FG # 19 G?_6 # IF WE ARE INSERTING A FILE WITH THE TO-BE-DUMPED BIT SET WE 17 G#DQ # ALSO SET THE RELEVANT BITS IN THE FCB TO ENSURE THAT 12 G#YB # DUMPER LOOKS AT THIS DIRECTORY. 4 G*D2 # 11 G*XL JBC NOTBDUMP,3,BEDUMP 7 GBC= TOPFCB2 2 12 GBWW MBS 2,BFDIRUPDATE,BFDUMP 8 GCBG LDX 2 FX2 5 GCW6 NOTBDUMP 4 GD*Q # 9 GDTB # ******************** 4 GF*2 # 11 GFSL # NOW WE INSERT THE RECORDS. 4 GG#= # 17 GGRW NAME 3,FILE,FWB [FOR INSERTS BENEFIT 20 GH?G LDN 4 1 [COUNT OF RECS: 1 FOR NAME REC 17 GHR6 ADX 4 ENUSE(3) [PLUS COUNT OF TRAPS 20 GJ=Q LDN 5 A1+FRDE [OFFSET DOWN FWB TO 1ST TRAP REC 18 GJQB BRN M34INSERT [JUMP INTO INSERTION LOOP 6 GK=2 M34INSLOOP 20 GKPL CALL 6 MOVERECUP [MOVE NEXT REC TO TOP OF FWB AND 20 GL9= [UPDATE X5 TO POINT TO THE NEXT. 6 GLNW M34INSERT 18 GM8G INSERT [INSERT REC AT TOP OF FWB 18 GMN6 BCT 4 M34INSLOOP [LOOP IF MORE TO INSERT 4 GN7Q # 17 GNMB # FINALLY WE CLEAN UP, AND JUMP INTO THE WINDUP CODE. 4 GP72 # 9 GPLL MFREE FILE,FWB 9 GQ6= BRN SETREP 4 GQKW # 21 GR5G # ******************************************************************** 4 GRK6 # 19 GS4Q # THE WINDUP CODE SIMPLY RETURNS TO FHOBJ WITH THE REPLY SET 6 GSJB # IN X7. 4 GT42 # 5 GTHL SETREP 9 GW3= ACROSS FHOBJ,2 4 GWGW # 21 GX2G # ********************************************************************* 21 GXG6 # ********************************************************************* 4 GX_Q # 20 GYFB # THIS SECTION CARRIES OUT ALL THE EXCEPTION CHECKS AND ACTIONS. 4 GY_2 # 19 G_DL # EXCEPTION SUBROUTINE TO SET BITS 3+5 IN THE REPLY IF OWN-MON 20 G_Y= # ADDITIVE MODE #30000 IS BEING USED. CALLED ON X6. ON EXIT X7 IS 12 H2CW # EITHER UNCHANGED OR #05000000. 4 H2XG # 5 H3C6 MCHOWN 15 H3WQ LDX 0 ACA1(2) [PICK UP MODE 7 H4BB SRL 0 6 18 H4W2 ANDN 0 #777 [EXTRACT ADDITIVE MODE 8 H5*L SBN 0 #300 17 H5T= BNZ 0 (6) [EXIT IF NOT OWN-MON 17 H6#W LDCT 7 #050 [SET OWN-MON REPLY 7 H6SG EXIT 6 0 4 H7#6 # 9 H7RQ # ******************** 4 H8?B # 20 H8R2 # SUBROUTINE TO TIDY UP AFTER A FAULTY PERI. IT TABS BACK TO THE 21 H9=L # ORIGINAL POSITION OF THE DIRECTORY AND FREES ALL BLOCKS THAT MIGHT 7 H9Q= # BE IN USE. 10 H=9W # COORDINATES AND USES X3. 4 H=PG # 5 H?96 TIDYUP 16 H?NQ SBX 6 FX1 [RELATIVISE LINK 17 H#8B LDX 3 6 [AND SAVE IT IN X3 16 H#N2 CALL 6 TABREWIND [SET PTR TO TAB 0 15 H*7L CALL 6 TABULATE [TAB TO IT 14 H*M= LDX 6 3 [REPLACE LINK 21 HB6W VFREE FILE,FLOCNB [FREE ANY BLOCKS WHICH MAY BE IN USE. 9 HBLG VFREE FILE,ENT 9 HC66 VFREE FILE,FRB 9 HCKQ VFREE FILE,FWB 17 HD5B LDX 1 FX1 [CORRUPTED BY VFREE 4 HDK2 # 7 HF4L # ********** 4 HFJ= # 21 HG3W # WE MAY HAVE BEEN AT EOF AT THE START SO WE INVESTIGATE THE DIRECTORY 21 HGHG # POSITIONING AND SET OR CLEAR THE EOF MARKER ASS APPROPRIATE. WE CHECK 21 HH36 # THAT WE ARE NOT A BEGINNING OF FILE FIRST AND THEN DO A STEPAGAIN. 4 HHGQ # 17 HJ2B TOPFCA2 3 [X3->FCA OF DIRECORY 10 HJG2 LDX 0 FREADBLOCK(3) 19 HJ_L BNG 0 TIDYNEOF [NOT EOF IF BEGINNING OF FILE 8 HKF= SBN 0 FBLKS 20 HKYW BNZ 0 TIDYTESTEOF [DO STEPAGAIN UNLESS 1ST BLOCK 18 HLDG LDX 0 FREADWORD(3) [MAY STILL BE BEG FILE 16 HLY6 BNG 0 TIDYNEOF [J IF BEG FILE 6 HMCQ TIDYTESTEOF 7 HMXB STEPAGAIN 15 HNC2 BNZ 3 TIDYNEOF [J IF NOT EOF 16 HNWL BS 2,MFHRECEOF [SET EOF SWITCH 9 HPB= BRN TIDYEXIT 5 HPTW TIDYNEOF 16 HQ*G BC 2,MFHRECEOF [CLEAR EOF SWITCH 5 HQT6 TIDYEXIT 18 HR#Q ADX 6 FX1 [RESTORE LINK AND EXIT 7 HRSB EXIT 6 0 4 HS#2 # 9 HSRL # ******************** 4 HT?= # 21 HTQW # IF END OF FILE IS READ AS A RESULT OF A MODE #30 OR #32 WE HAVE TO 20 HW=G # SET THE SWITCH 'MFHRECEOF', AND PASS A ZERO-LENGTH TRANSFER REPLY 20 HWQ6 # TO THE PROGRAM. IN ADDITION IF THE OWN-MONITORING MODE #30000 WAS 21 HX9Q # USED WE SET THE OWN MON EVENT BITS B3+5 IN THE REPLY BEFORE ADDING 12 HXPB # IN THE ZERO LENGTH TRANSFER DATA 4 HY92 # 5 HYNL READEOF 16 H_8= BS 2,MFHRECEOF [SET EOF MARKER 20 H_MW CALL 6 MCHOWN [SET OWN-MON BITS IN REPLY IF OWN 15 J27G [MON IN USE. 20 J2M6 BRN NULLREC [JUMP INTO READ SECTION TO SET A 19 J36Q [ZERO LENGTH TRANSFER REPLY 4 J3LB # 9 J462 # ******************** 4 J4KL # 21 J55= # THE VARIOUS REJECTIONS SIMPLY SET UP A REPLY OF B3+REJECTION CODE. 16 J5JW # THEY THEN TIDY UP AND JUNP INTO THE WINDUP CODE 4 J64G # 5 J6J6 REJECT1 7 J73Q LDN 7 1 9 J7HB BRN REJECT 5 J832 REJECT2 7 J8GL LDN 7 2 9 J92= BRN REJECT 5 J9FW REJECT3 7 J9_G LDN 7 3 9 J=F6 BRN REJECT 5 J=YQ REJECT4 7 J?DB LDN 7 4 9 J?Y2 BRN REJECT 5 J#CL REJECT5 7 J#X= LDN 7 5 9 J*BW BRN REJECT 5 J*WG REJECT6 7 JBB6 LDN 7 6 9 JBG3 ... BRN REJECT 5 JBKY ...REJECT7 7 JBPT ... LDN 7 7 5 JBTQ REJECT 8 JC*B LDX 1 FX1 8 JCT2 LDX 2 FX2 14 JD#L LDCT 0 #040 [SET B3 19 JDS= ORX 7 0 ['OR' INTO CODE TO MAKE REPLY 9 JF?W CALL 6 TIDYUP 17 JFRG BRN SETREP [JUMP TO WINDUP CODE 4 JG?6 # 9 JGQQ # ******************** 4 JH=B # 20 JHQ2 # IF OVERFLOW OCCURS DURING MODE #33 OR #34 WE EITHER ILLEGAL OR 9 JJ9L # SET AN OWN MON REPLY. 4 JJP= # 5 JK8W NILOFLOW 8 JKNG LDX 2 FX2 14 JL86 CALL 6 TIDYUP [CLEAN UP 18 JLMQ LDN 7 0 [MODE #33 CORRUPTS REPLY 20 JM7B CALL 6 MCHOWN [IF OWN MON SET REPLY AND WIND UP 13 JMM2 BNZ 7 SETREP [PERI 20 JN6L LDN 3 FYOUTFULL [OTHERWISE SET UP ILLEGAL TYPE 21 JNL= LDX 4 FTYPNO(2) [AND THE FURTHER PARAMETER REQUIRED 16 JP5W [BY THIS ILLEGAL 21 JPKG OUTILL [NOW WE JUST RESET THE OLPAS LINK SO 21 JQ56 [ON REACTIVATION IT WAKES UP IN FHOBJ 20 JQJQ [TRANSFER TO THE PCA AND ENTER 15 JR4B [THE ILLEGAL 8 JRJ2 LDX 1 FX1 10 JS3L TOPCA1 RESETLINK(1) 9 JSH= ACROSS OLPODD,4 6 JT2W RESETLINK 9 JTGG PAIR FHOBJ,1 4 JW26 # 9 JWFQ # ******************** 4 JW_B # 11 JXF2 # OTHER PROGRAM EVENTS ARE:- 4 JXYL # 21 JYD= # ILLEGAL COUNT FIELD. A CALL TO TIDYUP IS NOT POSSIBLE OR NECESSARY 20 JYXW # IN THIS CASE AS THE CONDITION IS DETECTED BEFORE THE RECOVERY TAB 20 J_CG # IS SET UP AND BEFORE ANY DIRECTORY REPOSITIONING HAS OCCURRED. 4 J_X6 # 5 K2BQ NILCOUNT 9 K2WB LDN 3 FYCOUNT 9 K3B2 BRN OUTILL 4 K3TL # 9 K4*= # INVALID DATA FORMAT 4 K4SW # 5 K5#G NILDATA 8 K5S6 LDX 1 FX1 8 K6?Q LDX 2 FX2 14 K6RB CALL 6 TIDYUP [CLEAN UP 9 K7?2 LDN 3 FYDATAER 9 K7QL BRN OUTILL 4 K8== # 4 K8PW # 11 K99G MENDAREA 40,K99FHOBJDIR 4 K9P6 # 4 K=8Q #END 6 ____ ...001717350012