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

⟦e59d8fa21⟧ TextFile

    Length: 3844 (0xf04)
    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

separate (Tracker.Report_Generator.Distribution_Of_Work)



procedure Calc_Ss_Work is
    ----------------------------------------------------------------------
    --|
    --|  NAME:  CALC_SS_WORK
    --|
    --|  OVERVIEW:
    --|    This procedure calculates the total amount of work left in a
    --|    subsystem by activity.
    --|
    --|  EXCEPTIONS HANDLED:
    --|    none
    --|
    --|  HISTORY:
    --|    written by   Bonnie Burkhardt   March 1985
    --|
    ----------------------------------------------------------------------

    use Ac_List_Pkg;
    use Pr_List_Pkg;
    use El_List_Pkg;

    Ac_Ptr : Activity_Pointer;
    Ac_Index : Integer := 0;
    End_List : Boolean := False;
    Ele_Ptr : Element_Pointer;
    Ele_Size : Float range 0.0 .. 99_999.0 := 0.0;
    Found : Boolean := True;
    Pr_Ptr : Personnel_Pointer;
    Pct_Tot_Proj : array (1 .. Max_Num_Activities) of
                      Float range 0.0 .. 100.0 := (others => 0.0);

begin
    -- initialize the PCT_TOT_PROJ array
    Start_Walk (Ac_List);
    Ac_Index := 0;

    loop
        Walk (Ac_List, Ac_Ptr, End_List);
        exit when End_List;
        Ac_Index := Ac_Index + 1;
        Pct_Tot_Proj (Ac_Index) := Ac_Ptr.Percent_Tot_Proj;
    end loop;

    Ss_Work_By_Ac := (others => 0.0);
    Ss_Work := 0.0;
    Start_Walk (Ss_Ptr.Element_List);

    loop
        Walk (Ss_Ptr.Element_List, Ele_Ptr, End_List);
        exit when End_List;

        -- compute the size of this element (original or current)
        if Orig_Or_Cur = Current then
            Ele_Size := Float (Ele_Ptr.Current_Size -
                               Ele_Ptr.Size_Done_At_Start);
        elsif (Ele_Ptr.Original_Size >= Ele_Ptr.Current_Size) or
              (Ele_Ptr.Current_Size = 0) then
            Ele_Size := Float (Ele_Ptr.Original_Size -
                               Ele_Ptr.Size_Done_At_Start);
        else
            Ele_Size := Float (Ele_Ptr.Original_Size) *
                           (1.0 - Float (Ele_Ptr.Size_Done_At_Start) /
                                     Float (Ele_Ptr.Current_Size));
        end if;


        -- add each element by activity to the totals
        if not Ele_Ptr.More_Than_One_Person then
            Find (Pr_List, Ele_Ptr.Person_Initials, Pr_Ptr, Found);
        end if;

        Ac_Index := 0;
        Start_Walk (Ac_List);

        loop
            Walk (Ac_List, Ac_Ptr, End_List);
            exit when End_List;
            Ac_Index := Ac_Index + 1;

            if Ele_Ptr.More_Than_One_Person then
                Find (Pr_List, Ele_Ptr.People_Initials (Ac_Index),
                      Pr_Ptr, Found);
                Ss_Work_By_Ac (Ac_Index) :=
                   Ss_Work_By_Ac (Ac_Index) +
                      Ele_Ptr.Complexity * Float (Ele_Size) *
                         (Pct_Tot_Proj (Ac_Index) / 100.0) *
                         (1.0 - Ac_Pct_Value
                                   (Ele_Ptr.Activity_Completeness (Ac_Index)) /
                                100.0) / Pr_Ptr.Production_Rate;
            else
                -- only one person assigned
                Ss_Work_By_Ac (Ac_Index) :=
                   Ss_Work_By_Ac (Ac_Index) +
                      Ele_Ptr.Complexity * Float (Ele_Size) *
                         (Pct_Tot_Proj (Ac_Index) / 100.0) *
                         (1.0 - Ac_Pct_Value
                                   (Ele_Ptr.Activity_Completeness (Ac_Index)) /
                                100.0) / Pr_Ptr.Production_Rate;
            end if;
        end loop;
    end loop;

    for Ac_Index in 1 .. Num_Of_Activities loop
        Ss_Work := Ss_Work + Ss_Work_By_Ac (Ac_Index);
        Tot_Ss_Work_By_Ac (Ac_Index) :=
           Tot_Ss_Work_By_Ac (Ac_Index) + Ss_Work_By_Ac (Ac_Index);
    end loop;

    Tot_Ss_Work := Tot_Ss_Work + Ss_Work;
end Calc_Ss_Work;