1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- L I B . L I S T -- 6-- -- 7-- B o d y -- 8-- -- 9-- Copyright (C) 1992-2020, Free Software Foundation, Inc. -- 10-- -- 11-- GNAT is free software; you can redistribute it and/or modify it under -- 12-- terms of the GNU General Public License as published by the Free Soft- -- 13-- ware Foundation; either version 3, or (at your option) any later ver- -- 14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 16-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- 17-- for more details. You should have received a copy of the GNU General -- 18-- Public License distributed with GNAT; see file COPYING3. If not, go to -- 19-- http://www.gnu.org/licenses for a complete copy of the license. -- 20-- -- 21-- GNAT was originally developed by the GNAT team at New York University. -- 22-- Extensive contributions were provided by Ada Core Technologies Inc. -- 23-- -- 24------------------------------------------------------------------------------ 25 26separate (Lib) 27procedure List (File_Names_Only : Boolean := False) is 28 29 Num_Units : constant Nat := Int (Units.Last) - Int (Units.First) + 1; 30 -- Number of units in file table 31 32 Sorted_Units : Unit_Ref_Table (1 .. Num_Units); 33 -- Table of unit numbers that we will sort 34 35 Unit_Hed : constant String := "Unit name "; 36 Unit_Und : constant String := "--------- "; 37 Unit_Bln : constant String := " "; 38 File_Hed : constant String := "File name "; 39 File_Und : constant String := "--------- "; 40 File_Bln : constant String := " "; 41 Time_Hed : constant String := "Time stamp"; 42 Time_Und : constant String := "----------"; 43 44 Unit_Length : constant Natural := Unit_Hed'Length; 45 File_Length : constant Natural := File_Hed'Length; 46 47begin 48 -- First step is to make a sorted table of units 49 50 for J in 1 .. Num_Units loop 51 Sorted_Units (J) := Unit_Number_Type (Int (Units.First) + J - 1); 52 end loop; 53 54 Sort (Sorted_Units); 55 56 -- Now we can generate the unit table listing 57 58 Write_Eol; 59 60 if not File_Names_Only then 61 Write_Str (Unit_Hed); 62 Write_Str (File_Hed); 63 Write_Str (Time_Hed); 64 Write_Eol; 65 66 Write_Str (Unit_Und); 67 Write_Str (File_Und); 68 Write_Str (Time_Und); 69 Write_Eol; 70 Write_Eol; 71 end if; 72 73 for R in Sorted_Units'Range loop 74 if File_Names_Only then 75 if not Is_Internal_Unit (Sorted_Units (R)) then 76 Write_Name (Full_File_Name (Source_Index (Sorted_Units (R)))); 77 Write_Eol; 78 end if; 79 80 else 81 Write_Unit_Name (Unit_Name (Sorted_Units (R))); 82 83 if Name_Len > (Unit_Length - 1) then 84 Write_Eol; 85 Write_Str (Unit_Bln); 86 else 87 for J in Name_Len + 1 .. Unit_Length loop 88 Write_Char (' '); 89 end loop; 90 end if; 91 92 Write_Name (Full_File_Name (Source_Index (Sorted_Units (R)))); 93 94 if Name_Len > (File_Length - 1) then 95 Write_Eol; 96 Write_Str (Unit_Bln); 97 Write_Str (File_Bln); 98 else 99 for J in Name_Len + 1 .. File_Length loop 100 Write_Char (' '); 101 end loop; 102 end if; 103 104 Write_Str (String (Time_Stamp (Source_Index (Sorted_Units (R))))); 105 Write_Eol; 106 end if; 107 end loop; 108 109 Write_Eol; 110end List; 111