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

⟦919eae330⟧ Ada Source

    Length: 15360 (0x3c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Sizing_Parameters, seg_004631

Derivation

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

E3 Source Code



with Errors;
with Io;
with Parameter_Parser;
package body Sizing_Parameters is

    package Flt_Io is new Io.Float_Io (Float);

    type Variable_Names is (Nil,  
                            The_Short_Short_Integer_Lower_Bound,  
                            The_Short_Short_Integer_Upper_Bound,  
                            The_Short_Short_Integer_Size,

                            The_Short_Integer_Lower_Bound,  
                            The_Short_Integer_Upper_Bound,  
                            The_Short_Integer_Size,

                            The_Integer_Lower_Bound,  
                            The_Integer_Upper_Bound,  
                            The_Integer_Size,

                            The_Long_Integer_Lower_Bound,  
                            The_Long_Integer_Upper_Bound,  
                            The_Long_Integer_Size,

                            The_Short_Float_Lower_Bound,  
                            The_Short_Float_Upper_Bound,  
                            The_Short_Float_Digits,  
                            The_Short_Float_Size,

                            The_Float_Lower_Bound,  
                            The_Float_Upper_Bound,  
                            The_Float_Digits,  
                            The_Float_Size,

                            The_Long_Float_Lower_Bound,  
                            The_Long_Float_Upper_Bound,  
                            The_Long_Float_Digits,  
                            The_Long_Float_Size,

                            The_Boolean_Size,  
                            The_Character_Size,

                            The_Access_Type_Size,  
                            The_Task_Type_Size,

                            The_Short_Enumeration_Length,  
                            The_Short_Enumeration_Size,

                            The_Enumeration_Length,  
                            The_Enumeration_Size,

                            The_Long_Enumeration_Length,  
                            The_Long_Enumeration_Size,

                            The_Record_Component_Alignment,  
                            The_Array_Component_Alignment,  
                            The_Object_Declaration_Alignment,

                            The_Discriminated_Record_Overhead);

    package Variable_Name_Parser is
       new Parameter_Parser (Option_Id => Variable_Names,  
                             First     => Variable_Names'First);

    function Integer_Type_Size
                (Lower, Upper : Long_Integer; Is_Packed : Boolean := False)
                return Long_Natural is

    begin
        if Lower >= Short_Short_Integer_Lower_Bound and then
           Upper <= Short_Short_Integer_Upper_Bound then
            return Short_Short_Integer_Size;
        elsif Lower >= Short_Integer_Lower_Bound and then
              Upper <= Short_Integer_Upper_Bound then
            return Short_Integer_Size;
        elsif Lower >= Integer_Lower_Bound and then
              Upper <= Integer_Upper_Bound then
            return Integer_Size;
        else
            return Long_Integer_Size;
        end if;
    end Integer_Type_Size;

    function Float_Type_Size
                (Lower, Upper : Float; Number_Of_Digits : Long_Natural)
                return Long_Natural is
    begin
        if Lower >= Short_Float_Lower_Bound and then
           Upper <= Short_Float_Upper_Bound and then
           Number_Of_Digits <= Short_Float_Digits then
            return Short_Float_Size;
        elsif Lower >= Float_Lower_Bound and then  
              Upper <= Float_Upper_Bound and then
              Number_Of_Digits <= Float_Digits then
            return Float_Size;
        else
            return Long_Float_Size;
        end if;

    end Float_Type_Size;

    function Enumeration_Type_Size
                (Lower_Bound, Upper_Bound : Long_Integer;
                 Is_Packed : Boolean := False) return Long_Natural is
        Length : Long_Natural := Long_Natural (Upper_Bound - Lower_Bound);
    begin
        if Length <= Short_Enumeration_Length then
            return Short_Enumeration_Size;
        elsif Length <= Enumeration_Length then
            return Enumeration_Size;
        else
            return Long_Enumeration_Size;
        end if;

    end Enumeration_Type_Size;

    function Float_Value (Image : String) return Float is
        Num  : Float;  
        Last : Positive;
    begin
        Flt_Io.Get (Image, Num, Last);
        return Num;
    end Float_Value;

    procedure Initialize (File : String) is
        Var_Iter : Variable_Name_Parser.Iterator;
    begin
        Var_Iter := Variable_Name_Parser.Parse (File);
        while not Variable_Name_Parser.Done (Var_Iter) loop
            declare  
                Current_Rule : constant Variable_Names :=
                   ariable_Name_Parser.Name (Var_Iter);
                Val          : constant String         :=
                   Variable_Name_Parser.Get_Image (Var_Iter);
            begin
                case Current_Rule is  
                    when Nil =>
                        null;
                    when The_Short_Short_Integer_Lower_Bound =>
                        Short_Short_Integer_Lower_Bound :=
                           Long_Integer'Value (Val);  
                    when The_Short_Short_Integer_Upper_Bound =>
                        Short_Short_Integer_Upper_Bound :=
                           Long_Integer'Value (Val);  
                    when The_Short_Short_Integer_Size =>
                        Short_Short_Integer_Size := Long_Integer'Value (Val);

                    when The_Short_Integer_Lower_Bound =>
                        Short_Integer_Lower_Bound := Long_Integer'Value (Val);  
                    when The_Short_Integer_Upper_Bound =>
                        Short_Integer_Upper_Bound := Long_Integer'Value (Val);  
                    when The_Short_Integer_Size =>
                        Short_Integer_Size := Long_Integer'Value (Val);

                    when The_Integer_Lower_Bound =>
                        Integer_Lower_Bound := Long_Integer'Value (Val);  
                    when The_Integer_Upper_Bound =>
                        Integer_Upper_Bound := Long_Integer'Value (Val);  
                    when The_Integer_Size =>
                        Integer_Size := Long_Integer'Value (Val);

                    when The_Long_Integer_Lower_Bound =>
                        Long_Integer_Lower_Bound := Long_Integer'Value (Val);  
                    when The_Long_Integer_Upper_Bound =>
                        Long_Integer_Upper_Bound := Long_Integer'Value (Val);  
                    when The_Long_Integer_Size =>
                        Long_Integer_Size := Long_Integer'Value (Val);

                    when The_Short_Float_Lower_Bound =>
                        Short_Float_Lower_Bound :=
                           Float_Value (Variable_Name_Parser.Get_Image
                                           (Var_Iter));  
                    when The_Short_Float_Upper_Bound =>
                        Short_Float_Upper_Bound :=
                           Float_Value (Variable_Name_Parser.Get_Image
                                           (Var_Iter));  
                    when The_Short_Float_Digits =>
                        Short_Float_Digits := Long_Integer'Value (Val);  
                    when The_Short_Float_Size =>
                        Short_Float_Size := Long_Integer'Value (Val);

                    when The_Float_Lower_Bound =>
                        Float_Lower_Bound :=
                           Float_Value (Variable_Name_Parser.Get_Image
                                           (Var_Iter));  
                    when The_Float_Upper_Bound =>
                        Float_Upper_Bound :=
                           Float_Value (Variable_Name_Parser.Get_Image
                                           (Var_Iter));  
                    when The_Float_Digits =>
                        Float_Digits := Long_Integer'Value (Val);  
                    when The_Float_Size =>
                        Float_Size := Long_Integer'Value (Val);

                    when The_Long_Float_Lower_Bound =>
                        Long_Float_Lower_Bound :=
                           Float_Value (Variable_Name_Parser.Get_Image
                                           (Var_Iter));  
                    when The_Long_Float_Upper_Bound =>
                        Long_Float_Upper_Bound :=
                           Float_Value (Variable_Name_Parser.Get_Image
                                           (Var_Iter));  
                    when The_Long_Float_Digits =>
                        Long_Float_Digits := Long_Integer'Value (Val);  
                    when The_Long_Float_Size =>
                        Long_Float_Size := Long_Integer'Value (Val);

                    when The_Boolean_Size =>
                        Boolean_Size := Long_Integer'Value (Val);  
                    when The_Character_Size =>
                        Character_Size := Long_Integer'Value (Val);

                    when The_Access_Type_Size =>
                        Access_Type_Size := Long_Integer'Value (Val);
                    when The_Task_Type_Size =>
                        Task_Type_Size := Long_Integer'Value (Val);

                    when The_Short_Enumeration_Length =>
                        Short_Enumeration_Length := Long_Integer'Value (Val);  
                    when The_Short_Enumeration_Size =>
                        Short_Enumeration_Size := Long_Integer'Value (Val);

                    when The_Enumeration_Length =>
                        Enumeration_Length := Long_Integer'Value (Val);  
                    when The_Enumeration_Size =>
                        Enumeration_Size := Long_Integer'Value (Val);

                    when The_Long_Enumeration_Length =>
                        Long_Enumeration_Length := Long_Integer'Value (Val);  
                    when The_Long_Enumeration_Size =>
                        Long_Enumeration_Size := Long_Integer'Value (Val);

                    when The_Record_Component_Alignment =>
                        Record_Component_Alignment := Long_Integer'Value (Val);  
                    when The_Array_Component_Alignment =>
                        Array_Component_Alignment := Long_Integer'Value (Val);  
                    when The_Object_Declaration_Alignment =>
                        Object_Declaration_Alignment :=
                           Long_Integer'Value (Val);

                    when The_Discriminated_Record_Overhead =>
                        Discriminated_Record_Overhead :=
                           Long_Integer'Value (Val);
                end case;
            exception
                when others =>
                    Errors.Report ("", "had problem interpreting entry" &
                                          Variable_Names'Image (Current_Rule) &
                                          " => " & Val, Errors.Error, False);
                    raise;
            end;

            Variable_Name_Parser.Next (Var_Iter);
        end loop;
    exception
        when Constraint_Error =>
            Errors.Report ("", "Had Problem parsing " & File,
                           Errors.Error, False);
            raise;
    end Initialize;
end Sizing_Parameters;

E3 Meta Data

    nblk1=e
    nid=0
    hdr6=1c
        [0x00] rec0=1b rec1=00 rec2=01 rec3=05a
        [0x01] rec0=1a rec1=00 rec2=02 rec3=010
        [0x02] rec0=17 rec1=00 rec2=03 rec3=026
        [0x03] rec0=1c rec1=00 rec2=04 rec3=06a
        [0x04] rec0=1d rec1=00 rec2=05 rec3=026
        [0x05] rec0=00 rec1=00 rec2=0e rec3=002
        [0x06] rec0=13 rec1=00 rec2=06 rec3=01c
        [0x07] rec0=00 rec1=00 rec2=0d rec3=022
        [0x08] rec0=12 rec1=00 rec2=07 rec3=05a
        [0x09] rec0=12 rec1=00 rec2=08 rec3=046
        [0x0a] rec0=12 rec1=00 rec2=09 rec3=03c
        [0x0b] rec0=14 rec1=00 rec2=0a rec3=03e
        [0x0c] rec0=13 rec1=00 rec2=0b rec3=004
        [0x0d] rec0=12 rec1=00 rec2=0c rec3=000
    tail 0x2150044a2815c660deb8d 0x42a00088462061e03