Subversion Repositories shark

Rev

Rev 720 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
105 pj 1
/*
2
 * Project: S.Ha.R.K.
3
 *
4
 * Coordinators:
5
 *   Giorgio Buttazzo    <giorgio@sssup.it>
6
 *   Paolo Gai           <pj@gandalf.sssup.it>
7
 *
8
 * Authors     :
9
 *   Paolo Gai           <pj@gandalf.sssup.it>
10
 *   Massimiliano Giorgi <massy@gandalf.sssup.it>
11
 *   Luca Abeni          <luca@gandalf.sssup.it>
12
 *   (see the web pages for full authors list)
13
 *
14
 * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
15
 *
16
 * http://www.sssup.it
17
 * http://retis.sssup.it
18
 * http://shark.sssup.it
19
 */
20
 
21
/**
22
 ------------
720 giacomo 23
 CVS :        $Id: mouse.h,v 1.2 2004-06-02 13:54:52 giacomo Exp $
105 pj 24
 
25
 File:        $File$
720 giacomo 26
 Revision:    $Revision: 1.2 $
27
 Last update: $Date: 2004-06-02 13:54:52 $
105 pj 28
 ------------
29
 
30
**/
31
 
32
/**
33
 ------------
720 giacomo 34
 CVS :        $Id: mouse.h,v 1.2 2004-06-02 13:54:52 giacomo Exp $
105 pj 35
 
36
 File:        $File$
720 giacomo 37
 Revision:    $Revision: 1.2 $
38
 Last update: $Date: 2004-06-02 13:54:52 $
105 pj 39
 ------------
40
 
41
 Author:        Gerardo Lamastra
42
 Date:  9/5/96
43
 
44
**/
45
 
46
/*
47
 * Copyright (C) 2000 Paolo Gai
48
 *
49
 * This program is free software; you can redistribute it and/or modify
50
 * it under the terms of the GNU General Public License as published by
51
 * the Free Software Foundation; either version 2 of the License, or
52
 * (at your option) any later version.
53
 *
54
 * This program is distributed in the hope that it will be useful,
55
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
56
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57
 * GNU General Public License for more details.
58
 *
59
 * You should have received a copy of the GNU General Public License
60
 * along with this program; if not, write to the Free Software
61
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
62
 *
63
 */
64
 
65
/* Revision:    1.0.1                                           */
66
/* -- added support for PS/2 mouse                              */
67
/* -- changed mouse_init()                                      */
68
 
69
/* By Massy:
70
 * -- added support for mouse cursor (pointer)
71
 * -- interface changed
72
 */
73
 
74
#ifndef __MOUSE_H__
75
#define __MOUSE_H__
76
 
77
#include <kernel/const.h>
78
 
1689 fabio 79
#include <arch/sys/cdefs.h>
105 pj 80
 
81
__BEGIN_DECLS
82
 
83
/* mouse buttons constant */  
84
#define MOUSE_RBUTT     1
85
#define MOUSE_CBUTT     2
86
#define MOUSE_LBUTT     4
87
 
88
/* the mouse event struct */
89
typedef struct {
90
  int x,y;        /* mouse position */
91
  int dx,dy;      /* distance covered by mouse */
92
  int buttons;    /* buttons flags */
93
} MOUSE_EVT;
94
 
95
/* macros to test mouse buttons */
96
#define isLeftButton(m)    ((m).buttons & MOUSE_LBUTT)
97
#define isRightButton(m)   ((m).buttons & MOUSE_RBUTT)
98
#define isCentralButton(m) ((m).buttons & MOUSE_CBUTT)
99
 
100
/* user mouse handler */
101
typedef void (*MOUSE_HANDLER)(MOUSE_EVT*);
102
 
103
/* mouse types */
104
/* (run examples/mfind.c for a description)*/
105
#define MSMOUSE     0x00
106
#define MSPMOUSE    0x01
107
#define MSPLRMOUSE  0x02
108
#define BAREMOUSE   0x03
109
#define MSCMOUSE    0x04
110
#define SUNMOUSE    0x05
111
#define MMMOUSE     0x06
112
#define LOGIMOUSE   0x07
113
#define PS2MOUSE    0x08
114
#define NOMOUSE     0xff
115
 
116
/*
117
 * mouse initialization
118
 */
119
 
120
#define MOUSE_DEFAULT (DWORD)-1
121
 
122
/* the MOUSE_PARMS structure used by mouse_init() */
123
typedef struct mouse_parms {
124
  TASK_MODEL *tm;
125
  int   type;            /* mouse types (constants above) */
126
  /* for serial mouse */
127
  int   port;            /* serial port (i.e. COM1, ...)  */  
128
} MOUSE_PARMS;
129
 
