<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='SNTBBE'><A href='../../html_code/bufr/sntbbe.f.html#SNTBBE' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>
SUBROUTINE SNTBBE ( IFXYN, LINE, MXMTBB, 5,12
. NMTBB, IMFXYN, CMSCL, CMSREF, CMBW,
. CMUNIT, CMMNEM, CMDSC, CMELEM )
C$$$ SUBPROGRAM DOCUMENTATION BLOCK
C
C SUBPROGRAM: SNTBBE
C PRGMMR: ATOR ORG: NP12 DATE: 2007-01-19
C
C ABSTRACT: THIS SUBROUTINE PARSES AN ENTRY THAT WAS PREVIOUSLY READ
C FROM AN ASCII MASTER TABLE B FILE AND THEN STORES THE OUTPUT INTO
C THE MERGED ARRAYS.
C
C PROGRAM HISTORY LOG:
C 2007-01-19 J. ATOR -- ORIGINAL AUTHOR
C
C USAGE: CALL SNTBBE
( IFXYN, LINE, MXMTBB,
C NMTBB, IMFXYN, CMSCL, CMSREF, CMBW,
C CMUNIT, CMMNEM, CMDSC, CMELEM )
C INPUT ARGUMENT LIST:
C IFXYN - INTEGER: BIT-WISE REPRESENTATION OF FXY NUMBER FOR
C TABLE ENTRY; THIS FXY NUMBER IS THE ELEMENT DESCRIPTOR
C LINE - CHARACTER*(*): TABLE ENTRY
C MXMTBB - INTEGER: MAXIMUM NUMBER OF ENTRIES TO BE STORED IN
C MERGED MASTER TABLE B ARRAYS; THIS SHOULD BE THE SAME
C NUMBER AS WAS USED TO DIMENSION THE OUTPUT ARRAYS IN
C THE CALLING PROGRAM, AND IT IS USED BY THIS SUBROUTINE
C TO ENSURE THAT IT DOESN'T OVERFLOW THESE ARRAYS
C
C OUTPUT ARGUMENT LIST:
C NMTBB - INTEGER: NUMBER OF ENTRIES IN MERGED MASTER TABLE B
C ARRAYS
C IMFXYN(*)- INTEGER: MERGED ARRAY CONTAINING BIT-WISE
C REPRESENTATIONS OF FXY NUMBERS (I.E. ELEMENT
C DESCRIPTORS)
C CMSCL(*) - CHARACTER*4: MERGED ARRAY CONTAINING SCALE FACTORS
C CMSREF(*)- CHARACTER*12: MERGED ARRAY CONTAINING REFERENCE VALUES
C CMBW(*) - CHARACTER*4: MERGED ARRAY CONTAINING BIT WIDTHS
C CMUNIT(*)- CHARACTER*14: MERGED ARRAY CONTAINING UNITS
C CMMNEM(*)- CHARACTER*8: MERGED ARRAY CONTAINING MNEMONICS
C CMDSC(*) - CHARACTER*4: MERGED ARRAY CONTAINING DESCRIPTOR CODES
C CMELEM(*)- CHARACTER*120: MERGED ARRAY CONTAINING ELEMENT NAMES
C
C REMARKS:
C THIS ROUTINE CALLS: BORT BORT2 JSTCHR NEMOCK
C PARSTR RJUST
C THIS ROUTINE IS CALLED BY: RDMTBB
C Normally not called by any application
C programs.
C
C ATTRIBUTES:
C LANGUAGE: FORTRAN 77
C MACHINE: PORTABLE TO ALL PLATFORMS
C
C$$$
CHARACTER*(*) LINE
CHARACTER*200 TAGS(10), WKTAG
CHARACTER*128 BORT_STR1, BORT_STR2
CHARACTER*120 CMELEM(*)
CHARACTER*14 CMUNIT(*)
CHARACTER*12 CMSREF(*)
CHARACTER*8 CMMNEM(*)
CHARACTER*4 CMSCL(*), CMBW(*), CMDSC(*)
INTEGER IMFXYN(*)
C-----------------------------------------------------------------------
C-----------------------------------------------------------------------
IF ( NMTBB .GE. MXMTBB ) GOTO 900
NMTBB = NMTBB + 1
C Store the FXY number. This is the element descriptor.
IMFXYN ( NMTBB ) = IFXYN
C Parse the table entry.
CALL PARSTR
( LINE, TAGS, 10, NTAG, '|', .FALSE. )
IF ( NTAG .LT. 4 ) THEN
BORT_STR2 = ' HAS TOO FEW FIELDS'
GOTO 901
ENDIF
C Scale factor.
CALL JSTCHR
( TAGS(2), IRET )
IF ( IRET .NE. 0 ) THEN
BORT_STR2 = ' HAS MISSING SCALE FACTOR'
GOTO 901
ENDIF
CMSCL ( NMTBB ) = TAGS(2)(1:4)
RJ = RJUST ( CMSCL ( NMTBB ) )
C Reference value.
CALL JSTCHR
( TAGS(3), IRET )
IF ( IRET .NE. 0 ) THEN
BORT_STR2 = ' HAS MISSING REFERENCE VALUE'
GOTO 901
ENDIF
CMSREF ( NMTBB ) = TAGS(3)(1:12)
RJ = RJUST ( CMSREF ( NMTBB ) )
C Bit width.
CALL JSTCHR
( TAGS(4), IRET )
IF ( IRET .NE. 0 ) THEN
BORT_STR2 = ' HAS MISSING BIT WIDTH'
GOTO 901
ENDIF
CMBW ( NMTBB ) = TAGS(4)(1:4)
RJ = RJUST ( CMBW ( NMTBB ) )
C Units. Note that this field is allowed to be blank.
IF ( NTAG .GT. 4 ) THEN
CALL JSTCHR
( TAGS(5), IRET )
CMUNIT ( NMTBB ) = TAGS(5)(1:14)
ELSE
CMUNIT ( NMTBB ) = ' '
ENDIF
C Comment (additional) fields. Any of these fields may be blank.
CMMNEM ( NMTBB ) = ' '
CMDSC ( NMTBB ) = ' '
CMELEM ( NMTBB ) = ' '
IF ( NTAG .GT. 5 ) THEN
WKTAG = TAGS(6)
CALL PARSTR
( WKTAG, TAGS, 10, NTAG, ';', .FALSE. )
IF ( NTAG .GT. 0 ) THEN
C The first additional field contains the mnemonic.
CALL JSTCHR
( TAGS(1), IRET )
C If there is a mnemonic, then make sure it's legal.
IF ( ( IRET .EQ. 0 ) .AND.
. ( NEMOCK ( TAGS(1) ) .NE. 0 ) ) THEN
BORT_STR2 = ' HAS ILLEGAL MNEMONIC'
GOTO 901
ENDIF
CMMNEM ( NMTBB ) = TAGS(1)(1:8)
ENDIF
IF ( NTAG .GT. 1 ) THEN
C The second additional field contains descriptor codes.
CALL JSTCHR
( TAGS(2), IRET )
CMDSC ( NMTBB ) = TAGS(2)(1:4)
ENDIF
IF ( NTAG .GT. 2 ) THEN
C The third additional field contains the element name.
CALL JSTCHR
( TAGS(3), IRET )
CMELEM ( NMTBB ) = TAGS(3)(1:120)
ENDIF
ENDIF
RETURN
900 CALL BORT
('BUFRLIB: SNTBBE - OVERFLOW OF MERGED ARRAYS')
901 BORT_STR1 = 'BUFRLIB: SNTBBE - CARD BEGINNING WITH: ' //
. LINE(1:20)
CALL BORT2
(BORT_STR1,BORT_STR2)
END