* * $Id: zepcat.F,v 1.1.1.1 1996/03/08 12:01:12 mclareni Exp $ * * $Log: zepcat.F,v $ * Revision 1.1.1.1 1996/03/08 12:01:12 mclareni * Zbook * * #include "zbook/pilot.h" SUBROUTINE ZEPCAT (IZ,LUN,JCAT,IDCAT,IERR) C C ****************************************************************** C * * C * * C * READS NEXT CATALOG AND RETURN LIST OF KEYS * C * IN BANK POINTED BY JCAT * C * * C * IF JCAT DOES NOT EXIST IT IS CREATED * C * IF IT EXISTS ITS SIZE IS ADJUSTED TO THE CURRENT * C * SIZE OF THE CATALOG * C * * C * THE CATALOG IDENTIFIER IS RETURNED IN IDCAT * C * * C * * C ****************************************************************** C DIMENSION IZ(1), JCAT(1) LOGICAL ZIDOK C C ------------------------------------------------------------------ C IERR = 0 IDS = IZ(1) IZ(IDS+6)=0 C C CHECK IF HEADER ALREADY READ C JBUF = IZ(IDS - 3) IF (JBUF.LE.0) GO TO 10 C NUNIT = IZ(JBUF) - 2 LBUF = IUCOMP (LUN,IZ(JBUF + 1),NUNIT) IF (LBUF.EQ.0) GO TO 10 C JBUF = IZ(JBUF - LBUF) + 1 IF (IZ(JBUF).NE.1) GO TO 10 C C ALREADY READ C IDCAT = IZ(JBUF + 1) GO TO 20 C C LOOK FOR NEXT CATALOG C 10 CALL ZEPNXT (IZ,LUN,IDCAT,IERR) IF (IERR.NE.0.AND.IERR.NE.6) GO TO 50 C C COMPUTE 'NKEY' C 20 CALL EPGETW (LUN,20,IW20,IERR) IF (IERR.NE.0) GO TO 50 C CALL EPGETW (LUN,21,IW21,IERR) IF (IERR.NE.0) GO TO 50 C NKEY = (IW20 - IW21) / 2 C C CHECK IF JCAT IS A VALID POINTER C IF (.NOT.ZIDOK(IZ,JCAT)) GO TO 30 C C JCAT IS A VALID POINTER C KCAT = JCAT(1) NPUSH = NKEY - IZ(KCAT) + 2 CALL ZPUSHS(IZ,JCAT(1),NPUSH,0) GO TO 40 C C BANK 'JCAT' DOES NOT EXIST C 30 CALL ZBOOKN (IZ,JCAT(1),NKEY,0,'*CAT',1) C 40 IF (IZ(IDS + 6).NE.0) GO TO 50 C JBUF = IZ(IDS - 3) NUNIT = IZ(JBUF) - 2 LBUF = IUCOMP (LUN,IZ(JBUF + 1),NUNIT) JBUF = IZ(JBUF - LBUF) + 3 KCAT = JCAT(1) C C READ IN CATALOG C CALL EPFRD (LUN,13,NW,IZ(KCAT+1),IZ(JBUF),IERR) IF (IERR.NE.0) GO TO 50 C JF = JBUF - 2 IZ(JF) = 2 C CALL ZFRIBM (IZ(KCAT+1),NKEY,2) C 50 IERR = IERR + IZ(IDS + 6) C RETURN END