|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 6257 (0x1871)
Types: TextFile
Names: »B«
└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
└─⟦77aa8350c⟧ »DATA«
└─⟦f794ecd1d⟧
└─⟦4c85d69e2⟧
└─⟦this⟧
-- The use of this system is subject to the software license terms and
-- conditions agreed upon between Rational and the Customer.
--
-- Copyright 1988 by Rational.
--
-- RESTRICTED RIGHTS LEGEND
--
-- Use, duplication, or disclosure by the Government is subject to
-- restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
-- Technical Data and Computer Software clause at 52.227-7013.
--
--
-- Rational
-- 3320 Scott Boulevard
-- Santa Clara, California 95054-3197
--
-- PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
-- USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
-- IS STRICTLY PROHIBITED. THIS MATERIAL IS PROTECTED AS
-- AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
-- 1976. CREATED 1988. ALL RIGHTS RESERVED.
--
--
with System;
with System_Types;
with Io_Exception_Flavors;
with Unchecked_Conversion;
with Typed_Io_Support;
with Device_Independent_Io;
pragma Elaborate (Typed_Io_Support);
pragma Elaborate (Device_Independent_Io);
package body Sequential_Io is
package Iof renames Io_Exception_Flavors;
package Dio renames Device_Independent_Io;
package Tio renames Typed_Io_Support;
function Tio_File_Type is new Unchecked_Conversion
(File_Type, Typed_Io_Support.File_Type);
function External_File_Type is
new Unchecked_Conversion (Typed_Io_Support.File_Type, File_Type);
subtype Byte_String is System_Types.Byte_String;
Items_Constrained : constant Boolean := Element_Type'Constrained;
-- if Is_Constrained then
-- initialized in the body
Constrained_Size : Natural;
-- else
-- restrict the maximum size for a single object to 2**24-1 bytes
-- for unconstrained element types; write out 3 byte header of
-- the size of the following object.
--
Xchng : constant array (File_Mode) of Dio.File_Mode :=
(In_File => Dio.In_File, Out_File => Dio.Out_File);
procedure Create (File : in out File_Type;
Mode : File_Mode := Out_File;
Name : String := "";
Form : String := "") is
F : Tio.File_Type := Tio_File_Type (File);
begin
Tio.Create (F, Xchng (Mode), Name, Form);
File := External_File_Type (F);
end Create;
procedure Open (File : in out File_Type;
Mode : File_Mode;
Name : String;
Form : String := "") is
F : Tio.File_Type := Tio_File_Type (File);
begin
Tio.Open (F, Xchng (Mode), Name, Form);
File := External_File_Type (F);
end Open;
procedure Close (File : in out File_Type) is
F : Tio.File_Type := Tio_File_Type (File);
begin
Tio.Close (F);
File := External_File_Type (F);
end Close;
procedure Delete (File : in out File_Type) is
F : Tio.File_Type := Tio_File_Type (File);
begin
Tio.Delete (F);
File := External_File_Type (F);
end Delete;
procedure Reset (File : in out File_Type; Mode : File_Mode) is
F : Tio.File_Type := Tio_File_Type (File);
begin
Tio.Reset (F, Xchng (Mode));
File := External_File_Type (F);
end Reset;
procedure Reset (File : in out File_Type) is
F : Tio.File_Type := Tio_File_Type (File);
begin
Tio.Reset (F);
File := External_File_Type (F);
end Reset;
function Mode (File : File_Type) return File_Mode is
begin
case Tio.Mode (Tio_File_Type (File)) is
when Dio.In_File =>
return In_File;
when Dio.Out_File =>
return Out_File;
when Dio.Inout_File | Dio.Closed =>
raise Status_Error;
end case;
end Mode;
function Name (File : File_Type) return String is
begin
return Tio.Name (Tio_File_Type (File));
end Name;
function Form (File : File_Type) return String is
begin
return Tio.Form (Tio_File_Type (File));
end Form;
function Is_Open (File : File_Type) return Boolean is
begin
return Tio.Is_Open (Tio_File_Type (File));
end Is_Open;
function End_Of_File (File : File_Type) return Boolean is
begin
return Tio.End_Of_File (Tio_File_Type (File));
end End_Of_File;
procedure Read (File : File_Type; Item : out Element_Type) is
Item_Size : constant Natural := (Item'Size + 7) / 8;
subtype Item_As_Byte_String is Byte_String (1 .. Item_Size);
type Item_Ptr is access Item_As_Byte_String;
for Item_Ptr'Storage_Size use 0; -- suppress collection
function Convert is new Unchecked_Conversion (System.Address, Item_Ptr);
Item_Bs : constant Item_Ptr := Convert (Item'Address);
begin
if Items_Constrained then
Tio.Read (Tio_File_Type (File), Item_Bs.all,
Tio.Use_Current_Index, Items_Constrained);
else
Tio.Read_With_Size (Tio_File_Type (File), Item_Bs.all);
end if;
end Read;
procedure Write (File : File_Type; Item : Element_Type) is
Item_Size : constant Natural := (Item'Size + 7) / 8;
subtype Item_As_Byte_String is Byte_String (1 .. Item_Size);
type Item_Ptr is access Item_As_Byte_String;
for Item_Ptr'Storage_Size use 0; -- suppress collection
function Convert is new Unchecked_Conversion (System.Address, Item_Ptr);
Item_Bs : constant Item_Ptr := Convert (Item'Address);
begin
if Items_Constrained then
Tio.Write (Tio_File_Type (File), Item_Bs.all,
Tio.Use_Current_Index);
else
Tio.Write_With_Size (Tio_File_Type (File), Item_Bs.all);
end if;
end Write;
begin
if Items_Constrained then
Constrained_Size := (Element_Type'Size + 7) / 8;
end if;
exception
when Constraint_Error | Numeric_Error =>
-- size is too big to create an object of the type
Constrained_Size := Natural'Last;
end Sequential_Io;