http://www.adaconcept.com/programs/kiirok_csomag.adb
with ada.Text_IO;
use ada.Text_IO;

package body kiirok_csomag is


   procedure Initialize (it:in out IdezetTipus) is
   begin
     Kepernyo.Kiir("konstruktor indul");
     Kepernyo.sortores;

      it.idezet:=it.i;
      Kepernyo.Kiir(it.idezet.all);
      Kepernyo.sortores;
      for i in it.idezet.all'range loop                              --| minden taszk megkapja a sajat karakteret, es (annak) a poziciojat
         it.taszkok(i):=new KarakterKiiro(it.idezet.all(i),i);       --|
      end loop;                                                      --|

     Kepernyo.Kiir("konstruktor vege");
     Kepernyo.sortores;
   end Initialize;


   procedure Finalize (it:in out IdezetTipus) is
     kilephet:boolean;
   begin
      Kepernyo.Kiir("A DESTRUKTOR MOST INDULNA");
       loop
         kilephet:=true;
          for i in 1..it.ihossz loop
            if not it.taszkok(i)'terminated then
               --Kepernyo.Kiir("*******************************************");
              kilephet:=false;
            end if;
        end loop;
      exit when kilephet;
      end loop;


      Kepernyo.Kiir("destruktor indul");
      Kepernyo.sortores;
      --Kepernyo.Kiir(it.idezet.all);
        StringetFelszabadit(it.idezet);
      --Kepernyo.Kiir(it.idezet.all);  --ez mar nem letezik!!!

        for i in 1..it.ihossz loop
          TaszkotFelszabadit(it.taszkok(i));
        end loop;

      Kepernyo.Kiir("destruktor vege");
      Kepernyo.sortores;
   end Finalize;


  protected body varakozasgeneralo is

    procedure inicializal is
    begin
       Ada.Numerics.Float_Random.Reset(g);
       inicializalva:=true;
    end inicializal;


    entry general(varakozasiido:out duration) when inicializalva is  --orfelteteles belepesi pont
    begin
       varakozasiido:=duration(Ada.Numerics.Float_Random.random(g));
    end general;

  end varakozasgeneralo;


   task body KarakterKiiro is
      varakozasiido:duration;
   begin
      Varakozasgeneralo.general(varakozasiido);
      delay 2*varakozasiido;                                         --varunk valamennyi ideig, mielott barmit is csinalnank
      Kepernyo.Kiir(ch,poz);
   end KarakterKiiro;



  protected body Kepernyo is

    procedure Kiir (ki : string) is
    begin
      put(ki);
    end Kiir;

    procedure Kiir (ki : character;oszlop:natural) is
    begin
     set_col(Positive_Count(oszlop));
     put(natural'image(oszlop)&":" & ki);
     --put(ki);
    end Kiir;

    procedure sortores is
    begin
      new_line;
    end;

  end Kepernyo;

begin
   varakozasgeneralo.inicializal;                                    --mielott barmi is tortenhetne inicializaljuk a veletlenszam generalonkat...
end kiirok_csomag;