Listing 7

#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.mtype : ((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);
 }

********