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