Add GNU LGPL headers to all .c .C and .h files
[oweals/cde.git] / cde / programs / dtksh / ksh93 / src / lib / libast / re / relib.h
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: relib.h /main/3 1995/11/01 18:22:46 rswiston $ */
24 /***************************************************************
25 *                                                              *
26 *                      AT&T - PROPRIETARY                      *
27 *                                                              *
28 *         THIS IS PROPRIETARY SOURCE CODE LICENSED BY          *
29 *                          AT&T CORP.                          *
30 *                                                              *
31 *                Copyright (c) 1995 AT&T Corp.                 *
32 *                     All Rights Reserved                      *
33 *                                                              *
34 *           This software is licensed by AT&T Corp.            *
35 *       under the terms and conditions of the license in       *
36 *       http://www.research.att.com/orgs/ssr/book/reuse        *
37 *                                                              *
38 *               This software was created by the               *
39 *           Software Engineering Research Department           *
40 *                    AT&T Bell Laboratories                    *
41 *                                                              *
42 *               For further information contact                *
43 *                     gsf@research.att.com                     *
44 *                                                              *
45 ***************************************************************/
46
47 /* : : generated by proto : : */
48                   
49 /*
50  * AT&T Bell Laboratories
51  *
52  * regular expression library private definitions
53  */
54
55 #ifndef _RELIB_H
56 #if !defined(__PROTO__)
57 #if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
58 #if defined(__cplusplus)
59 #define __MANGLE__      "C"
60 #else
61 #define __MANGLE__
62 #endif
63 #define __STDARG__
64 #define __PROTO__(x)    x
65 #define __OTORP__(x)
66 #define __PARAM__(n,o)  n
67 #if !defined(__STDC__) && !defined(__cplusplus)
68 #if !defined(c_plusplus)
69 #define const
70 #endif
71 #define signed
72 #define void            int
73 #define volatile
74 #define __V_            char
75 #else
76 #define __V_            void
77 #endif
78 #else
79 #define __PROTO__(x)    ()
80 #define __OTORP__(x)    x
81 #define __PARAM__(n,o)  o
82 #define __MANGLE__
83 #define __V_            char
84 #define const
85 #define signed
86 #define void            int
87 #define volatile
88 #endif
89 #if defined(__cplusplus) || defined(c_plusplus)
90 #define __VARARG__      ...
91 #else
92 #define __VARARG__
93 #endif
94 #if defined(__STDARG__)
95 #define __VA_START__(p,a)       va_start(p,a)
96 #else
97 #define __VA_START__(p,a)       va_start(p)
98 #endif
99 #endif
100
101 #define _RELIB_H
102
103 #include <ast.h>
104
105 #define NCLASS          16              /* max # [...] expressions      */
106 #define NMATCH          ('9'-'0'+1)     /* max # (...) expressions      */
107
108 typedef struct                  /* sub-expression match                 */
109 {
110         char*   sp;             /* start in source string               */
111         char*   ep;             /* end in source string                 */
112 } Match_t;
113
114 typedef struct                  /* sub-expression match table           */
115 {
116         Match_t m[NMATCH + 1];
117 } Subexp_t;
118
119 typedef struct                  /* character class bit vector           */
120 {
121         char            map[UCHAR_MAX / CHAR_BIT + 1];
122 } Class_t;
123
124 typedef struct Inst             /* machine instruction                  */
125 {
126         int             type;   /* <TOKEN ==> literal, otherwise action */
127         union
128         {
129
130         int             sid;    /* sub-expression id for RBRA and LBRA  */
131         struct Inst*    other;  /* for right child                      */
132         char*           cls;    /* CCLASS bit vector                    */
133
134         } u;
135         struct Inst*    left;   /* left child                           */
136 } Inst_t;
137
138 /*
139  * NOTE: subexp must be the first element to match Re_program_t.match
140  */
141
142 #define _RE_PROGRAM_PRIVATE_ \
143         Subexp_t        subexp;         /* sub-expression matches       */ \
144         int             flags;          /* RE_* flags                   */ \
145         Inst_t*         startinst;      /* start pc                     */ \
146         Class_t         chrset[NCLASS]; /* .data                        */ \
147         Inst_t          firstinst[5];   /* .text                        */
148
149 #include <re.h>
150
151 #define clrbit(set,bit) (set[(bit)/CHAR_BIT]&=~(1<<((bit)%CHAR_BIT)))
152 #define setbit(set,bit) (set[(bit)/CHAR_BIT]|=(1<<((bit)%CHAR_BIT)))
153 #define tstbit(set,bit) ((set[(bit)/CHAR_BIT]&(1<<((bit)%CHAR_BIT)))!=0)
154
155 #define next    left
156 #define subid   u.sid
157 #define right   u.other
158 #define cclass  u.cls
159
160 /*
161  * tokens and actions
162  *
163  *      TOKEN<=x<OPERATOR are tokens, i.e. operands for operators
164  *      >=OPERATOR are operators, value == precedence
165  */
166
167 #define TOKEN           (UCHAR_MAX+1)
168 #define ANY             (UCHAR_MAX+1)   /* `.' any character            */
169 #define NOP             (UCHAR_MAX+2)   /* no operation (internal)      */
170 #define BOL             (UCHAR_MAX+3)   /* `^' beginning of line        */
171 #define EOL             (UCHAR_MAX+4)   /* `$' end of line              */
172 #define BID             (UCHAR_MAX+5)   /* `\<' begin identifier        */
173 #define EID             (UCHAR_MAX+6)   /* `\>' end identifier          */
174 #define CCLASS          (UCHAR_MAX+7)   /* `[]' character class         */
175 #define SUBEXPR         (UCHAR_MAX+8)   /* `\#' sub-expression          */
176 #define END             (UCHAR_MAX+9)   /* terminate: match found       */
177
178 #define OPERATOR        (UCHAR_MAX+11)
179 #define START           (UCHAR_MAX+11)  /* start, stack marker          */
180 #define RBRA            (UCHAR_MAX+12)  /* `)' right bracket            */
181 #define LBRA            (UCHAR_MAX+13)  /* `(' left bracket             */
182 #define OR              (UCHAR_MAX+14)  /* `|' alternation              */
183 #define CAT             (UCHAR_MAX+15)  /* concatentation (implicit)    */
184 #define STAR            (UCHAR_MAX+16)  /* `*' closure                  */
185 #define PLUS            (UCHAR_MAX+17)  /* a+ == aa*                    */
186 #define QUEST           (UCHAR_MAX+18)  /* a? == 0 or 1 a's             */
187
188 #endif