{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: COPYFILE867)}}
====== COPYFILE867 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BITDEFS|BITDEFS]], [[george:macro:BS|BS]], [[george:macro:BXE|BXE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:FILEWAIT|FILEWAIT]], [[george:macro:FPUT|FPUT]], [[george:macro:FREEBAX|FREEBAX]], [[george:macro:GEOERR|GEOERR]], [[george:macro:GETACT|GETACT]], [[george:macro:GETBAX|GETBAX]], [[george:macro:JBC|JBC]], [[george:macro:JMBS|JMBS]], [[george:macro:LINK|LINK]], [[george:macro:LINKSET|LINKSET]], [[george:macro:MFREE|MFREE]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:OPEND|OPEND]], [[george:macro:RESQUERY|RESQUERY]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETMODE|SETMODE]], [[george:macro:SUICIDE|SUICIDE]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TOPFCB|TOPFCB]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:WHATBACK|WHATBACK]]
22FL ... SEG COPYFILE,,SECTION FILE,CLOSE
22^= #
236D ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1983
23?L ...#
23DW # THIS SEGMENT COPIES A FILE FROM ITS CURRENT FILE STORE RESIDENCE
23YG # TO ANOTHER. THE FILE MAY BE OPEN TO OTHER ACTIIVITIES, BUT
24D6 # NOT ANOTHER AUTOCOPY.
24XQ ...#
27TG #
27WH ...# USE OF AWORK3
27XJ ...# --- -- ------
27YK ...#
27^L ... BITDEFS AWORK3,0,XBMASTER [COPYING :MASTER
285Q ...#
286R ...#
287S ...#
288T ...#
289W ...# ENTRY POINTS
28=X ...# ----- ------
28?Y ...#
28*6 ... SEGENTRY K1COPYFILE,XENT1 [ENTRY FROM COPYFILE MACRO
28SQ SEGENTRY K2COPYFILE,XENT2 [INITIAL ENTRY POINT FOR BSA/AUTOCOPY
295H ... [ ACTIVITY
29B# ... SEGENTRY K3COPYFILE,XENT3 [RETURN FROM COPYFILA SEGMENT WHEN
29M5 ... [ MORE BS REQUIRED TO COPY FILE
29XW ... SEGENTRY K4COPYFILE,XENT4 [SIMPLY DOES A FILEWAIT
2=Q9 ...#
2?32 ...#
2?T* ...#
2#66 ...# CONSTANTS
2#BX ...# ---------
2#MN ...#
2#YF ...#
2*9B ...XLINK
2*P2 ... LINK COPYFILE,2
2HJG #
2J46 ...#
2JHQ ...# SUBROUTINES
2K3B ...# -----------
2KH2 ...#
2L2L ...#
2LG= ...# LOCATES FCB OF TOP FILE OPEN.
2L^W ...# ON ENTRY, . X7 IS S/R LINK.
2MFG ...# 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,XNOFMAPP [GEOERR IF END OF FILE CHAIN
3HL6 ... LDX 0 ATYPE(3)
3HT2 ... BXE 0 FILEPLUSFCB,XNOFMAPP [GEOERR 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)
3M?F ... BXU 0 BSPRE(2),(6) [EXIT IF FULLB FOR WRONG RESIDENCE
3M*S ... EXIT 6 1 [EXIT+1 WITH POINTER
3MD7 ...#
3MGG ...#
3MJT ...# CALCULATES THE NO. OF BLOCKS IN THE FCB & THE 1ST FULLB (IF ANY)
3MM8 ...# FOR THE RESIDENCE THE FILE IS ON - THIS IS THE NO. OF BLOCKS
3MPH ...# TO COPY TO THE NEW RESIDENCE.
3MRW ...# ON ENTRY, X2->FCB. X7 IS S/R LINK.
3MW9 ...# ON EXIT, X2->FCB, X4= (NO. OF BLOCKS TO COPY)+2.
3MYJ ...# OVERWRITES X0 & X6.
3N2X ...SCALSIZE
3N5= ... LDX 4 FUSEBL(2)
3N7K ... SBN 4 FBLKS-A1-2 [X4= (NO. OF BLOCKS IN FCB) +2
3N9Y ... TRACEIF K6COPYFILE,199,399,4,CYFBLFCB [NO. OF BLOCKS IN FCB +2
3N#? ... CALL 6 SBFIND [LOCATE FILE'S FULLB (IN X3)
3NBL ... BRN NOTAFULLB [NO FULLB
3ND^ ... ADX 4 A1(3)
3NH# ... TRACEIF K6COPYFILE,199,399,A1(3),CYFBLFUL [NO. OF BLOCKS IN
3NKM ... [ FILE'S FULLB +2
3NN2 ... SBN 4 2 [ADD NO. OF BLOCKS IN FILE'S FULLB
3NQ* ...NOTAFULLB
3NSN ... EXIT 7 0
3NX3 ...#
3P3P ...#
3P64 ...#
3P8C ...#
3P=Q ...#
3P*5 ...# MAIN CODE
3PCD ...# ---- ----
3PFR ...#
3PJ6 ...#
3PM= # ENTRY FROM THE COPYFILE MACRO
3Q6W # THE CURRENT ACTIVITY SHOULD HAVE A FABSNB FOR THE FILE TO BE
3QLG # COPIED, AND THE NEW FILE REFERENCE NUMBER IN EXEC2
3R66 # IF -164
43XB ADN 5 64
44WL GETACT BSA,AUTOCOPY
45B= LDX 3 BPTR(2)
45TW STO 5 ACC5(3) [NEW RESIDENCE NUMBER
46*G LINKSET 3,XLINK(1)
47#Q MHUNT 2,FILE,FABSNB
47SB CHAIN 2,3 [CHAIN FABSNB TO COPY ACT.
48#2 LDX 2 3 [X2-> AUTONOMOUS ACT.
48RL FPUT
499B ...UP
49?= UP
49QW #
49Y4 ...#
4=5= ...#
4==G # ENTRY FROM THE AUTOCOPY
4=Q6 # THE COPY IS DONE IN 4 STAGES
4?9Q # STAGE1 CHECKS THE FILE RESIDENCE NUMBER AND SETS UP FTABLE
4?PB # BLOCKS FOR THE OLD AND THE NEW BS
4#92 # STAGE2 SETS THE CONTENTS OF THE FTABLES, PUTS THE NEW FRN
4#NL # AND NEW BLOCK NOS IN THE FCB, THE FULLB (IF PRESENT)
4*8= # AND ANY USAGE BLOCKS WHICH MAY BE PRESENT
4*MW # STAGE3 COPIES FROM THE OLD TO THE NEW BS
4B7G # STAGE4 UPDATES THE BLOCKS RECORD OF THE DIRECTORY WITH NEW
4BM6 # BLOCKS CORRESPONDING TO THE OLD AND CLOSESETS THE
4C6Q # DIRECTORY TO FIRMLY UPDATE IT, BEFORE
4CLB # FREEING THE OLD BS
4D62 XENT2
4DKL [
4F5= # OPEN THE FILE TO BE COPIED
4FJW # CALCULATE THE AMOUNT OF NEW BS NEEDED TO COPY THE FILE, FROM THE
4G4G # FCB AND, IF THE FILE HAS BEEN ALTERED, THE FULLB.
4GJ6 # IF THE FILE IS BEING COPIED TO A PUBLIC RESIDENCE (FRN = 0 OR 1),
4H3Q # WE GET THE NEW BS BY A WHATBACK, OTHERWISE WE GETBAX THE
4HHB # NEW BS ON THE SPECIFIED RESIDENCE, LEAVING THE NEW BLOCK
4J32 # NUMBERS IN THE FULLB GIVEN BY THE BS ALLOCATION SYSTEM,
4JGL # LATER TO BE RENAMED A FI/FTABLE BLOCK
4K2= # SET UP A FI/FTABLE TO HOLD THE OLD BS
4K6N ...#
4K^G ... TRACEIF K6COPYFILE,99,299,5,COPYFILE [RES. NO.(ETC.) REQUESTED
4LH8 ... MHUNT 1,FILE,FABSNB
4LK= ... LDX 0 A1(1)
4LM# ... BNZ 0 NOTMAS [J IF NOT MASTER'S SPECIAL FABSNB
4LPB ... LDN 0 4
4LRD ... STO 0 A1(1) [CORRECT VALUE FOR FABSNB
4LTG ... BS 2,XBMASTER [REMEMBER WE ARE COPYING :MASTER
4LXJ ... SETMODE 7,GENERAL
4L^L ...[ MUST OPEN IN GENERAL MODE IF MASTER. ONLY ONE ACCESSOR TO DIR.
4M3N ... BRN NOWOPEN
4M5Q ...NOTMAS
4M7S ...[ NORMAL PATH. OPEN IN COPY MODE
4M9W ... SETMODE 7,COPY,NOWAIT,ERASING,QUERY
4M?Y ...NOWOPEN
4MB2 ... OPEND XX,7
4MTL ... TESTRPN2 OK,NOK [GIVE UP IF CAN'T FIND FILE
4PWG SBN 5 1
4QB6 ... BZE 5 ONE [J IF PARAMETER IS 'PUBLIC' - CHANGE
4QKY ... [ IT TO ZERO
4QTQ ADN 5 1
4R*B ONE
4RT2 CALL 7 TB [X2-> FCB
4S#L LDX 4 BSPRE(2) [X4= RESIDENCE FILE ON
4SS= ... BNZ 5 NZERO [J IF RESIDENCE NO. SPECIFIED
4YP= SRL 4 4
4^8W SBN 4 3
4^NG BNZ 4 RESFIN [J IF NOT ON SPECIAL RESIDENCE
5286 ... CALL 7 SCALSIZE [CALCULATE (NO. OF BLOCKS TO COPY)+2
52MQ ... SBN 4 2
537B ... BXL 4 BSBS,YL512 [J IF <512 BLOCKS REQUIRED
53M2 ... LDN 4 511 [PRETEND ONLY 511 BLOCKS WERE
546L ... [ REQUIRED (WHEN WE HAVE A RESIDENCE
54L= ... [ NO. WE WILL FREE THE BS & DO A
555W ... [GETBAX WHICH DOES ALLOW >511 BLOCKS)
55KG ...YL512
55PC ...#UNS ANOTALLOC
55T# ...(
55^9 ...[ TEST IF A VITAL SYSTEM FILE AND TELL WHATBACK IF IT IS
5656 ... JMBS XVSF,2,BFDIR,BFVSF,BFREV
5693 ... WHATBACK 3,4
56#Y ... BRN XNVSF
56DT ...XVSF WHATBACK 3,4,,,VSF
56JQ ...XNVSF
56NM ...)
56SJ ...#UNS ANOTALLOC
56YF ...#SKI
574B WHATBACK 3,4 [GET ENOUGH BS TO COPY FILE
57J2 ADN 4 2
592W MHUNT 1,BSTB,FULLB
59GG LDX 5 A1+1(1) [X5= RESIDENCE NO. WE GOT
5=FQ BRN XGOT
5=S7 ...NZERO
5?6J ... RESQUERY 5,RESFIN [J IF RESIDENCE DOES NOT EXIST
5?F2 BXE 4 5,RESFIN [J IF ON RESIDENCE REQUESTED
5?YL MERG
5#D= CALL 7 TB [X2->FCB
5#XW ... CALL 7 SCALSIZE [X4= (NO. OF BLOCKS TO COPY)+2
5*CG ...XGETBS
5FS6 SETUPCOR 4,2,BSTB,EMPTYB
5G?Q STO 4 A1(2)
5GRB STO 5 A1+1(2)
5H?2 GETBAX [GET ENOUGH BS TO COPY THE FILE
5HGS ... MHUNTW 1,BSTB,FULLB
5HQL XGOT
5HXS ... NAME 1,FI,FTABLE [RENAME FULLB FOR NEW RES. AS
5J52 ... [ FI/FTABLE
5J7L ... STO 5 AWORK1(2) [SAVE RES.NO.IN CASE B GOES DOWN
5J== ... TRACEIF K6COPYFILE,99,299,5,COPYTO [RESIDENCE FILE COPIED TO
5JF8 ... SETUPCOR 4,3,BSTB,FULLB [SET UP FULLB TO CONTAIN LIST OF
5JN6 ... [ OLD BLOCK NOS.
5JX4 ... MHUNTW 2,FI,FTABLE
5K62 ... CHAIN 3,2 [CHAIN FULLB IN FRONT OF FI/FTABLE,
5K#Y ... [ I.E. 1ST FI/FTABLE (NEW BLOCKS
5KHW ... [ LIST)
5KQS ... [ 2ND BSTB/FULLB (OLD BLOCKS
5K^Q ... [ LIST)
5L8Q CALL 7 TB
5P6G ... TRACEIF K6COPYFILE,99,299,BSPRE(2),COPYFROM [RESIDENCE FILE
5PB# ... [ COPIED FROM
5PL6 ... TRACEIF K6COPYFILE,99,299,FUSER1(2),COPYUSER [FILE BEING COPIED
5Q5Q ... TRACEIF K6COPYFILE,99,299,FLOC1(2),COPYLOC
5QF= ... ACROSS COPYFILA,1 [CONTINUE PROCESS IN COPYFILA
5QSQ ...#
??*L RESFIN
??D9 ... CALL 7 TB
??GS ... JBC NOTDIRECT,2,BFDIR
??KC ... BS 2,BFDIRUPDATE [IN CASE AN AUTOCLOSE HAS HANDED OVER
??N2 ... [UPDATE TO THIS ACTIVITY
??QK ...NOTDIRECT
??T= ... TRACEIF K6COPYFILE,99,299,5,AO?RES
?##W ACROSS CLOSEDIR,9 [WAS CLOSETOP
?#*G ...#
?#*S ...#
?#B6 ...#
?#BD ...#
?#BQ ...#
?#C4 ...XENT3
?#DY ... MFREEW BSTB,FULLB
?#F= ... MHUNTW 1,FI,FTABLE
?#FJ ... NAME 1,BSTB,FULLB
?#FW ... LDX 5 A1+1(1) [X5= RESIDENCE TO GET BS ON
?#G8 ... FREEBAX
?#GG ... MFREEW BSTB,EMPTYB
?#GS ... TRACEIF K6COPYFILE,99,299,4,CHANGED [NEW NO. OF BLOCKS REQUIRED
?#HQ ... [ (& CLEAR MARKER)
?#JB ... BRN MERG [TRY ALL OVER AGAIN
?#JN ...#
?#K# ...#
?#KL ...#
?#KY ...#
?#L= ...# THE K4 ENTRY POINT SIMPLY DOES A FILEWAIT MACRO AND IS HERE SOLELY
?#LJ ...# BECAUSE OF THE LENGTH OF EXPANSION (C65 WORDS).
?#LW ...XENT4
?#M8 ... FILEWAIT [WAIT FOR ALL TRANSFERS ON THE FILE
?#MG ... [ TO FINISH
?#MS ... UP
?#N6 ...#
?#RJ ...#
?#RW ...#
?#SG ...NOK
?*#6 MFREE FILE,FABSNB
?*RQ SUICIDE
?B3J ...#
?B?B #
?BDJ ...#
?BKQ ...#
?BR2 XX
?C=L GEOERR BRIEFPM,BREAK IN [NO BREAK-IN SINCE AUTONOMOUS ACT.
?CB5 ...YERR
?CFJ ... GEOERR BRIEFPM,COPYFILE [RESIDENCE NO. NOT IN RANGE -1