|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 3844 (0xf04)
Types: TextFile
Names: »B«
└─⟦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⟧
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;