1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1997-1998 by Sun Microsystems, Inc.
* All rights reserved.
*/
/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
/* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */
/* All Rights Reserved */
#ifndef _SYS_XQUE_H
#define _SYS_XQUE_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Keyboard/mouse event queue entries
*/
typedef struct xqEvent {
uchar_t xq_type; /* event type (see below) */
uchar_t xq_code; /* when xq_type is XQ_KEY, => scan code; */
/* when xq_type is XQ_MOTION or XQ_BUTTON, => */
/* bit 0 clear if right button pushed; */
/* bit 1 clear if middle button pushed; */
/* bit 2 clear if left button pushed; */
char xq_x; /* delta x movement (mouse motion only) */
char xq_y; /* delta y movement (mouse motion only) */
time_t xq_time; /* event timestamp in "milliseconds" */
} xqEvent;
/* xq_type values */
#define XQ_BUTTON 0 /* button state change only */
#define XQ_MOTION 1 /* mouse movement (and maybe button change) */
#define XQ_KEY 2 /* key pressed or released */
/*
* The event queue
*/
typedef struct xqEventQueue {
char xq_sigenable; /* allow signal when queue becomes non-empty */
/* 0 => don't send signals */
/* non-zero => send a signal if queue is */
/* empty and a new event is added */
int xq_head; /* index into queue of next event to be */
/* dequeued */
int xq_tail; /* index into queue of next event slot to */
/* be filled */
time_t xq_curtime; /* time in milliseconds since 1/1/70 GMT */
int xq_size; /* number of elements in xq_events array */
xqEvent xq_events[1]; /* configurable-size array of events */
} xqEventQueue;
#ifdef _KERNEL
/*
* The driver's private data structure to keep track of xqEventQueue
*/
typedef struct xqInfo {
xqEventQueue *xq_queue; /* pointer to the xqEventQueue */
/* structure */
caddr_t xq_private;
caddr_t xq_qaddr; /* pointer to the SCO QUEUE structure */
char xq_qtype; /* xque or SCO que */
char xq_buttons;
char xq_devices; /* devices that uses the SCO que */
char xq_xlate; /* Should we translate scancodes? */
int (*xq_addevent)(); /* xque or SCO que addevent routine */
int xq_ptail; /* private copy of xq_tail */
int xq_psize; /* private copy of xq_size */
int xq_signo; /* signal number to send for xq_sigenable */
proc_t *xq_proc; /* pointer to x server process */
/* (for signalling) */
int xq_pid; /* process id of server process */
struct xqInfo *xq_next, /* next xqInfo structure in list */
*xq_prev; /* previous xqInfo structure in list */
addr_t xq_uaddr;
unsigned xq_npages;
} xqInfo;
/* defined bits for xq_devices */
#define QUE_KEYBOARD 1
#define QUE_MOUSE 2
#endif /* _KERNEL */
caddr_t xq_init();
#ifdef __cplusplus
}
#endif
#endif /* _SYS_XQUE_H */
|