C++*********************************************************************
C
C  COPY1.F                   REMOVED FROM UTIL2    JUL 96 ArDean Leith
C                            ADDED NT INTERFACES   OCT 98 ArDean Leith
C                            REMOVED 'CP FROM LUM' FEB 99 ArDean Leith
C                            ADDED 'CP FROM XP'    OCT 00 Pawel Penczek
C                            'CP TO NT' ON NT      JUN 01 ArDean Leith
C                            'CP FROM SG' ON NT    SEP 01 ArDean Leith
C                            'CP TO/FROM CCP4'     FEB 02 ArDean Leith
C                            'CP FROM EMI'         FEB 02 ArDean Leith
C                            INDEXED STACK         JAN 02 ArDean Leith
C                            'CP TO OPEND'         FEB 03 ArDean Leith
C                            'CP TO' NORM          JUL 03 ArDean Leith
C                            'CP FIX' REMOVED      OCT 03 ArDean Leith
C                            MPI                   OCT 03 Chao Yang
C                            'CP TO SF3' GONE      DEC 04 ArDean Leith
C                            'CP FROM NIK'         JAN 05 ArDean Leith
C                            'CP TO PDS' GONE      MAR 09 ArDean Leith
C                            'CP TO SGI' GONE      MAY 09 ArDean Leith
C
C **********************************************************************
C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM.   AUTHOR: J.FRANK  *
C=* Copyright (C) 1985-2009  Health Research Inc.                      *
C=*                                                                    *
C=* HEALTH RESEARCH INCORPORATED (HRI),                                *   
C=* ONE UNIVERSITY PLACE, RENSSELAER, NY 12144-3455.                   *
C=*                                                                    *
C=* Email:  spider@wadsworth.org                                       *
C=*                                                                    *
C=* This program is free software; you can redistribute it and/or      *
C=* modify it under the terms of the GNU General Public License as     *
C=* published by the Free Software Foundation; either version 2 of the *
C=* License, or (at your option) any later version.                    *
C=*                                                                    *
C=* This program is distributed in the hope that it will be useful,    *
C=* but WITHOUT ANY WARRANTY; without even the implied warranty of     *
C=* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *
C=* General Public License for more details.                           *
C=*                                                                    *
C=* You should have received a copy of the GNU General Public License  *
C=* along with this program; if not, write to the                      *
C=* Free Software Foundation, Inc.,                                    *
C=* 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.      *
C=*                                                                    *
C **********************************************************************
C
C  COPY1(MAXDIM)
C
C  PARAMETERS:      MAXDIM         MAX LENGTH FOR UNLABELED COMMON
C
C  SUPPORT_ROUTINE
C
C23456789012345678901234567890123456789012345678901234567890123456789012
C--*********************************************************************

        SUBROUTINE COPY1(MAXDIM)

	INCLUDE 'CMBLOCK.INC'
	INCLUDE 'CMLIMIT.INC'

        CHARACTER(LEN=MAXNAM) :: FILOLD,FILNEW
        COMMON /COMMUN/          FILOLD,FILNEW

	PARAMETER           (NFROM=17)
	PARAMETER           (NTO=14)
        CHARACTER *2        FROM(NFROM), TO(NTO)
        CHARACTER(LEN=1) :: NULL
        LOGICAL          :: INDXD

	DATA FROM/'AS','MR','PD','RA','NI',
     &            'SH','TE','VA','LU','EM',
     &            'SC','TR','PE','NT','XP',
#ifdef SP_NT 
     &            'SG','CC'/  
#else 
     &            '##','CC'/
#endif

  
	DATA   TO/'AS','BR','MR','PO','RA',
     &            'TA','TI','VA','VV','XP',  
#ifdef SP_NT 
     &            'SG','UN','CC','OP'/  
#else 
     &            'SG','NT','CC','OP'/ 
#endif
#ifdef USE_MPI    
        include 'mpif.h'
        INTEGER  MYPID, COMM, IERR 
        COMM = MPI_COMM_WORLD
        CALL MPI_COMM_RANK(COMM, MYPID, IERR) 
#else
        MYPID = -1
#endif  
	NULL   = CHAR(0)
	LUN1   = 14
	LUN2   = 15

C       TEST THE FUNC FIRST

	IF ((FCHAR(4:4) .EQ. 'I') .OR.
     &          (FCHAR(4:4) .EQ. ' ') .OR.
     &          (FCHAR(4:8) .EQ. 'TO OP')) THEN
C          STANDARD COPY WITH FLIPPED ENDEDNESS
C          STANDARD COPY OR STANDARD COPY TO INDEXED STACK

C	   OPEN EXISTING INPUT FILE, CAN BE A BARE STACK
           NSTACKIN = 1
           CALL OPFILEC(0,.TRUE.,FILOLD,LUN1,'O',ITYPE,
     &             NSAM,NROW,NSLICE,NSTACKIN,'INPUT',.TRUE.,IRTFLG) 
          IF (IRTFLG .NE. 0) RETURN

          IFLIPOUT = 0
	  IF (FCHAR(4:8) .EQ. 'TO OP') THEN
