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 346930ead5Smrg#ifdef HAVE_CONFIG_H 356930ead5Smrg#include "config.h" 366930ead5Smrg#endif 376930ead5Smrg 38f46a6179Smrg#include <X11/Xlib.h> 39f46a6179Smrg#include <X11/XKBlib.h> 40f46a6179Smrg 41f46a6179Smrg#include "utils.h" 42f46a6179Smrg 43f46a6179Smrg#include <X11/extensions/XKM.h> 44f46a6179Smrg#include <X11/extensions/XKBfile.h> 45f46a6179Smrg 46f46a6179Smrgextern char *scanFile; 47f46a6179Smrg 48f46a6179Smrg#define TypeUnknown 0 49f46a6179Smrg#define TypeBoolean 1 50f46a6179Smrg#define TypeInt 2 51f46a6179Smrg#define TypeFloat 3 52f46a6179Smrg#define TypeString 4 53f46a6179Smrg#define TypeAction 5 54f46a6179Smrg#define TypeKeyName 6 55f46a6179Smrg#define TypeSymbols 7 56f46a6179Smrg 57f46a6179Smrg#define StmtUnknown 0 58f46a6179Smrg#define StmtInclude 1 59f46a6179Smrg#define StmtKeycodeDef 2 60f46a6179Smrg#define StmtKeyAliasDef 3 61f46a6179Smrg#define StmtExpr 4 62f46a6179Smrg#define StmtVarDef 5 63f46a6179Smrg#define StmtKeyTypeDef 6 64f46a6179Smrg#define StmtInterpDef 7 65f46a6179Smrg#define StmtVModDef 8 66f46a6179Smrg#define StmtSymbolsDef 9 67f46a6179Smrg#define StmtModMapDef 10 68f46a6179Smrg#define StmtGroupCompatDef 11 69f46a6179Smrg#define StmtIndicatorMapDef 12 70f46a6179Smrg#define StmtIndicatorNameDef 13 71f46a6179Smrg#define StmtOutlineDef 14 72f46a6179Smrg#define StmtShapeDef 15 73f46a6179Smrg#define StmtKeyDef 16 74f46a6179Smrg#define StmtRowDef 17 75f46a6179Smrg#define StmtSectionDef 18 76f46a6179Smrg#define StmtOverlayKeyDef 19 77f46a6179Smrg#define StmtOverlayDef 20 78f46a6179Smrg#define StmtDoodadDef 21 79f46a6179Smrg 80f46a6179Smrg#define FileSymInterp 100 81f46a6179Smrg 8234345a63Smrgtypedef struct _ParseCommon 8334345a63Smrg{ 8434345a63Smrg unsigned stmtType; 8534345a63Smrg struct _ParseCommon *next; 86f46a6179Smrg} ParseCommon; 87f46a6179Smrg 88f46a6179Smrg#define ExprValue 0 89f46a6179Smrg#define ExprIdent 1 90f46a6179Smrg#define ExprActionDecl 2 91f46a6179Smrg#define ExprFieldRef 3 92f46a6179Smrg#define ExprArrayRef 4 93f46a6179Smrg#define ExprKeysymList 5 94f46a6179Smrg#define ExprActionList 6 95f46a6179Smrg#define ExprCoord 7 96f46a6179Smrg 97f46a6179Smrg#define OpAdd 20 98f46a6179Smrg#define OpSubtract 21 99f46a6179Smrg#define OpMultiply 22 100f46a6179Smrg#define OpDivide 23 101f46a6179Smrg#define OpAssign 24 102f46a6179Smrg#define OpNot 25 103f46a6179Smrg#define OpNegate 26 104f46a6179Smrg#define OpInvert 27 105f46a6179Smrg#define OpUnaryPlus 28 106f46a6179Smrg 107f46a6179Smrg#define MergeDefault 0 108f46a6179Smrg#define MergeAugment 1 109f46a6179Smrg#define MergeOverride 2 110f46a6179Smrg#define MergeReplace 3 111f46a6179Smrg#define MergeAltForm 4 112f46a6179Smrg 113f46a6179Smrg#define AutoKeyNames (1L << 0) 114f46a6179Smrg#define CreateKeyNames(x) ((x)->flags&AutoKeyNames) 115f46a6179Smrg 11634345a63Smrgextern unsigned warningLevel; 11734345a63Smrg 11834345a63Smrgtypedef struct _IncludeStmt 11934345a63Smrg{ 12034345a63Smrg ParseCommon common; 12134345a63Smrg unsigned merge; 12234345a63Smrg char *stmt; 12334345a63Smrg char *file; 12434345a63Smrg char *map; 12534345a63Smrg char *modifier; 12634345a63Smrg char *path; 12734345a63Smrg struct _IncludeStmt *next; 128f46a6179Smrg} IncludeStmt; 129f46a6179Smrg 13034345a63Smrgtypedef struct _Expr 13134345a63Smrg{ 13234345a63Smrg ParseCommon common; 13334345a63Smrg unsigned op; 13434345a63Smrg unsigned type; 13534345a63Smrg union 13634345a63Smrg { 13734345a63Smrg struct 13834345a63Smrg { 13934345a63Smrg struct _Expr *left; 14034345a63Smrg struct _Expr *right; 14134345a63Smrg } binary; 14234345a63Smrg struct 14334345a63Smrg { 14434345a63Smrg Atom element; 14534345a63Smrg Atom field; 14634345a63Smrg } field; 14734345a63Smrg struct 14834345a63Smrg { 14934345a63Smrg Atom element; 15034345a63Smrg Atom field; 15134345a63Smrg struct _Expr *entry; 15234345a63Smrg } array; 15334345a63Smrg struct 15434345a63Smrg { 15534345a63Smrg Atom name; 15634345a63Smrg struct _Expr *args; 15734345a63Smrg } action; 15834345a63Smrg struct 15934345a63Smrg { 16034345a63Smrg int nSyms; 16134345a63Smrg int szSyms; 16283e5f723Smrg char **syms; 16334345a63Smrg } list; 16434345a63Smrg struct 16534345a63Smrg { 16634345a63Smrg int x; 16734345a63Smrg int y; 16834345a63Smrg } coord; 16934345a63Smrg struct _Expr *child; 17034345a63Smrg Atom str; 17134345a63Smrg unsigned uval; 17234345a63Smrg int ival; 17334345a63Smrg char keyName[5]; 1746930ead5Smrg void *ptr; 175f46a6179Smrg } value; 176f46a6179Smrg} ExprDef; 177f46a6179Smrg 17834345a63Smrgtypedef struct _VarDef 17934345a63Smrg{ 18034345a63Smrg ParseCommon common; 18134345a63Smrg unsigned merge; 18234345a63Smrg ExprDef *name; 18334345a63Smrg ExprDef *value; 184f46a6179Smrg} VarDef; 185f46a6179Smrg 18634345a63Smrgtypedef struct _VModDef 18734345a63Smrg{ 18834345a63Smrg ParseCommon common; 18934345a63Smrg unsigned merge; 19034345a63Smrg Atom name; 19134345a63Smrg ExprDef *value; 192f46a6179Smrg} VModDef; 193f46a6179Smrg 19434345a63Smrgtypedef struct _KeycodeDef 19534345a63Smrg{ 19634345a63Smrg ParseCommon common; 19734345a63Smrg unsigned merge; 19834345a63Smrg char name[5]; 19934345a63Smrg ExprDef *value; 200f46a6179Smrg} KeycodeDef; 201f46a6179Smrg 20234345a63Smrgtypedef struct _KeyAliasDef 20334345a63Smrg{ 20434345a63Smrg ParseCommon common; 20534345a63Smrg unsigned merge; 20634345a63Smrg char alias[5]; 20734345a63Smrg char real[5]; 208f46a6179Smrg} KeyAliasDef; 209f46a6179Smrg 21034345a63Smrgtypedef struct _KeyTypeDef 21134345a63Smrg{ 21234345a63Smrg ParseCommon common; 21334345a63Smrg unsigned merge; 21434345a63Smrg Atom name; 21534345a63Smrg VarDef *body; 216f46a6179Smrg} KeyTypeDef; 217f46a6179Smrg 21834345a63Smrgtypedef struct _SymbolsDef 21934345a63Smrg{ 22034345a63Smrg ParseCommon common; 22134345a63Smrg unsigned merge; 22234345a63Smrg char keyName[5]; 22334345a63Smrg ExprDef *symbols; 224f46a6179Smrg} SymbolsDef; 225f46a6179Smrg 22634345a63Smrgtypedef struct _ModMapDef 22734345a63Smrg{ 22834345a63Smrg ParseCommon common; 22934345a63Smrg unsigned merge; 23034345a63Smrg Atom modifier; 23134345a63Smrg ExprDef *keys; 232f46a6179Smrg} ModMapDef; 233f46a6179Smrg 23434345a63Smrgtypedef struct _GroupCompatDef 23534345a63Smrg{ 23634345a63Smrg ParseCommon common; 23734345a63Smrg unsigned merge; 23834345a63Smrg int group; 23934345a63Smrg ExprDef *def; 240f46a6179Smrg} GroupCompatDef; 241f46a6179Smrg 24234345a63Smrgtypedef struct _InterpDef 24334345a63Smrg{ 24434345a63Smrg ParseCommon common; 24534345a63Smrg unsigned merge; 24634345a63Smrg KeySym sym; 24734345a63Smrg ExprDef *match; 24834345a63Smrg VarDef *def; 249690143ccSmrg Bool ignore; 250f46a6179Smrg} InterpDef; 251f46a6179Smrg 25234345a63Smrgtypedef struct _IndicatorNameDef 25334345a63Smrg{ 25434345a63Smrg ParseCommon common; 25534345a63Smrg unsigned merge; 25634345a63Smrg int ndx; 25734345a63Smrg ExprDef *name; 25834345a63Smrg Bool virtual; 259f46a6179Smrg} IndicatorNameDef; 260f46a6179Smrg 26134345a63Smrgtypedef struct _OutlineDef 26234345a63Smrg{ 26334345a63Smrg ParseCommon common; 26434345a63Smrg Atom field; 26534345a63Smrg int nPoints; 26634345a63Smrg ExprDef *points; 267f46a6179Smrg} OutlineDef; 268f46a6179Smrg 26934345a63Smrgtypedef struct _ShapeDef 27034345a63Smrg{ 27134345a63Smrg ParseCommon common; 27234345a63Smrg unsigned merge; 27334345a63Smrg Atom name; 27434345a63Smrg int nOutlines; 27534345a63Smrg OutlineDef *outlines; 276f46a6179Smrg} ShapeDef; 277f46a6179Smrg 27834345a63Smrgtypedef struct _KeyDef 27934345a63Smrg{ 28034345a63Smrg ParseCommon common; 28134345a63Smrg unsigned defined; 28234345a63Smrg char *name; 28334345a63Smrg ExprDef *expr; 284f46a6179Smrg} KeyDef; 285f46a6179Smrg 28634345a63Smrgtypedef struct _RowDef 28734345a63Smrg{ 28834345a63Smrg ParseCommon common; 28934345a63Smrg int nKeys; 29034345a63Smrg KeyDef *keys; 291f46a6179Smrg} RowDef; 292f46a6179Smrg 29334345a63Smrgtypedef struct _SectionDef 29434345a63Smrg{ 29534345a63Smrg ParseCommon common; 29634345a63Smrg unsigned merge; 29734345a63Smrg Atom name; 29834345a63Smrg int nRows; 29934345a63Smrg RowDef *rows; 300f46a6179Smrg} SectionDef; 301f46a6179Smrg 30234345a63Smrgtypedef struct _OverlayKeyDef 30334345a63Smrg{ 30434345a63Smrg ParseCommon common; 30534345a63Smrg char over[5]; 30634345a63Smrg char under[5]; 307f46a6179Smrg} OverlayKeyDef; 308f46a6179Smrg 30934345a63Smrgtypedef struct _OverlayDef 31034345a63Smrg{ 31134345a63Smrg ParseCommon common; 31234345a63Smrg unsigned merge; 31334345a63Smrg Atom name; 31434345a63Smrg int nKeys; 31534345a63Smrg OverlayKeyDef *keys; 316f46a6179Smrg} OverlayDef; 317f46a6179Smrg 31834345a63Smrgtypedef struct _DoodadDef 31934345a63Smrg{ 32034345a63Smrg ParseCommon common; 32134345a63Smrg unsigned merge; 32234345a63Smrg unsigned type; 32334345a63Smrg Atom name; 32434345a63Smrg VarDef *body; 325f46a6179Smrg} DoodadDef; 326f46a6179Smrg 327f46a6179Smrg/* IndicatorMapDef doesn't use the type field, but the rest of the fields 328f46a6179Smrg need to be at the same offsets as in DoodadDef. Use #define to avoid 329f46a6179Smrg any strict aliasing problems. */ 330f46a6179Smrg#define IndicatorMapDef DoodadDef 331f46a6179Smrg 33234345a63Smrgtypedef struct _XkbFile 33334345a63Smrg{ 33434345a63Smrg ParseCommon common; 33534345a63Smrg int type; 33634345a63Smrg char *topName; 33734345a63Smrg char *name; 33834345a63Smrg ParseCommon *defs; 33934345a63Smrg int id; 34034345a63Smrg unsigned flags; 34134345a63Smrg Bool compiled; 342f46a6179Smrg} XkbFile; 343f46a6179Smrg 34434345a63Smrgextern Bool CompileKeymap(XkbFile * /* file */ , 34534345a63Smrg XkbFileInfo * /* result */ , 34634345a63Smrg unsigned /* merge */ 34734345a63Smrg ); 34834345a63Smrg 34934345a63Smrgextern Bool CompileKeycodes(XkbFile * /* file */ , 35034345a63Smrg XkbFileInfo * /* result */ , 35134345a63Smrg unsigned /* merge */ 35234345a63Smrg ); 35334345a63Smrg 35434345a63Smrgextern Bool CompileGeometry(XkbFile * /* file */ , 35534345a63Smrg XkbFileInfo * /* result */ , 35634345a63Smrg unsigned /* merge */ 35734345a63Smrg ); 35834345a63Smrg 35934345a63Smrgextern Bool CompileKeyTypes(XkbFile * /* file */ , 36034345a63Smrg XkbFileInfo * /* result */ , 36134345a63Smrg unsigned /* merge */ 36234345a63Smrg ); 363f46a6179Smrg 364f46a6179Smrgtypedef struct _LEDInfo *LEDInfoPtr; 365f46a6179Smrg 3666930ead5Smrgextern Bool CompileCompatMap(const XkbFile * /* file */ , 36734345a63Smrg XkbFileInfo * /* result */ , 36834345a63Smrg unsigned /* merge */ , 36934345a63Smrg LEDInfoPtr * /* unboundLEDs */ 37034345a63Smrg ); 371f46a6179Smrg 37234345a63Smrgextern Bool CompileSymbols(XkbFile * /* file */ , 37334345a63Smrg XkbFileInfo * /* result */ , 37434345a63Smrg unsigned /* merge */ 37534345a63Smrg ); 376f46a6179Smrg 377f46a6179Smrg#define WantLongListing (1<<0) 378f46a6179Smrg#define WantPartialMaps (1<<1) 379f46a6179Smrg#define WantHiddenMaps (1<<2) 380f46a6179Smrg#define WantFullNames (1<<3) 381f46a6179Smrg#define ListRecursive (1<<4) 382f46a6179Smrg 383f46a6179Smrgextern unsigned verboseLevel; 38434345a63Smrgextern unsigned dirsToStrip; 385f46a6179Smrg 38634345a63Smrgextern Bool AddMatchingFiles(char * /* head_in */ 38734345a63Smrg ); 388f46a6179Smrg 38934345a63Smrgextern int AddMapOnly(char * /* map */ 39034345a63Smrg ); 391f46a6179Smrg 3926930ead5Smrgextern int GenerateListing(const char * /* filename */ 39334345a63Smrg ); 394f46a6179Smrg 395f46a6179Smrg#endif /* XKBCOMP_H */ 396