Приведу также кое-что для тех, кто решил внять моему совету и отказаться от использования модуля CRT { Функции для работы с клавиатурой } {Возвращает в старшем байте скэнкод, а в младшем - ASCII код клавиши} Function ReadKeyWord:Word;inline($B4/$00/$CD/$16); {Делает все то же самое, что и ReadKey из CRT за исключением проверки на Ctrl-Break} Function ReadKey:char; const ExtendedCode:char=#0; begin if ExtendedCode<>#0 then begin ReadKey:=ExtendedCode; ExtendedCode:=#0; end else begin Key:=ReadKeyWord; if (Lo(key)=0)and(Hi(Key)<>3) then begin {Получен расширенный ASCII код} ExtendedCode:=chr(Hi(KeY)); end; ReadKey:=chr(Lo(Key)); end; end; - 4 - {Аналогично} Function KeyPressed:Boolean;inline( $B4/$01/ {Mov AH,1} $CD/$16/ {Int 16H} $75/$04/ {JNZ @@1} $B0/00/ {MOV AL,False} $EB/$02/ {JMP @@2} $B0/01);{@@1:MOV AL,True} {@@2:} {Функции ReadKey и KeyPressed, реализованные через DOS, а не через BIOS проверка на Ctrl-Break гарантируется. В TSR пользоваться не рекомендуется} Function DOSReadKey:char;inline {Всего 4 байта - короче чем межсегментный CALL} ($B4/$08 {MOV AH,8} /$CD/$21); {INT 21H} Function DOSKeyPressed:Boolean; ($B4/$0B {MOV AH,0BH} /$CD/$21 {INT 21H} /$24/$01); {AND AL,1;True = 1, а не $FF, как думает DOS, а False - действительно 0} Function ReadKeyWithEcho:char;inline($B$/$01/$CD/$21); {А вот два заменителя процедуры Delay} Procedure BiosDelay(TimeMS:Word); var BIOSTIMER:LongInt absolute $40:$6C; TStop:LongInt; begin TStop:=BIOSTimer+TimeMS div 55; While TStop>BiosTimer do inline($CD/$28); end; {Ожидает заданное время или нажатия любой клавиши, в т.ч Shift, Ctrl, Alt} {Код клавиши из буфера клавиатуры HE чистит} Procedure WaitUntilKey(TimeMS:Word); var BIOSTImer:LongInt absolure $40:$6C;{Таймер BIOS} KBDFiags:Byte absolute $40:$17;{Флаги клавиатуры} QTail:Word absolute $40:$1C;{Хвост буфера клавиатуры} TStop:LongInt; StartFlags:Byte; QStart:Word; begin TStop:=BIOSTimer+TimeMS div 55; QStart:=QTail; StartFlags:=KBDFlags; While (TStop>BiosTimer)and(QTail=QStart)and(KBDFlags=StartFlags) do inline($CD/$28); end; Вместо Sound в простейшем случае - если надо издать возмущенный писк, можно воспользоваться Write(#7); или Inline($B8/$07/$0E/$CD/$10), что то же самое. B.Б.Вагнер тел 135-46-61 E-Mail: vitus@agropc.msk.su