13.7 The Package System
For each implementation there is a library package 
called System which includes the definitions of certain configuration-dependent 
characteristics. 
Static Semantics
The following language-defined 
library package exists: 
package System 
is
   pragma Pure(System);
 
   type Name 
is implementation-defined-enumeration-type;
   
System_Name : 
constant Name := 
implementation-defined;
 
   -- System-Dependent Named Numbers:
   Min_Int               : 
constant := 
root_integer'First;
   
Max_Int               : 
constant := 
root_integer'Last;
 
   Max_Binary_Modulus    : 
constant := 
implementation-defined;
   
Max_Nonbinary_Modulus : 
constant := 
implementation-defined;
 
   Max_Base_Digits       : 
constant := 
root_real'Digits;
   
Max_Digits            : 
constant := 
implementation-defined;
 
   Max_Mantissa          : 
constant := 
implementation-defined;
   
Fine_Delta            : 
constant := 
implementation-defined;
 
   Tick                  : 
constant := 
implementation-defined;
 
   -- Storage-related Declarations:
   type Address 
is implementation-defined;
   
Null_Address : 
constant Address;
 
   Storage_Unit : 
constant := 
implementation-defined;
   
Word_Size    : 
constant := 
implementation-defined * Storage_Unit;
   
Memory_Size  : 
constant := 
implementation-defined;
 
   --
 Address Comparison:
   function "<" (Left, Right : Address) 
return Boolean
      
with Convention => Intrinsic;
   
function "<="(Left, Right : Address) 
return Boolean
      
with Convention => Intrinsic;
   
function ">" (Left, Right : Address) 
return Boolean
      
with Convention => Intrinsic;
   
function ">="(Left, Right : Address) 
return Boolean
      
with Convention => Intrinsic;
   
function "=" (Left, Right : Address) 
return Boolean
      
with Convention => Intrinsic;
-- 
function "/=" (Left, Right : Address) 
return Boolean;
   --
 "/=" is implicitly defined 
   --
 Other System-Dependent Declarations:
   type Bit_Order 
is (
High_Order_First, 
Low_Order_First);
   
Default_Bit_Order : 
constant Bit_Order := 
implementation-defined;
 
   --
 Priority-related declarations (see D.1):
   subtype Any_Priority 
is Integer 
range implementation-defined;
   
subtype Priority 
is Any_Priority 
range Any_Priority'First ..
             
implementation-defined;
   
subtype Interrupt_Priority 
is Any_Priority 
range Priority'Last+1 ..
             Any_Priority'Last;
 
   Default_Priority : 
constant Priority :=
             (Priority'First + Priority'Last)/2;
 
private
   ... -- not specified by the language
end System;
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.
The named numbers Fine_Delta and Tick are of the 
type universal_real; the others are of the type universal_integer.
The meanings of the 
named numbers are: 
Min_Int 
The smallest (most negative) value allowed for the expressions of a 
signed_integer_type_definition.
 
Max_Int 
The largest (most positive) value allowed for the expressions of a 
signed_integer_type_definition.
 
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.
 
Max_Nonbinary_Modulus 
A value such that it, and all lesser positive integers, are allowed as 
the modulus of a 
modular_type_definition. 
 
Max_Base_Digits 
The largest value allowed for the requested decimal precision in a 
floating_point_definition.
 
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.
 
Max_Mantissa 
The largest possible number of binary digits in the mantissa of machine 
numbers of a user-defined ordinary fixed point type. (The mantissa is 
defined in 
Annex G.)
 
Fine_Delta 
The smallest delta allowed in an 
ordinary_fixed_point_definition 
that has the 
real_range_specification 
range –1.0 .. 1.0. 
 
Tick 
A period in seconds approximating the real time interval during which 
the value of Calendar.Clock remains constant. 
Storage_Unit 
The number of bits per storage element.
Word_Size 
The number of bits per word.
Memory_Size 
An implementation-defined value that is intended to reflect the memory 
size of the configuration in storage elements. 
 Address is a definite, nonlimited type with preelaborable 
initialization (see 
10.2.1). 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. 
 
 Default_Bit_Order shall be a static constant. See 
13.5.3 for an explanation of Bit_Order and 
Default_Bit_Order. 
 
Implementation Permissions
 An implementation may add additional implementation-defined 
declarations to package System and its children. However, it is usually 
better for the implementation to provide additional functionality via 
implementation-defined children of System. 
Implementation Advice
Address should be a private type. 
17  There are also some language-defined 
child packages of System defined elsewhere. 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe