SUBROUTINE SNTBBE ( IFXYN, LINE, MXMTBB, . 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