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
|
|