COPYALL  DSECT    1
PLSECT   CSECT    1
         PAGE
R0       EQU      0
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
SR1      EQU      8
SR2      EQU      9
SR3      EQU      10
SR4      EQU      11
D1       EQU       12
D2       EQU      13
D3       EQU      14
D4       EQU      15
         PAGE
         TITLE    'COPYALL'
         SYSTEM   SIG7
*
* COPYALL         -COPYALL- COMMAND EXECUTIVE
*
* INPUT
*        D1       COMMAND ACTION VERB
*        D2       MAXIMUM ERROR SEVERITY
*        ARGTBL   TABLE OF TRANSLATED ARGUMENTS FOR DEVICE
*        CMBX     COMMAND BUFFER INDEX OF NEXT ARGUMENT
*        TERM     TERMINATOR OF LAST ARGUMENT TRANSLATED
* OUTPUT
*        TOSWT    DEFINE -TO- SWITCH (CLEARED)
*
*
         REF      DEVTRAN,TRANSACT,BLDCB,RDWRT,ERROR
         REF      CLOSEI,CLOSEO,CLRARG,RELPAGES,REVARG
         REF      M:EI
         REF      DEVICE,CMBX,TERM,TOSWT,FPARAM
         REF      M:UC,J:JIT,M:LO
         REF      BREAK
         REF      SYNFLAG,TLABEL
         REF      PRTNOF
         REF      TLBLSIZE
         REF      UNPRINT
         REF      COPYSTDF,STRDFPT,F:STD,COPYSF
         REF      COPYTRAN,PRNTBUF
         REF      SFCNT,SFARG,ARGTBL
         REF      TOARG
         REF      SFDEV,COPYSK,GETARG,ARGBUFF,M:EO
         REF      RWACCT
         REF      NCHAR,COMBINE
         REF      SAVCMBX,REVIEW,TESTFNC
         REF      TOFILE,FROMFILE
         REF      SFTEMP
         REF      FILE
         REF      MODE,GRANCNT
         REF      COPYSF2
         REF      COPYPHY
         REF      HEX2BCD
         REF      DEV%IN,DEV%OUT
         REF      IN%ARG,OUT%ARG
         DEF      ALL8,ALL9
*
         USECT    COPYALL
         LCI      7                 SAVE REGISTERS
         PSM,R5   *R7
*
*
         STW,R0   TOSWT,R7          CLEAR DEFINED -TO- SWITCH
*
         LI,R6    -1                INITIALIZE FOR COMMAND EDIT
         STW,R0   GRANCNT
         LI,R1    X'40'
         STW,R1   COPYSK            INITIALIZE TO COPY ALL FILES
         MTW,0    COPYSTDF,R7       IS THIS COPYSTD COMMAND
         BEZ      EDITDV1           NO
         STW,R0   SFARG
         LW,SR1   CMBX,R7
         LI,R1    1
         BAL,SR4  COPYTRAN          TRANSLATE FID FOR STD FILE
         CI,D2    3
         BNE      EDITDV6
         B        RETURN2           CANT EXECUTE
*
EDITDV1  LW,SR1   CMBX,R7           TRANSLATE DEVICE
         BAL,SR4  CLRARG            ZERO -ARGTBL-
         AI,R6    0
         BEZ      EDITDVB           OUTPUT
         LI,R1    3
         STW,R1   DEVICE,R7         INITIALIZE FOR DC
         LW,R1    TERM,R7
         CI,R1    ','               IS FROM FILE NULL
         BE       EDITDV7           YES
         CI,R1    '('               OPTION PRESENT
         BE       COPYSEL           YES
         STW,SR1  SAVCMBX,R7        INDICATE DC IS OPTIONAL
EDITDVB  EQU      %
         BAL,SR4  DEVTRAN
         AI,R6    0
         BEZ      EDITDV6           OUTPUT
         STW,R0   SAVCMBX,R7
         LW,R2    ARGBUFF,R7
         CW,R2    =X'02D6D540'      TEST FOR 'ON' OR 'TO'
         BE       %+3
         CW,R2    =X'02E3D640'      IS INPUT FIELD NULL
         BNE      EDITDVC           NO
         LW,SR2   SR1               SAVE CMBX VALUE
         MTW,2    CMBX,R7           INCREMENT PAST 'TO'
         AI,R6    1                 INDICATE OUTPUT
         B        EDITDV1           SCAN OUTPUT
EDITDVC  EQU      %
         LW,R2    TERM,R7
         CI,R2    '('
         BE       COPYSEL           OPTION PRESENT
         CI,R2    X'15'
         BE       EDITDV3           COMMAND IS JUST 'COPYALL'
EDITDVA  EQU      %
         CI,R2    '/'               DOES FILE NAME FOLLOW
         BNE      EDITDV6           NO
