/* EPSHeader File: match.h Author: J. Kercheval Created: Sat, 01/05/1991 22:27:18 */ /* EPSRevision History J. Kercheval Wed, 02/20/1991 22:28:37 Released to Public Domain J. Kercheval Sun, 03/10/1991 18:02:56 add is_valid_pattern J. Kercheval Sun, 03/10/1991 18:25:48 add error_type in is_valid_pattern J. Kercheval Sun, 03/10/1991 18:47:47 error return from matche() J. Kercheval Tue, 03/12/1991 22:24:49 Released as V1.1 to Public Domain */ /* Wildcard Pattern Matching */ #ifndef BOOLEAN # define BOOLEAN int # define TRUE 1 # define FALSE 0 #endif /* match defines */ #define MATCH_PATTERN 6 /* bad pattern */ #define MATCH_LITERAL 5 /* match failure on literal match */ #define MATCH_RANGE 4 /* match failure on [..] construct */ #define MATCH_ABORT 3 /* premature end of text string */ #define MATCH_END 2 /* premature end of pattern string */ #define MATCH_VALID 1 /* valid match */ /* pattern defines */ #define PATTERN_VALID 0 /* valid pattern */ #define PATTERN_ESC -1 /* literal escape at end of pattern */ #define PATTERN_RANGE -2 /* malformed range in [..] construct */ #define PATTERN_CLOSE -3 /* no end bracket in [..] construct */ #define PATTERN_EMPTY -4 /* [..] contstruct is empty */ /*---------------------------------------------------------------------------- * * Match the pattern PATTERN against the string TEXT; * * match() returns TRUE if pattern matches, FALSE otherwise. * matche() returns MATCH_VALID if pattern matches, or an errorcode * as follows otherwise: * * MATCH_PATTERN - bad pattern * MATCH_LITERAL - match failure on literal mismatch * MATCH_RANGE - match failure on [..] construct * MATCH_ABORT - premature end of text string * MATCH_END - premature end of pattern string * MATCH_VALID - valid match * * * A match means the entire string TEXT is used up in matching. * * In the pattern string: * `*' matches any sequence of characters (zero or more) * `?' matches any character * [SET] matches any character in the specified set, * [!SET] or [^SET] matches any character not in the specified set. * * A set is composed of characters or ranges; a range looks like * character hyphen character (as in 0-9 or A-Z). [0-9a-zA-Z_] is the * minimal set of characters allowed in the [..] pattern construct. * Other characters are allowed (ie. 8 bit characters) if your system * will support them. * * To suppress the special syntactic significance of any of `[]*?!^-\', * and match the character exactly, precede it with a `\'. * ----------------------------------------------------------------------------*/ BOOLEAN match (char *pattern, char *text); int matche(register char *pattern, register char *text); /*---------------------------------------------------------------------------- * * Return TRUE if PATTERN has any special wildcard characters * ----------------------------------------------------------------------------*/ BOOLEAN is_pattern (char *pattern); /*---------------------------------------------------------------------------- * * Return TRUE if PATTERN has is a well formed regular expression according * to the above syntax * * error_type is a return code based on the type of pattern error. Zero is * returned in error_type if the pattern is a valid one. error_type return * values are as follows: * * PATTERN_VALID - pattern is well formed * PATTERN_ESC - pattern has invalid escape ('\' at end of pattern) * PATTERN_RANGE - [..] construct has a no end range in a '-' pair (ie [a-]) * PATTERN_CLOSE - [..] construct has no end bracket (ie [abc-g ) * PATTERN_EMPTY - [..] construct is empty (ie []) * ----------------------------------------------------------------------------*/ BOOLEAN is_valid_pattern (char *pattern, int *error_type);