MTOBJ864

(George Source)

Macros used: ACROSS, AUTFIN, AUTSTART, BFCBX, BLAM, BS, BXE, BXGE, BXL, BXU, CHAIN, CHECKA, DOWN, FILEAUTW, FILEREAD, FILETRAN, FINMOVE, FOUTMOVE, FREECORE, HUNTW, INMOVE, JBC, JBS, LINK, MARK, MEND, MENDAREA, NAME, NAMEX, OUTMOVE, PMODES, PSTAC, READ, SEG, SEGENTRY, SETBIT, TCLOSE, TESTREP2, TESTRPN2, TOPCA, TOPCA1, TOPFCA2, TOPFCAB2, TOPFCB2, TRACEIF, UP, VFREEW

MTOBJ864.txt
2263 ...      SEG   MTOBJ,8,FILE,OLP
22=4 ...      SEGENTRY K1MTOBJ,Z1MTOBJ     [RE-ENTRY FOR ALL PERIS  
22B5 ...      SEGENTRY K3MTOBJ,SETREPLY    [ENTRY FROM MTSTART IF 1ST PERI IS   
22G6 ...                                   [ AN OPEN MODE   
22L7 ...      SEGENTRY K7MTOBJ,READINDEX   [ENTRY FROM MTSTART & MATALO TO GET  
22Q8 ...                                   [ INDEX BLOCK INTO FILE CHAIN
22W9 ...[   
232= ...[  THIS SEGMENT IMPLEMENTS ALL OBJECT PROGRAM TRANSFER PERIS TO 
236? ...[ FILESTORE MAGNETIC TAPE FILES.
23=# ...[ IT PERFORMS ALL TRANSFERS BETWEEN THE INDEX FILE AND THE OBJECT   
23B* ...[ PROGRAM & USES K5MTCODE TO PERFORM BULK TRANSFERS.
23GB ...[ OTHER ROUTINES IN MTCODE ARE USED TO EXTEND & CONTRACT THE FILE   
23LC ...[   
23QD ...[ MTSTART IS ENTERED TO IMPLEMENT RENAME & CLOSE PERIS  
23WF ...[   
242G ...[   
246H ...[ THIS SEGMENT PERFORMS INDEX TRANSFERS FOR ALL FILESTORE MT SEGMENTS   
24=J ...[ & CONTROLS FREEING OF INDEX BUFFER BLOCKS 
24BK ...[ ONLY ONE INDEX BUFFER BLOCK CAN EXIST IF THE FILE IS BEING WRITTEN
24GL ...[ HOWEVER MTCODE SETS UP AN EMPTY FINDEXW BLOCK WHEN EXTENDING THE FILE.
24LM ...[   
24QN ...[ IT IS ASSUMED THAT COMMUNAL WRITING IS PROHIBITED 
24WP ...[   
252Q ...[ FOR FORMAT OF MT FILESTORE FILES SEE PRM 5.5.3.2  
256R ...[ FREADWORD : B0-11 :INDEX BLOCKLET POINTER RELATIVE TO FBLKS*BLN   
25=S ...[             B12-23:WORD POINTER WITHIN INDEX BLOCKLET 
25CB    [   
25HN ...[     FORMAT OF AOLPT EXTENSION 
25N2 ...[     ACA1  )   
25S# ...[     ACA2  )  NORMAL 4 WORD
25YL ...[     ACA3  )      CONTROL AREA 
264Y ...[     ACA4  )   
269= ...[     ACA6     LENGTH OF A TYPE TRANSFER        ) LENGTH ACTUALLY   
26*J ...[     ACA7     LENGTH OF B TYPE TRANSFER        )  TRANSFERRED  
26FW ...[     ACA8     LENGTH OF C TYPE TRANSFER        ) =COUNT<REC.LENGTH 
26L8 ...[     ACA9     START ADDRESS IN FILE
26QG ...[   
26WS ...ZFINDEX                            [INDEX READ BLOCK
2736 ...#HAL  FINDEX+FILE,0                [=FILE+FURRB 
277D ...ZFINDEXW                           [INDEX WRITE BLOCK   
27?Q ...#HAL  FINDEXW+FILE,0               [=FILE+FURWB 
27D4 ...ZFEXTRA 
27JB ...#HAL           FILE+FEXTRA,0
27NN ...[   
27TG    MEND           4HEND               [PRESETS FOR INDEX FILE    END   
28*6 ...QUAL           4HQUAL              [                          QUALIFIER 
28SQ ...MDDR           4HHDDR              [                          HEADER
29#B    MARK           4HMARK              [                          TAPE MARK 
29J8 ...[   
29S2    MODE0          #0                  [READ A BLOCK
2=?L    MODE1          #1                  [WRITE A BLOCK   
2=R=    MODE2          #2                  [READ REVERSE A BLOCK
2?=W    MODE3          #3                  [BACKSPACE   
2?QG    MODE4          #4                  [SKIP FORWARD TO TAPE MARK   
2#=6    MODE5          #5                  [WRITE A TAPE MARK   
2#PQ    MODE6          #6                  [SKIP BACK TO TAPE MARK  
2*9B    MODE7          #7                  [REWIND  
2*P2    MODE500        #500                [RENAME THIS TAPE
2B8L ...MODE1000       #1000               [CLOSE (AND REWIND) ) IDENTICAL  
2BN=    MODE1007       #1007               [CLOSE (AND UNLOAD) )   OFFLINE  
2C5R ...[              TABLE OF OPEN MODES  
2CH# ...OPENMODES      #100 
2CYT ...               #200 
2DBB ...               #300 
2DRX ...               #400 
2F9D ...               #600 
2FL^ ...[   
2G4G ...MAD34          #34000              [OPEN MODE OWN MONITORING BITS   
2GG3 ...[   
2GXJ ...QLINK1 LINK MTOBJ,1                [LINK FOR RE-ENTRY   
2H*5 ...[   
2HQL ...      FILETRAN                     [SUBROUTINES FOR FILEREAD & FILEAUTW 
2J87 ...[   
2JKN ...TIDYUP         [SUBROUTINE TO REWRITE END OF FILE IF EXTENSION FAILS
2K39 ...[              LINK X7; ON EXIT X1=FX1 & X2=FX2 
2KDQ ...      SBX   7  FX1  
2KW? ...      CALL  6  ZINDEX              [GET LAST BLOCKLET OF INDEX  
2L?S ...      NAMEX    1                   [ENSURE IT IS WRITTEN AWAY   
2LP* ...      SBX   3  GSBS4-1+A1(3)       [SUBTRACT BACKWARD POINTER FROM  
2M6W ...      LDX   1  FX1                 [ BLOCKLET ADDRESS   
2MJC ...      LDX   0  MEND(1)  
2M^Y ...      STO   0  GSBS4-1+A1(3)       [REWRITE EOF 
2NCF ...      ADX   7  FX1  
2NT2 ...      EXIT  7  0
2P=H ...[   
2PN4 ...[   
2Q5K ...TOPCA           [SUBROUTINE TO CHANGE TO APET   
2QH6 ...      LDX   1  FX1  
2QYM ...      TOPCA1   QLINK1(1)           [LEAVE LINK TO K1MTOBJ   
2RB8 ...      EXIT  7  0
2RRP ...[   
2S9= ...[   
2SLR ...XCHECK         [SUBROUTINE TO CHECK PROGRAM AREA: LINK X5   
2T4# ...[              EXPECTS X2=FX2, X3=START ADDRESS, X6=LENGTH  
2TFT ...[              (G4:- X4=PERMISSION REQUIRED)
2TXB ...[              LEAVES X1=FX1 & X2=FX2; X3 & X4, X6 & X7 UNCHANGED   
2W#X ...#SKI  G4
2WQD ...      SBX   5  FX1                 [MAY COORDINATE IN G4
2X7^ ...      CHECKA   3,6,XCHECKERR,APETADDR(2),4,XCHECKCOOR,,,K1MTOBJ 
2XKG ...XCHECKCOOR  
2Y33 ...#SKI  G4
2YDJ ...      ADX   5  FX1  
2YW5 ...      EXIT  5  0
2^?L ...[   
2^P7 ...XCHECKERR                          [MUST BE BUFFER ERROR
326N ...      LDN   3  FYNOBUF             [- EXEC CHECKS CONTROL AREA  
32J9 ...      BRN      QERROR   
32^Q ...[   
33C? ...[   
33SS ...#SKI  G4       [SUBROUTINE IN G4 ONLY BECAUSE OF LARGE  
34=* ...(              [ EXPANSION OF FOUTMOVE IN G4
34MW ...OUTMOVE        [MOVE FROM OBJECT PROGRAM
355C ...[   
35GY ...      OUTMOVE APETADDR(2),3,4,6 
35YF ...      EXIT  5  0
36B2 ...)   
36RH ...[   
3794 ...[   
37LK ...ZBLAM          [CONVERT BACK2 OF BLOCK INTO A FREADBLOCK-TYPE MODIFIER  
3846 ...[     LINK X0;  EXPECTS X3->BLOCK  :ON EXIT X1=RESULT; X2->FCB  
38FM ...[     X3-X7 UNCHANGED:  
38X8 ...      STO   0  GEN0                [SAVE LINK   
39#P ...      BLAM     ,3                  [DO CONVERSION   
39Q= ...      BRN      (GEN0)   
3=7R ...[   
3=K# ...[  ZINDEX SEARCH FOR THE CURRENT INDEX BLOCK AS INDICATED BY FREADWORD. 
3?2T ...[ ANY UNUSED INDEX BLOCKS ARE FREED. IF THE REQUIRED BLOCK  
3?DB ...[ IS NOT FOUND IT IS READ FROM BACKING STORE AND ZINDEX STARTS AGAIN.   
3?TX ...[   
3#?D ...[ ENTRY CONDS......X6=LINK  
3#N^ ...[ EXIT CONDS.......X1=X3->INDEX BLOCKLET: X0=FILE+FINDEXW*4096  
3*6G ...[                  X5,X4,AWORK3, DESTROYED,X2=FX2   
3*J3 ...[   
3*^J ...[   
3BC5 ...READINDEX                          [ENTRY POINT TO READ INDEX BLOCKLET  
3BSL ...      LDX   6  FX1                 [TO GIVE AWORK3=0
3C=7 ...[   
3CMN ...ZINDEX         [GET POINTER TO INDEX BLOCK  
3D59 ...      SBX   6  FX1  
3DGQ ...      LDX   2  FX2  
3DY? ...      STO   6  AWORK3(2)           [ STORE LINK 
3F*S ...ZRESTART       [(RE)CALCULATE BLOCKLET NO. AFTER COOR   
3FR* ...               [DURING WHICH COPYFILE MAY HAVE INTERVENED   
3G8W ...      TOPFCAB2 3,1                 [X3->FCA: X1->FCB
3GLC ...      LDX   6  FREADWORD(3)        [B0-11 = BLOCKLET POINTER
3H3Y ...      SRL   6  12   
3HFF ...      LDX   0  6
3HX2 ...      SRL   6  BLS                 [BLK PTR 
3J#H ...      SMO      6
3JQ4 ...      LDX   4  0(1)                [BLOCK NUMBER
3K7K ...      ANDN  0  3
3KK6 ...      ADX   4  0                   [BLT NO. REQUIRED
3L2M ...      LDX   3  FPTR(1)             [X3->FSTACK  
3LD8 ...      LDN   6  0                   [BLOCK NOT YET FOUND 
3LTP ...[   
3M?= ...ZMOREBL12      [RESET X1,X2 & LOOK @ NEXT BLOCK 
3MNR ...[   
3N8B          LDX   1  FX1  
3N?G ...      LDX   2  FX2  
3NBL ...[   
3NFQ ...ZMOREBL        [LOOK @ NEXT BLOCK   
3NJW ...[   
3NN2          LDX   3  FPTR(3)             [ POINT TO NEXT BLK  
3NXS ...      BXE   3  CXFI,NOTFOUND
3P7L          LDX   0  ATYPE(3) 
3PM= ...      BXE   0  FFSFCB,NOTFOUND     [ END OF CHAIN   
3Q6W ...      BXE   0  ZFEXTRA(1),NOTFOUND [END OF !RING
3QLG ...      BXE   0  ZFINDEX(1),READ     [ FINDEX 
3R66          BXU   0  ZFINDEXW(1),ZMOREBL [ NOT FINDEXW
3RG= ...[   
3RWB ...[ A FINDEXW HAS BEEN FOUND THEREFORE THE FILE CANNOT BE COMMUNALLY OPEN 
3S=G ...[   THEREFORE NO-ONE ELSE CAN BE USING THIS ONE 
3SLL ...[   
3T2Q ...      BXU   4  BACK2(3),WRONGINDEXW [J IF WRONG BLOCK   
3TBW ...      BNZ   6  (GEOERR)            [SHOULDN'T FIND SAME BLOCK TWICE 
3TR2 ...      LDX   6  3                   [KEEP BLOCK ADDRESS  
3W76 ...      BRN      ZMOREBL  
3WH= ...[   
3WXB ...WRONGINDEXW 
3X?G ...      CHAIN    3,2                 [MOVE TO ACTIVITY CHAIN  
3XML ...      CALL  0  ZBLAM               [CONVERT TO FREADBLOCK-TYPE MODIFIER 
3Y3Q ...      LDX   5  1                   [ MODIFIER IN X1 FOR FILEAUTW
3YCW ...      DOWN     MTCHECK,3           [ENSURE BLOCK VALID  
3YS2 ...      FILEAUTW ,FAIL+FREE,BSBS4,5,,,NOCHECK  [BACKWRITE BLT AUTONOMOUSLY
3^86 ...      BRN      ZRESTART 
3^J= ...[   
3^YW    READ
425M ...      BXU   4  BACK2(3),WRONGINDEX [J UNLESS RIGHT BLOCK
42=D ...      BNZ   6  (GEOERR)            [SHOULDN'T FIND SAME BLOCK TWICE 
42C9 ...      LDX   6  3                   [KEEP BLOCK ADDRESS  
42J2 ...      BRN      ZMOREBL             [SEE IF ANY MORE UNUSED BLOCKS   
42NR ...[   
42TJ ...WRONGINDEX  
432* ...[   
4376 ...[ CHECK TO SEE IF ANYONE ELSE IS USING THIS FINDEX BEFORE FREEING IT
43?X ...[   
43DN ...      TOPFCA2  2
43KF ...      PSTAC    2,2                 [X2->FSTACK BLOCK
43Q= ...      LDEX  5  ARINGNO(2)          [ NO OF ELEMENTS 
43XB          SBN   5  1
44C2 ...      BZE   5  ZREADFREE           [ ONE ELEMENT : MUST BE US   
44WL          ADN   5  1
45B= ...      CALL  0  ZBLAM               [GET POINTER FOR COMPARISON  
45TW ...      SLC   1  2                   [CONVERT TO MT FREADWORD FORM
4?PB          LDX   2  FPTR(2)             [ FSTACK 
4?^8 ...      ADN   2  A1   
4#92    ZFELL   
4#NL ...      LDX   0  FREADWORD(2) 
4*8=          SRL   0  12   
4*MW ...      BXE   0  1,ZMOREBL12         [BLK OWNED   
4B7G          ADN   2  FELLEN   
4BM6          BCT   5  ZFELL
4C6Q    ZREADFREE                          [ BLK NOT OWNED  
4CLB ...      LDX   3  BPTR(3)             [KEEP PREVIOUS BLOCK ADDRESS 
4D62 ...      FREECORE FPTR(3)             [GET RID OF UNUSED FINDEX BLOCK  
4DKL ...      BRN      ZMOREBL             [LOOK FOR MORE UNUSED BLOCKS 
4F5= ...[   
4FJW    NOTFOUND
4G2H ...      LDX   3  6                   [ADDRESS OF SOUGHT BLOCK IF FOUND
4GD8 ...      BNZ   3  ZOUT                [J IF BLOCK FOUND
4GTT ...[   
4H?G ...READNOW 
4HP7 ...      HUNTW    3,BSTB,BREAD 
4J6S ...      BPZ   3  ZBREAD              [J IF ALREADY DONE A FILEREAD
4JJF ...      TOPFCA2  3
4K2=          LDX   5  FREADWORD(3) 
4KFW          SRL   5  12   
4KXC ...      SRC   5  BLS                 [TURN BLOCKLET POINTER INTO STANDARD 
4L#Y ...                                   [ FORM FOR FILEREAD  
4LQF ...      FILEREAD ,FAIL,BSBS4,5,,,NOCHECK [READ BLKLET NON-AUTONOMOUSLY
4M82 ...      DOWN     MTCHECK,2           [CHECK DATA READ 
4MKH ...      LDX   0  AWORK3(2)
4N34 ...      BZE   0  NOILLREP            [J IF READINDEX ENTRY
4NDK ...      LDN   3  FYILLINS 
4NW6 ...      TESTRPN2 OK,QERROR           [J IF FAILED OR CORRUPT  
4P?M ...NOILLREP
4PP8 ...      TOPFCA2  3
4Q6P ...      JBS      READNOW,3,BAMWRITE  [SOLE OPENER-NEEDN'T RESEARCH
4QJ= ...      BRN      ZRESTART            [GO ROUND AGAIN IN CASE SOMEONE ELSE 
4Q^R ...                                   [ HAS READ SAME BLOCK
4RC# ...[   
4RT2    ZBREAD  
4SS=          NAME     3,FILE,FINDEX
4T6M ...      TOPFCA2  2
4TF4 ...      PSTAC    2,2  
4TRF ...      CHAIN    3,2                 [PUT INDEX BLOCK IN FILE CHAIN   
4W5W ...ZOUT
4WD? ...      VFREEW   BSTB,BREAD          [( SOMEONE ELSE HAS ALREADY READ IT) 
4WQN ...      SMO      FX1  
4X55 ...      LDX   0  ZFINDEXW 
4XCG ...      LDX   1  3                   [PUT FINDEX POINTER IN X1 AS WELL
4XQ2          LDX   2  FX2  
4Y9L ...      LDX   6  AWORK3(2)           [LINK IN B2-23   
4YP= ...      BZE   6  UP                  [J IF READINDEX ENTRY
4^8W          ADX   6  FX1  
4^DN ...      BRN      (6)                 [EXIT
4^NG ...UP    UP
4^Y# ...[   
5286    [   
52MQ    Z1MTOBJ                            [NORMAL ENTRY FOR NEXT PERI  
537B    [   
53M2 ...      LDX   7  EVENT4(2)            [GET TYPE/MODE WORD 
546L ...      ANDN  7  #3777
54L= ...      JBC      NOTLIM,FILERING(2),BAMWRITE  
555W ...      LDX   0  AMTLIM(2)           [CHECK LIMIT IF OPEN FOR WRITING 
5=^B          LDN   3  FYOUTPUT 
5?F2 ...      BXL   0  ACOUNT(2),QERROR    [J IF LIMIT REACHED  
5?YL ...NOTLIM  
5#D= ...      BXU   7  MODE500(1),TMTS  
5BBQ          ACROSS   MTSTART,2           [GOTO MTSTART FOR RENAME PERI #500   
5BLJ ...[   
5BWB    TMTS
5C6H ...      LDN   6  4
5CBN ...      LDX   3  ACAP(2)             [CONTROL AREA ADDRESS
5CLT ...#SKI  G4
5CX2 ...      LDN   4  CHREAD+CHWRITE      [NEED READ & WRITE ACCESS TO CONTROL 
5D77 ...      CALL  5  XCHECK              [CHECK RESERVATIONS ETC. 
5DC# ...      LDN   4  ACA1(2)  
5DMF ...#SKI  G3
5DXL ...      FOUTMOVE APETADDR(2),3,4,6   [MOVE 4 WORD CA TO AOLPT 
5F7R ...#SKI  G4
5FCY ...      CALL  5  OUTMOVE             [MOVE 4-WORD CA TO AOLPT 
5FN5 ...      TRACEIF  K6MTOBJ,199,299,ACA1(2),TYPEMODE 
5FY= ...#SKI  K6MTOBJ>199$199   
5G8C ...(   
5GDJ ...      TOPFCA2  2
5GNP ...      TRACEIF  K6MTOBJ,199,299,FREADWORD(2),READWORD
5GYW ...      LDX   2  FX2  
5H93 ...)   
5HF8 ...      STOZ     ACA2(2)             [REPLY WORD  
5HP* ...      LDX   0  BIT10
5H^G ...      ANDX  0  7                   [CHECK B10 OF MODE WORD  
5J==          BZE   0  TMON                [J.IF NO OWN MONITOR 
5JPW ...      ADX   0  BIT11               [- MUST BE B11 AND/OR B10
5K9G ...      ANDX  0  7
5KP6 ...      ERS   0  7                   [ELIMINATE OWN MONITOR FROM X4   
5L8Q    TMON
5LF7 ...      BXE   7  MODE3(1),TBACKSP    [BACKSPACE   
5LPJ ...      BXE   7  MODE7(1),TREWIND    [REWIND  
5L^^ ...      BXE   7  MODE1007(1),TCLOSE   
5M=B ...      BXE   7  MODE1000(1),TCLOSE  [MODES 1000 & 1007 ARE THE SAME  
5MGR ...      BXE   7  MODE4(1),TSKIPF     [SKIP FORWARD TO TAPE MARK   
5MR8 ...      BXE   7  MODE6(1),TSKIPB     [SKIP BACK   
5N3K ...      BXE   7  MODE5(1),TTAPEMARK  [WRITE TAPEMARK  
5N#2 ...      LDN   0  #7774
5NJC ...      ANDX  0  7
5NSS ...      BZE   0  TMODES              [J IF MODE 0 1 OR 2  
5P59 ...[ CHECK NOT AN OPEN MODE
5P*L ...[ ELIMINATE POSSIBLE ADDITIVE #34000
5PL6          LDN   3  FYALLOC  
5Q5Q          LDX   5  ACA1(2)  
5QKB          ANDX  5  MAD34(1) 
5SHW          ERX   5  ACA1(2)  
5T3G          ANDX  5  BSP16
5TH6 ...      LDN   0  5
5W2Q ...NEXTOPEN
5WGB ...      BXE   5  OPENMODES(1),QERROR [ALREADY OPEN : OPEN MODE ILLEGAL
5X22 ...      BUX   1  £
5XFL ...      BCT   0  NEXTOPEN 
6*76          LDN   3  FYMODE   
6*LQ          BRN      QERROR   
6*NH ...[   
6*Q# ...TMODES  
6*S5 ...      TRACEIF  K6MTOBJ,199,299,ACA3(2),COUNT
6*TW ...      LDX   5  ACA4(2)  
6*XM ...      PMODES   3,APETADDR(2)
6*^D ...      ANDN  3  #10  
6B39 ...      BNZ   3  TCOM                [J. IF EXTENDED STORE MODE   
6B52 ...      ANDX  5  BSP16               [BUFFER ADDRESS IS B9-23 IN 15AM 
6B6R ...TCOM
6B8J ...      ANDX  5  BITS22LS 
6B=* ...      STO   5  ACA4(2)  
6B#6 ...      LDN   3  FYCOUNT  
6B*X ...      LDX   6  ACA3(2)  
6BCN ...      BZE   6  QERROR              [ 0<COUNT<32768  
6BFF ...      ANDX  6  BSP16
6BH= ...      ERX   6  ACA3(2)  
6BK3 ...      BNZ   6  QERROR              [J.IF COUNT>OR=32K   
6BLS ...#SKI  G4
6BNK ...(   
6BQB ...      LDN   4  CHREAD   
6BS7 ...      BXE   7  MODE1(1),NOWACC     [J UNLESS WRITE PERMISSION NEEDED
6BTY ...      LDN   4  CHWRITE  
6BXP ...NOWACC  
6B^G ...)   
6C3? ...      LDX   3  ACA4(2)             [BUFFER ADDRESS  
6C54 ...      LDX   6  ACA3(2)             [COUNT   
6C6T ...      CALL  5  XCHECK              [CHECK RESERVATIONS ETC. 
6C8L ...[   
6C=C ...[ TRANSFER MODES
6C#8 ...[ PERI CONTROL AREA OK : NOW POSITION ON INDEX FILE 
6C*^ ...[   
6CCQ ...      BXE   7  MODE2(1),TREADR     [READ REVERSE
6CFH ...      BXE   7  MODE1(1),TWRITE     [WRITE   
6CH# ...[   
6CK=    TREADF  
6CT4 ...      NGN   7  1                   [X7 NEGATIVE FOR READ FORWARD MODE 0 
6D4W ...      BRN      SKIPREAD 
6D#N ...[   
6DJG ...TSKIPF  
6DS# ...      LDN   7  1                   [X7=1 FOR SKIP TO TM MODE #4 
6F46    SKIPREAD
6F?Y ...[   
6FHQ ...[ POSITION FORWARDS ON INDEX
6FRJ ...[   
6G3B          CALL  6  ZINDEX              [X1->INDEX BLOCK 
6H2L          SMO      FILERING(2)  
6HG= ...      LDEX  1  FREADWORD           [CANT BE > 127 SO LDEX IS OK 
6H^W ...      ADN   1  A1(3)               [GET WORD POINTER TO FINDEX  
6J^6    RULP  LDX   5  1(1)                [GET NEXT HEADER WORD
6KDQ          BNG   5  RDATA               [J. IF NOT DATA REC  
6KYB          BNZ   5  RERO                [J.UNLESS END OF BLOCKLET
6LD2 ...      TOPFCA2  2
6LXL ...      LDX   0  FREADWORD(2) 
6MC= ...      ANDX  0  HALFTOP  
6MWW ...      ADX   0  BIT11
6NBG ...      STO   0  FREADWORD(2)        [ADD 1 TO BLOCK POINTER  
6RRW          LDX   2  FX2  
6S?G          BRN      SKIPREAD 
6SH# ...[   
6SR6    RERO
6T2Y ...[ DATA BLOCK FOUND : UPDATE POINTER 
6T=Q          LDN   0  AMTDATA  
6TQB          SMO      FILERING(2)  
6W=2          ADS   0  FREADWORD
6WPL ...      BNG   7  QR                  [J IF MODE 0 
6Y8G          ADN   1  AMTDATA  
6YGX ...      BRN      RULP                [LOOP IF SKIP TO TAPEMARK
6YT# ...[   
6^7Q    RDATA   
6^G7 ...[ NON-DATA RECORD FOUND : CHECK WHICH TYPE  
6^SJ ...      LDX   3  FX1                 [NEED TO KEEP X1 FOR REND
7272          BXE   5  MARK(3),RMRK        [J IF TAPEMARK   
72LL ...      BXE   5  QUAL(3),REND 
736= ...      BXE   5  MDDR(3),REND        [J IF HEADER OR QUALIFIER BLOCK  
73KW ...      LDN   3  FYENDFILE           [MUST BE END : ILLEGAL   
7642          BRN      QERROR   
76?S ...[   
76HL ...RMRK           [ TAPEMARK FOUND : UPDATE POINTER & SET REPLY
76RD ...[   
773=          LDN   0  AMTMARK  
77?4 ...UMARK          [REVERSING PATH JOINS HERE   
77GW          SMO      FILERING(2)  
782G          ADS   0  FREADWORD
78G6 ...      SETBIT   4,ACA2(2)           [SET TAPEMARK BIT IN REPLY WORD  
79FB          BRN      SETREPLY 
79ML ...[   
79TW ...REND           [ QUAL OR HDDR FOUND : UPDATE POINTER
7=46 ...[   
7==B ...      LDN   0  AMTQUAL  
7=DL          SMO      FILERING(2)  
7=Y=          ADS   0  FREADWORD
7?CW ...      BNG   7  UR                  [J IF MODE 0 
7?XG          ADN   1  AMTQUAL  
7#9X ...      BRN      RULP                [LOOP IF SKIP TO TAPEMARK
7#J# ...[   
7#WP ...UR             [READ FORWARD & REVERSE PATH 
7*96 ...[   
7*HH ...      LDX   0  ACA3(2)             [PERI COUNT  
7*W2          SBN   0  AMTSENT  
7B*L ...      SBS   0  ACA3(2)             [SET ACA3= RECORD LENGTH 
7BT= ...      BPZ   0  QNOTLONG            [J UNLESS LONG BLOCK 
7C#W ...      LDCT  6  #200 
7CSG ...      ORS   6  ACA2(2)             [SET LONG BLOCK BIT IN REPLY WORD
7D#6 ...      ADS   0  ACA3(2)             [SET ACA3 BACK TO COUNT  
7DRQ ...      BNG   7  QTRANF              [J IF READ FORWARD MODE 0
7F?B ...      SBS   0  1                   [READ REVERSE LOSE FRONT OF RECORD   
7G=L          BRN      QTRANF   
7GGD ...[   
7GQ=    QNOTLONG
7H5^ ...      BNG   7  QTRANF              [J IF MODE 0 
7HFN ...      ADS   0  ACA4(2)             [READ REVERSE - DONT USE FRONT   
7HTC ...                                   [ OF BUFFER  
7J96    QTRANF  
7JJT ...      LDN   4  2(1)                [-> QUALIFIER DATA BLOCK 
7JYJ ...      LDX   6  ACA3(2)             [CORRECTED LENGTH OF TRANSFER
7K#? ...      LDX   5  ACA4(2)             [PROGRAM BUFFER  ADDRESS 
7KN2 ...#SKI  G4
7L3P ...      INMOVE   APETADDR(2),5,4,6,  [MOVE DATA INTO PROGRAM  
7LCD ...#SKI  G3
7LR7 ...      FINMOVE  APETADDR(2),5,4,6    [MOVE DATA INTO PROGRAM 
7M6W ...      ADS   6  ACA4(2)             [UPDATE "NEXT TRANSFER" ADDRESS  
7MGK ...      BRN      REPLY               [FOR USE IN REPLY WORD   
7MW# ...[   
7N=3 ...[   
7NKQ    TSKIPB  
7N^F ...      LDX   7  GSIGN               [X7- B0 SET FOR SKIP BACK MODE #6
7P*8 ...      BRN      RMERGE   
7PNX ...[   
7Q4L    TREADR  
7QD* ...      LDN   7  1                   [X7=1 FOR READ REVERSE MODE 2
7QS4 ...      BRN      RMERGE   
7R7R ...[   
7RHG    TBACKSP 
7S36 ...      LDN   7  0                   [X7=0 FOR BACKSPACE MODE 3   
7SGQ ...RMERGE  
7T2B ...[ POSITION BACKWARDS IN INDEX   
7TG2 ...[ NOTE THAT A1 OF AN INDEX BLOCK LOOKS LIKE A DATA RECORD   
7TPS ...      STOZ     AWORK1(2)           [CLEAR E.O.T. MARKER 
7T^L          TOPFCA2  1
7WF= ...      LDEX  5  FREADWORD(1) 
7WYW ...      BNZ   5  QCURBLK             [J UNLESS @ BEGINNING OF BLOCK   
7XY6          LDX   4  FREADWORD(1) 
7YCQ          SRL   4  12   
7YXB          SBN   4  FBLKS*4  
7^C2 ...      LDN   3  FYBEGFILE
7^WL ...      BZE   4  QERROR              [J IF @ BEGINNING OF FILE : ILLEGAL  
83*G          ADN   4  FBLKS*4-1
83T6          SLL   4  12   
84#Q          LDN   0  #7777
84SB ...      ANDS  0  FREADWORD(1)        [DECREMENT BLOCKLET POINTER BY 1 
85#2          ADS   4  FREADWORD(1) 
85RL ...      CALL  6  ZINDEX              [ X3=CUR INDEX BLT ADD   
86QW          NGX   5  3
87=G          ADN   3  GSBS4-1+A1-1        [ WD  126
87Q6 ...      SBX   3  1(3)                [BACKWARDS POINTER   
889Q ...      ADX   5  3                   [GET BLOCKLET PTR
88PB          SBN   5  A1   
8992 ...      TOPFCA2  1
89NL          LDX   0  HALFTOP  
8=8= ...      ANDS  0  FREADWORD(1)        [CLEAR WORD POINTER & RESET TO   
8=MW          ADS   5  FREADWORD(1)        [ LAST REC   
8?7G    QLOOP   
8?M6 ...      LDX   4  0(3)                [PICK UP PREVIOUS HEADER WORD
8#6Q ...      BZE   5  RMERGE              [J TO GET PRECEEDING BLT 
8#LB ...      BNG   4  QDATA               [J UNLESS DATA RECORD
8*62 ...      LDN   0  AMTDATA             [      IF REACHED BEGINNING OF BLOCK 
8JDB          BRN      QREC 
8JY2 ...[   
8KCL ...QDATA   
8KX= ...      NGN   0  AMTMARK  
8LBW ...      SMO      FX1  
8LWG ...      BXE   4  MARK,UMARK          [TAPEMARK : JOIN FORWARD MOVE PATH   
8MB6 ...      LDN   0  AMTQUAL             [MUST BE QUAL OR HDDR
8MTQ ...QREC                               [STEP BACK PTRS  
8N*B ...      SBS   0  3                   [     TO RECORD IN INDEX BLOCK   
8NT2 ...      SBS   0  5                   [     WORD POINTER FROM FREADWORD
8P#L ...      SBS   0  FREADWORD(1)        [UPDATE WORD POINTER IN FREADWORD
8PS= ...      BNG   7  QLOOP               [SKIP BACK   
8Q?W ...      BZE   7  SETREPLY            [BACKSPACE   
8QRG ...      LDX   1  3                   [READ REVERSE
8R?6 ...      BPZ   4  QR                  [J IF DATA RECORD:JOIN TRANSFER PATH 
8RQQ ...      BRN      UR                  [QUALIFIER BLOCK :JOIN FORWARD PATH  
8S=B ...[   
8SQ2 ...QCURBLK 
8T9L ...      CALL  6  ZINDEX              [GET X3->INDEX BLOCK 
8TP= ...      TOPFCA2  1
8W8W ...      LDEX  5  FREADWORD(1)        [WORD POINTER
8WNG ...      ADN   3  A1   
8X86 ...      ADX   3  5                   [X3->RECORD IN INDEX BLOCK   
8XMQ ...      BRN      QLOOP
8Y7B ...[   
8YM2 ...[   
8^6L    TCLOSE  
8^F3 ...      ACROSS   MTSTART,4           [RELEASE CHANNEL 
8^RD ...[   
925W    TREWIND 
92KG ...      STOZ     AWORK1(2)           [CLEAR E.O.T. MARKER 
93JQ          LDN   0  FBLKS*4  
944B          SLL   0  12   
94J2          SMO      FILERING(2)  
953L ...      STO   0  FREADWORD           [SET INDEX RECORD POINTER TO BOF 
96GG          BRN      SETREPLY 
96MN ...[   
96SW ...[   
9726    TTAPEMARK   
97*T ...      LDX   7  GSIGN               [X7- B0 SET FOR WRITE A TM MODE #5   
97PJ ...      BRN      WMERGE   
985? ...[   
98F2    TWRITE  
98YL ...      LDN   7  0                   [X7=0 FOR WRITE A BLOCK MODE #1  
99D= ...WMERGE  
99KD ...      LDX   0  AWORK1(2)           [COPY E.O.T. MARKER  
99QL ...      ORS   0  ACA2(2)             [  TO REPLY WORD 
99XW ...      TOPFCA2  1
9=CG ...      LDN   3  FYNOWRITE
9=X6 ...      JBC      QERROR,1,BAMWRITE   [J IF NOT OPEN FOR WRITING :ILLEGAL  
9?BQ ...      PSTAC    1,1  
9?WB ...      BFCBX    1,1                 [X1->FCB 
9#B2 ...      BS       1,BFALTR 
9#TL ...[   
9**= ...SHORTENED   
9*SW ...[   
9B#G ...      CALL  6  ZINDEX              [GET X1 & X3 ->FINDEX
9BS6 ...      NAMEX    1
9D?2          SMO      FILERING(2)  
9DKL ...      LDEX  1  FREADWORD
9DY= ...      ADN   1  A1(3)
9F=W ...      LDX   3  1
9FKG ...ZLOP  LDX   0  0(3) 
9FY6 ...      BPZ   0  ZDATA               [J. IF DATA ENTRY
9G=Q ...      SBN   3  AMTMARK  
9GKB ...      SMO      FX1  
9GY2 ...      BXE   0  MARK,ZLOP           [LOOP IF TAPEMARK
9H=L ...      SBN   3  AMTQUAL-AMTMARK  
9HK= ...      BRN      ZLOP                [LOOP IF QB OR HDDR  
9HXW ...[   
9J=G ...ZDATA STO   0  AWORK2(2)           [SET UP AWORK2 FOR MTCODE
9JK6 ...      TRACEIF  K6MTOBJ,199,299,AWORK2(2),BULKSIZE   
9JXQ ...      LDX   4  1(1)                [PICK UP RECORD HEADER   
9K=B ...      SMO      FX1  
9KK2 ...      LDX   0  MEND 
9KXL ...      BXE   0  4,SEXT              [J IF WRITING @ E.O.F.   
9L== ...      STO   0  1(1)                [WRITING TO MIDDLE OF EXISTING FILE  
9LJW ...      DOWN     MTCODE,2            [FREE SURPLUS BLOCKS 
9LXG ...      BRN      SHORTENED           [START AGAIN 
9M=6 ...[   
9MKB    SEXT
9Q3G          SMO      FILERING(2)  
9QH6 ...      LDEX  4  FREADWORD
9R2Q ...      SBN   4  GSBS4-1  
9SFL          BNG   7  STMRITE             [J. IF WRITING A TAPE-MARK   
9S^=          ADN   4  AMTDATA  
9TDW          BRN      SMERGE   
9TNN ...[   
9TYG    STMRITE 
9WD6          ADN   4  AMTMARK+AMTQUAL  
9WXQ ...[   
9XCB ...SMERGE         [WRITE THE INDEX RECORD  
9XX2 ...[   
9YBL ...      BNG   4  SOKFIT              [J IF ENOUGH ROOM IN THIS BLOCKLET   
=5=W          STOZ     1(1)                [END OF BLOCKLET MARK
=5QG          LDN   0  GSBS/BLN-1   
=6=6          SMO      FILERING(2)  
=6PQ ...      LDEX  6  FREADWORD
=7P2          SBX   0  6
=88L          ADX   1  0
=8N=          SBN   0  1                   [SET UP CONTENTS FOR THE -   
=97W          STO   0  0(1)                [LAST WORD OF BLOCKLET   
=9MG ...      DOWN     MTCODE,4            [EXTEND INDEX & GET NEW FINDEXW  
==76 ...      TESTREP2 REFUSED,REFUSEDX,FILEFULL,NOROOM 
==## ...      LDX   0  ACA2(2)             [REMEMBER E.O.T. BIT 
==FG ...      ORS   0  AWORK1(2)           [ UNTIL TAPE MOVED BACKWARDS 
==LQ ...      BRN      SHORTENED           [START AGAIN 
=?6B ...[   
=LTB    SOKFIT  
=M*2          LDX   3  FX1  
=MSL          BZE   7  SRITEDATA           [J. IF NOT WRITING A TAPE-MARK   
=N#=          LDX   0  MARK(3)             [WRITE THE TAPE-MARK 
=NRW          STO   0  1(1) 
=P?G          LDX   0  MEND(3)             [WRITE THE END OF FILE MARK  
=PR6          STO   0  AMTMARK+1(1) 
=Q=Q          LDN   0  AMTMARK  
=QQB ...      SMO      FILERING(2)  
=R=2 ...      ADS   0  FREADWORD           [UPDATE INDEX RECORD POINTER 
=RPL          BRN      SETREPLY 
=RQF ...[   
=RR# ...REFUSEDX
=RS7 ...      CALL  7  TIDYUP              [RESET E.O.F.
=RT2 ...      LDN   3  1
=RTT ...REFUSED        [BACKING STORE LIMIT EXCEEDED
=RWN ...      CALL  7  TOPCA               [CHANGE ACTIVITY TO APET 
=RXH ...                                   [ & LEAVE LINK  TO K1MTOBJ   
=RYB ...      LDX   6  3                   [OLPODD EXPECTS NO. OF   
=R^9 ...                                   [ BLOCKS WANTED IN X6
=S24 ...      ACROSS   OLPODD,3 
=S2X ...[   
=S3Q ...NOROOM         [FILE IS FULL
=S4K ...      CALL  7  TIDYUP              [RESET E.O.F.
=S5D ...OUTFULL 
=S6? ...      LDN   3  FYOUTFULL
=S76 ...      BRN      QERROR   
=S7^ ...[   
=S9=    SRITEDATA   
=SNW          LDX   0  0(1) 
=T8G ...      BXU   0  MARK(3),SNOBDMK     [J IF CAN'T BE A QUALIFIER BLOCK 
=W7Q          LDX   0  ACA3(2)  
=WMB          SBN   0  AMTSENT  
=X72 ...      BNZ   0  SNOBDMK             [NOT 20 WDS : DON'T TREAT AS QB  
=XLL ...      LDX   0  QUAL(3)  
=Y6= ...      STO   0  1(1)                [WRITE '4HQUAL' IN RECORD HEADER 
=YKW ...      STO   0  AMTQUAL(1)          [& @ END OF RECORD   
=^5G          LDX   0  MEND(3)             [WRITE '4HEND '  
=^K6          STO   0  AMTQUAL+1(1) 
?22R ...      LDN   4  2(1)                [->DATA AREA IN QB RECORD
?2DD ...      LDX   6  ACA3(2)             [LENGTH OF TRANSFER  
?2W5 ...      LDX   3  ACA4(2)             [PROGRAM BUFFER ADDRESS  
?3?Q ...#SKI  G4
?3PC ...      CALL  5  OUTMOVE  
?474 ...#SKI  G3
?4JP ...      FOUTMOVE APETADDR(2),3,4,6
?52G          LDX   0  ACA3(2)  
?5G6 ...      ADS   0  ACA4(2)             [UPDATE "NEXT TRANSFER " ADDRESS 
?5^Q          ADN   0  2
?6FB          SMO      FILERING(2)  
?6^2 ...      ADS   0  FREADWORD           [UPDATE INDEX RECORD POINTER 
?7DL          BRN      REPLY
?7S* ...[   
?884 ...SNOBDMK        [ORDINARY WRITE TO BULK FILE 
?8HR ...[   
?8XG ...      LDX   3  ACA3(2)             [COUNT   
?9?9 ...      ADX   3  AWORK2(2)           [ +BULK FILE START ADDRESS   
?9LY ...      ADN   3  GSBS-1              [ROUND UP TO GET END ADDRESS 
?=2M ...      SRL   3  GSBSLOG             [& CONVERT TO BLOCKS 
?=BB          LDX   0  AWORK2(2)
?=W2          ADN   0  GSBS-1   
??*L ...      SRL   0  GSBSLOG             [START ADDRESS IN BLOCKS 
??T=          SBX   3  0                   [X3=NO OF NEW BLOCKS NEEDED  
?##W          BZE   3  NONEWBL  
?#JN ...      LDX   7  3                   [SAVE NO. OF BLOCKS NEEDED   
?#SG ...[   
?*#6 ...      DOWN     MTCODE,1            [EXTEND BULK FILE
?*HY ...      TESTREP2 REFUSED,REFUSED,FILEFULL,OUTFULL 
?*RQ ...      LDX   0  ACA2(2)             [REMEMBER E.O.T. BIT 
?B3J ...      ORS   0  AWORK1(2)           [ UNTIL TAPE MOVED BACKWARDS 
?B?B ...      CALL  6  ZINDEX              [OK - GET X1 & X3 ->FINDEX   
?BR2 ...      NAMEX    1                   [ENSURE INDEX BLOCK WILL BE WRITTEN  
?C=L ...      TOPFCB2  1                   [UPDATE FBLMOD AFTER FINDING FINDEX  
?CQ= ...      ADS   7  FBLMOD(1)           [ELSE FINDEX WILL APPEAR CORRUPT 
?D9W ...      LDN   7  0                   [RESTORE X7 SWITCH VALUE 
?FNQ          SMO      FILERING(2)  
?G37 ...      LDEX  1  FREADWORD           [PICK UP WORD POINTER TO INDEX BLOCK 
?G*J ...      ADN   1  A1(3)               [X1->INDEX RECORD
?GM^ ...[   
?H2B ...NONEWBL        [SET UP DATA RECORD IN INDEX 
?H#R ...[   
?HM=          LDX   0  ACA3(2)  
?J6W ...      STO   0  1(1)                [RECORD LENGTH IN 1ST WORD   
?JLG ...      ADX   0  AWORK2(2)           [NEXT BULK FILE ADDRESS  
?K66 ...      STO   0  AMTDATA(1)          [ IN 2ND WORD
?L5B          SMO      FX1  
?LK2 ...      LDX   0  MEND                [" END" IN NEXT RECORD   
?M4L          STO   0  AMTDATA+1(1) 
?MJ=          LDN   0  AMTDATA  
?N3W          SMO      FILERING(2)  
?NHG ...      ADS   0  FREADWORD           [UPDATE INDEX RECORD 
?P36    QR  
?PGQ ...      LDX   5  AMTDATA(1)          [START ADDRESS IN BULK FILE  
?Q2B ...      LDX   6  1(1)                [LENGTH OF TRANSFER  
?QG2    NQR 
?QJK ...[   
?QM8 ...[ TRANSFER PERIS ONLY   
?QPR ...[ ALL CHECKING & POSITIONING COMPLETE   
?QSB ...[ CAN NOW DO TRANSFER AUTONOMOUSLY  
?QW^ ...[   
?Q^L          AUTSTART                     [RESTART OBJ PROG
?RF=          NGX   7  7                   [RESET FOR EASE OF CHECKING  
?RYW          LDX   0  ACA3(2)  
?SDG ...      BXGE  0  6,ONOLONG           [J UNLESS A LONG BLOCK IS FOUND  
?SY6 ...      SETBIT   1,ACA2(2)           [SET LONGBLOCK BIT  IN REPLY WORD
?WC2          BNG   7  OREV                [J. IF READ REVERSE  
?WWL          SBX   5  6
?XB=          ADX   5  ACA3(2)             [RESET E.O.REC POINTER   
?XTW    OREV
?Y*G          LDX   6  ACA3(2)             [RESET REC LENGTH
?YT6          BRN      ONOREV   
?^#Q    ONOLONG 
?^SB          BPZ   7  ONOREV              [J. UNLESS READ REVERSE  
#2#2          ADS   0  ACA4(2)             [RESET BUFFER START ADDRESS  
#2RL          SBS   6  ACA4(2)  
#3?=    ONOREV  
#3QW          NGX   7  7                   [RETURN X7 TO ITS PREVIOUS STATE 
#4=G          DOWN     MTCODE,5 
#4Q6    REPLY   
#59Q ...      BNG   7  Y                   [J IF READ FORWARD   
#5PB ...      BZE   7  Y                   [J IF WRITE  
#692 ...      ADN   6  1                   [READ REVERSE: ADJUST TRANSFER LENGTH
#6NL ...      SBS   6  ACA4(2)             [TO GIVE "NEXT TRANSFER" ADDRESS 
#78=    Y   
#7MW ...      LDCT  0  #770                [RESTRICT "NEXT TRANSFER" ADDRESS
#87G ...      ANDX  0  ACA4(2)             [TO 18 BITS  
#8M6 ...      ERX   0  ACA4(2)             [ BEFORE PUTTING IN REPLY WORD   
#96Q ...      ORS   0  ACA2(2)             [ B0-5 : BIT SIGNIFICANT REPLY   
#?JW    SETREPLY
##4G ...      AUTFIN   ACA2(2)             [REPLY IS IN ACA2
#*HB          BRN      K1MTOBJ  
#B32 ...[   
#DF6    QERROR  
#DYQ          LDX   4  FTYPNO(2)
#FDB ...      CALL  7  TOPCA
#GCL          ACROSS   OLPODD,4 
#GMD ...[   
#GX=          MENDAREA 30,K99MTOBJ  
#HBW    #END
^^^^ ...32710614000100000000