home *** CD-ROM | disk | FTP | other *** search
- (* -------------------------------------------- *)
- (* MOUSE.PAS *)
- (* V 2.0 (c) 1988, 1989 TOOLBOX *)
- (* -------------------------------------------- *)
- UNIT Mouse;
-
- INTERFACE
-
- USES Crt, Dos;
-
- CONST
- MouseLButton = 1;
- MouseRButton = 2;
- MouseMButton = 4;
-
- TYPE
- MouseType = RECORD
- screen,
- mask : ARRAY[0..15] OF WORD;
- END;
- VAR
- MouseRegs : Registers;
-
- CONST (* der Maus-Pfeil *)
- Arrow : MouseType =
- (screen : ($ffff, $ffff, $ffff, $ffff,
- $ffff, $ffff, $ffff, $ffff,
- $ffff, $ffff, $ffff, $ffff,
- $ffff, $ffff, $ffff, $ffff);
- mask : ($8000, $e000, $f800, $fe00,
- $d800, $0c00, $0600, $0300,
- $0000, $0000, $0000, $0000,
- $0000, $0000, $0000, $0000));
-
- FUNCTION InitMouse : INTEGER;
- PROCEDURE ShowMouse;
- PROCEDURE HideMouse;
- PROCEDURE GetMouse(VAR x, y, buttons : INTEGER;
- text_mode : BOOLEAN);
- PROCEDURE SetMouse(x, y : INTEGER;
- text_mode : BOOLEAN);
- PROCEDURE WhereButtonPressed
- (button : INTEGER;
- text_mode : BOOLEAN;
- VAR x, y, n : INTEGER);
- PROCEDURE WhereButtonReleased
- (button : INTEGER;
- text_mode : BOOLEAN;
- VAR x, y, n : INTEGER);
- PROCEDURE SetMouseX(xmin, xmax : INTEGER;
- text_mode : BOOLEAN);
- PROCEDURE SetMouseY(ymin, ymax : INTEGER;
- text_mode : BOOLEAN);
- PROCEDURE SetMouseXY(x1, y1, x2, y2 : INTEGER;
- text_mode : BOOLEAN);
- PROCEDURE GraphicMouse(HotX, HotY : INTEGER;
- shape : MouseType);
- PROCEDURE TextMouse(MChar : CHAR;
- Color, BckGd : INTEGER);
- PROCEDURE GetMouseMotion(VAR dx, dy : INTEGER);
- PROCEDURE SetMouseMotion(dx, dy : INTEGER);
- FUNCTION ButtonPressed : BOOLEAN;
- FUNCTION WhichButton : INTEGER;
- PROCEDURE WaitMouse;
- PROCEDURE SetMouseSpeed(s : INTEGER);
- FUNCTION MouseinXY(x1, y1, x2, y2 : INTEGER;
- text_mode : BOOLEAN):
- BOOLEAN;
- PROCEDURE ScreenPage(page : INTEGER);
- FUNCTION WhichScreenPage : INTEGER;
-
- IMPLEMENTATION
-
- FUNCTION InitMouse : INTEGER;
- BEGIN
- InitMouse := 0; MouseRegs.ax := 0;
- Intr($33, MouseRegs);
- IF MouseRegs.ax = -1 THEN
- InitMouse := MouseRegs.bx;
- END;
-
- PROCEDURE ShowMouse;
- BEGIN
- MouseRegs.ax := 1; Intr($33, MouseRegs);
- END;
-
- PROCEDURE HideMouse;
- BEGIN
- MouseRegs.ax := 2; Intr($33, MouseRegs);
- END;
-
- PROCEDURE GetMouse(VAR x, y, buttons : INTEGER;
- text_mode : BOOLEAN);
-
- BEGIN
- MouseRegs.ax := 3; Intr($33, MouseRegs);
- x := MouseRegs.cx; y := MouseRegs.dx;
- buttons := MouseRegs.bx;
- IF text_mode THEN BEGIN
- x := Succ(x DIV 8); y := Succ(y DIV 8);
- END;
- END;
-
- PROCEDURE SetMouse(x, y : INTEGER;
- text_mode : BOOLEAN);
- BEGIN
- IF text_mode THEN BEGIN
- x := Pred(x) * 8; y := Pred(y) * 8;
- END;
- MouseRegs.ax := 4;
- MouseRegs.cx := x; MouseRegs.dx := y;
- Intr($33, MouseRegs);
- END;
-
- PROCEDURE WhereButtonPressed
- (button : INTEGER;
- text_mode : BOOLEAN;
- VAR x, y, n : INTEGER);
- BEGIN
- MouseRegs.ax := 5; MouseRegs.bx := button;
- Intr($33, MouseRegs);
- x := MouseRegs.cx; y := MouseRegs.dx;
- n := MouseRegs.bx;
- IF text_mode THEN BEGIN
- x := Succ(x DIV 8); y := Succ(y DIV 8);
- END;
- END;
-
- PROCEDURE WhereButtonReleased
- (button : INTEGER;
- text_mode : BOOLEAN;
- VAR x, y, n : INTEGER);
- BEGIN
- MouseRegs.ax := 6; MouseRegs.bx := button;
- Intr($33, MouseRegs);
- x := MouseRegs.cx; y := MouseRegs.dx;
- n := MouseRegs.bx;
- IF text_mode THEN BEGIN
- x := Succ(x DIV 8); y := Succ(y DIV 8);
- END;
- END;
-
- PROCEDURE SetMouseX(xmin, xmax : INTEGER;
- text_mode : BOOLEAN);
- BEGIN
- IF text_mode THEN BEGIN
- xmin := Pred(xmin) * 8; xmax := Pred(xmax)*8;
- END;
- MouseRegs.ax := 7;
- MouseRegs.cx := xmin; MouseRegs.dx := xmax;
- Intr($33, MouseRegs);
- END;
-
- PROCEDURE SetMouseY(ymin, ymax : INTEGER;
- text_mode : BOOLEAN);
- BEGIN
- IF text_mode THEN BEGIN
- ymin := Pred(ymin) * 8; ymax := Pred(ymax)*8;
- END;
- MouseRegs.ax := 8;
- MouseRegs.cx := ymin; MouseRegs.dx := ymax;
- Intr($33, MouseRegs);
- END;
-
- PROCEDURE SetMouseXY(x1, y1, x2, y2 : INTEGER;
- text_mode : BOOLEAN);
- BEGIN
- SetMouseX(x1, x2, text_mode);
- SetMouseY(y1, y2, text_mode);
- END;
-
- PROCEDURE GraphicMouse(HotX, HotY : INTEGER;
- shape : MouseType);
- BEGIN
- MouseRegs.ax := 9;
- MouseRegs.bx := HotX; MouseRegs.cx := HotY;
- MouseRegs.dx := Ofs(shape);
- MouseRegs.es := Seg(shape);
- Intr($33, MouseRegs);
- END;
-
- PROCEDURE TextMouse(MChar : CHAR;
- Color, BckGd : INTEGER);
- VAR attr : BYTE;
- BEGIN
- MouseRegs.ax := 10; MouseRegs.bx := 0;
- attr := Color OR (BckGd SHL 4);
- IF Color > White THEN attr := attr OR 128;
- MouseRegs.cx := attr SHL 8;
- MouseRegs.dx := MouseRegs.cx + Ord(MChar);
- Intr($33, MouseRegs);
- END;
-
- PROCEDURE GetMouseMotion(VAR dx, dy: INTEGER);
- BEGIN
- MouseRegs.ax := 11;
- Intr($33, MouseRegs);
- dx := MouseRegs.cx; dy := MouseRegs.dx;
- END;
-
- PROCEDURE SetMouseMotion(dx, dy: INTEGER);
- BEGIN
- MouseRegs.ax := 15;
- MouseRegs.cx := dx; MouseRegs.dx := dy;
- Intr($33, MouseRegs);
- END;
-
- FUNCTION ButtonPressed : BOOLEAN;
- BEGIN
- MouseRegs.ax := 3; Intr($33, MouseRegs);
- ButtonPressed := (MouseRegs.BX AND 7) <> 0;
- END;
-
- FUNCTION WhichButton : INTEGER;
- BEGIN
- MouseRegs.ax := 3; Intr($33, MouseRegs);
- WhichButton := MouseRegs.bx;
- END;
-
- PROCEDURE WaitMouse;
- VAR dx, dy: INTEGER;
- BEGIN
- REPEAT
- GetMouseMotion(dx, dy);
- UNTIL (dx <> 0) OR (dy <> 0) OR ButtonPressed;
- END;
-
- PROCEDURE SetMouseSpeed(s : INTEGER);
- BEGIN
- IF s IN [1..9] THEN
- SetMouseMotion(s*6, s*12);
- END;
-
- FUNCTION MouseinXY(x1, y1, x2, y2 : INTEGER;
- text_mode : BOOLEAN)
- : BOOLEAN;
- VAR temp, x, y : INTEGER;
- BEGIN
- IF x1 > x2 THEN BEGIN
- temp := x1; x1 := x2; x2 := temp;
- END;
- IF y1 > y2 THEN BEGIN
- temp := y1; y1 := y2; y2 := temp;
- END;
- GetMouse(x, y, temp, text_mode);
- MouseinXY := (x >= x1) AND (x <= x2) AND
- (y >= y1) AND (y <= y2);
- END;
-
- PROCEDURE ScreenPage(page : INTEGER);
- BEGIN
- MouseRegs.ax := 29;
- MouseRegs.bx := page;
- Intr($33, MouseRegs);
- END;
-
- FUNCTION WhichScreenPage : INTEGER;
- BEGIN
- MouseRegs.ax := 30;
- Intr($33, MouseRegs);
- WhichScreenPage := MouseRegs.bx;
- END;
-
- END.
- (* -------------------------------------------- *)
- (* Ende von MOUSE.PAS *)