EDITDV7  BAL,SR4  REVIEW            GET FILE NAME(S)
         LI,R6    -1                RESTORE R6
EDITDV6  EQU      %
         LW,R2    DEVICE,R7
         BNEZ     EDITDVD      PCL DEVICE LABEL.
         AI,R6    0
         BEZ      EDITDVE      SYSTEM OUTPUT LABEL.
         LW,R2    DEV%IN,R7    SYSTEM INPUT LABEL.
         BEZ      EDITDV5      ERROR.
         B        EDITDVD      O. K.
EDITDVE  EQU      %
         LW,R2    DEV%OUT,R7
         BEZ      EDITDV3      SYSTEM DEVICE NOT SET.
EDITDVD  EQU      %
         AI,R2    -3
         BLZ      EDITDV5           ERROR
         BEZ      EDITDV2           DC
         CI,R2    2
         BLE      EDITDV3           LT OR DP
         CI,R2    4
         BE       EDITDV5           INVALID IF ANS TAPE
         AI,R6    0                 OUTPUT DEVICE
         BEZ      EDITDV3           YES - OK
EDITDV5  LI,R1    34                ERROR-NOT A VALID DEVICE
         B        ERR23
*
EDITDV2  LW,R1    DEVICE+1,R7       INSURE ABSENCE OF REELNO'S FOR DC
         BEZ      EDITDV3           NO REELNO'S
         LI,R1    22                ERROR-NOT VALID REEL NO. SPECIFI.
ERR23    BAL,SR4  ERROR
*
EDITDV3  LW,R5    TERM,R7           GET TERM. CHARACTER
         AI,R6    1                 TEST FOR LAST DEVICE
         BNEZ     EDITDV4           LAST DEVICE
         CI,R5    X'40'             TERM. ON BLANK
         BE       TOCMD1            YES
EDITDV9  EQU      %
         CI,R5    X'15'             OUTPUT FIELD NULL
         BNE      %+3               NO
         LW,SR2   SR1               SAVE CMBX OF FROM DEVICE
         B        FROM1
         LI,R1    17                ERROR 17
ERRTN    BAL,SR4  ERROR
         B        RETURN2
*
COPYSEL  BAL,SR4  GETARG            GET OPTION
         MTW,0    NCHAR,R7
         BEZ      COPYS5            NULL FIELD
         LW,R1    ARGBUFF,R7
         LI,R2    5
         CW,R1    OPTTBL,R2         SEARCH OPTION TABLE
         BE       %+3               FOUND
         BDR,R2   %-2
         B        COPYS3            NOT FOUND
         SLS,R2   4                 POSITION ORG CODE
         CI,R2    64                WAS IT AN ORG OPTION
         BL       COPYS2            YES
         LW,R1    DEVICE,R7
         BNEZ     %+2          PCL DEVICE CODE.
         LW,R1    DEV%IN,R7    GET SYSTEM DEVICE TYPE.
         CI,R1    4            IS DEVICE LT.
         BNE      COPYS3            NO - INVALID
         CI,R2    64
         BNE      COPYS4            PHY OPTION
         LI,R2    3                 7T
         STW,R2   GRANCNT           SAVE MODE CODE FOR 7T
         B        COPYS2+1
COPYS3   EQU      %
         LI,R1    39                INVALID OPTION
         B        ERRTN
COPYS2   STW,R2   COPYSK            SET SELECT WORD
         LW,R2    TERM,R7
         CI,R2    ','
         BE       COPYSEL           ANOTHER OPTION
         CI,R2    ')'
         BNE      ERRTN-1
         LW,R5    CMBX,R7           SAVE CURRENT POINTER
         BAL,SR4  GETARG            GET NEXT ARGUMENT
         LW,R2    TERM,R7           GET DELIMITER
         MTW,0    NCHAR,R7          NULL FIELD
         BEZ      EDITDVA           YES
         STW,R5   CMBX,R7           BACK UP TO CURRENT ARGUMENT
         B        EDITDV6
COPYS4   STW,R2   COPYPHY           SET FLAG FOR PHY OPTION
         B        COPYS2+1
COPYS5   LI,R1    29
         BAL,SR4  ERROR
         B        COPYS2+1
*
TOCMD1   BAL,SR4  TRANSACT          TRANSLATE -TO- ACTION VERB
         LW,SR2   SR1               SAVE CMBX OF FROM DEVICE
         CI,D1    1                 ACTION = -TO-
         BE       EDITDV1           YES
         B        ERRTN-1
