INSERTWO6

(George Source)

Macros used: ACROSS, ADDSKIP, ALTLEN, BFCBX, BLOCK, BXE, BXGE, BXL, BXU, CHAIN, DOWN, FREEBACK, FREECORE, GEOERR, GETAFURB, GETBACK, JBC, MAPBCH, MAPBSE, MBS, MENDAREA, MHUNTW, NAME, PSTAC, SEGENTRY, SETNCORE, SETREP, SFSTACK, SFUB, TESTREP, TRACE, UP

INSERTWO6.txt
22FL    #SEG  INSERTWO6                    [ JUDY BIDGOOD   
22^=    #OPT  K0INSERTWO=K0INSERT>K0ACCESS>K0FILESTORE>K0ALLGEO 
23DW    #LIS  K0INSERTWO
23YG          8HINSERTWO
24D6    [   
24XQ          SEGENTRY K1INSERTWO,X1INSERTWO
25CB    [   
25X2    #   
26BL    #     THIS SEGMENT IMPLEMENTS THE FOLLOWING PARTS OF THE INSERT & REPLAC
26W=    #     MACROS.   
27*W    #   
27TG    #     (NOT MARK 6)  
28*6    # A)  CALCULATES WHICH DIRECTION WE SHOULD TAKE OVERFLOW.   
28SQ    #   
29#B    # B)  CALCULATES IF OVERFLOW SHOULD BE FITTED INTO AN ADJACENT BLOCK
29S2    #     IN THE APPROPRIATE DIRECTION. IF SO READS IT DOWN. IF NOT,GOES TO 
2=?L    #     (E)   
2=R=    #   
2?=W    # C)  IF RECORD FITS, CALCULATES IF IT IS WORTH"SMOOTHING" THE CONTENTS 
2?QG    #     OF THE 2 BLOX, & RECALCULATES OVERFLOW,& GOES TO (F)  
2#=6    #   
2#PQ    # D)  IF RECORD DOESN'T FIT,GOES ACROSS TO INSERTHR CHAPTER.
2*9B    #   
2*P2    # E)  SETS UP A USAGE BLOCK & INSERTS A BLOCK NUMBER IN THE FCB.CALCULAT
2B8L    #     OVERFLOW INTO NEW BLOCK,SMOOTHING THE CONTENTS.   
2BN=    #   
2C7W    # F)  MOVES ACROSS OVERFLOW & INSERTS RECORD
2CMG    #   
2D76    #     ERRORS
2DLQ    ZGEOER1 
2F6B          GEOERR  1,NOFULLB        [FULLB HAS DISAPPEARED FROM FILE CHAIN.  
2FL2    ZGEOER2 
2G5L          GEOERR  1,OVERFLOW           [INSERT:OVERFLOW MISCALCULATED   
2GK=    ZGEOER4 
2H4W          GEOERR  1,BIT NSET           [EXPECTED SWITCHES NOT SET   
2HJG    ZGEOER5 
2J46          GEOERR   1,SHARE ?           [MORE THAN 2X GSBS IN 2 FILESTORE BLO
2JHQ    ZGEOER6 
2K3B          GEOERR  1,MOVEZERO           [UNEXPECTED ZERO MOVE IN INSERT  
2KH2    ZGEOER7 
2L2L          GEOERR  1,STO ZERO           [MOVE OR LESS AS ABOVE   
2LG=    ZGEOER8 
2L^W          GEOERR  1,WILL GO!           [INSERT HAS MISCALCULATED
2MFG    ZGEOER9 
2M^6          GEOERR  1,NO BLOCK           [ERROR IN SFINDFURB S/R. 
2NDQ    ZGEOER10
2NYB          GEOERR  1,BLOKRONG       [USAGE BLOCK IN FIXED CORE ! 
2PD2    ZGEOER11
2PXL          GEOERR  1,ENDBLOCK           [INSERT REACHED E.O.B. UNEXPECTEDLY. 
2QC=    ZGEOER12
2QWW          GEOERR 1,TOPHALF                [MISCALCULATION IN INSERT MACRO   
2RBG    ZGEOER13
2RW6          GEOERR 1,OTHER1/2           [MISCALCULATROE IN INSERT MACRO   
2S*Q    #   
2STB    SFULLB  
2T*2    #HAL  BSTB+FULLB,0  
2TSL    KXINSERTWO  
2W#=    X   
2WRW          +GSBS/4  [THISPARAMETER DECIDES THE MAXIMUM AMOUNT OF OEVRFLOW
2X?G                   [WE TRY TO FIT INTO AN ADJACENT BLOLK
2XR6    KPINSERTWO  
2Y=Q    PERCENT 
2YQB          +GSBS*3/10  [THIS PARAMEJER DETERMINES THE MINIMUM'FULLNESS'  
2^=2                   [BEYOND WHICH WE DON'T "SHARE" BLOCKS.   
2^PL    #     USES  OF AWORK WORDS  
329=    #   
32NW    #     AWORK1  : B0 :  REPLACE   
338G    #               B1 :  REPLACING LAST RECORD IN BLOCK
33N6    #               B2 :  CAREFUL FILE  
347Q    #               B3 :  OVERFLOW FORWARD BIT  
34MB    #               B4 :  "RECORD IN NEXT BLOCK"(R.I.N.B.) BIT. 
3572    #               B5 :  AN EMPTY BLOCK HAS BEEN SET UP
35LL    #               B6 :  AN EMPTY BLOCK AT E.O.F.HAS BEEN SET UP.  
366=    #               B7 :  INSERT3 BLOCK A RE-NAMED FUWB.
36KW    #   
375G    #              B15-B23: SIZE EXTRA REQUIRED 
37K6    #     AWORK2  :  FILE DEPTH 
384Q    #   
38JB    #     AWORK3  :  TOP 9 BITS:- SIZE OF NEW RECORD
3942    #             :  BOTTOM 10 BITS:- VOLUME USED IN INSERT1 BLOCK. 
39HL    #   
3=3=    #     AWORK4  :  OVERFLOW  (B3 OF AWORK1 INDICATES WHICH DIRECTION) 
3=GW    #   
3?2G    #     USES  OF ACOMMUNE WORDS   
3?G6    #   
3?^Q    #     ACOMMUNE4  : AMOUNT USED IN INSERT3 BLOCK(OR PTR TO SAME);PTR TO  
3#FB    #                  INSERT1 BLOCK
3#^2    #     ACOMMUNE5  : POINTS TO FCA
3*DL    #   
3*Y=    #     ACOMMUNE2  : PTR TO INSERT3 BLOCK(RENAMED A FUWB) 
3BCW    #   
3BXG    #   
3CC6    #   
3CWQ    #     SUBROUTINES   
3DBB    #   
3DW2    #   
3F*L    #   
3FT=    SFCB3          [SET X3-> FCB
3G#W          SMO      FX2  
3GSG          LDX   0  AWORK2   
3H#6          SFSTACK  0,3                 [X3 -> FCA   
3HRQ          SMO      FX2  
3J?B          STO   3  ACOMMUNE5           [STORE   
3JR2          PSTAC    3,3  
3K=L          BFCBX    3,3                 [X3 -> FCB   
3KQ=          EXIT  6  0
3L9W    #   
3LPG    SENDBLOCK   
3M96    #SKI  K6INSERT>699-699  
3MNQ          TRACE   3,SENDBL. 
3N8B          LDX   1  3                   [X3 &X1 -> NEXT RECORD   
3NN2    SEBLP   
3P7L          LDEX  0  FRH(1)              [NEXT R.H
3PM=          ADS   0  1                   [ADD INTO PTR
3Q6W          BNZ   0  SEBLP               [J BACK IF NON ZERO  
3QLG    #SKI  K6INSERT>699-699  
3R66          TRACE   1,SENDIS  
3RKQ          EXIT  7  0                   [EXIT
3S5B    #   
3SK2    SFURB   
3T4L          SMO      FX2  
3TJ=          LDX   0  AWORK2              [SET X2 - > FSTACK   
3W3W          SFSTACK  0,2                 [X2 -> FCA   
3WHG          SMO      FX2  
3X36          STO   2  ACOMMUNE5           [STORE   
3XGQ    SFFURB  
3Y2B          PSTAC    2,2                 [X2 -> STACK BLOCK   
3YG2          BRN      SFFULP   
3Y^L    SFINDFURB   
3^F=    #     CALLED BY X1.THE WORD AFTER THE CALL CONTAINS THE TYPE/SUBTYPE
3^YW    #     WANTED.X3 ->FCB,X2 WILL POINT ON EXIT TO THE BLOCK REQUIRED.  
42DG          LDX   2  FPTR(3)             [J OVER FSTACK BLOCK 
42Y6    SFFULP  
43CQ          BXE   2  CXFI,ZGEOER9        [ERROR IF END OF FILE CHAIN. 
43XB          LDX   2  FPTR(2)             [NEXT BLOCK  
44C2          LDX   0  ATYPE(2) 
44WL    #SKI  K6INSERT  
45B=          BXE   0  FILEPLUSFCB,ZGEOER9 [ERROR IF END OF FILE CHAIN. 
45TW          BXU   0  0(1),SFFULP         [J IF WRONG TYPE 
46*G          EXIT  1  1                   [EXIT ROUND TYPE-WORD
46T6    #   
47#Q    SEEKFURB
47SB          LDX   2  ACOMMUNE5(2)        [-> FCA  
48#2    SEEKFURB2   
48RL          PSTAC 1,2 
49?=          BFCBX 1,1                    [X1 -> FCB   
49QW          SMO      FREADBLOCK(2)       [B.N. WANTED 
4==G          LDX   7  0(1) 
4=Q6    #   
4?9Q    SFUB
4?PB    #     THIS  ROUTINE LOOKS FOR THE USAGE BLOCK WHOSE B.N. IS IN X7.  
4#92    #     X1 -> FCB ON ENTRY,X3 -> USAGE BLOCK ON NORMAL EXIT, EXIT +1  
4#NL    #     MEANS IT'S NOT THERE. IF IT'S A FUWB, B7 OF AWORK1 IS SET.
4*8=          LDX   3  FPTR(1)             [J OVER FSTACK   
4*MW    SLPY
4B7G          LDX   3  FPTR(3)             [NEXT BLOCK  
4BM6          BXE   3  CXFI,SIXET          [EXIT IF END OF FILE CHAIN   
4C6Q          LDX   0  ATYPE(3) 
4CLB          BXE   0  FILEPLUSFCB,SIXET   [EXIT IF NEXT FCB
4D62          BXU   7  BACK2(3),SLPY       [LOOP BACK IF WRONG B.S.H.   
4DKL          BXE   0  FFSFURB,(6)         [EXIT OK IF FURB 
4F5=          BXU   0  FFSFUWB,SLPY        [LOOP BACK IF NOT FUWB   
4FJW          LDCT  0  2
4G4G          SMO      FX2  
4GJ6          ORS   0  AWORK1              [SET BIT 
4H3Q          EXIT  6  0
4HHB    SIXET EXIT  6  1
4J32    #   
4JGL    #   
4K2=    OFLOWFOR
4KFW    #     THIS SUBROUTINE CALCULATES HOW MUCH OVERFLOW WILL RESULT FROM 
4K^G    #     INSERTING OR REPLACING A RECORD AND PUSHING EXTRA DATA THAT WON'T 
4LF6    #     FIT OFF THE BOTTOM END.I.E. FORWARD OVERFLOW. 
4LYQ    #   
4MDB    #     ENVIRONMENT ON ENTRY  
4MY2    #     X3 -> RECORD  
4NCL    #     X5 CONTAINS VOLUME WE HAVE TO FIT IN. 
4NX=    #     X2-> FCA  
4PBW    #   
4PWG    #     USE OF ACCUMULATORS   
4QB6    #     X4 - RELATIVE PTR FROM START OF BLOCK TO RECORD WE'VE STEPPED TO. 
4QTQ    #     X1 -> RECORD WE'VE STEPPED TO 
4R*B    #     X3 -> RECORD INDICATER BY READ PTRS.  
4RT2    #   
4S#L    #     ON EXIT   
4SS=    #     AWORK4 CONTAINS THE AMOUNT AFTER THE RECORD WHICH IS TO BE LEFT IN
4T?W    #     THE BLOCK 
4TRG    #   
4W?6          LDX   4  FREADWORD(2) 
4WQQ          LDX   1  3                   [WE USE X1 TO POINT TO THE RECORDS   
4X=B                                       [CONTAINS A RELATIVE PTR INCLUDING   
4XQ2                                       [ALL THE EXTRA WORDS(=[X47) WE HAVE  
4Y9L                                       [TO FIND ROOM FOR
4YP=          ADX   4  5                   [ADD ON EXTRA AREA REQUIRED  
4^8W          SMO      FX2  
4^NG          LDX   0  AWORK1   
5286          BPZ   0  NREP8               [J IF NOT REPLACE
52MQ          LDEX  0  FRH(3)              [SKIP OVER RECORD.   
537B          ADX   4  0
53M2          ADX   1  0
546L    NREP8   
54L=          BXGE  4  BSBSA1,NUFPH        [J IF ALREADY TOO MUCH,I.E THE REPLAC
555W                                       [OR INSERTED RECORD WILL HAVE TO GO  
55KG    XLP                                [INTO A NEW BLOCK
5656          LDEX  0  FRH(1)              [NEXT R.H
56JQ    #SKI  K6INSERT  
574B          BZE   0  ZGEOER8             [SO IT DOES FRT AFTER ALL!   
57J2          ADX   4  0                   [RELATIVE PTR,TO TELL US WHEN WE'VE  
583L                                       [REACHED THE END OF THE BLOCK.   
58H=          BXL   4  BSBSA1,NOTENUF      [J IF NOT OVERFLOWED YET.
592W          SBX   4  0                   [STEP BACK.  
59GG          BRN      NUF  
5=26    NOTENUF 
5=FQ          ADX   1  0                   [O/W,INCREMENT X1 & CARRY ON 
5=^B          BRN      XLP  
5?F2    NUFPH   
5?YL          LDCT  0  #20                 [THE BIT WHICH INDICATES THAT
5#D=          SMO      FX2                 [THE "OPERATED ON" RECORD(REPLACED OR
5#XW          ORS   0  AWORK1               [INSERTED)GFES INTO THE NEXT BLOCK. 
5*CG    NUF 
5*X6          SMO      FX2  
5BBQ          LDX   0  AWORK3          [A1 + AREA USED IN INSERT1 BLOCK 
5BWB          ANDN  0  -1   
5CB2          SBX   0  4                   [LESS (A1 + AMOUNT OF BLOCK  
5CTL          ADX   0  5                   [ TO BE LEFT IN INSERT1 BLOCK)   
5D*=          SMO      FX2  
5DSW          STO   0  AWORK4              [STORE   
5F#G    #SKI  K6INSERT>99-99
5FS6          TRACE  0,OVERFLOW 
5G?Q          EXIT  7  0
5GRB    #   
5H?2    #SKI  INSB  
5HQL    (   
5J==    OFLOWBAC
5JPW    #     THIS ROUTINE CALCULATES THE AMOUNT OF OVERFLOW INCURRED BY PUSHING
5K9G    #     THE DATA UP THE BLOCK,AND OFF THE TOP.
5KP6    #   
5L8Q    #     USE OF ACCUMULATORS   
5LNB    #     X4 CONTAINS OVERFLOW EVENTUALLY   
5M82    #     X5 CONTAINS AMOUNT TO FIT IN  
5MML    #     X1 -> RECORD WE HAVE STEPPED TO.  
5N7=    #     X3 -> RECORD INDICATED BY THE READ PTRS.  
5NLW    #   
5P6G    #     ON EXIT   
5PL6    #     X3 UNCHANGED  
5Q5Q    #     X5 CONTAINS O'FLOW
5QKB    #   
5R52          LDN   4  0                   [USED TO KEEP AMOUNT OF OVERFLOW.
5RJL          LDX   1  3                   [  -> CURRENT REC.   
5S4=          SBX   1  FREADWORD(2)    [-> FURB 
5SHW          ADN   1  A1              [-> 1ST RECORD   
5T3G    ZLP 
5TH6          BXE   1  3,RECNEXTB          [J IF "OPERATED ON" RECORD GOES INTO 
5W2Q                                       [PREVIOUS BLOCK  
5WGB          LDEX  0  FRH(1)              [NEXT RECORD 
5X22    #SKI  K6INSERT  
5XFL          BZE   0  ZGEOER8             [ERROR   
5X^=          ADS   0  4                   [CT OF OVERFLOW. 
5YDW          ADX   1  0
5YYG          BXL   4  5,ZLP               [J BACK IF TOTAL IS STILL LESS THAN  
5^D6                                       [512+A1  
5^XQ    #SKI  K6INSERT>199-199  
62CB          TRACE   4,OFLOW B2
62X2          EXIT  7  0
63BL    RECNEXTB
63W=          LDCT  0  #20                 [SET THE "R.I.N.B"   
64*W          SMO      FX2             [BIT 
64TG          ORS   0  AWORK1   
65*6          ADX   4  5
65SQ          EXIT  7  0
66#B    )   
66S2    #   
67?L    SFINDFULLB     [SET X3 ->FCB,X2-> APPROPRIATE FULLB 
67R=    #     CALLED BY X6,OVERWRITES X2,WHICH POINTS TO AN  APPROPRIATE FULLB  
68=W    #     FOR THIS FILE ON SUCCESSFUL EXIT (+1) 
68QG    #     EXIT +0 => NO FULLB   
69=6    #     X3 POINTS TO FCB. 
69PQ          SMO      FX2  
6=9B          LDX   0  AWORK2   
6=P2          SFSTACK  0,2,2               [FIND X2 -> FSTACK   
6?8L          BFCBX    3,2                 [X3 -> FCB   
6?N=    SFLP
6#7W          LDX   2  FPTR(2)             [NEXT BLOCK. 
6#MG          BXE   2  CXFI,(6)            [J IF END OF FILE CHAIN  
6*76          LDX   0  ATYPE(2)            [TYPE
6*LQ          BXE   0  FILEPLUSFCB,(6)     [EXIT FCB, SEARCH UNSUCCESSFUL   
6B6B          SMO      FX1  
6BL2          BXU   0  SFULLB,SFLP         [J IF NOT BSTB/FULLB 
6C5L          LDX   0  A1+1(2)  
6CK=          BXU   0  BSPRE(3),SFLP       [J IF WRONG B.S.PREFIX.  
6D4W          EXIT  6  1
6DJG    #   
6F46    SFCA2   
6FHQ          SMO      FX2  
6G3B          LDX   0  AWORK2              [DEPTH   
6GH2          SFSTACK  0,2                 [X2 -> FCA   
6H2L          SMO      FX2  
6HG=          STO   2  ACOMMUNE5
6H^W          EXIT  6   0   
6JFG    #   
6J^6    #   
6KDQ    SCAREFULA   
6KYB    #     THIS  ROUTINE DOES ALL THE CAREFUL UPDATING FOR 1 BLOCK HAVING
6LD2    #     BEEN CHANGED. IF NECESSARY A BSTR/FULLB IS SET UP,OR ALTLEN'ED,   
6LXL    #     AND THE BLOCK NO. IS SWAPPED OVER 
6MC=    #   
6MWW    #     OVERWRITES  X1,2,3,6, CALLED BY X7
6NBG    #     X4 THROUGHOUT INDICATES WHICH BLOCK NUMBER TO CHANGE (A FREADBLOCK
6NW6    #     TYPE  PTR REL. TO AD OF THE FCB); 
6P*Q    #     ON EXIT  X2 -> THE USAGE BLOCK; THIS IS ASSUMED TO BE A   
6PTB    #     FI/INSERT4 BLOCK  
6Q*2    #   
6QSL          LDX   2  FX2  
6R#=          LDX   2  ACOMMUNE5(2) 
6RRW          PSTAC    2,2  
6S?G          BFCBX   3,2                  [SET X3-> FCB.   
6SR6    #SKI  K6INSERT>199$199  
6T=Q          TRACE   4,CAREFUL 
6TQB          JBC      STEND,3,BFCARE      [EXIT IF NOT CAREFUL 
6W=2          LDX   0  4                   [BLOCK WE'RE INTERESTED IN   
6WPL          SBN   0  FBLKS-1             [DATUMISE
6X9=          MAPBCH   0,3                 [CHECK IF BIT SET IN FMAPP BLOCK.
6XNW          BNZ   0  STEND               [EXIT IF IT IS   
6Y8G          SBX   7  FX1                 [DATUMISE LINK   
6YN6          JBC      NEWFULLB,3,BFALTR   [IF FILE NOT ALTERED,SET UP A FULLB  
6^7Q          CALL  6  SFINDFULLB          [X2-> FULLB,X3-> FCB 
6^MB          BRN      NEWFULLB            [J IF FULLB NOT PRESENT  
7272          LDX   6  ALOGLEN(2)          [NOW ALTLEN FULLB
72LL          ADN   6  1
736=          LDX   3  2
73KW          ALTLEN  3,6                  [BY ONE WORD 
745G          CALL  6  SFINDFULLB          [X2-> FULLB,X3->FCB  
74K6          BRN      ZGEOER1         [ERROR IF NO FULLB   
754Q          BRN      SFULONG             [WHENCE WE CAME FOR GEOERR.  
75JB    NEWFULLB
7642          SETNCORE  3,1,BSTB,FULLB     [SET UP FUUB,X1 -> IF
76HL          CALL  6  SFCB3               [X3 ->FCB
773=          LDX   2  3                   [X1 -> FCB   
77GW    XLPA
782G          LDX   2  FPTR(2)             [NEXT BLOCK IN FILE CHAIN.   
78G6          BXE   2  CXFI,SCHAIN         [J IF END OF FILE CHAIN. 
78^Q          LDX   0  ATYPE(2) 
79FB          BXE   0  FILEPLUSFCB,SCHAIN  [J IF WE'VE REACHED FCB  
79^2          SMO      FX1                 [O/W SEARCH FOR FULLB.   
7=DL          BXU   0  SFULLB,XLPA  
7=Y=    SCHAIN  
7?CW          STO   1  6                   [PRESERVE FULLB PTR  
7?XG          CHAIN    1,BPTR(2)           [CHAI> IN FRONT OF NEXT FCB  
7#C6          LDX   2  6                   [PICK UP FULLB PTR.  
7#WQ          LDX   0  BSPRE(3)            [B.S. PREFIX OF FULLB
7*BB          STO   0  A1+1(2)  
7*W2          LDN   0  2                   [R.H.OF FULLS
7B*L          STO   0  A1(2)
7BT=    SFULONG 
7C#W    SGETBAC 
7CSG          LDX   3  BSPRE(3)            [SAVE BSPRE OVER COOR.   
7D#6          GETBACK  3              [GET ONE BLOCK.   
7DRQ          ADDSKIP  I516A,BSGET  
7F?B          LDX   1  3                   [SAVE OVER NEXT S/R  
7FR2          CALL  6  SFCB3               [X3->FCB 
7G=L          BXE   1  BSPRE(3),SBLOKOK    [JIF BSPRE HASN'T CHANGED OVER COOR  
7GQ=          LDX   2  ACOMMUNE7(2) 
7H9W          FREEBACK 1,2                 [FREE BLOCK  
7HPG          ADDSKIP  I516A,ADLFBL 
7J96          CALL  6  SFCB3
7JNQ          BRN      SGETBAC  
7K8B    SBLOKOK 
7KN2          LDX   2  FPTR(3)  
7L7L          CALL  6  SFLP                [X2 -> FULLB 
7LM=          CALL  0  ZGEOER5  
7M6W          SMO      4
7MLG          LDX   0  0(3) 
7N66          SMO      A1(2)               [OLD BLOCK IN FULLB  
7NKQ          STO   0  A1(2)
7P5B          LDN   0  1                   [UPDATE R.H  
7PK2          ADS   0  A1(2)
7Q4L          SMO      FX2  
7QJ=          LDX   6  ACOMMUNE7           [NEW BLOCK   
7R3W          SMO      4
7RHG          STO   6  0(3)                [NGN BLOCK IN FCB
7S36          CALL  1  SFINDFURB           [FIND USAGE BLOCK
7SGQ    #HAL  FI+INSERT4,0  
7T2B          STO   6  BACK2(2)            [BLOCK NUMBER
7TG2          LDX   0  BSPRE(3)            [
7T^L          STO   0  BACK1(2)            [B.S.PREFIX. 
7WF=          MBS      3,BFALTR,BFALTB     [INDICATE FILE & BLOCK NOS. ALTERED  
7WYW          STO   2  6                   [PTR TO FURB 
7XDG          SBN   4  FBLKS-1             [RELATIVISE PTR  
7XY6          MAPBSE 4,3                   [SET BIT IN FMAPP BLOCK  
7YCQ          LDX   2  6                   [PTR 
7YXB          ADN   4  FBLKS-1  
7^C2          ADX   7  FX1  
7^WL          EXIT  7  0
82B=    STEND   
82TW          CALL  1  SFINDFURB           [X2 ->INSERT4 BLOCK  
83*G    #HAL  FI+INSERT4,0  
83T6          EXIT  7  0
84#Q    #   
84SB    #   
85#2    #     THIS  S/R DOES THE CAREFUL UPDATING FOR A NEW BLOCK; A BIT HAS TO 
85RL    #     BE INSERTED IN THE FMAP BLOCK,AND A BLOCK NO. INSERTED IN THE 
86?=    #     FCB   
86QW    #   
87=G    #     OVERWRITES X1,2,3,6; X4 -> BLOCK NO. BEFORE WHICH THE 
87Q6    #     BLOCK IS TO BE INSERTED. IN THE CASE OF     NON-CAREFUL FILES,WE  
889Q    #     CAN USE AN UNUSED BL.NO.,   IF ANY;O/W WE MUST GET A NEW ONE. 
88PB    #     X2 ON EXIT -> USAGE BLOCK 
8992    SINSERT 
89NL    SINSERT1
8=8=          SBX   7  FX1  
8=MW          DOWN     INSERTBL,2          [INSERT BLOCK
8?7G          TESTREP  FILEFULL,SFULL   
8?M6          ADX   7  FX1  
8#6Q          CALL  1  SFURB               [X2 -> INSERT
8#LB    #HAL FI+INSERT3,0   
8*62          EXIT  7  0
8*KL    #   
8B5=    #     THIS S/R MOVES DOWN AN AMOUNT OF CORE(IN AN USAIE BLOCK),OF SIZE  
8BJW    #     [X0] DOWN THE USAGE BLOCK BY [X1] 
8C4G    #     [X3] IS THE START OF THE AREA TO BE MOVED,& X2 -> FX2 
8CJ6    #   
8D3Q    MOVEDOWNB   
8DHB    #SKI  K6INSERT>199-199  
8F32    (   
8FGL          TRACE    0,SIZEDOWN   
8G2=          TRACE    1,BY 
8GFW    )   
8G^G    #SKI  K6INSERT  
8HF6    (   
8HYQ          BZE  1  ZGEOER6   
8JDB          BZE  0  ZGEOER1   
8JY2          BXGE 1  BSBS,ZGEOER6  
8KCL          BXGE 0  BSBS,ZGEOER7  
8KX=          LDN  4  -1
8LBW          BXL  3  4,ZGEOER10
8LWG    )   
8MB6          LDX   4  1                   [SIZE OF SPACE TO BE CREATED 
8MTQ                                       [THIS IS THE AMOUNT WE HAVE TO   
8N*B          LDX   5  0                   [MOVE DOWN THE BLOCK 
8NT2          ADX   5  3                   [X5   POINTS TO THE BOTTOM OF THE
8P#L          LDX   6  5                   [AREA TO BE MOVED,X6 POINTS TO THE   
8PS=          ADX   6  1
8Q?W          SMO      6                   [BOTTOM OF THE AREA TO BE MOVED INTO.
8QRG          STOZ     0                   [ZEROISE WORD AT END OF BLOCK
8R?6    MOVELOOP       [   WE CAN ONLY MOVE DOWN [X4]=[X1] WORDS AT A TIME(OR   
8RQQ                   [LESS,OF COURSE),FOR FEAR OF OVERWRITING WE START AT THE 
8S=B          BXL   0  4,MOVELAST          [BOTTOM.J IF AMOUNT LEFT TO MOVE IS  
8SQ2                                       [NOW LESS THAN MAXIMUM.  
8T9L    #SKI  K6INSERT>399-399  
8TP=          TRACE  5,NEXTDOWN 
8W8W          SBX   5  4                   [MOVE POINTERS UP TO POINT TO NEXT   
8WNG          SBX   6  4                   [AREAS TO BE MOVED TO & FROM.
8X86          MOVE  5  0(1) 
8XMQ          BXE   5  3,(7)               [EXIT IF AREA TO BE MOVED IS AN EXACT
8Y7B                                       [MULTIPLE OF [X4].   
8YM2          SBX   0  4                   [DECREMENT SIZE  OF AREA LEFT TO 
8^6L          BRN      MOVELOOP            [MOVE AND JUMP BACK TO START OF LOOP 
8^L=    MOVELAST                           [THIS CODE MOVES THE'REMAINDER' DOWN 
925W          LDX   1  0                   [SIZE OF LAST MOVE   
92KG    #SKI  K6INSERT>399-399  
9356          TRACE  0,LASTDOWN 
93JQ          LDX   5  3                   [FROM HERE   
944B          LDX   6  3
94J2          ADX   6  4                   [TO HERE 
953L          MOVE  5  0(1) 
95H=          EXIT  7  0
962W    #   
96GG    #   
9726    #   
97FQ    #     ENTRY POINT FROM INSERT.  
97^B    #   
98F2    #     BOTTOM   1/2 OF AWORK1 = EXTRA REQUIRED   
98YL    #   
99D=    #     AWORK3    = AMOUNT USED IN INSERT1 BLOCK(WHICH IS IN THE FILE CH.)
99XW    #   
9=CG    X1INSERTWO  
9=X6    #SKI  K6INSERT>699-699  
9?BQ          TRACE  FX2,INSERTWO   
9?WB          ADDSKIP  I516A,INSE2  
9#B2          CALL  1  SFURB               [X2 -> INSERT1 BLOCK 
9#TL    #HAL  FI+INSERT1,0  
9**=          LDX   3  2                   [X3 -> INSERT1 BLOCK 
9*SW          SMO      FX2  
9B#G          LDX   2  ACOMMUNE5           [X2 -> FCA   
9BS6          PSTAC  1,2
9C?Q          BFCBX  1,1                   [X1 -> FCB   
9CRB          ADX   3  FREADWORD(2)        [X3 -> CURRENT RECORD
9D?2    #SKI  INSB  
9DQL    (   
9F==          LDX   0  FBLMOD(1)
9FPW          SBN   0  FBLKS-A1 
9G9G          BZE   0  SONEBLOK            [J IF ONLY ONE BLOCK IN FILE 
9GP6          ADN   0  FBLKS-2             [J IF OVERFLOW IS FROM PENULTIMATE   
9H8Q          BXE   0  FREADBLOCK(2),SFORCALC   [BLOCK  
9HNB          BXL   0  FREADBLOCK(2),SBAKCALC   [J IF FROM LAST BLOCK   
9J82          LDN   0  FBLKS                   [J IF FROM FIRST BLOCK.  
9JML          BXE   0  FREADBLOCK(2),SFORCALC   
9K7=          SMO      FREADBLOCK(2)
9KLW          LDX   7  1(1)                [SUCCEEDING B.N. 
9L6G          CALL  6  SFUB 
9LL6          BRN      SFORCALC            [J IF BLOCK FOUND
9M5Q          LDX   0  FREADBLOCK(2)
9MKB          SBN   0  1
9N52          SMO      0
9NJL          LDX   7  0(1)                [PRECEEDING BLOCK NO.
9P4=          CALL  6  SFUB 
9PHW          BRN      SBAKCALC            [J IF BL.FOUND   
9Q3G          CALL  7  OFLOWFOR            [CALCULATE OVERFLOW FORWARDS 
9QH6                                       [AND LEAVE IN AWORK4 
9R2Q          CALL  7  OFLOWBAC            [CALCULATE OVERFLOW BACKWARDS
9RGB          LDX   2  FX2                     [& LEAVE IN X4   
9S22          BXGE  4  AWORK4(2),TRYFOR    [TRY FORWARDS,IF F'WARDS OVERFLOW IS 
9SFL          BRN      TRYBAC              [LESS THAN OR EQUAL TO B'WARDS.  
9S^=    SBAKCALC
9TDW    #SKI  K6INSERT>199-199  
9TYG          TRACE    FREADWORD(2),BACKWARD
9WD6          CALL  7  OFLOWBAC            [CALCULATE B'WARDS O'FLOW.   
9WXQ          LDX   2  FX2  
9XCB    TRYBAC  
9XX2          STO   4  AWORK4(2)           [STORE OVERFLOW. 
9YBL          NGN   5  1                   [BLOCK MODIFIER  
9YW=          BRN      TRYMERJ  
9^*W    )   
9^TG    #SKI  INSB<1$1  
=2*6    (   
=2SQ          LDX   4  FBLMOD(1)           [J IF NOT LAST BLOCK 
=3#B          ADN   4  A1-1 
=3S2          BXU   4  FREADBLOCK(2),SFORCALC   
=4?L    )   
=4R=    SONEBLOK
=5=W          ADN   4  1              [BLOCK
=5QG    #SKI  K6INSERT>199$199  
=6=6          TRACE 4,ONEBLOCK  
=6PQ          SETNCORE GSBS,1,FI,INSERT3
=79B          STOZ     A1(1)               [ZEROISE BLOCK FOR TIME BEING
=7P2          CALL  6  SFCB3               [-> FCB  
=88L          LDX   2  FPTR(3)             [-> FSTACK   
=8N=          CHAIN   1,2                  [CHAIN IN FILE CHAIN.
=97W          LDCT  0  #14                 [EMPTY BLOCK & ...   
=9MG          ORS   0  AWORK1(2)           [SET "EMPTY BLOCK @ E.O.F" BIT.  
==76          CALL  7  SINSERT1            [INSERT BLOCK ( @ END OF FILE )  
==LQ          SMO      FX2  
=?6B          STO   2  ACOMMUNE4           [PRESERVE PTR TO INSERT3 BLOCK   
=?L2          LDX   2  FX2  
=#5L          LDX   2  ACOMMUNE5(2) 
=#K=          CALL  1  SFFURB   
=*4W    #HAL  FI+INSERT1,0                 [-> INSERT1  
=*JG          LDX   3  2
=B46          CALL  6  SFCA2               [-> FCA  
=BHQ          ADX   3  FREADWORD(2)        [-> RECORD   
=C3B    SFORCALC
=CH2    #SKI  K6INSERT>199$199  
=D2L          TRACE    FREADWORD(2),FORWARD 
=DG=          CALL  7  OFLOWFOR            [CALCULATE FORWARDS OVERFLOW 
=D^W          LDX   2  FX2  
=FFG    TRYFOR  
=F^6          LDCT  0  #40                 [SET THE "OVERFLOWING
=GDQ          ORS   0  AWORK1(2)
=GYB          LDX   4  AWORK4(2)           [X4 = SIZE OF OVERFLOW   
=HD2          LDN   5  1                   [MARKER - GET NEXT BLOCK 
=HXL    #   
=JC=    #     HAVING CALCULATED OVERFLOW & DIRECTION WE WANT TO GO, WE NOW  
=JWW    #     LOOK TO SEE IF WE WANT TO FIT EXTRA INTO THE CONTIGUOUS BLOCK.
=KBG    #   
=KW6    TRYMERJ 
=L*Q          LDCT  0  #20             [IF THE"RINB" IS SET,
=LTB          ANDX  0  AWORK1(2)       [ADD IN THE SIZE OF THE NEW RECORD   
=M*2          BZE   0  NONEXTB         [& IF THE OVERFLOW( + NEW RECORD IF BEING
=MSL          LDX   0  AWORK3(2)       [PUT IN NEXT BLOCK) IS GREATER THAN  
=N#=          SRL   0  15              [THE PARAMETER "X" WE DON'T ATTEMPT TO   
=NRW          ADX   4  0               [READ DOWN THE CONTIGUOUS BLOCK & SHARE I
=P?G    NONEXTB 
=PR6          BXGE  4  BSBS,TWONEWBLOX     [GO TO INSERTFR IF O'FLOW > GSBS-1   
=Q=Q          SMO      ACOMMUNE5(2)        [SET FREADBLOCK TO POINT TO  
=QQB          ADS   5  FREADBLOCK          [ADJACENT BLOCK  
=R=2          CALL  6  SEEKFURB            [X3 ->"ADJACENT" BLOCK   
=RPL          BRN      YESFUB              [IT'S IN CORE
=S9=          LDX   2  FX2                 [OVERWRITTEN.
=SNW          SMO      FX1  
=T8G          BXGE  4  X,XLESS         [JIF EXTRA INTO NEXT BLOCK TOO LARGE 
=TN6          LDCT  0  #4   
=W7Q          ANDX  0  AWORK1(2)
=WMB          BZE   0  NOFUB2              [J IF"EMPTY BL.@ E.O.F."BIT NOT SET. 
=X72          SMO      ACOMMUNE5(2) 
=XLL          SBS   5  FREADBLOCK   
=Y6=    YEMPTYB 
=YKW          LDX 3 ACOMMUNE4(2)     [->INSERT3 BLOCK   
=^5G          LDX   2  ACOMMUNE5(2)     [-[FCA  
=^K6          BRN   SGOTINS3
?24Q    #   
?2JB    #     THE OVERFLOW IS LESS THAN THE FACTOR X.THIS MEANS THAT WE READ
?342    #     DOWN A CONTIGUOUS BLOCK AND TRY TO FIT THE OVERFLOW IN TO IT. 
?3HL    #     ALTERNATIVELY THERE IS AN ADJACENT BLOCK IN CORE,IN WHICH CASE
?43=    #     WE TRY TO FIT THE EXTRA IN.   
?4GW    #   
?52G    TRYFURB 
?5G6          CALL  6  SEEKFURB2           [X3 ->BLOCK  
?5^Q          BRN   YESFUB  
?6FB    NOFUB   
?6^2          LDX   2  FX2  
?7DL    NOFUB2  
?7Y=          LDX   2  AWORK2(2)
?8CW          GETAFURB  0(2)           [GET THE USAGE BLOCK 
?8XG          CALL  6  SFCA2               [X2 -> FCA   
?9C6          BRN      TRYFURB  
?9WQ    YESFUB  
?=BB          NAME  3,FI,INSERT3
?=W2          SBS   5  FREADBLOCK(2)       [DOWNDATE FREADBLOCK AGAIN.  
??*L    SGOTINS3
??T=          ADN   3  A1                  [X3 -> BEGINNING OF BLOCK.   
?##W          CALL  7  SENDBLOCK           [X1 -> END OF BLOCK  
?#SG          NGX   7  1                   [X2 CONTAINS THE AMOUNT OF   
?*#6          ADX   7  3                   [BLOCK USED,NEGATED  
?*RQ          SBN   3  A1                  [X3 -> INSERT3 BLOCK 
?B?B          SMO      FX2                 [STORE AMOUNT USED IN INSERT3 BLOCK. 
?BR2    #     ! NB  'NOT' PLUS A1 ! 
?C=L          NGS   7  ACOMMUNE4
?CQ=          ADN   7  GSBS-1              [CALCULATE AMOUNT USED   
?D9W          BXL   7  4,WONTFIT           [J IF NOT ENOUGH ROOM.   
?DPG          LDX   0  7                   [X0 CONTAINS THE AREA LEFT AFTER 
?F96          SBX   0  4                   [MOVING IN THE OVERFLOW  
?FNQ          SMO      FX1                 [IF THIS AREA IS LESS THAN A CERTAIN 
?G8B          BXL   0  PERCENT,NSHAR       [NUMBER,WE DON'T SHARE THE BLOCKS
?GN2          LDX   6  FREADWORD(2)        [LOAD & PRESERVE FREADWORD.  
?H7L    #   
?HM=    #     WE CALCULATE THE AVERAGE  OF THE DATA SPREAD OVER THE TWO BLOX
?J6W    #     & ATTEMPT TO SHARE THE DATA IN THE 2 BLOX SO THAT THEY BOTH   
?JLG    #     CONTAIN (ROUGHLY) THE MEDIAN . WE ALSO INSERT THE EXTRA RECORD
?K66    #     IN THE GENERAL HURLY-BURLY.   
?KKQ    #   
?L5B          LDX   1  FX2                 [WE ADD TOGETHER 
?LK2          LDX   7  ACOMMUNE4(1)        [1) AMT. USED IN INSERT3.
?M4L    SHAR2BLOX   
?MJ=          LDX   0  AWORK3(1)           [2) AMT. USED IN INSERT1 + A1
?N3W          ANDN  0  -1   
?NHG          ADX   7   0   
?P36          LDEX  0  AWORK1(1)           [3) EXTRA WANTED.
?PGQ          ADX   7  0
?Q2B          SBN   7  A1                  [ SUB  A1
?QG2          SRA   7  1                   [DIVIDE BY 2 
?Q^L    #SKI  K6INSERT>99-99
?RF=          TRACE  7,SMOOTH 2 
?RYW    #SKI  K6INSERT  
?SDG          BXGE  7  BSBS,ZGEOER5        [J IO TOTAL TOO LARGE
?SY6          CALL  1  SFFURB              [SET X2->INSERT1 BLOCK   
?TCQ    #HAL  FI+INSERT1,0  
?TXB          LDX   1  FX2  
?WC2          SBN   6  A1                  [FREADWORD-A1
?WWL          LDCT  5  #020 
?XB=          LDX   0  AWORK3(1)
?XTW          SRL   0  15   
?Y*G          ADX   0  6                   [FREADWORD]-A1+SIZE OF NEW RECORD
?YT6          BXL   0  BSBS,NRNB
?^#Q          ORS   5  AWORK1(1)           [NEW REC JUST WON'T FIT IN "CURRENT" 
?^SB          BRN      NSHAR               [BLOCK SO SET RINB & DON'T BOTHER TO 
#2#2                                       [RE-CALCULATE THE O'FLOW AS WE CAN'T 
#2RL                                       [                       IMPROVE ON IT
#3?=    NRNB
#3QW          BXL   6  7,NRNB1             [JIF THE POSITION OF THE INSERTEE OR 
#4=G                                       [REPLACEE SUGGESTS IT MAY FIT INTO   
#4Q6                                       [                 THE "CURRENT" BLOCK
#59Q          ORS   5  AWORK1(1)           [SET "RECORD IN NEXT BLOCK" BIT  
#5PB    YRNB
#692    #SKI  K6INSERT>299-299  
#6NL          TRACE    4,YRNB   
#78=          LDN   4  0
#7MW          BRN      NB   
#87G    NRNB1   
#8M6          ANDX  5  AWORK1(1)
#96Q          BNZ   5  YRNB                [JIF "R.I.N.B." ALREADY SET  
#9LB          LDEX  4  AWORK1(1)
#=62          SBX   0  4
#=KL          ADX   2  0                   [-> FIRST RECORD AFTER REPLACEE/INSER
#?5=          ADX   4  0                   [= AMOUNT TO BE LEFT(SO FAR) 
#?JW    #SKI  K6INSERT>299-299  
##4G          TRACE   4,NRNB
##J6          BXGE  4  7,NC                [J IF REPLACING NEW LAST REC IN BLOCK
#*3Q    NB  
#*HB          LDEX  0  A1+FRH(2)           [NEXT R.H.   
#B32    #SKI  K6INSERT  
#BGL          BZE   0  ZGEOER11            [ERROR IF E.O.B. 
#C2=          ADX   2  0                   [ADD TO PTR. 
#CFW          ADX   4  0                   [ADD NEXT R.H.INTO CUMULATIVE TOTAL  
#C^G    #SKI  K6INSERT>699-699             [OF DATA TO BE LEFT IN BLOCK 
#DF6    (   
#DYQ          TRACE  4,OLOOP
#FDB          TRACE  0,NEXT O   
#FY2    )   
#GCL          BXGE  4  7,NOT2NEWBLOX       [J IF SURPASSED AVGE.
#GX=          BXGE  6  4,NB                [IF THE RECORD PTR GOES PAST F'WORD  
#HBW          BZE   5  NB                  [WITHOUT EXCEEDING AVERAGE, AND RINB 
#HWG          LDX   0  AWORK4(1)           [IS SET WE MUST HAVE A VERY LARGE NEW
#JB6          BNZ   0  TWONEWBLOX5         [RECORD SO WE GO TO INSERTFR UNLESS  
#JTQ                                       [         REPLACING LAST REC IN BLOCK
#K*B    #SKI K6INSERT   
#KT2    (   
#L#L          LDCT  0  #10  
#LS=          ANDX  0  AWORK1(1)
#M?W          BZE   0  ZGEOER4  
#MRG          LDCT  0  #200 
#N?6          ANDX  0  AWORK1(1)
#NQQ          BZE   0  ZGEOER4  
#P=B    )   
#PQ2          LDX   2  FX2  
#Q9L          BRN      QFOR 
#QP=    NOT2NEWBLOX 
#R8W          BXGE  4  BSBS,ND             [B626
#RNG          LDEX  5  A1+FRH(2)
#S86          BNZ   5  NC   
#SMQ    ND  
#T7B          SBX   4  0                   [SUB LAST R.H.   
#TM2    NC  
#W6L    #   
#WL=    #     WE NOW CONVERT TO CRUDE OVERFLOW. 
#X5W    #   
#XKG    #SKI  K6INSERT>299-299  
#Y56          TRACE  4,CRUDE O             [UNCONVERTED AS YET  
#YJQ          LDX   2  FX2  
#^4B          LDX   0  AWORK3(2)
#^J2          ANDN  0  -1              [SUBTRACT AMT.USED IN INSERT1 BLOCK  
*23L          SBX   4  0
*2H=          ADN   4  A1                  [+A1 
*32W          NGX   4  4                   [INVERT  
*3GG          LDCT  0  #20                 [IF R.I.N.B BIT SET WE DON'T WANT TO 
*426          ANDX  0  AWORK1(2)           [ADJUST OVERFLOW BY SIZE OF NEW RECOR
*4FQ          BZE   0  NRINB4              [ASIT WAS NEVER ADDED TO THE CRUED   
*4^B                                       [OVERFLOW
*5F2          LDXC  0  AWORK1(2)           [J IF INSERT 
*5YL          BCC      YRINB4   
*6D=          ANDN  0  #777                [SUBTRACT SIZE OF RECORD BEING   
*6XW          LDX   7  AWORK3(2)           [REPLACED(I.E OLD RECORD FROM
*7CG          SRL   7  15                  [OVERFLOW
*7X6          SBX   0  7
*8BQ          ADX   4  0
*8WB          BRN      YRINB4   
*9B2    NRINB4  
*9TL          LDEX  0  AWORK1(2)           [ADD IN X1(=0 IF INSERT =SIZE OF REC.
*=*=          ADX   4  0                   [TO BE REPLACED O/W) & "EXTRA"REQU'D.
*=SW    YRINB4  
*?#G    #SKI  K6INSERT  
*?S6          BXL   4  AWORK4(2),ZGEOER2   [J IF SMALLER THAN LAST OVERFLOW 
*#?Q          STO   4  AWORK4(2)           [STORE.  
*#RB    #   
**?2    #     TRE OVERFLOW HAS BEEN CALCULATED, AND WE     KNOW IF THE RECORD   
**QL    #     GOES IN THE NEXT BLOCK.   
*B==    #   
*BPW    NSHAR   
*C9G          LDX   2  FX2  
*CP6    #SKI  K6INSERT>699-699  
*D8Q          TRACE    AWORK4(2),NSHAR  
*DNB          LDCT  0  #10  
*F82          ANDX  0  AWORK1(2)           [J IF "EMPTY BLOCK" BIT SET  
*FML          BNZ   0  QFOR 
*G7=          NAME  3,FI,INSERT4           [RENAME BLOCK
*GLW          SMO      ACOMMUNE5(2)        [SMO BY PTR TO FCA   
*H6G          LDX   4  FREADBLOCK          [PICK UP BLOCK  READING PTR  
*HL6          NGN   5  1
*J5Q          LDCT  0  #40  
*JKB          ANDX  0  AWORK1(2)
*K52          BZE   0  NOTFOR11            [J IF NOT FORWARD
*KJL          LDN   5  1
*L4=    NOTFOR11
*LHW          ADX   4  5                   [ADD +/-1 TO GIVE B.N. OF INSERT3 BL.
*M3G          LDX   5  ACOMMUNE4(2)      [PRESERVE ACOM4 OVER COORDINATING S/R  
*MH6          CALL  7  SCAREFULA           [DO CAREFUL UPDATING 
*N2Q          NAME  2,FI,INSERT3           [FOR INDEX,SILLY IT  
*NGB          LDX   3  2
*P22          LDX   2  FX2  
*PFL          STO   5  ACOMMUNE4(2) 
*P^=    QFOR
*QDW          LDCT  0  #40  
*QYG          ANDX  0  AWORK1(2)
*RD6          BNZ   0  POINTFOR 
*RXQ          GEOERR  1,MARK7   
*SCB    POINTFOR
*SX2    #   
*TBL    #  1) WE HAVE CALCULATED THE OVERFLOW,WHICH ON ENTRY HERE IS FORWARDS.  
*TW=    #     IF WE ARE SHARING 2 PART-FULL BLOX,WE MOVE DOWN THE INSERT3 BLOCK 
*W*W    #     IF B5 OF AWORK1 IS SET,THE INSERT3 BLOCK IS EMPTY.
*WTG    #   
*X*6    #  2) WE THEN CALCULATE A POINTER TO THE FIRST WORD OF THE AREA(IN THE  
*XSQ    #     INSERT1 BLOCK) WHICH WE WISH TO MOVE  
*Y#B    #   
*YS2    #  3) IF THE "R.I.N.B" BIT (B4 OF AWORK1) IS SET(THIS MEANS THE INSERTEE
*^?L    #     [OR REPLACEE] GOES INTO THE INSERT3 BLOCK),WE GO TO LABEL "RINBY" 
*^R=    #   
B2=W    #  4) O/W WE MOVE ACROSS THE OVERFLOW& RENAME THE INSERT3 BLOCK A FILE/ 
B2QG    #     FUWB.WE THEN MOVE DOWN THE BOTTOM SLIVER OF THE INSERT1 BLOCK,
B3=6    #     MOVE IN THE NEW RECORD,UPDATE FREADWORD(& CMOD IF APPROPRIATE)
B3PQ    #     RENAME THE INSERT1 BLOCK A FUWB & GO UP.  
B49B    #   
B4P2    #  5) AT "RINBY" LABEL WE HAVE TO MOVE ACROSS A "SANDWICH" OF OVERFLOW, 
B58L    #     CONSISTING OF THE NEW RECORD EMBEDDED IN A MASS OF OLD DATA.EITHER
B5N=    #     THE TOP OR THE BOTTOM OF THE SANDWICH MAY BE NULL.
B67W    #   
B6MG          STO   3  ACOMMUNE2(2)        [STORE PTR TO BLOCK  
B776          ADN   3  A1                  [MOVE DATA DOWN FROM TOP OF BLOCK
B7LQ          LDN   1  0
B86B          LDCT  0  #20  
B8L2          ANDX  0  AWORK1(2)           [J IF "RINB" NOT SET 
B95L          BZE   0  NRINBY1  
B9K=          LDX   1  AWORK3(2)       [SIZE OF NEW RECORD. 
B=4W          SRL   1  15   
B=JG    NRINBY1 
B?46          ADX   1  AWORK4(2)           [+AMOUNT BEING DISPLACED INTO INSERT3
B?HQ          STO   1  ACOMMUNE6(2)        [STORE AMOUNT EXTRA TO BE MOVED INTO 
B#3B                                       [INSERT3 BLOCK IN ACOMMUNE6. 
B#H2          LDEX  0  FRH(3)   
B*2L          BNZ   0  YMVDOWN           [J  IF BLOCK NOT EMPTY 
B*G=          SMO      1                   [ZEROISE WORD AFTER AS LAST WORD IN  
B*^W          STOZ     0(3)                [BLOCK   
BBFG          BRN      NMVDOWN  
BB^6    YMVDOWN 
BCDQ          LDX   0  ACOMMUNE4(2)        [EMOUNT USED IN INSERT3 BLOCK
BCYB          CALL  7  MOVEDOWNB           [MOVE INSERT3 BLOCK'S CONTENTS DOWN  
BDD2    NMVDOWN 
BDXL          CALL  1  SFURB               [X2-> INSERT1 BLOCK  
BFC=    #HAL  FI+INSERT1,0  
BFWW          STO   2  6                   [& X6
BGBG          LDX   1  FX2  
BGW6          STO   6  ACOMMUNE4(1)        [STORE PTR TO INSERT1 BLOCK  
BH*Q          LDX   0  AWORK3(1)
BHTB          ANDN  0  -1              [ADD AMOUNT USED IN INSERT1 BLOCK.   
BJ*2          ADX   2  0
BJSL          SBX   2  AWORK4(1)           [SUB AREA TO BE MOVED OUT.   
BK#=    #     X2 CONTAINS AN ABSOLUTE PTR TO THE START OF THE AREA TO BE MOVED  
BKRW    #     INTO  THE INSERT3 BLOCK   
BL?G          LDCT  0  #20                 [J IF "RECORD IN NEXT BLOCK BIT" SET 
BLR6          ANDX  0  AWORK1(1)
BM=Q          BNZ   0  RINBY
BMQB    #     THE INSERTEE/REPLACEE REMAINS IN THE INSERT1 BLOCK IN THIS PATH   
BN=2          SMO      AWORK4(1)           [MOVE OVERFLOW ACROSS
BNPL          MOVE  2  0                   [TO THE INSERT3 BLOCK
BP9=          LDX   3  6                   [WE'VE FINISHED WITH THE INSERT3 BLK.
BPNW          LDX   2  ACOMMUNE5(1)        [-> FCA  
BQ8G          ADX   3  FREADWORD(2)        [X3 -> POSITION INTO WHICH WE WISH TO
BQN6          LDX   0  AWORK3(1)       [MOVE NEW RECORD 
BR7Q          ANDN  0  -1   
BRMB          SBX   0  FREADWORD(2)        [X0 CONTAINS THE AREA AFTER THE POS- 
BS72          SBX   0  AWORK4(1)           [ITION OF THIS RECORD,THAT HAS TO BE 
BSLL          BNZ   0  YMOVD               [MOVED DOWN THE BLOCK.J IF NON-ZERO  
BT6=          LDX   0  AWORK3(1)
BTKW          SRL   0  15              [SIZE OF NEW RECORD  
BW5G          SMO      0
BWK6          STOZ     0(3)                [ZEROISE NEW LAST WORD IN BLOCK. 
BX4Q          BRN      NOMOVD   
BXJB    YMOVD   
BY42          LDEX  1  AWORK1(1)           [DISTANCE TO BE MOVED DOWN BLOCK.
BYHL          CALL  7  MOVEDOWNB           [DO THE TRICKY STUFF.
B^3=    NOMOVD  
B^GW          MHUNTW  2,FILE,FWB           [FIND NEW RECORD 
C22G          ADN   2  A1   
C2G6          SMO      0(2) 
C2^Q          MOVE  2  0                   [MOVE IT IN. 
C3FB          LDX   1  FX2  
C3^2          LDX   0  AWORK1(1)
C4DL          BNG   0  YREP3               [J IF REPLACE
C4Y=          LDEX  0  0(2) 
C5CW          SMO      ACOMMUNE5(1) 
C5XG          ADS   0  FREADWORD           [UPDATE FREADWORD
C6C6    YREP3   
C6WQ          NGN   7  A1-2 
C7BB    UPDATCMOD   
C7W2          LDX   2  ACOMMUNE5(1)        [-> FCA  
C8*L          PSTAC 3,2 
C8T=          BFCBX 3,3                    [-> FCB  
C9#W          ADX   7  FREADBLOCK(2)
C9SG          SBX   7  FBLMOD(3)           [IS INSERT3 BLOCK LAST BLOCK ?   
C=#6          BNZ   7  NOCHCMOD            [J IF NOT
C=RQ          LDX   0  CMOD(3)  
C??B          BNG   0  NOCHCMOD 
C?R2          LDCT  7  #14                 [J IF "EMPTY BLOCK" BITS NOT SET FOR 
C#=L          ANDX  7  AWORK1(1)           [J IF "EMPTY BLOCK"BITS NOT SET FOR  
C#Q=                                       [WE CAN CALCULATE CMOD   
C*9W          BZE   7  NONEGCM             [SET,WE CAN'T
C*PG          NGS   7  CMOD(3)  
CB96          BRN      NOCHCMOD 
CBNQ    NONEGCM 
CC8B          LDX   0  ACOMMUNE6(1)        [EXTRA PUT INTO INSERT3 BLOCK.   
CCN2          ADS   0  CMOD(3)             [UPDATE CMOD 
CD7L    NOCHCMOD
CDM=          NGS   3  CMOD(3)             [WE WILL RECALCULATE CMOD CORRECTLY O
CF6W                                       [CURRENTLY THERE IS A PATH THAT GOES 
CFLG          SETREP   OK                  [DEFAULT OK  
CG66          LDX   0  FBLMOD(3)
CGKQ          SBN   0  GSBS-1-FNEARLY-FBLKS 
CH5B          BNG   0  NOTFN2              [CHECK FOR FNEARLY   
CHK2    #SKI  K6INSERT>99-99
CJ4L          TRACE    FBLMOD(3),FNEARLY
CJJ=          SETREP   FNEARLY  
CK3W    NOTFN2  
CKHG          LDN   0  #77  
CL36          ANDX  0  FINFC(3) 
CLGQ          BZE   0  RENAMEW             [J IF NOT INDEXED FILE   
CM2B          ACROSS   INDEX,2  
CMG2    RENAMEW 
CM^L          LDX   2  ACOMMUNE2(1) 
CNF=          NAME  2 ,FILE,FUWB
CNYW          LDX   1  ACOMMUNE4(1)        [PTR TO INSERT1 BLOCK
CPDG          NAME  1,FILE,FUWB            [RENAME FOR CORE UNJAMMER
CPY6          UP
CQCQ    #   
CQXB    #     HERE  WE HAVE TO MOVE THE "SANDWICH" INTO THE INSERT3 BLOCK.  
CRC2    #   
CRWL    #     ON ENTRY HERE X2 -> CONTAINS AN ABS. PTR. TO THE START OF THE AREA
CSB=    #     TO BE MOVED INTO THE INSERT3 BLOCK
CSTW    #     X1 = FX2, X6 -> INSERT1 BLOCK,X3 ->START OF DATA IN INSERT3 BLOCK.
CT*G    #   
CTT6    RINBY   
CW#Q          LDXC  0  AWORK1(1)           [X2 IS WHAT WE WANT FOR INSERT   
CWSB          BCC      NREP18              [BUT NOT FOR REPLACE 
CX#2          ANDN  0  #777                [FOR REPLACE WE SUBTRACT 
CXRL          LDX   7  AWORK3(1)           [THE SIZE OF THE OLD RECORD  
CY?=          SRL   7  15                  [FROM THE X2 POINTER 
CYQW          SBX   0  7
C^=G          ADX   2  0
C^Q6    NREP18  
D29Q          LDX   0  2                   [CALCULATE VOLUME UN-TOUCHED BY MOVE 
D2PB          SBX   0  6                   [FROM INSERT1 BLOCK(+A1) & STORE IN  
D392          STO   0  ACOMMUNE3(1)        [ACOMMUNE3.  
D3NL          SMO      ACOMMUNE5(1)        [-> FCA  
D48=          SBX   0  FREADWORD           [GIVES SIZE OF TOP OF "SANDWICH" 
D4MW          NGX   0  0                   [INVERTED
D57G    #SKI  K6INSERT>199-199  
D5M6          TRACE  0,TOPSWICH 
D66Q          BZE   0  NOTOPSWCH           [J IF NULL   
D6LB    #SKI  K6INSERT  
D762          BNG   0  ZGEOER12 
D7KL          SMO      0
D85=          MOVE  2  0                   [MOVE ACROSS TOP OF S'WICH   
D8JW          ADX   2  0
D94G          ADX   3  0                   [UPDATE TO & FROM PTRS   
D9J6    NOTOPSWCH   
D=3Q          SMO      ACOMMUNE5(1)        [PRESERVE FREADWORD (INVERTED)   
D=HB          NGX   5  FREADWORD
D?32          LDX   7  AWORK1(1)
D?GL          BPZ   7  NSETRP              [J IF INSERT 
D#2=          ADN   0  A1   
D#FW          SMO      ACOMMUNE5(1) 
D#^G          STO   0  FREADWORD           [RECORD PTR @ REPLACED RECORD
D*F6          LDN   0  1
D*YQ          SMO      ACOMMUNE5(1)        [BLOCK PTR @ INSERT3 BLOCK   
DBDB          ADS   0  FREADBLOCK   
DBY2    NSETRP  
DCCL          LDX   4  2                   [SAVE
DCX=          MHUNTW  2,FILE,FWB
DDBW          ADN   2  A1   
DDWG          SMO      0(2) 
DFB6          MOVE  2  0                   [MOVE IN NEW RECORD. 
DFTQ          ADX   3  0(2)                [UPDATE "TO" PTR.
DG*B          LDX   0  AWORK3(1)
DGT2          ANDN  0  -1   
DH#L          ADX   5  0               [-FREADWORD+AMOUNT USED IN INSERT1   
DHS=                                       [BLOCK= BOTTOM HALF OF SANDWICH  
DJ?W          LDX   2  4                   [PICK UP PTR TO  
DJRG          LDX   7  AWORK1(1)           [IF REPLACE,HAVE TO OMIT REPLACEE,   
DK?6          BPZ   7  NOSUBREC            [SO WE SUB. FROM AMOUNT MOVED & ADD  
DKQQ          SBX   5  0(2)                [TO "FROM PTR,THE SIZE OF THE REPLACE
DL=B    #SKI  K6INSERT>599-599  
DLQ2          TRACE 0(2),SIZE REP   
DM9L          ADX   2  0(2)                [ADD TO"FROM"PTR.
DMP=    NOSUBREC
DN8W    #SKI  K6INSERT>199-199  
DNNG          TRACE    5,BOTSWCH
DP86          BZE   5  NBOTSWCH 
DPMQ    #SKI  K6INSERT  
DQ7B          BNG   5  ZGEOER13 
DQM2          SMO      5                   [O/W MOVE IT ACROSS. 
DR6L          MOVE  2  0
DRL=    NBOTSWCH
DS5W          LDCT  0  #14                 [J IF NOT NEW BLOCK  
DSKG          ANDX  0  AWORK1(1)
DT56          BZE   0  NOSTOZ   
DTJQ          SMO      5                   [O/W ZEROISE LAST WORD IN BLOCK  
DW4B          STOZ     0(3) 
DWJ2    NOSTOZ  
DX3L          LDX   2  6                   [ZEROISE WORD AT TOP OF TOP HALF OF  
DXH=          SMO      ACOMMUNE3(1)        [SANDWICH-NOW LAST WORD IN INSERT1   
DY2W          STOZ     0(2)                [BLOCK.  
DYGG          LDX   0  AWORK1(1)
D^26          BNG   0  NOSETRP             [J IF REPLACE
D^FQ          SBX   3  ACOMMUNE2(1)        [-> INSERT3  
D^^B          SMO      ACOMMUNE5(1)        [SET INSERT PTRS NOW!
F2F2          STO   3  FREADWORD           [READ RECORD PTR. @ RECORD AFTER 
F2YL          LDN   0  1                   [INSERTEE.   
F3D=          SMO      ACOMMUNE5(1)        [BLOCK PTR @ NEXT BLOCK(INSERT3) 
F3XW          ADS   0  FREADBLOCK          [
F4CG    NOSETRP 
F4X6          NGN   7  A1-1 
F5BQ          BRN      UPDATCMOD
F5WB    #   
F6B2    #     EXIT  IF OVERFLOW > GSBS !
F6TL    #   
F7*=    TWONEWBLOX5 
F7SW          LDEX  5  AWORK1(1)
F8#G          ADX   5  0
F8S6          BXL   5  BSBS,NSHAR   
F9?Q    TWONEWBLOX4 
F9RB          LDCT  0  #14                 [IF ISERT3 BLOCK NOT A FUWB,FREE IT  
F=?2          ANDX  0  AWORK1(1)           [UNLESS OW BLOCK BIT(2) SET  
F=QL          BNZ   0  TWONEWBLOX   
F?==    TWONEWBLOX3 
F?PW          LDCT  0  2
F#9G          ANDX  0  AWORK1(1)
F#P6          BNZ   0  SNAME4   
F*8Q          FREECORE 3                   [FREE EX-FURB
F*NB          BRN      TWONEWBLOX   
FB82    SNAME4  
FBML          NAME 3,FILE,FUWB             [RENAME SO IT GETS BACKWRITTEN   
FC7=    TWONEWBLOX  
FCLW          ACROSS   INSERTFR,1   
FD6G    #   
FDL6    #     EXIT  WHEN WE HAVE CURRENT BLOCK + CONTIGUOUS BLOCK,+ OVERFLOW
FF5Q    #     WHICH WON'T FIT. WE HAVE TO SMOOTH THESE THREE.   
FFKB    #   
FG52    WONTFIT 
FGJL    #SKI  K6INSERT>199$199  
FH4=          TRACE    7,WONTFIT
FHHW          BXL   4  BSBS,TLESS   
FJ3G          LDX   1  FX2  
FJH6          BRN      TWONEWBLOX3  
FK2Q    TLESS   
FKGB          SMO      FX1                 [J IF SPARE SPACE IN INSERT3 BLOCK IS
FL22          BXL   7  PERCENT,THREE       [LESS THAN 30%.  
FLFL    #     THERE ISN'T MUCH POINT IN TRYING TO SMOOTH 3 BLOCKS IN THIS CASE, 
FL^=    #     AS THE THIRD IS ALREADY IN A PERFECT STATE.   
FMDW          LDCT  0  #2   
FMYG          SMO      FX2  
FND6          ANDX  0  AWORK1              [IF BLOCK WAS ORIGINALLY A FUWB,DON'T
FNXQ          BNZ   0  SNAME               [FREECORE IT 
FPCB          FREECORE 3                   [RID OF INSERT3 BLOCK
FPX2          BRN      XLESS1   
FQBL    SNAME   
FQW=          NAME  3,FILE,FUWB            [RENAME BLOCK,SO THAT IT EVENTUALLY  
FR*W          BRN      XLESS1              [GETS BACKWRITTEN.   
FRTG    THREE   
FS*6          LDX   2  FX2  
FSSQ          LDX   0  ACOMMUNE4(2)        [STORE AMT.USED IN INSERT3   
FT#B          ADN   0  A1   
FTS2          STO   0  AWORK4(2)           [FOR INSERTHR CH.
FW?L          ACROSS   INSERTHR,1   
FWR=    #   
FX=W    #   
FXQG    #   
FY=6    #     INFORMATION HELD IN REGISTERS 
FYPQ    # ON ENTRY:-
F^9B    #     AWORK3    = AMOUNT OF SPACE USED IN INSERT1 BLOCK +A1 
F^P2    #   
G28L    XLESS   
G2N=    #SKI  K6INSERT>199$199  
G37W          TRACE  4,XLESS
G3MG          SMO      ACOMMUNE5(2) 
G476          SBS   5  FREADBLOCK   
G4LQ          LDCT  0  #14  
G56B          SMO      FX2  
G5L2          ANDX  0  AWORK1   
G65L          BNZ   0  YEMPTYB         [J IF"EMPTY BLOCK" BITS SET  
G6K=    XLESS1  
G74W          SETNCORE GSBS,1,FI,INSERT3   [SETUP FI/INSERT3 BL.FOR"SINSERT" S/R
G7JG          STOZ     A1+FRH(1)           [S/R & ZEROISE 1ST R.H.  
G846          LDCT  0  #30                 [SET"EMPTY BLOCK"BIT 
G8HQ          ORS   0  AWORK1(2)
G93B          LDCT  0  #20                 [& UNSET "R.I.N.B" BIT   
G9H2          ERS   0  AWORK1(2)
G=2L          CALL  6  SFCA2               [X2 -> FCA   
G=G=          LDX   4  FREADBLOCK(2)
G=^W          BNG   5  NOADD1              [J IF 'BACKWARD' 
G?FG          ADN   4  1                   [X4 NOW POINTS TO THE BLOCK NUMBER   
G?^6    NOADD1                             [BEFORE WHICH WE WISH TO INSERT A
G#DQ          PSTAC 2,2 
G#YB          CHAIN 1,2            [CHAIN NEW BLOCK IN  
G*D2          CALL  7  SINSERT1            [NEW BLOCK.  
G*XL          LDX   3  2                   [SERT3 BLOCK)
GBC=          CALL  6  SFCA2               [-> FCA  
GBWW          LDX   6  FREADWORD(2)        [LOAD OEAD WD. PTR   
GCBG          LDX   1  FX2  
GCW6          LDN   7  0
GD*Q          STO   7  ACOMMUNE4(1)        [AMT. "USED" IN INSERT3 BLOCK
GDTB          BRN   SHAR2BLOX   
GF*2    #   
GFSL    SFULL   
GG#=          ACROSS   INSERTFR,2   
GGRW    #   
GH?G    [   
GHR6          MENDAREA K6INSERT/5<100>30,K99INSERTWO
GJ=Q    #END
^^^^ ...77104235000400000000
  • Last modified: 17/01/2024 11:55
  • by 127.0.0.1