Source file: /~heha/messtech/ad_da.zip/PAS/MAUS.PAS

UNIT MAUS;
{Letzte Änderung: H.Haftmann 12/02: Intr()->Assembler}

INTERFACE

function MausOk : boolean;
    { Int $33, Funktionsnr. 0
       Bekommt den Wert TRUE, wenn der Maustreiber installiert ist }

procedure ShowMaus;
    { Int $33, Funktionsnr. 1
       Bringt den Mauscursor auf den Bildschirm }

procedure HideMaus;
    { Int $33, Funktionsnr. 2
       Versteckt den Mauscursor }

procedure MausPos(var x,y,b : integer);
    { Int $33, Funktionsnr. 3
       Aktuelle Mausposition:
       x : Spalte (Bereich 0 bis 639),
       y : Spalte (Bereich 0 bis 199),
       b : MausButtonstatus:
	   0 = kein Knopf gedrückt
	   1 = linker Knopf gedrückt,
	   2 = rechter Knopf gedrückt,
	   3 = beide Knöpfe
	   4 = mittlerer Knopf (wenn Drei-Knopf-Maus)}

procedure SetMausPos(x,y : integer);
    { Int $33, Funktionsnr. 4
       Setzt den Mauscursor an die Position x,y (Bereiche s.o.) }

procedure ButtonPressed(But:integer; VAR x,y,b,Count:integer);
    { Int $33, Funktionsnr. 5
       Gibt die Werte zurück, die beim letzten Drücken den in
       But angegebenen MausKnopf gegeben waren.
       But=0 : linker Knopf, But=1 : rechter Knopf
       Die Prozedur gibt folgende Werte zurück:
       x,y  : Mausposition beim Drücken von dem Mausknopf in But
       b    : Momentaner Mausbuttonstatus (vgl. MausPos)
       Count: Wie oft der MausKnopf But seit dem letzten Aufruf
	      gedrückt wird.}

procedure ButtonReleased(But: integer; VAR x,y,b,Count: integer);
    { Int $33, Funktionsnr. 6
       Wie ButtonPressed, nur daß hier das Loslassen des Knopfes
       registriert wird }

procedure MausXRange (min, max : integer);
    { Int $33, Funktionsnr. 7
       Beschränkt den Bereich für die Maus in der Horizontalen }

procedure MausYRange (min, max : integer);
    { Int $33, Funktionsnr. 8
       Beschränkt den Bereich für die Maus in der Vertikalen }

procedure MausGrafikCursor(x,y : integer; CursorDaten : POINTER);
    { Int $33, Funktionsnr. 9
       Übergabe der Information für Grafikcursor:
       x,y Koordinaten des maßgeblichen Punktes,
       POINTER : Adresse des 16*16 Bit-Bereichs mit den Cursor-Daten }

procedure MausTextCursor(Wahl, BildM, CursM : integer);
    { Int $33, Funktionsnr. 10
       Übergabe der Information für den Textcursor:
       Wahl=0 : Hardwarecursor
		BildM, CursM : Anfangs- und Endzeile des Scancodes.
       Wahl=1 : Softwarecursor
		BildM = Bildmasken-Wert
		CursM = Cursormasken-Wert }

procedure MausBewegung(var x,y:integer);
    { Int $33, Funktionsnr. 11
       X/Y-Bewegung seit dem letzen Aufruf lesen }

procedure MausProc(Maske : integer; ProcZeiger : POINTER);
    { Int $33, Funktionsnr. 12
       Übergibt die Adresse eines Unterprogrammes, welches ausge-
       führt werden soll, wenn der in 'Maske' festgelegte Zustand
       eintritt.
       Maske=0 : wenn die Maus bewegt wurde
       Maske=1 : wenn linker Knopf gedrückt wurde
       Maske=2 : wenn linker Knopf losgelassen wurde
       Maske=3 : wenn rechter Knopf gedrückt wurde
       Maske=4 : wenn rechter Knopf losgelassen wurde
       ProcZeiger : Adresse des Unterprogramms }

procedure SetMausSpeed(sx, sy : integer);
    { Int $33, Funktionsnr. 15
       Empfindlichkeitseinstellung der Maus.
       sx : sx/100 inch entsprechen acht Pixel Mausbewegung horizontal
       sy : sy/100 inch entsprechen acht Pixel Mausbewegung vertikal   }

procedure MausUpdate(X1, Y1, X2, Y2 : integer);
    { Int $33, Funktionsnr. 16 }

{ Alle folgenden Prozeduren sind nur für Textmodus. Die Parameter          }
{ werden nicht in Mauspixel, sondern als Text-Bildschirmkoordinaten        }
{ übergeben und geliefert                                                  }

procedure SetNormMausCursor;
    { Deklariert ein inverses Feld als Softwarecursor,
       wenn Cursor über Zeichen, wird Zeichen invertiert }

function MausWhereX : integer;
    { Gibt die X-Position des Mauscursors zurück }

function MausWhereY : integer;
    { Gibt die Y-Position des Mauscursors zurück }

function MausButtonPressed : integer;
    { Ergebnis 0  : Kein Kopf gedrückt
		1 : linker Knopf gedrückt
		2 : rechter Knopf gedrückt
		3 : Beide Knöpfe gedrückt
		4 : mittlerer Knopf (wenn Drei-Knopf-Maus)}

