1: #include <X/mit-copyright.h> 2: 3: /* $Header: XCreateCursor.c,v 10.5 86/02/01 15:31:11 tony Rel $ */ 4: /* Copyright Massachusetts Institute of Technology 1985 */ 5: 6: #include "XlibInternal.h" 7: Cursor XCreateCursor (width, height, cursor, mask, xOffset, yOffset, 8: foreground, background, func) 9: short *cursor, *mask; 10: int width, height; 11: int xOffset, yOffset; 12: int func; 13: int foreground, background; 14: { 15: register Display *dpy; 16: register XReq *req; 17: XRep rep; 18: Bitmap cbitmap, mbitmap = 0; 19: int nbytes = BitmapSize (width, height); 20: Status status; 21: 22: GetReq(X_StoreBitmap, 0); 23: req->param.s[0] = height; 24: req->param.s[1] = width; 25: Data (dpy, (char *)cursor, nbytes); 26: 27: if (mask) { 28: GetReq(X_StoreBitmap, 0); 29: req->param.s[0] = height; 30: req->param.s[1] = width; 31: Data (dpy, (char *)mask, nbytes); 32: dpy->request--; /* to synchronize properly with XError packets */ 33: } 34: 35: cbitmap = _XReply (dpy, &rep) ? rep.param.l[0] : 0; 36: 37: if (mask) { 38: dpy->request++; 39: mbitmap = _XReply (dpy, &rep) ? rep.param.l[0] : 0; 40: } 41: 42: if (!cbitmap || (mask && !mbitmap)) { 43: /* an error occurred. Clean up and return. */ 44: if (cbitmap) 45: XFreeBitmap (cbitmap); 46: if (mbitmap) 47: XFreeBitmap (mbitmap); 48: return (0); 49: } 50: 51: GetReq(X_StoreCursor, 0); 52: req->func = func; 53: req->param.l[0] = cbitmap; 54: req->param.s[2] = foreground; 55: req->param.s[3] = background; 56: req->param.l[2] = mbitmap; 57: req->param.s[6] = xOffset; 58: req->param.s[7] = yOffset; 59: status = _XReply (dpy, &rep); 60: XFreeBitmap (cbitmap); 61: if (mbitmap) 62: XFreeBitmap (mbitmap); 63: return (status ? rep.param.l[0] : 0); 64: }