http://www.adaconcept.com/programs/kiirok_csomag.ads
--Rotter Gyorgy
--Egy mutatott szoveg kiirasa annyi karakterkiiro taszk-kal, ahany karakter hosszu a szoveg
--(A mutatott szoveg legyen rovidebb mint egy sor!)



with Ada.Finalization;                           --"konstruktor"/destruktor elkeszitesehez
with Ada.Unchecked_Deallocation;                 --memoria ("kezi") felszabaditasahoz
with Ada.Numerics.Float_Random;                  --(veletlenszam generalashoz)

package kiirok_csomag is

   type M_String is access string;               --stringre mutathato mutato

    --"konstruktorral"/destruktorral rendelkezo atlatszatlan tipus (diszkriminansos rekord) ((szarmaztatas...))
   type IdezetTipus(i:M_String;ihossz:natural) is new Ada.Finalization.Limited_Controlled with private;
  --                 ^           ^
  --(az idezetre mutato mutato, az idezet hossza)

   procedure Initialize(it:in out IdezetTipus);  --"konstruktor"     --|  Ez KELL, hogy legyen a nevuk!!!
   procedure Finalize(it:in out IdezetTipus);    --destruktor        --|



   protected Kepernyo is                                             --vedett egyseg
    procedure kiir (ki : string);                                    --| kolcsonos kizaras teljesul ezekre az eljarasokra
    procedure kiir (ki : character;oszlop:natural);                  --|
    procedure sortores;                                              --|
   end Kepernyo ;


 private

    task type KarakterKiiro(ch:character:=' ';poz:natural:=0);       --taszk tipus
    --                       ^                  ^
    --                  (a kiirando karaktere,a karakter szovegbeli/sorbeli pozicioja)

   type M_KarakterKiiro is access KarakterKiiro;                     --taszk mutato :)
   type KiiroTaszkokTipus is array(natural range<>) of M_KarakterKiiro;

   type IdezetTipus(i:M_String;ihossz:natural) is new Ada.Finalization.Limited_Controlled with record
      idezet:M_String:=null;                       -- a szovegre mutato mutato (hangsulyozott alapertelmezett ertekkel)
      taszkok:KiiroTaszkokTipus(1..ihossz);        -- szoveghossz darab taszk  (a "konstruktor" allitja be oket!!!) A konstruktor erre szolgal!!! (nem letrehoz!!!)
   end record;

    protected varakozasgeneralo is                                   --vedett veletlenszam generator orfelteteles belepesi ponttal
      procedure Inicializal;
      entry general(varakozasiido: out duration);
    private
      inicializalva:boolean:=false;                                  --az entry orfeltetelehez
      G:Ada.Numerics.Float_Random.Generator;                         --a vedett "adattag"/"adatmezo"
    end varakozasgeneralo;

   procedure StringetFelszabadit is new Ada.Unchecked_Deallocation(String,M_String);
   procedure TaszkotFelszabadit is new Ada.Unchecked_Deallocation(KarakterKiiro,M_KarakterKiiro);

end kiirok_csomag;