#ifndef _REGEXP9_H_ #define _REGEXP9_H_ 1 #if defined(__cplusplus) extern "C" { #endif #ifdef AUTOLIB AUTOLIB(regexp9) #endif #include 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