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

⟦1a5348176⟧ TextFile

    Length: 6914 (0x1b02)
    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 Debug_Tools;
package body Lines is

    procedure Assert_Is_Initialized (This_Line : in Line) is
    begin
        if (not This_Line.Is_Initialized) then
            raise Not_Initialized;
        end if;
    end Assert_Is_Initialized;

    procedure Assert_Is_Initialized (This_Iterator : in Iterator) is
    begin
        if (not This_Iterator.Is_Initialized) then
            raise Not_Initialized;
        end if;
    end Assert_Is_Initialized;

    function Create (From_String : in String) return Line is
        --
        New_Line : Line;
        --
    begin
        Vstrings.Copy (New_Line.Contents, From_String);
        New_Line.Is_Initialized := True;
        return (New_Line);
    end Create;

    function Empty_Line return Line is
    begin
        return (Lines.Create (""));
    end Empty_Line;

    function Copy (Of_Line : in Line) return Line is
    begin
        return (Lines.Create (Lines.Image (Of_Line)));
    end Copy;

    function Image (Of_Line : in Line) return String is
    begin
        Assert_Is_Initialized (Of_Line);
        return (Vstrings.Image (Of_Line.Contents));
    end Image;

    function Create return Iterator is
        --
        New_Iterator : Iterator;
        --
    begin  
        New_Iterator.Is_Initialized := True;
        return (New_Iterator);
    end Create;

    function Copy_Lines is new Strings.Copy (Copy);

    function Copy (Of_Iterator : in Iterator) return Iterator is
        --
        New_Iterator : Iterator;
        --
    begin
        New_Iterator.Contents := Copy_Lines (Of_Iterator.Contents);
        New_Iterator.Is_Initialized := True;
        return (New_Iterator);
    end Copy;

    procedure Add (To_Iterator : in out Iterator; This_Line : in Line) is
    begin
        Assert_Is_Initialized (To_Iterator);
        Assert_Is_Initialized (This_Line);
        Strings.Add (To_Iterator.Contents, This_Line);
    end Add;

    function Done (This_Iterator : in Iterator) return Boolean is
    begin  
        Assert_Is_Initialized (This_Iterator);
        return (Strings.Done (This_Iterator.Contents));
    end Done;

    procedure Reset (This_Iterator : in out Iterator) is
    begin  
        Assert_Is_Initialized (This_Iterator);
        Strings.Reset (This_Iterator.Contents);
    end Reset;

    function Current (This_Iterator : in Iterator) return Line is
    begin  
        Assert_Is_Initialized (This_Iterator);
        begin
            return (Strings.Current (This_Iterator.Contents));
        exception
            when Strings.No_Current_Element =>
                raise No_Current_Line;
            when others =>
                raise;
        end;
    end Current;

    procedure Modify (This_Iterator : in out Iterator; New_Line : in Line) is
    begin  
        Assert_Is_Initialized (This_Iterator);
        Assert_Is_Initialized (New_Line);
        begin
            Strings.Modify (This_Iterator.Contents, New_Line);
        exception
            when Strings.No_Current_Element =>
                raise No_Current_Line;
            when others =>
                raise;
        end;
    end Modify;

    procedure Next (This_Iterator : in out Iterator) is
    begin  
        Assert_Is_Initialized (This_Iterator);
        begin
            Strings.Next (This_Iterator.Contents);
        exception
            when Strings.No_Next_Element =>
                raise No_Next_Line;
            when others =>
                raise;
        end;
    end Next;

    function Position (In_Iterator : in Iterator) return Line_Number is
    begin  
        Assert_Is_Initialized (In_Iterator);
        begin
            return (Strings.Position (In_Iterator.Contents));
        exception
            when Strings.No_Current_Element =>
                raise No_Current_Line;
            when others =>
                raise;
        end;
    end Position;

    procedure Set (This_Iterator : in out Iterator; To_Line : in Line_Number) is
    begin  
        Assert_Is_Initialized (This_Iterator);
        begin
            Strings.Set (This_Iterator.Contents, To_Line);
        exception
            when Strings.Out_Of_Range =>
                raise Out_Of_Range;
            when others =>
                raise;
        end;
    end Set;

    function Line_At (This_Position : in Line_Number; In_Iterator : in Iterator)
                     return Line is
    begin  
        Assert_Is_Initialized (In_Iterator);
        begin
            return (Strings.Element_At (This_Position, In_Iterator.Contents));
        exception
            when Strings.Out_Of_Range =>
                raise Out_Of_Range;
            when others =>
                raise;
        end;
    end Line_At;

    function Is_Empty (This_Iterator : in Iterator) return Boolean is
    begin  
        Assert_Is_Initialized (This_Iterator);
        return (Strings.Is_Empty (This_Iterator.Contents));
    end Is_Empty;

    function Lines_In (This_Iterator : in Iterator) return Natural is
    begin  
        Assert_Is_Initialized (This_Iterator);
        return (Strings.Elements_In (This_Iterator.Contents));
    end Lines_In;

-- ***** REGISTRATION OF TYPE IMAGES

    function Line_Image (This_Line : in Line;
                         Level : in Natural;
                         Prefix : in String;
                         Expand_Pointers : in Boolean) return String is
    begin  
        if (not This_Line.Is_Initialized) then
            return ("<NOT INITIALIZED>");
        else
            return (Image (This_Line));
        end if;
    end Line_Image;

    procedure Register_Line is new Debug_Tools.Register (Line, Line_Image);

    function Iterator_Image (This_Iterator : in Iterator;
                             Level : in Natural;
                             Prefix : in String;
                             Expand_Pointers : in Boolean) return String is
        --
        The_Iterator : Iterator := This_Iterator;
        --
        The_Concatenated_Iterator : Line := Line (Lines.Empty_Line);
        --
    begin
        if (not This_Iterator.Is_Initialized) then
            return ("<NOT INITIALIZED>");
        elsif (Is_Empty (The_Iterator)) then
            return ("<EMPTY>");
        elsif (Lines_In (The_Iterator) = 1) then
            return (Image (Current (The_Iterator)));
        else
            Reset (The_Iterator);
            return (Image (Current (The_Iterator)) & Ascii.Lf);
            while (not Done (The_Iterator)) loop
                The_Concatenated_Iterator :=
                   Create (Prefix & Image (The_Concatenated_Iterator) &
                           Ascii.Lf);
                Next (The_Iterator);
            end loop;  
            return (Image (The_Concatenated_Iterator));
        end if;
    end Iterator_Image;

    procedure Register_Iterator is
       new Debug_Tools.Register (Iterator, Iterator_Image);

begin
    Register_Line;
    Register_Iterator;
end Lines;