xkbcomp.h revision 83e5f723
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 XKBCOMP_H
28#define	XKBCOMP_H 1
29
30#ifndef DEBUG_VAR
31#define	DEBUG_VAR debugFlags
32#endif
33
34#include <X11/Xlib.h>
35#include <X11/XKBlib.h>
36
37#include "utils.h"
38
39#include <X11/extensions/XKM.h>
40#include <X11/extensions/XKBfile.h>
41
42extern char *scanFile;
43
44#define	TypeUnknown	0
45#define	TypeBoolean	1
46#define	TypeInt		2
47#define	TypeFloat	3
48#define	TypeString	4
49#define	TypeAction	5
50#define	TypeKeyName	6
51#define	TypeSymbols	7
52
53#define	StmtUnknown		0
54#define	StmtInclude		1
55#define	StmtKeycodeDef		2
56#define	StmtKeyAliasDef		3
57#define	StmtExpr		4
58#define	StmtVarDef		5
59#define	StmtKeyTypeDef		6
60#define	StmtInterpDef		7
61#define	StmtVModDef		8
62#define	StmtSymbolsDef		9
63#define	StmtModMapDef		10
64#define	StmtGroupCompatDef 	11
65#define	StmtIndicatorMapDef	12
66#define	StmtIndicatorNameDef	13
67#define	StmtOutlineDef		14
68#define	StmtShapeDef		15
69#define	StmtKeyDef		16
70#define	StmtRowDef		17
71#define	StmtSectionDef		18
72#define	StmtOverlayKeyDef	19
73#define	StmtOverlayDef		20
74#define	StmtDoodadDef		21
75
76#define	FileSymInterp	100
77
78typedef struct _ParseCommon
79{
80    unsigned stmtType;
81    struct _ParseCommon *next;
82} ParseCommon;
83
84#define	ExprValue	0
85#define	ExprIdent	1
86#define	ExprActionDecl	2
87#define	ExprFieldRef	3
88#define	ExprArrayRef	4
89#define	ExprKeysymList	5
90#define	ExprActionList	6
91#define	ExprCoord	7
92
93#define	OpAdd		20
94#define	OpSubtract	21
95#define	OpMultiply	22
96#define	OpDivide	23
97#define	OpAssign	24
98#define	OpNot		25
99#define	OpNegate	26
100#define	OpInvert	27
101#define	OpUnaryPlus	28
102
103#define	MergeDefault	0
104#define	MergeAugment	1
105#define	MergeOverride	2
106#define	MergeReplace	3
107#define	MergeAltForm	4
108
109#define	AutoKeyNames	(1L <<  0)
110#define	CreateKeyNames(x)	((x)->flags&AutoKeyNames)
111
112extern unsigned warningLevel;
113extern unsigned optionalParts;
114
115typedef struct _IncludeStmt
116{
117    ParseCommon common;
118    unsigned merge;
119    char *stmt;
120    char *file;
121    char *map;
122    char *modifier;
123    char *path;
124    struct _IncludeStmt *next;
125} IncludeStmt;
126
127typedef struct _Expr
128{
129    ParseCommon common;
130    unsigned op;
131    unsigned type;
132    union
133    {
134        struct
135        {
136            struct _Expr *left;
137            struct _Expr *right;
138        } binary;
139        struct
140        {
141            Atom element;
142            Atom field;
143        } field;
144        struct
145        {
146            Atom element;
147            Atom field;
148            struct _Expr *entry;
149        } array;
150        struct
151        {
152            Atom name;
153            struct _Expr *args;
154        } action;
155        struct
156        {
157            int nSyms;
158            int szSyms;
159            char **syms;
160        } list;
161        struct
162        {
163            int x;
164            int y;
165        } coord;
166        struct _Expr *child;
167        Atom str;
168        unsigned uval;
169        int ival;
170        char keyName[5];
171        Opaque ptr;
172    } value;
173} ExprDef;
174
175typedef struct _VarDef
176{
177    ParseCommon common;
178    unsigned merge;
179    ExprDef *name;
180    ExprDef *value;
181} VarDef;
182
183typedef struct _VModDef
184{
185    ParseCommon common;
186    unsigned merge;
187    Atom name;
188    ExprDef *value;
189} VModDef;
190
191typedef struct _KeycodeDef
192{
193    ParseCommon common;
194    unsigned merge;
195    char name[5];
196    ExprDef *value;
197} KeycodeDef;
198
199typedef struct _KeyAliasDef
200{
201    ParseCommon common;
202    unsigned merge;
203    char alias[5];
204    char real[5];
205} KeyAliasDef;
206
207typedef struct _KeyTypeDef
208{
209    ParseCommon common;
210    unsigned merge;
211    Atom name;
212    VarDef *body;
213} KeyTypeDef;
214
215typedef struct _SymbolsDef
216{
217    ParseCommon common;
218    unsigned merge;
219    char keyName[5];
220    ExprDef *symbols;
221} SymbolsDef;
222
223typedef struct _ModMapDef
224{
225    ParseCommon common;
226    unsigned merge;
227    Atom modifier;
228    ExprDef *keys;
229} ModMapDef;
230
231typedef struct _GroupCompatDef
232{
233    ParseCommon common;
234    unsigned merge;
235    int group;
236    ExprDef *def;
237} GroupCompatDef;
238
239typedef struct _InterpDef
240{
241    ParseCommon common;
242    unsigned merge;
243    KeySym sym;
244    ExprDef *match;
245    VarDef *def;
246} InterpDef;
247
248typedef struct _IndicatorNameDef
249{
250    ParseCommon common;
251    unsigned merge;
252    int ndx;
253    ExprDef *name;
254    Bool virtual;
255} IndicatorNameDef;
256
257typedef struct _OutlineDef
258{
259    ParseCommon common;
260    Atom field;
261    int nPoints;
262    ExprDef *points;
263} OutlineDef;
264
265typedef struct _ShapeDef
266{
267    ParseCommon common;
268    unsigned merge;
269    Atom name;
270    int nOutlines;
271    OutlineDef *outlines;
272} ShapeDef;
273
274typedef struct _KeyDef
275{
276    ParseCommon common;
277    unsigned defined;
278    char *name;
279    ExprDef *expr;
280} KeyDef;
281
282typedef struct _RowDef
283{
284    ParseCommon common;
285    int nKeys;
286    KeyDef *keys;
287} RowDef;
288
289typedef struct _SectionDef
290{
291    ParseCommon common;
292    unsigned merge;
293    Atom name;
294    int nRows;
295    RowDef *rows;
296} SectionDef;
297
298typedef struct _OverlayKeyDef
299{
300    ParseCommon common;
301    char over[5];
302    char under[5];
303} OverlayKeyDef;
304
305typedef struct _OverlayDef
306{
307    ParseCommon common;
308    unsigned merge;
309    Atom name;
310    int nKeys;
311    OverlayKeyDef *keys;
312} OverlayDef;
313
314typedef struct _DoodadDef
315{
316    ParseCommon common;
317    unsigned merge;
318    unsigned type;
319    Atom name;
320    VarDef *body;
321} DoodadDef;
322
323/* IndicatorMapDef doesn't use the type field, but the rest of the fields
324   need to be at the same offsets as in DoodadDef.  Use #define to avoid
325   any strict aliasing problems.  */
326#define IndicatorMapDef DoodadDef
327
328typedef struct _XkbFile
329{
330    ParseCommon common;
331    int type;
332    char *topName;
333    char *name;
334    ParseCommon *defs;
335    int id;
336    unsigned flags;
337    Bool compiled;
338} XkbFile;
339
340extern Bool CompileKeymap(XkbFile * /* file */ ,
341                          XkbFileInfo * /* result */ ,
342                          unsigned      /* merge */
343    );
344
345extern Bool CompileKeycodes(XkbFile * /* file */ ,
346                            XkbFileInfo * /* result */ ,
347                            unsigned    /* merge */
348    );
349
350extern Bool CompileGeometry(XkbFile * /* file */ ,
351                            XkbFileInfo * /* result */ ,
352                            unsigned    /* merge */
353    );
354
355extern Bool CompileKeyTypes(XkbFile * /* file */ ,
356                            XkbFileInfo * /* result */ ,
357                            unsigned    /* merge */
358    );
359
360typedef struct _LEDInfo *LEDInfoPtr;
361
362extern Bool CompileCompatMap(XkbFile * /* file */ ,
363                             XkbFileInfo * /* result */ ,
364                             unsigned /* merge */ ,
365                             LEDInfoPtr *       /* unboundLEDs */
366    );
367
368extern Bool CompileSymbols(XkbFile * /* file */ ,
369                           XkbFileInfo * /* result */ ,
370                           unsigned     /* merge */
371    );
372
373#define	WantLongListing	(1<<0)
374#define	WantPartialMaps	(1<<1)
375#define	WantHiddenMaps	(1<<2)
376#define	WantFullNames	(1<<3)
377#define	ListRecursive	(1<<4)
378
379extern char *rootDir;
380extern unsigned verboseLevel;
381extern unsigned dirsToStrip;
382
383extern Bool AddListing(char * /* file */ ,
384                       char *   /* map */
385    );
386
387extern Bool AddMatchingFiles(char *     /* head_in */
388    );
389
390extern int AddMapOnly(char *    /* map */
391    );
392
393extern int GenerateListing(char *       /* filename */
394    );
395
396#endif /* XKBCOMP_H */
397