Plan 9 from Bell Labs’s /usr/web/sources/patch/ape-erik/regexp.h

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#ifndef __REGEXP_H
#define __REGEXP_H
#ifndef _REGEXP_EXTENSION
    This header file is an extension to ANSI/POSIX
#endif
#pragma lib "/$M/lib/ape/libregexp.a"

#ifdef	UTF
#define	Runeself	0xA0
#else
#define	Runeself	0
#endif

typedef struct Resub		Resub;
typedef struct Reclass		Reclass;
typedef struct Reinst		Reinst;
typedef struct Reprog		Reprog;

/*
 *	Sub expression matches
 */
struct Resub{
	union
	{
		char *sp;
		wchar_t *rsp;
	} s;
	union
	{
		char *ep;
		wchar_t *rep;
	} e;
};

/*
 *	character class, each pair of rune's defines a range
 */
enum{
	NCCRUNE	= 256,
	NCLASS	= 16,
	NINST		= 5,

};

struct Reclass{
	wchar_t	*end;
	wchar_t	spans[NCCRUNE];
};

/*
 *	Machine instructions
 */
struct Reinst{
	int	type;			/* < 0200 ==> literal, otherwise action */
	union	{
		Reclass	*cp;		/* class pointer */
		wchar_t	r;		/* character */
		int	subid;		/* sub-expression id for RBRA and LBRA */
		Reinst	*right;		/* right child of OR */
	} r;
	union {	/* regexp relies on these two being in the same union */
		Reinst *left;		/* left child of OR */
		Reinst *next;		/* next instruction for CAT & LBRA */
	} l;
};

/*
 *	Reprogram definition
 */
struct Reprog{
	Reinst	*startinst;	/* start pc */
	Reclass	class[NCLASS];	/* .data */
	Reinst	firstinst[NINST];	/* .text */
};

extern Reprog	*regcomp(char*);
extern Reprog	*regcomplit(char*);
extern Reprog	*regcompnl(char*);
extern void	regerror(char*);
extern int	regexec(Reprog*, char*, Resub*, int);
extern void	regsub(char*, char*, int, Resub*, int);
extern int	rregexec(Reprog*, wchar_t*, Resub*, int);
extern void	rregsub(wchar_t*, wchar_t*, int, Resub*, int);
#endif

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.