*
EDITDV4  CI,R5    X'15'             END OF COMMAND
         BE       FROM1             YES
         CI,R5    '('
         BNE      EDITDV8           BAD SYNTAX
         MTW,0    COPYSTDF,R7
         BEZ      FROM1             NOT COPYSTD
         BAL,SR4  GETARG            GET OPTION
         LW,R1    ARGBUFF,R7
         CW,R1    OPT7T             TEST IF '7T'
         BNE      CSERR             NO - ERROR
         LW,R1    TERM,R7
         CI,R1    ')'               TEST FOR CORRECT TERMINATOR
         BE       FROM1
         B        ERRTN-1
EDITDV8  EQU      %
         LI,R1    30                ERROR 30
         BAL,SR4  ERROR
*
FROM1    CI,D2    1                 TEST ERROR SEVERITY
         BG       RETURN2           CANNOT EXECUTE
*
         STW,SR2  CMBX,R7           TRANSLATE INPUT DEVICE
         STW,R0   2,R7              RESET ACCESS HEAD NOT PRINTED
         MTW,0    COPYSTDF,R7
         BNEZ     COPYSTD           COPYSTD COMMAND
         BAL,SR4  CLRARG            ZERO -ARGTBL-
         STW,SR2  SAVCMBX,R7        INDICATE DC IS OPTIONAL
         AI,SR2   -1
         LW,R1    SR2
         LB,R1    *R7,R1            GET TERMINATOR OF CMD VERB
         STW,R1   TERM,R7
         BAL,SR4  DEVTRAN
         STW,R0   SAVCMBX,R7
         LW,R1    GRANCNT
         STW,R1   MODE+1,R7         SET 7T MODE IF PRESENT
         LI,SR2   0                 INITIALIZE FILE COUNT
*
         LI,R1    6                 BUILD INPUT DCB
         BAL,SR4  BLDCB
         STW,R0   SYNFLAG,R7        INITIALIZE NO SYNONYM NAMES
         BAL,SR4  REVARG            SAVE INPUT ARGTBL IN TOARG
*
         STW,SR1  CMBX,R7           TRANSLATE OUTPUT DEVICE
         BAL,SR4  CLRARG            ZERO -ARGTBL-
         LI,R1    3
         STW,R1   DEVICE,R7         INITIALIZE FOR DC
         AI,R6    0                 IS OUTPUT FIELD NULL
         BEZ      FROM2             YES
         BAL,SR4  DEVTRAN
         LW,R1    TERM,R7
         CI,R1    '('
         BNE      FROM2             NO OUTPUT OPTIONS
FROM4    BAL,SR4  GETARG            GET OPTION
         LI,R2    1                 INDICATE RD
         LW,R1    ARGBUFF,R7
         CW,R1    =X'02D9C440'      IS IT RD
         BE       FROM3             YES
         LI,R2    2                 INDICATE WR
         CW,R1    =X'02E6D940'      IS IT WR
         BE       FROM3             YES
         CW,R1    OPT7T             IS IT 7T
          BNE     FROM7             NO
         LI,R1    3
         STW,R1   MODE+1,R7         SET MODE FOR 7T
         B        FROM6
FROM7    LW,R3    =X'000F0000'      VALUE FOR K OPTION
         CW,R1    OPTK
         BE       FROM8             K OPTION
         CW,R1    OPTNC
         BNE      ERROPT            ERROR
         LW,R3    =X'000A0000'      VALUE FOR NC
         STS,R3   MODE+3,R7         SET MODE FOR NC OPTION
         B        FROM6
FROM8    STS,R3   MODE+2,R7         SET MODE FOR K OPTION
         B        FROM6
FROM3    BAL,SR4  RWACCT            GO SCAN ACCOUNTS
         CI,D2    1
         BG       COPYEND           QUIT IF ANY ERRORS
         BAL,SR4  GETARG            GET NULL FIELD
         MTW,0    NCHAR,R7
         BNEZ     ERRTN-1           NOT NULL - ERROR
FROM6    EQU      %
         LW,R1    TERM,R7
         CI,R1    ')'               END OF OPTIONS
         BE       FROM5             YES
         CI,R1    ','               ANOTHER OPTION
         BE       FROM4             YES - GO SCAN OPTION
         B        ERRTN-1           ERROR
FROM5    BAL,SR4  GETARG            GET NULL FIELD
         MTW,0    NCHAR,R7
         BNEZ     ERRTN-1           NOT NULL - ERROR
         LW,R1    TERM,R7
         CI,R1    X'15'             END OF COMMAND
         BE       %+3               YES
         LI,R1    30                REPORT INVALID TERMINATION
         BAL,SR4  ERROR
         LI,D1    1                 INDICATE OUTPUT FIELD
         BAL,SR4  COMBINE           EDIT OPTIONS
