wrf svn trunk commit r4103
[wrffire.git] / wrfv2_fire / var / external / bufr / parseq.inc
blobcf5d293abe082b7c95705c1cbb101f51b9969264
1       SUBROUTINE PARSEQ (STR, TAGS, MTAG, NTAG) 
2                                                                         
3 !$$$  SUBPROGRAM DOCUMENTATION BLOCK                                    
4 !                                                                       
5 ! SUBPROGRAM:    PARSEQ                                                 
6 !   PRGMMR: WOOLLEN          ORG: NP20       DATE: 1994-01-06           
7 !                                                                       
8 ! ABSTRACT: THIS SUBROUTINE PARSES A STRING CONTAINING ONE OR MORE      
9 !   MNEMONICS INTO AN ARRAY OF MNEMONICS.  THE MNEMONICS WITHIN THE     
10 !   STRING MUST BE SEPARATED BY ONE OR MORE BLANK CHARACTERS.           
11 !   THIS SUBROUTINE IS CONSIDERED OBSOLETE, AND APPLICATION CODES       
12 !   SHOULD NOW INSTEAD USE THE NEWER BUFR ARCHIVE LIBRARY SUBROUTINE    
13 !   PARSTR WHICH IS MORE FLEXIBLE BECAUSE IT ALLOWS FOR OTHER           
14 !   SEPARATORS BESIDES JUST THE BLANK CHARACTER.                        
15 !                                                                       
16 ! PROGRAM HISTORY LOG:                                                  
17 ! 1994-01-06  J. WOOLLEN -- ORIGINAL AUTHOR                             
18 ! 1998-07-08  J. WOOLLEN -- REPLACED CALL TO CRAY LIBRARY ROUTINE       
19 !                           "ABORT" WITH CALL TO NEW INTERNAL BUFRLIB   
20 !                           ROUTINE "BORT"                              
21 ! 2003-11-04  J. ATOR    -- ADDED DOCUMENTATION                         
22 ! 2003-11-04  S. BENDER  -- ADDED REMARKS/BUFRLIB ROUTINE               
23 !                           INTERDEPENDENCIES                           
24 ! 2003-11-04  D. KEYSER  -- UNIFIED/PORTABLE FOR WRF; ADDED HISTORY     
25 !                           DOCUMENTATION; OUTPUTS MORE COMPLETE        
26 !                           DIAGNOSTIC INFO WHEN ROUTINE TERMINATES     
27 !                           ABNORMALLY; CHANGED CALL FROM BORT TO BORT2 
28 ! 2007-01-19  J. ATOR    -- MARKED AS OBSOLETE AND ADDED PRINT          
29 !                           NOTIFICATION                                
30 !                                                                       
31 ! USAGE:    CALL PARSEQ (STR, TAGS, MTAG, NTAG)                         
32 !   INPUT ARGUMENT LIST:                                                
33 !     STR      - CHARACTER*(*): STRING                                  
34 !     MTAG     - INTEGER: MAXIMUM NUMBER OF MNEMONICS TO BE PARSED      
35 !                FROM STRING                                            
36 !                                                                       
37 !   OUTPUT ARGUMENT LIST:                                               
38 !     TAGS     - CHARACTER*(*): MTAG-WORD ARRAY OF MNEMONICS (FIRST     
39 !                NTAG WORDS FILLED)                                     
40 !     NTAG     - INTEGER: NUMBER OF MNEMONICS RETURNED                  
41 !                                                                       
42 ! REMARKS:                                                              
43 !    THIS ROUTINE CALLS:        BORT2                                   
44 !    THIS ROUTINE IS CALLED BY: None                                    
45 !                               Normally not called by any application  
46 !                               programs but it could be.               
47 !                                                                       
48 ! ATTRIBUTES:                                                           
49 !   LANGUAGE: FORTRAN 77                                                
50 !   MACHINE:  PORTABLE TO ALL PLATFORMS                                 
51 !                                                                       
52 !$$$                                                                    
53                                                                         
54       CHARACTER ( * ) STR, TAGS (MTAG) 
55       CHARACTER(128) BORT_STR1, BORT_STR2 
56       CHARACTER(80) ASTR 
57       LOGICAL WORD 
58                                                                         
59       COMMON / QUIET / IPRT 
60                                                                         
61       DATA IFIRST / 0 / 
62                                                                         
63       SAVE IFIRST 
64                                                                         
65 !-----------------------------------------------------------------------
66 !-----------------------------------------------------------------------
67                                                                         
68       IF (IFIRST.EQ.0) THEN 
69          IF (IPRT.GE.0) THEN 
70             PRINT * 
71       PRINT * , '+++++++++++++++++BUFR ARCHIVE LIBRARY++++++++++++++++++&
72      &++'                                                               
73             PRINT 101 
74   101 FORMAT(' BUFRLIB: PARSEQ - THIS SUBROUTINE IS NOW OBSOLETE; ',    &
75      & 'USE SUBROUTINE PARSTR INSTEAD')                                 
76       PRINT * , '+++++++++++++++++BUFR ARCHIVE LIBRARY++++++++++++++++++&
77      &++'                                                               
78             PRINT * 
79          ENDIF 
80          IFIRST = 1 
81       ENDIF 
82                                                                         
83       ASTR = STR 
84       LSTR = LEN (STR) 
85       LTAG = LEN (TAGS (1) ) 
86       IF (LSTR.GT.80) GOTO 900 
87       NTAG = 0 
88       NCHR = 0 
89       WORD = .FALSE. 
90                                                                         
91       DO I = 1, LSTR 
92                                                                         
93       IF (.NOT.WORD.AND.STR (I:I) .NE.' ') THEN 
94          NTAG = NTAG + 1 
95          IF (NTAG.GT.MTAG) GOTO 901 
96          TAGS (NTAG) = ' ' 
97       ENDIF 
98                                                                         
99       IF (WORD.AND.STR (I:I) .EQ.' ') NCHR = 0 
100       WORD = STR (I:I) .NE.' ' 
101                                                                         
102       IF (WORD) THEN 
103          NCHR = NCHR + 1 
104          IF (NCHR.GT.LTAG) GOTO 902 
105          TAGS (NTAG) (NCHR:NCHR) = STR (I:I) 
106       ENDIF 
107                                                                         
108       ENDDO 
109                                                                         
110 !  EXITS                                                                
111 !  -----                                                                
112                                                                         
113       RETURN 
114   900 WRITE (BORT_STR1, '("BUFRLIB: PARSEQ - INPUT STRING (",A,") HAS ")&
115      &') STR                                                            
116       WRITE (BORT_STR2, '(18X,"LENGTH (",I4,"), > LIMIT OF 80 CHAR.")') &
117       LSTR                                                              
118       CALL BORT2 (BORT_STR1, BORT_STR2) 
119   901 WRITE (BORT_STR1, '("BUFRLIB: PARSEQ - INPUT STRING (",A,") '//   &
120       'CONTAINS",I4)') STR, NTAG                                        
121       WRITE (BORT_STR2, '(18X,"MNEMONICS, THIS EXCEEDS THE LIMIT {",I4,'&
122      &//'" - THIRD (INPUT) ARGUMENT}")') MTAG                           
123       CALL BORT2 (BORT_STR1, BORT_STR2) 
124   902 WRITE (BORT_STR1, '("BUFRLIB: PARSEQ - INPUT STRING (",A,") ")')  &
125       STR                                                               
126       WRITE (BORT_STR2, '(18X,"CONTAINS A PARSED MNEMONIC WITH LENGTH '/&
127      &/'EXCEEDING THE MAXIMIM OF",I4," CHARACTERS")') LTAG              
128       CALL BORT2 (BORT_STR1, BORT_STR2) 
129       END SUBROUTINE PARSEQ