C            STANDARD COPY WITH FLIPPED ENDEDNESS
             CALL LUNGETFLIP(LUN1,IFLIPIN,IRTFLG)
             IF (IFLIPIN .NE. 1) IFLIPOUT = 1
           ENDIF

          INDXD   = (FCHAR(4:4) .EQ. 'I')
	  CALL COPYD(LUN1,LUN2,INDXD,NSAM,NROW,NSLICE,
     &               NSTACKIN,ITYPE,IFLIPOUT)
	  GOTO 9000


	ELSEIF (FCHAR(4:5) .EQ. 'TO') THEN
C         OPERATION ----------- COPY TO ----------------------- 'CP TO' 
          IC = 7
          DO  IFUNC = 1, NTO
            IF (FCHAR(IC:IC+1) .EQ. TO(IFUNC)) THEN

C             COPY SPIDER FORMAT TO FOREIGN FORMAT
	      IF (FCHAR(IC:IC+2) .NE. 'SF3'  .AND.
     &            FCHAR(IC:IC+2) .NE. 'VAX') THEN

C                 OPEN INPUT FILE, WHOLE STACK NOT ALLOWED
                  MAXIM = 0
                  CALL OPFILEC(0,.TRUE.,FILOLD,LUN1,'O',ITYPE,
     &                   NSAM1,NROW1,NSLICE1,MAXIM,'SPIDER INPUT',
     &                   .FALSE.,IRTFLG)
	          IF (IRTFLG .NE. 0) GOTO 9000

                  IF (IMAMI .NE. 1) 
     &               CALL NORM3(LUN1,NSAM1,NROW1,NSLICE1,FMAX,FMIN,AV)
	      ENDIF
              GOTO (20,21,22,23,24,26,27,28,29,30,31,32,33)IFUNC
            ENDIF
          ENDDO

C	  NO SUCH COPY FUNCTION
          CALL ERRT(101,'NO SUCH CP OPERATION, CHECK MENU',IDUM)
	  RETURN

	ELSEIF (FCHAR(4:7) .EQ. 'FROM') THEN
C         OPERATION ----------- COPY FROM ------------------- 'CP FROM' 
C         COPY FROM FOREIGN FORMAT TO SPIDER
          IC = 9
          DO  IFUNC = 1, NFROM
            IF (FCHAR(IC:IC+1) .EQ. FROM(IFUNC)) THEN
            GOTO (50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66)
     &          IFUNC
            ENDIF
          ENDDO
        ENDIF

        CALL ERRT(101,'NO SUCH CP OPERATION, CHECK MENU',NERRD)
        RETURN


C	--------------- CP TO OPERATIONS -----------------------------

C       COPY SPIDER IMAGE FILE INTO EDITABLE IMAGE ------ 'CP TO ASCII'
20      CALL COPYE(LUN1,LUN2,NSAM1,NROW1,NSLICE1)
        GOTO 9000

C       COPY 3D SPIDER FILE TO BRIX FORMAT-----------------'CP TO BRIX'
21      CALL COPYBRIX(LUN1,LUN2,NSAM1,NROW1,NSLICE1)
        GOTO 9000

C       MRC'S FORMAT FOR TRANSFERING TO CAMBRIDGE --------- 'CP TO MRC'
C       COPY FROM SPIDER IMAGE FILE INTO MRC FORMAT
22      CALL COPYMRC(LUN1,LUN2,NSAM1,NROW1,NSLICE1)
        GOTO 9000

C       SPIDER IMAGE TO POSTSCRIPT IMAGE (8 BIT) --------- 'CP TO POST'
23      CALL COPYPOS(FILOLD,LUN1,LUN2,NSAM1, NROW1, NSLICE1)
        GOTO 9000

C       COPY SPIDER IMAGE FILE INTO RAW IMAGE FILE -------- 'CP TO RAW'
24      CALL COPYU(LUN1,LUN2,NSAM1,NROW1,NSLICE1)
        GOTO 9000

C       TO TARGA FORMAT --------------------------------- 'CP TO TARGA'
26      CALL ERRT(101,'OPERATION NO LONGER SUPPORTED',IDUM)
        GOTO 9000

C       CONVERT FROM SPIDER FORMAT TO TIFF FORMAT ------- 'CP TO TIFF'
27      CALL SPDTOTIFF(LUN1,LUN2,NSAM1,NROW1,NSLICE1,IRTFLG)
        GOTO 9000

C       COPY UNIX SPIDER FILE TO VAX SPIDER   ------------- 'CP TO VAX'
28      CALL ERRT(101,'OPERATION NO LONGER SUPPORTED',IDUM)
C       CALL COPYVAX(LUN1,LUN2,LUN3)
        GOTO 9000

C       COPY UNIX IMAGE FILE INTO VOXEL-VIEW FILES --------- 'CP TO VV'
29      CALL UNIXTOVV(LUN1,LUN2,0,255,NSAM1,NROW1,NSLICE1,IRTFLG)
        GOTO 9000

