|
|
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: 37888 (0x9400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Our_Value, seg_049272
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Ext_String, Lex, Text_Io;
use Ext_String, Lex;
package body Our_Value is
----------------------------------------------------------------------------
-- Procedures de traitement des exceptions --
----------------------------------------------------------------------------
procedure Signal_Not_Implemented is
begin
Print ("Desole, Cette fonction n'est pas encore implementee!");
Print_New_Line;
end Signal_Not_Implemented;
----------------------------------------------------------------------------
function Verify_Type
(Val : Var_Value; Type_Var : Var_Type) return Boolean is
begin
if (Val.My_Type = Undefined) or else (Type_Var = Undefined) then
Print ("Il y a une operation sur une variable indefinie");
Print_New_Line;
return False;
elsif (Val.My_Type /= Type_Var) then
case Val.My_Type is
when Undefined =>
Print ("Operation illegale sur une variable indefinie");
Print_New_Line;
when Type_Value =>
Print ("Operation illegale sur un pointeur sur VAR_VALUE");
Print_New_Line;
when Type_Token =>
Print ("Operation illegale sur une variable jeton");
Print_New_Line;
when Type_Boolean =>
Print ("Operation illegale sur une variable booleenne");
Print_New_Line;
when Type_Integer =>
Print ("Operation illegale sur une variable entiere");
Print_New_Line;
when Type_String =>
Print ("Operation illegale sur une variable chaine");
Print_New_Line;
end case;
return False;
else
return True;
end if;
end Verify_Type;
----------------------------------------------------------------------------
-- procedures d'affectation (Set_Value => ":=") --
----------------------------------------------------------------------------
procedure Set_Value (Target : in out Var_Value; Source : Var_Value) is
begin
if Verify_Type (Source, Type_Token) and then
Verify_Type (Target, Type_Token) then
Verify_Print ("Target.My_Token <- " & Convert (Source.My_Token));
Verify_New_Line;
Target.My_Token := Source.My_Token;
elsif Verify_Type (Source, Type_Boolean) and then
Verify_Type (Target, Type_Token) then
Verify_Print ("Target.My_Boolean <- " &
Convert (Source.My_Boolean));
Verify_New_Line;
Target.My_Boolean := Source.My_Boolean;
elsif Verify_Type (Source, Type_Integer) and then
Verify_Type (Target, Type_Token) then
Verify_Print ("Target.My_Integer <- " &
Convert (Source.My_Integer));
Verify_New_Line;
Target.My_Integer := Source.My_Integer;
elsif Verify_Type (Source, Type_String) and then
Verify_Type (Target, Type_Token) then
Verify_Print ("Target.My_String <- " & Source.My_String);
Verify_New_Line;
Copy (Target.My_String, Source.My_String);
else
Print
("Il y a une tentative d'affectation entre des types incompatibles!");
raise Type_Conflict;
end if;
end Set_Value;
procedure Set_Value (Target : in out Var_Value; Source : P_Value) is
begin
if Verify_Type (Target, Type_Value) then
Verify_Print ("Target.My_Value <- P_Value");
Verify_New_Line;
Target.My_Value := Source;
end if;
end Set_Value;
procedure Set_Value (Target : in out Var_Value; Source : Lex.Token) is
begin
if Verify_Type (Target, Type_Token) then
Verify_Print ("Target.My_Token <- " & Convert (Source));
Verify_New_Line;
Target.My_Token := Source;
end if;
end Set_Value;
procedure Set_Value (Target : in out Var_Value; Source : Boolean) is
begin
if Verify_Type (Target, Type_Boolean) then
Verify_Print ("Target.My_Boolean <- " & Convert (Source));
Verify_New_Line;
Target.My_Boolean := Source;
end if;
end Set_Value;
procedure Set_Value (Target : in out Var_Value; Source : Integer) is
begin
if Verify_Type (Target, Type_Integer) then
Verify_Print ("Target.My_Integer <- " & Convert (Source));
Verify_New_Line;
Target.My_Integer := Source;
end if;
end Set_Value;
procedure Set_Value (Target : in out Var_Value; Source : Var_String) is
Local_Token : Lex.Token;
Local_Boolean : Boolean;
Local_Integer : Integer;
begin
if Is_Token_Op (Source) and then Verify_Type (Target, Type_Token) then
Local_Token := Convert (Source);
Set_Value (Target, Local_Token);
elsif Is_Boolean (Source) and then
Verify_Type (Target, Type_Boolean) then
Local_Boolean := Convert (Source);
Set_Value (Target, Local_Boolean);
elsif Is_Integer (Source) and then
Verify_Type (Target, Type_Integer) then
Local_Integer := Convert (Source);
Set_Value (Target, Local_Integer);
else
if Verify_Type (Target, Type_String) then
Verify_Print ("Target.My_String <- " & Source);
Verify_New_Line;
Copy (Target.My_String, Source);
end if;
end if;
end Set_Value;
----------------------------------------------------------------------------
-- fonctions de consultations --
----------------------------------------------------------------------------
function Get_Type (Val : Var_Value) return Var_Type is
begin
case Val.My_Type is
when Undefined =>
Verify_Print ("Get_Type -> Undefined");
when Type_Value =>
Verify_Print ("Get_Type -> Type_Value");
when Type_Token =>
Verify_Print ("Get_Type -> Type_Token");
when Type_Boolean =>
Verify_Print ("Get_Type -> Type_Boolean");
when Type_Integer =>
Verify_Print ("Get_Type -> Type_Integer");
when Type_String =>
Verify_Print ("Get_Type -> Type_String");
end case;
Verify_New_Line;
return Val.My_Type;
end Get_Type;
function Get_Type (Val : P_Value) return Var_Type is
begin
Verify_Print ("Get_Type -> Type_Value");
Verify_New_Line;
return Type_Value;
end Get_Type;
function Get_Type (Val : Lex.Token) return Var_Type is
begin
Verify_Print ("Get_Type -> Type_Token");
Verify_New_Line;
return Type_Token;
end Get_Type;
function Get_Type (Val : Boolean) return Var_Type is
begin
Verify_Print ("Get_Type -> Type_Boolean");
Verify_New_Line;
return Type_Boolean;
end Get_Type;
function Get_Type (Val : Integer) return Var_Type is
begin
Verify_Print ("Get_Type -> Type_Integer");
Verify_New_Line;
return Type_Integer;
end Get_Type;
function Get_Type (Val : Var_String) return Var_Type is
begin
Verify_Print ("Get_Type -> Type_String");
Verify_New_Line;
return Type_String;
end Get_Type;
----------------------------------------------------------------------------
function Get_Value (Val : Var_Value) return Lex.Token is
begin
if Verify_Type (Val, Type_Token) then
Verify_Print ("Get_Type -> " & Convert (Val.My_Token));
Verify_New_Line;
return Val.My_Token;
else
raise Type_Conflict;
end if;
end Get_Value;
function Get_Value (Val : Var_Value) return Boolean is
begin
if Verify_Type (Val, Type_Boolean) then
Verify_Print ("Get_Value -> " & Convert (Val.My_Boolean));
Verify_New_Line;
return Val.My_Boolean;
else
raise Type_Conflict;
end if;
end Get_Value;
function Get_Value (Val : Var_Value) return Integer is
begin
if Verify_Type (Val, Type_Integer) then
Verify_Print ("Get_Value -> " & Convert (Val.My_Integer));
Verify_New_Line;
return Val.My_Integer;
else
raise Type_Conflict;
end if;
end Get_Value;
function Get_Value (Val : Var_Value) return Var_String is
begin
if Verify_Type (Val, Type_String) then
Verify_Print ("Get_Value -> " & Val.My_String);
Verify_New_Line;
return Val.My_String;
else
raise Type_Conflict;
end if;
end Get_Value;
----------------------------------------------------------------------------
function Get_Value (Val : P_Value) return Lex.Token is
Local : Var_Value (Type_Value);
begin
Set_Value (Local, Val);
return Get_Value (Local);
end Get_Value;
function Get_Value (Val : P_Value) return Boolean is
Local : Var_Value (Type_Value);
begin
Set_Value (Local, Val);
return Get_Value (Local);
end Get_Value;
function Get_Value (Val : P_Value) return Integer is
Local : Var_Value (Type_Value);
begin
Set_Value (Local, Val);
return Get_Value (Local);
end Get_Value;
function Get_Value (Val : P_Value) return Var_String is
Local : Var_Value (Type_Value);
begin
Set_Value (Local, Val);
return Get_Value (Local);
end Get_Value;
----------------------------------------------------------------------------
procedure Print_Value (Val : P_Value) is
Local : Var_String;
begin
Verify_Print ("Print_Value :");
case Val.My_Type is
when Undefined =>
Print ("indefinie");
when Type_Value =>
Print_Value (Val.My_Value);
when Type_Token =>
Print (Convert (Val.My_Token));
when Type_Boolean =>
Print (Convert (Val.My_Boolean));
when Type_Integer =>
Print (Convert (Val.My_Integer));
when Type_String =>
Print (Val.My_String);
end case;
Verify_New_Line;
end Print_Value;
procedure Print_Value (Val : Var_Value) is
Local : Var_String;
begin
Verify_Print ("Print_Value :");
case Val.My_Type is
when Undefined =>
Print ("indefinie");
when Type_Value =>
Print_Value (Val.My_Value);
when Type_Token =>
Print (Convert (Val.My_Token));
when Type_Boolean =>
Print (Convert (Val.My_Boolean));
when Type_Integer =>
Print (Convert (Val.My_Integer));
when Type_String =>
Print (Val.My_String);
end case;
Verify_New_Line;
end Print_Value;
----------------------------------------------------------------------------
-- Fonctions sur des operations unaires --
----------------------------------------------------------------------------
function Op (Operator : Lex.Token; Val : Var_Value) return Boolean is
Val_Str : Var_String;
Local : Boolean;
begin
if Verify_Type (Val, Type_Boolean) then
if (Operator = Non) then
Copy (Val_Str, "non " & Convert (Val.My_Boolean));
Copy (Val_Str, Val_Str & " -> ");
Local := not Val.My_Boolean;
else
Copy (Val_Str, "Operation booleenne inconnue");
raise Type_Conflict;
end if;
else
Copy (Val_Str, "VAR_VALUE n'est pas de type TYPE_BOOLEAN");
raise Type_Conflict;
end if;
Verify_Print (Val_Str & Convert (Local));
Verify_New_Line;
return Local;
exception
when Type_Conflict =>
Print (Val_Str & " -> Type_Conflict");
Print_New_Line;
return False;
raise;
when others =>
Print (Val_Str & " -> exception non traitee");
Print_New_Line;
raise;
end Op;
----------------------------------------------------------------------------
function Op (Operator : Lex.Token; Val : Var_Value) return Integer is
Val_Str : Var_String;
Local : Integer;
begin
if Verify_Type (Val, Type_Integer) then
if (Operator = Plus) then
Copy (Val_Str, "+ " & Convert (Val.My_Integer));
Copy (Val_Str, Val_Str & " -> ");
Local := Val.My_Integer;
elsif (Operator = Minus) then
Copy (Val_Str, "- " & Convert (Val.My_Integer));
Copy (Val_Str, Val_Str & " -> ");
Local := -Val.My_Integer;
else
Copy (Val_Str, "Operateur entier inconnu");
raise Type_Conflict;
end if;
else
Copy (Val_Str, "VAR_VALUE n'est pas de type TYPE_INTEGER");
raise Type_Conflict;
end if;
Verify_Print (Val_Str & Convert (Local));
Verify_New_Line;
return Local;
exception
when Type_Conflict =>
Print (Val_Str & " -> Type_Conflict");
Print_New_Line;
return 0;
raise;
when others =>
Print (Val_Str & " -> Exception non traitee");
Print_New_Line;
raise;
end Op;
----------------------------------------------------------------------------
-- Fonctions sur des operations binaires --
----------------------------------------------------------------------------
function Op (Operator : Lex.Token; Val1, Val2 : Var_Value) return Boolean is
Val_Str : Var_String;
Local : Boolean;
begin
if (Val1.My_Type = Type_Boolean) and then
(Val2.My_Type = Type_Boolean) then
if (Operator = Et) then
Local := (Val1.My_Boolean and Val2.My_Boolean);
elsif (Operator = Ou) then
Local := (Val1.My_Boolean or Val2.My_Boolean);
elsif (Operator = Equal) then
Local := (Val1.My_Boolean = Val2.My_Boolean);
elsif (Operator = Not_Equal) then
Local := (Val1.My_Boolean /= Val2.My_Boolean);
else
Copy (Val_Str, "Operateur booleen inconnu");
raise Type_Conflict;
end if;
Copy (Val_Str, Convert (Val1.My_Boolean) & " ");
Copy (Val_Str, Val_Str & Convert (Operator) & " ");
Copy (Val_Str, Val_Str & Convert (Val2.My_Boolean));
Copy (Val_Str, Val_Str & " -> ");
elsif (Val1.My_Type = Type_Integer) and then
(Val2.My_Type = Type_Integer) then
if (Operator = Equal) then
Local := (Val1.My_Integer = Val2.My_Integer);
elsif (Operator = Not_Equal) then
Local := (Val1.My_Integer /= Val2.My_Integer);
elsif (Operator = Less) then
Local := (Val1.My_Integer < Val2.My_Integer);
elsif (Operator = Less_Equal) then
Local := (Val1.My_Integer <= Val2.My_Integer);
elsif (Operator = Great) then
Local := (Val1.My_Integer > Val2.My_Integer);
elsif (Operator = Great_Equal) then
Local := (Val1.My_Integer >= Val2.My_Integer);
else
Copy (Val_Str, "Operateur entier inconnu");
raise Type_Conflict;
end if;
Copy (Val_Str, Convert (Val1.My_Integer) & " ");
Copy (Val_Str, Val_Str & Convert (Operator) & " ");
Copy (Val_Str, Val_Str & Convert (Val2.My_Integer));
Copy (Val_Str, Val_Str & " -> ");
elsif (Val1.My_Type = Type_String) and then
(Val2.My_Type = Type_String) then
if (Operator = Equal) then
Local := Cmp (Val1.My_String, Val2.My_String);
elsif (Operator = Not_Equal) then
Local := not Cmp (Val1.My_String, Val2.My_String);
else
Copy (Val_Str, "Operateur chaine inconnu");
raise Type_Conflict;
end if;
Copy (Val_Str, Val1.My_String & " ");
Copy (Val_Str, Val_Str & Convert (Operator) & " ");
Copy (Val_Str, Val_Str & Val2.My_String);
Copy (Val_Str, Val_Str & " -> ");
else
Copy (Val_Str,
"Operation binaire booleenne avec operandes incompatibles");
raise Type_Conflict;
end if;
Verify_Print (Val_Str & Convert (Local));
Verify_New_Line;
return Local;
exception
when Type_Conflict =>
Print (Val_Str & " -> Type_Conflict");
Print_New_Line;
return False;
raise;
when others =>
Print (Val_Str & " -> Exception non traitee");
Print_New_Line;
raise;
end Op;
----------------------------------------------------------------------------
function Op (Operator : Lex.Token; Val1, Val2 : Var_Value) return Integer is
Val_Str : Var_String;
Local : Integer;
begin
if Verify_Type (Val1, Type_Integer) and then
Verify_Type (Val2, Type_Integer) then
if (Operator = Plus) then
Local := (Val1.My_Integer + Val2.My_Integer);
elsif (Operator = Minus) then
Local := (Val1.My_Integer - Val2.My_Integer);
elsif (Operator = Cross) then
Local := (Val1.My_Integer * Val2.My_Integer);
elsif (Operator = Slash) then
Local := (Val1.My_Integer / Val2.My_Integer);
else
Copy (Val_Str, "Operateur entier inconnu");
raise Type_Conflict;
end if;
Copy (Val_Str, Convert (Val1.My_Integer) & " ");
Copy (Val_Str, Val_Str & Convert (Operator) & " ");
Copy (Val_Str, Val_Str & Convert (Val2.My_Integer));
Copy (Val_Str, Val_Str & " -> ");
else
Copy (Val_Str,
"Operation binaire entiere avec operandes incompatibles");
raise Type_Conflict;
end if;
Verify_Print (Val_Str & Convert (Local));
Verify_New_Line;
return Local;
exception
when Type_Conflict =>
Print (Val_Str & " -> Type_Conflict");
Print_New_Line;
return 0;
raise;
when others =>
Print (Val_Str & " -> Exception non traitee");
Print_New_Line;
raise;
end Op;
----------------------------------------------------------------------------
function Op (Operator : Lex.Token; Val1, Val2 : Var_Value)
return Var_String is
Val_Str : Var_String;
Local : Var_String;
begin
if Verify_Type (Val1, Type_String) and then
Verify_Type (Val2, Type_String) then
if (Operator = Coma) then
Copy (Local, Val1.My_String & " & " & Val2.My_String);
else
Copy (Val_Str, "Operateur chaine inconnu");
raise Type_Conflict;
end if;
Copy (Val_Str, Val1.My_String & " ");
Copy (Val_Str, Val_Str & Convert (Operator) & " ");
Copy (Val_Str, Val_Str & Val2.My_String);
Copy (Val_Str, Val_Str & " -> ");
else
Copy (Val_Str,
"Operation binaire chaine avec operandes incompatibles");
raise Type_Conflict;
end if;
Verify_Print (Val_Str & Convert (Local));
Verify_New_Line;
return Local;
exception
when Type_Conflict =>
Print (Val_Str & " -> Type_Conflict");
Print_New_Line;
return Value (" _? , _? ");
raise;
when others =>
Print (Val_Str & " -> Exception non traitee");
Print_New_Line;
raise;
end Op;
----------------------------------------------------------------------------
end Our_Value;
nblk1=24
nid=8
hdr6=30
[0x00] rec0=1d rec1=00 rec2=01 rec3=03a
[0x01] rec0=1f rec1=00 rec2=15 rec3=006
[0x02] rec0=17 rec1=00 rec2=16 rec3=032
[0x03] rec0=1c rec1=00 rec2=1a rec3=000
[0x04] rec0=02 rec1=00 rec2=0a rec3=02c
[0x05] rec0=20 rec1=00 rec2=1b rec3=052
[0x06] rec0=1b rec1=00 rec2=22 rec3=008
[0x07] rec0=21 rec1=00 rec2=13 rec3=01a
[0x08] rec0=25 rec1=00 rec2=0d rec3=000
[0x09] rec0=1e rec1=00 rec2=0f rec3=038
[0x0a] rec0=24 rec1=00 rec2=0c rec3=04c
[0x0b] rec0=22 rec1=00 rec2=0b rec3=034
[0x0c] rec0=26 rec1=00 rec2=17 rec3=026
[0x0d] rec0=13 rec1=00 rec2=24 rec3=048
[0x0e] rec0=1f rec1=00 rec2=12 rec3=050
[0x0f] rec0=0f rec1=00 rec2=1f rec3=00c
[0x10] rec0=20 rec1=00 rec2=03 rec3=02c
[0x11] rec0=1c rec1=00 rec2=20 rec3=02a
[0x12] rec0=1b rec1=00 rec2=1e rec3=022
[0x13] rec0=1e rec1=00 rec2=23 rec3=05e
[0x14] rec0=1d rec1=00 rec2=02 rec3=074
[0x15] rec0=23 rec1=00 rec2=1d rec3=012
[0x16] rec0=1b rec1=00 rec2=10 rec3=00a
[0x17] rec0=14 rec1=00 rec2=14 rec3=000
[0x18] rec0=20 rec1=00 rec2=14 rec3=004
[0x19] rec0=1f rec1=00 rec2=10 rec3=01a
[0x1a] rec0=11 rec1=00 rec2=1e rec3=000
[0x1b] rec0=20 rec1=00 rec2=0a rec3=020
[0x1c] rec0=05 rec1=00 rec2=15 rec3=000
[0x1d] rec0=1b rec1=00 rec2=0c rec3=034
[0x1e] rec0=1b rec1=00 rec2=02 rec3=000
[0x1f] rec0=05 rec1=00 rec2=22 rec3=000
[0x20] rec0=8c rec1=00 rec2=00 rec3=000
[0x21] rec0=00 rec1=00 rec2=15 rec3=7cf
[0x22] rec0=00 rec1=00 rec2=00 rec3=000
[0x23] rec0=00 rec1=00 rec2=00 rec3=021
tail 0x21546833e865b5ee044d4 0x42a00088462060003
Free Block Chain:
0x8: 0000 00 05 00 2e 00 09 20 20 20 20 62 65 67 69 6e 09 ┆ . begin ┆
0x5: 0000 00 0e 01 91 80 1d 20 20 20 20 20 20 20 20 20 77 ┆ w┆
0xe: 0000 00 04 00 1d 80 0d 79 70 65 5f 43 6f 6e 66 6c 69 ┆ ype_Confli┆
0x4: 0000 00 11 03 fc 80 06 6e 64 20 69 66 3b 06 00 0e 20 ┆ nd if; ┆
0x11: 0000 00 06 01 ce 00 00 00 00 0c 20 20 20 20 20 20 20 ┆ ┆
0x6: 0000 00 18 03 fc 80 34 6f 6d 6d 75 74 65 20 28 56 61 ┆ 4ommute (Va┆
0x18: 0000 00 07 03 fc 80 2d 28 22 20 75 6e 65 20 63 68 61 ┆ -(" une cha┆
0x7: 0000 00 19 03 fc 80 3a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ┆ :----------┆
0x19: 0000 00 09 03 fc 80 05 65 21 22 29 3b 05 00 1f 20 20 ┆ e!"); ┆
0x9: 0000 00 21 03 fc 80 1a 77 68 65 6e 20 42 6f 6f 6c 65 ┆ ! when Boole┆
0x21: 0000 00 1c 03 fc 00 35 20 20 20 20 20 20 20 20 20 20 ┆ 5 ┆
0x1c: 0000 00 00 03 f9 80 24 20 4f 70 5f 43 6f 6d 6d 75 74 ┆ $ Op_Commut┆