aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/Xxf86misc/XF86Misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/Xxf86misc/XF86Misc.c')
-rw-r--r--nx-X11/lib/Xxf86misc/XF86Misc.c406
1 files changed, 406 insertions, 0 deletions
diff --git a/nx-X11/lib/Xxf86misc/XF86Misc.c b/nx-X11/lib/Xxf86misc/XF86Misc.c
new file mode 100644
index 000000000..b0669d527
--- /dev/null
+++ b/nx-X11/lib/Xxf86misc/XF86Misc.c
@@ -0,0 +1,406 @@
+/* $XFree86: xc/lib/Xxf86misc/XF86Misc.c,v 3.12 2002/11/20 04:04:57 dawes Exp $ */
+
+/*
+ * Copyright (c) 1995, 1996 The XFree86 Project, Inc
+ */
+
+/* THIS IS NOT AN X CONSORTIUM STANDARD */
+
+#define NEED_EVENTS
+#define NEED_REPLIES
+#include <X11/Xlibint.h>
+#include <X11/extensions/xf86mscstr.h>
+#include <X11/extensions/Xext.h>
+#include <X11/extensions/extutil.h>
+
+static XExtensionInfo _xf86misc_info_data;
+static XExtensionInfo *xf86misc_info = &_xf86misc_info_data;
+static char *xf86misc_extension_name = XF86MISCNAME;
+
+#define XF86MiscCheckExtension(dpy,i,val) \
+ XextCheckExtension (dpy, i, xf86misc_extension_name, val)
+
+/*****************************************************************************
+ * *
+ * private utility routines *
+ * *
+ *****************************************************************************/
+
+static int close_display(Display *dpy, XExtCodes *codes);
+
+static /* const */ XExtensionHooks xf86misc_extension_hooks = {
+ NULL, /* create_gc */
+ NULL, /* copy_gc */
+ NULL, /* flush_gc */
+ NULL, /* free_gc */
+ NULL, /* create_font */
+ NULL, /* free_font */
+ close_display, /* close_display */
+ NULL, /* wire_to_event */
+ NULL, /* event_to_wire */
+ NULL, /* error */
+ NULL, /* error_string */
+};
+
+static XEXT_GENERATE_FIND_DISPLAY (find_display, xf86misc_info,
+ xf86misc_extension_name,
+ &xf86misc_extension_hooks,
+ 0, NULL)
+
+static XEXT_GENERATE_CLOSE_DISPLAY (close_display, xf86misc_info)
+
+
+/*****************************************************************************
+ * *
+ * public XFree86-Misc Extension routines *
+ * *
+ *****************************************************************************/
+
+Bool XF86MiscQueryExtension (dpy, event_basep, error_basep)
+ Display *dpy;
+ int *event_basep, *error_basep;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+
+ if (XextHasExtension(info)) {
+ *event_basep = info->codes->first_event;
+ *error_basep = info->codes->first_error;
+ return True;
+ } else {
+ return False;
+ }
+}
+
+Bool XF86MiscQueryVersion(dpy, majorVersion, minorVersion)
+ Display* dpy;
+ int* majorVersion;
+ int* minorVersion;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscQueryVersionReply rep;
+ xXF86MiscQueryVersionReq *req;
+
+ XF86MiscCheckExtension (dpy, info, False);
+ LockDisplay(dpy);
+ GetReq(XF86MiscQueryVersion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscQueryVersion;
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return False;
+ }
+ *majorVersion = rep.majorVersion;
+ *minorVersion = rep.minorVersion;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ if (*majorVersion > 0 || *minorVersion > 5)
+ XF86MiscSetClientVersion(dpy);
+
+ return True;
+}
+
+Bool
+XF86MiscSetClientVersion(Display *dpy)
+{
+ XExtDisplayInfo *info = find_display(dpy);
+ xXF86MiscSetClientVersionReq *req;
+
+ XF86MiscCheckExtension(dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscSetClientVersion, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscSetClientVersion;
+ req->major = XF86MISC_MAJOR_VERSION;
+ req->minor = XF86MISC_MINOR_VERSION;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return True;
+}
+
+Bool XF86MiscGetMouseSettings(dpy, mouseinfo)
+ Display* dpy;
+ XF86MiscMouseSettings *mouseinfo;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscGetMouseSettingsReply rep;
+ xXF86MiscGetMouseSettingsReq *req;
+
+ XF86MiscCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscGetMouseSettings, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscGetMouseSettings;
+ if (!_XReply(dpy, (xReply *)&rep,
+ (SIZEOF(xXF86MiscGetMouseSettingsReply) - SIZEOF(xReply))>>2,
+ xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return False;
+ }
+
+ mouseinfo->type = rep.mousetype;
+ mouseinfo->baudrate = rep.baudrate;
+ mouseinfo->samplerate = rep.samplerate;
+ mouseinfo->resolution = rep.resolution;
+ mouseinfo->buttons = rep.buttons;
+ mouseinfo->emulate3buttons = rep.emulate3buttons;
+ mouseinfo->emulate3timeout = rep.emulate3timeout;
+ mouseinfo->chordmiddle = rep.chordmiddle;
+ mouseinfo->flags = rep.flags;
+ if (rep.devnamelen > 0) {
+ if (!(mouseinfo->device = Xcalloc(rep.devnamelen + 1, 1))) {
+ _XEatData(dpy, (rep.devnamelen+3) & ~3);
+ Xfree(mouseinfo->device);
+ return False;
+ }
+ _XReadPad(dpy, mouseinfo->device, rep.devnamelen);
+ } else
+ mouseinfo->device = NULL;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return True;
+}
+
+Bool XF86MiscGetKbdSettings(dpy, kbdinfo)
+ Display* dpy;
+ XF86MiscKbdSettings *kbdinfo;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscGetKbdSettingsReply rep;
+ xXF86MiscGetKbdSettingsReq *req;
+
+ XF86MiscCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscGetKbdSettings, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscGetKbdSettings;
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return False;
+ }
+
+ kbdinfo->type = rep.kbdtype;
+ kbdinfo->rate = rep.rate;
+ kbdinfo->delay = rep.delay;
+ kbdinfo->servnumlock = rep.servnumlock;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return True;
+}
+
+Bool XF86MiscSetMouseSettings(dpy, mouseinfo)
+ Display* dpy;
+ XF86MiscMouseSettings *mouseinfo;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscSetMouseSettingsReq *req;
+ int majorVersion, minorVersion;
+
+ XF86MiscCheckExtension (dpy, info, False);
+ XF86MiscQueryVersion(dpy, &majorVersion, &minorVersion);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscSetMouseSettings, req);
+
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscSetMouseSettings;
+ req->mousetype = mouseinfo->type;
+ req->baudrate = mouseinfo->baudrate;
+ req->samplerate = mouseinfo->samplerate;
+ req->resolution = mouseinfo->resolution;
+ req->buttons = mouseinfo->buttons;
+ req->emulate3buttons = mouseinfo->emulate3buttons;
+ req->emulate3timeout = mouseinfo->emulate3timeout;
+ req->chordmiddle = mouseinfo->chordmiddle;
+ req->flags = mouseinfo->flags;
+ if (majorVersion > 0 || minorVersion > 5) {
+ int len;
+ if ((len = strlen(mouseinfo->device))) {
+ req->devnamelen = len + 1;
+ len = (req->devnamelen + 3) >> 2;
+ SetReqLen(req,len,len);
+ Data(dpy, mouseinfo->device, req->devnamelen);
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return True;
+}
+
+Bool XF86MiscSetKbdSettings(dpy, kbdinfo)
+ Display* dpy;
+ XF86MiscKbdSettings *kbdinfo;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscSetKbdSettingsReq *req;
+
+ XF86MiscCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscSetKbdSettings, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscSetKbdSettings;
+ req->kbdtype = kbdinfo->type;
+ req->rate = kbdinfo->rate;
+ req->delay = kbdinfo->delay;
+ req->servnumlock = kbdinfo->servnumlock;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return True;
+}
+
+int XF86MiscSetGrabKeysState(dpy, enable)
+ Display* dpy;
+ Bool enable;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscSetGrabKeysStateReply rep;
+ xXF86MiscSetGrabKeysStateReq *req;
+
+ XF86MiscCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscSetGrabKeysState, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscSetGrabKeysState;
+ req->enable = enable;
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return 0;
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return rep.status;
+}
+
+Bool XF86MiscGetFilePaths(dpy, filpaths)
+ Display* dpy;
+ XF86MiscFilePaths *filpaths;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscGetFilePathsReply rep;
+ xXF86MiscGetFilePathsReq *req;
+
+ XF86MiscCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscGetFilePaths, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscGetFilePaths;
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return False;
+ }
+
+ if (rep.configlen) {
+ if (!(filpaths->configfile = Xcalloc(rep.configlen + 1, 1))) {
+ _XEatData(dpy, ((rep.configlen+3) & ~3) + ((rep.modulelen+3) & ~3)
+ + ((rep.loglen+3) & ~3));
+ return False;
+ }
+ }
+
+ if (rep.modulelen) {
+ if (!(filpaths->modulepath = Xcalloc(rep.modulelen + 1, 1))) {
+ _XEatData(dpy, ((rep.configlen+3) & ~3) + ((rep.modulelen+3) & ~3)
+ + ((rep.loglen+3) & ~3));
+ if (filpaths->configfile)
+ Xfree(filpaths->configfile);
+ return False;
+ }
+ }
+
+ if (rep.loglen) {
+ if (!(filpaths->logfile = Xcalloc(rep.loglen + 1, 1))) {
+ _XEatData(dpy, ((rep.configlen+3) & ~3) + ((rep.modulelen+3) & ~3)
+ + ((rep.loglen+3) & ~3));
+ if (filpaths->configfile)
+ Xfree(filpaths->configfile);
+ if (filpaths->modulepath)
+ Xfree(filpaths->modulepath);
+ return False;
+ }
+ }
+
+ if (rep.configlen)
+ _XReadPad(dpy, filpaths->configfile, rep.configlen);
+ else
+ filpaths->configfile = "";
+
+ if (rep.modulelen)
+ _XReadPad(dpy, filpaths->modulepath, rep.modulelen);
+ else
+ filpaths->modulepath = "";
+
+ if (rep.loglen)
+ _XReadPad(dpy, filpaths->logfile, rep.loglen);
+ else
+ filpaths->logfile = "";
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return True;
+}
+
+Status XF86MiscPassMessage(dpy, screen, msgtype, msgval, retmsg)
+ Display* dpy;
+ int screen;
+ const char* msgtype;
+ const char* msgval;
+ char** retmsg;
+{
+ XExtDisplayInfo *info = find_display (dpy);
+ xXF86MiscPassMessageReply rep;
+ xXF86MiscPassMessageReq *req;
+ int len;
+
+ XF86MiscCheckExtension (dpy, info, False);
+
+ LockDisplay(dpy);
+ GetReq(XF86MiscPassMessage, req);
+ req->reqType = info->codes->major_opcode;
+ req->xf86miscReqType = X_XF86MiscPassMessage;
+ req->screen = screen;
+ if ((len = strlen(msgtype))) {
+ req->typelen = len + 1;
+ len = (req->typelen + 3) >> 2;
+ SetReqLen(req,len,len);
+ Data(dpy, msgtype, req->typelen);
+ }
+ if ((len = strlen(msgval))) {
+ req->vallen = len + 1;
+ len = (req->vallen + 3) >> 2;
+ SetReqLen(req,len,len);
+ Data(dpy, msgval, req->vallen);
+ }
+ if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return BadImplementation;
+ }
+
+ if (rep.mesglen) {
+ if (!(*retmsg = Xcalloc(rep.mesglen + 1, 1))) {
+ _XEatData(dpy, ((rep.mesglen+3) & ~3));
+ return BadAlloc;
+ }
+ _XReadPad(dpy, *retmsg, rep.mesglen);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return rep.status;
+}
+