FROM2    EQU      %
         LW,R1    =X'00200000'
         CW,R1    M:EI              ABLE TO OPEN USER ACCT.
         BANZ     TO1               YES-COPY IT
         BAL,SR4  REVARG            NO-G4 PUT INPUT-ARGBUT,OUTPUT-TOARG
         LB,R1    SR3
         CI,R1    8                 SYNONYM FILE NAME
         BNE      ALL7              NO-SOME OTHER ABNORMAL OR ERROR
         MTW,1    SYNFLAG,R7        YES-SET SYNONYM FILE NAME PRESENT
         B        ALL4              OPEN NEXT FILE
ERROPT   LI,R1    39                INVALID OPTION
         BAL,SR4  ERROR
         B        COPYEND
*
TO1      MTW,0    FROMFILE          WAS FILE RANGE SPECIFIED
         BEZ      TO14              NO
         BAL,SR4  TESTFNC           TEST IF FILE WANTED
         B        TO12              NO
TO14     LW,R3    COPYSK
         CI,R3    X'40'
         BE       TO10              ALL FILES ARE WANTED
         LI,R3    X'F0'
         LS,R3    M:EI+5            GET ORG
         LW,R1    TLABEL+1
         CW,R1    ='RFIL'           RANDOM FILE ON TAPE
         BNE      %+2               NO
         LI,R3    3                 SET ORG FOR RANDOM
         AI,R3    0
         BNEZ     %+2
         LI,R3    X'10'             IF 0, SET FOR CONSEC
         CW,R3    COPYSK            DO WE WANT THIS FILE
         BE       TO10              YES
TO12     BAL,SR4  CLOSEI            NO - CLOSE M:EI
         BAL,SR4  REVARG
         B        ALL4
TO10     LI,R1    7                 BUILD OUTPUT DCB
         LI,SR3   0
         BAL,SR4  BLDCB
         CI,D2    1                 TEST ERROR SEVERITY
         BG       COPYEND
         AI,SR3   0
         BEZ      %+3               DCB IS OPEN
         BAL,SR4  REVARG            RESTORE INPUT ARGUMENTS
         B        ALLC              GO PRINT MSG-FILE NOT OPEN
*
         BAL,SR4  REVARG            REVERSE ARGTBL AND TOARG
         LW,R5    TOARG,R7
         MTW,0    J:JIT
         BGEZ     TO13              BATCH MODE
         CI,R5    8                 OUTPUT TO TERMINAL
         BE       ALL8              YES - LIST FILE NAME
         AI,SR2   0
         BNEZ     TO13              NOT FIRST FILE
         CAL1,1   WRTCOPY           WRITE 'COPYING' ON UC
TO13     CI,R5    9                 TEST IF LP
         BE       ALL8              YES - LIST FILE NAME
TO11     EQU      %
         BAL,SR4  RDWRT             COPY M:EI TO M:EO
         BAL,SR4  RELPAGES          RELEASE EXCESS BUFFER AREA
COPYEND  BAL,SR4  CLOSEI            CLOSE INPUT DCB
         BAL,SR4  CLOSEO            CLOSE OUTPUT DCB
         LW,SR3   D4
         BNEZ     ALLC              I/O ERROR
         CI,D2    1                 TEST ERROR SEVERITY
         BG       RETURN
         AI,SR2   1                 INCREMENT FILE COUNT
*
ALL4     MTW,0    BREAK             BREAK SET
         BNEZ     RETURN            YES
         MTW,0    TOFILE            ANY MORE FILES WANTED
         BLZ      RETURN1           NO
         STW,R0   TLABEL            SET NO FILE LABEL
         STW,R0   TLABEL+1          RESET RANDOM ID
         LW,R1    DEVICE,R7
         BNEZ     %+2          PCL DEVICE CODE.
         LW,R1    DEV%IN,R7    GET SYSTEM DEVICE TYPE.
         CI,R1    4            COMING FROM LABELED TAPE.
         BNE      ALL1              NO
         LI,R1    TLBLSIZE          BYTE SIZE OF TLABEL
         SLS,R1   24
         STW,R1   TLABEL            SET SIZE IN BYTES OF FILE LABEL BUF
ALL1     EQU      %
         LI,R5    FPARAM            GET FPARAM ADDRESS
         AW,R5    R7
*
         CAL1,1   OPNXT             OPEN NEXT INPUT FILE
*
         BAL,SR4  REVARG            REVERSE TOARG WITH ARGTBL
         B        TO1               GO TO OUTPUT
*
ERRABN   LB,R1    SR3               TEST FOR END OF DIRECTORY
         CI,R1    2
         BE       RETURN1
         CI,R1    8                 SYNONYM FILE NAME
         BNE      ALL7              NO-SOME OTHER ABNORMAL OR ERROR
         MTW,1    SYNFLAG,R7        YES-SET SYNONYM FILE NAME PRESENT
         B        ALL4              OPEN NEXT FILE
