DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b79007122⟧ Ada Source

    Length: 14336 (0x3800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Class_Boolean, seg_037062

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



with Class_Block;
with Class_String;
with Class_Printer;
with Block;
with Bounded_String;  
with String_Utilities;
with Text_Io;
with Bug_Report;

package body Class_Boolean is

    function Send (This_Message : Message.Unary; To : Object.Reference)
                  return Object.Reference is
        type E_Message is (Entexte, Image, Non);

        Token : E_Message;

        Mess : Message.Unary := This_Message;

        package Bs renames Bounded_String;

    begin

        Message.Init (Mess);
        if not Message.Is_Done (Mess) then
            declare
                use Object;
            begin
                Token := E_Message'Value (Bs.Image (V => Message.Get (Mess)));
                case Token is
                    when Non =>
                        if Object.Get (Index_From => To) = 1 then
                            return False;
                        else
                            return True;
                        end if;
                    when Entexte =>
                        Put (To);
                        return To;
                    when Image =>
                        if Object.Get (Index_From => To) = 1 then
                            return Class_String.Create (Bs.Value ("VRAI"));
                        else
                            return Class_String.Create (Bs.Value ("FAUX"));
                        end if;  
                end case;
            exception
                when Constraint_Error =>
                    raise Bug_Report.Unknown_Unary_Message;
            end;
        end if;
    end Send;


    function Send (This_Message : Message.Binary; To : Object.Reference)
                  return Object.Reference is
        type E_Message is (Et, Ou, Eou);

        Token : E_Message;

        Mess : Message.Binary := This_Message;

        package Bs renames Bounded_String;

        use Object;

    begin
        if Object.Get (Class_From => Message.Get (Argument_From => Mess)) =
           Object.Boolean_Class then
            begin
                Token := E_Message'Value
                            (Bs.Image (V => Message.Get (Name_From => Mess)));
                case Token is
                    when Et =>
                        if Object.Get (To) = 1 and
                           Object.Get (Message.Get (Mess)) = 1 then
                            return True;
                        else
                            return False;
                        end if;
                    when Ou =>
                        if Object.Get (To) = 1 or
                           Object.Get (Message.Get (This_Message)) = 1 then
                            return True;
                        else
                            return False;
                        end if;
                    when Eou =>
                        if Object.Get (To) = 1 xor
                           Object.Get (Message.Get (This_Message)) = 1 then
                            return True;
                        else
                            return False;
                        end if;
                end case;  
            exception
                when Constraint_Error =>
                    raise Bug_Report.Unknown_Binary_Message;
            end;
        else
            raise Bug_Report.Boolean_Bad_Type;
        end if;
    end Send;


    function Send (This_Message : Message.Keyword; To : Object.Reference)
                  return Object.Reference is

        type E_Message is (Sivrai, Sifaux);

        Token : E_Message;

        Mess : Message.Keyword := This_Message;
        Run : Message.Unary;

        Result : Object.Reference;

        package Bs renames Bounded_String;
        Val : Object.Tiny_String;

        use Object;

    begin  
        Bs.Copy (Val, Bs.Value ("Valeur"));
        Message.Init (Mess);
        Message.Put (This_Name => Val, Into => Run);
        Message.Init (This => Run);
        while not Message.Is_Done (Mess) loop
            if Object.Get (Class_From => Message.Get (Argument_From => Mess)) =
               Object.Block_Class then

                Token := E_Message'Value
                            (Bs.Image (V => Message.Get (Name_From => Mess)));
                case Token is
                    when Sivrai =>
                        if Object.Get (Index_From => To) = 1 then
                            return Class_Block.Send
                                      (Run, Message.Get
                                               (Argument_From => Mess));
                        end if;
                    when Sifaux =>
                        if Object.Get (Index_From => To) = 0 then
                            return Class_Block.Send
                                      (Run, Message.Get
                                               (Argument_From => Mess));
                        end if;
                end case;
            else
                raise Bug_Report.Boolean_Bad_Type;
            end if;  
            Message.Next (Mess);
        end loop;
        return To;
    exception
        when Constraint_Error =>
            raise Bug_Report.Unknown_Keyword_Message;
    end Send;


    function Create (Value : Object.Index := 0) return Object.Reference is  
    begin
        return Object.Create (Class => Object.Boolean_Class, Object => Value);
    end Create;

    procedure Create is
        Node : Block.Node := Block.Get_Current_Node;
    begin
        Block.Put_Into_Table (This_Object => Class_Boolean.True,
                              Named => Bounded_String.Value ("Vrai", 80),
                              Into_Block => Node);
        Block.Put_Into_Table (This_Object => Class_Boolean.False,
                              Named => Bounded_String.Value ("Faux", 80),
                              Into_Block => Node);
    end Create;

    function True return Object.Reference is
    begin
        return Object.Create (Class => Object.Boolean_Class, Object => 1);
    end True;


    function False return Object.Reference is
    begin
        return Object.Create (Class => Object.Boolean_Class, Object => 0);
    end False;


    procedure Put (An_Object : Object.Reference) is
        use Object;
    begin
        Class_Printer.Put ("Objet Booleen { Valeur => ");
        if Object.Get (Index_From => An_Object) = 1 then
            Class_Printer.Put ("Vrai }");
        else
            Class_Printer.Put ("Faux }");
        end if;
        Class_Printer.New_Line (2);
    end Put;

end Class_Boolean;

E3 Meta Data

    nblk1=d
    nid=a
    hdr6=14
        [0x00] rec0=25 rec1=00 rec2=01 rec3=018
        [0x01] rec0=00 rec1=00 rec2=04 rec3=01c
        [0x02] rec0=20 rec1=00 rec2=07 rec3=024
        [0x03] rec0=04 rec1=00 rec2=02 rec3=09c
        [0x04] rec0=18 rec1=00 rec2=03 rec3=01e
        [0x05] rec0=22 rec1=00 rec2=06 rec3=032
        [0x06] rec0=17 rec1=00 rec2=05 rec3=016
        [0x07] rec0=10 rec1=00 rec2=0c rec3=016
        [0x08] rec0=1c rec1=00 rec2=08 rec3=046
        [0x09] rec0=04 rec1=00 rec2=09 rec3=000
        [0x0a] rec0=04 rec1=00 rec2=09 rec3=000
        [0x0b] rec0=15 rec1=00 rec2=06 rec3=000
        [0x0c] rec0=24 rec1=00 rec2=0c rec3=54a
    tail 0x21530765684e181dfcea1 0x42a00088462060003
Free Block Chain:
  0xa: 0000  00 0b 00 14 80 03 75 65 2c 03 00 0b 20 20 20 20  ┆      ue,       ┆
  0xb: 0000  00 0d 00 ab 80 18 62 6a 65 63 74 2e 42 6f 6f 6c  ┆      bject.Bool┆
  0xd: 0000  00 00 00 04 80 01 5f 01 02 03 04 05 06 07 00 00  ┆      _         ┆