FUNCTION IGETNTBI ( LUN, CTB )

C$$$  SUBPROGRAM DOCUMENTATION BLOCK
C
C SUBPROGRAM:    IGETNTBI
C   PRGMMR: ATOR            ORG: NP12       DATE: 2009-03-23
C
C ABSTRACT: THIS FUNCTION RETURNS THE NEXT AVAILABLE INDEX FOR
C   STORING AN ENTRY WITHIN INTERNAL BUFR TABLE CTB.
C
C PROGRAM HISTORY LOG:
C 2009-03-23  J. ATOR    -- ORIGINAL AUTHOR
C
C USAGE:    CALL IGETNTBI ( LUN, CTB )
C   INPUT ARGUMENT LIST:
C     LUN      - INTEGER: I/O STREAM INDEX INTO INTERNAL MEMORY ARRAYS
C     CTB      - CHARACTER*1: INTERNAL BUFR TABLE FROM WHICH TO RETURN
C                THE NEXT AVAILABLE INDEX ('A','B', OR 'D')
C
C   OUTPUT ARGUMENT LIST:
C     IGETNTBI  - INTEGER: NEXT AVAILABLE INDEX IN TABLE CTB
C
C REMARKS:
C    THIS ROUTINE CALLS:        BORT
C    THIS ROUTINE IS CALLED BY: RDUSDX   READS3   STBFDX   STSEQ
C                               Not normally called by application
C                               programs.
C
C ATTRIBUTES:
C   LANGUAGE: FORTRAN 77
C   MACHINE:  PORTABLE TO ALL PLATFORMS
C
C$$$

	INCLUDE 'bufrlib.prm'

	COMMON /TABABD/ NTBA(0:NFILES),NTBB(0:NFILES),NTBD(0:NFILES),
     .			MTAB(MAXTBA,NFILES),IDNA(MAXTBA,NFILES,2),
     .			IDNB(MAXTBB,NFILES),IDND(MAXTBD,NFILES),
     .			TABA(MAXTBA,NFILES),TABB(MAXTBB,NFILES),
     .			TABD(MAXTBD,NFILES)

	CHARACTER*600 TABD
	CHARACTER*128 TABA, TABB, BORT_STR
	CHARACTER*1   CTB

C-----------------------------------------------------------------------
C-----------------------------------------------------------------------

	IF ( CTB .EQ. 'A' ) THEN
	  IGETNTBI = NTBA(LUN) + 1
	  IMAX = NTBA(0)
	ELSE IF ( CTB .EQ. 'B' ) THEN
	  IGETNTBI = NTBB(LUN) + 1
	  IMAX = NTBB(0)
	ELSE IF ( CTB .EQ. 'D' ) THEN
	  IGETNTBI = NTBD(LUN) + 1
	  IMAX = NTBD(0)
	ENDIF
	IF ( IGETNTBI .GT. IMAX ) GOTO 900

	RETURN
900	WRITE(BORT_STR,'("BUFRLIB: IGETNTBI - NUMBER OF INTERNAL TABLE'
     .    //'",A1," ENTRIES EXCEEDS THE LIMIT (",I4,")")') CTB, IMAX
	CALL BORT(BORT_STR)
	END