{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: MTOBJ864)}}
====== MTOBJ864 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:AUTFIN|AUTFIN]], [[george:macro:AUTSTART|AUTSTART]], [[george:macro:BFCBX|BFCBX]], [[george:macro:BLAM|BLAM]], [[george:macro:BS|BS]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHECKA|CHECKA]], [[george:macro:DOWN|DOWN]], [[george:macro:FILEAUTW|FILEAUTW]], [[george:macro:FILEREAD|FILEREAD]], [[george:macro:FILETRAN|FILETRAN]], [[george:macro:FINMOVE|FINMOVE]], [[george:macro:FOUTMOVE|FOUTMOVE]], [[george:macro:FREECORE|FREECORE]], [[george:macro:HUNTW|HUNTW]], [[george:macro:INMOVE|INMOVE]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:LINK|LINK]], [[george:macro:MARK|MARK]], [[george:macro:MEND|MEND]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:NAME|NAME]], [[george:macro:NAMEX|NAMEX]], [[george:macro:OUTMOVE|OUTMOVE]], [[george:macro:PMODES|PMODES]], [[george:macro:PSTAC|PSTAC]], [[george:macro:READ|READ]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETBIT|SETBIT]], [[george:macro:TCLOSE|TCLOSE]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TOPCA|TOPCA]], [[george:macro:TOPCA1|TOPCA1]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCAB2|TOPFCAB2]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:VFREEW|VFREEW]]
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 ) =COUNTBLOCK :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 [ 0OR=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