~ubuntu-branches/ubuntu/intrepid/xserver-xgl/intrepid

« back to all changes in this revision

Viewing changes to hw/kdrive/vxworks/vxmouse.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthew Garrett
  • Date: 2006-02-13 14:21:43 UTC
  • Revision ID: james.westby@ubuntu.com-20060213142143-mad6z9xzem7hzxz9
Tags: upstream-7.0.0
Import upstream version 7.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Id: vxmouse.c,v 1.1 1999/11/24 08:35:24 keithp Exp $
 
3
 *
 
4
 * Copyright � 1999 Network Computing Devices, Inc.  All rights reserved.
 
5
 *
 
6
 * Author: Keith Packard
 
7
 */
 
8
 
 
9
#ifdef HAVE_CONFIG_H
 
10
#include <kdrive-config.h>
 
11
#endif
 
12
#define NEED_EVENTS
 
13
#include <X11/X.h>
 
14
#include <X11/Xproto.h>
 
15
#include "inputstr.h"
 
16
#include "scrnintstr.h"
 
17
#include "kdrive.h"
 
18
#include "Xpoll.h"
 
19
#include <event.h>
 
20
#include <smem.h>
 
21
 
 
22
static unsigned long    mouseState;
 
23
 
 
24
#define BUTTON1         0x01
 
25
#define BUTTON2         0x02
 
26
#define BUTTON3         0x04
 
27
 
 
28
#include <errno.h>
 
29
 
 
30
static int mouseFd = -1;
 
31
 
 
32
static eventqueue   *eventQueue;
 
33
 
 
34
void
 
35
VxMouseRead (int mousePort)
 
36
{
 
37
    Event           ev;
 
38
    int             dx, dy;
 
39
    unsigned long   flags;
 
40
    unsigned long   mask;
 
41
    int             n;
 
42
    
 
43
    while (eventQueue->head != eventQueue->tail)
 
44
    {
 
45
        ev = *eventQueue->head;
 
46
        if (eventQueue->head >= &eventQueue->events[eventQueue->size-1])
 
47
            eventQueue->head = &eventQueue->events[0];
 
48
        else
 
49
            eventQueue->head++;
 
50
        switch (ev.e_type) {
 
51
        case E_BUTTON:
 
52
            switch (ev.e_device) {
 
53
            case E_MOUSE:
 
54
                switch (ev.e_key) {
 
55
                case BUTTON1:
 
56
                    mask = KD_BUTTON_1;
 
57
                    break;
 
58
                case BUTTON2:
 
59
                    mask = KD_BUTTON_2;
 
60
                    break;
 
61
                case BUTTON3:
 
62
                    mask = KD_BUTTON_3;
 
63
                    break;
 
64
                default:
 
65
                    mask = 0;
 
66
                    break;
 
67
                }
 
68
                if (ev.e_direction == E_KBUP)
 
69
                    mouseState &= ~mask;
 
70
                else
 
71
                    mouseState |= mask;
 
72
                KdEnqueueMouseEvent (mouseState | KD_MOUSE_DELTA, 0, 0);
 
73
                break;
 
74
            case E_DKB:
 
75
                KdEnqueueKeyboardEvent (ev.e_key, ev.e_direction == E_KBUP);
 
76
                break;
 
77
            }
 
78
            break;
 
79
        case E_MMOTION:
 
80
            KdEnqueueMouseEvent (mouseState | KD_MOUSE_DELTA,
 
81
                                 ev.e_x, ev.e_y);
 
82
            break;
 
83
        }
 
84
    }
 
85
}
 
86
 
 
87
int
 
88
VxMouseInit (void)
 
89
{
 
90
    int             mousePort;
 
91
    unsigned long   ev_size;
 
92
    
 
93
    mouseState = 0;
 
94
    mousePort = open ("/dev/xdev", O_RDONLY, 0);
 
95
    if (mousePort < 0)
 
96
        ErrorF ("event port open failure %d\n", errno);
 
97
    mouseFd = open ("/dev/mouse", O_RDONLY, 0);
 
98
    if (mouseFd < 0)
 
99
        ErrorF ("mouse open failure %d\n", errno);
 
100
    if (eventQueue == 0)
 
101
    {
 
102
        ioctl (mousePort, EVENT_QUEUE_SMSIZE, &ev_size);
 
103
        eventQueue = (eventqueue *) smem_get ("event", ev_size, (SM_READ|SM_WRITE));
 
104
    }
 
105
    return mousePort;
 
106
}
 
107
 
 
108
void
 
109
VxMouseFini (int mousePort)
 
110
{
 
111
    if (mousePort >= 0)
 
112
        close (mousePort);
 
113
    if (mouseFd >= 0)
 
114
    {
 
115
        close (mouseFd);
 
116
        mouseFd = -1;
 
117
    }
 
118
}
 
119
 
 
120
KdMouseFuncs VxWorksMouseFuncs = {
 
121
    VxMouseInit,
 
122
    VxMouseRead,
 
123
    VxMouseFini
 
124
};