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

⟦afe341d5b⟧ Ada Source

    Length: 36864 (0x9000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Xlbip_Wire_Converters, seg_004f2a

Derivation

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

E3 Source Code



with Xlbt_Arithmetic;  
use Xlbt_Arithmetic;  
with Xlbt_Basic;  
use Xlbt_Basic;  
with Xlbt_Error;  
use Xlbt_Error;  
with Xlbt_Event;  
use Xlbt_Event;  
with Xlbt_Exceptions;  
use Xlbt_Exceptions;  
with Xlbt_Reply;  
use Xlbt_Reply;  
with Xlbt_Request;  
use Xlbt_Request;  
with Xlbt_String;  
use Xlbt_String;

with Xlbip_Error_Converters;  
use Xlbip_Error_Converters;  
with Xlbip_Event_Converters;  
use Xlbip_Event_Converters;  
with Xlbip_Default_Proc_Vars;  
use Xlbip_Default_Proc_Vars;  
with Xlbip_Internal;  
use Xlbip_Internal;  
with Xlbip_Reply_Converters;  
use Xlbip_Reply_Converters;

with Xlbmt_Network_Types;  
use Xlbmt_Network_Types;

with Xlbmp_Error_Log;  
use Xlbmp_Error_Log;

package body Xlbip_Wire_Converters is
------------------------------------------------------------------------------
-- X Library Internal Protocol/Record Conversions
--
-- Xlbip_Wire_Converters - Converts between network byte streams and our Ada
--                         data types
------------------------------------------------------------------------------
-- Copyright 1989 - 1991 by Rational, Santa Clara, California.
--
--                  All Rights Reserved.
--
-- Permission to use, copy, modify, and distribute this software and its
-- documentation for any purpose and without fee is hereby granted,
-- provided that the above copyright notice(s) appear in all copies and that
-- both that copyright notice(s) and this permission notice appear in
-- supporting documentation, and that the name of Rational not be used in
-- advertising or publicity pertaining to distribution of the software
-- without specific, written prior permission.
--
-- Rational disclaims all warranties with regard to this software, including
-- all implied warranties of merchantability and fitness, in no event shall
-- Rational be liable for any special, indirect or consequential damages or
-- any damages whatsoever resulting from loss of use, data or profits, whether
-- in an action of contract, negligence or other tortious action, arising out
-- of or in connection with the use or performance of this software.
------------------------------------------------------------------------------

--\x0c
    procedure Internal_Wire_To_Error  
                 (Display    :     X_Display;  
                  Raw        :     X_Raw_Data_Array;  
                  Send_Event :     Boolean;  
                  Error      : out X_Error_Contents) is
------------------------------------------------------------------------------
-- Takes a series of bytes that are known to represent an error and converts
-- them to an X_Error_Contents suitable for processing by Ada code.
------------------------------------------------------------------------------
        Erx : X_Error_Contents (Kind => X_Error_Code'Val (Raw (Raw'First + 1)));  
        Seq : U_Short;  
    begin

        Erx.Send_Event := Send_Event;  
        case Erx.Kind is

            when Bad_Atom =>  
                From_Raw (Erx.Atom, Raw);  
                Seq := Erx.Atom.Sequence_Number;

            when Bad_Request |  
                 Bad_Match |  
                 Bad_Access |  
                 Bad_Alloc |  
                 Bad_Name |  
                 Bad_Length |  
                 Bad_Implementation =>  
                From_Raw (Erx.Nothing, Raw);  
                Seq := Erx.Nothing.Sequence_Number;

            when Bad_Window |  
                 Bad_Pixmap |  
                 Bad_Cursor |  
                 Bad_Font |  
                 Bad_Drawable |  
                 Bad_Color |  
                 Bad_Gc |  
                 Bad_Id_Choice =>  
                From_Raw (Erx.Resource, Raw);  
                Seq := Erx.Resource.Sequence_Number;

            when Bad_Value =>  
                From_Raw (Erx.Value, Raw);  
                Seq := Erx.Value.Sequence_Number;

            when others =>
                ----Should not happen.  Means we have a new Error type and
                --  we were not told.  Since we are the one and only place
                --  where errors are created from Raw this means that
                --  somebody has slipped up; or else we're working with
                --  a malfunctioning or a too-new version server.

                X_Report_Error  
                   ("XlibError", "NoNativeError",  
                    "Xlib; Unhandled wire error!  .Kind=%1 .Display=%2.",  
                    To_X_String (X_Error_Code'Image (Erx.Kind)),  
                    Display.Display_Name.all);  
                raise X_Library_Confusion;  
        end case;

----Set the proper serial number.

        Erx.Serial := Internal_X_Set_Last_Request_Read (Display,  
                                                        Error_Event,  
                                                        Seq);  
        Error      := Erx;

    end Internal_Wire_To_Error;

--\x0c
    procedure Internal_Wire_To_Event  
                 (Display    :     X_Display;  
                  Raw        :     X_Raw_Data_Array;  
                  Send_Event :     Boolean;  
                  Event      : out X_Event;  
                  Status     : out X_Status) is
------------------------------------------------------------------------------
-- Takes a series of bytes that are known to represent an event and it converts
-- them to an X_Event suitable for processing by Ada code.
------------------------------------------------------------------------------
        Seq : U_Short;  
        Evx : X_Event (Kind => X_Event_Code'Val (Raw (Raw'First)));  
    begin

        Evx.Display    := Display;  
        Evx.Send_Event := Send_Event;  
        case Evx.Kind is

            when Key_Press =>  
                From_Raw (Evx.Key, Raw);  
                Evx.Window := Evx.Key.Window;  
                Seq        := Evx.Key.Sequence_Number;

            when Key_Release =>  
                From_Raw (Evx.Key, Raw);  
                Evx.Window := Evx.Key.Window;  
                Seq        := Evx.Key.Sequence_Number;

            when Button_Press =>  
                From_Raw (Evx.Button, Raw);  
                Evx.Window := Evx.Button.Window;  
                Seq        := Evx.Button.Sequence_Number;

            when Button_Release =>  
                From_Raw (Evx.Button, Raw);  
                Evx.Window := Evx.Button.Window;  
                Seq        := Evx.Button.Sequence_Number;

            when Motion_Notify =>  
                From_Raw (Evx.Motion, Raw);  
                Evx.Window := Evx.Motion.Window;  
                Seq        := Evx.Motion.Sequence_Number;

            when Enter_Notify =>  
                From_Raw (Evx.Enter_Leave, Raw);  
                Evx.Window := Evx.Enter_Leave.Window;  
                Seq        := Evx.Enter_Leave.Sequence_Number;

            when Leave_Notify =>  
                From_Raw (Evx.Enter_Leave, Raw);  
                Evx.Window := Evx.Enter_Leave.Window;  
                Seq        := Evx.Enter_Leave.Sequence_Number;

            when Focus_In =>  
                From_Raw (Evx.Focus, Raw);  
                Evx.Window := Evx.Focus.Event;  
                Seq        := Evx.Focus.Sequence_Number;

            when Focus_Out =>  
                From_Raw (Evx.Focus, Raw);  
                Evx.Window := Evx.Focus.Event;  
                Seq        := Evx.Focus.Sequence_Number;

            when Keymap_Notify =>  
                From_Raw (Evx.Keymap, Raw);  
                Evx.Window := Display.Current;  
                Seq        := 0;

            when Expose =>  
                From_Raw (Evx.Expose, Raw);  
                Evx.Window := Evx.Expose.Window;  
                Seq        := Evx.Expose.Sequence_Number;

            when Graphics_Expose =>  
                From_Raw (Evx.Graphics_Expose, Raw);  
                Evx.Window := (Drawable => Evx.Graphics_Expose.Drawable);  
                Seq        := Evx.Graphics_Expose.Sequence_Number;

            when No_Expose =>  
                From_Raw (Evx.No_Expose, Raw);  
                Evx.Window := (Drawable => Evx.No_Expose.Drawable);  
                Seq        := Evx.No_Expose.Sequence_Number;

            when Visibility_Notify =>  
                From_Raw (Evx.Visibility, Raw);  
                Evx.Window := Evx.Visibility.Window;  
                Seq        := Evx.Visibility.Sequence_Number;

            when Create_Notify =>  
                From_Raw (Evx.Create, Raw);  
                Evx.Window := Evx.Create.Parent;  
                Seq        := Evx.Create.Sequence_Number;

            when Destroy_Notify =>  
                From_Raw (Evx.Destroy, Raw);  
                Evx.Window := Evx.Destroy.Event;  
                Seq        := Evx.Destroy.Sequence_Number;

            when Unmap_Notify =>  
                From_Raw (Evx.Unmap, Raw);  
                Evx.Window := Evx.Unmap.Event;  
                Seq        := Evx.Unmap.Sequence_Number;

            when Map_Notify =>  
                From_Raw (Evx.Map, Raw);  
                Evx.Window := Evx.Map.Event;  
                Seq        := Evx.Map.Sequence_Number;

            when Map_Request =>  
                From_Raw (Evx.Map_Request, Raw);  
                Evx.Window := Evx.Map_Request.Parent;  
                Seq        := Evx.Map_Request.Sequence_Number;

            when Reparent_Notify =>  
                From_Raw (Evx.Reparent, Raw);  
                Evx.Window := Evx.Reparent.Event;  
                Seq        := Evx.Reparent.Sequence_Number;

            when Configure_Notify =>  
                From_Raw (Evx.Configure, Raw);  
                Evx.Window := Evx.Configure.Event;  
                Seq        := Evx.Configure.Sequence_Number;

            when Configure_Request =>  
                From_Raw (Evx.Configure_Request, Raw);  
                Evx.Window := Evx.Configure_Request.Parent;  
                Seq        := Evx.Configure_Request.Sequence_Number;

            when Gravity_Notify =>  
                From_Raw (Evx.Gravity, Raw);  
                Evx.Window := Evx.Gravity.Event;  
                Seq        := Evx.Gravity.Sequence_Number;

            when Resize_Request =>  
                From_Raw (Evx.Resize_Request, Raw);  
                Evx.Window := Evx.Resize_Request.Window;  
                Seq        := Evx.Resize_Request.Sequence_Number;

            when Circulate_Notify =>  
                From_Raw (Evx.Circulate, Raw);  
                Evx.Window := Evx.Circulate.Event;  
                Seq        := Evx.Circulate.Sequence_Number;

            when Circulate_Request =>  
                From_Raw (Evx.Circulate_Request, Raw);  
                Evx.Window := Evx.Circulate_Request.Parent;                 Seq        := Evx.Circulate_Request.Sequence_Number;

            when Property_Notify =>  
                From_Raw (Evx.Property, Raw);  
                Evx.Window := Evx.Property.Window;  
                Seq        := Evx.Property.Sequence_Number;

            when Selection_Clear =>  
                From_Raw (Evx.Selection_Clear, Raw);  
                Evx.Window := Evx.Selection_Clear.Owner;  
                Seq        := Evx.Selection_Clear.Sequence_Number;

            when Selection_Notify =>  
                From_Raw (Evx.Selection, Raw);  
                Evx.Window := Evx.Selection.Requestor;  
                Seq        := Evx.Selection.Sequence_Number;

            when Selection_Request =>  
                From_Raw (Evx.Selection_Request, Raw);  
                Evx.Window := Evx.Selection_Request.Owner;  
                Seq        := Evx.Selection_Request.Sequence_Number;

            when Colormap_Notify =>  
                From_Raw (Evx.Colormap, Raw);  
                Evx.Window := Evx.Colormap.Window;  
                Seq        := Evx.Colormap.Sequence_Number;

            when Client_Message =>  
                From_Raw (Evx.Client, Raw);  
                Evx.Window := Evx.Client.Window;  
                Seq        := Evx.Client.Sequence_Number;

            when Mapping_Notify =>  
                From_Raw (Evx.Mapping, Raw);  
                Evx.Window := None_X_Window;  
                Seq        := Evx.Mapping.Sequence_Number;

            when others =>
                ----Should not happen.  Means we have a new Event type and
                --  we were not told.  Since we are the one and only place
                --  where events are created from Raw this means that
                --  somebody has slipped up; or else we're working with
                --  a malfunctioning or a too-new version server.

                Default_X_Unknown_Wire_Event  
                   (Display, Raw, Send_Event, Event, Status);  
                raise X_Library_Confusion;  
        end case;  
        Status := Successful;

