⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devices.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
	return BadValue;    }    if (BadDeviceMap(&map[0], (int)stuff->nElts, 1, 255, &client->errorValue))	return BadValue;    for (i=0; i < stuff->nElts; i++)	if ((mouse->button->map[i + 1] != map[i]) &&	    BitIsOn(mouse->button->down, i + 1))	{    	    rep.success = MappingBusy;	    WriteReplyToClient(client, sizeof(xSetPointerMappingReply), &rep);            return Success;	}    for (i = 0; i < stuff->nElts; i++)	mouse->button->map[i + 1] = map[i];    SendMappingNotify(MappingPointer, 0, 0, client);    WriteReplyToClient(client, sizeof(xSetPointerMappingReply), &rep);    return Success;}intProcGetKeyboardMapping(client)    ClientPtr client;{    xGetKeyboardMappingReply rep;    REQUEST(xGetKeyboardMappingReq);    KeySymsPtr curKeySyms = &inputInfo.keyboard->key->curKeySyms;    REQUEST_SIZE_MATCH(xGetKeyboardMappingReq);    if ((stuff->firstKeyCode < curKeySyms->minKeyCode) ||        (stuff->firstKeyCode > curKeySyms->maxKeyCode))    {	client->errorValue = stuff->firstKeyCode;	return BadValue;    }    if (stuff->firstKeyCode + stuff->count >	(unsigned)(curKeySyms->maxKeyCode + 1))    {	client->errorValue = stuff->count;        return BadValue;    }    rep.type = X_Reply;    rep.sequenceNumber = client->sequence;    rep.keySymsPerKeyCode = curKeySyms->mapWidth;    /* length is a count of 4 byte quantities and KeySyms are 4 bytes */    rep.length = (curKeySyms->mapWidth * stuff->count);    WriteReplyToClient(client, sizeof(xGetKeyboardMappingReply), &rep);    client->pSwapReplyFunc = (ReplySwapPtr) CopySwap32Write;    WriteSwappedDataToClient(	client,	curKeySyms->mapWidth * stuff->count * sizeof(KeySym),	&curKeySyms->map[(stuff->firstKeyCode - curKeySyms->minKeyCode) *			 curKeySyms->mapWidth]);    return client->noClientException;}intProcGetPointerMapping(client)    ClientPtr client;{    xGetPointerMappingReply rep;    ButtonClassPtr butc = inputInfo.pointer->button;    REQUEST_SIZE_MATCH(xReq);    rep.type = X_Reply;    rep.sequenceNumber = client->sequence;    rep.nElts = butc->numButtons;    rep.length = ((unsigned)rep.nElts + (4-1))/4;    WriteReplyToClient(client, sizeof(xGetPointerMappingReply), &rep);    (void)WriteToClient(client, (int)rep.nElts, (char *)&butc->map[1]);    return Success;    }voidNoteLedState(keybd, led, on)    DeviceIntPtr keybd;    int		led;    Bool	on;{    KeybdCtrl *ctrl = &keybd->kbdfeed->ctrl;    if (on)	ctrl->leds |= ((Leds)1 << (led - 1));    else	ctrl->leds &= ~((Leds)1 << (led - 1));}intOnes(mask)                /* HACKMEM 169 */    unsigned long mask;{    register unsigned long y;    y = (mask >> 1) &033333333333;    y = mask - y - ((y >>1) & 033333333333);    return (((y + (y >> 3)) & 030707070707) % 077);}intProcChangeKeyboardControl (client)    ClientPtr client;{#define DO_ALL    (-1)    KeybdCtrl ctrl;    DeviceIntPtr keybd = inputInfo.keyboard;    XID *vlist;    int t;    int led = DO_ALL;    int key = DO_ALL;    BITS32 vmask, index2;    int mask, i;    REQUEST(xChangeKeyboardControlReq);    REQUEST_AT_LEAST_SIZE(xChangeKeyboardControlReq);    vmask = stuff->mask;    if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))	return BadLength;#ifdef XCSECURITY    if (!SecurityCheckDeviceAccess(client, keybd, TRUE))	return BadAccess;#endif     vlist = (XID *)&stuff[1];		/* first word of values */    ctrl = keybd->kbdfeed->ctrl;    while (vmask)    {	index2 = (BITS32) lowbit (vmask);	vmask &= ~index2;	switch (index2)	{	case KBKeyClickPercent: 	    t = (INT8)*vlist;	    vlist++;	    if (t == -1)		t = defaultKeyboardControl.click;	    else if (t < 0 || t > 100)	    {		client->errorValue = t;		return BadValue;	    }	    ctrl.click = t;	    break;	case KBBellPercent:	    t = (INT8)*vlist;	    vlist++;	    if (t == -1)		t = defaultKeyboardControl.bell;	    else if (t < 0 || t > 100)	    {		client->errorValue = t;		return BadValue;	    }	    ctrl.bell = t;	    break;	case KBBellPitch:	    t = (INT16)*vlist;	    vlist++;	    if (t == -1)		t = defaultKeyboardControl.bell_pitch;	    else if (t < 0)	    {		client->errorValue = t;		return BadValue;	    }	    ctrl.bell_pitch = t;	    break;	case KBBellDuration:	    t = (INT16)*vlist;	    vlist++;	    if (t == -1)		t = defaultKeyboardControl.bell_duration;	    else if (t < 0)	    {		client->errorValue = t;		return BadValue;	    }	    ctrl.bell_duration = t;	    break;	case KBLed:	    led = (CARD8)*vlist;	    vlist++;	    if (led < 1 || led > 32)	    {		client->errorValue = led;		return BadValue;	    }	    if (!(stuff->mask & KBLedMode))		return BadMatch;	    break;	case KBLedMode:	    t = (CARD8)*vlist;	    vlist++;	    if (t == LedModeOff)	    {		if (led == DO_ALL)		    ctrl.leds = 0x0;		else		    ctrl.leds &= ~(((Leds)(1)) << (led - 1));	    }	    else if (t == LedModeOn)	    {		if (led == DO_ALL)		    ctrl.leds = ~0L;		else		    ctrl.leds |= (((Leds)(1)) << (led - 1));	    }	    else	    {		client->errorValue = t;		return BadValue;	    }#ifdef XKB	    if (!noXkbExtension) {		XkbEventCauseRec	cause;		XkbSetCauseCoreReq(&cause,X_ChangeKeyboardControl,client);		keybd->kbdfeed->ctrl.leds = ctrl.leds;		XkbSetIndicators(keybd,((led == DO_ALL) ? ~0L : (1L<<(led-1))),				 			ctrl.leds, &cause);	    }#endif	    break;	case KBKey:	    key = (KeyCode)*vlist;	    vlist++;	    if ((KeyCode)key < inputInfo.keyboard->key->curKeySyms.minKeyCode ||		(KeyCode)key > inputInfo.keyboard->key->curKeySyms.maxKeyCode)	    {		client->errorValue = key;		return BadValue;	    }	    if (!(stuff->mask & KBAutoRepeatMode))		return BadMatch;	    break;	case KBAutoRepeatMode:	    i = (key >> 3);	    mask = (1 << (key & 7));	    t = (CARD8)*vlist;	    vlist++;#ifdef XKB	    if (!noXkbExtension && key != DO_ALL)		XkbDisableComputedAutoRepeats(keybd,key);#endif	    if (t == AutoRepeatModeOff)	    {		if (key == DO_ALL)		    ctrl.autoRepeat = FALSE;		else		    ctrl.autoRepeats[i] &= ~mask;	    }	    else if (t == AutoRepeatModeOn)	    {		if (key == DO_ALL)		    ctrl.autoRepeat = TRUE;		else		    ctrl.autoRepeats[i] |= mask;	    }	    else if (t == AutoRepeatModeDefault)	    {		if (key == DO_ALL)		    ctrl.autoRepeat = defaultKeyboardControl.autoRepeat;		else		    ctrl.autoRepeats[i] =			    (ctrl.autoRepeats[i] & ~mask) |			    (defaultKeyboardControl.autoRepeats[i] & mask);	    }	    else	    {		client->errorValue = t;		return BadValue;	    }	    break;	default:	    client->errorValue = stuff->mask;	    return BadValue;	}    }    keybd->kbdfeed->ctrl = ctrl;#ifdef XKB    /* The XKB RepeatKeys control and core protocol global autorepeat */    /* value are linked	*/    if (!noXkbExtension) {	XkbSetRepeatKeys(keybd,key,keybd->kbdfeed->ctrl.autoRepeat);    }    else#endif    (*keybd->kbdfeed->CtrlProc)(keybd, &keybd->kbdfeed->ctrl);    return Success;#undef DO_ALL} intProcGetKeyboardControl (client)    ClientPtr client;{    int i;    register KeybdCtrl *ctrl = &inputInfo.keyboard->kbdfeed->ctrl;    xGetKeyboardControlReply rep;    REQUEST_SIZE_MATCH(xReq);    rep.type = X_Reply;    rep.length = 5;    rep.sequenceNumber = client->sequence;    rep.globalAutoRepeat = ctrl->autoRepeat;    rep.keyClickPercent = ctrl->click;    rep.bellPercent = ctrl->bell;    rep.bellPitch = ctrl->bell_pitch;    rep.bellDuration = ctrl->bell_duration;    rep.ledMask = ctrl->leds;    for (i = 0; i < 32; i++)	rep.map[i] = ctrl->autoRepeats[i];    WriteReplyToClient(client, sizeof(xGetKeyboardControlReply), &rep);    return Success;} intProcBell(client)    ClientPtr client;{    register DeviceIntPtr keybd = inputInfo.keyboard;    int base = keybd->kbdfeed->ctrl.bell;    int newpercent;    REQUEST(xBellReq);    REQUEST_SIZE_MATCH(xBellReq);    if (stuff->percent < -100 || stuff->percent > 100)    {	client->errorValue = stuff->percent;	return BadValue;    }    newpercent = (base * stuff->percent) / 100;    if (stuff->percent < 0)        newpercent = base + newpercent;    else    	newpercent = base - newpercent + stuff->percent;#ifdef XKB    if (!noXkbExtension)	XkbHandleBell(FALSE,FALSE, keybd, newpercent, &keybd->kbdfeed->ctrl, 0, 		      None, NULL, client);	else#endif    (*keybd->kbdfeed->BellProc)(newpercent, keybd,				(pointer) &keybd->kbdfeed->ctrl, 0);    return Success;} intProcChangePointerControl(client)    ClientPtr client;{    DeviceIntPtr mouse = inputInfo.pointer;    PtrCtrl ctrl;		/* might get BadValue part way through */    REQUEST(xChangePointerControlReq);    REQUEST_SIZE_MATCH(xChangePointerControlReq);    ctrl = mouse->ptrfeed->ctrl;    if ((stuff->doAccel != xTrue) && (stuff->doAccel != xFalse))    {	client->errorValue = stuff->doAccel;	return(BadValue);    }    if ((stuff->doThresh != xTrue) && (stuff->doThresh != xFalse))    {	client->errorValue = stuff->doThresh;	return(BadValue);    }    if (stuff->doAccel)    {	if (stuff->accelNum == -1)	    ctrl.num = defaultPointerControl.num;	else if (stuff->accelNum < 0)	{	    client->errorValue = stuff->accelNum;	    return BadValue;	}	else ctrl.num = stuff->accelNum;	if (stuff->accelDenum == -1)	    ctrl.den = defaultPointerControl.den;	else if (stuff->accelDenum <= 0)	{	    client->errorValue = stuff->accelDenum;	    return BadValue;	}	else ctrl.den = stuff->accelDenum;    }    if (stuff->doThresh)    {	if (stuff->threshold == -1)	    ctrl.threshold = defaultPointerControl.threshold;	else if (stuff->threshold < 0)	{	    client->errorValue = stuff->threshold;	    return BadValue;	}	else ctrl.threshold = stuff->threshold;    }    mouse->ptrfeed->ctrl = ctrl;    (*mouse->ptrfeed->CtrlProc)(mouse, &mouse->ptrfeed->ctrl);    return Success;} intProcGetPointerControl(client)    ClientPtr client;{    register PtrCtrl *ctrl = &inputInfo.pointer->ptrfeed->ctrl;    xGetPointerControlReply rep;    REQUEST_SIZE_MATCH(xReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.threshold = ctrl->threshold;    rep.accelNumerator = ctrl->num;    rep.accelDenominator = ctrl->den;    WriteReplyToClient(client, sizeof(xGenericReply), &rep);    return Success;}voidMaybeStopHint(dev, client)    register DeviceIntPtr dev;    ClientPtr client;{    GrabPtr grab = dev->grab;    if ((grab && SameClient(grab, client) &&	 ((grab->eventMask & PointerMotionHintMask) ||	  (grab->ownerEvents &&	   (EventMaskForClient(dev->valuator->motionHintWindow, client) &	    PointerMotionHintMask)))) ||	(!grab &&	 (EventMaskForClient(dev->valuator->motionHintWindow, client) &	  PointerMotionHintMask)))	dev->valuator->motionHintWindow = NullWindow;}intProcGetMotionEvents(client)    ClientPtr client;{    WindowPtr pWin;    xTimecoord * coords = (xTimecoord *) NULL;    xGetMotionEventsReply rep;    int     i, count, xmin, xmax, ymin, ymax;    unsigned long nEvents;    DeviceIntPtr mouse = inputInfo.pointer;    TimeStamp start, stop;    REQUEST(xGetMotionEventsReq);    REQUEST_SIZE_MATCH(xGetMotionEventsReq);    pWin = SecurityLookupWindow(stuff->window, client, TRUE);    if (!pWin)	return BadWindow;    if (mouse->valuator->motionHintWindow)	MaybeStopHint(mouse, client);    rep.type = X_Reply;    rep.sequenceNumber = client->sequence;    nEvents = 0;    start = ClientTimeToServerTime(stuff->start);    stop = ClientTimeToServerTime(stuff->stop);    if ((CompareTimeStamps(start, stop) != LATER) &&	(CompareTimeStamps(start, currentTime) != LATER) &&	mouse->valuator->numMotionEvents)    {	if (CompareTimeStamps(stop, currentTime) == LATER)	    stop = currentTime;	coords = (xTimecoord *)ALLOCATE_LOCAL(mouse->valuator->numMotionEvents					      * sizeof(xTimecoord));	if (!coords)	    return BadAlloc;	count = (*mouse->valuator->GetMotionProc) (mouse, coords,						   start.milliseconds,						   stop.milliseconds,						   pWin->drawable.pScreen);	xmin = pWin->drawable.x - wBorderWidth (pWin);	xmax = pWin->drawable.x + (int)pWin->drawable.width +		wBorderWidth (pWin);	ymin = pWin->drawable.y - wBorderWidth (pWin);	ymax = pWin->drawable.y + (int)pWin->drawable.height +		wBorderWidth (pWin);	for (i = 0; i < count; i++)	    if ((xmin <= coords[i].x) && (coords[i].x < xmax) &&		    (ymin <= coords[i].y) && (coords[i].y < ymax))	    {		coords[nEvents].time = coords[i].time;		coords[nEvents].x = coords[i].x - pWin->drawable.x;		coords[nEvents].y = coords[i].y - pWin->drawable.y;		nEvents++;	    }    }    rep.length = nEvents * (sizeof(xTimecoord) >> 2);    rep.nEvents = nEvents;    WriteReplyToClient(client, sizeof(xGetMotionEventsReply), &rep);    if (nEvents)    {	client->pSwapReplyFunc = (ReplySwapPtr) SwapTimeCoordWrite;	WriteSwappedDataToClient(client, nEvents * sizeof(xTimecoord),				 (char *)coords);    }    if (coords)	DEALLOCATE_LOCAL(coords);    return Success;}intProcQueryKeymap(client)    ClientPtr client;{    xQueryKeymapReply rep;    int i;    CARD8 *down = inputInfo.keyboard->key->down;    REQUEST_SIZE_MATCH(xReq);    rep.type = X_Reply;    rep.sequenceNumber = client->sequence;    rep.length = 2;#ifdef XCSECURITY    if (!SecurityCheckDeviceAccess(client, inputInfo.keyboard, TRUE))    {	bzero((char *)&rep.map[0], 32);    }    else#endif    for (i = 0; i<32; i++)	rep.map[i] = down[i];    WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);    return Success;}/****************************************************************************** * The following entrypoints are provided for binary compatibility with * previous versions (they make casts, where the current version changes types * for more stringent prototype checking). ******************************************************************************/#ifdef AddInputDevice#undef AddInputDevice#if NeedFunctionPrototypesDevicePtrAddInputDevice(    DeviceProc deviceProc,    Bool autoStart)#elseDevicePtrAddInputDevice(deviceProc, autoStart)    DeviceProc deviceProc;    Bool autoStart;#endif{    return (DevicePtr)_AddInputDevice(deviceProc, autoStart);}#endif /* AddInputDevice */#ifdef RegisterPointerDevice#undef RegisterPointerDevice#if NeedFunctionPrototypesvoidRegisterPointerDevice(DevicePtr device)#elsevoidRegisterPointerDevice(device)    DevicePtr device;#endif{    _RegisterPointerDevice((DeviceIntPtr)device);}#endif /* RegisterPointerDevice */#ifdef RegisterKeyboardDevice#undef RegisterKeyboardDevice#if NeedFunctionPrototypesvoidRegisterKeyboardDevice(DevicePtr device)#elsevoidRegisterKeyboardDevice(device)    DevicePtr device;#endif{    _RegisterKeyboardDevice((DeviceIntPtr)device);}#endif /* RegisterKeyboardDevice */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -