Anterior Home Siguiente

Rutinas para manejar el Ratón

Las siguientes rutinas son de uso público y permiten incorpar el uso del mouse en programas en C

#include <stdlib.h>
#include <dos.h>
#include <conio.h>


union REGS reg;

/*************************************************/
/* LA FUNCION mtest                              */
/* Esta función sirve para testear el ratón.     */
/* No es necesario enviar ningún par metro.      */
/* Retorna: 0 => no hay ratón instalado.         */
/*          n => el número de botones del ratón. */
/*************************************************/

int mtest(void)
{
	reg.x.ax = 0x0;
	int86(0x33, &reg, &reg);
	if (reg.x.ax > 0) return reg.x.bx; /* número de botones */
	else return 0;
}

/*************************************************/
/* LA FUNCION mlimit                             */
/* Limitamos el espacio de movilidad del ratón.  */
/* Es necesario enviar cinco par metros.         */
/*    modo => 1 => modo gráfico.                 */
/*            8 => modo texto.                   */
/*    x1 => l¡mite arriba.                       */
/*    y1 => l¡mite izquierda.                    */
/*    x2 => l¡mite abajo.                        */
/*    y2 => l¡mite derecha.                      */
/* No retorna ningún valor.                      */
/*************************************************/

void mlimit(int modo, int x1, int y1, int x2, int y2)
{
	reg.x.ax = 0x7;
	reg.x.cx = x1*modo;
	reg.x.dx = x2*modo;
	int86(0x33, &reg, &reg);
	reg.x.ax = 0x8;
	reg.x.cx = y1*modo;
	reg.x.dx = y2*modo;
	int86(0x33, &reg, &reg);
}

/*************************************************/
/* LA FUNCION msituar                            */
/* Situamos el ratón en las coordenadas deseadas */
/* Es necesario enviar tres par metros.          */
/*    modo => 1 => modo gráfico.                 */
/*            8 => modo texto.                   */
/*    x => posición horizontal.                  */
/*    y => posición vertical.                    */
/* No retorna ningún valor.                      */
/*************************************************/

void msituar(int modo, int x, int y)
{
	reg.x.ax = 0x4;
	reg.x.cx = x*modo;
	reg.x.dx = y*modo;
	int86(0x33, &reg, &reg);
}


/*************************************************/
/* LA FUNCION mver                               */
/* Muestra el puntero del ratón.                 */
/* No es necesario enviar ningún par metro.      */
/* No retorna ningún valor.                      */
/*************************************************/

void mver(void)
{
	reg.x.ax = 0x1;
	int86(0x33, &reg, &reg);
}

/*************************************************/
/* LA FUNCION mxpos                              */
/* Nos dice la coordenada X del ratón.           */
/* Es necesario enviar un par metro.             */
/*    1 => modo gráfico.                         */
/*    8 => modo texto.                           */
/* Retorna la posición horizontal del ratón.     */
/*************************************************/

int mxpos(int modo)
{
	reg.x.ax = 0x3;
	int86(0x33, &reg, ®);
	return reg.x.cx/modo;
}

/*************************************************/
/* LA FUNCION mypos                              */
/* Nos dice la coordenada Y del ratón.           */
/* Es necesario enviar un par metro.             */
/*    1 => modo gráfico.                         */
/*    8 => modo texto.                           */
/* Retorna la posición vertical del ratón.       */
/*************************************************/

int mypos(int modo)
{
	reg.x.ax = 0x3;
	int86(0x33, &reg, &reg);
	return reg.x.dx/modo;
}

/*************************************************/
/* LA FUNCION mclick                             */
/* Nos dice si hay algún botón presionado.       */
/* No es necesario enviar ningún par metro.      */
/* Retorna: 0 => ningún botón presionado.        */
/*          1 => botón izquierdo presionado.     */
/*          2 => botón derecho presionado.       */
/*************************************************/

int mclick(void)
{
	int r = 0;
	reg.x.ax = 0x5;
	reg.x.bx = 0;
	int86(0x33, &reg, &reg);
	if ((reg.x.ax) & 1) r = 1;
	else if ((reg.x.ax>>1) & 1) r = 2;
	return r;
}

La union REGS es utilizada para pasar información hacia y desde funciones como int86.

REGS tiene la siguiente estructura:

union REGS {
  struct  WORDREGS  x;
  struct  BYTEREGS  h;
};

int86 es una función de DOS.H que permite interactuar con las interrupciones de la arquitectura 8086.


Anterior Home Siguiente



© 2000 Made in Bufoland