xkbcomp.h revision 83e5f723
1f46a6179Smrg/************************************************************
2f46a6179Smrg Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
3f46a6179Smrg
4f46a6179Smrg Permission to use, copy, modify, and distribute this
5f46a6179Smrg software and its documentation for any purpose and without
6f46a6179Smrg fee is hereby granted, provided that the above copyright
7f46a6179Smrg notice appear in all copies and that both that copyright
8f46a6179Smrg notice and this permission notice appear in supporting
9f46a6179Smrg documentation, and that the name of Silicon Graphics not be
10f46a6179Smrg used in advertising or publicity pertaining to distribution
11f46a6179Smrg of the software without specific prior written permission.
12f46a6179Smrg Silicon Graphics makes no representation about the suitability
13f46a6179Smrg of this software for any purpose. It is provided "as is"
14f46a6179Smrg without any express or implied warranty.
15f46a6179Smrg
16f46a6179Smrg SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17f46a6179Smrg SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18f46a6179Smrg AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19f46a6179Smrg GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20f46a6179Smrg DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21f46a6179Smrg DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
22f46a6179Smrg OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
23f46a6179Smrg THE USE OR PERFORMANCE OF THIS SOFTWARE.
24f46a6179Smrg
25f46a6179Smrg ********************************************************/
26f46a6179Smrg
27f46a6179Smrg#ifndef XKBCOMP_H
28f46a6179Smrg#define	XKBCOMP_H 1
29f46a6179Smrg
30f46a6179Smrg#ifndef DEBUG_VAR
31f46a6179Smrg#define	DEBUG_VAR debugFlags
32f46a6179Smrg#endif
33f46a6179Smrg
34f46a6179Smrg#include <X11/Xlib.h>
35f46a6179Smrg#include <X11/XKBlib.h>
36f46a6179Smrg
37f46a6179Smrg#include "utils.h"
38f46a6179Smrg
39f46a6179Smrg#include <X11/extensions/XKM.h>
40f46a6179Smrg#include <X11/extensions/XKBfile.h>
41f46a6179Smrg
42f46a6179Smrgextern char *scanFile;
43f46a6179Smrg
44f46a6179Smrg#define	TypeUnknown	0
45f46a6179Smrg#define	TypeBoolean	1
46f46a6179Smrg#define	TypeInt		2
47f46a6179Smrg#define	TypeFloat	3
48f46a6179Smrg#define	TypeString	4
49f46a6179Smrg#define	TypeAction	5
50f46a6179Smrg#define	TypeKeyName	6
51f46a6179Smrg#define	TypeSymbols	7
52f46a6179Smrg
53f46a6179Smrg#define	StmtUnknown		0
54f46a6179Smrg#define	StmtInclude		1
55f46a6179Smrg#define	StmtKeycodeDef		2
56f46a6179Smrg#define	StmtKeyAliasDef		3
57f46a6179Smrg#define	StmtExpr		4
58f46a6179Smrg#define	StmtVarDef		5
59f46a6179Smrg#define	StmtKeyTypeDef		6
60f46a6179Smrg#define	StmtInterpDef		7
61f46a6179Smrg#define	StmtVModDef		8
62f46a6179Smrg#define	StmtSymbolsDef		9
63f46a6179Smrg#define	StmtModMapDef		10
64f46a6179Smrg#define	StmtGroupCompatDef 	11
65f46a6179Smrg#define	StmtIndicatorMapDef	12
66f46a6179Smrg#define	StmtIndicatorNameDef	13
67f46a6179Smrg#define	StmtOutlineDef		14
68f46a6179Smrg#define	StmtShapeDef		15
69f46a6179Smrg#define	StmtKeyDef		16
70f46a6179Smrg#define	StmtRowDef		17
71f46a6179Smrg#define	StmtSectionDef		18
72f46a6179Smrg#define	StmtOverlayKeyDef	19
73f46a6179Smrg#define	StmtOverlayDef		20
74f46a6179Smrg#define	StmtDoodadDef		21
75f46a6179Smrg
76f46a6179Smrg#define	FileSymInterp	100
77f46a6179Smrg
7834345a63Smrgtypedef struct _ParseCommon
7934345a63Smrg{
8034345a63Smrg    unsigned stmtType;
8134345a63Smrg    struct _ParseCommon *next;
82f46a6179Smrg} ParseCommon;
83f46a6179Smrg
84f46a6179Smrg#define	ExprValue	0
85f46a6179Smrg#define	ExprIdent	1
86f46a6179Smrg#define	ExprActionDecl	2
87f46a6179Smrg#define	ExprFieldRef	3
88f46a6179Smrg#define	ExprArrayRef	4
89f46a6179Smrg#define	ExprKeysymList	5
90f46a6179Smrg#define	ExprActionList	6
91f46a6179Smrg#define	ExprCoord	7
92f46a6179Smrg
93f46a6179Smrg#define	OpAdd		20
94f46a6179Smrg#define	OpSubtract	21
95f46a6179Smrg#define	OpMultiply	22
96f46a6179Smrg#define	OpDivide	23
97f46a6179Smrg#define	OpAssign	24
98f46a6179Smrg#define	OpNot		25
99f46a6179Smrg#define	OpNegate	26
100f46a6179Smrg#define	OpInvert	27
101f46a6179Smrg#define	OpUnaryPlus	28
102f46a6179Smrg
103f46a6179Smrg#define	MergeDefault	0
104f46a6179Smrg#define	MergeAugment	1
105f46a6179Smrg#define	MergeOverride	2
106f46a6179Smrg#define	MergeReplace	3
107f46a6179Smrg#define	MergeAltForm	4
108f46a6179Smrg
109f46a6179Smrg#define	AutoKeyNames	(1L <<  0)
110f46a6179Smrg#define	CreateKeyNames(x)	((x)->flags&AutoKeyNames)
111f46a6179Smrg
11234345a63Smrgextern unsigned warningLevel;
11334345a63Smrgextern unsigned optionalParts;
11434345a63Smrg
11534345a63Smrgtypedef struct _IncludeStmt
11634345a63Smrg{
11734345a63Smrg    ParseCommon common;
11834345a63Smrg    unsigned merge;
11934345a63Smrg    char *stmt;
12034345a63Smrg    char *file;
12134345a63Smrg    char *map;
12234345a63Smrg    char *modifier;
12334345a63Smrg    char *path;
12434345a63Smrg    struct _IncludeStmt *next;
125f46a6179Smrg} IncludeStmt;
126f46a6179Smrg
12734345a63Smrgtypedef struct _Expr
12834345a63Smrg{
12934345a63Smrg    ParseCommon common;
13034345a63Smrg    unsigned op;
13134345a63Smrg    unsigned type;
13234345a63Smrg    union
13334345a63Smrg    {
13434345a63Smrg        struct
13534345a63Smrg        {
13634345a63Smrg            struct _Expr *left;
13734345a63Smrg            struct _Expr *right;
13834345a63Smrg        } binary;
13934345a63Smrg        struct
14034345a63Smrg        {
14134345a63Smrg            Atom element;
14234345a63Smrg            Atom field;
14334345a63Smrg        } field;
14434345a63Smrg        struct
14534345a63Smrg        {
14634345a63Smrg            Atom element;
14734345a63Smrg            Atom field;
14834345a63Smrg            struct _Expr *entry;
14934345a63Smrg        } array;
15034345a63Smrg        struct
15134345a63Smrg        {
15234345a63Smrg            Atom name;
15334345a63Smrg            struct _Expr *args;
15434345a63Smrg        } action;
15534345a63Smrg        struct
15634345a63Smrg        {
15734345a63Smrg            int nSyms;
15834345a63Smrg            int szSyms;
15983e5f723Smrg            char **syms;
16034345a63Smrg        } list;
16134345a63Smrg        struct
16234345a63Smrg        {
16334345a63Smrg            int x;
16434345a63Smrg            int y;
16534345a63Smrg        } coord;
16634345a63Smrg        struct _Expr *child;
16734345a63Smrg        Atom str;
16834345a63Smrg        unsigned uval;
16934345a63Smrg        int ival;
17034345a63Smrg        char keyName[5];
17134345a63Smrg        Opaque ptr;
172f46a6179Smrg    } value;
173f46a6179Smrg} ExprDef;
174f46a6179Smrg
17534345a63Smrgtypedef struct _VarDef
17634345a63Smrg{
17734345a63Smrg    ParseCommon common;
17834345a63Smrg    unsigned merge;
17934345a63Smrg    ExprDef *name;
18034345a63Smrg    ExprDef *value;
181f46a6179Smrg} VarDef;
182f46a6179Smrg
18334345a63Smrgtypedef struct _VModDef
18434345a63Smrg{
18534345a63Smrg    ParseCommon common;
18634345a63Smrg    unsigned merge;
18734345a63Smrg    Atom name;
18834345a63Smrg    ExprDef *value;
189f46a6179Smrg} VModDef;
190f46a6179Smrg
19134345a63Smrgtypedef struct _KeycodeDef
19234345a63Smrg{
19334345a63Smrg    ParseCommon common;
19434345a63Smrg    unsigned merge;
19534345a63Smrg    char name[5];
19634345a63Smrg    ExprDef *value;
197f46a6179Smrg} KeycodeDef;
198f46a6179Smrg
19934345a63Smrgtypedef struct _KeyAliasDef
20034345a63Smrg{
20134345a63Smrg    ParseCommon common;
20234345a63Smrg    unsigned merge;
20334345a63Smrg    char alias[5];
20434345a63Smrg    char real[5];
205f46a6179Smrg} KeyAliasDef;
206f46a6179Smrg
20734345a63Smrgtypedef struct _KeyTypeDef
20834345a63Smrg{
20934345a63Smrg    ParseCommon common;
21034345a63Smrg    unsigned merge;
21134345a63Smrg    Atom name;
21234345a63Smrg    VarDef *body;
213f46a6179Smrg} KeyTypeDef;
214f46a6179Smrg
21534345a63Smrgtypedef struct _SymbolsDef
21634345a63Smrg{
21734345a63Smrg    ParseCommon common;
21834345a63Smrg    unsigned merge;
21934345a63Smrg    char keyName[5];
22034345a63Smrg    ExprDef *symbols;
221f46a6179Smrg} SymbolsDef;
222f46a6179Smrg
22334345a63Smrgtypedef struct _ModMapDef
22434345a63Smrg{
22534345a63Smrg    ParseCommon common;
22634345a63Smrg    unsigned merge;
22734345a63Smrg    Atom modifier;
22834345a63Smrg    ExprDef *keys;
229f46a6179Smrg} ModMapDef;
230f46a6179Smrg
23134345a63Smrgtypedef struct _GroupCompatDef
23234345a63Smrg{
23334345a63Smrg    ParseCommon common;
23434345a63Smrg    unsigned merge;
23534345a63Smrg    int group;
23634345a63Smrg    ExprDef *def;
237f46a6179Smrg} GroupCompatDef;
238f46a6179Smrg
23934345a63Smrgtypedef struct _InterpDef
24034345a63Smrg{
24134345a63Smrg    ParseCommon common;
24234345a63Smrg    unsigned merge;
24334345a63Smrg    KeySym sym;
24434345a63Smrg    ExprDef *match;
24534345a63Smrg    VarDef *def;
246f46a6179Smrg} InterpDef;
247f46a6179Smrg
24834345a63Smrgtypedef struct _IndicatorNameDef
24934345a63Smrg{
25034345a63Smrg    ParseCommon common;
25134345a63Smrg    unsigned merge;
25234345a63Smrg    int ndx;
25334345a63Smrg    ExprDef *name;
25434345a63Smrg    Bool virtual;
255f46a6179Smrg} IndicatorNameDef;
256f46a6179Smrg
25734345a63Smrgtypedef struct _OutlineDef
25834345a63Smrg{
25934345a63Smrg    ParseCommon common;
26034345a63Smrg    Atom field;
26134345a63Smrg    int nPoints;
26234345a63Smrg    ExprDef *points;
263f46a6179Smrg} OutlineDef;
264f46a6179Smrg
26534345a63Smrgtypedef struct _ShapeDef
26634345a63Smrg{
26734345a63Smrg    ParseCommon common;
26834345a63Smrg    unsigned merge;
26934345a63Smrg    Atom name;
27034345a63Smrg    int nOutlines;
27134345a63Smrg    OutlineDef *outlines;
272f46a6179Smrg} ShapeDef;
273f46a6179Smrg
27434345a63Smrgtypedef struct _KeyDef
27534345a63Smrg{
27634345a63Smrg    ParseCommon common;
27734345a63Smrg    unsigned defined;
27834345a63Smrg    char *name;
27934345a63Smrg    ExprDef *expr;
280f46a6179Smrg} KeyDef;
281f46a6179Smrg
28234345a63Smrgtypedef struct _RowDef
28334345a63Smrg{
28434345a63Smrg    ParseCommon common;
28534345a63Smrg    int nKeys;
28634345a63Smrg    KeyDef *keys;
287f46a6179Smrg} RowDef;
288f46a6179Smrg
28934345a63Smrgtypedef struct _SectionDef
29034345a63Smrg{
29134345a63Smrg    ParseCommon common;
29234345a63Smrg    unsigned merge;
29334345a63Smrg    Atom name;
29434345a63Smrg    int nRows;
29534345a63Smrg    RowDef *rows;
296f46a6179Smrg} SectionDef;
297f46a6179Smrg
29834345a63Smrgtypedef struct _OverlayKeyDef
29934345a63Smrg{
30034345a63Smrg    ParseCommon common;
30134345a63Smrg    char over[5];
30234345a63Smrg    char under[5];
303f46a6179Smrg} OverlayKeyDef;
304f46a6179Smrg
30534345a63Smrgtypedef struct _OverlayDef
30634345a63Smrg{
30734345a63Smrg    ParseCommon common;
30834345a63Smrg    unsigned merge;
30934345a63Smrg    Atom name;
31034345a63Smrg    int nKeys;
31134345a63Smrg    OverlayKeyDef *keys;
312f46a6179Smrg} OverlayDef;
313f46a6179Smrg
31434345a63Smrgtypedef struct _DoodadDef
31534345a63Smrg{
31634345a63Smrg    ParseCommon common;
31734345a63Smrg    unsigned merge;
31834345a63Smrg    unsigned type;
31934345a63Smrg    Atom name;
32034345a63Smrg    VarDef *body;
321f46a6179Smrg} DoodadDef;
322f46a6179Smrg
323f46a6179Smrg/* IndicatorMapDef doesn't use the type field, but the rest of the fields
324f46a6179Smrg   need to be at the same offsets as in DoodadDef.  Use #define to avoid
325f46a6179Smrg   any strict aliasing problems.  */
326f46a6179Smrg#define IndicatorMapDef DoodadDef
327f46a6179Smrg
32834345a63Smrgtypedef struct _XkbFile
32934345a63Smrg{
33034345a63Smrg    ParseCommon common;
33134345a63Smrg    int type;
33234345a63Smrg    char *topName;
33334345a63Smrg    char *name;
33434345a63Smrg    ParseCommon *defs;
33534345a63Smrg    int id;
33634345a63Smrg    unsigned flags;
33734345a63Smrg    Bool compiled;
338f46a6179Smrg} XkbFile;
339f46a6179Smrg
34034345a63Smrgextern Bool CompileKeymap(XkbFile * /* file */ ,
34134345a63Smrg                          XkbFileInfo * /* result */ ,
34234345a63Smrg                          unsigned      /* merge */
34334345a63Smrg    );
34434345a63Smrg
34534345a63Smrgextern Bool CompileKeycodes(XkbFile * /* file */ ,
34634345a63Smrg                            XkbFileInfo * /* result */ ,
34734345a63Smrg                            unsigned    /* merge */
34834345a63Smrg    );
34934345a63Smrg
35034345a63Smrgextern Bool CompileGeometry(XkbFile * /* file */ ,
35134345a63Smrg                            XkbFileInfo * /* result */ ,
35234345a63Smrg                            unsigned    /* merge */
35334345a63Smrg    );
35434345a63Smrg
35534345a63Smrgextern Bool CompileKeyTypes(XkbFile * /* file */ ,
35634345a63Smrg                            XkbFileInfo * /* result */ ,
35734345a63Smrg                            unsigned    /* merge */
35834345a63Smrg    );
359f46a6179Smrg
360f46a6179Smrgtypedef struct _LEDInfo *LEDInfoPtr;
361f46a6179Smrg
36234345a63Smrgextern Bool CompileCompatMap(XkbFile * /* file */ ,
36334345a63Smrg                             XkbFileInfo * /* result */ ,
36434345a63Smrg                             unsigned /* merge */ ,
36534345a63Smrg                             LEDInfoPtr *       /* unboundLEDs */
36634345a63Smrg    );
367f46a6179Smrg
36834345a63Smrgextern Bool CompileSymbols(XkbFile * /* file */ ,
36934345a63Smrg                           XkbFileInfo * /* result */ ,
37034345a63Smrg                           unsigned     /* merge */
37134345a63Smrg    );
372f46a6179Smrg
373f46a6179Smrg#define	WantLongListing	(1<<0)
374f46a6179Smrg#define	WantPartialMaps	(1<<1)
375f46a6179Smrg#define	WantHiddenMaps	(1<<2)
376f46a6179Smrg#define	WantFullNames	(1<<3)
377f46a6179Smrg#define	ListRecursive	(1<<4)
378f46a6179Smrg
37934345a63Smrgextern char *rootDir;
380f46a6179Smrgextern unsigned verboseLevel;
38134345a63Smrgextern unsigned dirsToStrip;
382f46a6179Smrg
38334345a63Smrgextern Bool AddListing(char * /* file */ ,
38434345a63Smrg                       char *   /* map */
38534345a63Smrg    );
386f46a6179Smrg
38734345a63Smrgextern Bool AddMatchingFiles(char *     /* head_in */
38834345a63Smrg    );
389f46a6179Smrg
39034345a63Smrgextern int AddMapOnly(char *    /* map */
39134345a63Smrg    );
392f46a6179Smrg
39334345a63Smrgextern int GenerateListing(char *       /* filename */
39434345a63Smrg    );
395f46a6179Smrg
396f46a6179Smrg#endif /* XKBCOMP_H */
397