aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/X11/XKBGetMap.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/X11/XKBGetMap.c')
-rw-r--r--nx-X11/lib/X11/XKBGetMap.c882
1 files changed, 0 insertions, 882 deletions
diff --git a/nx-X11/lib/X11/XKBGetMap.c b/nx-X11/lib/X11/XKBGetMap.c
deleted file mode 100644
index 6e3c74343..000000000
--- a/nx-X11/lib/X11/XKBGetMap.c
+++ /dev/null
@@ -1,882 +0,0 @@
-/************************************************************
-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.
-
-********************************************************/
-
-#define NEED_MAP_READERS
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "Xlibint.h"
-#include <nx-X11/extensions/XKBproto.h>
-#include "XKBlibint.h"
-
-static Status
-_XkbReadKeyTypes(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep)
-{
- int i, n, lastMapCount;
- XkbKeyTypePtr type;
-
- if (rep->nTypes > 0) {
- n = rep->firstType + rep->nTypes;
- if (xkb->map->num_types >= n)
- n = xkb->map->num_types;
- else if (XkbAllocClientMap(xkb, XkbKeyTypesMask, n) != Success)
- return BadAlloc;
-
- type = &xkb->map->types[rep->firstType];
- for (i = 0; i < (int) rep->nTypes; i++, type++) {
- xkbKeyTypeWireDesc *desc;
- register int ndx;
-
- ndx = i + rep->firstType;
- if (ndx >= xkb->map->num_types)
- xkb->map->num_types = ndx + 1;
-
- desc = (xkbKeyTypeWireDesc *)
- _XkbGetReadBufferPtr(buf, SIZEOF(xkbKeyTypeWireDesc));
- if (desc == NULL)
- return BadLength;
-
- lastMapCount = type->map_count;
- if (desc->nMapEntries > 0) {
- if ((type->map == NULL) ||
- (desc->nMapEntries > type->map_count)) {
- XkbKTMapEntryRec *prev_map = type->map;
-
- type->map = _XkbTypedRealloc(type->map, desc->nMapEntries,
- XkbKTMapEntryRec);
- if (type->map == NULL) {
- _XkbFree(prev_map);
- return BadAlloc;
- }
- }
- }
- else if (type->map != NULL) {
- Xfree(type->map);
- type->map_count = 0;
- type->map = NULL;
- }
-
- if (desc->preserve && (desc->nMapEntries > 0)) {
- if ((!type->preserve) || (desc->nMapEntries > lastMapCount)) {
- XkbModsRec *prev_preserve = type->preserve;
-
- type->preserve = _XkbTypedRealloc(type->preserve,
- desc->nMapEntries,
- XkbModsRec);
- if (type->preserve == NULL) {
- _XkbFree(prev_preserve);
- return BadAlloc;
- }
- }
- }
- else if (type->preserve != NULL) {
- Xfree(type->preserve);
- type->preserve = NULL;
- }
-
- type->mods.mask = desc->mask;
- type->mods.real_mods = desc->realMods;
- type->mods.vmods = desc->virtualMods;
- type->num_levels = desc->numLevels;
- type->map_count = desc->nMapEntries;
- if (desc->nMapEntries > 0) {
- register xkbKTMapEntryWireDesc *wire;
- register XkbKTMapEntryPtr entry;
- register int size;
-
- size = type->map_count * SIZEOF(xkbKTMapEntryWireDesc);
- wire =
- (xkbKTMapEntryWireDesc *) _XkbGetReadBufferPtr(buf, size);
- if (wire == NULL)
- return BadLength;
- entry = type->map;
- for (n = 0; n < type->map_count; n++, wire++, entry++) {
- entry->active = wire->active;
- entry->level = wire->level;
- entry->mods.mask = wire->mask;
- entry->mods.real_mods = wire->realMods;
- entry->mods.vmods = wire->virtualMods;
- }
-
- if (desc->preserve) {
- register xkbModsWireDesc *pwire;
- register XkbModsPtr preserve;
- register int sz;
-
- sz = desc->nMapEntries * SIZEOF(xkbModsWireDesc);
- pwire = (xkbModsWireDesc *) _XkbGetReadBufferPtr(buf, sz);
- if (pwire == NULL)
- return BadLength;
- preserve = type->preserve;
- for (n = 0; n < desc->nMapEntries; n++, pwire++, preserve++) {
- preserve->mask = pwire->mask;
- preserve->vmods = pwire->virtualMods;
- preserve->real_mods = pwire->realMods;
- }
- }
- }
- }
- }
- return Success;
-}
-
-static Status
-_XkbReadKeySyms(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep)
-{
- register int i;
- XkbClientMapPtr map;
- int size = xkb->max_key_code + 1;
-
- if (((unsigned short) rep->firstKeySym + rep->nKeySyms) > size)
- return BadLength;
-
- map = xkb->map;
- if (map->key_sym_map == NULL) {
- register int offset;
- XkbSymMapPtr oldMap;
- xkbSymMapWireDesc *newMap;
-
- map->key_sym_map = _XkbTypedCalloc(size, XkbSymMapRec);
- if (map->key_sym_map == NULL)
- return BadAlloc;
- if (map->syms == NULL) {
- int sz;
-
- sz = (rep->totalSyms * 12) / 10;
- sz = ((sz + (unsigned) 128) / 128) * 128;
- map->syms = _XkbTypedCalloc(sz, KeySym);
- if (map->syms == NULL)
- return BadAlloc;
- map->size_syms = sz;
- }
- offset = 1;
- oldMap = &map->key_sym_map[rep->firstKeySym];
- for (i = 0; i < (int) rep->nKeySyms; i++, oldMap++) {
- newMap = (xkbSymMapWireDesc *)
- _XkbGetReadBufferPtr(buf, SIZEOF(xkbSymMapWireDesc));
- if (newMap == NULL)
- return BadLength;
- oldMap->kt_index[0] = newMap->ktIndex[0];
- oldMap->kt_index[1] = newMap->ktIndex[1];
- oldMap->kt_index[2] = newMap->ktIndex[2];
- oldMap->kt_index[3] = newMap->ktIndex[3];
- oldMap->group_info = newMap->groupInfo;
- oldMap->width = newMap->width;
- oldMap->offset = offset;
- if (offset + newMap->nSyms >= map->size_syms) {
- register int sz;
- KeySym *prev_syms = map->syms;
-
- sz = map->size_syms + 128;
- map->syms = _XkbTypedRealloc(map->syms, sz, KeySym);
- if (map->syms == NULL) {
- _XkbFree(prev_syms);
- map->size_syms = 0;
- return BadAlloc;
- }
- map->size_syms = sz;
- }
- if (newMap->nSyms > 0) {
- _XkbReadBufferCopyKeySyms(buf, (KeySym *) &map->syms[offset],
- newMap->nSyms);
- offset += newMap->nSyms;
- }
- else {
- map->syms[offset] = 0;
- }
- }
- map->num_syms = offset;
- }
- else {
- XkbSymMapPtr oldMap = &map->key_sym_map[rep->firstKeySym];
-
- for (i = 0; i < (int) rep->nKeySyms; i++, oldMap++) {
- xkbSymMapWireDesc *newMap;
- KeySym *newSyms;
- int tmp;
-
- newMap = (xkbSymMapWireDesc *)
- _XkbGetReadBufferPtr(buf, SIZEOF(xkbSymMapWireDesc));
- if (newMap == NULL)
- return BadLength;
-
- if (newMap->nSyms > 0)
- tmp = newMap->nSyms;
- else
- tmp = 0;
-
- newSyms = XkbResizeKeySyms(xkb, i + rep->firstKeySym, tmp);
- if (newSyms == NULL)
- return BadAlloc;
- if (newMap->nSyms > 0)
- _XkbReadBufferCopyKeySyms(buf, newSyms, newMap->nSyms);
- else
- newSyms[0] = NoSymbol;
- oldMap->kt_index[0] = newMap->ktIndex[0];
- oldMap->kt_index[1] = newMap->ktIndex[1];
- oldMap->kt_index[2] = newMap->ktIndex[2];
- oldMap->kt_index[3] = newMap->ktIndex[3];
- oldMap->group_info = newMap->groupInfo;
- oldMap->width = newMap->width;
- }
- }
- return Success;
-}
-
-static Status
-_XkbReadKeyActions(XkbReadBufferPtr buf, XkbDescPtr info, xkbGetMapReply *rep)
-{
- int i;
- CARD8 numDescBuf[248];
- CARD8 *numDesc = NULL;
- register int nKeyActs;
- Status ret = Success;
-
- if ((nKeyActs = rep->nKeyActs) > 0) {
- XkbSymMapPtr symMap;
-
- if (nKeyActs < sizeof numDescBuf)
- numDesc = numDescBuf;
- else
- numDesc = Xmalloc(nKeyActs * sizeof(CARD8));
-
- if (!_XkbCopyFromReadBuffer(buf, (char *) numDesc, nKeyActs)) {
- ret = BadLength;
- goto done;
- }
- i = XkbPaddedSize(nKeyActs) - nKeyActs;
- if ((i > 0) && (!_XkbSkipReadBufferData(buf, i))) {
- ret = BadLength;
- goto done;
- }
- symMap = &info->map->key_sym_map[rep->firstKeyAct];
- for (i = 0; i < (int) rep->nKeyActs; i++, symMap++) {
- if (numDesc[i] == 0) {
- if ((i + rep->firstKeyAct) > (info->max_key_code + 1)) {
- ret = BadLength;
- goto done;
- }
- info->server->key_acts[i + rep->firstKeyAct] = 0;
- }
- else {
- XkbAction *newActs;
-
- /* 8/16/93 (ef) -- XXX! Verify size here (numdesc must be */
- /* either zero or XkbKeyNumSyms(info,key) */
- newActs = XkbResizeKeyActions(info, i + rep->firstKeyAct,
- numDesc[i]);
- if (newActs == NULL) {
- ret = BadAlloc;
- goto done;
- }
- if (!_XkbCopyFromReadBuffer(buf, (char *) newActs,
- (int) (numDesc[i] * sizeof(XkbAction)))) {
- ret = BadLength;
- goto done;
- }
- }
- }
- }
- done:
- if (numDesc != NULL && numDesc != numDescBuf)
- Xfree(numDesc);
- return ret;
-}
-
-static Status
-_XkbReadKeyBehaviors(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep)
-{
- register int i;
-
- if (rep->totalKeyBehaviors > 0) {
- int size = xkb->max_key_code + 1;
-
- if (((int) rep->firstKeyBehavior + rep->nKeyBehaviors) > size)
- return BadLength;
- if (xkb->server->behaviors == NULL) {
- xkb->server->behaviors = _XkbTypedCalloc(size, XkbBehavior);
- if (xkb->server->behaviors == NULL)
- return BadAlloc;
- }
- else {
- bzero(&xkb->server->behaviors[rep->firstKeyBehavior],
- (rep->nKeyBehaviors * sizeof(XkbBehavior)));
- }
- for (i = 0; i < rep->totalKeyBehaviors; i++) {
- xkbBehaviorWireDesc *wire;
-
- wire = (xkbBehaviorWireDesc *) _XkbGetReadBufferPtr(buf,
- SIZEOF(xkbBehaviorWireDesc));
- if (wire == NULL || wire->key >= size)
- return BadLength;
- xkb->server->behaviors[wire->key].type = wire->type;
- xkb->server->behaviors[wire->key].data = wire->data;
- }
- }
- return Success;
-}
-
-static Status
-_XkbReadVirtualMods(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep)
-{
- if (rep->virtualMods) {
- register int i, bit, nVMods;
- register char *data;
-
- for (i = nVMods = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) {
- if (rep->virtualMods & bit)
- nVMods++;
- }
- data = _XkbGetReadBufferPtr(buf, XkbPaddedSize(nVMods));
- if (data == NULL)
- return BadLength;
- for (i = 0, bit = 1; (i < XkbNumVirtualMods) && (nVMods > 0);
- i++, bit <<= 1) {
- if (rep->virtualMods & bit) {
- xkb->server->vmods[i] = *data++;
- nVMods--;
- }
- }
- }
- return Success;
-}
-
-static Status
-_XkbReadExplicitComponents(XkbReadBufferPtr buf,
- XkbDescPtr xkb,
- xkbGetMapReply *rep)
-{
- register int i;
- unsigned char *wire;
-
- if (rep->totalKeyExplicit > 0) {
- int size = xkb->max_key_code + 1;
-
- if (((int) rep->firstKeyExplicit + rep->nKeyExplicit) > size)
- return BadLength;
- if (xkb->server->explicit == NULL) {
- xkb->server->explicit = _XkbTypedCalloc(size, unsigned char);
-
- if (xkb->server->explicit == NULL)
- return BadAlloc;
- }
- else {
- bzero(&xkb->server->explicit[rep->firstKeyExplicit],
- rep->nKeyExplicit);
- }
- i = XkbPaddedSize(2 * rep->totalKeyExplicit);
- wire = (unsigned char *) _XkbGetReadBufferPtr(buf, i);
- if (!wire)
- return BadLength;
- for (i = 0; i < rep->totalKeyExplicit; i++, wire += 2) {
- if (wire[0] > xkb->max_key_code || wire[1] > xkb->max_key_code)
- return BadLength;
- xkb->server->explicit[wire[0]] = wire[1];
- }
- }
- return Success;
-}
-
-static Status
-_XkbReadModifierMap(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep)
-{
- register int i;
- unsigned char *wire;
-
- if (rep->totalModMapKeys > 0) {
- if (((int) rep->firstModMapKey + rep->nModMapKeys) >
- (xkb->max_key_code + 1))
- return BadLength;
- if ((xkb->map->modmap == NULL) &&
- (XkbAllocClientMap(xkb, XkbModifierMapMask, 0) != Success)) {
- return BadAlloc;
- }
- else {
- bzero(&xkb->map->modmap[rep->firstModMapKey], rep->nModMapKeys);
- }
- i = XkbPaddedSize(2 * rep->totalModMapKeys);
- wire = (unsigned char *) _XkbGetReadBufferPtr(buf, i);
- if (!wire)
- return BadLength;
- for (i = 0; i < rep->totalModMapKeys; i++, wire += 2) {
- if (wire[0] > xkb->max_key_code || wire[1] > xkb->max_key_code)
- return BadLength;
- xkb->map->modmap[wire[0]] = wire[1];
- }
- }
- return Success;
-}
-
-static Status
-_XkbReadVirtualModMap(XkbReadBufferPtr buf,
- XkbDescPtr xkb,
- xkbGetMapReply *rep)
-{
- register int i;
- xkbVModMapWireDesc *wire;
- XkbServerMapPtr srv;
-
- if (rep->totalVModMapKeys > 0) {
- if (((int) rep->firstVModMapKey + rep->nVModMapKeys)
- > xkb->max_key_code + 1)
- return BadLength;
- if (((xkb->server == NULL) || (xkb->server->vmodmap == NULL)) &&
- (XkbAllocServerMap(xkb, XkbVirtualModMapMask, 0) != Success)) {
- return BadAlloc;
- }
- else {
- srv = xkb->server;
- if (rep->nVModMapKeys > rep->firstVModMapKey)
- bzero((char *) &srv->vmodmap[rep->firstVModMapKey],
- (rep->nVModMapKeys - rep->firstVModMapKey) *
- sizeof(unsigned short));
- }
- srv = xkb->server;
- i = rep->totalVModMapKeys * SIZEOF(xkbVModMapWireDesc);
- wire = (xkbVModMapWireDesc *) _XkbGetReadBufferPtr(buf, i);
- if (!wire)
- return BadLength;
- for (i = 0; i < rep->totalVModMapKeys; i++, wire++) {
- if ((wire->key >= xkb->min_key_code) &&
- (wire->key <= xkb->max_key_code))
- srv->vmodmap[wire->key] = wire->vmods;
- }
- }
- return Success;
-}
-
-static xkbGetMapReq *
-_XkbGetGetMapReq(Display *dpy, XkbDescPtr xkb)
-{
- xkbGetMapReq *req;
-
- GetReq(kbGetMap, req);
- req->reqType = dpy->xkb_info->codes->major_opcode;
- req->xkbReqType = X_kbGetMap;
- req->deviceSpec = xkb->device_spec;
- req->full = req->partial = 0;
- req->firstType = req->nTypes = 0;
- req->firstKeySym = req->nKeySyms = 0;
- req->firstKeyAct = req->nKeyActs = 0;
- req->firstKeyBehavior = req->nKeyBehaviors = 0;
- req->virtualMods = 0;
- req->firstKeyExplicit = req->nKeyExplicit = 0;
- req->firstModMapKey = req->nModMapKeys = 0;
- req->firstVModMapKey = req->nVModMapKeys = 0;
- return req;
-}
-
-Status
-_XkbReadGetMapReply(Display *dpy,
- xkbGetMapReply *rep,
- XkbDescPtr xkb,
- int *nread_rtrn)
-{
- int extraData;
- unsigned mask;
-
- if (xkb->device_spec == XkbUseCoreKbd)
- xkb->device_spec = rep->deviceID;
- if (rep->maxKeyCode < rep->minKeyCode)
- return BadImplementation;
- xkb->min_key_code = rep->minKeyCode;
- xkb->max_key_code = rep->maxKeyCode;
-
- if (!xkb->map) {
- mask = rep->present & XkbAllClientInfoMask;
- if (mask && (XkbAllocClientMap(xkb, mask, rep->nTypes) != Success))
- return BadAlloc;
- }
- if (!xkb->server) {
- mask = rep->present & XkbAllServerInfoMask;
- if (mask && (XkbAllocServerMap(xkb, mask, rep->totalActs) != Success))
- return BadAlloc;
- }
- extraData = (int) (rep->length * 4);
- extraData -= (SIZEOF(xkbGetMapReply) - SIZEOF(xGenericReply));
- if (rep->length) {
- XkbReadBufferRec buf;
- int left;
-
- if (_XkbInitReadBuffer(dpy, &buf, extraData)) {
- Status status = Success;
-
- if (nread_rtrn != NULL)
- *nread_rtrn = extraData;
- if (status == Success)
- status = _XkbReadKeyTypes(&buf, xkb, rep);
- if (status == Success)
- status = _XkbReadKeySyms(&buf, xkb, rep);
- if (status == Success)
- status = _XkbReadKeyActions(&buf, xkb, rep);
- if (status == Success)
- status = _XkbReadKeyBehaviors(&buf, xkb, rep);
- if (status == Success)
- status = _XkbReadVirtualMods(&buf, xkb, rep);
- if (status == Success)
- status = _XkbReadExplicitComponents(&buf, xkb, rep);
- if (status == Success)
- status = _XkbReadModifierMap(&buf, xkb, rep);
- if (status == Success)
- status = _XkbReadVirtualModMap(&buf, xkb, rep);
- left = _XkbFreeReadBuffer(&buf);
- if (status != Success)
- return status;
- else if (left || buf.error)
- return BadLength;
- }
- else
- return BadAlloc;
- }
- return Success;
-}
-
-static Status
-_XkbHandleGetMapReply(Display *dpy, XkbDescPtr xkb)
-{
- xkbGetMapReply rep;
-
- if (!_XReply(dpy, (xReply *) &rep,
- ((SIZEOF(xkbGetMapReply) - SIZEOF(xGenericReply)) >> 2),
- xFalse)) {
- return BadImplementation;
- }
- return _XkbReadGetMapReply(dpy, &rep, xkb, NULL);
-}
-
-Status
-XkbGetUpdatedMap(Display *dpy, unsigned which, XkbDescPtr xkb)
-{
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
- if (which) {
- register xkbGetMapReq *req;
- Status status;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->full = which;
- status = _XkbHandleGetMapReply(dpy, xkb);
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
- }
- return Success;
-}
-
-XkbDescPtr
-XkbGetMap(Display *dpy, unsigned which, unsigned deviceSpec)
-{
- XkbDescPtr xkb;
-
- xkb = _XkbTypedCalloc(1, XkbDescRec);
- if (xkb) {
- xkb->device_spec = deviceSpec;
- xkb->map = _XkbTypedCalloc(1, XkbClientMapRec);
- if ((xkb->map == NULL) ||
- ((which) && (XkbGetUpdatedMap(dpy, which, xkb) != Success))) {
- if (xkb->map) {
- Xfree(xkb->map);
- xkb->map = NULL;
- }
- Xfree(xkb);
- return NULL;
- }
- xkb->dpy = dpy;
- }
- return xkb;
-}
-
-Status
-XkbGetKeyTypes(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
- if ((num < 1) || (num > XkbMaxKeyTypes))
- return BadValue;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->firstType = first;
- req->nTypes = num;
- status = _XkbHandleGetMapReply(dpy, xkb);
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
-}
-
-Status
-XkbGetKeyActions(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
-
- if ((num < 1) || (num > XkbMaxKeyCount))
- return BadValue;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->firstKeyAct = first;
- req->nKeyActs = num;
- status = _XkbHandleGetMapReply(dpy, xkb);
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
-}
-
-Status
-XkbGetKeySyms(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
-
- if ((num < 1) || (num > XkbMaxKeyCount))
- return BadValue;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->firstKeySym = first;
- req->nKeySyms = num;
- status = _XkbHandleGetMapReply(dpy, xkb);
-
- UnlockDisplay(dpy);
- SyncHandle();
-
- return status;
-}
-
-Status
-XkbGetKeyBehaviors(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
-
- if ((num < 1) || (num > XkbMaxKeyCount))
- return BadValue;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->firstKeyBehavior = first;
- req->nKeyBehaviors = num;
- status = _XkbHandleGetMapReply(dpy, xkb);
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
-}
-
-Status
-XkbGetVirtualMods(Display *dpy, unsigned which, XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->virtualMods = which;
- status = _XkbHandleGetMapReply(dpy, xkb);
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
-}
-
-Status
-XkbGetKeyExplicitComponents(Display *dpy,
- unsigned first,
- unsigned num,
- XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
-
- if ((num < 1) || (num > XkbMaxKeyCount))
- return BadValue;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->firstKeyExplicit = first;
- req->nKeyExplicit = num;
- if ((xkb != NULL) && (xkb->server != NULL) &&
- (xkb->server->explicit != NULL)) {
- if ((num > 0) && (first >= xkb->min_key_code) &&
- (first + num <= xkb->max_key_code))
- bzero(&xkb->server->explicit[first], num);
- }
- if (xkb)
- status = _XkbHandleGetMapReply(dpy, xkb);
- else
- status = BadMatch;
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
-}
-
-Status
-XkbGetKeyModifierMap(Display *dpy,
- unsigned first,
- unsigned num,
- XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
-
- if ((num < 1) || (num > XkbMaxKeyCount))
- return BadValue;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->firstModMapKey = first;
- req->nModMapKeys = num;
- if ((xkb != NULL) && (xkb->map != NULL) && (xkb->map->modmap != NULL)) {
- if ((num > 0) && (first >= xkb->min_key_code) &&
- (first + num <= xkb->max_key_code))
- bzero(&xkb->map->modmap[first], num);
- }
- if (xkb)
- status = _XkbHandleGetMapReply(dpy, xkb);
- else
- status = BadMatch;
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
-}
-
-Status
-XkbGetKeyVirtualModMap(Display *dpy, unsigned first, unsigned num,
- XkbDescPtr xkb)
-{
- register xkbGetMapReq *req;
- Status status;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
-
- if ((num < 1) || (num > XkbMaxKeyCount))
- return BadValue;
-
- LockDisplay(dpy);
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->firstVModMapKey = first;
- req->nVModMapKeys = num;
- if ((xkb != NULL) && (xkb->map != NULL) && (xkb->map->modmap != NULL)) {
- if ((num > 0) && (first >= xkb->min_key_code) &&
- (first + num <= xkb->max_key_code))
- bzero(&xkb->server->vmodmap[first], num * sizeof(unsigned short));
- }
-
- if (xkb)
- status = _XkbHandleGetMapReply(dpy, xkb);
- else
- status = BadMatch;
-
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
-}
-
-Status
-XkbGetMapChanges(Display *dpy, XkbDescPtr xkb, XkbMapChangesPtr changes)
-{
- xkbGetMapReq *req;
-
- if ((dpy->flags & XlibDisplayNoXkb) ||
- (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)))
- return BadAccess;
- LockDisplay(dpy);
- if (changes->changed) {
- Status status = Success;
-
- req = _XkbGetGetMapReq(dpy, xkb);
- req->full = 0;
- req->partial = changes->changed;
- req->firstType = changes->first_type;
- req->nTypes = changes->num_types;
- req->firstKeySym = changes->first_key_sym;
- req->nKeySyms = changes->num_key_syms;
- req->firstKeyAct = changes->first_key_act;
- req->nKeyActs = changes->num_key_acts;
- req->firstKeyBehavior = changes->first_key_behavior;
- req->nKeyBehaviors = changes->num_key_behaviors;
- req->virtualMods = changes->vmods;
- req->firstKeyExplicit = changes->first_key_explicit;
- req->nKeyExplicit = changes->num_key_explicit;
- req->firstModMapKey = changes->first_modmap_key;
- req->nModMapKeys = changes->num_modmap_keys;
- req->firstVModMapKey = changes->first_vmodmap_key;
- req->nVModMapKeys = changes->num_vmodmap_keys;
- status = _XkbHandleGetMapReply(dpy, xkb);
- UnlockDisplay(dpy);
- SyncHandle();
- return status;
- }
- UnlockDisplay(dpy);
- return Success;
-}