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;