8sa1-gcc/gcc/ada/impunit.adb
Hristian Kirtchev 6e451134f0 a-calend-vms.adb (Leap_Sec_Ops): Temp body for package in private part of Ada.Calendar...
2006-10-31  Hristian Kirtchev  <kirtchev@adacore.com>
	    Jose Ruiz  <ruiz@adacore.com>

	* a-calend-vms.adb (Leap_Sec_Ops): Temp body for package in private
	part of Ada.Calendar: all subprogram raise Unimplemented.
	(Split_W_Offset): Temp function body, raising Unimplemented

	* a-calend.ads, a-calend-vms.ads: 
	Add imported variable Invalid_TZ_Offset used to designate targets unable
	to support time zones.
	(Unimplemented): Temporary function raised by the body of new
	subprograms below.
	(Leap_Sec_Ops): New package in the private part of Ada.Calendar. This
	unit provides handling of leap seconds and is used by the new Ada 2005
	packages Ada.Calendar.Arithmetic and Ada.Calendar.Formatting.
	(Split_W_Offset): Identical spec to that of Ada.Calendar.Split. This
	version returns an extra value which is the offset to UTC.

	* a-calend.adb (Split_W_Offset): Add call to localtime_tzoff.
	(Leap_Sec_Ops): New body for package in private part of Ada.Calendar.
	(Split_W_Offset): New function body.
	(Time_Of): When a date is close to UNIX epoch, compute the time for
	that date plus one day (that amount is later substracted after
	executing mktime) so there are no problems with time zone adjustments.

	* a-calend-mingw.adb: Remove Windows specific version no longer needed.

	* a-calari.ads, a-calari.adb, a-calfor.ads, a-calfor.adb,
	a-catizo.ads, a-catizo.adb: New files.

        * impunit.adb: Add new Ada 2005 entries

	* sysdep.c: Add external variable __gnat_invalid_tz_offset.
	Rename all occurences of "__gnat_localtime_r" to
	"__gnat_localtime_tzoff".
	(__gnat_localtime_tzoff for Windows): Add logic to retrieve the time
	zone data and calculate the GMT offset.
	(__gnat_localtime_tzoff for Darwin, Free BSD, Linux, Lynx and Tru64):
	Use the field "tm_gmtoff" to extract the GMT offset.
	(__gnat_localtime_tzoff for AIX, HPUX, SGI Irix and Sun Solaris): Use
	the external variable "timezone" to calculate the GMT offset.

From-SVN: r118234
2006-10-31 18:44:55 +01:00

540 lines
22 KiB
Ada

