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

⟦976e737be⟧ TextFile

    Length: 5349 (0x14e5)
    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 String_Utilities;
with Io;
package body Definitions is
    package Sio renames Io;

    type Possible_State is (Start, Found_Begin_Title_Delim,
                            Found_End_Title_Delim, Found_Title,
                            Found_Step_Delim, Found_Step_Text);

    function Transpose (Module_List : Module.List) return Module.List is
        Iter : Module.Iterator;
        Return_List : Module.List;
    begin
        Module.Init (Iter, Module_List);

        while not Module.Done (Iter) loop
            Return_List := Module.Make (Module.Value (Iter), Return_List);
            Module.Next (Iter);
        end loop;

        return Return_List;
    end Transpose;

    function Transpose (Lines_List : Lines.List) return Lines.List is
        Iter : Lines.Iterator;
        Return_List : Lines.List;
    begin
        Lines.Init (Iter, Lines_List);

        while not Lines.Done (Iter) loop
            Return_List := Lines.Make (Lines.Value (Iter), Return_List);
            Lines.Next (Iter);
        end loop;

        return Return_List;
    end Transpose;

    function Transpose (Step_List : Step.List) return Step.List is
        Iter : Step.Iterator;
        Return_List : Step.List;
    begin
        Step.Init (Iter, Step_List);

        while not Step.Done (Iter) loop
            Return_List := Step.Make (Step.Value (Iter), Return_List);
            Step.Next (Iter);
        end loop;

        return Return_List;
    end Transpose;

    procedure Initialize (File_Name : String) is
        File : Sio.File_Type;
        State : Possible_State := Start;
        L : Line;
        A_Step : Lines.List;
        This_Module : Module_Information;

    begin
        All_Modules := Module.Nil;

        loop
            begin
                Sio.Open (File, Sio.In_File, File_Name);
                exit;
            exception
                when Sio.Use_Error =>
                    delay 3.0;
            end;
        end loop;

        loop
            case State is
                when Found_Step_Delim | Found_Step_Text =>
                    Bounded_String.Copy (L, Sio.Get_Line (File));
                when others =>
                    Bounded_String.Copy (L, String_Utilities.Strip
                                               (Sio.Get_Line (File)));

            end case;

            case State is
                when Start =>
                    if Bounded_String.Image (L) = ".;." then
                        State := Found_Begin_Title_Delim;
                    end if;
                when Found_Begin_Title_Delim =>
                    if Bounded_String.Image (L) = "" then
                        null;
                    elsif Bounded_String.Image (L) = ".;." then
                        raise Unable_To_Parse;
                    elsif Bounded_String.Image (L) = ";.;" then
                        raise Unable_To_Parse;
                    else
                        This_Module.Name := L;
                        This_Module.Module := Step.Nil;
                        State := Found_Title;
                    end if;
                when Found_Title =>
                    if Bounded_String.Image (L) = "" then
                        null;
                    elsif Bounded_String.Image (L) = ".;." then
                        State := Found_End_Title_Delim;
                    elsif Bounded_String.Image (L) = ";.;" then
                        raise Unable_To_Parse;
                    else
                        raise Unable_To_Parse;
                    end if;

                when Found_End_Title_Delim =>
                    if Bounded_String.Image (L) = ";.;" then
                        State := Found_Step_Delim;
                    elsif Bounded_String.Image (L) = "" then
                        null;
                    else
                        raise Unable_To_Parse;
                    end if;
                when Found_Step_Delim =>
                    if Bounded_String.Image (L) = "" then
                        null;
                    elsif Bounded_String.Image (L) = ".;." then
                        This_Module.Module := Transpose (This_Module.Module);
                        All_Modules := Module.Make (This_Module, All_Modules);
                        State := Found_Begin_Title_Delim;
                    elsif Bounded_String.Image (L) = ";.;" then
                        null;
                    else
                        A_Step := Lines.Make (L, Lines.Nil);
                        State := Found_Step_Text;
                    end if;

                when Found_Step_Text =>
                    if Bounded_String.Image (L) = ".;." then
                        raise Unable_To_Parse;
                    elsif Bounded_String.Image (L) = ";.;" then
                        This_Module.Module :=
                           Step.Make (Transpose (A_Step), This_Module.Module);
                        State := Found_Step_Delim;
                    else
                        A_Step := Lines.Make (L, A_Step);
                    end if;
            end case;
        end loop;
    exception
        when Sio.End_Error =>
            This_Module.Module := Transpose (This_Module.Module);
            All_Modules := Transpose (Module.Make (This_Module, All_Modules));
            Sio.Close (File);
    end Initialize;
end Definitions;