home *** CD-ROM | disk | FTP | other *** search
-
- UNIT AMOUSE; (* mouse/keyboard Routines *)
-
- INTERFACE
-
- CONST
- MouseInstalled : Boolean = FALSE;
-
- FUNCTION InitMouse : WORD;
- PROCEDURE ShowMouseCursor;
- PROCEDURE HideMouseCursor;
- PROCEDURE SetMouseWindow (X1, Y1, X2, Y2 : WORD);
- PROCEDURE GetMousePos (VAR X, Y, button : WORD);
- PROCEDURE SetMousePos (X, Y : WORD);
- PROCEDURE GetButtonPressInfo (VAR X, Y, Button, NumberOfPresses : WORD);
- PROCEDURE GetButtonRelInfo (VAR X, Y, Button, NumberOfReleases : WORD);
- PROCEDURE KeyOrButton (VAR Code, X, Y, Button : WORD; VAR Ch : CHAR);
- FUNCTION KEYPRESSED : BOOLEAN;
- FUNCTION MousePRESSED : BOOLEAN;
- FUNCTION MouseORKeyPRESSED : BOOLEAN;
-
- IMPLEMENTATION
-
- USES DOS;
-
- CONST
-
- MIO = $33; (* Mouse Services *)
- KBIO = $16; (* BIOS Keyboard *)
-
- VAR
- X, Y : WORD;
- reg : REGISTERS;
-
-
- FUNCTION KEYPRESSED : BOOLEAN; Assembler;
- ASM
- PUSH DS
- MOV AX, 40h
- MOV DS, AX
- CLI
- MOV AX, [1Ah]
- CMP AX, [1Ch]
- STI
- MOV AX, 0
- JZ @NoPress
- INC AX
- @NoPress :
- POP DS
- END;
-
-
- FUNCTION PollKey (VAR Status : WORD) : WORD;
- VAR s : WORD;
- BEGIN
- asm
- MOV AH, 01
- INT KBIO
- MOV @Result, AX
- LAHF
- AND AX, 64
- MOV S, AX
- END;
- Status := s;
- END;
-
- FUNCTION MousePressed : BOOLEAN;
- VAR B : WORD;
- BEGIN
- Asm
- MOV AX, $0003
- INT $33
- MOV B, BX
- END;
- MousePressed := (B <> 0);
- END;
-
- FUNCTION MouseORKeyPressed : BOOLEAN;
- VAR B : WORD;
- BEGIN
- Asm
- MOV AX, $0003
- INT $33
- MOV B, BX
- END;
- MouseORKeyPressed := (B <> 0) OR KeyPressed;
- END;
-
- PROCEDURE KeyOrButton (VAR Code, X, Y, Button : WORD; VAR Ch : CHAR);
- (* wait for key or mouse click and returns data *)
- VAR Status : WORD;
- BEGIN
- REPEAT
- Code := PollKey (Status);
- GetMousePos (X, Y, Button);
- UNTIL (Button <> 0) OR (Status = 0);
-
- IF (LO (Status) = 0) AND (HI (Status) <> 0) THEN
- Ch := CHR ( HI (Status) + 128 )
- ELSE
- Ch := CHR (LO (Status) );
- END;
-
- FUNCTION InitMouse : WORD;
- BEGIN
- Asm
- MOV AX, $0000
- INT MIO
- MOV @Result, AX
- END;
- END;
-
- PROCEDURE ShowMouseCursor; Assembler;
- Asm
- MOV AX, $0001
- INT MIO
- END;
-
- PROCEDURE HideMouseCursor; Assembler;
- Asm
- MOV AX, $0002
- INT MIO
- END;
-
- PROCEDURE GetMousePos (VAR X, Y, Button : WORD);
- VAR X1, Y1, b : WORD;
- BEGIN
- Asm
- MOV AX, $0003
- INT MIO
- MOV b, BX
- MOV X1, CX
- MOV Y1, DX
- END;
- X := X1;
- Y := Y1;
- Button := b;
- END;
-
- PROCEDURE SetMousePos (X, Y : WORD); Assembler;
- Asm
- MOV AX, $0004
- MOV CX, X
- MOV DX, Y
- INT MIO
- END;
-
- PROCEDURE GetButtonPressInfo (VAR X, Y, Button, NumberOfPresses : WORD);
- BEGIN
- reg. AX := $0005;
- reg. BX := Button;
- INTR (MIO, reg);
- Button := reg. AX;
- X := reg. CX;
- Y := reg. DX;
- NumberOfPresses := reg. BX
- END;
-
- PROCEDURE GetButtonRelInfo (VAR X, Y, Button, NumberOfReleases : WORD);
- BEGIN
- reg. AX := $0006;
- reg. BX := Button;
- INTR (MIO, reg);
- Button := reg. AX;
- X := reg. CX;
- Y := reg. DX;
- NumberOfReleases := reg. BX
- END;
-
- PROCEDURE SetMouseWindow (X1, Y1, X2, Y2 : WORD);
- BEGIN
- reg. AX := $0007;
- reg. CX := X1;
- reg. DX := X2;
- INTR ($33, reg);
- INC (reg. AX, 1);
- reg. CX := Y1;
- reg. DX := Y2;
- INTR (MIO, reg)
- END;
-
- BEGIN
- MouseInstalled := (InitMouse <> 0);
- END.