C  =====================================================================
C  pgm: SHDCOD .. Decode program for parsing SHEF data files
C
C  use:     CALL SHDCOD()
C
C  rqd: SHFMT1,SHFMT2,SHDECA,SHDECB,SHDECE,SHERR,SHLINE
C
C  cmt: Note, variable QUO is defined here with a length of 80 and
C  cmt:  carried to lower subroutines only so that its size can be
C  cmt:  defined in one place (it is used by routine SHQUOT later).
C  =====================================================================
      SUBROUTINE SHDCOD()

      EXTERNAL       SHFMT1,SHFMT2,SHDECA,SHDECB,SHDECE,SHERR,SHLINE

      CHARACTER*1    KHAR,FORMT,LFORMT
      CHARACTER*80   QUO
      INTEGER        KHPOS,LPOS,IREV,ICONT
C
C    ================================= RCS keyword statements ==========
      CHARACTER*68     RCSKW1,RCSKW2
      DATA             RCSKW1,RCSKW2 /                                 '
     .$Source: /fs/hseb/ob5/rfc/ofs/src/shefpars_driv/RCS/shdcod.f,v $
     . $',                                                             '
     .$Id: shdcod.f,v 1.4 1999/07/07 11:34:00 page Exp $
     . $' /
C    ===================================================================
C

C                   Initialize the num of warngs and errs to 0 in SHERR
C                   Initialize the num of lines in a message file to 0,
C                    KHPOS = 2, and KHAR = ':' in SHLINE

        KHPOS = 2
        KHAR  = ':'
        CALL SHERR('I',0,KHPOS,KHAR)
        CALL SHLINE('INITIALIZE      ',KHAR,KHPOS)

C                   Loop thru message formats until end of file or error

        FORMT = ' '
        IREV  = 0
   30   IF (KHPOS .LE. 0) GOTO 300
            LPOS = KHPOS

C                   Get format type (A, B, or E) in SHFMT1
C                   Check for revision and/or continuation codes, SHFMT2

            CALL SHFMT1(KHAR,KHPOS,FORMT,LFORMT)
            CALL SHFMT2(KHAR,KHPOS,FORMT,LFORMT,LPOS,IREV,ICONT)

C                   If format type found, parse the rest of the message

            IF (FORMT .EQ. 'A') THEN
                CALL SHDECA(KHAR,KHPOS,IREV,ICONT,QUO)
              ELSEIF (FORMT .EQ. 'B') THEN
                CALL SHDECB(KHAR,KHPOS,IREV,ICONT,QUO)
              ELSEIF (FORMT .EQ. 'E') THEN
                CALL SHDECE(KHAR,KHPOS,IREV,ICONT,QUO)
            ENDIF

            GO TO 30
  300   CONTINUE

      RETURN
      END