procedure MausGotoXY( x,y : integer);
    { Setzt den MausCursor an die Position x,y }

procedure MausWriteChar(c : char);
    { Schreibt Zeichen auf den Bildschirm }

procedure MausWrite(s : string);
    { Schreibt einen String auf den Bildschirm }

procedure SetMausWindow(xmin, ymin, xmax, ymax : integer);
    { Definiert ein Maus-Fenster. Dieses Fenster kann von dem Maus-
       cursor nicht überschritten werden }

{**********************C*H*I*P****S*P*E*C*I*A*L***************************}

IMPLEMENTATION

CONST CursorBreite : byte = 8;
{VAR   R : Registers;}

(****************************************************************************)
(* Elementare Mausfunktionen                                                *)
(****************************************************************************)

function MausOk : boolean; assembler;
 asm	mov	ax,3533h
	int	21h
	mov	ax,es
	or	ax,ax
	jz	@@e
	xor	ax,ax
	xor	bx,bx
	int	33h
@@e:
 end;

procedure ShowMaus; assembler; asm mov ax,1; int 33h; end;

procedure HideMaus; assembler; asm mov ax,2; int 33h; end;

procedure MausPos(var x,y,b : integer); assembler;
 asm	mov	ax,3
	int	33h
	les di,[x]; xchg cx,ax; stosw
	les di,[y]; xchg dx,ax; stosw
	les di,[b]; xchg bx,ax; stosw
 end;

procedure SetMausPos(x,y : integer); assembler;
 asm	mov	ax,4
	mov	cx,[x]
	mov	dx,[y]
	int	33h
 end;

procedure ButtonPressed(But:integer; VAR x,y,b,Count:integer); assembler;
 asm	mov	ax,5
	mov	bx,[But]
	int	33h
	les di,[b]; stosw
	les di,[x]; xchg cx,ax; stosw
	les di,[y]; xchg dx,ax; stosw
	les di,[count]; xchg bx,ax; stosw
 end;

procedure ButtonReleased(But: integer; VAR x,y,b,Count: integer); assembler;
 asm	mov	ax,6
	mov	bx,[But]
	int	33h
	les di,[b]; stosw
	les di,[x]; xchg cx,ax; stosw
	les di,[y]; xchg dx,ax; stosw
	les di,[count]; xchg bx,ax; stosw
 end;

procedure MausXRange (min, max : integer); assembler;
 asm	mov	ax,7
	mov	cx,[min]
	mov	dx,[max]
	int	33h
 end;

procedure MausYRange (min, max : integer); assembler;
 asm	mov	ax,8
	mov	cx,[min]
	mov	dx,[max]
	int	33h
 end;

procedure MausGrafikCursor(x,y : integer; CursorDaten :POINTER); assembler;
 asm	mov	ax,9
	mov	bx,[x]
	mov	cx,[y]
	les	dx,[CursorDaten]
	int	33h
 end;

procedure MausTextCursor(Wahl, BildM, CursM : integer); assembler;
 asm	mov	ax,10
	mov	bx,[Wahl]
	mov	cx,[BildM]
	mov	dx,[CursM]
	int	33h
 end;

procedure MausBewegung(var x,y:integer); assembler;
 asm	mov	ax,11
	int	33h
	les di,[x]; xchg cx,ax; stosw
	les di,[y]; xchg dx,ax; stosw
 end;

procedure MausProc(Maske : integer; ProcZeiger : POINTER); assembler;
 asm
	mov	ax,12
	mov	cx,[Maske]
	les	dx,[ProcZeiger]
	int	33h
 end;

procedure SetMausSpeed(sx, sy : integer); assembler;
 asm	mov	ax,15
	mov	cx,[sx]
	mov	dx,[sy]
	int	33h
 end;

procedure MausUpdate(X1, Y1, X2, Y2 : integer); assembler;
 asm	mov	ax,16
	mov	cx,[x1]
	mov	dx,[y1]
	mov	si,[x2]
	mov	di,[y2]
	int	33h
 end;

(****************************************************************************)
(* Erweiterte Mausfunktionen                                                *)
(****************************************************************************)

procedure SetNormMausCursor;
  begin MausTextCursor(0,$77FF,$7700); ShowMaus end;

function MausWhereX : integer;
  VAR x,y,b : integer;
  begin MausPos(x,y,b); MausWhereX:=succ(x div CursorBreite) end;

function MausWhereY : integer;
  VAR x,y,b : integer;
  begin MausPos(x,y,b); MausWhereY:=succ(y div CursorBreite) end;

function MausButtonPressed : integer;
  VAR x,y,b : integer;
  begin MausPos(x,y,b); MausButtonPressed:=b end;

procedure MausGotoXY( x,y : integer);
  begin SetMausPos(pred(x * CursorBreite), pred(y * CursorBreite)) end;

procedure MausWriteChar(c : char);
  begin HideMaus; Write(c); ShowMaus end;

procedure MausWrite(s : string);
  begin HideMaus; write(s); ShowMaus end;

procedure SetMausWindow(xmin, ymin, xmax, ymax : integer);
  begin
    MausXRange(pred(xmin * CursorBreite), pred(xmax * CursorBreite));
    MausYRange(pred(ymin * CursorBreite), pred(ymax * CursorBreite));
  end;

END.
Detected encoding: OEM (CP437)1
Wrong umlauts? - Assume file is ANSI (CP1252) encoded