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

⟦5885b9e1c⟧ Ada Source

    Length: 37888 (0x9400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package Xlbt_Basic, seg_004f9b

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 Xlbt_Arithmetic;  
use Xlbt_Arithmetic;  
with Xlbt_Basic3;  
with Xlbt_Display3;  
with Xlbt_Gc3;  
with Xlbt_String;  
use Xlbt_String;

package Xlbt_Basic is
------------------------------------------------------------------------------
-- X Library Basic Types - Normal User Interface
--
-- Xlbt_Basic - Types are declared here because they are the basic types used
-- when working with the X Library.
------------------------------------------------------------------------------
-- Copyright 1989 - 1991 by Rational, Santa Clara, California.
-- Copyright 1985 - 1989 by the Massachusetts Institute of Technology
--
--                  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 names of MIT or Rational not be
-- used in advertising or publicity pertaining to distribution of the software
-- without specific, written prior permission.
--
-- MIT and Rational disclaim all warranties with regard to this software,
-- including all implied warranties of merchantability and fitness, in no
-- event shall MIT or 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
    package B3 renames Xlbt_Basic3;  
    package D3 renames Xlbt_Display3;  
    package G3 renames Xlbt_Gc3;

------------------------------------------------------------------------------
-- X_Atom - a blob used to refer to a string whose contents are known mutually
--          between us and the server; shorter and easier to use than the string.
--
--  None_X_Atom         - No atom in particular
--  Any_Property_Type   - Special Atom, passed to X_Get_Window_Property.
------------------------------------------------------------------------------

    subtype X_Atom       is B3.X_Atom;  
    subtype X_Atom_Array is B3.X_Atom_Array;  
    subtype X_Atom_List  is B3.X_Atom_List;

    None_X_Atom       : X_Atom      renames B3.None_X_Atom;  
    None_X_Atom_List  : X_Atom_List renames B3.None_X_Atom_List;  
    Any_Property_Type : X_Atom      renames B3.Any_Property_Type;

    function "=" (A, B : X_Atom)      return Boolean renames B3."=";  
    function "=" (A, B : X_Atom_List) return Boolean renames B3."=";

    procedure Free_X_Atom_List (List : in out X_Atom_List)  
        renames B3.Free_X_Atom_List;

------------------------------------------------------------------------------
-- X_Colormap
------------------------------------------------------------------------------

    subtype X_Colormap       is B3.X_Colormap;  
    subtype X_Colormap_Array is B3.X_Colormap_Array;  
    subtype X_Colormap_List  is B3.X_Colormap_List;

    None_X_Colormap           : X_Colormap renames B3.None_X_Colormap;  
    None_X_Colormap_List      : X_Colormap_List renames B3.None_X_Colormap_List;  
    Copy_From_Parent_Colormap : X_Colormap renames B3.Copy_From_Parent_Colormap;

    function "=" (A, B : X_Colormap)      return Boolean renames B3."=";  
    function "=" (A, B : X_Colormap_List) return Boolean renames B3."=";

    procedure Free_X_Colormap_List (List : in out X_Colormap_List)  
        renames B3.Free_X_Colormap_List;

------------------------------------------------------------------------------
-- X_Cursor
------------------------------------------------------------------------------

    subtype X_Cursor is B3.X_Cursor;

    None_X_Cursor : X_Cursor renames B3.None_X_Cursor;

    function "=" (A, B : X_Cursor) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_Drawable
------------------------------------------------------------------------------

    subtype X_Drawable is B3.X_Drawable;

    None_X_Drawable : X_Drawable renames B3.None_X_Drawable;

    function "=" (A, B : X_Drawable) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_Display
------------------------------------------------------------------------------

    subtype X_Display is D3.X_Display;

    None_X_Display : X_Display renames D3.None_X_Display;

    function "=" (A, B : X_Display) return Boolean renames D3."=";

------------------------------------------------------------------------------
-- X_Display_Number - simple index to the N'th display of a library
------------------------------------------------------------------------------

    subtype X_Display_Number is B3.X_Display_Number;

    None_X_Display_Number : X_Display_Number renames B3.None_X_Display_Number;

    function "="  (A, B : X_Display_Number) return Boolean renames B3."=";  
    function ">"  (A, B : X_Display_Number) return Boolean renames B3.">";  
    function ">=" (A, B : X_Display_Number) return Boolean renames B3.">=";  
    function "<"  (A, B : X_Display_Number) return Boolean renames B3."<";  
    function "<=" (A, B : X_Display_Number) return Boolean renames B3."<=";

    function "+" (A, B : X_Display_Number) return X_Display_Number  
        renames B3."+";  
    function "-" (A, B : X_Display_Number) return X_Display_Number  
        renames B3."-";  
    function "-" (A : X_Display_Number) return X_Display_Number renames B3."-";

------------------------------------------------------------------------------
-- X_Error_String - Error Reporting Strings
------------------------------------------------------------------------------

    subtype X_Error_String is D3.X_Error_String;
    ----We return an indication of errors via strings of this type.

    procedure Err (Destination : out X_Error_String;  
                   Source      :     X_String) renames D3.Err;
    ----We use this routine to assign error strings.

    function Err (Source : X_Error_String) return X_String renames D3.Err;
    ----We use this function to read out error strings.

------------------------------------------------------------------------------
-- X_Event_Mask - Input Event Masks.  Used as event-mask window attribute and
--                as arguments to Grab requests.  Not to be confused with event
--                names.
--
--      Owner_Grab_Button_Mask
--      Colormap_Change_Mask
--      Property_Change_Mask
--      Focus_Change_Mask
--      Substructure_Redirect_Mask
--      Substructure_Notify_Mask
--      Resize_Redirect_Mask
--      Structure_Notify_Mask
--      Visibility_Change_Mask
--      Exposure_Mask
--      Keymap_State_Mask
--      Button_Motion_Mask
--      Button_5_Motion_Mask
--      Button_4_Motion_Mask
--      Button_3_Motion_Mask
--      Button_2_Motion_Mask
--      Button_1_Motion_Mask
--      Pointer_Motion_Hint_Mask
--      Pointer_Motion_Mask
--      Leave_Window_Mask
--      Enter_Window_Mask
--      Button_Release_Mask
--      Button_Press_Mask
--      Key_Release_Mask
--      Key_Press_Mask
------------------------------------------------------------------------------

    subtype X_Event_Mask_Index is B3.X_Event_Mask_Index;

    subtype Xemi is X_Event_Mask_Index;

    Owner_Grab_Button_Mask     : constant Xemi := B3.Owner_Grab_Button_Mask;  
    Colormap_Change_Mask       : constant Xemi := B3.Colormap_Change_Mask;  
    Property_Change_Mask       : constant Xemi := B3.Property_Change_Mask;  
    Focus_Change_Mask          : constant Xemi := B3.Focus_Change_Mask;  
    Substructure_Redirect_Mask : constant Xemi := B3.Substructure_Redirect_Mask;  
    Substructure_Notify_Mask   : constant Xemi := B3.Substructure_Notify_Mask;  
    Resize_Redirect_Mask       : constant Xemi := B3.Resize_Redirect_Mask;  
    Structure_Notify_Mask      : constant Xemi := B3.Structure_Notify_Mask;  
    Visibility_Change_Mask     : constant Xemi := B3.Visibility_Change_Mask;  
    Exposure_Mask              : constant Xemi := B3.Exposure_Mask;  
    Keymap_State_Mask          : constant Xemi := B3.Keymap_State_Mask;  
    Button_Motion_Mask         : constant Xemi := B3.Button_Motion_Mask;  
    Button_5_Motion_Mask       : constant Xemi := B3.Button_5_Motion_Mask;  
    Button_4_Motion_Mask       : constant Xemi := B3.Button_4_Motion_Mask;  
    Button_3_Motion_Mask       : constant Xemi := B3.Button_3_Motion_Mask;  
    Button_2_Motion_Mask       : constant Xemi := B3.Button_2_Motion_Mask;  
    Button_1_Motion_Mask       : constant Xemi := B3.Button_1_Motion_Mask;  
    Pointer_Motion_Hint_Mask   : constant Xemi := B3.Pointer_Motion_Hint_Mask;  
    Pointer_Motion_Mask        : constant Xemi := B3.Pointer_Motion_Mask;  
    Leave_Window_Mask          : constant Xemi := B3.Leave_Window_Mask;  
    Enter_Window_Mask          : constant Xemi := B3.Enter_Window_Mask;  
    Button_Release_Mask        : constant Xemi := B3.Button_Release_Mask;  
    Button_Press_Mask          : constant Xemi := B3.Button_Press_Mask;  
    Key_Release_Mask           : constant Xemi := B3.Key_Release_Mask;  
    Key_Press_Mask             : constant Xemi := B3.Key_Press_Mask;

    subtype X_Event_Mask is B3.X_Event_Mask;

    None_X_Event_Mask : X_Event_Mask renames B3.None_X_Event_Mask;

    All_Pointers   : X_Event_Mask renames B3.All_Pointers;  
    All_Buttons    : X_Event_Mask renames B3.All_Buttons;  
    All_Event_Mask : X_Event_Mask renames B3.All_Event_Mask;

    function "="   (A, B : Xemi)         return Boolean      renames B3."=";  
    function "="   (A, B : X_Event_Mask) return Boolean      renames B3."=";  
    function "and" (A, B : X_Event_Mask) return X_Event_Mask renames B3."and";  
    function "or"  (A, B : X_Event_Mask) return X_Event_Mask renames B3."or";  
    function "xor" (A, B : X_Event_Mask) return X_Event_Mask renames B3."xor";  
    function "not" (A : X_Event_Mask)    return X_Event_Mask renames B3."not";


------------------------------------------------------------------------------
-- Events queues - Events are queued within a display until they are requested
--
-- A queued Event always has an Event.Kind to uniquely identify what kind of
-- event it is.  The Display entry is always a pointer to the display the event
-- was read from.  The Window entry is nearly always a window of one type or
-- another, carefully selected to be useful to toolkit dispatchers.
------------------------------------------------------------------------------

    subtype X_Event is D3.X_Event;
--
    None_X_Event : X_Event renames D3.None_X_Event;

------------------------------------------------------------------------------
-- X_Font
------------------------------------------------------------------------------

    subtype X_Font is B3.X_Font;

    None_X_Font : X_Font renames B3.None_X_Font;

    Font_Change : constant := B3.Font_Change;

    function "=" (A, B : X_Font) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_G_Context
------------------------------------------------------------------------------

    subtype X_G_Context is B3.X_G_Context;

    None_X_G_Context : X_G_Context renames B3.None_X_G_Context;

    function "=" (A, B : X_G_Context) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_Gc - Graphics context.  All Xlib routines deal in this rather than
-- in raw protocol Graphic Context ID's.  This is so that the library can keep
-- a "shadow" set of values, and thus avoid passing values over the
-- wire which are not in fact changing.
------------------------------------------------------------------------------

    subtype X_Gc is G3.X_Gc;

    None_X_Gc : X_Gc renames G3.None_X_Gc;

    function "=" (A, B : X_Gc) return Boolean renames G3."=";

------------------------------------------------------------------------------
-- X's Resource Type
------------------------------------------------------------------------------

    subtype X_Id is B3.X_Id;

    None_X_Id : X_Id renames B3.None_X_Id;
    ----Special value indicating no-id-specified

    All_Temporary : X_Id renames B3.All_Temporary;
    ----Special Resource ID passed to X_Kill_Client

    Release_By_Freeing_Colormap : X_Id renames B3.Release_By_Freeing_Colormap;
    ----Special Resource ID used in X_Standard_Colormap.Kill_Id.

    function "=" (A, B : X_Id) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_Pixel - encodes what a Pixel is
------------------------------------------------------------------------------

    subtype X_Pixel       is B3.X_Pixel;  
    subtype X_Pixel_Array is B3.X_Pixel_Array;  
    subtype X_Pixel_List  is B3.X_Pixel_List;

    None_X_Pixel      : X_Pixel      renames B3.None_X_Pixel;  
    None_X_Pixel_List : X_Pixel_List renames B3.None_X_Pixel_List;

    function "=" (A, B : X_Pixel)      return Boolean renames B3."=";  
    function "=" (A, B : X_Pixel_List) return Boolean renames B3."=";

    function ">"  (A, B : X_Pixel) return Boolean renames B3.">";  
    function ">=" (A, B : X_Pixel) return Boolean renames B3.">=";  
    function "<"  (A, B : X_Pixel) return Boolean renames B3."<";  
    function "<=" (A, B : X_Pixel) return Boolean renames B3."<=";

    function "+"   (A, B : X_Pixel) return X_Pixel renames B3."+";  
    function "-"   (A : X_Pixel)    return X_Pixel renames B3."-";  
    function "-"   (A, B : X_Pixel) return X_Pixel renames B3."-";  
    function "*"   (A, B : X_Pixel) return X_Pixel renames B3."*";  
    function "/"   (A, B : X_Pixel) return X_Pixel renames B3."/";  
    function "rem" (A, B : X_Pixel) return X_Pixel renames B3."rem";  
    function "not" (A : X_Pixel)    return X_Pixel renames B3."not";  
    function "and" (A, B : X_Pixel) return X_Pixel renames B3."and";  
    function "or"  (A, B : X_Pixel) return X_Pixel renames B3."or";  
    function "xor" (A, B : X_Pixel) return X_Pixel renames B3."xor";  
    function Shift (A : X_Pixel;  
                    B : Integer)    return X_Pixel renames B3.Shift;

    procedure Free_X_Pixel_List (List : in out X_Pixel_List)  
        renames B3.Free_X_Pixel_List;

------------------------------------------------------------------------------
-- X_Pixmap
------------------------------------------------------------------------------

    subtype X_Pixmap is B3.X_Pixmap;

    None_X_Pixmap : X_Pixmap renames B3.None_X_Pixmap;

    Copy_From_Parent_Pixmap : X_Pixmap renames B3.Copy_From_Parent_Pixmap;
    ----Border pixmap in X_Create_Window and X_Change_Window_Attributes

    Parent_Relative : X_Pixmap renames B3.Parent_Relative;
    ----Background pixmap in X_Create_Window and X_Change_Window_Attributes

    function "=" (A, B : X_Pixmap) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_Plane_Mask - used to indicate the display planes affected by an operation
--
--  No_Planes   - No planes at all; all 0's
--  All_Planes  - All planes; all 1's
------------------------------------------------------------------------------

    subtype X_Plane_Mask       is B3.X_Plane_Mask;  
    subtype X_Plane_Mask_Array is B3.X_Plane_Mask_Array;  
    subtype X_Plane_Mask_List  is B3.X_Plane_Mask_List;

    None_X_Plane_Mask      : X_Plane_Mask renames B3.None_X_Plane_Mask;  
    None_X_Plane_Mask_List : X_Plane_Mask_List  
        renames B3.None_X_Plane_Mask_List;  
    No_Planes              : X_Plane_Mask renames B3.No_Planes;  
    All_Planes             : X_Plane_Mask renames B3.All_Planes;

    function "="  (A, B : X_Plane_Mask) return Boolean renames B3."=";  
    function ">"  (A, B : X_Plane_Mask) return Boolean renames B3.">";  
    function ">=" (A, B : X_Plane_Mask) return Boolean renames B3.">=";  
    function "<"  (A, B : X_Plane_Mask) return Boolean renames B3."<";  
    function "<=" (A, B : X_Plane_Mask) return Boolean renames B3."<=";

    function "+"   (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."+";  
    function "-"   (A : X_Plane_Mask)    return X_Plane_Mask renames B3."-";  
    function "-"   (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."-";  
    function "*"   (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."*";  
    function "/"   (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."/";  
    function "rem" (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."rem";  
    function "not" (A : X_Plane_Mask)    return X_Plane_Mask renames B3."not";  
    function "and" (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."and";     function "or"  (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."or";  
    function "xor" (A, B : X_Plane_Mask) return X_Plane_Mask renames B3."xor";  
    function Shift (A : X_Plane_Mask;  
                    B : Integer)         return X_Plane_Mask renames B3.Shift;

    procedure Free_X_Plane_Mask_List (List : in out X_Plane_Mask_List)  
        renames B3.Free_X_Plane_Mask_List;

------------------------------------------------------------------------------
-- X_Screen
------------------------------------------------------------------------------

    subtype X_Screen is D3.X_Screen;

    None_X_Screen : X_Screen renames D3.None_X_Screen;

    function "=" (A, B : X_Screen) return Boolean renames D3."=";

------------------------------------------------------------------------------
-- X_Screen_Number - simple index to the N'th screen of the display
------------------------------------------------------------------------------

    subtype X_Screen_Number is B3.X_Screen_Number;

    None_X_Screen_Number : X_Screen_Number renames B3.None_X_Screen_Number;

    function "="  (A, B : X_Screen_Number) return Boolean renames B3."=";  
    function ">"  (A, B : X_Screen_Number) return Boolean renames B3.">";  
    function ">=" (A, B : X_Screen_Number) return Boolean renames B3.">=";  
    function "<"  (A, B : X_Screen_Number) return Boolean renames B3."<";  
    function "<=" (A, B : X_Screen_Number) return Boolean renames B3."<=";

    function "+" (A, B : X_Screen_Number) return X_Screen_Number renames B3."+";  
    function "-" (A, B : X_Screen_Number) return X_Screen_Number renames B3."-";  
    function "-" (A : X_Screen_Number)    return X_Screen_Number renames B3."-";

------------------------------------------------------------------------------
-- Status for Procedure returns
--
--      Failed      - Operation did not succeed/work/complete
--      Successful  - Operation completed/worked
------------------------------------------------------------------------------

    subtype X_Status is B3.X_Status;

    Failed     : constant X_Status := B3.Failed;  
    Successful : constant X_Status := B3.Successful;

    function "=" (A, B : X_Status) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_Time - it is important to be able to do arithmetic with these
------------------------------------------------------------------------------

    subtype X_Time is B3.X_Time;

    Current_Time : X_Time renames B3.Current_Time;  
    None_X_Time  : X_Time renames B3.None_X_Time;

    function "="  (A, B : X_Time) return Boolean renames B3."=";  
    function "<"  (A, B : X_Time) return Boolean renames B3."<";  
    function "<=" (A, B : X_Time) return Boolean renames B3."<=";  
    function ">"  (A, B : X_Time) return Boolean renames B3.">";  
    function ">=" (A, B : X_Time) return Boolean renames B3.">=";

    function "+"   (A, B : X_Time) return X_Time renames B3."+";  
    function "-"   (A : X_Time)    return X_Time renames B3."-";  
    function "-"   (A, B : X_Time) return X_Time renames B3."-";  
    function "*"   (A, B : X_Time) return X_Time renames B3."*";  
    function "/"   (A, B : X_Time) return X_Time renames B3."/";  
    function "rem" (A, B : X_Time) return X_Time renames B3."rem";

------------------------------------------------------------------------------
-- X_Visual_Id
------------------------------------------------------------------------------

    subtype X_Visual_Id is B3.X_Visual_Id;

    None_X_Visual_Id : X_Visual_Id renames B3.None_X_Visual_Id;

    Copy_From_Parent_Visual_Id : X_Visual_Id  
        renames B3.Copy_From_Parent_Visual_Id;

    function "=" (A, B : X_Visual_Id) return Boolean renames B3."=";

------------------------------------------------------------------------------
-- X_Window
--
--  Input_Focus     - Destination window in X_Send_Event
--  Pointer_Window  - Destination window in X_Send_Event
--  Pointer_Root    - Focus window in X_Set_Input_Focus
------------------------------------------------------------------------------

    subtype X_Window       is B3.X_Window;  
    subtype X_Window_Array is B3.X_Window_Array;  
    subtype X_Window_List  is B3.X_Window_List;

    None_X_Window      : X_Window      renames B3.None_X_Window;  
    None_X_Window_List : X_Window_List renames B3.None_X_Window_List;  
    Input_Focus        : X_Window      renames B3.Input_Focus;  
    Pointer_Root       : X_Window      renames B3.Pointer_Root;  
    Pointer_Window     : X_Window      renames B3.Pointer_Window;

    function "=" (A, B : X_Window)      return Boolean renames B3."=";  
    function "=" (A, B : X_Window_List) return Boolean renames B3."=";

    procedure Free_X_Window_List (List : in out X_Window_List)  
        renames B3.Free_X_Window_List;

end Xlbt_Basic;  

E3 Meta Data

    nblk1=24
    nid=0
    hdr6=48
        [0x00] rec0=1a rec1=00 rec2=01 rec3=010
        [0x01] rec0=13 rec1=00 rec2=02 rec3=04a
        [0x02] rec0=15 rec1=00 rec2=03 rec3=09c
        [0x03] rec0=02 rec1=00 rec2=24 rec3=014
        [0x04] rec0=16 rec1=00 rec2=04 rec3=04e
        [0x05] rec0=02 rec1=00 rec2=23 rec3=00c
        [0x06] rec0=18 rec1=00 rec2=05 rec3=098
        [0x07] rec0=14 rec1=00 rec2=06 rec3=076
        [0x08] rec0=00 rec1=00 rec2=22 rec3=006
        [0x09] rec0=19 rec1=00 rec2=07 rec3=028
        [0x0a] rec0=1b rec1=00 rec2=08 rec3=03e
        [0x0b] rec0=00 rec1=00 rec2=21 rec3=032
        [0x0c] rec0=0d rec1=00 rec2=09 rec3=05a
        [0x0d] rec0=01 rec1=00 rec2=20 rec3=060
        [0x0e] rec0=12 rec1=00 rec2=0a rec3=072
        [0x0f] rec0=01 rec1=00 rec2=1f rec3=06a
        [0x10] rec0=14 rec1=00 rec2=1e rec3=082
        [0x11] rec0=00 rec1=00 rec2=0b rec3=010
        [0x12] rec0=19 rec1=00 rec2=0c rec3=092
        [0x13] rec0=1d rec1=00 rec2=0d rec3=008
        [0x14] rec0=13 rec1=00 rec2=0e rec3=028
        [0x15] rec0=00 rec1=00 rec2=1c rec3=036
        [0x16] rec0=15 rec1=00 rec2=1d rec3=068
        [0x17] rec0=00 rec1=00 rec2=0f rec3=022
        [0x18] rec0=16 rec1=00 rec2=10 rec3=050
        [0x19] rec0=02 rec1=00 rec2=1b rec3=00e
        [0x1a] rec0=0d rec1=00 rec2=11 rec3=096
        [0x1b] rec0=01 rec1=00 rec2=19 rec3=002
        [0x1c] rec0=16 rec1=00 rec2=1a rec3=022
        [0x1d] rec0=00 rec1=00 rec2=12 rec3=026
        [0x1e] rec0=13 rec1=00 rec2=13 rec3=040
        [0x1f] rec0=00 rec1=00 rec2=18 rec3=00c
        [0x20] rec0=18 rec1=00 rec2=14 rec3=022
        [0x21] rec0=00 rec1=00 rec2=16 rec3=010
        [0x22] rec0=17 rec1=00 rec2=17 rec3=066
        [0x23] rec0=16 rec1=00 rec2=15 rec3=001
    tail 0x2170070ea819783c927eb 0x42a00088462063203