SUBROUTINE DB_GRPT( lenb, bulltn, jpos, mszrpt, dburpt, iret ) C************************************************************************ C* DB_GRPT * C* * C* This subroutine gets the next report in bulletin. The length of the * C* report must be within the range limits; otherwise, the report is * C* rejected. When there are no more reports in the bulletin, IRET will * C* be set to 2. * C* * C* DB_GRPT ( LENB, BULLTN, JPOS, MSZRPT, DBURPT, IRET ) * C* * C* Input parameters: * C* LENB INTEGER Length of bulletin in bytes * C* BULLTN CHAR* Raw bulletin to process * C* * C* Input and output parameters: * C* JPOS INTEGER Points to start of report on * C* input, to next report on output * C* * C* Output parameters: * C* MSZRPT INTEGER Length of report * C* DBURPT CHAR* Report to process * C* IRET INTEGER Return code * C* 0 = normal return * C* 1 = report rejected * C* 2 = no more reports * C* -1 = NIL report - rejected * C* * C** * C* Log: * C* R. Hollern/NCEP 12/99 * C************************************************************************ INCLUDE 'dbcmn.cmn' C* CHARACTER*(*) bulltn, dburpt C* LOGICAL more C----------------------------------------------------------------------- iret = 0 more = .true. dburpt = ' ' C DO WHILE ( more ) C C* Remove any spaces before start of report. C* Set pointer to start of report. C IF ( bulltn ( jpos:jpos ) .eq. ' ' ) THEN jpos = jpos + 1 ELSE more = .false. END IF C C* Check for end of bulletin. C jsize = lenb - jpos IF ( jsize .lt. 30) THEN iret = 2 RETURN END IF END DO C mszrpt = 0 kst = jpos more = .true. C DO WHILE ( more ) C C* A report normally ends with the character '='. C IF ( bulltn ( jpos:jpos ) .eq. '=' ) THEN jpos = jpos + 1 more = .false. ELSE jpos = jpos + 1 mszrpt = mszrpt + 1 IF ( jpos .ge. lenb ) THEN C C* Report does not end with '='. C more = .false. END IF END IF END DO C C* Check for and reject NIL report. C IF ( INDEX ( bulltn ( kst:kst+10 ), 'NIL' ) .gt. 0 ) THEN iret = -1 RETURN END IF C C* Check that length of report is neither too long nor too short. C IF ( mszrpt .lt. 23 .or. mszrpt .gt. 400 ) THEN loglvl = 4 CALL DC_WLOG( loglvl, 'DB', -1, bulltn(kst:kst+20), ierwlg ) iret = 1 RETURN END IF C C* Store report in dburpt. C dburpt ( 1:mszrpt ) = bulltn ( kst:jpos ) C* RETURN END