*COPY COMMAND                                           HEADER  FUPCPY  0001.000
         M.PGM     FUPCPY,MPX-32,3.6.1,01                               0002.000
         SPACE                                                          0003.000
*                                                                       0004.000
************************************************************************0005.000
*                                                                      *0006.000
*                    PROPRIETARY INFORMATION                           *0007.000
*                    -----------------------                           *0008.000
*   THE INFORMATION CONTAINED HEREIN IS PROPRIETARY TO ENCORE          *0009.000
*   COMPUTER CORPORATION AND/OR ITS VENDORS, AND ITS USE, DISCLOSURE,  *0010.000
*   OR DUPLICATION IS SUBJECT TO THE RESTRICTIONS STATED IN THE        *0011.000
*   STANDARD ENCORE COMPUTER CORPORATION LICENSE TERMS AND CONDITIONS  *0012.000
*   OR THE APPROPRIATE THIRD-PARTY SUBLICENSE AGREEMENT.               *0013.000
*                                                                      *0014.000
*                       RESTRICTED RIGHTS                              *0015.000
*                       -----------------                              *0016.000
*   USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS SUBJECT       *0017.000
*   TO RESTRICTIONS AS SET FOURTH IN SUBDIVISION (c) (1) (ii) OF       *0018.000
*   THE RIGHTS IN TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT       *0019.000
*   252.227.7013                                                       *0020.000
************************************************************************0021.000
* (C) COPYRIGHT 1989 ENCORE COMPUTER CORPORATION                       *0022.000
*     ALL RIGHTS RESERVED                                              *0023.000
************************************************************************0024.000
************************************************************************0025.000
*                                                                      *0026.000
*        HISTORY OF FUPCPY             MPX 3.6.1                       *0027.000
*                                                                      *0028.000
************************************************************************0029.000
*                                                                       0030.000
*        VOLMGR REV 3.6.1.01 BL 7                               ETRN361 0031.000
*                                                               ETRN361 0032.000
*        MODULES: FUPMAN (REV 3.6.1.01)                         ETRN361 0033.000
*                 FUPSET (REV 3.6.1.01)                         ETRN361 0034.000
*                 FUPCPY (REV 3.6.1.01)                         ETRN361 0035.000
*                 FUPTRN (REV 3.6.1.01)                         ETRN361 0036.000
*                 FUPRSD (REV 3.6.1.01)                         ETRN361 0037.000
*                 SJ.VPRE(REV 3.6.1.01)                         ETRN361 0038.000
*                 SH.VOMM(REV 3.6.1.03)                         ETRN361 0039.000
*                 SM.MPXMC(REV 3.6.1.08)                        ETRN361 0040.000
*                                                               ETRN361 0041.000
*        07/13/94  11464 ADDED SUPPORT FOR ENHANCED TRUNCATE    ETRN361 0042.000
*                  OPTION                                       ETRN361 0043.000
************************************************************************0044.000
*-                                                                      0045.000
*+                                                                      0046.000
*        FUNCTIONAL DESCRIPTION                                         0047.000
*                                                                       0048.000
*    THIS MODULE CONTAINS ONE OF THE COMMAND PROCESSING ROUTINES        0049.000
*    FOR THE FILE UTILITY PROGRAM FOR THE NEW FILE SYSTEM. THIS         0050.000
*    MODULE HANDLES THE "COPY" COMMAND. IT WRITES ALL THE FILES         0051.000
*    SPECIFIED IN THE COMMAND TO THE OUTPUT FILE OR FILES.              0052.000
*-                                                                      0053.000
*+                                                                      0054.000
*        ENVIRONMENT                                                    0055.000
*                                                                       0056.000
*    THE LOGICAL FILE CODE: "INP" IS USED TO READ THE FILES TO COPY.    0057.000
*    THE LOGICAL FILE CODE: "DSC" IS USED TO WRITE OUTPUT FILES.        0058.000
*                                                                       0059.000
*    EXTERNAL REFERENCES:                                               0060.000
*                                                                       0061.000
         SPACE                                                          0062.000
         EXT       IO1BUFF         DATA BUFFER                          0063.000
         EXT       IO1COUNT        # ENTRYS IN "IO1BUFF"                0064.000
         EXT       COPYSTRG        COPY ROUTINE                         0065.000
         EXT       PRONUM          # PROTOTYPES USER INPUT FOR COMMAND  0066.000
         EXT       PROTOTYP        PROTOTYPE TABLE                      0067.000
         EXT       FLAGBITS        PROGRAM GLOBAL BOOLEAN FLAG BITS     0068.000
         EXT       RN.NAME         WILD CARD RENAME ROUTINE             0069.000
         EXT       FLAGS           I/O CONTROL FLAGS                    0070.000
         EXT       RIO1BUFF        READ INTO "IO1BUFF" FROM "IO1" FILE  0071.000
         EXT       ERROR2          ERROR MESSAGE HANDLING ROUTINE       0072.000
         EXT       GEN.M026        ERROR MESSAGE                        0073.000
         EXT       C.DERES2        VOLMGR LOW LEVEL ENTRY POINT FOR     0074.000
*                                  DELETE RESOURCE                      0075.000
         EXT       GETPATH         GET SIGNIFICANT LENGTH OF A NAME     0076.000
         EXT       RRS.OPT1        AUTO OPEN, UNBLOCKED                 0077.000
         EXT       RRS.ACC2        WRITE EXCLUSIVE ACCESS               0078.000
         EXT       RRS.ACC3        READ EXCLUSIVE ACCESS                0079.000
         EXT       RID.FUP         RID OF TEMP FILE                     0080.000
         EXT       RD2.BUF         BUFFER FOR AN RD                     0081.000
         EXT       ADR.MASK        MASK FOR CC'S                        0082.000
         EXT       RSEQ            READ SEQUENTIAL ROUTINE              0083.000
         EXT       WSEQ            WRITE SEQUENTIAL ROUTINE             0084.000
         EXT       INPFCB          'FROM' FILE FCB                      0085.000
         EXT       TAPBUFF         TRANSITORY BUFFER                    0086.000
         EXT       DISCFCB         'TEMP' FILE FCB                      0087.000
         EXT       ERRORIO         FIELD IO ERRORS                      0088.000
         EXT       ABORTCOM        ABORT ROUTINE                        0089.000
         EXT       GETPROTO        GET A PROTOTYPE ENTRY                0090.000
         EXT       X.ALOC6         ASSIGN PERMANENT FILE                0091.000
         EXT       X.DALC          DEASSIGN FILE                        0092.000
         EXT       BCPYRCB         BUILD AN RCB FOR TEMP FILE           0093.000
         EXT       F.COPY          FUNCTION STRING                      0094.000
         EXT       FUN.SAVE        FUNCTION STRING ADDRESS              0095.000
         EXT       RD1.BUF         HOLDS AN RD                          0096.000
         EXT       GETRD1          GETS AN RD BY PNB                    0097.000
         EXT       GETRD0          GET AN RD VIA RID                    0098.000
         EXT       ERROR           LOG AN ERROR                         0099.000
         EXT       ERROR5          LOG AN ERROR, NO ERR STAT   3114.V28 0100.000
         EXT       AUDIT3                                               0101.000
         EXT       MODRD0                                               0102.000
         EXT       MODRD1                                               0103.000
         EXT       MODRD2          MODIFY DESCRIPTOR ROUTINE            0104.000
         EXT       MODRD3          REWRITE DESCRIPTOR ROUTINE           0105.000
         EXT       RDTR.BUF        TO HOLD TEMP. FILE'S RD              0106.000
*                                                                       0107.000
         EXT       BUILDCNP        BUILDS A CNP                         0108.000
         EXT       BUILDPNB        BUILDS A PNB                         0109.000
         EXT       RRS.OPT1        AUTO OPEN,UNBLOCKED         84-0835  0110.000
         EXT       ALCFCB          LFC=ALC                     84-0835  0111.000
         EXT       RRS.ACC2        WRITE ACCESS,EXCLUSIVE USE  84-0835  0112.000
         EXT       BUILDRR6                                             0113.000
         EXT       RCB.BUF         HOLDS RCB                            0114.000
         EXT       CNP.BUF         HOLDS CNP                            0115.000
         EXT       STACKPTR                                             0116.000
         EXT       FORMATOT        FORMAT AND OUTPUT MESSAGE            0117.000
         EXT       COMDADDR        COMMAND DISPATCH ADDRESS             0118.000
         EXT       INVKEY          ERROR - INVALID KEYWORD              0119.000
         EXT       INVTERM         ERROR - INVALID TERINATOR            0120.000
         EXT       INVPARM         ERROR - INVALID PARAMETER            0121.000
         EXT       FROMPATH        ERROR MESSAGE - NO "FROM" PATHNAME   0122.000
         EXT       TOPATH          ERROR MESSAGE - NO "TO" PATHNAME     0123.000
         EXT       FILERTN         FILE EXEC DISPATCHER RETURN ADDRESS  0124.000
         EXT       SS.PATNM        STATE TABLES TO PARSE "FROM=" PATHNAM0125.000
         EXT       SS.KWSYN        STATE EXPRESSION FOR KEYWORD SYNTAX  0126.000
         EXT       SS.FROM         STATE TABLES FOR "FROM=" KEYWORD     0127.000
         EXT       SS.TO           STATE TABLES FOR "TO=" KEYWORD       0128.000
         EXT       SS.PATN2        STATE TABLES TO PARSE "TO=" PATHNAME 0129.000
         EXT       A.GLOBAL        ACTION ROUTINE TO SET UP FOR GLOBAL O0130.000
         EXT       PERR006         ERRVAL TRANSITION FOR NO PATHNAMES   0131.000
         EXT       A.LOCAL         ACTION ROUINE TO SET UP FOR LOCAL OPT0132.000
