

                       Mausprogrammierung
                       

Wie Ihr vielleicht selbst schon einmal festgestellt habt, kann
ein Programm noch so gut sein - wenn man das Programm nicht ver-
nnftig bedienen kann, ist es auch nichts Wert... Naja, es ist
wohl nicht ganz so kra, doch eine sinnvolle Eingabemglichkeit
gehrt einfach dazu.
Neben dem Keyboard drften heute wohl so ziemlich alle auch eine
Maus besitzen, und da dieses Eingabegert doch wirklich praktisch
ist, habe ich hier mal einen Artikel ber Mausprogrammierung ge-
schrieben.

Um berhaupt mit der Maus arbeiten zu knnen, mu natrlich ein
Maustreiber installiert sein. Dieser bleibt nachdem er geladen
wurde speicherresident und wandelt die ankommenden Daten der Maus
in fr den Programmierer verstndliche Formen (und umgekehrt).
Angesprochen wird dieser ber den Interrupt 33h (55dez). Dem Pro-
grammierer stehen so zig verschiedene Funktionen zur Verfgung,
um die Maus nach belieben zu benutzen. Die wichtigsten Funktionen
mchte und werde ich hier einmal vorstellen.


Zur allgemeinen Programmierung sei folgendes gesagt:

Um dem Maustreiber zu sagen, was er machen soll, mu die Funk-
tionsnummer in das AX/AL Register geladen werden. Einige Funktio-
nen erwarten weitere Informationen im BX, CX (...) Register, an-
dere liefern in diesen Registern auch Werte zurck.
Sobald dann der Interrupt 33h aufgerufen wird, wird auch die ge-
wnschte Funktion ausgefhrt.



         Eingabe : AX = 00h
         Ausgabe : AX = FFFFH - Maustreiber wurde installiert
                   BX = Anzahl der Maustasten

Die erste Funktion dient zum zurcksetzen des Maustreibers, diese
Funktion sollte eigentlich immer als erstes in einem mit Mausun-
tersttzung ausgestatteten Programm ausgefhrt werden. Wie mir
persnlich allerdings aufgefallen ist, ist dieses wei Gott nicht
Pflicht - die Programme laufen eigentlich auch ohne diesem Funk-
tionsaufruf. Im BX Register kann man nach dem Interruptaufruf im
AX Register nachlesen, ob die Maus erfolgreich installiert wurde,
und im BX Register wieviele Maustasten die Maus hat.
-----------------------------------------------------------------
         Eingabe : AX = 01h
         Ausgabe :

Diese Funktion lt den MausCursor erscheinen.
-----------------------------------------------------------------
         Eingabe : AX = 02h
         Ausgabe :

Mit dieser Funktion kann der MausCursor wieder versteckt werden.
-----------------------------------------------------------------
         Eingabe : AX = 03h
         Ausgabe : BX = Aktueller Zustand der Maustasten:
                        Bit 0 : Linke Taste
                        Bit 1 : Rechte Taste
                   CX = Position des Mauscursors in X-Richtung
                   DX = Position des Mauscursors in Y-Richtung

Nach dem Aufruf dieser Funktion kann man im CX und DX Register
die aktuelle Mausposition abfragen (Pixel). Das BX Register
zeigt den aktuelle Zustand der linken und rechten Maustaste an.
Ist das Bit 0 = 1 (gesetzt), dann ist die linke Maustaste ge-
drckt, ist Bit 0 = 0, dann ist die linke Maustaste nicht ge-
drckt. Ebenso steht es mit Bit 1, allerdings fr die rechte
Maustaste.
----------------------------------------------------------------
         Eingabe : AX = 04h
                   CX = X-Koordinate
                   DX = Y-Koordinate
         Ausgabe :

Diese Funktion ermglicht ein gezieltes setzen des Mauscursors.
Man schreibe ins CX-Register die X-Koordinate und ins DX-Register
die Y-Koordinate des gewnschten Punktes.
-----------------------------------------------------------------
         Eingabe : AX = 05h
                   BX = Abzufragende Taste:
                        00h = Linke Maustaste
                        01h = Rechte Maustaste
                        02h = Mittlere Maustaste
         Ausgabe : AX = Aktueller Zustand der angegebenen Maus-
                        taste
                   BX = Anzahl der Bettigungen seit dem letzten
                        Aufruf der Funktion
                   CX = X-Koordinate des Mauscursors, bei der die
                        Maustaste gedrckt wurde
                   DX = Y-Koordinate des Mauscursors, ...

Mit dieser Funktion lt sich ermitteln an welcher Stelle welcher
Knopf zuletzt gedrckt wurde, und ob dieser zur Zeit immer noch
gedrckt ist.
-----------------------------------------------------------------
         Eingabe : AX = 06h
                   BX = Abzufragende Taste:
                        00h = Linke Maustaste
                        01h = Rechte Maustaste
                        02h = Mittlere Maustaste
         Ausgabe : AX = Aktueller Zustand der angegebenen Maus-
                        taste
                   BX = Wie oft die Maustaste seit dem letzten
                        Aufruf losgelassen wurde
                   CX = X-Koordinate des Mauscursors, bei der die
                        Maustaste losgelassen wurde
                   DX = Y-Koordinate des Mauscursors, ...

Diese Funktion hat die gleichen Funktionen wie Funktion 05h, nur
da sich alle Angaben auf das Loslassen einer angegebenen Taste
bezieht.
-----------------------------------------------------------------
         Eingabe : AX = 07h
                   CX = Minimale X-Koordinate
                   DX = Maximale X-Koordinate
         Ausgabe :

Der Aufruf dieser Funktion bewirkt eine Vernderung des zuls-
sigen horizontalen Bereiches. Mchte man, da sich der Mauscursor
nur zwischen den X-Koordinaten 100-200 bewegen lt, dann lade
man CX mit 100 und DX mit 200.
-----------------------------------------------------------------
         Eingabe : AX = 08h
                   CX = Minimale Y-Koordinate
                   DX = Maximale Y-Koordinate
         Ausgabe :

Diese Funktion bildet das Gegenstck zur Funktion 07h: Mit ihr
lt sich der vertikale Gltigkeitsbereich der Maus verndern.
-----------------------------------------------------------------
         Eingabe : AX = 0Fh
                   CX = Horizontale Zhlschritte
                   DX = Vertikale Zhlschritte
         Ausgabe :

Diese Funktion legt fest, wie schnell sich der Mauscursor bewegen
lt. Je grer die Werte, desto schneller der Cursor.


So, das wre ersteinmal alles. Ich habe hier brigens nur (meiner
Meinung nach) die wichtigsten Funktionen erlutert. Es gibt noch
einige andere, mit denen man zum Beispiel das Aussehen des Cur-
sors im Text- und Grafikmodus festlegen kann. Doch diese Routinen
werden eher selten aufgerufen und blieben somit weg. Vielleicht
erlutere ich sie mal in den folgenden Ausgaben...


So, nun sei noch gesagt, da sich in den Rubriken Assembler,
Basic und Pascal jeweils kleine Programme befinden, die als An-
wendungsbeispiele dienen sollen.

Tja, das wr's dann auch 'schon' mit diesem Artikel. Ich hoffe
er war einigermaen interessant.

                                                 Kemil

