File : a-wtmoio.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --           A D A . W I D E _ T E X T _ I O . M O D U L A R _ I O          --
   6 --                                                                          --
   7 --                                 B o d y                                  --
   8 --                                                                          --
   9 --           Copyright (C) 1992-2009, Free Software Foundation, Inc.        --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 with Ada.Wide_Text_IO.Modular_Aux;
  33 
  34 with System.Unsigned_Types; use System.Unsigned_Types;
  35 with System.WCh_Con;        use System.WCh_Con;
  36 with System.WCh_WtS;        use System.WCh_WtS;
  37 
  38 package body Ada.Wide_Text_IO.Modular_IO is
  39 
  40    subtype TFT is Ada.Wide_Text_IO.File_Type;
  41    --  File type required for calls to routines in Aux
  42 
  43    package Aux renames Ada.Wide_Text_IO.Modular_Aux;
  44 
  45    ---------
  46    -- Get --
  47    ---------
  48 
  49    procedure Get
  50      (File  : File_Type;
  51       Item  : out Num;
  52       Width : Field := 0)
  53    is
  54    begin
  55       if Num'Size > Unsigned'Size then
  56          Aux.Get_LLU (TFT (File), Long_Long_Unsigned (Item), Width);
  57       else
  58          Aux.Get_Uns (TFT (File), Unsigned (Item), Width);
  59       end if;
  60 
  61    exception
  62       when Constraint_Error => raise Data_Error;
  63    end Get;
  64 
  65    procedure Get
  66      (Item  : out Num;
  67       Width : Field := 0)
  68    is
  69    begin
  70       Get (Current_Input, Item, Width);
  71    end Get;
  72 
  73    procedure Get
  74      (From : Wide_String;
  75       Item : out Num;
  76       Last : out Positive)
  77    is
  78       S : constant String := Wide_String_To_String (From, WCEM_Upper);
  79       --  String on which we do the actual conversion. Note that the method
  80       --  used for wide character encoding is irrelevant, since if there is
  81       --  a character outside the Standard.Character range then the call to
  82       --  Aux.Gets will raise Data_Error in any case.
  83 
  84    begin
  85       if Num'Size > Unsigned'Size then
  86          Aux.Gets_LLU (S, Long_Long_Unsigned (Item), Last);
  87       else
  88          Aux.Gets_Uns (S, Unsigned (Item), Last);
  89       end if;
  90 
  91    exception
  92       when Constraint_Error => raise Data_Error;
  93    end Get;
  94 
  95    ---------
  96    -- Put --
  97    ---------
  98 
  99    procedure Put
 100      (File  : File_Type;
 101       Item  : Num;
 102       Width : Field := Default_Width;
 103       Base  : Number_Base := Default_Base)
 104    is
 105    begin
 106       if Num'Size > Unsigned'Size then
 107          Aux.Put_LLU (TFT (File), Long_Long_Unsigned (Item), Width, Base);
 108       else
 109          Aux.Put_Uns (TFT (File), Unsigned (Item), Width, Base);
 110       end if;
 111    end Put;
 112 
 113    procedure Put
 114      (Item  : Num;
 115       Width : Field := Default_Width;
 116       Base  : Number_Base := Default_Base)
 117    is
 118    begin
 119       Put (Current_Output, Item, Width, Base);
 120    end Put;
 121 
 122    procedure Put
 123      (To   : out Wide_String;
 124       Item : Num;
 125       Base : Number_Base := Default_Base)
 126    is
 127       S : String (To'First .. To'Last);
 128 
 129    begin
 130       if Num'Size > Unsigned'Size then
 131          Aux.Puts_LLU (S, Long_Long_Unsigned (Item), Base);
 132       else
 133          Aux.Puts_Uns (S, Unsigned (Item), Base);
 134       end if;
 135 
 136       for J in S'Range loop
 137          To (J) := Wide_Character'Val (Character'Pos (S (J)));
 138       end loop;
 139    end Put;
 140 
 141 end Ada.Wide_Text_IO.Modular_IO;