ALL7     CI,R1    X'14'             PASSWORD PROBLEM
         BE       ALL2              YES - PRINT CAN NOT ACCESS
         CI,R1    2                 END OF DIRECTORY
         BE       ALL5              NO FILES COPIED
         CI,R1    3                 FILE NON-EXISTENT
         BE       RETURN            YES - ERROR ALREADY REPORTED
         B        ALL2              OTHER ERROR
ALL6     EQU      %
         LI,R1    0                 REPORT I/O ERROR
         BAL,SR4  ERROR
RETURN   LI,R5    COPTEXT           ADDR OF MESSAGE
         BAL,SR4  PRTNOF            PRINT 'NNN FILES COPIED'
         STW,R0   SFTEMP,R7         RESET TEMP FILE INDICATOR
         MTW,1    BREAK
         LCI      7                 RESTORE REGISTERS
         PLM,R5   *R7
         B        *SR4              RETURN
RETURN2  LI,SR2   0                 ZERO FILE COUNT
         B        RETURN
*
ALL5     LB,R2    NOFILES
         LI,R3    M:UC              SELECT ONLINE OR BATCH
         MTW,0    J:JIT
         BLZ      %+3
         LI,R3    M:LO
         AI,R2    -1                REMOVE NL CHAR
         LI,D3    NOFILES
         LI,R4    1                 BTD
         CAL1,1   FPTLFILE          PRINT - NO FILES IN DIRECTORY
         B        RETURN+2          EXIT
*
ALL2     LI,R1    X'100'
         CH,R1    M:EI+23           IS FILE NAME PRESENT
         BE       ALL6              NO
         MTW,0    FROMFILE          WAS FILE RANGE SPECIFIED
         BEZ      ALLC              NO
         BAL,SR4  TESTFNC           TEST IF FILE WANTED
         B        ALL4              NO - DON'T PRINT ANYTHING
ALLC     EQU      %
         LI,R1    TXCNTFIL          BUFFER LOC
         LB,R2    TXCNTFIL          LENGTH
ALL9     MTW,0    2,R7              IS ACCESS HEAD PRINTED
         BNEZ     ALL3              YES
         LW,R4    TOARG,R7
         LI,D3    8
         LI,R3    M:UC              SELECT ONLINE OR BATCH
         MTW,0    J:JIT
         BLZ      ALLB              ONLINE
         LI,D3    9
         LI,R3    M:LO
         AI,R2    -1
ALLB     CW,R4    D3
         BE       %+2               LP IN BATCH OR ME ONLINE
         STW,R2   2,R7              SET HEADER PRINTED FLAG
         CAL1,1   FPTCNTFL          PRINT 'CAN NOT ACCESS FILE'
         USECT    PLSECT
FPTCNTFL GEN,8,7,17      X'91',0,R3
         DATA     X'34000010'
         PZE      *R1
         PZE      *R2
         DATA     1
TXCNTFIL TEXTC    'CAN NOT COPY FILE
'
         USECT    COPYALL
ALL3     LI,D3    FPARAM
         AW,D3    R7
         LI,R1    M:EI+23
         BAL,SR4  UNPRINT           ENTER FILE NAME IN BUFFER
         LW,R6    R2                SAVE NAME LENGTH
         BAL,SR4  CLOSEI            CLOSE M:EI IF OPEN
         AI,R2    1
         MTW,0    COPYSTDF,R7       TEST IF COPYSTD
         BNEZ     ALLD              YES
         LB,R1    SR3
         SLS,R1   8
         SLS,SR3  8
         SLS,SR3  -25               RIGHT JUSTIFY SUB CODE
         OR,R1    SR3
         BAL,SR4  HEX2BCD           CONVERT ERR/ABN TO BCD
         LW,R2    R6
         LI,R4    X'40'             BLANK NEXT 2 CHARACTERS
         AI,R2    1
         STB,R4   *D3,R2
         AI,R2    1
         STB,R4   *D3,R2
         AI,R2    4
         LI,R1    4
         STB,R3   *D3,R2            ENTER IN BUFFER
         AI,R2    -1
         SLS,R3   -8
         BDR,R1   %-3
         AI,R2    5
ALLD     EQU      %
         LI,R3    X'15'
         STB,R3   *D3,R2            INSERT NL CHAR
         LI,R3    M:UC              SELECT BATCH OR ONLINE
         MTW,0    J:JIT
         BLZ      %+3
         LI,R3    M:LO
         AI,R2    -1                REMOVE NL CHAR GOING TO PRINTER
         LI,R4    1                 BTD
         CAL1,1   FPTLFILE          PRINT FILE NAME
         USECT    PLSECT
