#ifdef SP_SUN4 C THIS ROUTINE NOT AVAILABLE ON SUN SUBROUTINE vaxtounix(FILOLD,FILNEW,LUNO,LUNN,IRTFLG) COMMON /UNITS/LUNC,NIN,NOUT WRITE(NOUT,*) 'DUMMY CALL: vaxtounix' RETURN END #else C++********************************************************************* C C VAXTOUNIX.FOR -- ADAPTED FROM GETVAX C CONVERTED TO RUN ON UNIX, JULY 93 al 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 VAXTOUNIX(FILOLD,FILNEW,LUNO,LUNN,IRTFLG) C C PURPOSE: TO CONVERT A VAX SPIDER IMAGE FILE TO UNIX FORMAT C RUNNING ON A UNIX MACHINE C C PARAMETERS: C FILOLD VAX FORMAT FILE NAME (SENT) C LUNO LOGICAL UNIT NUMBER FILOLD. (SENT) C FILNEW UNIX FORMAT FILE NAME (SENT) C LUNN LOGICAL UNIT NUMBER FILNEW (SENT) C IRTFLG ERROR RETURN FLAG. (0 IS NORMAL) (RET.) C C VARIABLES: IFORM = FILE TYPE SPECIFIER. C = +3 3-D IMAGE C = +1 2-D IMAGE C = -1 2-D FOURIER TRANSFORM C = -3 3-D FOURIER TRANSFORM C = +8 8 BIT BLACK AND WHITE IMAGE C = 11 8 BIT COLOR IMAGE C C--******************************************************************** SUBROUTINE VAXTOUNIX(FILOLD,FILNEW,LUNO,LUNN,IRTFLG) INCLUDE 'CMBLOCK.INC' INCLUDE 'CMLIMIT.INC' COMMON /IOERR/ IERR COMMON /IOBUF/ BUFO(NBUFSIZ) CHARACTER *(*) FILOLD,FILNEW CHARACTER *1 NULL NULL = CHAR(0) IRTFLG = 1 C RETRIEVE ALL LABEL INFO (LABEL CONTAINS >=256 * 4 BYTES) CALL OPAUXFILE(.TRUE.,FILOLD,DATEXC,LUNO,1024,'O', & 'VAX/VMS INPUT FILE',.TRUE.,IRTFLGT) IF (IRTFLGT .NE. 0) RETURN C READ FIRST 1024 BYTES OF VAX INPUT FILE (FIRST RECORD) CALL REDLIN8(LUNO,BUFO,1024,1,IRTFLGT) IF (IRTFLGT .NE. 0) THEN CALL ERRT(101,'*** CAN NOT READ VAX HEADER',NE) RETURN ENDIF C CONVERT HEADER TO UNIX FLOATING POINT NUMBERS DO I=1,211 CALL VAX32U(BUFO(I)) ENDDO NSLICE = BUFO(1) IF (NSLICE .EQ. 0) THEN C FIX UP OLD LABELS NSLICE NSLICE = 1 BUFO(1) = NSLICE ELSEIF (NSLICE .GT. 0) THEN C OLD SPIDER SHORT LABEL FILE WRITE(NOUT,*) '*** SHORT LABEL CONVERSION NOT IMPLEMENTED' CALL ERRT(2,'VAXTOUNIX',NE) RETURN ELSE NSLICE = -NSLICE ENDIF NROW = BUFO(2) IFORM = BUFO(5) IF (BUFO(5) .LT. 0.0) IFORM = BUFO(5) - 0.5 IF (IFORM .NE. 1 .AND. IFORM .NE. 3) THEN WRITE(NOUT,*) & 'WARNING: NOT TESTED FOR THIS FORMAT: ',IFORM ENDIF C PIXELS IN EACH RECORD IS IN BUFO(12) = NSAM NSAM = BUFO(12) IF (NSAM .LE. 0 .OR. NSAM .GT. 8000) THEN WRITE(NOUT,*) 'NSAM IN HEADER LOCATION 12:', NSAM CALL RDPRI1S(NSAM,NOT_USED,'ENTER NSAM',IRTFLG) IF (IRTFLG .NE. 0) RETURN ENDIF LENBYT = NSAM * 4 BUFO(23) = LENBYT LABREC = 1024 / LENBYT IF (MOD(1024,LENBYT) .NE. 0) LABREC = LABREC + 1 BUFO(13) = LABREC LABBYT = LABREC * LENBYT BUFO(22) = LABBYT C CLOSE THE VAX FILE AND REOPEN WITH CORRECT RECORD LENGTH CLOSE(LUNO) CALL OPAUXFILE(.FALSE.,FILOLD,NULL,LUNO,NSAM*4,'O', & ' ',.TRUE.,IRTFLGT) IF (IRTFLGT .NE. 0) RETURN C PLACE HEADER IN NEW UNIX FILE MAXIM = 0 CALL OPFILEC(0,.TRUE.,FILNEW,LUNN,'N',IFORM,NSAM,NROW,NSLICE, & MAXIM,'OUTPUT',.FALSE.,IRTFLGT) IF (IRTFLGT .NE. 0) RETURN C FIND NUMBER OF IMAGE RECORDS EXPECTED IN FILE (IEND) CALL TOTREC(NSAM,NROW,NSLICE,IEND) IERR = 0 DO I = 1,IEND C READ EACH RECORD OF VAX FILE CALL REDLIN(LUNO,BUFO,NSAM,I+LABREC) IF (IERR .NE. 0) THEN CALL ERRT(12,'VAXTOUNIX',NE) RETURN ENDIF C CONVERT FLOATING POINT NUMBERS TO UNIX FORMAT DO J=1,NSAM CALL VAX32U(BUFO(J)) ENDDO C WRITE RECORD TO UNIX FILE CALL WRTLIN(LUNN,BUFO,NSAM,I) ENDDO C REOPEN TO ECHO DATE AND TIME CLOSE(LUNN) MAXIM = 0 WRITE(NOUT,*) ' ' CALL OPFILEC(0,.FALSE.,FILNEW,LUNN,'O',IFORM,NSAM,NROW,NSLICE, & MAXIM,' ',.TRUE.,IRTFLGT) IF (IRTFLGT .NE. 0) RETURN C SET FLAG FOR NORMAL RETURN IRTFLG = 0 RETURN END #endif