C++********************************************************************* C C INQUIREIF1.F NEW ROUTINE SEP 97 al C F90 CHANGES MAR 98 al C REMOVED ifdef sgi NOV 01 al C INDEXED STACK JAN 03 ARDEAN LEITH C LUNRED FEB 03 ARDEAN LEITH C NLET = 0 BUG FEB 05 ARDEAN LEITH 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 INQUIREIF1(LUN,FILNAM,BUF,NBUFSIZT,EX,ISOPEN,LUNOP,INLNED, C IMGNUM,IRTFLG) C C PURPOSE: DETERMINES IF A FILE EXISTS C C PARAMETERS: LUN C FILNAM C BUF UNUSED C NBUFSIZT UNUSED C EX C ISOPEN C LUNOP C INLNED C IMGNUM C IRTFLG C C--********************************************************************* SUBROUTINE INQUIREIF1(LUN,FILNAM,BUF,NBUFSIZT,EX,ISOPEN,LUNOP, & INLNED,IMGNUM,IRTFLG) C USE INLINE BUFFER COMMON AREA INCLUDE 'INLN_INFO.INC' INCLUDE 'CMBLOCK.INC' DIMENSION BUF(*) CHARACTER *(*) FILNAM CHARACTER *81 FILDUM CHARACTER NULL,FIRSTC LOGICAL EX,ISOPEN,STACKOPN NULL = CHAR(0) NLET = lnblnk(FILNAM) FIRSTC = FILNAM(1:1) ILOCAT = INDEX(FILNAM,'@') NAMEND = NLET IF (ILOCAT .GT. 1) NAMEND = ILOCAT - 1 EX = .FALSE. ISOPEN = .FALSE. INLNED = 0 IMGNUM = 0 IRTFLG = 0 C CHECK FOR ANONMOLOUS INPUT IF (NLET .LE. 0 .OR. NAMEND .LE. 0) RETURN IF (FIRSTC .NE. '_' .AND. ILOCAT .LE. 0) THEN C NO LEADING '_' AND NO '@' MEANS THAT IT IS A REGULAR C FILE_BASED NON-STACK IMAGE OR OTHER FILE (SUCH AS A C DOCUMENT FILE) C SEE IF THIS FILE EXISTS, (RETURNS EX, ISOPEN, LUNOP) INQUIRE(FILE=FILNAM(1:NAMEND),EXIST=EX,OPENED=ISOPEN, & NUMBER=LUNOP,ERR=999) RETURN ELSEIF (FIRSTC .NE. '_') THEN C NO LEADING '_' MEANS FILE_BASED STACK OR OVERALL STACK C CHECK TO SEE IF IMAGE EXISTS IN THIS EXISTING STACK C SET IFOUND TO DECREASE OPENING OUTPUT INFO IFOUND = -4 C A BARE STACK FILE IS OK MAXIM = 1 CALL OPFILEC(0,.FALSE.,FILNAM,LUN,'Z',IFORM,NSAM,NROW,NSLICE, & MAXIM,' ',.TRUE.,IRTFLG) IF (IRTFLG .EQ. 0) EX = .TRUE. IFOUND = 0 CLOSE(LUN) RETURN ELSEIF (FIRSTC .EQ. '_') THEN C INLINE IMAGE FILE OR OVERALL INLINE STACK ACCESS WANTED C RETRIVE INLINE BUFFER NUMBER FROM FILE NAME CALL INLNBUF(FILNAM,NLET,INLNED,IRTFLG) IF (IRTFLG .NE. 0) RETURN C SEE IF INLINE STACK EXISTS NOW STACKOPN = (NSAMBUF(INLNED) .GT. 0) IF (.NOT. STACKOPN) RETURN C HAVE EXISTING INLINE BUFFER, TIE IT TO LUN & GET NSAM C NEED TO OVERRIDE ERRT IN OPENINLN CALL OPENINLN(LUN,INLNED,.FALSE.,NSAM,0,.FALSE.,IRTFLG) C IRTFLG WILL BE SET IF INLINE FILE DOES NOT EXIST IF (IRTFLG .NE. 0) RETURN IF (ILOCAT .EQ. 0) THEN C SIMPLE INLINE IMAGE OR OVERALL INLINE STACK EX = .TRUE. RETURN ENDIF C FIND IMAGE NUMBER WITHIN STACK C READ(FILNAM(ILOCAT+1:),*,IOSTAT=IER) IMGNUM -changed for osf-liy CALL FILCAD(FILNAM(ILOCAT:),FILDUM,IMGNUM,IER) IF (IER .NE. 0) THEN CALL ERRT(101,'UNABLE TO INTERPRET IMAGE NUMBER',NE) RETURN ENDIF C GET SPECIFIED IMAGE HEADER FROM STACK LOCATION CALL LUNREDHED(LUN,NSAM,IMGNUM,.TRUE.,IRTFLG) IF (IRTFLG .NE. 0) THEN C THIS IMAGE DOES NOT EXIST RETURN ENDIF C GET IMGNUM VALUE CALL LUNGETINUSE(LUN,IMGNUM,IRTFLG) C SEE IF QUERIED IMAGE IS IN THE STACK CALL LUNGETINUSE(LUN,IMUSED,IRTFLG) IF (IMUSED .GT. 0) EX = .TRUE. ENDIF RETURN 999 WRITE(NOUT,*)'*** ERROR INQUIRING ABOUT FILE: ',FILNAM(1:NLET) CALL ERRT(100,' ',NE) EX = .FALSE. RETURN END