1/************************************************************
2 Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
3
4 Permission to use, copy, modify, and distribute this
5 software and its documentation for any purpose and without
6 fee is hereby granted, provided that the above copyright
7 notice appear in all copies and that both that copyright
8 notice and this permission notice appear in supporting
9 documentation, and that the name of Silicon Graphics not be
10 used in advertising or publicity pertaining to distribution
11 of the software without specific prior written permission.
12 Silicon Graphics makes no representation about the suitability
13 of this software for any purpose. It is provided "as is"
14 without any express or implied warranty.
15
16 SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17 SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18 AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19 GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21 DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22 OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
23 THE USE OR PERFORMANCE OF THIS SOFTWARE.
24
25 ********************************************************/
26
27#ifndef EXPR_H
28#define EXPR_H 1
29
30typedef union _ExprResult
31{
32    char *str;
33    int ival;
34    unsigned uval;
35    XkbKeyNameRec keyName;
36} ExprResult;
37
38typedef Bool(*IdentLookupFunc) (const XPointer /* priv */ ,
39                                Atom /* elem */ ,
40                                Atom /* field */ ,
41                                unsigned /* type */ ,
42                                ExprResult *    /* val_rtrn */
43    );
44
45extern int ExprResolveLhs(const ExprDef * /* expr */ ,
46                          ExprResult * /* elem_rtrn */ ,
47                          ExprResult * /* field_rtrn */ ,
48                          ExprDef **    /* index_rtrn */
49    );
50
51typedef struct _LookupPriv
52{
53    XPointer priv;
54    IdentLookupFunc chain;
55    XPointer chainPriv;
56} LookupPriv;
57
58typedef struct _LookupEntry
59{
60    const char *name;
61    unsigned result;
62} LookupEntry;
63
64typedef struct _LookupTable
65{
66    char *element;
67    LookupEntry *entries;
68    struct _LookupTable *nextElement;
69} LookupTable;
70
71
72extern char *exprOpText(unsigned        /* type */
73    );
74
75extern Bool RadioLookup(const XPointer /* priv */ ,
76                       Atom /* elem */ ,
77                       Atom /* field */ ,
78                       unsigned /* type */ ,
79                       ExprResult *     /* val_rtrn */
80    );
81
82extern Bool SimpleLookup(const XPointer /* priv */ ,
83                        Atom /* elem */ ,
84                        Atom /* field */ ,
85                        unsigned /* type */ ,
86                        ExprResult *    /* val_rtrn */
87    );
88
89extern Bool LookupModIndex(const XPointer /* priv */ ,
90                          Atom /* elem */ ,
91                          Atom /* field */ ,
92                          unsigned /* type */ ,
93                          ExprResult *  /* val_rtrn */
94    );
95
96extern int ExprResolveModIndex(const ExprDef * /* expr */ ,
97                               ExprResult * /* val_rtrn */ ,
98                               IdentLookupFunc /* lookup */ ,
99                               XPointer /* lookupPriv */
100    );
101
102extern int ExprResolveModMask(const ExprDef * /* expr */ ,
103                              ExprResult * /* val_rtrn */ ,
104                              IdentLookupFunc /* lookup */ ,
105                              XPointer  /* priv */
106    );
107
108extern int ExprResolveBoolean(const ExprDef * /* expr */ ,
109                              ExprResult * /* val_rtrn */ ,
110                              IdentLookupFunc /* lookup */ ,
111                              XPointer  /* lookupPriv */
112    );
113
114extern int ExprResolveInteger(const ExprDef * /* expr */ ,
115                              ExprResult * /* val_rtrn */ ,
116                              IdentLookupFunc /* lookup */ ,
117                              XPointer  /* lookupPriv */
118    );
119
120extern int ExprResolveFloat(const ExprDef * /* expr */ ,
121                            ExprResult * /* val_rtrn */ ,
122                            IdentLookupFunc /* lookup */ ,
123                            XPointer    /* lookupPriv */
124    );
125
126extern int ExprResolveString(const ExprDef * /* expr */ ,
127                             ExprResult * /* val_rtrn */ ,
128                             IdentLookupFunc /* lookup */ ,
129                             XPointer   /* lookupPriv */
130    );
131
132extern int ExprResolveKeyName(const ExprDef * /* expr */ ,
133                              ExprResult * /* val_rtrn */ ,
134                              IdentLookupFunc /* lookup */ ,
135                              XPointer  /* lookupPriv */
136    );
137
138extern int ExprResolveEnum(const ExprDef * /* expr */ ,
139                           ExprResult * /* val_rtrn */ ,
140                           const LookupEntry * /* values */
141    );
142
143extern int ExprResolveMask(const ExprDef * /* expr */ ,
144                           ExprResult * /* val_rtrn */ ,
145                           IdentLookupFunc /* lookup */ ,
146                           XPointer     /* lookupPriv */
147    );
148
149extern int ExprResolveKeySym(const ExprDef * /* expr */ ,
150                             ExprResult * /* val_rtrn */ ,
151                             IdentLookupFunc /* lookup */ ,
152                             XPointer   /* lookupPriv */
153    );
154
155#endif /* EXPR_H */
156