source: lmdz_wrf/trunk/WRFV3/tools/CodeBase/util.c

Last change on this file was 1, checked in by lfita, 10 years ago
  • -- --- Opening of the WRF+LMDZ coupling repository --- -- -

WRF: version v3.3
LMDZ: version v1818

More details in:

File size: 5.2 KB
Line 
1#include <stdio.h>
2#include <string.h>
3
4#define INLINELEN (4*8192)
5
6/* if sf is a string that ends in .f, end in .F, or vice verrsa */
7
8int switch_little_big_f ( char s[] ) 
9{
10  int n ;
11  n = strlen(s) ;
12  if      ( !strcmp( &(s[n-2]) , ".f" ) ) { s[n-1] = 'F' ; }
13  else if ( !strcmp( &(s[n-2]) , ".F" ) ) { s[n-1] = 'f' ; }
14  return(0) ;
15}
16
17int contains_str( char *s1, char *s2 )
18{
19  int i ;
20  char *p, *q, *r ;
21  if ( s2 == NULL || s1 == NULL ) return ( 0 ) ;
22  if ( *s2 == '\0' || *s1 == '\0' ) return ( 0 ) ;
23  p = s1 ;
24  while ( *p ) {
25    if ((r = (char *)index( p , *s2 )) == NULL ) { return( 0 ) ; }
26    for ( q = s2 ; *q && *r == *q ; r++ , q++ )  ;
27    if ( *q == '\0' ) return (1) ;
28    p++ ;
29  }
30  return( 0 ) ;
31}
32
33int
34find_str( char *s1, char *s2, char **strp )
35{
36  int i ;
37  char *p, *q, *r ;
38  if ( s2 == NULL || s1 == NULL ) return ( 0 ) ;
39  if ( *s2 == '\0' || *s1 == '\0' ) return ( 0 ) ;
40  p = s1 ;
41  while ( *p ) {
42    *strp = NULL ;
43    if ((r = (char *)index( p , *s2 )) == NULL ) { return( 0 ) ; }
44    *strp = r ;
45    for ( q = s2 ; *q && *r == *q ; r++ , q++ )  ;
46    if ( *q == '\0' ) return (1) ;
47    p++ ;
48  }
49  return( 0 ) ;
50}
51
52
53int contains_tok( char *s1, char *s2, char *delims )
54{
55  char *p ;
56  char tempstr[INLINELEN] ;
57  int i ;
58
59  strcpy( tempstr , s1 ) ;
60  p = strtok ( tempstr, delims ) ;
61  i = 0 ;
62  while ( p != NULL )
63  {
64    if ( !strcmp ( p , s2 ) ) {  return(i) ;}
65    i++ ;
66    p = strtok( NULL, delims ) ;
67  }
68  return(0) ;
69}
70
71int
72get_token_n ( char *s1, char *delims , int n, char* retval )
73{
74  char *p ;
75  int i ;
76  static char tempstr[INLINELEN] ;
77  strcpy( tempstr , s1 ) ;
78  p = strtok ( tempstr, delims ) ;
79  i = 0 ;
80  while ( p != NULL )
81  {
82    if ( i == n ) { strcpy( retval, p ) ; return( 1 ) ; }
83    p = strtok( NULL, delims ) ;
84    i++ ;
85  }
86  return( 0 ) ;
87}
88
89int
90get_arg_n ( char *s1, int n, char *retval )
91{
92  char *p, *q ;
93  int i, arg, inquote = -1, inparen = -1 ;
94  static char tempstr[INLINELEN] ;
95  char quotes[INLINELEN] ;
96  char parens[INLINELEN] ;
97  strcpy( tempstr , s1 ) ;
98  strcpy( retval, "" ) ;
99
100  if ( (p = index(tempstr, '(')) == NULL ) return(0) ;
101  p++ ;
102  arg = 0 ;
103  while ( *p && arg < n+1 ) {
104    q = p ;
105    inquote = -1 ;
106    for ( ; *p ; p++ )
107    {
108      if ( *p == '\'' || *p == '"' ) {
109        if ( inquote >= 0 ) {
110          if ( quotes[inquote] == *p ) {
111            inquote-- ;
112          } else {
113            inquote++ ;
114            quotes[inquote] = *p ;
115          }
116        } else {
117          inquote++ ;
118          quotes[inquote] = *p ;
119        }
120      }
121      if ( inquote < 0 ) {
122        if ( *p == '(' ) inparen++ ;
123        if ( *p == ')' ) {
124          if  ( inparen >= 0 ) { inparen-- ; }
125          else                 { *p = '\0' ; arg++ ; break ;}
126        }
127      }
128      if ( inquote < 0 && inparen < 0 ) {
129        if ( *p == ',' ) { arg++ ; *p = '\0' ; p++ ; break ; }
130      }
131    }
132  }
133  if ( arg == n+1 ) {
134    for ( ; *q ; q++ ) { if ( *q != ' ' && *q != '\t' ) break ; }
135    strcpy( retval, q ) ;
136    return (1) ;
137  } else {
138    strcpy( retval, "" ) ;
139    return(0) ;
140  }
141}
142
143int
144empty ( char *s )
145{
146  char *p ;
147  for ( p = s ; *p ; p++ )
148  {
149    if ( ! ( *p == ' ' || *p == '\t' || *p == '\n' ) ) return( 0 ) ;
150  }
151  return( 1 ) ;
152}
153
154remove_nl ( char *s )
155{
156  char *p ;
157  if (( p = index( s , '\n' )) != NULL ) *p = '\0' ; 
158}
159
160
161remove_comments ( char *s )
162{
163  int inquote = -1 ;
164  char quotes[INLINELEN] ;
165  char *p ;
166  for ( p = s ; *p ; p++ )
167  {
168    if ( *p == '\'' || *p == '"' ) { 
169      if ( inquote >= 0 ) { 
170        if ( quotes[inquote] == *p ) {
171          inquote-- ;
172        } else {
173          inquote++ ; 
174          quotes[inquote] = *p ;
175        }
176      } else {
177        inquote++ ; 
178        quotes[inquote] = *p ;
179      }
180    }
181    if ( inquote < 0 ) {
182      if ( *p == '!' ) { *p = '\0' ; break ; }
183    }
184  }
185}
186
187int
188remove_chars ( char *s, char *r, char replace )
189{
190  int inquote = -1 ;
191  int retval = 0 ;
192  char quotes[INLINELEN] ;
193  char *p, *q ;
194  for ( p = s ; *p ; p++ )
195  {
196    if ( *p == '\'' || *p == '"' ) {
197      if ( inquote >= 0 ) {
198        if ( quotes[inquote] == *p ) {
199          inquote-- ;
200        } else {
201          inquote++ ;
202          quotes[inquote] = *p ;
203        }
204      } else {
205        inquote++ ;
206        quotes[inquote] = *p ;
207      }
208    }
209    if ( inquote < 0 ) {
210      for ( q = r ; *q ; q++ ) {
211        if ( *p == *q ) { *p = replace ; retval = 1 ; }
212      }
213    }
214  }
215  return(retval) ;
216}
217
218int
219remove_whitespace ( char *s )
220{
221  char *p, *q ;
222  for ( p = s, q = s ; *p ; p++ )
223  {
224    if ( ! (*p == ' ' || *p == '\t') ) {
225      *q++ = *p ;
226    }
227  }
228  *q = '\0' ;
229  return(0) ;
230}
231
232
233int
234iswhite( char *s )
235{
236  char *p ; 
237  for ( p = s ; *p ; p++ ) if ( *p != ' ' && *p != '\t' ) return(0) ;
238  return(1) ;
239}
240
241int
242remove_ampersands ( char *s )
243{
244  char * p, * q ; 
245  int retval ;
246  if (( p = rindex ( s, '&' )) != NULL )
247  {
248    if ( iswhite( p+1 ) ) retval = 1 ;
249    else                retval = 0 ;
250  }
251  else
252  {
253    retval = 0 ;
254  }
255  remove_chars ( s , "&", ' ' ) ;
256  return(retval) ;
257}
258
259lower_case_str ( char *s ) 
260{
261  char * p ;
262  for ( p = s ; *p ; p++ )
263  {
264    if ( *p >= 'A' && *p <= 'Z' ) *p = *p - 'A' + 'a' ;
265  }
266}
267
268upper_case_str ( char *s ) 
269{
270  char * p ;
271  for ( p = s ; *p ; p++ )
272  {
273    if ( *p >= 'a' && *p <= 'z' ) *p = *p - 'a' + 'A' ;
274  }
275}
Note: See TracBrowser for help on using the repository browser.