DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦52040371f⟧ Ada Source

    Length: 43008 (0xa800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Complementgl, seg_047ea5

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



with Text_Io, Complement_Identifier_Array, Field_Identifier_Array;
package body Complementgl 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 =>
--output_item := (kind =>animate,
--   animate_name =>input_item.animate_name,
--    animate_fields => field_array.null_object,
--    animate_fields => field_list.null,
--      animate_place => input_item.animate_place,
--    trip => place_list.nil,
--    trip_iterator =>null_trip_iterator);

                Field_List.Free (Output_Item.Animate_Fields);
                Field_List.Copy (Input_Item.Animate_Fields,
                                 Output_Item.Animate_Fields);

            when Place =>
--  output_item := (kind=>place,
--  place_name => input_item.place_name,
--  place_fields => field_array.null_object,
--  place_fields => field_list.nil,
--  exits =>link_list.nil,
--  exits_iterator =>null_exits_iterator);

                Field_List.Free (Output_Item.Place_Fields);
                Field_List.Copy (Input_Item.Place_Fields,
                                 Output_Item.Place_Fields);

--  field_list.free(output_item.exist);
--  field_list.copy(input_item.exits,output_item.exits);

            when Entity =>
-- output_item := (kind =>entity,
-- entity_name =>input_item.entity_name,
-- entity_fields => field_array.null_object,
-- entity_fields => field_list.nil,
-- entity_place => input_item.entity_place);

                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;
                Group_Identifier_Array.Put (Name, Ok);
                Put_Group (Item, Group_Identifier_Array.Index
                                    (Identifier.Image (Name)), Ok);
                Ok := True;
            when Place =>
                Item.Place_Name := Name;
                Group_Identifier_Array.Put (Name, Ok);
                Put_Group (Item, Group_Identifier_Array.Index
                                    (Identifier.Image (Name)), Ok);
                Ok := True;

            when Entity =>
                Item.Entity_Name := Name;
                Group_Identifier_Array.Put (Name, Ok);
                Put_Group (Item, Group_Identifier_Array.Index
                                    (Identifier.Image (Name)), Ok);
                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 := (Group_List => Group_Index_List.Null_Object,
                 Group_Iterator => Null_Group_Iterator,
                 Kind => Word,
                 Word_Value => A_Word);
        Group_Identifier_Array.Put (A_Word, Ok);
        Put_Group
           (Item, Group_Identifier_Array.Index (Identifier.Image (A_Word)), Ok);
    end Put_Word;

    procedure Put_Verb (Item : in out Object;
                        A_Synonym, A_Verb : in Identifier.Object) is

        Ok : Boolean;
    begin
        Item := (Group_List => Group_Index_List.Null_Object,
                 Group_Iterator => Null_Group_Iterator,
                 Kind => Verb,
                 Synonym => A_Synonym);
        Group_Identifier_Array.Put (A_Verb, Ok);
        Put_Group
           (Item, Group_Identifier_Array.Index (Identifier.Image (A_Verb)), Ok);
    end Put_Verb;

--procedure get_field(item : in out object;a_field : out field.object;field_name:in string; ok : out boolean) is

--begin
-- case item.kind is
-- when animate =>
-- field_array.get(item.animate_fields,a_field,field_name,ok);
-- when place =>
-- field_array.get(item.place_fields,a_field,field_name,ok);
-- when entity=>
-- field_array.get(item.entity_fields,a_field,field_name,ok);
-- when word | verb | unknown=>
-- ok := false;
-- end case;
--end;

    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_name: in string; ok : out boolean) is
    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
        --      Get_Fields (Item, List, Local_Ok);
        --    if Local_Ok then
        --      Field_List.Put (List, A_Field);
        --  end if;
        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 put_field(item : in out object;a_field : in field.object) is

--begin
-- case item.kind is
-- when animate =>
-- field_array.put(item.animate_fields,a_field);
-- when place =>
-- field_array.put(item.place_fields,a_field);
-- when entity=>
-- field_array.put(item.entity_fields,a_field);
-- when word | verb | unknown=>
-- null;
-- end case;
--end;


