home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 03 / extra / mouse.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-12-22  |  3.6 KB  |  177 lines

  1. /*---------------------------------------------*/
  2. /*                  MOUSE.C                    */
  3. /*         Modul zum Turbo C Maustreiber       */
  4. /*         (C) 1988 R.Ziegaus & TOOLBOX        */
  5. /*---------------------------------------------*/
  6.  
  7. #define MouseUserIntr 0x78  /* für SetUserProc */
  8. #define FALSE    0
  9. #define TRUE     1
  10.  
  11. #include <dos.h>
  12. #include <stdio.h>
  13.  
  14. #include "mouse.h"
  15.  
  16.  
  17. static char *CopyRight =
  18.   "(C) by Rudolf Ziegaus & TOOLBOX August 1988";
  19.  
  20. static int            MouseUserSet  = FALSE;
  21. static void interrupt (*MouseSaveUser)();
  22.  
  23.  
  24. /* Mouse stellt eine zentrale Routine dar, die die
  25.    jeweiligen Unterfunktionen mit den Parametern
  26.    versorgt und den Interrupt 0x33 aufruft.
  27.    Siehe Mouse Reference Manual von Microsoft    */
  28.  
  29. static void  Mouse(int *m1, int *m2,
  30.      int *m3, int *m4, int *m5)
  31.  
  32. {
  33.    union   REGS   Regs;
  34.    struct  SREGS  Sregs;
  35.  
  36.    if (*m1 >= 0)
  37.      {
  38.        Regs.x.ax = *m1;
  39.        Regs.x.bx = *m2;
  40.        Regs.x.cx = *m3;
  41.        switch(*m1)
  42.    {
  43.      case    9 :
  44.      case   12 :
  45.      case   20 :
  46.      case   22 :
  47.      case   23 :  Regs.x.dx = *m4;
  48.                         Sregs.es  = *m5;
  49.                         break;
  50.  
  51.            case   16 :  Regs.x.cx = *m2;
  52.                         Regs.x.dx = *m3;
  53.                         Regs.x.si = *m4;
  54.                         Regs.x.di = *m5;
  55.             break;
  56.  
  57.            default   :  Regs.x.dx = *m4;
  58.        }
  59.        int86x(0x33,&Regs,&Regs,&Sregs);
  60.  
  61.        if (*m1 == 20)
  62.          *m2 = Sregs.es;
  63.        else
  64.          *m2 = Regs.x.bx;
  65.        *m1 = Regs.x.ax;
  66.        *m3 = Regs.x.cx;
  67.        *m4 = Regs.x.dx;
  68.      }
  69. } /* Mouse */
  70.  
  71.  
  72. /* Initialisiert die Maus */
  73.  
  74.  
  75. int  far InitMouse(void)
  76.  
  77. {
  78.   int m1, m2, m3, m4, m5;
  79.  
  80.   m1 = 0;
  81.   Mouse(&m1,&m2,&m3,&m4,&m5);
  82.  
  83.   if (m1 == 0)
  84.     return(0);
  85.   else
  86.     return(m2);
  87. }
  88.  
  89. /* Zeigt den Mauscursor auf dem Bildschirm */
  90.  
  91. void  far ShowMouseCursor(void)
  92.  
  93. {
  94.   int m1, m2, m3, m4, m5;
  95.  
  96.   m1 = 1;
  97.   Mouse(&m1,&m2,&m3,&m4,&m5);
  98. } /* ShowMouseCursor */
  99.  
  100.  
  101. /* Versteckt den Mauscursor auf dem Bildschirm */
  102.  
  103. void  far HideMouseCursor(void)
  104.  
  105. {
  106.   int m1, m2, m3, m4, m5;
  107.  
  108.   m1 = 2;
  109.   Mouse(&m1,&m2,&m3,&m4,&m5);
  110. }  /*HideMouseCursor */
  111.  
  112.  
  113. /* Ermittelt, ob Maustasten gedrückt wurden */
  114.  
  115. void  far GetButtonPress(int *Status, int *Button,
  116.        int *Spalte, int *Zeile)
  117.  
  118. {
  119.   int dummy;
  120.  
  121.   *Status = 5;
  122.   Mouse(Status,Button,Spalte,Zeile,&dummy);
  123. }  /* GetButtonPress */
  124.  
  125.  
  126. /* UserInterrupt ist eine Hilfsroutine zu
  127.    SetUserProc, die unbedingt benötigt wird */
  128.  
  129. static void UserInterrupt(void)
  130.  
  131. {
  132.   struct REGPACK Regs;
  133.  
  134.   intr(MouseUserIntr, &Regs);
  135. }
  136.  
  137.  
  138. /* Bei bestimmten Maus-Ereignissen (abhängig von
  139.    der Aufrufmaske), soll eine  benutzerdefinierte
  140.    Prozedur "func" aufgerufen werden
  141.    Aufrufmaske = 10 :
  142.       Prozedur soll immer dann aufgerufen
  143.       werden, wenn linke oder rechte
  144.       Maustaste gedrückt wurde                   */
  145.  
  146. void far SetUserProc(unsigned CallMask,
  147.          void interrupt UserProc())
  148.  
  149. {
  150.   int m1, m2, m3, m4, m5;
  151.  
  152.   m1 = 12;
  153.   m3 = CallMask;
  154.   m4 = FP_OFF(UserInterrupt);
  155.   m5 = FP_SEG(UserInterrupt);
  156.   MouseSaveUser = getvect(MouseUserIntr);
  157.   setvect(MouseUserIntr, UserProc);
  158.   Mouse(&m1, &m2, &m3, &m4, &m5);
  159.   MouseUserSet = TRUE;
  160. }
  161.  
  162. /* "Abschalten" der benutzerdefinierten Routine */
  163.  
  164. void far ResetUserProc(void)
  165.  
  166. {
  167.   int m1, m2, m3, m4, m5;
  168.  
  169.   setvect(MouseUserIntr, MouseSaveUser);
  170.   m1 = 12;
  171.   m3 = 0;
  172.   m4 = 0;
  173.   m5 = 0;
  174.   Mouse(&m1, &m2, &m3, &m4, &m5);
  175.   MouseUserSet = FALSE;
  176. }
  177.