 (1)
 For each implementation there is a library package called System which
includes the definitions of certain configurationdependent characteristics.
Static Semantics
 (2)
 The following languagedefined library package exists:
(3)
package System is
pragma Preelaborate(System);
(4)
type Name is implementationdefinedenumerationtype;
System_Name : constant Name := implementationdefined;
(5)
 SystemDependent Named Numbers:
(6)
Min_Int : constant := root_integer'First;
Max_Int : constant := root_integer'Last;
(7)
Max_Binary_Modulus : constant := implementationdefined;
Max_Nonbinary_Modulus : constant := implementationdefined;
(8)
Max_Base_Digits : constant := root_real'Digits;
Max_Digits : constant := implementationdefined;
(9)
Max_Mantissa : constant := implementationdefined;
Fine_Delta : constant := implementationdefined;
(10)
Tick : constant := implementationdefined;
(11)
 Storagerelated Declarations:
(12)
type Address is implementationdefined;
Null_Address : constant Address;
(13)
Storage_Unit : constant := implementationdefined;
Word_Size : constant := implementationdefined * Storage_Unit;
Memory_Size : constant := implementationdefined;
(14)
 Address Comparison:
function "<" (Left, Right : Address) return Boolean;
function "<="(Left, Right : Address) return Boolean;
function ">" (Left, Right : Address) return Boolean;
function ">="(Left, Right : Address) return Boolean;
function "=" (Left, Right : Address) return Boolean;
 function "/=" (Left, Right : Address) return Boolean;
 "/=" is implicitly defined
pragma Convention(Intrinsic, "<");
...  and so on for all languagedefined subprograms in this package
(15)
 Other SystemDependent Declarations:
type Bit_Order is (High_Order_First, Low_Order_First);
Default_Bit_Order : constant Bit_Order;
(16)
 Priorityrelated declarations (see D.1):
subtype Any_Priority is Integer range implementationdefined;
subtype Priority is Any_Priority range Any_Priority'First .. implementationdefined;
subtype Interrupt_Priority is Any_Priority range Priority'Last+1 .. Any_Priority'Last;
(17)
Default_Priority : constant Priority := (Priority'First + Priority'Last)/2;
(18)
private
...  not specified by the language
end System;
 (19)
 Name is an enumeration subtype. Values of type Name are the names of
alternative machine configurations handled by the implementation. System_Name represents the current machine configuration.
 (20)
 The named numbers Fine_Delta and Tick are of the type universal_real;
the others are of the type universal_integer.
 (21)
 The meanings of the named numbers are:
 (22)
 Min_Int
The smallest (most negative) value allowed for the
expressions of a signed_integer_type_definition.
 (23)
 Max_Int
The largest (most positive) value allowed for the expressions
of a signed_integer_type_definition.
 (24)
 Max_Binary_Modulus
A power of two such that it, and all lesser positive powers
of two, are allowed as the modulus of a modular_type_definition.
 (25)
 Max_Nonbinary_Modulus
A value such that it, and all lesser positive integers, are
allowed as the modulus of a modular_type_definition.
 (26)
 Max_Base_Digits
The largest value allowed for the requested decimal precision
in a floating_point_definition.
 (27)
 Max_Digits
The largest value allowed for the requested decimal precision
in a floating_point_definition that has no real_range_specification. Max_Digits is less than or equal to Max_Base_Digits.
 (28)
 Max_Mantissa
The largest possible number of binary digits in the mantissa of machine
numbers of a userdefined ordinary fixed point type. (The mantissa is defined
in Annex G.)
 (29)
 Fine_Delta
The smallest delta allowed in an ordinary_fixed_point_definition that has the real_range_specification range 1.0
.. 1.0.
 (30)
 Tick
A period in seconds approximating the real time interval
during which the value of Calendar.Clock remains constant.
 (31)
 Storage_Unit
The number of bits per storage element.
 (32)
 Word_Size
The number of bits per word.
 (33)
 Memory_Size
An implementationdefined value that is intended to reflect
the memory size of the configuration in storage elements.
 (34)
 Address is of a definite, nonlimited type. Address represents machine
addresses capable of addressing individual storage elements. Null_Address is
an address that is distinct from the address of any object or program unit.
 (35)
 See 13.5.3 for an explanation of Bit_Order and
Default_Bit_Order.
Implementation Permissions
 (36)
 An implementation may add additional implementationdefined declarations
to package System and its children. However, it is usually better for the
implementation to provide additional functionality via implementationdefined
children of System. Package System may be declared pure.
Implementation Advice
 (37)
 Address should be of a private type.

 (38)
(14) There are also some languagedefined child packages of System
defined elsewhere.
Subclauses
 The Package System.Storage_Elements
 The Package System.Address_To_Access_Conversions
 Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe  Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 950312