Patchwork [Ada] MKS dimension system

login
register
mail settings
Submitter Arnaud Charlet
Date Dec. 20, 2011, 1:52 p.m.
Message ID <20111220135231.GA25045@adacore.com>
Download mbox | patch
Permalink /patch/132419/
State New
Headers show

Comments

Arnaud Charlet - Dec. 20, 2011, 1:52 p.m.
New GNAT library packages that defines the MKS dimension system (SI system of
units) and provide IO routines for this dimension system.

Tested on x86_64-pc-linux-gnu, committed on trunk

2011-12-20  Vincent Pucci  <pucci@adacore.com>

	* impunit.adb: s-dimkio, s-dimmks and s-dmotpr defined as GNAT
	Defined Additions to System.
	* Makefile.rtl: s-dimkio, s-dimmks and s-dmotpr added.
	* s-dimkio.ads, s-dimmks.ads, s-dmotpr.ads: New files.

Patch

Index: impunit.adb
===================================================================
--- impunit.adb	(revision 182532)
+++ impunit.adb	(working copy)
@@ -368,6 +368,9 @@ 
     ("s-assert", F),  -- System.Assertions
     ("s-diflio", F),  -- System.Dim_Float_IO
     ("s-diinio", F),  -- System.Dim_Integer_IO
+    ("s-dimkio", F),  -- System.Dim_Mks_IO
+    ("s-dimmks", F),  -- System.Dim_Mks
+    ("s-dmotpr", F),  -- System.Dim_Mks.Other_Prefixes
     ("s-memory", F),  -- System.Memory
     ("s-parint", F),  -- System.Partition_Interface
     ("s-pooglo", F),  -- System.Pool_Global
