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