C++********************************************************************* C C DRIV3 CHANGED NDOC JULY 2000 ArDean Leith C ADDED 'SY DOC' APRIL 2005 J. LEBARRON C ADDED 'UD NEXT' FEB 2007 ArDean Leith C ADDED 'UD FIND' JUN 2008 ArDean Leith C ********************************************************************** C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM. AUTHOR: J.FRANK * C=* Copyright (C) 1985-2008 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 DRIV3(MAXDIM) C C PURPOSE: A MAIN DRIVER FOR ROUTINES REMOVED FROM DRIVER IN MAR 93 C CONTAINS ROUTINES ACCESSING DOC FILES C C PARAMETERS: MAXDIM MAX LENGTH OF COMMON BUFFER C C HANDLES: 'SD', 'UD', 'LD', 'SY' c C23456789 123456789 123456789 123456789 123456789 123456789 123456789 12 C--********************************************************************* SUBROUTINE DRIV3(MAXDIM) INCLUDE 'CMLIMIT.INC' INCLUDE 'CMBLOCK.INC' CHARACTER(LEN=MAXNAM) :: FILNAM CHARACTER(LEN=2) :: CSYM CHARACTER(LEN=1) :: NULL LOGICAL :: SDNEW,SDCOPY,ENDIT LOGICAL :: NEWFILE C SINCE "UD" LEAVES DOC FILE OPEN DO NOT USE NDOC FOR OTHER USES! INTEGER, PARAMETER :: NDOC = 4 INTEGER, PARAMETER :: NDOC2 = 70 INTEGER, PARAMETER :: NDOCOUT = 72 NULL = CHAR(0) C CARRY OUT THE OPERATION SELECT CASE(FCHAR(1:2)) CASE('SD') C SAVE DOC --------------------------------------------- SD ** 100 IF (FCHAR(4:5) .EQ. 'SH') THEN C RANDOMLY SHUFFLE LINES IN DOCFILE ------------ SD SHUFFLE CALL SHUFFLEDOC(MAXDIM) ELSEIF (FCHAR(4:4) .EQ. 'S') THEN C SORT DOC FILE -------------------------------------- SD S CALL SORTDOC(MAXDIM) ELSEIF (FCHAR(4:4) .EQ. 'C') THEN C SAVE DOC CLUSTER FILE ------------------------------ SD C C TRANSFER COORDINATES FROM CLUSTER FILE TO DOCUMENT CALL RDCLUS ELSEIF (FCHAR(4:4) .EQ. 'N') THEN C SAVE DOC NONLINEAR MAPPING ----------------------- SD NLM C TRANSFER COORDINATES FROM NLM 2D FILE TO DOCUMENT CALL ERRT(101,'THIS OPERATION NO LONGER SUPPORTED',IDUM) ELSEIF (FCHAR(4:5) .EQ. 'IC') THEN C SAVE TO INCORE DOC FILE -------------------------- SD IC * SDNEW = (FCHAR(7:7) .EQ. 'N') SDCOPY = (FCHAR(7:7) .EQ. 'C') ENDIT = (FCHAR(6:6) .EQ. 'E' .OR. FCHAR(7:7) .EQ. 'E') IF (ENDIT) THEN CALL UDOCIC(NDUM,ENDIT) ELSE CALL SDOCIC(SDNEW,SDCOPY) ENDIF ELSE C SAVE REGISTERS TO DOC FILE -------------------------- SD CALL FILERD(FILNAM,NLETD,DATEXC,'DOCUMENT',IRTFLG) IF (IRTFLG .NE. 0) GOTO 5000 CALL SAVDOCQ(FILNAM(1:NLETD),NLETT,IRTFLG) ENDIF CASE('UD') C UNSAVE DOCUMENT ------------------------------------- UD ??? 200 IF (FCHAR(4:4) .EQ. 'I') THEN C UNSAVE DOCUMENT - IN CORE ------------------------ UD IC? ENDIT = (FCHAR(6:6) .EQ. 'E' .OR. FCHAR(7:7) .EQ. 'E') CALL UDOCIC(NDOC2,ENDIT) ELSEIF (FCHAR(4:6) .EQ. 'F E' .OR. & FCHAR(4:4) .EQ. 'FE' .OR. & FCHAR(4:8) .EQ. 'FINDE' .OR. & FCHAR(4:9) .EQ. 'FIND E') THEN C UNSAVE DOCUMENT FIND - END USE ---------------- UD FIND E CALL UDOCIC(NDOC2,.TRUE.) ELSEIF (FCHAR(4:7) .EQ. 'NXTE' .OR. & FCHAR(4:8) .EQ. 'NEXTE' .OR. & FCHAR(4:8) .EQ. 'NXT E' .OR. & FCHAR(4:9) .EQ. 'NEXT E') THEN C UNSAVE DOCUMENT SERIAL - END USE -------------- UD NEXT E CALL UDOCIC(NDOC2,.TRUE.) ELSEIF (FCHAR(4:4) .EQ. 'F') THEN C UNSAVE DOCUMENT FIND - IN CORE ------------------ UD FIND CALL UDOCIC(NDOC2,.FALSE.) ELSEIF (FCHAR(4:7) .EQ. 'NEXT' .OR. & FCHAR(4:6) .EQ. 'NXT') THEN C UNSAVE DOCUMENT SELECT - IN CORE ---------------- UD NEXT CALL UDOCIC(NDOC2,.FALSE.) ELSEIF (FCHAR(4:4) .EQ. 'N') THEN C UNSAVE DOCUMENT KEYCOUNT -------------------------- UD N CALL FILERD(FILNAM,NLETD,DATEXC,'DOCUMENT',IRTFLG) IF (IRTFLG .NE. 0) GOTO 5000 CALL RDDOCN(FILNAM(1:NLETD),NDOC2) ELSE C UNSAVE DOCUMENT - REGULAR --------------------------- UD CALL UDOC(FCHAR,NDOC) ENDIF CASE('LD') C LIST DOCUMENT FILE ------------------------------------- LD 300 CALL FILERD(FILNAM,NLETD,DATEXC,'DOCUMENT',IRTFLG) IF (IRTFLG .NE. 0) GOTO 5000 C LATER TO BE SWITCHED BY COPT ISEQ = 0 CALL LISTDC(FCHAR,FILNAM(1:NLETD),NFIL,NDOC2,ISEQ) CASE('SY') C SYMMETRY DOCUMENT FILE --------------------------------- SY CALL FILERD(FILNAM,NLET,NULL,'OUTPUT SYMMETRY DOCUMENT', & IRTFLG) IF (IRTFLG .NE. 0) GOTO 5000 CALL OPENDOC(FILNAM,.TRUE.,NLET,NDOCOUT,NICDOCOUT,.FALSE., & ' ',.FALSE.,.FALSE.,.TRUE.,NEWFILE,IRTFLG) IF (IRTFLG .NE. 0) GOTO 5000 CALL RDPRMC(CSYM,NLET,.TRUE., & 'SYMMETRY TYPE? (C / CI / T / O / I)',NULL,IRTFLG) IF (IRTFLG .NE. 0) THEN CLOSE(NDOCOUT) GOTO 5000 ENDIF IF (CSYM(1:1) .EQ. 'C') THEN CALL RDPRI1S(IFOLD,NOT_USED, & 'ROTATIONAL SYMMETRY FOLDNESS',IRTFLG) IF (IRTFLG .NE. 0) GOTO 5000 ENDIF CALL SYMANG(CSYM,IFOLD,NICDOCOUT,IRTFLG) CLOSE(NDOCOUT) END SELECT 5000 RETURN END