xkbcomp.h revision bfe6082c
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
9bfe6082cSmrg documentation, and that the name of Silicon Graphics not be
10bfe6082cSmrg used in advertising or publicity pertaining to distribution
11f46a6179Smrg of the software without specific prior written permission.
12bfe6082cSmrg 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.
15bfe6082cSmrg
16bfe6082cSmrg SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17bfe6082cSmrg SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18f46a6179Smrg AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
19bfe6082cSmrg GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
20bfe6082cSmrg DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21bfe6082cSmrg 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;
246690143ccSmrg    Bool ignore;
247f46a6179Smrg} InterpDef;
248f46a6179Smrg
24934345a63Smrgtypedef struct _IndicatorNameDef
25034345a63Smrg{
25134345a63Smrg    ParseCommon common;
25234345a63Smrg    unsigned merge;
25334345a63Smrg    int ndx;
25434345a63Smrg    ExprDef *name;
25534345a63Smrg    Bool virtual;
256f46a6179Smrg} IndicatorNameDef;
257f46a6179Smrg
25834345a63Smrgtypedef struct _OutlineDef
25934345a63Smrg{
26034345a63Smrg    ParseCommon common;
26134345a63Smrg    Atom field;
26234345a63Smrg    int nPoints;
26334345a63Smrg    ExprDef *points;
264f46a6179Smrg} OutlineDef;
265f46a6179Smrg
26634345a63Smrgtypedef struct _ShapeDef
26734345a63Smrg{
26834345a63Smrg    ParseCommon common;
26934345a63Smrg    unsigned merge;
27034345a63Smrg    Atom name;
27134345a63Smrg    int nOutlines;
27234345a63Smrg    OutlineDef *outlines;
273f46a6179Smrg} ShapeDef;
274f46a6179Smrg
27534345a63Smrgtypedef struct _KeyDef
27634345a63Smrg{
27734345a63Smrg    ParseCommon common;
27834345a63Smrg    unsigned defined;
27934345a63Smrg    char *name;
28034345a63Smrg    ExprDef *expr;
281f46a6179Smrg} KeyDef;
282f46a6179Smrg
28334345a63Smrgtypedef struct _RowDef
28434345a63Smrg{
28534345a63Smrg    ParseCommon common;
28634345a63Smrg    int nKeys;
28734345a63Smrg    KeyDef *keys;
288f46a6179Smrg} RowDef;
289f46a6179Smrg
29034345a63Smrgtypedef struct _SectionDef
29134345a63Smrg{
29234345a63Smrg    ParseCommon common;
29334345a63Smrg    unsigned merge;
29434345a63Smrg    Atom name;
29534345a63Smrg    int nRows;
29634345a63Smrg    RowDef *rows;
297f46a6179Smrg} SectionDef;
298f46a6179Smrg
29934345a63Smrgtypedef struct _OverlayKeyDef
30034345a63Smrg{
30134345a63Smrg    ParseCommon common;
30234345a63Smrg    char over[5];
30334345a63Smrg    char under[5];
304f46a6179Smrg} OverlayKeyDef;
305f46a6179Smrg
30634345a63Smrgtypedef struct _OverlayDef
30734345a63Smrg{
30834345a63Smrg    ParseCommon common;
30934345a63Smrg    unsigned merge;
31034345a63Smrg    Atom name;
31134345a63Smrg    int nKeys;
31234345a63Smrg    OverlayKeyDef *keys;
313f46a6179Smrg} OverlayDef;
314f46a6179Smrg
31534345a63Smrgtypedef struct _DoodadDef
31634345a63Smrg{
31734345a63Smrg    ParseCommon common;
31834345a63Smrg    unsigned merge;
31934345a63Smrg    unsigned type;
32034345a63Smrg    Atom name;
32134345a63Smrg    VarDef *body;
322f46a6179Smrg} DoodadDef;
323f46a6179Smrg
324f46a6179Smrg/* IndicatorMapDef doesn't use the type field, but the rest of the fields
325f46a6179Smrg   need to be at the same offsets as in DoodadDef.  Use #define to avoid
326f46a6179Smrg   any strict aliasing problems.  */
327f46a6179Smrg#define IndicatorMapDef DoodadDef
328f46a6179Smrg
32934345a63Smrgtypedef struct _XkbFile
33034345a63Smrg{
33134345a63Smrg    ParseCommon common;
33234345a63Smrg    int type;
33334345a63Smrg    char *topName;
33434345a63Smrg    char *name;
33534345a63Smrg    ParseCommon *defs;
33634345a63Smrg    int id;
33734345a63Smrg    unsigned flags;
33834345a63Smrg    Bool compiled;
339f46a6179Smrg} XkbFile;
340f46a6179Smrg
34134345a63Smrgextern Bool CompileKeymap(XkbFile * /* file */ ,
34234345a63Smrg                          XkbFileInfo * /* result */ ,
34334345a63Smrg                          unsigned      /* merge */
34434345a63Smrg    );
34534345a63Smrg
34634345a63Smrgextern Bool CompileKeycodes(XkbFile * /* file */ ,
34734345a63Smrg                            XkbFileInfo * /* result */ ,
34834345a63Smrg                            unsigned    /* merge */
34934345a63Smrg    );
35034345a63Smrg
35134345a63Smrgextern Bool CompileGeometry(XkbFile * /* file */ ,
35234345a63Smrg                            XkbFileInfo * /* result */ ,
35334345a63Smrg                            unsigned    /* merge */
35434345a63Smrg    );
35534345a63Smrg
35634345a63Smrgextern Bool CompileKeyTypes(XkbFile * /* file */ ,
35734345a63Smrg                            XkbFileInfo * /* result */ ,
35834345a63Smrg                            unsigned    /* merge */
35934345a63Smrg    );
360f46a6179Smrg
361f46a6179Smrgtypedef struct _LEDInfo *LEDInfoPtr;
362f46a6179Smrg
36334345a63Smrgextern Bool CompileCompatMap(XkbFile * /* file */ ,
36434345a63Smrg                             XkbFileInfo * /* result */ ,
36534345a63Smrg                             unsigned /* merge */ ,
36634345a63Smrg                             LEDInfoPtr *       /* unboundLEDs */
36734345a63Smrg    );
368f46a6179Smrg
36934345a63Smrgextern Bool CompileSymbols(XkbFile * /* file */ ,
37034345a63Smrg                           XkbFileInfo * /* result */ ,
37134345a63Smrg                           unsigned     /* merge */
37234345a63Smrg    );
373f46a6179Smrg
374f46a6179Smrg#define	WantLongListing	(1<<0)
375f46a6179Smrg#define	WantPartialMaps	(1<<1)
376f46a6179Smrg#define	WantHiddenMaps	(1<<2)
377f46a6179Smrg#define	WantFullNames	(1<<3)
378f46a6179Smrg#define	ListRecursive	(1<<4)
379f46a6179Smrg
38034345a63Smrgextern char *rootDir;
381f46a6179Smrgextern unsigned verboseLevel;
38234345a63Smrgextern unsigned dirsToStrip;
383f46a6179Smrg
38434345a63Smrgextern Bool AddListing(char * /* file */ ,
38534345a63Smrg                       char *   /* map */
38634345a63Smrg    );
387f46a6179Smrg
38834345a63Smrgextern Bool AddMatchingFiles(char *     /* head_in */
38934345a63Smrg    );
390f46a6179Smrg
39134345a63Smrgextern int AddMapOnly(char *    /* map */
39234345a63Smrg    );
393f46a6179Smrg
39434345a63Smrgextern int GenerateListing(char *       /* filename */
39534345a63Smrg    );
396f46a6179Smrg
397f46a6179Smrg#endif /* XKBCOMP_H */
398