-- Rolety.adb
with Ada.Text_Io; use Ada.Text_Io;
with Ada.Calendar; use Ada.Calendar;
with Nt_Console; use Nt_Console;
procedure Rolety is
type Bit is mod 2;
type Rol is new Integer range 0..100;
Roleta: Rol := 0;
Stan: Bit := 0;
Koniec: Boolean := False;
Gora: Boolean := True;
task Sterowanie is
entry Start;
end Sterowanie;
task Symulacja is
end Symulacja;
task body Sterowanie is
Zn: Character;
begin
accept Start;
loop
Get_Immediate(Zn);
case Character'Pos(Zn) is
when 13 =>
Stan := Stan + 1;
if Stan = 0 and Gora = False then Gora := True;
elsif Stan = 0 then Gora := False;
end if;
when 27 =>
Koniec := True; exit;
when others => null;
end case;
end loop;
task body Symulacja is
Czas: Ada.Calendar.Time;
Przerwa: Duration := 0.1;
Czas := Ada.Calendar.Clock;
while not Koniec loop
Goto_Xy(5,5);
Put_Line(" Rolety : " & Roleta'Img & " ");
if Stan = 1 then
if Gora = True and Roleta < 100 then Roleta := Roleta + 1;
elsif Gora = False and Roleta >0 then Roleta := Roleta - 1;
elsif Roleta = 100 then Stan := 0; Gora := False;
elsif Roleta = 0 then Stan := 0; Gora := True;
Czas := Czas + Przerwa;
delay until Czas;
Sterowanie.Start;
Symulacja.Start;
end Rolety;
-- Klawiatura.adb
with Ada.Interrupts; use Ada.Interrupts;
--with Ada_Interrupts_Names; use Ada_Interrupts_Names;
with nt_console; use nt_console;
procedure Klawiatura is
protected Obsluga is
-- procedure Steruj;
--pragma Attach_Handler(Steruj, 1);
entry Nacisniety(Znak: Character);
private
Warunekb: Boolean := True;
end Obsluga;
protected body Obsluga is
procedure Steruj is
null;
end Steruj;
entry Nacisniety(Znak: Character) when Warunekb is
Goto_Xy(25,4);
Put("" & Znak); delay 1.0;
end Nacisniety;
Goto_Xy(5,4);
Put_Line(" Nacisnij klawisz : ");
if Zn = 'k' then exit; end if;
if Zn = '0' or Zn = '1' or Zn = '2' or Zn = '3' or Zn = '4' or Zn = '5' or Zn = '6' or Zn = '7' or Zn = '8' or Zn = '9' or Zn = '*' or Zn = '#' then
Obsluga.Nacisniety(Zn); end if;
end Klawiatura;
-- Generator fali prostokatnej
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
with Gen; use Gen;
procedure Falaprostokatna is
Czestotliwosc, Cz2: Duration := 1.0;
Wypelnienie: Duration := 50.0;
entry Restart;
task Gen is
entry Cz;
entry W;
entry Stop;
end Gen;
protected Generowanie is
procedure Generuj;
end Generowanie;
case Zn is
when 'c'
=> Gen.Cz; accept Restart;
when 'w'
=> Gen.W; accept Restart;
when Character'Val(27)
=> Koniec := True; Gen.Stop;
exit;
when others
=> null;
exception
when others => Put_Line("Blad w zadaniu 'Sterowanie'");
task body Gen is
Czestot,Czestot2: Float;
Wspol: Float;
select
accept Cz;
Goto_Xy(5,8); Put_Line(" Podaj czestotliowsc : ");
Get(Czestot);
if Czestot > 1.0 then Czestot := 1.0;
elsif Czestot < 0.001 then Czestot := 0.001;
Wspol := Float(Wypelnienie);
Wspol := Wspol/100.0;
Czestot2 := Czestot*(1.0-Wspol);
Czestot2 := Czestot2/Wspol;
Cz2 := Duration(Czestot2);
Czestotliwosc := Duration(Czestot);
Clear_Screen(Black);
--Sterowanie.Restart;
or
accept W;
Goto_Xy(5,9); Put_Line(" Podaj wspolczynnik wypelnienia : ");
Get(Wspol);
if Wspol > 100.0 then Wspol := 100.0;
elsif Wspol < 0.0 then Wspol := 0.0;
Czestot := Float(Czestotliwosc);
Wspol := Wspol*100.0;
Wypelnienie := Duration(Wspol);
accept Stop;
end select;
Sterowanie.Restart;
protected body Generowanie is
procedure Generuj is
Zmienna: Bit := 0;
Zmiana: Ada.Calendar.Time;
Zmiana := Ada.Calendar.Clock;
if Koniec = True then exit; end if;
Zmienna := Zmienna + 1;
Goto_Xy(15,5); Put_Line("" & Wypelnienie'Img & " " & Czestotliwosc'Img);
Goto_Xy(5,10); Put_Line(" esc - zakonczenie programu ");
Goto_Xy(5,12); Put_Line(" c - zmiana czestotliwosci ");
Goto_Xy(5,11); Put_Line(" w - zmiana wsp wypalnienia ");
Goto_Xy(5,5); Put_Line("" & Zmienna'Img);
if Zmienna = 1 then Zmiana := Zmiana + Czestotliwosc;
else Zmiana := Zmiana + Cz2;
delay until Zmiana;
end Generuj;
Generowanie.Generuj;
end Falaprostokatna;
-- Budzik.adb
with Ada.Text_IO; use Ada.Text_IO;
procedure Budzik is
type Minsek is mod 60;
type Godz is mod 24;
M,S,Sb,Mb: Minsek := 0;
G,Gb: Godz := 6;
Przerwa: Duration := 1.0;
Godzina: Ada.Calendar.Time;
Alarm: Boolean := False;
task Zegar is
end Zegar;
task body Zegar is
Put_Line(" Ustaw godzine alarmu : ");
Goto_Xy(5,8);
Put_Line(" g - zmiana godziny ");
Goto_Xy(5,9);
Put_Line(" m - zmiana minuty ");
Goto_Xy(5,10);
Put_Line(" s - start budzika ");
Goto_Xy(5,6);
Put_Line("" & Gb'Img & " : " & Mb'Img & " : " & Sb'Img & " ");
if Zn = 'g' then Gb := Gb + 1;
elsif Zn = 'm' and Mb = 59 then Gb := Gb + 1; Mb := Mb + 1;
elsif Zn = 'm' then Mb := Mb + 1;
elsif Zn = 's' then exit;
Goto_Xy(5,11);
Put_Line(" k - wylacz budzik ");
Godzina := Ada.Calendar.Clock;
Goto_Xy(5,7);
Put_Line("" & G'Img & " : " & M'Img & " : " & S'Img & " ");
if M = 59 and S = 59 then G := G + 1; M := M + 1; S := S + 1;
elsif S = 59 then M := M + 1; S := S + 1;
else S := S + 1;
if G = Gb and M = Mb and S = Sb then Alarm := True; end if;
if Alarm = True then
Goto_Xy(5,12);
Set_Foreground(Red);
Put_Line(" w - wylacz alarm ");
else
Put_Line(" ");
Set_Foreground(White);
Godzina := Godzina + Przerwa;
delay until Godzina;
if Zn = '1' then Przerwa := 1.0;
elsif Zn = '2' then Przerwa := 0.1;
elsif Zn = '3' then Przerwa := 0.01;
elsif Zn = '4' then Przerwa := 0.001;
elsif Zn = '5' then Przerwa := 0.0001;
elsif Zn = 'w' and Alarm = True then Alarm := False;
elsif Zn = 'k' then Koniec := True; exit; end if;
...
sliwak