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 - download
Index: ┃ B T

⟦dafb799e8⟧ TextFile

    Length: 4042 (0xfca)
    Types: TextFile
    Names: »B«

Derivation

└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
    └─ ⟦129cab021⟧ »DATA« 
        └─⟦this⟧ 

TextFile

package body Bounded_Strings is

    function Power (Of_Number, N : Integer) return Integer is
        Result : Integer := 1;
    begin
        if N = 0 then
            return 1;
        else
            for K in 1 .. N loop
                Result := Result * Of_Number;
            end loop;
            return Result;
        end if;
    exception
        when Numeric_Error =>
            return 0;
    end Power;

    function To_Number (The_String : in Variable_Strings; In_Base : in Positive)
                       return Integer is
        I : Integer := The_String.The_Length;
        Aux : Integer;
        Result : Integer := 0;
    begin
        while I >= 1 loop
            if The_String.The_Content (I) in '0' .. '9' then
                Aux := Character'Pos (The_String.The_Content (I)) - 48;
            else
                Aux := Character'Pos (The_String.The_Content (I)) - 55;
            end if;
            Result := Result + Aux * Power (In_Base, The_String.The_Length - I);
            I := I - 1;
        end loop;
        return Result;
    exception
        when Numeric_Error =>
            return 0;
    end To_Number;


    procedure Free (The_String : in out Variable_Strings) is
    begin
        The_String.The_Length := Void;
    end Free;

    procedure Append (To_The_String : in out Variable_Strings;
                      The_Char : in Character) is
    begin
        if (To_The_String.The_Length < To_The_String.The_Content'Last) then
            To_The_String.The_Length := To_The_String.The_Length + 1;
            To_The_String.The_Content (To_The_String.The_Length) := The_Char;
        end if;
    end Append;

    procedure Set (The_String : in out Variable_Strings;
                   With_String : in String) is
    begin
        if (With_String'Last <= The_String.The_Content'Last) then
            The_String.The_Length := With_String'Length;
            The_String.The_Content (With_String'Range) :=
               With_String (With_String'Range);
        else
            The_String.The_Length := The_String.The_Content'Length;
            The_String.The_Content (The_String.The_Content'Range) :=
               With_String (The_String.The_Content'Range);
        end if;
    end Set;

    procedure Affect (The_String : in out Variable_Strings;
                      With_String : in Variable_Strings) is
    begin
        if (With_String.The_Content'Last <= The_String.The_Content'Last) then
            The_String.The_Length := With_String.The_Length;
            The_String.The_Content (With_String.The_Content'Range) :=
               With_String.The_Content (With_String.The_Content'Range);
        else
            The_String.The_Length := The_String.The_Content'Length;
            The_String.The_Content (The_String.The_Content'Range) :=
               With_String.The_Content (The_String.The_Content'Range);
        end if;
    end Affect;

    function Length (From_The_String : in Variable_Strings) return Natural is
    begin
        return From_The_String.The_Length;
    end Length;

    function Image (From_The_String : in Variable_Strings) return String is
    begin
        return (From_The_String.The_Content (1 .. From_The_String.The_Length));
    end Image;

    function Upper_Case_Image
                (From_The_String : in Variable_Strings) return String is
        Chain : String (1 .. From_The_String.The_Length) :=
           Bounded_Strings.Image (From_The_String);
    begin
        for I in Chain'Range loop
            if (Chain (I) > 'Z') then
                Chain (I) := Character'Val (Character'Pos (Chain (I)) - 32);
            end if;
        end loop;
        return Chain;
    end Upper_Case_Image;

    function Is_Equal (Left, Right : in Bounded_Strings.Variable_Strings)
                      return Boolean is
    begin
        return ((Left.The_Length = Right.The_Length) and then
                (Left.The_Content (1 .. Left.The_Length) =
                 Right.The_Content (1 .. Right.The_Length)));
    end Is_Equal;

end Bounded_Strings;