C       COPY SPIDER IMAGE FILE INTO XPLOR FILES -----------'CP TO XPLOR'
30      CALL COPYTOXPLOR(LUN1,FILOLD,LUN2,NSAM1,NROW1,NSLICE1)
        GOTO 9000

C       COPY UNIX IMAGE FILE INTO SGI FILES --------------- 'CP TO SGI'
31      CALL ERRT(101,'OPERATION NO LONGER SUPPORTED',IDUM)
        GOTO 9000

C       COPY UNIX IMAGE FILE INTO NT FILES ----------------- 'CP TO NT'
32      CALL ERRT(101,'USE OPERATION: <CP TO OPENEND> ',IDUM)
        GOTO 9000

C       COPY FROM SPIDER IMAGE FILE INTO CCP4 FORMAT ----- 'CP TO CCP4'
33      CALL COPYCCP4(LUN1,LUN2,NSAM1,NROW1,NSLICE1)
        GOTO 9000


C	--------------- CP FROM OPERATIONS ----------------------------

C       EDITABLE IMAGE FILE TO SPIDER IMAGE FILE ------ 'CP FROM ASCII'
50      CALL COPYF(LUN1,LUN2)
        GOTO 9000

C       MRC'S FORMAT TO SPIDER -------------------------- 'CP FROM MRC'
C       COPY FROM MRC FORMAT INTO SPIDER IMAGE FILE
51      CALL COPYMRC(LUN1,LUN2,NSAM,NROW,NSLICE)
        GOTO 9000

C       COPY A PDB FILE INTO SPIDER VOLUME FILE --------- 'CP FROM PDB'
52      CALL READPDB
        GOTO 9000

C       COPY RAW IMAGE FILE INTO SPIDER IMAGE FILE ------ 'CP FROM RAW'
53      CALL RAWTOSPIDER(LUN1,LUN2,IRTFLG)
        GOTO 9000

C       COPY NIKON TIFF IMAGE FILE INTO SPIDER IMAGE FILE - 'CP FROM NIK'
54      CALL COPYFROMNIK(LUN1,LUN2,IRTFLG)
        GOTO 9000

C       SHORT HEADER FILE TO REGULAR HEADER FILE ------ 'CP FROM SHORT'
55      CALL ERRT(101,'OPERATION NO LONGER SUPPORTED',IDUM)
        GOTO 9000

C       COPY FROM TERMINAL INTO SPIDER IMAGE FILE ------- 'CPFROM TERM'
56      CALL COPYR(LUN2)
        GOTO 9000
          
C       COPY VAX SPIDER TO UNIX SPIDER ------------------ 'CP FROM VAX'
57      FILOLD = NULL
        FILNEW = NULL
        CALL VAXTOUNIX(FILOLD,FILNEW,LUN1,LUN2,IRTFLG)
        GOTO 9000

C			--------------------------------- 'CP FROM LUM'	
C       COPY TWO ILUMINATION LEVEL IMAGES INTO A MERGED THIRD IMAGE
58      CALL ERRT(101,'OPERATION NO LONGER SUPPORTED',IDUM)
        GOTO 9000

C       EMI FORMAT TO SPIDER ---------------------------- 'CP FROM EMI'
59      CALL COPYEMI(LUN1,LUN2)
        GOTO 9000

C       EIKONIX SCAN PROGRAMS (REMOVED 1994)
60      CALL ERRT(101,'EIKONIX SUBROUTINES NO LONGER SUPPORTED',NE)
        GOTO 9000

C       COPY FROM MICRO D TAPE FORMAT TO SPIDER  --------- 'CP FROM TR'
61      CALL ERRT(101,'OPERATION NO LONGER SUPPORTED',IDUM)
        GOTO 9000

C       COPY FROM MICRO D ONDISK FORMAT TO SPIDER  ------- 'CP FROM PE'
62      CALL ERRT(101,'OPERATION NO LONGER SUPPORTED',IDUM)
        GOTO 9000

C       COPY FROM NT FORMAT TO SPIDER -------------------- 'CP FROM NT'
63      CALL ERRT(101,'USE OPERATION: <CP TO OPENEND> ',IDUM)
        GOTO 9000

C       COPY FROM XPLO FORMAT TO SPIDER ------------------ 'CP FROM XP'
64      CALL COPYFROMXPLO(LUN1,LUN2,MAXDIM)
        GOTO 9000

C       COPY FROM TO SGI BYTE FORMAT -------------------- 'CP FROM SG'
65      CALL ERRT(101,'USE OPERATION: <CP TO OPENEND> ',IDUM)
        GOTO 9000

C       CCP4 FORMAT TO SPIDER -------------------------- 'CP FROM CC'
66      MODE = -1
        CALL COPYCCP4(LUN1,LUN2,NSAM,NROW,NSLICE)
        GOTO 9000

9000    CLOSE(LUN1)
        CLOSE(LUN2)

        RETURN
        END
