11 22FL ... SEG MTCODE,8,FILE,OLP 19 22_= ... SEGENTRY K1MTCODE,Z1MTCODE [ROUTINE TO EXTEND BULK FILE 16 23DW ... [ BY [X3] BLOCKS 20 23YG ... SEGENTRY K2MTCODE,Z2MTCODE [ROUTINE TO CONTRACT INDEX FILE 19 24D6 ... SEGENTRY K4MTCODE,Z4MTCODE [ROUTINE TO EXTEND INDEX FILE 18 24XQ ... SEGENTRY K5MTCODE,ZTRANSTYPE [ROUTINE TO TRANSFER BULK 16 25CB ... [ DATA TO PROGRAM 18 25X2 ... SEGENTRY K7MTCODE,ZGETBUFF [ROUTINE TO GET A FURB 4 26BL ...[ 20 26W= ...[ THIS SEGMENT CONTAINS ROUTINES TO PERFORM VARIOUS FUNCTIONS FOR 10 27*W ...[ MTSTART,MTOBJ AND MATALO. 3 27TG ... 16 28*6 ...[ IT IS ASSUMED THAT COMMUNAL WRITING IS FORBIDDEN. 4 28SQ ...[ 19 29#B ...[ FOR FORMAT OF FILESTORE MAGNETIC TAPE FILES SEE PRM 5.5.3.2 4 29S2 ...[ 3 2=?L ... 4 2=R= ...[ 8 2?=W ...MEND 4HEND 5 2?QG ...ZFEXTRA 10 2#=6 ...#HAL FILE+FEXTRA,0 4 2#PQ ...[ 15 2*9B ... FILETRAN [SUBROUTINES FOR TRANSFER MACROS 4 2*P2 ...[ 15 2B8L ...MOVEIN [MOVE DATA INTO OBJECT PROGRAM 5 2BN= ...#SKI G3 9 2C7W ... FINMOVE 3,2,1,4 21 2CMG ...#SKI G4 [FINMOVE NO GOOD IN G4:START ADDRESS 20 2D76 ... INMOVE 3,2,1,4 [ NOT IN 1ST K OF CHECKED AREA 8 2DLQ ... LDX 2 FX2 7 2F6B ... EXIT 6 0 4 2FL2 ...[ 15 2G5L ...MOVEOUT [MOVE DATA OUT OF OBJECT PROGRAM 5 2GK= ...#SKI G3 9 2H4W ... FOUTMOVE 3,1,2,4 20 2HJG ...#SKI G4 [SAME PROBLEM IN G4 AS FINMOVE 9 2J46 ... OUTMOVE 3,1,2,4 8 2JHQ ... LDX 2 FX2 7 2K3B ... EXIT 6 0 4 2KH2 ...[ 4 2L2L ...[ 19 2LG= ...[ ROUTINE TO INCREASE FBLMOD BY [X3], GETTING NEW BLOCKS IF 20 2LQ4 ...[ NECESSARY. NOTE THAT FBLMOD IS NOT ACTUALLY INCREASED BECAUSE 19 2L_W ...[ IT WOULD LEAVE THE INDEX APPARENTLY CORRUPT: THE CALLING 17 2M9N ...[ ROUTINE MUST DO THIS ITSELF AT AN APPROPRIATE TIME 21 2MFG ...[ OUTPUT FILE FULL (EXCEEDING MAX FILE SIZE) AND END-OF-TAPE (WITHIN 16 2M_6 ...[ 4K OF MAX FILE SIZE) CONDITIONS CHECKED FOR. 4 2NDQ ...[ 5 2NYB ...Z1MTCODE 4 2PD2 ...[ 14 2PXL ... TRACEIF K6MTCODE,199,299,3,XTNDBULK 21 2QC= ... LDX 7 1 [X7-FX1=0 TO INDICATE ENTRY BY DOWN 7 2QWW ... TOPFCB2 2 21 2RBG ...XTNDBULK [ENTRY FROM ROUTINE TO EXTEND INDEX 21 2RW6 ... SBX 7 FX1 [ (LINK X7) 7 2S*Q ... LDX 6 3 9 2STB ... ADX 3 FBLMOD(2) 18 2T*2 ... SBN 3 FBLKS-A1+1 [GIVING REQD FILE SIZE -1 20 2TSL ... BXGE 3 FSIZE(2),OUTFULL [J IF WOULD EXCEED MAX FILE SIZE 18 2W#= ... INCRECUB ANSWER,,6 [INCR CUBS - X6=AMOUNT 18 2WRW ... TESTREP2 REFUSED,REFUSED [J IF BS LIMIT EXCEEDED 7 2X?G ... TOPFCB2 2 4 2XR6 ...[ 21 2Y=Q ... SEGENTRY K77MTCODE [TO MEND E.O.T. POSITION (FOR OPCS) 4 2YQB ...[ 10 2_=2 ... LDN 0 4096/GSBS(3) 21 2_PL ... BXL 0 FSIZE(2),NOTEOT [J IF NOT WITHIN 4K OF MAX FILE SIZE 8 329= ... LDCT 0 #20 8 32NW ... SMO FX2 16 338G ... ORS 0 ACA2 [SET E.O.T. BIT 4 5 33N6 ...NOTEOT 10 347Q ... LDN 0 FBLKS-A1(3) 18 34MB ... BXL 0 FUSEBL(2),NOMOREBLOX [J IF ENUFF SPARE BLOX 20 3572 ... ADN 3 10 [TRY TO GET REQD NO. OF BLOX +10 11 35LL ... BXL 3 FSIZE(2),NOTMAX 20 366= ... LDX 3 FSIZE(2) [TOO MUCH - GET AS MUCH AS POSS 7 36KW ... SBN 3 1 5 375G ...NOTMAX 9 37K6 ... ADN 3 FBLKS-A1 9 384Q ... LDX 5 FUSEBL(2) 20 38JB ... BXL 3 ALOGLEN(2),NOALTLEN [J IF ROOM IN FCB FOR NEW BLOCKS 7 3942 ... LDX 4 2 15 39HL ... ALTLENGD 4,1(3),REFINDFCB [LENGTHEN FCB 5 3=3= ...NOALTLEN 18 3=GW ... ADN 3 3 [GIVING NEW FCB SIZE +2 18 3?2G ... SBX 3 5 [NOW = NO. OF NEW BLOX +2 11 3?G6 ... SETUPCOR 3,1,BSTB,EMPTYB 18 3?_Q ... STO 3 A1(1) [RECORD HEADER FOR EMPTYB 5 3#FB ...NEWBLOX 7 3#_2 ... TOPFCB2 2 9 3*DL ... LDX 4 BSPRE(2) 15 3*Y= ... STO 4 A1+1(1) [RESIDENCE 15 3BCW ... GETBAX [GET NEW BLOX 7 3BXG ... TOPFCB2 2 19 3CC6 ... BXE 4 BSPRE(2),NCOPIED [J IF RESIDENCE NOT CHANGED 20 3CWQ ... FREEBAX [FREE NEW BLOX ON OLD RESIDENCE 10 3DBB ... MHUNTW 1,BSTB,EMPTYB 20 3DW2 ... BRN NEWBLOX [J TO GET BLOX ON NEW RESIDENCE 3 3F*L ... 6 3FT= ...REFINDFCB 19 3G#W ... TOPFCB2 2 [RE-LOCATE FCB FOR ALTLENG 7 3GSG ... EXIT 1 0 3 3H#6 ... 5 3HRQ ...NCOPIED 10 3J?B ... MHUNTW 1,BSTB,FULLB 16 3JR2 ... LDN 4 A1+2(1) [-> NEW BLK NOS. 19 3K=L ... ADN 5 A1(2) [-> END OF BLK NOS. IN FCB 7 3KQ= ... SBN 3 2 16 3L9W ... MOVE 4 0(3) [BUNG IN NEW BLOX 20 3LPG ... ADS 3 FUSEBL(2) [UPDATE NO. OF BLOX THE FILE OWNS 15 3M96 ... FREECORE 1 [FREE FULLB 7 3MNQ ... TOPFCB2 2 6 3N8B ...NOMOREBLOX 11 3NN2 ... MBS 2,BFALTB,BFALTR 18 3P7L ... BZE 7 XBUP [JIF NOT EXTENDING INDEX 8 3PM= ... ADX 7 FX1 7 3Q6W ... EXIT 7 0 4 3QLG ...XBUP 8 3RKQ ... SETREP OK 5 3S5B ... UP 3 3SK2 ... 5 3T4L ...OUTFULL 9 3TJ= ... SETREP FILEFULL 12 3W3W ...REFUSED [BS LIMIT EXCEEDED 5 3WHG ... UP 4 3X36 ...[ 4 3XGQ ...[ 4 3Y2B ...[ 19 3YG2 ...[ ROUTINE TO CONTRACT FILE BY MOVING BULK BLOCKS ^DOWN^ AND 17 3Y_L ...[ EXPECTS FREADWORD->POSITION @ WHICH FILE IS TO BE 20 3_F= ...[ TRUNCATED AND [AWORK2]=CORRESPONDING POSITION IN BULK FILE. 4 3_YW ...[ 5 42DG ...Z2MTCODE 4 42Y6 ...[ 7 43CQ ... TOPFCA2 3 10 43XB ... LDX 4 FREADWORD(3) 14 44C2 ... TRACEIF K6MTCODE,199,299,4,CONTRACT 21 44WL ... SRL 4 12 [GET NO. OF INDEX BLKLETS(+FBLKS*BLN) 17 45B= ... SRL 4 BLS [CONVERT TO BLOCKS 20 45TW ... SBN 4 A1-1 [CURRENT INDEX BLK +1 (+FBLKS-A1) 20 46*G ... LDX 5 AWORK2(2) [CURRENT BULK FILE WORD ADDRESS 19 46T6 ... ADN 5 GSBS-1 [ROUND UP & CONVERT TO BLOCKS 19 47#Q ... SRL 5 GSBSLOG [NO. OF BULK BLOX STILL REQD 15 47SB ... PSTAC 3,3 [X3->FSTACK 14 48#2 ... BFCBX 3,3 [X3->FCB 7 48RL ... LDX 7 4 20 49?= ... ADX 7 5 [TOTAL NO. OF BLOX = INDEX + BULK 17 49QW ... SBX 7 FBLMOD(3) [ - ORIGINAL NUMBER 16 4==G ... BPZ 7 NOREDCUBS [J IF NO CHANGE 19 4=Q6 ... NGX 7 7 [NUMBER OF BLOCKS TO BE FREED 19 4?9Q ... SUBCUBS ,7,JOB,DEPTH [REDUCE ^CURRENT USED B.S.^ 7 4?PB ... TOPFCB2 3 21 4#92 ... SBS 7 FBLMOD(3) [FBLMOD = NO. OF INDEX + BULK BLOX 6 4#NL ...NOREDCUBS 11 4*8= ... MBS 3,BFALTB,BFALTR 18 4*MW ... LDX 0 BULKMOD(3) [ORIGINAL SIZE OF INDEX 17 4B7G ... SBN 4 FBLKS-A1 [NEW SIZE OF ONDEX 19 4BM6 ... STO 4 BULKMOD(3) [BULKMOD = END OF INDEX BLOX 7 4C6Q ... SBX 4 0 18 4CLB ... BPZ 4 NOFREEINDX [JIF NO FREE INDEX BLOX 20 4D62 ... BZE 5 NOBULK [JIF NO BULK BLOX TO MOVE ^DOWN^ 18 4DKL ... NGX 4 4 [NO. OF FREE INDEX BLOX 15 4F5= ... ADN 0 FBLKS(3) [-> BULK BLOX 7 4FJW ... LDX 1 0 4 4G4G ...[ 20 4GJ6 ...MOVEDOWN [MOVE BULK BLOCKS DOWN ONE AT A TIME & REPLACE FREED 21 4H3Q ...[ INDEX BLOCKS IN VACATED LOCATION AT END OF BULK BLOCKS 17 4HHB ... SBN 1 1 [->LAST INDEX BLOCK 18 4J32 ... LDX 7 0(1) [KEEP A FREE INDEX BLK 7 4JGL ... SMO 5 18 4K2= ... MOVE 0 0 [MOVE BULK BLOX ^DOWN^ 7 4KFW ... SMO 5 20 4K_G ... STO 7 0(1) [AND PUT INDEX BLK ON END OF BULK 20 4LF6 ... SBN 0 1 [ BLOCKS 20 4LYQ ... BCT 4 MOVEDOWN [LOOP FOR FURTHER FREE INDEX BLOX 21 4MDB ...NOBULK [INDEX BLOCKS ALREADY @ END OF FBLMOD 6 4MY2 ...NOFREEINDX 15 4NCL ... LDX 1 FPTR(3) [X1->FSTACK 4 4NX= ...[ 21 4PBW ...ZWRIT [NOW GET RID OF UNWANTED FUWB(OTHER TYPES DON'T MATTER) 4 4PWG ...[ 9 4QB6 ... LDX 1 FPTR(1) 18 4QTQ ... BXE 1 CXFI,ZUP [J IF END OF FILE CHAIN 9 4R*B ... LDX 0 ATYPE(1) 8 4RT2 ... SMO FX1 19 4S#L ... BXE 0 ZFEXTRA,ZUP [J IF END OF WORKFILE RTNG 10 4SS= ... BXE 0 FFSFCB,ZUP 10 4T?W ... BXU 0 FFSFUWB,ZWRIT 20 4TRG ... LDX 2 FBLMOD(3) [CAN FREE WRITE BLOX IF NO LONGER 20 4W?6 ... SBN 2 FBLKS-A1 [ WITHIN FILE 19 4WQQ ... BZE 2 ZFREE [FILE EMPTY - FREE ALL BLOX 9 4X=B ... LDX 0 BACK2(1) 18 4XQ2 ...ZLOOP BXE 0 FBLKS(3),ZUP [JIF STILL WITHIN FILE 7 4Y9L ... BUX 3 / 8 4YP= ... BCT 2 ZLOOP 7 4_8W ...ZFREE FREECORE 1 4 4_NG ...ZUP 5 5286 ... UP 4 52MQ ...[ 4 537B ...[ 21 53M2 ...ZBLAM [CONVERT BLOCK NO. IN BACK2 TO FREADBLOCK-TYPE POINTER 21 546L ...[ EXPECTS X3->BLOCK; LINK X0: LEAVES X1=POINTER; X2->FCB 11 54L= ...[ X3-X7 UNCHANGED 15 555W ... STO 0 GEN0 [SAVE LINK 17 55KG ... BLAM ,3 [DEPTH ZERO(%A NULL) 13 5656 ... BRN (GEN0) [EXIT 4 56JQ ...[ 4 574B ...[ 9 57J2 ...[ ZFINDBUFF SUBROUTINE 13 583L ...[ ON ENTRY X2=FX2 X5=REC SA X6=LINK 20 58H= ...[ ON EXIT THE USAGE BLOCK GIVEN FOR THE WORD POINTER IN X5 WILL 13 592W ...[ BE CHAINED IN THE FILE CHAIN 18 59GG ...[ X1-> USAGE BLOCK X2=FX2 X0,X3,X4,X5 DESTROYED 12 5=26 ...[ X7 PRESERVED UNCHANGED 19 5=FQ ...[ AN UNUSED USAGE BLOCK (IF ANY) WILL BE DISPOSED OF 4 5=_B ...[ 21 5?F2 ...[ IF THE BLOCK CANNOT BE FOUND & X7 IS ZERO (I.E. WRITING) 20 5?YL ...[ AND LS 9 BITS OF X5=0 (I.E. TRANSFER BRGINS ON BLOCK 17 5#D= ...[ BOUNDARY), IT WILL BE SET UP BY A GETCORE 4 5#XW ...[ 6 5*CG ...ZFINDBUFF 8 5*X6 ... SBX 6 FX1 9 5BBQ ... STO 6 AWORK3(2) 16 5BWB ... TOPFCAB2 3,1 [X3->FCA; X1->FCB 7 5CB2 ... LDN 6 0 17 5CTL ... BNZ 7 NOTWRITING [J IF READ TRANSFER 20 5D*= ... LDEX 0 5 [GET B15-23 OF BULK FILE ADDRESS 21 5DSW ... BNZ 0 NOTWRITING [J UNLESS WRITING FROM START OF BLK 19 5F#G ... LDX 6 GSIGN [SET ^DON'T BACKREAD^ MARKER 6 5FS6 ...NOTWRITING 21 5G?Q ... SRL 5 GSBSLOG [CONVERT BULK FILE ADDRESS TO BLOCKS 18 5GRB ... ADX 5 BULKMOD(1) [MAKE IT RELATIVE TO BOF 20 5H?2 ... ADN 5 FBLKS [MAKE IT RELATIVE TO A0 OF FCB 20 5HQL ... ORX 6 5 [AS STANDARD FREADBLOCK POINTER 14 5J== ... STO 6 FREADBLOCK(3) [SAVE IT 19 5JPW ...ZRESTART [(RE)CALCULATE BLOCK NUMBER (AFTER COOR DURING 20 5K9G ...[ WHICH RESIDENCE MAY HAVE CHANGED DUE TO COPYFILE). 7 5KP6 ... SMO 6 14 5L8Q ... LDX 5 0(1) [ BLK NO 16 5LNB ... LDN 6 0 [BLOCK NOT FOUND 15 5M82 ... LDX 3 FPTR(1) [X3->FSTACK 5 5MML ...ZMOREBL 8 5N7= ... LDX 1 FX1 8 5NLW ... LDX 2 FX2 15 5P6G ... LDX 3 FPTR(3) [ NEXT BLK 18 5PL6 ... BXE 3 CXFI,NOTFOUND [J IF END OF FILE CHAIN 9 5Q5Q ... LDX 0 ATYPE(3) 16 5QKB ... BXE 0 FFSFCB,NOTFOUND [J IF NEXT FCB 17 5R52 ... BXE 0 ZFEXTRA(1),NOTFOUND [J IF END OF !RING 10 5RJL ... BXE 0 FFSFURB,READ 11 5S4= ... BXU 0 FFSFUWB,ZMOREBL 4 5SHW ...[ 14 5T3G ...[ FUWB FOUND SO CAN'T BE ANY MORE BUFFERS 4 5TH6 ...[ 18 5W2Q ... BXE 5 BACK2(3),ZOUT [J IF RIGHT BLOCK FOUND 18 5WGB ... CHAIN 3,2 [MOVE TO ACTIVITY CHAIN 21 5X22 ... CALL 0 ZBLAM [GET STANDARD FREADBLOCK-TYPE POINTER 7 5XFL ... LDX 4 1 21 5X_= ... FILEAUTW ,FAIL+FREE,,4,,,NOCHECK [WRITE BLOCK AWAY AUTONOMOUSLY 9 5YDW ... BRN NOTFOUND 4 5YYG ...[ 4 5_D6 ...READ 17 5_XQ ... BXU 5 BACK2(3),WRONGBLOCK [J UNLESS RIGHT BLOC 20 62CB ... BNZ 6 (GEOERR) [SHOULDN'T FIND SAME BLOCK TWICE 18 62X2 ... LDX 6 3 [KEEP ADDRESS OF BLOCK 19 63BL ... BRN ZMOREBL [LOOK FOR MORE UNUSED BLOCKS 4 63W= ...[ 6 64*W ...WRONGBLOCK 4 64TG ...[ 15 65*6 ...[ FREE THE BLOCK IF NO ONE ELSE IS USING IT. 4 65SQ ...[ 7 66#B ... TOPFCA2 2 15 66S2 ... PSTAC 2,2 [X2->FSTACK 16 67?L ... LDEX 4 ARINGNO(2) [ NO 0F ELEMENTS 7 67R= ... SBN 4 1 15 68=W ... BZE 4 ZREADFREE [ ONE 0WNER 7 68QG ... ADN 4 1 19 69=6 ... CALL 0 ZBLAM [GET FREADBLOCK-TYPE POINTER 15 69PQ ... LDX 2 FPTR(2) [X2->FSTACK 5 6=9B ...ZFELL 16 6=P2 ... BXE 1 A1+FREADBLOCK(2),ZMOREBL [J IF IN USE 16 6?8L ... ADN 2 FELLEN [ NEXT ELEMENT 8 6?N= ... BCT 4 ZFELL 6 6#7W ...ZREADFREE 20 6#MG ... LDX 3 BPTR(3) [KEEP ADDRESS OF PREVIOUS BLOCK 17 6*76 ... FREECORE FPTR(3) [FREE UNUSED BLOCK 9 6*LQ ... BRN ZMOREBL 4 6B6B ...[ 5 6BL2 ...NOTFOUND 18 6C5L ... LDX 3 6 [ADDRESS OF FOUND BLOCK 17 6CK= ... BNZ 3 ZOUT [J IF BLOCK LOCATED 10 6D4W ... HUNTW 3,BSTB,BREAD 19 6DJG ... BPZ 3 ZNAMEFURB [J IF FILEREAD ALREADY DONE 10 6F46 ... SMO FILERING(2) 10 6FHQ ... LDX 6 FREADBLOCK 21 6G3B ... BPZ 6 ZFREAD [J UNLESS ^DON'T BACKREAD^ MARKER SET 17 6GH2 ... GETCORE BSBS,1 [BLOCK NOT YET USED 7 6H2L ... FINDCORE 3 7 6HG= ... TOPFCB2 1 20 6H_W ... LDX 0 BSPRE(1) [RESIDENCE NO. MAY HAVE CHANGED 20 6JFG ... STO 0 BACK1(3) [DURING GETCORE DUE TO COPYFILE 7 6J_6 ... SMO 6 21 6KDQ ... LDX 0 0(1) [RECOVER BLOCK NO. USING FREADBLOCK 19 6KYB ... STO 0 BACK2(3) [ POINTER 16 6LD2 ... BRN ZNAMEFURB [REJOIN MAIN PATH 4 6LXL ...[ 5 6MC= ...ZFREAD 12 6MWW ... FILEREAD ,FAIL,,6,,,NOCHECK 3 6NBG ... 16 6NW6 ...[ NOW CHECK NO-ONE ELSE HAS SET UP THE SAME BLOCK 3 6P*Q ... 7 6PTB ... TOPFCB2 1 15 6Q*2 ... BRN ZRESTART [START AGAIN 4 6QSL ...[ 6 6R#= ...ZNAMEFURB 10 6RRW ... NAME 3,FILE,FURB 7 6S?G ... TOPFCA2 2 15 6SR6 ... PSTAC 2,2 [X2->FSTACK 17 6T=Q ... CHAIN 3,2 [PUT IN FILE CHAIN 4 6TQB ...ZOUT 21 6W=2 ... VFREEW BSTB,BREAD [UNUSED BREAD:- SOMEONE ELSE READ IT 8 6WPL ... LDX 2 FX2 20 6X9= ... LDX 1 3 [PUT BLOCK ADDRESS IN X1 AS WELL 9 6XNW ... LDX 6 AWORK3(2) 8 6Y8G ... ADX 6 FX1 7 6YN6 ... EXIT 6 0 4 6_7Q ...[ 4 6_MB ...[ 10 7272 ...[ ENTRY TO GET A FURB 4 72LL ...[ 5 736= ...ZGETBUFF 19 73KW ... LDX 5 AWORK3(2) [BULK FILE ADDRESS IN WORDS 19 745G ... LDN 7 1 [MARKER TO INDICATE READING 19 74K6 ... CALL 6 ZFINDBUFF [ENSURE FURB IN FILE CHAIN 5 754Q ... UP 4 75JB ...[ 4 7642 ...[ 21 76HL ...[ ROUTINE TO SET UP A NEW INDEX BLOCKLET. A BLOCK IS TAKEN FROM THE 18 773= ...[ END OF THE BULK FILE IF THE INDEX REQUIRES EXTENSION. 4 77GW ...[ 4 782G ...[ 5 78G6 ...Z4MTCODE 4 78_Q ...[ 7 79FB ... TOPFCA2 2 10 79_2 ... LDX 0 FREADWORD(2) 14 7=DL ... TRACEIF K6MTCODE,199,299,0,XTNDINDX 8 7=Y= ... SRL 0 12 10 7?CW ... SBN 0 FBLKS*BLN-1 21 7?XG ... SRL 0 BLS [GIVING BLK HOLDING NEXT INDEX BLT 8 7#C6 ... PSTAC 2,2 8 7#WQ ... BFCBX 2,2 19 7*BB ... BXL 0 BULKMOD(2),NONEWBLK [JIF NO NEED TO EXTEND INDEX 16 7*W2 ... TRACEIF K6MTCODE,199,299,BULKMOD(2),NEWIXBLK 7 7B*L ... LDN 3 1 20 7BT= ... CALL 7 XTNDBULK [CHECK FOR FILE FULL & E.O.T. AND 21 7C#W ... LDX 5 FBLMOD(2) [ GET NEW BLK IF NECESSARY 9 7CSG ... SBN 5 FBLKS-A1 10 7D#6 ... SBX 5 BULKMOD(2) 18 7DRQ ... BZE 5 NBULK [JIF NO BULK BLOX IN FILE 7 7F?B ... LDX 1 2 18 7FR2 ... ADX 1 FBLMOD(2) [-> TO END OF BULK FILE 18 7G=L ... LDX 7 A1(1) [PINCH A BLK FROM THE END 5 7GQ= ...MOVEUP 9 7H9W ... LDX 0 A1-1(1) 17 7HPG ... STO 0 A1(1) [MOVE BULK BLOX ^UP^ 7 7J96 ... SBN 1 1 9 7JNQ ... BCT 5 MOVEUP 18 7K8B ... STO 7 A1(1) [POP IN THE NEW INDEX BLK 5 7KN2 ...NBULK 21 7L7L ... ADS 6 FBLMOD(2) [INCREMENT BY 1 : LEFT BY XTNDBULK 17 7LM= ... ADS 6 BULKMOD(2) [ DITTO 5 7M6W ...NONEWBLK 12 7MLG ... SETNCORE GSBS4,3,FILE,FINDEXW 7 7N66 ... TOPFCA2 1 10 7NKQ ... LDX 7 FREADWORD(1) 9 7P5B ... ANDX 7 HALFTOP 19 7PK2 ... ADX 7 BIT11 [ADD 1 TO BLOCKLET POINTER 18 7Q4L ... STO 7 FREADWORD(1) [ & ZEROIZE WORD POINTER 8 7QJ= ... PSTAC 1,1 8 7R3W ... BFCBX 1,1 9 7RHG ... LDX 0 BSPRE(1) 18 7S36 ... STO 0 BACK1(3) [SET UP BACK1 OF NEW BLT 8 7SGQ ... SRL 7 12 7 7T2B ... LDX 0 7 18 7TG2 ... ANDN 0 BLN-1 [ISOLATE BLT WITHIN BLK 8 7T_L ... SRL 7 BLS 7 7WF= ... SMO 7 17 7WYW ... ORX 0 0(1) [ & ADD IN BLK NO. 18 7XDG ... STO 0 BACK2(3) [GIVING BACK2 OF NEW BLT 15 7XY6 ... TRACEIF K6MTCODE,199,299,AWORK2(2),NEW A1 9 7YCQ ... LDX 0 AWORK2(2) 20 7YXB ... STO 0 A1(3) [1ST WD = LAST USED BULK WD +1 8 7_C2 ... SMO FX1 8 7_WL ... LDX 0 MEND 15 82B= ... STO 0 A1+1(3) [SET 'END ' 15 82TW ... LDX 2 FPTR(1) [X2->FSTACK 20 83*G ... CHAIN 3,2 [CHAIN NEW FINDEXW IN FRONT OF 20 83T6 ... SETREP2 OK [ FSTACK 5 84#Q ... UP 4 84SB ...[ 4 85#2 ...[ 9 85RL ...[ ZTRANSTYPE SUBROUTINE 4 86?= ...[ 15 86QW ...[ REGION A B C D X 15 87=G ...[ TRANSFER *** **** *** OR * 16 87Q6 ...[ BLOCK BOUNDARY _ _ _ _ _ _ 16 889Q ...[ X5=END ADDRESS OF PERI IN BULK FILE 15 88PB ...[ X6=LENGTH OF TRANSFER REQUIRED 21 8992 ...[ ON EXIT ACA4=NEXT OBJECT PROGRAM BUFFER ADDRESS; ACA6-9 DESTROYED 12 89NL ...[ USAGE ACA6=A OR D TYPE LENGTH 11 8=8= ...[ ACA7=B TYPE LENGTH 11 8=MW ...[ ACA8=C TYPE LENGTH 6 8?7G ...ZTRANSTYPE 19 8?M6 ... SBX 5 6 [START ADDRESS IN BULK FILE 19 8#6Q ... STO 5 ACA9(2) [SET UP START ADDRESS IN ACA9 21 8#LB ... LDEX 4 5 [X4=0 IF STARTING ON BLOCK BOUNDARY 8 8*62 ... LDN 0 GSBS 15 8*KL ... SBX 0 4 [X0=A OR D+X 21 8B5= ... BXL 0 6,ZNOTYPED [J UNLESS TYPE D OR A+B+C WHERE A=C=0 18 8BJW ... STO 6 ACA6(2) [SET TYPE D COUNT IN ACA6 15 8C4G ... TRACEIF K6MTCODE,199,299,ACA6(2),TYPE D 15 8CJ6 ... STOZ ACA7(2) [NO TYPE B 15 8D3Q ... STOZ ACA8(2) [NO TYPE C 17 8DHB ... BRN TYPED [TYPE D TRANSFER ONLY 4 8F32 ...[ 5 8FGL ...ZNOTYPED 18 8G2= ... STO 0 ACA6(2) [SET TYPE A COUNT IN ACA6 17 8GFW ... SBS 0 6 [X6=REMAINDER COUNT 15 8G_G ... LDEX 0 6 [TYPE C COUNT 9 8HF6 ... STO 0 ACA8(2) 15 8HYQ ... ERX 0 6 [TYPE B COUNT 18 8JDB ... STO 0 ACA7(2) [SET TYPE B COUNT IN ACA7 9 8JY2 ... LDX 0 ACA6(2) 15 8KCL ... TRACEIF K6MTCODE,199,299,ACA6(2),TYPE A 15 8KX= ... TRACEIF K6MTCODE,199,299,ACA7(2),TYPE B 15 8LBW ... TRACEIF K6MTCODE,199,299,ACA8(2),TYPE C 9 8LWG ... BZE 0 ONOTYPEA 4 8MB6 ...[ 12 8MTQ ...TYPED [TYPE A OR D TRANSFER 4 8N*B ...[ 16 8NT2 ... CALL 6 ZFINDBUFF [X1->USAGE BLOCK 18 8P#L ... LDX 5 ACA9(2) [BULK FILE START ADDRESS 19 8PS= ... ADX 5 ACA6(2) [NEXT BULK FILE START ADDRESS 10 8Q?W ... LDX 3 APETADDR(2) 17 8QRG ... LDX 4 ACA6(2) [TYPE A OR D LENGTH 15 8R?6 ... BNZ 7 ONORITEA [J IF READING 4 8RQQ ...[ 11 8S=B ...[ WRITE TYPE A OR D 4 8SQ2 ...[ 19 8T9L ... NAME 1,FILE,FUWB [ENSURE USAGE BLOCK WRITTEN 20 8TP= ... LDEX 0 ACA9(2) [START ADDRESS WITHIN USAGE BLOCK 8 8W8W ... ADN 1 A1 7 8WNG ... ADX 1 0 21 8X86 ... LDX 2 1 [X2->START ADDRESS OF DATA AREA IN US 8 8XMQ ... SMO FX2 20 8Y7B ... LDX 1 ACA4 [OBJECT PROGRAM BUFFER ADDRESS 19 8YM2 ... CALL 6 MOVEOUT [MOVE DATA TO OBJECT PROGRAM 8 8_6L ... BRN OA 4 8_L= ...[ 11 925W ...ONORITEA [READ TYPE A OR D 4 92KG ...[ 9 9356 ... LDEX 0 ACA9(2) 7 93JQ ... ADX 1 0 19 944B ... ADN 1 A1 [X1->DATA AREA IN USAGE BLOCK 21 94J2 ... LDX 2 ACA4(2) [X2->START OF OBJECT PROGRAM BUFFER 20 953L ... CALL 6 MOVEIN [MOVE DATA OUT OF OBJECT PROGRAM 4 95H= ...[ 11 962W ...OA [UPDATE POINTERS 4 96GG ...[ 17 9726 ... LDX 0 ACA6(2) [TYPE A OR D LENGTH 21 97FQ ... ADS 0 ACA4(2) [UPDATE OBJECT PROGRAM BUFFER ADDRESS 4 97_B ...[ 5 98F2 ...ONOTYPEA 9 98YL ... LDX 6 ACA7(2) 18 99D= ... BZE 6 ONOTYPEB [J IF NO TYPE B TRANSFERS 4 99XW ...[ 20 9=CG ...[ TYPE B TRANSFERS ARE DONE DIRECTLY BETWEEN THE PROGRAM AND BS. 20 9=X6 ...[ THIS MEANS THAT MULTIPLE READERS MAY FAIL TO SHARE TRANSFERS BUT 21 9?BQ ...[ TRANSFERS RARELY EXCEED GSBS WORDS AND MULTIPLE READING IS ALSO RARE. 20 9?WB ...[ THE ADVANTAGE OF DIRECT TRANSFERS IS THAT READS CAN BE AUTONOMOUS 18 9#B2 ...[ AND THAT WRITES DO NOT FILL UP CORE WITH BWRITE BLOCKS. 4 9#TL ...[ 20 9**= ... SRL 6 GSBSLOG [CONVERT TYPE B COUNT TO BLOCKS 4 9*SW ...[ 18 9B#G ...OSTA LDX 4 5 [BULK FILE START ADDRESS 17 9BS6 ... SRL 4 GSBSLOG [CONVERT TO BLOCKS 7 9C?Q ... TOPFCB2 1 8 9CRB ... ADN 4 FBLKS 21 9D?2 ... ADX 4 BULKMOD(1) [CONVERT TO FREADBLOCK-TYPE POINTER 9 9DQL ... STO 6 AWORK3(2) 20 9F== ... LDX 6 ACA4(2) [OBJECT PROGRAM BUFFER ADDRESS 9 9FPW ... BNZ 7 ONORITEB 10 9G9G ... LDX 7 APETADDR(2) 12 9GP6 ... FILEAUTW ,FAIL+BOBJ,,4,EX6,EX7 19 9H8Q ... LDN 7 0 [RESTORE X7=0 (I.E. WRITING) 8 9HNB ... BRN OB 4 9J82 ...[ 5 9JML ...ONORITEB 20 9K7= ... LDX 7 APETADDR(2) [N.B. X7 NOT = 0 (I.E. READING) 12 9KLW ... FILEAUTR ,FAIL+BOBJ,,4,EX6,EX7 4 9L6G ...[ 19 9LL6 ...OB LDX 6 AWORK3(2) [COUNT OF TYPE B TRANSFERS 8 9M5Q ... LDN 0 GSBS 21 9MKB ... ADS 0 ACA4(2) [UPDATE OBJECT PROGRAM BUFFER ADDRESS 20 9N52 ... ADS 0 5 [UPDATE BULK FILE ADDRESS IN X5 15 9NJL ... BCT 6 OSTA [J IF MORE 4 9P4= ...[ 5 9PHW ...ONOTYPEB 9 9Q3G ... LDX 0 ACA8(2) 18 9QH6 ... BZE 0 ONOTYPEC [J IF NO TYPE C TRANSFER 16 9R2Q ... CALL 6 ZFINDBUFF [X1->USAGE BLOCK 10 9RGB ... LDX 3 APETADDR(2) 16 9S22 ... LDX 4 ACA8(2) [TYPE C LENGTH 15 9SFL ... BNZ 7 ONORITEC [J IF READING 20 9S_= ... NAME 1,FILE,FUWB [ENSURE USAGE BLOCK IS WRITTEN 8 9TDW ... ADN 1 A1 18 9TYG ... LDX 2 1 [X2->A1 OF USAGE BLOCK 8 9WD6 ... SMO FX2 20 9WXQ ... LDX 1 ACA4 [X1->OBJECT PROGRAM BUFFER AREA 19 9XCB ... CALL 6 MOVEOUT [MOVE DATA TO OBJECT PROGRAM 8 9XX2 ... BRN OC 4 9YBL ...[ 5 9YW= ...ONORITEC 18 9_*W ... ADN 1 A1 [X1->A1 OF USAGE BLOCK 20 9_TG ... LDX 2 ACA4(2) [X2->OBJECT PROGRAM BUFFER AREA 20 =2*6 ... CALL 6 MOVEIN [MOVE DATA OUT OF OBJECT PROGRAM 4 =2SQ ...[ 4 =3#B ...OC 9 =3S2 ... LDX 0 ACA8(2) 21 =4?L ... ADS 0 ACA4(2) [UPDATE NEXT PROGRAM BUFFER ADDRESS 5 =4R= ...ONOTYPEC 9 =5=W ... LDX 0 ACA7(2) 18 =5QG ... BZE 0 OUP [J IF NO TYPE B TRANSFERS 21 =6=6 ... BACKWAIT [WAIT FOR AUTO TRANSFERS TO FINISH 4 =6PQ ...OUP 5 =79B ... UP 4 =7P2 ...[ 10 =88L ... MENDAREA 30,K99MTCODE 4 =8N= ...#END 6 ____ ...702575260001