home *** CD-ROM | disk | FTP | other *** search
- {──────────────────────────────}
- { }
- { Mousebox, Version 1.1 }
- { Copyright (c) 1988, 89, 90 }
- { by }
- { }
- { Ralf Krause }
- { }
- { Leuchtenberger Str. 7a }
- { D-8480 Weiden i. d. Opf. }
- {──────────────────────────────}
-
- {$D-} { Debug information off }
- {$S-} { Stack checking off }
- {$I-} { I/O checking off }
- {$F+} { Force far calls on }
- {$O+} { Overlays allowed on }
-
- UNIT Mousebox;
-
- INTERFACE
-
- USES Dos;
-
-
- TYPE
- MouseCursor = RECORD
- ScreenMask,
- CursorMask : ARRAY[0..15] OF WORD;
- XHotSpot,
- YHotSpot : WORD;
- END;
-
- TextCursorType = RECORD
- HardWareCursor : BOOLEAN;
- ScreenMask,
- CursorMask : WORD;
- END;
-
- CONST
- MouseIntr = $33; { Mouse-Interrupt }
-
- Clock : MouseCursor = (ScreenMask : ($0000,$0000,$0000,$0000,
- $8001,$C003,$E007,$F00F,
- $E007,$C003,$8001,$0000,
- $0000,$0000,$0000,$FFFF);
- CursorMask : ($0000,$7FFE,$6006,$300C,
- $1818,$0C30,$0660,$1FF0,
- $0660,$0C30,$1818,$300C,
- $6006,$7FFE,$0000,$0000);
- XHotSpot : 7;
- YHotSpot : 7);
-
- Arrow : MouseCursor = (ScreenMask : ($3FFF,$1FFF,$0FFF,$07FF,
- $03FF,$01FF,$00FF,$007F,
- $003F,$001F,$00FF,$10FF,
- $30FF,$F87F,$F87F,$FC3F);
- CursorMask : ($0000,$4000,$6000,$7000,
- $7800,$7C00,$7E00,$7F00,
- $7F80,$7FC0,$7C00,$4600,
- $0600,$0300,$0300,$0180);
- XHotSpot : 7;
- YHotSpot : 7);
-
- Hand : MouseCursor = (ScreenMask : ($F3FF,$E1FF,$E1FF,$E1FF,
- $E1FF,$E001,$E000,$E000,
- $0000,$0000,$0000,$0000,
- $0000,$0000,$0000,$0000);
- CursorMask : ($0C00,$1200,$1200,$1200,
- $1200,$13B6,$1249,$1249,
- $7249,$9249,$9249,$9249,
- $8001,$8001,$8001,$FFFF);
- XHotSpot : 7;
- YHotSpot : 7);
-
- Plus : MouseCursor = (ScreenMask : ($FC3F,$FC3F,$FC3F,$0000,
- $0000,$0000,$FC3F,$FC3F,
- $FC3F,$FFFF,$FFFF,$FFFF,
- $FFFF,$FFFF,$FFFF,$FFFF);
- CursorMask : ($0000,$0180,$0180,$0180,
- $7FFE,$0180,$0180,$0180,
- $0000,$0000,$0000,$0000,
- $0000,$0000,$0000,$0000);
- XHotSpot : 7;
- YHotSpot : 7);
-
- UpArrow : MouseCursor = (ScreenMask : ($F9FF,$F0FF,$E07F,$E07F,
- $C03F,$C03F,$801F,$801F,
- $000F,$000F,$F0FF,$F0FF,
- $F0FF,$F0FF,$F0FF,$F0FF);
- CursorMask : ($0000,$0600,$0F00,$0F00,
- $1F80,$1F80,$3FC0,$3FC0,
- $7FE0,$0600,$0600,$0600,
- $0600,$0600,$0600,$0000);
- XHotSpot : 7;
- YHotSpot : 7);
-
- SmallArrow : MouseCursor = (ScreenMask : ($FFFF,$FFFF,$FFFF,$FFFF,
- $FFFF,$FFFF,$FFFF,$FFFF,
- $FFFF,$FFFF,$FFFF,$FFFF,
- $FFFF,$FFFF,$FFFF,$FFFF);
- CursorMask : ($4000,$7000,$7C00,$7F00,
- $6C00,$0600,$0300,$0180,
- $0000,$0000,$0000,$0000,
- $0000,$0000,$0000,$0000);
- XHotSpot : 7;
- YHotSpot : 7);
-
-
- FUNCTION InitMouse : BOOLEAN;
- PROCEDURE ResetMouse;
- PROCEDURE ShowCursor;
- PROCEDURE HideCursor;
- FUNCTION GetXPosition : WORD;
- FUNCTION GetYPosition : WORD;
- FUNCTION GetXTextPosition : WORD;
- FUNCTION GetYTextPosition : WORD;
- FUNCTION LeftButton : BOOLEAN;
- FUNCTION RightButton : BOOLEAN;
- FUNCTION MiddleButton : BOOLEAN;
- FUNCTION MouseMoved : BOOLEAN;
- FUNCTION MouseLeftMoved : BOOLEAN;
- FUNCTION MouseRightMoved : BOOLEAN;
- FUNCTION MouseUpMoved : BOOLEAN;
- FUNCTION MouseDownMoved : BOOLEAN;
- FUNCTION LeftButtonPressed : WORD;
- FUNCTION RightButtonPressed : WORD;
- FUNCTION MiddleButtonPressed : WORD;
- FUNCTION LeftButtonReleased : WORD;
- FUNCTION RightButtonReleased : WORD;
- FUNCTION MiddleButtonReleased : WORD;
- PROCEDURE SetXYMouse(VAR x, y : WORD);
- PROCEDURE SetXRange(VAR XMin, XMax : WORD);
- PROCEDURE SetYRange(VAR YMin, YMax : WORD);
- PROCEDURE SetGraphicCursor(VAR GraphicCursor : MouseCursor);
- PROCEDURE SetTextCursor(VAR TextCursor : TextCursorType);
- FUNCTION GetXMickey : WORD;
- FUNCTION GetYMickey : WORD;
- PROCEDURE SetXYMickey(VAR XMickey, YMickey : WORD);
- PROCEDURE SetMouseSpeed(VAR MouseSpeed : WORD);
-
- IMPLEMENTATION
-
-
- FUNCTION InitMouse : BOOLEAN; { Mouse-Treiber initialisieren }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 0;
- Intr(MouseIntr, MouseRegister);
- InitMouse := ODD(MouseRegister.AX);
- END;
-
-
- PROCEDURE ResetMouse; { Mouse-Treiber zurücksetzen }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 0;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- PROCEDURE ShowCursor; { Mousecursor einschalten }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 1;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- PROCEDURE HideCursor; { Mousecursor abschalten }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 2;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- FUNCTION GetXPosition : WORD; { Horizontale Mouse-Position er- }
- { mitteln }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 3;
- Intr(MouseIntr, MouseRegister);
- GetXPosition := MouseRegister.CX;
- END;
-
-
- FUNCTION GetYPosition : WORD; { Vertikale Mouse-Position er- }
- { mitteln }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 3;
- Intr(MouseIntr, MouseRegister);
- GetYPosition := MouseRegister.DX;
- END;
-
-
- FUNCTION GetXTextPosition : WORD; { Horizontale Mouse-Position in }
- { Textkoordinaten ermitteln }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 3;
- Intr(MouseIntr, MouseRegister);
- GetXTextPosition := (MouseRegister.CX + 8) DIV 8
- END;
-
- FUNCTION GetYTextPosition : WORD; { Vertikale Mouse-Position in }
- { Textkoordinaten ermitteln }
-
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 3;
- Intr(MouseIntr, MouseRegister);
- GetYTextPosition := (MouseRegister.DX + 8) DIV 8
- END;
-
-
- FUNCTION LeftButton : BOOLEAN; { Linke Mouse-Taste gedrückt ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 5;
- MouseRegister.BX := 0;
- Intr(MouseIntr, MouseRegister);
- LeftButton := ODD(MouseRegister.AX);
- END;
-
-
- FUNCTION RightButton : BOOLEAN; { Rechte Mouse-Taste gedrückt ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 5;
- MouseRegister.BX := 1;
- Intr(MouseIntr, MouseRegister);
- RightButton := ODD(MouseRegister.AX SHR 1);
- END;
-
-
- FUNCTION MiddleButton : BOOLEAN; { Mittlere Mouse-Taste gedrückt ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 5;
- MouseRegister.BX := 2;
- Intr(MouseIntr, MouseRegister);
- MiddleButton := ODD(MouseRegister.AX SHR 2);
- END;
-
-
- FUNCTION MouseMoved : BOOLEAN; { Testet ob die Mouse bewegt wurde }
- { wenn ja ist das Ergebnis TRUE }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 11;
- Intr(MouseIntr, MouseRegister);
- IF (MouseRegister.CX <> 0) AND (MouseRegister.DX <> 0) THEN
- MouseMoved := TRUE
- ELSE
- MouseMoved := FALSE;
- END;
-
-
- FUNCTION MouseLeftMoved : BOOLEAN; { Testet ob die Mouse nach links }
- { bewegt wurde, wenn ja ist das }
- { Ergebnis TRUE }
-
- VAR
- MouseRegister : Registers;
- Word2Int : INTEGER;
-
- BEGIN
- MouseRegister.AX := 11;
- Intr(MouseIntr, MouseRegister);
- Word2Int := MouseRegister.CX;
- IF (Word2Int < 0) THEN
- MouseLeftMoved := TRUE
- ELSE
- MouseLeftMoved := FALSE;
- END;
-
-
- FUNCTION MouseRightMoved : BOOLEAN; { Testet ob die Mouse nach rechts }
- { bewegt wurde, wenn ja ist das }
- { Ergebnis TRUE }
-
- VAR
- MouseRegister : Registers;
- Word2Int : INTEGER;
-
- BEGIN
- MouseRegister.AX := 11;
- Intr(MouseIntr, MouseRegister);
- Word2Int := MouseRegister.CX;
- IF (Word2Int > 0) THEN
- MouseRightMoved := TRUE
- ELSE
- MouseRightMoved := FALSE;
- END;
-
-
- FUNCTION MouseUpMoved : BOOLEAN; { Testet ob die Mouse nach oben }
- { bewegt wurde, wenn ja ist das }
- { Ergebnis TRUE }
-
- VAR
- MouseRegister : Registers;
- Word2Int : INTEGER;
-
- BEGIN
- MouseRegister.AX := 11;
- Intr(MouseIntr, MouseRegister);
- Word2Int := MouseRegister.DX;
- IF (Word2Int < 0) THEN
- MouseUpMoved := TRUE
- ELSE
- MouseUpMoved := FALSE;
- END;
-
-
- FUNCTION MouseDownMoved : BOOLEAN; { Testet ob die Mouse nach unten }
- { bewegt wurde, wenn ja ist das }
- { Ergebnis TRUE }
-
- VAR
- MouseRegister : Registers;
- Word2Int : INTEGER;
-
- BEGIN
- MouseRegister.AX := 11;
- Intr(MouseIntr, MouseRegister);
- Word2Int := MouseRegister.DX;
- IF (Word2Int > 0) THEN
- MouseDownMoved := TRUE
- ELSE
- MouseDownMoved := FALSE;
- END;
-
-
- FUNCTION LeftButtonPressed : WORD; { wie oft wurde die linke Mouse- }
- { Taste seit der letzten Abfrage }
- { gedrückt ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 5;
- MouseRegister.BX := 0;
- Intr(MouseIntr, MouseRegister);
- LeftButtonPressed := MouseRegister.BX;
- END;
-
-
- FUNCTION RightButtonPressed : WORD; { wie oft wurde die rechte Mouse- }
- { Taste seit der letzten Abfrage }
- { gedrückt ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 5;
- MouseRegister.BX := 1;
- Intr(MouseIntr, MouseRegister);
- RightButtonPressed := MouseRegister.BX;
- END;
-
-
- FUNCTION MiddleButtonPressed : WORD; { wie oft wurde die mittlere }
- { Mouse-Taste seit der letzten }
- { Abfrage gedrückt ? }
-
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 5;
- MouseRegister.BX := 2;
- Intr(MouseIntr, MouseRegister);
- MiddleButtonPressed := MouseRegister.BX;
- END;
-
-
- FUNCTION LeftButtonReleased : WORD; { wie oft wurde die linke Mouse- }
- { Taste seit der letzten Abfrage }
- { losgelassen ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 6;
- MouseRegister.BX := 0;
- Intr(MouseIntr, MouseRegister);
- LeftButtonReleased := MouseRegister.BX;
- END;
-
-
- FUNCTION RightButtonReleased : WORD; { wie oft wurde die rechte Mouse- }
- { Taste seit der letzten Abfrage }
- { losgelassen ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 6;
- MouseRegister.BX := 1;
- Intr(MouseIntr, MouseRegister);
- RightButtonReleased := MouseRegister.BX;
- END;
-
-
- FUNCTION MiddleButtonReleased : WORD; { wie oft wurde die mittlere }
- { Mouse-Taste seit der letzten }
- { Abfrage losgelassen ? }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 6;
- MouseRegister.BX := 2;
- Intr(MouseIntr, MouseRegister);
- MiddleButtonReleased := MouseRegister.BX;
- END;
-
-
- PROCEDURE SetXYMouse(VAR x,y : WORD); { Mouse-Cursor positionieren }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 4;
- MouseRegister.CX := x;
- MouseRegister.DX := y;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- PROCEDURE SetXRange(VAR XMin,XMax : WORD); { minimale und maximale hori- }
- { zontale Position setzen }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 7;
- MouseRegister.CX := XMin;
- MouseRegister.DX := XMax;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- PROCEDURE SetYRange(VAR YMin,YMax : WORD); { minimale und maximale verti- }
- { kale Position setzen }
-
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 8;
- MouseRegister.CX := YMin;
- MouseRegister.DX := YMax;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- PROCEDURE SetGraphicCursor { Mouse-Cursor für Grafik- }
- (VAR GraphicCursor : MouseCursor); { modus definieren }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 9;
- MouseRegister.BX := GraphicCursor.XHotSpot;
- MouseRegister.CX := GraphicCursor.YHotSpot;
- MouseRegister.DX := OFS(GraphicCursor);
- MouseRegister.ES := SEG(GraphicCursor);
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- PROCEDURE SetTextCursor { Mouse-Cursor für Text- }
- (VAR TextCursor : TextCursorType); { modus definieren }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 10;
- IF TextCursor.HardWareCursor = TRUE THEN
- MouseRegister.BX := 1
- ELSE
- MouseRegister.BX := 0;
-
- MouseRegister.CX := TextCursor.ScreenMask;
- MouseRegister.DX := TextCursor.CursorMask;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- FUNCTION GetXMickey : WORD; { horizontalen Mausbewegungs- }
- { (Mickey-)Zähler lesen }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 11;
- Intr(MouseIntr, MouseRegister);
- GetXMickey := MouseRegister.CX;
- END;
-
-
- FUNCTION GetYMickey : WORD; { vertikalen Mausbewegungs- }
- { (Mickey-)Zähler lesen }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 11;
- Intr(MouseIntr, MouseRegister);
- GetYMickey := MouseRegister.DX;
- END;
-
-
- PROCEDURE SetXYMickey { horizontale und vertikale }
- (VAR XMickey, YMickey : WORD); { Mickey-Einheit setzen }
-
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 15;
- MouseRegister.CX := XMickey;
- MouseRegister.DX := YMickey;
- Intr(MouseIntr, MouseRegister);
- END;
-
-
- PROCEDURE SetMouseSpeed(VAR MouseSpeed : WORD); { Schwellenwert für die }
- { doppelte Cursor-Ge- }
- { schwindigkeit in }
- { Mickey/Sekunde }
- VAR
- MouseRegister : Registers;
-
- BEGIN
- MouseRegister.AX := 19;
- MouseRegister.DX := MouseSpeed;
- Intr(MouseIntr, MouseRegister);
- END;
-
- END.