Annotation of researchv9/X11/src/X.V11R1/lib/X/XGetImage.c, revision 1.1.1.1

1.1       root        1: #include "copyright.h"
                      2: 
                      3: /* $Header: XGetImage.c,v 11.17 87/09/13 20:21:40 newman Exp $ */
                      4: /* Copyright    Massachusetts Institute of Technology    1986  */
                      5: 
                      6: #define NEED_REPLIES
                      7: #include "Xlibint.h"
                      8: #include <errno.h>
                      9: 
                     10: #define ROUNDUP(nbytes, pad) (((((nbytes) - 1) + (pad)) / (pad)) * (pad))
                     11: 
                     12: extern XImage *XCreateImage();
                     13: 
                     14: static int Ones(mask)                /* HACKMEM 169 */
                     15:     unsigned long mask;
                     16: {
                     17:     register int y;
                     18: 
                     19:     y = (mask >> 1) &033333333333;
                     20:     y = mask - y - ((y >>1) & 033333333333);
                     21:     return (((y + (y >> 3)) & 030707070707) % 077);
                     22: }
                     23: 
                     24: XImage *XGetImage (dpy, d, x, y, width, height, plane_mask, format)
                     25:      register Display *dpy;
                     26:      Drawable d;
                     27:      int x, y;
                     28:      unsigned int width, height;
                     29:      long plane_mask;
                     30:      int format;       /* either XYPixmap or ZPixmap */
                     31: {
                     32:        xGetImageReply rep;
                     33:        register xGetImageReq *req;
                     34:        char *data;
                     35:        long nbytes;
                     36:        XImage *image;
                     37:        LockDisplay(dpy);
                     38:        GetReq (GetImage, req);
                     39:        /*
                     40:         * first set up the standard stuff in the request
                     41:         */
                     42:        req->drawable = d;
                     43:        req->x = x;
                     44:        req->y = y;
                     45:        req->width = width;
                     46:        req->height = height;
                     47:        req->planeMask = plane_mask;
                     48:        req->format = format;
                     49:        
                     50:        if (_XReply (dpy, (xReply *) &rep, 0, xFalse) == 0) {
                     51:                UnlockDisplay(dpy);
                     52:                SyncHandle();
                     53:                return (XImage *)NULL;
                     54:        }
                     55:                
                     56:        nbytes = (long)rep.length << 2;
                     57:        data = (char *) Xmalloc((unsigned) nbytes);
                     58:         _XReadPad (dpy, data, nbytes);
                     59:         if (format == XYPixmap)
                     60:           image = XCreateImage(dpy, _XVIDtoVisual(dpy, rep.visual),
                     61:                  Ones (plane_mask & ((1 << rep.depth) - 1)),
                     62:                  format, 0, data, width, height, dpy->bitmap_pad, 0);
                     63:        else /* format == ZPixmap */
                     64:            image = XCreateImage (dpy, _XVIDtoVisual(dpy, rep.visual),
                     65:                 rep.depth, ZPixmap, 0, data, width, height,
                     66:                  _XGetScanlinePad(dpy, rep.depth), 0);
                     67: 
                     68:        UnlockDisplay(dpy);
                     69:        SyncHandle();
                     70:        return (image);
                     71: }
                     72: 
                     73: XGetSubImage(dpy, d, x, y, width, height, plane_mask, format,
                     74:                dest_image, dest_x, dest_y)
                     75:      register Display *dpy;
                     76:      Drawable d;
                     77:      int x, y;
                     78:      unsigned int width, height;
                     79:      unsigned long plane_mask;
                     80:      int format;       /* either XYFormat or ZFormat */
                     81:      XImage *dest_image;
                     82:      int dest_x, dest_y;
                     83: {
                     84:        XImage *temp_image;
                     85:        temp_image = XGetImage(dpy, d, x, y, width, height, 
                     86:                                plane_mask, format);
                     87:        _XSetImage(temp_image, dest_image, dest_x, dest_y);
                     88:        _XDestroyImage(temp_image);
                     89: }      

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.