uses dos, crt; Var wasShift, isRight: boolean; isCtrl, isAlt, do_exit: boolean; Old_09: Pointer; KbdIntVec: procedure; {$f+} Procedure New9; Interrupt; Var Scan: Byte; Begin Scan := Port[ $60 ]; wasShift := (Scan = 42) or (Scan = 54); if wasShift then isRight := (scan = 54) else begin isCtrl := (scan = 29); isAlt := (scan = 56); do_exit := (scan = $01); end; Inline( $9C ); KbdIntVec; End; {$f-} BEGIN GetIntVec($9, @KbdIntVec); GetIntVec($9, Old_09); SetIntVec($9, Addr(New9)); repeat if wasShift then begin if isRight then write('Right ') else write('Left '); writeln('Shift pressed'); wasShift := false; end else if isCtrl then begin writeln('Control pressed'); isCtrl := false end else if isAlt then begin writeln('Alt pressed'); isAlt := false end; if keypressed then begin writeln(readkey); end; until do_exit; SetIntVec($9, Old_09); END.