1 /*
2  * This file has been modified for the cdrkit suite.
3  *
4  * The behaviour and appearence of the program code below can differ to a major
5  * extent from the version distributed by the original author(s).
6  *
7  * For details, see Changelog file distributed with the cdrkit package. If you
8  * received this file from another source then ask the distributing person for
9  * a log of modifications.
10  *
11  */
12 
13 /* @(#)patmatch.h	1.10 03/08/24 Copyright 1985 J. Schilling */
14 
15 #ifndef	_PATMATCH_H
16 #define	_PATMATCH_H
17 /*
18  *	Definitions for the pattern matching functions.
19  *
20  *	Copyright (c) 1985,1995 J. Schilling
21  */
22 /*
23  * This program is free software; you can redistribute it and/or modify
24  * it under the terms of the GNU General Public License version 2
25  * as published by the Free Software Foundation.
26  *
27  * This program is distributed in the hope that it will be useful,
28  * but WITHOUT ANY WARRANTY; without even the implied warranty of
29  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
30  * GNU General Public License for more details.
31  *
32  * You should have received a copy of the GNU General Public License along with
33  * this program; see the file COPYING.  If not, write to the Free Software
34  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
35  */
36 /*
37  *	The pattern matching functions are based on the algorithm
38  *	presented by Martin Richards in:
39  *
40  *	"A Compact Function for Regular Expression Pattern Matching",
41  *	Software-Practice and Experience, Vol. 9, 527-534 (1979)
42  *
43  *	Several changes have been made to the original source which has been
44  *	written in BCPL:
45  *
46  *	'/'	is replaced by	'!'		(to allow UNIX filenames)
47  *	'(',')' are replaced by	'{', '}'
48  *	'\''	is replaced by	'\\'		(UNIX compatible quote)
49  *
50  *	Character classes have been added to allow "[<character list>]"
51  *	to be used.
52  *	Start of line '^' and end of line '$' have been added.
53  *
54  *	Any number in the following comment is zero or more occurrencies
55  */
56 #ifndef _MCONFIG_H
57 #include <mconfig.h>
58 #endif
59 #ifndef _PROTOTYP_H
60 #include <prototyp.h>
61 #endif
62 
63 #ifdef	__cplusplus
64 extern "C" {
65 #endif
66 
67 #define	ALT	'!'	/* Alternation in match i.e. this!that!the_other */
68 #define	REP	'#'	/* Any number of occurrences of the following expr */
69 #define	NIL	'%'	/* Empty string (exactly nothing) */
70 #define	STAR	'*'	/* Any number of any character (equivalent of #?) */
71 #define	ANY	'?'	/* Any one character */
72 #define	QUOTE	'\\'	/* Quotes the next character */
73 #define	LBRACK	'{'	/* Begin of precedence grouping */
74 #define	RBRACK	'}'	/* End of precedence grouping */
75 #define	LCLASS	'['	/* Begin of character set */
76 #define	RCLASS	']'	/* End of character set */
77 #define	NOT	'^'	/* If first in set: invert set content */
78 #define	RANGE	'-'	/* Range notation in sets */
79 #define	START	'^'	/* Begin of a line */
80 #define	END	'$'	/* End of a line */
81 
82 /*
83  * A list of case statements that may be used for a issimple() or ispattern()
84  * funtion that checks whether a string conrtains characters that need the
85  * pattern matcher.
86  *
87  * Note that this list does not contain NOT or RANGE because you need
88  * LCLASS and RCLASS in addition.
89  */
90 #define	casePAT	case ALT: case REP: case NIL: case STAR: case ANY:	\
91 		case QUOTE: case LBRACK: case RBRACK:			\
92 		case LCLASS: case RCLASS: case START: case END:
93 
94 
95 #define	MAXPAT	128	/* Maximum length of pattern */
96 
97 extern	int patcompile(const unsigned char *__pat, int __patlen, int *__aux);
98 
99 extern	unsigned char *opatmatch(const unsigned char *__pat, const int *__aux,
100 											 const unsigned char *__str, int __soff,
101 											 int __slen, int __alt);
102 extern	unsigned char *opatlmatch(const unsigned char *__pat, const int *__aux,
103 											  const unsigned char *__str, int __soff,
104 											  int __slen, int __alt);
105 extern	unsigned char *patmatch(const unsigned char *__pat, const int *__aux,
106 											const unsigned char *__str, int __soff,
107 											int __slen, int __alt, int __state[]);
108 extern	unsigned char *patlmatch(const unsigned char *__pat, const int *__aux,
109 											 const unsigned char *__str, int __soff,
110 											 int __slen, int __alt, int __state[]);
111 
112 #ifdef	__cplusplus
113 }
114 #endif
115 
116 #endif	/* _PATMATCH_H */
117