14887Schin
24887Schin /* : : generated by proto : : */
34887Schin /***********************************************************************
44887Schin * *
54887Schin * This software is part of the ast package *
6*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property *
74887Schin * and is licensed under the *
84887Schin * Common Public License, Version 1.0 *
98462SApril.Chin@Sun.COM * by AT&T Intellectual Property *
104887Schin * *
114887Schin * A copy of the License is available at *
124887Schin * http://www.opensource.org/licenses/cpl1.0.txt *
134887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
144887Schin * *
154887Schin * Information and Software Systems Research *
164887Schin * AT&T Research *
174887Schin * Florham Park NJ *
184887Schin * *
194887Schin * Glenn Fowler <gsf@research.att.com> *
204887Schin * David Korn <dgk@research.att.com> *
214887Schin * Phong Vo <kpv@research.att.com> *
224887Schin * *
234887Schin ***********************************************************************/
244887Schin
254887Schin /*
264887Schin * regexp interface and partial implementation
274887Schin * what a novel approach
284887Schin * don't do it again
294887Schin *
304887Schin * OBSOLETE: use <regex.h>
314887Schin */
324887Schin
334887Schin #ifndef _REGEXP_H
344887Schin #if !defined(__PROTO__)
354887Schin #include <prototyped.h>
364887Schin #endif
374887Schin #if !defined(__LINKAGE__)
384887Schin #define __LINKAGE__ /* 2004-08-11 transition */
394887Schin #endif
404887Schin
414887Schin #define _REGEXP_H
424887Schin
434887Schin #define NBRA 9
444887Schin
454887Schin typedef struct
464887Schin {
474887Schin char* re_braslist[NBRA];
484887Schin char* re_braelist[NBRA];
494887Schin char* re_loc1;
504887Schin char* re_loc2;
514887Schin char* re_locs;
524887Schin int re_circf;
534887Schin int re_nbra;
544887Schin int re_nodelim;
554887Schin int re_sed;
564887Schin } regexp_t;
574887Schin
584887Schin #define braslist _re_info.re_braslist
594887Schin #define braelist _re_info.re_braelist
604887Schin #define circf _re_info.re_circf
614887Schin #define loc1 _re_info.re_loc1
624887Schin #define loc2 _re_info.re_loc2
634887Schin #define locs _re_info.re_locs
644887Schin #define nbra _re_info.re_nbra
654887Schin #define nodelim _re_info.re_nodelim
664887Schin #define sed _re_info.re_sed
674887Schin
684887Schin #define advance(a,b) _re_exec(&_re_info,a,b,1)
694887Schin #define compile(a,b,c,d) _re_read(&_re_info,a,b,c,d)
704887Schin #define step(a,b) _re_exec(&_re_info,a,b,0)
714887Schin
724887Schin #if _BLD_ast && defined(__EXPORT__)
734887Schin #undef __MANGLE__
744887Schin #define __MANGLE__ __LINKAGE__ __EXPORT__
754887Schin #endif
764887Schin
774887Schin extern __MANGLE__ int _re_comp __PROTO__((regexp_t*, const char*, char*, unsigned int));
784887Schin extern __MANGLE__ int _re_exec __PROTO__((regexp_t*, const char*, const char*, int));
794887Schin extern __MANGLE__ char* _re_putc __PROTO__((int));
804887Schin extern __MANGLE__ char* _re_read __PROTO__((regexp_t*, const char*, char*, const char*, int));
814887Schin
824887Schin #undef __MANGLE__
834887Schin #define __MANGLE__ __LINKAGE__
844887Schin
854887Schin #ifndef _REGEXP_DECLARE
864887Schin
874887Schin regexp_t _re_info;
884887Schin
894887Schin char*
__OTORP__(register regexp_t * re;const char * instring;char * ep;const char * endbuf;int seof;)904887Schin _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;){
914887Schin register int c;
924887Schin
934887Schin static const char* prev;
944887Schin
954887Schin #ifdef INIT
964887Schin INIT;
974887Schin #endif
984887Schin
994887Schin re->re_nodelim = 0;
1004887Schin if ((c = GETC()) == seof || c == '\n' || c == -1 || c == 0)
1014887Schin {
1024887Schin if (c != seof)
1034887Schin {
1044887Schin UNGETC(c);
1054887Schin re->re_nodelim = 1;
1064887Schin }
1074887Schin if (!re->re_sed && !prev)
1084887Schin { ERROR(41); }
1094887Schin RETURN((char*)endbuf);
1104887Schin }
1114887Schin UNGETC(c);
1124887Schin prev = 0;
1134887Schin for (;;)
1144887Schin {
1154887Schin if ((c = GETC()) == seof || c == '\n' || c == -1 || c == 0)
1164887Schin {
1174887Schin if (re->re_sed)
1184887Schin { ERROR(36); }
1194887Schin UNGETC(c);
1204887Schin re->re_nodelim = 1;
1214887Schin break;
1224887Schin }
1234887Schin if (c == '\\')
1244887Schin {
1254887Schin _re_putc(c);
1264887Schin if ((c = GETC()) == seof || c == '\n' || c == -1 || c == 0)
1274887Schin { ERROR(36); }
1284887Schin }
1294887Schin _re_putc(c);
1304887Schin }
1314887Schin if (c = _re_comp(re, _re_putc(0), ep, (char*)endbuf - ep))
1324887Schin { ERROR(c); }
1334887Schin prev = endbuf;
1344887Schin RETURN((char*)prev);
1354887Schin }
1364887Schin
1374887Schin #endif
1384887Schin
1394887Schin #endif
140