Mouse Programming in C Using Graphics

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<graphics.h>
#include<dos.h>
union REGS i, o;
struct SREGS s;

Module that checks whether Mouse is attached to port:

void InitMouse()
{
  i.x.ax=0;
  int86(0x33, &i, &o);
  return(o.x.ax);
  }

Module that displays the current shape of Mouse Pointer.


void ShowMousePtr()
{
  i.x.ax=1;
  int86(0x33, &i, &o);
}

Module that hides the Mouse pointer from the display.

void HideMousePtr()
{
  i.x.ax=2;
  int86(0x33, &i, &o);
}

Module that outputs Mouse button status and pointer position.

void GetMousePosition(int *button, int *x, int *y)
{
  i.x.ax=3;
  int86(0x33, &i, &o);
  *button=o.x.bx;
  *x=o.x.cx;
  *y=o.x.dx;
}

Module that initializes Mouse Pointer position on the work area at the desired position. 
void SetMousePosition(int x, int y)
{
  i.x.ax=4;
  o.x.cx=x;
  o.x.dx=y;
  int86(0x33, &i, &o);
}

Module that fixes the Mouse movement range (Window Specific)

void RestrictMousePtr(int x1, int y1, int x2, int y2)
{
  i.x.ax=7;
  i.x.cx=x1;
  i.x.dx=x2;
  int86(0x33, &i, &o);
  i.x.ax=8;
  i.x.cx=y1;
  i.x.dx=y2;
  int86(0x33, &i, &o);
}

Module that dynamically displays the position Coordinate of Mouse Pointer.

void ShowMousePosition(int prevx, int prevy, int x, int y)
{
  char xString[4], yString[10], prevxString[4], prevyString[10];
  if(x>80 && x<635 && y>21 && y<460)
   {
     if(x!=prevx || y!=prevy)
      {
        settextstyle(DEFAULT_FONT, 0, 1);
        prevx-=81;
        prevy-=22;
        itoa(prevx, prevxString, 10);
        itoa(prevy, prevxString, 10);
        strcat(prevString, " , ");
        strcat(prevString, prevString);
        setcolor(LIGHTGRAY);
        outtextxy(560, 465, prevString);
        x-=81;
        y-=22;
        itoa(x, xString, 10);
        itoa(y, yString, 10);
        strcat(yString, " , ");
        strcat(yString, xString);
        setcolor(BLUE);
        outtextxy(560, 465, yString);
}
else
{
  if(prevx>80 && prevx<635 && prevy>21 && prevy<460)
   {
     settextstyle(DEFAULT_FONT, 0, 1);
     prevx-=81;
     prevy-=22;
     itoa(prevx, prevxString, 10);
     itoa(prevy, prevyString, 10);
     strcat(prevyString, " , ");
     strcat(prevyString, prevxString);
     setcolor(LIGHTGRAY);
     outtextxy(560, 465, prevyString);
  }
 }
}

Module that changes cursor shape specific to the use.

void ChangeCursor(int *shape)
{
   i.x.ax=9;
   i.x.bx=0;
   i.x.cx=0;
   i.x.dx=(unsigned) shape;
   segread(&s);
   s.es=s.ds;
   int86x(0x33, &i, &o, &s);
}

int HourCursor[32]= { 
   0x0000, 0x0000, 0x0000, 0x0000, 
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,

   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
};


Modules for generating different cursor-shape

int HandCursor[32]= {
   0x0000, 0x0000, 0x0000, 0x0000, 
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,

   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
};
 int FillCursor[32]= {
   0x0000, 0x0000, 0x0000, 0x0000, 
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,

   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
   0x0000, 0x0000, 0x0000, 0x0000,
};