*COMDECK  COMCCPY 
          CTEXT  COMCCPY - COPY RECORDS OR FILES. 
          SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCCPY
          BASE   D
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1971.
          SPACE  4
***       CPY - COPY RECORDS OR FILES.
*         R. S. HORECK.     71/05/28. 
          SPACE  4
***              CPY COPIES *N* RECORDS OR FILES. IF THE TWO FILE 
*         NAMES ARE THE SAME NO WRITES WILL BE ISSUED.
* 
*         ENTRY  (A0) = FET ADDRESS OF FILE TO COPY *TO*. 
*                (A5) = FET ADDRESS OF FILE TO COPY *FROM*. 
*                (X0) = FWA WORKING BUFFER. 
*                (X5) = LENGTH OF THE WORKING BUFFER. 
*                (X6) < 0  -  COPY (ABS(X6)) FILES. 
*                     = 0  -  COPY TO EOI.
*                     > 0  -  COPY (X6) RECORDS.
* 
*         EXIT   (X3) = LEVEL NUMBER OF LAST RECORD *FROM* FILE OR
*                            NEGATIVE IF EOI ENCOUNTERED. 
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - 1, 2, 3, 4, 5, 6, 7. 
*                A - 0, 1, 2, 3, 4, 5, 6, 7.
* 
*         CALLS  WNB=, RDW=, WTW=, CIO=.
  
  
 CPY8     RECALL A0          WAIT FOR ANY I/O 
  
 CPY=     PS     0           ENTRY/EXIT 
  
          IF     -DEF,B1=1,1
          SB1    1
          SA6    CPYA        SAVE RECORD/FILE COUNT 
          SA1    A5+         COMPARE FILE NAMES 
          SA2    A0 
          MX6    42 
          BX2    X1-X2
          MX3    1           SET SKIP FLAG
          BX6    X6*X2
          NZ     X6,CPY1     IF FILE NAMES NOT THE SAME 
          BX5    X3+X5
  
*         COPY ONE RECORD.
  
 CPY1     READ   A5          INITIATE READ ON NEW RECORD
 ERP$     IF     DEF,ERP$                                               1557  18
          CHECKF A0          WAIT FOR COMPLETION ON WRITE               1557  19
          ELSE                                                          1557  20
          RECALL A0          WAIT FOR COMPLETION ON WRITE 
 ERP$     ENDIF                                                         1557  22
 CPY2     READW  A5,X0,X5 
          NG     X1,CPY6     IF EOF 
          NZ     X1,CPY3     IF EOR 
          NG     X5,CPY2     IF SKIPPING
          WRITEW A0,X0,X5 
          EQ     CPY2 
  
*         PROCESS EOR.
  
 CPY3     BX3    X7          SET LEVEL NUMBER 
          NG     X5,CPY4     IF SKIPPING
          IX6    X1-X0       GET LAST WORD COUNT
          SA7    CPYB        SAVE LEVEL NUMBER
          WRITEW A0,X0,X6 
          SA3    CPYB        RESET LEVEL NUMBER 
          WRITER X2,X3
  
*         COUNT RECORDS.
  
 CPY4     SA1    CPYA        CHECK TERMINATION CONDITION
          NG     X1,CPY1     IF COPYING TO EOF
 CPY5     SA1    CPYA        ADVANCE COUNT
          ZR     X1,CPY1     IF COPYING TO EOI
          BX6    X1 
          AX6    60          GET (ABS(COUNT)) 
          BX7    X6-X1
          SX4    X7-1        DECREMENT COUNT
          BX7    X4-X6       RESET SIGN 
          SA7    CPYA 
          NZ     X4,CPY1     IF NOT FINISHED
          EQ     CPY8        EXIT 
  
*         PROCESS EOF.
  
 CPY6     BX3    X7          SET LEVEL NUMBER 
 CPY7     SA1    A5          CHECK FOR EOI
          LX1    59-9 
          NG     X1,CPY9     IF EOI 
          NG     X5,CPY5     IF SKIPPING
          WRITEF A0 
          EQ     CPY5 
 CPY9     SX3    -17B        SET EOI
          EQ     CPY8 
  
  
 CPYA     CON    0           RECORD/FILE COUNT
 CPYB     CON    0           TEMPORARY STORAGE FOR LEVEL NUMBER 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CPY=     EQU    /COMCCPY/CPY=
 QUAL$    ENDIF 
          ENDX