FPTLFILE GEN,8,7,17      X'91',0,R3
         DATA     X'34000010'
         PZE      *D3
         PZE      *R2
         PZE      *R4
WRTCOPY  GEN,8,24 X'11',M:UC
         DATA     X'34000000'
         DATA     COPYMSG
         DATA     10
         DATA     0
COPYMSG  TEXT     '..COPYING
'
         USECT    COPYALL
         MTW,0    COPYSTDF,R7       IS COMMAND COPYSTD
         BNEZ     CK%STD
         LB,R2    SR3               CHECK FOR 4901 OR 4902 ERROR
         CI,R2    X'49'
         BNE      ALL4              NOT X'49' ERROR.
         B        RETURN
CK%STD   EQU      %
         LB,R2    SR3               CHECK FOR 4901 OR 4902
         CI,R2    X'49'             ERROR ON COPYSTD
         BNE      COPYSF2
         LI,R5    0                 SET R5 TO ZERO IF X'49' ERROR.
         B        COPYSF2
ALL8     LD,R2    NAME
         STW,R2   FPARAM,R7         MOVE 'NAME=' TO PRINT BUFFER
         STW,R3   FPARAM+1,R7
         LI,R3    M:EO
         LI,R4    0                 BTD
         LI,D3    COPTEXT
         LI,R2    1
         CAL1,1   FPTLFILE          WRITE BLANK LINE
         LI,D3    FPARAM+1
         AW,D3    R7
         LI,R1    M:EI+23
         BAL,SR4  UNPRINT           PUT FILE NAME IN PRINT BUFFER
         AI,R2    5                 LENGTH OF LINE
         AI,D3    -1                ADDRESS OF BUFFER
         CAL1,1   FPTLFILE          WRITE LINE
         LI,D3    COPTEXT
         LI,R2    1
         CAL1,1   FPTLFILE          WRITE BLANK LINE
         MTW,0    COPYSTDF,R7       IS COMMAND COPYSTD
         BNEZ     0,R6              YES - EXIT
         B        TO11              GO COPY FILE
COPTEXT  TEXT     ' FILES COPIED  
'
NOFILES  TEXTC    'NO FILES IN DIRECTORY
'
         BOUND    8
NAME     TEXT     'NAME='
OPTTBL   EQU      %-1
         TEXTC    'SEQ'
         TEXTC    'KEY'
         TEXTC    'RAN'
OPT7T    TEXTC    '7T'
         TEXTC    'PHY'
OPTK     TEXTC    'K'
OPTNC    TEXTC    'NC'
         PAGE
RETURN1  EQU      %
         MTW,0    SYNFLAG,R7        SYNONYM FILE NAME(S) PRESENT
         BEZ      RETURN            NO-RETURN
         LW,R1    TOARG,R7
         BNEZ     %+2          PCL DEVICE.
         LW,R1    DEV%OUT,R7   SYSTEM DEVICE.
         CI,R1    5                 IS OUTPUT TO A DEVICE
         BG       RETURN            YES - DONT COPY SYNONYMS
         LW,R1    COPYSK
         CI,R1    X'40'             ARE WE COPYING BY ORG
         BL       RETURN            YES - DONT COPY SYNONYMS
         LI,R2    0
         LW,R3    =X'80000000'      RESET END OF RANGE FLAG
         STS,R2   TOFILE
         LI,R1    6                 OPEN NEXT, FPARAM,INPUT
         BAL,SR4  BLDCB             GO-BUIL INPUT DCB
         CAL1,1   FPTSET
         USECT    PLSECT
FPTSET   GEN,8,7,17      X'06',0,M:EI
         DATA     X'C0000000'
         DATA     SYNERROR          SYNONYM ERROR
         DATA     SYNERROR          SYNONYM ABNORMAL
         USECT    COPYALL
         LI,R5    FPARAM
         AW,R5    R7
         LW,R1    =X'00200000'
         CW,R1    M:EI              ABLE TO OPEN FIRST FILE
         BAZ      SYNERROR          NO-CHECK FOR SYNONYM FILE NAME
SYN4     BAL,SR4  CLOSEI            YES - GO CLOSE IT
         MTW,0    FROMFILE
         BEZ      SYN1              RANGE WAS NOT SPECIFIED
         BAL,SR4  TESTFNC           TEST FOR FILE IN RANGE
         B        SYN3              NO - SKIP
         B        SYN3              IN RANGE - GO TEST FOR END
SYN1     CAL1,1   OPNXT1            OPEN NEXT FILE
         B        SYN4              CLOSE IT
