|
|
1.1 ! root 1: #include "univ.h" ! 2: ! 3: waitMOUSE() { wait(MOUSE); } ! 4: ! 5: char *itoa(n) ! 6: register n; ! 7: { ! 8: register char *pic = " [-][0-9]* "; ! 9: char cip[10]; ! 10: register char *p = pic, *c; ! 11: ! 12: *p++ = ' '; ! 13: if( n < 0 ) *p++ = '-', n = -n; ! 14: *(c = &cip[0]) = '\0'; ! 15: do { ! 16: *++c = "0123456789"[n%10]; ! 17: } while( n = n/10 ); ! 18: while( *c ) *p++ = *c--; ! 19: *p++ = ' '; ! 20: *p = '\0'; ! 21: return pic; ! 22: } ! 23: ! 24: dictorder(a,b) ! 25: register char *a, *b; ! 26: { ! 27: register disc; ! 28: ! 29: for( ;; ){ ! 30: if( !*a ) return 1; ! 31: if( !*b ) return 0; ! 32: if( disc = (*a++|' ')-(*b++|' ') ) return disc<0; ! 33: } ! 34: } ! 35: #ifdef ASSERT ! 36: long assertf(l) ! 37: long l; ! 38: { ! 39: if( l ) return l; ! 40: rectf( &display, display.rect, F_XOR ); ! 41: for( ;; ) pause(); ! 42: } ! 43: #endif ! 44: ! 45: outline( b, r ) ! 46: register Bitmap *b; ! 47: Rectangle r; ! 48: { ! 49: segment( b, r.origin, Pt(r.origin.x,--r.corner.y), F_XOR ); ! 50: segment( b, Pt(--r.corner.x,r.origin.y), r.origin, F_XOR ); ! 51: segment( b, Pt(r.origin.x,r.corner.y), r.corner, F_XOR ); ! 52: segment( b, r.corner, Pt(r.corner.x,r.origin.y), F_XOR ); ! 53: } ! 54: ! 55: Rectangle boundrect( q, r ) ! 56: Rectangle q, r; ! 57: { ! 58: q.origin.x = min( q.origin.x, r.origin.x ); ! 59: q.origin.y = min( q.origin.y, r.origin.y ); ! 60: q.corner.x = max( q.corner.x, r.corner.x ); ! 61: q.corner.y = max( q.corner.y, r.corner.y ); ! 62: return q; ! 63: } ! 64: ! 65: Rectangle scrollbar( r, from, to, lo, hi ) ! 66: Rectangle r; ! 67: { ! 68: register short rh = r.corner.y - r.origin.y, h = hi-lo; ! 69: ! 70: r.corner.y -= muldiv(hi-to,rh,h); ! 71: r.origin.y += muldiv(from-lo,rh,h); ! 72: return r; ! 73: } ! 74: ! 75: rectinrect( r, s ) ! 76: Rectangle r, s; ! 77: { ! 78: Rectangle clipped; ! 79: ! 80: clipped = r; ! 81: return rectclip(&clipped,s) && eqrect(r, clipped); ! 82: } ! 83: ! 84: char *FreeSome = "out of terminal memory"; ! 85: ! 86: char *Alloc(n) ! 87: { ! 88: char *a; ! 89: ! 90: if( !(a = alloc(n)) ){ ! 91: cursswitch( &NoMemory ); ! 92: InvertKBDrect( FreeSome, "" ); ! 93: sleep(30); ! 94: exit(1); ! 95: } ! 96: return a; ! 97: } ! 98: ! 99: char *GCAlloc(n,p) ! 100: register char **p; ! 101: { ! 102: register unsigned long nbytes = n; ! 103: if( !(gcalloc(nbytes, p)) ){ ! 104: cursswitch( &NoGCMemory ); ! 105: InvertKBDrect( FreeSome, "" ); ! 106: sleep(30); ! 107: exit(1); ! 108: } ! 109: while( nbytes>0 ) (*p)[--nbytes] = 0; ! 110: return *p; ! 111: } ! 112: ! 113: GCString( p, s ) ! 114: char **p, *s; ! 115: { ! 116: *p = GCAlloc( strlen(s)+1, p ); ! 117: strcpy( *p, s ); ! 118: } ! 119: ! 120: Rectangle moverect(source,bound) ! 121: Rectangle source, bound; ! 122: { ! 123: Rectangle target; ! 124: Point base, track; ! 125: int b = butts; ! 126: ! 127: base = mouse.xy; ! 128: bound.origin.x += base.x - source.origin.x; ! 129: bound.origin.y += base.y - source.origin.y; ! 130: bound.corner.x += base.x - source.corner.x; ! 131: bound.corner.y += base.y - source.corner.y; ! 132: do { ! 133: track = mouse.xy; ! 134: if( track.x < bound.origin.x ) track.x = bound.origin.x; ! 135: if( track.y < bound.origin.y ) track.y = bound.origin.y; ! 136: if( track.x > bound.corner.x ) track.x = bound.corner.x; ! 137: if( track.y > bound.corner.y ) track.y = bound.corner.y; ! 138: outline( &display, target = raddp( source, sub(track,base) ) ); ! 139: jnap(2); ! 140: outline( &display, target ); ! 141: } while( butts == b ); ! 142: return butts ? source : target; ! 143: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.