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