*
SYNERROR LB,R1    SR3
         CI,R1    2                 END OF ACCT.
         BE       RETURN            YES-RETURN
         CI,R1    8                 SYNONYM FILE NAME
         BNE      SYN1              NO-OPEN NEXT FILE
         MTW,0    FROMFILE          WAS RANGE SPECIFIED
         BEZ      SYN2              NO
         BAL,SR4  TESTFNC           TEST FOR FILE IN RANGE
         B        SYN3              NO - SKIP
SYN2     EQU      %
         BAL,SR4  REVARG            BRING UP OUTPUT FILE SPECIFICATIONS
         LI,R1    7                 OPEN NEXT,FPARAM,OUTPUT
         BAL,SR4  BLDCB             PUT SYNONYM FILE ON OUTPUT ACCT.
         BAL,SR4  REVARG            BRING BACK INPUT FILE SPECIFICATIONS
         LB,R1    SR3
         CI,R1    3
         BE       SYN1              PARENT FILE DOES NOT EXIST
         BAL,SR4  CLOSEO            CLOSE NEW SYNONYM FILE
         AI,SR2   1                 INCREMENT FILE COUNT
SYN3     MTW,0    TOFILE            END OF RANGE
         BLZ      RETURN            YES
         B        SYN1              OPEN NEXT FILE
         PAGE
OPNXT1   GEN,8,7,17      X'14',0,M:EI
         DATA     X'00200400'
         PZE      *R5               FPARAM
OPNXT    DATA     X'14000000'+M:EI
         DATA     X'C0200400'
         DATA     ERRABN            ERROR ADDRESS
         DATA     ERRABN            ABNORMAL ADDRESS
         PZE      *R5               FPARAM
         PAGE
COPYSTD  EQU      %
         STW,R0   SFCNT             INITIALIZE FILE COUNT
         LI,R1    X'40'
         STW,R1   TERM,R7
         LI,R1    1
         BAL,SR4  COPYTRAN          TRANSLATE STD FILE FID
         CI,D2    1
         BG       RETURN2
         LI,R1    2
         BAL,SR4  BLDCB
         CI,D2    1
         BG       RETURN2
         LW,R1    DEVICE,R7
         STW,R1   SFDEV             SAVE COPYSTD INPUT DEVICE CODE
         BAL,SR4  REVARG            SAVE INPUT ARG TABLE
         STW,SR1  CMBX,R7           POINTER TO OUTPUT DEVICE
         BAL,SR4  CLRARG            ZERO ARG TABLE
         LI,R1    3
         STW,R1   DEVICE,R7         INITIALIZE FOR DC
         AI,R6    0                 IS OUTPUT FIELD NULL
         BEZ      COPYSTD1          YES
         BAL,SR4  DEVTRAN           TRANSLATE OUTPUT DEVICE
         LW,R1    TERM,R7
         CI,R1    '('               IS OPTION PRESENT
         BNE      COPYSTD1          NO
         LI,R1    3
         STW,R1   MODE+1,R7         SET MODE FOR 7T
COPYSTD1 LI,R1    1
         LW,R2    DEVICE,R7
         STW,R2   SFDEV+1           SAVE OUTPUT DEVICE CODE
         STW,R0   SFTEMP,R7         ZERO TEMP FILE FLAG
         CI,R2    3                 IS DEVICE DC
         BNE      COPYSTD4          NO
         CW,R2    TOARG,R7          WAS INPUT DEVICE DC
         BNE      COPYSTD4          NO - COPY STD FILE
         CW,R1    TOARG+3,R7        WAS ACCT PRESENT ON INPUT
         BGE      COPYSTD5          NO - DON'T COPY STD FILE
COPYSTD4 BAL,SR4  BLDCB             BUILD M:EO
         CI,D2    1
         BLE      %+3
         CAL1,1   CLSE%STD
         B        RETURN2
         BAL,SR4  REVARG            BRING BACK INPUT ARGUMENTS
         LI,R6    COPYSTD7          RETURN LOC FROM ALL8
         LW,R1    TOARG,R7
         CI,R1    8                 IF OUTPUT TO ME
         BE       ALL8
         CI,R1    9                 OR LP
         BE       ALL8              PRINT FILE NAME
COPYSTD7 EQU      %
         BAL,SR4  RDWRT             COPY STD FILE
         BAL,SR4  CLOSEI
         BAL,SR4  CLOSEO
         MTW,0    SFTEMP,R7
         BNEZ     COPYSTD6     TEMP FILE HAS BEEN BUILT
         LI,R1    2
         BAL,SR4  BLDCB             MUST COPY AGAIN TO RAD
         CI,D2    1
         BG       RETURN2
         BAL,SR4  REVARG            BRING UP OUTPUT ARGUMENTS
         LI,R1    3
         STW,R1   DEVICE,R7         OUTPUT TO RAD
         LW,R1    J:JIT
         SLS,R1   16
         SLS,R1   -8
         OR,R1    =X'02000040'      SET UP TEMP FILE NAME
         STW,R1   SFTEMP,R7
         LI,R1    SFTEMP+SFTEMP+SFTEMP+SFTEMP
         STW,R1   FILE+1,R7         SET CMBX TO TEMP FILE NAME
         LI,R1    1
         B        COPYSTD4
