SUBROUTINE GETTBH ( LUNS, LUNL, TAB, IMT, IMTV, IOGCE, ILTV ) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C C SUBPROGRAM: GETTBH C PRGMMR: ATOR ORG: NP12 DATE: 2007-01-19 C C ABSTRACT: THIS SUBROUTINE READS AND PARSES THE HEADER LINES FROM TWO C SEPARATE (I.E. ONE STANDARD AND ONE LOCAL) ASCII FILES CONTAINING C EITHER MASTER TABLE B OR MASTER TABLE D INFORMATION. C C PROGRAM HISTORY LOG: C 2007-01-19 J. ATOR -- ORIGINAL AUTHOR C C USAGE: CALL GETTBH ( LUNS, LUNL, TAB, IMT, IMTV, IOGCE, ILTV ) C C INPUT ARGUMENT LIST: C LUNS - INTEGER: FORTRAN LOGICAL UNIT NUMBER OF ASCII FILE C CONTAINING STANDARD TABLE INFORMATION C LUNL - INTEGER: FORTRAN LOGICAL UNIT NUMBER OF ASCII FILE C CONTAINING LOCAL TABLE INFORMATION C TAB - CHARACTER*1: TABLE TYPE ('B' OR 'D') C C OUTPUT ARGUMENT LIST: C IMT - INTEGER: MASTER TABLE, READ FROM EACH ASCII FILE C (NOTE: THESE VALUES MUST BE THE SAME IN EACH FILE!) C IMTV - INTEGER: VERSION NUMBER OF MASTER TABLE, READ FROM C STANDARD ASCII FILE C IOGCE - INTEGER: ORIGINATING CENTER, READ FROM LOCAL ASCII FILE C ILTV - INTEGER: VERSION NUMBER OF LOCAL TABLE, READ FROM C LOCAL ASCII FILE C C REMARKS: C THIS ROUTINE CALLS: BORT IGETNTBL PARSTR VALX C THIS ROUTINE IS CALLED BY: RDMTBB RDMTBD C Also called by application programs. C C ATTRIBUTES: C LANGUAGE: FORTRAN 77 C MACHINE: PORTABLE TO ALL PLATFORMS C C$$$ CHARACTER*128 BORT_STR CHARACTER*40 HEADER CHARACTER*30 TAGS(5), LABEL CHARACTER*3 CFTYP CHARACTER*2 CTTYP CHARACTER*1 TAB LOGICAL BADLABEL C----------------------------------------------------------------------- C Statement function to check for bad header line label: BADLABEL ( LABEL ) = ( ( INDEX ( LABEL, CTTYP ) .EQ. 0 ) .OR. . ( INDEX ( LABEL, CFTYP ) .EQ. 0 ) ) C----------------------------------------------------------------------- CTTYP = TAB // ' ' C Read and parse the header line of the standard file. CFTYP = 'STD' IF ( IGETNTBL ( LUNS, HEADER ) .NE. 0 ) GOTO 900 CALL PARSTR ( HEADER, TAGS, 5, NTAG, '|', .FALSE. ) IF ( NTAG .LT. 3 ) GOTO 900 IF ( BADLABEL ( TAGS(1) ) ) GOTO 900 IMT = VALX ( TAGS(2) ) IMTV = VALX ( TAGS(3) ) C Read and parse the header line of the local file. CFTYP = 'LOC' IF ( IGETNTBL ( LUNL, HEADER ) .NE. 0 ) GOTO 900 CALL PARSTR ( HEADER, TAGS, 5, NTAG, '|', .FALSE. ) IF ( NTAG .LT. 4 ) GOTO 900 IF ( BADLABEL ( TAGS(1) ) ) GOTO 900 IMT2 = VALX ( TAGS(2) ) IOGCE = VALX ( TAGS(3) ) ILTV = VALX ( TAGS(4) ) C Verify that both files are for the same master table. IF ( IMT .NE. IMT2 ) GOTO 901 RETURN 900 WRITE(BORT_STR,'("BUFRLIB: GETTBH - BAD OR MISSING HEADER '// . 'WITHIN ",A," TABLE ",A)') CFTYP, TAB CALL BORT(BORT_STR) 901 WRITE(BORT_STR,'("BUFRLIB: GETTBH - MASTER TABLE NUMBER '// . 'MISMATCH BETWEEN STD AND LOC TABLE ",A)') TAB CALL BORT(BORT_STR) END