--    procedure create_number_field(item : out object;field_name: in string; ok : out boolean) is
    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_exist(item,field_name) then
        if Is_A_Subject (Item) and not Field_Belong (Item, Field_Index) then
--           field.create_number(a_field,field_name);
            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_name: in string; ok : out boolean);
    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_exist(item,field_name) then
        if Is_A_Subject (Item) and not Field_Belong (Item, Field_Index) then
--             field.create_sentence(a_field,field_name);
            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_name: in string; ok : out boolean);
    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_exist(item,field_name) then
        if Is_A_Subject (Item) and not Field_Belong (Item, Field_Index) then
--             field.create_enumerate(a_field,field_name);
            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_name: in string;number : in integer; ok : out boolean);
    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_name,local_ok);
        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_name: in string;sentence : in string; ok : out boolean);
    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_name,local_ok);
        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_name: in string;enumeration,literal : in positive; ok : out boolean);
    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_name,local_ok);
        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 : Complement_Index.Object;
        Iterator : Place_List.Iterator;
        Temporary_List : Place_List.List;

    begin
        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;
            Complement_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 Movement_Init (Item : in out Object) is

    begin
        --      if Item.Kind = Animate then
        --          Place_List.Init (Item.Trip_Iterator, Item.Trip);
        --       end if;
        null;
    end Movement_Init;


    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 :=
                   Complement_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;

--procedure put_exit(item : in out object;name,start_place,start_direction,
--next_place,next_direction : in positive;ok : out boolean);

--a_link : link.object;

--begin
--  if item.kind = place then
--        link.put_name(a_link,name);
--        link.put_start_escape(a_link,start_place,start_direction);
--        link.put_next_escape(a_link,next_place,next_direction);
-- link_list.put(item.exits,a_link,ok);
--  else
--  ok:=false;
--  end if;
--end;

--procedure exit_put_enumerate(item : in out object;direction,numeration,literal: in positive;ok : out boolean);

--a_link : link.object;
--local_ok : boolean;

--begin
-- found_link(item,a_link,direction,local_ok);
-- if local_ok then
--       link.put_enumerate(a_link,enumeration,literal);
--       link_list.put(item.exits,a_link);
--       ok:=true;
-- else
--  ok := false;
--end if;
--end;

    -- procedure Found_Link (Item : in Object;
    --                       A_Link : out Link.Object;
    --                       Direction : in Positive;
    --                       Ok : out Boolean) is
    --
    -- begin
    --     if Is_A_Place (Item) then
    --         Link_List.Get (Item.Exits, A_Link, Positive'Image (Direction), Ok);
    --     else
    --         Ok := False;
    --     end if;
    -- end Found_Link;
    --
    -- function Exit_Enumeration
    --             (Item : in Object; Direction : in Positive) return Natural is
    --
    --     A_Link : Link.Object;
    --     Local_Ok : Boolean;
    --
    -- begin
    --     Found_Link (Item, A_Link, Direction, Local_Ok);
    --     if Local_Ok then
    --         return Link.Enumeration (A_Link);
    --     else
    --         return 0;
    --     end if;
    -- end Exit_Enumeration;
    --
    -- function Exit_Literal
    --             (Item : in Object; Direction : in Positive) return Natural is
    --
    --     A_Link : Link.Object;
    --     Local_Ok : Boolean;
    --
    -- begin
    --     Found_Link (Item, A_Link, Direction, Local_Ok);
    --     if Local_Ok then
    --         return Link.Literal (A_Link);
    --     else
    --         return 0;
    --     end if;
    -- end Exit_Literal;

    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
        Text_Io.Put_Line ("Complement : Kind : " &
                          Complement_Kind'Image (Item.Kind));
        case Item.Kind is
            when Animate =>
                Text_Io.Put_Line
                   (" Name : " & Name (Item) & " Place : " &
                    Complement_Identifier_Array.Image (Place (Item)));  
                Field_List.Show (Item.Animate_Fields);
                Place_List.Init (Trip_Iterator, Item.Trip);
                while not Place_List.Done (Trip_Iterator) loop                   Complement_Index.Show (Place_List.Value (Trip_Iterator));
                    Place_List.Next (Trip_Iterator);
                end loop;
            when Place =>
                Text_Io.Put_Line (" Name : " & Name (Item));
                Field_List.Show (Item.Place_Fields);
                Link_List.Show (Item.Exits);
            when Entity =>
                Text_Io.Put_Line
                   (" Name : " & Name (Item) & " Place : " &
                    Complement_Identifier_Array.Image (Place (Item)));  
                Field_List.Show (Item.Entity_Fields);
            when Word =>
                Text_Io.Put_Line (" Name : " & Name (Item));
            when Verb =>
                Text_Io.Put_Line (" Name : " & Name (Item));
                --     " Reference Verb : " &
                --   Identifier.Image (Item.Reference_Verb));
            when Unknown =>
                Text_Io.New_Line;
        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;
                         An_Index : in Positive;
                         Ok : out Boolean) is

        A_Group_Index : Group_Index.Object;
        Local_Ok : Boolean := False;

    begin
        Group_Index.Put (A_Group_Index, An_Index);
        Group_Index_List.Put (Item.Group_List, A_Group_Index, Ok);
    end Put_Group;

    procedure List_Group_Init (Item : in out Object) is

    begin
        Group_Index_List.Init (Item.Group_Iterator,
                               Item.Group_List);  -- voir ordre
    end List_Group_Init;

    procedure List_Group_Next (Item : in out Object) is

    begin
        Group_Index_List.Next (Item.Group_Iterator);
    end List_Group_Next;

    function List_Group_Name (Item : in Object) return String is

    begin
        return Group_Index.Image (Group_Index_List.Value (Item.Group_Iterator));
    end List_Group_Name;

    function List_Group_Done (Item : in Object) return Boolean is

    begin
        return Group_Index_List.Done (Item.Group_Iterator);
    end List_Group_Done;




