------------------------------------------------------------------------------ -- -- -- GNAT COMPILER COMPONENTS -- -- -- -- B U T I L -- -- -- -- B o d y -- -- -- -- -- -- Copyright (C) 1992-2001 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- -- ware Foundation; either version 2, or (at your option) any later ver- -- -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- -- for more details. You should have received a copy of the GNU General -- -- Public License distributed with GNAT; see file COPYING. If not, write -- -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- -- MA 02111-1307, USA. -- -- -- -- GNAT was originally developed by the GNAT team at New York University. -- -- Extensive contributions were provided by Ada Core Technologies Inc. -- -- -- ------------------------------------------------------------------------------ with Hostparm; use Hostparm; with Namet; use Namet; with Output; use Output; package body Butil is -------------------------- -- Get_Unit_Name_String -- -------------------------- procedure Get_Unit_Name_String (U : Unit_Name_Type) is begin Get_Name_String (U); if Name_Buffer (Name_Len) = 's' then Name_Buffer (Name_Len - 1 .. Name_Len + 5) := " (spec)"; else Name_Buffer (Name_Len - 1 .. Name_Len + 5) := " (body)"; end if; Name_Len := Name_Len + 5; end Get_Unit_Name_String; ---------------------- -- Is_Internal_Unit -- ---------------------- -- Note: the reason we do not use the Fname package for this function -- is that it would drag too much junk into the binder. function Is_Internal_Unit return Boolean is begin return Is_Predefined_Unit or else (Name_Len > 4 and then (Name_Buffer (1 .. 5) = "gnat%" or else Name_Buffer (1 .. 5) = "gnat.")) or else (OpenVMS and then Name_Len > 3 and then (Name_Buffer (1 .. 4) = "dec%" or else Name_Buffer (1 .. 4) = "dec.")); end Is_Internal_Unit; ------------------------ -- Is_Predefined_Unit -- ------------------------ -- Note: the reason we do not use the Fname package for this function -- is that it would drag too much junk into the binder. function Is_Predefined_Unit return Boolean is begin return (Name_Len > 3 and then Name_Buffer (1 .. 4) = "ada.") or else (Name_Len > 6 and then Name_Buffer (1 .. 7) = "system.") or else (Name_Len > 10 and then Name_Buffer (1 .. 11) = "interfaces.") or else (Name_Len > 3 and then Name_Buffer (1 .. 4) = "ada%") or else (Name_Len > 8 and then Name_Buffer (1 .. 9) = "calendar%") or else (Name_Len > 9 and then Name_Buffer (1 .. 10) = "direct_io%") or else (Name_Len > 10 and then Name_Buffer (1 .. 11) = "interfaces%") or else (Name_Len > 13 and then Name_Buffer (1 .. 14) = "io_exceptions%") or else (Name_Len > 12 and then Name_Buffer (1 .. 13) = "machine_code%") or else (Name_Len > 13 and then Name_Buffer (1 .. 14) = "sequential_io%") or else (Name_Len > 6 and then Name_Buffer (1 .. 7) = "system%") or else (Name_Len > 7 and then Name_Buffer (1 .. 8) = "text_io%") or else (Name_Len > 20 and then Name_Buffer (1 .. 21) = "unchecked_conversion%") or else (Name_Len > 22 and then Name_Buffer (1 .. 23) = "unchecked_deallocation%") or else (Name_Len > 4 and then Name_Buffer (1 .. 5) = "gnat%") or else (Name_Len > 4 and then Name_Buffer (1 .. 5) = "gnat."); end Is_Predefined_Unit; ---------------- -- Uname_Less -- ---------------- function Uname_Less (U1, U2 : Unit_Name_Type) return Boolean is begin Get_Name_String (U1); declare U1_Name : constant String (1 .. Name_Len) := Name_Buffer (1 .. Name_Len); Min_Length : Natural; begin Get_Name_String (U2); if Name_Len < U1_Name'Last then Min_Length := Name_Len; else Min_Length := U1_Name'Last; end if; for I in 1 .. Min_Length loop if U1_Name (I) > Name_Buffer (I) then return False; elsif U1_Name (I) < Name_Buffer (I) then return True; end if; end loop; return U1_Name'Last < Name_Len; end; end Uname_Less; --------------------- -- Write_Unit_Name -- --------------------- procedure Write_Unit_Name (U : Unit_Name_Type) is begin Get_Name_String (U); Write_Str (Name_Buffer (1 .. Name_Len - 2)); if Name_Buffer (Name_Len) = 's' then Write_Str (" (spec)"); else Write_Str (" (body)"); end if; Name_Len := Name_Len + 5; end Write_Unit_Name; end Butil;