tregexp9.h - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
tregexp9.h (1790B)
---
     1 #ifndef _REGEXP9_H_
     2 #define _REGEXP9_H_ 1
     3 #if defined(__cplusplus)
     4 extern "C" { 
     5 #endif
     6 
     7 #ifdef AUTOLIB
     8 AUTOLIB(regexp9)
     9 #endif
    10 
    11 #include 
    12 
    13 typedef struct Resub                Resub;
    14 typedef struct Reclass                Reclass;
    15 typedef struct Reinst                Reinst;
    16 typedef struct Reprog                Reprog;
    17 
    18 /*
    19  *        Sub expression matches
    20  */
    21 struct Resub{
    22         union
    23         {
    24                 char *sp;
    25                 Rune *rsp;
    26         }s;
    27         union
    28         {
    29                 char *ep;
    30                 Rune *rep;
    31         }e;
    32 };
    33 
    34 /*
    35  *        character class, each pair of rune's defines a range
    36  */
    37 struct Reclass{
    38         Rune        *end;
    39         Rune        spans[64];
    40 };
    41 
    42 /*
    43  *        Machine instructions
    44  */
    45 struct Reinst{
    46         int        type;
    47         union        {
    48                 Reclass        *cp;                /* class pointer */
    49                 Rune        r;                /* character */
    50                 int        subid;                /* sub-expression id for RBRA and LBRA */
    51                 Reinst        *right;                /* right child of OR */
    52         }u1;
    53         union {        /* regexp relies on these two being in the same union */
    54                 Reinst *left;                /* left child of OR */
    55                 Reinst *next;                /* next instruction for CAT & LBRA */
    56         }u2;
    57 };
    58 
    59 /*
    60  *        Reprogram definition
    61  */
    62 struct Reprog{
    63         Reinst        *startinst;        /* start pc */
    64         Reclass        class[16];        /* .data */
    65         Reinst        firstinst[5];        /* .text */
    66 };
    67 
    68 extern Reprog        *regcomp9(char*);
    69 extern Reprog        *regcomplit9(char*);
    70 extern Reprog        *regcompnl9(char*);
    71 extern void        regerror9(char*);
    72 extern int        regexec9(Reprog*, char*, Resub*, int);
    73 extern void        regsub9(char*, char*, int, Resub*, int);
    74 
    75 extern int        rregexec9(Reprog*, Rune*, Resub*, int);
    76 extern void        rregsub9(Rune*, Rune*, int, Resub*, int);
    77 
    78 /*
    79  * Darwin simply cannot handle having routines that
    80  * override other library routines.
    81  */
    82 #ifndef NOPLAN9DEFINES
    83 #define regcomp regcomp9
    84 #define regcomplit regcomplit9
    85 #define regcompnl regcompnl9
    86 #define regerror regerror9
    87 #define regexec regexec9
    88 #define regsub regsub9
    89 #define rregexec rregexec9
    90 #define rregsub rregsub9
    91 #endif
    92 
    93 #if defined(__cplusplus)
    94 }
    95 #endif
    96 #endif