COPYFILA867

(George Source)

Macros used: ACROSS, BACKREAD, BACKWAIT, BC, BITDEFS, BLOCK, BS, BXE, BXGE, BXL, BXU, CLOSESET, CLOSETOP, DOWN, FCBNO2, FON, FREEBAX, FREECORE, FULLBPAS, GEOERR, HUNTANY, JBC, JBS, MFREE, MFREEW, MHUNTW, NAME, OPENDIR, READAGAIN, REWRITE, SEG, SEGENTRY, TOPFCB, TRACEIF

COPYFILA867.txt
22FL ...      SEG      COPYFILA,,SECTION FILE,CLOSE 
22R2 ...#   
22XN ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1983
234B ...#   
23*Q ...#     THIS IS THE MAIN PART OF THE COPYFILE PROCESS WHICH COPIES A FILE 
23M6 ...#      FROM ONE RESIDENCE TO ANOTHER.  IT IS ENTERED AT K1 FROM COPYFILE
23YG ...#      SEGMENT IN AN BSA/AUTOCOPY ACTIVITY AFTER THE FILE TO BE COPIED  
249W ...#      HAS BEEN OPENED IN COPY MODE AND BACKING STORE OBTAINED TO COPY  
24H= ...#      THE FILE TO. 
24SL ...#   
2562 ...#   
25CB ...#   
25NQ ...#     USE OF AWORK3 
2626 ...#     --- -- ------ 
26?G ...#   
26JW ...      BITDEFS  AWORK3,0,XBMASTER   [COPYING :MASTER 
27QB ...#   
283Q ...#   
28*6 ...#   
28LG ...#   
28XW ...#     ENTRY POINTS  
299= ...#     ----- ------  
29GL ...#   
29S2 ...      SEGENTRY K1COPYFILA,XENT1    [MAIN ENTRY ACROSS FROM COPYFILE 
2#PQ ...#   
2*36 ...#     CONSTANTS 
2*#G ...#     --------- 
2*KW ...#   
2*X= ...#   
2B8L    TYPE
2BN=    #HAL  FILE+FURB,0   
2C7W    #HAL  FILE+FUWB,0   
2CMG    #HAL  FILE+FURWB,0  
2D76    #HAL  FILE+FURRB,0  
2DLQ    #HAL  FI+INSERT1,0  
2F6B    #HAL  FI+INSERT2,0  
2FL2    #HAL  FI+INSERT3,0  
2G5L    #HAL  FI+INSERT4,0  
2GK=    #HAL  FI+INSERT5,0  
2H4W    X   
2H#N ...#DEF  TYPES=X-TYPE                 [NO. OF BLOCK TYPES IN ABOVE LIST
2HJG    #   
2HP^ ...#   
2HXD ...#     SUBROUTINES   
2J4X ...#     -----------   
2J=B ...#   
2JCT ...#   
2JK# ...#     SWAPS BACK1/2 FOR ANY BUFFER BLOCK ASSOCIATED WITH THE FILE   
2JQR ...#       (BUFFERS OF THE TYPES LOOKED FOR WILL ONLY BE IN THE
2JY= ...#       FILE CHAIN).
2K5P ...#     ON ENTRY, X2-> FCB, X3-> OLD BLOCKS LIST (IN FULLB IN ACT. CHAIN).
2K?8 ...#                        X4 IS S/R LINK.
2KDM ...#     ON EXIT, X1-> NEW BLOCKS LIST (FI/FTABLE),
2KL6 ...#              X3-> OLD BLOCKS LIST (BSTB/FULLB).   OVERWRITES X0,X5,X6.
2KRK ...SWAPBUFF
2K^4 ...      LDX   1  BPTR(3)             [X1-> NEW BLOCKS LIST (FI/FTABLE)
2L6H ...NEXTBLK 
2L#2 ...      LDX   2  FPTR(2)             [X2-> NEXT BLOCK 
2LFF ...      BXE   2  CXFI,(4)            [EXIT IF END OF FILE CHAIN   
2LLY ...      LDX   0  ATYPE(2) 
2LSC ...      BXE   0  FILEPLUSFCB,(4)     [EXIT IF NEXT FCB
2L^W          ANDX  0  HALFTOP  
2MFG ...      LDN   5  TYPES               [PICK UP NUMBER OF TYPES IN TABLE
2M^6    NOTYPE  
2N*L ...      LDX   6  FX1  
2NQ6 ...      ADX   6  5
2P6L ...      SMO      6
2PH6 ...      BXE   0  TYPE-1,TYPEFOUND    [J IF RELEVANT BLOCK FOUND   
2PXL          BCT   5  NOTYPE   
2Q=3 ...      BRN      NEXTBLK  
2QJD ...TYPEFOUND                          [X2-> BLOCK WITH RES. NO./ FILE NO.  
2QWT ...      TRACEIF  K6COPYFILA,199,399,0,CYFBUFTY [TYPE OF BUFFER FOUND  
2R9= ...      TRACEIF  K6COPYFILA,199,399,BACK2(2),CYFBUFBL [BLOCK NO. OF   
2RHM ...                                   [  BUFFER FOUND  
2RM6 ...      LDX   0  BACK1(2)          [IGNORE IF NEWLY CREATED FI/INSERT 
2RQK ...      BZE   0  NEXTBLK             [BLOCK WITH NO B.S. HOME AS YET  
2RW6          LDX   0  A1+1(1)  
2S*Q ...      STO   0  BACK1(2)            [INSERT NEW RES. NO. 
2STB          LDX   6  BACK2(2) 
2T*2          ANDN  6  3
2TSL          ERX   6  BACK2(2) 
2W#= ...      ERS   6  BACK2(2)            [REMOVE ALL BUT BITS 22 & 23 
2WRW ...                                   [X6= OLD BLOCK NO. (B22 & 23 CLEAR)  
2X?G ...      CALL  7  SFINDBL             [FIND CORRESPONDING NEW BLOCK NO.
2XR6 ...      BRN      XNOTINLIST          [GEOERR IF NOT FOUND 
2Y=Q ...      ORS   6  BACK2(2)            [INSERT NEW BLOCK NO.
2YQB ...      BRN      NEXTBLK  
366=    #   
366N ...#   
3676 ...#     SWAPS BACK1/2 OF ANY BSTB/BREAD BLOCK BELONGING TO THIS FILE IN   
367J ...#       THE ACTIVITY CHAIN. 
3682 ...#     ON ENTRY, X1-> NEW BLOCKS LIST (FI/FTABLE),   
368D ...#               X3-> OLD BLOCKS LIST (BSTB/FULLB).     X4 IS S/R LINK.  
368W ...#     ON EXIT,  X1-> NEW BLOCKS LIST, X3-> OLD BLOCKS LIST. 
369# ...#                          OVERWRITES X0,X2,X5,X6,X7.   
369Q ...SWAPBREAD   
36=8 ...      HUNTANY  2,BSTB,BREAD,BACT,(4),REHUNTBREAD  [HUNT IN ACT. CHAIN   
36=L ...                                   [  FOR BSTB/BREAD BLOCK (X2-> IT).   
36?4 ...                                   [  REHUNTBREAD IS RE-ENTRY LABEL TO  
36?G ...                                   [  CONTINUE SEARCHING FOR MORE   
36?Y ...      LDX   0  BACK1(2) 
36#B ...      BXU   0  A1+1(3),REHUNTBREAD [J IF FOR WRONG RESIDENCE
36#S ...      NGN   6  4
36*= ...      ANDX  6  BACK2(2)            [X6= BLOCK NO. IN BSTB/BREAD (WITH   
36*N ...                                   [  BITS 22 & 23 OMITTED) 
36B6 ...      CALL  7  SFINDBL             [FIND CORRESPONDING NEW BLOCK NO.
36BJ ...      BRN      REHUNTBREAD         [EXIT +0 - OLD BLOCK NO. NOT FOUND   
36C2 ...                                   [EXIT +1 - FOUND. X6= NEW BLOCK NO.  
36CD ...      TRACEIF  K6COPYFILA,99,299,BACK2(2),CYFBUFBR [BSTB/BREAD WITH THIS
36CW ...                                   [  BLOCK NO. FOUND FOR THE FILE  
36D# ...      LDX   0  A1+1(1)  
36DQ ...      STO   0  BACK1(2)            [INSERT NEW RESIDENCE NO.
36F8 ...      LDN   0  3
36FL ...      ANDS  0  BACK2(2)            [PRESERVE B22 & B23 ONLY OF BLOCK NO.
36G4 ...      ORS   6  BACK2(2)            [INSERT NEW BLOCK NO. INTO BSTB/BREAD
36GG ...      BRN      REHUNTBREAD  
36GY ...#   
36HB ...#   
36HS ...#     LOCATES FCB OF TOP FILE OPEN. 
36J= ...#     ON ENTRY,                .    X7 IS S/R LINK. 
36JN ...#     ON EXIT, X2-> FCB OF TOP FILE OPEN.   
36KW    TB  
375G          TOPFCB   2                   [X2->FCB 
37K6          EXIT  7  0
3DW2    #   
3F5S ...#   
3F*L    #     LOOK FOR A FULLB IN OUR PART OF THE FILE CHAIN, WHICH HAS THE SAME
3FN3 ...#       RES. NO. AS THE FCB, AND EXIT+1 IF FOUND.  EXIT+0 IF NOT.   
3G2D ...#     ON ENTRY, X2-> FCB.      X6 IS LINK.  
3G7M ...#     ON EXIT, X2-> FCB, X3-> FULLB (IF FOUND).  OVERWRITES X0 .
3G#W    SBFIND  
3GHQ ...      JBC      (6),2,BFCARE        [EXIT IF NOT OPEN CAREFULLY  
3GQL ...      LDX   3  FPTR(2)             [X3-> FSTACK 
3G^G ...SBFIND1 
3H8B ...      LDX   3  FPTR(3)             [X3-> NEXT BLOCK IN FILE CHAIN   
3HC= ...      BXE   3  CXFI,NOFMAPP        [J IF END OF FILE CHAIN  
3HL6 ...      LDX   0  ATYPE(3) 
3HT2 ...      BXE   0  FILEPLUSFCB,NOFMAPP [J IF NEXT FCB   
3J3W ...      BXU   0  FFSFMAPP,SBFIND1    [J IF NOT FMAPP  
3J=Q ...                                   [X3-> FMAPP  
3JFL ...      LDX   0  FFSFULLB 
3KQ=          LDX   3  FPTR(3)  
3L9W ...      BXU   0  ATYPE(3),(6)        [EXIT IF NO FULLB
3M96          LDX   0  A1+1(3)  
3MNQ ...      BXU   0  BSPRE(2),(6)        [EXIT IF FULLB FOR WRONG RESIDENCE   
3N8B ...      EXIT  6  1                   [EXIT+1 WITH POINTER 
3NN2 ...NOFMAPP 
3R66 ...      BRN      XNOFMAPP            [GEOERR OTHERWISE
3RKQ ...#   
3S5B ...#   
3SK2 ...#     CALCULATES THE NO. OF BLOCKS IN THE FCB & THE 1ST FULLB (IF ANY)  
3T4L ...#       FOR THE RESIDENCE THE FILE IS ON - THIS IS THE NO. OF BLOCKS
3TJ= ...#       TO COPY TO THE NEW RESIDENCE.   
3W3W ...#     ON ENTRY, X2->FCB.            X7 IS S/R LINK. 
3WHG ...#     ON EXIT,  X2->FCB, X4= (NO. OF BLOCKS TO COPY)+2. 
3X36 ...#                                     OVERWRITES X0 & X6.   
3XGQ ...SCALSIZE
3Y2B ...      LDX   4  FUSEBL(2)
3YG2 ...      SBN   4  FBLKS-A1-2          [X4= (NO. OF BLOCKS IN FCB) +2   
3Y^L ...      TRACEIF  K6COPYFILA,199,399,4,CYFBLFCB [NO. OF BLOCKS IN FCB +2   
3^F= ...      CALL  6  SBFIND              [LOCATE FILE'S FULLB (IN X3) 
3^YW ...      BRN      NOTAFULLB           [NO FULLB
42DG ...      ADX   4  A1(3)
42Y6 ...      TRACEIF  K6COPYFILA,199,399,A1(3),CYFBLFUL [NO. OF BLOCKS IN  
43CQ ...                                   [  FILE'S FULLB +2   
43XB ...      SBN   4  2                   [ADD NO. OF BLOCKS IN FILE'S FULLB   
44C2 ...NOTAFULLB   
44WL ...      EXIT  7  0
45B= ...#   
45TW ...#   
46*G ...#     SEARCHES THE OLD BLOCKS LIST FOR A GIVEN BLOCK NO. & THEN PICKS UP
46T6 ...#       THE CORRESPONDING NEW BLOCK NO..
47#Q ...#     ON ENTRY, X1-> NEW BLOCKS LIST, X3-> OLD BLOCKS LIST, 
47SB ...#               X6= BLOCK NO..      X7 IS S/R LINK. 
48#2 ...#     ON EXIT, X1-> NEW BLOCKS LIST, X3-> OLD BLOCKS LIST,  
48RL ...#               X6= CORRESPONDING NEW BLOCK NO. (IF ANY).   
49?= ...#               X5= MOD. OF BLOCK DOWN BLOCKS LIST. 
49QW ...#     EXITS +0 IF BLOCK NOT FOUND, +1 IF FOUND (NORMAL CASE).   
4==G ...SFINDBL 
4=Q6 ...      LDX   5  A1(3)
4?9Q ...      SBN   5  2                   [X5= NO. OF BLOCKS IN OLD BLOCKS LIST
4?PB ...      BZE   5  (7)                 [EXIT IF NO BLOCKS IN FILE   
4#92 ...SFINDBL1
4#NL ...      SMO      5
4*8= ...      BXE   6  A1+1(3),SFINDBL2    [J IF FOUND  
4*MW ...      BCT   5  SFINDBL1            [TRY NEXT BLOCK IN LIST  
4B7G ...      EXIT  7  0                   [BLOCK NOT FOUND 
4BM6 ...SFINDBL2
4C6Q ...      SMO      5
4CLB ...      LDX   6  A1+1(1)             [X6= NEW BLOCK NO.   
4D62 ...      EXIT  7  1                   [BLOCK FOUND 
4DKL ...#   
4F5= ...#   
5DSW ...#   
5F#G ...#   
5FS6 ...#   
5G?Q ...#     MAIN CODE 
5GRB ...#     ---- ---- 
5H?2 ...#   
5HQL ...#   
63BL    #   
63W=    #     FINISH SETTING UP THE FTABLES 
64*W    #           PUT THE OLD FRN AND BLOCK NOS IN THE TOP OF THE FTABLE, AND 
64TG    #              THE OLD FROM THE FULLB (IF PRESENT) AT THE BOTTOM
65*6    #     SWAP THE BLOCK NUMBERS IN CORE
65SQ    #           REPLACE THE OLD FRN AND BLOCK NUMBERS IN THE FCB AND FULLB  
66#B    #              BY THE CORRESPONDING NEW ONES
66S2    #           SEARCH THE FILE'S SECTION OF THE FILE CHAIN FOR USAGE BLOCKS
67?L    #              AND RESET BACK1 AND BACK2 IF ANY ARE FOUND   
67R=    #              DO THE SAME IN THE ACTIVITY CHAIN FOR THOSE FILES WHICH  
68=W    #              HAVE THE FILE OPEN   
68?K ...XENT1   
68CX ...      CALL  7  TB                  [X2-> FCB
68DL ...      CALL  7  SCALSIZE            [X4= NEW (NO. OF BLOCKS TO COPY) +2  
68F* ...      MHUNTW   1,BSTB,FULLB 
68G4 ...      LDX   0  ALOGLEN(1)   
68GR ...      BXL   0  4,NENOUGHBS         [J IF NO. OF BLOCKS REQUIRED HAS 
68HG ...                                   [  INCREASED 
68J9 ...      BS       2,BFCOPY            [SET 'BEING COPIED' BIT  
68KM ...STAGE2ONB   
68LB ...      LDX   4  FUSEBL(2)
68M5 ...      SBN   4  FBLKS-A1-2   
68MS ...      STO   4  A1(1)               [INSERT RECORD HEADER INTO FULLB 
68NH ...      ADN   1  A1+1 
68P= ...      LDN   0  BSPRE(2) 
68P^ ...      SMO      4                   [MOVE BLOCK NOS. IN FCB INTO FULLB   
68QN ...      MOVE  0  511                 [  IN ACT. CHAIN 
68RC ...      DOWN     COPYFILE,4          [WAIT FOR EXISTING TRANSFERS TO  
68S6 ...                                   [  FINISH ON FILE
68ST ...      CALL  7  TB                  [X2-> FCB
68TJ ...      TRACEIF  K6COPYFILA,199,399,FLOC1(2),CYFFWAIT [FILEWAIT DONE  
68W? ...                                   [  FOR THIS FILE 
6=W= ...      CALL  7  SCALSIZE            [X4= CURRENT (NO. OF BLOCKS TO   
6=W^ ...                                   [                     COPY) +2   
6=XN ...      MHUNTW   1,BSTB,FULLB 
6=YC ...      LDX   0  ALOGLEN(1)   
6=^6 ...      BXGE  0  4,STAGE2A           [J IF STILL HAVE SUFFICIENT BLOCKS ON
6=^T ...                                   [  NEW RES. TO COPY FILE 
6?42 ...RELCOPY1
6?4P ...      BC       2,BFCOPY            [CLEAR 'BEING COPIED' BIT & RELEASE  
6?5D ...      FON      COPY                [  ANY WAITING ACCESSORS 
6?67 ...NENOUGHBS   
6?6W ...      ACROSS   COPYFILE,3          [GO & GET MORE BS
6*2H ...#   
6*3= ...STAGE2A 
6*3^ ...      STO   4  A1(1)               [SET RECORD HEADER OF BSTB/FULLB IN  
6*4N ...                                   [  ACT. CHAIN
6*76          ADN   1  A1+1 
6B6B          LDX   4  FUSEBL(2)
6BL2 ...      SBN   4  FBLKS-A1-1          [X4=BLOCKS+1  (TO ALLOW FOR BSPRE)   
6D4W          LDN   0  BSPRE(2) 
6DJG          SMO      4
6D^2 ...      MOVE  0  0                   [MOVE BLOCK NOS. FROM FCB TO FULLB   
6F*G ...                                   [  IN ACT. CHAIN 
6FQ2 ...      CALL  6  SBFIND              [LOCATE (IN X3) FILE'S CURRENT FULLB 
6G6G ...      BRN      NOFULLB1            [NO FULLB
6GH2          ADX   1  4
6H2L          LDX   5  A1(3)
6HG=          SBN   5  2                   [IN CASE FULLB JUST BEING SET UP 
6H^W ...      BZE   5  NOFULLB             [J IF FILE'S CURRENT FULLB IS EMPTY  
6JFG          LDN   0  A1+2(3)  
6J^6          SMO      5
6K6^ ...      MOVE  0  0                   [MOVE BLOCK NOS. FROM FILE'S EXISTING
6K#S ...                                   [  FULLB TO FULLB IN ACT. CHAIN  
6KGM ...NOFULLB 
6KNG ...      MHUNTW   1,FI,FTABLE  
6KW* ...      LDX   0  A1+1(1)  
6L48 ...      STO   0  A1+1(3)             [INSERT NEW RES. NO. IN FILE'S FULLB 
6L=3 ...      BZE   5  NOFULLB1            [J IF NO BLOCK NOS. TO MOVE  
6LD2          LDN   0  A1+1(1)  
6LXL          ADX   0  4
6NBG          LDN   1  A1+2(3)  
6NW6          SMO      5
6P8H ...      MOVE  0  0                   [MOVE BLOCK NOS. FROM FI/FTABLE FOR  
6PGY ...                                   [  NEW RESIDENCE TO FILE'S EXISTING  
6PT* ...                                   [  FULLB 
6Q7Q ...NOFULLB1
6QG7 ...      MHUNTW   1,FI,FTABLE  
6QSL          ADN   1  A1+1 
6R#=          ADN   2  BSPRE
6RRW ...      SMO      4                   [MOVE BLOCK NOS. FROM FI/FTABLE (NEW 
6S?G ...      MOVE  1  0                   [  RESIDENCE) TO FCB 
6SR6 ...      MHUNTW   3,BSTB,FULLB        [X3-> OLD BLOCKS LIST
6T=Q ...      CALL  7  TB                  [X2-> FCB (START SEARCHING FOR BUFFER
6TQB ...                                   [  BLOCKS FROM HERE) 
6W=2 ...      CALL  4  SWAPBUFF            [SWAP BACK1/2 IN BUFFERS ASSOCIATED  
6WPL ...                                   [  WITH FILE IN FILE CHAIN   
6X9= ...      CALL  4  SWAPBREAD           [SWAP BACK1/2 IN ANY BSTB/BREAD  
6XNW ...                                   [BLOCKS FOR THE FILE IN THE ACT CHAIN
7JNQ    #   
7K8B    #     NOW COPY FROM THE OLD BS TO THE NEW   
7KN2    #           TAKING THE NEW BLOCKS IN TURN, WE BACKREAD THE CORRESPONDING
7L7L    #              OLD BLOCKS - ALLOWING FOR ANOTHER ACTIVITY HAVING
7LM=    #              BACKREAD THE SAME BLOCK  
7M6W    #           WE RESET BACK1 AND BACK2 OF THE BREAD BLOCK, MARK THE BLOCK 
7MLG    #              AS COPIED AND WRITE IT AWAY  
7N66 ...      LDX   6  A1(3)               [X6= NO. OF BLOCKS TO COPY +2 (MUST  
7NKQ ...                                   [  TAKE VALUE FROM FULLB SINCE MAY BE
7P5B ...                                   [  SPARE BLOCKS IN FTABLE)   
7PK2 ...      TRACEIF  K6COPYFILA,99,299,6,CYFBLCY [NO. OF BLOCKS COPIED +2 
7Q4L          BCT   6  TMORECOPY           [ALWAYS BRANCHES 
7QJ=    MAINCOPY
7R3W ...      LDX   4  A1+1(3)             [X4= OLD RES. NO.
7RHG ...      SMO      6
7S36 ...      LDX   5  A1+1(3)             [X5= NEXT OLD BLOCK NO.  
7SGQ ...      BACKREAD BUSE+FAIL,BSBS,,EX4  
7T2B ...      MHUNTW   3,FI,FTABLE         [X3-> FI/FTABLE (NEW BLOCKS LIST)
7TG2 ...      LDX   4  A1+1(3)  
7T^L ...      SMO      6
7WF= ...      LDX   5  A1+1(3)  
7WYW ...      WRITEAUT FAIL,BSBS,,EX4   
7XDG ...TMORECOPY   
7XY6 ...      SBN   6  1                   [DECREMENT COUNT OF BLOCKS   
7YCQ ...      LDX   0  6
7YXB ...      ANDN  0  3
7^C2 ...      BNZ   0  TMORECOPY1          [WAIT EVERY 4TH BLOCK TO AVOID TOO   
7^WL ...      BACKWAIT                     [  MANY OUTSTANDING WRITES (AFTER
82B= ...                                   [  LAST WRITE WILL ALWAYS GO 
82TW ...                                   [  THROUGH THE BACKWAIT) 
83*G ...TMORECOPY1  
83T6 ...      MHUNTW   3,BSTB,FULLB 
84#Q ...      BNZ   6  MAINCOPY            [J IF MORE BLOCKS TO COPY
85RL ...XCOPYFIN                           [FREE ANY SPARE BSTB/BFREEW BLOCKS   
86?= ...      MHUNTW   1,BSTB,BFREEW
86QW ...      BNG   1  STAGE4   
87=G ...      FREECORE 1
87Q6 ...      BRN      XCOPYFIN 
9H8Q    #   
9HNB    #     THE FILE HAS BEEN COPIED TO THE NEW BS, BUT BEFORE FREEING THE OLD
9J82    #           BS THE DIRECTORY ENTRY MUST BE FIRMLY UPDATED   
9K7=    #     AFTER REPLACING THE OLD BLOCK NUMBERS IN THE BLOCKS RECORD BY THE 
9KLW    #           CORRESPONDING NEW BLOCKS, WE CLOSESET THE DIRECTORY AND 
9L6G    #           FREEBAX THE OLD BS  
9LL6    #     FINALLY WE GO ACROSS TO CLOSEDIR TO CLOSE THE FILE AND SUICIDE
9M5Q    STAGE4  
9M7K ...      MHUNTW   1,BSTB,FULLB        [X1-> OLD BLOCKS LIST
9M9D ...      MHUNTW   2,FI,FTABLE         [X2-> NEW BLOCKS LIST
9M?? ...      LDX   3  A1(2)
9M*6 ...      SBX   3  A1(1)
9MB^ ...      BZE   3  NOSPARE             [J IF NO SPARE BLOCKS IN FI/FTABLE   
9MDS ...      TRACEIF  K6COPYFILA,99,299,3,CYFFRBS [FREE THIS NO. OF SPARE  
9MGM ...                                   [  NEW BLOCKS
9MJG ...      ADN   3  2
9ML* ...      SETUPCOR 3,1,BSTB,FULLB      [GET FULLB TO INSERT SPARE BLOCKS IN 
9MN8 ...      STO   3  A1(1)               [SET RECORD HEADER   
9MQ3 ...      SBN   3  2                   [X3= NO. OF BLOCKS TO FREE   
9MRW ...      MHUNTW   2,FI,FTABLE  
9MTP ...      LDX   0  A1+1(2)  
9MXJ ...      STO   0  A1+1(1)             [SET RESIDENCE NO.   
9M^C ...      ADN   1  A1+2 
9N3= ...      SMO      A1(2)
9N55 ...      LDN   0  A1(2)               [MOVE SPARE BLOCKS FROM END OF   
9N6Y ...      SBX   0  3                   [  FI/FTABLE TO NEWLY CREATED FULLB  
9N8R ...      MOVE  0  0(3) 
9N=L ...      SBS   3  A1(2)               [ADJUST FTABLE'S RECORD HEADER   
9N#F ...      FREEBAX                      [FREE THE SPARE BLOCKS   
9NB# ...      MFREEW   BSTB,EMPTYB  
9ND7 ...NOSPARE 
9Q7F ...                                   [RELEASING WAITERS DONE ON B IN  
9Q9# ...                                   [  'FSHMOVE START,COPY' (Q.V.)   
9Q?7 ...      CALL  7  TB                  [X2->FCB 
9Q*2 ...      BC       2,BFCOPY 
9QBT ...      FON      COPY                [RELEASE ANY WAITING ACCESSORS   
9QDN ...      JBS      MASFIN,2,XBMASTER   [J IF :MASTER
9QH6          OPENDIR  XX,GENERAL,CAREFUL,ERASING   
9RGB          TESTREPN OK,REP              [GEOERR IF CAN'T OPEN FILE   
9S22          MHUNTW   1,FILE,ENT   
9SFL          LDEX  4  ECOPS(1) 
9SPD ...      FREECORE 1                   [FREE FILE/ENT   
9S^=          BZE   4  NOCOPS              [J IF NO COPIES RECORD   
9TDW ...      READAGAIN 
9TYG ...      MHUNTW   3,FILE,FRB          [X3-> BLOCKS RECORD  
9WD6 ...      MHUNTW   2,BSTB,FULLB        [X2-> OLD BLOCKS LIST
9WXQ ...      LDX   0  A1+1(3)  
9XCB ...      BXU   0  A1+1(2),XCOPYERR    [GEOERR IF RES. NO. OF OLD BS DIFFERS
9XM8 ...                                   [  FROM THAT IN BLOCKS REC.  
9XX2 ...      MHUNTW   1,FI,FTABLE         [X1-> FTABLE (NEW BLOCK LIST)
==76          LDX   0  A1+1(1)  
==LQ ...      STO   0  A1+1(3)  
=?6B ...      LDX   4  A1(3)               [X4= NO. OF BLOCKS +2
=?L2 ...      BCT   4  TRANSLATE           [ALWAYS BRANCHES 
=#5L    OUTERTR 
=#K=          SMO      4
=*4W ...      LDX   0  A1+1(3)             [PICK UP NEXT BLK IN BLOCKS RECORD   
=*JG          LDX   5  A1(2)
=B46          SBN   5  2
=BHQ    TRINNER 
=C3B          SMO      5
=CH2 ...      BXE   0  A1+1(2),TRANBLK     [J IF FOUND IN OLD FCB BLOCK LIST
=DG=          BCT   5  TRINNER  
=D^W ...      GEOERR   BRIEFPM,NO BLOCK    [CAN'T FIND BLOCK NO. IN DIR. ENTRY  
=FFG ...                                   [  IN COPIED BLOCK LIST  
=F^6    TRANBLK 
=GDQ          SMO      5
=GYB ...      LDX   0  A1+1(1)             [X0= EQUIVALENT BLOCK NO. IN NEW LIST
=N#=          SMO      4
=NRW ...      STO   0  A1+1(3)             [PUT THE NEW BLOCK IN THE BLOCKS REC 
=P?G    TRANSLATE   
=PR6          BCT   4  OUTERTR  
=Q2Y ...      NAME     3,FILE,FWB   
=Q=Q ...      REWRITE                      [REWRITE BLOCKS RECORD   
=QGJ ...      MFREEW   FILE,FWB 
=QQB    NOCOPS  
=S9= ...      FCBNO2   2,(GEOERR)          [GET POINTER TO FILE'S FCB   
=SNW          JBC      NOTDIRECT,2,BFDIR
=T8G    [     DIRECTORY, MUST NOT FREEBAX OUR OLD BLOCKS YET!   
=TN6          CLOSETOP                     [SINCE WE NOW DO A FULL CLOSE ON 
=W7Q    [                                  COPIED FILE THIS IS SUFFICIENT   
=WCJ ...MASFIN  
=WG7 ...      CALL  7  TB                  [X2-> FCB OF COPIED DIR. 
=WJQ ...      BS       2,BFDIRUPDATE       [ENSURE FULL CLOSE DONE ON COPIED
=WKL ...                                   [  DIRECTORY (SINCE FULLB ATTACHED   
=WLG ...                                   [  TO FCB)   
=WMB          MHUNTW   3,BSTB,FULLB 
=^K6          FULLBPAS 3,2  
?24Q          BRN      XFREEFTABLE  
?2JB    NOTDIRECT   
?342          CLOSESET                     [THE DIRECTORY   
?3HL          FREEBAX   
?43=          MFREEW   BSTB,EMPTYB  
?4GW    XFREEFTABLE 
?52G          MFREEW   FI,FTABLE
?5G6    #   
?5^Q    #     THE AUTOCOPY ACTIVITY MAY BE REGARDED AS A SPECIAL AUTOCLOSE  
?6FB    #     IF THE FILE COPIED IS A DIRECTORY IN THE PATH OF A CAREFUL UPDATE 
?6^2    #           BEING PERFORMED BY ANOTHER AUTOCLOSE, THAT ACTIVITY MAY HAVE
?7DL    #           SUICIDED AFTER HANDING OVER FULLB'S AND AT LEAST ONE FILE   
?7Y=    #           TO THIS AUTOCOPY
?8CW    #     WE GO ACROSS TO CLOSEDIR TO CLOSE THE FILE, LEADING EVENTUALLY TO 
?8XG    #           THE AUTOCOPY'S SUICIDE  
?9WQ          MFREE    FILE,FABSNB  
?=BB          ACROSS   CLOSEDIR,9   
?C9? ...#   
?C9L ...XX  
?C=L          GEOERR   BRIEFPM,BREAK IN    [NO BREAK-IN SINCE AUTONOMOUS ACT.   
?CK3 ...REP 
?CNG ...      GEOERR   BRIEFPM,COPY REP    [STRANGE REPLY FROM OPEN 
?CR^ ...XCOPYERR
?CXD ...      GEOERR   BRIEFPM,COPY ERR    [RESIDENCE NO. IN FCB BEFORE COPY
?CYP ...                                   [  DIFFERS FROM THAT IN DIR. ENTRY   
?D22 ...XNOFMAPP
?D3? ...      GEOERR   BRIEFPM,NO FMAPP    [BIT BFCARE SET BUT NO FMAPP BLOCK   
?D4J ...                                   [  FOR THIS FILE 
?D5T ...XNOTINLIST  
?D76 ...      GEOERR   BRIEFPM,COPYNOBL    [BLOCK NO. NOT FOUND IN OLD BLOCKS   
?D8C ...                                   [  LIST (BSTB/FULLB) 
?D9W    #END
^^^^ ...11462006000100000000