|
|
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: 16384 (0x4000)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Condition, seg_049974, seg_0499a1, seg_049a71
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Text_Io, The_Hero, The_Place, Total_Actions, Complement_Array;
package body Condition is
procedure Create (Item : out Object;
Kind : in Operator;
Left, Right : in Object) is
begin
if Kind = Et then
Item := new Node'(Kind => Et,
Left_Node => Left,
Right_Node => Right);
else
Item := new Node'(Kind => Ou,
Left_Node => Left,
Right_Node => Right);
end if;
end Create;
procedure Create_Compare (Item : out Object;
An_Attribute : in Attribute.Object;
Symbol : in Compare_Kind;
An_Expression : in Expression.Object;
Ok : out Boolean) is
begin
if Expression.Is_A_Number (An_Expression) or
(Expression.Is_An_Enumerate (An_Expression) and
(Symbol = Equal or Symbol = Not_Equal)) then
Item := new Node'(Kind => Single_Attribute,
The_Attribute => An_Attribute,
Compare => Symbol,
Value => An_Expression);
Ok := True;
else
Ok := False;
Item := Null_Object;
end if;
end Create_Compare;
procedure Create_Hero (Item : out Object; A_Hero : in Detail.Object) is
begin
Item := new Node'(Kind => Hero, Other_Hero => A_Hero);
end Create_Hero;
procedure Create_Place (Item : out Object; A_Place : in Detail.Object) is
begin
Item := new Node'(Kind => Place, Other_Place => A_Place);
end Create_Place;
procedure Create_Actions (Item : out Object; Number : in Positive) is
begin
Item := new Node'(Kind => Actions, Actions_Number => Number);
end Create_Actions;
procedure Create_Meet (Item : out Object; An_Animate : in Detail.Object) is
begin
Item := new Node'(Kind => Meet, Animate => An_Animate);
end Create_Meet;
procedure Create_Belong (Item : out Object;
An_Objet : in Objet.Object;
Subject : in Detail.Object;
Binary : in Binary_Kind) is
begin
Item := new Node'(Kind => Belong,
Owner => An_Objet,
Belong_Subject => Subject,
Belong_Binary => Binary);
end Create_Belong;
procedure Create_Attribute_Exist (Item : out Object;
An_Attribute : in Attribute.Object;
Binary : in Binary_Kind) is
begin
Item := new Node'(Kind => Attribute_Exist,
Exist_Attribute => An_Attribute,
Attribute_Binary => Binary);
end Create_Attribute_Exist;
procedure Create_Exits_Exist (Item : out Object;
A_Room : in Objet.Object;
Binary : in Binary_Kind) is
begin
Item := new Node'(Kind => Exits_Exist,
Room => A_Room,
Exits_Binary => Binary);
end Create_Exits_Exist;
procedure Create_Subject_Exist (Item : out Object;
A_Subject : in Detail.Object;
Binary : in Binary_Kind) is
begin
Item := new Node'(Kind => Subject_Exist,
Exist_Subject => A_Subject,
Subject_Binary => Binary);
end Create_Subject_Exist;
procedure Show (Item : in Object) is
begin
case Item.Kind is
when Et | Ou =>
Show (Item.Left_Node);
Text_Io.Put (" " & Operator'Image (Item.Kind) & " ");
Show (Item.Right_Node);
Text_Io.New_Line;
when Single_Attribute =>
Attribute.Show (Item.The_Attribute);
Text_Io.Put_Line (Compare_Kind'Image (Item.Compare));
Expression.Show (Item.Value);
when Hero =>
The_Hero.Show;
Detail.Show (Item.Other_Hero);
when Place =>
The_Place.Show;
Detail.Show (Item.Other_Place);
when Actions =>
Total_Actions.Show;
Text_Io.Put_Line (Natural'Image (Item.Actions_Number));
when Meet =>
Text_Io.Put_Line ("Meet : ");
Detail.Show (Item.Animate);
when Belong =>
Text_Io.Put_Line ("Belong : ");
Detail.Show (Item.Belong_Subject);
Text_Io.Put_Line (Binary_Kind'Image (Item.Belong_Binary));
Objet.Show (Item.Owner);
when Attribute_Exist =>
Text_Io.Put_Line ("attribute_Exist : Binary :" &
Binary_Kind'Image (Item.Attribute_Binary));
Attribute.Show (Item.Exist_Attribute);
when Exits_Exist =>
Text_Io.Put_Line ("exits_Exist : Binary :" &
Binary_Kind'Image (Item.Exits_Binary));
Objet.Show (Item.Room);
when Subject_Exist =>
Text_Io.Put_Line ("subject_Exist : Binary : " &
Binary_Kind'Image (Item.Subject_Binary));
Detail.Show (Item.Exist_Subject);
when Unknown =>
Text_Io.New_Line;
end case;
end Show;
function Is_Right (Item : in Object) return Boolean is
Left, Right : Integer;
Result : Boolean;
begin
case Item.Kind is
when Et =>
Result := Is_Right (Item.Left_Node);
if Result = True then
Result := Result and Is_Right (Item.Right_Node);
end if;
when Ou =>
Result := Is_Right (Item.Left_Node);
if Result = False then
Result := Result or Is_Right (Item.Right_Node);
end if;
when Single_Attribute =>
if Attribute.Is_A_Number (Item.The_Attribute) then
Left := Attribute.Number (Item.The_Attribute);
Right := Expression.Evaluate (Item.Value);
case Item.Compare is
when Equal =>
Result := Left = Right;
when Not_Equal =>
Result := Left /= Right;
when Less =>
Result := Left < Right;
when Greater =>
Result := Left > Right;
when Less_Equal =>
Result := Left <= Right;
when Greater_Equal =>
Result := Left >= Right;
end case;
else
Result :=
Attribute.Literal (Item.The_Attribute) =
Expression.Literal (Item.Value);
if Item.Compare = Not_Equal then
Result := not Result;
end if;
end if;
when Hero =>
Result := The_Hero.Index = Detail.Index (Item.Other_Hero);
when Place =>
Result := The_Place.Index = Detail.Index (Item.Other_Place);
when Actions =>
Result := Total_Actions.Number mod Item.Actions_Number = 0;
when Meet =>
Result := Complement_Array.Place (The_Hero.Index) =
Complement_Array.Place
(Detail.Index (Item.Animate));
when Belong =>
Result := Complement_Array.Place
(Detail.Index (Item.Belong_Subject)) =
Objet.Complement (Item.Owner);
if Item.Belong_Binary = No then
Result := not Result;
end if;
when Attribute_Exist =>
Result := Attribute.Exist (Item.Exist_Attribute);
if Item.Attribute_Binary = No then
Result := not Result;
end if;
when Exits_Exist =>
Result := Complement_Array.Exits_Exist
(Objet.Complement (Item.Room));
if Item.Exits_Binary = No then
Result := not Result;
end if;
when Subject_Exist =>
Result :=
Complement_Array.Place (Detail.Index (Item.Exist_Subject)) /=
0;
if Item.Subject_Binary = No then
Result := not Result;
end if;
when Unknown =>
Result := False;
end case;
return Result;
end Is_Right;
end Condition;
nblk1=f
nid=a
hdr6=18
[0x00] rec0=1f rec1=00 rec2=01 rec3=006
[0x01] rec0=1c rec1=00 rec2=07 rec3=068
[0x02] rec0=09 rec1=00 rec2=0d rec3=028
[0x03] rec0=18 rec1=00 rec2=08 rec3=030
[0x04] rec0=1b rec1=00 rec2=0e rec3=010
[0x05] rec0=16 rec1=00 rec2=05 rec3=046
[0x06] rec0=1a rec1=00 rec2=02 rec3=010
[0x07] rec0=01 rec1=00 rec2=06 rec3=014
[0x08] rec0=15 rec1=00 rec2=0c rec3=022
[0x09] rec0=12 rec1=00 rec2=0f rec3=086
[0x0a] rec0=16 rec1=00 rec2=0b rec3=02a
[0x0b] rec0=0e rec1=00 rec2=09 rec3=000
[0x0c] rec0=0e rec1=00 rec2=09 rec3=000
[0x0d] rec0=c0 rec1=00 rec2=00 rec3=002
[0x0e] rec0=00 rec1=00 rec2=00 rec3=019
tail 0x215470834865e86b45b60 0x42a00088462060003
Free Block Chain:
0xa: 0000 00 04 00 4f 80 06 65 65 74 20 3d 3e 06 00 43 20 ┆ O eet => C ┆
0x4: 0000 00 03 00 b4 80 2d 6f 75 74 20 4f 62 6a 65 63 74 ┆ -out Object┆
0x3: 0000 00 00 01 13 80 2c 20 20 20 20 20 20 20 20 20 20 ┆ , ┆