 

#include  <stdio.h>
#include  <dos.h>

#ifndef TRUE
#define TRUE  1
#define FALSE 0
#endif

int mouse_status(void);       /* Check for mouse driver */
void mouse_config(void);      /* Get mouse information */
int which_port(void);         /* Which serial port inuse */

char *mouse_type[] = {        /* Mouse types */
     "Not Defined",
     "Bus MOuse",
     "Serial Mouse",
     "InPort Mouse",
     "PS/2 Mouse",
     "HP MOuse",
     NULL
   };

struct mouse_info {           /* Mouse info structure */
     int major;               /* Driver major version */
     int minor;               /* Driver minor version */
     int m_type;              /* Mouse type */
     int irq_num;             /* Mouse type */
     int n_buttons;           /* Number of mouse buttons */
   };

struct mouse_info m_info;

unsigned far *com1_vec = (unsigned far *) 0x00000030; 
                                        /* Addr of Com1 vector */                   
unsigned far *com2_vec = (unsigned far *) 0x0000002C; 
                                        /* Addr of Com2 vector */
unsigned far *mouse_vec = (unsigned far *) 0x000000CC; 
                                        /* Addr of Mouse vector 
*/
main ()
   {
     if  (mouse_status ())  
          {      /*Check for mouse driver */
          mouse_config();          /* Get mouse information */
              printf ("Microsoft or compatible mouse driver \
present...\n");
              printf("Mouse driver version is %d.%d\n",
                      m_info.major,m_info.minor);
              printf("Mouse type is %s\n",
                     mouse_type[m_info.m_type]);
          printf("Mouse had %d buttons\n",m_info.n_buttons);
              printf("Mouse IRQ Level is %d\n", m_info.irq_num);
          if (m_info.m_type == 2)
                  printf("Mouse is using serial port \
COM%d:\n",which_port());
         }
     else
             printf("No Microsoft or compatible mouse driver \
present...\n");
     exit (0); 
     }
/****************************************************************
     int mouse_status(void) - Check for the presence of a mouse 
                                        driver
          Input arguments   - None.
          Returns           _ TRUE (1) if Mouse driver present.
                              False (0) if no Mouse driver 
                              available.
*****************************************************************/

int mouse_status(void)
   {
   union REGS regs;

     regs.x.ax = 0;      /*Function zero - Get mouse status */
     int86(0x33, &regs, &regs);    /* Call the mouse driver */
     if (regs.x.ax == 0xFFFF) 
          {    /* If return -1 then mouse present */
          m_info.n_buttons = regs.x.bx;
                        /* Store number of buttons on mouse */
          return (TRUE);            /* Report Mouse present */
          }
     return(FALSE);           /* Mouse driver not available */
     }
/*************************************************************

     void mouse_config(void) - Get mouse configuration

          Input arguments - None.
          Returns         - None.

*************************************************************/    

void mouse_config(void)
     {
     union REGS regs;

     regs.x.ax = 0x0024; /* Function 0x24 -get mouse config */
     int86(0x33, &regs, &regs);    /* Call the mouse driver */
     m_info.major = regs.h.bh;     /* Save major version of 
                                      driver */
     m_info.minor = regs.h.bl;     /* Save minor version of 
                                      driver */
     m_info.m_type = ((regs.h.ch > 0 && regs.h.ch < 6) ? 
                                               regs.h.ch : 0);
     m_info.irq_num = regs.h.cl;   /* Save mouse IRQ level */

     }
/*************************************************************
     int which_port (void)    - Check which serial port the mosue 
                                   is using.
          Input arguments     - None.
          Returns             - 1  - COM1 in use.
                                2  - COM2 in use.
                                0  - Neither COM1 nor COM2 in 
                                                        use.
****************************************************************/

int which_port(void)
    {
     if (*(mouse_vec+1) == *(com1_vec+1))
          return(1);
     if (*(mouse_vec+1) == *(com2_vec+1))
          return(2);
     return (0);
     }

********

