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