10 22FL SEG FHOBJ,860,FILE 4 22_= # 20 23DW # THIS SEGMENT IS THE MAIN PATH OF FILEHANDLER. IT DOES THE INITIAL 20 23YG # ANALYSIS AND BASIC CHECKING OF ALL PERIS, AND ACTUALLY IMPLEMENTS 10 24D6 # THE MOST COMMON MODES. 18 24XQ # SEGMENTS FHOBJDIR, FHOBJBL AND FHOBJIND HANDLE THE REST. 4 25CB # 4 25X2 # 19 26BL SEGENTRY K1FHOBJ,PERI [ENTRY TO DEAL WITH A PERI. 20 26W= SEGENTRY K2FHOBJ,SETREP [REENTRY FROM OTHER CODE TO SET 21 27*W [A REPLY AND WIND UP THE TRANSFER. 20 27TG SEGENTRY K3FHOBJ,M0FOUND [OK RETURN FROM MODE #0 CODE IN 14 28*6 [FHOBJIND 21 28SQ SEGENTRY K4FHOBJ,NOTFOUND ['NOT FOUND' RETURN FROM MODE #0 CODE 20 29#B SEGENTRY K5FHOBJ,NOTINDMODE3 [OK RETURN FROM MODE #3 INDEXING 17 29S2 [CHECKS IN FHOBJIND 20 2=?L SEGENTRY K56FHOBJ,OKINDMODE4 [OK RETURN FROM FHOBJIND MODE #4 21 2=R= [INDEXING CODE IF RECORD IS KEYED. 20 2?=W [WOULD BE K6 BUT THID IS RESERVED 17 2?QG [FOR TRACING LEVELS 21 2#=6 SEGENTRY K7FHOBJ,NOTINDMODE4 [DITTO: BUT THE RECORD IS NOT KEYED 20 2#PQ [AND A BEGINNING OF FILE CHECK IS 14 2*9B [NEEDED 19 2*P2 SEGENTRY K8FHOBJ,YESOL3 [RETURN FROM MODE #12 CODE 18 2B8L SEGENTRY K9FHOBJ,NILDATA [VARIOUS ILLEGAL RETURNS 11 2BN= SEGENTRY K10FHOBJ,NILCOUNT 12 2C7W SEGENTRY K11FHOBJ,OUTILLBOF 12 2CMG SEGENTRY K12FHOBJ,OUTILLEOF 4 2D76 # 11 2DLQ # AWORK AND ACC CONVENTIONS:- 4 2F6B # 20 2FL2 # AWORK1 IS SET UP WITH BIT 0 SHIFTED RIGHT N PLACES WHERE N IS 20 2G5L # THE MODE. THIS IS DONE BY THE INITIAL ANALYSIS CODE, AND MAKES 20 2GK= # IT POSSIBLE TO ESTABLISH IF THE MODE FALLS INTO A GIVEN SET BY 18 2H4W # SIMPLY 'AND'ING AWORK1 AGAINST A SUITABLE BIT MASK. 20 2HJG # THE DIRECTORY MODES #30 ETC ARE TREATED AS THEIR CORRSP RECORD 11 2J46 # MODES FOR THIS PURPOSE. 4 2JHQ # 20 2K3B # AWORK2 IS SET UP BY THE INITIAL ANALYSIS CODE TO CONTAIN THE 15 2KH2 # ADDRESS OF THE BUFFER WITHIN THE PROGRAM. 4 2L2L # 21 2LG= # AWORK3 IS SET UP BY ASSIGN AS A MASK OF FORBIDDEN MODES WITH THE 19 2L_W # TYPE OF FILE IN USE. THIS IS ANDXED AGAINST AWORK1 DURING 12 2MFG # INITIAL ANALYSIS AND CHECKING. 4 2M_6 # 16 2NDQ # AWORK4 IS A BIT WORD. THE DEFINITIONS ARE:- 4 2NYB # 20 2PD2 BITDEFS AWORK4,23,MFHEOFMULT [WE'VE RUN OFF THE END OF A 20 2PXL [MULTIFILE. NO FURTHER PERIS 18 2QC= [CAN BE IMPLEMENTED. 21 2QWW BITDEFS AWORK4,22,MFHDIRMOD [THIS IS A DIRECTORY MODE WE'RE 16 2RBG [IMPLEMENTING 19 2RW6 BITDEFS AWORK4,21,MFHRECEOF [LAST READ PERI LEFT US 16 2S*Q [AFTER EOF. 20 2STB BITDEFS AWORK4,20,MFHBLOCKEOF [SIMILAR BIT FOR BLOCK PERIS. 20 2T*2 [HAS TO BE HANDLED SEPARATELY 20 2TSL [OWING TO DIFFERENT POINTER 16 2W#= [CONVENTIONS. 20 2WRW BITDEFS AWORK4,19,MFHNOT1ST [THIS IS NOT THE 1ST PERI. 19 2X?G BITDEFS AWORK4,18,MFHDIROWN [USER OWNS THE FILES IN 17 2XR6 [THIS DIRECTORY 20 2Y=Q BITDEFS AWORK4,17,MFHNONSER [THIS IS A DA,DR, OR MT FILE 20 2YQB BITDEFS AWORK4,16,MFHCHUCKOFF [WE ARE THROWING THIS FILE 21 2_=2 [OFFLINE (SET DURING MODE #33). 20 2_PL BITDEFS AWORK4,15,MFHTRAPSALT [WE ARE ALTERING THIS FILE'S 20 329= [TRAPS (SET DURING MODE #33). 19 32NW BITDEFS AWORK4,14,MFHTABSSET [THE TAB SYSTEM HAS BEEN 16 338G [INITIALISED. 4 33N6 # 19 347Q # AWORK4 IS INITIALISED BY ASSIGN. ALL SWITCHES ARE CLEAR ON 20 34MB ...# ENTRY WITH THE POSSIBLE EXCEPTION OF MFHDIROWN AND MFHNONSER 4 3572 # 19 35LL # X7 IS ZEROISED BY THE INITIAL ANALYSIS CODE AND IS USED TO 13 366= # ACCUMULATE THE FINAL REPLY WORD. 4 36KW # 13 375G # X6 IS THE USUAL SUBROUTINE LINK. 4 37K6 # 20 384Q # X1=FX1 AND X2=FX2. ANY CODE WHICH ALTERS THESE MUST ALTER THEM 19 38C7 ...# BACK BEFORE PROCEEDING. IF THIS RULE IS NOT FOLLOWED THE 15 38PJ ...# FACT MUST BE DOCUMENTED IN THE COMMENTS. 4 3942 # 10 39HL # SUNDRY PRESET CONSTANTS:- 4 3=3= # 20 3=8D ... SEGENTRY K98FHOBJ [LABEL TO ALLOW MENDIG OF NEXT 20 3=*L ... [LOCATION BY RESTORE TIME MACRO. 19 3=GW VALIDMODDIR #56200000 [AWORK1 TYPE MASK OF DEFINED 16 3?2G [DIRECTORY MODES. 17 3?G6 VALIDMOD #77660160 [DITTO: NORMAL MODES 19 3?_Q MCHAPP #20060100 [DITTO: ACCEPTABLE MODES WHEN 15 3#FB ... [APPENDING. 20 3#_2 ...MCHNSWRITE #00040100 [DITTO: NONSERIAL FILE WRITING. 17 3*DL MCHREAD #50220040 [DITTO : READ MODES 4 3*Y= # 4 3BCW # 15 3BXG # A SUBROUTINE TO LOCK THE CONTROL AREA DOWN. 11 3CC6 # CALLED ON X6, LEAVES X3->APET 4 3CWQ # 5 3DBB MCALOCK 10 3DW2 LDX 3 APETADDR(2) 9 3F*L LOCKCA 3,ACAP(2) 7 3FT= EXIT 6 0 4 3G#W # 4 3GSG # 21 3H#6 # A SUBROUTINE TO CHECK FILE IS NOT POSITIONED AT BEGINNING OF FILE. 20 3HRQ # IF IT IS WE JUMP INTO THE EXCEPTION CODE. CALLED ON X6. USES X3. 4 3J?B # 5 3JR2 TESTBOF 7 3K=L TOPFCA2 3 18 3KQ= LDX 0 FREADBLOCK(3) [PICK UP READ BLOCK PTR 18 3L9W BNG 0 NILBOF [-VE=> BEGINNING OF FILE 19 3LPG SBN 0 FBLKS [IF IT POINTS TO 1ST BLOCK 20 3M96 BNZ 0 NOTBOF [THEN WORD PTR -VE=> BEG OF FILE 10 3MNQ LDX 0 FREADWORD(3) 9 3N8B BNG 0 NILBOF 5 3NN2 NOTBOF 7 3P7L EXIT 6 0 4 3PM= # 4 3Q6W # 21 3QLG # ********************************************************************* 21 3R66 # ********************************************************************* 4 3RKQ # 9 3S5B # MAIN PATH STARTS HERE 4 3SK2 # 21 3T4L # ********************************************************************* 21 3TJ= # ********************************************************************* 4 3W3W # 4 3WHG PERI 20 3X36 LDN 7 0 [X7 IS BASIS FOR THE ASSEMBLED 21 3XGQ [REPLY WORD. INDIVIDUAL IMPLEMENTATIO 20 3Y2B [SECTIONS WILL ADD ADDRESSES AND 19 3YG2 [BITS INTO IT AS NECESSARY 4 3Y_L # 19 3_F= # WE LOCK AND THEN COPY THE CONTROL AREA ACROSS TO THE AOLPT. 4 3_YW # 17 42DG CALL 6 MCALOCK [LOCK CONTROL AREA 16 42Y6 [LEAVING X3->APET 15 43CQ LDN 6 4 [LENGTH OF CA 16 43XB LDX 4 ACAP(2) [SOURCE OF MOVE 17 44C2 LDN 5 ACA1(2) [DESTINATION OF MOVE 13 44WL FOUTMOVE 3,4,5,6,HLOCK1,2 [MOVE 4 45B= # 7 45TW # ********** 4 46*G # 20 46T6 # IF ONCE WE ENCOUNTER EOF/FILEFULL ON A MULTIFILE NO FURTHER PERIS 20 47#Q # CAN BE ACCEPTED. WE MAKE THIS CHECK IMMEDIATELY, WHILE AWORK1 IS 19 47SB # STILL SET UP TO INDICATE THE MODE WHICH CAUSED THE CONDITION. 4 48#2 # 12 48RL JBS MEOF1,2,MFHEOFMULT 4 49?= # 7 49QW # ********** 4 4==G # 20 4=Q6 # THE MODE MUST BE RECOGNISABLE AND MUST BE ACCEPTABLE WITH THIS 19 4?9Q # TYPE OF FILE. WE CHECK THIS AND SET UP AWORK1 IN THE PROCESS. 20 4?PB # IF THE MODE IS A DIRECTORY MODE WE SET AWORK1 AS FOR THE CORRSP 14 4#92 # RECORD MODE AND SET THE DIRMODE SWITCH. 4 4#NL # 9 4*8= LDX 4 ACA1(2) 14 4*MW ANDN 4 #7777 [X4=MODE 8 4B7G SBN 4 #30 18 4BM6 BNG 4 NDIRMOD [J IF NOT DIRECTORY MODE 2 4C6Q 19 4CLB SBN 4 #10 [CHECK A VALID DIRECTORY MODE 18 4D62 BPZ 4 NMODNR [J IF OUT OF RANGE 8 4DKL ADN 4 #10 7 4F5= TOPFCB2 3 20 4FJW JBC NILLTYPE,3,BFDIR [UNACCEPTABLE IF FILE NOT A DIR 19 4G4G BS 2,MFHDIRMOD [SET DIRECTORY MODE SWITCH 20 4GJ6 LDX 5 VALIDMODDIR(1) [PICK UP MASK OF RECOG DIR MODES 9 4H3Q BRN YDIRMOD 2 4HHB 5 4J32 NDIRMOD 19 4JGL BC 2,MFHDIRMOD [CLEAR DIRECTORY MODE SWITCH 8 4K2= ADN 4 #30 17 4KFW LDX 5 VALIDMOD(1) [MASK OF RECOG MODES 2 4K_G 5 4LF6 YDIRMOD 8 4LYQ LDCT 0 #400 7 4MDB SMO 4 16 4MY2 SRL 0 0 [AWORK1 SET UP 9 4NCL STO 0 AWORK1(2) 18 4NX= ANDX 5 0 [CHECK MODE RECOGNISED 14 4PBW BZE 5 NMODNR [J IF NOT 20 4PWG JBS NOTFBD,2,MFHDIRMOD [NEXT CHECK NOT NEEDED IF DIRMOD 21 4QB6 ANDX 5 AWORK3(2) [CHECK MODE NOT FORBIDDEN WITH FILE 16 4QTQ BNZ 5 NILLTYPE [J IF FORBIDDEN 5 4R*B NOTFBD 4 4RT2 # 7 4S#L # ********** 4 4SS= # 20 4T?W # WE ALSO HAVE TO CHECK WHETHER THE MODE IS CONSISTENT WITH THE WAY 19 4TRG # THE FILE IS OPEN. WHILE WE CHECK THIS WE ALSO CHECK THAT THE 19 4W?6 # CURRENT PERI COUNT (UPDATED BY EXEC) HASNT EXCEEDED THE LIMIT 11 4WQQ # QUALIFIER IN THE WRITE CASE. 4 4X=B # 21 4XQ2 WHICHMOP NOTOL1 [CHECK INVALID IF ONLINED FILEHANDLER 9 4Y9L BRN YESOL1 5 4YP= NOTOL1 14 4_8W TOPFCA2 3 [X3->FCA 19 4_NG ... JMBS MCHREM,3,BAMREAD,BAMREADR[J IF READ MODES ONLY 17 5286 LDX 0 ACOUNT(2) [CURRENT PERI COUNT 19 52MQ BXGE 0 ALIMEY(2),NILLIMIT [J IF OUTPUT LIMIT EXCEEDED 21 537B JBS YESOL1,3,BAMGEN [J IF GEN MODE (NO FURTHER CHECKS) 20 53C8 ... JBS MCHNONSERWR,2,MFHNONSER [J IF WRITING TO NONSER FILE 21 53M2 LDX 0 MCHAPP(1) [MASK OF MODES ALLOWED IN APPEND CASE 10 546L BRN YRESTRICTS 6 549Q ...MCHNONSERWR 19 54#W ... LDX 0 MCHNSWRITE(1) [MASK OF MODES ALLOWED WHEN 19 54D2 ... [OVERWRITING NONSERIAL FILES. 10 54H6 ... BRN YRESTRICTS 5 54L= MCHREM 21 555W LDX 0 MCHREAD(1) [MASK OF MODES ALLOWED FOR READ CASE 6 55KG YRESTRICTS 9 5656 ANDX 0 AWORK1(2) 19 56JQ BZE 0 NILLAC [J IF NOT AN ACCEPTED MODE 5 574B YESOL1 4 57J2 # 7 583L # ********** 4 58H= # 20 592W # WE NOW CHECK AND LOCK THE DATA BUFFER (EXCEPT FOR MODES 5,6,7,#37 11 59GG # WHICH DO NOT TRANSFER DATA) 4 5=26 # 16 5=FQ LDCT 0 #016 [BITS 5,6 AND 7 9 5=_B ANDX 0 AWORK1(2) 17 5?F2 BNZ 0 NODATAAREA [J IF NON DATA MODE 14 5?YL LDX 3 APETADDR(2) [X3->APET 19 5#D= LDX 5 ACA4(2) [BUFFER ADDR WITHIN PROGRAM 20 5#XW ANDX 5 BITS22LS [AT MOST WE WANT ONLY LS 22 BITS 17 5*CG PMODES 0,3 [ (X0=PROGRAM MODES) 12 5*X6 ANDN 0 #10 [ 17 5BBQ BNZ 0 P22AM [ (J IF 22AM PROG) 20 5BWB ANDX 5 BSP16 [AND ONLY LS 15 IF 15AM PROGRAM. 5 5CB2 P22AM 17 5CTL STO 5 AWORK2(2) [KEEP BUFFER ADDRESS 18 5D*= CHECKB 5,ACA3(2),RESVIOL,3,W,NODATAAREA,HLOCK2,,PERI 20 5DSW [SEE PRM 6.CHECKB FOR EXPLANATION 21 5F#G [DATA AREA IS NOW CHECKED AND LOCKED 6 5FS6 NODATAAREA 4 5G?Q # 7 5GRB # ********** 4 5H?2 # 20 5HQL # WE NOW CARRY OUT SOME FILE POSITIONING CHECKS FOR THE RECORD AND 20 5J== # DIRECTORY MODES. THE BLOCK MODE CHECKS ARE INCOMPATIBLE AND ARE 21 5JPW # THEREFORE HANDLED IN FHOBJBL (THIS ARISES FROM A DIFFERENT F'BLOCK 13 5K9G # CONVENTION WITH READB AND WRITEB). 21 5KP6 # FOR MODES 3,5,#33 AND #37 WE CHECK THAT WE ARE NOT AT BEGINNING OF 20 5L8Q # FILE. (THE BOF CHECK FOR MODE #7 IS SAVED UNTIL WE IMPLEMENT IT 21 5LNB # AS THE DIRECTION OF SKIP IS AS YET UNKNOWN. THE SAME APPLIES TO MODE 21 5M82 # SINCE THE RECORD TO BE INSERTED MAY BE A KEYED RECORD OF AN INDEXED 20 5MML # FILE IN WHICH CASE WE WILL POSITION THE FILE FOR INDEXING FIRST.) 2 5N7= 4 5NLW # 20 5P6G WHICHMOP MBOFCHECK [THIS AND FOLLOWING SECTION NOT 17 5PL6 BRN NOTEOF [APPLICABLE TO OL *FH 6 5Q5Q MBOFCHECK 18 5QKB LDCT 0 #052 [MODES 3,#33,5,7,AND #37 9 5R52 ANDX 0 AWORK1(2) 19 5RJL BZE 0 NOTATBOF [J IF NOT ONE OF THOSE MODES 20 5S4= LDCT 4 #050 [IF ITS MODE 7 OR #37 WE HAVE TO 21 5SHW ANDX 0 4 [ENSURE WE ONLY MAKE THE CHECK FOR 14 5T3G BNZ 0 NOTM737 [MODE #37 12 5TH6 JBC NOTATBOF,2,MFHDIRMOD 5 5W2Q NOTM737 19 5WGB CALL 6 TESTBOF [ENSURE NOT BEGINNING OF FILE 5 5X22 NOTATBOF 4 5XFL # 7 5X_= # ********** 4 5YDW # 20 5YYG # MORE CHECKS ARE NECESSARY ON REC AND DIR MODES ILLEGAL AFTER END 20 5_D6 # OF FILE AND ALSO ON MODES 4 AND 7 WHICH MAY NEED SPECIAL ACTION 16 5_XQ # IF WE WERE PREVIOUSLY AT EOF BUT ARE NO LONGER. 21 62CB # FIRST WE CHECK WHETHER THE LAST PERI TO USE THE READ POINTERS LEFT 20 62X2 # THEM SET HAVING JUST READ EOF (THE SWITCH MFHRECEOF WILL BE SET 20 63BL # IF THIS IS SO). IF IT DIDNT THE PERI PROCEEDS. OTHERWISE WE CHECK 21 63W= # TO SEE WHETHER THE END OF FILE CONDITION STILL HOLDS. IF MORE DATA 20 64*W # HAS NOT BEEN ADDED WE EITHER PROCEED (MODES 4 AND 7) OR ILLEGAL. 21 64TG # IF MORE DATA HAS BEEN ADDED WE DO A BACKSPACE TO RESET THE POINTERS 21 65*6 # TO HAVING JUST READ THE RECORD LAST READ AND LOOP BACK TO THE START 21 65SQ # OF THE PREVIOUS SECTION TO ENSURE THAT WE ARE NOT NOW ILLEGALLY AT 8 66#B # BEGINNING OF FILE 4 66S2 # 16 67?L LDCT 0 #172 [MODES 2,3,4,5,7 17 67R= ANDX 0 AWORK1(2) [TEST IF ONE OF THESE 19 68=W BZE 0 NOTEOF [J IF NOT NO CHECK NEEDED 21 68QG JBC NOTEOF,2,MFHRECEOF [J IF READ PTRS NOT LEFT AFTER EOF 18 69=6 STEPAGAIN [CHECK IF THEY STILL ARE 14 69PQ BZE 3 STILLEOF [J IF SO 19 6=9B BC 2,MFHRECEOF [OTHERWISE CLEAR EOF SWITCH 17 6=P2 BACKSPACE [RESET READ POINTERS. 20 6?8L [OTHERWISE PERI WOULD BE OBEYED 20 6?N= [AS IF WE HAD JUST READ 1ST NEW 14 6#7W [RECORD 18 6#MG BRN MBOFCHECK [REPEAT BOF CHECK IF NEC 5 6*76 STILLEOF 19 6*LQ LDCT 0 #22 [OK IF MODE 4 OR 7 OTHERWISE 17 6B6B ANDX 0 AWORK1(2) [POTENTIALLY ILLEGAL 9 6BL2 BZE 0 NILEOF 5 6C5L NOTEOF 4 6CK= # 7 6D4W # ********** 4 6DJG # 18 6F46 # NOW WE ENTER THE INDIVIDUAL MODE IMPLEMENTATION SECTIONS 4 6FHQ # 21 6G3B JBC NOTDIR2,2,MFHDIRMOD [FURTHER CHECKS AND IMPLEMENTATION 20 6GH2 ACROSS FHOBJDIR,1 [IN FHOBJDIR FOR DIRECTORY MODES 5 6H2L NOTDIR2 8 6HG= LDN 4 #7777 15 6H_W ANDX 4 ACA1(2) [EXTRACT MODE 19 6JFG ADX 4 1 [SWITCH TO INDIVIDUAL CODE 8 6J_6 EXIT 4 1+0? 8 6KDQ BRN MODE0 8 6KYB BRN MODE1 8 6LD2 BRN MODE2 8 6LXL BRN MODE3 8 6MC= BRN MODE4 8 6MWW BRN MODE5 8 6NBG BRN MODE6 8 6NW6 BRN MODE7 9 6P*Q BRN NMODNR 9 6PTB BRN MODE11 9 6Q*2 BRN MODE12 9 6QSL BRN NMODNR 9 6R#= BRN NMODNR 9 6RRW BRN NMODNR 9 6S?G BRN NMODNR 9 6SR6 BRN NMODNR 9 6T=Q BRN NMODNR 9 6TQB BRN MODE21 9 6W=2 BRN MODE22 9 6WPL BRN MODE23 4 6X9= # 4 6XNW # 21 6Y8G # ********************************************************************* 4 6YN6 # 20 6_7Q # THIS SECTION LOOKS AFTER THE MODES 0 ,2 ,#12. THEY SHARE THE CODE 20 6_MB # WHICH CHECKS THE COUNT AND WHICH MOVES THE DATA INTO THE PROGRAM. 4 7272 # 15 72LL # SUBROUTINE TO CHECK THE COUNT. CALLED ON X6 4 736= # 6 73KW READCOUNT 17 745G NGX 0 ACA3(2) [NEGATE COUNT FIELD 18 74K6 BPZ 0 NILCOUNT [J IF COUNT ZERO OR NEG 8 754Q ADN 0 512 16 75JB BNG 0 NILCOUNT [J IF COUNT > 511 7 7642 EXIT 6 0 4 76HL # 20 773= # MODE 0 CALLS FHOBJIND TO PERFORM THE COMPLEX AND BULKY INDEXING 20 77GW # ROUTINES. IT THEN MERGES WITH MODE 2. IF THE RECORD IS NOT FOUND 20 782G # THEN A NULL RECORD IS TRANSFERRED TO THE PROGRAM. IF THE FILE IS 21 78G6 # NOW POSITIONED AFTER EOF WE JUMP TO THE APPROPRIATE EXCEPTION CODE 4 78_Q # 5 79FB MODE0 17 79_2 CALL 6 READCOUNT [PERFORM COUNT CHECK 21 7=DL ACROSS FHOBJIND,1 [DO INDEXED SEARCH IGNORING SUBKEYS 2 7=Y= 18 7?CW M0FOUND [RETURNS HERE IF FOUND 15 7?XG STEPAGAIN [X3->RECORD 9 7#C6 BRN READMOVE 5 7#WQ NOTFOUND 20 7*BB JBS READEOF,2,MFHRECEOF [J IF INDEXING ROUTINES LEFT US 18 7*W2 [POSITIONED AFTER EOF. 20 7B*L BRN NULLREC [OTHERWISE JUST GIVE PROGRAM NULL 14 7BT= [RECORD 4 7C#W # 7 7CSG # ********** 4 7D#6 # 20 7DRQ # MODE2 IS QUITE COMPLICATED. FIRST WE CHECK FOR AN ONLINED *FH. 20 7F?B # IF THIS IS THE CASE THE MOP ROUTINES ARE INVOKED TO READ THE DATA 17 7FR2 # INTO A FILE FRB AND WE JUMP AHEAD TO DEAL WITH IT. 4 7G=L # 5 7GQ= MODE2 17 7H9W CALL 6 READCOUNT [PERFORM COUNT CHECK 20 7HPG INMOP PERI,YESOL3 [IF OL BRN TO YESOL3 WITH FRB. 4 7J96 # 7 7JNQ # ********** 4 7K8B # 20 7KN2 # HAVING ESTABLISHED THAT ITS A NORMAL ASSIGNED FILEHANDLER WE READ 10 7L7L # THE DATA FROM THE FILE 4 7LM= # 6 7M6W STEP 20 7MLG TESTREP2 STEPWAIT,STEPWAIT [REPLY GIVEN IN COMMUNE MODE WHEN 18 7N66 [AT EOF WITH APPENDERS 19 7NKQ BZE 3 READEOF [J IF READ OFF END OF FILE 4 7P5B # 7 7PK2 # ********** 4 7Q4L # 20 7QJ= # NEXT WE CARRY OUT THE COMMON 'MOVE IN DATA' PATH OF MODES 0,2,#12 6 7R3W # X3->DATA 4 7RHG # 5 7S36 READMOVE 16 7SGQ LDEX 6 FRH(3) [RECORD LENGTH 21 7T2B SBN 6 1 [LESS 1 FOR RECHEAD WE DONT TRANSFER 18 7TG2 [=AMOUNT OF DATA TO MOVE. 16 7T_L LDX 0 ACA3(2) [SIZE OF BUFFER 18 7WF= BXGE 0 6,READNOUGH [J IF BUFFER BIG ENOUGH 19 7WYW LDX 6 0 [OTHERWISE SET X6=BUFFER SIZE 21 7XDG LDCT 7 #200 [AND SET LONG BLOCK MARKER IN REPLY 6 7XY6 READNOUGH 19 7YCQ ADN 3 1 [X3->FIRST WORD TO BE MOVED 19 7YXB LDX 4 AWORK2(2) [X4=ADDR OF BUFFER IN PROGRAM 19 7_C2 FINMOVE APETADDR(2),4,3,6,HLOCK2,2[MOVE DATA INTO PROGRAM 4 7_WL # 7 82B= # ********** 4 82TW # 20 83*G # THIS SUBSECTION SETS UP THE REPLY WORD AND JUMPS TO THE WINDING 17 83T6 # UP ROUTINE. IT EXPECTS X6=AMOUNT OF DATA TRANSFERRED 4 84#Q # 5 84SB READREP 20 85#2 ADX 6 AWORK2(2) [WORD IN PROGRAM AFTER LAST WORD 15 85RL [TRANSFERRED 19 86?= ANDX 6 MASKREPADDR(1) [MASK OUT ALL BUT LS 18 BITS 18 86QW ORX 7 6 ['OR' ADDRESS INTO REPLY 21 87=G VFREE FILE,FRB [SOME OF THE READ MODES LEAVE A FRB 18 87Q6 BRN SETREP [SET REPLY AND WIND UP 17 889Q MASKREPADDR #777777 [MASK OF LS 18 BITS 4 88PB # 7 8992 # ********** 4 89NL # 20 8=8= # A LOOSE END FROM IMPLEMENTATION OF MODE 0 - WE MUST TRANSFER A 20 8=MW # NULL RECORD IF WE COULDNT FIND THE RECORD REQUIRED. THIS IS ALSO 18 8?7G # USED BY ANY ROUTINE WHICH HITS END OF FILE WHILE READING. 4 8?M6 # 5 8#6Q NULLREC 17 8#LB LDN 6 0 [ZERO LENGTH TRANSFER 17 8*62 BRN READREP [GO TO SET UP REPLY 4 8*KL # 7 8B5= # ********** 4 8BJW # 20 8C4G # MODE #12 IS ONLY PERMITTED AS THE FIRST PERI ON A CHANNEL. AFTER 19 8CJ6 # THAT WE DO NOT RECOGNISE IT. IT IS SUBJECT TO THE SAME COUNT 20 8D3Q # CHECK AS MODES 0 AND 2. IT IS ACTUALLY IMPLEMENTED IN FHOBJIND AS 21 8DHB # IT IS NOT STRAIGHTFORWARD AND IS RELATIVELY RARE. FHOBJIND RETURNS 10 8F32 # WITH THE DATA IN A FRB. 4 8FGL # 5 8G2= MODE12 18 8GFW JBS NMODNR,2,MFHNOT1ST [ILLEGAL IF NOT 1ST PERI 17 8G_G CALL 6 READCOUNT [PERFORM COUNT CHECK 21 8HF6 ACROSS FHOBJIND,12 [SETS UP A FRB CONTAINING THE DATA 18 8HYQ [AND RETURNS TO YESOL3 4 8JDB # 7 8JY2 # ********** 4 8KCL # 16 8KX= # MODE 2 ONLINE CASE SETS UP A FRB AND JUMPS HERE 4 8LBW # 5 8LWG YESOL3 10 8MB6 MHUNTW 3,FILE,FRB 8 8MH# ... LDX 0 A1(3) 9 8MNG ... BZE 0 READEOF 14 8MTQ ADN 3 A1 [X3->DATA 19 8N*B BRN READMOVE [HAVING GOT A PTR TO THE DATA 16 8NT2 [REJOIN MAIN PATH 4 8P#L # 21 8PS= # ******************************************************************** 4 8Q?W # 16 8QRG # THE FOLLOWING SECTION DEALS WITH MODES 1,3,AND 4. 4 8R?6 # 16 8RQQ # SUBROUTINE TO PERFORM COUNT CHECKS. CALLED ON X6. 4 8S=B # 6 8SQ2 WRITECOUNT 15 8T9L NGX 0 ACA3(2) [NEGATE COUNT 19 8TP= BPZ 0 NILCOUNT [ILLEGAL IF COUNT NEG OR ZERO 18 8W8W ADN 0 501 [AND ALSO IF COUNT>501 9 8WNG BNG 0 NILCOUNT 16 8X86 EXIT 6 0 [OTHERWISE EXIT 4 8XMQ # 20 8Y7B # SUBROUTINE TO MOVE DATA OUT OF PROGRAM TO AREA POINTED AT BY X4. 12 8YM2 # CALLED ON X6,DESTROYS X3 AND X4. 4 8_6L # 6 8_L= WRITEMOVE 16 925W LDX 3 AWORK2(2) [X3->DATA IN PROG 15 92KG FOUTMOVE APETADDR(2),3,4,ACA3(2),HLOCK2,2 7 9356 EXIT 6 0 4 93JQ # 20 944B # SUBROUTINE TO SET UP A FWB AND MOVE BUFFER INTO IT ADDING RECORD 15 94J2 # HEADER. CALLED ON X6,USES X3,4. COORDINATES. 4 953L # 5 95H= WRITEFWB 8 962W SBX 6 FX1 14 96GG LDX 4 ACA3(2) [COUNT 19 9726 ADN 4 1 [PLUS 1 ROR RECORD HEADER. 15 97FQ SETUPCORE 4,3,FILE,FWB [SET UP BLOCK 17 97_B STO 4 A1(3) [STORE RECORD HEADER 15 98F2 STO 6 ACOMMUNE1(2) [SAVE LINK 19 98YL LDN 4 A1+1(3) [ADDR TO WHICH TO MOVE DATA 17 99D= CALL 6 WRITEMOVE [MOVE DATA INTO BLOCK 18 99XW LDX 6 ACOMMUNE1(2) [RESTORE LINK AND EXIT 8 9=CG ADX 6 FX1 7 9=X6 EXIT 6 0 4 9?BQ # 7 9?WB # ********** 4 9#B2 # 21 9#TL # MODE 1 IS IMPLEMENTED DIFFERENTLY FOR THE ONLINE AND NORMAL CASES. 20 9**= # WE TAKE THE ONLINE CASE FIRST. THE DATA IS MOVED INTO A FWB. IT 21 9*SW # IS THEN SUBJECTED TO AN INTEGRITY CHECK FORCED BY THE MOP ROUTINES 21 9B#G # AND NAMED AN FRB. THE MOP ROUTINES ARE THEN CALLED TO DEAL WITH IT. 4 9BS6 # 5 9C?Q MODE1 15 9CRB CALL 6 WRITECOUNT [CHECK COUNT 16 9D?2 WHICHMOP NOTOLMODE1 [J IF NORMAL CASE 17 9DQL CALL 6 WRITEFWB [SET UP FWB WITH DATA 10 9F== MHUNTW 3,FILE,FWB 18 9FPW NAME 3,FILE,FRB [MOP ROUTINES WANT A FRB. 21 9G9G LDX 0 A1(3) [THEY ALSO CANNOT COPE IF B0 AND 1 20 9GP6 SBN 0 2 [OF THE PFCC WORD ARE SET FOR A 15 9H8Q BNZ 0 NOTNULLREC [BLANK LINE. 9 9HNB LDX 0 A1+1(3) 7 9J82 SLL 0 2 7 9JML SRL 0 2 9 9K7= STO 0 A1+1(3) 6 9KLW NOTNULLREC 15 9L6G OUTMOP SETREP,PERI [OUTPUT LINE 17 9LL6 BRN SETREP [J TO WIND UP CODE 4 9M5Q # 7 9MKB # ********** 4 9N52 # 20 9NJL # IN THE NORMAL CASE WE MOVE THE DATA DIRECT FROM PROGRAM TO FILE 10 9P4= # AND EXIT TO WIND UP CODE 4 9PHW # 6 9Q3G NOTOLMODE1 14 9QH6 LDX 2 ACA3(2) [COUNT 18 9R2Q STEP ,1(2),ANSWER [SET UP [2]+1 WORD RECORD 20 9RGB TESTREP2 APPWAIT,XAPPWAIT,FILEFULL,XFILEFULL,GLUTTON,TOOMUCH 17 9S22 LDX 0 ACA3(2) [SET UP RECORD HEADER 7 9SFL ADN 0 1 9 9S_= STO 0 FRH(3) 18 9TDW LDN 4 FRH+1(3) [X4->DESTINATION OF DATA 15 9TYG CALL 6 WRITEMOVE [MOVE DATA 16 9WD6 BRN SETREP [J TO WINDUP CODE 4 9WXQ # 7 9XCB # ********** 4 9XX2 # 20 9YBL # MODE3 IS SIMPLE IF THE FILE IS NOT INDEXED. WE SIMPLY MOVE THE 21 9YW= # DATA OUT TO A FWB AND DO A REPLACE. THE CHECKS FOR AN INDEXED FILE 11 9_*W # ARE IMPLEMENTED ELSEWHERE. 4 9_TG # 5 =2*6 MODE3 18 =2SQ CALL 6 WRITECOUNT [CARRY OUT COUNT CHECK 16 =3#B CALL 6 WRITEFWB [SET UP THE FWB 7 =3S2 TOPFCB2 3 8 =4?L LDN 6 #77 9 =4R= ANDX 6 FINFC(3) 18 =5=W BZE 6 NOTINDMODE3 [J IF NOT AN INDEXED FILE 16 =5QG ACROSS FHOBJIND,3 [PERFORM CHECKS 17 =6=6 NOTINDMODE3 [RETURNS HERE IF OK 17 =6PQ REPLACE [REWRITE THE RECORD 4 =79B # 7 =7P2 # ********** 4 =88L # 20 =8N= # AFTER A MODE 3 OR 4 WE JUST CHECK THAT FILEFULL HASNT OCCURRED 14 =97W # FREE THE FWB AND JUMP TO THE WINDUP CODE 4 =9MG # 6 ==76 MODE34END 9 ==LQ MFREEW FILE,FWB 16 =?6B TESTREP2 FILEFULL,XFILEFULL,GLUTTON,TOOMUCH 17 =?L2 BRN SETREP [JUMP TO WINDUP CODE 4 =#5L # 7 =#K= # ********** 4 =*4W # 20 =*JG # MODE 4 IS LIKE MODE 3 EXCEPT THAT WE DO AN INSERT INSTEAD OF A 19 =B46 # REPLACE AND A DIFFERENT PIECE OF INDEXED FILE CODE IS OBEYED. 4 =BHQ # 5 =C3B MODE4 18 =CH2 CALL 6 WRITECOUNT [CARRY OUT COUNT CHECK 16 =D2L CALL 6 WRITEFWB [SET UP BUFFER 7 =DG= TOPFCB2 3 8 =D_W LDN 6 #77 17 =FFG ANDX 6 FINFC(3) [NON ZERO IF INDEXED 10 =F_6 BZE 6 NOTINDMODE4 20 =GDQ ACROSS FHOBJIND,4 [PERFORM SPECIAL INDEXED ACTION 20 =GYB NOTINDMODE4 [RETURNS HERE IF UNKEYED RECORD 19 =HD2 CALL 6 TESTBOF [ENSURE NOT BEGINNING OF FILE 21 =HXL OKINDMODE4 [RETURNS HERE IF OK AND KEYED RECORD 6 =JC= INSERT 9 =JWW BRN MODE34END 4 =KBG # 21 =KW6 # ******************************************************************** 4 =L*Q # 19 =LTB # THIS SECTION DEALS WITH THE OTHER MODES, MOST OF WHICH ARE 10 =M*2 # IMPLEMENTED ELSEWHERE. 4 =MSL # 19 =N#= # MODE 5 IS THE SIMPLEST OF THE LOT AND NEEDS NO EXPLANATION. 4 =NRW # 5 =P?G MODE5 6 =PR6 DELETE 17 =Q=Q BRN SETREP [J TO WIND UP CODE 4 =QQB # 7 =R=2 # ********** 4 =RPL # 20 =S9= # MODE 6 INVOKES THE HUGE 'CURTAIL' MACRO, AND IS THE RAREST OF THE 13 =SNW # LOT SO WE IMPLEMENT IT IN FHOBJIND. 4 =T8G # 5 =TN6 MODE6 10 =W7Q ACROSS FHOBJIND,56 4 =WMB # 7 =X72 # ********** 4 =XLL # 19 =Y6= # MODE 7 IS RELATIVELY RARE AND ISN'T THAT SIMPLE SO IT TOO IS 6 =YKW # BANISHED. 4 =_5G # 5 =_K6 MODE7 10 ?24Q ACROSS FHOBJIND,7 7 ?2JB # ********** 4 ?342 # 21 ?3HL # MODE #11 IS PROBABLY AS RARE AS CURTAIL - IT IS ALLOWED AS THE FIRST 19 ?43= # PERI ON DA,DR AND MT FILES ONLY, SO IT ALSO GOES TO FHOBJIND. 4 ?4GW # 5 ?52G MODE11 18 ?5G6 JBS NMODNR,2,MFHNOT1ST [ILLEGAL IF NOT 1ST PERI 10 ?5_Q ACROSS FHOBJIND,11 4 ?6FB # 7 ?6_2 # ********** 4 ?7DL # 20 ?7Y= # THE REMAINING BLOCK MODES ARE NATURALLY IMPLEMENTED IN FHOBJBL. 4 ?8CW # 5 ?8XG MODE21 10 ?9C6 ACROSS FHOBJBL,21 5 ?9WQ MODE22 10 ?=BB ACROSS FHOBJBL,22 5 ?=W2 MODE23 10 ??*L ACROSS FHOBJBL,23 4 ??T= # 21 ?##W # ******************************************************************** 4 ?#SG # 21 ?*#6 # THIS SECTION, THE WIND UP CODE, IS USED BY ALL PERIS EXCEPT FOR MODE 21 ?*RQ # #22 WHICH GOES AUTONOMOUS AND PERIS WHICH GO ILLEGAL. WE PUT THE REPL 20 ?B?B # FROM X7 INTO THE PROGRAM AND DO AN OLPEND WHICH SENDS US WAITING 9 ?BR2 # FOR THE NEXT PERI. 19 ?BY8 ...# SOME PATHS TRANSFER HERE WITH X1 NOT FX1. CURRENTLY SETREP 18 ?C5B ...# DOES NOT NEED X1=FX1 SO WE TAKE NO STEPS TO CORRECT IT. 4 ?C=L # 5 ?CQ= SETREP 19 ?D9W BS 2,MFHNOT1ST [SHOW A PERI HAS BEEN DONE 19 ?DPG LDX 3 ACAP(2) [X3->CONTROL AREA IN PROGRAM 19 ?F96 ADN 3 1 [X3->REPLY WORD IN PROGRAM 19 ?FNQ FADDRESS APETADDR(2),3,HLOCK1,2 [X3->REPLY IN GEORGE CORE 15 ?G8B STO 7 0(3) [STORE REPLY 21 ?GN2 OLPEND [KICK PROG AND WAIT FOR NEXT PERI. 20 ?H7L BRN PERI [LOOP BACK TO START OF SEGMENT 4 ?HM= # 21 ?J6W # ******************************************************************** 4 ?JLG # 19 ?K66 # THIS IS THE EXCEPTION PART OF THE SEGMENT, WHICH CONTAINS ALL 11 ?KKQ # ILLEGAL, EOF ,LIMIT ETC CODE. 4 ?L5B # 21 ?LK2 # SUBROUTINE TO SET BITS 3+5 OF X7 IF PROGRAM IS USING OWN MONITORING 7 ?M4L # CALLED ON X6 4 ?MJ= # 5 ?N3W MCHOWN 15 ?NHG LDX 0 ACA1(2) [MODE WORD 7 ?P36 SRL 0 6 18 ?PGQ ANDN 0 #777 [EXTRACT ADDITIVE MODE 8 ?Q2B SBN 0 #300 17 ?QG2 BNZ 0 (6) [EXIT IF NOT OWN MON 20 ?Q_L LDCT 7 #050 [ELSE SET OWN MON BITS IN REPLY 7 ?RF= EXIT 6 0 4 ?RYW # 20 ?SDG # SUBROUTINE TO CHECK FOR AND IF NECESSARY IMPLEMENT A SWITCH OF 19 ?SY6 # MULTIFILE ELEMENTS. IF THIS CAN BE DONE WE DO IT AND JUMP TO 20 ?TCQ # THE BEGINNING OF THE SEG TO REPEAT THE PERI WITH THE NEW ELEMENT. 20 ?TXB # OTHERWISE WE EXIT. IF NECESSARY THE 'END OF MULTIFILE' BIT WILL 8 ?WC2 # HAVE BEEN SET. 4 ?WWL # 6 ?XB= MULTSWITCH 16 ?XTW SBX 6 FX1 [RELATIVISE LINK 17 ?Y*G LDX 5 6 [AND SAVE IT IN X5 18 ?YT6 COMPQU NOTAMULT [EXIT IF NOT A MULTIFILE 20 ?_#Q BRN PERI [REPEAT PERI IF SWITCH SUCCESSFUL 20 ?_SB BS 2,MFHEOFMULT [OTHERWISE SET 'EOF MULT ' BIT 19 #2#2 CALL 6 MCALOCK [RELOCK CONTROL AREA (COMPQU 17 #2RL [CLEARS ALL LOCKS) 5 #3?= NOTAMULT 15 #3QW ADX 5 FX1 [RESTORE LINK 7 #4=G EXIT 5 0 4 #4Q6 # 20 #59Q # SUBROUTINE TO RESET OLPA LINK TO START OF SEGMENT AND TRANSFER TO 20 #5PB # THE PCA. THIS IS ALWAYS DONE BEFORE GOING ACROSS TO OLPODD FOR 14 #692 # SOME REASON (E.G. TO ISSUE AN ILLEGAL). 4 #6NL # 5 #78= TOPCA 10 #7MW TOPCA1 RESETLINK(1) 7 #87G EXIT 6 0 6 #8M6 RESETLINK 21 #96Q PAIR FHOBJ,1 [REENTRY POINT WHEN OLPA REACTIVATED 4 #9LB # 20 #=62 # SUBROUTINE TO CARRY OUT THE DRM CODE FOR READING COMMUNAL FILES. 20 #=KL # IT EXITS 0 IF DRM NOT IN USE. OTHERWISE IT EXIT 1 WITH ALL DRM 8 #?5= # UPDATING DONE. 4 #?JW # 5 ##4G READDRM 21 ##J6 FDRMTEST STEPWAIT,RDNDRM [CHECK IF DRM AND DO UPDATING IF SO 18 #*3Q ADN 6 1 [FALLS THRU IF TWAS DRM 5 #*HB RDNDRM 8 #B32 LDX 1 FX1 19 #BGL EXIT 6 0 [EXIT +0 OR +1 AS REQUIRED 4 #C2= # 12 #CFW # DITTO: FOR APPENDING TO A FILE. 4 #C_G # 5 #DF6 WRITEDRM 15 #DYQ FDRMTEST APPWAIT,WRNDRM [AS BEFORE. 7 #FDB ADN 6 1 5 #FY2 WRNDRM 8 #GCL LDX 1 FX1 7 #GX= EXIT 6 0 4 #HBW # 7 #HWG # ********** 4 #JB6 # 21 #JTQ # END OF FILE WHILE READING A FILE. WE FIRST CARRY OUT THE DRM CHECK 20 #K*B # AND UPDATING. IF THE CHECK PROVES POSITIVE WE BACKSPACE AND SET 21 #KT2 # A 'REJECTED, INOPERABLE' REPLY. ( THE CORRECT REPLY WHEN THERE ARE 20 #L#L # NO APPENDERS. IF THERE HAD BEEN APPENDERS STEP WOULD HAVE SET THE 15 #LS= # STEPWAIT REPLY WHICH IS DEALT WITH BELOW.) 4 #M?W # 5 #MRG READEOF 16 #N?6 CALL 6 READDRM [DO DRM CHECKS 15 #NQQ BRN READNODRM [J IF NOT DRM 17 #P=B BACKSPACE [RESET READ POINTERS 17 #PQ2 LDCT 7 #410 [REJECTED INOPERABLE 16 #Q9L BRN SETREP [J TO WINDUP CODE 4 #QP= # 20 #R8W # IT'S NOT DRM. WE CHECK TO SEE IF THIS IS A MULTIFILE WITH FURTHER 21 #RNG # ELEMENTS, DOING A SWITCH AND BRANCHING BACK TO THE START IF IT IS. 21 #S86 # OTHERWISE WE SET THE END OF FILE MARKER AND JUMP BACK TO GIVE A NULL 21 #SMQ # TRANSFER. IF OWN MONITORING IS BEING USED WE FIRST SET THE OWN MON 9 #T7B # BITS IN THE REPLY. 4 #TM2 # 6 #W6L READNODRM 17 #W=H ... WHICHMOP READMULTQ [JUMP IF NOT OL *FH 18 #WBD ... BRN READJDFEND [JDF CANNOT BE A MULTIFILE 6 #WG* ...READMULTQ 21 #WL= CALL 6 MULTSWITCH [IS IT A MULTIFILE WITH MORE ELEMS 6 #WW4 ...READJDFEND 21 #X5W CALL 6 MCHOWN [NO. SET OWN MON BITS IF APPLICABLE. 16 #XKG BS 2,MFHRECEOF [SET EOF MARKER. 20 #Y56 BRN NULLREC [JUMP BACK INTO READ SECTION TO 20 #YJQ [SIMULATE A ZERO LENGTH RECORD 4 #_4B # 7 #_J2 # ******** 4 *23L # 20 *2H= # IF A STEPWAIT REPLY IS GIVEN WHILE READING END OF FILE HAS BEEN 20 *32W # REACHED BUT THERE IS AN APPENDER. IF ITS DRM WE SET A 'REJECTED, 20 *3GG # OPERABLE' REPLY. THERE IS NO NEED TO BACKSPACE SINCE STEP HASNT 14 *426 # ADVANCED THE READ POINTERS IN THIS CASE. 4 *4FQ # 5 *4_B STEPWAIT 16 *5F2 CALL 6 READDRM [DO DRM CHECKS. 15 *5YL BRN WAITCOMMUNE [J IF NOT DRM 17 *6D= LDCT 7 #420 [REJECTED OPERABLE 17 *6XW BRN SETREP [J TO WIND UP CODE 4 *7CG # 21 *7X6 # IF ITS NOT DRM WE GO ACROSS TO OLPODD TO WAIT FOR THE OTHERS TO DO 16 *8BQ # SOMETHING. (THIS IS ALSO USED IN THE WRITE CASE) 4 *8WB # 6 *9B2 WAITCOMMUNE 17 *9TL CALL 6 TOPCA [TRANSFER TO THE PCA 9 *=*= ACROSS OLPODD,1 4 *=SW # 7 *?#G # ********** 4 *?S6 # 21 *#?Q # HERE WE DEAL WITH THE FILEFULL CONDITION ON WRITING.THIS IS SIMILAR 21 *#RB # TO THE END OF FILE CONDITION WHILE READING. FIRST WE CHECK FOR DRM 16 **?2 # AND SET A 'REJECTED,INOPERABLE' REPLY IT IT IS. 4 **QL # 6 *B== XFILEFULL 18 *BPW CALL 6 WRITEDRM [CARRY OUT DRM CHECKS. 15 *C9G BRN WRITENOTDRM [J IF NOT DRM 17 *CP6 LDCT 7 #410 [REJECTED INOPERABLE 16 *D8Q ... BRN SETREP [J TO WINDUP CODE 4 *DNB # 21 *F82 # IF ITS NOT DRM WE MUST SWITCH M/F ELEMENTS , SET AN OWN-MON REPLY, 11 *FML # OR ILLEGAL AS APPROPRIATE. 4 *G7= # 6 *GLW WRITENOTDRM 19 *H6G CALL 6 MULTSWITCH [SWITCH M/F ELEM IF POSSIBLE 6 *HL6 NILOUTFULL 20 *J5Q CALL 6 MCHOWN [OTHERWISE SET OWNMON REPLY IF 21 *JKB [OWN MON. X7 WILL STILL BE ZERO IF 13 *K52 [NOT. 19 *KJL BNZ 7 SETREP [J TO WINDUP IF TWAS OWNMON. 20 *L4= LDN 3 FYOUTFULL [SET ILLEGAL AND JUMP TO THE CODE 20 *LHW BRN PARAMILL [WHICH DEALS WITH ILLEGALS WITH A 20 *M3G [A PERIPHERAL TYPE/NO PARAMETER 16 *MH6 [(LIKE THIS ONE). 4 *N2Q # 7 *NGB # ********** 4 *P22 # 21 *PFL # IF WE GET AN APPWAIT REPLY FROM STEP(APPEND) WE HAVE FILLED A FILE 20 *P_= # WITH GDR READERS. AS BEFORE WE DO A DRM CHECK, SETTING 'REJECTED, 21 *QDW # OPERABLE' IF IT IS DRM, JOINING THE READ CODE AS IT GOES TO OLPODD 7 *QYG # IF IT ISN'T. 4 *RD6 # 5 *RXQ XAPPWAIT 15 *SCB CALL 6 WRITEDRM [DO DRM CHECK 16 *SX2 BRN WAITCOMMUNE [J IF IT ISN'T 17 *TBL LDCT 7 #420 [REJECTED OPERABLE. 16 *TW= BRN SETREP [J TO WINDUP CODE 4 *W*W # 7 *WTG # ********** 4 *X*6 # 20 *XSQ # A FURTHER PERI HAS BEEN ISSUED FOR A MULTIFILE WHICH IS FULL OR 21 *Y#B # EXHAUSTED. WE TREAT IT AS FILE FULL OR END OF FILE DEPENDING ON THE 21 *YS2 # SETTING OF AWORK1 WHICH HAS NOT BEEN DISTURBED SINCE THE CONDITION 8 *_?L # ORIGINALLY AROSE. 4 *_R= # 5 B2=W MEOF1 17 B2QG LDCT 0 #200 [MASK FOR WRITE PERI 8 B3=6 ORN 0 #0100 9 B3PQ ANDX 0 AWORK1(2) 16 B49B BNZ 0 NILOUTFULL [J IF FILE FULL 4 B4P2 # 4 B58L # 7 B5N= # ********** 4 B67W # 19 B6MG # WE HAVE RECEIVED A FURTHER READ ON A FILE WHICH IS EXHAUSTED. 19 B776 # WE EITHER ILLEGAL OR GIVE AN OWN MON REPLY AS APPROPRIATE. 4 B7LQ # 5 B86B NILEOF 19 B8L2 CALL 6 MCHOWN [SET REPLY IN X7 IF OWNMON 20 B95L BNZ 7 SETREP [IF REPLY SET J TO WINDUP CODE 6 B9K= OUTILLEOF 14 B=4W LDN 3 FYENDFILE [ILLEGAL 4 B=JG # 7 B?46 # ********** 4 B?HQ # 21 B#3B # WE ARE ISSUING AN ILLEGAL WITH A PERIPHERAL TYPE/NUMBER PARAMETER. 17 B#H2 # BEFORE GOING TO OLPODD WE SET THIS PARAMETER IN X4 4 B*2L # 5 B*G= PARAMILL 9 B*_W LDX 4 FTYPNO(2) 4 BBFG # 7 BB_6 # ********** 4 BCDQ # 11 BCYB # ILLEGALS ARE DONE BY OLPODD. 4 BDD2 # 5 BDXL OUTILL 16 BFC= CALL 6 TOPCA [CHANGE TO PCA 9 BFWW ACROSS OLPODD,4 4 BGBG # 7 BGW6 # ********** 4 BH*Q # 19 BHTB # WE HAVE TRIED A MODE WHICH IS ILLEGAL AT BEGINNING OF FILE. 15 BJ*2 # AS USUAL ILLEGAL OR GIVE OWN MONITORING REPLY 4 BJSL # 5 BK#= NILBOF 18 BKRW VFREEW FILE,FWB [MAY BE A FWB IF MODE #4 17 BL?G LDX 1 FX1 [CORRUPTED BY VFREE 19 BLR6 CALL 6 MCHOWN [IF OWNMON SET OWNMON REPLY 20 BM=Q BNZ 7 SETREP [IF REPLY SET J TO WINDUP CODE 6 BMQB OUTILLBOF 9 BN=2 LDN 3 FYBEGFILE 9 BNPL BRN OUTILL 4 BP9= # 7 BPNW # ********** 4 BQ8G # 13 BQN6 # ILLEGAL MODE WITH GIVEN FILE TYPE. 4 BR7Q # 5 BRMB NILLTYPE 9 BS72 LDN 3 FYILLMOD 9 BSLL BRN OUTILL 4 BT6= # 7 BTKW # ********** 4 BW5G # 13 BWK6 # ILLEGAL MODE WITH GIVEN ACCESS MODE. 4 BX4Q # 5 BXJB NILLAC 9 BY42 LDN 3 FYILLAC 9 BYHL BRN OUTILL 4 B_3= # 7 B_GW # ********** 4 C22G # 8 C2G6 # LIMIT EXCEEDED 4 C2_Q # 5 C3FB NILLIMIT 9 C3_2 LDN 3 FYOUTPUT 9 C4DL BRN PARAMILL 4 C4Y= # 7 C5CW # ********** 4 C5XG # 9 C6C6 # RESERVATION VIOLATION 4 C6WQ # 5 C7BB RESVIOL 8 C7W2 LDX 1 FX1 20 C8*L LDX 2 FX2 [NOT RESET BY CHECKB ON RES VIOL. 9 C8T= LDN 3 FYNOBUF 9 C9#W BRN OUTILL 4 C9SG # 7 C=#6 # ********** 4 C=RQ # 9 C??B # COUNT OUT OF RANGE. 4 C?R2 # 5 C#=L NILCOUNT 9 C#Q= LDN 3 FYCOUNT 9 C*9W BRN OUTILL 4 C*PG # 7 CB96 # ********** 4 CBNQ # 9 CC8B # MODE NOT RECOGNISED 4 CCN2 # 5 CD7L NMODNR 9 CDM= LDN 3 FYMODE 9 CF6W BRN OUTILL 4 CFLG # 7 CG66 # ********** 4 CGKQ # 8 CH5B # DATA FORMAT ERROR 4 CHK2 # 5 CJ4L NILDATA 9 CJJ= LDN 3 FYDATAER 9 CK3W BRN OUTILL 4 CKHG # 7 CL36 # ********** 4 CLGQ # 4 CM2B # 17 CMG2 # BACKING STORE LIMIT EXCEEDED. DEALT WITH BY OLPODD. 4 CM_L # 5 CNF= TOOMUCH 16 CNYW CALL 6 TOPCA [CHANGE TO PCA 9 CPDG ACROSS OLPODD,2 4 CPY6 # 4 CQCQ # 4 CQXB # 10 CRC2 MENDAREA 30,K99FHOBJ 4 CRWL # 4 CSB= #END 6 ____ ...621402200009