1 /* @(#)patmatch.h	1.16 17/07/02 Copyright 1985,1993-2017 J. Schilling */
2 
3 #ifndef	_SCHILY_PATMATCH_H
4 #define	_SCHILY_PATMATCH_H
5 /*
6  *	Definitions for the pattern matching functions.
7  *
8  *	Copyright (c) 1985,1993-2017 J. Schilling
9  */
10 /*
11  * The contents of this file are subject to the terms of the
12  * Common Development and Distribution License, Version 1.0 only
13  * (the "License").  You may not use this file except in compliance
14  * with the License.
15  *
16  * See the file CDDL.Schily.txt in this distribution for details.
17  * A copy of the CDDL is also available via the Internet at
18  * http://www.opensource.org/licenses/cddl1.txt
19  *
20  * When distributing Covered Code, include this CDDL HEADER in each
21  * file and include the License file CDDL.Schily.txt from this distribution.
22  */
23 /*
24  *	The pattern matching functions are based on the algorithm
25  *	presented by Martin Richards in:
26  *
27  *	"A Compact Function for Regular Expression Pattern Matching",
28  *	Software-Practice and Experience, Vol. 9, 527-534 (1979)
29  *
30  *	Several changes have been made to the original source which has been
31  *	written in BCPL:
32  *
33  *	'/'	is replaced by	'!'		(to allow UNIX filenames)
34  *	'(',')' are replaced by	'{', '}'
35  *	'\''	is replaced by	'\\'		(UNIX compatible quote)
36  *
37  *	Character classes have been added to allow "[<character list>]"
38  *	to be used.
39  *	Start of line '^' and end of line '$' have been added.
40  *
41  *	Any number in the following comment is zero or more occurrencies
42  */
43 #ifndef _SCHILY_MCONFIG_H
44 #include <schily/mconfig.h>
45 #endif
46 
47 #ifdef	__cplusplus
48 extern "C" {
49 #endif
50 
51 #define	ALT	'!'	/* Alternation in match i.e. this!that!the_other */
52 #define	REP	'#'	/* Any number of occurrences of the following expr */
53 #define	NIL	'%'	/* Empty string (exactly nothing) */
54 #define	STAR	'*'	/* Any number of any character (equivalent of #?) */
55 #define	ANY	'?'	/* Any one character */
56 #define	QUOTE	'\\'	/* Quotes the next character */
57 #define	LBRACK	'{'	/* Begin of precedence grouping */
58 #define	RBRACK	'}'	/* End of precedence grouping */
59 #define	LCLASS	'['	/* Begin of character set */
60 #define	RCLASS	']'	/* End of character set */
61 #define	NOT	'^'	/* If first in set: invert set content */
62 #define	RANGE	'-'	/* Range notation in sets */
63 #define	START	'^'	/* Begin of a line */
64 #define	END	'$'	/* End of a line */
65 
66 /*
67  * A list of case statements that may be used for a issimple() or ispattern()
68  * funtion that checks whether a string conrtains characters that need the
69  * pattern matcher.
70  *
71  * Note that this list does not contain NOT or RANGE because you need
72  * LCLASS and RCLASS in addition.
73  */
74 #define	casePAT	case ALT: case REP: case NIL: case STAR: case ANY:	\
75 		case QUOTE: case LBRACK: case RBRACK:			\
76 		case LCLASS: case RCLASS: case START: case END:
77 
78 
79 #define	MAXPAT	128	/* Max length of pattern for opatmatch()/opatlmatch() */
80 
81 extern	int	    patcompile	__PR((const unsigned char *__pat, int __patlen,
82 						int *__aux));
83 
84 extern	unsigned char *opatmatch	__PR((const unsigned char *__pat,
85 						const int *__aux,
86 						const  unsigned char *__str,
87 						int __soff, int __slen,
88 						int __alt));
89 extern	unsigned char *opatlmatch __PR((const unsigned char *__pat,
90 						const int *__aux,
91 						const  unsigned char *__str,
92 						int __soff, int __slen,
93 						int __alt));
94 extern	unsigned char *patmatch	__PR((const unsigned char *__pat,
95 						const int *__aux,
96 						const  unsigned char *__str,
97 						int __soff, int __slen,
98 						int __alt, int __state[]));
99 extern	unsigned char *patlmatch __PR((const unsigned char *__pat,
100 						const int *__aux,
101 						const  unsigned char *__str,
102 						int __soff, int __slen,
103 						int __alt, int __state[]));
104 
105 #ifdef	__cplusplus
106 }
107 #endif
108 
109 #ifdef	_SCHILY_WCHAR_H
110 
111 #ifdef	__cplusplus
112 extern "C" {
113 #endif
114 
115 extern	int	patwcompile	__PR((const wchar_t *__pat, int __patlen,
116 						int *__aux));
117 extern	wchar_t	*patwmatch	__PR((const wchar_t *__pat, const int *__aux,
118 						const  wchar_t *__str,
119 						int __soff, int __slen,
120 						int __alt, int __state[]));
121 extern	wchar_t	*patwlmatch	__PR((const wchar_t *__pat, const int *__aux,
122 						const  wchar_t *__str,
123 						int __soff, int __slen,
124 						int __alt, int __state[]));
125 
126 extern	unsigned char *patmbmatch __PR((const wchar_t *__pat,
127 						const int *__aux,
128 						const  unsigned char *__str,
129 						int __soff, int __slen,
130 						int __alt, int __state[]));
131 extern	unsigned char *patmblmatch __PR((const wchar_t *__pat,
132 						const int *__aux,
133 						const  unsigned char *__str,
134 						int __soff, int __slen,
135 						int __alt, int __state[]));
136 
137 
138 #ifdef	__cplusplus
139 }
140 #endif
141 #endif	/* _SCHILY_WCHAR_H */
142 
143 #endif	/* _SCHILY_PATMATCH_H */
144