*                                                                       0133.000
         EXT       SS.BRIE         PARSE TABLE FOR BRIEF=BOOL           0134.000
         EXT       SS.CONT         STATE TABLES FOR CONTIGUOUS=BOOL OPT.0135.000
         EXT       SS.MANE         STATE TABLES FOR MANUAL EXTEND OPTION0136.000
         EXT       SS.AUTO         STATE TABLES FOR AUTOMATIC EXTEND OPT0137.000
         EXT       SS.ACCEF        PARSE TABLE FOR ACCESS ATTRIBUTES    0138.000
         EXT       SS.FAST         PARSE TABLE FOR FAST ID              0139.000
         EXT       SS.RAND         PARSE TABLE FOR EOF MANAGEMENT       0140.000
         EXT       SS.OWNE         PARSE TABLE FOR OWNER NAME           0141.000
         EXT       SS.SHAR         PARSE TABLE FOR SHARED ATTRIBUTE     0142.000
         EXT       SS.STAR         PARSE TABLE FOR "START" BLOCK #      0143.000
         EXT       SS.USER         PARSE TABLE FOR USER NAME            0144.000
         EXT       SS.ALLO         PARSE TABLE FOR # BLOCKS TO ALLOCATE 0145.000
         EXT       SS.INCR         PARSE TABLE FOR FILE EXTENSION SIZE  0146.000
         EXT       SS.MAXS         PARSE TABLE FOR FILE AUTOMATIC       0147.000
*                                  EXTENSION -- MAXIMUM SIZE            0148.000
         EXT       SS.MINI         PARSE TABLE FOR FILE AUTOMATIC       0149.000
*                                  EXTENSION -- MINIMUM EXTENSION SIZE  0150.000
         EXT       SS.NOSA         PARSE TABLE FOR NOSAVE ATTRIBUTE     0151.000
         EXT       SS.REPL         PARSE TABLE FOR "REPLACE" SPECIFIER  0152.000
*                                  IE., DELETE EXISTING FILE W/SAME NAME0153.000
         EXT       SS.ZERO         PARSE TABLE FOR ZERO=BOOL OPTION     0154.000
         EXT       SS.TRUN         PARSE TABLE FOR ENH TRUNC    ETRN361 0155.000
         EXT       DOBLOCK         GLOBAL OPTION BLOCK          ETRN361 0156.000
         EXT       ADDRPTR         OPTION WORD ADDRESS          ETRN361 0157.000
         SPACE                                                          0158.000
*                                                                       0159.000
*    EXTERNAL DEFINITIONS                                               0160.000
*                                                                       0161.000
         SPACE                                                          0162.000
         DEF       S.CPYCMD        STATE TABLE FOR THE COMMAND          0163.000
         DEF       C.COPY          PROCEDURE ENTRY                      0164.000
         SPACE                                                          0165.000
*                                                                       0166.000
*    SYSTEM MACRO CALLS FOR DEFINITIONS AND EQUATES                     0167.000
*                                                                       0168.000
         SPACE                                                          0169.000
         LIST      NOMAC                                                0170.000
         M.REQS                    REGISTER EQUATES                     0171.000
*        M.TBLS                                                         0172.000
         M.CNP                                                          0173.000
         M.RCB                     RESOURCE CREATE BLOCK EQUATES  V.30  0174.000
         M.RDCOM   RD              RES. DESCR. EQUATES                  0175.000
         M.RDSPD   RD              RES. DESCR. EQUATES                  0176.000
         M.ME.DEQ                                                       0177.000
         SPACE                                                          0178.000
*                                                                       0179.000
*    LOCAL DEFINITIONS                                                  0180.000
*                                                                       0181.000
         SPACE                                                          0182.000
         STINIT                    TPARSE DEFINITIONS AND INIT          0183.000
         SPACE                                                          0184.000
*                                                                       0185.000
*    LOCAL STORAGE                                                      0186.000
*                                                                       0187.000
         SPACE                                                          0188.000
IO11ST.F EQU       7               SET IF 1ST I/O HAS ALREADY BEEN DONE 0189.000
*                                  FOR "IO1" TEMPORARY FILE             0190.000
         SPACE                                                          0191.000
         BOUND     1F                                          84-0835  0192.000
SAVREGS  REZ       8W              SAV AREA                    84-0835  0193.000
PROTADDR RES       1W              PROTOTYPE ADDRESS SAVE               0194.000
PRM.ALOC RES       1W              ALLOC INDEX FROM ALOC PERM FILE      0195.000
TMP.ALOC RES       1W              ALLOC INDEX FROM ALOC TEMP FILE      0196.000
CPYFLAGS RES       1W              BOOLEAN FLAG BITS                    0197.000
EIGHT    DATAW     8                                           3216.V29 0198.000
B.FAST   EQU       0               DO REPLACE IF SET; (AS OPPOSED TO    0199.000
*                                  CHANGE TEMPORARY FILE TO PERMANENT)  0200.000
TOEXISTS EQU       1               SET IF "TO" FILE EXISTS              0201.000
B.DISCOP EQU       2               SET IF DISCONT. COPY ATTEMPTED V.30  0202.000
COPYERR1 DATAB     C' I/O ERROR ON COPY',0                              0203.000
         BOUND     1W                                                   0204.000
         SPACE                                                          0205.000
         TITLE     'COPY' FUP COMMAND                                   0206.000
         SPACE                                                          0207.000
         CSECT                                                          0208.000
         SPACE                                                          0209.000
*                                                                       0210.000
* ROUTINE C.COPY - ENTRY POINT FOR THE FUP 'COPY' COMMAND.              0211.000
*                                                                       0212.000
*        THIS ROUTINE IS ENTERED BY THE FILE UTILITY MAIN               0213.000
*        COMMAND DISPATCHER AFTER THE 'COPY' COMMAND                    0214.000
*        HAS BEEN SUCCESSFULLY PARSED.                                  0215.000
*                                                                       0216.000
C.COPY   EQU       $                                                    0217.000
         PUSH                      SAVE REGISTERS                       0218.000
         LA        R7,F.COPY       FUNCTION STRING ADDRESS              0219.000
         STW       R7,FUN.SAVE                                          0220.000
         SPACE                                                          0221.000
*                                                                       0222.000
* SEE IF ANY COMMAND WAS PREMATURLY TERMINATED, IF SO, THEN FORCE A     0223.000
* DEALLOCATION ON LFCS "DSC" & "INP" IN CASE A USER'S PERMANENT FILE ARE0224.000
* STILL ALLOCATED                                                       0225.000
*                                                                       0226.000
         TBM       ABORT.F,FLAGBITS                                     0227.000
         BNS       COPY0.1         GO FOR NO COMMAND TERMINATED         0228.000
         LA        R5,DISCFCB      FCB ADDRESS LFC "DSC"                0229.000
         BL        X.DALC          FORCE A DEALLOCATE                   0230.000
*** IGNORE ANY ERROR STATUS FROM DEALLOCATION                           0231.000
         LA        R5,INPFCB       FCB ADDRESS LFC "INP"                0232.000
         BL        X.DALC          FORCE A DEALLOCATE                   0233.000
*** IGNORE ANY ERROR STATUS FROM DEALLOCATION                           0234.000
COPY0.1  EQU       $                                                    0235.000
         SPACE                                                          0236.000
         TBM       GWILDT.F,FLAGBITS  WILD CARDS USED IN ANY "TO"       0237.000
*                                     (DESTINATION) PATHNAME ???        0238.000
         BNS       COPY1           GO FOR NO WILD CARDS USED            0239.000
         TBM       IO1USE.F,FLAGBITS  "IO1" TEMPORARY FILE USED ???     0240.000
         BNS       COPY0           GO FOR FILE NOT USED                 0241.000
         ZBM       IO11ST.F,FLAGS  EFFECT A (LOGICAL) REWIND            0242.000
         BL        RIO1BUFF        READ FILE                            0243.000
         BU        COPY0.5         JOIN COMMON CODE                     0244.000
         SPACE     2                                                    0245.000
COPY0    EQU       $                                                    0246.000
         TBM       GWILD.F,FLAGBITS  WILD CARDS USED IN ANY FROM        0247.000
