--  fileinfo.adb - use Get_File_Status to obtain and print file properties
--               - some members are just numbers

with
  Ada.Command_Line,
  Ada.Text_IO,
  POSIX.Calendar,
  POSIX.File_Status,
  POSIX.Process_Identification;

with
  EUP.Text_IO.Permission_IO;

procedure File_Information is
   procedure Show (Name : in     String;
                   Info : in     POSIX.File_Status.Status) is
   begin
      Ada.Text_IO.Put_Line
        ("   mode: " & EUP.Text_IO.Permission_IO.Image
                         (POSIX.File_Status.Permission_Set_Of (Info)));
      Ada.Text_IO.Put_Line
        ("  links: " & POSIX.File_Status.Link_Count_Of (Info)'Img);
      Ada.Text_IO.Put_Line
        ("   user: " & POSIX.Process_Identification.Image
                         (POSIX.File_Status.Owner_Of (Info)));
      Ada.Text_IO.Put_Line
        ("  group: " & POSIX.Process_Identification.Image
                         (POSIX.File_Status.Group_Of (Info)));
      Ada.Text_IO.Put_Line
        ("   size: " & POSIX.File_Status.Size_Of (Info)'Img);
      Ada.Text_IO.Put_Line
        ("modtime: " & POSIX.Get_Seconds
                         (POSIX.Calendar.To_Timespec
                            (POSIX.File_Status.Last_Modification_Time_Of
                               (Info)))'Img);
      Ada.Text_IO.Put_Line ("   name: " & Name);
   end Show;
begin
   if Ada.Command_Line.Argument_Count >= 1 then
      Show (Name => Ada.Command_Line.Argument (1),
            Info => POSIX.File_Status.Get_File_Status
              (POSIX.To_POSIX_String (Ada.Command_Line.Argument (1))));
   end if;
end File_Information;

