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