|
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 - metrics - download
Length: 52224 (0xcc00) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Motor, seg_048b95
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Text_Io, Bounded_String, Pieces, Actions, Objets, Token_Pkg, Directions, Int_Lib, Pnjs, Struct_Component, String_Table; package body Motor is procedure Go is Ok : Boolean; begin Ok := False; --Text_Io.Put_Line -- ("**************************** Execution des instructions GLOBALES"); Execute_Liste (Liste_Globale, Mode_All, Ok); --Text_Io.Put_Line ("**************************** Globales Executees"); --Text_Io.Put_Line -- ("**************************** Execution des instructions LOCALES"); Execute_Liste (Liste_Locale, Mode_All, Ok); --Text_Io.Put_Line ("**************************** Locales Executees"); if not Ok then --Text_Io.Put_Line -- ("**************************** Execution des instructions PSEUDO-GLOBALES"); Execute_Liste (Liste_Pseudo_Globale, Mode_First, Ok); --Text_Io.Put_Line -- ("**************************** Pseudo-Globales Executees"); end if; end Go; procedure Execute_Liste (Liste : Feuille.Liste_Instr.List; M : Mode; Ok : in out Boolean) is Iter : Feuille.Liste_Instr.Listiter; Executed : Boolean := False; begin Ok := False; Iter := Feuille.Liste_Instr.Makelistiter (Liste); while ((Feuille.Liste_Instr.More (Iter)) and (not (Executed))) loop Executed := Execute_Instr (Feuille.Liste_Instr.Cellvalue (Iter)); if Executed then Ok := True; end if; if M = Mode_All then Executed := False; end if; Feuille.Liste_Instr.Forward (Iter); end loop; end Execute_Liste; procedure Execute_Liste (Liste : Feuille.Liste_Instr_Locale.List; M : Mode; Ok : in out Boolean) is Iter : Feuille.Liste_Instr_Locale.Listiter; Instr : Feuille.Instr_Locale; Executed : Boolean := False; Success : Boolean := False; begin Ok := False; Iter := Feuille.Liste_Instr_Locale.Makelistiter (Liste); while (Feuille.Liste_Instr_Locale.More (Iter) and not Executed) loop Instr := Feuille.Liste_Instr_Locale.Cellvalue (Iter); if Bounded_String.Image (Instr.Piece) = Bounded_String.Image (Struct_Component.Liste_Structure.Cellvalue (Pieces.Piece_Courante).Name) then Execute_Liste (Instr.Liste, Mode_All, Ok); Executed := True; else Feuille.Liste_Instr_Locale.Forward (Iter); end if; end loop; end Execute_Liste; function Execute_Instr (Atree : Feuille.Pcell) return Boolean is Success : Boolean; begin Evalue (Atree, Success); return Success; end Execute_Instr; -- evalue une instruction procedure Evalue (Tree : in Pcell; Success : in out Boolean) is Iteratt : Struct_Component.Liste_Attribut.Listiter; Attrib : Struct_Component.Attribut; Iterstruc : Struct_Component.Liste_Structure.Listiter; Struc : Struct_Component.Structure; Ok : Boolean := True; A_Bool : Boolean := True; A_Nbr : Natural := 0; A_Str, Tmp_String : String_Table.I_String; use Feuille; use Int_Lib; use Token_Pkg; begin Bounded_String.Copy (A_Str, ""); Iterstruc := Pieces.Piece_Courante; Iteratt := Struct_Component.Liste_Attribut.Makelistiter (Struct_Component.Liste_Structure.Cellvalue (Iterstruc).Attribut); case Tree.Kind is when Egal => --Text_Io.Put_Line (">>>> J'evalue un egal ..."); Success := False; Consulte (Tree.Left, Iteratt, Ok); if not Ok then raise Illegal_Test; else Attrib := Struct_Component.Liste_Attribut.Cellvalue (Iteratt); --Text_Io.Put (" --Attribut teste : " & -- Bounded_String.Image (Attrib.Name)); --Text_Io.Put (" avec un : " & -- Tcell'Image (Tree.Right.Kind)); case Tree.Right.Kind is when Iter_S | Pnj | Hero | Piece_Courante | Objet => --Text_Io.Put -- (" - j'essaye avec une struc/Piece/objet/... : "); Consulte (Tree.Right, Iterstruc, Ok); if Ok then Struc := Struct_Component. Liste_Structure.Cellvalue (Iterstruc); --Text_Io.Put_Line -- (Bounded_String.Image (Struc.Name)); if Bounded_String.Image (Struct_Component.Get_Value (Iteratt)) = Bounded_String.Image (Struc.Name) then Success := True; else Success := False; end if; else Success := False; end if; when Booleen => --Text_Io.Put (" - j'essaye un booleen : "); Consulte (Tree.Right, A_Bool, Ok); --Text_Io.Put_Line ("Boolean'Image(ok));"); if Ok then if Struct_Component.Get_Value (Iteratt) = A_Bool then Success := True; else Success := False; end if; else Success := False; end if; when Entier => --Text_Io.Put (" - j'essaye avec un nombre : "); Consulte (Tree.Right, A_Nbr, Ok); if Ok then --Text_Io.Put_Line (Natural'Image (A_Nbr)); if Struct_Component.Get_Value (Iteratt) = A_Nbr then Success := True; else Success := False; end if; else Success := False; end if; when Chaine | Enum => --Text_Io.Put (" - j'essaye avec un enum/chaine : "); Consulte (Tree.Right, A_Str, Ok); if Ok then --Text_Io.Put (Bounded_String.Image (A_Str) & -- " qui doit etre egal a " & -- Bounded_String.Image -- (Struct_Component.Get_Value -- (Iteratt))); if Bounded_String.Image (Struct_Component.Get_Value (Iteratt)) = Bounded_String.Image (A_Str) then Success := True; else Success := False; end if; else Success := False; end if; when others => raise Illegal_Test; Success := False; end case; end if; when Et => --Text_Io.Put_Line (">>>> J'evalue un et"); Evalue (Tree.Left, Ok); if Ok then Evalue (Tree.Right, Ok); if Ok then Success := True; --Text_Io.Put_Line (">>>> ET est VRAI"); else Success := False; --Text_Io.Put_Line (">>>> ET est FAUX"); end if; else Success := False; end if; when Verbe => if Find (Actions.Table, Tree.Idattrib) = Interpretor_Result (1).Index then --Text_Io.Put (">>> je teste si le verbe est : "); --Text_Io.Put_Line (Bounded_String.Image (Tree.Idattrib)); if ((Tree.Left = null) and (Interpretor_Result (2).Token = T_End)) then Success := True; else if Tree.Left /= null then --Text_Io.Put (">>> Je teste si le(la) "); if Interpretor_Result (2).Token = T_Objet then case Tree.Left.Kind is when Complement => --Text_Io.Put_Line -- ("Complement/Direction est : "); Bounded_String.Copy (Tmp_String, Tree.Left.Idattrib); when Objet => --Text_Io.Put ("objet courant est : "); Bounded_String.Copy (Tmp_String, Struct_Component.Get_Name (Objets.Objet_Courant)); when others => raise Illegal_Test; end case; --Text_Io.Put_Line -- (Bounded_String.Image (Tmp_String)); if Find (Objets.Table, Tmp_String) = Interpretor_Result (2).Index then if ((Tree.Right = null) and (Interpretor_Result (3).Token = T_End)) then Success := True; else if Tree.Right /= null then --Text_Io.Put -- (">>>> Je test si le complement est : "); --Text_Io.Put_Line -- (Bounded_String.Image -- (Tree.right.Idattrib)); if Find (Objets.Table, Tree.Right.Idattrib) = Interpretor_Result (3).Index then Success := True; else Success := False; end if; else Success := False; end if; end if; else Success := False; end if; else if Interpretor_Result (2).Token = T_Direction then --Text_Io.Put_Line ("direction est : " & -- Bounded_String.Image -- (Tree.Left.Idattrib)); if Find (Directions.Table, Tree.Left.Idattrib) = Interpretor_Result (2).Index then if ((Tree.Left.Left = null) and (Interpretor_Result (3).Token = T_End)) then Success := True; else Success := False; end if; else Success := False; end if; else Success := False; end if; end if; else Success := False; end if; end if; else Success := False; end if; when Vaut => Affecte (Tree, Success); when Alors => --Text_Io.Put (">>>> J'evalue un Si -"); Evalue (Tree.Left, Ok); if Ok then --Text_Io.Put_Line ("Test VRAI, J'effectue les instructions"); Execute_Liste (Tree.Right.Listeinst, Mode_All, Ok); Success := True; else --Text_Io.Put_Line ("Test FAUX"); Success := False; end if; when Feuille.Dire => --Text_Io.Put_Line (">>>> J'execute un Dire"); case Tree.Right.Kind is when Feuille.Chaine => Text_Io.Put_Line (Bounded_String.Image (Tree.Right.Phrase)); Success := True; when Feuille.Iter | Feuille.Piece_Courante | Feuille.Hero | Feuille.Pnj | Feuille.Objet => Consulte (Tree.Right, Iteratt, Ok); Text_Io.Put_Line (Bounded_String.Image (Struct_Component.Liste_Attribut.Cellvalue (Iteratt).Data.The_String)); Success := True; when others => raise Dire_Error; end case; when Feuille.Termine => Text_Io.Put_Line ("Le jeu est termine."); Success := True; raise Jeu_Termine; when others => raise Illegal_Expression; end case; end Evalue; --- affecte un vaut procedure Affecte (Tree : in Pcell; Success : in out Boolean) is Iteratt : Struct_Component.Liste_Attribut.Listiter; Attrib : Struct_Component.Attribut; Iteratt2 : Struct_Component.Liste_Attribut.Listiter; Attrib2 : Struct_Component.Attribut; Iterstruc : Struct_Component.Liste_Structure.Listiter; Iterstruc2 : Struct_Component.Liste_Structure.Listiter; Struc : Struct_Component.Structure; Ok : Boolean := True; A_Bool : Boolean := True; A_Nbr : Natural := 0; A_Str : String_Table.I_String; Oper : Feuille.Tcell; use Feuille; begin Bounded_String.Copy (A_Str, ""); Iterstruc := Pieces.Piece_Courante; Iteratt := Struct_Component.Liste_Attribut.Makelistiter (Struct_Component.Liste_Structure.Cellvalue (Iterstruc).Attribut); Iteratt2 := Struct_Component.Liste_Attribut.Makelistiter (Struct_Component.Liste_Structure.Cellvalue (Iterstruc).Attribut); Iterstruc2 := Pieces.Piece_Courante; --Text_Io.Put_Line (">>>> J' effectue un vaut"); case Tree.Left.Kind is when Iter => Consulte (Tree.Left, Iteratt, Ok); Attrib := Struct_Component.Liste_Attribut.Cellvalue (Iteratt); --Text_Io.Put_Line ("-- attribut : " & -- Bounded_String.Image (Attrib.Name) & -- " va contenir : "); case Tree.Right.Kind is when Iter => Consulte (Tree.Right, Iteratt2, Ok); --Text_Io.Put_Line -- (Bounded_String.Image -- (Struct_Component.Get_Name (Iteratt2))); if Ok then Struct_Component.Liste_Attribut.Modify (Iteratt, Struct_Component. Liste_Attribut.Cellvalue (Iteratt2)); Success := True; end if; when Iter_S => Consulte (Tree.Right, Iterstruc, Ok); --Text_Io.Put_Line -- ("la structure : " & -- Bounded_String.Image -- (Struct_Component.Get_Name (Iterstruc))); if Ok then Struct_Component.Set_Value (Attrib, Struct_Component.Get_Name (Iterstruc)); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else Success := False; end if; when Piece_Courante | Objet | Hero | Pnj => if Bounded_String.Image (Tree.Right.Idattrib) = "" then Consulte (Tree.Right, Iterstruc, Ok); Attrib := Struct_Component.Liste_Attribut.Cellvalue (Iteratt); Struct_Component.Copy (Attrib.Data, Struct_Component.Set_String (Attrib.Data.Name, Struct_Component.Get_Name (Iterstruc))); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else Consulte (Tree.Right, Iteratt2, Ok); Struct_Component.Liste_Attribut.Modify (Iteratt, Struct_Component. Liste_Attribut.Cellvalue (Iteratt2)); Success := True; end if; when Booleen => --Text_Io.Put_Line ("Je lis un Booleen"); Consulte (Tree.Right, A_Bool, Ok); --Text_Io.Put_Line ("Lecture Ok."); if Ok then Struct_Component.Set_Value (Attrib, A_Bool); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else Success := False; end if; when Entier => --Text_Io.Put_Line ("---- Je lis un entier"); Consulte (Tree.Right, A_Nbr, Ok); --Text_Io.Put_Line ("Lecture Ok."); if Ok then Struct_Component.Set_Value (Attrib, A_Nbr); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else Success := False; end if; when Chaine | Enum => Consulte (Tree.Right, A_Str, Ok); if Ok then if Tree.Right.Kind = Enum then if String_Table.Int_List.Isinlist (Attrib.Data.List_Of_Enum, A_Str) then Struct_Component.Set_Value (Attrib, A_Str); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else raise Illegal_Assignement; end if; else Struct_Component.Set_Value (Attrib, A_Str); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; end if; else Success := False; end if; when Plus | Moins | Div | Fois => --Text_Io.Put_Line ("--- je lis une operation "); Consulte (Tree.Right, Oper, A_Nbr, Ok); --Text_Io.Put_Line ("valeur : " & Tcell'Image (Oper)); --Text_Io.Put_Line (" avec : " & Natural'Image (A_Nbr)); if Ok then Success := True; case Oper is when Plus => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) + A_Nbr); when Moins => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) - A_Nbr); when Fois => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) * A_Nbr); when Div => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) / A_Nbr); when others => Success := False; end case; if Success then Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); else raise Illegal_Operator; end if; else raise Illegal_Assignement; end if; when others => Success := False; end case; when Piece_Courante | Pnj | Hero | Objet => if Bounded_String.Image (Tree.Left.Idattrib) = "" then Consulte (Tree.Left, Iterstruc, Ok); Consulte (Tree.Right, Iterstruc2, Ok); if Ok then Struct_Component.Is_Inside (Bounded_String.Image (Struct_Component.Get_Name (Iterstruc2)), Pieces.Liste, Pieces.Piece_Courante, Ok); if Ok then Success := True; else raise Illegal_Assignement; end if; else Consulte (Tree.Right, Iteratt, Ok); if Ok then Struct_Component.Is_Inside (Bounded_String.Image (Struct_Component.Get_Value (Iteratt)), Pieces.Liste, Pieces.Piece_Courante, Ok); if Ok then Success := True; else raise Illegal_Assignement; end if; else raise Illegal_Assignement; end if; end if; else --Text_Io.Put_Line (" === Je consulte un attrib a gauche "); Consulte (Tree.Left, Iteratt, Ok); Attrib := Struct_Component.Liste_Attribut.Cellvalue (Iteratt); --Text_Io.Put_Line ("-- attribut : " & -- Bounded_String.Image (Attrib.Name) & -- " va contenir : "); case Tree.Right.Kind is when Iter => Consulte (Tree.Right, Iteratt2, Ok); --Text_Io.Put_Line -- (Bounded_String.Image -- (Struct_Component.Get_Name (Iteratt2))); if Ok then Struct_Component.Liste_Attribut.Modify (Iteratt, Struct_Component. Liste_Attribut.Cellvalue (Iteratt2)); Success := True; end if; when Iter_S => Consulte (Tree.Right, Iterstruc, Ok); --Text_Io.Put_Line -- ("la structure : " & -- Bounded_String.Image -- (Struct_Component.Get_Name (Iterstruc))); if Ok then Struct_Component.Set_Value (Attrib, Struct_Component.Get_Name (Iterstruc)); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else Success := False; end if; when Piece_Courante | Objet | Hero | Pnj => if Bounded_String.Image (Tree.Right.Idattrib) = "" then --Text_Io.Put_Line (" affectation a une struc "); Consulte (Tree.Right, Iterstruc, Ok); Attrib := Struct_Component. Liste_Attribut.Cellvalue (Iteratt); Struct_Component.Copy (Attrib.Data, Struct_Component.Set_String (Attrib.Data.Name, Struct_Component.Get_Name (Iterstruc))); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else --Text_Io.Put_Line (" affectation a un attrib "); Consulte (Tree.Right, Iteratt2, Ok); Struct_Component.Liste_Attribut.Modify (Iteratt, Struct_Component. Liste_Attribut.Cellvalue (Iteratt2)); Success := True; end if; when Booleen => --Text_Io.Put_Line ("Je lis un Booleen"); Consulte (Tree.Right, A_Bool, Ok); --Text_Io.Put_Line ("Lecture Ok."); if Ok then Struct_Component.Set_Value (Attrib, A_Bool); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else Success := False; end if; when Entier => --Text_Io.Put_Line ("---- Je lis un entier"); Consulte (Tree.Right, A_Nbr, Ok); --Text_Io.Put_Line ("Lecture Ok."); if Ok then Struct_Component.Set_Value (Attrib, A_Nbr); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else Success := False; end if; when Chaine | Enum => Consulte (Tree.Right, A_Str, Ok); if Ok then if Tree.Right.Kind = Enum then if String_Table.Int_List.Isinlist (Attrib.Data.List_Of_Enum, A_Str) then Struct_Component.Set_Value (Attrib, A_Str); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; else raise Illegal_Assignement; end if; else Struct_Component.Set_Value (Attrib, A_Str); Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); Success := True; end if; else Success := False; end if; when Plus | Moins | Div | Fois => --Text_Io.Put_Line ("--- je lis une operation "); Consulte (Tree.Right, Oper, A_Nbr, Ok); --Text_Io.Put_Line ("valeur : " & Tcell'Image (Oper)); --Text_Io.Put_Line (" avec : " & -- Natural'Image (A_Nbr)); if Ok then Success := True; case Oper is when Plus => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) + A_Nbr); when Moins => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) - A_Nbr); when Fois => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) * A_Nbr); when Div => Struct_Component.Set_Value (Attrib, Struct_Component.Get_Value (Iteratt) / A_Nbr); when others => Success := False; end case; if Success then Struct_Component.Liste_Attribut.Modify (Iteratt, Attrib); else raise Illegal_Operator; end if; else raise Illegal_Assignement; end if; when others => Success := False; end case; end if; when others => raise Illegal_Assignement; end case; end Affecte; --- retourne element ( iterateur sur un attribut) procedure Consulte (Tree : in Pcell; Iteratt : in out Struct_Component.Liste_Attribut.Listiter; Success : in out Boolean) is Tmp_String : String_Table.I_String; use Feuille; begin if Tree.Kind /= Iter then if Bounded_String.Image (Tree.Idattrib) = "" then Success := False; else case Tree.Kind is when Objet | Hero | Pnj | Piece_Courante => Bounded_String.Copy (Tmp_String, Tree.Idattrib); case Tree.Kind is when Piece_Courante => Struct_Component.Is_Inside (Bounded_String.Image (Tmp_String), Struct_Component.Get_Value (Pieces.Piece_Courante), Iteratt, Success); when Hero => Struct_Component.Is_Inside (Bounded_String.Image (Tmp_String), Struct_Component.Get_Value (Pnjs.Hero), Iteratt, Success); when Objet => Struct_Component.Is_Inside (Bounded_String.Image (Tmp_String), Struct_Component.Get_Value (Objets.Objet_Courant), Iteratt, Success); when Pnj => Struct_Component.Is_Inside (Bounded_String.Image (Tmp_String), Struct_Component.Get_Value (Pnjs.Pnj_Courant), Iteratt, Success); when others => Success := False; end case; when others => --Text_Io.Put_Line (" Ce n'est pas un attrib."); Iteratt := Struct_Component.Liste_Attribut.Makelistiter (Struct_Component. Liste_Structure.Cellvalue (Pieces.Piece_Courante).Attribut); Success := False; end case; end if; else Iteratt := Tree.Aiter; Success := True; end if; end Consulte; --- retourne element_Global ou ident procedure Consulte (Tree : in Pcell; Iterstruc : in out Struct_Component.Liste_Structure.Listiter; Success : in out Boolean) is use Feuille; begin Success := True; case Tree.Kind is when Iter_S => Iterstruc := Tree.Aiter_S; when Piece_Courante => Iterstruc := Pieces.Piece_Courante; when Hero => Iterstruc := Pnjs.Hero; when Pnj => Iterstruc := Pnjs.Pnj_Courant; when Objet => Iterstruc := Objets.Objet_Courant; when others => Success := False; end case; end Consulte; --- retourne un booleen procedure Consulte (Tree : Pcell; A_Bool : in out Boolean; Success : in out Boolean) is use Feuille; begin Success := True; case Tree.Kind is when Booleen => A_Bool := Tree.Bool; when others => Success := False; end case; end Consulte; --- retourne un entier procedure Consulte (Tree : Pcell; A_Nbr : in out Natural; Success : in out Boolean) is use Feuille; begin if Tree.Kind = Entier then A_Nbr := Tree.Nbr; Success := True; else Success := False; end if; end Consulte; --- retourne une chaine ou un enum procedure Consulte (Tree : Pcell; A_Str : in out String_Table.I_String; Success : in out Boolean) is use Feuille; begin if Tree.Kind = Chaine then A_Str := Tree.Phrase; Success := True; else if Tree.Kind = Enum then A_Str := Tree.Idattrib; Success := True; else Success := False; end if; end if; end Consulte; --- retourne operateur plus valeur procedure Consulte (Tree : in Pcell; Op : in out Tcell; Nbr : in out Natural; Success : in out Boolean) is use Feuille; begin case Tree.Kind is when Plus | Moins | Fois | Div => Consulte (Tree.Right, Nbr, Success); if Success then Op := Tree.Kind; end if; when others => Success := False; end case; end Consulte; end Motor;
nblk1=32 nid=25 hdr6=60 [0x00] rec0=17 rec1=00 rec2=01 rec3=020 [0x01] rec0=1a rec1=00 rec2=0a rec3=03e [0x02] rec0=00 rec1=00 rec2=22 rec3=01c [0x03] rec0=18 rec1=00 rec2=06 rec3=012 [0x04] rec0=1b rec1=00 rec2=12 rec3=00e [0x05] rec0=12 rec1=00 rec2=1e rec3=040 [0x06] rec0=11 rec1=00 rec2=1a rec3=08e [0x07] rec0=14 rec1=00 rec2=19 rec3=016 [0x08] rec0=10 rec1=00 rec2=1b rec3=062 [0x09] rec0=17 rec1=00 rec2=2d rec3=070 [0x0a] rec0=15 rec1=00 rec2=2c rec3=022 [0x0b] rec0=0f rec1=00 rec2=27 rec3=06c [0x0c] rec0=0f rec1=00 rec2=18 rec3=040 [0x0d] rec0=12 rec1=00 rec2=13 rec3=044 [0x0e] rec0=14 rec1=00 rec2=21 rec3=008 [0x0f] rec0=19 rec1=00 rec2=10 rec3=03e [0x10] rec0=18 rec1=00 rec2=15 rec3=042 [0x11] rec0=16 rec1=00 rec2=1d rec3=042 [0x12] rec0=02 rec1=00 rec2=0b rec3=020 [0x13] rec0=12 rec1=00 rec2=23 rec3=04c [0x14] rec0=13 rec1=00 rec2=20 rec3=052 [0x15] rec0=00 rec1=00 rec2=09 rec3=028 [0x16] rec0=11 rec1=00 rec2=0c rec3=00c [0x17] rec0=13 rec1=00 rec2=17 rec3=068 [0x18] rec0=00 rec1=00 rec2=02 rec3=00c [0x19] rec0=12 rec1=00 rec2=07 rec3=070 [0x1a] rec0=13 rec1=00 rec2=16 rec3=042 [0x1b] rec0=00 rec1=00 rec2=24 rec3=008 [0x1c] rec0=12 rec1=00 rec2=2b rec3=008 [0x1d] rec0=14 rec1=00 rec2=2a rec3=01e [0x1e] rec0=13 rec1=00 rec2=28 rec3=05a [0x1f] rec0=14 rec1=00 rec2=11 rec3=04e [0x20] rec0=11 rec1=00 rec2=30 rec3=072 [0x21] rec0=11 rec1=00 rec2=2f rec3=012 [0x22] rec0=10 rec1=00 rec2=2e rec3=028 [0x23] rec0=11 rec1=00 rec2=1c rec3=056 [0x24] rec0=01 rec1=00 rec2=26 rec3=004 [0x25] rec0=11 rec1=00 rec2=1f rec3=044 [0x26] rec0=11 rec1=00 rec2=05 rec3=030 [0x27] rec0=00 rec1=00 rec2=31 rec3=00c [0x28] rec0=10 rec1=00 rec2=14 rec3=02e [0x29] rec0=14 rec1=00 rec2=29 rec3=020 [0x2a] rec0=17 rec1=00 rec2=08 rec3=074 [0x2b] rec0=11 rec1=00 rec2=0d rec3=040 [0x2c] rec0=17 rec1=00 rec2=04 rec3=066 [0x2d] rec0=1c rec1=00 rec2=32 rec3=016 [0x2e] rec0=21 rec1=00 rec2=03 rec3=04e [0x2f] rec0=1c rec1=00 rec2=0e rec3=000 [0x30] rec0=1c rec1=00 rec2=0e rec3=000 [0x31] rec0=00 rec1=04 rec2=00 rec3=000 tail 0x2174d161a865a7bdb7b12 0x42a00088462060003 Free Block Chain: 0x25: 0000 00 0f 00 4d 80 1a 20 20 20 20 20 20 20 20 20 20 ┆ M ┆ 0xf: 0000 00 00 00 0b 80 08 20 20 20 20 20 20 20 20 08 64 ┆ d┆