uses dos, crt;
Var
Shift, RightShift,PrintScr,CapsLook,ScrollLook: boolean;
Ctrl, Alt, exit,NumLook,F11,F12,Up: boolean;
Old_09: Pointer;
SvInt9: procedure;
{$f+}
Procedure New9; Interrupt;
Var
Scan: integer;
Begin
Scan := Port[ $60 ];
Shift := (Scan = 42) or (Scan = 54);
if Shift then
RightShift := (scan = 54)
else begin
Ctrl := (scan = 29);
Alt := (scan = 56);
CapsLook := (scan = 58);
NumLook := (scan = 170);
PrintScr := (scan = 55);
ScrollLook := (scan = 70);
F11:=(scan = 87);
F12:=(scan = 88);
NumLook:=(scan = 325);
Up:=(scan = 328);
exit := (scan = $01);
end;
Inline( $9C );
SvInt9;
End;
{$f-}
Procedure Klavisha;
var key: char;
begin
key:= readkey;
if key<>#0 then
begin
case key of
#8 : writeln ('BackSpace ');
#9 : writeln ('Tab ');
#13 : writeln ('Enter ');
#27 : writeln ('Esc ');
#32 : writeln ('Џа®ЎҐ« ');
else
writeln (Key);
end;
end
else
begin
key:=readkey;
case key of
#59..#68 : writeln('F',ord(key)-58);
#71: writeln('Home');
#72: writeln('Up');
#73: writeln('PageUp');
#75: writeln('Left');
#77: writeln('Right');
#79: writeln('End');
#80: writeln('Down');
#81: writeln('PageDown');
#82: writeln('Ins');
#83: writeln('Del');
end;
end;
end;
BEGIN
GetIntVec($9, @SvInt9);
SetIntVec($9, @New9);
repeat
if keypressed then
Klavisha
else
if Shift then begin
if RightShift
then write('Right ')
else write('left ');
writeln('Shift ');
Shift := false;
end
else
if Ctrl then begin
writeln('Control ');
Ctrl := false
end
else
if Alt then begin
writeln('Alt ');
Alt := false
end
else
if Capslook then begin
writeln('CapsLook ');
CapsLook := false;
end
else
if ScrollLook then begin
writeln('ScrollLook ');
ScrollLook := false;
end
else
if F11 then begin
writeln('F11 ');
F11 := false;
end
else
if F12 then begin
writeln('F12 ');
F12 := false;
end
else
if NumLook then begin
writeln('NumLook ');
NumLook := false;
end;
until exit;
SetIntVec($9, @SvInt9);
END.
Опрос клавиатуры |