| #ifndef _REGEXP9_H_ | 
 | #define _REGEXP9_H_ 1 | 
 | #if defined(__cplusplus) | 
 | extern "C" {  | 
 | #endif | 
 |  | 
 | #include <utf.h> | 
 |  | 
 | typedef struct Resub		Resub; | 
 | typedef struct Reclass		Reclass; | 
 | typedef struct Reinst		Reinst; | 
 | typedef struct Reprog		Reprog; | 
 |  | 
 | /* | 
 |  *	Sub expression matches | 
 |  */ | 
 | struct Resub{ | 
 | 	union | 
 | 	{ | 
 | 		char *sp; | 
 | 		Rune *rsp; | 
 | 	}s; | 
 | 	union | 
 | 	{ | 
 | 		char *ep; | 
 | 		Rune *rep; | 
 | 	}e; | 
 | }; | 
 |  | 
 | /* | 
 |  *	character class, each pair of rune's defines a range | 
 |  */ | 
 | struct Reclass{ | 
 | 	Rune	*end; | 
 | 	Rune	spans[64]; | 
 | }; | 
 |  | 
 | /* | 
 |  *	Machine instructions | 
 |  */ | 
 | struct Reinst{ | 
 | 	int	type; | 
 | 	union	{ | 
 | 		Reclass	*cp;		/* class pointer */ | 
 | 		Rune	r;		/* character */ | 
 | 		int	subid;		/* sub-expression id for RBRA and LBRA */ | 
 | 		Reinst	*right;		/* right child of OR */ | 
 | 	}u1; | 
 | 	union {	/* regexp relies on these two being in the same union */ | 
 | 		Reinst *left;		/* left child of OR */ | 
 | 		Reinst *next;		/* next instruction for CAT & LBRA */ | 
 | 	}u2; | 
 | }; | 
 |  | 
 | /* | 
 |  *	Reprogram definition | 
 |  */ | 
 | struct Reprog{ | 
 | 	Reinst	*startinst;	/* start pc */ | 
 | 	Reclass	class[16];	/* .data */ | 
 | 	Reinst	firstinst[5];	/* .text */ | 
 | }; | 
 |  | 
 | extern Reprog	*regcomp9(char*); | 
 | extern Reprog	*regcomplit9(char*); | 
 | extern Reprog	*regcompnl9(char*); | 
 | extern void	regerror9(char*); | 
 | extern int	regexec9(Reprog*, char*, Resub*, int); | 
 | extern void	regsub9(char*, char*, int, Resub*, int); | 
 |  | 
 | extern int	rregexec9(Reprog*, Rune*, Resub*, int); | 
 | extern void	rregsub9(Rune*, Rune*, int, Resub*, int); | 
 |  | 
 | /* | 
 |  * Darwin simply cannot handle having routines that | 
 |  * override other library routines. | 
 |  */ | 
 | #ifndef NOPLAN9DEFINES | 
 | #define regcomp regcomp9 | 
 | #define regcomplit regcomplit9 | 
 | #define regcompnl regcompnl9 | 
 | #define regerror regerror9 | 
 | #define regexec regexec9 | 
 | #define regsub regsub9 | 
 | #define rregexec rregexec9 | 
 | #define rregsub rregsub9 | 
 | #endif | 
 |  | 
 | #if defined(__cplusplus) | 
 | } | 
 | #endif | 
 | #endif |