C++*********************************************************************
C
C MIRROR.F
C
C **********************************************************************
C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM.   AUTHOR: J.FRANK  *
C=* Copyright (C) 1985-2005  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  MIRROR(LUN1,LUN2,NSAM,NROW,NSLICE)
C
C--*********************************************************************

	SUBROUTINE MIRROR(LUN1,LUN2,NSAM,NROW,NSLICE)

	COMMON     DUM(80),BUF(1)
	CHARACTER  XY,NULL
	LOGICAL    EVEN

	NULL = CHAR(0)

	IF (NSLICE .LE. 1)  THEN
           CALL RDPRMC(XY,NCHAR,.TRUE.,
     &        'MIRROR AT (Y) OR (X) AXIS (DEF=Y)',NULL,IRTFLG)
	ELSE
           CALL RDPRMC(XY,NCHAR,.TRUE.,
     &        'MIRROR AT (Z), (Y) OR (X) AXIS (DEF=Y)',NULL,IRTFLG)
	ENDIF
C
	IF (XY.EQ.'X') THEN
	   EVEN=MOD(NROW,2).EQ.0
	   DO K=1,NSLICE
	      IF (EVEN)  THEN
	      DO I=1,NROW
	         CALL REDLIN(LUN1,BUF,NSAM,I+(K-1)*NROW)
	         CALL WRTLIN(LUN2,BUF,NSAM,
     &                       MOD(NROW+1-I,NROW)+1+(K-1)*NROW)
	      ENDDO
	   ELSE
	      DO I=1,NROW
	         CALL REDLIN(LUN1,BUF,NSAM,I+(K-1)*NROW)
	         CALL WRTLIN(LUN2,BUF,NSAM,NROW-I+1+(K-1)*NROW)
	      ENDDO
	   ENDIF
	ENDDO

	ELSEIF (XY .EQ. 'Z')  THEN
	   EVEN = MOD(NSLICE,2) .EQ. 0
	   DO K=1,NSLICE
	      IF (EVEN)  THEN
	         DO I=1,NROW
                    CALL REDLIN(LUN1,BUF,NSAM,I+(K-1)*NROW)
                    CALL WRTLIN(LUN2,BUF,NSAM,
     &                         I+MOD(NSLICE+1-K,NSLICE)*NROW)
	         ENDDO
	      ELSE
	         DO I=1,NROW
	            CALL REDLIN(LUN1,BUF,NSAM,I+(K-1)*NROW)
	           CALL WRTLIN(LUN2,BUF,NSAM,I+(NSLICE-K)*NROW)
	         ENDDO
	      ENDIF
	   ENDDO
	ELSE
	   EVEN = MOD(NSAM,2) .EQ. 0
	   DO I=1,NROW*NSLICE
	      CALL REDLIN(LUN1,BUF,NSAM,I)
	      IF (EVEN)  THEN
	         DO  J=1,NSAM
	           BUF(NSAM+MOD(NSAM+1-J,NSAM)+1)=BUF(J)
	         ENDDO
	      ELSE
	         DO J=1,NSAM
	            BUF(NSAM+NSAM+1-J)=BUF(J)
	         ENDDO
	      ENDIF

	      CALL WRTLIN(LUN2,BUF(NSAM+1),NSAM,I)
	   ENDDO
	ENDIF

	END

