|
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 - download
Length: 13312 (0x3400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Boolean_Class, seg_0387df, seg_038a92, seg_038a9b
└─⟦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 Msg_Report; with Object; with String_Class; with String_Utilities; package body Boolean_Class is function Is_Equal_String (Str1 : String; Str2 : String; Ignore_Case : Boolean := True) return Boolean renames String_Utilities.Equal; -- creation d'un objet booleen -- =========================== function Create (Value : Boolean) return Object.Reference is use Object; Val : Integer; begin if Value then Val := 1; else Val := 0; end if; return Object.Create (C_Boolean, Val); end Create; function Unary_Msg_Not (The_Object : Object.Reference) return Object.Reference is Value : Integer; begin Value := Object.Identificator (The_Object); if Value = 0 then return Create (True); else return Create (False); end if; end Unary_Msg_Not; function Unary_Msg_Image (The_Object : Object.Reference) return Object.Reference is Value : Integer; begin Value := Object.Identificator (The_Object); if Value = 0 then Msg_Report.Information ("Boolean object = False"); return String_Class.Create (Predefined_False); else Msg_Report.Information ("Boolean object = True"); return String_Class.Create (Predefined_True); end if; end Unary_Msg_Image; function Binary_Msg_Or (The_Object : Object.Reference; Arg_Value : Integer) return Object.Reference is Value : Integer; begin Value := Object.Identificator (The_Object); if (Value = 1) or (Arg_Value = 1) then return Create (True); else return Create (False); end if; end Binary_Msg_Or; function Binary_Msg_And (The_Object : Object.Reference; Arg_Value : Integer) return Object.Reference is Value : Integer; begin Value := Object.Identificator (The_Object); if (Value = 1) and (Arg_Value = 1) then return Create (True); else return Create (False); end if; end Binary_Msg_And; function Keyword_Msg_If_True (The_Object, Arg_Object : Object.Reference) return Object.Reference is use Object; Value : Integer; New_Msg : Message.Selector; begin Value := Object.Identificator (The_Object); if (Value = 1) then Message.Copy (New_Msg, Block_Class.Evaluate_Msg); return Block_Class.Send (Arg_Object, New_Msg); else return Object.Void_Reference; end if; end Keyword_Msg_If_True; function Keyword_Msg_If_False (The_Object, Arg_Object : Object.Reference) return Object.Reference is use Object; Value : Integer; New_Msg : Message.Selector; begin Value := Object.Identificator (The_Object); if (Value = 0) then Message.Copy (New_Msg, Block_Class.Evaluate_Msg); return Block_Class.Send (Arg_Object, New_Msg); else return Object.Void_Reference; end if; end Keyword_Msg_If_False; -- envoi d'un message a un objet booleen -- ===================================== function Send (To_Object : Object.Reference; The_Message : Message.Selector; With_Arguments : Arguments.List := Arguments.Void_Arguments) return Object.Reference is use Object; Nb_Argument : Natural; Msg_List, Msg : Message.Selector := Message.Void_Selector; Arg_Object, Temporary_Result : Object.Reference; Result : Object.Reference := Object.Void_Reference; Arg_Value : Integer; Arg_List : Arguments.List; begin Nb_Argument := Arguments.How_Many (With_Arguments); if Nb_Argument = 0 then -- reception d'un message unaire if Is_Equal_String (Message.Image (The_Message), "Non") then Msg_Report.Information ("Boolean object: unary message -> Non"); Result := Unary_Msg_Not (To_Object); elsif Is_Equal_String (Message.Image (The_Message), "EnTexte") then Msg_Report.Information ("Boolean object: unary message -> Entexte"); Result := Unary_Msg_Image (To_Object); else Msg_Report.Interpret_Error ("Incorrect unary method " & Message.Image (The_Message) & " for Boolean object"); raise Incorrect_Method; end if; elsif not Message.Is_Keyword (The_Message) then -- reception d'un message binaire Arg_List := With_Arguments; Arguments.First (Arg_List); Arguments.Read (Arg_List, Arg_Object); Arg_Value := Object.Identificator (Arg_Object); if Is_Equal_String (Message.Image (The_Message), "|") then Msg_Report.Information ("Boolean object: binary message -> |"); Result := Binary_Msg_Or (To_Object, Arg_Value); elsif Is_Equal_String (Message.Image (The_Message), "&") then Msg_Report.Information ("Boolean object: binary message -> &"); Result := Binary_Msg_And (To_Object, Arg_Value); else Msg_Report.Interpret_Error ("Incorrect binary method " & Message.Image (The_Message) & " for Boolean object"); raise Incorrect_Method; end if; else -- reception d'un message a mots cles Message.Cat (Msg_List, The_Message); Arg_List := With_Arguments; Arguments.First (Arg_List); while (Nb_Argument /= 0) loop Arguments.Read (Arg_List, Arg_Object); Nb_Argument := Nb_Argument - 1; Message.Extract_Keyword (Msg_List, Msg); if Is_Equal_String (Message.Image (Msg), "SiVrai") then Msg_Report.Information ("Boolean object: keyword message -> SiVrai:"); Temporary_Result := Keyword_Msg_If_True (To_Object, Arg_Object); if Temporary_Result /= Object.Void_Reference then Result := Temporary_Result; end if; elsif Is_Equal_String (Message.Image (Msg), "SiFaux") then Msg_Report.Information ("Boolean object: keyword message -> SiFaux:"); Temporary_Result := Keyword_Msg_If_False (To_Object, Arg_Object); if Temporary_Result /= Object.Void_Reference then Result := Temporary_Result; end if; else -- message inexistant Msg_Report.Interpret_Error ("Incorrect keyword method " & Message.Image (Msg) & " for Boolean object"); raise Incorrect_Method; end if; end loop; end if; return Result; end Send; end Boolean_Class;
nblk1=c nid=a hdr6=12 [0x00] rec0=2d rec1=00 rec2=01 rec3=002 [0x01] rec0=08 rec1=00 rec2=06 rec3=052 [0x02] rec0=20 rec1=00 rec2=09 rec3=066 [0x03] rec0=23 rec1=00 rec2=05 rec3=012 [0x04] rec0=1d rec1=00 rec2=0c rec3=078 [0x05] rec0=1d rec1=00 rec2=07 rec3=078 [0x06] rec0=1d rec1=00 rec2=08 rec3=04c [0x07] rec0=1e rec1=00 rec2=0b rec3=028 [0x08] rec0=1f rec1=00 rec2=02 rec3=000 [0x09] rec0=02 rec1=00 rec2=0a rec3=000 [0x0a] rec0=dd rec1=46 rec2=40 rec3=000 [0x0b] rec0=7e rec1=00 rec2=00 rec3=000 tail 0x215319c5a84e773987f02 0x42a00088462060003 Free Block Chain: 0xa: 0000 00 03 00 0d 80 04 61 73 73 3b 04 00 00 00 00 00 ┆ ass; ┆ 0x3: 0000 00 04 03 fc 00 18 20 20 20 20 20 20 20 20 20 20 ┆ ┆ 0x4: 0000 00 00 00 21 80 04 6e 63 65 3b 04 00 17 20 20 20 ┆ ! nce; ┆