|
|
1.1 ! root 1: /* Copyright 1985 Massachusetts Institute of Technology */ ! 2: ! 3: /* ddxcursor.c various stuff with the mouse & cursor ! 4: * ! 5: * StoreCursor Creates a cursor ! 6: * FreeCursor Frees the storage taken by a cursor ! 7: * LoadCursor Loads a bitmap to use as cursor ! 8: * InitMouse Initialize the mouse ! 9: * SetCursorPosition Forces cursor to a particular position ! 10: * SetMouseCharacteristics Controls speed of cursor relative to mouse ! 11: * ! 12: */ ! 13: ! 14: #include "ddxqvss.h" ! 15: #include <vaxuba/qvioctl.h> ! 16: #include "qvss.h" ! 17: ! 18: extern vsIoAddr *VSAddr; ! 19: extern BITMAP vbm; ! 20: extern int vsdev; ! 21: ! 22: char *Xalloc(); ! 23: /* someday this routine needs to be thought through and redone */ ! 24: ! 25: CURSOR *StoreCursor (func, image, fore, back, mask, xoff, yoff) ! 26: register BITMAP *image; ! 27: BITMAP *mask; ! 28: int func, fore, back, xoff, yoff; ! 29: { ! 30: register CURSOR *cursor; ! 31: register short *im = (short *)image->data; ! 32: register short *cmask = (short *)mask->data; ! 33: register CursPriv *data; ! 34: register int i, wmsk; ! 35: extern char FBMap[]; ! 36: static short bmask[] = { 0x0000, 0x0001, 0x0003, 0x0007, ! 37: 0x000f, 0x001f, 0x003f, 0x007f, ! 38: 0x00ff, 0x01ff, 0x03ff, 0x07ff, ! 39: 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff }; ! 40: ! 41: static short defmask[] = { 0xffff, 0xffff, 0xffff, 0xffff, ! 42: 0xffff, 0xffff, 0xffff, 0xffff, ! 43: 0xffff, 0xffff, 0xffff, 0xffff, ! 44: 0xffff, 0xffff, 0xffff, 0xffff }; ! 45: ! 46: if (mask == NULL) cmask = defmask; ! 47: ! 48: cursor = (CURSOR *) Xalloc (sizeof (CURSOR)); ! 49: cursor->width = min(image->width, CURSOR_WIDTH); ! 50: cursor->height = min(image->height, CURSOR_HEIGHT); ! 51: cursor->xmin = xoff; ! 52: cursor->ymin = yoff; ! 53: cursor->xoff = xoff; ! 54: cursor->yoff = yoff; ! 55: cursor->xmax = vbm.width - (image->width - xoff); ! 56: cursor->ymax = vbm.height - (image->height - yoff); ! 57: cursor->refcnt = 1; ! 58: data = (CursPriv *) Xalloc (sizeof (CursPriv)); ! 59: cursor->data = (caddr_t) data; ! 60: if (fore & 1) ! 61: func += 0x20; ! 62: if (back & 1) ! 63: func += 0x10; ! 64: func = FBMap[func]; ! 65: ! 66: wmsk = bmask[cursor->width]; ! 67: ! 68: if (fore == 0 || func == GXxor || func == GXequiv) { ! 69: for ( i = 0; i < cursor->height; i++) ! 70: data->cbits[i] = (*im++ & *cmask++) & wmsk; ! 71: } ! 72: else { ! 73: for ( i = 0; i < cursor->height; i++) ! 74: data->cbits[i] = (~*im++ & *cmask++) & wmsk; ! 75: } ! 76: ! 77: for (i = cursor->height; i < 16; i++); ! 78: data->cbits[i] = 0; ! 79: return (cursor); ! 80: } ! 81: ! 82: FreeCursor (cursor) ! 83: register CURSOR *cursor; ! 84: { ! 85: free ((caddr_t) CDATA(cursor)); ! 86: free ((caddr_t) cursor); ! 87: } ! 88: ! 89: LoadCursor (cursor) ! 90: register CURSOR *cursor; ! 91: { ! 92: register short *cbits = VSAddr->cursorbits; ! 93: register short *nbits; ! 94: register int i; ! 95: int nrows = cursor->height; ! 96: int ncols = cursor->width; ! 97: ! 98: nbits = (short *) CDATA(cursor)->cbits; ! 99: if (ncols > 16) ncols = 16; ! 100: if (nrows > 16) nrows = 16; ! 101: ! 102: for(i = 0; i < nrows; i++) ! 103: *cbits++ = *nbits++; ! 104: ! 105: for(i = nrows; i < 16; i++) ! 106: *cbits++ = 0; ! 107: return(0); ! 108: } ! 109: ! 110: InitMouse () ! 111: { ! 112: } ! 113: ! 114: SetCursorPosition(pos) ! 115: register vsCursor *pos; ! 116: { ! 117: return(ioctl(vsdev, QIOCSMSTATE,pos)); ! 118: } ! 119: ! 120: SetMouseCharacteristics (threshold, accelaration) ! 121: int threshold, accelaration; ! 122: { ! 123: VSAddr->mscale = accelaration; ! 124: VSAddr->mthreshold = threshold; ! 125: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.