|
|
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: 44032 (0xac00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Complement, seg_049b68, seg_049c0a, seg_049c1f
└─⟦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 Complement_Identifier_Array, Field_Identifier_Array, Screen;
package body Complement is
procedure Copy (Input_Item : in Object; Output_Item : in out Object) is
begin
Output_Item := Input_Item;
case Input_Item.Kind is
when Animate =>
Field_List.Free (Output_Item.Animate_Fields);
Field_List.Copy (Input_Item.Animate_Fields,
Output_Item.Animate_Fields);
when Place =>
Field_List.Free (Output_Item.Place_Fields);
Field_List.Copy (Input_Item.Place_Fields,
Output_Item.Place_Fields);
when Entity =>
Field_List.Free (Output_Item.Entity_Fields);
Field_List.Copy (Input_Item.Entity_Fields,
Output_Item.Entity_Fields);
when Word | Verb | Unknown =>
null;
end case;
end Copy;
procedure Put_Name (Item : in out Object;
Name : in Identifier.Object;
Ok : out Boolean) is
begin
case Item.Kind is
when Animate =>
Item.Animate_Name := Name;
Item.Animate_Group := Name;
Ok := True;
when Place =>
Item.Place_Name := Name;
Item.Place_Group := Name;
Ok := True;
when Entity =>
Item.Entity_Name := Name;
Item.Entity_Group := Name;
Ok := True;
when Word | Verb | Unknown =>
Ok := False;
end case;
end Put_Name;
procedure Put_Word (Item : in out Object; A_Word : in Identifier.Object) is
Ok : Boolean;
begin
Item := (Kind => Word, Word_Value => A_Word, Word_Group => A_Word);
end Put_Word;
procedure Put_Verb (Item : in out Object;
A_Synonym, A_Verb : in Identifier.Object) is
Ok : Boolean;
begin
Item := (Kind => Verb, Verb_Value => A_Synonym, Verb_Group => A_Verb);
end Put_Verb;
procedure Get_Fields (Item : in Object;
List : out Field_List.Object;
Ok : out Boolean) is
begin
Ok := True;
case Item.Kind is
when Animate =>
List := Item.Animate_Fields;
when Place =>
List := Item.Place_Fields;
when Entity =>
List := Item.Entity_Fields;
when Word | Verb | Unknown =>
Ok := False;
end case;
end Get_Fields;
procedure Get_Field (Item : in Object;
A_Field : out Field.Object;
Field_Index : in Positive;
Ok : out Boolean) is
List : Field_List.Object;
Local_Ok : Boolean;
begin
Get_Fields (Item, List, Local_Ok);
if Local_Ok then
Field_List.Get (List, A_Field,
Field_Identifier_Array.Image (Field_Index), Ok);
else
Ok := False;
end if;
end Get_Field;
procedure Put_Field (Item : in out Object; A_Field : in Field.Object) is
List : Field_List.Object;
Local_Ok : Boolean;
begin
case Item.Kind is
when Animate =>
Field_List.Put (Item.Animate_Fields, A_Field);
when Place =>
Field_List.Put (Item.Place_Fields, A_Field);
when Entity =>
Field_List.Put (Item.Entity_Fields, A_Field);
when Word | Verb | Unknown =>
null;
end case;
end Put_Field;
procedure Create_Number_Field (Item : in out Object;
Field_Index : in Positive;
Ok : out Boolean) is
A_Field : Field.Object;
begin
if Is_A_Subject (Item) and not Field_Belong (Item, Field_Index) then
Field.Create_Number (A_Field, Field_Index);
Put_Field (Item, A_Field);
Ok := True;
else
Ok := False;
end if;
end Create_Number_Field;
procedure Create_Sentence_Field (Item : in out Object;
Field_Index : in Positive;
Ok : out Boolean) is
A_Field : Field.Object;
begin
if Is_A_Subject (Item) and not Field_Belong (Item, Field_Index) then
Field.Create_Sentence (A_Field, Field_Index);
Put_Field (Item, A_Field);
Ok := True;
else
Ok := False;
end if;
end Create_Sentence_Field;
procedure Create_Enumerate_Field (Item : in out Object;
Field_Index : in Positive;
Ok : out Boolean) is
A_Field : Field.Object;
begin
if Is_A_Subject (Item) and not Field_Belong (Item, Field_Index) then
Field.Create_Enumerate (A_Field, Field_Index);
Put_Field (Item, A_Field);
Ok := True;
else
Ok := False;
end if;
end Create_Enumerate_Field;
procedure Field_Put_Number (Item : in out Object;
Field_Index : in Positive;
Number : in Integer;
Ok : out Boolean) is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
Field.Put_Number (A_Field, Number, Local_Ok);
if Local_Ok then
Put_Field (Item, A_Field);
end if;
end if;
Ok := Local_Ok;
end Field_Put_Number;
procedure Field_Put_Sentence (Item : in out Object;
Field_Index : in Positive;
Sentence : in Identifier.Object;
Ok : out Boolean) is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
Field.Put_Sentence (A_Field, Sentence, Local_Ok);
if Local_Ok then
Put_Field (Item, A_Field);
end if;
end if;
Ok := Local_Ok;
end Field_Put_Sentence;
procedure Field_Put_Enumerate (Item : in out Object;
Field_Index : in Positive;
Enumeration, Literal : in Positive;
Ok : out Boolean) is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
Field.Put_Enumerate (A_Field, Enumeration, Literal, Local_Ok);
if Local_Ok then
Put_Field (Item, A_Field);
end if;
end if;
Ok := Local_Ok;
end Field_Put_Enumerate;
procedure Put_Movement (Item : in out Object; Place : in Positive) is
Place_Index : Index.Object;
Iterator : Place_List.Iterator;
Temporary_List : Place_List.List;
begin
if Item.Animate_Place = 0 then
Item.Animate_Place := Place;
end if;
if Item.Kind = Animate then
Place_List.Init (Iterator, Item.Trip);
while not Place_List.Done (Iterator) loop
Place_Index := Place_List.Value (Iterator);
Temporary_List := Place_List.Make (Place_Index, Temporary_List);
Place_List.Next (Iterator);
end loop;
Index.Put (Place_Index, Place);
Temporary_List := Place_List.Make (Place_Index, Temporary_List);
Place_List.Free (Item.Trip);
Place_List.Init (Iterator, Temporary_List);
while not Place_List.Done (Iterator) loop
Place_Index := Place_List.Value (Iterator);
Item.Trip := Place_List.Make (Place_Index, Item.Trip);
Place_List.Next (Iterator);
end loop;
end if;
end Put_Movement;
procedure Move (Item : in out Object) is
begin
if Item.Kind = Animate then
if not Place_List.Is_Empty (Item.Trip) then
if Place_List.Done (Item.Trip_Iterator) then
Place_List.Init (Item.Trip_Iterator, Item.Trip); end if;
Item.Animate_Place :=
Index.Value (Place_List.Value (Item.Trip_Iterator));
Place_List.Next (Item.Trip_Iterator);
end if;
end if;
end Move;
function Exit_Exist
(Item : in Object; Direction : in Positive) return Boolean is
begin
if Item.Kind = Place then
return Link_List.Belong
(Item.Exits, Complement_Identifier_Array.Image
(Direction));
else
return False;
end if;
end Exit_Exist;
function Exits_Exist (Item : in Object) return Boolean is
begin
if Item.Kind = Place then
return not Link_List.Is_Empty (Item.Exits);
else
return False;
end if;
end Exits_Exist;
procedure Put_Exit (Item : in out Object;
Name, Start_Place, Start_Direction,
Next_Place, Next_Direction : in Positive;
Ok : out Boolean) is
A_Link : Link.Object;
Local_Ok : Boolean;
begin
if Item.Kind = Place then
if not Exit_Exist (Item, Start_Direction) then
Link.Put (A_Link, Name, Start_Place, Start_Direction,
Next_Place, Next_Direction);
Link_List.Put (Item.Exits, A_Link);
Ok := True;
else
Ok := False;
end if;
end if;
end Put_Exit;
function Exit_Name
(Item : in Object; Direction : in Positive) return Natural is
A_Link : Link.Object;
Local_Ok : Boolean;
begin
if Item.Kind = Place then
Link_List.Get
(Item.Exits, A_Link,
Complement_Identifier_Array.Image (Direction), Local_Ok);
if Local_Ok then
return Link.Name (A_Link);
else
return 0;
end if;
return 0;
end if;
end Exit_Name;
function Next_Place
(Item : in Object; Direction : in Positive) return Natural is
A_Link : Link.Object;
Local_Ok : Boolean;
begin
if Item.Kind = Place then
Link_List.Get
(Item.Exits, A_Link,
Complement_Identifier_Array.Image (Direction), Local_Ok);
if Local_Ok then
return Link.Next_Place (A_Link);
end if;
end if;
return 0;
end Next_Place;
function Next_Direction
(Item : in Object; Direction : in Positive) return Natural is
A_Link : Link.Object;
Local_Ok : Boolean;
begin
if Item.Kind = Place then
Link_List.Get
(Item.Exits, A_Link,
Complement_Identifier_Array.Image (Direction), Local_Ok);
if Local_Ok then
return Link.Next_Direction (A_Link);
else
return 0;
end if;
end if;
end Next_Direction;
procedure Put_Place
(Item : in out Object; Place : in Natural; Ok : out Boolean) is
begin
if Item.Kind = Animate then
Item.Animate_Place := Place;
Ok := True;
elsif Item.Kind = Entity then
Item.Entity_Place := Place;
Ok := True;
else
Ok := False;
end if;
end Put_Place;
procedure Show (Item : in Object) is
Trip_Iterator : Place_List.Iterator;
begin
Screen.Write_Help_Window ("Complement : Type : " &
Complement_Kind'Image (Item.Kind));
Screen.New_Line_Help_Window;
case Item.Kind is
when Animate =>
Screen.Write_Help_Window
(" Nom : " & Name (Item) & " Lieu : " &
Complement_Identifier_Array.Image (Place (Item)));
Screen.New_Line_Help_Window;
Field_List.Show (Item.Animate_Fields);
Place_List.Init (Trip_Iterator, Item.Trip);
while not Place_List.Done (Trip_Iterator) loop
Index.Show (Place_List.Value (Trip_Iterator));
Place_List.Next (Trip_Iterator);
end loop;
when Place =>
Screen.Write_Help_Window (" Nom : " & Name (Item));
Screen.New_Line_Help_Window;
Field_List.Show (Item.Place_Fields);
Link_List.Show (Item.Exits);
when Entity =>
Screen.Write_Help_Window
(" Nom : " & Name (Item) & " Lieu : " &
Complement_Identifier_Array.Image (Place (Item)));
Screen.New_Line_Help_Window;
Field_List.Show (Item.Entity_Fields);
when Word =>
Screen.Write_Help_Window (" Nom : " & Name (Item));
Screen.New_Line_Help_Window;
when Verb =>
Screen.Write_Help_Window (" Nom : " & Name (Item));
Screen.New_Line_Help_Window;
when Unknown =>
Screen.New_Line_Help_Window;
end case;
end Show;
procedure List_Exits_Init (Item : in out Object) is
begin
if Item.Kind = Place then
Link_List.Init (Item.Exits_Iterator, Item.Exits);
end if;
end List_Exits_Init;
procedure List_Exits_Next (Item : in out Object) is
begin
if Item.Kind = Place then
Link_List.Next (Item.Exits_Iterator);
end if;
end List_Exits_Next;
function List_Exits_Direction (Item : in Object) return Natural is
begin
if Item.Kind = Place then
return Link.Start_Direction (Link_List.Value (Item.Exits_Iterator));
else
return 0;
end if;
end List_Exits_Direction;
function List_Exits_Done (Item : in Object) return Boolean is
begin
if Item.Kind = Place then
return Link_List.Done (Item.Exits_Iterator);
else
return True;
end if;
end List_Exits_Done;
procedure Put_Group (Item : in out Object;
A_Group : in Identifier.Object;
Ok : out Boolean) is
begin
case Item.Kind is
when Animate =>
if Group (Item) = Name (Item) then
Item.Animate_Group := A_Group;
Ok := True;
else
Ok := False;
end if;
when Place =>
if Group (Item) = Name (Item) then
Item.Place_Group := A_Group;
Ok := True;
else
Ok := False;
end if;
when Entity =>
if Group (Item) = Name (Item) then
Item.Entity_Group := A_Group;
Ok := True;
else
Ok := False;
end if;
when Word =>
if Group (Item) = Name (Item) then
Item.Word_Group := A_Group;
Ok := True;
else
Ok := False;
end if;
when Verb | Unknown =>
Ok := False;
end case;
end Put_Group;
function Group (Item : in Object) return String is
begin
case Item.Kind is
when Animate =>
return Identifier.Image (Item.Animate_Group);
when Place =>
return Identifier.Image (Item.Place_Group);
when Entity =>
return Identifier.Image (Item.Entity_Group);
when Word =>
return Identifier.Image (Item.Word_Group);
when Verb =>
return Identifier.Image (Item.Verb_Group);
when Unknown =>
return "";
end case;
end Group;
function Field_Is_A_Number
(Item : in Object; Field_Index : in Positive) return Boolean is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
return Field.Is_A_Number (A_Field);
else
return False;
end if;
end Field_Is_A_Number;
function Field_Is_A_Sentence
(Item : in Object; Field_Index : in Positive) return Boolean is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
return Field.Is_A_Sentence (A_Field);
else
return False;
end if;
end Field_Is_A_Sentence;
function Field_Is_An_Enumerate
(Item : in Object; Field_Index : in Positive) return Boolean is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
return Field.Is_An_Enumerate (A_Field);
else
return False;
end if;
end Field_Is_An_Enumerate;
function Field_Belong
(Item : in Object; Field_Index : in Positive) return Boolean is
List : Field_List.Object;
Local_Ok : Boolean;
begin
Get_Fields (Item, List, Local_Ok);
if Local_Ok then
return Field_List.Belong
(List, Field_Identifier_Array.Image (Field_Index));
else
return False;
end if;
end Field_Belong;
function Is_A_Subject (Item : in Object) return Boolean is
begin
return Item.Kind = Animate or Item.Kind = Place or Item.Kind = Entity;
end Is_A_Subject;
function Is_An_Animate (Item : in Object) return Boolean is
begin
return Item.Kind = Animate;
end Is_An_Animate;
function Is_A_Place (Item : in Object) return Boolean is
begin
return Item.Kind = Place;
end Is_A_Place;
function Is_An_Entity (Item : in Object) return Boolean is
begin
return Item.Kind = Entity;
end Is_An_Entity;
function Is_A_Word (Item : in Object) return Boolean is
begin
return Item.Kind = Word;
end Is_A_Word;
function Is_A_Verb (Item : in Object) return Boolean is
begin
return Item.Kind = Verb;
end Is_A_Verb;
function Name (Item : in Object) return String is
begin
case Item.Kind is
when Animate =>
return Identifier.Image (Item.Animate_Name);
when Place =>
return Identifier.Image (Item.Place_Name);
when Entity =>
return Identifier.Image (Item.Entity_Name);
when Word =>
return Identifier.Image (Item.Word_Value);
when Verb =>
return Identifier.Image (Item.Verb_Value);
when Unknown =>
return "";
end case;
end Name;
function Place (Item : in Object) return Natural is
begin
case Item.Kind is
when Animate =>
return Item.Animate_Place;
when Entity =>
return Item.Entity_Place;
when Place | Word | Verb | Unknown =>
return 0;
end case;
end Place;
function Field_Number
(Item : in Object; Field_Index : in Positive) return Integer is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
return Field.Number (A_Field);
else
return 0;
end if;
end Field_Number;
function Field_Sentence
(Item : in Object; Field_Index : in Positive) return String is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
return Field.Sentence (A_Field);
else
return "";
end if;
end Field_Sentence;
function Field_Enumeration
(Item : in Object; Field_Index : in Positive) return Natural is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
return Field.Enumeration (A_Field);
else
return 0;
end if; end Field_Enumeration;
function Field_Literal
(Item : in Object; Field_Index : in Positive) return Natural is
A_Field : Field.Object;
Local_Ok : Boolean;
begin
Get_Field (Item, A_Field, Field_Index, Local_Ok);
if Local_Ok then
return Field.Literal (A_Field);
else
return 0;
end if;
end Field_Literal;
end Complement;
nblk1=2a
nid=9
hdr6=32
[0x00] rec0=1a rec1=00 rec2=01 rec3=014
[0x01] rec0=22 rec1=00 rec2=18 rec3=02e
[0x02] rec0=1c rec1=00 rec2=23 rec3=042
[0x03] rec0=21 rec1=00 rec2=05 rec3=00a
[0x04] rec0=1d rec1=00 rec2=1e rec3=008
[0x05] rec0=1e rec1=00 rec2=14 rec3=032
[0x06] rec0=1d rec1=00 rec2=26 rec3=03e
[0x07] rec0=1f rec1=00 rec2=1c rec3=02e
[0x08] rec0=17 rec1=00 rec2=29 rec3=002
[0x09] rec0=22 rec1=00 rec2=11 rec3=056
[0x0a] rec0=1f rec1=00 rec2=27 rec3=01e
[0x0b] rec0=01 rec1=00 rec2=1f rec3=03e
[0x0c] rec0=24 rec1=00 rec2=0e rec3=05a
[0x0d] rec0=22 rec1=00 rec2=20 rec3=026
[0x0e] rec0=13 rec1=00 rec2=03 rec3=026
[0x0f] rec0=21 rec1=00 rec2=0c rec3=010
[0x10] rec0=07 rec1=00 rec2=28 rec3=010
[0x11] rec0=21 rec1=00 rec2=21 rec3=022
[0x12] rec0=1d rec1=00 rec2=06 rec3=060
[0x13] rec0=23 rec1=00 rec2=1b rec3=012
[0x14] rec0=23 rec1=00 rec2=1d rec3=000
[0x15] rec0=29 rec1=00 rec2=0d rec3=006
[0x16] rec0=21 rec1=00 rec2=04 rec3=00a
[0x17] rec0=24 rec1=00 rec2=02 rec3=002
[0x18] rec0=12 rec1=00 rec2=08 rec3=000
[0x19] rec0=12 rec1=00 rec2=08 rec3=000
[0x1a] rec0=1f rec1=00 rec2=1b rec3=02e
[0x1b] rec0=20 rec1=00 rec2=0a rec3=008
[0x1c] rec0=1d rec1=00 rec2=1d rec3=062
[0x1d] rec0=21 rec1=00 rec2=24 rec3=03e
[0x1e] rec0=26 rec1=00 rec2=0d rec3=04c
[0x1f] rec0=21 rec1=00 rec2=04 rec3=030
[0x20] rec0=00 rec1=00 rec2=02 rec3=006
[0x21] rec0=1f rec1=00 rec2=15 rec3=06c
[0x22] rec0=21 rec1=00 rec2=08 rec3=014
[0x23] rec0=20 rec1=00 rec2=28 rec3=08c
[0x24] rec0=14 rec1=00 rec2=07 rec3=000
[0x25] rec0=1d rec1=00 rec2=1c rec3=094
[0x26] rec0=0e rec1=00 rec2=28 rec3=000
[0x27] rec0=00 rec1=40 rec2=10 rec3=634
[0x28] rec0=5c rec1=31 rec2=a1 rec3=530
[0x29] rec0=00 rec1=0c rec2=5a rec3=0c6
tail 0x21547329086618abdd73d 0x42a00088462060003
Free Block Chain:
0x9: 0000 00 07 03 fc 80 12 22 20 26 20 47 72 6f 75 70 20 ┆ " & Group ┆
0x7: 0000 00 15 00 04 80 01 6f 01 02 03 04 05 06 07 4f 6b ┆ o Ok┆
0x15: 0000 00 24 03 fc 80 16 72 64 20 7c 20 56 65 72 62 20 ┆ $ rd | Verb ┆
0x24: 0000 00 0a 00 07 80 04 65 6c 6f 6e 04 3b 06 00 18 20 ┆ elon ; ┆
0xa: 0000 00 0f 00 23 00 19 20 20 20 20 20 20 20 20 20 20 ┆ # ┆
0xf: 0000 00 17 00 1b 80 18 20 20 20 20 20 20 20 20 20 72 ┆ r┆
0x17: 0000 00 22 00 33 80 01 3b 01 00 1b 20 20 20 20 2d 2d ┆ " 3 ; --┆
0x22: 0000 00 12 00 32 80 0d 6f 6e 20 45 78 69 74 5f 45 78 ┆ 2 on Exit_Ex┆
0x12: 0000 00 13 00 4a 80 04 65 67 69 6e 04 00 38 2d 2d 20 ┆ J egin 8-- ┆
0x13: 0000 00 16 00 29 80 26 65 6c 64 5f 61 72 72 61 79 2e ┆ ) &eld_array.┆
0x16: 0000 00 1a 00 15 00 12 20 20 20 20 20 20 20 20 20 20 ┆ ┆
0x1a: 0000 00 19 00 07 80 04 66 69 65 72 04 61 6d 65 2c 20 ┆ fier ame, ┆
0x19: 0000 00 25 01 05 80 16 3e 20 4e 75 6c 6c 5f 47 72 6f ┆ % > Null_Gro┆
0x25: 0000 00 2a 03 fc 80 39 20 20 20 20 20 20 20 20 20 20 ┆ * 9 ┆
0x2a: 0000 00 0b 00 09 80 06 20 20 20 20 20 20 06 00 00 02 ┆ ┆
0xb: 0000 00 10 03 fc 80 16 20 20 4f 6b 20 3a 20 6f 75 74 ┆ Ok : out┆
0x10: 0000 00 00 03 fc 80 04 6e 69 6c 2c 04 00 2a 2d 2d 20 ┆ nil, *-- ┆