|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 11875 (0x2e63)
Types: TextFile
Names: »B«
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
with Search_Tree;
package body Symbol_Table is
procedure Insert (The_Name : in String; Ok : out Boolean) is
One_Element : Element := (The_Value => Integer'Last,
The_Type => Sans_Type,
The_Table => Index'First,
The_Class => (others => ' '),
The_Adresse => 0);
begin
if not Tree.Exist_Element
(The_Trees (Current_Table).The_Tree, The_Name) then
Tree.Insert_Element (The_Trees (Current_Table).The_Tree,
One_Element, The_Name);
Ok := True;
else
Ok := False;
end if;
end Insert;
procedure Set_Val (The_Name : in String;
The_Value : Value;
Ok : out Boolean) is
Succes : Boolean := False;
One_Element : Element;
Local_Current_Table : Index := Current_Table;
Found : Boolean;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
Tree.Consulter_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
One_Element.The_Value := The_Value;
Tree.Modifier_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
end if;
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
Ok := Succes;
end Set_Val;
procedure Set_Adress (The_Name : in String;
The_Adress : Integer;
Ok : out Boolean) is
Succes : Boolean := False;
One_Element : Element;
Local_Current_Table : Index := Current_Table;
Found : Boolean;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
Tree.Consulter_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
One_Element.The_Adresse := The_Adress;
Tree.Modifier_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
end if;
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
Ok := Succes;
end Set_Adress;
procedure Set_Type (The_Name : in String;
The_Type : Type_Element;
Ok : out Boolean) is
Succes : Boolean := False;
One_Element : Element;
begin
Tree.Consulter_Element (The_Trees (Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
One_Element.The_Type := The_Type;
Tree.Modifier_Element (The_Trees (Current_Table).The_Tree,
The_Name, One_Element, Succes);
end if;
Ok := Succes;
end Set_Type;
procedure Set_New_Table
(The_Name : in String; The_Table : Index; Ok : out Boolean) is
Succes : Boolean := False;
One_Element : Element;
begin
Tree.Consulter_Element (The_Trees (Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
One_Element.The_Table := The_Table;
Tree.Modifier_Element (The_Trees (Current_Table).The_Tree,
The_Name, One_Element, Succes);
end if;
Ok := Succes;
end Set_New_Table;
procedure Set_Class (The_Name : in String;
The_Class : in String;
Ok : out Boolean) is
Succes : Boolean := False;
One_Element : Element;
Local_Current_Table : Index := Current_Table;
Found : Boolean;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
Tree.Consulter_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
One_Element.The_Class :=
Tree.Normaliser (The_Class, 80); -- a remplacer le 80
Tree.Modifier_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
end if;
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
Ok := Succes;
end Set_Class;
procedure Get_Val (The_Name : in String;
The_Value : out Value;
Ok : out Boolean) is
Local_Current_Table : Index := Current_Table;
Found : Boolean;
Succes : Boolean := False;
One_Element : Element;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
Tree.Consulter_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
The_Value := One_Element.The_Value;
end if;
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
Ok := Succes;
end Get_Val;
procedure Get_Adress (The_Name : in String;
The_Adress : out Integer;
Ok : out Boolean) is
Local_Current_Table : Index := Current_Table;
Found : Boolean;
Succes : Boolean := False;
One_Element : Element;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
Tree.Consulter_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
The_Adress := One_Element.The_Adresse;
end if;
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
Ok := Succes;
end Get_Adress;
procedure Get_Type (The_Name : in String;
The_Type : out Type_Element;
Ok : out Boolean) is
Local_Current_Table : Index := Current_Table;
Succes : Boolean := False;
Found : Boolean;
One_Element : Element;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
Tree.Consulter_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
The_Type := One_Element.The_Type;
end if;
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
Ok := Succes;
end Get_Type;
procedure Get_Class (The_Name : in String;
The_Class : out String;
Ok : out Boolean) is
Local_Current_Table : Index := Current_Table;
Succes : Boolean := False;
Found : Boolean;
One_Element : Element;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
Tree.Consulter_Element
(The_Trees (Local_Current_Table).The_Tree,
The_Name, One_Element, Succes);
if Succes then
The_Class := One_Element.The_Class;
end if;
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
Ok := Succes;
end Get_Class;
procedure Get_Table (The_Name : in String;
The_Table : out Index;
Ok : out Boolean) is
Succes : Boolean := False;
One_Element : Element;
begin
Tree.Consulter_Element (The_Trees (Current_Table).The_Tree,
The_Name, One_Element, Succes);
Ok := Succes;
if Succes then
The_Table := One_Element.The_Table;
end if;
end Get_Table;
function Visible_Element (The_Name : in String) return Boolean is
Local_Current_Table : Index := Current_Table;
Found : Boolean;
begin
while Local_Current_Table /= 0 loop
Found := Tree.Exist_Element
(The_Trees (Local_Current_Table).The_Tree, The_Name);
if Found then
exit;
else
Local_Current_Table :=
The_Trees (Local_Current_Table).Imbrication;
end if;
end loop;
return Found;
end Visible_Element;
function Visible_Element_Local (The_Name : in String) return Boolean is
Found : Boolean;
begin
return Tree.Exist_Element
(The_Trees (Current_Table).The_Tree, The_Name);
end Visible_Element_Local;
procedure Set_Table (The_Name : in String; Ok : out Boolean) is
Succes : Boolean;
begin
if Current_Top_Index <= Index'Last then
Set_New_Table (The_Name, Current_Top_Index + 1, Succes);
if Succes then
Current_Top_Index := Current_Top_Index + 1;
Ok := True;
else
Ok := False;
end if;
else
raise Table_Pleine;
end if;
end Set_Table;
procedure Set_Current_Table (The_Name : in String; Ok : out Boolean) is
A_Table : Index;
Succes : Boolean;
begin
Get_Table (The_Name, A_Table, Succes);
if Succes then
if A_Table /= Index'First then -- table existe ?
Current_Table := A_Table;
Ok := True;
else
Ok := False;
end if;
else
Ok := False;
end if;
end Set_Current_Table;
procedure Leave_Table (Ok : out Boolean) is
begin
Current_Table := 1;
Ok := True;
end Leave_Table;
begin
for I in 1 .. Index'Last loop
Tree.Create (The_Trees (I).The_Tree);
end loop;
The_Trees (1).Imbrication := 0;
end Symbol_Table;