15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2008 NVIDIA, Corporation 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Permission is hereby granted, free of charge, to any person obtaining a copy 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * of this software and associated documentation files (the "Software"), to deal 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * in the Software without restriction, including without limitation the rights 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * copies of the Software, and to permit persons to whom the Software is 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * furnished to do so, subject to the following conditions: 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The above copyright notice and this permission notice (including the next 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * paragraph) shall be included in all copies or substantial portions of the 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * SOFTWARE. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Make sure that XTHREADS is defined, so that the 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * LockDisplay/UnlockDisplay macros are expanded properly and the 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * libXNVCtrl library properly protects the Display connection. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(XTHREADS) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XTHREADS 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* XTHREADS */ 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NEED_EVENTS 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NEED_REPLIES 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdint.h> 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h> 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/Xlibint.h> 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/Xutil.h> 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/extensions/Xext.h> 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <X11/extensions/extutil.h> 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "NVCtrlLib.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "nv_control.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NVCTRL_EXT_EXISTS 1 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NVCTRL_EXT_NEED_TARGET_SWAP 2 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NVCTRL_EXT_64_BIT_ATTRIBUTES 4 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NVCTRL_EXT_NEED_CHECK (1 << (sizeof(XPointer) - 1)) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static XExtensionInfo _nvctrl_ext_info_data; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static XExtensionInfo *nvctrl_ext_info = &_nvctrl_ext_info_data; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static /* const */ char *nvctrl_extension_name = NV_CONTROL_NAME; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XNVCTRLCheckExtension(dpy,i,val) \ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XextCheckExtension (dpy, i, nvctrl_extension_name, val) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define XNVCTRLSimpleCheckExtension(dpy,i) \ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XextSimpleCheckExtension (dpy, i, nvctrl_extension_name) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static int close_display(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static uintptr_t version_flags(Display *dpy, XExtDisplayInfo *info); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static Bool wire_to_event(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static /* const */ XExtensionHooks nvctrl_extension_hooks = { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* create_gc */ 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* copy_gc */ 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* flush_gc */ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* free_gc */ 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* create_font */ 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* free_font */ 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_display, /* close_display */ 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) wire_to_event, /* wire_to_event */ 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* event_to_wire */ 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* error */ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, /* error_string */ 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static XEXT_GENERATE_FIND_DISPLAY (find_display, nvctrl_ext_info, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) nvctrl_extension_name, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &nvctrl_extension_hooks, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NV_CONTROL_EVENTS, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (XPointer)NVCTRL_EXT_NEED_CHECK) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static XEXT_GENERATE_CLOSE_DISPLAY (close_display, nvctrl_ext_info) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * NV-CONTROL versions 1.8 and 1.9 pack the target_type and target_id 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * fields in reversed order. In order to talk to one of these servers, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * we need to swap these fields. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void XNVCTRLCheckTargetData(Display *dpy, XExtDisplayInfo *info, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *target_type, int *target_id) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uintptr_t flags = version_flags(dpy, info); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* We need to swap the target_type and target_id */ 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flags & NVCTRL_EXT_NEED_TARGET_SWAP) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tmp; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp = *target_type; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *target_type = *target_id; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *target_id = tmp; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryExtension ( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *event_basep, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *error_basep 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (XextHasExtension(info)) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (event_basep) *event_basep = info->codes->first_event; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (error_basep) *error_basep = info->codes->first_error; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Retrieve any cached flags that depend on the version of the NV-CONTROL 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * extension. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static uintptr_t version_flags(Display *dpy, XExtDisplayInfo *info) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uintptr_t data = (uintptr_t)info->data; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /* If necessary, determine the NV-CONTROL version */ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data & NVCTRL_EXT_NEED_CHECK) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int major, minor; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data = 0; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (XNVCTRLQueryVersion(dpy, &major, &minor)) { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data |= NVCTRL_EXT_EXISTS; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (major == 1 && (minor == 8 || minor == 9)) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data |= NVCTRL_EXT_NEED_TARGET_SWAP; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((major > 1) || ((major == 1) && (minor > 20))) { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data |= NVCTRL_EXT_64_BIT_ATTRIBUTES; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info->data = (XPointer)data; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return data; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryVersion ( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *major, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *minor 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryExtensionReply rep; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryExtensionReq *req; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryExtension, req); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryExtension; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (major) *major = rep.major; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (minor) *minor = rep.minor; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLIsNvScreen ( 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlIsNvReply rep; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlIsNvReq *req; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool isnv; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlIsNv, req); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlIsNv; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->screen = screen; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isnv = rep.isnv; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return isnv; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryTargetCount ( 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *value 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryTargetCountReply rep; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryTargetCountReq *req; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryTargetCount, req); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryTargetCount; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (value) *value = rep.count; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True; 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void XNVCTRLSetTargetAttribute ( 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int value 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSetAttributeReq *req; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLSimpleCheckExtension (dpy, info); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlSetAttribute, req); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlSetAttribute; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->value = value; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void XNVCTRLSetAttribute ( 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int value 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLSetTargetAttribute (dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, screen, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) display_mask, attribute, value); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLSetTargetAttributeAndGetStatus ( 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int value 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSetAttributeAndGetStatusReq *req; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSetAttributeAndGetStatusReply rep; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool success; 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlSetAttributeAndGetStatus, req); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlSetAttributeAndGetStatus; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->value = value; 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, False)) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = rep.flags; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return success; 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLSetAttributeAndGetStatus ( 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int value 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return XNVCTRLSetTargetAttributeAndGetStatus(dpy, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NV_CTRL_TARGET_TYPE_X_SCREEN, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen, display_mask, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, value); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryTargetAttribute ( 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *value 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryAttributeReply rep; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryAttributeReq *req; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryAttribute, req); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryAttribute; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists && value) *value = rep.value; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryAttribute ( 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *value 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return XNVCTRLQueryTargetAttribute(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen, display_mask, attribute, value); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryTargetAttribute64 ( 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64_t *value 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display(dpy); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryAttribute64Reply rep; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryAttributeReq *req; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!XextHasExtension(info)) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension(dpy, info, False); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay(dpy); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq(nvCtrlQueryAttribute, req); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryAttribute64; 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply(dpy, (xReply *)&rep, 0, xTrue)) { 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists && value) *value = rep.value_64; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryTargetStringAttribute ( 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char **ptr 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryStringAttributeReply rep; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryStringAttributeReq *req; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int length, numbytes, slop; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ptr) return False; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryStringAttribute, req); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryStringAttribute; 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, False)) { 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) length = rep.length; 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) numbytes = rep.n; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) slop = numbytes & 3; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists) { 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ptr = (char *) Xmalloc(numbytes); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!exists || !*ptr) { 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XEatData(dpy, length); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XRead(dpy, (char *) *ptr, numbytes); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (slop) _XEatData(dpy, 4-slop); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryStringAttribute ( 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char **ptr 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return XNVCTRLQueryTargetStringAttribute(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen, display_mask, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, ptr); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLSetTargetStringAttribute ( 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *ptr 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSetStringAttributeReq *req; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSetStringAttributeReply rep; 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size; 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool success; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size = strlen(ptr)+1; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlSetStringAttribute, req); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlSetStringAttribute; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->length += ((size + 3) & ~3) >> 2; 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->num_bytes = size; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Data(dpy, ptr, size); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, False)) { 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = rep.flags; 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return success; 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLSetStringAttribute ( 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *ptr 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return XNVCTRLSetTargetStringAttribute(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen, display_mask, 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, ptr); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static Bool XNVCTRLQueryValidTargetAttributeValues32 ( 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributeValidValuesRec *values 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryValidAttributeValuesReply rep; 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryValidAttributeValuesReq *req; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryValidAttributeValues, req); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryValidAttributeValues; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists) { 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->type = rep.attr_type; 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rep.attr_type == ATTRIBUTE_TYPE_RANGE) { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->u.range.min = rep.min; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->u.range.max = rep.max; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rep.attr_type == ATTRIBUTE_TYPE_INT_BITS) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->u.bits.ints = rep.bits; 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->permissions = rep.perms; 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryValidTargetStringAttributeValues ( 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributeValidValuesRec *values 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display(dpy); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryValidAttributeValuesReply rep; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryValidAttributeValuesReq *req; 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!values) return False; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!XextHasExtension(info)) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension(dpy, info, False); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay(dpy); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryValidAttributeValues, req); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryValidStringAttributeValues; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply(dpy, (xReply *)&rep, 0, xTrue)) { 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists) { 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->type = rep.attr_type; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->permissions = rep.perms; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static Bool XNVCTRLQueryValidTargetAttributeValues64 ( 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info, 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributeValidValuesRec *values 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryValidAttributeValues64Reply rep; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryValidAttributeValuesReq *req; 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay(dpy); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq(nvCtrlQueryValidAttributeValues, req); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryValidAttributeValues64; 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply(dpy, (xReply *)&rep, 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sz_xnvCtrlQueryValidAttributeValues64Reply_extra, 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xTrue)) { 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists) { 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->type = rep.attr_type; 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rep.attr_type == ATTRIBUTE_TYPE_RANGE) { 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->u.range.min = rep.min_64; 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->u.range.max = rep.max_64; 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rep.attr_type == ATTRIBUTE_TYPE_INT_BITS) { 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->u.bits.ints = rep.bits_64; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values->permissions = rep.perms; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryValidTargetAttributeValues ( 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributeValidValuesRec *values 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display(dpy); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uintptr_t flags; 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!values) return False; 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!XextHasExtension(info)) 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension(dpy, info, False); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flags = version_flags(dpy,info); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(flags & NVCTRL_EXT_EXISTS)) 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flags & NVCTRL_EXT_64_BIT_ATTRIBUTES) { 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = XNVCTRLQueryValidTargetAttributeValues64(dpy, info, 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_type, 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_id, 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) display_mask, 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = XNVCTRLQueryValidTargetAttributeValues32(dpy, info, 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_type, 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_id, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) display_mask, 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) values); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryValidAttributeValues ( 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributeValidValuesRec *values 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return XNVCTRLQueryValidTargetAttributeValues(dpy, 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NV_CTRL_TARGET_TYPE_X_SCREEN, 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen, display_mask, 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, values); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static Bool QueryAttributePermissionsInternal ( 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributePermissionsRec *permissions, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int reqType 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryAttributePermissionsReply rep; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryAttributePermissionsReq *req; 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay(dpy); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq(nvCtrlQueryAttributePermissions, req); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = reqType; 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists && permissions) { 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions->type = rep.attr_type; 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions->permissions = rep.perms; 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryAttributePermissions ( 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributePermissionsRec *permissions 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return QueryAttributePermissionsInternal(dpy, 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions, 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X_nvCtrlQueryAttributePermissions); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryStringAttributePermissions ( 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributePermissionsRec *permissions 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return QueryAttributePermissionsInternal(dpy, 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions, 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X_nvCtrlQueryStringAttributePermissions); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryBinaryDataAttributePermissions ( 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributePermissionsRec *permissions 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return QueryAttributePermissionsInternal(dpy, 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions, 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X_nvCtrlQueryBinaryDataAttributePermissions); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryStringOperationAttributePermissions ( 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NVCTRLAttributePermissionsRec *permissions 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return QueryAttributePermissionsInternal(dpy, 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions, 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) X_nvCtrlQueryStringOperationAttributePermissions); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void XNVCTRLSetGvoColorConversion ( 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float colorMatrix[3][3], 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float colorOffset[3], 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float colorScale[3] 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSetGvoColorConversionReq *req; 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLSimpleCheckExtension (dpy, info); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlSetGvoColorConversion, req); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlSetGvoColorConversion; 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->screen = screen; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_y_r = colorMatrix[0][0]; 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_y_g = colorMatrix[0][1]; 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_y_b = colorMatrix[0][2]; 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_cr_r = colorMatrix[1][0]; 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_cr_g = colorMatrix[1][1]; 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_cr_b = colorMatrix[1][2]; 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_cb_r = colorMatrix[2][0]; 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_cb_g = colorMatrix[2][1]; 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscMatrix_cb_b = colorMatrix[2][2]; 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscOffset_y = colorOffset[0]; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscOffset_cr = colorOffset[1]; 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscOffset_cb = colorOffset[2]; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscScale_y = colorScale[0]; 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscScale_cr = colorScale[1]; 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->cscScale_cb = colorScale[2]; 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryGvoColorConversion ( 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float colorMatrix[3][3], 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float colorOffset[3], 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float colorScale[3] 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryGvoColorConversionReply rep; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryGvoColorConversionReq *req; 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryGvoColorConversion, req); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryGvoColorConversion; 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->screen = screen; 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XRead(dpy, (char *)(colorMatrix), 36); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XRead(dpy, (char *)(colorOffset), 12); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XRead(dpy, (char *)(colorScale), 12); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True; 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCtrlSelectTargetNotify ( 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int notify_type, 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool onoff 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSelectTargetNotifyReq *req; 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension (info)) 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlSelectTargetNotify, req); 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlSelectTargetNotify; 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->notifyType = notify_type; 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->onoff = onoff; 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True; 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCtrlSelectNotify ( 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool onoff 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlSelectNotifyReq *req; 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension (info)) 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlSelectNotify, req); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlSelectNotify; 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->screen = screen; 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->notifyType = type; 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->onoff = onoff; 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True; 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryTargetBinaryData ( 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char **ptr, 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *len 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryBinaryDataReply rep; 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlQueryBinaryDataReq *req; 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool exists; 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int length, numbytes, slop; 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ptr) return False; 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(!XextHasExtension(info)) 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay (dpy); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq (nvCtrlQueryBinaryData, req); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlQueryBinaryData; 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, False)) { 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) length = rep.length; 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) numbytes = rep.n; 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) slop = numbytes & 3; 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) exists = rep.flags; 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (exists) { 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ptr = (unsigned char *) Xmalloc(numbytes); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!exists || !*ptr) { 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XEatData(dpy, length); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XRead(dpy, (char *) *ptr, numbytes); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (slop) _XEatData(dpy, 4-slop); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (len) *len = numbytes; 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay (dpy); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle (); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return exists; 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLQueryBinaryData ( 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int screen, 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned char **ptr, 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int *len 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)){ 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return XNVCTRLQueryTargetBinaryData(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen, display_mask, 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) attribute, ptr, len); 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Bool XNVCTRLStringOperation ( 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Display *dpy, 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_type, 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int target_id, 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int display_mask, 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int attribute, 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char *pIn, 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char **ppOut 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) { 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display(dpy); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlStringOperationReq *req; 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvCtrlStringOperationReply rep; 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Bool ret; 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int inSize, outSize, length, slop; 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!XextHasExtension(info)) 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ppOut) 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *ppOut = NULL; 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension(dpy, info, False); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pIn) { 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inSize = strlen(pIn) + 1; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) inSize = 0; 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LockDisplay(dpy); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetReq(nvCtrlStringOperation, req); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->reqType = info->codes->major_opcode; 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->nvReqType = X_nvCtrlStringOperation; 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_type = target_type; 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->target_id = target_id; 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->display_mask = display_mask; 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->attribute = attribute; 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->length += ((inSize + 3) & ~3) >> 2; 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) req->num_bytes = inSize; 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pIn) { 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Data(dpy, pIn, inSize); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!_XReply (dpy, (xReply *) &rep, 0, False)) { 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) length = rep.length; 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) outSize = rep.num_bytes; 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) slop = outSize & 3; 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (outSize) *ppOut = (char *) Xmalloc(outSize); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!*ppOut) { 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XEatData(dpy, length); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XRead(dpy, (char *) *ppOut, outSize); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (slop) _XEatData(dpy, 4-slop); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = rep.ret; 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnlockDisplay(dpy); 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncHandle(); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ret; 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static Bool wire_to_event (Display *dpy, XEvent *host, xEvent *wire) 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XExtDisplayInfo *info = find_display (dpy); 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCtrlEvent *re; 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvctrlEvent *event; 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCtrlEventTarget *reTarget; 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) xnvctrlEventTarget *eventTarget; 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCtrlEventTargetAvailability *reTargetAvailability; 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCtrlStringEventTarget *reTargetString; 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCtrlBinaryEventTarget *reTargetBinary; 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) XNVCTRLCheckExtension (dpy, info, False); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch ((wire->u.u.type & 0x7F) - info->codes->first_event) { 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ATTRIBUTE_CHANGED_EVENT: 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re = (XNVCtrlEvent *) host; 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event = (xnvctrlEvent *) wire; 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.type = event->u.u.type & 0x7F; 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.serial = 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XSetLastRequestRead(dpy, (xGenericReply*) event); 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.send_event = ((event->u.u.type & 0x80) != 0); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.display = dpy; 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.time = event->u.attribute_changed.time; 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.screen = event->u.attribute_changed.screen; 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.display_mask = 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event->u.attribute_changed.display_mask; 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.attribute = event->u.attribute_changed.attribute; 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) re->attribute_changed.value = event->u.attribute_changed.value; 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TARGET_ATTRIBUTE_CHANGED_EVENT: 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget = (XNVCtrlEventTarget *) host; 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget = (xnvctrlEventTarget *) wire; 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.type = eventTarget->u.u.type & 0x7F; 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.serial = 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XSetLastRequestRead(dpy, (xGenericReply*) eventTarget); 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.send_event = 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((eventTarget->u.u.type & 0x80) != 0); 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.display = dpy; 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.time = 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.time; 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.target_type = 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.target_type; 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.target_id = 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.target_id; 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.display_mask = 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.display_mask; 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.attribute = 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.attribute; 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTarget->attribute_changed.value = 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.value; 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TARGET_ATTRIBUTE_AVAILABILITY_CHANGED_EVENT: 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability = (XNVCtrlEventTargetAvailability *) host; 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget = (xnvctrlEventTarget *) wire; 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.type = 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.u.type & 0x7F; 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.serial = 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XSetLastRequestRead(dpy, (xGenericReply*) eventTarget); 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.send_event = 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((eventTarget->u.u.type & 0x80) != 0); 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.display = dpy; 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.time = 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.availability_changed.time; 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.target_type = 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.availability_changed.target_type; 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.target_id = 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.availability_changed.target_id; 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.display_mask = 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.availability_changed.display_mask; 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.attribute = 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.availability_changed.attribute; 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.availability = 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.availability_changed.availability; 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetAvailability->attribute_changed.value = 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.availability_changed.value; 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TARGET_STRING_ATTRIBUTE_CHANGED_EVENT: 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString = (XNVCtrlStringEventTarget *) host; 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget = (xnvctrlEventTarget *) wire; 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.type = eventTarget->u.u.type & 0x7F; 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.serial = 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XSetLastRequestRead(dpy, (xGenericReply*) eventTarget); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.send_event = 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((eventTarget->u.u.type & 0x80) != 0); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.display = dpy; 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.time = 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.time; 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.target_type = 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.target_type; 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.target_id = 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.target_id; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.display_mask = 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.display_mask; 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetString->attribute_changed.attribute = 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.attribute; 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT: 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary = (XNVCtrlBinaryEventTarget *) host; 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget = (xnvctrlEventTarget *) wire; 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.type = eventTarget->u.u.type & 0x7F; 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.serial = 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _XSetLastRequestRead(dpy, (xGenericReply*) eventTarget); 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.send_event = 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ((eventTarget->u.u.type & 0x80) != 0); 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.display = dpy; 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.time = 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.time; 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.target_type = 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.target_type; 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.target_id = 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.target_id; 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.display_mask = 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.display_mask; 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reTargetBinary->attribute_changed.attribute = 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eventTarget->u.attribute_changed.attribute; 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False; 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True; 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1241