with Opt28_Pkg; use Opt28_Pkg; package body Opt28 is function Full_Filename (Filename : String) return String is Path : constant String := "PATH"; Posix_Path : constant Posix_String := To_Posix (Path); begin declare M : constant Posix_String := Value_Of (Posix_Path); N : constant Posix_String (1 .. M'Length) := M; Var : constant String := To_String (Str => N); Start_Pos : Natural := 1; End_Pos : Natural := 1; begin while Start_Pos <= Var'Length loop End_Pos := Position (Var (Start_Pos .. Var'Length)); if Is_File (To_Posix (Var (Start_Pos .. End_Pos - 1) & Filename)) then return Var (Start_Pos .. End_Pos - 1) & Filename; else Start_Pos := End_Pos + 1; end if; end loop; end; return ""; end; end Opt28;