http://www.adaconcept.com/programs/ontozorendszeres_szimulacio/szimulacio-kert.ads
package Szimulacio.Kert is
  -- Itt nem hasznalunk Elaborate_Body pragmat, hiszen a valosagban nem tudhatjuk egy csomag irasakor, hogy a muveleteit majd meghivjak e elaboracios idoben vagy nem

   Kert_Szelesseg : constant Positive := 20;
   Kert_Hosszusag : constant Positive := 10;


   type Terv_Elemek_Tipus is (F,    V,         C,         S);
   --                         ^     ^          ^          ^
   --                         fu vizforras  csovezetek  szorofej


   -- figyeljuk meg, hogy mennyire fontos, hogy a kovetkezo atnevezesek es a Terv_Elemek_Tipus deklaracioja / definicioja kozott ne fedjuk el a tipus tipusertekeit

   function Fu         return Terv_Elemek_Tipus renames F;
   function Vizforras  return Terv_Elemek_Tipus renames V;
   function Csovezetek return Terv_Elemek_Tipus renames C;
   function Szorofej   return Terv_Elemek_Tipus renames S;



   subtype Kert_Szelesseg_Tipus is Positive range 1 .. Kert_Szelesseg;
   subtype Kert_Hosszusag_Tipus is Positive range 1 .. Kert_Hosszusag;

   -- NAGYON FONTOS!!!
   -- a Reszletpontok szamozasa a Terv -et olvasva balrol jobbra, fentrol lefele 1 -tol egyesevel egymas utan tortenik majd!

   -- Most nem olvasunk fajlbol, hogy a kod modositasa kozben meg lehessen figyelni a forditasi fuggosegeket, es meg sok mast is.
   -- Ez alapjan epitjuk majd fel a feszitofat, ami a csovek csatlakozasait hatarozza meg.
   Terv : constant array(Kert_Hosszusag_Tipus range <>, Kert_Szelesseg_Tipus range <>) of Terv_Elemek_Tipus :=

     ((F,F,F,F,F,F,F,F,F,F, F,F,F,F,F,F,F,F,F,F),
      (F,F,F,F,F,F,F,F,F,F, F,F,F,F,F,F,F,F,F,F),
      (F,F,S,F,F,F,F,F,F,C, C,C,S,F,F,F,F,F,F,F),
      (F,F,C,F,F,F,F,F,F,C, F,F,F,F,F,F,F,F,F,F),
      (F,F,C,F,F,F,F,F,F,C, F,F,F,F,F,F,F,F,F,F),
      (F,F,C,F,F,F,F,F,F,C, F,F,F,F,F,F,F,F,F,F),
      (F,F,S,F,F,F,F,F,F,C, F,F,F,F,F,F,F,S,F,F),
      (F,F,C,F,F,F,F,F,F,C, F,F,F,F,F,F,F,C,F,F),
      (V,C,C,C,C,C,C,C,C,C, C,C,C,C,C,C,C,C,F,F),
      (F,F,F,F,F,F,F,F,F,F, F,F,F,F,F,F,F,F,F,F));


   function Nem_Fu_Terv_Elemek_Szama_A_Terven return Natural;

   function Szorofejek_Szama_A_Terven return Natural;


private

   Terv_Elemek_Darabszamai : array(Terv_Elemek_Tipus) of Natural := ( others => 0 );

end Szimulacio.Kert;