Index: s-dmotpr.ads
===================================================================
--- s-dmotpr.ads	(revision 0)
+++ s-dmotpr.ads	(revision 0)
@@ -0,0 +1,168 @@ 
+------------------------------------------------------------------------------
+--                                                                          --
+--                  GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                --
+--                                                                          --
+--         S Y S T E M . D I M _ M K S . O T H E R _ P R E F I X E S        --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNARL 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 3,  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.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNARL was developed by the GNARL team at Florida State University.       --
+-- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  Package that defines some other prefixes for the MKS base unit system.
+
+--  These prefixes have been defined in a child package in order to avoid too
+--  many constant declarations in System.Dim_Mks.
+
+package System.Dim_Mks.Other_Prefixes is
+
+   --  SI prefixes for Meter
+
+   ym  : constant Length := 1.0E-24;  -- yocto
+   zm  : constant Length := 1.0E-21;  -- zepto
+   am  : constant Length := 1.0E-18;  -- atto
+   fm  : constant Length := 1.0E-15;  -- femto
+   pm  : constant Length := 1.0E-12;  -- pico
+   nm  : constant Length := 1.0E-09;  -- nano
+   Gm  : constant Length := 1.0E+09;  -- giga
+   Tm  : constant Length := 1.0E+12;  -- tera
+   Pem : constant Length := 1.0E+15;  -- peta
+   Em  : constant Length := 1.0E+18;  -- exa
+   Zem : constant Length := 1.0E+21;  -- zetta
+   Yom : constant Length := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Kilogram
+
+   yg  : constant Mass := 1.0E-27;  -- yocto
+   zg  : constant Mass := 1.0E-24;  -- zepto
+   ag  : constant Mass := 1.0E-21;  -- atto
+   fg  : constant Mass := 1.0E-18;  -- femto
+   pg  : constant Mass := 1.0E-15;  -- pico
+   ng  : constant Mass := 1.0E-12;  -- nano
+   Gg  : constant Mass := 1.0E+06;  -- giga
+   Tg  : constant Mass := 1.0E+09;  -- tera
+   Peg : constant Mass := 1.0E+13;  -- peta
+   Eg  : constant Mass := 1.0E+15;  -- exa
+   Zeg : constant Mass := 1.0E+18;  -- zetta
+   Yog : constant Mass := 1.0E+21;  -- yotta
+
+   --  SI prefixes for Second
+
+   ys  : constant Time := 1.0E-24;  -- yocto
+   zs  : constant Time := 1.0E-21;  -- zepto
+   as  : constant Time := 1.0E-18;  -- atto
+   fs  : constant Time := 1.0E-15;  -- femto
+   ps  : constant Time := 1.0E-12;  -- pico
+   ns  : constant Time := 1.0E-09;  -- nano
+   Gs  : constant Time := 1.0E+09;  -- giga
+   Ts  : constant Time := 1.0E+12;  -- tera
+   Pes : constant Time := 1.0E+15;  -- peta
+   Es  : constant Time := 1.0E+18;  -- exa
+   Zes : constant Time := 1.0E+21;  -- zetta
+   Yos : constant Time := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Ampere
+
+   yA  : constant Electric_Current := 1.0E-24;  -- yocto
+   zA  : constant Electric_Current := 1.0E-21;  -- zepto
+   aA  : constant Electric_Current := 1.0E-18;  -- atto
+   fA  : constant Electric_Current := 1.0E-15;  -- femto
+   nA  : constant Electric_Current := 1.0E-09;  -- nano
+   uA  : constant Electric_Current := 1.0E-06;  -- micro (u)
+   GA  : constant Electric_Current := 1.0E+09;  -- giga
+   TA  : constant Electric_Current := 1.0E+12;  -- tera
+   PeA : constant Electric_Current := 1.0E+15;  -- peta
+   EA  : constant Electric_Current := 1.0E+18;  -- exa
+   ZeA : constant Electric_Current := 1.0E+21;  -- zetta
+   YoA : constant Electric_Current := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Kelvin
+
+   yK  : constant Thermodynamic_Temperature := 1.0E-24;  -- yocto
+   zK  : constant Thermodynamic_Temperature := 1.0E-21;  -- zepto
+   aK  : constant Thermodynamic_Temperature := 1.0E-18;  -- atto
+   fK  : constant Thermodynamic_Temperature := 1.0E-15;  -- femto
+   pK  : constant Thermodynamic_Temperature := 1.0E-12;  -- pico
+   nK  : constant Thermodynamic_Temperature := 1.0E-09;  -- nano
+   uK  : constant Thermodynamic_Temperature := 1.0E-06;  -- micro (u)
+   mK  : constant Thermodynamic_Temperature := 1.0E-03;  -- milli
+   cK  : constant Thermodynamic_Temperature := 1.0E-02;  -- centi
+   dK  : constant Thermodynamic_Temperature := 1.0E-01;  -- deci
+   daK : constant Thermodynamic_Temperature := 1.0E+01;  -- deka
+   hK  : constant Thermodynamic_Temperature := 1.0E+02;  -- hecto
+   kK  : constant Thermodynamic_Temperature := 1.0E+03;  -- kilo
+   MeK : constant Thermodynamic_Temperature := 1.0E+06;  -- mega
+   GK  : constant Thermodynamic_Temperature := 1.0E+09;  -- giga
+   TK  : constant Thermodynamic_Temperature := 1.0E+12;  -- tera
+   PeK : constant Thermodynamic_Temperature := 1.0E+15;  -- peta
+   EK  : constant Thermodynamic_Temperature := 1.0E+18;  -- exa
+   ZeK : constant Thermodynamic_Temperature := 1.0E+21;  -- zetta
+   YoK : constant Thermodynamic_Temperature := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Mole
+
+   ymol  : constant Amount_Of_Substance := 1.0E-24;  -- yocto
+   zmol  : constant Amount_Of_Substance := 1.0E-21;  -- zepto
+   amol  : constant Amount_Of_Substance := 1.0E-18;  -- atto
+   fmol  : constant Amount_Of_Substance := 1.0E-15;  -- femto
+   pmol  : constant Amount_Of_Substance := 1.0E-12;  -- pico
+   nmol  : constant Amount_Of_Substance := 1.0E-09;  -- nano
+   umol  : constant Amount_Of_Substance := 1.0E-06;  -- micro (u)
+   mmol  : constant Amount_Of_Substance := 1.0E-03;  -- milli
+   cmol  : constant Amount_Of_Substance := 1.0E-02;  -- centi
+   dmol  : constant Amount_Of_Substance := 1.0E-01;  -- deci
+   damol : constant Amount_Of_Substance := 1.0E+01;  -- deka
+   hmol  : constant Amount_Of_Substance := 1.0E+02;  -- hecto
+   kmol  : constant Amount_Of_Substance := 1.0E+03;  -- kilo
+   Memol : constant Amount_Of_Substance := 1.0E+06;  -- mega
+   Gmol  : constant Amount_Of_Substance := 1.0E+09;  -- giga
+   Tmol  : constant Amount_Of_Substance := 1.0E+12;  -- tera
+   Pemol : constant Amount_Of_Substance := 1.0E+15;  -- peta
+   Emol  : constant Amount_Of_Substance := 1.0E+18;  -- exa
+   Zemol : constant Amount_Of_Substance := 1.0E+21;  -- zetta
+   Yomol : constant Amount_Of_Substance := 1.0E+24;  -- yotta
+
+   --  SI prefixes for Candela
+
+   ycd  : constant Luminous_Intensity := 1.0E-24;  -- yocto
+   zcd  : constant Luminous_Intensity := 1.0E-21;  -- zepto
+   acd  : constant Luminous_Intensity := 1.0E-18;  -- atto
+   fcd  : constant Luminous_Intensity := 1.0E-15;  -- femto
+   pcd  : constant Luminous_Intensity := 1.0E-12;  -- pico
+   ncd  : constant Luminous_Intensity := 1.0E-09;  -- nano
+   ucd  : constant Luminous_Intensity := 1.0E-06;  -- micro (u)
+   mcd  : constant Luminous_Intensity := 1.0E-03;  -- milli
+   ccd  : constant Luminous_Intensity := 1.0E-02;  -- centi
+   dcd  : constant Luminous_Intensity := 1.0E-01;  -- deci
+   dacd : constant Luminous_Intensity := 1.0E+01;  -- deka
+   hcd  : constant Luminous_Intensity := 1.0E+02;  -- hecto
+   kcd  : constant Luminous_Intensity := 1.0E+03;  -- kilo
+   Mecd : constant Luminous_Intensity := 1.0E+06;  -- mega
+   Gcd  : constant Luminous_Intensity := 1.0E+09;  -- giga
+   Tcd  : constant Luminous_Intensity := 1.0E+12;  -- tera
+   Pecd : constant Luminous_Intensity := 1.0E+15;  -- peta
+   Ecd  : constant Luminous_Intensity := 1.0E+18;  -- exa
+   Zecd : constant Luminous_Intensity := 1.0E+21;  -- zetta
+   Yocd : constant Luminous_Intensity := 1.0E+24;  -- yotta
+
+end System.Dim_Mks.Other_Prefixes;
Index: Makefile.rtl
===================================================================
--- Makefile.rtl	(revision 182532)
+++ Makefile.rtl	(working copy)
@@ -506,7 +506,10 @@ 
   s-crtrun$(objext) \
   s-diflio$(objext) \
   s-diinio$(objext) \
