diff options
Diffstat (limited to 'nx-X11/lib/Xxf86misc/XF86Misc.c')
-rw-r--r-- | nx-X11/lib/Xxf86misc/XF86Misc.c | 406 |
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; +} + |