with Ada.Wide_Wide_Text_IO.Generic_Aux; use Ada.Wide_Wide_Text_IO.Generic_Aux;
with System.Img_Real; use System.Img_Real;
with System.Val_Real; use System.Val_Real;
package body Ada.Wide_Wide_Text_IO.Float_Aux is
procedure Get
(File : File_Type;
Item : out Long_Long_Float;
Width : Field)
is
Buf : String (1 .. Field'Last);
Stop : Integer := 0;
Ptr : aliased Integer := 1;
begin
if Width /= 0 then
Load_Width (File, Width, Buf, Stop);
String_Skip (Buf, Ptr);
else
Load_Real (File, Buf, Stop);
end if;
Item := Scan_Real (Buf, Ptr'Access, Stop);
Check_End_Of_Field (Buf, Stop, Ptr, Width);
end Get;
procedure Gets
(From : String;
Item : out Long_Long_Float;
Last : out Positive)
is
Pos : aliased Integer;
begin
String_Skip (From, Pos);
Item := Scan_Real (From, Pos'Access, From'Last);
Last := Pos - 1;
exception
when Constraint_Error =>
raise Data_Error;
end Gets;
procedure Load_Real
(File : File_Type;
Buf : out String;
Ptr : in out Natural)
is
Loaded : Boolean;
begin
Load_Skip (File);
Load (File, Buf, Ptr, '+', '-');
Load (File, Buf, Ptr, '.', Loaded);
if Loaded then
Load_Digits (File, Buf, Ptr, Loaded);
if not Loaded then
return;
end if;
else
Load_Digits (File, Buf, Ptr, Loaded);
if not Loaded then
return;
end if;
Load (File, Buf, Ptr, '#', ':', Loaded);
if Loaded then
Load (File, Buf, Ptr, '.', Loaded);
if Loaded then
Load_Extended_Digits (File, Buf, Ptr);
else
Load_Extended_Digits (File, Buf, Ptr);
Load (File, Buf, Ptr, '.', Loaded);
if Loaded then
Load_Extended_Digits (File, Buf, Ptr);
end if;
Load (File, Buf, Ptr, '#', ':');
end if;
else
Load (File, Buf, Ptr, '.', Loaded);
if Loaded then
Load_Digits (File, Buf, Ptr);
end if;
end if;
end if;
Load (File, Buf, Ptr, 'E', 'e', Loaded);
if Loaded then
Load (File, Buf, Ptr, '+', '-');
Load_Digits (File, Buf, Ptr);
end if;
end Load_Real;
procedure Put
(File : File_Type;
Item : Long_Long_Float;
Fore : Field;
Aft : Field;
Exp : Field)
is
Buf : String (1 .. Field'Last);
Ptr : Natural := 0;
begin
Set_Image_Real (Item, Buf, Ptr, Fore, Aft, Exp);
Put_Item (File, Buf (1 .. Ptr));
end Put;
procedure Puts
(To : out String;
Item : Long_Long_Float;
Aft : Field;
Exp : Field)
is
Buf : String (1 .. Field'Last);
Ptr : Natural := 0;
begin
Set_Image_Real (Item, Buf, Ptr, Fore => 1, Aft => Aft, Exp => Exp);
if Ptr > To'Length then
raise Layout_Error;
else
for J in 1 .. Ptr loop
To (To'Last - Ptr + J) := Buf (J);
end loop;
for J in To'First .. To'Last - Ptr loop
To (J) := ' ';
end loop;
end if;
end Puts;
end Ada.Wide_Wide_Text_IO.Float_Aux;