#include #include #include "lx.h" #include "proto.h" #include "internal.h" void lx_StoreNamedColor(LX_CONN *xc, LX_XID cmap, unsigned int pixel, const char *name, int len, unsigned int doflags) { unsigned char *req; int reqlen; if ( (xc->flags & XCF_FAIL) || (doflags & ~LX_DO_ALL) ) { lx__bad_call(xc,"lx_StoreNamedColor"); return; } lx__nochain(xc); if (len == -1) len = strlen(name); if ((len < 0) || (len > 65535)) { lx__bad_call(xc,"lx_StoreNamedColor"); return; } reqlen = 4 + ((len + 3) >> 2); req = malloc(reqlen); if (! req) { lx__nomem_fail(xc); return; } req[0] = XP_REQ_StoreNamedColor; #if (LX_DO_R == 1) && (LX_DO_G == 2) && (LX_DO_B == 4) req[1] = doflags; #else req[1] = ((doflags & LX_DO_R) ? 1 : 0) | ((doflags & LX_DO_G) ? 2 : 0) | ((doflags & LX_DO_B) ? 4 : 0); #endif w_card16(req+2,reqlen); w_card32(req+4,cmap); w_card32(req+8,pixel); w_card16(req+12,len); bcopy(name,req+16,len); lx__send_req_free(xc,req,reqlen*4); }