SUBROUTINE UG_BKST ( report, lenr, flds, numfld, iret ) C************************************************************************ C* UG_BKST * C* * C* This subroutine breaks the report string into an array of fields. * C* The fields are separated from each other by tab characters within * C* the report string, and any embedded blanks are also removed from * C* within each returned field. * C* * C* UG_BKST ( REPORT, LENR, FLDS, NUMFLD, IRET ) * C* * C* Input parameters: * C* REPORT CHAR* Report string * C* LENR INTEGER Length of REPORT * C* * C* Output parameters: * C* FLDS (NUMFLD) CHAR* Array of fields * C* NUMFLD INTEGER Number of fields returned * C* IRET INTEGER Return code: * C* 0 = normal return * C* 1 = more than MXFLDSP3 fields * C* were present in REPORT * C** * C* Log: * C* J. Ator/NCEP 05/09 Based on routines within GEMPAK ST * C* library, but without 160 char limit. * C************************************************************************ INCLUDE 'GEMPRM.PRM' INCLUDE 'ugcmn.cmn' C* CHARACTER*(*) report C* CHARACTER flds(MXFLDSP3)*16 C* LOGICAL endfld C------------------------------------------------------------------------ iret = 0 C C* Break the report into fields. C mxlfld = 16 numfld = 0 ii = 1 DO jj = 1, MXFLDSP3 flds (jj) = ' ' endfld = .false. lfld = 0 DO WHILE ( ( .not. endfld ) .and. ( ii .le. lenr ) ) IF ( report (ii:ii) .eq. CHTAB ) THEN endfld = .true. numfld = numfld + 1 ELSE IF ( ( report (ii:ii) .ne. CHSPAC ) .and. + ( lfld .lt. mxlfld ) ) THEN lfld = lfld + 1 flds (jj)(lfld:lfld) = report (ii:ii) END IF ii = ii + 1 END DO END DO C IF ( ii .le. lenr ) THEN iret = 1 ELSE numfld = numfld + 1 END IF C* RETURN END