
C++*********************************************************************
C
C  SPITOSGI.F  -- CREATED JUL 97                      ARDEAN LEITH
C                 MODIFIED FOR F90	    10/22/97  yl 	
C                 USED OPAUXFILE            FEB 99    ARDERAN LEITH
C
C **********************************************************************
C *  AUTHOR: A. LEITH                                                      *
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   SPITOSGI(LUNO,LUNN,NSAM,NROW,NSLICE,MODEOUT,IRTFLG)
C
C   PURPOSE:      CONVERT SPIDER IMAGE FILE TO SGI OR TARGA FORMAT
C
C   PARAMETERS:   MODEOUT       0 = SGI OUTPUT
C                               1 = TARGA OUTPUT
C
C   CALLED BY:    COPY1
C
C--*********************************************************************

	SUBROUTINE SPITOSGI(LUNO,LUNN,NSAM,NROW,NSLICE,MODEOUT,IRTFLG)

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

        COMMON /IOBUF/   BUFO(NBUFSIZ)

        INTEGER*1        LBUF
        CHARACTER *160   COMLIN
        CHARACTER *81    FILNEW
        COMMON/COMMUN/   FILNEW,COMLIN

        CHARACTER * 1    NULL

        DATA IDELAY/3/

        NULL   = CHAR(0)

        IF (NSLICE .NE. 1) THEN
           WRITE(NOUT,*)'WARNING: CONVERTER NOT TESTED FOR VOLUMES:'
        ENDIF
        IF (IMAMI .EQ. 0) THEN
C          NORMALIZE INPUT IMAGE FIRST
           CALL NORM3(LUNO,NSAM,NROW,NSLICE,FMAX,FMIN,AV)
        ENDIF
        
        FN    = (255 - 0) / (FMAX - FMIN)
        FNCON = 0 - FN * FMIN

C       ALLOW EXTENSION ~9
        IF (MODEOUT .EQ. 0) THEN
           CALL FILERD(FILNEW,NLET,'sgi','ENTER SGI OUTPUT~9',IRTFLG)
        ELSE
           CALL FILERD(FILNEW,NLET,'targa',
     &                 'ENTER TARGA OUTPUT~9',IRTFLG)
        ENDIF
        IF (IRTFLG .NE. 0) RETURN

        LENREC = 1
        CALL OPAUXFILE(.FALSE.,'JUNK_RAW_RAW',NULL,LUNN,LENREC,'N',
     &                       ' ',.TRUE.,IRTFLG)
        IF (IRTFLG .NE. 0) RETURN

        IPIX = 0
        DO  I = NROW,1,-1
C          READ EACH RECORD OF 32 BIT UNIX SPIDER INPUT FILE   
           CALL REDLIN(LUNO,BUFO,NSAM,I)

C          CONVERT FLOATING POINT NUMBERS TO -128...127 LOGICAL *1
           DO J=1,NSAM
             I2VAL = BUFO(J) * FN + FNCON
             LBUF  = I2VAL
             IPIX  = IPIX + 1
             CALL WRTLIN8(LUNN,LBUF,1,IPIX)
           ENDDO
        ENDDO 

        CLOSE(LUNN)

        IF (MODEOUT .EQ. 0) THEN
C          SGI OUTPUT
           WRITE(COMLIN,8005) FILNEW(1:NLET),NSAM,NROW
8005       FORMAT('frombin JUNK_RAW_RAW ',A,' ',I6,' ',I6)
        ELSE
C          TARGA OUTPUT
           WRITE(COMLIN,8006) NSAM,NROW
8006       FORMAT('frombin JUNK_RAW_RAW JUNK_SGI_SGI',I6,' ',I6)
        ENDIF
       CALL CSVMS(COMLIN,IERR)

C       FROMBIN FORKS PROCESSES WITHOUT WAITING SO I ADD
C       A DELAY HERE. (KLUDGY)
        CALL sleep(IDELAY)

C       REMOVE TEMPORARY 8 BIT RAW FILE
        COMLIN = '\rm JUNK_RAW_RAW ' // NULL 
        CALL CSVMS(COMLIN,IERR)

        IF (MODEOUT .EQ. 1) THEN

C          CONVERT TO TARGA IMAGE FILE
C                         123456789 123456789 123456789 1234567
           COMLIN = 'totarga  JUNK_SGI_SGI ' // FILNEW(1:NLET) // NULL
           CALL CSVMS(COMLIN,IERR)

C          A SECOND DELAY HERE. (KLUDGY)
           CALL sleep(IDELAY)

C          REMOVE TEMPORARY 8 BIT RAW FILE
           COMLIN = '\rm JUNK_SGI_SGI ' // NULL 
           CALL CSVMS(COMLIN,IERR)
        ENDIF
     
        RETURN
        END

