      PROGRAM CATDOC
      CHARACTER*40 FNAME,DNAME
      CHARACTER*15 MOLNAM
      REAL*8 QLN(7)
      INTEGER*4 NLINES,NXTDIR,TAG,TOTLINES,NSPEC
      TAG=0
      NSPEC=0
      TOTLINES=0
      OPEN(11,FILE='/catalog/doc/moldoc.tex')
      write(*,*) 'opened /catalog/doc/moldoc.tex'
 1    IF(NXTDIR(TAG).GT.0) THEN
          CALL CATDIR(TAG,MOLNAM,NLINES,QLN,IVER)
          IF(NLINES.LE.0) GO TO 1
          NSPEC=NSPEC+1
          TOTLINES=TOTLINES+NLINES
          CALL CATFIL(TAG,FNAME)
          OPEN(12,FILE=FNAME,STATUS='OLD',ERR=11) 
          I=INDEX(FNAME,'c0')
          IF(I.EQ.0) I=INDEX(FNAME,'c1')
          IF(I.EQ.0) GO TO 1
          K=INDEX(FNAME,' ')-1
          DNAME=FNAME(1:I-1)//'doc/d'//FNAME(I+1:K)
          K=K+4
          I=I+4
          WRITE(11,*) '\\docpage'
          WRITE(11,*) '\\tabline'
          WRITE(11,*) '\\input{',DNAME(I:K),'}'
          WRITE(11,*) '\\docend'
          OPEN(10,FILE=DNAME,STATUS='OLD',ERR=10)
          CALL CHKDOC(TAG,MOLNAM,QLN,IVER,NLINES)
          GO TO 1
 10       OPEN(10,FILE=DNAME,ERR=1)
          WRITE(*,*)  TAG,MOLNAM,' creating',DNAME
          CALL CRDOC(TAG,MOLNAM,QLN,IVER,NLINES)
          GO TO 1
      ENDIF
      WRITE(*,*) NSPEC,' species',TOTLINES,' lines'
      STOP ' last species done'
 11   WRITE(*,*) 'UNABLE TO OPEN FILE: ',FNAME
      GO TO 1
      END
      SUBROUTINE CHKDOC(TAG,MOLNAM,QLN,IVER,NLINES)
      REAL*4 QLN(8)
      INTEGER TAG
      CHARACTER*(*) MOLNAM
      CHARACTER*79 LINE
      READ(10,100) LINE
      I=INDEX(LINE,'>')+2
      IF(I.GT.1) THEN
          READ(LINE(I:I+6),'(I7)',ERR=10) ITAG
          IF(ITAG.NE.TAG) GO TO 10
      ELSE
          GO TO 10
      ENDIF
      READ(10,100) LINE
      I=INDEX(LINE,'>')+2
      IF(I.GT.1) THEN
          READ(LINE(I:I+6),'(I7)',ERR=20) IV
          IF(IV.NE.IVER) GO TO 20
      ELSE
          GO TO 20
      ENDIF
      READ(12,100) LINE
      WRITE(*,100) LINE
      RETURN
 10   WRITE(*,*) TAG,' BAD TAG LINE: ',LINE
      RETURN
 20   WRITE(*,*) TAG,IVER,' BAD VER LINE: ',LINE
      RETURN
 100  FORMAT(A)
      END
      SUBROUTINE CRDOC(TAG,MOLNAM,QLN,IVER,NLINES)
      REAL*4 QLN(8)
      CHARACTER*(*) MOLNAM
      INTEGER TAG,IQN(12)
      EMIN=1.E+30
      STR0=100
      STR1=100
      JMAX=0
      K=1
 10   READ(12,99,END=11,ERR=20)
     :          FQ,ERR,S,ID,E,IG,ITAG,IQF,IQN
          IF(ABS(ITAG).NE.TAG) THEN
              WRITE(*,*) 'TAG MISMATCH',TAG,ITAG
              CLOSE(10)
              RETURN
          ENDIF
          FQX=FQ/300000.
          STR0=MIN(STR0,S)
          STR1=MIN(STR1,S-2.*LOG10(FQX))
          EMIN=MIN(EMIN,E)
          JMAX=MAX(IQN(1),IQN(2),JMAX)
          K=K+1
          GO TO 10
  11  K=K-1
      IF(K.NE.NLINES) THEN
          WRITE(*,*) 'END AT ',K
          RETURN
      ENDIF
      IFQ=(FQ+999.999)/1000.
      WRITE(10,101)   '   Species Tag:        \\> ',TAG,
     :              ' \\> Species Name:\\> ',MOLNAM
      WRITE(10,101) '\\\\ Version:            \\> ',IVER,' \\> \\>'
      WRITE(10,101) '\\\\ Date:       \\>                 \\> \\>'
      WRITE(10,100) '\\\\ Contributor:\\>  ',
     :                   'R. L. Poynter and H. M. Pickett \\> \\>'
      WRITE(10,100) '\\\\             \\>                 \\> \\>'        
      WRITE(10,102) '\\\\ Lines Listed:       \\> ',NLINES,
     :              ' \\> Q(300.0)=\\> ',10.**QLN(1)
      WRITE(10,102) '\\\\ Freq. (GHz) $<$     \\> ',IFQ,
     :              ' \\> Q(225.0)=\\> ',10.**QLN(2)
      WRITE(10,102) '\\\\ Max. J:             \\> ',JMAX,
     :              ' \\> Q(150.0)=\\> ',10.**QLN(3)
      WRITE(10,103) '\\\\ LOGSTR0=            \\> ',STR0,
     :              ' \\> Q(75.00)=\\> ',10.**QLN(4)
      WRITE(10,103) '\\\\ LOGSTR1=            \\> ',STR1,
     :              ' \\> Q(37.50)=\\> ',10.**QLN(5)
      WRITE(10,103) '\\\\ Isotope Corr.:      \\> ', 0.,
     :              ' \\> Q(18.75)=\\> ',10.**QLN(6)
      WRITE(10,103) '\\\\ Egy. (cm$^{-1}$) $>$\\> ',EMIN,
     :              ' \\> Q(9.375)=\\> ',10.**QLN(7)
      WRITE(10,100) '\\\\ $\\mu_a$ = \\>                   \\> A=\\>'
      WRITE(10,100) '\\\\ $\\mu_b$ = \\>                   \\> B=\\>'
      WRITE(10,100) '\\\\ $\\mu_c$ = \\>                   \\> C=\\>'
      WRITE(10,100) '\\end{tabbing}'
      CLOSE(10)
      RETURN
  20  WRITE(*,*) 'input error at line = ',K
      CLOSE(10)
      RETURN
  99  FORMAT(F13.4,F8.4,F8.4,I2,F10.4,I3,I7,I4,12I2)
 100  FORMAT(A,A)
 101  FORMAT(A,I7,A,A)
 102  FORMAT(A,I7,A,F12.3)
 103  FORMAT(A,F7.1,A,F12.3)
      END
