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

⟦01c1bfbdb⟧ Ada Source

    Length: 44032 (0xac00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Complement, seg_049b68, seg_049c0a, seg_049c1f

Derivation

└─⟦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⟧ 

E3 Source Code



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;

E3 Meta Data

    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,  *-- ┆