13e12c5d1SDavid du Colombier #ifndef __REGEXP_H 23e12c5d1SDavid du Colombier #define __REGEXP_H 33e12c5d1SDavid du Colombier #ifndef _REGEXP_EXTENSION 43e12c5d1SDavid du Colombier This header file is an extension to ANSI/POSIX 53e12c5d1SDavid du Colombier #endif 63e12c5d1SDavid du Colombier #pragma lib "/$M/lib/ape/libregexp.a" 73e12c5d1SDavid du Colombier 83e12c5d1SDavid du Colombier #ifdef UTF 93e12c5d1SDavid du Colombier #define Runeself 0xA0 103e12c5d1SDavid du Colombier #else 113e12c5d1SDavid du Colombier #define Runeself 0 123e12c5d1SDavid du Colombier #endif 133e12c5d1SDavid du Colombier 143e12c5d1SDavid du Colombier typedef struct Resub Resub; 153e12c5d1SDavid du Colombier typedef struct Reclass Reclass; 163e12c5d1SDavid du Colombier typedef struct Reinst Reinst; 173e12c5d1SDavid du Colombier typedef struct Reprog Reprog; 183e12c5d1SDavid du Colombier 193e12c5d1SDavid du Colombier /* 203e12c5d1SDavid du Colombier * Sub expression matches 213e12c5d1SDavid du Colombier */ 223e12c5d1SDavid du Colombier struct Resub{ 233e12c5d1SDavid du Colombier union 243e12c5d1SDavid du Colombier { 253e12c5d1SDavid du Colombier char *sp; 263e12c5d1SDavid du Colombier wchar_t *rsp; 273e12c5d1SDavid du Colombier } s; 283e12c5d1SDavid du Colombier union 293e12c5d1SDavid du Colombier { 303e12c5d1SDavid du Colombier char *ep; 313e12c5d1SDavid du Colombier wchar_t *rep; 323e12c5d1SDavid du Colombier } e; 333e12c5d1SDavid du Colombier }; 343e12c5d1SDavid du Colombier 353e12c5d1SDavid du Colombier /* 363e12c5d1SDavid du Colombier * character class, each pair of rune's defines a range 373e12c5d1SDavid du Colombier */ 383e12c5d1SDavid du Colombier struct Reclass{ 393e12c5d1SDavid du Colombier wchar_t *end; 403e12c5d1SDavid du Colombier wchar_t spans[64]; 413e12c5d1SDavid du Colombier }; 423e12c5d1SDavid du Colombier 433e12c5d1SDavid du Colombier /* 443e12c5d1SDavid du Colombier * Machine instructions 453e12c5d1SDavid du Colombier */ 463e12c5d1SDavid du Colombier struct Reinst{ 473e12c5d1SDavid du Colombier int type; /* < 0200 ==> literal, otherwise action */ 483e12c5d1SDavid du Colombier union { 493e12c5d1SDavid du Colombier Reclass *cp; /* class pointer */ 503e12c5d1SDavid du Colombier wchar_t r; /* character */ 513e12c5d1SDavid du Colombier int subid; /* sub-expression id for RBRA and LBRA */ 523e12c5d1SDavid du Colombier Reinst *right; /* right child of OR */ 533e12c5d1SDavid du Colombier } r; 543e12c5d1SDavid du Colombier union { /* regexp relies on these two being in the same union */ 553e12c5d1SDavid du Colombier Reinst *left; /* left child of OR */ 563e12c5d1SDavid du Colombier Reinst *next; /* next instruction for CAT & LBRA */ 573e12c5d1SDavid du Colombier } l; 583e12c5d1SDavid du Colombier }; 593e12c5d1SDavid du Colombier 603e12c5d1SDavid du Colombier /* 613e12c5d1SDavid du Colombier * Reprogram definition 623e12c5d1SDavid du Colombier */ 633e12c5d1SDavid du Colombier struct Reprog{ 643e12c5d1SDavid du Colombier Reinst *startinst; /* start pc */ 653e12c5d1SDavid du Colombier Reclass class[16]; /* .data */ 663e12c5d1SDavid du Colombier Reinst firstinst[5]; /* .text */ 673e12c5d1SDavid du Colombier }; 683e12c5d1SDavid du Colombier 693e12c5d1SDavid du Colombier extern Reprog *regcomp(char*); 703e12c5d1SDavid du Colombier extern Reprog *regcomplit(char*); 713e12c5d1SDavid du Colombier extern Reprog *regcompnl(char*); 723e12c5d1SDavid du Colombier extern void regerror(char*); 733e12c5d1SDavid du Colombier extern int regexec(Reprog*, char*, Resub*, int); 74*9a747e4fSDavid du Colombier extern void regsub(char*, char*, int, Resub*, int); 753e12c5d1SDavid du Colombier extern int rregexec(Reprog*, wchar_t*, Resub*, int); 76*9a747e4fSDavid du Colombier extern void rregsub(wchar_t*, wchar_t*, int, Resub*, int); 773e12c5d1SDavid du Colombier #endif 78