Annotation of 43BSD/contrib/X/libvs100/cursor.c, revision 1.1.1.1

1.1       root        1: /* $Header: cursor.c,v 10.3 86/02/01 15:46:34 tony Rel $ */
                      2: /* cursor.c    various stuff with the mouse & cursor
                      3:  *
                      4:  *     StoreCursor             Creates a cursor
                      5:  *     FreeCursor              Frees the storage taken by a cursor
                      6:  *     LoadCursor              Loads a bitmap to use as cursor
                      7:  *     InitMouse               Initialize the mouse
                      8:  *     SetCursorPosition       Forces cursor to a particular position
                      9:  *     SetMouseCharacteristics Controls speed of cursor relative to mouse
                     10:  *
                     11:  */
                     12: 
                     13: /****************************************************************************
                     14:  *                                                                         *
                     15:  *  Copyright (c) 1983, 1984 by                                                    *
                     16:  *  DIGITAL EQUIPMENT CORPORATION, Maynard, Massachusetts.                 *
                     17:  *  All rights reserved.                                                   *
                     18:  *                                                                         *
                     19:  *  This software is furnished on an as-is basis and may be used and copied *
                     20:  *  only with inclusion of the above copyright notice. This software or any *
                     21:  *  other copies thereof may be provided or otherwise made available to     *
                     22:  *  others only for non-commercial purposes.  No title to or ownership of   *
                     23:  *  the software is hereby transferred.                                            *
                     24:  *                                                                         *
                     25:  *  The information in this software is  subject to change without notice   *
                     26:  *  and  should  not  be  construed as  a commitment by DIGITAL EQUIPMENT   *
                     27:  *  CORPORATION.                                                           *
                     28:  *                                                                         *
                     29:  *  DIGITAL assumes no responsibility for the use  or  reliability of its   *
                     30:  *  software on equipment which is not supplied by DIGITAL.                *
                     31:  *                                                                         *
                     32:  *                                                                         *
                     33:  ****************************************************************************/
                     34: 
                     35: #include "vs100.h"
                     36: #include "vsioctl.h"
                     37: 
                     38: extern vsIoAddr *VSAddr;
                     39: extern BitMap screen;
                     40: extern char FBMap[];
                     41: 
                     42: char *Xalloc(), *AllocateSpace();
                     43: 
                     44: CURSOR *StoreCursor (func, image, fore, back, mask, xoff, yoff)
                     45:        register BITMAP *image, *mask;
                     46:        int func, fore, back, xoff, yoff;
                     47: {
                     48:        register CURSOR *cursor;
                     49:        register CursPriv *data;
                     50: 
                     51:        cursor = (CURSOR *) Xalloc (sizeof (CURSOR));
                     52:        cursor->width = image->width;
                     53:        cursor->height = image->height;
                     54:        cursor->xoff = xoff;
                     55:        cursor->yoff = yoff;
                     56:        cursor->xmin = xoff;
                     57:        cursor->ymin = yoff;
                     58:        cursor->xmax = screen.bm_width - (image->width - xoff);
                     59:        cursor->ymax = screen.bm_height - (image->height - yoff);
                     60:        cursor->refcnt = 1;
                     61:        data = (CursPriv *) Xalloc (sizeof (CursPriv));
                     62:        data->image = image;
                     63:        image->refcnt++;
                     64:        if (data->mask = mask)
                     65:            mask->refcnt++;
                     66:        if (fore & 1)
                     67:            func += 0x20;
                     68:        if (back & 1)
                     69:            func += 0x10;
                     70:        data->map = FBMap[func];
                     71:        cursor->data = (caddr_t) data;
                     72:        return (cursor);
                     73: }
                     74: 
                     75: FreeCursor (cursor)
                     76:        register CURSOR *cursor;
                     77: {
                     78:        register CursPriv *data;
                     79:        register BITMAP *bm;
                     80: 
                     81:        data = CDATA(cursor);
                     82:        if ((bm = data->image) && --bm->refcnt == 0)
                     83:            FreeBitmap (bm);
                     84:        if ((bm = data->mask) && --bm->refcnt == 0)
                     85:            FreeBitmap (bm);
                     86:        free ((caddr_t) cursor);
                     87: }
                     88: 
                     89: LoadCursor (cursor)
                     90:        register CURSOR *cursor;
                     91: {
                     92:        register CursPriv *data;
                     93:        register BITMAP *bm;
                     94:        register LoadCursorPacket *lcp;
                     95: 
                     96:        lcp = (LoadCursorPacket *) AllocateSpace (sizeof (LoadCursorPacket));
                     97:        if (lcp == NULL) return;
                     98: #define h ((PacketHeader *) lcp->lcp_head)
                     99: #define src ((SubBitmap *) lcp->lcp_source.image)
                    100: #define msk ((SubBitmap *) lcp->lcp_sourceMask)
                    101: #define pat ((Halftone *) lcp->lcp_source.pattern)
                    102: #define        size ((Extent *) lcp->lcp_maskSize)
                    103: 
                    104:        data = CDATA(cursor);
                    105:        h->ph_cursorMod.m_source = 1;
                    106:        h->ph_cursorMod.m_map = MAPTYPE(data->map);
                    107:        h->ph_opcode = LOAD_CURSOR;
                    108:        *(long *) h->ph_next = NULL;
                    109: 
                    110:        bm = data->image;
                    111:        *(caddr_t *) src->sb_address = BDATA(bm)->vsPtr;
                    112:        src->sb_height = bm->height;
                    113:        src->sb_width = bm->width;
                    114:        src->sb_bitsPerPixel = 1;
                    115:        src->sb_x = src->sb_y = 0;
                    116:        size->e_height = bm->height;
                    117:        size->e_width = bm->width;
                    118: 
                    119:        if (bm = data->mask) {
                    120:            h->ph_cursorMod.m_mask = 1;
                    121:            *(caddr_t *) msk->sb_address = BDATA(bm)->vsPtr;
                    122:            msk->sb_height = bm->height;
                    123:            msk->sb_width = bm->width;
                    124:            msk->sb_bitsPerPixel = 1;
                    125:            msk->sb_x = msk->sb_y = 0;
                    126:        } else
                    127:            h->ph_cursorMod.m_mask = 0;
                    128:        *(short *) lcp->lcp_map.literal = MAPLIT(data->map);
                    129: 
                    130:        lcp->lcp_blink = 0;
                    131:        lcp->lcp_tip_x = cursor->xoff;
                    132:        lcp->lcp_tip_y = cursor->yoff;
                    133:        lcp->lcp_center_x = cursor->xoff;
                    134:        lcp->lcp_center_y = cursor->yoff;
                    135: 
                    136:        WritePacket ((caddr_t) lcp);
                    137: #undef h
                    138: #undef src
                    139: #undef msk
                    140: #undef pat
                    141: #undef size
                    142: }
                    143: 
                    144: InitMouse ()
                    145: {
                    146:        register AttachCursorPacket *acp;
                    147:        register SetPointingDeviceReportingPacket *spdp;
                    148: 
                    149:        acp = (AttachCursorPacket *) AllocateSpace (sizeof (AttachCursorPacket));
                    150:        if (acp == NULL) return;
                    151: #define h ((PacketHeader *) acp->acp_head)
                    152: 
                    153:        h->ph_modifier.emptymod = 0;
                    154:        h->ph_opcode = ATTACH_CURSOR;
                    155:        *(long *) h->ph_next = NULL;
                    156: 
                    157:        acp->acp_device = 1;
                    158: 
                    159:        WritePacket ((caddr_t) acp);
                    160: #undef h
                    161: 
                    162:        spdp = (SetPointingDeviceReportingPacket *) AllocateSpace (sizeof (SetPointingDeviceReportingPacket));
                    163:        if (spdp == NULL) return;
                    164: #define h ((PacketHeader *) spdp->spdp_head)
                    165: 
                    166:        h->ph_modifier.emptymod = 0;
                    167:        h->ph_opcode = SET_POINTING_DEVICE_REPORTING;
                    168:        *(long *) h->ph_next = NULL;
                    169: 
                    170:        spdp->spdp_enable = 1;
                    171: 
                    172:        WritePacket ((caddr_t) spdp);
                    173: #undef h
                    174: }
                    175: 
                    176: SetCursorPosition(pos)
                    177:        register vsCursor *pos;
                    178: {
                    179:        register SetCursorPositionPacket *scp;
                    180: 
                    181:        scp = (SetCursorPositionPacket *) AllocateSpace (sizeof (SetCursorPositionPacket));
                    182:        if (scp == NULL) return;
                    183: #define h ((PacketHeader *) scp->scp_head)
                    184: #define loc ((Point *) scp->scp_position)
                    185: 
                    186:        h->ph_modifier.emptymod = 0;
                    187:        h->ph_opcode = SET_CURSOR_POSITION;
                    188:        *(long *) h->ph_next = NULL;
                    189: 
                    190:        loc->p_x = pos->x;
                    191:        loc->p_y = pos->y;
                    192: 
                    193:        WritePacket ((caddr_t) scp);
                    194:        VSAddr->mouse = *pos;
                    195: #undef h
                    196: #undef loc
                    197: }
                    198: 
                    199: SetMouseCharacteristics (threshold, acceleration)
                    200:        int threshold, acceleration;
                    201: {
                    202:        register SetMouseCharacteristicsPacket *smp;
                    203: 
                    204:        smp = (SetMouseCharacteristicsPacket *) AllocateSpace (sizeof (SetMouseCharacteristicsPacket));
                    205:        if (smp == NULL) return;
                    206: #define h ((PacketHeader *) smp->smc_head)
                    207: 
                    208:        h->ph_mouseMod.m_tracking = 1;
                    209:        h->ph_opcode = SET_MOUSE_CHARACTERISTICS;
                    210:        *(long *) h->ph_next = NULL;
                    211: 
                    212:        smp->smc_scale = acceleration;
                    213:        smp->smc_threshold = threshold;
                    214: 
                    215:        WritePacket ((caddr_t) smp);
                    216: #undef h
                    217: }

unix.superglobalmegacorp.com

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