1/*
2 * Copyright (c) 2002 by The XFree86 Project, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17 * THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
19 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 *
22 * Except as contained in this notice, the name of the XFree86 Project shall
23 * not be used in advertising or otherwise to promote the sale, use or other
24 * dealings in this Software without prior written authorization from the
25 * XFree86 Project.
26 *
27 * Author: Paulo César Pereira de Andrade
28 */
29
30/* $XFree86: xc/programs/xedit/lisp/re/re.h,v 1.1 2002/09/08 02:29:50 paulo Exp $ */
31
32#include <stdlib.h>
33#include <string.h>
34#include <ctype.h>
35
36#ifndef _re_h
37#define _re_h
38
39/*
40 * Defines
41 */
42
43	/* Compile flags options */
44#define REG_BASIC		0000	/* Not used */
45#define REG_EXTENDED		0001	/* Not used, only extended supported */
46
47#define RE_ICASE		0002
48#define RE_NOSUB		0004
49#define RE_NEWLINE		0010
50#define RE_NOSPEC		0020
51#define RE_PEND			0040
52#define RE_DUMP			0200
53
54
55
56	/* Execute flag options */
57#define RE_NOTBOL		1
58#define RE_NOTEOL		2
59#define RE_STARTEND		4
60#define RE_TRACE		00400	/* Not used/supported */
61#define RE_LARGE		01000	/* Not used/supported */
62#define RE_BACKR		02000	/* Not used/supported */
63
64	/* Value returned by reexec when match fails */
65#define RE_NOMATCH		1
66	/* Compile error values */
67#define RE_BADPAT		2
68#define RE_ECOLLATE		3
69#define RE_ECTYPE		4
70#define RE_EESCAPE		5
71#define RE_ESUBREG		6
72#define RE_EBRACK		7
73#define RE_EPAREN		8
74#define RE_EBRACE		9
75#define RE_EBADBR		10
76#define RE_ERANGE		11
77#define RE_ESPACE		12
78#define RE_BADRPT		13
79#define RE_EMPTY		14
80#define RE_ASSERT		15
81#define RE_INVARG		16
82#define RE_ATOI			255	/* Not used/supported */
83#define RE_ITOA			0400	/* Not used/supported */
84
85
86/*
87 * Types
88 */
89
90/* (re)gular expression (mat)ch result */
91typedef struct _re_mat {
92    long rm_so;
93    long rm_eo;
94} re_mat;
95
96/* (re)gular expression (cod)e */
97typedef struct _re_cod {
98    unsigned char *cod;
99    int re_nsub;		/* Public member */
100    const char *re_endp;	/* Support for RE_PEND */
101} re_cod;
102
103
104/*
105 * Prototypes
106 */
107	/* compile the given pattern string
108	 * returns 0 on success, error code otherwise */
109int recomp(re_cod *preg, const char *pattern, int flags);
110
111	/* execute the compiled pattern on the string.
112	 * returns 0 if matched, RE_NOMATCH if failed, error code otherwise */
113int reexec(const re_cod *preg, const char *string,
114	   int nmat, re_mat pmat[], int flags);
115
116	/* formats an error message for the given code in ebuffer */
117int reerror(int ecode, const re_cod *preg, char *ebuffer, int ebuffer_size);
118
119	/* frees the given parameter */
120void refree(re_cod *preg);
121
122
123#endif /* _re_h */
124