|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 33792 (0x8400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Enumeration_Io, package body Fixed_Io, package body Float_Io, package body Integer_Io, package body Text_Io, seg_04ba76
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with System, File_Support, Os_Files;
with Text_Supprt;
use Text_Supprt;
with A_Strings;
use A_Strings;
with Safe_Support;
use File_Support;
use System;
pragma Elaborate (File_Support);
pragma Elaborate (Os_Files);
package body Text_Io is
Standard_Input_Open : Boolean := False;
Standard_Output_Open : Boolean := False;
Standard_Error_Open : Boolean := False;
Current_Input_Open : Boolean := False;
Current_Output_Open : Boolean := False;
pragma Suppress (Access_Check);
pragma Suppress (Discriminant_Check);
pragma Suppress (Index_Check);
pragma Suppress (Length_Check);
pragma Suppress (Range_Check);
pragma Suppress (Division_Check);
pragma Suppress (Overflow_Check);
pragma Suppress (Elaboration_Check);
-- NOTE: NO NESTED FILE LOCKS
------------------------------------------------------------------------
-- Beginning of text_io support routines (file is already lock)
------------------------------------------------------------------------
-- Upon entry/exit: file is locked
procedure Set_Line_And_Page (File : File_Type) is
Void : File_Pos;
begin
Reject_Null_File (File);
if File.Mode = Input then
Void := Tstfile (File);
end if;
end Set_Line_And_Page;
-- Upon entry/exit: file is locked
function Get_Col (File : in File_Type) return Positive_Count is
begin
Reject_Null_File (File);
if File.Mode = Output then
return Count (File.Out_Ptr - File.Last_Lf + 1);
else
return Count (File.In_Ptr - File.Last_Lf + 1);
end if;
end Get_Col;
-- Upon entry/exit: file is locked
function Get_Line_Number (File : in File_Type) return Positive_Count is
begin
Set_Line_And_Page (File);
return Count (File.Line);
end Get_Line_Number;
-- Upon entry/exit: file is locked
procedure Put_New_Line (File : in File_Type;
Spacing : in Positive_Count := 1) is
begin
Must_Be_Output (File);
for I in 1 .. Spacing loop
Putchar (File_Ptr (File), Ascii.Lf);
end loop;
if File.Always_Flush then
Flush (File);
end if;
end Put_New_Line;
-- Upon entry/exit: file is locked
procedure Put_New_Page (File : in File_Type) is
begin
Must_Be_Output (File);
if Get_Col (File) /= 1 or else Get_Line_Number (File) = 1 then
Putchar (File_Ptr (File), Ascii.Lf);
end if;
Putchar (File_Ptr (File), Ascii.Ff);
if File.Always_Flush then
Flush (File);
end if;
end Put_New_Page;
------------------------------------------------------------------------
-- End of text_io support routines
------------------------------------------------------------------------
-- No file locking. file can't be referenced until create() returns.
procedure Create (File : in out File_Type;
Mode : in File_Mode := Out_File;
Name : in String := "";
Form : in String := "") is
Fmode : File_Support.File_Mode;
begin
case Mode is
when In_File =>
Fmode := Input;
when Out_File =>
Fmode := Output;
end case;
-- Upon entry/exit: file is unlocked for the following two calls
File_Open (Name, File_Ptr (File), Fmode, True, Form, Text);
Setup_Buffer (File_Ptr (File), Os_Files.Default_Buffer_Size);
end Create;
-- No file locking. file can't be referenced until open() returns.
procedure Open (File : in out File_Type;
Mode : in File_Mode;
Name : in String;
Form : in String := "") is
Fmode : File_Support.File_Mode;
begin
case Mode is
when In_File =>
Fmode := Input;
when Out_File =>
Fmode := Output;
end case;
-- Upon entry/exit: file is unlocked for the following two calls
File_Open (Name, File_Ptr (File), Fmode, False, Form, Text);
Setup_Buffer (File_Ptr (File), Os_Files.Default_Buffer_Size);
end Open;
procedure Close (File : in out File_Type) is
begin
Reject_Null_File (File);
begin
Safe_Support.File_Lock (File);
if File.Mode = Output and then Get_Col (File) /= 1 then
Putchar (File_Ptr (File), Ascii.Lf);
end if;
if File_Ptr (File) = Cur_Input then
Cur_Input := null;
end if;
if File_Ptr (File) = Cur_Output then
Cur_Output := null;
end if;
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end;
File_Close (File_Ptr (File)); -- upon return, file is unlocked
File := null;
end Close;
procedure Delete (File : in out File_Type) is
begin
Reject_Null_File (File);
Safe_Support.File_Lock (File);
File_Delete (File_Ptr (File)); -- upon return, file is unlocked
File := null;
end Delete;
procedure Reset (File : in out File_Type; Mode : in File_Mode) is
Fmode : File_Support.File_Mode;
Fp : File_Ptr := File_Ptr (File);
begin
Safe_Support.File_Lock (File);
Reject_Null_File (File);
case Mode is
when In_File =>
Fmode := Input;
when Out_File =>
Fmode := Output;
end case;
if (Fp = Cur_Input or Fp = Cur_Output) and Fmode /= File.Mode then
raise Mode_Error; -- raise mode_error before stomping file
end if;
if File.Mode = Output and then Get_Col (File) /= 1 then
Putchar (File_Ptr (File), Ascii.Lf);
end if;
File_Reset (File_Ptr (File), Fmode);
File.Linelength := 0;
File.Pagelength := 0;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Reset;
procedure Reset (File : in out File_Type) is
begin
Safe_Support.File_Lock (File);
Reject_Null_File (File);
if File.Mode = Output then
if Get_Col (File) /= 1 or else
(File.Line = 1 and File.Page = 1) then
Putchar (File_Ptr (File), Ascii.Lf);
end if;
if File.Line /= 1 or else File.Page = 1 then
Putchar (File_Ptr (File), Ascii.Ff);
end if;
end if;
File_Reset (File_Ptr (File), File.Mode);
File.Linelength := 0;
File.Pagelength := 0;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Reset;
function Mode (File : in File_Type) return File_Mode is
begin
Reject_Null_File (File);
case File.Mode is
when Input =>
return In_File;
when Output =>
return Out_File;
when In_Out =>
raise Program_Error;
end case;
end Mode;
function Name (File : in File_Type) return String is
begin
Reject_Null_File (File);
if File.Name = null then
return "";
else
return File.Name.S;
end if;
end Name;
function Form (File : in File_Type) return String is
begin
Reject_Null_File (File);
if File.Form = null then
return "";
end if;
return File.Form.S;
end Form;
function Is_Open (File : in File_Type) return Boolean is
Fp : File_Ptr := File_Ptr (File);
begin
return File /= null and then Fp.File_Id /= Os_Files.Invalid;
end Is_Open;
-- control of default input and output files
-- Upon entry/exit: text_io is locked
procedure Open_Standard_Input is
begin
File_Open (Os_Files.Std_Input_Name, Std_Input,
Input, False, "", Os_Files.Special);
Stdin_Fd := Std_Input.Fd;
Setup_Buffer (Std_Input, Os_Files.Default_Buffer_Size);
Standard_Input_Open := True;
if not Current_Input_Open then
Cur_Input := Std_Input;
Cur_Input_Id := Std_Input.File_Id;
Current_Input_Open := True;
end if;
end Open_Standard_Input;
-- Upon entry/exit: text_io is locked
procedure Open_Standard_Output is
begin
File_Open (Os_Files.Std_Output_Name, Std_Output,
Output, False, "", Os_Files.Special);
Stdout_Fd := Std_Output.Fd;
if Standard_Input_Open then
Std_Output.Always_Flush := Std_Output.Always_Flush or
(Is_Interactive (Stdout_Fd) and then
Is_Interactive (Stdin_Fd));
else
Std_Output.Always_Flush := Std_Output.Always_Flush or
Is_Interactive (Stdout_Fd);
end if;
Setup_Buffer (Std_Output, Os_Files.Default_Buffer_Size);
Standard_Output_Open := True;
if not Current_Output_Open then
Cur_Output := Std_Output;
Cur_Output_Id := Std_Output.File_Id;
Current_Output_Open := True;
end if;
end Open_Standard_Output;
-- Upon entry/exit: text_io is locked
function Standard_Output_Locked return File_Type is
begin
begin
if not Standard_Output_Open then
Open_Standard_Output;
end if;
exception
when others =>
raise;
end;
return File_Type (Std_Output);
end Standard_Output_Locked;
-- Upon entry/exit: text_io is locked
procedure Open_Standard_Error is
begin
File_Open (Os_Files.Std_Error_Name, Std_Error,
Output, False, "", Os_Files.Special);
Stderr_Fd := Std_Error.Fd;
Std_Error.Always_Flush := Standard_Output_Locked.Always_Flush;
Setup_Buffer (Std_Error, Os_Files.Default_Buffer_Size);
Standard_Error_Open := True;
end Open_Standard_Error;
procedure Set_Input (File : in File_Type) is
begin
Must_Be_Input (File);
Safe_Support.Text_Io_Lock;
Cur_Input := File_Ptr (File);
Cur_Input_Id := Cur_Input.File_Id;
Current_Input_Open := True;
Safe_Support.Text_Io_Unlock;
end Set_Input;
procedure Set_Output (File : in File_Type) is
begin
Must_Be_Output (File);
Safe_Support.Text_Io_Lock;
Cur_Output := File_Ptr (File);
Cur_Output_Id := Cur_Output.File_Id;
Current_Output_Open := True;
Safe_Support.Text_Io_Unlock;
end Set_Output;
function Standard_Input return File_Type is
begin
begin
Safe_Support.Text_Io_Lock;
if not Standard_Input_Open then
Open_Standard_Input;
end if;
Safe_Support.Text_Io_Unlock;
exception
when others =>
Safe_Support.Text_Io_Unlock;
raise;
end;
return File_Type (Std_Input);
end Standard_Input;
function Standard_Output return File_Type is
begin
begin
Safe_Support.Text_Io_Lock;
if not Standard_Output_Open then
Open_Standard_Output;
end if;
Safe_Support.Text_Io_Unlock;
exception
when others =>
Safe_Support.Text_Io_Unlock;
raise;
end;
return File_Type (Std_Output);
end Standard_Output;
function Standard_Error return File_Type is
begin
begin
Safe_Support.Text_Io_Lock;
if not Standard_Error_Open then
Open_Standard_Error;
end if;
Safe_Support.Text_Io_Unlock;
exception
when others =>
Safe_Support.Text_Io_Unlock;
raise;
end;
return File_Type (Std_Error);
end Standard_Error;
function Current_Input return File_Type is
begin
--
-- If current_input is not open it must be the same as standard_input
--
begin
Safe_Support.Text_Io_Lock;
if not Current_Input_Open then
Open_Standard_Input;
end if;
Safe_Support.Text_Io_Unlock;
exception
when others =>
Safe_Support.Text_Io_Unlock;
raise;
end;
return File_Type (Cur_Input);
end Current_Input;
function Current_Output return File_Type is
begin
--
-- If current_output is not open it must be the same as standard_output
--
begin
Safe_Support.Text_Io_Lock;
if not Current_Output_Open then
Open_Standard_Output;
end if;
Safe_Support.Text_Io_Unlock;
exception
when others =>
Safe_Support.Text_Io_Unlock;
raise;
end;
return File_Type (Cur_Output);
end Current_Output;
-- specification of line and page lengths
procedure Set_Line_Length (File : in File_Type; To : in Count) is
begin
Safe_Support.File_Lock (File);
Must_Be_Output (File);
File.Linelength := Natural (To);
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Set_Line_Length;
procedure Set_Line_Length (To : in Count) is
begin
-- Called set_line_length() does file_lock()/file_unlock()
Set_Line_Length (Current_Output, To);
end Set_Line_Length;
procedure Set_Page_Length (File : in File_Type; To : in Count) is
begin
Safe_Support.File_Lock (File);
Must_Be_Output (File);
File.Pagelength := Natural (To);
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Set_Page_Length;
procedure Set_Page_Length (To : in Count) is
begin
-- Called set_page_length() does file_lock()/file_unlock()
Set_Page_Length (Current_Output, To);
end Set_Page_Length;
function Line_Length (File : in File_Type) return Count is
begin
Must_Be_Output (File);
return Count (File.Linelength);
end Line_Length;
function Line_Length return Count is
begin
return Line_Length (Current_Output);
end Line_Length;
function Page_Length (File : in File_Type) return Count is
begin
Must_Be_Output (File);
return Count (File.Pagelength);
end Page_Length;
function Page_Length return Count is
begin
return Page_Length (Current_Output);
end Page_Length;
-- column, line, and page control
procedure New_Line (File : in File_Type;
Spacing : in Positive_Count := 1) is
begin
Safe_Support.File_Lock (File);
Put_New_Line (File, Spacing);
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end New_Line;
procedure New_Line (Spacing : in Positive_Count := 1) is
begin
-- Called new_line() does file_lock()/file_unlock()
New_Line (Current_Output, Spacing);
end New_Line;
procedure Skip_Line (File : in File_Type;
Spacing : in Positive_Count := 1) is
begin
Safe_Support.File_Lock (File);
Must_Be_Input (File);
for I in 1 .. Spacing loop
File_Support.Skip_Past_Eol (File_Ptr (File));
end loop;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Skip_Line;
procedure Skip_Line (Spacing : in Positive_Count := 1) is
begin
-- Called skip_line() does file_lock()/file_unlock()
Skip_Line (Current_Input, Spacing);
end Skip_Line;
function End_Of_Line (File : in File_Type) return Boolean is
Result : Boolean;
begin
Safe_Support.File_Lock (File);
Must_Be_Input (File);
Result := Tstfile (File_Ptr (File)) /= At_Char;
Safe_Support.File_Unlock (File);
return Result;
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end End_Of_Line;
function End_Of_Line return Boolean is
begin
-- Called end_of_line() does file_lock()/file_unlock()
return End_Of_Line (Current_Input);
end End_Of_Line;
procedure New_Page (File : in File_Type) is
begin
Safe_Support.File_Lock (File);
Put_New_Page (File);
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end New_Page;
procedure New_Page is
begin
-- Called new_page() does file_lock()/file_unlock()
New_Page (Current_Output);
end New_Page;
procedure Skip_Page (File : in File_Type) is
Void : File_Pos;
begin
Safe_Support.File_Lock (File);
Must_Be_Input (File);
loop
Skip_Past_Eol (File);
Void := Tstfile_Beyond_Eol (File); --read past ff, if present
exit when File.Pos = At_Eop or File.Pos = At_Eof;
end loop;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Skip_Page;
procedure Skip_Page is
begin
-- Called skip_page() does file_lock()/file_unlock()
Skip_Page (Current_Input);
end Skip_Page;
function End_Of_Page (File : in File_Type) return Boolean is
Pos : File_Pos;
begin
Safe_Support.File_Lock (File);
Must_Be_Input (File);
Pos := Tstfile_Beyond_Eol (File);
Safe_Support.File_Unlock (File);
return Pos = At_Eop or else Pos = At_Eof;
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end End_Of_Page;
function End_Of_Page return Boolean is
begin
-- Called end_of_page() does file_lock()/file_unlock()
return End_Of_Page (Current_Input);
end End_Of_Page;
function End_Of_File (File : in File_Type) return Boolean is
Result : Boolean;
begin
Safe_Support.File_Lock (File);
Must_Be_Input (File);
Result := Tstfile_Beyond_Eol (File) = At_Eof;
Safe_Support.File_Unlock (File);
return Result;
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end End_Of_File;
function End_Of_File return Boolean is
begin
-- Called end_of_file() does file_lock()/file_unlock()
return End_Of_File (Current_Input);
end End_Of_File;
procedure Set_Col (File : in File_Type; To : in Positive_Count) is
Void : Character;
begin
Safe_Support.File_Lock (File);
Reject_Null_File (File);
case File.Mode is
when Input =>
while Tstfile (File_Ptr (File)) /= At_Char or else
Get_Col (File) /= To loop
Void := Getchar (File_Ptr (File));
end loop;
when Output =>
if File.Linelength /= 0 and then
To > Count (File.Linelength) then
raise Layout_Error;
end if;
if Get_Col (File) > To then
Putchar (File_Ptr (File), Ascii.Lf);
end if;
while Get_Col (File) < To loop
Putchar (File_Ptr (File), ' ');
end loop;
if File.Always_Flush then
Flush (File);
end if;
when others =>
null;
end case;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Set_Col;
procedure Set_Col (To : in Positive_Count) is
begin
-- Called set_col() does file_lock()/file_unlock()
Set_Col (Current_Output, To);
end Set_Col;
procedure Set_Line (File : in File_Type; To : in Positive_Count) is
Void_Pos : File_Pos;
begin
Safe_Support.File_Lock (File);
Reject_Null_File (File);
case File.Mode is
when Input =>
while File.Line /= Natural (To) loop
Skip_Past_Eol (File);
Void_Pos := Tstfile_Beyond_Eol (File);
end loop;
when Output =>
if File.Pagelength /= 0 and then
Natural (To) > File.Pagelength then
raise Layout_Error;
end if;
if Natural (To) < File.Line then
Put_New_Page (File);
Put_New_Line (File, To - 1);
elsif Natural (To) > File.Line then
while File.Line /= Natural (To) loop
Put_New_Line (File);
end loop;
end if;
if File.Always_Flush then
Flush (File);
end if;
when others =>
null;
end case;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Set_Line;
procedure Set_Line (To : in Positive_Count) is
begin
-- Called set_line() does file_lock()/file_unlock()
Set_Line (Current_Output, To);
end Set_Line;
function Col (File : in File_Type) return Positive_Count is
Cnt : Count;
begin
Safe_Support.File_Lock (File);
Cnt := Get_Col (File);
Safe_Support.File_Unlock (File);
return Cnt;
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Col;
function Col return Positive_Count is
begin
-- Called col() does file_lock()/file_unlock()
return Col (Current_Output);
end Col;
function Line (File : in File_Type) return Positive_Count is
Cnt : Positive_Count;
begin
Safe_Support.File_Lock (File);
Cnt := Get_Line_Number (File);
Safe_Support.File_Unlock (File);
return Cnt;
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Line;
function Line return Positive_Count is
begin
-- Called line() does file_lock()/file_unlock()
return Line (Current_Output);
end Line;
function Page (File : in File_Type) return Positive_Count is
begin
Safe_Support.File_Lock (File);
Set_Line_And_Page (File);
Safe_Support.File_Unlock (File);
return Count (File.Page);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Page;
function Page return Positive_Count is
begin
-- Called page() does file_lock()/file_unlock()
return Page (Current_Output);
end Page;
-- character input-output
procedure Get (File : in File_Type; Item : out Character) is
C : Character;
Fp : File_Ptr := File_Ptr (File);
begin
Safe_Support.File_Lock (File);
if File = null then
raise Status_Error;
end if;
loop
if File.Pos /= At_Char or else File.In_Ptr >= File.Last then
C := Getchar (File);
else
File.In_Ptr := File.In_Ptr + 1;
C := File.Buffer.Elem (File.In_Ptr);
if C = Ascii.Lf then
File.In_Ptr := File.In_Ptr - 1;
C := Getchar (File);
else
exit;
end if;
end if;
exit when File.Pos = At_Char;
end loop;
Item := C;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Get;
procedure Get (Item : out Character) is
begin
-- Called get() does file_lock()/file_unlock()
Get (Current_Input, Item);
end Get;
procedure Put (File : in File_Type; Item : in Character) is
begin
Safe_Support.File_Lock (File);
if File = null then
raise Status_Error;
end if;
if File.Mode /= Output then
raise Mode_Error;
end if;
Putchar (File_Ptr (File), Item);
if File.Always_Flush then
Flush (File);
end if;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Put;
procedure Put (Item : in Character) is
begin
-- Called put() does file_lock()/file_unlock()
Put (Current_Output, Item);
end Put;
-- string input-output
procedure Get (File : in File_Type; Item : out String) is
C : Character;
Fp : File_Ptr := File_Ptr (File);
Void : File_Pos;
begin
Safe_Support.File_Lock (File);
Reject_Null_File (File);
for I in Item'Range loop
loop
if Fp.In_Ptr < Fp.Last and then File.Pos = At_Char then
Fp.In_Ptr := Fp.In_Ptr + 1;
C := File.Buffer.Elem (Fp.In_Ptr);
if C = Ascii.Lf then
Fp.Pos := At_Delayed_Eol;
C := Getchar (Fp);
else
File.Pos := At_Char;
exit;
end if;
else
C := Getchar (Fp);
end if;
exit when Fp.Pos = At_Char;
end loop;
Item (I) := C;
end loop;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Get;
procedure Get (Item : out String) is
begin
Get (Current_Input, Item);
end Get;
-- Upon entry/exit: file is locked
--
-- Called from float_io.put() and fixed_io.put().
procedure Put_String_On_One_Line (File : File_Type; Item : String) is
Len : Integer := Item'Length;
begin
Must_Be_Output (File);
if File.Linelength /= 0 then
if Integer (Get_Col (File)) + Len - 1 > File.Linelength then
if Len > File.Linelength then
raise Layout_Error;
end if;
Put_New_Line (File);
end if;
end if;
for I in Item'Range loop
Putchar (File, Item (I));
end loop;
if File.Always_Flush then
Flush (File);
end if;
end Put_String_On_One_Line;
procedure Put (File : in File_Type; Item : in String) is
begin
Safe_Support.File_Lock (File);
Must_Be_Output (File);
for I in Item'Range loop
Putchar (File, Item (I));
end loop;
if File.Always_Flush and then Item'Last >= Item'First then
Flush (File);
end if;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Put;
procedure Put (Item : in String) is
begin
-- Called put() does file_lock()/file_unlock()
Put (Current_Output, Item);
end Put;
procedure Get_Line
(File : in File_Type; Item : out String; Last : out Natural) is
Fp : File_Ptr := File_Ptr (File);
C : Character;
begin
Safe_Support.File_Lock (File);
Must_Be_Input (File);
if Item'Last < Item'First then
Last := Item'First - 1;
Safe_Support.File_Unlock (File);
return;
end if;
for I in Item'Range loop
C := File.Buffer.Elem (Fp.In_Ptr + 1);
if Fp.In_Ptr >= Fp.Last or else
C = Ascii.Ff or else C = Ascii.Lf then
if Tstfile (Fp) /= At_Char then
Last := I - 1;
Skip_Past_Eol (File);
Safe_Support.File_Unlock (File);
return;
end if;
Item (I) := Getchar (Fp);
else
Fp.In_Ptr := Fp.In_Ptr + 1;
Item (I) := C;
end if;
end loop;
Last := Item'Last;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Get_Line;
procedure Get_Line (Item : out String; Last : out Natural) is
begin
-- Called get_line() does file_lock()/file_unlock()
Get_Line (Current_Input, Item, Last);
end Get_Line;
procedure Put_Line (File : in File_Type; Item : in String) is
begin
Safe_Support.File_Lock (File);
Must_Be_Output (File);
for I in Item'Range loop
Putchar (File_Ptr (File), Item (I));
end loop;
Putchar (File_Ptr (File), Ascii.Lf);
if File.Always_Flush then
Flush (File);
end if;
Safe_Support.File_Unlock (File);
exception
when others =>
Safe_Support.File_Unlock (File);
raise;
end Put_Line;
procedure Put_Line (Item : in String) is
begin
-- Called put_line() does file_lock()/file_unlock()
Put_Line (Current_Output, Item);
end Put_Line;
package body Integer_Io is separate;
package body Float_Io is separate;
package body Fixed_Io is separate;
package body Enumeration_Io is separate;
end Text_Io;
nblk1=20
nid=0
hdr6=40
[0x00] rec0=23 rec1=00 rec2=01 rec3=008
[0x01] rec0=1e rec1=00 rec2=02 rec3=04c
[0x02] rec0=1d rec1=00 rec2=03 rec3=000
[0x03] rec0=1a rec1=00 rec2=04 rec3=01c
[0x04] rec0=1d rec1=00 rec2=05 rec3=024
[0x05] rec0=1e rec1=00 rec2=06 rec3=050
[0x06] rec0=1c rec1=00 rec2=07 rec3=050
[0x07] rec0=25 rec1=00 rec2=08 rec3=00e
[0x08] rec0=1e rec1=00 rec2=09 rec3=012
[0x09] rec0=16 rec1=00 rec2=0a rec3=060
[0x0a] rec0=1f rec1=00 rec2=0b rec3=02e
[0x0b] rec0=23 rec1=00 rec2=0c rec3=022
[0x0c] rec0=22 rec1=00 rec2=0d rec3=024
[0x0d] rec0=22 rec1=00 rec2=0e rec3=00c
[0x0e] rec0=1e rec1=00 rec2=0f rec3=05e
[0x0f] rec0=22 rec1=00 rec2=10 rec3=048
[0x10] rec0=20 rec1=00 rec2=11 rec3=006
[0x11] rec0=22 rec1=00 rec2=12 rec3=00c
[0x12] rec0=20 rec1=00 rec2=13 rec3=04c
[0x13] rec0=21 rec1=00 rec2=14 rec3=02a
[0x14] rec0=19 rec1=00 rec2=15 rec3=018
[0x15] rec0=1f rec1=00 rec2=16 rec3=030
[0x16] rec0=1c rec1=00 rec2=17 rec3=06c
[0x17] rec0=24 rec1=00 rec2=18 rec3=02c
[0x18] rec0=23 rec1=00 rec2=19 rec3=00e
[0x19] rec0=1f rec1=00 rec2=1a rec3=00e
[0x1a] rec0=22 rec1=00 rec2=1b rec3=06e
[0x1b] rec0=20 rec1=00 rec2=1c rec3=028
[0x1c] rec0=1d rec1=00 rec2=1d rec3=018
[0x1d] rec0=1f rec1=00 rec2=1e rec3=00c
[0x1e] rec0=1e rec1=00 rec2=1f rec3=052
[0x1f] rec0=1c rec1=00 rec2=20 rec3=000
tail 0x21548d62286843c0d6379 0x42a00088462060003