unit MOUSE; { enth„lt Prozeduren zum Gebrauch der Maus } INTERFACE uses Crt, Dos, Graph; type Cursormaske = array[0..31] of word; var regs : registers; Mausx, Mausy, Mausratex, Mausratey, Maus_Status, Maus_Zaehler, Tastenzahl : integer; Mausok : boolean; procedure Initialisiere_Maus; { AX = 0: Maus nicht installiert; AX = $FF: Maus installiert } { BX = Anzahl der Tasten der Maus } { Mausok=true falls Maus installiert } procedure Zeige_Maus; procedure Verstecke_Maus; procedure MausStatus; { Position des Mauscursors (Mausx,Mausy) } { Tastenstatus: Maus_Status = 0: keine Taste gedrckt } { = 1: linke Taste gedrckt } { = 2: rechte Taste gedrckt } { = 3: mittlere bzw. beide Tasten gedrckt } procedure Setze_Mauscursor(x, y: integer); procedure Press_Status(s: integer); { Untersucht den Status des spezifizierten Taste } { s = 0: linke Taste, s = 1: rechte Taste, s = 2: mittlere/beide Tasten } { Maus_Status: Status wie in MausStatus } { Maus_Zaehler: Anzahl der Tastendrcke der spezifizierten Taste (0-32767)} { seit dem letzten Aufruf der Funktion } { Mauscursor: (Mausx, Mausy) } procedure Release_Status(s: integer); { analog zu Press_Status, jedoch mit Z„hlen fr Loslassen der Taste } procedure X_Bereich(xmin, xmax: integer); { spezifiziert den Bereich, in dem sich der Mauscursor horizontal } { bewegen kann; xmin: Minimalkoordinate, xmax: Maximalkoordinate } procedure Y_Bereich(ymin, ymax: integer); { spezifiziert den Bereich, in dem sich der Mauscursor vertikal } { bewegen kann; ymin: Minimalkoordinate, ymax: Maximalkoordinate } procedure Mausfenster(xmin, xmax, ymin, ymax: integer); { spezifiziert ein Fenster, in dem sich der Mauscursor bewegen kann; } { Funktionen wie bei X-Bereich und Y-Bereich } procedure Grafik_Mauscursor(x, y : integer; m: Cursormaske); { Das Aussehen des Cursors und seine Interaktion mit den Grafikpixeln } { auf dem Bildschirm wird durch die Maske m fixiert. Der Auslesepunkt } { des Cursors (in Bezug auf seine 16x16-Maske wird durch (x,y) festge- } { legt. Ist die linke obere Ecke des Cursors der Auslesepunkt, so ist } { (x,y) =(0,0). } procedure Zeiger_Grafikcursor; { erzeugt einen Grafikcursor als nach links oben gerichteter Pfeil. } { Auslesepunkt ist die linke obere Ecke. Interaktion mit Bildschirmpixeln:} { gesetzte Pixel werden invers angezeigt bei šberstreichen durch Cursor. } procedure Kreuz_Grafikcursor; { erzeugt einen Grafikcursor in Form eines Koordinatenkreuzes. Auslese- } { punkt ist der Kreuzungspunkt mit den Koordinaten (8,8). Interaktion } { mit Bildschirmpixeln wie beim Zeiger_Graphikcursor. } procedure Maus_Bewegung; { stellt die Relativbewegung seit letzten Aufruf fest und bermittelt } { sie als Koordinaten Mausratex, Mausratey; wird zusammen mit Empfind- } { lichkeit in Koordinaten umgerechnet } procedure Empfindlichkeit(x, y: integer); { x: Anzahl der Mausbewegungen (Mausratex) horizontal pro 8 Pixel } { y: Anzahl der Mausbewegungen (Mausratey) vertikal pro 8 Pixel } procedure Standard_Empfindlichkeit; procedure Maus_Ausschluss(x1, x2, y1, y2: integer); procedure MausEinsatz; { muá vor Mausbenutzung aufgerufen werden } procedure Zeichne; { h„lt Mausbewegung fest, solange linke Maustaste gedrckt ist } procedure Warte_Maus(status:byte); { wartet bis Maus_Status=status } procedure Warte; { wartet auf Tastendruck oder (falls Mausok=true) Mausklick } procedure Warte0; { wartet (falls Mausok=true) auf MausStatus=0, dann Warte }