C
C	$Id: trlate.f.sed,v 1.2 2008-07-27 00:59:05 haley Exp $
C                                                                      
C                Copyright (C)  2000
C        University Corporation for Atmospheric Research
C                All Rights Reserved
C
C The use of this Software is governed by a License Agreement.
C
      SUBROUTINE TRLATE(IOS,STATUS)
C
C  PROCESS OLD METACODE INSTRUCTIONS
C
C  OUTPUT
C       IOS-READ STATUS ONLY VALID IF STATUS SET TO AN I/O ERROR
C       STATUS-THE STATUS FLAG DEFINED BY COMMON TREROR
C
      COMMON/TREROR/ ALLOK, MFRCHK, MTOPER, METRDC, REDERR, TYPCHG
     1             ,INVTYP, MINVLD, TYPERR, FRMEND, ENCINT, IVDCDT
     2             ,GCOERR, GCRERR, GCCERR, FCOERR, FCRERR, FCCERR
     3             ,PLIDXG, PMIDXG, TXIDXG, PGIDXG, INVLMT, CELERR
     4             ,COIERR, COLNRM, UNKNOW, UNKOPC, ENDMTF, VNEROR
     5             ,BADRSZ, DEVOUT, NOVERS, BADFNT, PGMERR, FASERR
     6             ,HINERR, VDWERR, RDWERR, RIXLIM
      INTEGER        ALLOK, MFRCHK, MTOPER, METRDC, REDERR, TYPCHG
     1             ,INVTYP, MINVLD, TYPERR, FRMEND, ENCINT, IVDCDT
     2             ,GCOERR, GCRERR, GCCERR, FCOERR, FCRERR, FCCERR
     3             ,PLIDXG, PMIDXG, TXIDXG, PGIDXG, INVLMT, CELERR
     4             ,COIERR, COLNRM, UNKNOW, UNKOPC, ENDMTF, VNEROR
     5             ,BADRSZ, DEVOUT, NOVERS, BADFNT, PGMERR, FASERR
     6             ,HINERR, VDWERR, RDWERR, RIXLIM
      COMMON /TRFRAM/ METALL, FRINIT, FRCNT
      LOGICAL METALL, FRINIT
      INTEGER  FRCNT
      COMMON /TRINST/ OPCL, OPID, LEN, CONT
      INTEGER OPCL, OPID, LEN
      LOGICAL CONT
      COMMON /TRMTYP/ FOURBT, MULTBT, TWOBT, PTSFLG, CURCOL, IPWRIT,
     1                IFRAME, ISETOP, IRANG, IPTS, ICAS, IINT, IORNT,
     2                ISIZE, IFONT, IPAT, ISSIZ, ICENT, ICOLR,
     3                MCENT, MSIZE, MOR, OLDX, OLDY, MCASE, MINTEN,
     4                MFONT, MDASH, MSPOT, MCOLOR, MLIMIT, PTSYM,
     5                SAVX, SAVY
      INTEGER FOURBT, MULTBT, TWOBT, PTSFLG, CURCOL, IPWRIT,
     1                IFRAME, ISETOP, IRANG, IPTS, ICAS, IINT, IORNT,
     2                ISIZE, IFONT, IPAT, ISSIZ, ICENT, ICOLR,
     3                MCENT, MSIZE, MOR, OLDX, OLDY, MCASE, MINTEN,
     4                MFONT, MDASH, MSPOT, MCOLOR(3), MLIMIT(4), PTSYM,
     5                SAVX, SAVY
      COMMON /TRCNTL/ INPICT, INMETA, RECINT
      LOGICAL INPICT, INMETA
      INTEGER RECINT
      COMMON /PTRBUFR/ METBIT, MBUFER, MDTYPE, METREC, MRECLN,
     1                MCONTF, MOPRST, LNGFLG, MERGFL
      INTEGER MNWRDS, RECLOC, RECSIZ, DTLOC, DTSIZ, MBITST, MBUFOF,
     1        MINSBD, MERLOC, MERSIZ
