1 /* SVGALib mouse input support */
25 static struct mouseinfo {
26 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
27 //added on 10/17/98 by Hans de Goede for mouse functionality
32 //end this section addition - Hans
35 void mouse_handler (int vga_button, int dx, int dy, int dz, int drx, int dry, int drz)
41 /* map bit 0,1,2 (R,M,L) to 1,2,0 */
42 button = ((vga_button & 1) << 1) | ((vga_button & 2) << 1) |
43 ((vga_button & 4) >> 2);
45 for (i = 0; i < 8; i++)
47 state = button & (1 << i);
48 if (!Mouse.buttons[i].pressed && state)
50 Mouse.buttons[i].time_went_down = timer_get_fixed_seconds();
51 Mouse.buttons[i].num_downs++;
53 else if (Mouse.buttons[i].pressed && !state)
55 Mouse.buttons[i].num_ups++;
58 Mouse.buttons[i].pressed = state;
65 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
66 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
67 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
68 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
71 void d_mouse_close(void)
74 vga_setmousesupport(0);
78 void d_mouse_init(void)
80 memset(&Mouse,0,sizeof(Mouse));
81 vga_setmousesupport(1);
83 atexit(d_mouse_close);
87 int mouse_set_limits( int x1, int y1, int x2, int y2 )
97 void mouse_flush() // clears all mice events...
104 current_time = timer_get_fixed_seconds();
105 for (i=0; i<MOUSE_MAX_BUTTONS; i++)
107 Mouse.buttons[i].pressed=0;
108 Mouse.buttons[i].time_went_down=current_time;
109 Mouse.buttons[i].time_held_down=0;
110 Mouse.buttons[i].num_ups=0;
111 Mouse.buttons[i].num_downs=0;
113 //added on 10/17/98 by Hans de Goede for mouse functionality
118 //end this section addition - Hans
121 //========================================================================
122 void mouse_get_pos( int *x, int *y)
129 void mouse_get_delta( int *dx, int *dy )
146 for (i=0; i<MOUSE_MAX_BUTTONS; i++ )
148 if (Mouse.buttons[i].pressed)
155 void mouse_set_pos( int x, int y)
160 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
161 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
162 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
163 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
164 //end this section change - Hans
167 void mouse_get_cyberman_pos( int *x, int *y )
173 // Returns how long this button has been down since last call.
174 fix mouse_button_down_time(int button)
180 if (!Mouse.buttons[button].pressed) {
181 time_down = Mouse.buttons[button].time_held_down;
182 Mouse.buttons[button].time_held_down = 0;
184 time = timer_get_fixed_seconds();
185 time_down = time - Mouse.buttons[button].time_held_down;
186 Mouse.buttons[button].time_held_down = time;
191 // Returns how many times this button has went down since last call
192 int mouse_button_down_count(int button)
198 count = Mouse.buttons[button].num_downs;
199 Mouse.buttons[button].num_downs = 0;
204 // Returns 1 if this button is currently down
205 int mouse_button_state(int button)
208 return Mouse.buttons[button].pressed;
211 #endif /* SVGALIB_INPUT */