2 * $Source: /cvs/cvsroot/d2x/arch/svgalib/mouse.c,v $
5 * $Date: 2001-10-24 09:25:05 $
7 * SVGALib mouse support
9 * $Log: not supported by cvs2svn $
10 * Revision 1.3 2001/01/29 14:03:57 bradleyb
11 * Fixed build, minor fixes
13 * Revision 1.2 2001/01/28 16:09:39 bradleyb
14 * Removed duplicate files, and unified input headers.
30 #define MOUSE_MAX_BUTTONS 8
42 static struct mouseinfo {
43 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
44 //added on 10/17/98 by Hans de Goede for mouse functionality
49 //end this section addition - Hans
52 void mouse_handler (int vga_button, int dx, int dy, int dz, int drx, int dry, int drz)
58 /* map bit 0,1,2 (R,M,L) to 1,2,0 */
59 button = ((vga_button & 1) << 1) | ((vga_button & 2) << 1) |
60 ((vga_button & 4) >> 2);
62 for (i = 0; i < 8; i++)
64 state = button & (1 << i);
65 if (!Mouse.buttons[i].pressed && state)
67 Mouse.buttons[i].time_went_down = timer_get_fixed_seconds();
68 Mouse.buttons[i].num_downs++;
70 else if (Mouse.buttons[i].pressed && !state)
72 Mouse.buttons[i].num_ups++;
75 Mouse.buttons[i].pressed = state;
82 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
83 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
84 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
85 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
88 void d_mouse_close(void)
91 vga_setmousesupport(0);
96 d_mouse_init(int enable_cyberman)
98 memset(&Mouse,0,sizeof(Mouse));
99 vga_setmousesupport(1);
101 atexit(d_mouse_close);
103 return 0; /* should return # of buttons... dunno how w/svgalib */
107 mouse_set_limits( int x1, int y1, int x2, int y2 )
116 void mouse_flush() // clears all mice events...
123 current_time = timer_get_fixed_seconds();
124 for (i=0; i<MOUSE_MAX_BUTTONS; i++)
126 Mouse.buttons[i].pressed=0;
127 Mouse.buttons[i].time_went_down=current_time;
128 Mouse.buttons[i].time_held_down=0;
129 Mouse.buttons[i].num_ups=0;
130 Mouse.buttons[i].num_downs=0;
132 //added on 10/17/98 by Hans de Goede for mouse functionality
137 //end this section addition - Hans
140 //========================================================================
141 void mouse_get_pos( int *x, int *y)
148 void mouse_get_delta( int *dx, int *dy )
165 for (i=0; i<MOUSE_MAX_BUTTONS; i++ )
167 if (Mouse.buttons[i].pressed)
174 void mouse_set_pos( int x, int y)
179 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
180 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
181 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
182 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
183 //end this section change - Hans
186 void mouse_get_cyberman_pos( int *x, int *y )
192 // Returns how long this button has been down since last call.
193 fix mouse_button_down_time(int button)
199 if (!Mouse.buttons[button].pressed) {
200 time_down = Mouse.buttons[button].time_held_down;
201 Mouse.buttons[button].time_held_down = 0;
203 time = timer_get_fixed_seconds();
204 time_down = time - Mouse.buttons[button].time_held_down;
205 Mouse.buttons[button].time_held_down = time;
210 // Returns how many times this button has went down since last call
211 int mouse_button_down_count(int button)
217 count = Mouse.buttons[button].num_downs;
218 Mouse.buttons[button].num_downs = 0;
223 // Returns 1 if this button is currently down
224 int mouse_button_state(int button)
227 return Mouse.buttons[button].pressed;