----Set the proper serial number.

        Evx.Serial := Internal_X_Set_Last_Request_Read (Display,  
                                                        Evx.Kind,  
                                                        Seq);  
        Event      := Evx;

    exception  
        when others =>  
            Status := Failed;  
            raise;

    end Internal_Wire_To_Event;

--\x0c
    procedure Internal_Wire_To_Reply  
                 (Code       :     X_Request_Code;  
                  Raw        :     X_Raw_Data_Array;  
                  Send_Event :     Boolean;  
                  Reply      : out X_Reply_Contents;  
                  Length     : out S_Natural) is
------------------------------------------------------------------------------
-- Takes a series of bytes that are known to represent a reply and it converts
-- them to an X_Reply_Contents suitable for processing by Ada code.
------------------------------------------------------------------------------
        Repx : X_Reply_Contents (Kind => Code);  
    begin

        Repx.Send_Event := Send_Event;  
        case Code is

            when Alloc_Color =>  
                From_Raw (Repx.Alloc_Color, Raw);  
                Length := S_Natural (Repx.Alloc_Color.Length);

            when Alloc_Color_Cells =>  
                From_Raw (Repx.Alloc_Color_Cells, Raw);  
                Length := S_Natural (Repx.Alloc_Color_Cells.Length);

            when Alloc_Color_Planes =>  
                From_Raw (Repx.Alloc_Color_Planes, Raw);  
                Length := S_Natural (Repx.Alloc_Color_Planes.Length);

            when Alloc_Named_Color =>  
                From_Raw (Repx.Alloc_Named_Color, Raw);  
                Length := S_Natural (Repx.Alloc_Named_Color.Length);

            when Get_Atom_Name =>  
                From_Raw (Repx.Get_Atom_Name, Raw);  
                Length := S_Natural (Repx.Get_Atom_Name.Length);

            when Get_Font_Path =>  
                From_Raw (Repx.Get_Font_Path, Raw);  
                Length := S_Natural (Repx.Get_Font_Path.Length);

            when Get_Geometry =>  
                From_Raw (Repx.Get_Geometry, Raw);  
                Length := S_Natural (Repx.Get_Geometry.Length);

            when Get_Image =>  
                From_Raw (Repx.Get_Image, Raw);  
                Length := S_Natural (Repx.Get_Image.Length);

            when Get_Input_Focus =>  
                From_Raw (Repx.Get_Input_Focus, Raw);  
                Length := S_Natural (Repx.Get_Input_Focus.Length);

            when Get_Keyboard_Control =>  
                From_Raw (Repx.Get_Keyboard_Control, Raw);  
                Length := S_Natural (Repx.Get_Keyboard_Control.Length);

            when Get_Keyboard_Mapping =>  
                From_Raw (Repx.Get_Keyboard_Mapping, Raw);  
                Length := S_Natural (Repx.Get_Keyboard_Mapping.Length);

            when Get_Modifier_Mapping =>  
                From_Raw (Repx.Get_Modifier_Mapping, Raw);  
                Length := S_Natural (Repx.Get_Modifier_Mapping.Length);

            when Get_Motion_Events =>  
                From_Raw (Repx.Get_Motion_Events, Raw);  
                Length := S_Natural (Repx.Get_Motion_Events.Length);

            when Get_Pointer_Control =>  
                From_Raw (Repx.Get_Pointer_Control, Raw);  
                Length := S_Natural (Repx.Get_Pointer_Control.Length);

            when Get_Pointer_Mapping =>  
                From_Raw (Repx.Get_Pointer_Mapping, Raw);  
                Length := S_Natural (Repx.Get_Pointer_Mapping.Length);

            when Get_Property =>  
                From_Raw (Repx.Get_Property, Raw);  
                Length := S_Natural (Repx.Get_Property.Length);

            when Get_Screen_Saver =>  
                From_Raw (Repx.Get_Screen_Saver, Raw);  
                Length := S_Natural (Repx.Get_Screen_Saver.Length);

            when Get_Selection_Owner =>  
                From_Raw (Repx.Get_Selection_Owner, Raw);  
                Length := S_Natural (Repx.Get_Selection_Owner.Length);

            when Get_Window_Attributes =>  
                From_Raw (Repx.Get_Window_Attributes, Raw);  
                Length := S_Natural (Repx.Get_Window_Attributes.Length);

            when Grab_Keyboard =>  
                From_Raw (Repx.Grab_Keyboard, Raw);  
                Length := S_Natural (Repx.Grab_Keyboard.Length);

            when Grab_Pointer =>  
                From_Raw (Repx.Grab_Pointer, Raw);  
                Length := S_Natural (Repx.Grab_Pointer.Length);

            when Intern_Atom =>  
                From_Raw (Repx.Intern_Atom, Raw);  
                Length := S_Natural (Repx.Intern_Atom.Length);

            when List_Extensions =>  
                From_Raw (Repx.List_Extensions, Raw);  
                Length := S_Natural (Repx.List_Extensions.Length);

            when List_Fonts =>  
                From_Raw (Repx.List_Fonts, Raw);  
                Length := S_Natural (Repx.List_Fonts.Length);

            when List_Fonts_With_Info =>  
                From_Raw (Repx.List_Fonts_With_Info, Raw);  
                Length := S_Natural (Repx.List_Fonts_With_Info.Length);

            when List_Hosts =>  
                From_Raw (Repx.List_Hosts, Raw);  
                Length := S_Natural (Repx.List_Hosts.Length);

            when List_Installed_Colormaps =>  
                From_Raw (Repx.List_Installed_Colormaps, Raw);  
                Length := S_Natural (Repx.List_Installed_Colormaps.Length);

            when List_Properties =>  
                From_Raw (Repx.List_Properties, Raw);  
                Length := S_Natural (Repx.List_Properties.Length);

            when Lookup_Color =>  
                From_Raw (Repx.Lookup_Color, Raw);  
                Length := S_Natural (Repx.Lookup_Color.Length);

            when Query_Best_Size =>  
                From_Raw (Repx.Query_Best_Size, Raw);  
                Length := S_Natural (Repx.Query_Best_Size.Length);

            when Query_Colors =>  
                From_Raw (Repx.Query_Colors, Raw);  
                Length := S_Natural (Repx.Query_Colors.Length);

            when Query_Extension =>  
                From_Raw (Repx.Query_Extension, Raw);  
                Length := S_Natural (Repx.Query_Extension.Length);

            when Query_Font =>  
                From_Raw (Repx.Query_Font, Raw);  
                Length := S_Natural (Repx.Query_Font.Length);

            when Query_Keymap =>  
                From_Raw (Repx.Query_Keymap, Raw);  
                Length := S_Natural (Repx.Query_Keymap.Length);

            when Query_Pointer =>  
                From_Raw (Repx.Query_Pointer, Raw);  
                Length := S_Natural (Repx.Query_Pointer.Length);

            when Query_Text_Extents =>  
                From_Raw (Repx.Query_Text_Extents, Raw);  
                Length := S_Natural (Repx.Query_Text_Extents.Length);

            when Query_Tree =>  
                From_Raw (Repx.Query_Tree, Raw);  
                Length := S_Natural (Repx.Query_Tree.Length);

            when Set_Modifier_Mapping =>  
                From_Raw (Repx.Set_Modifier_Mapping, Raw);  
                Length := S_Natural (Repx.Set_Modifier_Mapping.Length);

            when Set_Pointer_Mapping =>  
                From_Raw (Repx.Set_Pointer_Mapping, Raw);  
                Length := S_Natural (Repx.Set_Pointer_Mapping.Length);

            when Translate_Coords =>  
                From_Raw (Repx.Translate_Coords, Raw);  
                Length := S_Natural (Repx.Translate_Coords.Length);

            when others =>
                ----Should not happen.  Means we have a new Reply type and
                --  we were not told.  Since we are the one and only place
                --  where replies are created from Raw this means that
                --  somebody has slipped up; or else we're working with
                --  a malfunctioning or a too-new version server.

                X_Report_Error  
                   ("XlibError", "NoNativeReply",  
                    "Xlib; Unhandled wire reply  .Kind=%1 .Display=%2.",  
                    To_X_String (X_Request_Code'Image (Repx.Kind)));  
                raise X_Library_Confusion;  
        end case;

        Reply := Repx;

    end Internal_Wire_To_Reply;

--\x0c
    procedure Internal_Event_To_Wire  
                 (Display :     X_Display;  
                  Event   :     X_Event;  
                  Raw     : out X_Raw_Data_Array;  
                  Status  : out X_Status) is
------------------------------------------------------------------------------
-- Takes a series of Raw that are known to represent an event and it converts
-- them to an X_Event suitable for processing by Ada code.
------------------------------------------------------------------------------
    begin

        case Event.Kind is

            when Key_Press | Key_Release =>  
                To_Raw (Raw, Event.Key);

            when Button_Press | Button_Release =>  
                To_Raw (Raw, Event.Button);

            when Motion_Notify =>  
                To_Raw (Raw, Event.Motion);

            when Enter_Notify | Leave_Notify =>  
                To_Raw (Raw, Event.Enter_Leave);

            when Focus_In | Focus_Out =>  
                To_Raw (Raw, Event.Focus);

            when Keymap_Notify =>  
                To_Raw (Raw, Event.Keymap);

            when Expose =>  
                To_Raw (Raw, Event.Expose);

            when Graphics_Expose =>  
                To_Raw (Raw, Event.Graphics_Expose);

            when No_Expose =>  
                To_Raw (Raw, Event.No_Expose);

            when Visibility_Notify =>  
                To_Raw (Raw, Event.Visibility);

            when Create_Notify =>  
                To_Raw (Raw, Event.Create);

            when Destroy_Notify =>  
                To_Raw (Raw, Event.Destroy);

            when Unmap_Notify =>  
                To_Raw (Raw, Event.Unmap);

            when Map_Notify =>  
                To_Raw (Raw, Event.Map);

            when Map_Request =>  
                To_Raw (Raw, Event.Map_Request);

            when Reparent_Notify =>  
                To_Raw (Raw, Event.Reparent);

            when Configure_Notify =>  
                To_Raw (Raw, Event.Configure);

            when Configure_Request =>  
                To_Raw (Raw, Event.Configure_Request);

            when Gravity_Notify =>  
                To_Raw (Raw, Event.Gravity);

            when Resize_Request =>  
                To_Raw (Raw, Event.Resize_Request);

            when Circulate_Notify =>  
                To_Raw (Raw, Event.Circulate);

            when Circulate_Request =>  
                To_Raw (Raw, Event.Circulate_Request);

            when Property_Notify =>  
                To_Raw (Raw, Event.Property);

            when Selection_Clear =>  
                To_Raw (Raw, Event.Selection_Clear);

            when Selection_Notify =>  
                To_Raw (Raw, Event.Selection);

            when Selection_Request =>  
                To_Raw (Raw, Event.Selection_Request);

            when Colormap_Notify =>  
                To_Raw (Raw, Event.Colormap);

            when Client_Message =>  
                To_Raw (Raw, Event.Client);

            when Mapping_Notify =>  
                To_Raw (Raw, Event.Mapping);

            when others =>
                ----Should not happen.  Means we have a new Event type and
                --  we were not told.  Since we are the one and only place
                --  where events are created from Raw this means that
                --  somebody has slipped up; or else we're working with
                --  a malfunctioning or a too-new version server.

                Default_X_Unknown_Native_Event (Display, Event, Raw, Status);  
                raise X_Library_Confusion;  
        end case;  
        Status := Successful;

    exception  
        when others =>  
            Status := Failed;  
            raise;

    end Internal_Event_To_Wire;

--\x0c
end Xlbip_Wire_Converters;  

E3 Meta Data

    nblk1=23
    nid=0
    hdr6=46
        [0x00] rec0=28 rec1=00 rec2=01 rec3=072
        [0x01] rec0=12 rec1=00 rec2=02 rec3=02c
        [0x02] rec0=13 rec1=00 rec2=03 rec3=032
        [0x03] rec0=1e rec1=00 rec2=04 rec3=036
        [0x04] rec0=15 rec1=00 rec2=05 rec3=066
        [0x05] rec0=1a rec1=00 rec2=06 rec3=030
        [0x06] rec0=00 rec1=00 rec2=23 rec3=00a
        [0x07] rec0=19 rec1=00 rec2=1c rec3=062
        [0x08] rec0=01 rec1=00 rec2=07 rec3=048
        [0x09] rec0=1b rec1=00 rec2=08 rec3=018
        [0x0a] rec0=01 rec1=00 rec2=22 rec3=00e
        [0x0b] rec0=16 rec1=00 rec2=09 rec3=042
        [0x0c] rec0=02 rec1=00 rec2=21 rec3=008
        [0x0d] rec0=18 rec1=00 rec2=0a rec3=000
        [0x0e] rec0=01 rec1=00 rec2=20 rec3=042
        [0x0f] rec0=17 rec1=00 rec2=0b rec3=002
        [0x10] rec0=00 rec1=00 rec2=1f rec3=046
        [0x11] rec0=17 rec1=00 rec2=0c rec3=058
        [0x12] rec0=01 rec1=00 rec2=1e rec3=02c
        [0x13] rec0=15 rec1=00 rec2=0d rec3=07e
        [0x14] rec0=01 rec1=00 rec2=1d rec3=02a
        [0x15] rec0=1b rec1=00 rec2=0e rec3=052
        [0x16] rec0=00 rec1=00 rec2=1b rec3=00a
        [0x17] rec0=19 rec1=00 rec2=0f rec3=062
        [0x18] rec0=18 rec1=00 rec2=10 rec3=078
        [0x19] rec0=18 rec1=00 rec2=11 rec3=01a
        [0x1a] rec0=18 rec1=00 rec2=12 rec3=00a
        [0x1b] rec0=17 rec1=00 rec2=13 rec3=03c
        [0x1c] rec0=19 rec1=00 rec2=14 rec3=03e
        [0x1d] rec0=18 rec1=00 rec2=15 rec3=026
        [0x1e] rec0=17 rec1=00 rec2=16 rec3=064
        [0x1f] rec0=1e rec1=00 rec2=17 rec3=036
        [0x20] rec0=22 rec1=00 rec2=18 rec3=000
        [0x21] rec0=20 rec1=00 rec2=19 rec3=05a
        [0x22] rec0=14 rec1=00 rec2=1a rec3=000
    tail 0x215009590819780ebec8f 0x42a00088462063203