16 22FL #SEG INSERT6 [ JUDY BIDGOOD 14 22_= #OPT K0INSERT=K0ACCESS>K0FILESTORE>K0ALLGEO 14 23DW #OPT K6INSERT=K6ACCESS>K6FILESTORE>K6ALLGEO 7 23YG #LIS K0INSERT 7 24D6 8HINSERT 4 24XQ [ 14 25CB SEGENTRY K1INSERT,XINSERT [INSERT 14 25X2 SEGENTRY K2INSERT,XREPLACE [REPLACE 17 26BL SEGENTRY K11INSERT,ZINSERT [INSERT - ZERO DEPTH 17 26W= SEGENTRY K12INSERT,ZREPLACE [REPLACE - ZERO DEPTH 19 27*W SEGENTRY K10INSERT,ZCOMPRESS [SPECIAL INSERT FOR COMPRESS. 4 27TG [ 21 28*6 # THIS SEGMENT IMPLEMENTS THE INSERT & REPLACE SERIAL ACCESS MACROS 4 28SQ # 16 29#B # THIS SEGMENT DEALS WITH THE FEW EASY CASES. 4 29S2 # 4 2=?L # 10 2=R= # USES OF AWORK WORDS 4 2?=W # 11 2?QG # AWORK1 : B0 : REPLACE 16 2#=6 # B1 : REPLACING LAST RECORD IN BLOCK 12 2#PQ # B2 : CAREFUL FILE 14 2*9B # B3 : OVERFLOW FORWARD BIT 18 2*P2 # B4 : ^RECORD IN NEXT BLOCK^(R.I.N.B.) BIT. 16 2B8L # B5 : AN EMPTY BLOCK HAS BEEN SET UP 19 2BN= # B6 : AN EMPTY BLOCK AT E.O.F.HAS BEEN SET UP. 16 2C7W # B7 : INSERT3 BLOCK A RE-NAMED FUWB. 18 2CG? ...# B8 : SPECIAL INSERT FOR COMPRESSING FILES. 21 2CSN ...# B9 : TWO NEW BLOCKS WILL BE NEEDED TO COMPLETE INSERT 4 2D76 # 14 2DLQ # B15-B23: SIZE EXTRA REQUIRED 10 2F6B # AWORK2 : FILE DEPTH 14 2FL2 # AWORK3 : TOP 9 BITS = SIZE OF RECORD 19 2G5L # : BOTTOM 10 BITS=A1+AMOUNT USED IN INSERT1 BLOCK. 12 2GK= # AWORK4 : WORKING SPACE WORD 4 2H4W # 4 2HJG # 8 2J46 # ACOMMUNE WORDS 13 2JHQ # ACOM5 : -> FCA BETWEEN COORS 4 2K3B # 4 2KH2 # 4 2L2L # 4 2LG= # 4 2L_W # 6 2MFG # ERRORS 5 2M_6 ZGEOER1 18 2NDQ GEOERR 1,NOINSERT [NO FILE/FWB FOR INSERT 5 2NYB ZGEOER2 20 2PD2 GEOERR 1,RECORD? [RECORD BEING OPERATED ON WRONG. 5 2PXL ZGEOER3 20 2QC= GEOERR 1,INSRDEEP [NO FILE OPEN AT REQUISITE DEPTH 5 2QWW ZGEOER4 18 2RBG GEOERR 1,NOPENINS [NOT OPEN IN GENERAL MODE 5 2RW6 ZGEOER5 20 2S*Q GEOERR 1,FULLBGON [FULLB GONE.OUGHT TO BE PRESENT 5 2STB ZGEOER6 20 2T*2 GEOERR 1,MOVEZERO [UNEXPECTED ZERO MOVE IN INSERT 5 2TSL ZGEOER7 18 2W#= GEOERR 1,STO ZERO [MOVE OR LESS AS ABOVE 5 2WRW ZGEOER8 18 2X?G GEOERR 1,WILL GO! [INSERT HAS MISCALCULATED 5 2XR6 ZGEOER9 18 2Y=Q GEOERR 1,NO BLOCK [ERROR IN SFINDFURB S/R. 5 2YQB ZGEOER10 21 2_=2 GEOERR 1,BLOKRONG [USAGE BLOCK IN WRONG PART OF CORE 5 2_PL ZGEOER11 21 329= GEOERR 1,ENDBLOCK [INSERT REACHED E.O.B. UNEXPECTEDLY. 5 32NW ZGEOER13 20 338G GEOERR 1,INDEX? [SOMETHING WRONG WITH INDEXING 4 33N6 # 5 347Q SFULLB 8 34MB #HAL BSTB+FULLB,0 7 3572 THREE +3 4 35LL # 4 366= # 8 36KW # SUBROUTINES 10 375G # NONZERO DEPTH ENTRY 5 37K6 ZDEEP 16 384Q FILECOUNT 0 [X0=NO.FILES OPEN 10 38JB LDX 1 ACOMMUNE7(2) 16 3942 SRA 1 15 [CONVERT & STORE 14 39HL STO 1 AWORK2(2) [DEPTH 14 3=3= BNG 1 ZD1 [CHECK 14 3=GW SBX 1 0 [DEPTH 9 3?2G BPZ 1 ZGEOER3 13 3?G6 BRN ZD3 [OK 7 3?_Q ZD1 ADX 0 1 9 3#FB BNG 0 ZGEOER3 4 3#_2 ZD3 15 3*DL SFSTACK AWORK2(2),1 [X1 -> FCA 8 3*Y= BRN ZD4 9 3BCW # ZERO DEPTH ENTRY 4 3BXG ZTOP 15 3CC6 STOZ AWORK2(2) [ZERO DEPTH 7 3CWQ TOPFCA2 1 4 3DBB ZD4 21 3DW2 JBC ZGEOER4,1,BAMGEN [ERROR IF NOT OPEN IN GENERAL MODE 15 3F*L STOZ AWORK1(2) [MARKER WORD 7 3FT= PSTAC 1,1 7 3G#W BFCBX 1,1 17 3GSG JBC (7),1,BFCARE [JIF NOT CAREFUL FILE 17 3H#6 LDCT 0 #100 [IF IT SET,SET BIT 9 3HRQ ORS 0 AWORK1(2) 7 3J?B EXIT 7 0 9 3JR2 # MINI-SUBROUTINES 4 3K=L # 4 3KQ= # 10 3L9W SFCB3 [SET X3-> FCB 8 3LPG SMO FX2 9 3M96 LDX 0 AWORK2 15 3MNQ SFSTACK 0,3 [X3 -> FCA 8 3N8B SMO FX2 14 3NN2 STO 3 ACOMMUNE5 [STORE 8 3P7L PSTAC 3,3 15 3PM= BFCBX 3,3 [X3 -> FCB 7 3Q6W EXIT 6 0 4 3QLG # 4 3R66 # 6 3RKQ SENDBLOCK 9 3S5B #SKI K6INSERT>699-699 9 3SK2 TRACE 3,SENDBLOK 18 3T4L LDX 1 3 [X3 &X1 -> NEXT RECORD 5 3TJ= SEBLP 14 3W3W LDEX 0 FRH(1) [NEXT R.H 15 3WHG ADS 0 1 [ADD INTO PTR 17 3X36 BNZ 0 SEBLP [J BACK IF NON ZERO 9 3XGQ #SKI K6INSERT>699-699 9 3Y2B TRACE 1,SENDIS 13 3YG2 EXIT 7 0 [EXIT 4 3Y_L # 5 3_F= SFURB 8 3_YW SMO FX2 17 42DG LDX 0 AWORK2 [SET X2 - > FSTACK 15 42Y6 SFSTACK 0,2 [X2 -> FCA 8 43CQ SMO FX2 14 43XB STO 2 ACOMMUNE5 [STORE 5 44C2 SFFURB 15 44WL PSTAC 2,2 [X2 -> FSTACK 9 45B= BRN SFFULP 6 45TW SFINDFURB 20 46*G # CALLED BY X1.THE WORD AFTER THE CALL CONTAINS THE TYPE/SUBTYPE 20 46T6 # WANTED.X3 ->FCB,X2 WILL POINT ON EXIT TO THE BLOCK REQUIRED. 17 47#Q LDX 2 FPTR(3) [J OVER FSTACK BLOCK 5 47SB SFFULP 15 48#2 LDX 2 FPTR(2) [NEXT BLOCK 9 48RL LDX 0 ATYPE(2) 7 49?= #SKI K6INSERT 17 49QW BXE 0 FILEPLUSFCB,ZGEOER9 [ERROR IF NOT FOUND 16 4==G BXU 0 0(1),SFFULP [J IF WRONG TYPE 17 4=Q6 EXIT 1 1 [EXIT ROUND TYPE-WORD 4 4?9Q # 5 4?PB SFLPB 14 4#92 LDX 2 FPTR(3) [->FSTACK 8 4#NL BRN SFLP 4 4*8= # 16 4*MW SFINDFULLB [SET X3 ->FCB,X2-> APPROPRIATE FULLB 21 4B7G # CALLED BY X6,OVERWRITES X2,WHICH POINTS TO AN APPROPRIATE FULLB 14 4BM6 # FOR THIS FILE ON SUCCESSFUL EXIT (+1) 10 4C6Q # EXIT +0 => NO FULLB 9 4CLB # X3 POINTS TO FCB. 8 4D62 SMO FX2 9 4DKL LDX 0 AWORK2 17 4F5= SFSTACK 0,2,2 [FIND X2 -> FSTACK 15 4FJW BFCBX 3,2 [X3 -> FCB 4 4G4G SFLP 15 4GJ6 LDX 2 FPTR(2) [NEXT BLOCK 17 4H3Q BXE 2 CXFI,(6) [EXIT IF E.O.CHAIN. 13 4HHB LDX 0 ATYPE(2) [TYPE 20 4J32 BXE 0 FILEPLUSFCB,(6) [EXIT FCB, SEARCH UNSUCCESSFUL 8 4JGL SMO FX1 17 4K2= BXU 0 SFULLB,SFLP [J IF NOT BSTB/FULLB 9 4KFW LDX 0 A1+1(2) 18 4K_G BXU 0 BSPRE(3),SFLP [J IF WRONG B.S.PREFIX. 7 4LF6 EXIT 6 1 4 4LYQ # 5 4MDB SFCA2 8 4MY2 SMO FX2 14 4NCL LDX 0 AWORK2 [DEPTH 15 4NX= SFSTACK 0,2 [X2 -> FCA 8 4PBW SMO FX2 9 4PWG STO 2 ACOMMUNE5 8 4QB6 EXIT 6 0 4 4QTQ # 4 4R*B # 6 4RT2 SCAREFULA 20 4S#L # THIS ROUTINE DOES ALL THE CAREFUL UPDATING FOR 1 BLOCK HAVING 21 4SS= # BEEN CHANGED. IF NECESSARY A BSTR/FULLB IS SET UP,OR ALTLEN'ED, 13 4T?W # AND THE BLOCK NO. IS SWAPPED OVER 4 4TRG # 13 4W?6 # OVERWRITES X1,2,3,6, CALLED BY X7 21 4WQQ # X4 THROUGHOUT INDICATES WHICH BLOCK NUMBER TO CHANGE (A FREADBLOCK 13 4X=B # TYPE PTR REL. TO AD OF THE FCB); 19 4XQ2 # ON EXIT X2 -> THE USAGE BLOCK; THIS IS ASSUMED TO BE A 9 4Y9L # FI/INSERT4 BLOCK 4 4YP= # 9 4_8W #SKI K6INSERT>199-199 9 4_NG TRACE 4,CAREFUL 17 5286 JBC STEND,3,BFCARE [EXIT IF NOT CAREFUL 19 52MQ LDX 0 4 [BLOCK WE'RE INTERESTED IN 14 537B SBN 0 FBLKS-1 [DATUMISE 18 53M2 MAPBCH 0,3 [CHECK IF BIT SET 16 546L BNZ 0 STEND [EXIT IF IT IS 9 54L= #SKI K6INSERT>399-399 11 555W TRACE FUSEBL(3),NO BIT 16 55KG SBX 7 FX1 [DATUMISE LINK 21 5656 JBC NEWFULLB,3,BFALTR [IF FILE NOT ALTERED,SET UP A FULLB 15 56JQ CALL 6 SFLPB [X2->FULLB 18 574B BRN NEWFULLB [J IF FULLB NOT PRESENT 16 57J2 LDX 6 ALOGLEN(2) [NOW ALTLEN FULLB 7 583L ADN 6 1 7 58H= LDX 3 2 15 592W ALTLEN 3,6 [BY ONE WORD 17 59GG CALL 6 SFINDFULLB [X2-> FULLB,X3->FCB 21 5=26 CALL 0 ZGEOER5 [ERROR IF UNSUCCESSFUL,X0 TELLS US 19 5=FQ BRN SFULONG [WHENCE WE CAME FOR GEOERR. 5 5=_B NEWFULLB 9 5?F2 #SKI K6INSERT>399-399 11 5?YL TRACE COMM(3),NEWFULLB 17 5#D= SETNCORE 3,1,BSTB,FULLB [SET UP FUUB,X1 -> IF 14 5#XW CALL 6 SFCB3 [X3 ->FCB 15 5*CG LDX 2 3 [X1 -> FCB 4 5*X6 XLP 19 5BBQ LDX 2 FPTR(2) [NEXT BLOCK IN FILE CHAIN. 18 5BWB BXE 2 CXFI,SCHAIN [J IF END OF FILE CHAIN 9 5CB2 LDX 0 ATYPE(2) 18 5CTL BXE 0 FILEPLUSFCB,SCHAIN [J IF WE'VE REACHED FCB 18 5D*= SMO FX1 [O/W SEARCH FOR FULLB. 17 5DSW BXU 0 SFULLB,XLP [J BACK IF NOT FULLB 5 5F#G SCHAIN 17 5FS6 STO 1 6 [PRESERVE FULLB PTR 19 5G?Q CHAIN 1,BPTR(2) [CHAI> IN FRONT OF NEXT FCB 18 5GRB LDX 2 6 [PICK UP FULLB PTR AGAIN 17 5H?2 LDX 0 BSPRE(3) [B.S. PREFIX OF FULLB 9 5HQL STO 0 A1+1(2) 7 5J== LDN 0 2 16 5JPW STO 0 A1(2) [R.H. OF FULLB 5 5K9G SFULONG 5 5KP6 SGETBAC 9 5L8Q LDX 3 BSPRE(3) 15 5LNB GETBACK 3 [GET 1 BLOCK 10 5M82 ADDSKIP I516A,BSGET 18 5MML LDX 1 3 [PRESERVE OLD B.S.PREFIX 9 5N7= #SKI K6INSERT>299-299 12 5NLW TRACE ACOMMUNE7(2),NEWBLOCK 14 5P6G CALL 6 SFCB3 [X3 ->FCB 21 5PL6 BXE 1 BSPRE(3),NOCHBSP [JIF BSPRE HASN'T CHANGED OVER COOR 10 5Q5Q LDX 2 ACOMMUNE7(2) 15 5QKB FREEBACK 1,2 [FREE BLOCK 10 5R52 ADDSKIP I516A,ADLFBL 8 5RJL CALL 6 SFCB3 9 5S4= BRN SGETBAC 5 5SHW NOCHBSP 9 5T3G LDX 2 FPTR(3) 15 5TH6 CALL 6 SFLP [X2 -> FULLB 9 5W2Q CALL 0 ZGEOER5 7 5WGB SMO 4 8 5X22 LDX 0 0(3) 17 5XFL SMO A1(2) [OLD BLOCK IN FULLB 8 5X_= STO 0 A1(2) 15 5YDW LDN 0 1 [UPDATE R.H 8 5YYG ADS 0 A1(2) 8 5_D6 SMO FX2 15 5_XQ LDX 6 ACOMMUNE7 [NEW BLOCK 7 62CB SMO 4 16 62X2 STO 6 0(3) [NGN BLOCK IN FCB 16 63BL CALL 1 SFINDFURB [X2 -> INSERT4 8 63W= #HAL FI+INSERT4,0 15 64*W STO 6 BACK2(2) [BLOCK NUMBER 12 64TG LDX 0 BSPRE(3) [ 15 65*6 STO 0 BACK1(2) [B.S.PREFIX. 21 65SQ MBS 3,BFALTR,BFALTB [INDICATE FILE & BLOCK NOS. ALTERED 15 66#B SBN 4 FBLKS-1 [CRT NO. 15 66S2 STO 2 6 [INSERT4 BLOLB 14 67?L MAPBSE 4,3 [SET BIT 7 67R= LDX 2 6 9 68=W ADN 4 FBLKS-1 8 68QG ADX 7 FX1 9 69=6 #SKI K6INSERT>399-399 9 69PQ TRACE 4,UPDATED 7 6=9B EXIT 7 0 5 6=P2 STEND 9 6?8L #SKI K6INSERT>399-399 9 6?N= TRACE 0,STEND 17 6#7W CALL 1 SFINDFURB [X2-> INSERT4 BLOCK 8 6#MG #HAL FI+INSERT4,0 7 6*76 EXIT 7 0 4 6*LQ # 4 6B6B # 21 6BL2 # THIS S/R MOVES DOWN AN AMOUNT OF CORE(IN AN USAIE BLOCK),OF SIZE 8 6C5L # [X0] BY [X1] 14 6CK= # THE AREA TO BE MOVED STARTS @ [X3] 4 6D4W # 6 6DJG MOVEDOWNB 9 6F46 #SKI K6INSERT>199$199 9 6FHQ TRACE 0,SIZE 9 6G3B #SKI K6INSERT>299$299 9 6GH2 TRACE 1,DOWN BY 7 6H2L #SKI K6INSERT 4 6HG= ( 21 6H_W BXGE 0 BSBS,ZGEOER6 [ERROR IF [X0] & [X1] ZERO,GREATER 21 6JFG BXGE 1 BSBS,ZGEOER7 [THAN GSBS,OR IF[X3] LESS THAN 4096. 9 6J_6 BZE 0 ZGEOER6 9 6KDQ BZE 1 ZGEOER7 8 6KYB LDN 4 -1 10 6LD2 BXL 3 4,ZGEOER10 4 6LXL ) 19 6MC= LDX 4 1 [SIZE OF SPACE TO BE CREATED 20 6MWW SMO FX1 [IF WE ARE ONLY MOVING DOWN 1 OR 2 21 6NBG BXL 1 THREE,STOLDX [WE TAKE SPECIAL ACTINO,FOR EOOICIENC 21 6NW6 BXGE 0 4,MOVELP [J IF MORE THAN ONE MOVE NECESSARY,OR THE 17 6P*Q ADX 0 1 [MOVE IS EXACTLY RIGHT 21 6PTB SMO 0 [SET NEW LAST WORD IN USAGE BLOCK ZERO 8 6Q*2 STOZ 0(3) 7 6QSL SBX 0 1 17 6R#= BRN MOVELAST [& GO TO DO ONLY MOVE. 5 6RRW MOVELP 20 6S?G [THIS IS THE AMOUNT WE HAVE TO 17 6SR6 LDX 5 0 [MOVE DOWN THE BLOCK 20 6T=Q ADX 5 3 [X5 POINTS TO THE BOTTOM OF THE 21 6TQB LDX 6 5 [AREA TO BE MOVED,X6 POINTS TO THE 21 6W=2 ADX 6 1 [ADD ON AMOUNT TO BE MOVED DOWN BY 21 6WPL SMO 6 [BOTTOM OF THE AREA TO BE MOVED INTO. 19 6X9= STOZ 0 [ZEROISE WORD AT END OF BLOCK 5 6XNW MOVELOOP 4 6Y8G # 21 6YN6 # WE CAN ONLY MOVE UP [X4]=[X1] WORDS AT A TIME,AS O/W WE WOULD 14 6_7Q # OVERWRIE THE DATA WE WOULD MOVE DOWN. 4 6_MB # 21 7272 SBX 5 4 [MOVE POINTERS UP TO POINT TO NEXT 19 72LL SBX 6 4 [AREAS TO BE MOVED TO & FROM. 9 736= #SKI K6INSERT>699-699 4 73KW ( 9 745G TRACE 1,MOVESIZE 9 74K6 TRACE 0,NO.LEFT 4 754Q ) 8 75JB MOVE 5 0(1) 21 7642 BXE 5 3,(7) [EXIT IF AREA TO BE MOVED IS AN EXACT 17 76HL [MULTIPLE OF [X4]. 20 773= SBX 0 4 [DECREMENT SIZE OF AREA LEFT TO 21 77GW BXGE 0 4,MOVELOOP [MOVE & JUMP BACK TO START OF LOOP. 21 782G MOVELAST [THIS CODE MOVES THE'REMAINDER' DOWN 9 78G6 #SKI K6INSERT>299-299 10 78_Q TRACE 0,LASTMOVE 15 79FB LDX 5 3 [FROM HERE 7 79_2 LDX 6 3 14 7=DL ADX 6 1 [TO HERE 17 7=Y= LDX 1 0 [SIZE OF LAST MOVE 8 7?CW MOVE 5 0(1) 7 7?XG EXIT 7 0 4 7#C6 # 21 7#WQ # IF WE ARE MOVING A LARGE AREA UP CFRE BY A SMALL DISTANCE IT IS 20 7*BB # POSSIBLE TO SAVE EXECUTION TIME SY USING A^LDX-STO^LOOP RATHER 20 7*W2 # THAN A MOVE LOOP.THE TRMES FOR TYPICAL IVSTRUCTION LOOPS ARE:- 4 7B*L # 15 7BT= # IF WE ARE MOVING MN WORDS FWON BY N WORDS, 15 7C#W # N = : 1 : 2 : 3 : 15 7CSG # : : : : 15 7D#6 # MOVE : 43M MS : 45.5M MS: 48M MS : 15 7DRQ # : : : : 15 7F?B # LDX/STO : 17.4M MS: 25.5M MS: 48.1M MS: 15 7FR2 # : : : : 16 7G=L # SO FOR [X1] =N=1 OR 2 WE USE A LDX/STO LOOP 4 7GQ= # 5 7H9W STOLDX 7 7HPG LDX 1 3 21 7J96 ADX 1 0 [X1 -> NEW LAST WORD OF DATA IN BLOCK 21 7JNQ SRC 4 1 [X4 =1 OR 2 AFTER SHIFT.IF 2 NOT NEGA 14 7K8B BPZ 4 TWOLP [J IF TWO 19 7KN2 STOZ 1(1) [ZEROISE WD @ END FO BLOCK 5 7L7L ONELOOP 17 7LM= SBN 1 1 [DECREMENT POINTER 17 7M6W LDX 6 0(1) [MOVE WORD DOWN BLOCK 8 7MLG STO 6 1(1) 9 7N66 BCT 0 ONELOOP 14 7NKQ SLC 4 1 [RESET X4 7 7P5B EXIT 7 0 4 7PK2 # 4 7Q4L # 4 7QJ= # 20 7R3W TWOLP [WE GO ROUND LOOP [([X0]/2)] TIMES & 21 7RHG SRC 0 1 [B0 OF X0 TELLS UF IF WE HAVE 1 MORE 21 7S36 STOZ 2(1) [WORD TO MOVE;SET IF X0 ORIGINALLY ODD. 21 7SGQ TWOLOOP [ALSO ZEROISE LAST WORD IN BLOC 17 7T2B SBN 1 2 [DECREMENT MODIFIER 18 7TG2 LDX 6 0(1) [MOVE TWO WRDS DOWN SY 2 8 7T_L STO 6 2(1) 8 7WF= LDX 6 1(1) 8 7WYW STO 6 3(1) 9 7XDG BCT 0 TWOLOOP 20 7XY6 BZE 0 NOTODD [IF ORIGINALLY EVEN NUMBER , JUMP 17 7YCQ LDX 6 0(3) [O/W STORE LAST OWRD 8 7YXB STO 6 2(3) 5 7_C2 NOTODD 14 7_WL SLC 4 1 [RESET X4 7 82B= EXIT 7 0 4 82TW # 20 83*G # THIS S/R CALCULATES THE KEY OF THE RECORD POINTED TO BY X3. 19 83T6 # X2 -> FCB.CALLED BY X4;X7=KEY ON EXIT+1;EXIT+0 IF UNKEYED 4 84#Q # 5 84SB SKEYREC 16 85#2 KEYREC 2,,3,(6),7 [CALCULATE KEY 7 85RL EXIT 6 1 4 86?= # 14 86QW # THIS S/R SETS X1 -> FI/FINDEXF BLOCK 5 87=G SFFBA 8 87Q6 SMO FX2 9 889Q LDX 0 AWORK2 8 88PB SFSTACK 0,1 4 8992 SFFB 15 89NL ADX 1 FBACKPOINT(1) [ -> FSTACK 5 8=8= SFFB1 9 8=MW LDX 1 FPTR(1) 10 8?7G BXE 1 CXFI,ZGEOER13 9 8?M6 LDX 0 ATYPE(1) 12 8#6Q BXE 0 FILEPLUSFCB,ZGEOER13 8 8#LB SMO FX1 11 8*62 BXU 0 SFINDEXF,SFFB1 7 8*KL EXIT 6 0 5 8B5= SFINDEXF 8 8BJW #HAL FI+FINDEXF,0 4 8C4G # 4 8CJ6 # 21 8D3Q # AFTER SORTING OUT MODE OF OPENING,GETTING A PTR TO THE FCB,ETC 12 8DHB # WE DEAL WITH THE EASY CASES 4 8F32 # 9 8FGL # INSERT CHAPTER. 4 8G2= # 21 8GFW # 1) INSERT/REPLACE AT END OF FILE;WE USE STEPAPPEND(WHICH DOES ALL 19 8G_G # THE'CAREFUL'BITS FOR US)& FOR INSERT,UPDATE THE READ PTRS. 4 8HF6 # 19 8HYQ # 2) REPLACE WHERE THE REPLACEE IS LARGER THAN THE REPLACER. 4 8JDB # 20 8JY2 # 3) NEXT WE TRY TO FIT THE'INSERTEE'OR'REPLACER' INTO THE USAGE 11 8KCL # BLOCK WE ALREADY HAVE. 21 8KX= # IF THIS SUCCEEDS,WE DO THE CAREFUL UPDATION IF ANY,AND PUT THE 19 8LBW # RECORD IN. IN THE CASE OF INSERT,UPDATE THE READ PTRS. 4 8LWG # 4 8MB6 # 9 8MTQ # INSERTWO CHAPTER. 4 8N*B # 15 8NT2 # (N.B. FOR MARK 6 WE ALWAYS GO FORWARDS) 17 8P#L # 4) WE CANNOT FIT THE NEW RECORD INTO THIS BLOCK. 21 8PS= # SO WE CALCULATE THE LESSER OF THE TWO OVERFLOWS,THE FORWARD , 21 8Q?W # (HOPING TO PUT THE DATA IN THE NEXT BLOCK) AND THE BACKWARD, 18 8QRG # (HOPING TO FIT OVERFLOW INTO THE PREVIOUS BLOCK). 21 8R?6 # N.B. THE FIRST & PENULTIMATE BLOCKS ALWAYS GO FORWARDS,THE LAST BLOC 21 8RQQ # GOES BACKWARDS.WE GO FORWARDS IF THE TWO OVERFLOWS ARE EQUAL. 21 8S=B # IF THE LESSER OVERFLOW IS GREATER THAN[X],WHICH CAN BE RESET BY 21 8SQ2 # MEND,BUT IS OPTIONALLY SET TO 128,WE DON'T ATTEMPT TO FIT THE 17 8T9L # OVERFLOW INTO THE CURRENT BLOCK,BUT GO TO 6) 4 8TP= # 21 8W8W # () WE READ DOWN THE APPROPRIATE BLOCK,AND HOPE TO FIT THE OVERFLOW 21 8WNG # IN.IF WE CAN'T WE GO TO 6).IF WE CAN,AND THE 2ND BLOCK,AFTER 21 8X86 # RECEIVING THE OVERFLOW,IS LESS THAN [PERCENT) FULL,(THIS BEING 21 8XMQ # THE OPTIMUM BLOCK PACKING DENSITY,AGAIN MENDABLE,OPTIONALLY 70% 20 8Y7B # WE ATTEMPT TO SHARE THE TWO BLOCKS,SUCH THAT THEY ARE BOTH 21 8YM2 # ABOUT EQUALLY PACKED (THEY'LL BOTH RE ABOUT 60%-70% FULL AFTER 7 8_6L # THAT). 4 8_L= # 4 925W # 9 92KG # INSERTHR CHAPTER. 4 9356 # 21 93JQ # 6) HAVING FAILED TO FIT THE OVERFLOW IN,WE HAVE TWO POSSIBILITIES; 21 944B # IN THE FIRST THE OVERFLOW IS LESS THAN'GSBS', SO WE CREATE A 21 94J2 # NEW BUFFER BLOCK,AND SHARE THE CONTENTS OF THE TWO BLOCKS + THE 14 953L # OVERFLOW BETWEEN THE THREE BUFFERS. 4 95H= # 4 962W # 9 96GG # INSERTFR CHAPTER. 4 9726 # 4 97FQ # 21 97_B # 7) THE OTHER CASE, OVERFLOW > GSBS,WE SET UP 2 NEW BUFFER BLOCKS, 21 98F2 # AND ATTEMPT TO SHARE OUT AS EQUALLY ASPOSSIBLE THE CONTENTS OF 12 98YL # THE BLOCKS & THE OVERFLOW. 4 99D= # 4 99XW # 9 9=CG # & IN GENERAL :- 4 9=X6 # 4 9?BQ # 21 9?WB # 8) IN ORDER TO SAVE REREADING THE USAGE BLOCKS,THEY ARE RENAMED 14 9#B2 # FOR THE DURATION OF THE SORTING. 4 9#TL # 20 9**= # 9) GREAT CARE HAS TO BE EXERCISED IN THE MORE COMPLEX CASES TO 18 9*SW # KEEP THE READ & APPEND PTRS ON THE RIGHT RECORD. 4 9B#G # 21 9BS6 # 10) THE EVENTUAL AIM OF ALL THIS TORTUOSITY IS TO KEEP THE FILES 20 9C?Q # OPERATED ON ABOUT 70% FULL.THE TWO PARAMETERS WE CAN USE TO 15 9CRB # TUNE THE SYSTEM ARE [X] & [PERCENT]. 4 9D?2 # 4 9DQL # 18 9F== # THE MARK 6 SYSTEM ONLY COPES WITH FORWARD OVERFLOW. 4 9FPW # 6 9G9G ZCOMPRESS 15 9GP6 CALL 7 ZTOP [CHECK MODE. 21 9H8Q LDCT 0 #201 [SET 'REPLACING LAST RECORD IN BLOCK' 17 9HNB ORS 0 AWORK1(2) [AND 'COMPRESS' BITS. 9 9J82 BRN MACMERJ 5 9JML XREPLACE 17 9K7= CALL 7 ZDEEP [CHECK DEPTH & MODE 8 9KLW BRN S1 5 9L6G ZREPLACE 15 9LL6 CALL 7 ZTOP [CHECK MODE 8 9M5Q S1 LDCT 0 #400 17 9MKB ORS 0 AWORK1(2) [SET 'REPLACE' BIT 10 9N52 ADDSKIP I516A,IREPL 9 9NJL BRN MACMERJ 5 9P4= XINSERT 17 9PHW CALL 7 ZDEEP [CHECK DEPTH & MODE 9 9Q3G BRN MCMERJ 5 9QH6 ZINSERT 15 9R2Q CALL 7 ZTOP [CHECK MODE 5 9RGB MCMERJ 10 9S22 ADDSKIP I516A,INSE1 5 9SFL MACMERJ 21 9S_= MHUNTW 1,FILE,FWB [X1 -> BLOCK CONTAINING NEW RECORD. 7 9TDW LDX 4 1 7 9TYG #SKI K6INSERT 4 9WD6 ( 16 9WXQ BNG 1 ZGEOER1 [ERROR IF NO FWB 9 9XCB LDEX 0 A1+FRH(1) 9 9XX2 #SKI K6INSERT>199-199 9 9YBL TRACE 0,SIZE INS 9 9YW= LDX 0 BRHMASK 9 9_*W ANDX 0 A1+FRH(1) 9 9_TG BNZ 0 ZGEOER1 9 =2*6 LDXC 0 AWORK1(2) 17 =2SQ BCC NOREP29 [ J IF NOT REPLACE 8 =3#B CALL 6 SFCB3 15 =3S2 LDX 2 3 [X2 -> FCB 15 =4?L LDN 3 A1(1) [X3 -> RECORD 17 =4R= CALL 6 SKEYREC [CALCULATE KEY IF ANY 13 =5=W BRN NOINDEX [NONE 8 =5QG LDX 2 FX2 14 =6=6 STO 7 AWORK4(2) [PRESERVE 9 =6PQ BRN NOREP29 5 =79B NOINDEX 18 =7P2 LDX 0 BIT10 [B10 => RECORD HAS NO KEY 8 =88L LDX 2 FX2 9 =8N= ORS 0 AWORK1(2) 5 =97W NOREP29 4 =9MG ) 14 ==76 LDX 2 AWORK2(2) [DEPTH 16 ==LQ STEPAGAIN 0(2) [CURRENT RECORD 20 =?6B TESTREP OK,NOREHUNT [J IF HUNT NOT NECESSARY 9 =?L2 MHUNTW 1,FILE,FWB 7 =#5L STO 1 4 5 =#K= NOREHUNT 7 =*4W LDX 1 4 16 =*JG BZE 3 YEOF [J IF END OF FILE. 8 =B46 LDCT 0 #001 9 =BHQ ANDX 0 AWORK1(2) 17 =C3B BZE 0 NOTEOF [J IF NOT COMPRESS 9 =CH2 LDEX 0 FRH(3) 20 =D2L ADX 3 0 [SKIP OVER LAST RECORD IN BLOCK. 10 =DG= SMO FILERING(2) 9 =D_W ADS 0 FREADWORD 9 =FFG BRN NOTEOF 4 =F_6 YEOF 4 =GDQ # 20 =GYB # INSERT & REPLACE @ E.O.F = APPEND. SO WE DO A STEP(APPEND) & 14 =HD2 # MOVE THE RECORD; LAZY BUT EFFECTIVE. 4 =HXL # 9 =JC= #SKI K6INSERT>199-199 9 =JWW TRACE 3,INS EOF 8 =KBG CALL 6 SFCB3 21 =KW6 LDX 7 FBLMOD(3) [SAVE FBLMOD,MAY NEED TO EXTEND INDEX 14 =L*Q LDX 2 AWORK2(2) [DEPTH 9 =LTB LDEX 1 A1+FRH(1) 21 =M*2 ... STEP 0(2),0(1),ANSWER [THIS WILL DO ALL THE CAREFUL 11 =MSL TESTREP FILEFULL,SFULL 18 =N#= TESTREP OK,NOTHUNT [J IF HUNT NOT NECESSARY 10 =NRW MHUNTW 2,FILE,FWB 7 =P?G LDX 4 2 5 =PR6 NOTHUNT 7 =Q=Q LDX 2 4 8 =QQB ADN 2 A1 8 =R=2 SMO 0(2) 15 =RPL MOVE 2 0 [MOVE IN NOW RECORD 15 =S9= CALL 6 SFCA2 [X2 -> FCA 15 =SNW PSTAC 1,2 [X1 -> FSTACK 15 =T8G BFCBX 1,1 [X1 -> FCB 8 =TN6 SMO FX2 9 =W7Q LDXC 0 AWORK1 16 =WMB BCS ZUP [J IF REPLACE. 9 =X72 LDX 0 FBLMOD(1) 8 =XLL ADN 0 A1-1 17 =Y6= STO 0 FREADBLOCK(2) [UPDATE FREADBLOCK 9 =YKW LDEX 0 FRH(3) 9 =_5G ADX 0 CMOD(1) 14 =_K6 STO 0 FREADWORD(2) [& F'WORD 4 ?24Q ZUP 15 ?2JB LDX 3 1 [X3 -> FCB 9 ?342 SBX 7 FBLMOD(3) 16 ?3HL BZE 7 NOALTFINDX [J IF FILE LONGER 16 ?43= BRINDEX FINFC(3),NOALTFINDX [J IF NOT INDEXED 15 ?4GW LDX 1 2 [X1 -> FCA 15 ?52G CALL 6 SFFB [X1 -> FINDEX 8 ?5G6 LDX 7 A1(1) 7 ?5_Q ADN 7 1 7 ?6FB LDX 3 1 15 ?6_2 ALTLEN 3,7 [ALTLEN BY 1 14 ?7DL CALL 6 SFCB3 [X3 -> 7 ?7Y= LDX 1 3 17 ?8CW CALL 6 SFFB1 [ X1 -> FINDEX AGAIN. 8 ?8XG LDX 7 A1(1) 15 ?9C6 ADN 7 1 [UPDATE R.H. 8 ?9WQ STO 7 A1(1) 18 ?=BB ADX 1 A1(1) [-> OFF END OF FINDEXF 20 ?=W2 SBN 7 INDEXREC-A1+1 [J IF THERE WAS ALREADY ONE BLOCK 20 ??*L BNZ 7 TTT [IN THE FILE BEFORE THE INSERT. 19 ??T= STOZ A1-1(1) [O/W ZEROISE ONLY BLOCK-KEY 14 ?##W BRN TTS [& MERGE 4 ?#SG TTT 21 ?*#6 LDX 0 A1-2(1) [NEW BLOCK-KEY = PREVIOUS ONE FOR NOW 9 ?*RQ STO 0 A1-1(1) 4 ?B?B TTS 18 ?BR2 BS 3,BFINDEXALT [INDICATE INDEX ALTERED 8 ?C=L CALL 6 SFCA2 6 ?CQ= NOALTFINDX 10 ?D9W TESTREP FNEARLY,UPA 4 ?DPG UP 10 ?D_# ... TESTREP GLUTTON,UPA 8 ?F96 SETREP OK 4 ?FNQ UPA 14 ?G8B LDX 2 3 [->FCB 9 ?GN2 MHUNTW 3,FILE,FWB 8 ?H7L ADN 3 A1 16 ?HM= CALL 6 SKEYREC [X7 CONTAINS KEY 9 ?J6W BRN NOINDX 15 ?JLG CALL 6 SFFBA [X1->FINDEXF 8 ?K66 CALL 6 SFCA2 10 ?KKQ ADX 1 FREADBLOCK(2) 11 ?L5B SBN 1 FBLKS-INDEXREC 15 ?LK2 LDX 6 0(1) [=BLOCK KEY 18 ?M4L BXGE 6 7,NOINDX [J IF INDEX NOT CHANGED 8 ?MJ= PSTAC 3,2 8 ?N3W BFCBX 3,3 8 ?NHG LDCT 0 #001 8 ?P36 SMO FX2 9 ?PGQ ANDX 0 AWORK1 17 ?Q2B BZE 0 NOTPRESS [J IF NOT COMPRESS 8 ?QG2 LDX 0 1(1) 21 ?Q_L BXU 0 6,XALT [IF OLD BLOCK KEY FOR THIS BLOCK =KEY 21 ?RF= STO 7 1(1) [NEXT BLOCK UPDATE NEXT BLK KEY ALSO. 8 ?RYW BRN XALT 5 ?SDG NOTPRESS 7 ?SY6 #SKI K6INSERT 4 ?TCQ ( 10 ?TXB LDX 0 FREADBLOCK(2) 18 ?WC2 SBN 0 A1-1 [ERROR IF NOT LAST BLOCK 12 ?WWL BXU 0 FBLMOD(3),ZGEOER13 4 ?XB= ) 4 ?XTW XALT 18 ?Y*G BS 3,BFINDEXALT [INDICATE INDEX ALTERED 8 ?YT6 STO 7 0(1) 5 ?_#Q NOINDX 5 ?_SB UP 5 #2#2 NOTEOF 7 #2RL #SKI K6INSERT 4 #3?= ( 16 #3QW LDX 0 FRH(3) [CHECK VALID R.H. 9 #4=G ANDX 0 BRHMASK 9 #4Q6 BNZ 0 ZGEOER2 16 #59Q LDXC 0 AWORK1(2) [J IF NOT REPLACE 9 #5PB BCC NOREP30 8 #692 CALL 6 SFCA2 8 #6NL PSTAC 2,2 15 #78= BFCBX 2,2 [X2 -> FCA 14 #7MW CALL 6 SKEYREC [X7 =KEY 14 #87G BRN NOINX [NO KEY 20 #8M6 LDX 0 BIT10 [B10 SET IF REPLACER NOT KEYED 16 #96Q LDX 2 FX2 [REPLACEE IS ... 18 #9LB ANDX 0 AWORK1(2) [ SO ... 17 #=62 BNZ 0 ZGEOER13 [ERROR IF MISMATCH 16 #=KL BXU 7 AWORK4(2),ZGEOER13 [OR INEQUALITY 9 #?5= BRN NOREP30 5 #?JW NOINX 16 ##4G LDX 0 BIT10 [IF RECORD KEYED 14 ##J6 LDX 2 FX2 [ .... 16 #*3Q ANDX 0 AWORK1(2) [BUT REPLACER NOT 14 #*HB BZE 0 ZGEOER13 [...ERROR 5 #B32 NOREP30 4 #BGL ) 17 #C2= LDEX 0 FRH+A1(1) [STORE R.H.OF NEW RECORD 17 #CFW SRC 0 9 [IN TOP 9 BITS OF AWORK3 9 #C_G STO 0 AWORK3(2) 15 #DF6 LDX 0 AWORK1(2) [J IF INSERT 9 #DYQ BPZ 0 PICKINSIZ 16 #FDB LDEX 4 FRH(3) [R.H.OR REPLACEE 18 #FY2 LDEX 0 A1+FRH(1) [COMPARE WITH REPLACER 7 #GCL SBX 4 0 17 #GX= BNG 4 P2 [J IF FORMER SMALLER 4 #HBW # 21 #HWG # WE ARE HERE REPLACING A RECORD WITH A SMALLER ONE,OR ONE OF SAME 6 #JB6 # SIZE 4 #JTQ # 9 #K*B #SKI K6INSERT>199-199 9 #KT2 TRACE 4,REPSMALL 16 #L#L STO 4 AWORK4(2) [STORE X4 FOR END 16 #LS= CALL 6 SFCA2 [X2 -> FCA 15 #M?W SBX 3 FREADWORD(2) [X 3 -> FURB 14 #MRG NAME 3, FI,INSERT4 [RENAME 15 #N?6 LDX 4 FREADBLOCK(2) [X4-> BL. NO. 8 #NQQ PSTAC 3,2 15 #P=B BFCBX 3,3 [X3 -> FCB 20 #PQ2 CALL 7 SCAREFULA [DO ALL THE 'CAREFUL'RED TAPE. 19 #Q9L [FOR REPLACING A BLOCK NUMBER 15 #QP= LDX 3 2 [X3 -> FURB 15 #R8W NAME 3,FILE,FUWB [RENAME BLOCK 8 #RNG LDX 2 FX2 14 #S86 SMO ACOMMUNE5(2) [-> FCA 15 #SMQ ADX 3 FREADWORD [X3 -> RECORD 9 #T7B MHUNTW 2,FILE,FWB 16 #TM2 LDEX 1 FRH(3) [PRESERVE R.H. 8 #W6L ADN 2 A1 8 #WL= SMO 0(2) 17 #X5W MOVE 2 0 [MOVE IN NEW RECORD 15 #XKG BXE 1 0(2),NOMOVE [J IF REWRITE 21 #Y56 ADX 1 3 [X1 -> R.H.OF NEXT RECORD(OLD POS'N) 21 #YJQ ADX 3 0(2) [X3 -> WORD AFTER END OF RECORD NOW 17 #_4B [IT'S BEEN REPLACED 20 #_J2 LDEX 4 FRH(1) [IF LAST RECORD(MUST BE REPLACE)DON'T 20 *23L BNZ 4 YMOVE [JUMP.PRESERVE X4=0 & ZEROISE NEW LAST 21 *2H= STOZ 0(3) [WORD (NOT DONE FOR US BY MOVEDOWNB AS 16 *32W BRN NOMOVE [WE DON'T ENTER IT 5 *3GG YMOVE 17 *426 LDX 2 1 [PRESERVE FOR MOVE 9 *4FQ SLOOP LDEX 0 FRH(1) 20 *4_B ADX 1 0 [LOOP TO SET X1 TO POINT TO ZERO 17 *5F2 BNZ 0 SLOOP [WORD AT END OF BLOCK 17 *5YL SBX 1 2 [GIVES AMOUNT TO MOVE 7 *6D= #SKI K6INSERT 9 *6XW BZE 1 ZGEOER6 9 *7CG #SKI K6INSERT>699-699 9 *7X6 TRACE 1,MOVE UP 20 *8BQ MOVE 2 1(1) [+1 FOR ZERO WD. AT END OF BLOCK. 5 *8WB NOMOVE 8 *9B2 SMO FX2 9 *9TL LDX 2 ACOMMUNE5 15 *=*= PSTAC 3,2 [X 3 -> FSTAC 15 *=SW BFCBX 3,3 [X3 -> FCB 18 *?#G BS 3,BFALTR [INDICATE FILE ALTERED 18 *?S6 BZE 4 NOLA [J IF REPLACING LAST RECORD 9 *#?Q LDX 0 FBLMOD(3) 8 *#RB ADN 0 A1-1 17 **?2 BXU 0 FREADBLOCK(2),NOLA [J IF NOT LAST BLOCK 9 **QL LDXC 0 CMOD(3) 15 *B== BCS NOLA [J IF CMOD <0 8 *BPW SMO FX2 17 *C9G LDX 0 AWORK4 [PICK UP ^EXCISION^ 15 *CP6 SBS 0 CMOD(3) [UPDATE CMOD 4 *D8Q NOLA 9 *DNB LDX 0 FBLMOD(3) 11 *F82 SBN 0 FBLKS-A1-FNEARLY 9 *FML SBX 0 FSIZE(3) 18 *G7= BNG 0 UP [J IF NOT^NEARLY FULL^ 4 *GLW UPF 8 *H6G #SKI K6INSERT>99-99 11 *HL6 TRACE FBLMOD(3),FNEARLY 9 *J5Q SETREP FNEARLY 8 *JKB BRN UPA 4 *K52 # 19 *KJL # WE HAVE AN INSERT OR REPLACE ^WITH LARGER RECORD^(EXPAND). 4 *L4= # 17 *LHW # IF THE EXTRA DOESNT FIT WE GO ACROSS TO INSERTWO. 4 *M3G # 4 *MH6 P2 20 *N2Q NGX 5 4 [INVERT- GIVES EXTRA SIZE NEEDED 8 *NGB BRN P1 6 *P22 PICKINSIZ 18 *PFL LDEX 5 A1+FRH(1) [PICK UP R.H. FROM FWB 4 *P_= P1 9 *QDW #SKI K6INSERT>199-199 9 *QYG TRACE 5,EXTRA 16 *RD6 DEX 5 AWORK1(2) [STORE ^EXTRA^ 14 *RXQ CALL 6 SFCA2 [X2-: FCA 17 *SCB SBX 3 FREADWORD(2) [X3 -> USAGE BLOCK 17 *SX2 NAME 3,FI,INSERT4 [RENAME USAGE BLOCK 18 *TBL LDX 4 FREADBLOCK(2) [BLOCK WE WANT REPLACED 8 *TW= PSTAC 3,2 15 *W*W BFCBX 3,3 [X3 -> FCB 17 *WTG CALL 7 SCAREFULA [DO THE LGR UPDATING 18 *X*6 LDX 3 2 [X3 -> FI/INSERT4 BLOCK 8 *XSQ LDX 2 FX2 14 *Y#B SMO ACOMMUNE5(2) [-> FCA 15 *YS2 ADX 3 FREADWORD [X3 -> RECORD 18 *_?L CALL 7 SENDBLOCK [SET X1 -> END OF BLOCK 9 *_R= LDX 0 AWORK1(2) 15 B2=W BPZ 0 NREP1 [J IF INSERT 9 B2QG LDEX 0 FRH(3) 20 B3=6 ADX 0 3 [J IF REPLACEE IS NOT LAST RECORD 14 B3PQ BXU 0 1,NREP1 [OF BLOCK 9 B49B #SKI K6INSERT>299-299 10 B4P2 TRACE 0,LAST REP 15 B58L LDCT 0 #200 [SET A BIT TO 15 B5N= ORS 0 AWORK1(2) [REMIND US 5 B67W NREP1 14 B6MG LDX 2 ACOMMUNE5(2) [-> FCA 17 B776 SBX 1 3 [AREA AFTER RECORD 17 B7LQ LDX 0 1 [PLAY AROUND WITH IT 21 B86B ADX 0 FREADWORD(2) [THE AIM OF ALL THIS IS TO CALCULATE 8 B8L2 SMO FX2 18 B95L ADS 0 AWORK3 [AMT USED IN INSERT1+A1 16 B9K= SBN 0 GSBS-1+A1 [THE ROOM LEFT 15 B=4W NGX 0 0 [IN THE BLOCK 15 B=JG SBX 3 FREADWORD(2) [X3 -> FURB 19 B?46 BXL 0 5,NOROOM [J IF LE>5 THAN AREA NEEDED 18 B?HQ # WE THINK THE NEW RECORD FITS; LET'S HOPE WE'RE RIGHT 9 B#3B #SKI K6INSERT>199-199 9 B#H2 TRACE 0,IT FITS! 17 B*2L NAME 3,FILE,FUWB [RENAME USAGE BLOCK 15 B*G= ADX 3 FREADWORD(2) [X3 -> RECORD 20 B*_W LDX 4 5 [AMOUNT EXTRA WE NEED IN BLOCK. 9 BBFG MHUNTW 2,FILE,FWB 9 BB_6 ADN 2 A1+FRH 21 BCDQ LDCT 0 #200 [IS ^REPLACING LAST RECORD IN BLOCK^ 14 BCYB SMO FX2 [BIT SET 9 BDD2 ANDX 0 AWORK1 14 BDXL BZE 0 MV1 [J IF NOT 8 BFC= SMO 0(2) 20 BFWW STOZ 0(3) [ZEROISE NEW WD @ END OF BLOCK 19 BGBG BRN NMV1 [& J TO MOVE NEW RECORD IN 4 BGW6 MV1 13 BH*Q LDX 0 1 [SIZE 14 BHTB LDX 1 5 [DOWN BY 9 BJ*2 CALL 7 MOVEDOWNB 4 BJSL NMV1 8 BK#= SMO 0(2) 16 BKRW MOVE 2 0 [MOVE IN NOW INCFRD 8 BL?G LDX 2 FX2 8 BLR6 LDCT 0 #401 9 BM=Q ANDX 0 AWORK1(2) 10 BMQB LDX 2 ACOMMUNE5(2) 18 BN=2 BNZ 0 TESTAPP [J IF REPLACE OR COMPRESS 19 BNPL ADS 4 FREADWORD(2) [OTHERWISE UPDATE READ PTR. 5 BP9= TESTAPP 7 BPNW PSTAC 3,2 15 BQ8G BFCBX 3,3 [X3 -> FCB 18 BQN6 BS 3,BFALTR [INDICATE FILE ALTERED 9 BR7Q LDX 0 FBLMOD(3) 8 BRMB ADN 0 A1-1 17 BS72 BXU 0 FREADBLOCK(2),NOLA [J IF NOT LAST BLOCK 19 BSLL LDX 0 CMOD(3) [DON'T UPDATE CMOD IF NOT YET 15 BT6= BNG 0 NOLA [CALCULATED 14 BTKW LDCT 0 #200 [IF REPLACING 15 BW5G SMO FX2 [LAST RECORD IN 16 BWK6 ANDX 0 AWORK1 [BLOCK, IGNORE CMOD 8 BX4Q BNZ 0 NOLA 17 BXJB ADS 4 CMOD(3) [UPDATE APPEND PTRS 8 BY42 BRN NOLA 5 BYHL NOROOM 9 B_3= #SKI K6INSERT>199-199 9 B_GW TRACE 0,NO.ROOM 16 C22G NAME 3,FI,INSERT1 [RENAME BLOCK. 20 C2G6 ACROSS INSERTWO,1 [GO ACROSS TO DO DIFFICULT CASES. 10 C2_Q # ENVIRONMENT ON EXIT:- 4 C3FB # 21 C3_2 # THERE IS A FI/INSERT1 BLOCK IN THE FILE CHAIN,FOR WHICH THE CARE- 16 C4DL # FUL UPDATING HAS BEEN DONE (IF APPROPRIATE) 4 C4Y= # 18 C5CW # AWORK1 CONTAINS SOME SWITCHES & SIZE EXTRA REQUIRED 4 C5XG # 11 C6C6 # AWORK2 CONTAINS THE DEPTH 4 C6WQ # 19 C7BB # AWORK3 CONTAINS THE AMOUNT USED IN THE INSERT1 BLOCK +A1 4 C7W2 # 10 C8*L # ACCUMULATORS - RUBBISH 4 C8T= # 4 C9#W # 8 C9SG # FILEFULL EXIT 4 C=#6 # 5 C=RQ SFULL 10 C??B ACROSS INSERTFR,2 4 C?R2 [ 14 C#=L MENDAREA K6INSERT/5<100>30,K99INSERT 4 C#Q= #END 8 ____ ...54644145000500000000