Лабораторная работа по дисциплине: Операционные системы

  • Автор темы vstudent
  • Дата начала
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.

Копия экрана программы

2019-12-07_212736.png

Какие нужно сделать изменения, чтобы переключение режима выполнялось по нажатию Alt+K ?
 
Вверх