#if defined(cray)
      PARAMETER (MNWRDS=180, RECLOC=0, RECSIZ=16, DTLOC=16, DTSIZ=4
#else
      PARAMETER (MNWRDS=360, RECLOC=0, RECSIZ=16, DTLOC=16, DTSIZ=4
#endif
     1          ,MBITST=32, MBUFOF=32, MINSBD=16, MERLOC=23, MERSIZ=1)
      INTEGER METBIT, MBUFER(MNWRDS), MDTYPE, METREC, MRECLN, MOPRST
      LOGICAL MCONTF, LNGFLG, MERGFL
      COMMON /CAPDEV/ DGISTR, DGISIZ, DGESTR, DGESIZ, DTISTR,
     1                DTISIZ, DCDLLX, DCDLLY, DCDURX, DCDURY,
     3                DCOAVL, CORFMT, CORFIN, BATCH , DHCSIZ,
     4                DHCSTR, CORXOF, CORYOF, DASBIT, CORXSC,
     5                CORYSC, VDWLLX, VDWLLY, VDWURX, VDWURY
      INTEGER         DGIMAX, DGEMAX, DTIMAX, DCFTMX, DHCMAX
      PARAMETER   (DGIMAX=300, DGEMAX=150, DTIMAX=100)
      PARAMETER   (DCFTMX=30 , DHCMAX=50)
      INTEGER         DGISTR(DGIMAX), DGISIZ, DGESTR(DGEMAX),
     1                DGESIZ, DTISTR(DTIMAX), DTISIZ, DCDLLX,
     2                DCDLLY, DCDURX, DCDURY, CORFMT(DCFTMX,4),
     3                CORFIN(8)     , DHCSIZ, DHCSTR(DHCMAX),
     4                CORXOF, CORYOF, DASBIT, VDWLLX, VDWLLY,
     5                VDWURX, VDWURY
      REAL            CORXSC, CORYSC, CORRIN(8)
      LOGICAL         DCOAVL, BATCH
C  Size of the COMMON
      INTEGER         LENDEV
      PARAMETER   (LENDEV=DGIMAX+1+DGEMAX+1+DTIMAX+1+4+1+4*DCFTMX+
     1                  8+2+DHCMAX+9)
      EQUIVALENCE (CORFIN,CORRIN)
C
      INTEGER IOS, STATUS
      INTEGER ONE
C
C  LOCAL DATA DEFS
C
      DATA ONE/1/
C
C  INITIALIZE THE DATA STRUCTURES
C
      CALL XMDEF(IOS, STATUS)
      IF (STATUS .NE. ALLOK) RETURN
      CALL MMDEF
C
C  TEST IF INITIAL FRAME AND TAKE APPROPRIATE ACTION
C   ACTIVATE GRAPHICS MODE, ERASE THE SCREEN AND LOAD THE COLOR TABLE
C
      IF (FRINIT) THEN
        CALL LODCTB(IOS,STATUS)
        IF (STATUS.NE.ALLOK) RETURN
        FRINIT = .FALSE.
      END IF
C
C  IF ONLY ONE FRAME REQUESTED THEN SET THE RECORD POINTER TO IT
C
      IF (.NOT. METALL) THEN
        METREC = RECINT
        CALL METRED(IOS, STATUS)
        IF (STATUS.NE.ALLOK) RETURN
      END IF
C
C LOOP THROUGH THE INSTRUCTIONS.  ONE METACODE INSTRUCTION IS PROCESSED
C FOR EACH PASS THROUGH THIS LOOP.
C
  100 CONTINUE
C
      CALL MNINST(ONE,IOS,STATUS)
      IF (STATUS .NE. ALLOK) RETURN
C
C  TEST FOR 4 BYTE INSTRUCTION (POSITION INSTRUCTION)
C
      IF (OPCL.EQ.FOURBT) THEN
C
C       POSITION INSTRUCTION
C
        CALL POSIT(IOS,STATUS)
        IF (STATUS.NE.ALLOK) RETURN
C
      ELSE
C
C       TEST FOR THE MULTIBYTE OR TWOBYTE INSTRUCTION
C
        CALL MNINST(ONE,IOS,STATUS)
        IF (STATUS .NE. ALLOK) RETURN
C
        IF (OPCL .EQ. MULTBT) THEN
C
C               MULTIBYTE INSTRUCTION
C
                CALL MULTI(IOS,STATUS)
                IF (STATUS .NE. ALLOK) RETURN
C
        ELSE
C
C               2 BYTE INSTRUCTION
C
                CALL TWOBYT(IOS,STATUS)
                IF (STATUS .NE. ALLOK) RETURN
        END IF
      END IF
C
C  GET THE NEXT INSTRUCTION
C
      GO TO 100
C
      END
