Annotation of researchv9/X11/src/X.V11R1/demos/plaid/plaid.c, revision 1.1

1.1     ! root        1: /* 
        !             2:  * $Locker: sun $ 
        !             3:  */ 
        !             4: static char    *rcsid = "$Header: plaid.c,v 1.2 87/09/07 16:07:45 sun Locked $";
        !             5: /***********************************************************
        !             6: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
        !             7: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
        !             8: 
        !             9:                         All Rights Reserved
        !            10: 
        !            11: Permission to use, copy, modify, and distribute this software and its 
        !            12: documentation for any purpose and without fee is hereby granted, 
        !            13: provided that the above copyright notice appear in all copies and that
        !            14: both that copyright notice and this permission notice appear in 
        !            15: supporting documentation, and that the names of Digital or MIT not be
        !            16: used in advertising or publicity pertaining to distribution of the
        !            17: software without specific, written prior permission.  
        !            18: 
        !            19: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
        !            20: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
        !            21: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            22: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
        !            23: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
        !            24: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
        !            25: SOFTWARE.
        !            26: 
        !            27: ******************************************************************/
        !            28: #include "X11/Xlib.h"
        !            29: #include "X11/Xatom.h"
        !            30: #include <stdio.h>
        !            31: #include <errno.h>
        !            32: 
        !            33: extern int errno;
        !            34: 
        !            35: int rand();
        !            36: char *malloc();
        !            37: 
        !            38: Window XCreateWindow();
        !            39: 
        !            40: Window myWin, newWin, threeWin;
        !            41: 
        !            42: Display *dpy;
        !            43: 
        !            44: #define NUMRECTS 10
        !            45: XRectangle rects[NUMRECTS];
        !            46: GContext gc;
        !            47: 
        !            48: main(argc, argv)
        !            49: int    argc;
        !            50: char   *argv[];
        !            51: {
        !            52:     int amount, i, j ;
        !            53:     char *geom = NULL;
        !            54:     int winx, winy, winw, winh;
        !            55:     register int xdir, ydir;
        !            56:     register int xoff, yoff;
        !            57:     register int centerX, centerY;
        !            58:     XGCValues xgcv;
        !            59:     XSetWindowAttributes xswa;
        !            60:     XEvent pe;
        !            61:     XExposeEvent *ee;
        !            62:     Window root;
        !            63:     int x, y, w, h;
        !            64:     unsigned int bw, d;
        !            65:     char *display;
        !            66:     int bs = NotUseful;
        !            67:     Visual visual;
        !            68: 
        !            69:     for (i=1; i < argc; i++)
        !            70:     {
        !            71:        if (argv [i] [0] == '=') 
        !            72:                geom = argv[i];
        !            73:        else if (index(argv[i], ':') != NULL)
        !            74:            display = argv[i];
        !            75:        else if (argv[i][0] == 'b')
        !            76:            bs = Always;
        !            77:     }
        !            78: 
        !            79:     if (!(dpy = XOpenDisplay(display)))
        !            80:     {
        !            81:        perror("Cannot open display\n");
        !            82:        exit(-1);
        !            83:     }
        !            84: 
        !            85:     winx = 0;
        !            86:     winy = 0;
        !            87:     winw = 101;
        !            88:     winh = 201;
        !            89: 
        !            90:     if (geom) 
        !            91:     {
        !            92:         if (XParseGeometry(geom, &winx, &winy, &winw, &winh))
        !            93:        {
        !            94:            printf("Geometry specified incorrectly.  Using default\n");
        !            95:        }
        !            96:     }
        !            97: 
        !            98:     xswa.backing_store = bs;
        !            99:     xswa.event_mask = ExposureMask | StructureNotifyMask;
        !           100:     xswa.background_pixel = BlackPixel(dpy, DefaultScreen(dpy));
        !           101:     xswa.border_pixel = WhitePixel(dpy, DefaultScreen(dpy));
        !           102:     visual.visualid = CopyFromParent;
        !           103:     myWin = XCreateWindow(dpy,
        !           104:                RootWindow(dpy, DefaultScreen(dpy)),
        !           105:                winx, winy, winw, winh, 1, 
        !           106:                DefaultDepth(dpy, DefaultScreen(dpy)), InputOutput,
        !           107:                &visual, 
        !           108:                CWEventMask | CWBackingStore | CWBorderPixel | CWBackPixel, 
        !           109:                &xswa);
        !           110: 
        !           111:     XChangeProperty(dpy, myWin, XA_WM_NAME, XA_STRING, 8,
        !           112:                PropModeReplace, "Plaid", 5);
        !           113:     XMapWindow(dpy, myWin);
        !           114: 
        !           115:     xgcv.function = GXinvert;
        !           116:     xgcv.fill_style = FillSolid;
        !           117:     gc = (GContext)XCreateGC(dpy, myWin, GCFunction | GCFillStyle, &xgcv);
        !           118:     j=0;
        !           119:     while(1)
        !           120:     {
        !           121:         XNextEvent(dpy, &pe);  /* this should get first exposure event */    
        !           122:        if (pe.type == Expose)
        !           123:        {
        !           124:            ee = (XExposeEvent *) &pe;
        !           125:            while (ee->count)
        !           126:            {
        !           127:                 XNextEvent(dpy, &pe);      
        !           128:                ee = (XExposeEvent *) &pe;
        !           129:            }
        !           130:        }
        !           131:        else if (pe.type == ConfigureNotify)
        !           132:        {
        !           133:            XConfigureEvent *ce = (XConfigureEvent *)&pe;
        !           134:            winx = ce->x;
        !           135:            winy = ce->y;
        !           136:            winw = ce->width;
        !           137:            winh = ce->height;
        !           138:        }
        !           139:         else 
        !           140:            printf("Unknown event type: %d\n", pe.type);
        !           141: 
        !           142:        printf("PLAID: Dealing with exposures\n");      
        !           143:        XClearArea(dpy, myWin, 0, 0, winw, winh, 0);
        !           144:         printf("PLAID: drawing rects\n");
        !           145: 
        !           146:        centerX = winw / 2;
        !           147:        centerY = winh / 2;
        !           148:        xdir = ydir = -2;
        !           149:        xoff = yoff = 2;
        !           150: 
        !           151:        i = 0;
        !           152:         while (! XPending(dpy))
        !           153:        {
        !           154:            
        !           155:            rects[i].x = centerX - xoff;
        !           156:            rects[i].y = centerY - yoff;
        !           157:            rects[i].width = 2 * xoff;
        !           158:            rects[i].height = 2 * yoff;
        !           159:            xoff += xdir;
        !           160:            yoff += ydir;
        !           161:            if ((xoff <= 0) || (xoff >= centerX))
        !           162:            {
        !           163:                xoff -= 2*xdir;
        !           164:                xdir = -xdir;
        !           165:            }
        !           166:            if ((yoff <= 0) || (yoff >= centerY))
        !           167:            {
        !           168:                yoff -= 2*ydir;
        !           169:                ydir = -ydir;
        !           170:            }
        !           171:            if (i == (NUMRECTS - 1))
        !           172:            {
        !           173:                 XFillRectangles(dpy, myWin, gc, rects, NUMRECTS);
        !           174:                i = 0;
        !           175:            }
        !           176:            else
        !           177:                i++;
        !           178:        }
        !           179:     }
        !           180: }

unix.superglobalmegacorp.com

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