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

📄 devices.c

📁 远程桌面连接工具
💻 C
📖 第 1 页 / 共 3 页
字号:
    int numButtons;    CARD8 *map;{    register ButtonClassPtr butc;    int i;    butc = (ButtonClassPtr)xalloc(sizeof(ButtonClassRec));    if (!butc)	return FALSE;    butc->numButtons = numButtons;    for (i = 1; i <= numButtons; i++)	butc->map[i] = map[i];    butc->buttonsDown = 0;    butc->state = 0;    butc->motionMask = 0;    bzero((char *)butc->down, DOWN_LENGTH);#ifdef XKB    butc->xkb_acts=	NULL;#endif    dev->button = butc;    return TRUE;}BoolInitValuatorClassDeviceStruct(dev, numAxes, motionProc, numMotionEvents, mode)    DeviceIntPtr dev;    ValuatorMotionProcPtr motionProc;    int numAxes;    int numMotionEvents;    int mode;{    int i;    register ValuatorClassPtr valc;    valc = (ValuatorClassPtr)xalloc(sizeof(ValuatorClassRec) +				    numAxes * sizeof(AxisInfo) +				    numAxes * sizeof(unsigned int));    if (!valc)	return FALSE;    valc->GetMotionProc = motionProc;    valc->numMotionEvents = numMotionEvents;    valc->motionHintWindow = NullWindow;    valc->numAxes = numAxes;    valc->mode = mode;    valc->axes = (AxisInfoPtr)(valc + 1);    valc->axisVal = (int *)(valc->axes + numAxes);    for (i=0; i<numAxes; i++)	valc->axisVal[i]=0;    dev->valuator = valc;    return TRUE;}BoolInitFocusClassDeviceStruct(dev)    DeviceIntPtr dev;{    register FocusClassPtr focc;    focc = (FocusClassPtr)xalloc(sizeof(FocusClassRec));    if (!focc)	return FALSE;    focc->win = PointerRootWin;    focc->revert = None;    focc->time = currentTime;    focc->trace = (WindowPtr *)NULL;    focc->traceSize = 0;    focc->traceGood = 0;    dev->focus = focc;    return TRUE;}BoolInitKbdFeedbackClassDeviceStruct(dev, bellProc, controlProc)    DeviceIntPtr dev;    BellProcPtr bellProc;    KbdCtrlProcPtr controlProc;{    register KbdFeedbackPtr feedc;    feedc = (KbdFeedbackPtr)xalloc(sizeof(KbdFeedbackClassRec));    if (!feedc)	return FALSE;    feedc->BellProc = bellProc;    feedc->CtrlProc = controlProc;#ifdef XKB    defaultKeyboardControl.autoRepeat = TRUE;#endif    feedc->ctrl = defaultKeyboardControl;    feedc->ctrl.id = 0;    if ((feedc->next = dev->kbdfeed) != 0)	feedc->ctrl.id = dev->kbdfeed->ctrl.id + 1;    dev->kbdfeed = feedc;#ifdef XKB    feedc->xkb_sli= NULL;    if (!noXkbExtension)	XkbFinishDeviceInit(dev);#endif    (*dev->kbdfeed->CtrlProc)(dev,&dev->kbdfeed->ctrl);    return TRUE;}BoolInitPtrFeedbackClassDeviceStruct(dev, controlProc)    DeviceIntPtr dev;    PtrCtrlProcPtr controlProc;{    register PtrFeedbackPtr feedc;    feedc = (PtrFeedbackPtr)xalloc(sizeof(PtrFeedbackClassRec));    if (!feedc)	return FALSE;    feedc->CtrlProc = controlProc;#ifdef sgi    feedc->ctrl.num = 1;    feedc->ctrl.den = 1;    feedc->ctrl.threshold = 1;#else    feedc->ctrl = defaultPointerControl;#endif    feedc->ctrl.id = 0;    if ( (feedc->next = dev->ptrfeed) )        feedc->ctrl.id = dev->ptrfeed->ctrl.id + 1;    dev->ptrfeed = feedc;    (*controlProc)(dev, &feedc->ctrl);    return TRUE;}LedCtrl defaultLedControl = {	DEFAULT_LEDS, DEFAULT_LEDS_MASK, 0};BellCtrl defaultBellControl = {	DEFAULT_BELL,	DEFAULT_BELL_PITCH,	DEFAULT_BELL_DURATION,	0};IntegerCtrl defaultIntegerControl = {	DEFAULT_INT_RESOLUTION,	DEFAULT_INT_MIN_VALUE,	DEFAULT_INT_MAX_VALUE,	DEFAULT_INT_DISPLAYED,	0};BoolInitStringFeedbackClassDeviceStruct (dev, controlProc, max_symbols,				     num_symbols_supported, symbols)    DeviceIntPtr dev;    StringCtrlProcPtr controlProc;    int max_symbols;    int num_symbols_supported;    KeySym *symbols;{    int i;    register StringFeedbackPtr feedc;    feedc = (StringFeedbackPtr)xalloc(sizeof(StringFeedbackClassRec));    if (!feedc)	return FALSE;    feedc->CtrlProc = controlProc;    feedc->ctrl.num_symbols_supported = num_symbols_supported;    feedc->ctrl.num_symbols_displayed = 0;    feedc->ctrl.max_symbols = max_symbols;    feedc->ctrl.symbols_supported = (KeySym *) 	xalloc (sizeof (KeySym) * num_symbols_supported);    feedc->ctrl.symbols_displayed = (KeySym *) 	xalloc (sizeof (KeySym) * max_symbols);    if (!feedc->ctrl.symbols_supported || !feedc->ctrl.symbols_displayed)    {	if (feedc->ctrl.symbols_supported)	    xfree(feedc->ctrl.symbols_supported);	if (feedc->ctrl.symbols_displayed)	    xfree(feedc->ctrl.symbols_displayed);	xfree(feedc);	return FALSE;    }    for (i=0; i<num_symbols_supported; i++)	*(feedc->ctrl.symbols_supported+i) = *symbols++;    for (i=0; i<max_symbols; i++)	*(feedc->ctrl.symbols_displayed+i) = (KeySym) NULL;    feedc->ctrl.id = 0;    if ( (feedc->next = dev->stringfeed) )	feedc->ctrl.id = dev->stringfeed->ctrl.id + 1;    dev->stringfeed = feedc;    (*controlProc)(dev, &feedc->ctrl);    return TRUE;}BoolInitBellFeedbackClassDeviceStruct (dev, bellProc, controlProc)    DeviceIntPtr dev;    BellProcPtr bellProc;    BellCtrlProcPtr controlProc;{    register BellFeedbackPtr feedc;    feedc = (BellFeedbackPtr)xalloc(sizeof(BellFeedbackClassRec));    if (!feedc)	return FALSE;    feedc->CtrlProc = controlProc;    feedc->BellProc = bellProc;    feedc->ctrl = defaultBellControl;    feedc->ctrl.id = 0;    if ( (feedc->next = dev->bell) )	feedc->ctrl.id = dev->bell->ctrl.id + 1;    dev->bell = feedc;    (*controlProc)(dev, &feedc->ctrl);    return TRUE;}BoolInitLedFeedbackClassDeviceStruct (dev, controlProc)    DeviceIntPtr dev;    LedCtrlProcPtr controlProc;{    register LedFeedbackPtr feedc;    feedc = (LedFeedbackPtr)xalloc(sizeof(LedFeedbackClassRec));    if (!feedc)	return FALSE;    feedc->CtrlProc = controlProc;    feedc->ctrl = defaultLedControl;    feedc->ctrl.id = 0;    if ( (feedc->next = dev->leds) )	feedc->ctrl.id = dev->leds->ctrl.id + 1;#ifdef XKB    feedc->xkb_sli= NULL;#endif    dev->leds = feedc;    (*controlProc)(dev, &feedc->ctrl);    return TRUE;}BoolInitIntegerFeedbackClassDeviceStruct (dev, controlProc)    DeviceIntPtr dev;    IntegerCtrlProcPtr controlProc;{    register IntegerFeedbackPtr feedc;    feedc = (IntegerFeedbackPtr)xalloc(sizeof(IntegerFeedbackClassRec));    if (!feedc)	return FALSE;    feedc->CtrlProc = controlProc;    feedc->ctrl = defaultIntegerControl;    feedc->ctrl.id = 0;    if ( (feedc->next = dev->intfeed) )	feedc->ctrl.id = dev->intfeed->ctrl.id + 1;    dev->intfeed = feedc;    (*controlProc)(dev, &feedc->ctrl);    return TRUE;}BoolInitPointerDeviceStruct(device, map, numButtons, motionProc, controlProc,			numMotionEvents)    DevicePtr device;    CARD8 *map;    int numButtons;    PtrCtrlProcPtr controlProc;    ValuatorMotionProcPtr motionProc;    int numMotionEvents;{    DeviceIntPtr dev = (DeviceIntPtr)device;    return(InitButtonClassDeviceStruct(dev, numButtons, map) &&	   InitValuatorClassDeviceStruct(dev, 2, motionProc,					 numMotionEvents, 0) &&	   InitPtrFeedbackClassDeviceStruct(dev, controlProc));}BoolInitKeyboardDeviceStruct(device, pKeySyms, pModifiers, bellProc, controlProc)    DevicePtr device;    KeySymsPtr pKeySyms;    CARD8 pModifiers[];    BellProcPtr bellProc;    KbdCtrlProcPtr controlProc;{    DeviceIntPtr dev = (DeviceIntPtr)device;    return(InitKeyClassDeviceStruct(dev, pKeySyms, pModifiers) &&	   InitFocusClassDeviceStruct(dev) &&	   InitKbdFeedbackClassDeviceStruct(dev, bellProc, controlProc));}voidSendMappingNotify(request, firstKeyCode, count, client)    unsigned int request, count;    unsigned int firstKeyCode;    ClientPtr	client;{    int i;    xEvent event;    event.u.u.type = MappingNotify;    event.u.mappingNotify.request = request;    if (request == MappingKeyboard)    {        event.u.mappingNotify.firstKeyCode = firstKeyCode;        event.u.mappingNotify.count = count;    }#ifdef XKB    if (!noXkbExtension &&	((request == MappingKeyboard) || (request == MappingModifier))) {	XkbApplyMappingChange(inputInfo.keyboard,request,firstKeyCode,count,									client);    }#endif   /* 0 is the server client */    for (i=1; i<currentMaxClients; i++)    {	if (clients[i] && clients[i]->clientState == ClientStateRunning)	{#ifdef XKB	    if (!noXkbExtension &&		(request == MappingKeyboard) &&		(clients[i]->xkbClientFlags != 0) &&		(clients[i]->mapNotifyMask&XkbKeySymsMask))		continue;#endif	    event.u.u.sequenceNumber = clients[i]->sequence;	    WriteEventsToClient(clients[i], 1, &event);	}    }}/* * n-squared algorithm. n < 255 and don't want to copy the whole thing and * sort it to do the checking. How often is it called? Just being lazy? */BoolBadDeviceMap(buff, length, low, high, errval)    register BYTE *buff;    int length;    unsigned low, high;    XID *errval;{    register int     i, j;    for (i = 0; i < length; i++)	if (buff[i])		       /* only check non-zero elements */	{	    if ((low > buff[i]) || (high < buff[i]))	    {		*errval = buff[i];		return TRUE;	    }	    for (j = i + 1; j < length; j++)		if (buff[i] == buff[j])		{		    *errval = buff[i];		    return TRUE;		}	}    return FALSE;}BoolAllModifierKeysAreUp(dev, map1, per1, map2, per2)    register DeviceIntPtr dev;    register CARD8 *map1, *map2;    int per1, per2;{    register int i, j, k;    register CARD8 *down = dev->key->down;    for (i = 8; --i >= 0; map2 += per2)    {	for (j = per1; --j >= 0; map1++)	{	    if (*map1 && BitIsOn(down, *map1))	    {		for (k = per2; (--k >= 0) && (*map1 != map2[k]);)		  ;		if (k < 0)		    return FALSE;	    }	}    }    return TRUE;}int ProcSetModifierMapping(client)    ClientPtr client;{    xSetModifierMappingReply rep;    REQUEST(xSetModifierMappingReq);    KeyCode *inputMap;    int inputMapLen;    register int i;    DeviceIntPtr keybd = inputInfo.keyboard;    register KeyClassPtr keyc = keybd->key;        REQUEST_AT_LEAST_SIZE(xSetModifierMappingReq);    if (client->req_len != ((stuff->numKeyPerModifier<<1) +			    (sizeof (xSetModifierMappingReq)>>2)))	return BadLength;    inputMapLen = 8*stuff->numKeyPerModifier;    inputMap = (KeyCode *)&stuff[1];    /*     *	Now enforce the restriction that "all of the non-zero keycodes must be     *	in the range specified by min-keycode and max-keycode in the     *	connection setup (else a Value error)"     */    i = inputMapLen;    while (i--)    {	if (inputMap[i]	    && (inputMap[i] < keyc->curKeySyms.minKeyCode		|| inputMap[i] > keyc->curKeySyms.maxKeyCode))	{	    client->errorValue = inputMap[i];	    return BadValue;	}    }#ifdef XCSECURITY    if (!SecurityCheckDeviceAccess(client, keybd, TRUE))	return BadAccess;#endif #ifdef LBX    LbxFlushModifierMapTag();#endif    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.success = MappingSuccess;    /*     *	Now enforce the restriction that none of the old or new     *	modifier keys may be down while we change the mapping,  and     *	that the DDX layer likes the choice.     */    if (!AllModifierKeysAreUp(keybd, keyc->modifierKeyMap,			      (int)keyc->maxKeysPerModifier,			      inputMap, (int)stuff->numKeyPerModifier)	    ||	!AllModifierKeysAreUp(keybd, inputMap, (int)stuff->numKeyPerModifier,			      keyc->modifierKeyMap,			      (int)keyc->maxKeysPerModifier))    {	rep.success = MappingBusy;    }    else    {	for (i = 0; i < inputMapLen; i++)	{	    if (inputMap[i] && !LegalModifier(inputMap[i], (DevicePtr)keybd))	    {		rep.success = MappingFailed;		break;	    }	}    }    if (rep.success == MappingSuccess)    {	KeyCode *map;	/*	 *	Now build the keyboard's modifier bitmap from the	 *	list of keycodes.	 */	map = (KeyCode *)xalloc(inputMapLen);	if (!map && inputMapLen)	    return BadAlloc;	if (keyc->modifierKeyMap)	    xfree(keyc->modifierKeyMap);	keyc->modifierKeyMap = map;	memmove((char *)map, (char *)inputMap, inputMapLen);	keyc->maxKeysPerModifier = stuff->numKeyPerModifier;	for (i = 0; i < MAP_LENGTH; i++)	    keyc->modifierMap[i] = 0;	for (i = 0; i < inputMapLen; i++)	{	    if (inputMap[i])		keyc->modifierMap[inputMap[i]] |=		    (1<<(((unsigned int)i)/keyc->maxKeysPerModifier));	}    }    if (rep.success == MappingSuccess)        SendMappingNotify(MappingModifier, 0, 0, client);    WriteReplyToClient(client, sizeof(xSetModifierMappingReply), &rep);    return(client->noClientException);}intProcGetModifierMapping(client)    ClientPtr client;{    xGetModifierMappingReply rep;    register KeyClassPtr keyc = inputInfo.keyboard->key;    REQUEST_SIZE_MATCH(xReq);    rep.type = X_Reply;    rep.numKeyPerModifier = keyc->maxKeysPerModifier;    rep.sequenceNumber = client->sequence;    /* length counts 4 byte quantities - there are 8 modifiers 1 byte big */    rep.length = keyc->maxKeysPerModifier << 1;    WriteReplyToClient(client, sizeof(xGetModifierMappingReply), &rep);    /* Use the (modified by DDX) map that SetModifierMapping passed in */    (void)WriteToClient(client, (int)(keyc->maxKeysPerModifier << 3),			(char *)keyc->modifierKeyMap);    return client->noClientException;}intProcChangeKeyboardMapping(client)    ClientPtr client;{    REQUEST(xChangeKeyboardMappingReq);    unsigned len;    KeySymsRec keysyms;    register KeySymsPtr curKeySyms = &inputInfo.keyboard->key->curKeySyms;    REQUEST_AT_LEAST_SIZE(xChangeKeyboardMappingReq);    len = client->req_len - (sizeof(xChangeKeyboardMappingReq) >> 2);      if (len != (stuff->keyCodes * stuff->keySymsPerKeyCode))            return BadLength;    if ((stuff->firstKeyCode < curKeySyms->minKeyCode) ||	(stuff->firstKeyCode > curKeySyms->maxKeyCode))    {	    client->errorValue = stuff->firstKeyCode;	    return BadValue;    }    if ( ((unsigned)(stuff->firstKeyCode + stuff->keyCodes - 1) >	  curKeySyms->maxKeyCode) ||	(stuff->keySymsPerKeyCode == 0))    {	    client->errorValue = stuff->keySymsPerKeyCode;	    return BadValue;    }#ifdef XCSECURITY    if (!SecurityCheckDeviceAccess(client, inputInfo.keyboard,				   TRUE))	return BadAccess;#endif     keysyms.minKeyCode = stuff->firstKeyCode;    keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1;    keysyms.mapWidth = stuff->keySymsPerKeyCode;    keysyms.map = (KeySym *)&stuff[1];    if (!SetKeySymsMap(curKeySyms, &keysyms))	return BadAlloc;#ifdef LBX    LbxFlushKeyboardMapTag();#endif    SendMappingNotify(MappingKeyboard, stuff->firstKeyCode, stuff->keyCodes,									client);    return client->noClientException;}intProcSetPointerMapping(client)    ClientPtr client;{    REQUEST(xSetPointerMappingReq);    BYTE *map;    xSetPointerMappingReply rep;    register unsigned int i;    DeviceIntPtr mouse = inputInfo.pointer;    REQUEST_AT_LEAST_SIZE(xSetPointerMappingReq);    if (client->req_len != (sizeof(xSetPointerMappingReq)+stuff->nElts+3) >> 2)	return BadLength;    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.success = MappingSuccess;    map = (BYTE *)&stuff[1];    if (stuff->nElts != mouse->button->numButtons)    {	client->errorValue = stuff->nElts;

⌨️ 快捷键说明

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