1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/* : : generated by proto : : */
/***********************************************************************
* *
* This software is part of the ast package *
* Copyright (c) 1985-2010 AT&T Intellectual Property *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Intellectual Property *
* *
* A copy of the License is available at *
* http://www.opensource.org/licenses/cpl1.0.txt *
* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
* *
* Information and Software Systems Research *
* AT&T Research *
* Florham Park NJ *
* *
* Glenn Fowler <gsf@research.att.com> *
* David Korn <dgk@research.att.com> *
* Phong Vo <kpv@research.att.com> *
* *
***********************************************************************/
/*
* regexp interface and partial implementation
* what a novel approach
* don't do it again
*
* OBSOLETE: use <regex.h>
*/
#ifndef _REGEXP_H
#if !defined(__PROTO__)
#include <prototyped.h>
#endif
#if !defined(__LINKAGE__)
#define __LINKAGE__ /* 2004-08-11 transition */
#endif
#define _REGEXP_H
#define NBRA 9
typedef struct
{
char* re_braslist[NBRA];
char* re_braelist[NBRA];
char* re_loc1;
char* re_loc2;
char* re_locs;
int re_circf;
int re_nbra;
int re_nodelim;
int re_sed;
} regexp_t;
#define braslist _re_info.re_braslist
#define braelist _re_info.re_braelist
#define circf _re_info.re_circf
#define loc1 _re_info.re_loc1
#define loc2 _re_info.re_loc2
#define locs _re_info.re_locs
#define nbra _re_info.re_nbra
#define nodelim _re_info.re_nodelim
#define sed _re_info.re_sed
#define advance(a,b) _re_exec(&_re_info,a,b,1)
#define compile(a,b,c,d) _re_read(&_re_info,a,b,c,d)
#define step(a,b) _re_exec(&_re_info,a,b,0)
#if _BLD_ast && defined(__EXPORT__)
#undef __MANGLE__
#define __MANGLE__ __LINKAGE__ __EXPORT__
#endif
extern __MANGLE__ int _re_comp __PROTO__((regexp_t*, const char*, char*, unsigned int));
extern __MANGLE__ int _re_exec __PROTO__((regexp_t*, const char*, const char*, int));
extern __MANGLE__ char* _re_putc __PROTO__((int));
extern __MANGLE__ char* _re_read __PROTO__((regexp_t*, const char*, char*, const char*, int));
#undef __MANGLE__
#define __MANGLE__ __LINKAGE__
#ifndef _REGEXP_DECLARE
regexp_t _re_info;
char*
_re_read __PARAM__((register regexp_t* re, const char* instring, char* ep, const char* endbuf, int seof), (re, instring, ep, endbuf, seof)) __OTORP__(register regexp_t* re; const char* instring; char* ep; const char* endbuf; int seof;){
register int c;
static const char* prev;
#ifdef INIT
INIT;
#endif
re->re_nodelim = 0;
if ((c = GETC()) == seof || c == '\n' || c == -1 || c == 0)
{
if (c != seof)
{
UNGETC(c);
re->re_nodelim = 1;
}
if (!re->re_sed && !prev)
{ ERROR(41); }
RETURN((char*)endbuf);
}
UNGETC(c);
prev = 0;
for (;;)
{
if ((c = GETC()) == seof || c == '\n' || c == -1 || c == 0)
{
if (re->re_sed)
{ ERROR(36); }
UNGETC(c);
re->re_nodelim = 1;
break;
}
if (c == '\\')
{
_re_putc(c);
if ((c = GETC()) == seof || c == '\n' || c == -1 || c == 0)
{ ERROR(36); }
}
_re_putc(c);
}
if (c = _re_comp(re, _re_putc(0), ep, (char*)endbuf - ep))
{ ERROR(c); }
prev = endbuf;
RETURN((char*)prev);
}
#endif
#endif
|