--function field_is_a_number (item : in object;field_name : in string) return boolean is
    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_name,local_ok);
        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_name : in string) return boolean is
    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_name,local_ok);
        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_name : in string) return boolean is
    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_name,local_ok);
        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_exist (item : in object;field_name : in string) return boolean is

--begin
-- case item.kind is
-- when animate =>
--  return field_array.belong(item.animate_fields,field_name);
-- when place =>
--  return field_array.belong(item.place_fields,field_name);
-- when entity=>
--  return field_array.belong(item.entity_fields,field_name);
-- when word | unknown=>
--  return false;
-- end case;
--end;

--function field_exist (item : in object;field_name : in string) return boolean is
    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_name);
            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.Synonym);
            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_name:in string) return Integer is
    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_name,local_ok);
        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_name:in string) return String is
    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_name,local_ok);
        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_name:in string) return Natural is
    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_name,local_ok);
        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_name:in string) return Natural is
    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_name,local_ok);
        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;

--    function Synonym (Item : in Object) return Natural is

    --  begin
    --    if Item.Kind = Verb then
    --      return Complement_Identifier_Array.Index
    --                (Identifier.Image (Item.Reference_Verb));
    -- else
    -- return 0;
    -- end if;
    --  end Synonym;


-- begin
--
-- --create_sentence (animate_object,"nom",local_ok);
-- --put_sentence(animate_object,"nom","anime",local_ok);
--
--     Field_Identifier_Array.Put ("description");
--
--     Create_Sentence_Field
--        (Animate_Object,
--         Field_Identifier_Array.Index ("description"), Global_Ok);
--     Field_Put_Sentence (Animate_Object,
--                         Field_Identifier_Array.Index ("description"),
--                         "Ca bouge !", Global_Ok);
--
-- --create_sentence (place_object,"nom",local_ok);
-- --put_sentence(place_object,"nom","lieu",local_ok);
--     Create_Sentence_Field
--        (Place_Object, Field_Identifier_Array.Index ("description"), Global_Ok);
--     Field_Put_Sentence (Place_Object,
--                         Field_Identifier_Array.Index ("description"),
--                         "C'est une piece !", Global_Ok);
--
-- --create_sentence (entity_object,"nom",local_ok);
-- --put_sentence(entity_object,"nom","entite",local_ok);
--     Create_Sentence_Field
--        (Entity_Object, Field_Identifier_Array.Index ("description"), Global_Ok);
--     Field_Put_Sentence (Entity_Object,
--                         Field_Identifier_Array.Index ("description"),
--                         "C'est un objet !", Global_Ok);

