|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 18432 (0x4800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package body Motor, seg_00c7d6, separate Expertsystem
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Instancecounter;
separate (Expertsystem)
package body Motor is
Maxrule : constant Positive := 30;
Maxstrategy : constant Positive := 30;
type Condition is array (1 .. Maxrule) of Boolean;
type Ordered_Rule is array (1 .. Maxstrategy) of Natural;
type Strategic is
record
Rule_Array : Ordered_Rule := (others => 0);
Count : Natural := 0;
end record;
The_Strategie : Strategic;
Rule_Condition : Condition;
Localid : Contextid;
Cst : Tuple.Object;
Cstc : Tuplecollection.Object;
procedure Reset is
begin
for I in 1 .. Maxstrategy loop
The_Strategie.Rule_Array (I) := 0;
end loop;
The_Strategie.Count := 0;
end Reset;
function Evaluate (Rule : Natural) return Boolean is
Result : Boolean;
begin
if not Rulemanager.Ismasked (Context_Name, Rule) then
case Rule is
when 1 =>
Result := Condition_1;
when 2 =>
Result := Condition_2;
when 3 =>
Result := Condition_3;
when 4 =>
Result := Condition_4;
when 5 =>
Result := Condition_5;
when 6 =>
Result := Condition_6;
when 7 =>
Result := Condition_7;
when 8 =>
Result := Condition_8;
when 9 =>
Result := Condition_9;
when 10 =>
Result := Condition_10;
when 11 =>
Result := Condition_11;
when 12 =>
Result := Condition_12;
when 13 =>
Result := Condition_13;
when 14 =>
Result := Condition_14;
when 15 =>
Result := Condition_15;
when 16 =>
Result := Condition_16;
when 17 =>
Result := Condition_17;
when 18 =>
Result := Condition_18;
when 19 =>
Result := Condition_19;
when 20 =>
Result := Condition_20;
when 21 =>
Result := Condition_21;
when 22 =>
Result := Condition_22;
when 23 =>
Result := Condition_23;
when 24 =>
Result := Condition_24;
when 25 =>
Result := Condition_25;
when 26 =>
Result := Condition_26;
when 27 =>
Result := Condition_27;
when 28 =>
Result := Condition_28;
when 29 =>
Result := Condition_29;
when 30 =>
Result := Condition_30;
when others =>
Result := False;
end case;
else
Result := False;
end if;
if Debugger.Isdebugged (Debugger.Conditionevalued) then
case Rule is
when 1 =>
Debugger.Sendconditionevalued (Name_1, 1, Result, Cstc);
when 2 =>
Debugger.Sendconditionevalued (Name_2, 2, Result, Cstc);
when 3 =>
Debugger.Sendconditionevalued (Name_3, 3, Result, Cstc);
when 4 =>
Debugger.Sendconditionevalued (Name_4, 4, Result, Cstc);
when 5 =>
Debugger.Sendconditionevalued (Name_5, 5, Result, Cstc);
when 6 =>
Debugger.Sendconditionevalued (Name_6, 6, Result, Cstc);
when 7 =>
Debugger.Sendconditionevalued (Name_7, 7, Result, Cstc);
when 8 =>
Debugger.Sendconditionevalued (Name_8, 8, Result, Cstc);
when 9 =>
Debugger.Sendconditionevalued (Name_9, 9, Result, Cstc);
when 10 =>
Debugger.Sendconditionevalued (Name_10, 10, Result, Cstc);
when 11 =>
Debugger.Sendconditionevalued (Name_11, 11, Result, Cstc);
when 12 =>
Debugger.Sendconditionevalued (Name_12, 12, Result, Cstc);
when 13 =>
Debugger.Sendconditionevalued (Name_13, 13, Result, Cstc);
when 14 =>
Debugger.Sendconditionevalued (Name_14, 14, Result, Cstc);
when 15 =>
Debugger.Sendconditionevalued (Name_15, 15, Result, Cstc);
when 16 =>
Debugger.Sendconditionevalued (Name_16, 16, Result, Cstc);
when 17 =>
Debugger.Sendconditionevalued (Name_17, 17, Result, Cstc);
when 18 =>
Debugger.Sendconditionevalued (Name_18, 18, Result, Cstc);
when 19 =>
Debugger.Sendconditionevalued (Name_19, 19, Result, Cstc);
when 20 =>
Debugger.Sendconditionevalued (Name_20, 20, Result, Cstc);
when 21 =>
Debugger.Sendconditionevalued (Name_21, 21, Result, Cstc);
when 22 =>
Debugger.Sendconditionevalued (Name_22, 22, Result, Cstc);
when 23 =>
Debugger.Sendconditionevalued (Name_23, 23, Result, Cstc);
when 24 =>
Debugger.Sendconditionevalued (Name_24, 24, Result, Cstc);
when 25 =>
Debugger.Sendconditionevalued (Name_25, 25, Result, Cstc);
when 26 =>
Debugger.Sendconditionevalued (Name_26, 26, Result, Cstc);
when 27 =>
Debugger.Sendconditionevalued (Name_27, 27, Result, Cstc);
when 28 =>
Debugger.Sendconditionevalued (Name_28, 28, Result, Cstc);
when 29 =>
Debugger.Sendconditionevalued (Name_29, 29, Result, Cstc);
when 30 =>
Debugger.Sendconditionevalued (Name_30, 30, Result, Cstc);
when others =>
null;
end case;
end if;
return Result;
end Evaluate;
procedure Execute (Rule : Natural) is
begin
case Rule is
when 1 =>
Action_1;
when 2 =>
Action_2;
when 3 =>
Action_3;
when 4 =>
Action_4;
when 5 =>
Action_5;
when 6 =>
Action_6;
when 7 =>
Action_7;
when 8 =>
Action_8;
when 9 =>
Action_9;
when 10 =>
Action_10;
when 11 =>
Action_11;
when 12 =>
Action_12;
when 13 =>
Action_13;
when 14 =>
Action_14;
when 15 =>
Action_15;
when 16 =>
Action_16;
when 17 =>
Action_17;
when 18 =>
Action_18;
when 19 =>
Action_19;
when 20 =>
Action_20;
when 21 =>
Action_21;
when 22 =>
Action_22;
when 23 =>
Action_23;
when 24 =>
Action_24;
when 25 =>
Action_25;
when 26 =>
Action_26;
when 27 =>
Action_27;
when 28 =>
Action_28;
when 29 =>
Action_29;
when 30 =>
Action_30;
when others =>
null;
end case;
if Rule /= 0 and then (Debugger.Isdebugged (Debugger.Choosedaction) or
Debugger.Isdebugged (Debugger.Actionfact)) then
case Rule is
when 1 =>
Debugger.Sendchoosedaction (Name_1, 1, Cst);
when 2 =>
Debugger.Sendchoosedaction (Name_2, 2, Cst);
when 3 =>
Debugger.Sendchoosedaction (Name_3, 3, Cst);
when 4 =>
Debugger.Sendchoosedaction (Name_4, 4, Cst);
when 5 =>
Debugger.Sendchoosedaction (Name_5, 5, Cst);
when 6 =>
Debugger.Sendchoosedaction (Name_6, 6, Cst);
when 7 =>
Debugger.Sendchoosedaction (Name_7, 7, Cst);
when 8 =>
Debugger.Sendchoosedaction (Name_8, 8, Cst);
when 9 =>
Debugger.Sendchoosedaction (Name_9, 9, Cst);
when 10 =>
Debugger.Sendchoosedaction (Name_10, 10, Cst);
when 11 =>
Debugger.Sendchoosedaction (Name_11, 11, Cst);
when 12 =>
Debugger.Sendchoosedaction (Name_12, 12, Cst);
when 13 =>
Debugger.Sendchoosedaction (Name_13, 13, Cst);
when 14 =>
Debugger.Sendchoosedaction (Name_14, 14, Cst);
when 15 =>
Debugger.Sendchoosedaction (Name_15, 15, Cst);
when 16 =>
Debugger.Sendchoosedaction (Name_16, 16, Cst);
when 17 =>
Debugger.Sendchoosedaction (Name_17, 17, Cst);
when 18 =>
Debugger.Sendchoosedaction (Name_18, 18, Cst);
when 19 =>
Debugger.Sendchoosedaction (Name_19, 19, Cst);
when 20 =>
Debugger.Sendchoosedaction (Name_20, 20, Cst);
when 21 =>
Debugger.Sendchoosedaction (Name_21, 21, Cst);
when 22 =>
Debugger.Sendchoosedaction (Name_22, 22, Cst);
when 23 =>
Debugger.Sendchoosedaction (Name_23, 23, Cst);
when 24 =>
Debugger.Sendchoosedaction (Name_24, 24, Cst);
when 25 =>
Debugger.Sendchoosedaction (Name_25, 25, Cst);
when 26 =>
Debugger.Sendchoosedaction (Name_26, 26, Cst);
when 27 =>
Debugger.Sendchoosedaction (Name_27, 27, Cst);
when 28 =>
Debugger.Sendchoosedaction (Name_28, 28, Cst);
when 29 =>
Debugger.Sendchoosedaction (Name_29, 29, Cst);
when 30 =>
Debugger.Sendchoosedaction (Name_30, 30, Cst);
when others =>
Debugger.Sendchoosedaction ("NO OPERATION ! ", 0, Cst);
end case;
end if;
Debugger.Sendnewstep;
if Rule = 0 then
Debugger.Sendfailed;
end if;
end Execute;
function Lruinfer return Boolean is
The_Rule : Natural := 0;
Pos : Natural := 0;
Last_Pos : Natural := Integer'Last;
begin
Debugger.Sendconflictsetstarted;
for I in 1 .. Used_Rules loop
Rule_Condition (I) := Evaluate (I);
if Rule_Condition (I) then
Pos := 0;
for J in 1 .. The_Strategie.Count loop
if The_Strategie.Rule_Array (J) = I then
Pos := J;
end if;
end loop;
if Pos = 0 then
The_Rule := I;
exit;
elsif Pos < Last_Pos then
Last_Pos := Pos;
The_Rule := The_Strategie.Rule_Array (Last_Pos);
end if;
end if;
end loop;
Debugger.Sendconflictsetfinished;
if The_Rule = 0 then
Reset;
Debugger.Sendnewstep;
Debugger.Sendfailed;
return False;
end if;
The_Strategie.Count := The_Strategie.Count + 1;
if The_Strategie.Count >= Maxstrategy then
The_Strategie.Count := Maxstrategy;
for I in 1 .. Maxstrategy - 1 loop
The_Strategie.Rule_Array (I) :=
The_Strategie.Rule_Array (I + 1);
end loop;
end if;
The_Strategie.Rule_Array (The_Strategie.Count) := The_Rule;
if Debugger.Isdebugged (Debugger.Choosedrule) or
Debugger.Isdebugged (Debugger.Rulefacts) then
Debugger.Sendchoosedrule (The_Rule, Cst);
end if;
Execute (The_Rule);
return True;
end Lruinfer;
function Firstinfer return Boolean is
begin
Debugger.Sendconflictsetstarted;
for I in 1 .. Used_Rules loop
Rule_Condition (I) := Evaluate (I);
if Rule_Condition (I) then
Debugger.Sendconflictsetfinished;
if Debugger.Isdebugged (Debugger.Choosedrule) or
Debugger.Isdebugged (Debugger.Rulefacts) then
Debugger.Sendchoosedrule (I, Cst);
end if;
Execute (I);
return True;
end if;
end loop;
Debugger.Sendnewstep;
Debugger.Sendfailed;
return False;
end Firstinfer;
generic
with function Inferstrategy return Boolean;
Strategynam : Strategyname := " ??? ";
function Stepnumber (Step : Natural) return Boolean;
function Stepnumber (Step : Natural) return Boolean is
Astep : Boolean;
begin
Debugger.Sendcontextentered (Context_Name, Localid);
Debugger.Sendstrategyused (Strategynam);
if Step = Any then
loop
Astep := Inferstrategy;
exit when not Astep;
end loop;
else
for I in 1 .. Step loop
Astep := Inferstrategy;
exit when not Astep;
end loop;
end if;
return Astep;
end Stepnumber;
function Lrustrategy is new Stepnumber (Lruinfer, " LRU ");
function Firststrategy is new Stepnumber (Firstinfer, "FIRST");
function Inference (Step : Natural := 1) return Boolean is
begin
if Resolution = Lru then
return Lrustrategy (Step);
else
return Firststrategy (Step);
end if;
end Inference;
begin
Localid := Instancecounter.Newcontext (Context_Name);
Debugger.Sendrulesnames (Localid, Context_Name, Name_1, Name_2,
Name_3, Name_4, Name_5, Name_6, Name_7,
Name_8, Name_9, Name_10, Name_11, Name_12,
Name_13, Name_14, Name_15, Name_16, Name_17,
Name_18, Name_19, Name_20, Name_21, Name_22,
Name_23, Name_24, Name_25, Name_26,
Name_27, Name_28, Name_29, Name_30);
end Motor;
nblk1=11
nid=0
hdr6=22
[0x00] rec0=28 rec1=00 rec2=01 rec3=004
[0x01] rec0=1b rec1=00 rec2=02 rec3=042
[0x02] rec0=1b rec1=00 rec2=03 rec3=034
[0x03] rec0=1a rec1=00 rec2=04 rec3=004
[0x04] rec0=12 rec1=00 rec2=05 rec3=050
[0x05] rec0=12 rec1=00 rec2=06 rec3=086
[0x06] rec0=1b rec1=00 rec2=07 rec3=012
[0x07] rec0=26 rec1=00 rec2=08 rec3=01c
[0x08] rec0=1e rec1=00 rec2=09 rec3=07c
[0x09] rec0=16 rec1=00 rec2=0a rec3=02a
[0x0a] rec0=14 rec1=00 rec2=0b rec3=074
[0x0b] rec0=1d rec1=00 rec2=0c rec3=01e
[0x0c] rec0=20 rec1=00 rec2=0d rec3=018
[0x0d] rec0=1c rec1=00 rec2=0e rec3=050
[0x0e] rec0=1f rec1=00 rec2=0f rec3=02c
[0x0f] rec0=1c rec1=00 rec2=10 rec3=044
[0x10] rec0=04 rec1=00 rec2=11 rec3=001
tail 0x21508deda820749084315 0x42a00088462060003