DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: B T

⟦876c654ba⟧ TextFile

    Length: 3322 (0xcfa)
    Types: TextFile
    Names: »B«

Derivation

└─⟦180fe333a⟧ Bits:30000405 8mm tape, Rational 1000, SW CATALOG, 10_20_0
└─⟦180fe333a⟧ Bits:30000537 8mm tape, Rational 1000, SW Catalog 10_20_0
    └─⟦5cb1d1d7f⟧ »DATA« 
        └─⟦3b1ee7bd8⟧ 
            └─⟦this⟧ 

TextFile

with Io;
with Lines;
with Files;
with Pathnames;
with String_Utilities;
with Low_Level_File_Operations;
package body Defaults is

    Catalog_Position : constant Natural := 1;
    Version_Position : constant Natural := 2;

    function Defaults_For (This_User : in User_Name) return Lines.Iterator is
    begin  
        return (Files.Create (From_File =>
                                 Pathnames.Defaults_File_For (This_User)));
    end Defaults_For;

    function Catalog (For_User : in User_Name) return Default is
    begin  
        return (Lines.Line_At (Catalog_Position, Defaults_For (For_User)));
        --
    exception
        when others =>
            raise Io_Failure;
            --
    end Catalog;

    function Catalog (For_User : in User_Name) return Simple_Name is
    begin  
        return (String_Utilities.Upper_Case (Lines.Image (Catalog (For_User))));
        --
    exception
        when others =>
            raise Io_Failure;
            --
    end Catalog;

    function Full_Catalog (For_User : in User_Name) return Full_Name is
    begin
        return (Pathnames.Full_Catalog_Name (Catalog (For_User)));
    end Full_Catalog;

    function Version (For_User : in User_Name) return Default is
    begin  
        return (Lines.Line_At (Version_Position, Defaults_For (For_User)));
        --
    exception
        when others =>
            raise Io_Failure;
            --
    end Version;

    function Version (For_User : in User_Name) return Simple_Name is
    begin  
        return (String_Utilities.Upper_Case (Lines.Image (Version (For_User))));
        --
    exception
        when others =>
            raise Io_Failure;
            --
    end Version;

    function Full_Version (For_User : in User_Name) return Full_Name is
        --
        -- This one looks different because by "breaking" the abstraction,
        -- it is faster (only one access to the underlying file representation
        -- instead of two).
        --
    begin  
        declare
            The_Defaults : Lines.Iterator := Defaults_For (For_User);
            The_Catalog : constant Simple_Name :=
               Lines.Image (Lines.Line_At (Catalog_Position, The_Defaults));
            The_Version : constant Simple_Name :=
               Lines.Image (Lines.Line_At (Version_Position, The_Defaults));
        begin
            return (Pathnames.Full_Version_Name
                       (This_Catalog =>
                           Pathnames.Full_Catalog_Name (The_Catalog),
                        This_Version => The_Version));
        end;
        --
    exception
        when others =>
            raise Io_Failure;
            --
    end Full_Version;

    procedure Set (For_User : in User_Name;
                   Catalog : in Simple_Name;
                   Version : in Simple_Name) is
        --
        The_File : Io.File_Type;
        --
    begin
        The_File := Low_Level_File_Operations.Open_To_Write
                       (Pathnames.Defaults_File_For (For_User));
        Io.Put_Line (The_File, Catalog);
        Io.Put_Line (The_File, Version);
        Low_Level_File_Operations.Close (The_File);
        --
    exception
        when others =>
            Low_Level_File_Operations.Close (The_File);
            raise Io_Failure;
            --
    end Set;

end Defaults;