http://www.adaconcept.com/programs/ontozorendszeres_szimulacio/szimulacio-ontozorendszer-megjelenito-muveletek.adb
with Ada.Text_IO;
with Hiba_Kezelo;
with Szimulacio.Vezerles;
with Szimulacio.Ontozorendszer.Elemek.Vizforras;
with Szimulacio.Segedmuveletek;
package body Szimulacio.Ontozorendszer.Megjelenito.Muveletek is
-- segedfuggveny
-- szorosan a megjelenito csomaghoz tartozik
function Stringbe_Masol(Mit : String) return String is
Vissza : String(1 .. Maximalis_Oszlopszam) := (others => Ures_Hely_Karakter);
begin
Szimulacio.Segedmuveletek.Stringbe_Masol(Vissza, Mit);
return Vissza;
end Stringbe_Masol;
type String_Mutato_Tipus is access String;
type Objektum_Megjelenito_Tipus is record
Nev : String_Mutato_Tipus;
Megjelenitheto : Szimulacio.Ontozorendszer.Elemek.Megjelenitheto_Absztrakt_Mutato_Tipus;
end record;
type Objektum_Megjelenitok_Tomb_Tipus is array(1 .. Regisztralhato_Megjelenitok_Maximalis_Szama) of Objektum_Megjelenito_Tipus;
Objektum_Megjelenitok : Objektum_Megjelenitok_Tomb_Tipus;
om : Positive range 1 .. Regisztralhato_Megjelenitok_Maximalis_Szama + 1 := 1; -- az Objektum_Megjelenitok mutatoja
procedure Regisztral(Nev : String; Megjelenitheto : Szimulacio.Ontozorendszer.Elemek.Megjelenitheto_Absztrakt_Mutato_Tipus) is
begin
if om = Regisztralhato_Megjelenitok_Maximalis_Szama + 1 then
Hiba_Kezelo.Program_Leallitas("A regisztralt megjelenitok szama tullepte a Regisztralhato_Megjelenitok_Maximalis_Szama konstans erteket!");
end if;
Objektum_Megjelenitok(om) := (new String'(Nev), Megjelenitheto);
om := om + 1;
end Regisztral;
Kep : Megjelenitheto_Kep := Ures_Megjelenitheto_Kep_Ertek;
procedure Megjelenit is
Sugo_Latszik : constant Boolean := True;
Kezdo_Sor : constant Natural := 2;
aktsor : Natural;
begin
Ada.Text_IO.New_Line(25);
Kep := Ures_Megjelenitheto_Kep_Ertek;
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(1), "Csap kinyitva: " & Boolean'Image(Szimulacio.Ontozorendszer.Elemek.Vizforras.Vizet_Ad));
aktsor := Kezdo_Sor;
Objektum_Kepek_Megjelenitese:
for i in 1.. om - 1 loop
declare
Objektum_Kep : constant String_Tomb_Tipus := Szimulacio.Ontozorendszer.Elemek.Megjelenit_Hivas_Dinamikus_Kotessel(Objektum_Megjelenitok(i).Megjelenitheto.all);
begin
if aktsor + 1 + Objektum_Kep'Length <= Maximalis_Sorszam then
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(aktsor), Stringbe_Masol(Objektum_Megjelenitok(i).Nev.all));
aktsor := aktsor + 1;
for j in Objektum_Kep'Range loop
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(aktsor), Objektum_Kep(j));
aktsor := aktsor + 1;
end loop;
else
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(Maximalis_Sorszam), "...Nem latszik minden objektum kep!...");
exit Objektum_Kepek_Megjelenitese;
end if;
end;
end loop Objektum_Kepek_Megjelenitese;
if Sugo_Latszik then
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(18)(30 .. Maximalis_Oszlopszam), " A ""szimulacio"" vezerlese ");
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(19)(30 .. Maximalis_Oszlopszam), " ------------------------ ");
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(20)(30 .. Maximalis_Oszlopszam), " v : a vizforras be/ki -kapcsolasa");
Szimulacio.Segedmuveletek.Stringbe_Masol(Kep(21)(30 .. Maximalis_Oszlopszam), " x : kilepes");
end if;
-- kiiras
for i in Kep'Range loop
Ada.Text_IO.Put(Kep(i));
if i /= Kep'Last then
Ada.Text_IO.New_Line;
end if;
end loop;
if Szimulacio.Vezerles.Vege_A_Szimulacionak then
Ada.Text_IO.New_Line(25);
end if;
end Megjelenit;
end Szimulacio.Ontozorendszer.Megjelenito.Muveletek;