130
/* the default values for the MOUSE_PARMS structure */
131
#define BASE_MOUSE {(TASK_MODEL *)MOUSE_DEFAULT,MOUSE_DEFAULT,MOUSE_DEFAULT}
132
 
133
/* to change the MOUSE_PARMS struct */
134
#define mouse_default_parms(s)        (s).tm = (TASK_MODEL *)MOUSE_DEFAULT, \
135
                                      (s).type = MOUSE_DEFAULT,             \
136
                                      (s).port = MOUSE_DEFAULT
137
#define mouse_def_ms(s,p)             (s).type=MSMOUSE;    (s).port=(p)
138
#define mouse_def_msplus(s,p)         (s).type=MSPMOUSE;   (s).port=(p)
139
#define mouse_def_mspluslr(s,p)       (s).type=MSPLRMOUSE; (s).port=(p)
140
#define mouse_def_bare(s,p)           (s).type=BAREMOUSE;  (s).port=(p)
141
#define mouse_def_msc(s,p)            (s).type=MSCMOUSE;   (s).port=(p)
142
#define mouse_def_sun(s,p)            (s).type=SUNMOUSE;   (s).port=(p)
143
#define mouse_def_mm(s,p)             (s).type=MMMOUSE;    (s).port=(p)
144
#define mouse_def_logi(s,p)           (s).type=LOGIMOUSE;  (s).port=(p)
145
#define mouse_def_ps2(s)              (s).type=PS2MOUSE
146
#define mouse_def_task(s,m)           (s).tm=(m)
147
 
148
/*
149
 * user mouse interface
150
 */
151
 
152
int  mouse_init(MOUSE_PARMS *s);
153
void mouse_enable(void);
154
void mouse_disable(void);
155
void mouse_get(int *x,int *y,BYTE *button);
156
void mouse_position(int x,int y);
157
void mouse_limit(int x1,int y1,int x2,int y2);
158
void mouse_threshold(unsigned t);
159
void mouse_hook(MOUSE_HANDLER h);
160
void mouse_end(void);
161
 
162
/*
163
 *
164
 * mouse autocursor management
165
 *
166
 */
167
 
168
/* commands for mouse_grxcursor() & mouse_txtcursor() */
169
#define DISABLE   0x00
170
#define ENABLE    0x01
171
 
172
/* flags for mouse_grxcursor() & mouse_txtcursor() (to use with '|') */
173
#define WITHOUTSEM 0x10
174
#define AUTOOFF    0x20
175
 
176
/* dimensions of the grx shape */
177
#define MOUSESHAPEDX 16
178
#define MOUSESHAPEDY 16
179
 
180
/* hot-spot of the grx image (coordinates of the center's shape, zero-based) */
181
#define MOUSEHOTSPOTX 3
182
#define MOUSEHOTSPOTY 1
183
 
184
/* those macros can be used to set the correct mouse_limit() when
185
 * the graphics autocursor is enable (to avoid wrong shape position because
186
 * there is not graphics clip functions)
187
 */
188
#define XMINLIMIT(dimx,dimy) (MOUSEHOTSPOTX)
189
#define XMAXLIMIT(dimx,dimy) ((dimx)-MOUSESHAPEDX+MOUSEHOTSPOTX)
190
#define YMINLIMIT(dimx,dimy) (MOUSEHOTSPOTY)
191
#define YMAXLIMIT(dimx,dimy) ((dimy)-MOUSESHAPEDY+MOUSEHOTSPOTY)
192
 
193
#define mouse_grxlimit(dimx,dimy) mouse_limit(\
194
XMINLIMIT(dimx,dimy), \
195
YMINLIMIT(dimx,dimy), \
196
XMAXLIMIT(dimx,dimy), \
197
YMAXLIMIT(dimx,dimy)  \
198
)
199
 
200
/* these are used to select the mouse shape */
201
int mouse_txtshape(DWORD img);
202
int mouse_grxshape(BYTE *shape,BYTE *mask);
203
 
204
/* enable/disable mouse pointer */
205
/* (return <0 on error) */
206
/* (for the cmd parameter see above) */
207
int mouse_grxcursor(int cmd);
208
int mouse_txtcursor(int cmd);
209
 
210
/* mouse on/off (or show/hide) */
211
void (*mouse_on)(void);
212
void (*mouse_off)(void);
213
 
214
__END_DECLS
215
#endif