end Complementgl;

E3 Meta Data

    nblk1=29
    nid=29
    hdr6=50
        [0x00] rec0=1d rec1=00 rec2=01 rec3=028
        [0x01] rec0=00 rec1=00 rec2=25 rec3=004
        [0x02] rec0=1e rec1=00 rec2=10 rec3=02c
        [0x03] rec0=18 rec1=00 rec2=0b rec3=028
        [0x04] rec0=1d rec1=00 rec2=19 rec3=052
        [0x05] rec0=1f rec1=00 rec2=02 rec3=038
        [0x06] rec0=06 rec1=00 rec2=22 rec3=054
        [0x07] rec0=20 rec1=00 rec2=23 rec3=030
        [0x08] rec0=02 rec1=00 rec2=06 rec3=010
        [0x09] rec0=1f rec1=00 rec2=09 rec3=054
        [0x0a] rec0=19 rec1=00 rec2=07 rec3=006
        [0x0b] rec0=18 rec1=00 rec2=08 rec3=03c
        [0x0c] rec0=18 rec1=00 rec2=15 rec3=05e
        [0x0d] rec0=0e rec1=00 rec2=04 rec3=00c
        [0x0e] rec0=1b rec1=00 rec2=0d rec3=014
        [0x0f] rec0=15 rec1=00 rec2=24 rec3=01e
        [0x10] rec0=23 rec1=00 rec2=1d rec3=026
        [0x11] rec0=03 rec1=00 rec2=0a rec3=040
        [0x12] rec0=21 rec1=00 rec2=1b rec3=018
        [0x13] rec0=25 rec1=00 rec2=21 rec3=01a
        [0x14] rec0=01 rec1=00 rec2=0c rec3=00e
        [0x15] rec0=1e rec1=00 rec2=03 rec3=024
        [0x16] rec0=23 rec1=00 rec2=20 rec3=034
        [0x17] rec0=23 rec1=00 rec2=0e rec3=02e
        [0x18] rec0=1d rec1=00 rec2=0f rec3=002
        [0x19] rec0=17 rec1=00 rec2=17 rec3=00e
        [0x1a] rec0=00 rec1=00 rec2=1f rec3=014
        [0x1b] rec0=25 rec1=00 rec2=11 rec3=044
        [0x1c] rec0=21 rec1=00 rec2=26 rec3=00e
        [0x1d] rec0=1a rec1=00 rec2=27 rec3=06a
        [0x1e] rec0=20 rec1=00 rec2=12 rec3=04c
        [0x1f] rec0=21 rec1=00 rec2=1e rec3=004
        [0x20] rec0=00 rec1=00 rec2=14 rec3=04e
        [0x21] rec0=29 rec1=00 rec2=13 rec3=04e
        [0x22] rec0=1d rec1=00 rec2=05 rec3=07a
        [0x23] rec0=00 rec1=00 rec2=16 rec3=01e
        [0x24] rec0=21 rec1=00 rec2=18 rec3=032
        [0x25] rec0=21 rec1=00 rec2=1a rec3=02e
        [0x26] rec0=1d rec1=00 rec2=1c rec3=094
        [0x27] rec0=0e rec1=00 rec2=28 rec3=000
        [0x28] rec0=5c rec1=31 rec2=a1 rec3=530
    tail 0x2174bc5dc86577e6de71e 0x42a00088462060003
Free Block Chain:
  0x29: 0000  00 00 01 1a 80 07 62 2c 20 4f 6b 29 3b 07 00 18  ┆      b, Ok);   ┆