 
 
#ifdef SP_SUN4 
 
C   THIS ROUTINE NOT AVAILABLE AT SUN SITES
 
       SUBROUTINE vax32u
 
       COMMON /UNITS/LUNC,NIN,NOUT
 
       WRITE(NOUT,*) 'DUMMY CALL: vax32u'
       RETURN
       END
#else
 
C++*********************************************************************
C
C  VAX32U.FOR  --  JUL 93 al
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    VAX32U(FVAL)
C
C    PURPOSE:  QUICKLY CONVERT A VAX FLOATING POINT NUMBER TO A UNIX 
C              FLOATING POINT NUMBER.  THIS SUBROUTINE IS MEANT TO BE
C              RUN ON A UNIX SYSTEM (NOT ON A VAX!)
C
C    PARAMETERS:   IVAL       FLOATING POINT NUMBER!!!
C
C    NOTES:        IVALIN     --  --  --  --
C                  LVALIN      1   2   3   4
C                             IN1 IN2 IN3 IN4
C
C
C                  IVALOUT    --  --  --  --
C                  LVALOUT     1   2   3   4
C                  I2         -----1
C
C **********************************************************************

      SUBROUTINE VAX32U(IVAL)

      LOGICAL * 1  IO1,IO2,IO3,IO4,IN1,IN2,IN3,IN4,LVALIN(4),LVALOUT(4)

      INTEGER * 2  I2

      INTEGER * 4  IVALIN,IVAL,IVALOUT
      EQUIVALENCE                 (LVALIN,IVALIN),(LVALOUT,IVALOUT)
      
      EQUIVALENCE  (IN1,LVALIN(1)), (IN2,LVALIN(2)), (IN3,LVALIN(3)),
     &             (IN4,LVALIN(4))
      EQUIVALENCE  (IO1,LVALOUT(1)),(IO2,LVALOUT(2)),(IO3,LVALOUT(3)),
     &             (IO4,LVALOUT(4))

#ifdef __osf__
      EQUIVALENCE  (I2,LVALOUT(3))
#else
      EQUIVALENCE  (I2,IVALOUT)
#endif
    
      INTEGER * 2  P32640
      P32640 = 32640

      IVALIN = IVAL

C     CHANGE THE EXPONENT TO EXCESS 127 NOTATION FOR UNIX

C     FLIP THE BYTES IN EACH OF THE WORDS
#ifndef __osf__
      IO1 = IN2
      IO2 = IN1
      IO3 = IN4
      IO4 = IN3
#else
      IO1 = IN3
      IO2 = IN4
      IO3 = IN1
      IO4 = IN2
#endif

C     32640 = 0111 1111 1000 0000
C     256 = 0000 0001 0000 0000

      IF (IAND(I2,P32640) .NE. 0)  I2 = I2 - 256

      IVAL =  IVALOUT

      RETURN
      END
   
#endif

