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;