annotate gcc/ada/libgnat/a-textio.ads @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ------------------------------------------------------------------------------
kono
parents:
diff changeset
2 -- --
kono
parents:
diff changeset
3 -- GNAT RUN-TIME COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- A D A . T E X T _ I O --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- S p e c --
kono
parents:
diff changeset
8 -- --
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
9 -- Copyright (C) 1992-2019, Free Software Foundation, Inc. --
111
kono
parents:
diff changeset
10 -- --
kono
parents:
diff changeset
11 -- This specification is derived from the Ada Reference Manual for use with --
kono
parents:
diff changeset
12 -- GNAT. The copyright notice above, and the license provisions that follow --
kono
parents:
diff changeset
13 -- apply solely to the contents of the part following the private keyword. --
kono
parents:
diff changeset
14 -- --
kono
parents:
diff changeset
15 -- GNAT is free software; you can redistribute it and/or modify it under --
kono
parents:
diff changeset
16 -- terms of the GNU General Public License as published by the Free Soft- --
kono
parents:
diff changeset
17 -- ware Foundation; either version 3, or (at your option) any later ver- --
kono
parents:
diff changeset
18 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
kono
parents:
diff changeset
19 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
kono
parents:
diff changeset
20 -- or FITNESS FOR A PARTICULAR PURPOSE. --
kono
parents:
diff changeset
21 -- --
kono
parents:
diff changeset
22 -- As a special exception under Section 7 of GPL version 3, you are granted --
kono
parents:
diff changeset
23 -- additional permissions described in the GCC Runtime Library Exception, --
kono
parents:
diff changeset
24 -- version 3.1, as published by the Free Software Foundation. --
kono
parents:
diff changeset
25 -- --
kono
parents:
diff changeset
26 -- You should have received a copy of the GNU General Public License and --
kono
parents:
diff changeset
27 -- a copy of the GCC Runtime Library Exception along with this program; --
kono
parents:
diff changeset
28 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
kono
parents:
diff changeset
29 -- <http://www.gnu.org/licenses/>. --
kono
parents:
diff changeset
30 -- --
kono
parents:
diff changeset
31 -- GNAT was originally developed by the GNAT team at New York University. --
kono
parents:
diff changeset
32 -- Extensive contributions were provided by Ada Core Technologies Inc. --
kono
parents:
diff changeset
33 -- --
kono
parents:
diff changeset
34 ------------------------------------------------------------------------------
kono
parents:
diff changeset
35
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
36 -- Preconditions in this unit are meant for analysis only, not for run-time
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
37 -- checking, so that the expected exceptions are raised. This is enforced by
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
38 -- setting the corresponding assertion policy to Ignore. These preconditions
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
39 -- are partial and protect against Status_Error, Mode_Error, and Layout_Error,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
40 -- but not against other types of errors.
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
41
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
42 pragma Assertion_Policy (Pre => Ignore);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
43
111
kono
parents:
diff changeset
44 -- Note: the generic subpackages of Text_IO (Integer_IO, Float_IO, Fixed_IO,
kono
parents:
diff changeset
45 -- Modular_IO, Decimal_IO and Enumeration_IO) appear as private children in
kono
parents:
diff changeset
46 -- GNAT. These children are with'ed automatically if they are referenced, so
kono
parents:
diff changeset
47 -- this rearrangement is invisible to user programs, but has the advantage
kono
parents:
diff changeset
48 -- that only the needed parts of Text_IO are processed and loaded.
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 with Ada.IO_Exceptions;
kono
parents:
diff changeset
51 with Ada.Streams;
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 with System;
kono
parents:
diff changeset
54 with System.File_Control_Block;
kono
parents:
diff changeset
55 with System.WCh_Con;
kono
parents:
diff changeset
56
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
57 package Ada.Text_IO with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
58 Abstract_State => (File_System),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
59 Initializes => (File_System),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
60 Initial_Condition => Line_Length = 0 and Page_Length = 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
61 is
111
kono
parents:
diff changeset
62 pragma Elaborate_Body;
kono
parents:
diff changeset
63
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
64 type File_Type is limited private with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
65 Default_Initial_Condition => (not Is_Open (File_Type));
111
kono
parents:
diff changeset
66 type File_Mode is (In_File, Out_File, Append_File);
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 -- The following representation clause allows the use of unchecked
kono
parents:
diff changeset
69 -- conversion for rapid translation between the File_Mode type
kono
parents:
diff changeset
70 -- used in this package and System.File_IO.
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 for File_Mode use
kono
parents:
diff changeset
73 (In_File => 0, -- System.FIle_IO.File_Mode'Pos (In_File)
kono
parents:
diff changeset
74 Out_File => 2, -- System.File_IO.File_Mode'Pos (Out_File)
kono
parents:
diff changeset
75 Append_File => 3); -- System.File_IO.File_Mode'Pos (Append_File)
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 type Count is range 0 .. Natural'Last;
kono
parents:
diff changeset
78 -- The value of Count'Last must be large enough so that the assumption that
kono
parents:
diff changeset
79 -- the Line, Column and Page counts can never exceed this value is valid.
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 subtype Positive_Count is Count range 1 .. Count'Last;
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 Unbounded : constant Count := 0;
kono
parents:
diff changeset
84 -- Line and page length
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 subtype Field is Integer range 0 .. 255;
kono
parents:
diff changeset
87 -- Note: if for any reason, there is a need to increase this value, then it
kono
parents:
diff changeset
88 -- will be necessary to change the corresponding value in System.Img_Real
kono
parents:
diff changeset
89 -- in file s-imgrea.adb.
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 subtype Number_Base is Integer range 2 .. 16;
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 type Type_Set is (Lower_Case, Upper_Case);
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 ---------------------
kono
parents:
diff changeset
96 -- File Management --
kono
parents:
diff changeset
97 ---------------------
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 procedure Create
kono
parents:
diff changeset
100 (File : in out File_Type;
kono
parents:
diff changeset
101 Mode : File_Mode := Out_File;
kono
parents:
diff changeset
102 Name : String := "";
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
103 Form : String := "")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
104 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
105 Pre => not Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
106 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
107 Is_Open (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
108 and then Ada.Text_IO.Mode (File) = Mode
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
109 and then (if Mode /= In_File
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
110 then (Line_Length (File) = 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
111 and then Page_Length (File) = 0)),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
112 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
113
kono
parents:
diff changeset
114 procedure Open
kono
parents:
diff changeset
115 (File : in out File_Type;
kono
parents:
diff changeset
116 Mode : File_Mode;
kono
parents:
diff changeset
117 Name : String;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
118 Form : String := "")
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
119 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
120 Pre => not Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
121 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
122 Is_Open (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
123 and then Ada.Text_IO.Mode (File) = Mode
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
124 and then (if Mode /= In_File
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
125 then (Line_Length (File) = 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
126 and then Page_Length (File) = 0)),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
127 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
128
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
129 procedure Close (File : in out File_Type) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
130 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
131 Post => not Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
132 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
133 procedure Delete (File : in out File_Type) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
134 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
135 Post => not Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
136 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
137 procedure Reset (File : in out File_Type; Mode : File_Mode) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
138 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
139 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
140 Is_Open (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
141 and then Ada.Text_IO.Mode (File) = Mode
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
142 and then (if Mode /= In_File
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
143 then (Line_Length (File) = 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
144 and then Page_Length (File) = 0)),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
145 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
146 procedure Reset (File : in out File_Type) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
147 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
148 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
149 Is_Open (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
150 and Mode (File)'Old = Mode (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
151 and (if Mode (File) /= In_File
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
152 then (Line_Length (File) = 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
153 and then Page_Length (File) = 0)),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
154 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
155
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
156 function Mode (File : File_Type) return File_Mode with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
157 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
158 Global => null;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
159 function Name (File : File_Type) return String with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
160 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
161 Global => null;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
162 function Form (File : File_Type) return String with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
163 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
164 Global => null;
111
kono
parents:
diff changeset
165
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
166 function Is_Open (File : File_Type) return Boolean with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
167 Global => null;
111
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 ------------------------------------------------------
kono
parents:
diff changeset
170 -- Control of default input, output and error files --
kono
parents:
diff changeset
171 ------------------------------------------------------
kono
parents:
diff changeset
172
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
173 procedure Set_Input (File : File_Type) with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
174 procedure Set_Output (File : File_Type) with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
175 procedure Set_Error (File : File_Type) with SPARK_Mode => Off;
111
kono
parents:
diff changeset
176
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
177 function Standard_Input return File_Type with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
178 function Standard_Output return File_Type with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
179 function Standard_Error return File_Type with SPARK_Mode => Off;
111
kono
parents:
diff changeset
180
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
181 function Current_Input return File_Type with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
182 function Current_Output return File_Type with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
183 function Current_Error return File_Type with SPARK_Mode => Off;
111
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 type File_Access is access constant File_Type;
kono
parents:
diff changeset
186
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
187 function Standard_Input return File_Access with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
188 function Standard_Output return File_Access with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
189 function Standard_Error return File_Access with SPARK_Mode => Off;
111
kono
parents:
diff changeset
190
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
191 function Current_Input return File_Access with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
192 function Current_Output return File_Access with SPARK_Mode => Off;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
193 function Current_Error return File_Access with SPARK_Mode => Off;
111
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195 --------------------
kono
parents:
diff changeset
196 -- Buffer control --
kono
parents:
diff changeset
197 --------------------
kono
parents:
diff changeset
198
kono
parents:
diff changeset
199 -- Note: The parameter file is IN OUT in the RM, but this is clearly
kono
parents:
diff changeset
200 -- an oversight, and was intended to be IN, see AI95-00057.
kono
parents:
diff changeset
201
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
202 procedure Flush (File : File_Type) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
203 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
204 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
205 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
206 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
207 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
208 procedure Flush with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
209 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
210 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
211 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
212 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
213
kono
parents:
diff changeset
214 --------------------------------------------
kono
parents:
diff changeset
215 -- Specification of line and page lengths --
kono
parents:
diff changeset
216 --------------------------------------------
kono
parents:
diff changeset
217
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
218 procedure Set_Line_Length (File : File_Type; To : Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
219 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
220 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
221 Line_Length (File) = To
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
222 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
223 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
224 procedure Set_Line_Length (To : Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
225 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
226 Line_Length = To
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
227 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
228 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
229
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
230 procedure Set_Page_Length (File : File_Type; To : Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
231 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
232 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
233 Page_Length (File) = To
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
234 and Line_Length (File)'Old = Line_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
235 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
236 procedure Set_Page_Length (To : Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
238 Page_Length = To
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
239 and Line_Length'Old = Line_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
240 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
241
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
242 function Line_Length (File : File_Type) return Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
243 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
244 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
245 function Line_Length return Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
246 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
247
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
248 function Page_Length (File : File_Type) return Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
249 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
250 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
251 function Page_Length return Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
252 Global => (Input => File_System);
111
kono
parents:
diff changeset
253
kono
parents:
diff changeset
254 ------------------------------------
kono
parents:
diff changeset
255 -- Column, Line, and Page Control --
kono
parents:
diff changeset
256 ------------------------------------
kono
parents:
diff changeset
257
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
258 procedure New_Line (File : File_Type; Spacing : Positive_Count := 1) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
259 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
260 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
261 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
262 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
263 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
264 procedure New_Line (Spacing : Positive_Count := 1) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
265 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
266 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
267 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
268 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
269
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
270 procedure Skip_Line (File : File_Type; Spacing : Positive_Count := 1) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
271 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
272 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
273 procedure Skip_Line (Spacing : Positive_Count := 1) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
274 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
275 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
276 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
277 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
278
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
279 function End_Of_Line (File : File_Type) return Boolean with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
280 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
281 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
282 function End_Of_Line return Boolean with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
283 Global => (Input => File_System);
111
kono
parents:
diff changeset
284
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
285 procedure New_Page (File : File_Type) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
286 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
287 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
288 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
289 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
290 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
291 procedure New_Page with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
292 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
293 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
294 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
295 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
296
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
297 procedure Skip_Page (File : File_Type) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
298 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
299 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
300 procedure Skip_Page with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
301 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
302 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
303 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
304 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
305
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
306 function End_Of_Page (File : File_Type) return Boolean with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
307 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
308 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
309 function End_Of_Page return Boolean with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
310 Global => (Input => File_System);
111
kono
parents:
diff changeset
311
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
312 function End_Of_File (File : File_Type) return Boolean with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
313 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
314 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
315 function End_Of_File return Boolean with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
316 Global => (Input => File_System);
111
kono
parents:
diff changeset
317
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
318 procedure Set_Col (File : File_Type; To : Positive_Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
319 Pre =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
320 Is_Open (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
321 and then (if Mode (File) /= In_File
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
322 then (Line_Length (File) = 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
323 or else To <= Line_Length (File))),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
324 Contract_Cases =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
325 (Mode (File) /= In_File =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
326 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
327 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
328 others => True),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
329 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
330 procedure Set_Col (To : Positive_Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
331 Pre => Line_Length = 0 or To <= Line_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
332 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
333 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
334 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
335 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
336
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
337 procedure Set_Line (File : File_Type; To : Positive_Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
338 Pre =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
339 Is_Open (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
340 and then (if Mode (File) /= In_File
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
341 then (Page_Length (File) = 0
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
342 or else To <= Page_Length (File))),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
343 Contract_Cases =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
344 (Mode (File) /= In_File =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
345 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
346 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
347 others => True),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
348 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
349 procedure Set_Line (To : Positive_Count) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
350 Pre => Page_Length = 0 or To <= Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
351 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
352 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
353 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
354 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
355
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
356 function Col (File : File_Type) return Positive_Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
357 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
358 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
359 function Col return Positive_Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
360 Global => (Input => File_System);
111
kono
parents:
diff changeset
361
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
362 function Line (File : File_Type) return Positive_Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
363 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
364 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
365 function Line return Positive_Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
366 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
367
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
368 function Page (File : File_Type) return Positive_Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
369 Pre => Is_Open (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
370 Global => (Input => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
371 function Page return Positive_Count with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
372 Global => (Input => File_System);
111
kono
parents:
diff changeset
373
kono
parents:
diff changeset
374 ----------------------------
kono
parents:
diff changeset
375 -- Character Input-Output --
kono
parents:
diff changeset
376 ----------------------------
kono
parents:
diff changeset
377
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
378 procedure Get (File : File_Type; Item : out Character) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
379 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
380 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
381 procedure Get (Item : out Character) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
382 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
383 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
384 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
385 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
386 procedure Put (File : File_Type; Item : Character) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
387 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
388 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
389 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
390 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
391 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
392 procedure Put (Item : Character) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
393 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
394 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
395 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
396 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
397
kono
parents:
diff changeset
398 procedure Look_Ahead
kono
parents:
diff changeset
399 (File : File_Type;
kono
parents:
diff changeset
400 Item : out Character;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
401 End_Of_Line : out Boolean)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
402 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
403 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
404 Global => (Input => File_System);
111
kono
parents:
diff changeset
405
kono
parents:
diff changeset
406 procedure Look_Ahead
kono
parents:
diff changeset
407 (Item : out Character;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
408 End_Of_Line : out Boolean)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
409 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
410 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
411 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
412 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
413 Global => (Input => File_System);
111
kono
parents:
diff changeset
414
kono
parents:
diff changeset
415 procedure Get_Immediate
kono
parents:
diff changeset
416 (File : File_Type;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
417 Item : out Character)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
418 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
419 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
420 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
421
kono
parents:
diff changeset
422 procedure Get_Immediate
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
423 (Item : out Character)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
424 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
425 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
426 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
427 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
428 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
429
kono
parents:
diff changeset
430 procedure Get_Immediate
kono
parents:
diff changeset
431 (File : File_Type;
kono
parents:
diff changeset
432 Item : out Character;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
433 Available : out Boolean)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
434 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
435 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
436 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
437
kono
parents:
diff changeset
438 procedure Get_Immediate
kono
parents:
diff changeset
439 (Item : out Character;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
440 Available : out Boolean)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
441 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
442 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
443 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
444 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
445 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
446
kono
parents:
diff changeset
447 -------------------------
kono
parents:
diff changeset
448 -- String Input-Output --
kono
parents:
diff changeset
449 -------------------------
kono
parents:
diff changeset
450
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
451 procedure Get (File : File_Type; Item : out String) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
452 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
453 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
454 procedure Get (Item : out String) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
455 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
456 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
457 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
458 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
459 procedure Put (File : File_Type; Item : String) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
460 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
461 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
462 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
463 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
464 Global => (In_Out => File_System);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
465 procedure Put (Item : String) with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
466 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
467 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
468 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
469 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
470
kono
parents:
diff changeset
471 procedure Get_Line
kono
parents:
diff changeset
472 (File : File_Type;
kono
parents:
diff changeset
473 Item : out String;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
474 Last : out Natural)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
475 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
476 Pre => Is_Open (File) and then Mode (File) = In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
477 Post => (if Item'Length > 0 then Last in Item'First - 1 .. Item'Last
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
478 else Last = Item'First - 1),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
479 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
480
kono
parents:
diff changeset
481 procedure Get_Line
kono
parents:
diff changeset
482 (Item : out String;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
483 Last : out Natural)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
484 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
485 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
486 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
487 and Page_Length'Old = Page_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
488 and (if Item'Length > 0 then Last in Item'First - 1 .. Item'Last
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
489 else Last = Item'First - 1),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
490 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
491
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
492 function Get_Line (File : File_Type) return String with SPARK_Mode => Off;
111
kono
parents:
diff changeset
493 pragma Ada_05 (Get_Line);
kono
parents:
diff changeset
494
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
495 function Get_Line return String with SPARK_Mode => Off;
111
kono
parents:
diff changeset
496 pragma Ada_05 (Get_Line);
kono
parents:
diff changeset
497
kono
parents:
diff changeset
498 procedure Put_Line
kono
parents:
diff changeset
499 (File : File_Type;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
500 Item : String)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
501 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
502 Pre => Is_Open (File) and then Mode (File) /= In_File,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
503 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
504 Line_Length (File)'Old = Line_Length (File)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
505 and Page_Length (File)'Old = Page_Length (File),
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
506 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
507
kono
parents:
diff changeset
508 procedure Put_Line
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
509 (Item : String)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
510 with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
511 Post =>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
512 Line_Length'Old = Line_Length
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
513 and Page_Length'Old = Page_Length,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
514 Global => (In_Out => File_System);
111
kono
parents:
diff changeset
515
kono
parents:
diff changeset
516 ---------------------------------------
kono
parents:
diff changeset
517 -- Generic packages for Input-Output --
kono
parents:
diff changeset
518 ---------------------------------------
kono
parents:
diff changeset
519
kono
parents:
diff changeset
520 -- The generic packages:
kono
parents:
diff changeset
521
kono
parents:
diff changeset
522 -- Ada.Text_IO.Integer_IO
kono
parents:
diff changeset
523 -- Ada.Text_IO.Modular_IO
kono
parents:
diff changeset
524 -- Ada.Text_IO.Float_IO
kono
parents:
diff changeset
525 -- Ada.Text_IO.Fixed_IO
kono
parents:
diff changeset
526 -- Ada.Text_IO.Decimal_IO
kono
parents:
diff changeset
527 -- Ada.Text_IO.Enumeration_IO
kono
parents:
diff changeset
528
kono
parents:
diff changeset
529 -- are implemented as separate child packages in GNAT, so the
kono
parents:
diff changeset
530 -- spec and body of these packages are to be found in separate
kono
parents:
diff changeset
531 -- child units. This implementation detail is hidden from the
kono
parents:
diff changeset
532 -- Ada programmer by special circuitry in the compiler that
kono
parents:
diff changeset
533 -- treats these child packages as though they were nested in
kono
parents:
diff changeset
534 -- Text_IO. The advantage of this special processing is that
kono
parents:
diff changeset
535 -- the subsidiary routines needed if these generics are used
kono
parents:
diff changeset
536 -- are not loaded when they are not used.
kono
parents:
diff changeset
537
kono
parents:
diff changeset
538 ----------------
kono
parents:
diff changeset
539 -- Exceptions --
kono
parents:
diff changeset
540 ----------------
kono
parents:
diff changeset
541
kono
parents:
diff changeset
542 Status_Error : exception renames IO_Exceptions.Status_Error;
kono
parents:
diff changeset
543 Mode_Error : exception renames IO_Exceptions.Mode_Error;
kono
parents:
diff changeset
544 Name_Error : exception renames IO_Exceptions.Name_Error;
kono
parents:
diff changeset
545 Use_Error : exception renames IO_Exceptions.Use_Error;
kono
parents:
diff changeset
546 Device_Error : exception renames IO_Exceptions.Device_Error;
kono
parents:
diff changeset
547 End_Error : exception renames IO_Exceptions.End_Error;
kono
parents:
diff changeset
548 Data_Error : exception renames IO_Exceptions.Data_Error;
kono
parents:
diff changeset
549 Layout_Error : exception renames IO_Exceptions.Layout_Error;
kono
parents:
diff changeset
550
kono
parents:
diff changeset
551 private
kono
parents:
diff changeset
552
kono
parents:
diff changeset
553 -- The following procedures have a File_Type formal of mode IN OUT because
kono
parents:
diff changeset
554 -- they may close the original file. The Close operation may raise an
kono
parents:
diff changeset
555 -- exception, but in that case we want any assignment to the formal to
kono
parents:
diff changeset
556 -- be effective anyway, so it must be passed by reference (or the caller
kono
parents:
diff changeset
557 -- will be left with a dangling pointer).
kono
parents:
diff changeset
558
kono
parents:
diff changeset
559 pragma Export_Procedure
kono
parents:
diff changeset
560 (Internal => Close,
kono
parents:
diff changeset
561 External => "",
kono
parents:
diff changeset
562 Mechanism => Reference);
kono
parents:
diff changeset
563 pragma Export_Procedure
kono
parents:
diff changeset
564 (Internal => Delete,
kono
parents:
diff changeset
565 External => "",
kono
parents:
diff changeset
566 Mechanism => Reference);
kono
parents:
diff changeset
567 pragma Export_Procedure
kono
parents:
diff changeset
568 (Internal => Reset,
kono
parents:
diff changeset
569 External => "",
kono
parents:
diff changeset
570 Parameter_Types => (File_Type),
kono
parents:
diff changeset
571 Mechanism => Reference);
kono
parents:
diff changeset
572 pragma Export_Procedure
kono
parents:
diff changeset
573 (Internal => Reset,
kono
parents:
diff changeset
574 External => "",
kono
parents:
diff changeset
575 Parameter_Types => (File_Type, File_Mode),
kono
parents:
diff changeset
576 Mechanism => (File => Reference));
kono
parents:
diff changeset
577
kono
parents:
diff changeset
578 -----------------------------------
kono
parents:
diff changeset
579 -- Handling of Format Characters --
kono
parents:
diff changeset
580 -----------------------------------
kono
parents:
diff changeset
581
kono
parents:
diff changeset
582 -- Line marks are represented by the single character ASCII.LF (16#0A#).
kono
parents:
diff changeset
583 -- In DOS and similar systems, underlying file translation takes care
kono
parents:
diff changeset
584 -- of translating this to and from the standard CR/LF sequences used in
kono
parents:
diff changeset
585 -- these operating systems to mark the end of a line. On output there is
kono
parents:
diff changeset
586 -- always a line mark at the end of the last line, but on input, this
kono
parents:
diff changeset
587 -- line mark can be omitted, and is implied by the end of file.
kono
parents:
diff changeset
588
kono
parents:
diff changeset
589 -- Page marks are represented by the single character ASCII.FF (16#0C#),
kono
parents:
diff changeset
590 -- The page mark at the end of the file may be omitted, and is normally
kono
parents:
diff changeset
591 -- omitted on output unless an explicit New_Page call is made before
kono
parents:
diff changeset
592 -- closing the file. No page mark is added when a file is appended to,
kono
parents:
diff changeset
593 -- so, in accordance with the permission in (RM A.10.2(4)), there may
kono
parents:
diff changeset
594 -- or may not be a page mark separating preexisting text in the file
kono
parents:
diff changeset
595 -- from the new text to be written.
kono
parents:
diff changeset
596
kono
parents:
diff changeset
597 -- A file mark is marked by the physical end of file. In DOS translation
kono
parents:
diff changeset
598 -- mode on input, an EOF character (SUB = 16#1A#) gets translated to the
kono
parents:
diff changeset
599 -- physical end of file, so in effect this character is recognized as
kono
parents:
diff changeset
600 -- marking the end of file in DOS and similar systems.
kono
parents:
diff changeset
601
kono
parents:
diff changeset
602 LM : constant := Character'Pos (ASCII.LF);
kono
parents:
diff changeset
603 -- Used as line mark
kono
parents:
diff changeset
604
kono
parents:
diff changeset
605 PM : constant := Character'Pos (ASCII.FF);
kono
parents:
diff changeset
606 -- Used as page mark, except at end of file where it is implied
kono
parents:
diff changeset
607
kono
parents:
diff changeset
608 --------------------------------
kono
parents:
diff changeset
609 -- Text_IO File Control Block --
kono
parents:
diff changeset
610 --------------------------------
kono
parents:
diff changeset
611
kono
parents:
diff changeset
612 Default_WCEM : System.WCh_Con.WC_Encoding_Method :=
kono
parents:
diff changeset
613 System.WCh_Con.WCEM_UTF8;
kono
parents:
diff changeset
614 -- This gets modified during initialization (see body) using
kono
parents:
diff changeset
615 -- the default value established in the call to Set_Globals.
kono
parents:
diff changeset
616
kono
parents:
diff changeset
617 package FCB renames System.File_Control_Block;
kono
parents:
diff changeset
618
kono
parents:
diff changeset
619 type Text_AFCB;
kono
parents:
diff changeset
620 type File_Type is access all Text_AFCB;
kono
parents:
diff changeset
621
kono
parents:
diff changeset
622 type Text_AFCB is new FCB.AFCB with record
kono
parents:
diff changeset
623 Page : Count := 1;
kono
parents:
diff changeset
624 Line : Count := 1;
kono
parents:
diff changeset
625 Col : Count := 1;
kono
parents:
diff changeset
626 Line_Length : Count := 0;
kono
parents:
diff changeset
627 Page_Length : Count := 0;
kono
parents:
diff changeset
628
kono
parents:
diff changeset
629 Self : aliased File_Type;
kono
parents:
diff changeset
630 -- Set to point to the containing Text_AFCB block. This is used to
kono
parents:
diff changeset
631 -- implement the Current_{Error,Input,Output} functions which return
kono
parents:
diff changeset
632 -- a File_Access, the file access value returned is a pointer to
kono
parents:
diff changeset
633 -- the Self field of the corresponding file.
kono
parents:
diff changeset
634
kono
parents:
diff changeset
635 Before_LM : Boolean := False;
kono
parents:
diff changeset
636 -- This flag is used to deal with the anomalies introduced by the
kono
parents:
diff changeset
637 -- peculiar definition of End_Of_File and End_Of_Page in Ada. These
kono
parents:
diff changeset
638 -- functions require looking ahead more than one character. Since
kono
parents:
diff changeset
639 -- there is no convenient way of backing up more than one character,
kono
parents:
diff changeset
640 -- what we do is to leave ourselves positioned past the LM, but set
kono
parents:
diff changeset
641 -- this flag, so that we know that from an Ada point of view we are
kono
parents:
diff changeset
642 -- in front of the LM, not after it. A little odd, but it works.
kono
parents:
diff changeset
643
kono
parents:
diff changeset
644 Before_LM_PM : Boolean := False;
kono
parents:
diff changeset
645 -- This flag similarly handles the case of being physically positioned
kono
parents:
diff changeset
646 -- after a LM-PM sequence when logically we are before the LM-PM. This
kono
parents:
diff changeset
647 -- flag can only be set if Before_LM is also set.
kono
parents:
diff changeset
648
kono
parents:
diff changeset
649 WC_Method : System.WCh_Con.WC_Encoding_Method := Default_WCEM;
kono
parents:
diff changeset
650 -- Encoding method to be used for this file. Text_IO does not deal with
kono
parents:
diff changeset
651 -- wide characters, but it does deal with upper half characters in the
kono
parents:
diff changeset
652 -- range 16#80#-16#FF# which may need encoding, e.g. in UTF-8 mode.
kono
parents:
diff changeset
653
kono
parents:
diff changeset
654 Before_Upper_Half_Character : Boolean := False;
kono
parents:
diff changeset
655 -- This flag is set to indicate that an encoded upper half character has
kono
parents:
diff changeset
656 -- been read by Text_IO.Look_Ahead. If it is set to True, then it means
kono
parents:
diff changeset
657 -- that the stream is logically positioned before the character but is
kono
parents:
diff changeset
658 -- physically positioned after it. The character involved must be in
kono
parents:
diff changeset
659 -- the range 16#80#-16#FF#, i.e. if the flag is set, then we know the
kono
parents:
diff changeset
660 -- next character has a code greater than 16#7F#, and the value of this
kono
parents:
diff changeset
661 -- character is saved in Saved_Upper_Half_Character.
kono
parents:
diff changeset
662
kono
parents:
diff changeset
663 Saved_Upper_Half_Character : Character;
kono
parents:
diff changeset
664 -- This field is valid only if Before_Upper_Half_Character is set. It
kono
parents:
diff changeset
665 -- contains an upper-half character read by Look_Ahead. If Look_Ahead
kono
parents:
diff changeset
666 -- reads a character in the range 16#00# to 16#7F#, then it can use
kono
parents:
diff changeset
667 -- ungetc to put it back, but ungetc cannot be called more than once,
kono
parents:
diff changeset
668 -- so for characters above this range, we don't try to back up the
kono
parents:
diff changeset
669 -- file. Instead we save the character in this field and set the flag
kono
parents:
diff changeset
670 -- Before_Upper_Half_Character to True to indicate that we are logically
kono
parents:
diff changeset
671 -- positioned before this character even though the stream is physically
kono
parents:
diff changeset
672 -- positioned after it.
kono
parents:
diff changeset
673
kono
parents:
diff changeset
674 end record;
kono
parents:
diff changeset
675
kono
parents:
diff changeset
676 function AFCB_Allocate (Control_Block : Text_AFCB) return FCB.AFCB_Ptr;
kono
parents:
diff changeset
677
kono
parents:
diff changeset
678 procedure AFCB_Close (File : not null access Text_AFCB);
kono
parents:
diff changeset
679 procedure AFCB_Free (File : not null access Text_AFCB);
kono
parents:
diff changeset
680
kono
parents:
diff changeset
681 procedure Read
kono
parents:
diff changeset
682 (File : in out Text_AFCB;
kono
parents:
diff changeset
683 Item : out Ada.Streams.Stream_Element_Array;
kono
parents:
diff changeset
684 Last : out Ada.Streams.Stream_Element_Offset);
kono
parents:
diff changeset
685 -- Read operation used when Text_IO file is treated directly as Stream
kono
parents:
diff changeset
686
kono
parents:
diff changeset
687 procedure Write
kono
parents:
diff changeset
688 (File : in out Text_AFCB;
kono
parents:
diff changeset
689 Item : Ada.Streams.Stream_Element_Array);
kono
parents:
diff changeset
690 -- Write operation used when Text_IO file is treated directly as Stream
kono
parents:
diff changeset
691
kono
parents:
diff changeset
692 ------------------------
kono
parents:
diff changeset
693 -- The Standard Files --
kono
parents:
diff changeset
694 ------------------------
kono
parents:
diff changeset
695
kono
parents:
diff changeset
696 Standard_In_AFCB : aliased Text_AFCB;
kono
parents:
diff changeset
697 Standard_Out_AFCB : aliased Text_AFCB;
kono
parents:
diff changeset
698 Standard_Err_AFCB : aliased Text_AFCB;
kono
parents:
diff changeset
699
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
700 Standard_In : aliased File_Type := Standard_In_AFCB'Access with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
701 Part_Of => File_System;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
702 Standard_Out : aliased File_Type := Standard_Out_AFCB'Access with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
703 Part_Of => File_System;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
704 Standard_Err : aliased File_Type := Standard_Err_AFCB'Access with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
705 Part_Of => File_System;
111
kono
parents:
diff changeset
706 -- Standard files
kono
parents:
diff changeset
707
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
708 Current_In : aliased File_Type := Standard_In with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
709 Part_Of => File_System;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
710 Current_Out : aliased File_Type := Standard_Out with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
711 Part_Of => File_System;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
712 Current_Err : aliased File_Type := Standard_Err with
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
713 Part_Of => File_System;
111
kono
parents:
diff changeset
714 -- Current files
kono
parents:
diff changeset
715
kono
parents:
diff changeset
716 function EOF_Char return Integer;
kono
parents:
diff changeset
717 -- Returns the system-specific character indicating the end of a text file.
kono
parents:
diff changeset
718 -- This is exported for use by child packages such as Enumeration_Aux to
kono
parents:
diff changeset
719 -- eliminate their needing to depend directly on Interfaces.C_Streams,
kono
parents:
diff changeset
720 -- which is not available in certain target environments (such as AAMP).
kono
parents:
diff changeset
721
kono
parents:
diff changeset
722 procedure Initialize_Standard_Files;
kono
parents:
diff changeset
723 -- Initializes the file control blocks for the standard files. Called from
kono
parents:
diff changeset
724 -- the elaboration routine for this package, and from Reset_Standard_Files
kono
parents:
diff changeset
725 -- in package Ada.Text_IO.Reset_Standard_Files.
kono
parents:
diff changeset
726
kono
parents:
diff changeset
727 end Ada.Text_IO;