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

⟦615dc43cb⟧ Ada Source

    Length: 38912 (0x9800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Parser, seg_031030

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



-- !!!!
-- !!!!
-- version temporaire  :  declarer les function en separate
-- !!!!
-- !!!!

with Text_Io;
with Lexical;  
use Lexical;
package body Parser is

    function Parse_Corps_Scene
                return Boolean; --prototype,declaration incomplete

    function Parse_Prog_Principal return Boolean is
    begin
        if Lexical.Get = L_Debut then
            Lexical.Next;
            if Parse_Corps_Scene then
                if Lexical.Get = L_Fin then
                    Lexical.Next;
                    return True;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Prog_Principal;

    function Parse_Terme return Boolean; --prototype,declaration incomplete
    function Parse_Facteur return Boolean; --prototype,declaration incomplete

    function Parse_Expression return Boolean is
        The_Token : Lexical.Token;
        Parse_Ok : Boolean := True;
    begin
        if Parse_Terme then  
            while Lexical.Get = L_Plus or else Lexical.Get = L_Minus loop
                The_Token := Lexical.Get;
                case The_Token is
                    when L_Plus =>
                        Lexical.Next;
                        Parse_Ok := Parse_Terme;
                    when L_Minus =>  
                        Text_Io.Put_Line (Token'Image (Get));
                        Lexical.Next;
                        Text_Io.Put_Line (Token'Image (Get));
                        Parse_Ok := Parse_Terme;
                    when others =>
                        Parse_Ok := False;
                end case;
                exit when not Parse_Ok;
            end loop;  
            return Parse_Ok;
        else
            return False;
        end if;
    end Parse_Expression;

    function Parse_Terme return Boolean is
        The_Token : Lexical.Token;  
        Parse_Ok : Boolean := True;
    begin
        if Parse_Facteur then
            while Lexical.Get = L_Star or else
                     Lexical.Get = L_Slash or else Lexical.Get = L_Mod loop

                The_Token := Lexical.Get;
                case The_Token is
                    when L_Star =>
                        Lexical.Next;
                        Parse_Ok := Parse_Facteur;
                    when L_Slash =>
                        Lexical.Next;
                        Parse_Ok := Parse_Facteur;
                    when L_Mod =>
                        Lexical.Next;
                        Parse_Ok := Parse_Facteur;
                    when others =>
                        Parse_Ok := False;
                end case;
                exit when not Parse_Ok;
            end loop;  
            return Parse_Ok;
        else
            return False;
        end if;
    end Parse_Terme;

    function Parse_Facteur return Boolean is
        The_Token : Lexical.Token;
    begin
        The_Token := Lexical.Get;
        case The_Token is
            when L_Open =>
                Lexical.Next;  
                if Parse_Expression then
                    if Lexical.Get = L_Close then
                        Lexical.Next;
                        return True;
                    else  
                        return False;  
                    end if;
                else
                    return False;
                end if;
            when L_Id =>  
                Lexical.Next;
                return True;
            when L_Nbr =>
                Lexical.Next;
                return True;
            when others =>
                return False;
        end case;
    end Parse_Facteur;

    function Parse_Evoluer return Boolean is
    begin
        if Lexical.Get = L_Id then
            Lexical.Next;
            if Lexical.Get = L_Point then
                Lexical.Next;
                if Lexical.Get = L_Id then
                    Lexical.Next;
                    if Lexical.Get = L_Jusqua then
                        Lexical.Next;
                        if Parse_Expression then
                            if Lexical.Get = L_En then
                                Lexical.Next;
                                if Parse_Expression then
                                    return True;
                                else
                                    return False;
                                end if;
                            else
                                return False;
                            end if;
                        else
                            return False;
                        end if;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Evoluer;

    function Parse_Modifier return Boolean is
    begin
        if Lexical.Get = L_Id then
            Lexical.Next;
            if Lexical.Get = L_Point then
                Lexical.Next;
                if Lexical.Get = L_Id then
                    Lexical.Next;

                    --   if Lexical.Get = L_Avec then
                    --       Lexical.Next;
                    -- !!!! prevoir token l_avec dans itf lexical

                    if Parse_Expression then
                        return True;
                    else
                        return False;
                    end if;
                    --  else
                    --      return False;
                    --  end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Modifier;

    function Parse_Desactiver return Boolean is
    begin
        if Lexical.Get = L_Id then
            Lexical.Next;
            if Lexical.Get = L_Point then
                Lexical.Next;
                if Lexical.Get = L_Id then
                    Lexical.Next;
                    return True;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Desactiver;

    function Parse_Activer return Boolean is
    begin
        if Lexical.Get = L_Id then
            Lexical.Next;
            if Lexical.Get = L_Point then
                Lexical.Next;  
                if Lexical.Get = L_Id then
                    Lexical.Next;
                    return True;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Activer;

    function Parse_Corps_Effet return Boolean is
        The_Token : Lexical.Token;
        Parse_Ok : Boolean := False;
    begin  
        while Lexical.Get = L_Activer or else Lexical.Get = L_Desactiver or else  
                 Lexical.Get = L_Modifier or else Lexical.Get = L_Evoluer loop

            -- !!!! prevoir table des first !!!!

            The_Token := Lexical.Get;
            case The_Token is
                when L_Activer =>
                    Lexical.Next;
                    Parse_Ok := Parse_Activer;
                when L_Desactiver =>
                    Lexical.Next;
                    Parse_Ok := Parse_Desactiver;
                when L_Modifier =>
                    Lexical.Next;
                    Parse_Ok := Parse_Modifier;
                when L_Evoluer =>
                    Lexical.Next;
                    Parse_Ok := Parse_Evoluer;
                when others =>
                    Parse_Ok := False;
            end case;
            exit when not Parse_Ok;

        end loop;
        return Parse_Ok;
    end Parse_Corps_Effet;

    function Parse_Liste_Param return Boolean is
        Parse_Ok : Boolean := True;
    begin  
        if Lexical.Get = L_Id then
            Lexical.Next;
            while Lexical.Get = L_Comma loop
                Lexical.Next;
                if Lexical.Get = L_Id then
                    Lexical.Next;
                    Parse_Ok := True;
                else
                    Parse_Ok := False;
                    exit;
                end if;
            end loop;
            return Parse_Ok;
        else
            return False;
        end if;
    end Parse_Liste_Param;

    function Parse_Bloc_Param return Boolean is
    begin  
        if Lexical.Get = L_Open then
            Lexical.Next;
            if Parse_Liste_Param then
                if Lexical.Get = L_Close then
                    Lexical.Next;
                    return True;
                else
                    return False;
                end if;
            else
                return False;
            end if;  
        else
            return True; -- autorise aucun "param" declare
        end if;
    end Parse_Bloc_Param;

    function Parse_Effet return Boolean is
    begin  
        if Lexical.Get = L_Id then
            Lexical.Next;
            if Parse_Bloc_Param then
                if Lexical.Get = L_Est then
                    Lexical.Next;
                    if Parse_Corps_Effet then
                        if Lexical.Get = L_Fin then
                            Lexical.Next;
                            if Lexical.Get = L_Effet then
                                Lexical.Next;
                                return True;
                            else
                                return False;
                            end if;
                        else
                            return False;
                        end if;  
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;  
        else
            return False;
        end if;  
    end Parse_Effet;

    function Parse_Faire return Boolean is
    begin
        if Lexical.Get = L_Id then
            Lexical.Next;
            return Parse_Bloc_Param;
        else
            return False;
        end if;
    end Parse_Faire;

    function Parse_Repeter return Boolean is
    begin
        if Parse_Expression then
            if Lexical.Get = L_Fois then
                Lexical.Next;
                if Parse_Corps_Scene then
                    if Lexical.Get = L_Fin then
                        Lexical.Next;
                        if Lexical.Get = L_Repeter then
                            Lexical.Next;
                            return True;
                        else
                            return False;
                        end if;  
                    else
                        return False;
                    end if;  
                else
                    return False;
                end if;
            else
                return False;
            end if;  
        else
            return False;
        end if;

    end Parse_Repeter;

    function Parse_Sinon return Boolean is
    begin  
        if Lexical.Get = L_Sinon then
            Lexical.Next;
            if Lexical.Get = L_Faire then
                Lexical.Next;
                return Parse_Corps_Scene;
            else
                return False;
            end if;
        else
            return True; -- autorise l absence d un "sinon"
        end if;
    end Parse_Sinon;

    function Parse_Suite_Condition return Boolean is
        The_Token : Lexical.Token;
    begin  
        The_Token := Lexical.Get;
        case The_Token is  
            when L_Equ =>  
                Lexical.Next;
                return Parse_Expression;
            when L_Neq =>  
                Lexical.Next;
                return Parse_Expression;
            when L_Gt =>
                Lexical.Next;
                return Parse_Expression;
            when L_Lt =>
                Lexical.Next;
                return Parse_Expression;
            when L_Geq =>
                Lexical.Next;
                return Parse_Expression;
            when L_Leq =>
                Lexical.Next;
                return Parse_Expression;
            when others =>
                return False;
        end case;
    end Parse_Suite_Condition;

    function Parse_Condition return Boolean is
    begin
        if Parse_Expression then
            return Parse_Suite_Condition;
        else
            return False;
        end if;
    end Parse_Condition;

    function Parse_Si return Boolean is
    begin
        if Parse_Condition then
            if Lexical.Get = L_Alors then  
                Lexical.Next;
                if Lexical.Get = L_Faire then
                    Lexical.Next;
                    if Parse_Corps_Scene then
                        if Parse_Sinon then
                            if Lexical.Get = L_Fin then
                                Lexical.Next;
                                if Lexical.Get = L_Si then
                                    Lexical.Next;
                                    return True;
                                else
                                    return False;
                                end if;  
                            else
                                return False;
                            end if;  
                        else
                            return False;
                        end if;  
                    else
                        return False;
                    end if;  
                else
                    return False;
                end if;
            else
                return False;
            end if;  
        else
            return False;
        end if;
    end Parse_Si;

    function Parse_Autemps return Boolean is
    begin
        if Parse_Expression then  
            if Lexical.Get = L_Faire then
                Lexical.Next;
                if Parse_Corps_Scene then
                    if Lexical.Get = L_Fin then
                        Lexical.Next;
                        if Lexical.Get = L_Autemps then
                            Lexical.Next;
                            return True;  
                        else
                            return False;
                        end if;  
                    else
                        return False;
                    end if;  
                else
                    return False;
                end if;
            else
                return False;
            end if;  
        else
            return False;
        end if;
    end Parse_Autemps;

    function Parse_Ensequence return Boolean is
    begin
        if Lexical.Get = L_Faire then
            Lexical.Next;
            if Parse_Corps_Scene then
                if Lexical.Get = L_Fin then
                    Lexical.Next;
                    if Lexical.Get = L_Ensequence then
                        Lexical.Next;
                        return True;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Ensequence;

    function Parse_Pendant return Boolean is
    begin
        if Parse_Expression then
            if Lexical.Get = L_Faire then
                Lexical.Next;
                if Parse_Corps_Scene then
                    if Lexical.Get = L_Fin then
                        Lexical.Next;
                        if Lexical.Get = L_Pendant then
                            Lexical.Next;
                            return True;
                        else
                            return False;
                        end if;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;

    end Parse_Pendant;

    function Parse_Attendre return Boolean is
    begin
        return Parse_Expression;
    end Parse_Attendre;

    function Parse_Corps_Scene return Boolean is
        The_Token : Lexical.Token;
        Parse_Ok : Boolean := False;
    begin
        while Lexical.Get = L_Activer or else Lexical.Get = L_Desactiver or else
                 Lexical.Get = L_Modifier or else
                 Lexical.Get = L_Faire or else Lexical.Get = L_Evoluer or else
                 Lexical.Get = L_Id or else Lexical.Get = L_Repeter or else
                 Lexical.Get = L_Si or else Lexical.Get = L_Autemps or else
                 Lexical.Get = L_Ensequence or else
                 Lexical.Get = L_Pendant or else Lexical.Get = L_Attendre loop

            -- !!!! prevoir table des first !!!!
            The_Token := Lexical.Get;
            case The_Token is
                when L_Activer =>
                    Lexical.Next;  
                    Parse_Ok := Parse_Activer;
                when L_Desactiver =>
                    Lexical.Next;  
                    Parse_Ok := Parse_Desactiver;
                when L_Modifier =>
                    Lexical.Next;  
                    Parse_Ok := Parse_Modifier;
                when L_Evoluer =>
                    Lexical.Next;  
                    Parse_Ok := Parse_Evoluer;
                when L_Id =>
                    Lexical.Next;
                    if Lexical.Get = L_Affect then
                        Lexical.Next;
                        if Parse_Expression then
                            Parse_Ok := True;
                        else
                            Parse_Ok := False;
                        end if;
                    else
                        Parse_Ok := False;
                    end if;
                when L_Faire =>
                    Lexical.Next;
                    Parse_Ok := Parse_Faire;
                when L_Repeter =>
                    Lexical.Next;  
                    Parse_Ok := Parse_Repeter;
                when L_Si =>
                    Lexical.Next;
                    Parse_Ok := Parse_Si;
                when L_Autemps =>
                    Lexical.Next;  
                    Parse_Ok := Parse_Autemps;
                when L_Ensequence =>
                    Lexical.Next;
                    Parse_Ok := Parse_Ensequence;
                when L_Pendant =>  
                    Lexical.Next;
                    Parse_Ok := Parse_Pendant;
                when L_Attendre =>
                    Lexical.Next;
                    Parse_Ok := Parse_Attendre;
                when others =>
                    Parse_Ok := False;
            end case;  
            exit when not Parse_Ok;
        end loop;
        return Parse_Ok;
    end Parse_Corps_Scene;

    function Parse_Scene return Boolean is
    begin
        if Lexical.Get = L_Id then
            Lexical.Next;
            if Parse_Bloc_Param then
                if Lexical.Get = L_Est then
                    Lexical.Next;
                    if Parse_Corps_Scene then
                        if Lexical.Get = L_Fin then
                            Lexical.Next;
                            if Lexical.Get = L_Scene then
                                Lexical.Next;
                                return True;
                            else
                                return False;
                            end if;
                        else
                            return False;
                        end if;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Scene;

    function Parse_Corps_Experience return Boolean is
        The_Token : Lexical.Token;
        Parse_Ok : Boolean := True;
    begin  
        while Lexical.Get = L_Effet or else Lexical.Get = L_Scene loop
            The_Token := Lexical.Get;
            case The_Token is
                when L_Effet =>
                    Lexical.Next;
                    Parse_Ok := Parse_Effet;
                when L_Scene =>  
                    Lexical.Next;
                    Parse_Ok := Parse_Scene;
                when others =>
                    Parse_Ok := False;
            end case;
            exit when not Parse_Ok;
        end loop;  
        return Parse_Ok;
    end Parse_Corps_Experience;

    function Parse_Bloc_Experience return Boolean is
    begin
        if Lexical.Get = L_Experience then
            Lexical.Next;
            if Lexical.Get = L_Est then
                Lexical.Next;
                if Parse_Corps_Experience then
                    if Lexical.Get = L_Fin then
                        Lexical.Next;
                        if Lexical.Get = L_Experience then
                            Lexical.Next;  
                            return True;
                        else
                            return False;
                        end if;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else  
            return True; -- autorise aucun bloc "experience" declare
        end if;
    end Parse_Bloc_Experience;

    function Parse_Corps_Implantation return Boolean is  
        Parse_Ok : Boolean := False;
    begin
        while Lexical.Get = L_Id loop
            Lexical.Next;
            if Lexical.Get = L_Est then
                Lexical.Next;
                if Lexical.Get = L_Id then
                    Lexical.Next;
                    if Lexical.Get = L_En then
                        Lexical.Next;
                        if Lexical.Get = L_Nbr then
                            Lexical.Next;
                            Parse_Ok := True;
                        else
                            Parse_Ok := False;
                            exit;
                        end if;
                    else
                        Parse_Ok := False;
                        exit;
                    end if;
                else
                    Parse_Ok := False;
                    exit;
                end if;
            else
                Parse_Ok := False;
                exit;
            end if;
        end loop;
        return Parse_Ok;
    end Parse_Corps_Implantation;

    function Parse_Bloc_Implantation return Boolean is
    begin
        if Lexical.Get = L_Implantation then
            Lexical.Next;
            if Lexical.Get = L_Est then
                Lexical.Next;
                if Parse_Corps_Implantation then
                    if Lexical.Get = L_Fin then
                        Lexical.Next;
                        if Lexical.Get = L_Implantation then
                            Lexical.Next;
                            return True;
                        else
                            return False;
                        end if;
                    else
                        return False;
                    end if;  
                else
                    return False;
                end if;  
            else
                return False;
            end if;
        else
            return False;
        end if;


    end Parse_Bloc_Implantation;

    function Parse_Type return Boolean is
        The_Token : Lexical.Token;
        Parse_Ok : Boolean;
    begin
        The_Token := Lexical.Get;
        case The_Token is
            when L_Binaire =>
                Lexical.Next;
                Parse_Ok := True;
            when L_Temporel =>
                Lexical.Next;
                Parse_Ok := True;
            when L_Fugitif =>
                Lexical.Next;
                Parse_Ok := True;
            when L_Discret =>
                Lexical.Next;
                Parse_Ok := True;
            when others =>
                Parse_Ok := False;
        end case;
        return Parse_Ok;
    end Parse_Type;


    function Parse_Liste_D_Acteurs_Types return Boolean is
        Parse_Ok : Boolean := False;
    begin  
        while Lexical.Get = L_Id loop
            Lexical.Next;
            if Parse_Type then
                Parse_Ok := True;
            else
                Parse_Ok := False;
                exit;
            end if;
        end loop;
        return Parse_Ok;
    end Parse_Liste_D_Acteurs_Types;


    function Parse_Corps_Materiel return Boolean is
        Parse_Ok : Boolean := False;
    begin  
        while Lexical.Get = L_Categorie loop
            Lexical.Next;
            if Lexical.Get = L_Id then
                Lexical.Next;
                if Lexical.Get = L_Est then
                    Lexical.Next;
                    if Parse_Liste_D_Acteurs_Types then
                        if Lexical.Get = L_Fin then
                            Lexical.Next;
                            if Lexical.Get = L_Categorie then
                                Lexical.Next;
                                Parse_Ok := True;
                            else
                                Parse_Ok := False;
                                exit;
                            end if;
                        else
                            Parse_Ok := False;
                            exit;
                        end if;
                    else
                        Parse_Ok := False;
                        exit;
                    end if;
                else
                    Parse_Ok := False;
                    exit;
                end if;
            else
                Parse_Ok := False;
                exit;
            end if;
        end loop;
        return Parse_Ok;
    end Parse_Corps_Materiel;

    function Parse_Bloc_Materiel return Boolean is
    begin  
        if Lexical.Get = L_Materiel then
            Lexical.Next;
            if Lexical.Get = L_Est then
                Lexical.Next;
                if Parse_Corps_Materiel then
                    if Lexical.Get = L_Fin then
                        Lexical.Next;
                        if Lexical.Get = L_Materiel then
                            Lexical.Next;
                            return True;
                        else
                            return False;
                        end if;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Bloc_Materiel;


    function Parse_Corps_Spectacle return Boolean is
    begin
        if Parse_Bloc_Materiel then
            if Parse_Bloc_Implantation then
                if Parse_Bloc_Experience then
                    if Parse_Prog_Principal then
                        return True;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Corps_Spectacle;

    function Parse_Show return Boolean is
    begin
        if Lexical.Get = L_Spectacle then
            Lexical.Next;
            if Lexical.Get = L_Est then
                Lexical.Next;
                if Parse_Corps_Spectacle then
                    if Lexical.Get = L_Fin then
                        Lexical.Next;
                        if Lexical.Get = L_Spectacle then
                            Lexical.Next;
                            return Lexical.Get = L_Eof;
                        else
                            return False;
                        end if;
                    else
                        return False;
                    end if;
                else
                    return False;
                end if;
            else
                return False;
            end if;
        else
            return False;
        end if;
    end Parse_Show;

    procedure Parse (File_Name : in String) is

    begin
        Lexical.Open (File_Name);
        Lexical.Next;
        if Parse_Show then
            Text_Io.Put_Line ("file is ok");
        else
            Text_Io.Put_Line ("file is not ok");
        end if;

    end Parse;

end Parser;

E3 Meta Data

    nblk1=25
    nid=25
    hdr6=48
        [0x00] rec0=26 rec1=00 rec2=01 rec3=02a
        [0x01] rec0=01 rec1=00 rec2=24 rec3=040
        [0x02] rec0=1c rec1=00 rec2=14 rec3=004
        [0x03] rec0=00 rec1=00 rec2=1b rec3=02c
        [0x04] rec0=1d rec1=00 rec2=23 rec3=020
        [0x05] rec0=21 rec1=00 rec2=13 rec3=00a
        [0x06] rec0=19 rec1=00 rec2=10 rec3=024
        [0x07] rec0=21 rec1=00 rec2=0f rec3=00a
        [0x08] rec0=23 rec1=00 rec2=0a rec3=028
        [0x09] rec0=1e rec1=00 rec2=0d rec3=048
        [0x0a] rec0=22 rec1=00 rec2=19 rec3=03c
        [0x0b] rec0=13 rec1=00 rec2=11 rec3=054
        [0x0c] rec0=1d rec1=00 rec2=1d rec3=018
        [0x0d] rec0=19 rec1=00 rec2=1c rec3=012
        [0x0e] rec0=24 rec1=00 rec2=1e rec3=022
        [0x0f] rec0=06 rec1=00 rec2=1f rec3=028
        [0x10] rec0=21 rec1=00 rec2=16 rec3=04c
        [0x11] rec0=00 rec1=00 rec2=20 rec3=006
        [0x12] rec0=1a rec1=00 rec2=07 rec3=00c
        [0x13] rec0=22 rec1=00 rec2=1a rec3=006
        [0x14] rec0=1f rec1=00 rec2=22 rec3=02a
        [0x15] rec0=20 rec1=00 rec2=21 rec3=062
        [0x16] rec0=08 rec1=00 rec2=17 rec3=000
        [0x17] rec0=19 rec1=00 rec2=04 rec3=054
        [0x18] rec0=1b rec1=00 rec2=12 rec3=004
        [0x19] rec0=16 rec1=00 rec2=15 rec3=00a
        [0x1a] rec0=1f rec1=00 rec2=18 rec3=02c
        [0x1b] rec0=1e rec1=00 rec2=0e rec3=03e
        [0x1c] rec0=1c rec1=00 rec2=03 rec3=00c
        [0x1d] rec0=1e rec1=00 rec2=08 rec3=00a
        [0x1e] rec0=25 rec1=00 rec2=09 rec3=034
        [0x1f] rec0=1e rec1=00 rec2=02 rec3=004
        [0x20] rec0=1f rec1=00 rec2=05 rec3=010
        [0x21] rec0=1f rec1=00 rec2=06 rec3=016
        [0x22] rec0=1e rec1=00 rec2=0b rec3=032
        [0x23] rec0=1a rec1=00 rec2=0c rec3=000
        [0x24] rec0=62 rec1=0b rec2=42 rec3=600
    tail 0x2172acb4884ba57e3f81b 0x42a00088462060003
Free Block Chain:
  0x25: 0000  00 00 02 3d 80 02 66 3b 02 00 14 20 20 20 20 20  ┆   =  f;        ┆