Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №5 по О-Средам / lab_5_1 / LAB5
.PAS { "ЋЇҐа жЁ®лҐ баҐ¤л Ђ‘Ћ€“"
Copyrights 2003 "9331 super group"
‹ Ў®а в®а п а Ў®в 5
„Ґ¬®бва жЁп ЇаЁ¬ҐҐЁп ᥬ д®а®ў }
Program Lab5;
Uses Corout,CRT;
{-----------------------------------------------------}
Var SScr : TSemaphore; { ђ §аҐиҐЁҐ ўлў®¤ нЄа }
SCanRead : TSemaphore; { ђ §аҐиҐЁҐ з⥨Ґ б®®ЎйҐЁп }
SCanWrite : TSemaphore; { ђ §аҐиҐЁҐ § ЇЁбм б®®ЎйҐЁп }
myMessage : String;
Procedure WriteMessage; far;
Var Row : Byte;
Begin
Row := 5;
while true do begin
SCanRead.P; { †¤Ґ¬ а §аҐиҐЁп зЁв вм б®®ЎйҐЁҐ }
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,Row); Inc(Row);
Writeln('Џ®«г祮 б®®ЎйҐЁҐ: ',myMessage);
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
SCanWrite.V; { ђ §аҐи Ґ¬ ЇЁб вм ®ў®Ґ б®®ЎйҐЁҐ }
end {while};
End;
{-- Џа®бв®© бва®Є®ўл© । Єв®а Є®¬ ¤ --}
Procedure CommandLine; far;
Var CurKey:Char; { ’ҐЄгй п ¦ в п Є« ўЁи }
S:String; { ’ҐЄг饥 б®бв®пЁҐ Є®¬ ¤®© бва®ЄЁ }
Begin
Writeln('ESC - ‚л室 Ё§ Їа®Ја ¬¬л');
Writeln('------------------------');
S := '';
while true do begin
if KeyPressed then begin
CurKey := ReadKey;
Case CurKey of
#27: { ESC - ‚л室 Ё§ бЁб⥬л }
Begin
Writeln('‚л室 Ї® Є« ўЁиҐ ESC!');
ReadyList.Stop_Manager;
End;
#13: { Џ®б« вм б®®ЎйҐЁҐ }
Begin
myMessage:=S; S:='';
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,20);
Write(' ');
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
SCanRead.V; { ђ §аҐиЁ«Ё з⥨Ґ б®®ЎйҐЁп }
SCanWrite.P; { †¤Ґ¬ а §аҐиҐЁҐ § ЇЁбм б«Ґ¤го饣® б®®ЎйҐЁп }
End;
Else
S := S + CurKey;
End;
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,20);
Write(S);
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
end;
end {while};
End;
{-----------------------------------------------------}
Begin
{ €ЁжЁ «Ё§ жЁп ᥬ д®а®ў }
SScr.Init(1);
SCanRead.Init(0);
SCanWrite.Init(0);
{ „®Ў ў«пҐ¬ Їа®жҐббл }
ReadyList.Add_New_Process(WriteMessage);
ReadyList.Add_New_Process(CommandLine);
{ ‡ ЇгбЄ ¬®Ј®§ ¤ з®© бЁб⥬л }
ReadyList.Run_Manager;
{ ЋвзЁбвЄ Ї ¬п⨠ᥬ д®а®ў }
SScr.Done;
SCanRead.Done;
SCanWrite.Done;
{ ЋвзЁбвЄ Ї ¬пвЁ бЁб⥬ле ®зҐаҐ¤Ґ© }
Free_All_Subsystems;
End.
Copyrights 2003 "9331 super group"
‹ Ў®а в®а п а Ў®в 5
„Ґ¬®бва жЁп ЇаЁ¬ҐҐЁп ᥬ д®а®ў }
Program Lab5;
Uses Corout,CRT;
{-----------------------------------------------------}
Var SScr : TSemaphore; { ђ §аҐиҐЁҐ ўлў®¤ нЄа }
SCanRead : TSemaphore; { ђ §аҐиҐЁҐ з⥨Ґ б®®ЎйҐЁп }
SCanWrite : TSemaphore; { ђ §аҐиҐЁҐ § ЇЁбм б®®ЎйҐЁп }
myMessage : String;
Procedure WriteMessage; far;
Var Row : Byte;
Begin
Row := 5;
while true do begin
SCanRead.P; { †¤Ґ¬ а §аҐиҐЁп зЁв вм б®®ЎйҐЁҐ }
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,Row); Inc(Row);
Writeln('Џ®«г祮 б®®ЎйҐЁҐ: ',myMessage);
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
SCanWrite.V; { ђ §аҐи Ґ¬ ЇЁб вм ®ў®Ґ б®®ЎйҐЁҐ }
end {while};
End;
{-- Џа®бв®© бва®Є®ўл© । Єв®а Є®¬ ¤ --}
Procedure CommandLine; far;
Var CurKey:Char; { ’ҐЄгй п ¦ в п Є« ўЁи }
S:String; { ’ҐЄг饥 б®бв®пЁҐ Є®¬ ¤®© бва®ЄЁ }
Begin
Writeln('ESC - ‚л室 Ё§ Їа®Ја ¬¬л');
Writeln('------------------------');
S := '';
while true do begin
if KeyPressed then begin
CurKey := ReadKey;
Case CurKey of
#27: { ESC - ‚л室 Ё§ бЁб⥬л }
Begin
Writeln('‚л室 Ї® Є« ўЁиҐ ESC!');
ReadyList.Stop_Manager;
End;
#13: { Џ®б« вм б®®ЎйҐЁҐ }
Begin
myMessage:=S; S:='';
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,20);
Write(' ');
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
SCanRead.V; { ђ §аҐиЁ«Ё з⥨Ґ б®®ЎйҐЁп }
SCanWrite.P; { †¤Ґ¬ а §аҐиҐЁҐ § ЇЁбм б«Ґ¤го饣® б®®ЎйҐЁп }
End;
Else
S := S + CurKey;
End;
SScr.P; { ‡ Єал«Ё ᥬ д®а нЄа }
GotoXY(1,20);
Write(S);
SScr.V; { ЋвЄал«Ё ᥬ д®а нЄа }
end;
end {while};
End;
{-----------------------------------------------------}
Begin
{ €ЁжЁ «Ё§ жЁп ᥬ д®а®ў }
SScr.Init(1);
SCanRead.Init(0);
SCanWrite.Init(0);
{ „®Ў ў«пҐ¬ Їа®жҐббл }
ReadyList.Add_New_Process(WriteMessage);
ReadyList.Add_New_Process(CommandLine);
{ ‡ ЇгбЄ ¬®Ј®§ ¤ з®© бЁб⥬л }
ReadyList.Run_Manager;
{ ЋвзЁбвЄ Ї ¬п⨠ᥬ д®а®ў }
SScr.Done;
SCanRead.Done;
SCanWrite.Done;
{ ЋвзЁбвЄ Ї ¬пвЁ бЁб⥬ле ®зҐаҐ¤Ґ© }
Free_All_Subsystems;
End.