DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦0e27275c3⟧ Ada Source

    Length: 23552 (0x5c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Structured_Text_Generic, seg_0046e8

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



with String_Utilities;
package body Structured_Text_Generic is

    function Normalized (This_String : in String; Filler : in Character := ' ')
                        return String renames String_Utilities.Strip;

    procedure Parse (This_Keyword       : in     String;
                     Is_Simple_Keyword  : in out Boolean;
                     The_Simple_Keyword : in out Simple_Keywords) is
    begin  
        Is_Simple_Keyword := False;
        for Current_Keyword in Simple_Keywords loop
            if String_Utilities.Upper_Case (This_Keyword) =
               Simple_Keywords'Image (Current_Keyword) then
                -- Found match.
                Is_Simple_Keyword  := True;
                The_Simple_Keyword := Current_Keyword;
                exit;
            end if;
        end loop;
    end Parse;

    procedure Parse (This_Keyword       : in     String;
                     Is_Valued_Keyword  : in out Boolean;
                     The_alued_Keyword : in out Valued_Keywords) is
    begin  
        Is_Valued_Keyword := False;
        for Current_Keyword in Valued_Keywords loop
            if String_Utilities.Upper_Case (This_Keyword) =
               Valued_Keywords'Image (Current_Keyword) then
                -- Found match.
                Is_Valued_Keyword  := True;
                The_Valued_Keyword := Current_Keyword;
                exit;
            end if;
        end loop;
    end Parse;

    procedure Parse (This_Line            : in     String;
                     Is_Simple_Annotation : in out Boolean;
                     The_Simple_Keyword   : in out Simple_Keywords;
                     Is_Valued_Annotation : in out Boolean;
                     The_Valued_Keyword   : in out Valued_Keywords) is

        Normalized_Line : constant String := Normalized (This_Line);

        Line_Begin : Integer := Normalized_Line'First;

        Keyword_Begin : Integer := Line_Begin + 1;      Keyword_End   : Integer;

    begin
        -- Must initialize ALL "in out" and "out" parameters (Ada rule).
        --
        Is_Simple_Annotation := False;
        The_Simple_Keyword   := Simple_Keywords'First;
        Is_Valued_Annotation := False;
        The_Valued_Keyword   := Valued_Keywords'First;

        if Normalized_Line (Line_Begin) = Annotation_Indicator then
            for Index in Keyword_Begin .. Normalized_Line'Last loop
                if Normalized_Line (Index) = Argument_Delimiter then
                    --
                    -- Found an argument delimiter, so the annotation
                    -- might be valued.
                    --
                    Keyword_End := Index - 1;
                    Parse (Normalized_Line (Keyword_Begin .. Keyword_End),
                           Is_Valued_Annotation, The_Valued_Keyword);
                    exit when Is_Valued_Annotation;
                end if;
                if Index = Normalized_Line'Last then
                    --
                    -- Got all the way to the end of the line without
                    -- finding an argument delimiter, so the annotation
                    -- might be simple.
                    --
                    Keyword_End := Index;
                    Parse (Normalized_Line (Keyword_Begin .. Keyword_End),
                           Is_Simple_Annotation, The_Simple_Keyword);
                end if;
            end loop;
        end if;
    end Parse;

    function Is_Simple_Annotation (This_Line : in Line) return Boolean is

        Is_Simple_Annotation : Boolean         := False;
        The_Simple_Keyword   : Simple_Keywords := Simple_Keywords'First;
        Is_Valued_Annotation : Boolean         := False;
        The_Valued_Keyword   : Valued_Keywords := Valued_Keywords'First;

    begin  
        declare
            The_Annotation : constant String :=
               Normalized (Lines.Image (This_Line));
        begin
            Parse (The_Annotation, Is_Simple_Annotation, The_Simple_Keyword,
                   Is_Valued_Annotation, The_Valued_Keyword);
            return Is_Simple_Annotation;
        end;

    exception
        when Lines.Not_Initialized =>
            raise Not_Initialized;
        when others =>
            return False;

    end Is_Simple_Annotation;

    function Is_Valued_Annotation (This_Line : in Line) return Boolean is

        Is_Simple_Annotation : Boolean         := False;
        The_Simple_Keyword   : Simple_Keywords := Simple_Keywords'First;
        Is_Valued_Annotation : Boolean         := False;
        The_Valued_Keyword   : Valued_Keywords := Valued_Keywords'First;

    begin  
        declare
            The_Annotation : constant String :=
               Normalized (Lines.Image (This_Line));
        begin
            Parse (The_Annotation, Is_Simple_Annotation, The_Simple_Keyword,
                   Is_Valued_Annotation, The_Valued_Keyword);
            return Is_Valued_Annotation;
        end;

    exception
        when Lines.Not_Initialized =>
            raise Not_Initialized;
        when others =>
            return False;

    end Is_Valued_Annotation;

    function Is_Annotation (This_Line : in Line) return Boolean is

        Is_Simple_Annotation : Boolean         := False;
        The_Simple_Keyword   : Simple_Keywords := Simple_Keywords'First;
        Is_Valued_Annotation : Boolean         := False;
        The_Valued_Keyword   : Valued_Keywords := Valued_Keywords'First;

    begin  
        declare
            The_Annotation : constant String :=
               Normalized (Lines.Image (This_Line));
        begin
            Parse (The_Annotation, Is_Simple_Annotation, The_Simple_Keyword,
                   Is_Valued_Annotation, The_Valued_Keyword);
            return Is_Simple_Annotation or else Is_Valued_Annotation;
        end;

    exception
        when Lines.Not_Initialized =>
            raise Not_Initialized;
        when others =>
            return False;

    end Is_Annotation;

    function Keywords_Match
                (This_Simple_Annotation : in Simple_Annotation;
                 This_Simple_Keyword    : in Simple_Keywords) return Boolean is

        Is_Simple_Annotation : Boolean         := False;
        The_Simple_Keyword   : Simple_Keywords := Simple_Keywords'First;
        Is_Valued_Annotation : Boolean         := False;
        The_Valued_Keyword   : Valued_Keywords := Valued_Keywords'First;

    begin  
        declare
            The_Annotation : constant String :=
               Normalized (Lines.Image (This_Simple_Annotation));
        begin
            Parse (The_Annotation, Is_Simple_Annotation, The_Simple_Keyword,
                   Is_Valued_Annotation, The_Valued_Keyword);
            return Is_Simple_Annotation and then
                      This_Simple_Keyword = The_Simple_Keyword;
        end;

    exception
        when Lines.Not_Initialized =>
            raise Not_Initialized;
        when others =>
            return False;

    end Keywords_Match;

    function Keywords_Match
                (This_Valued_Annotation : in Valued_Annotation;
                 This_Valued_Keyword    : in Valued_Keywords) return Boolean is

        Is_Simple_Annotation : Boolean         := False;
        The_Simple_Keyword   : Simple_Keywords := Simple_Keywords'First;
        Is_Valued_Annotation : Boolean         := False;
        The_Valued_Keyword   : Valued_Keywords := Valued_Keywords'First;

    begin  
        declare
            The_Annotation : constant String :=
               Normalized (Lines.Image (This_Valued_Annotation));
        begin
            Parse (The_Annotation, Is_Simple_Annotation, The_Simple_Keyword,
                   Is_Valued_Annotation, The_Valued_Keyword);
            return Is_Valued_Annotation and then
                      This_Valued_Keyword = The_Valued_Keyword;
        end;

    exception  
        when Lines.Not_Initialized =>
            raise Not_Initialized;
        when others =>
            return False;

    end Keywords_Match;

    function Argument_To
                (This_Valued_Annotation : in String;
                 This_Valued_Keyword    : in Valued_Keywords) return String is

        The_Valued_Annotation : constant String :=
           Normalized (This_Valued_Annotation);

        The_Keyword_Image  : constant String :=
           Valued_Keywords'Image (This_Valued_Keyword);
        The_Keyword_Length : Integer         := The_Keyword_Image'Length;
        Argument_Start     : Integer         :=
           The_Valued_Annotation'First + The_Keyword_Length + 2;
        Argument_End       : Integer         := The_Valued_Annotation'Last;

    begin
        return The_Valued_Annotation (Argument_Start .. Argument_End);
    end Argument_To;

    function Value_Of (This_Line : in Line) return String is

        Is_Simple_Annotation : Boolean         := False;
        The_Simple_Keyword   : Simple_Keywords := Simple_Keywords'First;
        Is_Valued_Annotation : Boolean         := False;
        The_Valued_Keyword   : Valued_Keywords := Valued_Keywords'First;

    begin  
        declare
            The_Line : constant String := Normalized (Lines.Image (This_Line));
        begin
            Parse (The_Line, Is_Simple_Annotation, The_Simple_Keyword,
                   Is_Valued_Annotation, The_Valued_Keyword);
            if Is_Simple_Annotation then
                return "";
            elsif (Is_Valued_Annotation) then
                return Argument_To (The_Line, The_Valued_Keyword);
            else
                -- Not an annotation
                return Lines.Image (This_Line);
            end if;
        end;

    exception  
        when Lines.Not_Initialized =>
            raise Not_Initialized;
        when others =>
            return "<UNKNOWN>";

    end Value_Of;

    function Simple_Annotation_From
                (This_Keyword : in Simple_Keywords) return Line is
    begin
        return Lines.Create (Annotation_Indicator &
                             Simple_Keywords'Image (This_Keyword));
    end Simple_Annotation_From;

    function Valued_Annotation_From
                (This_Keyword : in Valued_Keywords; This_Argument : in String)
                return Line is
    begin
        return Lines.Create (Annotation_Indicator &
                             Valued_Keywords'Image (This_Keyword) &
                             Argument_Delimiter & This_Argument);
    end Valued_Annotation_From;

    function Arguments_Match (This_Valued_Annotation : in Valued_Annotation;
                              This_Argument : in Arguments) return Boolean is

        Is_Simple_Annotation : Boolean         := False;
        The_Simple_Keyword   : Simple_Keywords := Simple_Keywords'First;
        Is_Valued_Annotation : Boolean         := False;
        The_Valued_Keyword   : Valued_Keywords := Valued_Keywords'First;

    begin  
        declare
            The_Annotation : constant String :=
               Normalized (Lines.Image (This_Valued_Annotation));
        begin
            Parse (The_Annotation, Is_Simple_Annotation, The_Simple_Keyword,
                   Is_Valued_Annotation, The_Valued_Keyword);
            if not Is_Valued_Annotation then
                return False;
            else
                return String_Utilities.Upper_Case
                          (Argument_To (The_Annotation, The_Valued_Keyword)) =
                       String_Utilities.Upper_Case
                          (Arguments'Image (This_Argument));
            end if;
        end;

    exception  
        when Lines.Not_Initialized =>
            raise Not_Initialized;
        when others =>
            return False;

    end Arguments_Match;

end Structured_Text_Generic;

E3 Meta Data

    nblk1=16
    nid=0
    hdr6=2c
        [0x00] rec0=1a rec1=00 rec2=01 rec3=032
        [0x01] rec0=00 rec1=00 rec2=16 rec3=002
        [0x02] rec0=19 rec1=00 rec2=02 rec3=002
        [0x03] rec0=00 rec1=00 rec2=15 rec3=002
        [0x04] rec0=16 rec1=00 rec2=03 rec3=03c
        [0x05] rec0=00 rec1=00 rec2=14 rec3=00c
        [0x06] rec0=18 rec1=00 rec2=04 rec3=05e
        [0x07] rec0=01 rec1=00 rec2=13 rec3=018
        [0x08] rec0=1b rec1=00 rec2=05 rec3=056
        [0x09] rec0=00 rec1=00 rec2=12 rec3=024
        [0x0a] rec0=1e rec1=00 rec2=06 rec3=036
        [0x0b] rec0=01 rec1=00 rec2=11 rec3=00e
        [0x0c] rec0=1a rec1=00 rec2=07 rec3=00e
        [0x0d] rec0=01 rec1=00 rec2=10 rec3=016
        [0x0e] rec0=18 rec1=00 rec2=08 rec3=06c
        [0x0f] rec0=01 rec1=00 rec2=0f rec3=010
        [0x10] rec0=1c rec1=00 rec2=09 rec3=078
        [0x11] rec0=02 rec1=00 rec2=0e rec3=03e
        [0x12] rec0=1b rec1=00 rec2=0a rec3=020
        [0x13] rec0=02 rec1=00 rec2=0d rec3=01a
        [0x14] rec0=16 rec1=00 rec2=0b rec3=004
        [0x15] rec0=1c rec1=00 rec2=0c rec3=001
    tail 0x217002a54815c6752d49e 0x42a00088462061e03