OSDN Git Service

PR 33870
[pf3gnuchains/gcc-fork.git] / gcc / ada / g-io.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT RUN-TIME COMPONENTS                         --
4 --                                                                          --
5 --                              G N A T . I O                               --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --                     Copyright (C) 1995-2006, AdaCore                     --
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 2,  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.  See the GNU General Public License --
17 -- for  more details.  You should have  received  a copy of the GNU General --
18 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
19 -- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
20 -- Boston, MA 02110-1301, USA.                                              --
21 --                                                                          --
22 -- As a special exception,  if other files  instantiate  generics from this --
23 -- unit, or you link  this unit with other files  to produce an executable, --
24 -- this  unit  does not  by itself cause  the resulting  executable  to  be --
25 -- covered  by the  GNU  General  Public  License.  This exception does not --
26 -- however invalidate  any other reasons why  the executable file  might be --
27 -- covered by the  GNU Public License.                                      --
28 --                                                                          --
29 -- GNAT was originally developed  by the GNAT team at  New York University. --
30 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
31 --                                                                          --
32 ------------------------------------------------------------------------------
33
34 package body GNAT.IO is
35
36    Current_Out : File_Type := Stdout;
37    pragma Atomic (Current_Out);
38    --  Current output file (modified by Set_Output)
39
40    ---------
41    -- Get --
42    ---------
43
44    procedure Get (X : out Integer) is
45       function Get_Int return Integer;
46       pragma Import (C, Get_Int, "get_int");
47    begin
48       X := Get_Int;
49    end Get;
50
51    procedure Get (C : out Character) is
52       function Get_Char return Character;
53       pragma Import (C, Get_Char, "get_char");
54    begin
55       C := Get_Char;
56    end Get;
57
58    --------------
59    -- Get_Line --
60    --------------
61
62    procedure Get_Line (Item : out String; Last : out Natural) is
63       C : Character;
64
65    begin
66       for Nstore in Item'Range loop
67          Get (C);
68
69          if C = ASCII.LF then
70             Last := Nstore - 1;
71             return;
72
73          else
74             Item (Nstore) := C;
75          end if;
76       end loop;
77
78       Last := Item'Last;
79    end Get_Line;
80
81    --------------
82    -- New_Line --
83    --------------
84
85    procedure New_Line (File : File_Type; Spacing : Positive := 1) is
86    begin
87       for J in 1 .. Spacing loop
88          Put (File, ASCII.LF);
89       end loop;
90    end New_Line;
91
92    procedure New_Line (Spacing : Positive := 1) is
93    begin
94       New_Line (Current_Out, Spacing);
95    end New_Line;
96
97    ---------
98    -- Put --
99    ---------
100
101    procedure Put (X : Integer) is
102    begin
103       Put (Current_Out, X);
104    end Put;
105
106    procedure Put (File : File_Type; X : Integer) is
107       procedure Put_Int (X : Integer);
108       pragma Import (C, Put_Int, "put_int");
109
110       procedure Put_Int_Stderr (X : Integer);
111       pragma Import (C, Put_Int_Stderr, "put_int_stderr");
112
113    begin
114       case File is
115          when Stdout => Put_Int (X);
116          when Stderr => Put_Int_Stderr (X);
117       end case;
118    end Put;
119
120    procedure Put (C : Character) is
121    begin
122       Put (Current_Out, C);
123    end Put;
124
125    procedure Put (File : File_Type; C : Character) is
126       procedure Put_Char (C : Character);
127       pragma Import (C, Put_Char, "put_char");
128
129       procedure Put_Char_Stderr (C : Character);
130       pragma Import (C, Put_Char_Stderr, "put_char_stderr");
131
132    begin
133       case File is
134          when Stdout => Put_Char (C);
135          when Stderr => Put_Char_Stderr (C);
136       end case;
137    end Put;
138
139    procedure Put (S : String) is
140    begin
141       Put (Current_Out, S);
142    end Put;
143
144    procedure Put (File : File_Type; S : String) is
145    begin
146       for J in S'Range loop
147          Put (File, S (J));
148       end loop;
149    end Put;
150
151    --------------
152    -- Put_Line --
153    --------------
154
155    procedure Put_Line (S : String) is
156    begin
157       Put_Line (Current_Out, S);
158    end Put_Line;
159
160    procedure Put_Line (File : File_Type; S : String) is
161    begin
162       Put (File, S);
163       New_Line (File);
164    end Put_Line;
165
166    ----------------
167    -- Set_Output --
168    ----------------
169
170    procedure Set_Output (File : File_Type) is
171    begin
172       Current_Out := File;
173    end Set_Output;
174
175    ---------------------
176    -- Standard_Output --
177    ---------------------
178
179    function Standard_Output return File_Type is
180    begin
181       return Stdout;
182    end Standard_Output;
183
184    --------------------
185    -- Standard_Error --
186    --------------------
187
188    function Standard_Error return File_Type is
189    begin
190       return Stderr;
191    end Standard_Error;
192
193 end GNAT.IO;