| Anterior | Home | Siguiente |
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, ®, ®);
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.x.ax = 0x8;
reg.x.cx = y1*modo;
reg.x.dx = y2*modo;
int86(0x33, ®, ®);
}
/*************************************************/
/* 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, ®, ®);
}
/*************************************************/
/* 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, ®, ®);
}
/*************************************************/
/* 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, ®, ®);
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, ®, ®);
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, ®, ®);
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