#include #include #define INLINELEN (4*8192) /* if sf is a string that ends in .f, end in .F, or vice verrsa */ int switch_little_big_f ( char s[] ) { int n ; n = strlen(s) ; if ( !strcmp( &(s[n-2]) , ".f" ) ) { s[n-1] = 'F' ; } else if ( !strcmp( &(s[n-2]) , ".F" ) ) { s[n-1] = 'f' ; } return(0) ; } int contains_str( char *s1, char *s2 ) { int i ; char *p, *q, *r ; if ( s2 == NULL || s1 == NULL ) return ( 0 ) ; if ( *s2 == '\0' || *s1 == '\0' ) return ( 0 ) ; p = s1 ; while ( *p ) { if ((r = (char *)index( p , *s2 )) == NULL ) { return( 0 ) ; } for ( q = s2 ; *q && *r == *q ; r++ , q++ ) ; if ( *q == '\0' ) return (1) ; p++ ; } return( 0 ) ; } int find_str( char *s1, char *s2, char **strp ) { int i ; char *p, *q, *r ; if ( s2 == NULL || s1 == NULL ) return ( 0 ) ; if ( *s2 == '\0' || *s1 == '\0' ) return ( 0 ) ; p = s1 ; while ( *p ) { *strp = NULL ; if ((r = (char *)index( p , *s2 )) == NULL ) { return( 0 ) ; } *strp = r ; for ( q = s2 ; *q && *r == *q ; r++ , q++ ) ; if ( *q == '\0' ) return (1) ; p++ ; } return( 0 ) ; } int contains_tok( char *s1, char *s2, char *delims ) { char *p ; char tempstr[INLINELEN] ; int i ; strcpy( tempstr , s1 ) ; p = strtok ( tempstr, delims ) ; i = 0 ; while ( p != NULL ) { if ( !strcmp ( p , s2 ) ) { return(i) ;} i++ ; p = strtok( NULL, delims ) ; } return(0) ; } int get_token_n ( char *s1, char *delims , int n, char* retval ) { char *p ; int i ; static char tempstr[INLINELEN] ; strcpy( tempstr , s1 ) ; p = strtok ( tempstr, delims ) ; i = 0 ; while ( p != NULL ) { if ( i == n ) { strcpy( retval, p ) ; return( 1 ) ; } p = strtok( NULL, delims ) ; i++ ; } return( 0 ) ; } int get_arg_n ( char *s1, int n, char *retval ) { char *p, *q ; int i, arg, inquote = -1, inparen = -1 ; static char tempstr[INLINELEN] ; char quotes[INLINELEN] ; char parens[INLINELEN] ; strcpy( tempstr , s1 ) ; strcpy( retval, "" ) ; if ( (p = index(tempstr, '(')) == NULL ) return(0) ; p++ ; arg = 0 ; while ( *p && arg < n+1 ) { q = p ; inquote = -1 ; for ( ; *p ; p++ ) { if ( *p == '\'' || *p == '"' ) { if ( inquote >= 0 ) { if ( quotes[inquote] == *p ) { inquote-- ; } else { inquote++ ; quotes[inquote] = *p ; } } else { inquote++ ; quotes[inquote] = *p ; } } if ( inquote < 0 ) { if ( *p == '(' ) inparen++ ; if ( *p == ')' ) { if ( inparen >= 0 ) { inparen-- ; } else { *p = '\0' ; arg++ ; break ;} } } if ( inquote < 0 && inparen < 0 ) { if ( *p == ',' ) { arg++ ; *p = '\0' ; p++ ; break ; } } } } if ( arg == n+1 ) { for ( ; *q ; q++ ) { if ( *q != ' ' && *q != '\t' ) break ; } strcpy( retval, q ) ; return (1) ; } else { strcpy( retval, "" ) ; return(0) ; } } int empty ( char *s ) { char *p ; for ( p = s ; *p ; p++ ) { if ( ! ( *p == ' ' || *p == '\t' || *p == '\n' ) ) return( 0 ) ; } return( 1 ) ; } remove_nl ( char *s ) { char *p ; if (( p = index( s , '\n' )) != NULL ) *p = '\0' ; } remove_comments ( char *s ) { int inquote = -1 ; char quotes[INLINELEN] ; char *p ; for ( p = s ; *p ; p++ ) { if ( *p == '\'' || *p == '"' ) { if ( inquote >= 0 ) { if ( quotes[inquote] == *p ) { inquote-- ; } else { inquote++ ; quotes[inquote] = *p ; } } else { inquote++ ; quotes[inquote] = *p ; } } if ( inquote < 0 ) { if ( *p == '!' ) { *p = '\0' ; break ; } } } } int remove_chars ( char *s, char *r, char replace ) { int inquote = -1 ; int retval = 0 ; char quotes[INLINELEN] ; char *p, *q ; for ( p = s ; *p ; p++ ) { if ( *p == '\'' || *p == '"' ) { if ( inquote >= 0 ) { if ( quotes[inquote] == *p ) { inquote-- ; } else { inquote++ ; quotes[inquote] = *p ; } } else { inquote++ ; quotes[inquote] = *p ; } } if ( inquote < 0 ) { for ( q = r ; *q ; q++ ) { if ( *p == *q ) { *p = replace ; retval = 1 ; } } } } return(retval) ; } int remove_whitespace ( char *s ) { char *p, *q ; for ( p = s, q = s ; *p ; p++ ) { if ( ! (*p == ' ' || *p == '\t') ) { *q++ = *p ; } } *q = '\0' ; return(0) ; } int iswhite( char *s ) { char *p ; for ( p = s ; *p ; p++ ) if ( *p != ' ' && *p != '\t' ) return(0) ; return(1) ; } int remove_ampersands ( char *s ) { char * p, * q ; int retval ; if (( p = rindex ( s, '&' )) != NULL ) { if ( iswhite( p+1 ) ) retval = 1 ; else retval = 0 ; } else { retval = 0 ; } remove_chars ( s , "&", ' ' ) ; return(retval) ; } lower_case_str ( char *s ) { char * p ; for ( p = s ; *p ; p++ ) { if ( *p >= 'A' && *p <= 'Z' ) *p = *p - 'A' + 'a' ; } } upper_case_str ( char *s ) { char * p ; for ( p = s ; *p ; p++ ) { if ( *p >= 'a' && *p <= 'z' ) *p = *p - 'a' + 'A' ; } }