home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / MOUSE / MSMOUSE1.ZIP / C&QC.ZIP / MOUS_INT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-10  |  4.2 KB  |  147 lines

  1. /*******************************************************************
  2.  
  3.    MOUS_INT.C
  4.  
  5.       Demonstrates the most commonly used function calls in
  6.    programming the Microsoft mouse driver. This was written
  7.    on Microsoft C 5.1 using the small model. All the calls
  8.    made to the driver are made using int86X.
  9.  
  10.    Written by David Tryon
  11.    Microsoft Product Support
  12.    6/14/88
  13.  
  14.    To build, type:  cl /AS mous_int.c
  15.  
  16.    NOTE: Program assumes mouse and mouse driver are installed.
  17. *******************************************************************/
  18.  
  19. #include <graph.h>
  20. #include <dos.h>
  21. #define MOUSE 0x33
  22.  
  23. union REGS inregs, outregs;        /*  Structures to contain      */
  24. struct SREGS segregs;              /*  register values for int86x */
  25.  
  26. main ()
  27. {
  28.     void chkdrv ();                /*  Checks if driver installed */
  29.     unsigned short cursor [32];    /*  Array to contain cursor    */
  30.  
  31.     chkdrv ();                     /*  Exit if no driver loaded   */
  32.  
  33.     _setvideomode (_ERESCOLOR);    /*  Set graphics mode
  34.                                        (For CGA, use _HRESBW)     */
  35.  
  36.     /*   Function 0:  Mouse Reset and Status  */
  37.     inregs.x.ax = 0;
  38.     int86x ( MOUSE, &inregs, &outregs, &segregs);
  39.  
  40.     /*  Define screen mask  */
  41.  
  42.     cursor [0]  = 0xE1FF;
  43.     cursor [1]  = 0xE1FF;
  44.     cursor [2]  = 0xE1FF;
  45.     cursor [3]  = 0xE1FF;
  46.     cursor [4]  = 0xE1FF;
  47.     cursor [5]  = 0xE000;
  48.     cursor [6]  = 0xE000;
  49.     cursor [7]  = 0xE000;
  50.     cursor [8]  = 0x0000;
  51.     cursor [9]  = 0x0000;
  52.     cursor [10] = 0x0000;
  53.     cursor [11] = 0x0000;
  54.     cursor [12] = 0x0000;
  55.     cursor [13] = 0x0000;
  56.     cursor [14] = 0x0000;
  57.     cursor [15] = 0x0000;
  58.  
  59.     /*  Define cursor mask  */
  60.  
  61.     cursor [16] = 0x1E00;
  62.     cursor [17] = 0x1200;
  63.     cursor [18] = 0x1200;
  64.     cursor [19] = 0x1200;
  65.     cursor [20] = 0x1200;
  66.     cursor [21] = 0x13FF;
  67.     cursor [22] = 0x1249;
  68.     cursor [23] = 0x1249;
  69.     cursor [24] = 0xF249;
  70.     cursor [25] = 0x9001;
  71.     cursor [26] = 0x9001;
  72.     cursor [27] = 0x9001;
  73.     cursor [28] = 0x8001;
  74.     cursor [29] = 0x8001;
  75.     cursor [30] = 0x8001;
  76.     cursor [31] = 0xFFFF;
  77.  
  78.  
  79.     /*   Function 9:  Set Graphics Cursor Block  */
  80.     inregs.x.ax = 9;
  81.     inregs.x.bx = 5;
  82.     inregs.x.cx = 0;
  83.     inregs.x.dx = (unsigned short) cursor;
  84.     segread(&segregs);
  85.     segregs.es = segregs.ds;       /*  ES:DX => cursor array  */
  86.     int86x ( MOUSE, &inregs, &outregs, &segregs);
  87.     segread(&segregs);
  88.  
  89.     /*   Function 7:  Set Horizontal Limits  */
  90.     inregs.x.ax = 7;
  91.     inregs.x.cx = 100;
  92.     inregs.x.dx = 540;
  93.     int86x ( MOUSE, &inregs, &outregs, &segregs);
  94.  
  95.     /*   Function 8:  Set Vertical Limits    */
  96.     inregs.x.ax = 8;
  97.     inregs.x.cx = 50;
  98.     inregs.x.dx = 300;
  99.     int86x ( MOUSE, &inregs, &outregs, &segregs);
  100.  
  101.     /*  Draw box showing mouse limits  */
  102.     _setcolor (9);
  103.     _moveto (100, 50);
  104.     _lineto (540, 50);
  105.     _lineto (540,300);
  106.     _lineto (100,300);
  107.     _lineto (100, 50);
  108.  
  109.     /*   Function 1:  Show Cursor        */
  110.     inregs.x.ax = 1;
  111.     int86x ( MOUSE, &inregs, &outregs, &segregs);
  112.  
  113.     /*   Function 3:  Get Button Status and Mouse Position   */
  114.     do
  115.     {
  116.         inregs.x.ax = 3;
  117.         int86x ( MOUSE, &inregs, &outregs, &segregs);
  118.         _settextposition (1,1);
  119.         printf ("%d  \t%d     ",outregs.x.cx,outregs.x.dx);
  120.     } while (!outregs.x.bx);                /*  Loop until button pressed  */
  121.  
  122.     /*  Function 2:  Hide Cursor         */
  123.     inregs.x.ax = 2;
  124.     int86x ( MOUSE, &inregs, &outregs, &segregs);
  125.  
  126.     _setvideomode (_DEFAULTMODE);  /*  Return to original mode  */
  127. }
  128.  
  129.  
  130. void chkdrv ()
  131. {
  132.     unsigned long address;
  133.     unsigned char first_byte;
  134.  
  135.     inregs.x.ax = 0x3533;          /* Get interrupt vector for 0x33 */
  136.     intdosx ( &inregs, &outregs, &segregs);
  137.     address = (((long) segregs.es) << 16) + (long) outregs.x.bx ;
  138.     first_byte = (unsigned char) * (long far *) address;
  139.  
  140.     /* Be sure vector isn't 0 and first instruction isn't iret */
  141.     if ((address == 0L) || (first_byte == 0xCF))
  142.     {
  143.         printf ("\nThe Mouse Driver must be installed to use this program");
  144.         exit ();
  145.     }
  146. }
  147.