V
vstudent
Guest
Уважаемые участники форума, объясните пожалуйста один момент. Заранее благодарю.
Задание
Написать программу, которая должна “озвучивать” клавиатуру, т.е. после запуска этой программы нажатие любой клавиши на клавиатуре будет сопровождаться звуковым сигналом. Клавиатура при этом должна оставаться работоспособной, т.е. продолжать выполнять свои основные функции в нормальном темпе.
Программа должна быть резидентной, т.е. оставаться в памяти после своего завершения.
В качестве пробного варианта длительность звукового сигнала и частоту задать константами в программе. Когда будет получена устойчивая работа программы, изменить её таким образом, чтобы длительность звукового сигнала и его частота задавались в качестве параметров при запуске программы.
Необходимо предоставить пользователю возможность “выключать” и “включать” заново звуковое сопровождение работы клавиш. Использовать для “выключения/включения” звука нестандартную комбинацию клавиш: сочетание нажатой клавиши <Shift> с какой-либо ещё, например, <Shift>+<Esc> …
Описание входных данных
Программа принимает два параметра: частоту и длительность звукового сигнала.
Параметры должны быть целочисленного типа и иметь неотрицательные значения.
Описание основных переменных и подпрограмм
Handler0 - переменная процедурного типа для запуска старой процедуры обработки прерывания клавиатуры.
chast - частота звукового сигнала.
dlit - длительность звукового сигнала.
b - указывает, надо ли озвучивать нажатие клавиш.
keys - хранит статусы специальных клавиш.
Handler – процедура для обработки прерываний клавиатуры.
Алгоритм решения
Прием и анализ входных параметров;
Если озвучивание включено, то при нажатии клавиш выдается звуковой сигнал.
Если нажата левая клавиша Shift и F4, то озвучивание клавиш включается, если было отключено или отключается, если было включено.
Текст программы
program lab1;
{$M $1000, 0, 0}
uses Crt, Dos;
var
Handler0: procedure;
chast: Integer; { Частота звукового сигнала }
dlit: Integer; { Длительность звукового сигнала }
b: Boolean; { Равно True, если надо озвучивать нажатия клавиш }
keys: Byte Absolute $0000:$0417;
{$F+}
{ Обработчик прерывания клавиатуры }
procedure Handler; interrupt;
begin
{ Проверяем нажатие ALT - K }
if (Port[$60] = 37 and keys)then
b := not b;
if b then begin
Sound(chast);
Delay(dlit);
NoSound;
end;
inline($9C);
Handler0;
end;
{$F-}
var
er1, er2: Integer;
begin
if ParamCount <> 2 then begin
Writeln('Должно быть два параметра:');
Writeln('(1) Частота звукового сигнала');
Writeln('(2) Длительность звукового сигнала (максим. значение - 1000)');
Readln;
Halt;
end;
Val(ParamStr(1), chast, er1);
Val(ParamStr(2), dlit, er2);
if (er1 <> 0) or (er2 <> 0) or (chast <= 0) or (dlit <= 0) or (dlit > 1000) then begin
Writeln('Неверные параметры');
Readln;
Halt;
end;
Writeln('Васильев Владимир');
Writeln('Left Shift-F4 - включение\выключение озвучивания');
b := True;
GetIntVec($9, @Handler0);
SetIntVec($9, Addr(Handler));
Keep(0);
end.
Копия экрана программы
Какие нужно сделать изменения, чтобы переключение режима выполнялось по нажатию Alt+K ?
Задание
Написать программу, которая должна “озвучивать” клавиатуру, т.е. после запуска этой программы нажатие любой клавиши на клавиатуре будет сопровождаться звуковым сигналом. Клавиатура при этом должна оставаться работоспособной, т.е. продолжать выполнять свои основные функции в нормальном темпе.
Программа должна быть резидентной, т.е. оставаться в памяти после своего завершения.
В качестве пробного варианта длительность звукового сигнала и частоту задать константами в программе. Когда будет получена устойчивая работа программы, изменить её таким образом, чтобы длительность звукового сигнала и его частота задавались в качестве параметров при запуске программы.
Необходимо предоставить пользователю возможность “выключать” и “включать” заново звуковое сопровождение работы клавиш. Использовать для “выключения/включения” звука нестандартную комбинацию клавиш: сочетание нажатой клавиши <Shift> с какой-либо ещё, например, <Shift>+<Esc> …
Описание входных данных
Программа принимает два параметра: частоту и длительность звукового сигнала.
Параметры должны быть целочисленного типа и иметь неотрицательные значения.
Описание основных переменных и подпрограмм
Handler0 - переменная процедурного типа для запуска старой процедуры обработки прерывания клавиатуры.
chast - частота звукового сигнала.
dlit - длительность звукового сигнала.
b - указывает, надо ли озвучивать нажатие клавиш.
keys - хранит статусы специальных клавиш.
Handler – процедура для обработки прерываний клавиатуры.
Алгоритм решения
Прием и анализ входных параметров;
Если озвучивание включено, то при нажатии клавиш выдается звуковой сигнал.
Если нажата левая клавиша Shift и F4, то озвучивание клавиш включается, если было отключено или отключается, если было включено.
Текст программы
program lab1;
{$M $1000, 0, 0}
uses Crt, Dos;
var
Handler0: procedure;
chast: Integer; { Частота звукового сигнала }
dlit: Integer; { Длительность звукового сигнала }
b: Boolean; { Равно True, если надо озвучивать нажатия клавиш }
keys: Byte Absolute $0000:$0417;
{$F+}
{ Обработчик прерывания клавиатуры }
procedure Handler; interrupt;
begin
{ Проверяем нажатие ALT - K }
if (Port[$60] = 37 and keys)then
b := not b;
if b then begin
Sound(chast);
Delay(dlit);
NoSound;
end;
inline($9C);
Handler0;
end;
{$F-}
var
er1, er2: Integer;
begin
if ParamCount <> 2 then begin
Writeln('Должно быть два параметра:');
Writeln('(1) Частота звукового сигнала');
Writeln('(2) Длительность звукового сигнала (максим. значение - 1000)');
Readln;
Halt;
end;
Val(ParamStr(1), chast, er1);
Val(ParamStr(2), dlit, er2);
if (er1 <> 0) or (er2 <> 0) or (chast <= 0) or (dlit <= 0) or (dlit > 1000) then begin
Writeln('Неверные параметры');
Readln;
Halt;
end;
Writeln('Васильев Владимир');
Writeln('Left Shift-F4 - включение\выключение озвучивания');
b := True;
GetIntVec($9, @Handler0);
SetIntVec($9, Addr(Handler));
Keep(0);
end.
Копия экрана программы
Какие нужно сделать изменения, чтобы переключение режима выполнялось по нажатию Alt+K ?