*                                    PATHNAME ???                       0248.000
         BS        COPY0.5         GO IF WILD CARDS USED                0249.000
*  COPY "PROTOTYP" BUFFER TO "IO1BUFF" BUFFER                           0250.000
         LW        R0,PRONUM       RETAIN # ENTRY(S) IN BUFFER          0251.000
         STW       R0,IO1COUNT                                          0252.000
         LA        R2,PROTOTYP     SOURCE                               0253.000
         LA        R3,IO1BUFF      DESTINATION                          0254.000
         LI        R4,IO3MXIDX     LENGTH OF BUFFER (IN BYTES)          0255.000
         BL        COPYSTRG        COPY IO3BUFF TO IO1BUFF              0256.000
         SPACE                                                          0257.000
COPY0.5  EQU       $                                                    0258.000
         BL        RN.NAME         PERFORM THE WILD CARD RENAME         0259.000
         SPACE                                                          0260.000
*                                                                       0261.000
* GET THE NEXT PROTOTYPE/OPTION BLOCK PAIR.                             0262.000
* CC1 WILL BE SET IF THERE ARE NO MORE                                  0263.000
*                                                                       0264.000
COPY1    BL        GETPROTO        GET PROTOTYPE BLOCK                  0265.000
         BCT       1,COPY2         BRANCH IF NO MORE TO EXIT            0266.000
         STW       R2,PROTADDR     SAVE PROTOTYPE ADDRESS               0267.000
         ZMW       CPYFLAGS        INITIALIZE FLAG BITS                 0268.000
*                                                                       0269.000
* THERE IS ANOTHER PROTOTYPE BLOCK AND ITS ADDRESS IS IN R2             0270.000
* THE GENERAL FLOW OF THE COPY IS AS FOLLOWS:                           0271.000
*                                                                       0272.000
*        (1) SEE IF TO FILE EXISTS, AND IF IT DOES, CHECK THE           0273.000
*            REPLACE OPTION TO SEE IF 'TO' FILE IS TO BE REPLACED.      0274.000
*            IF IT IS NOT TO BE REPLACED, LOOP FOR NEXT PROTOTYPE.      0275.000
*        (2) ENSURE 'FROM' FILE EXISTS - ERROR IF IT DOES NOT           0276.000
*        (3) CREATE A TEMPORARY FILE (LFC 'DSC') INTO WHICH             0277.000
*            THE 'FROM' FILE IS TO BE READ.                             0278.000
*        (4) COPY THE DATA FROM THE 'FROM' FILE (EXCLUSIVE              0279.000
*            ASSIGNMENT) TO THE TEMPORARY FILE.                         0280.000
*        (5) MAKE THE TEMPORARY FILE PERMANENT OR REPLACE               0281.000
*            THE EXISTING 'TO' FILE (IF IT EXISTS).                     0282.000
*        (6) LOOP FOR NEXT COPY FILE                                    0283.000
*                                                                       0284.000
* CHECK 'TO' FILE AND REPLACE OPTION COMBINATION AS SPECIFIED ABOVE.    0285.000
*                                                                       0286.000
         LA        R2,PROTFN.O,R2  ADDRESS OF 'TO' FILE                 0287.000
         LA        R7,RD2.BUF      TO HOLD 'TO' FILE RD                 0288.000
         BL        GETRD1          LOCATE 'TO' FILE BY PATHNAME BLOCK   0289.000
*        BCT       1,COPY9         BRANCH IF NOT LOCATED        C046-33 0290.000
         BCF       1,COPY1.3       BRANCH IF LOCATED            C046-33 0291.000
         CI        R7,X'416'       RM46 ERROR (DUAL PORT)?      C046-33 0292.000
         BEQ       COPY5.N         IF YES, REPORT ERR AND GO    C046-33 0293.000
         CI        R7,X'2E'        VM46 ERROR (DUAL PORT)?      C046-33 0294.000
         BNE       COPY9           IF NOT, 'TO' DOES NOT EXIST  C046-33 0295.000
         BU        COPY5.N         REPORT ERROR                 C046-33 0296.000
*                                                                       0297.000
* CHECK REPLACE OPTION, AND OPT OUT IF NOT SET                          0298.000
*                                                                       0299.000
COPY1.3  LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS   C046-33 0300.000
         LW        R3,PROFOA.O,R2  OPTION TABLE ADDRESS                 0301.000
         TBM       OPT.B.RE,OPT.FLGS,R3                                 0302.000
         BS        COPY1.5         GO WHEN REPLACE OPTION IS TRUE       0303.000
*                                                                       0304.000
*  DESTINATION FILE (IE., "TO" FILE) ALREADY EXISTS AND "REPLACE" OPTION0305.000
*  IS NOT TURNED ON.  ISSUE ERROR MESSAGE AND GO ON TO GET THE NEXT     0306.000
*  PROTOTYPE.                                                           0307.000
*                                                                       0308.000
         LW        R2,PROTADDR     PROTOTYPE ADDRESS                    0309.000
*  NEED TO SPECIFY MODULE #/ERROR # COMBO IN R7 IN ORDER TO USE THIS    0310.000
*  PARTICULAR ERROR MESSAGE ROUTINE                                     0311.000
         LI        R7,MOD.VOM      MODULE #                    3216.V29 0312.000
         SLL       R7,24           POSITION IT                          0313.000
         ORMW      R7,EIGHT        MIMIC ERR VM08              3216.V29 0314.000
         BL        ERROR           PRINT THE MESSAGE                    0315.000
         LA        R7,GEN.M026     FILE ALREADY EXISTS MESSAGE          0316.000
         BL        ERROR2          PRINT THE MESSAGE                    0317.000
         BU        COPY1           GET THE NEXT PROTOTYPE               0318.000
         SPACE     2                                                    0319.000
COPY1.5  EQU       $                                                    0320.000
         SBM       TOEXISTS,CPYFLAGS    INDICATE "TO" FILE EXISTS       0321.000
         LA        R2,RD2.BUF      RD FOR "TO" FILE                     0322.000
         TBM       RD.FAST,RD.SFLGS,X2  FAST FILE ???                   0323.000
         BNS       COPY9           GO FOR NOT FAST                      0324.000
         SBM       B.FAST,CPYFLAGS      INDICATE FAST FILE              0325.000
*                                                                       0326.000
* ENSURE THAT THE FROM FILE EXISTS.                                     0327.000
* IT MUST EVENTUALLY BE ASSIGNED, SO DO IT NOW AND HOLD                 0328.000
* THE FILE OPEN UNTIL THE COPY IS COMPLETE.                             0329.000
*                                                                       0330.000
* THE ROUTINE X.ALOC6 DOES THE ALLOCATION AND IT EXPECTS                0331.000
* AS INPUT:                                                             0332.000
*                                                                       0333.000
*        R2 = PROTOTYPE ENTRY ADDRESS                                   0334.000
*        R6 = ACCESS REQUIRED (READ EXCLUSIVE)                          0335.000
*        R7 = LFC TO ASSIGN TO                                          0336.000
*                                                                       0337.000
         SPACE                                                          0338.000
COPY9    EQU       $                                                    0339.000
         LA        R7,RD1.BUF      TO HOLD 'FROM' FILE RD               0340.000
         LW        R2,PROTADDR     RETRIEVE PROTOTYPE ENTRY ADDRESS     0341.000
         LW        R0,PROFRT.O,X2  IS RID PRESENT IN PROTOTYPE ENTRY ???0342.000
         BNZ       COPY9.2         GO FOR RID PRESENT                   0343.000
         BL        GETRD1          LOCATE 'FROM' FILE BY PATHNAME BLOCK 0344.000
         BS        COPY5.N           GO FOR NOT FOUND          3114.V28 0345.000
         BU        COPY9.3         JOIN COMMON CODE                     0346.000
         SPACE     2                                                    0347.000
