|
|
1.1 ! root 1: #include "jerq.h" ! 2: ! 3: #define UP 0 ! 4: #define DOWN 1 ! 5: ! 6: static short boxcurs_bits[] = { ! 7: 0x43FF, 0xE001, 0x7001, 0x3801, 0x1D01, 0x0F01, 0x8701, 0x8F01, ! 8: 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0x8001, 0xFFFF, ! 9: }; ! 10: static Cursor boxcurs; ! 11: static int firstime = 1; ! 12: ! 13: Rectangle ! 14: getrect (n) ! 15: int n; ! 16: { ! 17: return getrectb(8>>n, 1); ! 18: } ! 19: ! 20: Rectangle ! 21: getrectb (n, block) ! 22: int n, block; ! 23: { ! 24: Rectangle r, canon(); ! 25: Point p1, p2; ! 26: Cursor *prev; ! 27: ! 28: if (firstime) { ! 29: boxcurs = ToCursor(boxcurs_bits, boxcurs_bits, 8, 8); ! 30: firstime = 0; ! 31: } ! 32: prev = cursswitch(&boxcurs); ! 33: Jscreengrab(); ! 34: if(block){ ! 35: buttons(UP); ! 36: buttons(DOWN); ! 37: } ! 38: if(!(mouse.buttons&n)){ ! 39: r.origin.x=r.origin.y=r.corner.x=r.corner.y=0; ! 40: buttons(UP); ! 41: goto Return; ! 42: } ! 43: p1 = add(mouse.xy, Joffset); ! 44: p2 = p1; ! 45: r = canon(p1, p2); ! 46: outline(r); ! 47: for(; mouse.buttons&n; nap(2)){ ! 48: outline(r); ! 49: p2 = add(mouse.xy, Joffset); ! 50: r = canon(p1, p2); ! 51: outline(r); ! 52: } ! 53: outline(r); /* undraw for the last time */ ! 54: Return: ! 55: Jscreenrelease(); ! 56: cursswitch(prev); ! 57: return r; ! 58: } ! 59: ! 60: buttons (updown) ! 61: { ! 62: while((button123()!=0) != updown) ! 63: nap(2); ! 64: } ! 65: ! 66: Rectangle ! 67: canon (p1, p2) ! 68: Point p1, p2; ! 69: { ! 70: Rectangle r; ! 71: r.origin.x = min(p1.x, p2.x); ! 72: r.origin.y = min(p1.y, p2.y); ! 73: r.corner.x = max(p1.x, p2.x); ! 74: r.corner.y = max(p1.y, p2.y); ! 75: return(r); ! 76: } ! 77: ! 78: static outline(r) ! 79: Rectangle r; ! 80: { ! 81: segment(&Jfscreen, r.org, Pt(r.cor.x, r.org.y), F_XOR); ! 82: segment(&Jfscreen, Pt(r.cor.x, r.org.y), r.cor, F_XOR); ! 83: segment(&Jfscreen, r.cor, Pt(r.org.x, r.cor.y), F_XOR); ! 84: segment(&Jfscreen, Pt(r.org.x, r.cor.y), r.org, F_XOR); ! 85: } ! 86: ! 87: Cursor * ! 88: cursswitch (cp) ! 89: Cursor *cp; ! 90: { ! 91: Cursor *rc; ! 92: #ifdef SUNTOOLS ! 93: extern struct pixrectops mem_ops; ! 94: static struct mpr_data d = ! 95: {mpr_linebytes(16,1), (short *)0, {0, 0}, 0, 0}; ! 96: static struct pixrect curs = {&mem_ops, 16, 16, 1, (caddr_t)&d}; ! 97: static struct cursor cursor = {7, 7, F_XOR, &curs}; ! 98: #endif SUNTOOLS ! 99: ! 100: if (cp == (Cursor *)0) ! 101: cp = &normalcursor; ! 102: #ifdef X11 ! 103: XDefineCursor(dpy, display.dr, *cp); ! 104: #endif X11 ! 105: #ifdef SUNTOOLS ! 106: cursor.cur_xhot = cp->hotx; ! 107: cursor.cur_yhot = cp->hoty; ! 108: d.md_image = cp->bits; ! 109: win_setcursor(displayfd, &cursor); ! 110: #endif SUNTOOLS ! 111: rc = P->cursor; ! 112: P->cursor = cp; ! 113: return rc; ! 114: } ! 115: ! 116: cursset (p) ! 117: Point p; ! 118: { ! 119: #ifdef X11 ! 120: XWarpPointer(dpy, display.dr, display.dr, mouse.xy.x, mouse.xy.y, ! 121: display.rect.corner.x, display.rect.corner.y, p.x, p.y); ! 122: #endif X11 ! 123: #ifdef SUNTOOLS ! 124: win_setmouseposition(displayfd, p.x, p.y); ! 125: #endif SUNTOOLS ! 126: mouse.xy.x = p.x; ! 127: mouse.xy.y = p.y; ! 128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.