|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.