home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* UMOUSE.PAS *)
- (* *)
- (* ■ MouseObj: Kann auch benutzt werden, wenn keine Maus *)
- (* vorhanden ist. Das ist der Einfachheit halber für *)
- (* Programme, die dauernd eine Maus zeigen oder *)
- (* "verstekken" wollen. Will ein Programm eine Maus *)
- (* verlangen, so kann GetAvail abgefragt werden. - *)
- (* MouseObj stellt hier nur die nötigsten Methoden zur *)
- (* Verfügung. *)
- (* *)
- (* (c) 1991 by R.Reichert & toolbox *)
- (* ----------------------------------------------------- *)
- UNIT UMouse;
-
- INTERFACE
-
- USES UBase, Dos;
-
- CONST
- DoubleClickTime : BYTE = 5;
- MouseDelay : BYTE = 15;
-
- TYPE
- MouseObjPtr = ^MouseObj;
- MouseObj = OBJECT (Base)
-
- Regs : Registers;
- Avail, { Maus vorhanden ? }
- Visible, { Maus sichtbar ? }
- TextModus : BOOLEAN; { Textmodus ? }
-
- CONSTRUCTOR Init;
- PROCEDURE Hide; VIRTUAL;
- PROCEDURE Show; VIRTUAL;
- PROCEDURE SetArea (x1,y1,x2,y2 : INTEGER); VIRTUAL;
- PROCEDURE SetSpeed (xs, ys : INTEGER); VIRTUAL;
- PROCEDURE SetMouse (x, y : INTEGER); VIRTUAL;
- PROCEDURE TextMouse
- (Chr : CHAR; Col, BckCol : BYTE); VIRTUAL;
-
- FUNCTION GetX : INTEGER; VIRTUAL;
- FUNCTION GetY : INTEGER; VIRTUAL;
- FUNCTION GetAvail : BOOLEAN; VIRTUAL;
- FUNCTION GetVisible : BOOLEAN; VIRTUAL;
- DESTRUCTOR Done; VIRTUAL;
- END;
-
- IMPLEMENTATION
-
- CONSTRUCTOR MouseObj.Init;
- BEGIN
- Regs.AX := $00;
- Intr ($33, Regs);
- Avail := (Regs.AX=$FFFF); Visible := FALSE;
- TextModus := TRUE;
- END;
-
- PROCEDURE MouseObj.Hide;
- BEGIN
- IF Avail AND Visible THEN BEGIN
- Regs.AX := $02;
- Intr ($33, Regs);
- Visible := FALSE;
- END;
- END;
-
- PROCEDURE MouseObj.Show;
- BEGIN
- IF (Avail) AND (NOT Visible) THEN BEGIN
- Regs.AX := $01;
- Intr ($33, Regs);
- Visible := TRUE;
- END;
- END;
-
- PROCEDURE MouseObj.SetArea (x1, y1, x2, y2 : INTEGER);
- BEGIN
- IF Avail THEN BEGIN
- Regs.AX := $07;
- IF TextModus THEN BEGIN
- Regs.CX := Pred (x1) SHL 3;
- Regs.DX := Pred (x2) SHL 3;
- END ELSE BEGIN
- Regs.CX := x1;
- Regs.DX := x2;
- END;
- Intr ($33, Regs);
- Regs.AX := $08;
- IF TextModus THEN BEGIN
- Regs.CX := Pred (y1) SHL 3;
- Regs.DX := Pred (y2) SHL 3;
- END ELSE BEGIN
- Regs.CX := y1;
- Regs.DX := y2;
- END;
- Intr ($33, Regs);
- END;
- END;
-
- PROCEDURE MouseObj.SetSpeed (xs, ys : INTEGER);
- BEGIN
- IF Avail THEN BEGIN
- Regs.AX := $0F; Regs.CX := xs; Regs.DX := ys;
- Intr ($33, Regs);
- END;
- END;
-
- PROCEDURE MouseObj.SetMouse (x, y : INTEGER);
- BEGIN
- IF Avail THEN BEGIN
- Regs.AX := $04;
- IF TextModus THEN BEGIN
- Regs.CX := x SHR 3; Regs.DX := y SHR 3;
- END ELSE BEGIN
- Regs.CX := Pred (x); Regs.DX := Pred (y);
- END;
- Intr ($33, Regs);
- END;
- END;
-
- PROCEDURE MouseObj.TextMouse (Chr:CHAR; Col,BckCol : BYTE);
- VAR Attr : INTEGER;
- BEGIN
- IF Avail AND TextModus THEN BEGIN
- Regs.AX := $0A; Regs.BX := $00;
- Attr := Col OR (BckCol SHL 4);
- IF Col>15 THEN
- Attr := Attr OR 128;
- Regs.CX := Attr SHL 8;
- Regs.DX := Regs.CX + Ord (Chr);
- Intr ($33, Regs);
- END;
- END;
-
- FUNCTION MouseObj.GetX : INTEGER;
- BEGIN
- IF Avail THEN BEGIN
- Regs.AX := $03;
- Intr ($33, Regs);
- IF TextModus THEN
- GetX := Succ (Regs.CX SHR 3)
- ELSE
- GetX := Regs.CX;
- END ELSE
- GetX := -1;
- END;
-
- FUNCTION MouseObj.GetY : INTEGER;
- BEGIN
- IF Avail THEN BEGIN
- Regs.AX := $03;
- Intr ($33, Regs);
- IF TextModus THEN
- GetY := Succ (Regs.DX SHR 3)
- ELSE
- GetY := Regs.DX;
- END ELSE
- GetY := -1;
- END;
-
- FUNCTION MouseObj.GetAvail : BOOLEAN;
- BEGIN
- GetAvail := Avail;
- END;
-
- FUNCTION MouseObj.GetVisible : BOOLEAN;
- BEGIN
- GetVisible := Visible;
- END;
-
- DESTRUCTOR MouseObj.Done;
- BEGIN
- Hide;
- END;
-
- END.
- (* ----------------------------------------------------- *)
- (* Ende von UMOUSE.PAS *)
- (* ----------------------------------------------------- *)