|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 32768 (0x8000) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, function Get_Attribute_Info, seg_04cfa5, separate Mc68k_Bare_Vads
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
--with Get_Attributes; separate (Mc68k_Bare_Vads) function Get_Attribute_Info return Attributes.Object is package Attr renames Attributes; -- GENERAL NOTES PERTAINING TO ATTRIBUTES DEFINED HERE -- -- There are three "implementation dependant" attributes documented in -- the Appendix F found in the "M68000 Family - Version 6.2.1" -- Programmer's Guide. These include: -- -- X'Address, -- X'Ref and System.Address'Ref(N) -- X'Task_Id -- X'Long_Address -- X'Compiler_Key -- X'Compiler_Version -- X'Dope_Adress -- X'Dope_Size -- X'Entry_Number -- X'Homogeneous -- X'Type_Key -- -- The implementation for the X'Address attribute is already provided -- by the R1000 semanticist and is therefore not defined here. -- -- 'Ref is "overloaded" in that it has two permitted forms. The form -- X'Ref is used only in machine code insertions. Both forms could not -- be implemented in the RCI. Because machine code insertions should be -- used somewhat infrequently, this customization implements only the -- System.Address'Ref(N) form. -- -- In the case of both System.Address'Ref(N) and X'Task_Id a known bug -- in the Rev1_0_0 release of the RCI prevents usages of these -- attributes in a view using this customization from semantizing -- properly. The bug has reportedly been fixed in the upcoming -- maintanence release. Once this release becomes available, the use -- of these attributes will have to be tested. It is believed that -- they are properly defined here. ----------------------------------------------------------------------------------- -- P'Long_Address -- -- For a prefix P that denotes an object, a program unit, a label or an entry -- -- Yields the address of the first of the storage units allocated to P -- The only difference betwen 'Address and 'Long_Address is that the value of -- the second one is of the type Long_address. Long_Address_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => Checking.All_Structural_Types, Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Long_Address_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Long_Address_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Long_Address_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (Checking.Task_Kind => False, Checking.Named_Statement_Kind => False, others => True), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Long_Address_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Long_Address_Objects, Valid_Miscellaneous_Names => Long_Address_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Long_Address_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "system.long_address", For_Target => T_Name); Long_Address_Designator : constant Attr.Designator := Attributes.Null_Designator; Long_Address_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Long_Address", The_Prefix => Long_Address_Prefix, The_Result => Long_Address_Result, The_Designator => Long_Address_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- --[ Dess16 defined ] -- P'Compiler_Key -- -- For a prefix P that denotes the name of an entity, P'Compiler_Key yields -- the full pathname of the compiler key, which indicates the compiler that -- was used to generate code for the unit containing the definition of P. -- -- The value returned by this attribute is of type String -- -- The entity can be a program unit (package, subprogram, task or generic), -- an object (variable, constant, named number, or parameter), a type or -- subtype (but not an incomplete type), or an exception -- Compiler_Key_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (Checking.Access_Type => False, others => True), Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Compiler_Key_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Compiler_Key_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Compiler_Key_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (Checking.Entry_Kind => False, Checking.Label_Kind => False, others => True), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Compiler_Key_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Compiler_Key_Objects, Valid_Miscellaneous_Names => Compiler_Key_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Compiler_Key_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "String", For_Target => T_Name); Compiler_Key_Designator : constant Attr.Designator := Attributes.Null_Designator; Compiler_Key_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Compiler_Key", The_Prefix => Compiler_Key_Prefix, The_Result => Compiler_Key_Result, The_Designator => Compiler_Key_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- --[ Dess16 defined ] -- P'Compiler_Version -- -- For a prefix P that denotes the name of an entity, P'Compiler_Version yields -- the version of the compiler key that was used to generate code for the unit -- containing the definition of P. -- -- The value returned by this attribute is of type String -- -- The entity can be a program unit (package, subprogram, task or generic), -- an object (variable, constant, named number, or parameter), a type or -- subtype (but not an incomplete type), or an exception -- Compiler_Version_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (Checking.Access_Type => False, others => True), Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Compiler_Version_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Compiler_Version_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Compiler_Version_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (Checking.Entry_Kind => False, Checking.Label_Kind => False, others => True), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Compiler_Version_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Compiler_Version_Objects, Valid_Miscellaneous_Names => Compiler_Version_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Compiler_Version_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "String", For_Target => T_Name); Compiler_Version_Designator : constant Attr.Designator := Attributes.Null_Designator; Compiler_Version_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Compiler_Version", The_Prefix => Compiler_Version_Prefix, The_Result => Compiler_Version_Result, The_Designator => Compiler_Version_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- --[ Dess16 defined ] -- -- P'Dope_Address -- -- For an array object P -- -- Yields the address of the first of the dope vector that describes P. It -- returns a value of type System_Address. Dope_Address_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (Checking.Array_Type => True, others => False), Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Dope_Address_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Dope_Address_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Dope_Address_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (others => False), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Dope_Address_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Dope_Address_Objects, Valid_Miscellaneous_Names => Dope_Address_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Dope_Address_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "System.Address", For_Target => T_Name); Dope_Address_Designator : constant Attr.Designator := Attributes.Null_Designator; Dope_Address_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Dope_Address", The_Prefix => Dope_Address_Prefix, The_Result => Dope_Address_Result, The_Designator => Dope_Address_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- --[ Dess16 defined ] -- -- P'Dope_Size -- -- For an array object P -- -- Yields the size in bits of the dope vector that describes P. It returns -- a value of type Universal_Integer. Dope_Size_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (Checking.Array_Type => True, others => False), Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Dope_Size_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Dope_Size_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Dope_Size_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (others => False), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Dope_Size_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Dope_Size_Objects, Valid_Miscellaneous_Names => Dope_Size_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Dope_Size_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "Universal_Integer", For_Target => T_Name); Dope_Size_Designator : constant Attr.Designator := Attributes.Null_Designator; Dope_Size_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Dope_Size", The_Prefix => Dope_Size_Prefix, The_Result => Dope_Size_Result, The_Designator => Dope_Size_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- --[ Dess16 defined ] -- -- P'Entry_Number -- -- For a task entry or generic formal subprogram -- -- Yields a Universal_Integer value the uniquely identifies the entity P Entry_Number_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (others => False), Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Entry_Number_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Entry_Number_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Entry_Number_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (Checking.Entry_Kind => True, Checking.Generic_Formal_Procedure => True, Checking.Generic_Formal_Function => True, others => False), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Entry_Number_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Entry_Number_Objects, Valid_Miscellaneous_Names => Entry_Number_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Entry_Number_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "Universal_Integer", For_Target => T_Name); Entry_Number_Designator : constant Attr.Designator := Attributes.Null_Designator; Entry_Number_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Entry_Number", The_Prefix => Entry_Number_Prefix, The_Result => Entry_Number_Result, The_Designator => Entry_Number_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- --[ Dess16 defined ] -- -- P'Homogeneous -- -- For an access type -- -- Yields the boolean value TRUE if all objects in the collection will have the -- same constraints. The converse, however, is not true Homogeneous_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (Checking.Access_Type => True, others => False), Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Homogeneous_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Homogeneous_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Homogeneous_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (others => False), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Homogeneous_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Homogeneous_Objects, Valid_Miscellaneous_Names => Homogeneous_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Homogeneous_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "Boolean", For_Target => T_Name); Homogeneous_Designator : constant Attr.Designator := Attributes.Null_Designator; Homogeneous_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Homogeneous", The_Prefix => Homogeneous_Prefix, The_Result => Homogeneous_Result, The_Designator => Homogeneous_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- --[ Dess16 defined ] -- -- P'Type_Key -- -- For a type name. -- -- Yields a string that uniquely identifies type P. This attribute typically is -- used when passing messages over a network to ensure that the reader and -- writer agree on the type to use when interpreting the message. Type_Key_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (others => True), Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Type_Key_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Type_Key_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Type_Key_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (others => False), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Type_Key_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Type_Key_Objects, Valid_Miscellaneous_Names => Type_Key_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Type_Key_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "String", For_Target => T_Name); Type_Key_Designator : constant Attr.Designator := Attributes.Null_Designator; Type_Key_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Type_Key", The_Prefix => Type_Key_Prefix, The_Result => Type_Key_Result, The_Designator => Type_Key_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- -- 'Ref has two permitted forms -- -- X'Ref - Used only in machine_code procedures -- X must be either a constant, variable, procedure, function, or -- label. -- Returns a value of type Machine_Code.Operand. -- May be used only to designate an operand within a code-statement. -- -- System.Address'Ref(N) - Used anywhere to convert the -- Universal_Integer value N to an Address. -- Returns a type of System.Address. -- N must be a static value of type Universal_Integer. -- -- Of the two permitted forms, only System.Address'Ref(N) is -- implemented at this time. Ref_Textual_Types : constant Checking.Type_Name_Array := (1 => Text.Build (S => "System.Address", For_Target => T_Name)); Ref_Type_Set : constant Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.All_Type_Restrictions, Valid_Structural_Types => Checking.No_Structural_Types, Valid_Textual_Types => Ref_Textual_Types, For_Target => T_Name); Ref_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Checking.Null_Object_Set, Valid_Miscellaneous_Names => Checking.Null_Miscellaneous_Name_Set, Valid_Types => Ref_Type_Set, For_Target => T_Name); Ref_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "System.Address", For_Target => T_Name); Ref_Designator : constant Attr.Designator := Attr.Build (Function_Parameter => Checking.Build (Expression_Type => "Universal_Integer", Constraint => Checking.Null_Constraint (T_Name), For_Target => T_Name), For_Target => T_Name); Ref_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Ref", The_Prefix => Ref_Prefix, The_Result => Ref_Result, The_Designator => Ref_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- Xref_Type_Set : Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => Checking.No_Structural_Types, Valid_Textual_Types => Checking.No_Type_Names, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Xref_Objects : constant Checking.Object_Set := Checking.Build (Valid_Kinds => (Checking.Constant_Kind => True, Checking.Variable => True, others => False), Allowed_Types => Xref_Type_Set, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Xref_Misc_Names : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (Checking.Function_Kind => True, Checking.Procedure_Kind => True, Checking.Label_Kind => True, others => False), Ambiguity_Allowed => False, Required_Pragmas => Checking.No_Pragmas, Prohibited_Pragmas => Checking.No_Pragmas, For_Target => T_Name); Xref_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Xref_Objects, Valid_Miscellaneous_Names => Xref_Misc_Names, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Xref_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "Machine_Code.Operand", For_Target => T_Name); Xref_Designator : constant Attr.Designator := Attributes.Null_Designator; Xref_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Ref", The_Prefix => Xref_Prefix, The_Result => Xref_Result, The_Designator => Xref_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- -- X'Task_Id -- X is supposed to be limited to a "task object or a value". However, -- the SunAda documentation is unclear as to what they mean by "a -- value" in this context. At this time, the implementation limits use -- of the 'Task_Id to objects which are task types or are derived from -- task types. Task_Id_Types_Set : constant Checking.Type_Set := Checking.Build (Enforced_Type_Restrictions => Checking.No_Type_Restrictions, Valid_Structural_Types => (Checking.Task_Type => True, others => False), For_Target => T_Name); Task_Id_Object_Set : constant Checking.Object_Set := Checking.Build (Valid_Kinds => Checking.All_Object_Kinds, Allowed_Types => Task_Id_Types_Set, For_Target => T_Name); Task_Id_Misc_Name_Set : constant Checking.Miscellaneous_Name_Set := Checking.Build (Valid_Kinds => (Checking.Task_Kind => True, others => False), For_Target => T_Name); Task_Id_Prefix : constant Attr.Prefix := Attr.Build (Valid_Objects => Task_Id_Object_Set, Valid_Miscellaneous_Names => Task_Id_Misc_Name_Set, Valid_Types => Checking.Null_Type_Set, For_Target => T_Name); Task_Id_Result : constant Attr.Result := Attr.Build_With_Value_Result (Type_Name => "System.Task_Id", For_Target => T_Name); Task_Id_Designator : constant Attr.Designator := Attr.Null_Designator; Task_Id_Attr : constant Attr.Attribute := Attr.Build (The_Name => "Task_Id", The_Prefix => Task_Id_Prefix, The_Result => Task_Id_Result, The_Designator => Task_Id_Designator, For_Target => T_Name); ----------------------------------------------------------------------------------- Attr_List : constant Attr.Attribute_Array := (1 => Ref_Attr, 2 => Xref_Attr, 3 => Task_Id_Attr, 4 => Long_Address_Attr, 5 => Compiler_Key_Attr, 6 => Compiler_Version_Attr, 7 => Dope_Address_Attr, 8 => Dope_Size_Attr, 9 => Entry_Number_Attr, 10 => Homogeneous_Attr, 11 => Type_Key_Attr); begin -- for I in Attr_List'Range loop -- Io.Put_Line (Attr.Get_Name (Attr_List (I))); -- Io.Put_Line (" Result: " & Attr.Get_Name -- (Attr.Get_Result (Attr_List (I)))); -- end loop; return Attr.Build (Attribute_List => Attr_List, For_Target => T_Name); -- return Get_Attributes (T_Name); end Get_Attribute_Info;
nblk1=1f nid=0 hdr6=3e [0x00] rec0=20 rec1=00 rec2=01 rec3=068 [0x01] rec0=15 rec1=00 rec2=02 rec3=01c [0x02] rec0=13 rec1=00 rec2=03 rec3=012 [0x03] rec0=14 rec1=00 rec2=04 rec3=052 [0x04] rec0=17 rec1=00 rec2=05 rec3=08c [0x05] rec0=15 rec1=00 rec2=06 rec3=00a [0x06] rec0=14 rec1=00 rec2=07 rec3=072 [0x07] rec0=17 rec1=00 rec2=08 rec3=052 [0x08] rec0=14 rec1=00 rec2=09 rec3=056 [0x09] rec0=15 rec1=00 rec2=0a rec3=01a [0x0a] rec0=19 rec1=00 rec2=0b rec3=026 [0x0b] rec0=13 rec1=00 rec2=0c rec3=038 [0x0c] rec0=1c rec1=00 rec2=0d rec3=004 [0x0d] rec0=13 rec1=00 rec2=0e rec3=068 [0x0e] rec0=18 rec1=00 rec2=0f rec3=046 [0x0f] rec0=19 rec1=00 rec2=10 rec3=070 [0x10] rec0=13 rec1=00 rec2=11 rec3=032 [0x11] rec0=19 rec1=00 rec2=12 rec3=014 [0x12] rec0=16 rec1=00 rec2=13 rec3=03e [0x13] rec0=16 rec1=00 rec2=14 rec3=05a [0x14] rec0=1a rec1=00 rec2=15 rec3=052 [0x15] rec0=12 rec1=00 rec2=16 rec3=058 [0x16] rec0=1c rec1=00 rec2=17 rec3=04a [0x17] rec0=16 rec1=00 rec2=18 rec3=036 [0x18] rec0=19 rec1=00 rec2=19 rec3=042 [0x19] rec0=14 rec1=00 rec2=1a rec3=048 [0x1a] rec0=13 rec1=00 rec2=1b rec3=00e [0x1b] rec0=18 rec1=00 rec2=1c rec3=064 [0x1c] rec0=17 rec1=00 rec2=1d rec3=042 [0x1d] rec0=1a rec1=00 rec2=1e rec3=038 [0x1e] rec0=15 rec1=00 rec2=1f rec3=000 tail 0x2175436b487503f5a1330 0x42a00088462060003