OSDN Git Service

Delete all lines containing "$Revision:".
[pf3gnuchains/gcc-fork.git] / gcc / ada / a-tiinau.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT RUN-TIME COMPONENTS                         --
4 --                                                                          --
5 --              A D A . T E X T _ I O . I N T E G E R  _ A U X              --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --                                                                          --
10 --          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
11 --                                                                          --
12 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
13 -- terms of the  GNU General Public License as published  by the Free Soft- --
14 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
15 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
16 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
17 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
18 -- for  more details.  You should have  received  a copy of the GNU General --
19 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
20 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
21 -- MA 02111-1307, USA.                                                      --
22 --                                                                          --
23 -- As a special exception,  if other files  instantiate  generics from this --
24 -- unit, or you link  this unit with other files  to produce an executable, --
25 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
26 -- covered  by the  GNU  General  Public  License.  This exception does not --
27 -- however invalidate  any other reasons why  the executable file  might be --
28 -- covered by the  GNU Public License.                                      --
29 --                                                                          --
30 -- GNAT was originally developed  by the GNAT team at  New York University. --
31 -- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
32 --                                                                          --
33 ------------------------------------------------------------------------------
34
35 with Ada.Text_IO.Generic_Aux; use Ada.Text_IO.Generic_Aux;
36
37 with System.Img_BIU;   use System.Img_BIU;
38 with System.Img_Int;   use System.Img_Int;
39 with System.Img_LLB;   use System.Img_LLB;
40 with System.Img_LLI;   use System.Img_LLI;
41 with System.Img_LLW;   use System.Img_LLW;
42 with System.Img_WIU;   use System.Img_WIU;
43 with System.Val_Int;   use System.Val_Int;
44 with System.Val_LLI;   use System.Val_LLI;
45
46 package body Ada.Text_IO.Integer_Aux is
47
48    -----------------------
49    -- Local Subprograms --
50    -----------------------
51
52    procedure Load_Integer
53      (File : in File_Type;
54       Buf  : out String;
55       Ptr  : in out Natural);
56    --  This is an auxiliary routine that is used to load an possibly signed
57    --  integer literal value from the input file into Buf, starting at Ptr + 1.
58    --  On return, Ptr is set to the last character stored.
59
60    -------------
61    -- Get_Int --
62    -------------
63
64    procedure Get_Int
65      (File  : in File_Type;
66       Item  : out Integer;
67       Width : in Field)
68    is
69       Buf  : String (1 .. Field'Last);
70       Ptr  : aliased Integer := 1;
71       Stop : Integer := 0;
72
73    begin
74       if Width /= 0 then
75          Load_Width (File, Width, Buf, Stop);
76          String_Skip (Buf, Ptr);
77       else
78          Load_Integer (File, Buf, Stop);
79       end if;
80
81       Item := Scan_Integer (Buf, Ptr'Access, Stop);
82       Check_End_Of_Field (Buf, Stop, Ptr, Width);
83    end Get_Int;
84
85    -------------
86    -- Get_LLI --
87    -------------
88
89    procedure Get_LLI
90      (File  : in File_Type;
91       Item  : out Long_Long_Integer;
92       Width : in Field)
93    is
94       Buf  : String (1 .. Field'Last);
95       Ptr  : aliased Integer := 1;
96       Stop : Integer := 0;
97
98    begin
99       if Width /= 0 then
100          Load_Width (File, Width, Buf, Stop);
101          String_Skip (Buf, Ptr);
102       else
103          Load_Integer (File, Buf, Stop);
104       end if;
105
106       Item := Scan_Long_Long_Integer (Buf, Ptr'Access, Stop);
107       Check_End_Of_Field (Buf, Stop, Ptr, Width);
108    end Get_LLI;
109
110    --------------
111    -- Gets_Int --
112    --------------
113
114    procedure Gets_Int
115      (From : in String;
116       Item : out Integer;
117       Last : out Positive)
118    is
119       Pos : aliased Integer;
120
121    begin
122       String_Skip (From, Pos);
123       Item := Scan_Integer (From, Pos'Access, From'Last);
124       Last := Pos - 1;
125
126    exception
127       when Constraint_Error =>
128          Last := Pos - 1;
129          raise Data_Error;
130    end Gets_Int;
131
132    --------------
133    -- Gets_LLI --
134    --------------
135
136    procedure Gets_LLI
137      (From : in String;
138       Item : out Long_Long_Integer;
139       Last : out Positive)
140    is
141       Pos : aliased Integer;
142
143    begin
144       String_Skip (From, Pos);
145       Item := Scan_Long_Long_Integer (From, Pos'Access, From'Last);
146       Last := Pos - 1;
147
148    exception
149       when Constraint_Error =>
150          Last := Pos - 1;
151          raise Data_Error;
152    end Gets_LLI;
153
154    ------------------
155    -- Load_Integer --
156    ------------------
157
158    procedure Load_Integer
159      (File : in File_Type;
160       Buf  : out String;
161       Ptr  : in out Natural)
162    is
163       Hash_Loc : Natural;
164       Loaded   : Boolean;
165
166    begin
167       Load_Skip (File);
168       Load (File, Buf, Ptr, '+', '-');
169
170       Load_Digits (File, Buf, Ptr, Loaded);
171
172       if Loaded then
173          Load (File, Buf, Ptr, '#', ':', Loaded);
174
175          if Loaded then
176             Hash_Loc := Ptr;
177             Load_Extended_Digits (File, Buf, Ptr);
178             Load (File, Buf, Ptr, Buf (Hash_Loc));
179          end if;
180
181          Load (File, Buf, Ptr, 'E', 'e', Loaded);
182
183          if Loaded then
184
185             --  Note: it is strange to allow a minus sign, since the syntax
186             --  does not, but that is what ACVC test CE3704F, case (6) wants.
187
188             Load (File, Buf, Ptr, '+', '-');
189             Load_Digits (File, Buf, Ptr);
190          end if;
191       end if;
192    end Load_Integer;
193
194    -------------
195    -- Put_Int --
196    -------------
197
198    procedure Put_Int
199      (File  : in File_Type;
200       Item  : in Integer;
201       Width : in Field;
202       Base  : in Number_Base)
203    is
204       Buf : String (1 .. Integer'Max (Field'Last, Width));
205       Ptr : Natural := 0;
206
207    begin
208       if Base = 10 and then Width = 0 then
209          Set_Image_Integer (Item, Buf, Ptr);
210       elsif Base = 10 then
211          Set_Image_Width_Integer (Item, Width, Buf, Ptr);
212       else
213          Set_Image_Based_Integer (Item, Base, Width, Buf, Ptr);
214       end if;
215
216       Put_Item (File, Buf (1 .. Ptr));
217    end Put_Int;
218
219    -------------
220    -- Put_LLI --
221    -------------
222
223    procedure Put_LLI
224      (File  : in File_Type;
225       Item  : in Long_Long_Integer;
226       Width : in Field;
227       Base  : in Number_Base)
228    is
229       Buf : String (1 .. Integer'Max (Field'Last, Width));
230       Ptr : Natural := 0;
231
232    begin
233       if Base = 10 and then Width = 0 then
234          Set_Image_Long_Long_Integer (Item, Buf, Ptr);
235       elsif Base = 10 then
236          Set_Image_Width_Long_Long_Integer (Item, Width, Buf, Ptr);
237       else
238          Set_Image_Based_Long_Long_Integer (Item, Base, Width, Buf, Ptr);
239       end if;
240
241       Put_Item (File, Buf (1 .. Ptr));
242    end Put_LLI;
243
244    --------------
245    -- Puts_Int --
246    --------------
247
248    procedure Puts_Int
249      (To   : out String;
250       Item : in Integer;
251       Base : in Number_Base)
252    is
253       Buf : String (1 .. Integer'Max (Field'Last, To'Length));
254       Ptr : Natural := 0;
255
256    begin
257       if Base = 10 then
258          Set_Image_Width_Integer (Item, To'Length, Buf, Ptr);
259       else
260          Set_Image_Based_Integer (Item, Base, To'Length, Buf, Ptr);
261       end if;
262
263       if Ptr > To'Length then
264          raise Layout_Error;
265       else
266          To (To'First .. To'First + Ptr - 1) := Buf (1 .. Ptr);
267       end if;
268    end Puts_Int;
269
270    --------------
271    -- Puts_LLI --
272    --------------
273
274    procedure Puts_LLI
275      (To   : out String;
276       Item : in Long_Long_Integer;
277       Base : in Number_Base)
278    is
279       Buf : String (1 .. Integer'Max (Field'Last, To'Length));
280       Ptr : Natural := 0;
281
282    begin
283       if Base = 10 then
284          Set_Image_Width_Long_Long_Integer (Item, To'Length, Buf, Ptr);
285       else
286          Set_Image_Based_Long_Long_Integer (Item, Base, To'Length, Buf, Ptr);
287       end if;
288
289       if Ptr > To'Length then
290          raise Layout_Error;
291       else
292          To (To'First .. To'First + Ptr - 1) := Buf (1 .. Ptr);
293       end if;
294    end Puts_LLI;
295
296 end Ada.Text_IO.Integer_Aux;