From 19bbd2eb819db766305f269b74226276252f93d3 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 16 Sep 2004 17:38:45 +0000 Subject: [PATCH] * xkb header conversion donated by Ido Kannner --- packages/extra/x11/xkb.pp | 999 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 999 insertions(+) create mode 100644 packages/extra/x11/xkb.pp diff --git a/packages/extra/x11/xkb.pp b/packages/extra/x11/xkb.pp new file mode 100644 index 0000000000..3d9f369c27 --- /dev/null +++ b/packages/extra/x11/xkb.pp @@ -0,0 +1,999 @@ +{ + $Xorg: XKB.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $ +************************************************************ +Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. + +Permission to use, copy, modify, and distribute this +software and its documentation for any purpose and without +fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting +documentation, and that the name of Silicon Graphics not be +used in advertising or publicity pertaining to distribution +of the software without specific prior written permission. +Silicon Graphics makes no representation about the suitability +of this software for any purpose. It is provided "as is" +without any express or implied warranty. + +SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON +GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THIS SOFTWARE. + +******************************************************** + $XFree86: xc/include/extensions/XKB.h,v 1.5 2002/11/20 04:49:01 dawes Exp $ + + Pascal Convertion was made by Ido Kannner. + +History: + 2004/09/15 - 2004/09/16 - Convertion from the c header of XKB.h. + Thanks for mmc in #xlib on freenode irc for the help + in understanding some of the problems I had converting + this header. +} +{$PACKRECORDS C} +{$MODE OBJFPC} {$MACRO ON} {$DEFINE MACRO} +{.$DEFINE XKBstr_UNIT} {.$DEFINE XI_UNIT} +unit XKB; +interface +{$IFDEF XKBstr_UNIT} +uses XKBstr; +{$ENDIF} + + { + XKB request codes, used in: + - xkbReqType field of all requests + - requestMinor field of some events + } +const + X_kbUseExtension = 0; + X_kbSelectEvents = 1; + X_kbBell = 3; + X_kbGetState = 4; + X_kbLatchLockState = 5; + X_kbGetControls = 6; + X_kbSetControls = 7; + X_kbGetMap = 8; + X_kbSetMap = 9; + X_kbGetCompatMap = 10; + X_kbSetCompatMap = 11; + X_kbGetIndicatorState = 12; + X_kbGetIndicatorMap = 13; + X_kbSetIndicatorMap = 14; + X_kbGetNamedIndicator = 15; + X_kbSetNamedIndicator = 16; + X_kbGetNames = 17; + X_kbSetNames = 18; + X_kbGetGeometry = 19; + X_kbSetGeometry = 20; + X_kbPerClientFlags = 21; + X_kbListComponents = 22; + X_kbGetKbdByName = 23; + X_kbGetDeviceInfo = 24; + X_kbSetDeviceInfo = 25; + X_kbSetDebuggingFlags = 101; + + { + In the X sense, XKB reports only one event. + The type field of all XKB events is XkbEventCode + } +const + XkbEventCode = 0; + XkbNumberEvents = XkbEventCode +1; + + { + XKB has a minor event code so it can use one X event code for + multiple purposes. + - reported in the xkbType field of all XKB events. + - XkbSelectEventDetails: Indicates the event for which event details + are being changed + } +const + XkbNewKeyboardNotify = 0; + XkbMapNotify = 1; + XkbStateNotify = 2; + XkbControlsNotify = 3; + XkbIndicatorStateNotify = 4; + XkbIndicatorMapNotify = 5; + XkbNamesNotify = 6; + XkbCompatMapNotify = 7; + XkbBellNotify = 8; + XkbActionMessage = 9; + XkbAccessXNotify = 10; + XkbExtensionDeviceNotify = 11; + + { + Event Mask: + - XkbSelectEvents: Specifies event interest. + } +const + XkbNewKeyboardNotifyMask = Cardinal(1) shl 0; + XkbMapNotifyMask = Cardinal(1) shl 1; + XkbStateNotifyMask = Cardinal(1) shl 2; + XkbControlsNotifyMask = Cardinal(1) shl 3; + XkbIndicatorStateNotifyMask = Cardinal(1) shl 4; + XkbIndicatorMapNotifyMask = Cardinal(1) shl 5; + XkbNamesNotifyMask = Cardinal(1) shl 6; + XkbCompatMapNotifyMask = Cardinal(1) shl 7; + XkbBellNotifyMask = Cardinal(1) shl 8; + XkbActionMessageMask = Cardinal(1) shl 9; + XkbAccessXNotifyMask = Cardinal(1) shl 10; + XkbExtensionDeviceNotifyMask = Cardinal(1) shl 11; + XkbAllEventsMask = $FFF; + + { + NewKeyboardNotify event details: + } +const + XkbNKN_KeycodesMask = Cardinal(1) shl 0; + XkbNKN_GeometryMask = Cardinal(1) shl 1; + XkbNKN_DeviceIDMask = Cardinal(1) shl 2; + XkbAllNewKeyboardEventsMask = $7; + + { + AccessXNotify event types: + - The 'what' field of AccessXNotify events reports the + reason that the event was generated. + } +const + XkbAXN_SKPress = 0; + XkbAXN_SKAccept = 1; + XkbAXN_SKReject = 2; + XkbAXN_SKRelease = 3; + XkbAXN_BKAccept = 4; + XkbAXN_BKReject = 5; + XkbAXN_AXKWarning = 6; + + { + AccessXNotify details: + - Used as an event detail mask to limit the conditions under which + AccessXNotify events are reported + } +const + XkbAXN_SKPressMask = Cardinal(1) shl 0; + XkbAXN_SKAcceptMask = Cardinal(1) shl 1; + XkbAXN_SKRejectMask = Cardinal(1) shl 2; + XkbAXN_SKReleaseMask = Cardinal(1) shl 3; + XkbAXN_BKAcceptMask = Cardinal(1) shl 4; + XkbAXN_BKRejectMask = Cardinal(1) shl 5; + XkbAXN_AXKWarningMask = Cardinal(1) shl 6; + XkbAllAccessXEventsMask = $f; + { + State detail mask: + - The 'changed' field of StateNotify events reports which of + the keyboard state components have changed. + - Used as an event detail mask to limit the conditions under + which StateNotify events are reported. + } +const + XkbModifierStateMask = Cardinal(1) shl 0; + XkbModifierBaseMask = Cardinal(1) shl 1; + XkbModifierLatchMask = Cardinal(1) shl 2; + XkbModifierLockMask = Cardinal(1) shl 3; + XkbGroupStateMask = Cardinal(1) shl 4; + XkbGroupBaseMask = Cardinal(1) shl 5; + XkbGroupLatchMask = Cardinal(1) shl 6; + XkbGroupLockMask = Cardinal(1) shl 7; + XkbCompatStateMask = Cardinal(1) shl 8; + XkbGrabModsMask = Cardinal(1) shl 9; + XkbCompatGrabModsMask = Cardinal(1) shl 10; + XkbLookupModsMask = Cardinal(1) shl 11; + XkbCompatLookupModsMask = Cardinal(1) shl 12; + XkbPointerButtonMask = Cardinal(1) shl 13; + XkbAllStateComponentsMask = $3fff; + + { + Controls detail masks: + The controls specified in XkbAllControlsMask: + - The 'changed' field of ControlsNotify events reports which of + the keyboard controls have changed. + - The 'changeControls' field of the SetControls request specifies + the controls for which values are to be changed. + - Used as an event detail mask to limit the conditions under + which ControlsNotify events are reported. + + The controls specified in the XkbAllBooleanCtrlsMask: + - The 'enabledControls' field of ControlsNotify events reports the + current status of the boolean controls. + - The 'enabledControlsChanges' field of ControlsNotify events reports + any boolean controls that have been turned on or off. + - The 'affectEnabledControls' and 'enabledControls' fields of the + kbSetControls request change the set of enabled controls. + - The 'accessXTimeoutMask' and 'accessXTimeoutValues' fields of + an XkbControlsRec specify the controls to be changed if the keyboard + times out and the values to which they should be changed. + - The 'autoCtrls' and 'autoCtrlsValues' fields of the PerClientFlags + request specifies the specify the controls to be reset when the + client exits and the values to which they should be reset. + - The 'ctrls' field of an indicator map specifies the controls + that drive the indicator. + - Specifies the boolean controls affected by the SetControls and + LockControls key actions. + } +const + XkbRepeatKeysMask = Cardinal(1) shl 0; + XkbSlowKeysMask = Cardinal(1) shl 1; + XkbBounceKeysMask = Cardinal(1) shl 2; + XkbStickyKeysMask = Cardinal(1) shl 3; + XkbMouseKeysMask = Cardinal(1) shl 4; + XkbMouseKeysAccelMask = Cardinal(1) shl 5; + XkbAccessXKeysMask = Cardinal(1) shl 6; + XkbAccessXTimeoutMask = Cardinal(1) shl 7; + XkbAccessXFeedbackMask = Cardinal(1) shl 8; + XkbAudibleBellMask = Cardinal(1) shl 9; + XkbOverlay1Mask = Cardinal(1) shl 10; + XkbOverlay2Mask = Cardinal(1) shl 11; + XkbIgnoreGroupLockMask = Cardinal(1) shl 12; + XkbGroupsWrapMask = Cardinal(1) shl 27; + XkbInternalModsMask = Cardinal(1) shl 28; + XkbIgnoreLockModsMask = Cardinal(1) shl 29; + XkbPerKeyRepeatMask = Cardinal(1) shl 30; + XkbControlsEnabledMask = Cardinal(1) shl 31; + + XkbAccessXOptionsMask = XkbStickyKeysMask or XkbAccessXFeedbackMask; + + XkbAllBooleanCtrlsMask = $00001FFF; + XkbAllControlsMask = $F8001FFF; + //XkbAllControlEventsMask = XkbAllControlsMask; + + { + Compatibility Map Compontents: + - Specifies the components to be allocated in XkbAllocCompatMap. + } +const + XkbSymInterpMask = 1 shl 0; + XkbGroupCompatMask = 1 shl 1; + XkbAllCompatMask = $3; + + { + Assorted constants and limits. + } +const + XkbAllIndicatorsMask = $ffffffff; + + { + Map components masks: + Those in AllMapComponentsMask: + - Specifies the individual fields to be loaded or changed for the + GetMap and SetMap requests. + Those in ClientInfoMask: + - Specifies the components to be allocated by XkbAllocClientMap. + Those in ServerInfoMask: + - Specifies the components to be allocated by XkbAllocServerMap. + } +const + XkbKeyTypesMask = 1 shl 0; + XkbKeySymsMask = 1 shl 1; + XkbModifierMapMask = 1 shl 2; + XkbExplicitComponentsMask = 1 shl 3; + XkbKeyActionsMask = 1 shl 4; + XkbKeyBehaviorsMask = 1 shl 5; + XkbVirtualModsMask = 1 shl 6; + XkbVirtualModMapMask = 1 shl 7; + + XkbAllClientInfoMask = XkbKeyTypesMask or XkbKeySymsMask or XkbModifierMapMask; + XkbAllServerInfoMask = XkbExplicitComponentsMask or XkbKeyActionsMask or XkbKeyBehaviorsMask or + XkbVirtualModsMask or XkbVirtualModMapMask; + XkbAllMapComponentsMask = XkbAllClientInfoMask or XkbAllServerInfoMask; + + { + Names component mask: + - Specifies the names to be loaded or changed for the GetNames and + SetNames requests. + - Specifies the names that have changed in a NamesNotify event. + - Specifies the names components to be allocated by XkbAllocNames. + } +const + XkbKeycodesNameMask = 1 shl 0; + XkbGeometryNameMask = 1 shl 1; + XkbSymbolsNameMask = 1 shl 2; + XkbPhysSymbolsNameMask = 1 shl 3; + XkbTypesNameMask = 1 shl 4; + XkbCompatNameMask = 1 shl 5; + XkbKeyTypeNamesMask = 1 shl 6; + XkbKTLevelNamesMask = 1 shl 7; + XkbIndicatorNamesMask = 1 shl 8; + XkbKeyNamesMask = 1 shl 9; + XkbKeyAliasesMask = 1 shl 10; + XkbVirtualModNamesMask = 1 shl 11; + XkbGroupNamesMask = 1 shl 12; + XkbRGNamesMask = 1 shl 13; + XkbComponentNamesMask = $3f; + XkbAllNamesMask = $3fff; + + { + Miscellaneous event details: + - event detail masks for assorted events that don't reall + have any details. + } +const + XkbAllStateEventsMask = XkbAllStateComponentsMask; + XkbAllMapEventsMask = XkbAllMapComponentsMask; + XkbAllControlEventsMask = XkbAllControlsMask; + XkbAllIndicatorEventsMask = XkbAllIndicatorsMask; + XkbAllNameEventsMask = XkbAllNamesMask; + XkbAllCompatMapEventsMask = XkbAllCompatMask; + XkbAllBellEventsMask = Cardinal(1) shl 0; + XkbAllActionMessagesMask = Cardinal(1) shl 0; + + { + XKB reports one error: BadKeyboard + A further reason for the error is encoded into to most significant + byte of the resourceID for the error: + XkbErr_BadDevice - the device in question was not found + XkbErr_BadClass - the device was found but it doesn't belong to + the appropriate class. + XkbErr_BadId - the device was found and belongs to the right + class, but not feedback with a matching id was + found. + The low byte of the resourceID for this error contains the device + id, class specifier or feedback id that failed. + } +const + XkbKeyboard = 0; + XkbNumberErrors = 1; + XkbErr_BadDevice = $ff; + XkbErr_BadClass = $fe; + XkbErr_BadId = $fd; + + { + Keyboard Components Mask: + - Specifies the components that follow a GetKeyboardByNameReply + } +const + XkbClientMapMask = Cardinal(1) shl 0; + XkbServerMapMask = Cardinal(1) shl 1; + XkbCompatMapMask = Cardinal(1) shl 2; + XkbIndicatorMapMask = Cardinal(1) shl 3; + XkbNamesMask = Cardinal(1) shl 4; + XkbGeometryMask = Cardinal(1) shl 5; + XkbControlsMask = Cardinal(1) shl 6; + XkbAllComponentsMask = $7f; + + + { + AccessX Options Mask + - The 'accessXOptions' field of an XkbControlsRec specifies the + AccessX options that are currently in effect. + - The 'accessXTimeoutOptionsMask' and 'accessXTimeoutOptionsValues' + fields of an XkbControlsRec specify the Access X options to be + changed if the keyboard times out and the values to which they + should be changed. + } +const + XkbAX_SKPressFBMask = Cardinal(1) shl 0; + XkbAX_SKAcceptFBMask = Cardinal(1) shl 1; + XkbAX_FeatureFBMask = Cardinal(1) shl 2; + XkbAX_SlowWarnFBMask = Cardinal(1) shl 3; + XkbAX_IndicatorFBMask = Cardinal(1) shl 4; + XkbAX_StickyKeysFBMask = Cardinal(1) shl 5; + XkbAX_TwoKeysMask = Cardinal(1) shl 6; + XkbAX_LatchToLockMask = Cardinal(1) shl 7; + XkbAX_SKReleaseFBMask = Cardinal(1) shl 8; + XkbAX_SKRejectFBMask = Cardinal(1) shl 9; + XkbAX_BKRejectFBMask = Cardinal(1) shl 10; + XkbAX_DumbBellFBMask = Cardinal(1) shl 11; + XkbAX_FBOptionsMask = $F3F; + XkbAX_SKOptionsMask = $0C0; + XkbAX_AllOptionsMask = $FFF; + + { + XkbUseCoreKbd is used to specify the core keyboard without having + to look up its X input extension identifier. + XkbUseCorePtr is used to specify the core pointer without having + to look up its X input extension identifier. + XkbDfltXIClass is used to specify "don't care" any place that the + XKB protocol is looking for an X Input Extension + device class. + XkbDfltXIId is used to specify "don't care" any place that the + XKB protocol is looking for an X Input Extension + feedback identifier. + XkbAllXIClasses is used to get information about all device indicators, + whether they're part of the indicator feedback class + or the keyboard feedback class. + XkbAllXIIds is used to get information about all device indicator + feedbacks without having to list them. + XkbXINone is used to indicate that no class or id has been specified. + XkbLegalXILedClass(c) True if 'c' specifies a legal class with LEDs + XkbLegalXIBellClass(c) True if 'c' specifies a legal class with bells + XkbExplicitXIDevice(d) True if 'd' explicitly specifies a device + XkbExplicitXIClass(c) True if 'c' explicitly specifies a device class + XkbExplicitXIId(c) True if 'i' explicitly specifies a device id + XkbSingleXIClass(c) True if 'c' specifies exactly one device class, + including the default. + XkbSingleXIId(i) True if 'i' specifies exactly one device + identifier, including the default. + } +const + XkbUseCoreKbd = $0100; + XkbUseCorePtr = $0200; + XkbDfltXIClass = $0300; + XkbDfltXIId = $0400; + XkbAllXIClasses = $0500; + XkbAllXIIds = $0600; + XkbXINone = $ff00; + +function XkbLegalXILedClass (c : Cardinal) : LongBool; +function XkbLegalXIBellClass (c : Cardinal) : LongBool; +function XkbExplicitXIDevice (c : Cardinal) : LongBool; +function XkbExplicitXIClass (c : Cardinal) : LongBool; +function XkbExplicitXIId (c : Cardinal) : LongBool; +function XkbSingleXIClass (c : Cardinal) : LongBool; +function XkbSingleXIId (c : Cardinal) : LongBool; + +const + XkbNoModifier = $ff; + XkbNoShiftLevel = $ff; + XkbNoShape = $ff; + XkbNoIndicator = $ff; + + XkbNoModifierMask = 0; + XkbAllModifiersMask = $ff; + XkbAllVirtualModsMask = $ffff; + + XkbNumKbdGroups = 4; + XkbMaxKbdGroup = XkbNumKbdGroups-1; + + XkbMaxMouseKeysBtn = 4; + +{$IFNDEF XI_UNIT} + KbdFeedbackClass = 0; + LedFeedbackClass = 4; + BellFeedbackClass = 5; +{$ENDIF} + + { + Group Index and Mask: + - Indices into the kt_index array of a key type. + - Mask specifies types to be changed for XkbChangeTypesOfKey + } +const + XkbGroup1Index = 0; + XkbGroup2Index = 1; + XkbGroup3Index = 2; + XkbGroup4Index = 3; + XkbAnyGroup = 254; + XkbAllGroups = 255; + + XkbGroup1Mask = 1 shl 0; + XkbGroup2Mask = 1 shl 1; + XkbGroup3Mask = 1 shl 2; + XkbGroup4Mask = 1 shl 3; + XkbAnyGroupMask = 1 shl 7; + XkbAllGroupsMask = $f; + + { + BuildCoreState: Given a keyboard group and a modifier state, + construct the value to be reported an event. + GroupForCoreState: Given the state reported in an event, + determine the keyboard group. + IsLegalGroup: Returns TRUE if 'g' is a valid group index. + } +function XkbBuildCoreState (m, g : Cardinal) : Cardinal; +function XkbGroupForCoreState (s : Cardinal) : Cardinal; +function XkbIsLegalGroup (g : Cardinal) : LongBool; + + { + GroupsWrap values: + - The 'groupsWrap' field of an XkbControlsRec specifies the + treatment of out of range groups. + - Bits 6 and 7 of the group info field of a key symbol map + specify the interpretation of out of range groups for the + corresponding key. + } +const + XkbWrapIntoRange = $00; + XkbClampIntoRange = $40; + XkbRedirectIntoRange = $80; + + { + Action flags: Reported in the 'flags' field of most key actions. + Interpretation depends on the type of the action; not all actions + accept all flags. + + Option Used for Actions + ------ ---------------- + ClearLocks SetMods, LatchMods, SetGroup, LatchGroup + LatchToLock SetMods, LatchMods, SetGroup, LatchGroup + LockNoLock LockMods, ISOLock, LockPtrBtn, LockDeviceBtn + LockNoUnlock LockMods, ISOLock, LockPtrBtn, LockDeviceBtn + UseModMapMods SetMods, LatchMods, LockMods, ISOLock + GroupAbsolute SetGroup, LatchGroup, LockGroup, ISOLock + UseDfltButton PtrBtn, LockPtrBtn + NoAcceleration MovePtr + MoveAbsoluteX MovePtr + MoveAbsoluteY MovePtr + ISODfltIsGroup ISOLock + ISONoAffectMods ISOLock + ISONoAffectGroup ISOLock + ISONoAffectPtr ISOLock + ISONoAffectCtrls ISOLock + MessageOnPress ActionMessage + MessageOnRelease ActionMessage + MessageGenKeyEvent ActionMessage + AffectDfltBtn SetPtrDflt + DfltBtnAbsolute SetPtrDflt + SwitchApplication SwitchScreen + SwitchAbsolute SwitchScreen + } +const + XkbSA_ClearLocks = Cardinal(1) shl 0; + XkbSA_LatchToLock = Cardinal(1) shl 1; + + XkbSA_LockNoLock = Cardinal(1) shl 0; + XkbSA_LockNoUnlock = Cardinal(1) shl 1; + + XkbSA_UseModMapMods = Cardinal(1) shl 2; + + XkbSA_GroupAbsolute = Cardinal(1) shl 2; + XkbSA_UseDfltButton = 0; + + XkbSA_NoAcceleration = Cardinal(1) shl 0; + XkbSA_MoveAbsoluteX = Cardinal(1) shl 1; + XkbSA_MoveAbsoluteY = Cardinal(1) shl 2; + + XkbSA_ISODfltIsGroup = Cardinal(1) shl 7; + XkbSA_ISONoAffectMods = Cardinal(1) shl 6; + XkbSA_ISONoAffectGroup = Cardinal(1) shl 5; + XkbSA_ISONoAffectPtr = Cardinal(1) shl 4; + XkbSA_ISONoAffectCtrls = Cardinal(1) shl 3; + XkbSA_ISOAffectMask = $78; + + XkbSA_MessageOnPress = Cardinal(1) shl 0; + XkbSA_MessageOnRelease = Cardinal(1) shl 1; + XkbSA_MessageGenKeyEvent = Cardinal(1) shl 2; + + XkbSA_AffectDfltBtn = 1; + XkbSA_DfltBtnAbsolute = Cardinal(1) shl 2; + + XkbSA_SwitchApplication = Cardinal(1) shl 0; + XkbSA_SwitchAbsolute = Cardinal(1) shl 2; + + { + The following values apply to the SA_DeviceValuator + action only. Valuator operations specify the action + to be taken. Values specified in the action are + multiplied by 2^scale before they are applied. + } +const + XkbSA_IgnoreVal = $00; + XkbSA_SetValMin = $10; + XkbSA_SetValCenter = $20; + XkbSA_SetValMax = $30; + XkbSA_SetValRelative = $40; + XkbSA_SetValAbsolute = $50; + XkbSA_ValOpMask = $70; + XkbSA_ValScaleMask = $07; + +function XkbSA_ValOp (a : Cardinal) : Cardinal; +function XkbSA_ValScale (a : Cardinal) : Cardinal; + + { + Action types: specifies the type of a key action. Reported in the + type field of all key actions. + } +const + XkbSA_NoAction = $00; + XkbSA_SetMods = $01; + XkbSA_LatchMods = $02; + XkbSA_LockMods = $03; + XkbSA_SetGroup = $04; + XkbSA_LatchGroup = $05; + XkbSA_LockGroup = $06; + XkbSA_MovePtr = $07; + XkbSA_PtrBtn = $08; + XkbSA_LockPtrBtn = $09; + XkbSA_SetPtrDflt = $0a; + XkbSA_ISOLock = $0b; + XkbSA_Terminate = $0c; + XkbSA_SwitchScreen = $0d; + XkbSA_SetControls = $0e; + XkbSA_LockControls = $0f; + XkbSA_ActionMessage = $10; + XkbSA_RedirectKey = $11; + XkbSA_DeviceBtn = $12; + XkbSA_LockDeviceBtn = $13; + XkbSA_DeviceValuator = $14; + XkbSA_LastAction = XkbSA_DeviceValuator; + XkbSA_NumActions = XkbSA_LastAction +1; + +{$ifDef XF86DDXACTIONS} + {$Define XF86} +{$ELSE} + {$IFDEF XFree86Server} + {$DEFINE XF86} + {$endif} +{$ENDIF} + +{$IFDEF XF86} + XkbSA_XFree86Private = $86; +{$Endif} + + { + Specifies the key actions that clear latched groups or modifiers. + } +const +{#define XkbSA_BreakLatch \ + ((1<>13)&0x3)} + Result := (s shr 13) and $3; +end; + +function XkbIsLegalGroup (g : Cardinal) : LongBool; +begin +{#define XkbIsLegalGroup(g) (((g)>=0)&&((g)= 0) and (g < XkbNumKbdGroups); +end; + +function XkbSA_ValOp (a : Cardinal) : Cardinal; +begin +{#define XkbSA_ValOp(a) ((a)&XkbSA_ValOpMask)} + Result := a and XkbSA_ValOpMask; +end; + +function XkbSA_ValScale (a : Cardinal) : Cardinal; +begin +{#define XkbSA_ValScale(a) ((a)&XkbSA_ValScaleMask)} + Result := a and XkbSA_ValScaleMask; +end; + +function XkbIsModAction (a : PXkbAnyAction) : LongBool; +begin +{#define XkbIsModAction(a) (((a)->type>=Xkb_SASetMods)&&((a)->type<=XkbSA_LockMods))} + Result := (a^._type >= XkbSA_SetMods) and (a^._type <= XkbSA_LockMods); +end; + +function XkbIsGroupAction (a : PXkbAnyAction) : LongBool; +begin +{#define XkbIsGroupAction(a) (((a)->type>=XkbSA_SetGroup)&&((a)->type<=XkbSA_LockGroup))} + Result := (a^._type >= XkbSA_SetGroup) or (a^._type <= XkbSA_LockGroup); +end; + +function XkbIsPtrAction (a : PXkbAnyAction) : LongBool; +begin +{#define XkbIsPtrAction(a) (((a)->type>=XkbSA_MovePtr)&&((a)->type<=XkbSA_SetPtrDflt))} + Result := (a^._type >= XkbSA_MovePtr) and (a^._type <= XkbSA_SetPtrDflt); +end; + +function XkbIsLegalKeycode (const k : Cardinal) : LongBool; +begin +{#define XkbIsLegalKeycode(k) (((k)>=XkbMinLegalKeyCode)&&((k)<=XkbMaxLegalKeyCode))} + Result := (k >= XkbMinLegalKeyCode) and (k <= XkbMaxLegalKeyCode); +end; + +function XkbShiftLevel (n : Byte) : Byte; +begin +{#define XkbShiftLevel(n) ((n)-1)} + Result := n -1; +end; + +function XkbShiftLevelMask (n : Byte) : Byte; +begin +{#define XkbShiftLevelMask(n) (1<<((n)-1))} + Result := 1 shl (n - 1); +end; + +end.