home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SCANSEND.PAS *)
- (* Residente Routine zum Ermitteln der Scancodes. *)
- (* (c) 1991 Martin Wölker & TOOLBOX *)
- (* ------------------------------------------------------ *)
- PROGRAM ScanSend;
- {$F-,R-,S-,I-,V-,B-,N-}
- {$M 4096, 0, 100}
-
- USES Crt, TSR, Dos;
-
- CONST
- Ver = 'ScanSend 1.2';
-
- Softkey : WORD = $6F00;
- tasten_string : STRING = '<ALT-F8>';
- mode : BYTE = 0;
-
- tab : ARRAY [0..15] OF CHAR =
- ('0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
-
- TYPE
- TScreen = ARRAY [1..25, 1..80] OF WORD;
-
- CONST
- z1='╔══════════════════════════════════════════════════╗';
- z2='║ ScanSend -- Ausgabe der Scancodes ║';
- z3='╠══════════════════════════════════════════════════╣';
- z4='║ Betätigen Sie die gewünschte Taste. ║';
- z5='╚══════════════════════════════════════════════════╝';
-
- VAR
- SCR_Segment : ^TScreen;
- scr_save : TScreen;
- Regs : Registers;
- sysx, sysy : BYTE;
- res : WORD;
- retcode : INTEGER;
-
- FUNCTION GetKey : WORD; { Eine Taste auslesen }
- BEGIN
- Regs.AH := mode;
- Intr($16, Regs);
- GetKey := Regs.AX;
- END;
-
- PROCEDURE Stuff_Kbd(key : CHAR);
- { Ein Zeichen in den Puffer schreiben }
- BEGIN
- Regs.AH := 5;
- Regs.CX := BYTE(key);
- Intr($16, Regs);
- END;
-
- PROCEDURE Save_Sys_Screen;
- { Bildschirminhalt und Cursorposition retten }
- BEGIN
- Move(SCR_Segment^, Scr_Save, 4000);
- SysX := WhereX;
- SysY := WhereY;
- END;
-
- PROCEDURE Restore_Sys_Screen;
- BEGIN
- Move(Scr_Save, SCR_Segment^, 4000);
- GotoXY(SysX, SysY);
- NormVideo;
- END;
-
- {$F+}
- PROCEDURE SelectKey;
- BEGIN
- Save_Sys_Screen;
- TextBackground(LightGray);
- TextColor(Blue);
- Window(14, 10, 65, 25);
- Write(z1, z2, z3, z4, z5);
- Window(1, 1, 80, 25);
- res := GetKey;
- Stuff_Kbd('$');
- Stuff_Kbd(tab[Hi(res) AND $F0 SHR 4]);
- Stuff_Kbd(tab[Hi(res) AND $0F ]);
- Stuff_Kbd(tab[Lo(res) AND $F0 SHR 4]);
- Stuff_Kbd(tab[Lo(res) AND $0F ]);
- Restore_Sys_Screen;
- END;
- {$F-}
-
- (* ------------------------------------------------------ *)
- (* Installationsteil *)
- (* Adressen ermitteln *)
- (* Interruptvektoren sichern *)
- (* resident beenden *)
- (* ------------------------------------------------------ *)
-
- PROCEDURE GetScr_Segment;
- { ermittelt Basisadresse des Bildspeichers im Textmodus }
- BEGIN
- IF Lo(LastMode) = 7 THEN
- SCR_Segment := Ptr($B000,$0000)
- ELSE
- SCR_Segment := Ptr($B800,$0000);
- END;
-
- PROCEDURE ParamCheck;
- { Aufrufparameter interpretieren }
- VAR
- s : STRING [10];
- i : BYTE;
- code : WORD;
- BEGIN
- FOR i := 1 TO ParamCount DO BEGIN
- s := ParamStr(i);
- IF (Pos('?', s) = 1) OR (Pos('h', s) = 1) OR
- (Pos('H', s) = 1) THEN BEGIN
- WriteLn(Ver);
- WriteLn(tasten_string, ' aktiviert die Routine');
- Halt(0);
- END ELSE IF (Pos('s', s) = 1) THEN BEGIN
- Move(s[3], s[1], Length(s)-2);
- s[0] := CHAR(Length(s)-2);
- tasten_string := s;
- END ELSE IF (Pos('k',s) = 1) THEN BEGIN
- Move(s[3], s[1], Length(s)-2);
- s[0] := CHAR(Length(s)-2);
- Val(s, code, retcode);
- IF retcode = 0 THEN softkey := code SHL 8;
- END ELSE BEGIN
- WriteLn('Syntax: lz [parameterliste]');
- WriteLn(' Parameter in beliebiger Reihenfolge');
- WriteLn;
- WriteLn('Parameter= ═╦═ k="scancode" der Taste');
- WriteLn(' ╠═ s="String" Bezeichnung');
- WriteLn(' ║');
- WriteLn(' ╚═══ ?,h,H Hilfe');
- Halt(1);
- END;
- END;
- END;
-
- BEGIN
- IF ParamCount <> 0 THEN ParamCheck;
- WriteLn(Ver, ' (c) 1991 Martin Wölker & TOOLBOX');
- WriteLn(' ', tasten_string, ' aktiviert die Routine');
- GetScr_Segment; { Aktueller Zustand }
- MakeResident(@selectkey, softkey); { Resident beenden }
- END.
- (* ------------------------------------------------------ *)
- (* Ende von KEYBOARD.PAS *)