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

⟦e8cf353c5⟧ Ada Source

    Length: 29696 (0x7400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Vt100_Commands, seg_002d04

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 Access_List;
with Ada;
with Cmvc;
with Command;
with Common;
with Compilation;
--/ if DOCUMENT_FORMATTER then
--// with COMPOSE;
--/ end if;
with Debug;
--/ if DESIGN_FACILITY then
--// with DESIGN_IMPLEMENTATION;
--/ end if;
with Editor;
with Io;
with Job;
with Library;
--/ if MAIL then
--// with MAIL;
--/ end if;
with Operator;
with Queue;
with Script;
--/ if SPELLER then
--// with SPELLER;
--/ end if;
with System_Utilities;
with Text;
with What;
with Vt100_Key_Names;

----This file generated on: December 13, 1989 at 9:09:11 AM
----From Rational Development source file !ENVIRONMENT.EDITOR_KEYS.REV10_WORKING.UNITS.CREATE_COMMANDS_FILES.MASTER_KEYS_FILE'V(48)
----By user: GEB
----For terminal type: VT100

procedure Vt100_Commands is

    use Vt100_Key_Names;

    type Intent is (Interrupt, Prompt, Execute);

    Action : Intent;

    Key1, Key2, Key3, Key4, Key5, Key6 : Key_Names;

begin

    case Action is

        when Interrupt =>

            case Key1 is
                when C_G =>
                    Job.Interrupt;
                when Esc_S_D =>
                    Job.Disable (0);
                when Esc_S_G | Esc_G =>
                    Job.Kill (0);
                when Esc_S_S =>
                    Debug.Stop (Name => "");
                when others =>
                    null;
            end case;

        when Prompt =>

            case Key1 is
                when Pf3 =>
                    case Key2 is
                        when '/' | '?' =>
                            Editor.Image.Find (Name => "");
                        when others =>
                            null;
                    end case;
                when Numeric_0 =>
                    case Key2 is
                        when 'L' | 'l' =>
                            Common.Revert;
                        when others =>
                            null;
                    end case;
                when others =>
                    null;
            end case;

        when Execute =>

            case Key1 is
                when Nul =>
                    Editor.Mark.Push;
                when C_A =>
                    Editor.Line.Beginning_Of;
                when C_B | Numeric_7 | Esc_C_B =>
                    Editor.Line.Beginning_Of;
                when C_C =>
                    Editor.Hold_Stack.Push;
                when C_D =>
                    Editor.Char.Delete_Forward;
                when C_E =>
                    Editor.Line.End_Of;
                when C_F =>
                    Editor.Set.Argument_Prefix;
                when Backspace =>
                    Editor.Cursor.Left;
                when Tab =>
                    Editor.Char.Tab_Forward;
                when C_J =>
                    Editor.Cursor.Right;
                when C_K =>
                    Editor.Line.Delete_Forward;
                when C_L =>
                    Editor.Screen.Redraw;
                when C_M =>
                    Editor.Line.Indent;
                when C_N =>
                    Editor.Cursor.Down;
                when C_O =>
                    Editor.Line.Open;
                when C_Q =>
                    Editor.Key.Name;
                when C_R =>
                    Editor.Search.Previous (Target => "", Wildcard => False);
                when C_S =>
                    Editor.Search.Next (Target => "", Wildcard => False);
                when C_T =>
                    Editor.Char.Transpose;
                when C_U =>
                    Editor.Cursor.Up;
                when C_V =>
                    Editor.Image.Down;
                when C_W =>
                    Editor.Set.Argument_Prefix;
                when C_X =>
                    Editor.Set.Designation_Off;
                when C_Y =>
                    Editor.Hold_Stack.Top;
                when C_Z =>
                    Editor.Image.Up;
                when ' ' =>
                    Editor.Char.Insert_Character (1, ' ');
                when Delete =>
                    Editor.Char.Delete_Backward;
                when Up =>
                    Editor.Screen.Up;
                when Down =>
                    Editor.Screen.Down;
                when Left =>
                    Editor.Screen.Left;
                when Right =>
                    Editor.Screen.Right;
                when Pf1 =>
                    case Key2 is
                        when '"' | ''' | '6' | '^' =>
                            Editor.Region.Capitalize;
                        when '(' | '9' | '[' | '{' =>
                            Editor.Region.Start;
                        when ')' | '0' | ']' | '}' =>
                            Editor.Region.Finish;
                        when '+' | '=' =>
                            Editor.Region.Uncomment;
                        when ',' | '<' =>
                            Editor.Region.Lower_Case;
                        when '-' | '_' =>
                            Editor.Region.Comment;
                        when '.' | '>' =>
                            Editor.Region.Upper_Case;
                        when 'A' | 'a' | Numeric_7 =>
                            Editor.Region.Beginning_Of;
                        when 'B' | 'b' =>
                            Editor.Region.Beginning_Of;
                        when 'C' | 'c' =>
                            Editor.Region.Copy;
                        when 'D' | 'K' | 'd' | 'k' =>
                            Editor.Region.Delete;
                        when 'E' | 'e' | Numeric_9 =>
                            Editor.Region.End_Of;
                        when 'F' | 'f' =>
                            Editor.Region.Fill;
                        when 'H' | 'h' =>
                            Editor.Hold_Stack.Previous;
                        when 'J' | 'j' =>
                            Editor.Hold_Stack.Next;
                        when 'M' | 'm' =>
                            Editor.Region.Move;
                        when 'N' | 'n' =>
                            Editor.Hold_Stack.Push;
                        when 'P' | 'p' =>
                            Editor.Hold_Stack.Copy_Top;
                        when 'Q' | 'q' | Numeric_Comma =>
                            Editor.Region.Justify;
                        when 'R' | 'r' =>
                            Editor.Hold_Stack.Rotate;
                        when 'T' | 't' =>
                            Editor.Hold_Stack.Swap;
                        when 'U' | 'u' =>
                            Editor.Hold_Stack.Top;
                        when 'X' | 'x' =>
                            Editor.Region.Off;
                        when Delete =>
                            Editor.Hold_Stack.Delete_Top;
                        when Up =>
                            Editor.Hold_Stack.Top;
                        when Down =>
                            Editor.Hold_Stack.Push;
                        when Left =>
                            Editor.Hold_Stack.Previous;
                        when Right =>
                            Editor.Hold_Stack.Next;
                        when others =>
                            null;
                    end case;
                when Pf2 =>
                    case Key2 is
                        when C_M | 'M' | 'Z' | 'm' | 'z' | Enter =>
                            Editor.Window.Promote;
                        when '!' | '1' =>
                            Editor.Window.Expand;
                        when '#' | '3' =>
                            Editor.Window.Frames (3);
                        when '$' | '4' =>
                            Editor.Window.Frames (4);
                        when '%' | '5' =>
                            Editor.Window.Frames (5);
                        when '&' | '7' =>
                            Editor.Window.Frames (7);
                        when '.' | '>' =>
                            Editor.Window.Expand (-4);
                        when '/' | '?' =>
                            Editor.Window.Directory;
                        when '2' | '@' =>
                            Editor.Window.Frames (2);
                        when '6' | '^' =>
                            Editor.Window.Frames (6);
                        when 'A' | 'a' | Numeric_7 =>
                            Editor.Window.Beginning_Of;
                        when 'B' | 'b' =>
                            Editor.Window.Beginning_Of;
                        when 'C' | 'c' =>
                            Editor.Window.Copy;
                        when 'D' | 'K' | 'W' | 'X' | 'd' | 'k' | 'w' | 'x' =>
                            Editor.Window.Delete;
                        when 'E' | 'e' | Numeric_9 =>
                            Editor.Window.End_Of;
                        when 'F' | 'f' =>
                            Editor.Window.Focus;
                        when 'H' | 'h' =>
                            Common.Enclosing (In_Place => False,
                                              Library => False);
                        when 'J' | 'j' =>
                            Editor.Window.Join (1);
                        when 'N' | 'n' =>
                            Editor.Window.Next;
                        when 'O' | 'o' =>
                            Editor.Window.Join (1);
                        when 'T' | 't' =>
                            Editor.Window.Transpose;
                        when 'U' | 'u' =>
                            Editor.Window.Previous;
                        when 'V' | 'v' =>
                            Editor.Window.Child;
                        when 'Y' | 'y' =>
                            Editor.Window.Demote;
                        when Delete =>
                            Editor.Window.Join (-1);
                        when Up =>
                            Editor.Window.Previous;
                        when Down =>
                            Editor.Window.Next;
                        when Left =>
                            Editor.Window.Parent;
                        when Right =>
                            Editor.Window.Child;
                        when Numeric_3 =>
                            Editor.Window.Demote;
                        when Numeric_8 =>
                            Editor.Window.Directory;
                        when Dash =>
                            Editor.Window.Focus;
                        when others =>
                            null;
                    end case;
                when Pf3 =>
                    case Key2 is
                        when '!' | '1' =>
                            Debug.Source ("_1");
                        when '#' | '3' =>
                            Debug.Source ("_3");
                        when '$' | '4' =>
                            Debug.Source ("_4");
                        when '%' | '5' =>
                            Debug.Source ("_5");
                        when '&' | '7' =>
                            Debug.Source ("_7");
                        when '(' | '9' =>
                            Debug.Source ("_9");
                        when ')' | '0' =>
                            Debug.Source ("_10");
                        when '*' | '8' =>
                            Debug.Source ("_8");
                        when '2' | '@' =>
                            Debug.Source ("_2");
                        when '6' | '^' =>
                            Debug.Source ("_6");
                        when 'A' | 'a' | Numeric_7 =>
                            Editor.Image.Beginning_Of;
                        when 'B' | 'b' =>
                            Editor.Image.Beginning_Of;
                        when 'E' | 'e' | Numeric_9 =>
                            Editor.Image.End_Of;
                        when 'F' | 'f' =>
                            Editor.Set.Fill_Mode (True);
                        when 'H' | 'h' =>
                            Editor.Image.Left;
                        when 'I' | 'i' =>
                            Editor.Set.Insert_Mode (True);
                        when 'J' | 'j' =>
                            Editor.Image.Right;
                        when 'N' | 'n' =>
                            Editor.Image.Down;
                        when 'O' | 'o' =>
                            Editor.Set.Insert_Mode (False);
                        when 'U' | 'u' =>
                            Editor.Image.Up;
                        when 'X' | 'x' =>
                            Editor.Set.Fill_Mode (False);
                        when Up =>
                            Editor.Image.Up;
                        when Down =>
                            Editor.Image.Down;
                        when Left =>
                            Editor.Image.Left;
                        when Right =>
                            Editor.Image.Right;
                        when others =>
                            null;
                    end case;
                when Pf4 =>
                    case Key2 is
                        when C_M | 'M' | 'X' | 'm' | 'x' | Enter =>
                            Editor.Macro.Execute;
                        when '(' | '9' | 'A' | '[' | 'a' | '{' | Numeric_7 =>
                            Editor.Macro.Start;
                        when ')' | '0' | 'E' | ']' | 'e' | '}' | Numeric_9 =>
                            Editor.Macro.Finish;
                        when 'B' | 'b' =>
                            Editor.Macro.Start;
                        when 'F' | 'f' =>
                            Editor.Macro.Bind;
                        when 'H' | 'h' =>
                            Editor.Mark.Previous;
                        when 'J' | 'j' =>
                            Editor.Mark.Next;
                        when 'N' | 'n' =>
                            Editor.Mark.Push;
                        when 'P' | 'p' =>
                            Editor.Mark.Copy_Top;
                        when 'R' | 'r' =>
                            Editor.Mark.Rotate;
                        when 'S' | 's' =>
                            Script.Pretty_Print
                               (Script_File => "",
                                Command_File =>
                                   "!machine.error_logs.key_script");
                        when 'T' | 't' =>
                            Editor.Mark.Swap;
                        when 'U' | 'u' =>
                            Editor.Mark.Top;
                        when Delete =>
                            Editor.Mark.Delete_Top;
                        when Up =>
                            Editor.Mark.Top;
                        when Down =>
                            Editor.Mark.Push;
                        when Left =>
                            Editor.Mark.Previous;
                        when Right =>
                            Editor.Mark.Next;
                        when Numeric_8 =>
                            Editor.Macro.Bind;
                        when Dot =>
                            Text.End_Of_Input;
                        when others =>
                            null;
                    end case;
                when Numeric_1 =>
                    Common.Edit;
                when Numeric_2 =>
                    Ada.Code_Unit;
                when Numeric_3 =>
                    Common.Demote;
                when Numeric_4 =>
                    Common.Enclosing (In_Place => False, Library => False);
                when Numeric_5 =>
                    What.Home_Library;
                when Numeric_6 =>
                    Ada.Other_Part (Name => "<IMAGE>", In_Place => False);
                when Numeric_8 =>
                    Common.Definition (Name => "<CURSOR>",
                                       In_Place => False,
                                       Visible => False);
                when Numeric_9 =>
                    Editor.Line.End_Of;
                when Numeric_0 =>
                    case Key2 is
                        when C_M | Enter =>
                            Common.Commit;
                        when '!' | '1' =>
                            Common.Expand;
                        when '.' | '>' =>
                            Common.Elide;
                        when '/' | '?' =>
                            Common.Explain;
                        when 'A' | 'a' | Numeric_7 =>
                            Common.Object.First_Child;
                        when 'B' | 'b' =>
                            Common.Object.First_Child;
                        when 'C' | 'c' =>
                            Common.Object.Copy;
                        when 'D' | 'K' | 'd' | 'k' =>
                            Common.Object.Delete;
                        when 'E' | 'e' | Numeric_9 =>
                            Common.Object.Last_Child;
                        when 'G' | 'g' =>
                            Common.Abandon;
                        when 'H' | 'h' =>
                            Common.Object.Parent;
                        when 'I' | 'i' =>
                            Common.Object.Insert;
                        when 'J' | 'j' =>
                            Common.Object.Child;
                        when 'M' | 'm' =>
                            Common.Object.Move;
                        when 'N' | 'n' =>
                            Common.Object.Next;
                        when 'R' | 'r' =>
                            Common.Redo;
                        when 'S' | 's' =>
                            Common.Semanticize;
                        when 'U' | 'u' =>
                            Common.Undo;
                        when 'V' | 'v' =>
                            Common.Redo;
                        when 'X' | 'x' =>
                            Common.Release;
                        when Up =>
                            Common.Object.Previous;
                        when Down =>
                            Common.Object.Next;
                        when Left =>
                            Common.Object.Parent;
                        when Right =>
                            Common.Object.Child;
                        when Numeric_8 =>
                            Common.Definition (Name => "<CURSOR>",
                                               In_Place => False,
                                               Visible => False);
                        when others =>
                            null;
                    end case;
                when Dash =>
                    Common.Format;
                when Dot =>
                    Common.Create_Command;
                when Enter =>
                    Common.Promote;
                when Numeric_Comma =>
                    Common.Complete;
                when Esc_C_A =>
                    Editor.Line.Beginning_Of;
                when Esc_C_C =>
                    Editor.Line.Copy;
                when Esc_C_D =>
                    Editor.Line.Delete;
                when Esc_C_E =>
                    Editor.Line.End_Of;
                when Esc_C_F =>
                    Editor.Line.Delete_Backward;
                when Esc_Backspace =>
                    Editor.Cursor.Left (8);
                when Esc_Tab =>
                    Editor.Char.Tab_Backward;
                when Esc_C_J =>
                    Editor.Cursor.Right (8);
                when Esc_C_K =>
                    Editor.Line.Delete_Forward;
                when Esc_C_M =>
                    Command.Debug;
                when Esc_C_N =>
                    Editor.Cursor.Down (8);
                when Esc_C_O | Esc_O =>
                    Editor.Line.Join;
                when Esc_C_T =>
                    Editor.Line.Transpose;
                when Esc_C_U =>
                    Editor.Cursor.Up (8);
                when Esc_Quotation | Esc_Tick =>
                    Editor.Char.Quote;
                when Esc_Sharp | Esc_3 =>
                    What.Line;
                when Esc_Percent | Esc_5 =>
                    What.Load;
                when Esc_Left_Paren | Esc_9 =>
                    Editor.Char.Insert_String ("(""");
                when Esc_Right_Paren | Esc_0 =>
                    Editor.Char.Insert_String (""")");
                when Esc_Comma | Esc_Less_Than =>
                    Editor.Word.Lower_Case;
                when Esc_Period | Esc_Greater_Than =>
                    Editor.Word.Upper_Case;
                when Esc_Slash | Esc_Query =>
                    Common.Explain;
                when Esc_2 | Esc_At_Sign =>
                    Editor.Key.Name;
                when Esc_6 | Esc_Circumflex =>
                    Editor.Word.Capitalize;
                when Esc_Colon | Esc_Semicolon =>
                    What.Time;
                when Esc_Equal =>
                    Editor.Char.Insert_String ("=>");
                when Esc_S_A | Esc_A =>
                    Editor.Word.Beginning_Of;
                when Esc_S_B | Esc_B =>
                    Editor.Word.Beginning_Of;
                when Esc_S_C | Esc_S_Y | Esc_C | Esc_Y =>
                    Editor.Hold_Stack.Next;
                when Esc_S_E | Esc_E =>
                    Editor.Word.End_Of;
                when Esc_S_F | Esc_F =>
                    Editor.Word.Delete_Backward;
                when Esc_S_H | Esc_H =>
                    Editor.Word.Previous;
                when Esc_S_J | Esc_J =>
                    Editor.Word.Next;
                when Esc_S_K | Esc_K =>
                    Editor.Word.Delete_Forward;
                when Esc_S_L | Esc_L =>
                    Editor.Screen.Clear;
                when Esc_S_M | Esc_M =>
                    Editor.Mark.Next;
                when Esc_S_N | Esc_N =>
                    Editor.Cursor.Next (Prompt => True, Underline => True);
                when Esc_S_Q | Esc_Q =>
                    Editor.Key.Prompt (Key_Code => "");
                when Esc_S_R | Esc_R =>
                    Editor.Search.Replace_Previous (Target => "",
                                                    Replacement => "",
                                                    Repeat => 1,
                                                    Wildcard => False);               when Esc_S_T | Esc_T =>
                    Editor.Word.Transpose;
                when Esc_S_U | Esc_U =>
                    Editor.Cursor.Previous (Prompt => True, Underline => True);
                when Esc_S_V | Esc_V =>
                    Editor.Window.Next;
                when Esc_S_W | Esc_W =>
                    case Key2 is
--/ if SPELLER then
--//                    when C_W | 'w' =>
--//                        SPELLER.SPELLER_WINDOW (IN_PLACE => FALSE);
--/ end if;
                        when ',' | '<' =>
                            Editor.Word.Lower_Case;
                        when '.' | '>' =>
                            Editor.Word.Upper_Case;
--/ if SPELLER then
--//                    when '/' | '?' =>
--//                        SPELLER.CHECK_TEXT (DATA => "<TEXT>");
--/ end if;
                        when '6' | '^' =>
                            Editor.Word.Capitalize;
                        when 'A' | 'a' | Numeric_7 =>
                            Editor.Word.Beginning_Of;
                        when 'B' | 'b' =>
                            Editor.Word.Beginning_Of;
                        when 'D' | 'd' =>
                            Editor.Word.Delete;
                        when 'E' | 'e' | Numeric_9 =>
                            Editor.Word.End_Of;
--/ if SPELLER then
--//                    when 'I' | 'i' | ENTER =>
--//                        SPELLER.LEARN_WORD (THE_WORD => "",DICTIONARY => 0);
--/ end if;
                        when 'K' | 'k' =>
                            Editor.Word.Delete_Forward;
--/ if SPELLER then
--//                    when 'L' | 'l' =>
--//                        SPELLER.LEARN_WORD (THE_WORD => "",DICTIONARY => 1);
--//                    when 'M' | 'm' =>
--//                        SPELLER.CHECK_IMAGE;
--//                    when 'N' | 'n' =>
--//                        SPELLER.EXPLAIN_NEXT;
--//                    when 'R' | 'r' =>
--//                        SPELLER.LEARN_REPLACEMENT (THE_WORD => "",CHOICE => 1,DICTIONARY => 0);
--/ end if;
                        when 'T' | 't' =>
                            Editor.Word.Transpose;
--/ if SPELLER then
--//                    when 'W' =>
--//                        SPELLER.SPELLER_WINDOW (IN_PLACE => TRUE);
--//                    when 'X' | 'x' | NUMERIC_COMMA =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 1);
--/ end if;
                        when Delete =>
                            Editor.Word.Delete_Backward;
--/ if SPELLER then
--//                    when DOWN =>
--//                        SPELLER.EXPLAIN_NEXT;
--/ end if;
                        when Left =>
                            Editor.Word.Previous;
                        when Right =>
                            Editor.Word.Next;
--/ if SPELLER then
--//                    when NUMERIC_1 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 1);
--//                    when NUMERIC_2 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 2);
--//                    when NUMERIC_3 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 3);
--//                    when NUMERIC_4 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 4);
--//                    when NUMERIC_5 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 5);
--//                    when NUMERIC_6 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 6);
--//                    when NUMERIC_8 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 8);
--//                    when NUMERIC_0 =>
--//                        SPELLER.EXCHANGE_WORD (CHOICE => 10);
--/ end if;
                        when others =>
                            null;
                    end case;
                when Esc_S_X | Esc_X =>
                    Editor.Macro.Execute;
                when Esc_S_Z | Esc_Z =>
                    Editor.Window.Previous;
                when Esc_Left_Bracket | Esc_Left_Brace =>
                    Editor.Region.Start;
                when Esc_Backslash | Esc_Bar =>
                    Editor.Char.Delete_Spaces;
                when Esc_Right_Bracket | Esc_Right_Brace =>
                    Editor.Region.Finish;
                when Esc_D =>
                    Editor.Word.Delete;
                when Esc_S =>
                    Editor.Search.Replace_Next (Target => "",
                                                Replacement => "",
                                                Repeat => 1,
                                                Wildcard => False);
                when Esc_Delete =>
                    Editor.Word.Delete_Backward;
                when others =>
                    null;
            end case;

    end case;

end Vt100_Commands;

E3 Meta Data

    nblk1=1c
    nid=0
    hdr6=38
        [0x00] rec0=32 rec1=00 rec2=01 rec3=016
        [0x01] rec0=20 rec1=00 rec2=02 rec3=02e
        [0x02] rec0=1e rec1=00 rec2=03 rec3=01c
        [0x03] rec0=1a rec1=00 rec2=04 rec3=004
        [0x04] rec0=18 rec1=00 rec2=05 rec3=008
        [0x05] rec0=14 rec1=00 rec2=06 rec3=00a
        [0x06] rec0=14 rec1=00 rec2=07 rec3=03c
        [0x07] rec0=16 rec1=00 rec2=08 rec3=028
        [0x08] rec0=13 rec1=00 rec2=09 rec3=05e
        [0x09] rec0=15 rec1=00 rec2=0a rec3=00a
        [0x0a] rec0=17 rec1=00 rec2=0b rec3=012
        [0x0b] rec0=15 rec1=00 rec2=0c rec3=00c
        [0x0c] rec0=14 rec1=00 rec2=0d rec3=034
        [0x0d] rec0=15 rec1=00 rec2=0e rec3=052
        [0x0e] rec0=16 rec1=00 rec2=0f rec3=00a
        [0x0f] rec0=17 rec1=00 rec2=10 rec3=096
        [0x10] rec0=16 rec1=00 rec2=11 rec3=05e
        [0x11] rec0=15 rec1=00 rec2=12 rec3=036
        [0x12] rec0=15 rec1=00 rec2=13 rec3=070
        [0x13] rec0=1b rec1=00 rec2=14 rec3=012
        [0x14] rec0=17 rec1=00 rec2=15 rec3=058
        [0x15] rec0=17 rec1=00 rec2=16 rec3=00c
        [0x16] rec0=14 rec1=00 rec2=17 rec3=002
        [0x17] rec0=16 rec1=00 rec2=18 rec3=062
        [0x18] rec0=15 rec1=00 rec2=19 rec3=052
        [0x19] rec0=17 rec1=00 rec2=1a rec3=074
        [0x1a] rec0=15 rec1=00 rec2=1b rec3=02a
        [0x1b] rec0=18 rec1=00 rec2=1c rec3=000
    tail 0x20b00221a8008447ce95b 0x42a00088462060003