home *** CD-ROM | disk | FTP | other *** search
/ Cutting-Edge 3D Game Programming with C++ / CE3DC++.ISO / BOOK / CHAP12 / MOUSELIB.CPP < prev    next >
C/C++ Source or Header  |  1995-10-12  |  2KB  |  92 lines

  1. //
  2. // File name: Mouselib.CPP
  3. //
  4. // Description: Provides support for various mouse functions
  5. //              under 32-bit protected mode
  6. //
  7. // Author: John De Goes
  8. //
  9. // Project: Cutting Edge 3D Game Programming
  10. //
  11.  
  12. #include "MouseLib.hpp"
  13.  
  14. void MousePtr::Display ( unsigned char *Buffer )
  15.    {
  16.    Update ();
  17.    if ( ( CImage != NULL ) && ( Buffer != NULL ) )
  18.       {
  19.       int HWidth = Width >> 1;
  20.       int HHeight = Height >> 1;
  21.       int XC = ( X >> 1 ) + XCenter;
  22.       int YC = Y + YCenter;
  23.       int Left = XC - HWidth;
  24.       int Right = XC + HWidth;
  25.       int Top = YC - HHeight;
  26.       int Bottom = YC + HHeight;
  27.       ClipPoint ( Left, Top );
  28.       ClipPoint ( Right, Bottom );
  29.       unsigned char *CPtr = CImage;
  30.       for ( int Yp = Top; Yp < Bottom; Yp++ )
  31.           {
  32.           unsigned char *LPtr = &Buffer [ Yp * 320 + Left ];
  33.           for ( int Xp = Left; Xp < Right; Xp++ )
  34.               {
  35.               if ( *CPtr != 0 )
  36.                  *LPtr = *CPtr;
  37.               LPtr++; CPtr++;   
  38.               }
  39.           }
  40.       }
  41.    }
  42.  
  43. int ResetMouse ( void )
  44.   {
  45.   REGS InReg, OutReg;
  46.   InReg.w.ax = 0x0001;
  47.   int386 ( 0x33, &InReg, &OutReg );
  48.   return ( OutReg.w.ax );
  49.   }
  50.  
  51. void ShowMouse ( void )
  52.    {
  53.    
  54.    REGS InReg, OutReg;
  55.    InReg.w.ax = 0x0001;
  56.    int386 ( 0x33, &InReg, &OutReg );
  57.    }
  58.  
  59. void HideMouse ( void )
  60.    {
  61.    REGS InReg, OutReg;
  62.    InReg.w.ax = 0x0002;
  63.    int386 ( 0x33, &InReg, &OutReg );
  64.    }
  65.  
  66. void SetMousePos ( int X, int Y )
  67.    {
  68.    REGS InReg, OutReg;
  69.    InReg.w.ax = 0x0004;
  70.    InReg.w.cx = (unsigned short) X;
  71.    InReg.w.dx = (unsigned short) Y;
  72.    int386 ( 0x33, &InReg, &OutReg );
  73.    }
  74.  
  75. void GetMousePos ( int &X, int &Y )
  76.    {
  77.    REGS InReg, OutReg;
  78.     InReg.w.ax = 0x0003;
  79.     int386 ( 0x33, &InReg, &OutReg );
  80.     X = OutReg.w.cx;
  81.     Y = OutReg.w.dx;
  82.    }
  83.  
  84. void GetButtonPos ( int &Lb, int &Rb )
  85.    {
  86.    REGS InReg, OutReg;
  87.     InReg.w.ax = 0x0003;
  88.     int386 ( 0x33, &InReg, &OutReg );
  89.     Lb = ( OutReg.w.bx & 1 );
  90.     Rb = ( OutReg.w.bx & 2 ) >> 1;
  91.    }
  92.