http://www.adaconcept.com/programs/keresesek_csomag_teszt.adb
--Rotter Gyorgy
--egy fajl sorai kozul kivalasztjuk az ABC szerint legelso, nagybetuvel kezdodo sort
--A Keresesek_Csomag generikus csomag es generikus eljarasanak hasznalatat bemutato program

with Ada.Text_IO;
with Ada.Strings.Unbounded;                                                    --| Unbounded stringek kezelesehez csomag                                 
with Ada.Strings.Unbounded.Text_IO;                                            --|

with Keresesek_Csomag; 

Use Ada.Text_IO;
use Ada.Strings.Unbounded;                                                     --| use-oljuk is
use Ada.Strings.Unbounded.Text_IO;                                             --|



procedure Keresesek_Csomag_teszt is
   
   szavakszama:constant:=10;                                                   --a szavak tomb merete                                             
   
   type szoveg is new Unbounded_String;                                        --a sajat Unbounded_String-tipusunk
   
   type SzavakTomb is array(positive range <>) of szoveg;                      --megszoritatlan indexhataru, pozitiv indexu, szoveg-eket tartalmazo tomb tipus


   szavak:SzavakTomb(1..szavakszama);                                          --szavak tomb (deklaralaskor megadjuk a konkret indexhatarokat)

   function ABCbenElorebbVan(A:szoveg;B:szoveg) return boolean;                --| fv. bejelentesek (hogy atlathatobb legyen a kod)
   function ElsoBetuNagy(sz:szoveg) return boolean;                            --|

   package Keresesek is new Keresesek_Csomag( ElemTipus => szoveg,"<" => ABCbenElorebbVan);                            --A Keresesek generikus csomag peldanyositasa
                                                                                                                       --majd az ebben a csomagban levo FeltetelesMaximumKeresesTombon generikus eljaras peldanyositasa...
                                                                                                                       --gondoljuk at, miert ezeket a parametereket adjuk meg
   procedure NevsorbanAzElsoMegkeresese is new Keresesek.FeltetelesMaximumKeresesTombon(IndexTipus => positive,
                                                                                        TombTipus => SzavakTomb,
                                                                                        Feltetel => ElsoBetuNagy);

   ------------------------------------[a foprogramban hasznalando eljarasok bejelentese]---------------------------------------------
   
   procedure SzavakBeolvasasaFajlbol(t:in out SzavakTomb);
   
   procedure SzavakKiirasa(t:SzavakTomb;eredmenypoz:positive);                 --a t tomb eredmenypoz-adik elemet bezarojelezzuk, es ugy irjuk ki
 
 
 
   --------------------------------[metodusok]-------------------------------
   function ABCbenElorebbVan(A:szoveg;B:szoveg) return boolean is
   begin 
     return A>B;
   end ABCbenElorebbVan;   


   function ElsoBetuNagy(sz:szoveg) return boolean is
     vissza:boolean;
   begin
     
      if Element(sz,1) in 'A'..'Z' then vissza:=true;                          --ilyet is lehet...
                                   else vissza:=false;
      end if;
      
      return vissza;
   end ElsoBetuNagy;

   ---------------------------------------------------------------------------
   
   procedure SzavakBeolvasasaFajlbol(t:in out SzavakTomb) is
      maxhossz:constant := 255;                                                --egy olvashato sor maximalis hossza
      akt:positive;                                                            --a t tomb mutatoja 

      fajl:file_type;                                                          
      sor:string(1..maxhossz);                                                 --stringnel (karaktertomb!!!) is megmondjuk a konkret indexhatarokat (megszoritjuk)
      sor_hossz:natural;                                                       --a kiolvasott sor hossza (a sor "tomb" mutatoja...)
   begin
      open(fajl,in_file,"szavak.txt");                                         --megnyitjuk a "szavak.txt" fajl-t olvasasra
      
      if not is_open(fajl) then put_line("nincs megnyitva a fajl");      
      else 
        put_line("A fajl (szavak.txt) tartalma: "); 
      
         --feltoltjuk a t tombot a fajl soraival
        akt:=t'first; 
        while not end_of_file(fajl) loop       
           get_line(fajl,sor,sor_hossz);     
           Append(t(akt),sor(1..sor_hossz)); 
           akt:=akt+1;                    
           
          -- put(sor(1..sor_hossz));                                           --| tesztelest segito kommentek (ezekkel is jelezzuk, hogy gondolkodtunk...)
          -- new_line;                                                         --|
        end loop;
        
         --a tomb uresen maradt elemeit " "-re allitjuk
        while akt<=szavakszama loop
           Append(t(akt)," ");
           akt:=akt+1;
        end loop;
         
      
      end if;
      
   end SzavakBeolvasasaFajlbol;

   procedure SzavakKiirasa(t:SzavakTomb;eredmenypoz:positive) is      
   begin
      new_line;
      for i in T'range loop
         if i=eredmenypoz then put("[ "); else put("  "); end if;
         put(To_String(t(i)));
         if i=eredmenypoz then put(" ]"); else put("  "); end if;
         
         new_line;
      end loop;
      new_line;
   end SzavakKiirasa;
   

begin
   Ada.Text_IO.Put_Line("Program indul");
   
   SzavakBeolvasasaFajlbol(szavak);
   
   declare
      volt:boolean;
      nevsorbanazelso:szoveg;
      poz:positive;
   begin
      NevsorbanAzElsoMegkeresese(szavak,volt,nevsorbanazelso,poz);
      --put_line(To_String(nevsorbanazelso));                                  --| szinten teszteles segito kommentek
      --put(positive'image(poz));                                              --|
      SzavakKiirasa(szavak,poz);
   end;
   
   Ada.Text_IO.Put_Line("Program vege");
end Keresesek_Csomag_teszt;