xkbcomp.h revision f46a6179
1f46a6179Smrg/* $Xorg: xkbcomp.h,v 1.3 2000/08/17 19:54:33 cpqbld Exp $ */ 2f46a6179Smrg/************************************************************ 3f46a6179Smrg Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc. 4f46a6179Smrg 5f46a6179Smrg Permission to use, copy, modify, and distribute this 6f46a6179Smrg software and its documentation for any purpose and without 7f46a6179Smrg fee is hereby granted, provided that the above copyright 8f46a6179Smrg notice appear in all copies and that both that copyright 9f46a6179Smrg notice and this permission notice appear in supporting 10f46a6179Smrg documentation, and that the name of Silicon Graphics not be 11f46a6179Smrg used in advertising or publicity pertaining to distribution 12f46a6179Smrg of the software without specific prior written permission. 13f46a6179Smrg Silicon Graphics makes no representation about the suitability 14f46a6179Smrg of this software for any purpose. It is provided "as is" 15f46a6179Smrg without any express or implied warranty. 16f46a6179Smrg 17f46a6179Smrg SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 18f46a6179Smrg SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 19f46a6179Smrg AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON 20f46a6179Smrg GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 21f46a6179Smrg DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 22f46a6179Smrg DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 23f46a6179Smrg OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH 24f46a6179Smrg THE USE OR PERFORMANCE OF THIS SOFTWARE. 25f46a6179Smrg 26f46a6179Smrg ********************************************************/ 27f46a6179Smrg/* $XFree86: xc/programs/xkbcomp/xkbcomp.h,v 3.8 2001/12/19 21:30:30 dawes Exp $ */ 28f46a6179Smrg 29f46a6179Smrg#ifndef XKBCOMP_H 30f46a6179Smrg#define XKBCOMP_H 1 31f46a6179Smrg 32f46a6179Smrg#ifndef DEBUG_VAR 33f46a6179Smrg#define DEBUG_VAR_NOT_LOCAL 34f46a6179Smrg#define DEBUG_VAR debugFlags 35f46a6179Smrg#endif 36f46a6179Smrg 37f46a6179Smrg#include <X11/Xlib.h> 38f46a6179Smrg#include <X11/XKBlib.h> 39f46a6179Smrg 40f46a6179Smrg#include "utils.h" 41f46a6179Smrg 42f46a6179Smrg#include <X11/extensions/XKM.h> 43f46a6179Smrg#include <X11/extensions/XKBfile.h> 44f46a6179Smrg 45f46a6179Smrgextern char *scanFile; 46f46a6179Smrg 47f46a6179Smrg#define TypeUnknown 0 48f46a6179Smrg#define TypeBoolean 1 49f46a6179Smrg#define TypeInt 2 50f46a6179Smrg#define TypeFloat 3 51f46a6179Smrg#define TypeString 4 52f46a6179Smrg#define TypeAction 5 53f46a6179Smrg#define TypeKeyName 6 54f46a6179Smrg#define TypeSymbols 7 55f46a6179Smrg 56f46a6179Smrg#define StmtUnknown 0 57f46a6179Smrg#define StmtInclude 1 58f46a6179Smrg#define StmtKeycodeDef 2 59f46a6179Smrg#define StmtKeyAliasDef 3 60f46a6179Smrg#define StmtExpr 4 61f46a6179Smrg#define StmtVarDef 5 62f46a6179Smrg#define StmtKeyTypeDef 6 63f46a6179Smrg#define StmtInterpDef 7 64f46a6179Smrg#define StmtVModDef 8 65f46a6179Smrg#define StmtSymbolsDef 9 66f46a6179Smrg#define StmtModMapDef 10 67f46a6179Smrg#define StmtGroupCompatDef 11 68f46a6179Smrg#define StmtIndicatorMapDef 12 69f46a6179Smrg#define StmtIndicatorNameDef 13 70f46a6179Smrg#define StmtOutlineDef 14 71f46a6179Smrg#define StmtShapeDef 15 72f46a6179Smrg#define StmtKeyDef 16 73f46a6179Smrg#define StmtRowDef 17 74f46a6179Smrg#define StmtSectionDef 18 75f46a6179Smrg#define StmtOverlayKeyDef 19 76f46a6179Smrg#define StmtOverlayDef 20 77f46a6179Smrg#define StmtDoodadDef 21 78f46a6179Smrg 79f46a6179Smrg#define FileSymInterp 100 80f46a6179Smrg 81f46a6179Smrgtypedef struct _ParseCommon { 82f46a6179Smrg unsigned stmtType; 83f46a6179Smrg struct _ParseCommon *next; 84f46a6179Smrg} ParseCommon; 85f46a6179Smrg 86f46a6179Smrg#define ExprValue 0 87f46a6179Smrg#define ExprIdent 1 88f46a6179Smrg#define ExprActionDecl 2 89f46a6179Smrg#define ExprFieldRef 3 90f46a6179Smrg#define ExprArrayRef 4 91f46a6179Smrg#define ExprKeysymList 5 92f46a6179Smrg#define ExprActionList 6 93f46a6179Smrg#define ExprCoord 7 94f46a6179Smrg 95f46a6179Smrg#define OpAdd 20 96f46a6179Smrg#define OpSubtract 21 97f46a6179Smrg#define OpMultiply 22 98f46a6179Smrg#define OpDivide 23 99f46a6179Smrg#define OpAssign 24 100f46a6179Smrg#define OpNot 25 101f46a6179Smrg#define OpNegate 26 102f46a6179Smrg#define OpInvert 27 103f46a6179Smrg#define OpUnaryPlus 28 104f46a6179Smrg 105f46a6179Smrg#define MergeDefault 0 106f46a6179Smrg#define MergeAugment 1 107f46a6179Smrg#define MergeOverride 2 108f46a6179Smrg#define MergeReplace 3 109f46a6179Smrg#define MergeAltForm 4 110f46a6179Smrg 111f46a6179Smrg#define AutoKeyNames (1L << 0) 112f46a6179Smrg#define CreateKeyNames(x) ((x)->flags&AutoKeyNames) 113f46a6179Smrg 114f46a6179Smrgextern unsigned warningLevel; 115f46a6179Smrgextern unsigned optionalParts; 116f46a6179Smrg 117f46a6179Smrgtypedef struct _IncludeStmt { 118f46a6179Smrg ParseCommon common; 119f46a6179Smrg unsigned merge; 120f46a6179Smrg char *stmt; 121f46a6179Smrg char *file; 122f46a6179Smrg char *map; 123f46a6179Smrg char *modifier; 124f46a6179Smrg char *path; 125f46a6179Smrg struct _IncludeStmt *next; 126f46a6179Smrg} IncludeStmt; 127f46a6179Smrg 128f46a6179Smrgtypedef struct _Expr { 129f46a6179Smrg ParseCommon common; 130f46a6179Smrg unsigned op; 131f46a6179Smrg unsigned type; 132f46a6179Smrg union { 133f46a6179Smrg struct { 134f46a6179Smrg struct _Expr *left; 135f46a6179Smrg struct _Expr *right; 136f46a6179Smrg } binary; 137f46a6179Smrg struct { 138f46a6179Smrg Atom element; 139f46a6179Smrg Atom field; 140f46a6179Smrg } field; 141f46a6179Smrg struct { 142f46a6179Smrg Atom element; 143f46a6179Smrg Atom field; 144f46a6179Smrg struct _Expr *entry; 145f46a6179Smrg } array; 146f46a6179Smrg struct { 147f46a6179Smrg Atom name; 148f46a6179Smrg struct _Expr *args; 149f46a6179Smrg } action; 150f46a6179Smrg struct { 151f46a6179Smrg int nSyms; 152f46a6179Smrg int szSyms; 153f46a6179Smrg KeySym * syms; 154f46a6179Smrg } list; 155f46a6179Smrg struct { 156f46a6179Smrg int x; 157f46a6179Smrg int y; 158f46a6179Smrg } coord; 159f46a6179Smrg struct _Expr *child; 160f46a6179Smrg Atom str; 161f46a6179Smrg unsigned uval; 162f46a6179Smrg int ival; 163f46a6179Smrg char keyName[5]; 164f46a6179Smrg Opaque ptr; 165f46a6179Smrg } value; 166f46a6179Smrg} ExprDef; 167f46a6179Smrg 168f46a6179Smrgtypedef struct _VarDef { 169f46a6179Smrg ParseCommon common; 170f46a6179Smrg unsigned merge; 171f46a6179Smrg ExprDef *name; 172f46a6179Smrg ExprDef *value; 173f46a6179Smrg} VarDef; 174f46a6179Smrg 175f46a6179Smrgtypedef struct _VModDef { 176f46a6179Smrg ParseCommon common; 177f46a6179Smrg unsigned merge; 178f46a6179Smrg Atom name; 179f46a6179Smrg ExprDef *value; 180f46a6179Smrg} VModDef; 181f46a6179Smrg 182f46a6179Smrgtypedef struct _KeycodeDef { 183f46a6179Smrg ParseCommon common; 184f46a6179Smrg unsigned merge; 185f46a6179Smrg char name[5]; 186f46a6179Smrg ExprDef *value; 187f46a6179Smrg} KeycodeDef; 188f46a6179Smrg 189f46a6179Smrgtypedef struct _KeyAliasDef { 190f46a6179Smrg ParseCommon common; 191f46a6179Smrg unsigned merge; 192f46a6179Smrg char alias[5]; 193f46a6179Smrg char real[5]; 194f46a6179Smrg} KeyAliasDef; 195f46a6179Smrg 196f46a6179Smrgtypedef struct _KeyTypeDef { 197f46a6179Smrg ParseCommon common; 198f46a6179Smrg unsigned merge; 199f46a6179Smrg Atom name; 200f46a6179Smrg VarDef *body; 201f46a6179Smrg} KeyTypeDef; 202f46a6179Smrg 203f46a6179Smrgtypedef struct _SymbolsDef { 204f46a6179Smrg ParseCommon common; 205f46a6179Smrg unsigned merge; 206f46a6179Smrg char keyName[5]; 207f46a6179Smrg ExprDef * symbols; 208f46a6179Smrg} SymbolsDef; 209f46a6179Smrg 210f46a6179Smrgtypedef struct _ModMapDef { 211f46a6179Smrg ParseCommon common; 212f46a6179Smrg unsigned merge; 213f46a6179Smrg Atom modifier; 214f46a6179Smrg ExprDef * keys; 215f46a6179Smrg} ModMapDef; 216f46a6179Smrg 217f46a6179Smrgtypedef struct _GroupCompatDef { 218f46a6179Smrg ParseCommon common; 219f46a6179Smrg unsigned merge; 220f46a6179Smrg int group; 221f46a6179Smrg ExprDef * def; 222f46a6179Smrg} GroupCompatDef; 223f46a6179Smrg 224f46a6179Smrgtypedef struct _InterpDef { 225f46a6179Smrg ParseCommon common; 226f46a6179Smrg unsigned merge; 227f46a6179Smrg KeySym sym; 228f46a6179Smrg ExprDef *match; 229f46a6179Smrg VarDef *def; 230f46a6179Smrg} InterpDef; 231f46a6179Smrg 232f46a6179Smrgtypedef struct _IndicatorNameDef { 233f46a6179Smrg ParseCommon common; 234f46a6179Smrg unsigned merge; 235f46a6179Smrg int ndx; 236f46a6179Smrg ExprDef * name; 237f46a6179Smrg Bool virtual; 238f46a6179Smrg} IndicatorNameDef; 239f46a6179Smrg 240f46a6179Smrgtypedef struct _OutlineDef { 241f46a6179Smrg ParseCommon common; 242f46a6179Smrg Atom field; 243f46a6179Smrg int nPoints; 244f46a6179Smrg ExprDef * points; 245f46a6179Smrg} OutlineDef; 246f46a6179Smrg 247f46a6179Smrgtypedef struct _ShapeDef { 248f46a6179Smrg ParseCommon common; 249f46a6179Smrg unsigned merge; 250f46a6179Smrg Atom name; 251f46a6179Smrg int nOutlines; 252f46a6179Smrg OutlineDef * outlines; 253f46a6179Smrg} ShapeDef; 254f46a6179Smrg 255f46a6179Smrgtypedef struct _KeyDef { 256f46a6179Smrg ParseCommon common; 257f46a6179Smrg unsigned defined; 258f46a6179Smrg char * name; 259f46a6179Smrg ExprDef * expr; 260f46a6179Smrg} KeyDef; 261f46a6179Smrg 262f46a6179Smrgtypedef struct _RowDef { 263f46a6179Smrg ParseCommon common; 264f46a6179Smrg int nKeys; 265f46a6179Smrg KeyDef * keys; 266f46a6179Smrg} RowDef; 267f46a6179Smrg 268f46a6179Smrgtypedef struct _SectionDef { 269f46a6179Smrg ParseCommon common; 270f46a6179Smrg unsigned merge; 271f46a6179Smrg Atom name; 272f46a6179Smrg int nRows; 273f46a6179Smrg RowDef * rows; 274f46a6179Smrg} SectionDef; 275f46a6179Smrg 276f46a6179Smrgtypedef struct _OverlayKeyDef { 277f46a6179Smrg ParseCommon common; 278f46a6179Smrg char over[5]; 279f46a6179Smrg char under[5]; 280f46a6179Smrg} OverlayKeyDef; 281f46a6179Smrg 282f46a6179Smrgtypedef struct _OverlayDef { 283f46a6179Smrg ParseCommon common; 284f46a6179Smrg unsigned merge; 285f46a6179Smrg Atom name; 286f46a6179Smrg int nKeys; 287f46a6179Smrg OverlayKeyDef * keys; 288f46a6179Smrg} OverlayDef; 289f46a6179Smrg 290f46a6179Smrgtypedef struct _DoodadDef { 291f46a6179Smrg ParseCommon common; 292f46a6179Smrg unsigned merge; 293f46a6179Smrg unsigned type; 294f46a6179Smrg Atom name; 295f46a6179Smrg VarDef * body; 296f46a6179Smrg} DoodadDef; 297f46a6179Smrg 298f46a6179Smrg/* IndicatorMapDef doesn't use the type field, but the rest of the fields 299f46a6179Smrg need to be at the same offsets as in DoodadDef. Use #define to avoid 300f46a6179Smrg any strict aliasing problems. */ 301f46a6179Smrg#define IndicatorMapDef DoodadDef 302f46a6179Smrg 303f46a6179Smrgtypedef struct _XkbFile { 304f46a6179Smrg ParseCommon common; 305f46a6179Smrg int type; 306f46a6179Smrg char * topName; 307f46a6179Smrg char * name; 308f46a6179Smrg ParseCommon *defs; 309f46a6179Smrg int id; 310f46a6179Smrg unsigned flags; 311f46a6179Smrg Bool compiled; 312f46a6179Smrg} XkbFile; 313f46a6179Smrg 314f46a6179Smrgextern Bool CompileKeymap( 315f46a6179Smrg XkbFile * /* file */, 316f46a6179Smrg XkbFileInfo * /* result */, 317f46a6179Smrg unsigned /* merge */ 318f46a6179Smrg); 319f46a6179Smrg 320f46a6179Smrgextern Bool CompileKeycodes( 321f46a6179Smrg XkbFile * /* file */, 322f46a6179Smrg XkbFileInfo * /* result */, 323f46a6179Smrg unsigned /* merge */ 324f46a6179Smrg); 325f46a6179Smrg 326f46a6179Smrgextern Bool CompileGeometry( 327f46a6179Smrg XkbFile * /* file */, 328f46a6179Smrg XkbFileInfo * /* result */, 329f46a6179Smrg unsigned /* merge */ 330f46a6179Smrg); 331f46a6179Smrg 332f46a6179Smrgextern Bool CompileKeyTypes( 333f46a6179Smrg XkbFile * /* file */, 334f46a6179Smrg XkbFileInfo * /* result */, 335f46a6179Smrg unsigned /* merge */ 336f46a6179Smrg); 337f46a6179Smrg 338f46a6179Smrgtypedef struct _LEDInfo *LEDInfoPtr; 339f46a6179Smrg 340f46a6179Smrgextern Bool CompileCompatMap( 341f46a6179Smrg XkbFile * /* file */, 342f46a6179Smrg XkbFileInfo * /* result */, 343f46a6179Smrg unsigned /* merge */, 344f46a6179Smrg LEDInfoPtr * /* unboundLEDs */ 345f46a6179Smrg); 346f46a6179Smrg 347f46a6179Smrgextern Bool CompileSymbols( 348f46a6179Smrg XkbFile * /* file */, 349f46a6179Smrg XkbFileInfo * /* result */, 350f46a6179Smrg unsigned /* merge */ 351f46a6179Smrg); 352f46a6179Smrg 353f46a6179Smrg#define WantLongListing (1<<0) 354f46a6179Smrg#define WantPartialMaps (1<<1) 355f46a6179Smrg#define WantHiddenMaps (1<<2) 356f46a6179Smrg#define WantFullNames (1<<3) 357f46a6179Smrg#define ListRecursive (1<<4) 358f46a6179Smrg 359f46a6179Smrgextern char * rootDir; 360f46a6179Smrgextern unsigned verboseLevel; 361f46a6179Smrgextern unsigned dirsToStrip; 362f46a6179Smrg 363f46a6179Smrgextern Bool AddListing( 364f46a6179Smrg char * /* file */, 365f46a6179Smrg char * /* map */ 366f46a6179Smrg); 367f46a6179Smrg 368f46a6179Smrgextern Bool AddMatchingFiles( 369f46a6179Smrg char * /* head_in */ 370f46a6179Smrg); 371f46a6179Smrg 372f46a6179Smrgextern int AddMapOnly( 373f46a6179Smrg char * /* map */ 374f46a6179Smrg); 375f46a6179Smrg 376f46a6179Smrgextern int GenerateListing( 377f46a6179Smrg char * /* filename */ 378f46a6179Smrg); 379f46a6179Smrg 380f46a6179Smrg#endif /* XKBCOMP_H */ 381