|
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: 18432 (0x4800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Tds, seg_045532
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Error, Unbounded_String, Text_Io; package body Tds is package Unlimited_String is new Unbounded_String (5); type Symbol_Content (What : Kinds := Unknown) is record Name, Type_Name : Unlimited_String.Variable_String; Line, Column, Insertion_Order : Natural; case What is when Unknown => null; when Basic_Value => The_Value : Dynamic_Value.Object; when Record_Value => The_Table : Object; end case; end record; function Get_Name (S : in Symbol) return String is begin return Unlimited_String.Image (S.all.Name); end Get_Name; procedure Deep_Copy (Source : in Object; Target : in out Object) is begin if (Target = null) then Target := new Object_Content; end if; Target.Number_Of_Symbols := Source.all.Number_Of_Symbols; Tree.Deep_Copy (Source.all.Table, Target.all.Table); end Deep_Copy; procedure Deep_Copy (Source : in Symbol; Target : in out Symbol) is St : Object; V : Dynamic_Value.Object; begin -- si s2<>NULL c'est pas grave, le ramasse miette s'en occupe case Source.What is when Record_Value => Deep_Copy (Source.all.The_Table, St); Target := new Symbol_Content' (What => Record_Value, Name => Source.all.Name, Type_Name => Source.all.Type_Name, Line => Source.all.Line, Column => Source.all.Column, Insertion_Order => Source.all.Insertion_Order, The_Table => St); when Basic_Value => Dynamic_Value.Deep_Copy (Source.all.The_Value, V); Target := new Symbol_Content'(What => Basic_Value, The_Value => V, Name => Source.all.Name, Type_Name => Source.all.Type_Name, Line => Source.all.Line, Column => Source.all.Column, Insertion_Order => Source.all.Insertion_Order); when Unknown => Target := new Symbol_Content'(What => Unknown, Name => Source.all.Name, Type_Name => Source.all.Type_Name, Line => Source.all.Line, Column => Source.all.Column, Insertion_Order => Source.all.Insertion_Order); end case; end Deep_Copy; function Get_Name (Where : in Object; Id : in Natural) return String is It : Tree.Iterator; Stop : Boolean := False; S : Symbol; begin if ((Where.all.Number_Of_Symbols < Id) or (Id < 1)) then raise Id_Does_Not_Exist_In_This_Table; end if; Tree.Open (It, Where.all.Table); while (not Stop) loop S := Tree.Consult (It); -- on sait que le numero recherche existe => pas besoin de verifier at_end Stop := (S.all.Insertion_Order = Id); Tree.Next (It); end loop; return Unlimited_String.Image (S.all.Name); end Get_Name; function Get_Table (Where : in Object; Name : in String) return Object is S_Seek : Symbol; N : Unlimited_String.Variable_String; begin N := Unlimited_String.Value (Name); S_Seek := new Symbol_Content'(What => Unknown, Name => N, Type_Name => N, Line => 0, Column => 0, Insertion_Order => 0); if Tree.Exists (Where.all.Table, S_Seek) then Tree.Get_Value (Where.all.Table, S_Seek); if (S_Seek.What = Record_Value) then return S_Seek.The_Table; else raise Name_Does_Not_Correspond_To_A_Table; end if; else raise Name_Does_Not_Exist_In_This_Table; end if; end Get_Table; function Get_Access_On_Value (Where : in Object; Name : in String) return Dynamic_Value.Object is S_Seek : Symbol; N : Unlimited_String.Variable_String; begin N := Unlimited_String.Value (Name); S_Seek := new Symbol_Content'(What => Unknown, Name => N, Type_Name => N, Line => 0, Column => 0, Insertion_Order => 0); if Tree.Exists (Where.all.Table, S_Seek) then Tree.Get_Value (Where.all.Table, S_Seek); if (S_Seek.What = Basic_Value) then return S_Seek.The_Value; else raise Name_Does_Not_Correspond_To_A_Value; end if; else raise Name_Does_Not_Exist_In_This_Table; end if; end Get_Access_On_Value; function Get_Kind_Of_Symbol (Where : in Object; Name : in String) return Kinds is S_Seek : Symbol; N : Unlimited_String.Variable_String; begin N := Unlimited_String.Value (Name); S_Seek := new Symbol_Content'(What => Unknown, Name => N, Type_Name => N, Line => 0, Column => 0, Insertion_Order => 0); if Tree.Exists (Where.all.Table, S_Seek) then Tree.Get_Value (Where.all.Table, S_Seek); return S_Seek.What; else raise Name_Does_Not_Exist_In_This_Table; end if; end Get_Kind_Of_Symbol; function Get_Number_Of_Symbols (Where : in Object) return Natural is begin return Where.all.Number_Of_Symbols; end Get_Number_Of_Symbols; function Get_Type_Name (Where : in Object; Name : in String) return String is S_Seek : Symbol; N : Unlimited_String.Variable_String; begin N := Unlimited_String.Value (Name); S_Seek := new Symbol_Content'(What => Unknown, Name => N, Type_Name => N, Line => 0, Column => 0, Insertion_Order => 0); if Tree.Exists (Where.all.Table, S_Seek) then Tree.Get_Value (Where.all.Table, S_Seek); return Unlimited_String.Image (S_Seek.Type_Name); else raise Name_Does_Not_Exist_In_This_Table; end if; end Get_Type_Name; procedure Print (S : in Symbol); procedure Print (T : Tree.Object) is It : Tree.Iterator; begin if not Tree.Is_Empty (T) then Tree.Open (It, T); while not (Tree.At_End (It)) loop Print (Tree.Consult (It)); Tree.Next (It); end loop; end if; end Print; procedure Print (What : in Object) is begin Text_Io.Put_Line (" TABLE "); Text_Io.Put_Line ("_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_"); Text_Io.New_Line; Print (What.all.Table); Text_Io.New_Line; Text_Io.Put_Line (" FIN DE LA TABLE "); end Print; procedure Print (S : in Symbol) is begin Text_Io.Put (" symbol "); Text_Io.Put (Kinds'Image (S.all.What)); Text_Io.Put (" nom: " & Unlimited_String.Image (S.all.Name) & " type: " & Unlimited_String.Image (S.all.Type_Name)); Text_Io.Put (" l: " & Natural'Image (S.all.Line) & " c: " & Natural'Image (S.all.Column)); Text_Io.Put (" N# : " & Natural'Image (S.all.Insertion_Order)); case S.all.What is when Unknown => null; when Basic_Value => Text_Io.Put (" valeur: "); Dynamic_Value.Print (S.all.The_Value); Text_Io.New_Line; when Record_Value => Text_Io.New_Line; if not Tree.Is_Empty (S.all.The_Table.all.Table) then Text_Io.Put_Line ("-------------- Contenu du Record ----"); Print (S.all.The_Table.all.Table); Text_Io.Put_Line ("--------------- Fin du record ------"); Text_Io.New_Line; end if; end case; end Print; procedure Insert_Value_Symbol (Where : in out Object; N : in String; L, C : in Natural; Initial_Value : Dynamic_Value.Object) is Sn, Tn : Unlimited_String.Variable_String; S : Symbol; begin if (Where = null) then Where := new Object_Content; end if; Where.all.Number_Of_Symbols := Where.Number_Of_Symbols + 1; Sn := Unlimited_String.Value (N); Tn := Unlimited_String.Value (Dynamic_Value.Kinds'Image (Dynamic_Value.Get_Kind (Initial_Value))); S := new Symbol_Content' (What => Basic_Value, The_Value => Initial_Value, Name => Sn, Type_Name => Tn, Line => L, Column => C, Insertion_Order => Where.all.Number_Of_Symbols); Tree.Insert (Where.all.Table, S); exception when Tree.Value_Already_Exists => Error.Set_Type_Error (Error.Field_Already_Exists); raise Error.Excep_Semantic_Error; end Insert_Value_Symbol; procedure Insert_Table_Symbol (Where : in out Object; N, T : in String; L, C : in Natural) is Empty_Table : Object; S : Symbol; Sn : Unlimited_String.Variable_String; Tn : Unlimited_String.Variable_String; begin if (Where = null) then Where := new Object_Content; end if; Where.all.Number_Of_Symbols := Where.all.Number_Of_Symbols + 1; Sn := Unlimited_String.Value (N); Tn := Unlimited_String.Value (T); Empty_Table := new Object_Content; S := new Symbol_Content'(What => Record_Value, Name => Sn, Type_Name => Tn, Line => L, Column => C, Insertion_Order => Where.all.Number_Of_Symbols, The_Table => Empty_Table); Tree.Insert (Where.all.Table, S); exception when Tree.Value_Already_Exists => Error.Set_Type_Error (Error.Field_Already_Exists); raise Error.Excep_Semantic_Error; end Insert_Table_Symbol; function Are_Equal (S1, S2 : Symbol) return Boolean is begin return (Get_Name (S1) = Get_Name (S2)); end Are_Equal; function "<" (S1, S2 : Symbol) return Boolean is begin return (Get_Name (S1) < Get_Name (S2)); end "<"; end Tds;
nblk1=11 nid=b hdr6=1c [0x00] rec0=22 rec1=00 rec2=01 rec3=050 [0x01] rec0=16 rec1=00 rec2=03 rec3=034 [0x02] rec0=0e rec1=00 rec2=04 rec3=080 [0x03] rec0=1b rec1=00 rec2=0e rec3=030 [0x04] rec0=19 rec1=00 rec2=11 rec3=00c [0x05] rec0=18 rec1=00 rec2=09 rec3=028 [0x06] rec0=1b rec1=00 rec2=05 rec3=030 [0x07] rec0=1b rec1=00 rec2=0c rec3=04a [0x08] rec0=00 rec1=00 rec2=08 rec3=00a [0x09] rec0=1d rec1=00 rec2=07 rec3=032 [0x0a] rec0=18 rec1=00 rec2=0d rec3=016 [0x0b] rec0=18 rec1=00 rec2=02 rec3=042 [0x0c] rec0=16 rec1=00 rec2=0a rec3=052 [0x0d] rec0=11 rec1=00 rec2=0f rec3=000 [0x0e] rec0=02 rec1=00 rec2=0b rec3=000 [0x0f] rec0=02 rec1=00 rec2=0b rec3=000 [0x10] rec0=00 rec1=00 rec2=00 rec3=000 tail 0x21541a05a864a816400b0 0x42a00088462060003 Free Block Chain: 0xb: 0000 00 10 00 12 80 01 3b 01 00 08 65 6e 64 20 54 64 ┆ ; end Td┆ 0x10: 0000 00 06 00 04 80 01 20 01 02 03 04 05 06 07 08 09 ┆ ┆ 0x6: 0000 00 00 00 0a 00 07 20 20 20 20 65 6e 64 07 3a 3d ┆ end :=┆