<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='PARSTR'><A href='../../html_code/bufr/parstr.f.html#PARSTR' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>
SUBROUTINE PARSTR(STR,TAGS,MTAG,NTAG,SEP,LIMIT80) 18
C$$$ SUBPROGRAM DOCUMENTATION BLOCK
C
C SUBPROGRAM: PARSTR
C PRGMMR: J. ATOR ORG: NP12 DATE: 2007-01-19
C
C ABSTRACT: THIS SUBROUTINE PARSES A STRING CONTAINING ONE OR MORE
C SUBSTRINGS INTO AN ARRAY OF SUBSTRINGS. THE SEPARATOR FOR THE
C SUBSTRINGS IS SPECIFIED DURING INPUT, AND MULTIPLE ADJACENT
C OCCURRENCES OF THIS CHARACTER WILL BE TREATED AS A SINGLE
C OCCURRENCE WHEN THE STRING IS ACTUALLY PARSED.
C
C PROGRAM HISTORY LOG:
<A NAME='PARSEQ'><A href='../../html_code/bufr/parstr.f.html#PARSEQ' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>
C 2007-01-19 J. ATOR -- BASED UPON SUBROUTINE PARSEQ,4
C
C USAGE: CALL PARSTR
(STR, TAGS, MTAG, NTAG, SEP, LIMIT80)
C INPUT ARGUMENT LIST:
C STR - CHARACTER*(*): STRING
C MTAG - INTEGER: MAXIMUM NUMBER OF SUBSTRINGS TO BE PARSED
C FROM STRING
C SEP - CHARACTER*1: SEPARATOR CHARACTER FOR SUBSTRINGS
C LIMIT80 - LOGICAL: .TRUE. IF AN ABORT SHOULD OCCUR WHEN STR IS
C LONGER THAN 80 CHARACTERS; INCLUDED FOR HISTORICAL
<A NAME='PARSEQ'><A href='../../html_code/bufr/parstr.f.html#PARSEQ' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>
C CONSISTENCY WITH OLD SUBROUTINE PARSEQ,4
C
C OUTPUT ARGUMENT LIST:
C TAGS - CHARACTER*(*): MTAG-WORD ARRAY OF SUBSTRINGS (FIRST
C NTAG WORDS FILLED)
C NTAG - INTEGER: NUMBER OF SUBSTRINGS RETURNED
C
C REMARKS:
C THIS ROUTINE CALLS: BORT2
C THIS ROUTINE IS CALLED BY: GETNTBE GETTAGPR GETTBH GETVALNB
C PARUSR READLC SEQSDX SNTBBE
C UFBSEQ UFBTAB UFBTAM WRITLC
C Normally not called by any application
C programs but it could be.
C
C ATTRIBUTES:
C LANGUAGE: FORTRAN 77
C MACHINE: PORTABLE TO ALL PLATFORMS
C
C$$$
CHARACTER*(*) STR,TAGS(MTAG)
CHARACTER*128 BORT_STR1,BORT_STR2
CHARACTER*1 SEP
LOGICAL SUBSTR,LIMIT80
C-----------------------------------------------------------------------
C-----------------------------------------------------------------------
LSTR = LEN(STR)
LTAG = LEN(TAGS(1))
IF( LIMIT80 .AND. (LSTR.GT.80) ) GOTO 900
NTAG = 0
NCHR = 0
SUBSTR = .FALSE.
DO I=1,LSTR
IF( .NOT.SUBSTR .AND. (STR(I:I).NE.SEP) ) THEN
NTAG = NTAG+1
IF(NTAG.GT.MTAG) GOTO 901
TAGS(NTAG) = ' '
ENDIF
IF( SUBSTR .AND. (STR(I:I).EQ.SEP) ) NCHR = 0
SUBSTR = STR(I:I).NE.SEP
IF(SUBSTR) THEN
NCHR = NCHR+1
IF(NCHR.GT.LTAG) GOTO 902
TAGS(NTAG)(NCHR:NCHR) = STR(I:I)
ENDIF
ENDDO
C EXITS
C -----
RETURN
900 WRITE(BORT_STR1,'("BUFRLIB: PARSTR - INPUT STRING (",A,") HAS ")')
. STR
WRITE(BORT_STR2,'(18X,"LENGTH (",I4,"), > LIMIT OF 80 CHAR.")')
. LSTR
CALL BORT2
(BORT_STR1,BORT_STR2)
901 WRITE(BORT_STR1,'("BUFRLIB: PARSTR - INPUT STRING (",A,") '//
. 'CONTAINS",I4)') STR,NTAG
WRITE(BORT_STR2,'(18X,"SUBSTRINGS, EXCEEDING THE LIMIT {",I4,'//
. '" - THIRD (INPUT) ARGUMENT}")') MTAG
CALL BORT2
(BORT_STR1,BORT_STR2)
902 WRITE(BORT_STR1,'("BUFRLIB: PARSTR - INPUT STRING (",A,") ")') STR
WRITE(BORT_STR2,'(18X,"CONTAINS A PARSED SUBSTRING WITH LENGTH '//
. 'EXCEEDING THE MAXIMUM OF",I4," CHARACTERS")') LTAG
CALL BORT2
(BORT_STR1,BORT_STR2)
END