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

⟦a878bb7df⟧ Ada Source

    Length: 11264 (0x2c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Quadrant_C_Update_Rule, seg_04cb0d, separate Qualit_Generic_Agent_3.Qualit_Update_Rule_Bundle

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 System_Utilities;
with Time_Utilities;
with Alias;

separate (Qualit_Generic_Agent_3.Qualit_Update_Rule_Bundle)


package body Quadrant_C_Update_Rule is


    function Premiss return Fact_Queries is
        use Qualit_Frames;
        use Slot;
        use Slot.Operators;
        The_Delta_Y_Max_Val : constant Alias.Name := Alias.M;
    begin
        return (Updates.Exist ((Valid => Is_Equal (True_Boolean))),
                Epsilons.Exist ((Value => Is_Less (Null_Value))),
                Plus_Delta_Y_Maxs.Exist ((Value =>
                                             Define_As (The_Delta_Y_Max_Val))),
                Delta_Ys.Exist ((Value => Is_Greater (The_Delta_Y_Max_Val))),  
                Epsilon_Variations.Exist ((Value => Is_Any)),
                Variation_Of_Epsilon_Variations.Exist ((Value => Is_Any)),
                Current_Positions.Exist ((Value => Is_Any)),
                Up_Values.Exist ((Value => Is_Any)),
                Up_Increments.Exist ((Value => Is_Any)),
                Positions_To_Reach.Exist ((Value => Is_Any)),
                Plus_Near_Delta_Y_Maxs.Exist ((Value => Is_Any)),
                Minus_Near_Delta_Y_Maxs.Exist ((Value => Is_Any)));  
    end Premiss;


    procedure Action (Objects : Fact_Collection) is  
        use Qualit_Frames;
        use Slot;
        use Slot.Operators;

        The_Update_Fact : Fact_Name renames Objects (1);
        The_Epsilon_Fact : Fact_Name renames Objects (2);
        The_Delta_Y_Fact : Fact_Name renames Objects (4);
        The_Epsilon_Variation_Fact : Fact_Name renames Objects (5);
        The_Variation_Of_Epsilon_Variation_Fact : Fact_Name renames Objects (6);
        The_Actual_Pos_Fact : Fact_Name renames Objects (7);
        The_Up_Value_Fact : Fact_Name renames Objects (8);
        The_Up_Increment_Fact : Fact_Name renames Objects (9);
        The_Pos_To_Reach_Fact : Fact_Name renames Objects (10);
        The_Plus_Near_Delta_Y_Max_Fact : Fact_Name renames Objects (11);
        The_Minus_Near_Delta_Y_Max_Fact : Fact_Name renames Objects (12);

        The_Old_Actual_Pos : Slot.Object :=
           Current_Positions.Get (The_Actual_Pos_Fact, Value);
        The_Old_Delta_Y_Val : Slot.Object :=
           Delta_Ys.Get (The_Delta_Y_Fact, Value);
        The_Pos_To_Reach : Slot.Object :=
           Positions_To_Reach.Get (The_Pos_To_Reach_Fact, Value);
        The_Old_Epsilon_Val : Slot.Object :=
           Epsilons.Get (The_Epsilon_Fact, Value);
        The_Old_Epsilon_Variation_Val : Slot.Object :=
           Epsilon_Variations.Get (The_Epsilon_Variation_Fact, Value);
        The_Old_Variation_Of_The_Epsilon_Val : Slot.Object :=
           Variation_Of_Epsilon_Variations.Get
              (The_Variation_Of_Epsilon_Variation_Fact, Value);
        The_Up_Val : Slot.Object := Up_Values.Get (The_Up_Value_Fact, Value);
        The_Near_Delta_Y_Val : Slot.Object :=
           Plus_Near_Delta_Y_Maxs.Get (The_Plus_Near_Delta_Y_Max_Fact, Value);
        The_New_Near_Delta_Y_Val : Slot.Object;

        The_New_Actual_Pos           : Slot.Object;
        The_New_Delta_Y_Val          : Slot.Object;
        The_New_Epsilon_Val          : Slot.Object;
        The_New_Epsilon_Variation    : Slot.Object;
        The_Agent2_Pos               : Slot.Object;
        The_Elapsed_Time_In_Millisec : Integer;
        The_Time_Interval            : Time_Utilities.Interval;
    begin

        Updates.Change (The_Update_Fact, Valid, False_Boolean);

        The_New_Actual_Pos := Get_Position (Agent_Id);
        Current_Positions.Change
           (The_Actual_Pos_Fact, Value, The_New_Actual_Pos);

        Set_Position_Variation (Agent_Id, The_Up_Val);

        The_Agent2_Pos      := Get_Position (The_Other_Agent);
        The_New_Delta_Y_Val := The_New_Actual_Pos - The_Agent2_Pos;  
        Delta_Ys.Change (The_Delta_Y_Fact, Value, The_New_Delta_Y_Val);

        The_New_Epsilon_Val := The_New_Actual_Pos - The_Pos_To_Reach;
        Epsilons.Change (The_Epsilon_Fact, Value, The_New_Epsilon_Val);

        The_New_Epsilon_Variation := The_New_Epsilon_Val - The_Old_Epsilon_Val;
        Epsilon_Variations.Change (The_Epsilon_Variation_Fact, Value,
                                   The_New_Epsilon_Variation);

        Variation_Of_Epsilon_Variations.Change
           (The_Variation_Of_Epsilon_Variation_Fact, Value,
            The_New_Epsilon_Variation - The_Old_Epsilon_Variation_Val);

        -- si on est dans ce quadrant alors la valeur de Near_Delta_Y_Max n'est pas adaptee
        The_New_Near_Delta_Y_Val := The_Near_Delta_Y_Val -
                                       (Value (Integer'(Get (The_Up_Val)) / 2));
        if The_New_Near_Delta_Y_Val < Null_Value then
            The_New_Near_Delta_Y_Val := Null_Value;
        end if;
        Plus_Near_Delta_Y_Maxs.Change (The_Plus_Near_Delta_Y_Max_Fact,
                                       Value, The_New_Near_Delta_Y_Val);
        Minus_Near_Delta_Y_Maxs.Change (The_Minus_Near_Delta_Y_Max_Fact,
                                        Value, -The_New_Near_Delta_Y_Val);

        Up_Increments.Change (The_Up_Increment_Fact, Value, Null_Value);
        Up_Values.Change (The_Up_Value_Fact, Value, Null_Value);


        The_Time_Interval := Time_Utilities.Convert (System_Utilities.Elapsed);
        The_Elapsed_Time_In_Millisec :=
           Integer (The_Time_Interval.Elapsed_Minutes) * 60000;
        The_Elapsed_Time_In_Millisec :=
           The_Elapsed_Time_In_Millisec +
              (Integer (The_Time_Interval.Elapsed_Seconds) * 1000);
        The_Elapsed_Time_In_Millisec :=
           The_Elapsed_Time_In_Millisec +
              Integer (The_Time_Interval.Elapsed_Milliseconds);
        Qualit_Result_File_Maker_3.Write
           (The_Output_File,
            Integer'Image (The_Elapsed_Time_In_Millisec) &
               " " & Integer'Image (Get (The_New_Actual_Pos)) &
               " " & Integer'Image (Get (The_Up_Val)) & " " &
               Integer'Image (Get (The_New_Delta_Y_Val)) &
               Integer'Image (Get (The_Near_Delta_Y_Val)) & " C");
    end Action;


end Quadrant_C_Update_Rule;

E3 Meta Data

    nblk1=a
    nid=a
    hdr6=10
        [0x00] rec0=1b rec1=00 rec2=01 rec3=026
        [0x01] rec0=15 rec1=00 rec2=05 rec3=02e
        [0x02] rec0=12 rec1=00 rec2=09 rec3=034
        [0x03] rec0=03 rec1=00 rec2=07 rec3=05e
        [0x04] rec0=18 rec1=00 rec2=03 rec3=01a
        [0x05] rec0=11 rec1=00 rec2=02 rec3=03e
        [0x06] rec0=14 rec1=00 rec2=04 rec3=072
        [0x07] rec0=06 rec1=00 rec2=06 rec3=000
        [0x08] rec0=05 rec1=00 rec2=03 rec3=000
        [0x09] rec0=f1 rec1=0d rec2=4e rec3=730
    tail 0x21753c36887166d9d5b6a 0x42a00088462063c03
Free Block Chain:
  0xa: 0000  00 08 00 27 00 00 00 00 00 00 00 1b 65 6e 64 20  ┆   '        end ┆
  0x8: 0000  00 00 00 18 80 12 61 6e 74 5f 43 5f 55 70 64 61  ┆      ant_C_Upda┆