|
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: 9216 (0x2400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body List, seg_03823e, seg_038ac8
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧ └─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Arguments; with Block_Class; with Bounded_String; with Message; with More_List1; with More_List2; with Msg_Report; with Object; with Scanner; with String_Utilities; with Symbol_Table; with Unparse_Report; package body List is procedure Bs_Copy (A_String : in out Scanner.B_String; A_Value : String) renames Bounded_String.Copy; function Bs_Image (A_String : Scanner.B_String) return String renames Bounded_String.Image; function Is_Equal_String (Str1 : String; Str2 : String; Ignore_Case : Boolean := True) return Boolean renames String_Utilities.Equal; function Su_Capitalize (A_String : String) return String renames String_Utilities.Capitalize; type Node_Structure is record Rule : Natural range 0 .. 1 := 0; Info : Natural range 0 .. 1 := 0; Mol1 : More_List1.Node := More_List1.Empty_Node; Mol2 : More_List2.Node := More_List2.Empty_Node; Iden : Scanner.B_String; Keyw : Message.Selector := Message.Void_Selector; Lign : Integer; end record; procedure Parse (N : in out Node; Error : out Boolean) is Failed : Boolean := False; use Scanner; begin Msg_Report.Information ("I enter in list's parse"); N := new Node_Structure; N.Lign := Scanner.Line_Number; if Scanner.Symbol = L_Identifier then Bs_Copy (N.Iden, Scanner.Value); Scanner.Next; if More_List1.Is_First (Scanner.Symbol) then N.Info := 1; More_List1.Parse (N.Mol1, Failed); end if; else Message.Copy (N.Keyw, Scanner.Value); Scanner.Next; N.Rule := 1; if Scanner.Symbol = L_Identifier then Bs_Copy (N.Iden, Scanner.Value); Scanner.Next; if More_List2.Is_First (Scanner.Symbol) then N.Info := 1; More_List2.Parse (N.Mol2, Failed); end if; else Failed := True; Msg_Report.Syntax_Error ("identifier expected, not"); end if; end if; Msg_Report.Information ("I leave list's parse with failed = " & Boolean'Image (Failed)); Error := Failed; end Parse; procedure Unparse (N : Node) is begin case N.Rule is when 0 => Unparse_Report.Write (Su_Capitalize (Bs_Image (N.Iden)) & " "); if N.Info = 1 then More_List1.Unparse (N.Mol1); end if; when 1 => Unparse_Report.Write (Su_Capitalize (Message.Image (N.Keyw))); Unparse_Report.Write (Su_Capitalize (Bs_Image (N.Iden)) & " "); if N.Info = 1 then More_List2.Unparse (N.Mol2); end if; end case; end Unparse; function Is_First (T : Scanner.Token) return Boolean is use Scanner; begin return T = L_Identifier or else T = L_Key_Word; end Is_First; function Interpret (N : Node; Inherited : Object.Reference := Object.Void_Reference; A_Keyword_Mess : Message.Selector := Message.Void_Selector; A_List : Arguments.List := Arguments.Void_Arguments) return Object.Reference is Result : Object.Reference := Object.Void_Reference; Arg : Object.Reference; Arg_List : Arguments.List; Keyword_Mess, Msg : Message.Selector := Message.Void_Selector; begin Msg_Report.Information ("I enter in list's interpret"); Msg_Report.Set_Line_Number (N.Lign); Keyword_Mess := A_Keyword_Mess; Message.Extract_Keyword (Keyword_Mess, Msg); Arg_List := A_List; Arguments.First (Arg_List); Arguments.Read (Arg_List, Arg); if N.Rule = 0 then if Is_Equal_String (Message.Image (Msg), Block_Class.Evaluate_Msg) then Symbol_Table.Insert (N.Iden, Arg); else Msg_Report.Interpret_Error ("Incorrect call parameter :" & Message.Image (Msg)); raise Incorrect_Call_Parameter; end if; if N.Info = 1 then Result := More_List1.Interpret (N.Mol1, A_Keyword_Mess => Keyword_Mess, A_List => Arg_List); end if; else if Is_Equal_String (Message.Image (Msg), Message.Format (N.Keyw)) then Symbol_Table.Insert (N.Iden, Arg); else Msg_Report.Interpret_Error ("Incorrect call parameter :" & Message.Image (Msg)); raise Incorrect_Call_Parameter; end if; if N.Info = 1 then Result := More_List2.Interpret (N.Mol2, A_Keyword_Mess => Keyword_Mess, A_List => Arg_List); end if; end if; Msg_Report.Information ("I leave list's interpret with result :"); Msg_Report.Continue ("class = " & Object.Class'Image (Object.The_Class (Result)) & " ident = " & Integer'Image (Object.Identificator (Result))); return Result; end Interpret; end List;
nblk1=8 nid=8 hdr6=e [0x00] rec0=24 rec1=00 rec2=01 rec3=016 [0x01] rec0=06 rec1=00 rec2=06 rec3=046 [0x02] rec0=1e rec1=00 rec2=07 rec3=01a [0x03] rec0=24 rec1=00 rec2=04 rec3=044 [0x04] rec0=1b rec1=00 rec2=05 rec3=002 [0x05] rec0=17 rec1=00 rec2=02 rec3=02c [0x06] rec0=19 rec1=00 rec2=03 rec3=000 [0x07] rec0=08 rec1=00 rec2=08 rec3=000 tail 0x21531675a84e680d8f2ad 0x42a00088462060003 Free Block Chain: 0x8: 0000 00 00 00 06 00 00 00 00 00 00 73 74 3b 07 00 00 ┆ st; ┆