with Ada.Calendar; with Ada.Directories; with Ada.Iterator_Interfaces; package Iter5_Pkg is subtype Size is Ada.Directories.File_Size; type Folder is new String; function Folder_Separator return Character; function "+" (Directory : String) return Folder; function "+" (Left, Right : String) return Folder; function "+" (Left : Folder; Right : String) return Folder; function Composure (Directory : Folder; Filename : String; Extension : String) return String; function Composure (Directory : String; Filename : String; Extension : String) return String; -- no exception function Base_Name_Of (Name : String) return String renames Ada.Directories.Base_Name; function Extension_Of (Name : String) return String renames Ada.Directories.Extension; function Containing_Directory_Of (Name : String) return String renames Ada.Directories.Containing_Directory; function Exists (Name : String) return Boolean; -- no exception function Size_Of (Name : String) return Size renames Ada.Directories.Size; function Directory_Exists (Name : String) return Boolean; -- no exception function Modification_Time_Of (Name : String) return Ada.Calendar.Time renames Ada.Directories.Modification_Time; function Is_Newer (The_Name : String; Than_Name : String) return Boolean; procedure Delete (Name : String); -- no exception if no existance procedure Create_Directory (Path : String); -- creates the whole directory path procedure Delete_Directory (Name : String); -- including contents -- no exception if no existance procedure Rename (Old_Name : String; New_Name : String) renames Ada.Directories.Rename; procedure Copy (Source_Name : String; Target_Name : String; Form : String := "") renames Ada.Directories.Copy_File; function Is_Leaf_Directory (Directory : String) return Boolean; procedure Iterate_Over_Leaf_Directories (From_Directory : String; Iterator : access procedure (Leaf_Directory : String)); function Found_Directory (Simple_Name : String; In_Directory : String) return String; Not_Found : exception; Name_Error : exception renames Ada.Directories.Name_Error; Use_Error : exception renames Ada.Directories.Use_Error; ------------------------ -- File Iterator Loop -- ------------------------ -- Example: -- for The_Filename of Iter5_Pkg.Iterator_For ("C:\Program_Files") loop -- Log.Write (The_Filename); -- end loop; type Item (Name_Length : Natural) is limited private; function Iterator_For (Name : String) return Item; private type Cursor; function Has_More (Data : Cursor) return Boolean; package List_Iterator_Interfaces is new Ada.Iterator_Interfaces (Cursor, Has_More); function Iterate (The_Item : Item) return List_Iterator_Interfaces.Forward_Iterator'class; type Cursor_Data is record Has_More : Boolean := False; Position : Ada.Directories.Search_Type; end record; type Cursor is access all Cursor_Data; function Constant_Reference (The_Item : aliased Item; Unused_Index : Cursor) return String; type Item (Name_Length : Natural) is tagged limited record Name : String(1..Name_Length); Actual : Ada.Directories.Directory_Entry_Type; Data : aliased Cursor_Data; end record with Constant_Indexing => Constant_Reference, Default_Iterator => Iterate, Iterator_Element => String; end Iter5_Pkg;