------------------------------------------------------------------------------
-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- I M P U N I T --
-- --
-- B o d y --
-- --
-- Copyright (C) 2000-2006, 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, 51 Franklin Street, Fifth Floor, --
-- Boston, MA 02110-1301, USA. --
-- --
-- GNAT was originally developed by the GNAT team at New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
with Lib; use Lib;
with Namet; use Namet;
package body Impunit is
subtype File_Name_8 is String (1 .. 8);
type File_List is array (Nat range <>) of File_Name_8;
------------------
-- Ada 95 Units --
------------------
-- The following is a giant string list containing the names of all
-- non-implementation internal files, i.e. the complete list of files for
-- internal units which a program may legitimately WITH when operating in
-- either Ada 95 or Ada 05 mode.
-- Note that this list should match the list of units documented in the
-- "GNAT Library" section of the GNAT Reference Manual.
Non_Imp_File_Names_95 : constant File_List := (
------------------------------------------------------
-- Ada Hierarchy Units from Ada-83 Reference Manual --
------------------------------------------------------
"a-astaco", -- Ada.Asynchronous_Task_Control
"a-calend", -- Ada.Calendar
"a-chahan", -- Ada.Characters.Handling
"a-charac", -- Ada.Characters
"a-chlat1", -- Ada.Characters.Latin_1
"a-comlin", -- Ada.Command_Line
"a-decima", -- Ada.Decimal
"a-direio", -- Ada.Direct_IO
"a-dynpri", -- Ada.Dynamic_Priorities
"a-except", -- Ada.Exceptions
"a-finali", -- Ada.Finalization
"a-flteio", -- Ada.Float_Text_IO
"a-fwteio", -- Ada.Float_Wide_Text_IO
"a-inteio", -- Ada.Integer_Text_IO
"a-interr", -- Ada.Interrupts
"a-intnam", -- Ada.Interrupts.Names
"a-ioexce", -- Ada.IO_Exceptions
"a-iwteio", -- Ada.Integer_Wide_Text_IO
"a-ncelfu", -- Ada.Numerics.Complex_Elementary_Functions
"a-ngcefu", -- Ada.Numerics.Generic_Complex_Elementary_Functions
"a-ngcoty", -- Ada.Numerics.Generic_Complex_Types
"a-ngelfu", -- Ada.Numerics.Generic_Elementary_Functions
"a-nucoty", -- Ada.Numerics.Complex_Types
"a-nudira", -- Ada.Numerics.Discrete_Random
"a-nuelfu", -- Ada.Numerics.Elementary_Functions
"a-nuflra", -- Ada.Numerics.Float_Random
"a-numeri", -- Ada.Numerics
"a-reatim", -- Ada.Real_Time
"a-sequio", -- Ada.Sequential_IO
"a-stmaco", -- Ada.Strings.Maps.Constants
"a-storio", -- Ada.Storage_IO
"a-strbou", -- Ada.Strings.Bounded
"a-stream", -- Ada.Streams
"a-strfix", -- Ada.Strings.Fixed
"a-string", -- Ada.Strings
"a-strmap", -- Ada.Strings.Maps
"a-strunb", -- Ada.Strings.Unbounded
"a-ststio", -- Ada.Streams.Stream_IO
"a-stwibo", -- Ada.Strings.Wide_Bounded
"a-stwifi", -- Ada.Strings.Wide_Fixed
"a-stwima", -- Ada.Strings.Wide_Maps
"a-stwiun", -- Ada.Strings.Wide_Unbounded
"a-swmwco", -- Ada.Strings.Wide_Maps.Wide_Constants
"a-sytaco", -- Ada.Synchronous_Task_Control
"a-tags ", -- Ada.Tags
"a-tasatt", -- Ada.Task_Attributes
"a-taside", -- Ada.Task_Identification
"a-teioed", -- Ada.Text_IO.Editing
"a-textio", -- Ada.Text_IO
"a-ticoio", -- Ada.Text_IO.Complex_IO
"a-titest", -- Ada.Text_IO.Text_Streams
"a-unccon", -- Ada.Unchecked_Conversion
"a-uncdea", -- Ada.Unchecked_Deallocation
"a-witeio", -- Ada.Wide_Text_IO
"a-wtcoio", -- Ada.Wide_Text_IO.Complex_IO
"a-wtedit", -- Ada.Wide_Text_IO.Editing
"a-wttest", -- Ada.Wide_Text_IO.Text_Streams
-------------------------------------------------
-- RM Required Additions to Ada for GNAT Types --
-------------------------------------------------
"a-lfteio", -- Ada.Long_Float_Text_IO
"a-lfwtio", -- Ada.Long_Float_Wide_Text_IO
"a-liteio", -- Ada.Long_Integer_Text_IO
"a-liwtio", -- Ada.Long_Integer_Wide_Text_IO
"a-llftio", -- Ada.Long_Long_Float_Text_IO
"a-llfwti", -- Ada.Long_Long_Float_Wide_Text_IO
"a-llitio", -- Ada.Long_Long_Integer_Text_IO
"a-lliwti", -- Ada.Long_Long_Integer_Wide_Text_IO
"a-nlcefu", -- Ada.Long_Complex_Elementary_Functions
"a-nlcoty", -- Ada.Numerics.Long_Complex_Types
"a-nlelfu", -- Ada.Numerics.Long_Elementary_Functions
"a-nllcef", -- Ada.Long_Long_Complex_Elementary_Functions
"a-nllefu", -- Ada.Numerics.Long_Long_Elementary_Functions
"a-nllcty", -- Ada.Numerics.Long_Long_Complex_Types
"a-nscefu", -- Ada.Short_Complex_Elementary_Functions
"a-nscoty", -- Ada.Numerics.Short_Complex_Types
"a-nselfu", -- Ada.Numerics.Short_Elementary_Functions
"a-sfteio", -- Ada.Short_Float_Text_IO
"a-sfwtio", -- Ada.Short_Float_Wide_Text_IO
"a-siteio", -- Ada.Short_Integer_Text_IO
"a-siwtio", -- Ada.Short_Integer_Wide_Text_IO
"a-ssitio", -- Ada.Short_Short_Integer_Text_IO
"a-ssiwti", -- Ada.Short_Short_Integer_Wide_Text_IO
-----------------------------------
-- GNAT Defined Additions to Ada --
-----------------------------------
"a-chlat9", -- Ada.Characters.Latin_9
"a-colien", -- Ada.Command_Line.Environment
"a-colire", -- Ada.Command_Line.Remove
"a-cwila1", -- Ada.Characters.Wide_Latin_1
"a-cwila9", -- Ada.Characters.Wide_Latin_9
"a-diocst", -- Ada.Direct_IO.C_Streams
"a-einuoc", -- Ada.Exceptions.Is_Null_Occurrence
"a-elchha", -- Ada.Exceptions.Last_Chance_Handler
"a-exctra", -- Ada.Exceptions.Traceback
"a-siocst", -- Ada.Sequential_IO.C_Streams
"a-ssicst", -- Ada.Streams.Stream_IO.C_Streams
"a-suteio", -- Ada.Strings.Unbounded.Text_IO
"a-swuwti", -- Ada.Strings.Wide_Unbounded.Wide_Text_IO
"a-taidim", -- Ada.Task_Identification.Image
"a-tiocst", -- Ada.Text_IO.C_Streams
"a-wtcstr", -- Ada.Wide_Text_IO.C_Streams
-- Note: strictly the next two should be Ada 2005 units, but it seems
-- harmless (and useful) to make then available in Ada 95 mode, since
-- they only deal with Wide_Character, not Wide_Wide_Character.
"a-wichun", -- Ada.Wide_Characters.Unicode
"a-widcha", -- Ada.Wide_Characters
---------------------------
-- GNAT Special IO Units --
---------------------------
-- As further explained elsewhere (see Sem_Ch10), the internal
-- packages of Text_IO and Wide_Text_IO are actually implemented
-- as separate children, but this fact is intended to be hidden
-- from the user completely. Any attempt to WITH one of these
-- units will be diagnosed as an error later on, but for now we
-- do not consider these internal implementation units (if we did,
-- then we would get a junk warning which would be confusing and
-- unecessary, given that we generate a clear error message).
"a-tideio", -- Ada.Text_IO.Decimal_IO
"a-tienio", -- Ada.Text_IO.Enumeration_IO
"a-tifiio", -- Ada.Text_IO.Fixed_IO
"a-tiflio", -- Ada.Text_IO.Float_IO
"a-tiinio", -- Ada.Text_IO.Integer_IO
"a-tiinio", -- Ada.Text_IO.Integer_IO
"a-timoio", -- Ada.Text_IO.Modular_IO
"a-wtdeio", -- Ada.Wide_Text_IO.Decimal_IO
"a-wtenio", -- Ada.Wide_Text_IO.Enumeration_IO
"a-wtfiio", -- Ada.Wide_Text_IO.Fixed_IO
"a-wtflio", -- Ada.Wide_Text_IO.Float_IO
"a-wtinio", -- Ada.Wide_Text_IO.Integer_IO
"a-wtmoio", -- Ada.Wide_Text_IO.Modular_IO
------------------------
-- GNAT Library Units --
------------------------
"g-altive", -- GNAT.Altivec
"g-alvety", -- GNAT.Altivec.Vector_Types
"g-alvevi", -- GNAT.Altivec.Vector_Views
"g-alveop", -- GNAT.Altivec.Vector_Operations
"g-altcon", -- GNAT.Altivec.Conversions
"g-arrspl", -- GNAT.Array_Split
"g-awk ", -- GNAT.AWK
"g-boubuf", -- GNAT.Bounded_Buffers
"g-boumai", -- GNAT.Bounded_Mailboxes
"g-bubsor", -- GNAT.Bubble_Sort
"g-busora", -- GNAT.Bubble_Sort_A
"g-busorg", -- GNAT.Bubble_Sort_G
"g-calend", -- GNAT.Calendar
"g-casuti", -- GNAT.Case_Util
"g-catiio", -- GNAT.Calendar.Time_IO
"g-cgi ", -- GNAT.CGI
"g-cgicoo", -- GNAT.CGI.Cookie
"g-cgideb", -- GNAT.CGI.Debug
"g-comlin", -- GNAT.Command_Line
"g-comver", -- GNAT.Compiler_Version
"g-crc32 ", -- GNAT.CRC32
"g-ctrl_c", -- GNAT.Ctrl_C
"g-curexc", -- GNAT.Current_Exception
"g-debpoo", -- GNAT.Debug_Pools
"g-debuti", -- GNAT.Debug_Utilities
"g-diopit", -- GNAT.Directory_Operations.Iteration
"g-dirope", -- GNAT.Directory_Operations
"g-dynhta", -- GNAT.Dynamic_HTables
"g-dyntab", -- GNAT.Dynamic_Tables
"g-excact", -- GNAT.Exception_Actions
"g-except", -- GNAT.Exceptions
"g-exctra", -- GNAT.Exception_Traces
"g-expect", -- GNAT.Expect
"g-flocon", -- GNAT.Float_Control
"g-heasor", -- GNAT.Heap_Sort
"g-hesora", -- GNAT.Heap_Sort_A
"g-hesorg", -- GNAT.Heap_Sort_G
"g-htable", -- GNAT.Htable
"g-io ", -- GNAT.IO
"g-io_aux", -- GNAT.IO_Aux
"g-locfil", -- GNAT.Lock_Files
"g-md5 ", -- GNAT.MD5
"g-memdum", -- GNAT.Memory_Dump
"g-moreex", -- GNAT.Most_Recent_Exception
"g-os_lib", -- GNAT.Os_Lib
"g-pehage", -- GNAT.Perfect_Hash_Generators
"g-regexp", -- GNAT.Regexp
"g-regist", -- GNAT.Registry
"g-regpat", -- GNAT.Regpat
"g-semaph", -- GNAT.Semaphores
"g-sestin", -- GNAT.Secondary_Stack_Info
"g-signal", -- GNAT.Signals
"g-socket", -- GNAT.Sockets
"g-souinf", -- GNAT.Source_Info
"g-speche", -- GNAT.Spell_Checker
"g-spipat", -- GNAT.Spitbol.Patterns
"g-spitbo", -- GNAT.Spitbol
"g-sptabo", -- GNAT.Spitbol.Table_Boolean
"g-sptain", -- GNAT.Spitbol.Table_Integer
"g-sptavs", -- GNAT.Spitbol.Table_Vstring
"g-string", -- GNAT.Strings
"g-strspl", -- GNAT.String_Split
"g-table ", -- GNAT.Table
"g-tasloc", -- GNAT.Task_Lock
"g-thread", -- GNAT.Threads
"g-traceb", -- GNAT.Traceback
"g-trasym", -- GNAT.Traceback.Symbolic
"g-utf_32", -- GNAT.UTF_32
"g-wistsp", -- GNAT.Wide_String_Split
-----------------------------------------------------
-- Interface Hierarchy Units from Reference Manual --
-----------------------------------------------------
"i-c ", -- Interfaces.C
"i-cobol ", -- Interfaces.Cobol
"i-cpoint", -- Interfaces.C.Pointers
"i-cstrin", -- Interfaces.C.Strings
"i-fortra", -- Interfaces.Fortran
------------------------------------------
-- GNAT Defined Additions to Interfaces --
------------------------------------------
"i-cexten", -- Interfaces.C.Extensions
"i-cpp ", -- Interfaces.CPP
"i-cstrea", -- Interfaces.C.Streams
"i-jalaob", -- Interfaces.Java.Lang.Object
"i-jalasy", -- Interfaces.Java.Lang.System
"i-jalath", -- Interfaces.Java.Lang.Thread
"i-java ", -- Interfaces.Java
"i-javlan", -- Interfaces.Java.Lang
"i-os2err", -- Interfaces.Os2lib.Errors
"i-os2lib", -- Interfaces.Os2lib
"i-os2syn", -- Interfaces.Os2lib.Synchronization
"i-os2thr", -- Interfaces.Os2lib.Threads
"i-pacdec", -- Interfaces.Packed_Decimal
"i-vthrea", -- Interfaces.Vthreads
"i-vxwoio", -- Interfaces.VxWorks.IO
"i-vxwork", -- Interfaces.VxWorks
--------------------------------------------------
-- System Hierarchy Units from Reference Manual --
--------------------------------------------------
"s-atacco", -- System.Address_To_Access_Conversions
"s-maccod", -- System.Machine_Code
"s-rpc ", -- System.Rpc
"s-stoele", -- System.Storage_Elements
"s-stopoo", -- System.Storage_Pools
--------------------------------------
-- GNAT Defined Additions to System --
--------------------------------------
"s-addima", -- System.Address_Image
"s-assert", -- System.Assertions
"s-memory", -- System.Memory
"s-parint", -- System.Partition_Interface
"s-pooglo", -- System.Pool_Global
"s-pooloc", -- System.Pool_Local
"s-restri", -- System.Restrictions
"s-rident", -- System.Rident
"s-tasinf", -- System.Task_Info
"s-wchcnv", -- System.Wch_Cnv
"s-wchcon"); -- System.Wch_Con
--------------------
-- Ada 2005 Units --
--------------------
-- The following units should be used only in Ada 05 mode
Non_Imp_File_Names_05 : constant File_List := (
--------------------------------------------------------
-- Ada Hierarchy Units from Ada 2005 Reference Manual --
--------------------------------------------------------
"a-calari", -- Ada.Calendar.Arithmetic
"a-calfor", -- Ada.Calendar.Formatting
"a-catizo", -- Ada.Calendar.Time_Zones
"a-cdlili", -- Ada.Containers.Doubly_Linked_Lists
"a-cgarso", -- Ada.Containers.Generic_Array_Sort
"a-cgcaso", -- Ada.Containers.Generic_Constrained_Array_Sort
"a-chacon", -- Ada.Characters.Conversions
"a-cidlli", -- Ada.Containers.Indefinite_Doubly_Linked_Lists
"a-cihama", -- Ada.Containers.Indefinite_Hashed_Maps
"a-cihase", -- Ada.Containers.Indefinite_Hashed_Sets
"a-ciorma", -- Ada.Containers.Indefinite_Ordered_Maps
"a-ciorse", -- Ada.Containers.Indefinite_Ordered_Sets
"a-cohama", -- Ada.Containers.Hashed_Maps
"a-cohase", -- Ada.Containers.Hashed_Sets
"a-coinve", -- Ada.Containers.Indefinite_Vectors
"a-contai", -- Ada.Containers
"a-convec", -- Ada.Containers.Vectors
"a-coorma", -- Ada.Containers.Ordered_Maps
"a-coorse", -- Ada.Containers.Ordered_Sets
"a-coteio", -- Ada.Complex_Text_IO
"a-direct", -- Ada.Directories
"a-diroro", -- Ada.Dispatching.Round_Robin
"a-dispat", -- Ada.Dispatching
"a-envvar", -- Ada.Environment_Variables
"a-rttiev", -- Ada.Real_Time.Timing_Events
"a-stboha", -- Ada.Strings.Bounded.Hash
"a-stfiha", -- Ada.Strings.Fixed.Hash
"a-strhas", -- Ada.Strings.Hash
"a-stunha", -- Ada.Strings.Unbounded.Hash
"a-stwiha", -- Ada.Strings.Wide_Hash
"a-stzbou", -- Ada.Strings.Wide_Wide_Bounded
"a-stzfix", -- Ada.Strings.Wide_Wide_Fixed
"a-stzhas", -- Ada.Strings.Wide_Wide_Hash
"a-stzmap", -- Ada.Strings.Wide_Wide_Maps
"a-stzunb", -- Ada.Strings.Wide_Wide_Unbounded
"a-swbwha", -- Ada.Strings.Wide_Bounded.Wide_Hash
"a-swfwha", -- Ada.Strings.Wide_Fixed.Wide_Hash
"a-swuwha", -- Ada.Strings.Wide_Unbounded.Wide_Hash
"a-szbzha", -- Ada.Strings.Wide_Wide_Bounded.Wide_Wide_Hash
"a-szfzha", -- Ada.Strings.Wide_Wide_Fixed.Wide_Wide_Hash
"a-szmzco", -- Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants
"a-szuzha", -- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Hash
"a-taster", -- Ada.Task_Termination
"a-tgdico", -- Ada.Tags.Generic_Dispatching_Constructor
"a-tiboio", -- Ada.Text_IO.Bounded_IO
"a-tiunio", -- Ada.Text_IO.Unbounded_IO
"a-wichun", -- Ada.Wide_Characters.Unicode
"a-wwboio", -- Ada.Wide_Text_IO.Wide_Bounded_IO
"a-wwunio", -- Ada.Wide_Text_IO.Wide_Unbounded_IO
"a-zchara", -- Ada.Wide_Wide_Characters
"a-ztcoio", -- Ada.Wide_Wide_Text_IO.Complex_IO
"a-ztedit", -- Ada.Wide_Wide_Text_IO.Editing
"a-zttest", -- Ada.Wide_Wide_Text_IO.Text_Streams
"a-ztexio", -- Ada.Wide_Wide_Text_IO
"a-zzboio", -- Ada.Wide_Wide_Text_IO.Wide_Wide_Bounded_IO
"a-zzunio", -- Ada.Wide_Wide_Text_IO.Wide_Wide_Unbounded_IO
------------------------------------------------------
-- RM Required Additions to Ada 2005 for GNAT Types --
------------------------------------------------------
"a-lcteio", -- Ada.Long_Complex_Text_IO
"a-lfztio", -- Ada.Long_Float_Wide_Wide_Text_IO
"a-liztio", -- Ada.Long_Integer_Wide_Wide_Text_IO
"a-llctio", -- Ada.Long_Long_Complex_Text_IO
"a-llfzti", -- Ada.Long_Long_Float_Wide_Wide_Text_IO
"a-llizti", -- Ada.Long_Long_Integer_Wide_Wide_Text_IO
"a-scteio", -- Ada.Short_Complex_Text_IO
"a-sfztio", -- Ada.Short_Float_Wide_Wide_Text_IO
"a-siztio", -- Ada.Short_Integer_Wide_Wide_Text_IO
"a-ssizti", -- Ada.Short_Short_Integer_Wide_Wide_Text_IO
"a-ztcstr", -- Ada.Wide_Wide_Text_IO.C_Streams
----------------------------------------
-- GNAT Defined Additions to Ada 2005 --
----------------------------------------
"a-cgaaso", -- Ada.Containers.Generic_Anonymous_Array_Sort
"a-chzla1", -- Ada.Characters.Wide_Wide_Latin_1
"a-chzla9", -- Ada.Characters.Wide_Wide_Latin_9
"a-ciormu", -- Ada.Containers.Indefinite_Ordered_Multisets
"a-coormu", -- Ada.Containers.Ordered_Multisets
"a-crdlli", -- Ada.Containers.Restricted_Doubly_Linked_Lists
"a-secain", -- Ada.Strings.Equal_Case_Insensitive
"a-shcain", -- Ada.Strings.Hash_Case_Insensitive
"a-slcain", -- Ada.Strings.Less_Case_Insensitive
"a-szuzti", -- Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Text_IO
"a-zchuni", -- Ada.Wide_Wide_Characters.Unicode
---------------------------
-- GNAT Special IO Units --
---------------------------
-- See Ada 95 section for further information. These packages are for the
-- implementation of the Wide_Wide_Text_IO generic packages.
"a-ztdeio", -- Ada.Wide_Wide_Text_IO.Decimal_IO
"a-ztenio", -- Ada.Wide_Wide_Text_IO.Enumeration_IO
"a-ztfiio", -- Ada.Wide_Wide_Text_IO.Fixed_IO
"a-ztflio", -- Ada.Wide_Wide_Text_IO.Float_IO
"a-ztinio", -- Ada.Wide_Wide_Text_IO.Integer_IO
"a-ztmoio", -- Ada.Wide_Wide_Text_IO.Modular_IO
------------------------
-- GNAT Library Units --
------------------------
"g-zstspl"); -- GNAT.Wide_Wide_String_Split
----------------------
-- Get_Kind_Of_Unit --
----------------------
function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit is
Fname : constant File_Name_Type := Unit_File_Name (U);
begin
-- If length of file name is greater than 12, not predefined.
-- The value 12 here is an 8 char name with extension .ads.
if Length_Of_Name (Fname) > 12 then
return Not_Predefined_Unit;
end if;
-- Otherwise test file name
Get_Name_String (Fname);
-- Not predefined if file name does not start with a- g- s- i-
if Name_Len < 3
or else Name_Buffer (2) /= '-'
or else (Name_Buffer (1) /= 'a'
and then
Name_Buffer (1) /= 'g'
and then
Name_Buffer (1) /= 'i'
and then
Name_Buffer (1) /= 's')
then
return Not_Predefined_Unit;
end if;
-- Not predefined if file name does not end in .ads. This can
-- happen when non-standard file names are being used.
if Name_Buffer (Name_Len - 3 .. Name_Len) /= ".ads" then
return Not_Predefined_Unit;
end if;
-- Otherwise normalize file name to 8 characters
Name_Len := Name_Len - 4;
while Name_Len < 8 loop
Name_Len := Name_Len + 1;
Name_Buffer (Name_Len) := ' ';
end loop;
-- See if name is in 95 list
for J in Non_Imp_File_Names_95'Range loop
if Name_Buffer (1 .. 8) = Non_Imp_File_Names_95 (J) then
return Ada_95_Unit;
end if;
end loop;
-- See if name is in 05 list
for J in Non_Imp_File_Names_05'Range loop
if Name_Buffer (1 .. 8) = Non_Imp_File_Names_05 (J) then
return Ada_05_Unit;
end if;
end loop;
-- Only remaining special possibilities are children of System.RPC and
-- System.Garlic and special files of the form System.Aux...
Get_Name_String (Unit_Name (U));
if Name_Len > 12
and then Name_Buffer (1 .. 11) = "system.rpc."
then
return Ada_95_Unit;
end if;
if Name_Len > 15
and then Name_Buffer (1 .. 14) = "system.garlic."
then
return Ada_95_Unit;
end if;
if Name_Len > 11
and then Name_Buffer (1 .. 10) = "system.aux"
then
return Ada_95_Unit;
end if;
-- All tests failed, this is definitely an implementation unit
return Implementation_Unit;
end Get_Kind_Of_Unit;
end Impunit;