home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* MREAD.PAS *)
- (* MReadCode ist eine Eingabefunktion, die neben den *)
- (* Tasten auch die Eingabeinformationen der Maus in *)
- (* ScanCodes übersetzt. *)
- (* (c) 1990 Michael Plewe & TOOLBOX *)
- (* ------------------------------------------------------ *)
- UNIT MREAD;
-
- INTERFACE
-
- USES Crt, Dos;
-
- VAR
- MouseInit : BOOLEAN;
-
- FUNCTION MReadCode : WORD;
- FUNCTION ReadCode : WORD;
-
- IMPLEMENTATION
-
- CONST
- CUp = $4800; { ScanCode für Cursor rauf }
- CDown = $5000; { ScanCode für Cursor runter }
- CLeft = $4B00; { ScanCode für Cursor links }
- CRight = $4D00; { ScanCode für Cursor rechts }
- MLeft = $000D; { ScanCode RETURN für linke Maustaste }
- MMiddle = $3B00; { ScanCode F1 für mittlere Maustaste }
- MRight = $001B; { ScanCode ESC für rechte Maustaste }
- XSense = 25; { Grenzwert für hor. Mausbewegung }
- YSense = 25; { Grenzwert für vert. Mausbewegung }
- BSense = 150; { Verzögerungsfaktor nach Maustaste }
-
- VAR
- MouseIntVec : Pointer;
- Regs : Registers;
-
- FUNCTION MouseOK : BOOLEAN;
- { Prüft, ob Maustreiber vorhanden ist }
- BEGIN
- GetIntVec($33, MouseIntVec);
- IF MouseIntVec <> NIL THEN BEGIN
- Regs.AX := 0;
- Intr($33, Regs);
- MouseOK := (Regs.AX = $FFFF);
- END;
- END;
-
- PROCEDURE GetMickeyCounter(VAR dx, dy : INTEGER);
- { Liefert vert. und hor. Mausbewegung relativ }
- { zur vorherigen Position }
- BEGIN
- Regs.AX := 11;
- Intr($33, Regs);
- dx := Regs.CX;
- dy := Regs.DX;
- END;
-
- FUNCTION WhichButton : INTEGER;
- { Liefert die Taste zurück, die gedrückt wurde }
- BEGIN
- Regs.AX := 3;
- Intr($33, Regs);
- WhichButton := Regs.BX;
- END;
-
- FUNCTION ReadCode : WORD;
- { Liest Taste aus Tastaturpuffer }
- BEGIN
- Regs.AX := 0;
- Intr($16, Regs);
- IF Regs.AL = 0 THEN
- ReadCode := Regs.AX
- ELSE
- ReadCode := Regs.AX AND $FF;
- END;
-
- FUNCTION MReadCode : WORD;
- { Liest Taste aus Tastaturpuffer unter }
- { Berücksichtigung der Maus }
- VAR
- dx, dy : INTEGER;
- Key : WORD;
- BEGIN
- Key := 0;
- IF MouseInit THEN BEGIN
- GetMickeyCounter(dx, dy);
- REPEAT
- GetMickeyCounter(dx, dy);
- IF dx > XSense THEN Key := CRight;
- IF dy > YSense THEN Key := CDown;
- IF DX < -(XSense) THEN Key := CLeft;
- IF dy < -(YSense) THEN Key := CUp;
- IF WhichButton > 0 THEN BEGIN
- CASE WhichButton OF
- 1 : Key := MLeft;
- 2 : Key := MRight;
- 4 : Key := MMiddle;
- END;
- Delay(BSense);
- END;
- UNTIL KeyPressed OR (Key > 0);
- END;
- IF Key > 0 THEN
- MReadCode := Key
- ELSE
- MReadCode := ReadCode;
- END;
-
- BEGIN
- MouseInit := MouseOK;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von MREAD.PAS *)
-