with Ada.Directories ; procedure dirwalk( context : context_type ; dirname : string ; pattern : string ; processor : access procedure ( context : context_type ; filename : in string ) ) is search : Ada.Directories.Search_Type; searchd : Ada.Directories.Search_Type; direntry : Ada.Directories.Directory_Entry_Type; filter : Ada.Directories.Filter_Type; use Ada.Directories; begin filter := [Ada.Directories.Ordinary_File => True, others => False]; Ada.Directories.Start_Search (search, dirname, pattern, filter); while Ada.Directories.More_Entries (search) loop Ada.Directories.Get_Next_Entry (search, direntry); processor (context , Ada.Directories.Full_Name (direntry)); end loop; Ada.Directories.End_Search (search); filter := [Ada.Directories.Directory => True, others => False]; Ada.Directories.Start_Search (searchd, Ada.Directories.Full_Name (dirname), "*", filter); while Ada.Directories.More_Entries (searchd) loop Ada.Directories.Get_Next_Entry (searchd, direntry); if Ada.Directories.Simple_Name (direntry) /= "." and then Ada.Directories.Simple_Name (direntry) /= ".." then dirwalk (context , Ada.Directories.Full_Name (direntry), pattern, processor); end if; end loop; Ada.Directories.End_Search (search); end dirwalk ;