Annotation of 43BSD/contrib/X/libqvss/ddxcursor.c, revision 1.1

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: }

unix.superglobalmegacorp.com

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