Annotation of 43BSD/contrib/X/hacks/bee/main.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char *sccsid = "%G% hack (aps) %W%";
        !             3: #endif
        !             4: 
        !             5: #include  "def.h"
        !             6: #include  "flying_bee.h"
        !             7: 
        !             8: /*
        !             9:  *  hack  --  playing with windows.
        !            10:  *     This program puts up two windows, each with different
        !            11:  *     cursors.
        !            12:  *     This program was actually the beginnings of a window based
        !            13:  *     talk program.
        !            14:  *             aps.
        !            15:  */
        !            16: 
        !            17: #define INCREMENT 1
        !            18: #define DECREMENT 0
        !            19: 
        !            20: #define DEBUG 0
        !            21: 
        !            22: int    debug = DEBUG;          /* 10 or greater is painfully detailed */
        !            23: int    verbose = NO;           /* print some stuff */
        !            24: int    myuid;                  /* my uid */
        !            25: char   me[UTMPNAMSIZ];         /* my login name */
        !            26: char   mytty[NAMLEN];          /* my dev node name */
        !            27: 
        !            28: 
        !            29: /*
        !            30:  * X and window stuff.
        !            31:  */
        !            32: #define        XLOC1   40              /* x cordinate for window 1 */
        !            33: #define        YLOC1   10              /* y cordinate for window 1 */
        !            34: #define        XLOC2   500             /* x cordinate for window 2 */
        !            35: #define        YLOC2   10              /* y cordinate for window 2 */
        !            36: #define        WIDTH   300             /* width of window */
        !            37: #define        HEIGHT  400             /* height of window */
        !            38: #define BDRWDTH        6               /* window border width */
        !            39: #define        BORDER  WhitePixmap     /* border pixmap */
        !            40: #define        BCKGRND BlackPixmap     /* background pixmap */
        !            41: int    xloc;
        !            42: int    yloc;
        !            43: Display        *mydisp, *herdisp;      /* descriptors for the displays */
        !            44: char   mydispname[NAMLEN];     /* descriptors for the displays */
        !            45: char   herdispname[NAMLEN];    /* descriptors for the displays */
        !            46: Window  mywin, herwin;         /* descriptors for the windows */
        !            47: Window mywinparent;            /* parent window */
        !            48: Window herwinparent;           /* parent window */
        !            49: 
        !            50: 
        !            51: /*
        !            52:  * cursor bitmaps for window 1
        !            53:  */
        !            54: 
        !            55: #define aps_width 24
        !            56: #define aps_height 24
        !            57: static short aps_bits[] = {
        !            58:    0xffff, 0xffff, 0xffff, 0xffff,
        !            59:    0xffff, 0xffe7, 0xffff, 0xffdb,
        !            60:    0xffff, 0xffbd, 0xff87, 0xffbd,
        !            61:    0xff33, 0xffbd, 0xff79, 0xffdb,
        !            62:    0xff7c, 0xffe7, 0x8f7e, 0xfff7,
        !            63:    0xb33e, 0xff31, 0xb93c, 0xffce,
        !            64:    0xb91d, 0xffd2, 0xbc49, 0xffdc,
        !            65:    0x3ce3, 0xffdd, 0x98ff, 0xffe3,
        !            66:    0xe6ff, 0xffff, 0xfe7f, 0xffff,
        !            67:    0xff7f, 0xffff, 0xff3f, 0xffff,
        !            68:    0xffbf, 0xffff, 0xffff, 0xffff,
        !            69:    0xffff, 0xffff, 0xffff, 0xffff};
        !            70: 
        !            71: /* Inverse bitmap */
        !            72: #define Iaps_width 24
        !            73: #define Iaps_height 24
        !            74: static short Iaps_bits[] = {
        !            75:    0x0000, 0x0000, 0x0000, 0x0000,
        !            76:    0x0000, 0x0018, 0x0000, 0x0024,
        !            77:    0x0000, 0x0042, 0x0078, 0x0042,
        !            78:    0x00cc, 0x0042, 0x0086, 0x0024,
        !            79:    0x0083, 0x0018, 0x7081, 0x0008,
        !            80:    0x4cc1, 0x00ce, 0x46c3, 0x0031,
        !            81:    0x46e2, 0x002d, 0x43b6, 0x0023,
        !            82:    0xc31c, 0x0022, 0x6700, 0x001c,
        !            83:    0x1900, 0x0000, 0x0180, 0x0000,
        !            84:    0x0080, 0x0000, 0x00c0, 0x0000,
        !            85:    0x0040, 0x0000, 0x0000, 0x0000,
        !            86:    0x0000, 0x0000, 0x0000, 0x0000};
        !            87: 
        !            88: 
        !            89: /*
        !            90:  * array to store bees in flight
        !            91:  */
        !            92: #define CUR_COUNT      4       /* number of bee frames */
        !            93: Cursor Bee[CUR_COUNT];         /* cursor table */
        !            94: 
        !            95: 
        !            96: /*
        !            97:  * main() -- What can one say about main...
        !            98:  *   it is where it's at!
        !            99:  *
        !           100:  *  xhack
        !           101:  */
        !           102: main(argc, argv)
        !           103: int argc;
        !           104: char *argv[];
        !           105: {
        !           106:        Cursor curcur, hackcur;
        !           107:        XEvent herxevent, myxevent;
        !           108:        struct _XMouseOrCrossingEvent *mmevp;
        !           109:        char *rindex(), *p;
        !           110:        int curp;
        !           111:        int inc_or_dec;
        !           112: 
        !           113:        /*
        !           114:         * get what few options we allow.  (currently none)
        !           115:         */
        !           116:        while (--argc > 0 && (++argv)[0][0]=='-')
        !           117:                {
        !           118:                char *cp = argv[0] + 1;
        !           119:                if (debug >= 10)
        !           120:                        printf("argv=%s\n", *argv);
        !           121:                while (*cp)
        !           122:                        switch (*cp++)
        !           123:                                {
        !           124:                                case 'v':
        !           125:                                        /* verbose flag */  /* nothing yet */
        !           126:                                        verbose = YES;
        !           127:                                        continue;
        !           128:                
        !           129:                                default:
        !           130:                                        fprintf(stderr, "Unknown flag %s\n",
        !           131:                                           *argv);
        !           132:                                        fprintf(stderr,
        !           133:                                           "hack [-v] \n");
        !           134:                                        exit(-1);
        !           135:                                }
        !           136:                }
        !           137: 
        !           138:        /*****
        !           139:         * Create the windows.
        !           140:         *****/
        !           141: 
        !           142:        /*
        !           143:         * Open the display.
        !           144:         */
        !           145:        if (debug >= 15)
        !           146:                printf("About to XOpenDisplay(NULL) my display.\n");
        !           147:        mydisp = XOpenDisplay(NULL);
        !           148:        if (debug >= 15)
        !           149:                printf("XopenDisplay(NULL) returned %x.\n", mydisp);
        !           150:        if (mydisp == NULL)
        !           151:                {
        !           152:                fprintf(stderr, "xhack: can't open my display.\n");
        !           153:                exit(-1);
        !           154:                }
        !           155: 
        !           156:        /* creat my window*/
        !           157:        xloc = XLOC1;
        !           158:        yloc = YLOC1;
        !           159:        if (debug >= 15)
        !           160:                printf("About to XCreateWindow().\n");
        !           161:        mywin = XCreateWindow(mydisp->root, xloc, yloc, WIDTH, HEIGHT,
        !           162:                    BDRWDTH, BORDER, BCKGRND);
        !           163:        if (debug >= 15)
        !           164:                printf("XCreatWindow() returned %x.\n", (int) mywin);
        !           165:        if (mywin == NULL)
        !           166:                {
        !           167:                fprintf(stderr, "hack: can't creat window.\n");
        !           168:                exit(-1);
        !           169:                }
        !           170: 
        !           171:        XStoreName(mywin, "xhack_window-1");    /* icon name */
        !           172: 
        !           173:        /* creat (describe) a cursor */
        !           174:        curcur = XCreateCursor(aps_width, aps_height, aps_bits,
        !           175:                        Iaps_bits, 9, 10, BlackPixel, WhitePixel, GXxor);
        !           176:        if (curcur == 0)
        !           177:                {
        !           178:                fprintf(stderr, "xhack: can't creat cursor.\n");
        !           179:                exit(-1);
        !           180:                }
        !           181: 
        !           182:        /* define (set) the cursor */
        !           183:        XDefineCursor(mywin, curcur);
        !           184:        if (debug >= 15)
        !           185:                printf("About to XMapWindow().\n");
        !           186: 
        !           187:        XMapWindow(mywin);
        !           188:        /*
        !           189:         * Normally, a window is really made on the screen automatically
        !           190:         * the next time input is read.  Since we don't do any input,
        !           191:         * we have to do an explicit flush.
        !           192:         */
        !           193:        XFlush();
        !           194: 
        !           195: 
        !           196:        /* creat the second window */
        !           197:        xloc = XLOC2;
        !           198:        yloc = YLOC2;
        !           199: 
        !           200:        if (debug >= 15)
        !           201:                printf("About to XCreateWindow().\n");
        !           202:        herwin = XCreateWindow(mydisp->root, xloc, yloc, WIDTH, HEIGHT,
        !           203:                    BDRWDTH, BORDER, BCKGRND);
        !           204:        if (debug >= 15)
        !           205:                printf("XCreatWindow() returned %x.\n", (int) herwin);
        !           206:        if (herwin == NULL)
        !           207:                {
        !           208:                fprintf(stderr, "hack: can't creat window.\n");
        !           209:                exit(-1);
        !           210:                }
        !           211: 
        !           212:        XStoreName(herwin, "bee_window-2");     /* icon name */
        !           213: 
        !           214:        /* creat (describe) some cursors */
        !           215: 
        !           216:        Bee[0] = XCreateCursor(bee_wing1_width, bee_wing1_height,
        !           217:                        bee_wing1_bits, Ibee_wing1_bits, 46, 16, BlackPixel,
        !           218:                        WhitePixel, GXxor);
        !           219:        Bee[1] = XCreateCursor(bee_wing2_width, bee_wing2_height,
        !           220:                        bee_wing2_bits, Ibee_wing2_bits, 46, 16, BlackPixel,
        !           221:                        WhitePixel, GXxor);
        !           222:        Bee[2] = XCreateCursor(bee_wing3_width, bee_wing3_height,
        !           223:                        bee_wing3_bits, Ibee_wing3_bits, 46, 16, BlackPixel,
        !           224:                        WhitePixel, GXxor);
        !           225:        Bee[3] = XCreateCursor(bee_wing4_width, bee_wing4_height,
        !           226:                        bee_wing4_bits, Ibee_wing4_bits, 46, 16, BlackPixel,
        !           227:                        WhitePixel, GXxor);
        !           228:        if ((Bee[0] == 0) || (Bee[1] == 0) ||
        !           229:               (Bee[2] == 0) || (Bee[3] == 0))
        !           230:                {
        !           231:                fprintf(stderr, "hack: can't creat bee cursors.\n");
        !           232:                exit(-1);
        !           233:                }
        !           234: 
        !           235:        /* define (set) the initial cursor */
        !           236:        XDefineCursor(herwin, Bee[0]);  /* initial cursor define */
        !           237:        if (debug >= 15)
        !           238:                printf("About to XMapWindow().\n");
        !           239: 
        !           240:        XMapWindow(herwin);
        !           241:        XFlush();       /* necessary because we don't get input */
        !           242: 
        !           243:        inc_or_dec = INCREMENT;   /* set direction to traverse cursor table */
        !           244:        curp = 0;
        !           245:        XSelectInput(herwin, MouseMoved|LeaveWindow|EnterWindow);
        !           246:        for (EVER)
        !           247:                {
        !           248:                XNextEvent(&herxevent);
        !           249: 
        !           250:                (XEvent *)mmevp =  &herxevent;
        !           251:                switch (mmevp->type)
        !           252:                        {
        !           253:                        case EnterWindow:
        !           254:                                if (debug >=10)
        !           255:                                        printf("Mouse entered.\n");
        !           256:                                continue;
        !           257: 
        !           258:                        case LeaveWindow:
        !           259:                                if (debug >=10)
        !           260:                                        printf("Mouse left.\n");
        !           261:                                continue;
        !           262:                        
        !           263:                        case MouseMoved:
        !           264:                                if (debug >=15)
        !           265:                                        printf("rel %d, %d.\n",
        !           266:                                           mmevp->x, mmevp->y);
        !           267:                                XDefineCursor(herwin, Bee[curp]);
        !           268: 
        !           269:                                /*
        !           270:                                 * This little code allows smoother flight
        !           271:                                 * of the wings by moving forward then
        !           272:                                 * backwards through the different bitmaps
        !           273:                                 * in the table instead of recycling to 0.
        !           274:                                 * There are probably more straight forward
        !           275:                                 * ways to do this.
        !           276:                                 */
        !           277:                                if (inc_or_dec == INCREMENT)
        !           278:                                        curp++;
        !           279:                                else
        !           280:                                        curp--;
        !           281:                                if ((curp >= CUR_COUNT) || (curp <= 0))
        !           282:                                        /* switch directions */
        !           283:                                        if (inc_or_dec == INCREMENT)
        !           284:                                                {
        !           285:                                                inc_or_dec = DECREMENT;
        !           286:                                                curp--;
        !           287:                                                }
        !           288:                                        else
        !           289:                                                {
        !           290:                                                inc_or_dec = INCREMENT;
        !           291:                                                curp++;
        !           292:                                                }
        !           293:                                continue;
        !           294: 
        !           295:                        default:
        !           296:                                printf("unknown event.\n");
        !           297:                                continue;
        !           298: 
        !           299:                        }
        !           300:                }
        !           301: 
        !           302:        /* NOTREACHED */
        !           303: }
        !           304: 

unix.superglobalmegacorp.com

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