home *** CD-ROM | disk | FTP | other *** search
- /*---------------------------------------------*/
- /* MOUSE.C */
- /* Modul zum Turbo C Maustreiber */
- /* (C) 1988 R.Ziegaus & TOOLBOX */
- /*---------------------------------------------*/
-
- #define MouseUserIntr 0x78 /* für SetUserProc */
- #define FALSE 0
- #define TRUE 1
-
- #include <dos.h>
- #include <stdio.h>
-
- #include "mouse.h"
-
-
- static char *CopyRight =
- "(C) by Rudolf Ziegaus & TOOLBOX August 1988";
-
- static int MouseUserSet = FALSE;
- static void interrupt (*MouseSaveUser)();
-
-
- /* Mouse stellt eine zentrale Routine dar, die die
- jeweiligen Unterfunktionen mit den Parametern
- versorgt und den Interrupt 0x33 aufruft.
- Siehe Mouse Reference Manual von Microsoft */
-
- static void Mouse(int *m1, int *m2,
- int *m3, int *m4, int *m5)
-
- {
- union REGS Regs;
- struct SREGS Sregs;
-
- if (*m1 >= 0)
- {
- Regs.x.ax = *m1;
- Regs.x.bx = *m2;
- Regs.x.cx = *m3;
- switch(*m1)
- {
- case 9 :
- case 12 :
- case 20 :
- case 22 :
- case 23 : Regs.x.dx = *m4;
- Sregs.es = *m5;
- break;
-
- case 16 : Regs.x.cx = *m2;
- Regs.x.dx = *m3;
- Regs.x.si = *m4;
- Regs.x.di = *m5;
- break;
-
- default : Regs.x.dx = *m4;
- }
- int86x(0x33,&Regs,&Regs,&Sregs);
-
- if (*m1 == 20)
- *m2 = Sregs.es;
- else
- *m2 = Regs.x.bx;
- *m1 = Regs.x.ax;
- *m3 = Regs.x.cx;
- *m4 = Regs.x.dx;
- }
- } /* Mouse */
-
-
- /* Initialisiert die Maus */
-
-
- int far InitMouse(void)
-
- {
- int m1, m2, m3, m4, m5;
-
- m1 = 0;
- Mouse(&m1,&m2,&m3,&m4,&m5);
-
- if (m1 == 0)
- return(0);
- else
- return(m2);
- }
-
- /* Zeigt den Mauscursor auf dem Bildschirm */
-
- void far ShowMouseCursor(void)
-
- {
- int m1, m2, m3, m4, m5;
-
- m1 = 1;
- Mouse(&m1,&m2,&m3,&m4,&m5);
- } /* ShowMouseCursor */
-
-
- /* Versteckt den Mauscursor auf dem Bildschirm */
-
- void far HideMouseCursor(void)
-
- {
- int m1, m2, m3, m4, m5;
-
- m1 = 2;
- Mouse(&m1,&m2,&m3,&m4,&m5);
- } /*HideMouseCursor */
-
-
- /* Ermittelt, ob Maustasten gedrückt wurden */
-
- void far GetButtonPress(int *Status, int *Button,
- int *Spalte, int *Zeile)
-
- {
- int dummy;
-
- *Status = 5;
- Mouse(Status,Button,Spalte,Zeile,&dummy);
- } /* GetButtonPress */
-
-
- /* UserInterrupt ist eine Hilfsroutine zu
- SetUserProc, die unbedingt benötigt wird */
-
- static void UserInterrupt(void)
-
- {
- struct REGPACK Regs;
-
- intr(MouseUserIntr, &Regs);
- }
-
-
- /* Bei bestimmten Maus-Ereignissen (abhängig von
- der Aufrufmaske), soll eine benutzerdefinierte
- Prozedur "func" aufgerufen werden
- Aufrufmaske = 10 :
- Prozedur soll immer dann aufgerufen
- werden, wenn linke oder rechte
- Maustaste gedrückt wurde */
-
- void far SetUserProc(unsigned CallMask,
- void interrupt UserProc())
-
- {
- int m1, m2, m3, m4, m5;
-
- m1 = 12;
- m3 = CallMask;
- m4 = FP_OFF(UserInterrupt);
- m5 = FP_SEG(UserInterrupt);
- MouseSaveUser = getvect(MouseUserIntr);
- setvect(MouseUserIntr, UserProc);
- Mouse(&m1, &m2, &m3, &m4, &m5);
- MouseUserSet = TRUE;
- }
-
- /* "Abschalten" der benutzerdefinierten Routine */
-
- void far ResetUserProc(void)
-
- {
- int m1, m2, m3, m4, m5;
-
- setvect(MouseUserIntr, MouseSaveUser);
- m1 = 12;
- m3 = 0;
- m4 = 0;
- m5 = 0;
- Mouse(&m1, &m2, &m3, &m4, &m5);
- MouseUserSet = FALSE;
- }