INSERT6

(George Source)

Macros used: ACROSS, ADDSKIP, ALTLEN, BFCBX, BLOCK, BRINDEX, BS, BXE, BXGE, BXL, BXU, CHAIN, FILECOUNT, FREEBACK, GEOERR, GETBACK, JBC, KEYREC, MAPBCH, MAPBSE, MBS, MENDAREA, MHUNTW, NAME, PSTAC, SEGENTRY, SETNCORE, SETREP, SFSTACK, STEP, STEPAGAIN, TESTREP, TOPFCA2, TRACE, UP

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