COPYSTD6 MTW,1    SFCNT              COUNT STD FILE COPY
         LI,R1    1
         STW,R1   FILE,R7           FILE NAME ONLY
COPYSTD3 LI,R1    -1
         STW,R1   COPYSTDF,R7       FLAG FOR STD FILE INPUT
         LW,R1    SFDEV+1           RESET OUTPUT DEVICE
         STW,R1   TOARG,R7
         LI,R1    3                 RAD INPUT
         STW,R1   DEVICE,R7
         MTW,0    SFTEMP,R7    DID WE BUILD A TEMP FILE
         BEZ      %+4          NO
         LW,R1    TOARG+4,R7        GET CMBX OF TEMP FILE
         STW,R1   FILE+1,R7
         STW,R0   TOARG+4,R7
         LI,R1    2
         BAL,SR4  BLDCB             BUILD F:STD
         MTW,0    J:JIT
         BGEZ     COPYSTD2          BATCH MODE
         LW,R1    SFDEV+1
         CI,R1    8                 IS OUTPUT TO TERMINAL
         BE       COPYSTD2          YES
         CAL1,1   WRTCOPY           WRITE 'COPYING' ON UC
COPYSTD2 LI,R1    6
         LW,R2    R7
         AI,R2    STRDFPT-1
         LW,R3    SRDFPT-1,R1       MOVE READ FPT TO DATA AREA
         STW,R3   *R2,R1
         BDR,R1   %-2
         LI,R1    PRNTBUF
         AW,R1    R7
         STW,R1   STRDFPT+4,R7      ADD BUFFER ADDR
         LW,R2    ='    '
         LI,R3    19
         STW,R2   *R1,R3            BLANK BUFFER
         BDR,R3   %-1
         STW,R2   0,R1
         CAL1,1   STRDFPT,R7        READ STANDARD FILE
         LI,R1    16
         LW,R5    R7                SAVE STD FILE ARGUMENTS
         AI,R5    ARGTBL-1
         LW,R2    *R5,R1
         STW,R2   SFARG-1,R1
         BDR,R1   %-2
         LI,R1    1
         STW,R1   COPYSTDF,R7
         LI,R1    X'40'
         STW,R1   TERM,R7
         BAL,SR4  COPYSF            COPY FILE
         CI,D2    1
         BG       EOF2              ERROR - CAN'T CONTINUE
         MTW,0    BREAK             WAS BREAK KEY HIT
         BNEZ     EOF2              YES
         LI,R1    16
         LW,R2    SFARG-1,R1        RESTORE STD FILE ARGS
         STW,R2   *R5,R1
         BDR,R1   %-2
         B        COPYSTD2          CONTINUE WITH STD FILE
COPYSTD5 EQU      %
         BAL,SR4  REVARG            BRING BACK INPUT ARGUMENTS
         BAL,SR4  CLOSEI
         B        COPYSTD3          RE-OPEN INPUT AS F:STD
SRDFPT   GEN,8,24       X'10',F:STD
         DATA     X'F0000010'
         DATA     STDERR            ERROR ADR
         DATA     EOF               ABNORMAL ADR
         DATA     0                 BUFFER ADDRESS
         DATA     80                BUFFER SIZE
EOF      LB,R1    SR3
         CI,R1    6
         BE       EOF2
         CI,R1    5
         BE       EOF2
STDERR   LI,R1    0
         BAL,SR4  ERROR             REPORT I/O ERROR
EOF2     LW,R1    F:STD
         LW,SR2   SFCNT             GET FILE COUNT
         CW,R1    =X'00200000'
         BAZ      RETURN            FILE ALREADY CLOSED
         MTW,0    SFTEMP,R7    WAS TEMP FILE CREATED
         BNEZ     EOF3         YES
         CAL1,1   CLSTD        CLOSE STANDARD FILE..
         USECT    PLSECT
CLSTD    GEN,8,24 X'15',F:STD
         DATA     0
CLSTDR   GEN,8,24 X'15',F:STD
         DATA     X'80000000'
         DATA     1                 RELEASE
CLSE%STD GEN,8,7,17   X'15',0,M:EI
         DATA     X'10'
         USECT    COPYALL
         B        RETURN
EOF3     CAL1,1   CLSTDR       RELEASE TEMP RAD FILE
         B        RETURN
CSERR    LI,R1    49                INVALID OPTION FOR COPYSTD
         B        ERRTN
         END

