home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SPEEDKEY.PAS *)
- (* Einstellung von Repeatrate und Verzögerungszeit *)
- (* bei AT-Tastaturen *)
- (* (c) 1989 TOOLBOX & Karsten Gieselmann *)
- (* ------------------------------------------------------ *)
- {$R-,S-,I-,V-,B-,N-} (* größtmögliche Geschwindigkeit! *)
- {$M 5120,0,0} (* wenig Stack, kein Heap! *)
-
- PROGRAM SpeedKey;
-
- USES
- TSR, Crt, Dos;
-
- CONST
- Version = 'SPEEDKEY 1.0';
- Hotkey = $1F00; (* Code der Aufruftaste *)
- HotkeyName = '<Alt>-S'; (* Aufruftasten-Bezeichnung *)
- RepeatCode : BYTE = 10; (* globale Variablen für *)
- DelayCode : BYTE = 1; (* Tastatureinstellung *)
-
- VAR
- Regs : Registers;
- VideoSegment : WORD;
-
- PROCEDURE SetSpeed(DelayCode, RepeatCode : BYTE);
- (* programmiert die Tastatur mit den Werten DelayCode *)
- (* und RepeatCode *)
- VAR
- Regs : Registers;
- BEGIN
- WITH Regs DO BEGIN
- AH := $03;
- AL := $05;
- BH := DelayCode;
- BL := RepeatCode;
- Intr($16, Regs);
- END;
- END;
-
- {$F+}
- PROCEDURE SpeedChoice;
- (* Pop-Up im großen Speichermodell compilieren! *)
- {$F-}
-
- TYPE
- ScreenType = ARRAY[1..25,1..80] OF WORD;
- DelayRange = 0.. 3; (* mögliche Daten-Bereiche *)
- RepeatRange = 0..31;
- CONST
- XPos = 25; YPos = 9;
- (* linke obere Ecke des Programm-Fensters *)
- FrameColor = $0F; (* Farbe für Fensterrahmen *)
- HeaderColor = $5F; (* Fensterüberschrift *)
- WindowColor = $07; (* Fenstergrund *)
- PickColor = $0F; (* Anfangsbuchstaben *)
- DataColor = $71; (* Datenfenster *)
- MenuColor = $1F; (* Menüzeile *)
-
- Frame : ARRAY[1..8] OF STRING[26] = (
- '╒════╡ ╞════╕',
- '│ │',
- '│ │',
- '│ │',
- '│ │',
- '│ │',
- '│ │',
- '╘════════════════════════╛');
-
- DelayStr : ARRAY[DelayRange] OF STRING[4] = (
- ' 250',' 500',' 750','1000');
-
- RepeatStr : ARRAY[RepeatRange] OF STRING[4] = (
- '30.0','26.7','24.0','21.8','20.0','18.5',
- '17.1','16.0','15.0','13.3','12.0','10.9',
- '10.0',' 9.2',' 8.6',' 8.0',' 7.5',' 6.7',
- ' 6.0',' 5.5',' 5.0',' 4.6',' 4.3',' 4.0',
- ' 3.7',' 3.3',' 3.0',
- ' 2.7',' 2.5',' 2.3',' 2.1',' 2.0');
- VAR
- Screen : ^ScreenType;
- (* Zeiger auf Bildschirmspeicher *)
- Buffer : ScreenType;
- (* Puffer zur Bildschirmsicherung *)
- PageOffset : WORD ABSOLUTE $0040:$004E;
- (* Offset der aktuellen Videoseite *)
- k : BYTE;
- Ch : CHAR;
-
- PROCEDURE WriteString(Col, Row : BYTE; S : String;
- Attr : BYTE);
- (* Ausgabe der Zeichenkette "S" bei (XPos,YPos) in *)
- (* der Farbe "Attr" *)
- VAR
- Index : BYTE;
- BEGIN
- FOR Index:=1 TO Length(S) DO
- Screen^[Row,Succ(Col)+Index] := Ord(S[Index]) +
- Attr SHL 8;
- END;
-
- BEGIN
- Screen := Ptr(VideoSegment + PageOffset SHR 4, 0);
- (* Adresse berechnen... *)
- Move(Screen^, Buffer, SizeOf(Buffer));
- (* ...und Bildschirm sichern *)
- FOR k:=1 TO 8 DO
- WriteString(XPos, YPos+Pred(k), Frame[k], FrameColor);
- WriteString(XPos+6, YPos, ' '+Version+' ', HeaderColor);
- FOR k:=1 TO 5 DO
- WriteString(XPos+1,YPos+k, ' ',
- WindowColor);
- WriteString(XPos+ 1, YPos+6, ' Dec: d,r Inc: D,R ',
- MenuColor);
- WriteString(XPos+ 4, YPos+2, 'D', PickColor);
- WriteString(XPos+ 5, YPos+2, 'elay', WindowColor);
- WriteString(XPos+19, YPos+2, 'ms', WindowColor);
- WriteString(XPos+ 4, YPos+4, 'R', PickColor);
- WriteString(XPos+ 5, YPos+4, 'epeat', WindowColor);
- WriteString(XPos+19, YPos+4, 'cps', WindowColor);
- REPEAT
- SetSpeed(DelayCode, RepeatCode);
- WriteString(XPos+12, YPos+2, ' '+DelayStr[DelayCode]+
- ' ', DataColor);
- WriteString(XPos+12, YPos+4, ' '+
- RepeatStr[RepeatCode]+' ', DataColor);
- Ch := ReadKey;
- CASE CH OF (* neue Werte wählen *)
- 'd': IF DelayCode > 0 THEN Dec(DelayCode);
- 'D': IF DelayCode < 3 THEN Inc(DelayCode);
- 'r': IF RepeatCode < 31 THEN Inc(RepeatCode);
- 'R': IF RepeatCode > 0 THEN Dec(RepeatCode);
- END;
- UNTIL NOT (Ch IN ['d','D','r','R']);
- Move(Buffer, Screen^, SizeOf(Buffer));
- (* Bildschirm restaurieren *)
- END;
-
- BEGIN
- WriteLn(^M^J, Version,
- ^M^J' (c) 1989 TOOLBOX & Karsten Gieselmann'^M^J,
- ^M^J'Programm installiert, aktivieren mit ',
- HotkeyName,'.');
- WITH Regs DO BEGIN
- AH := $0F;
- Intr($10, Regs); (* Bildschirmmodus holen *)
- IF AL = 7 THEN
- VideoSegment := $B000 (* Monochrome, Hercules *)
- ELSE
- VideoSegment := $B800; (* Farbgrafik *)
- END;
- SetSpeed(DelayCode, RepeatCode);
- (* Tastatur initialisieren *)
- MakeResident(@SpeedChoice, Hotkey);
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SPEEDKEY.PAS *)