home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 10 / Fresh_Fish_10_2352.bin / useful / util / edit / mg / src.lzh / h / regex.h < prev    next >
C/C++ Source or Header  |  1990-05-23  |  3KB  |  99 lines

  1. #ifndef    REGEX_H
  2. #define REGEX_H
  3.  
  4. /*
  5.  * Copyright (C) 1985 Richard M. Stallman
  6.  * 
  7.  * This software may be redistributed under the terms described in the file
  8.  * LICENSE in this directory.
  9.  */
  10.  
  11. #ifndef RE_NREGS
  12. #define RE_NREGS 10
  13. #endif
  14.  
  15. /* This data structure is used to represent a compiled pattern. */
  16.  
  17. struct re_pattern_buffer {
  18.     char           *buffer;    /* Space holding the compiled pattern
  19.                  * commands. */
  20.     int             allocated;    /* Size of space that  buffer  points
  21.                      * to */
  22.     int             used;    /* Length of portion of buffer actually
  23.                  * occupied */
  24.     char           *fastmap;/* Pointer to fastmap, if any, or zero if
  25.                  * none. */
  26.     /*
  27.      * re_search uses the fastmap, if there is one, to skip quickly over
  28.      * totally implausible characters
  29.      */
  30.     char           *translate;    /* Translate table to apply to all
  31.                      * characters before comparing. Or
  32.                      * zero for no translation. The
  33.                      * translation is applied to a
  34.                      * pattern when it is compiled and to
  35.                      * data when it is matched. */
  36.     char            fastmap_accurate;
  37.     /*
  38.      * Set to zero when a new pattern is stored, set to one when the
  39.      * fastmap is updated from it.
  40.      */
  41.     char            can_be_null;    /* Set to one by compiling fastmap if
  42.                      * this pattern might match the null
  43.                      * string. It does not necessarily
  44.                      * match the null string in that
  45.                      * case, but if this is zero, it
  46.                      * cannot.  */
  47. };
  48.  
  49. /*
  50.  * Structure to store "register" contents data in.
  51.  * 
  52.  * Pass the address of such a structure as an argument to re_match, etc., if you
  53.  * want this information back.
  54.  * 
  55.  * start[i] and end[i] record the string matched by \( ... \) grouping i, for i
  56.  * from 1 to RE_NREGS - 1. start[0] and end[0] record the entire string
  57.  * matched.
  58.  */
  59.  
  60. struct re_registers {
  61.     int             start[RE_NREGS];
  62.     int             end[RE_NREGS];
  63. };
  64.  
  65. #ifndef    NO_PROTO
  66. char           *re_compile_pattern PROTO((char *, int, struct re_pattern_buffer *));
  67. VOID re_compile_fastmap PROTO((struct re_pattern_buffer *));
  68. int re_search 
  69. PROTO((struct re_pattern_buffer *, char *, int, int, int,
  70.        struct re_registers *));
  71. int re_search_2 
  72. PROTO((struct re_pattern_buffer *, char *, int, char *, int,
  73.        int, int, struct re_registers *, int));
  74. int re_match 
  75. PROTO((struct re_pattern_buffer *, char *, int, int,
  76.        struct re_registers *));
  77. int re_match_2 
  78. PROTO((struct re_pattern_buffer *, char *, int, char *, int,
  79.        int, struct re_registers *, int));
  80. char           *re_comp PROTO((char *));
  81. int re_exec     PROTO((char *));
  82. VOID           *alloca PROTO((unsigned));
  83. #endif
  84.  
  85. /* Is this really advertised? */
  86. extern VOID     re_compile_fastmap();
  87. extern int      re_search(), re_search_2();
  88. extern int      re_match(), re_match_2();
  89.  
  90. /* 4.2 bsd compatibility (yuck) */
  91. extern char    *re_comp();
  92. extern int      re_exec();
  93.  
  94. #ifdef SYNTAX_TABLE
  95. extern char    *re_syntax_table;
  96. #endif
  97.  
  98. #endif
  99.