1------------------------------------------------------------------------------ 2-- -- 3-- GNAT RUN-TIME COMPONENTS -- 4-- -- 5-- A D A . S E Q U E N T I A L _ I O -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2018, Free Software Foundation, Inc. -- 10-- -- 11-- This specification is derived from the Ada Reference Manual for use with -- 12-- GNAT. The copyright notice above, and the license provisions that follow -- 13-- apply solely to the contents of the part following the private keyword. -- 14-- -- 15-- GNAT is free software; you can redistribute it and/or modify it under -- 16-- terms of the GNU General Public License as published by the Free Soft- -- 17-- ware Foundation; either version 3, or (at your option) any later ver- -- 18-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 19-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 20-- or FITNESS FOR A PARTICULAR PURPOSE. -- 21-- -- 22-- As a special exception under Section 7 of GPL version 3, you are granted -- 23-- additional permissions described in the GCC Runtime Library Exception, -- 24-- version 3.1, as published by the Free Software Foundation. -- 25-- -- 26-- You should have received a copy of the GNU General Public License and -- 27-- a copy of the GCC Runtime Library Exception along with this program; -- 28-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- 29-- <http://www.gnu.org/licenses/>. -- 30-- -- 31-- GNAT was originally developed by the GNAT team at New York University. -- 32-- Extensive contributions were provided by Ada Core Technologies Inc. -- 33-- -- 34------------------------------------------------------------------------------ 35 36with Ada.IO_Exceptions; 37 38with System.Sequential_IO; 39 40generic 41 type Element_Type (<>) is private; 42 43package Ada.Sequential_IO is 44 45 pragma Compile_Time_Warning 46 (Element_Type'Has_Access_Values, 47 "Element_Type for Sequential_IO instance has access values"); 48 49 pragma Compile_Time_Warning 50 (Element_Type'Has_Tagged_Values, 51 "Element_Type for Sequential_IO instance has tagged values"); 52 53 type File_Type is limited private with Default_Initial_Condition; 54 55 type File_Mode is (In_File, Out_File, Append_File); 56 57 -- The following representation clause allows the use of unchecked 58 -- conversion for rapid translation between the File_Mode type 59 -- used in this package and System.File_IO. 60 61 for File_Mode use 62 (In_File => 0, -- System.File_IO.File_Mode'Pos (In_File) 63 Out_File => 2, -- System.File_IO.File_Mode'Pos (Out_File) 64 Append_File => 3); -- System.File_IO.File_Mode'Pos (Append_File) 65 66 --------------------- 67 -- File management -- 68 --------------------- 69 70 procedure Create 71 (File : in out File_Type; 72 Mode : File_Mode := Out_File; 73 Name : String := ""; 74 Form : String := ""); 75 76 procedure Open 77 (File : in out File_Type; 78 Mode : File_Mode; 79 Name : String; 80 Form : String := ""); 81 82 procedure Close (File : in out File_Type); 83 procedure Delete (File : in out File_Type); 84 procedure Reset (File : in out File_Type; Mode : File_Mode); 85 procedure Reset (File : in out File_Type); 86 87 function Mode (File : File_Type) return File_Mode; 88 function Name (File : File_Type) return String; 89 function Form (File : File_Type) return String; 90 91 function Is_Open (File : File_Type) return Boolean; 92 93 procedure Flush (File : File_Type); 94 95 --------------------------------- 96 -- Input and output operations -- 97 --------------------------------- 98 99 procedure Read (File : File_Type; Item : out Element_Type); 100 procedure Write (File : File_Type; Item : Element_Type); 101 102 function End_Of_File (File : File_Type) return Boolean; 103 104 ---------------- 105 -- Exceptions -- 106 ---------------- 107 108 Status_Error : exception renames IO_Exceptions.Status_Error; 109 Mode_Error : exception renames IO_Exceptions.Mode_Error; 110 Name_Error : exception renames IO_Exceptions.Name_Error; 111 Use_Error : exception renames IO_Exceptions.Use_Error; 112 Device_Error : exception renames IO_Exceptions.Device_Error; 113 End_Error : exception renames IO_Exceptions.End_Error; 114 Data_Error : exception renames IO_Exceptions.Data_Error; 115 116private 117 118 -- The following procedures have a File_Type formal of mode IN OUT because 119 -- they may close the original file. The Close operation may raise an 120 -- exception, but in that case we want any assignment to the formal to 121 -- be effective anyway, so it must be passed by reference (or the caller 122 -- will be left with a dangling pointer). 123 124 pragma Export_Procedure 125 (Internal => Close, 126 External => "", 127 Mechanism => Reference); 128 pragma Export_Procedure 129 (Internal => Delete, 130 External => "", 131 Mechanism => Reference); 132 pragma Export_Procedure 133 (Internal => Reset, 134 External => "", 135 Parameter_Types => (File_Type), 136 Mechanism => Reference); 137 pragma Export_Procedure 138 (Internal => Reset, 139 External => "", 140 Parameter_Types => (File_Type, File_Mode), 141 Mechanism => (File => Reference)); 142 143 type File_Type is new System.Sequential_IO.File_Type; 144 145 -- All subprograms are inlined 146 147 pragma Inline (Close); 148 pragma Inline (Create); 149 pragma Inline (Delete); 150 pragma Inline (End_Of_File); 151 pragma Inline (Form); 152 pragma Inline (Is_Open); 153 pragma Inline (Mode); 154 pragma Inline (Name); 155 pragma Inline (Open); 156 pragma Inline (Read); 157 pragma Inline (Reset); 158 pragma Inline (Write); 159 160end Ada.Sequential_IO; 161