COPY9.2  EQU       $                                                    0348.000
         LA        R2,PROFVN.O,X2  RID ADDRESS WITHIN PROTOTYPE         0349.000
         BL        GETRD0          LOCATE "FROM" FILE BY RID            0350.000
         SUI       R2,PROFVN.O     PROTOTYPE ADDRESS                    0351.000
         TBR       R0,CC1          ERROR(S)                             0352.000
         BS        COPY5.N           GO FOR ERROR(S) (NOT FOUND3114.V28 0353.000
COPY9.3  EQU       $                                                    0354.000
         LA        R2,RD1.BUF      RD FOR "FROM" FILE                   0355.000
         TBM       RD.FAST,RD.SFLGS,X2  FAST FILE ???                   0356.000
         BNS       COPY9.5         GO FOR NOT FAST FILE                 0357.000
         SBM       B.FAST,CPYFLAGS      INDICATE FAST FILE              0358.000
COPY9.5  EQU       $                                                    0359.000
         TRR       R7,R2           RID ADDRESS TO R2                    0360.000
         LA        R7,INPFCB       'FROM' FILES FCB                     0361.000
         LW        R6,RRS.ACC3     READ EXCLUSIVE ACCESS                0362.000
         LW        R4,RRS.OPT1     AUTO OPEN, UNBLOCKED                 0363.000
*                                                                       0364.000
*  INDICATE (EXPLICIT OR IMPLICIT) SHARED ALLOCATION IS ALLOWED IF      0365.000
*  EXCLUSIVE ALLOCATION GETS DENIED                                     0366.000
*                                                                       0367.000
         SBM       NONEXCL,FLAGBITS                                     0368.000
*        SBM       IMPLSHAR,FLAGBITS  Q003-33*** TAKE OUT FIX   Q201-34 0369.000
         SPACE                                                          0370.000
         BL        X.ALOC6         ATTEMPT THE ASSIGN                   0371.000
         BCT       1,COPY5.N         BRANCH IF ERRORS          3114.V28 0372.000
         STW       R5,PRM.ALOC     SAVE ALLOCATION INDEX                0373.000
*                                                                       0374.000
* NOW CREATE A TEMPORARY FILE INTO WHICH THE 'FROM' FILE                0375.000
* IS COPIED.                                                            0376.000
*                                                                       0377.000
* THE ATTRIBUTES OF THE TEMPORARY FILE ARE OBTAINED                     0378.000
* AS FOLLOWS:                                                           0379.000
*                                                                       0380.000
*        (1) USE OPTIONS FROM THE COMMAND LINE                          0381.000
*        (2) OBTAIN REMAINDER NEEDED TO COMPLETE AN RCB                 0382.000
*            FROM THE 'FROM' FILE.                                      0383.000
*                                                                       0384.000
* THE ROUTINE BCPYRCB BUILDS THE RCB ACCORDING TO THESE RULES.          0385.000
* IT EXPECTS AS INPUT:                                                  0386.000
*                                                                       0387.000
*        R2 = PROTOTYPE ENTRY ADDRESS (TO GET THE OPTION BLOCK)         0388.000
*        RD1.BUF = THE RD FOR THE 'FROM' FILE (TO GET DEFAULTS)         0389.000
*                                                                       0390.000
         LW        R2,PROTADDR     RETRIEVE PROTOTYPE ADDRESS           0391.000
         BL        BCPYRCB         BUILD RCB FOR TEMP FILE              0392.000
*                                                                       0393.000
* NOW CREATE THE TEMPORARY FILE                                         0394.000
*                                                                       0395.000
* BUILD A CNP AND THEN CALL THE H.VOMM,2 SERVICE                        0396.000
*                                                                       0397.000
         ZR        R7              NO OPTIONS                           0398.000
         BL        BUILDCNP                                             0399.000
*                                                                       0400.000
COPY9.4  PUSHT                     ALLOCATE A STACK FRAME FOR TEMP STOR.0401.000
         LW        R2,PROTADDR     PROTOTYPE ADDRESS (FOR RETRY)  V.30  0402.000
         LI        R0,G'@'         VOLUME INDICATOR                     0403.000
         STB       R0,3W+3B,X1     PLANT ON STACK                       0404.000
         LD        R6,PROTVN.O,X2  1ST HALF OF VOLUME NAME              0405.000
         STD       R6,4W,X1        PLANT ON STACK                       0406.000
         LD        R6,PROTVN.O+1D,X2    2ND HALF OF VOLUME NAME         0407.000
         STD       R6,6W,X1        PLANT ON STACK                       0408.000
*        LA        R7,3W+3B,X1     ADDRESS OF VOLUME PATHNAME   S861241 0409.000
         LA        R7,4W,X1        ADDRESS OF VOLUME PATHNAME   S861241 0410.000
         BL        GETPATH         MAKE A PATHNAME DESCRIPTOR           0411.000
         SLLD      R6,8            GET THE SIZE IN R6           S861241 0412.000
         ABR       R6,31           ADD 1 MORE CHAR '@' TO SIZE  S861241 0413.000
         LA        R7,3W+3B,X1     GET THE PATHNAME ADDRESS     S861241 0414.000
         SLL       R7,8            SHIFT ADDRESS OVER FOR SIZE  S861241 0415.000
         SRLD      R6,8            SHIFT BACK THE SIZE          S861241 0416.000
*  R7 RETURNED AS STRING DESCRIPTOR                                     0417.000
         PUSHSTP                   SAVE THE STACK POINTER               0418.000
         TRR       R7,R1           PATHNAME STRING DESCRIPTOR FOR       0419.000
*  (DESTINATION) VOLUME NAME  --  GET TEMPORARY FILE ON THIS VOLUME     0420.000
         LA        R2,RCB.BUF      RCB ADDRESS                          0421.000
         LA        R7,CNP.BUF      CNP ADDRESS                          0422.000
         SVC2.21                   H.VOMM,2 (CREATE TEMP FILE)          0423.000
         POPSTP                    RESTORE R1                           0424.000
         POPT                      DEALLOCATE STACK FRAME USED FOR      0425.000
*                                  THIS VOLUME                          0426.000
*                                                                       0427.000
* CHECK FOR ERRORS                                                      0428.000
*                                                                       0429.000
         CHECKERR  MOD.VOM,NORTN                                        0430.000
*        BNZ       COPY4.N          BRANCH IF ERRORS           3114.V28 0431.000
         BZ        COPY9.6         BRANCH IF NO ERRORS         V.30     0432.000
         CI        R7,11           NO DISC SPACE AVAILABLE ??  V.30     0433.000
         BNE       COPY4.N         DIFFERENT ERROR - REPORT IT V.30     0434.000
         LA        R3,RD1.BUF      GET RD OF "FROM" FILE       V.30     0435.000
         TBM       RD.AUTO,RD.SFLGS,X3 AUTO EXTEND SET ??      V.30     0436.000
         BNS       COPY4.N         NO - REPORT ERROR - NO RETRYV.30     0437.000
         SBM       B.DISCOP,CPYFLAGS INDICATE RETRY BEING DONE V.30     0438.000
         BS        COPY4.N         RETRY MUST HAVE ALREADY FAILEDV.30   0439.000
         LW        R4,RD.SEGDF+1W,X3 GET FIRST SEGDF FROM RD V.30       0440.000
         STW       R4,RCB.OSIZ,X2  STORE IN RCB FOR RETRY      V.30     0441.000
         BU        COPY9.4         GO FOR THE RETRY            V.30     0442.000
*                                                                       0443.000
* NOW ASSIGN AND OPEN THE TEMPORARY FILE READY FOR WRITING TO.          0444.000
*                                                                       0445.000
COPY9.6  ZBM       B.DISCOP,CPYFLAGS CLEAR DISCCONT. COPY BIT   V.30    0446.000
         LA        R2,RID.FUP      RID OF TEMP FILE                     0447.000
         LA        R7,DISCFCB      TEMP FILE FCB                        0448.000
         LW        R6,RRS.ACC2     WRITE EXCLUSIVE ACCESS               0449.000
         LW        R4,RRS.OPT1     AUTO OPEN, UNBLOCKED                 0450.000
*                                                                       0451.000
         PUSHSTP                   SAVE REGISTER 1                      0452.000
         LA        R1,RD1.BUF      BUFFER CONTAINING RD OF FROM FILE    0453.000
         TBM       RD.BLOCK,RD.SFLGS,X1  IS FROM FILE BLOCKED?          0454.000
         BNS       NO.BLCK                                              0455.000
         LI        R5,8            SET OPTION FOR CNP IF BLOCKED        0456.000
NO.BLCK  POPSTP                    RESTORE REG. 1                       0457.000
*                                                                       0458.000
         BL        X.ALOC6                                              0459.000
         BCT       1,COPY4.N        BRANCH IF ERRORS           3114.V28 0460.000
         STW       R5,TMP.ALOC     SAVE ALLOCATION INDEX                0461.000
*                                                                       0462.000
* NOW START THE READ PERM FILE, WRITE TEMP FILE SEQUENCE                0463.000
* UNTIL THE EOF IS REACHED ON THE PERM FILE.                            0464.000
*                                                                       0465.000
* THE ROUTINE COPYDATA DOES THIS AND IT RETURNS CC1 SET                 0466.000
* IF THERE WERE ANY ERRORS.                                             0467.000
*                                                                       0468.000
         BL        COPYDATA                                             0469.000
         BCT       1,COPY6.N        BRANCH IF ERRORS           3114.V28 0470.000
         SPACE                                                          0471.000
*                                                                       0472.000
* COPY USER DEFINED DATA OUT OF 'FROM' FILE'S RD & PUT IN THE TEMP.     0473.000
* FILE'S RD, USING THE MODIFY/REWRITE DESCRIPTO ROUTINES                0474.000
*                                                                       0475.000
         BL        MODIFYRD                                             0476.000
         BS        COPY3.N          BRANCH FOR ERROR(S)        3114.V28 0477.000
         SPACE                                                          0478.000
*                                                                       0479.000
* THE TEMPORARY FILE NOW HOLDS THE COPY OF THE DATA.                    0480.000
* IF THE DESTINATION FILE ALREADY EXISTS AND EITHER THE SOURCE OR       0481.000
* DESTINATION FILE IS "FAST", THEN REPLACE IT                           0482.000
* BY USING THE M.REPLAC SERVICE, ELSE USE THE MAKE TEMPORARY            0483.000
* FILE PERMANENT SERVICE.                                               0484.000
*                                                                       0485.000
         TBM       TOEXISTS,CPYFLAGS    DOES "TO" FILE EXISTS           0486.000
         BNS       COPY7           BRANCH IF A NEW FILE                 0487.000
*  "TO" FILE EXISTS, NOW DETERMINE IF GOING TO "REPLACE"                0488.000
         STF       R0,SAVREGS      SAV                         84-0835  0489.000
         LW        R2,PROTADDR     GET PROTOTYPE ENTRY ADDRESS 84-0835  0490.000
         LI        R4,-12          PATHNAME LENGTH AS COUNTER  84-0835  0491.000
COPY5.1  LW        R3,0,X2         LOAD 'FROM' PATHNAME        84-0835  0492.000
         CAMW      R3,PROTFN.O,X2  CAMPARE 'TO' PATHNAME       84-0835  0493.000
         BNE       COPY5.3         NOT SAME, BRANCH            84-0835  0494.000
         ABR       R2,29           MOVE POINTER                84-0835  0495.000
         BIB       R4,COPY5.1                                  84-0835  0496.000
         BU        COPY5.5         'FROM' = 'TO'               84-0835  0497.000
COPY5.3  LA        R2,RD2.BUF      'TO' FILE RID ADDRESS       84-0835  0498.000
         LW        R4,RRS.OPT1     AUO OPEN,UNBLOCKED          84-0835  0499.000
         LW        R6,RRS.ACC2     WRITE ACCESS,EXCLUSIVE USE  84-0835  0500.000
         LA        R7,ALCFCB       LFC FOR ALLOCATION TEST     84-0835  0501.000
         BL        X.ALOC6         ALLOCATION                  84-0835  0502.000
         BCT       1,COPY3.N       BRANCH IF ERROR HAPPENS     84-0835  0503.000
COPY5.5  LF        R0,SAVREGS      RESTORE                     84-0835  0504.000
         TBM       B.FAST,CPYFLAGS      FAST FILE ???                   0505.000
         BNS       COPY8.5         GO FOR NOT FAST                      0506.000
*                                                                       0507.000
* THE 'TO' FILE EXISTS, SO USE THE M.REPLAC SERVICE.                    0508.000
*                                                                       0509.000
* BUILD A NOWAIT CNP                                                    0510.000
*                                                                       0511.000
         ZR        R7                                                   0512.000
         BL        BUILDCNP        BUILD A NOWAIT CNP                   0513.000
*                                                                       0514.000
         PUSHSTP                                                        0515.000
         LI        R0,RID.SIZE     PASS RID TO VOMM23                   0516.000
         LA        R1,RD2.BUF      RID ADDRESS OF 'TO' FILE             0517.000
         SLL       R1,8                                                 0518.000
         SRLD      R0,8            PRODUCE COUNT/ADDRESS IN R1          0519.000
         TRR       R1,R2           COPY TO R2 FOR SERVICE CALL          0520.000
         LA        R1,DISCFCB      TEMP FILE FCB ADDRESS                0521.000
         LA        R7,CNP.BUF      CNP ADDRESS                          0522.000
         SVC2.30                   H.VOMM,23 (M.REPLAC SERVICE)         0523.000
         POPSTP                    RETRIEVE R1                          0524.000
         TRR       R7,R5           SAVE CNP ADDRESS             ETRN361 0525.000
         CHECKERR  MOD.VOM,NORTN   CHECK FOR ERRORS                     0526.000
*        BNZ       COPY3.N          BRANCH IF ERROR   3114.V28  Q004-33 0527.000
         BZ        COPY8           IF NO ERROR, AUDIT           Q004-33 0528.000
         LA        R5,ALCFCB       DEALLOCATE ALC               Q004-33 0529.000
         BL        X.DALC                                       Q004-33 0530.000
         BU        COPY3.N         ERROR OUTPUT                 Q004-33 0531.000
         SPACE     2                                                    0532.000
*                                                                       0533.000
* AUDIT THE COPY JUST COMPLETED                                         0534.000
*                                                                       0535.000
COPY8    CEQU      $                                            ETRN361 0536.000
*OPY8    LW        R2,PROTADDR     FIL/DIR/VOL ADDRESS          ETRN361 0537.000
         BL        D.PERM          DEALLOCATE PERM. FILE        ETRN361 0538.000
         LA        R5,ALCFCB                                    ETRN361 0539.000
         BL        X.DALC          DEALLOCATE ALCFCB            ETRN361 0540.000
*                                                               ETRN361 0541.000
* CHECK GLOBAL AND LOCAL OPTION BLOCKS FOR ENHANCED TRUNCATED   ETRN361 0542.000
* OPTION                                                        ETRN361 0543.000
*                                                               ETRN361 0544.000
         LW        R2,PROTADDR     GET PROTOTYPE ADDRESS        ETRN361 0545.000
         LW        R2,PROFOA.O,X2  GET OPTION TABLE ADDRESS     ETRN361 0546.000
         TBM       OPT.B.TR,OPT.FLGS,X2 ENCHANCED TRUNCATE?     ETRN361 0547.000
         BNS       COPY8.2         NO, SKIP TRUNCATE            ETRN361 0548.000
         LW        R2,PROTADDR     FIL/DIR/VOL .....            ETRN361 0549.000
         ADI       R2,PROTFN.O     ..... OF 'TO' FILE           ETRN361 0550.000
         PUSHSTP                                                ETRN361 0551.000
         BL        BUILDPNB        BUILD PATHNAME BLOCK VECTOR  ETRN361 0552.000
         TRR       R7,R4           SAVE PNB                     ETRN361 0553.000
         ZR        R7                                           ETRN361 0554.000
         BL        BUILDCNP        BUILD CNP                    ETRN361 0555.000
         LA        R7,CNP.BUF      GET CNP ADDRESS              ETRN361 0556.000
         TRR       R7,R2           CNP ADDRESS TO INDEX REG     ETRN361 0557.000
         SBM       TRN.EOM,CP.OPTS,X2 SET ENH. TRUNC BIT        ETRN361 0558.000
         TRR       R4,R1           RESTORE PNB                  ETRN361 0559.000
         SVC2.26                   H.VOMM,7 TRUNCATE 'TO' FILE  ETRN361 0560.000
         POPSTP                    RETRIEVE R1                  ETRN361 0561.000
         CHECKERR  MOD.VOM,NORTN   CHECK FOR ERRORS             ETRN361 0562.000
         BNZ       COPY5.N         ERROR OUTPUT                 ETRN361 0563.000
         SPACE     2                                            ETRN361 0564.000
COPY8.2  CEQU      $                                            ETRN361 0565.000
*                                                               ETRN361 0566.000
         LW        R2,PROTADDR     FIL/DIR/VOL ADDRESS          ETRN361 0567.000
         ADI       R2,PROTFN.O     OF 'TO' FILE                         0568.000
         LA        R7,RD1.BUF      TO HOLD RD OF NEW FILE               0569.000
         BL        GETRD1          LOCATE IT                            0570.000
         BCT       1,COPY4.N        BRANCH IF ERRORS           3114.V28 0571.000
         LW        R2,PROTADDR                                          0572.000
         BL        AUDIT3                                               0573.000
*        BL        D.PERM          DEALLOCATE PERM. F 3114.V28  ETRN361 0574.000
*        LA        R5,ALCFCB                            84-0835 ETRN361 0575.000
*        BL        X.DALC          DEALLOCATE ALCFCB    84-0835 ETRN361 0576.000
         BU        COPY1           LOOP FOR NEXT PROTOTYPE              0577.000
         SPACE     2                                                    0578.000
COPY8.5  EQU       $                                                    0579.000
         SPACE                                                          0580.000
*  "TO" FILE EXISTS SO ATTEMPT TO DELETE IT                             0581.000
         LW        R2,PROTADDR     FIL/DIR/VOL ADDRESS                  0582.000
         ADI       R2,PROTFN.O     OF "TO" FILE                         0583.000
         BL        C.DERES2        DELETE "TO" FILE                     0584.000
*        BS        COPY3.N          GO FOR ERRORS     3114.V28  Q004-33 0585.000
         BNS       COPY7           IF NO ERROR, AUDIT           Q004-33 0586.000
         LA        R5,ALCFCB       DEALLOCATE ALC               Q004-33 0587.000
         BL        X.DALC                                       Q004-33 0588.000
         BU        COPY3.N                                      Q004-33 0589.000
*                                                                       0590.000
* THE 'TO' FILE DOES NOT EXIST, SO MAKE TEMP FILE PERMANENT.            0591.000
*                                                                       0592.000
* BUILD A NOWAIT CNP                                                    0593.000
*                                                                       0594.000
COPY7    ZR        R7                                                   0595.000
         BL        BUILDCNP        BUILD NOWAIT CNP                     0596.000
*                                                                       0597.000
         LW        R2,PROTADDR     FIL/DIR/VOL .....                    0598.000
         ADI       R2,PROTFN.O     ..... OF 'TO' FILE                   0599.000
         BL        BUILDPNB        R2 CONTAINS 'TO' FILE ADDRESS        0600.000
         TRR       R7,R2           COUNT/ADDRESS OF PNB TO R2           0601.000
         PUSHSTP                   SAVE R1                              0602.000
         LA        R1,DISCFCB      FCB FOR TEMP FILE                    0603.000
         LA        R7,CNP.BUF      CNP ADDRESS                          0604.000
         SVC2.28                   H.VOMM,9 (MAKE TEMP PERM)            0605.000
         POPSTP                    RETRIEVE R1                          0606.000
         CHECKERR  MOD.VOM,NORTN                                        0607.000
*        BNZ       COPY3.N          BRANCH IF VOMM ER  3114.V28 Q004-33 0608.000
         BZ        COPY7.5         IF NO ERROR, TRUNCATE?       Q004-33 0609.000
         TRR       R7,R6           SAVE ERR CODE                Q004-33 0610.000
         LA        R5,ALCFCB       DEALLOCATE ALC               Q004-33 0611.000
         BL        X.DALC                                       Q004-33 0612.000
         TRR       R6,R7           RESTORE ERR CODE             Q004-33 0613.000
         BU        COPY3.N         ERROR OUTPUT                 Q004-33 0614.000
*                                                                       0615.000
* DE-ALLOCATE THE TEMP FILE                                             0616.000
*                                                                       0617.000
COPY7.5  EQU       $                                                    0618.000
         LA        R5,ALCFCB                                   84-0835  0619.000
         BL        X.DALC          DEALLOCATE ALCFCB           84-0835  0620.000
         BL        D.TEMP          DEALLOCATE TEMP FILE        3114.V28 0621.000
         BU        COPY8           ELSE COMMON EXIT                     0622.000
*                                                                       0623.000
* THE END OF THE COPY COMMAND HAS BEEN REACHED SO EXIT TO THE           0624.000
* MAIN STREAM FOR THE NEXT FUP COMMAND                                  0625.000
*                                                                       0626.000
COPY2    POP                       RESTORE REGISTERS                    0627.000
         TRSW      R0                                                   0628.000
*                                                              3114.V28 0629.000
* AN ERROR CONDITION HAS BEEN DETECTED.  USE ONE OF THE FOLLOWI3114.V28 0630.000
* POINTS TO FEILD THE ERROR, DEPENDING ON WHETHER THE PERM FILE3114.V28 0631.000
* PERM FILE AND TEMP FILE, OR NO FILES MUST BE DEALLOCATED. AFT3114.V28 0632.000
* DEALLOCATING FILES (IF NECESSARY), PRINT ERROR MESSAGE AND GO3114.V28 0633.000
* NEXT PROTOTYPE                                               3114.V28 0634.000
*                                                              3114.V28 0635.000
COPY3.N  EQU       $               DEALLOC PERM. AND TEMP      3114.V28 0636.000
         BL        D.TEMP                                      3114.V28 0637.000
COPY4.N  ZBM       B.DISCOP,CPYFLAGS NOT MUCH DISC SPACE LEFT   V.30    0638.000
         BL        D.PERM          DEALLOC. PERM FILE          3114.V28 0639.000
COPY5.N  EQU       $               PRINT ERROR MESSAGE         3114.V28 0640.000
         LW        R2,PROTADDR    PROTOTYPE ADDRESS           3114.V28  0641.000
         BL        ERROR            FOR ERROR MESSAGE          3114.V28 0642.000
         SBM       ABORT.F,FLAGBITS    SET ABORT FLAG           S882153 0643.000
         BU        COPY1           LOOP FOR NEXT PROTOTYP      3114.V28 0644.000
*                                                              3114.V28 0645.000
* AN IO ERROR HAS OCCURED.  DEALLOCATE PERM AND TEMP FILES,    3114.V28 0646.000
* THEN PRINT ERROR MESSAGE WITHOUT ERROR STATUS (THERE ISN'T   3114.V28 0647.000
* NONE!)                                                       3114.V28 0648.000
*                                                              3114.V28 0649.000
COPY6.N  EQU       $                                                    0650.000
         BL        D.PERM          DEALLOC. PERM FILE          3114.V28 0651.000
         BL        D.TEMP          DEALLOC. TEMP FILE          3114.V28 0652.000
         LW        R2,PROTADDR    PROTOTYPE ADDRESS           3114.V28  0653.000
         BL        ERROR5          ERROR MESS, NO STAT.        3114.V28 0654.000
         BU        COPY1           GO FOR NEXT PROTOTYPE ADDR. 3114.V28 0655.000
*                                                              3114.V28 0656.000
* ERROR ON DEALOCATION. PRINT MESSAGE AND ABORT                3114.V28 0657.000
*                                                              3114.V28 0658.000
COPY7.N  EQU       $                                           3114.V28 0659.000
         LW        R2,PROTADDR    PROTOTYPE ADDRESS           3114.V28  0660.000
         BL        ERROR           ERROR MESS. WITH STATUS     3114.V28 0661.000
         BU        ABORTCOM        ABORT                       3114.V28 0662.000
*                                                              3114.V28 0663.000
* DEALLOCATE PERMANENT FILE ALLOCATED BY COPY COMMAND          3114.V28 0664.000
*                                                              3114.V28 0665.000
D.PERM   EQU       $                                           3114.V28 0666.000
         PUSH                                                  3114.V28 0667.000
         LW        R5,PRM.ALOC     'FROM' FILE ALLOC. INDEX    3114.V28 0668.000
         BL        X.DALC          DEALLOCATE PER FILE         3114.V28 0669.000
         BCT       1,COPY7.N       BRANCH TO ERROR             3114.V28 0670.000
         POP                                                   3114.V28 0671.000
         TRSW      R0              RETURN                      3114.V28 0672.000
*                                                              3114.V28 0673.000
* DEALLOCATE TEMP FILE CREATED BY COPY COMMAND                 3114.V28 0674.000
*                                                              3114.V28 0675.000
D.TEMP   EQU       $                                           3114.V28 0676.000
         PUSH                                                   3114.V280677.000
         LW        R5,TMP.ALOC     TEMP FILE ALLO. INDEX       3114.V28 0678.000
         BL        X.DALC          DEALLOCATE TEMP FILE        3114.V28 0679.000
         BCT       1,COPY7.N       BRANCH IF DEALLOC. ERROR    3114.V28 0680.000
         POP                                                   3114.V28 0681.000
         TRSW      R0              RETURN                      3114.V28 0682.000
         TITLE     COPY DATA TO TEMP FILE                               0683.000
*                                                                       0684.000
* THIS ROUTINE IS CALLED TO TRANSFER THE DATA FROM THE                  0685.000
* PERMANENT FILE (FCB INPFCB) TO THE TEMPORARY FILE (FCB DSCFCB)        0686.000
*                                                                       0687.000
* INPUTS:                                                               0688.000
*        NONE                                                           0689.000
*                                                                       0690.000
* OUTPUTS:                                                              0691.000
*        CC1 IS SET IF ANY ERRORS OCCUR                                 0692.000
*                                                                       0693.000
COPYDATA EQU       $                                                    0694.000
         ANMW      R0,ADR.MASK     CLEAR CC'S                           0695.000
         PUSH                      SAVE REGISTERS                       0696.000
*                                                                       0697.000
COPYD1   READS     INPFCB,TAPBUFF,IOBUFFSZ                              0698.000
         BCT       1,COPYD2        BRANCH IF EOF/EOM ON 'FROM'          0699.000
         BCT       2,COPYD3        BRANCH IF I/O ERROR ON 'FROM'        0700.000
         WRITES    DISCFCB         WRITE TO TEMP FILE                   0701.000
         BCT       1,COPYD3        BRANCH IF EOF/EOM ON 'TEMP'          0702.000
         BCT       2,COPYD3        BRANCH IF I/O ERROR ON 'TEMP'        0703.000
         BU        COPYD1          LOOP FOR NEXT RECORD                 0704.000
*                                                                       0705.000
* EOF/EOM ON 'FROM' FILE, THE COPY IS COMPLETE                          0706.000
*                                                                       0707.000
COPYD2   POP                                                            0708.000
         TRSW      R0              AND RETURN                           0709.000
*                                                                       0710.000
* I/O ERROR ON 'FROM'/'TEMP' FILE, OR EOF/EOM ON 'TEMP' FILE.           0711.000
* FIELD THE ERROR AND THEN MOVE TO THE NEXT FILE.                       0712.000
*                                                                       0713.000
COPYD3   LA        R6,COPYERR1     'I/O' ERROR ON COPY                  0714.000
         BL        ERRORIO                                              0715.000
         SBM       CC1,0W,R1       SET ERROR EXIT CONDITION             0716.000
         BU        COPYD2          AND EXIT                             0717.000
         TITLE     MODIFY USER AREA OF RD                               0718.000
*                                                                       0719.000
* THIS ROUTINE MODIFYS THE RD OF THE TEMP. FILE TO REFLECT THE SAME USER0720.000
* DEFINED DATA AS THE 'FROM' FILE.  THE PERSON RUNNING VOLMGR IS THE OWN0721.000
* OWNER OF THE TEMP FILE AND THEREFORE CAN MODIFY THE RD.               0722.000
*                                                                       0723.000
* INPUTS:                                                               0724.000
*        RD1.BUF CONTAINS THE 'FROM' FILES RD                           0725.000
*                                                                       0726.000
* OUTPUTS:                                                              0727.000
*        CC1 IS SET IF ERRORS                                           0728.000
*        R7 CONTAINS THE ERROR COUNT IF ERRORS.                         0729.000
*                                                                       0730.000
MODIFYRD EQU       $                                                    0731.000
         ANMW      R0,ADR.MASK     CLEAR CC'S                           0732.000
         PUSH                      SAVE REGISTERS                       0733.000
*                                                                       0734.000
* GO AND READ THE TEMP FILE RD                                          0735.000
* THE RID IS IN RID.FUP WHICH WAS SET UP WHEN THE FILE WAS CREATED      0736.000
*                                                                       0737.000
         LA        R3,RID.FUP      RID ADDRESS                          0738.000
         LA        R7,RDTR.BUF     TO READ RD INTO                      0739.000
*        BL        MODRD2          READ THE RD                  EGCFI34 0740.000
         BL        MODRD0          READ RD                      EGCFI34 0741.000
         BCT       1,MODIFY2       BRANCH IF ERRORS                     0742.000
         SPACE                                                          0743.000
*                                                                       0744.000
* COPY USER DEFINED DATA IN 'FROM' FILE'S RD TO TEMP. FILE RD           0745.000
*                                                                       0746.000
         LI        R0,-31          31 WORDS OF DATA POSSIBLE            0747.000
         LA        R3,RDTR.BUF     TEMP FILES RD                        0748.000
         LA        R2,RD1.BUF      'FROM' FILES RD                      0749.000
*        LA        R2,160W,X2      USER DEFINED DATA STARTS HEREEGCFJ34 0750.000
MOD.010  EQU       $                                                    0751.000
         LW        R7,160W,X2      GET DATA FROM PERM FILE RD   EGCFJ34 0752.000
         STW       R7,160W,X3      SAVE IN TEMP FILE RD         EGCFJ34 0753.000
*        LW        R7,0W,X2        GET DATA FROM SAVE TAPE RD   EGCFJ34 0754.000
*        STW       R7,0W,X3        PLANT DATA IN TEMP FILE RD   EGCFJ34 0755.000
         ABR       R2,29           +1W                                  0756.000
         ABR       R3,29           +1W                                  0757.000
         BIB       R0,MOD.010      LOOP UNTIL DONE                      0758.000
         SPACE                                                          0759.000
*                                                                       0760.000
* NOW WRITE THE TEMP FILE'S RD AWAY                                     0761.000
*                                                                       0762.000
*        LA        R7,RDTR.BUF     ADDRESS OF NEW RD I          EGCFI34 0763.000
*        BL        MODRD3          REWRITE DESCRIPTOR           EGCFI34 0764.000
*        BCT       1,MODIFY2       BRANCH IF ERRORS             EGCFI34 0765.000
*                                                                       0766.000
* NOW TEST FOR SHARED IMAGE - IF IT IS UPDATE SHRED IMAGE FIELDS        0767.000
* JUST UPDATE THE 5 WORDS IN RD FOR GCF                         EGCFI34 0768.000
* IN DESTINATION FILE'S RD                                              0769.000
*                                                                       0770.000
         LA        R2,RD1.BUF      CONTAINS "FROM" FILES RD    V.31     0771.000
*        LB        R4,RD.SFLGS,X2  GET RESOURCE TYPE       V.31 EGCFI34 0772.000
*        CI        R4,X'BA'        IS IT A SHARED IMAGE    V.31 EGCFI34 0773.000
*        BNE       MODIFY1         BRANCH TO EXIT IF NOT   V.31 EGCFI34 0774.000
*        LA        R3,RID.FUP      RID ADDRESS             V.31 EGCFI34 0775.000
*        LA        R7,RDTR.BUF     TEMP FILES RD BUFFER    V.31 EGCFI34 0776.000
*        BL        MODRD0          READ RD                 V.31 EGCFI34 0777.000
*        BCT       1,MODIFY2       BRANCH IF ERRORS        V.31 EGCFI34 0778.000
*        TRR       R7,R3           GET TEMP FILES RD BUFFERV.31 EGCFI34 0779.000
*        LA        R2,ME.PPAGE,X2  ADDRESS OF RD AREA TO D V.31 EGCFI34 0780.000
         LA        R3,RDTR.BUF     GET TEMP FILE RD BUFFER      EGCFI34 0781.000
         LI        R0,-5           GET CTR FOR GCF DATA AREA    EGCFI34 0782.000
*        LI        R0,-10          10W TO MODIFY           V.31 EGCFI34 0783.000
MOD.020  EQU       $               GO TO IT                    V.31     0784.000
         LW        R7,86W,X2       PULL FROM "FROM" RD          EGCFI34 0785.000
*        LW        R7,0W,X2        PULL FROM "FROM" RD     V.31 EGCFI34 0786.000
         STW       R7,86W,X3       STICK IN TEMP FILE RD        EGCFI34 0787.000
*        STW       R7,ME.PPAGE,X3  STICK IN TEMP FILE RD   V.31 EGCFI34 0788.000
         ABR       R2,29           INCREMENT R2                V.31     0789.000
         ABR       R3,29           INCREMENT R3                V.31     0790.000
         BIB       R0,MOD.020      DO THE NEXT ONE             V.31     0791.000
         LA        R7,RDTR.BUF     GET BUFFER ADDRESS BACK     V.31     0792.000
* ADD CODE TO CHECK IF A NEW OWNER WAS SPECIFIED FOR THE FILE   S881865 0793.000
* AND CHANGE THE OWNER NAME IN THE RD OF THE TEMP FILE IF       S881865 0794.000
* NECESSARY.  THIS ASSIGNMENT HAD BEEN DONE IN FUPRCB, AND WAS  S881865 0795.000
* DELETED THERE IN THIS SPR FIX.                                S881865 0796.000
         LA        R3,RDTR.BUF     RESTORE RD ADDRESS           S881865 0797.000
         LW        R2,PROTADDR     ADDRESS OF PROTOTYPE BLOCK   S881865 0798.000
         LW        R2,PROFOA.O,X2  ADDRESS OF OPTION WORD       S881865 0799.000
         LD        R4,OPT.OWNR,X2  NEW OWNER NAME, IF ANY       S881865 0800.000
         BZ        OWNER           NO NEW OWNER SPECIFIED       S881865 0801.000
         STD       R4,RD.OWNR,X3   INSERT NEW OWNER NAME        S881865 0802.000
OWNER    EQU       $               FINISH CHECKING OWNER NAME   S881865 0803.000
         BL        MODRD1          GO AND UPDATE RD            V.31     0804.000
         BCT       1,MODIFY2       BRANCH IF ERRORS            V.31     0805.000
*                                                                       0806.000
MODIFY1  POP                       RESTORE REGISTERS                    0807.000
         TRSW      R0                                                   0808.000
*                                                                       0809.000
* AN ERROR OCCURRED WHEN READING OF REWRITING THE TEMP FILE RD.         0810.000
* SET CC1 AND RETURN THE ERROR CODE TO THE CALLER.                      0811.000
*                                                                       0812.000
MODIFY2  SBM       CC1,0W,R1       SET CC1                              0813.000
         STW       R7,7W,R1        RETURN R7                            0814.000
         BU        MODIFY1         COMMEN EXIT                          0815.000
         TRSW      R0                                                   0816.000
*                                                                       0817.000
         TITLE     COPY COMMAND STATE TABLES & ACTION ROUTINES          0818.000
*                                                                       0819.000
* A.CMD    - ACTION WHEN VALID COPY COMMAND IS PARSED                   0820.000
*                                                                       0821.000
         SPACE                                                          0822.000
A.CMD    LA        R7,C.COPY       GET ADDRESS OF COMMAND PROCESSOR     0823.000
         STW       R7,COMDADDR     SAVE FOR DISPATCHER                  0824.000
         TRSW      R0              RETURN TO PARSER                     0825.000
         SPACE                                                          0826.000
         BOUND     1W              ALIGN                                0827.000
         SPACE                                                          0828.000
*++                                                                     0829.000
* S.CPYCMD - STATE TABLES FOR COPY COMMAND                              0830.000
*                                                                       0831.000
* COMMAND SYNTAX:                                                       0832.000
*                                                                       0833.000
*  COPY  GLOBAL_OPTIONS  [FROM=] PATHNAME [TO=] PATHNAME  LOCAL_OPTIONS,0834.000
*        [FROM=]  PATHNAME  [TO=]  PATHNAME  LOCAL_OPTIONS  [ , . . . ] 0835.000
*                                                                       0836.000
* OPTIONS:                                                              0837.000
*                                                                       0838.000
*        ***  ALL OPTIONS CAN BE SPECIFIED GLOBALLY OR LOCALLY ***      0839.000
*                                                                       0840.000
*        AUTOEXT=BOOL                                                   0841.000
*        MANEXT=BOOL                                                    0842.000
*        SIZE=N                                                         0843.000
*        CONTIGUOUS=BOOL                                                0844.000
*        OWNER=NAME                                                     0845.000
*        ACCESS=CODE                                                    0846.000
*        REPLACE=BOOL                                                   0847.000
*        USERGROUP=NAME                                                 0848.000
*        SHARED=BOOL                                                    0849.000
*        START=N                                                        0850.000
*        INCR=N                                                         0851.000
*        MININC=N                                                       0852.000
*        MAXSIZE=N                                                      0853.000
*        NOSAVE=BOOL                                                    0854.000
*        EOFM=BOOL                                                      0855.000
*        FAST=BOOL                                                      0856.000
*        BIREF=BOOL                                                     0857.000
*                                                                       0858.000
*                                                                       0859.000
*  NOTE(S):                                                             0860.000
*                                                                       0861.000
*                                                                       0862.000
*--                                                                     0863.000
         SPACE                                                          0864.000
S.CPYCMD    STATE                     STATE TABLE FOR COPY COMMAND      0865.000
           TRAN    NOBLNK,A.GLOBAL      POSITION OPTION BLOCK FOR       0866.000
*                                       GLOBAL OPTIONS                  0867.000
S.10     STATE                                                          0868.000
           TRAN    EOS,,PERR006         ERROR -- MUST HAVE AT LEAST ONE 0869.000
*                                       PATHNAME                        0870.000
           TRAN    TSTEXP,,S.20,SS.KWSYN    IS IT A KEYWORD ???         0871.000
           TRAN    NOBLNK,,S.30              NOT A KEYWORD -- MUST BE AN0872.000
*                                            ACTUAL PATHNAME            0873.000
S.20     STATE                                                          0874.000
           TRAN    SUBEXP,,S.30,SS.FROM,NOB.M      IS IT "FROM=" KEYWORD0875.000
           TRAN    SUBEXP,,S.10,SS.OPT,NOB.M      CHECK FOR LEGAL GLOBAL0876.000
*                                                 KEYWORDS              0877.000
           ERRVAL  INVKEY                         INVALID KEYWORD       0878.000
S.30     STATE                                                          0879.000
           TRAN    EOS,,PERR006              ERROR -- MUST HAVE AT LEAST0880.000
*                                            ONE PATHNAME               0881.000
           TRAN    NOBLNK,A.LOCAL            POSITION TO 1ST LOCAL      0882.000
*                                            OPTION BLOCK               0883.000
         STATE                                                          0884.000
           TRAN    SUBEXP,A.LOCAL,S.40,SS.SL00   GET PATHNAME & LOCAL OP0885.000
S.40       TRAN    EOS,A.CMD,EXIT            EXIT PARSE -- SUCCESSFUL   0886.000
*                                            ALSO PLUG ENTRY ADDRESS    0887.000
*                                            SYNTAX VIOLATION           0888.000
         STATE                                                          0889.000
         SPACE     3                                                    0890.000
SS.SL00  STATE                               INPUT FILE LIST            0891.000
*  GET THE "FROM=" PATHNAME (THIS IS REQUIRED FOR THE COPY COMMAND !!!) 0892.000
           TRAN    SUBEXP,,,SS.PATNM,NOB.M                              0893.000
*  ERROR IF DIDN'T FIND THE "FROM=" PATHNAME                            0894.000
           ERRVAL  FROMPATH        TERMINATE PARSE W/ERROR MESSAGE      0895.000
         STATE                                                          0896.000
*  LOOK FOR & REMOVE (IF PRESENT) "TO=" KEYWORD                         0897.000
           TRAN    SUBEXP,,,SS.TO,NOB.M+LMB.M                           0898.000
*  GO TO NEXT STATE EVEN IF OPTIONAL "TO=" KEYWORD NOT PRESENT          0899.000
         STATE                                                          0900.000
*  GET THE "TO=" PATHNAME (REQUIRED FOR COPY COMMAND !!!)               0901.000
           TRAN    SUBEXP,,,SS.PATN2,NOB.M                              0902.000
*  ERROR IF DIDN'T FIND THE "TO=" PATHNAME !!!                          0903.000
           ERRVAL  TOPATH          TERMINATE PARSE W/ERROR MESSAGE      0904.000
SS.SL10  STATE                                                          0905.000
           TRAN    TSTEXP,,,SS.KWSYN         LOOK FOR AN OPTION KEYWORD 0906.000
           TRAN    LAMBDA,,SS.SL20           MUST NOT BE ANY            0907.000
         STATE                                                          0908.000
           TRAN    SUBEXP,,SS.SL10,SS.OPT,NOB.M GET A LOCAL OPTION      0909.000
SS.SL20  STATE                                                          0910.000
           TRAN    COMMA,A.LOCAL,SS.SL30,,NOB.M   GET MORE IF IN LIST   0911.000
           TRAN    NOBLNK,,EXIT              EXIT THIS SUBEXPRESSION    0912.000
SS.SL30  STATE                                                          0913.000
           TRAN    SUBEXP,,SS.SL00,SS.FROM,NOB.M+LMB.M   "FROM=" KEYWORD0914.000
*  GO TO SPECIFIED STATE EVEN IF DON'T FIND OPTIONAL "FROM=" KEYWORD    0915.000
         STATE                                                          0916.000
         SPACE     5                                                    0917.000
SS.OPT   STATE                     OPTIONS APPLICABLE FOR THIS COMMAND  0918.000
           TRAN    KEYWD,,,K.OPTS,NOB.M                                 0919.000
         STATE                                                          0920.000
         SPACE     5                                                    0921.000
K.OPTS   EQU       $                         SAVE OPTIONS               0922.000
*        KEYWRD    CONFIRM,,SS.CONF,4   CONFIRM - BOOLEAN OPT. ! 32B01  0923.000
         KEYWRD    SIZE,,SS.ALLO,3           # BLOCKS TO ALL  ECKW-34   0924.000
         KEYWRD    AUTOEXT,,SS.AUTO,3   AUTOMATIC EXT  ! 32B01 ECKW-34  0925.000
         KEYWRD    BRIEF,,SS.BRIE,3     BRIEF OPTION   ! 32B01 ECKW-34  0926.000
         KEYWRD    ACCESS,,SS.ACCEF,3   ACCESS ATTRIB  ! 32B01 ECKW-34  0927.000
         KEYWRD    CONTIGUOUS,,SS.CONT,3 CONTIG=BOOL   ! 32B01 ECKW-34  0928.000
         KEYWRD    EOFM,,SS.RAND,3      EOF MANAGEMENT         ECKW-34  0929.000
         KEYWRD    FAST,,SS.FAST,3      FAST ID                ECKW-34  0930.000
         KEYWRD    MAXINC,,SS.INCR,4    MAX. INC. EXTEN. SIZE  ! 32B01  0931.000
         KEYWRD    MANEXT,,SS.MANE,3    MANUALLY EXTEND !32B01 ECKW-34  0932.000
         KEYWRD    MAXSIZE,,SS.MAXS,4   MAX. SIZE EXTEND FILE  ! 32B01  0933.000
         KEYWRD    MININC,,SS.MINI,3    MIN-INC EXT SIZ.!32B01 ECKW-34  0934.000
         KEYWRD    OWNER,,SS.OWNE,3     OWNER NAME SPEC !32B01 ECKW-34  0935.000
         KEYWRD    NOSAVE,,SS.NOSA,3    NOSAVE ATTRIBUT !32B01 ECKW-34  0936.000
         KEYWRD    REPLACE,,SS.REPL,3   REPL-DELE.EXIST !32B01 ECKW-34  0937.000
         KEYWRD    SHARED,,SS.SHAR,3    SHARED ATTRIBUT !32B01 ECKW-34  0938.000
         KEYWRD    START,,SS.STAR,3     STARTING BLOCK# !32B01 ECKW-34  0939.000
         KEYWRD    PROJECTGROUP,,SS.USER,3 PRJ.GRP NAME !32B01 ECKW-34  0940.000
         KEYWRD    ZERO,,SS.ZERO,3      ZERO=BOOLOPTI-TO PRE-0  ECKW-34 0941.000
         KEYWRD    TRUNC_AU,,SS.TRUN,3  ENHANCED TRUNCATE       ETRN361 0942.000
*                                       DISC FILE SPACE                 0943.000
         DATAW     0                         END OF LIST                0944.000
         SPACE     2                                                    0945.000
END      END                                                            0946.000
