]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/programs/Xserver/Xext/xf86misc.c
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / programs / Xserver / Xext / xf86misc.c
diff --git a/Xserver/programs/Xserver/Xext/xf86misc.c b/Xserver/programs/Xserver/Xext/xf86misc.c
new file mode 100644 (file)
index 0000000..dd30994
--- /dev/null
@@ -0,0 +1,632 @@
+/* $XFree86: xc/programs/Xserver/Xext/xf86misc.c,v 3.21.2.4 1998/02/25 14:26:43 dawes Exp $ */
+
+/*
+ * Copyright (c) 1995, 1996  The XFree86 Project, Inc
+ */
+
+/* THIS IS NOT AN X CONSORTIUM STANDARD */
+
+#define NEED_REPLIES
+#define NEED_EVENTS
+#include "X.h"
+#include "Xproto.h"
+#include "misc.h"
+#include "dixstruct.h"
+#include "extnsionst.h"
+#include "scrnintstr.h"
+#include "inputstr.h"
+#include "servermd.h"
+#define _XF86MISC_SERVER_
+#define _XF86MISC_SAVER_COMPAT_
+#include "xf86mscstr.h"
+#include "Xfuncproto.h"
+#include "xf86.h"
+#include "xf86Priv.h"
+#include "xf86_OSlib.h"
+
+#include <X11/Xtrans.h>
+#include "../os/osdep.h"
+#include <X11/Xauth.h>
+#ifndef ESIX
+#ifndef Lynx
+#include <sys/socket.h>
+#else
+#include <socket.h>
+#endif
+#else
+#include <lan/socket.h>
+#endif
+
+#include "swaprep.h"
+
+extern int xf86ScreenIndex;
+extern Bool xf86MiscModInDevEnabled;
+extern Bool xf86MiscModInDevAllowNonLocal;
+
+static int miscErrorBase;
+
+static void XF86MiscResetProc(
+#if NeedFunctionPrototypes
+    ExtensionEntry* /* extEntry */
+#endif
+);
+
+static DISPATCH_PROC(ProcXF86MiscDispatch);
+static DISPATCH_PROC(ProcXF86MiscGetKbdSettings);
+static DISPATCH_PROC(ProcXF86MiscGetMouseSettings);
+static DISPATCH_PROC(ProcXF86MiscGetSaver);
+static DISPATCH_PROC(ProcXF86MiscQueryVersion);
+static DISPATCH_PROC(ProcXF86MiscSetKbdSettings);
+static DISPATCH_PROC(ProcXF86MiscSetMouseSettings);
+static DISPATCH_PROC(ProcXF86MiscSetSaver);
+static DISPATCH_PROC(SProcXF86MiscDispatch);
+static DISPATCH_PROC(SProcXF86MiscGetKbdSettings);
+static DISPATCH_PROC(SProcXF86MiscGetMouseSettings);
+static DISPATCH_PROC(SProcXF86MiscGetSaver);
+static DISPATCH_PROC(SProcXF86MiscQueryVersion);
+static DISPATCH_PROC(SProcXF86MiscSetKbdSettings);
+static DISPATCH_PROC(SProcXF86MiscSetMouseSettings);
+static DISPATCH_PROC(SProcXF86MiscSetSaver);
+
+static unsigned char XF86MiscReqCode = 0;
+
+extern InputInfo inputInfo;
+
+void
+XFree86MiscExtensionInit()
+{
+    ExtensionEntry* extEntry;
+
+    if (
+       (extEntry = AddExtension(XF86MISCNAME,
+                               XF86MiscNumberEvents,
+                               XF86MiscNumberErrors,
+                               ProcXF86MiscDispatch,
+                               SProcXF86MiscDispatch,
+                               XF86MiscResetProc,
+                               StandardMinorOpcode))) {
+       XF86MiscReqCode = (unsigned char)extEntry->base;
+       miscErrorBase = extEntry->errorBase;
+    }
+}
+
+/*ARGSUSED*/
+static void
+XF86MiscResetProc (extEntry)
+    ExtensionEntry* extEntry;
+{
+}
+
+static int
+ProcXF86MiscQueryVersion(client)
+    register ClientPtr client;
+{
+    xXF86MiscQueryVersionReply rep;
+    register int n;
+
+    REQUEST_SIZE_MATCH(xXF86MiscQueryVersionReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.majorVersion = XF86MISC_MAJOR_VERSION;
+    rep.minorVersion = XF86MISC_MINOR_VERSION;
+    if (client->swapped) {
+       swaps(&rep.sequenceNumber, n);
+       swapl(&rep.length, n);
+       swaps(&rep.majorVersion, n);
+       swaps(&rep.minorVersion, n);
+    }
+    WriteToClient(client, sizeof(xXF86MiscQueryVersionReply), (char *)&rep);
+    return (client->noClientException);
+}
+
+/*
+ * This will go away, but remains for now for compatibility with older
+ * clients.
+ */
+static int
+ProcXF86MiscSetSaver(client)
+    register ClientPtr client;
+{
+    REQUEST(xXF86MiscSetSaverReq);
+    ScrnInfoPtr vptr;
+
+    if (stuff->screen > screenInfo.numScreens)
+       return BadValue;
+
+    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;
+
+    REQUEST_SIZE_MATCH(xXF86MiscSetSaverReq);
+
+    if (stuff->suspendTime < 0)
+       return BadValue;
+    if (stuff->offTime < 0)
+       return BadValue;
+
+    return (client->noClientException);
+}
+
+/*
+ * This will go away, but remains for now for compatibility with older
+ * clients.
+ */
+static int
+ProcXF86MiscGetSaver(client)
+    register ClientPtr client;
+{
+    REQUEST(xXF86MiscGetSaverReq);
+    xXF86MiscGetSaverReply rep;
+    register int n;
+    ScrnInfoPtr vptr;
+
+    if (stuff->screen > screenInfo.numScreens)
+       return BadValue;
+
+    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;
+
+    REQUEST_SIZE_MATCH(xXF86MiscGetSaverReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.suspendTime = 0;
+    rep.offTime = 0;
+    
+    if (client->swapped) {
+       swaps(&rep.sequenceNumber, n);
+       swapl(&rep.length, n);
+       swapl(&rep.suspendTime, n);
+       swapl(&rep.offTime, n);
+    }
+    WriteToClient(client, SIZEOF(xXF86MiscGetSaverReply), (char *)&rep);
+    return (client->noClientException);
+}
+
+static int
+ProcXF86MiscGetMouseSettings(client)
+    register ClientPtr client;
+{
+    xXF86MiscGetMouseSettingsReply rep;
+    register int n;
+
+    REQUEST_SIZE_MATCH(xXF86MiscGetMouseSettingsReq);
+    rep.type = X_Reply;
+    rep.sequenceNumber = client->sequence;
+    rep.mousetype = xf86Info.mouseDev->mseType;
+#ifdef XQUEUE
+    if (xf86Info.mouseDev->mseProc == xf86XqueMseProc)
+        rep.mousetype = MTYPE_XQUEUE;
+#endif
+#if defined(USE_OSMOUSE) || defined(OSMOUSE_ONLY)
+    if (xf86Info.mouseDev->mseProc == xf86OsMouseProc)
+        rep.mousetype = MTYPE_OSMOUSE;
+#endif
+    rep.baudrate = xf86Info.mouseDev->baudRate;
+    rep.samplerate = xf86Info.mouseDev->sampleRate;
+    rep.resolution = xf86Info.mouseDev->resolution;
+    rep.buttons = xf86Info.mouseDev->buttons;
+    rep.emulate3buttons = xf86Info.mouseDev->emulate3Buttons;
+    rep.emulate3timeout = xf86Info.mouseDev->emulate3Timeout;
+    rep.chordmiddle = xf86Info.mouseDev->chordMiddle;
+    rep.flags = xf86Info.mouseDev->mouseFlags;
+    if (xf86Info.mouseDev->mseDevice)
+        rep.devnamelen = strlen(xf86Info.mouseDev->mseDevice);
+    else
+        rep.devnamelen = 0;
+    rep.length = (sizeof(xXF86MiscGetMouseSettingsReply) -
+                 sizeof(xGenericReply) + ((rep.devnamelen+3) & ~3)) >> 2;
+    
+    if (client->swapped) {
+       swaps(&rep.sequenceNumber, n);
+       swapl(&rep.length, n);
+       swapl(&rep.mousetype, n);
+       swapl(&rep.baudrate, n);
+       swapl(&rep.samplerate, n);
+       swapl(&rep.resolution, n);
+       swapl(&rep.buttons, n);
+       swapl(&rep.emulate3buttons, n);
+       swapl(&rep.emulate3timeout, n);
+       swapl(&rep.chordmiddle, n);
+       swapl(&rep.flags, n);
+    }
+    WriteToClient(client, SIZEOF(xXF86MiscGetMouseSettingsReply), (char *)&rep);
+    if (rep.devnamelen)
+        WriteToClient(client, rep.devnamelen, xf86Info.mouseDev->mseDevice);
+    return (client->noClientException);
+}
+
+static int
+ProcXF86MiscGetKbdSettings(client)
+    register ClientPtr client;
+{
+    xXF86MiscGetKbdSettingsReply rep;
+    register int n;
+
+    REQUEST_SIZE_MATCH(xXF86MiscGetKbdSettingsReq);
+    rep.type = X_Reply;
+    rep.length = 0;
+    rep.sequenceNumber = client->sequence;
+    rep.kbdtype = xf86Info.kbdType;
+#ifdef XQUEUE
+    if (xf86Info.kbdProc == xf86XqueKbdProc)
+        rep.kbdtype = KTYPE_XQUEUE;
+#endif
+    rep.rate = xf86Info.kbdRate;
+    rep.delay = xf86Info.kbdDelay;
+    rep.servnumlock = xf86Info.serverNumLock;
+    if (client->swapped) {
+       swaps(&rep.sequenceNumber, n);
+       swapl(&rep.length, n);
+       swapl(&rep.kbdtype, n);
+       swapl(&rep.rate, n);
+       swapl(&rep.delay, n);
+    }
+    WriteToClient(client, SIZEOF(xXF86MiscGetKbdSettingsReply), (char *)&rep);
+    return (client->noClientException);
+}
+
+static int
+ProcXF86MiscSetMouseSettings(client)
+    register ClientPtr client;
+{
+    int reopen, msetype, flags, baudrate, samplerate, resolution;
+
+    REQUEST(xXF86MiscSetMouseSettingsReq);
+
+    REQUEST_SIZE_MATCH(xXF86MiscSetMouseSettingsReq);
+
+    if (xf86Verbose) {
+       ErrorF("SetMouseSettings - type: %d brate: %d srate: %d chdmid: %d\n",
+               stuff->mousetype, stuff->baudrate,
+               stuff->samplerate, stuff->chordmiddle);
+       ErrorF("                   em3but: %d em3tim: %d res: %d flags: %d\n",
+               stuff->emulate3buttons, stuff->emulate3timeout,
+               stuff->resolution, stuff->flags);
+    }
+    if (stuff->mousetype > MTYPE_OSMOUSE
+            || stuff->mousetype < MTYPE_MICROSOFT)
+       return miscErrorBase + XF86MiscBadMouseProtocol;
+#ifdef OSMOUSE_ONLY
+    if (stuff->mousetype != MTYPE_OSMOUSE)
+       return miscErrorBase + XF86MiscBadMouseProtocol;
+#else
+#ifndef XQUEUE
+    if (stuff->mousetype == MTYPE_XQUEUE)
+       return miscErrorBase + XF86MiscBadMouseProtocol;
+#endif
+#ifndef USE_OSMOUSE
+    if (stuff->mousetype == MTYPE_OSMOUSE)
+       return miscErrorBase + XF86MiscBadMouseProtocol;
+#endif
+#endif /* OSMOUSE_ONLY */
+
+    if (stuff->emulate3timeout < 0)
+       return BadValue;
+
+    if (stuff->mousetype == MTYPE_LOGIMAN
+            && !(stuff->baudrate == 1200 || stuff->baudrate == 9600) )
+       return miscErrorBase + XF86MiscBadMouseBaudRate;
+    if (stuff->mousetype == MTYPE_LOGIMAN && stuff->samplerate)
+       return miscErrorBase + XF86MiscBadMouseCombo;
+
+    samplerate = xf86Info.mouseDev->sampleRate;
+    resolution = xf86Info.mouseDev->resolution;
+    baudrate   = xf86Info.mouseDev->baudRate;
+    flags      = xf86Info.mouseDev->mouseFlags;
+    msetype    = xf86Info.mouseDev->mseType;
+#ifdef XQUEUE
+    if (xf86Info.mouseDev->mseProc == xf86XqueMseProc)
+        msetype = MTYPE_XQUEUE;
+#endif
+#if defined(USE_OSMOUSE) || defined(OSMOUSE_ONLY)
+    if (xf86Info.mouseDev->mseProc == xf86OsMouseProc)
+        msetype = MTYPE_OSMOUSE;
+#endif
+
+    reopen     = 0;
+
+    if (stuff->mousetype != msetype)
+       if (stuff->mousetype == MTYPE_XQUEUE
+               || stuff->mousetype == MTYPE_OSMOUSE
+               || msetype == MTYPE_XQUEUE
+               || msetype == MTYPE_OSMOUSE)
+           return miscErrorBase + XF86MiscBadMouseProtocol;
+       else {
+           reopen++;
+           msetype = stuff->mousetype;
+       }
+
+    if (stuff->flags & MF_REOPEN) {
+       reopen++;
+       stuff->flags &= ~MF_REOPEN;
+    }
+    if (stuff->mousetype != MTYPE_OSMOUSE
+           && stuff->mousetype != MTYPE_XQUEUE
+           && stuff->mousetype != MTYPE_PS_2
+           && stuff->mousetype != MTYPE_BUSMOUSE
+           && stuff->mousetype != MTYPE_IMPS2
+           && stuff->mousetype != MTYPE_THINKINGPS2
+           && stuff->mousetype != MTYPE_MMANPLUSPS2
+           && stuff->mousetype != MTYPE_GLIDEPOINTPS2
+           && stuff->mousetype != MTYPE_NETPS2
+           && stuff->mousetype != MTYPE_NETSCROLLPS2
+           && stuff->mousetype != MTYPE_SYSMOUSE)
+    {
+        if (stuff->baudrate < 1200)
+           return miscErrorBase + XF86MiscBadMouseBaudRate;
+        if (stuff->baudrate % 1200 != 0
+                || stuff->baudrate < 1200 || stuff->baudrate > 9600)
+           return miscErrorBase + XF86MiscBadMouseBaudRate;
+       if (xf86Info.mouseDev->baudRate != stuff->baudrate) {
+               reopen++;
+               baudrate = stuff->baudrate;
+       }
+    }
+    if (stuff->flags & (MF_CLEAR_DTR|MF_CLEAR_RTS))
+       if (stuff->mousetype != MTYPE_MOUSESYS)
+           return miscErrorBase + XF86MiscBadMouseFlags;
+       else if (xf86Info.mouseDev->mouseFlags != stuff->flags) {
+           reopen++;
+            flags = stuff->flags;
+       }
+
+    if (stuff->mousetype != MTYPE_OSMOUSE
+           && stuff->mousetype != MTYPE_XQUEUE
+           && stuff->mousetype != MTYPE_BUSMOUSE)
+    {
+        if (stuff->samplerate < 0)
+           return BadValue;
+       
+       if (xf86Info.mouseDev->sampleRate != stuff->samplerate) {
+               reopen++;
+               samplerate = stuff->samplerate;
+       }
+    }
+
+    if (stuff->resolution < 0)
+       return BadValue;
+    if (xf86Info.mouseDev->resolution != stuff->resolution) {
+       reopen++;
+       resolution = stuff->resolution;
+    }
+
+#if 0
+    /* Ignore the buttons field */
+    if (xf86Info.mouseDev->buttons != stuff->buttons)
+       /* we cannot change this field on the fly... */
+       return BadValue;
+#endif
+
+    if (stuff->chordmiddle)
+        if (stuff->emulate3buttons
+               || !(stuff->mousetype == MTYPE_MICROSOFT
+                    || stuff->mousetype == MTYPE_LOGIMAN) )
+           return miscErrorBase + XF86MiscBadMouseCombo;
+
+    xf86Info.mouseDev->chordMiddle = stuff->chordmiddle!=0;
+    xf86Info.mouseDev->emulate3Buttons = stuff->emulate3buttons!=0;
+    xf86Info.mouseDev->emulate3Timeout = stuff->emulate3timeout;
+
+    if (reopen && msetype != MTYPE_OSMOUSE && msetype != MTYPE_XQUEUE) {
+
+        (xf86Info.mouseDev->mseProc)(xf86Info.pMouse, DEVICE_CLOSE);
+
+        xf86Info.mouseDev->mseType    = msetype;
+        xf86Info.mouseDev->mouseFlags = flags;
+        xf86Info.mouseDev->baudRate   = baudrate;
+        xf86Info.mouseDev->sampleRate = samplerate;
+       xf86Info.mouseDev->resolution = resolution;
+
+       xf86Info.pMouse->public.on = FALSE;
+       xf86AllowMouseOpenFail = TRUE;
+       xf86MouseInit(xf86Info.mouseDev);
+        (xf86Info.mouseDev->mseProc)(xf86Info.pMouse, DEVICE_ON);
+    }
+
+    if (xf86Verbose)
+       ErrorF("SetMouseSettings - Succeeded\n");
+    return (client->noClientException);
+}
+
+static int
+ProcXF86MiscSetKbdSettings(client)
+    register ClientPtr client;
+{
+    REQUEST(xXF86MiscSetKbdSettingsReq);
+
+    REQUEST_SIZE_MATCH(xXF86MiscSetKbdSettingsReq);
+
+    if (xf86Verbose)
+       ErrorF("SetKbdSettings - type: %d rate: %d delay: %d snumlk: %d\n",
+               stuff->kbdtype, stuff->rate,
+               stuff->delay, stuff->servnumlock);
+    if (stuff->rate < 0)
+       return BadValue;
+    if (stuff->delay < 0)
+       return BadValue;
+    if (stuff->kbdtype < KTYPE_UNKNOWN || stuff->kbdtype > KTYPE_XQUEUE)
+       return miscErrorBase + XF86MiscBadKbdType;
+
+    if (xf86Info.kbdRate!=stuff->rate || xf86Info.kbdDelay!=stuff->delay) {
+       char rad;
+
+       xf86Info.kbdRate = stuff->rate;
+       xf86Info.kbdDelay = stuff->delay;
+        if      (xf86Info.kbdDelay <= 375) rad = 0x00;
+        else if (xf86Info.kbdDelay <= 625) rad = 0x20;
+        else if (xf86Info.kbdDelay <= 875) rad = 0x40;
+        else                               rad = 0x60;
+    
+        if      (xf86Info.kbdRate <=  2)   rad |= 0x1F;
+        else if (xf86Info.kbdRate >= 30)   rad |= 0x00;
+        else                               rad |= ((58/xf86Info.kbdRate)-2);
+    
+        xf86SetKbdRepeat(rad);
+    }
+#if 0  /* Not done yet */
+    xf86Info.kbdType = stuff->kbdtype;
+    xf86Info.serverNumLock = stuff->servnumlock!=0;
+#endif
+
+    if (xf86Verbose)
+       ErrorF("SetKbdSettings - Succeeded\n");
+    return (client->noClientException);
+}
+
+static int
+ProcXF86MiscDispatch (client)
+    register ClientPtr client;
+{
+    REQUEST(xReq);
+    switch (stuff->data)
+    {
+    case X_XF86MiscQueryVersion:
+       return ProcXF86MiscQueryVersion(client);
+    case X_XF86MiscGetSaver:
+       return ProcXF86MiscGetSaver(client);
+    case X_XF86MiscSetSaver:
+       return ProcXF86MiscSetSaver(client);
+    case X_XF86MiscGetMouseSettings:
+       return ProcXF86MiscGetMouseSettings(client);
+    case X_XF86MiscGetKbdSettings:
+       return ProcXF86MiscGetKbdSettings(client);
+    default:
+       if (!xf86MiscModInDevEnabled)
+           return miscErrorBase + XF86MiscModInDevDisabled;
+       if (xf86MiscModInDevAllowNonLocal || LocalClient (client)) {
+           switch (stuff->data) {
+               case X_XF86MiscSetMouseSettings:
+                   return ProcXF86MiscSetMouseSettings(client);
+               case X_XF86MiscSetKbdSettings:
+                   return ProcXF86MiscSetKbdSettings(client);
+               default:
+                   return BadRequest;
+           }
+       } else
+           return miscErrorBase + XF86MiscModInDevClientNotLocal;
+    }
+}
+
+static int
+SProcXF86MiscQueryVersion(client)
+    register ClientPtr client;
+{
+    register int n;
+    REQUEST(xXF86MiscQueryVersionReq);
+    swaps(&stuff->length, n);
+    return ProcXF86MiscQueryVersion(client);
+}
+
+static int
+SProcXF86MiscGetSaver(client)
+    ClientPtr client;
+{
+    register int n;
+    REQUEST(xXF86MiscGetSaverReq);
+    swaps(&stuff->length, n);
+    REQUEST_SIZE_MATCH(xXF86MiscGetSaverReq);
+    swaps(&stuff->screen, n);
+    return ProcXF86MiscGetSaver(client);
+}
+
+static int
+SProcXF86MiscSetSaver(client)
+    ClientPtr client;
+{
+    register int n;
+    REQUEST(xXF86MiscSetSaverReq);
+    swaps(&stuff->length, n);
+    REQUEST_SIZE_MATCH(xXF86MiscSetSaverReq);
+    swaps(&stuff->screen, n);
+    swapl(&stuff->suspendTime, n);
+    swapl(&stuff->offTime, n);
+    return ProcXF86MiscSetSaver(client);
+}
+
+static int
+SProcXF86MiscGetMouseSettings(client)
+    ClientPtr client;
+{
+    register int n;
+    REQUEST(xXF86MiscGetMouseSettingsReq);
+    swaps(&stuff->length, n);
+    REQUEST_SIZE_MATCH(xXF86MiscGetMouseSettingsReq);
+    return ProcXF86MiscGetMouseSettings(client);
+}
+
+static int
+SProcXF86MiscGetKbdSettings(client)
+    ClientPtr client;
+{
+    register int n;
+    REQUEST(xXF86MiscGetKbdSettingsReq);
+    swaps(&stuff->length, n);
+    REQUEST_SIZE_MATCH(xXF86MiscGetKbdSettingsReq);
+    return ProcXF86MiscGetKbdSettings(client);
+}
+
+static int
+SProcXF86MiscSetMouseSettings(client)
+    ClientPtr client;
+{
+    register int n;
+    REQUEST(xXF86MiscSetMouseSettingsReq);
+    swaps(&stuff->length, n);
+    REQUEST_SIZE_MATCH(xXF86MiscSetMouseSettingsReq);
+    swapl(&stuff->mousetype, n);
+    swapl(&stuff->baudrate, n);
+    swapl(&stuff->samplerate, n);
+    swapl(&stuff->resolution, n);
+    swapl(&stuff->buttons, n);
+    swapl(&stuff->emulate3timeout, n);
+    swapl(&stuff->flags, n);
+    return ProcXF86MiscSetMouseSettings(client);
+}
+
+static int
+SProcXF86MiscSetKbdSettings(client)
+    ClientPtr client;
+{
+    register int n;
+    REQUEST(xXF86MiscSetKbdSettingsReq);
+    swaps(&stuff->length, n);
+    REQUEST_SIZE_MATCH(xXF86MiscSetKbdSettingsReq);
+    swapl(&stuff->kbdtype, n);
+    swapl(&stuff->rate, n);
+    swapl(&stuff->delay, n);
+    return ProcXF86MiscSetKbdSettings(client);
+}
+
+static int
+SProcXF86MiscDispatch (client)
+    register ClientPtr client;
+{
+    REQUEST(xReq);
+    switch (stuff->data)
+    {
+    case X_XF86MiscQueryVersion:
+       return SProcXF86MiscQueryVersion(client);
+    case X_XF86MiscGetSaver:
+       return SProcXF86MiscGetSaver(client);
+    case X_XF86MiscSetSaver:
+       return SProcXF86MiscSetSaver(client);
+    case X_XF86MiscGetMouseSettings:
+       return SProcXF86MiscGetMouseSettings(client);
+    case X_XF86MiscGetKbdSettings:
+       return SProcXF86MiscGetKbdSettings(client);
+    default:
+       if (!xf86MiscModInDevEnabled)
+           return miscErrorBase + XF86MiscModInDevDisabled;
+       if (xf86MiscModInDevAllowNonLocal || LocalClient (client)) {
+           switch (stuff->data) {
+               case X_XF86MiscSetMouseSettings:
+                   return SProcXF86MiscSetMouseSettings(client);
+               case X_XF86MiscSetKbdSettings:
+                   return SProcXF86MiscSetKbdSettings(client);
+               default:
+                   return BadRequest;
+           }
+       } else
+           return miscErrorBase + XF86MiscModInDevClientNotLocal;
+    }
+}
+