#include #include "lx.h" #include "proto.h" #include "internal.h" typedef struct priv_GetPointerControl PRIV_GetPointerControl; struct priv_GetPointerControl { LX_POINTERCONTROL *pc; } ; static void done_GetPointerControl(LX_OP *op, const unsigned char *rep, void *pv) { PRIV_GetPointerControl *p; unsigned int num; unsigned int den; unsigned int thresh; p = pv; do <"ret"> { if (r_card32(rep+4) != 0) { lx__protoerr(op->conn,"GetPointerControl response length wrong (%u, expecting 0)",r_card32(rep+4)); break <"ret">; } num = r_card16(rep+8); den = r_card16(rep+10); thresh = r_card16(rep+12); if (p->pc) { p->pc->flags = LX_POINTERCONTROL_ACCEL | LX_POINTERCONTROL_THRESH; p->pc->numerator = num; p->pc->denominator = den; p->pc->threshold = thresh; } } while (0); free(p); } LX_OP *lx_GetPointerControl(LX_CONN *xc, LX_POINTERCONTROL *pc) { unsigned char req[4]; PRIV_GetPointerControl *p; if (xc->flags & XCF_FAIL) { lx__bad_call(xc,"lx_GetPointerControl"); return(0); } lx__nochain(xc); p = malloc(sizeof(PRIV_GetPointerControl)); if (! p) { lx__nomem_fail(xc); return(0); } p->pc = pc; req[0] = XP_REQ_GetPointerControl; req[1] = 0; w_card16(&req[2],1); return(lx__expect_reply(xc,&req[0],-1,&done_GetPointerControl,p)); }