+  s-dimkio$(objext) \
+  s-dimmks$(objext) \
   s-direio$(objext) \
+  s-dmotpr$(objext) \
   s-dsaser$(objext) \
   s-excdeb$(objext) \
   s-except$(objext) \
Index: s-dimmks.ads
===================================================================
--- s-dimmks.ads	(revision 0)
+++ s-dimmks.ads	(revision 0)
@@ -0,0 +1,324 @@ 
+------------------------------------------------------------------------------
+--                                                                          --
+--                  GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                --
+--                                                                          --
+--                        S Y S T E M . D I M _ M K S                       --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNARL 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 3,  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.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNARL was developed by the GNARL team at Florida State University.       --
+-- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This package defines the MKS dimension system which is the SI system of
+--  units.
+--  Some other prefixes of this sytem are defined in a child package (see
+--  System.Dim_Mks.Other_Prefixes) in order to avoid too many constant
+--  declarations in this package.
+
+with Ada.Numerics;
+
+package System.Dim_Mks is
+
+   e  : constant := Ada.Numerics.e;
+   Pi : constant := Ada.Numerics.Pi;
+
+   --  Dimensioned type Mks_Type
+
+   type Mks_Type is new Long_Float
+     with
+      Dimension_System => ((Meter, 'm'),
+        (Kilogram, "kg"),
+        (Second,   's'),
+        (Ampere,   'A'),
+        (Kelvin,   'K'),
+        (Mole,     "mol"),
+        (Candela,  "cd"));
+
+   --  SI Base
+
+   subtype Length is Mks_Type
+     with
+      Dimension => ('m',
+        Meter =>  1,
+        others => 0);
+   subtype Mass is Mks_Type
+     with
+      Dimension => ("kg",
+        Kilogram => 1,
+        others =>   0);
+   subtype Time is Mks_Type
+     with
+      Dimension => ('s',
+        Second => 1,
+        others => 0);
+   subtype Electric_Current is Mks_Type
+     with
+      Dimension => ('A',
+        Ampere => 1,
+        others => 0);
+   subtype Thermodynamic_Temperature is Mks_Type
+     with
+      Dimension => ('K',
+        Kelvin => 1,
+        others => 0);
+   subtype Amount_Of_Substance is Mks_Type
+     with
+      Dimension => ("mol",
+        Mole =>   1,
+        others => 0);
+   subtype Luminous_Intensity is Mks_Type
+     with
+      Dimension => ("cd",
+        Candela => 1,
+        others =>  0);
+
+   --  SI Base units
+
+   m   : constant Length                    := 1.0;
+   kg  : constant Mass                      := 1.0;
+   s   : constant Time                      := 1.0;
+   A   : constant Electric_Current          := 1.0;
+   K   : constant Thermodynamic_Temperature := 1.0;
+   mol : constant Amount_Of_Substance       := 1.0;
+   cd  : constant Luminous_Intensity        := 1.0;
+
+   --  SI Derived dimensioned subtypes
+
+   subtype Angle is Mks_Type
+     with
+      Dimension => ("rad",
+        others => 0);
+
+   subtype Solid_Angle is Mks_Type
+     with
+      Dimension => ("sr",
+        others => 0);
+
+   subtype Frequency is Mks_Type
+     with
+      Dimension => ("Hz",
+        Second => -1,
+        others => 0);
+   subtype Force is Mks_Type
+     with
+      Dimension => ('N',
+        Meter =>    1,
+        Kilogram => 1,
+        Second =>  -2,
+        others =>   0);
+   subtype Pressure is Mks_Type
+     with
+      Dimension => ("Pa",
+        Meter =>    -1,
+        Kilogram => 1,
+        Second =>   -2,
+        others =>   0);
+   subtype Energy is Mks_Type
+     with
+      Dimension => ('J',
+        Meter =>    2,
+        Kilogram => 1,
+        Second =>   -2,
+        others =>   0);
+   subtype Power is Mks_Type
+     with
+      Dimension => ('W',
+        Meter =>    2,
+        Kilogram => 1,
+        Second =>   -3,
+        others =>   0);
+   subtype Electric_Charge is Mks_Type
+     with
+      Dimension => ('C',
+        Second => 1,
+        Ampere => 1,
+        others => 0);
+   subtype Electric_Potential_Difference is Mks_Type
+     with
+      Dimension => ('V',
+        Meter =>    2,
+        Kilogram => 1,
+        Second =>   -3,
+        Ampere =>   -1,
+        others =>   0);
+   subtype Electric_Capacitance is Mks_Type
+     with
+      Dimension => ('F',
+        Meter =>    -2,
+        Kilogram => -1,
+        Second =>   4,
+        Ampere =>   2,
+        others =>   0);
+   subtype Electric_Resistance is Mks_Type
+     with
+      Dimension => ("Ω",
+        Meter =>    2,
+        Kilogram => 1,
+        Second =>   -3,
+        Ampere =>   -2,
+        others =>   0);
+   subtype Electric_Conductance is Mks_Type
+     with
+      Dimension => ('S',
+        Meter =>    -2,
+        Kilogram => -1,
+        Second =>   3,
+        Ampere =>   2,
+        others =>   0);
+   subtype Magnetic_Flux is Mks_Type
+     with
+      Dimension => ("Wb",
+        Meter =>    2,
+        Kilogram => 1,
+        Second =>   -2,
+        Ampere =>   -1,
+        others =>   0);
+   subtype Magnetic_Flux_Density is Mks_Type
+     with
+      Dimension => ('T',
+        Kilogram => 1,
+        Second =>   -2,
+        Ampere =>   -1,
+        others =>   0);
+   subtype Inductance is Mks_Type
+     with
+      Dimension => ('H',
+        Meter =>    2,
+        Kilogram => 1,
+        Second =>   -2,
+        Ampere =>   -2,
+        others =>   0);
+   subtype Celsius_Temperature is Mks_Type
+     with
+      Dimension => ("°C",
+        Kelvin => 1,
+        others => 0);
+   subtype Luminous_Flux is Mks_Type
+     with
+      Dimension => ("lm",
+        Candela => 1,
+        others =>  0);
+   subtype Illuminance is Mks_Type
+     with
+      Dimension => ("lx",
+        Meter =>   -2,
+        Candela => 1,
+        others =>  0);
+   subtype Radioactivity is Mks_Type
+     with
+      Dimension => ("Bq",
+        Second => -1,
+        others => 0);
+   subtype Absorbed_Dose is Mks_Type
+     with
+      Dimension => ("Gy",
+        Meter =>  2,
+        Second => -2,
+        others => 0);
+   subtype Equivalent_Dose is Mks_Type
+     with
+      Dimension => ("Sv",
+        Meter =>  2,
+        Second => -2,
+        others => 0);
+   subtype Catalytic_Activity is Mks_Type
+     with
+      Dimension => ("kat",
+        Second => -1,
+        Mole =>   1,
+        others => 0);
+
+   rad : constant Angle                         := 1.0;
+   sr  : constant Solid_Angle                   := 1.0;
+   Hz  : constant Frequency                     := 1.0;
+   N   : constant Force                         := 1.0;
+   Pa  : constant Pressure                      := 1.0;
+   J   : constant Energy                        := 1.0;
+   W   : constant Power                         := 1.0;
+   C   : constant Electric_Charge               := 1.0;
+   V   : constant Electric_Potential_Difference := 1.0;
+   F   : constant Electric_Capacitance          := 1.0;
+   Ohm : constant Electric_Resistance           := 1.0;
+   Si  : constant Electric_Conductance          := 1.0;
+   Wb  : constant Magnetic_Flux                 := 1.0;
+   T   : constant Magnetic_Flux_Density         := 1.0;
+   H   : constant Inductance                    := 1.0;
+   dC  : constant Celsius_Temperature           := 273.15;
+   lm  : constant Luminous_Flux                 := 1.0;
+   lx  : constant Illuminance                   := 1.0;
+   Bq  : constant Radioactivity                 := 1.0;
+   Gy  : constant Absorbed_Dose                 := 1.0;
+   Sv  : constant Equivalent_Dose               := 1.0;
+   kat : constant Catalytic_Activity            := 1.0;
+
+   --  SI prefixes for Meter
+
+   um  : constant Length := 1.0E-06;  -- micro (u)
+   mm  : constant Length := 1.0E-03;  -- milli
+   cm  : constant Length := 1.0E-02;  -- centi
+   dm  : constant Length := 1.0E-01;  -- deci
+   dam : constant Length := 1.0E+01;  -- deka
+   hm  : constant Length := 1.0E+02;  -- hecto
+   km  : constant Length := 1.0E+03;  -- kilo
+   Mem : constant Length := 1.0E+06;  -- mega
+
+   --  SI prefixes for Kilogram
+
+   ug  : constant Mass := 1.0E-09;  -- micro (u)
+   mg  : constant Mass := 1.0E-06;  -- milli
+   cg  : constant Mass := 1.0E-05;  -- centi
+   dg  : constant Mass := 1.0E-04;  -- deci
+   g   : constant Mass := 1.0E-03;  -- gram
+   dag : constant Mass := 1.0E-02;  -- deka
+   hg  : constant Mass := 1.0E-01;  -- hecto
+   Meg : constant Mass := 1.0E+03;  -- mega
+
+   --  SI prefixes for Second
+
+   us  : constant Time := 1.0E-06;  -- micro (u)
+   ms  : constant Time := 1.0E-03;  -- milli
+   cs  : constant Time := 1.0E-02;  -- centi
+   ds  : constant Time := 1.0E-01;  -- deci
+   das : constant Time := 1.0E+01;  -- deka
+   hs  : constant Time := 1.0E+02;  -- hecto
+   ks  : constant Time := 1.0E+03;  -- kilo
+   Mes : constant Time := 1.0E+06;  -- mega
+
+   --  Other constants for Second
+
+   min  : constant Time := 60.0 * s;
+   hour : constant Time := 60.0 * min;
+   day  : constant Time := 24.0 * hour;
+   year : constant Time := 365.25 * day;
+
+   --  SI prefixes for Ampere
+
+   mA  : constant Electric_Current := 1.0E-03;  -- milli
+   cA  : constant Electric_Current := 1.0E-02;  -- centi
+   dA  : constant Electric_Current := 1.0E-01;  -- deci
+   daA : constant Electric_Current := 1.0E+01;  -- deka
+   hA  : constant Electric_Current := 1.0E+02;  -- hecto
+   kA  : constant Electric_Current := 1.0E+03;  -- kilo
+   MeA : constant Electric_Current := 1.0E+06;  -- mega
+
+end System.Dim_Mks;
Index: s-dimkio.ads
===================================================================
--- s-dimkio.ads	(revision 0)
+++ s-dimkio.ads	(revision 0)
@@ -0,0 +1,38 @@ 
+------------------------------------------------------------------------------
+--                                                                          --
+--                  GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS                --
+--                                                                          --
+--                     S Y S T E M . D I M _ M K S _ I O                    --
+--                                                                          --
+--                                  S p e c                                 --
+--                                                                          --
+--          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
+--                                                                          --
+-- GNARL 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 3,  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.                                     --
+--                                                                          --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
+--                                                                          --
+-- GNARL was developed by the GNARL team at Florida State University.       --
+-- Extensive contributions were provided by Ada Core Technologies, Inc.     --
+--                                                                          --
+------------------------------------------------------------------------------
+
+--  This package provides IO routines for the MKS dimension system (see
+--  System.Dim_Mks).
+
+with System.Dim_Mks; use System.Dim_Mks;
+with System.Dim_Float_IO;
+
+package System.Dim_Mks_IO is new System.Dim_Float_IO (Mks_Type);