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

⟦7836844a2⟧ Ada Source

    Length: 12288 (0x3000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Robotetbrique, procedure Mise_En_Casier_1, seg_011e9a

Derivation

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

E3 Source Code



with Expertsystem;
use Expertsystem;
with Robot, Brique;
use Robot, Brique;
procedure Mise_En_Casier_1 is

    package Robotetbrique is
        procedure Miseenboite;
    end Robotetbrique;

    package body Robotetbrique is

        Casier : Natural := 0;

        function Peutmettreenboite return Boolean is
        begin
            Regle_Saisir_Tenir:
                --  (classe => robot,  tache => prendre)
                --  (classe => brique, lieu  => tas,   taille=> <x> )
                -- !(classe => brique, lieu  => tas,   taille=> (> <x>))
                --------------------------------------------------------
                declare
                    Rb : Tuple.Object;
                    Unebrique, Unrobot : Reference;

                    function Match (R, B : Reference) return Boolean is
                    begin
                        return Peutprendre (R) and then
                                  not Tientbrique (R) and then
                                  Surtas (B) and then Laplusgrandedutas (B);
                    end Match;

                    function Robotsaisir is new Tuplecollection.Join2 (Match);
                begin
                    Rb := Tuplecollection.First
                             (Robotsaisir (Lesrobots, Lesbriques));

                    if Tuple.Isnotnull (Rb) then
                        Unrobot := Tuple.First (Rb);
                        Unebrique := Tuple.Second (Rb);
                        Robot.Modifierpince (Unrobot, True);
                        Brique.Modifierlieu (Unebrique, Pince);
                        Robot.Modifiertache (Unrobot, Deposer);

                        Put_Line ("RegleSaisir : " & Robot.Nom (Unrobot) &
                                  " prend brique (taille=" &
                                  Integer'Image (Brique.Taille (Unebrique)) &
                                  " / couleur = " &
                                  Tcouleur'Image (Brique.Couleur (Unebrique)));
                        Put_Line (" ");

                        return True;
                    end if;
                end Regle_Saisir_Tenir;
            --
            -- Regletenir:
            --     --  (classe => robot,  tache => prendre)
            --     --  (classe => brique, lieu  => pince)
            --     --------------------------------------------
            --     declare
            --         Rb : Tuple.Object;
            --         Unrobot : Reference;
            --         Unebrique : Reference;
            --
            --         function Match (R, B : Reference) return Boolean is
            --         begin
            --             return Peutprendre (R) and then
            --                       Tientbrique (R) and then Danspince (B);
            --         end Match;
            --
            --         function Robottenir is new Tuplecollection.Join2 (Match);
            --
            --     begin
            --         Rb := Tuplecollection.First
            --                  (Robottenir (Lesrobots, Lesbriques));
            --
            --         if Tuple.Isnotnull (Rb) then
            --             Unrobot := Tuple.First (Rb);
            --             Unebrique := Tuple.Second (Rb);
            --             Robot.Modifiertache (Unrobot, Deposer);
            --
            --             Put ("RegleTenir : Le ");
            --             Put (Robot.Nom (Unrobot));
            --             Put (" va deposer la brique ");
            --             Put_Line (Tcouleur'Image (Brique.Couleur (Unebrique)));
            --             Put_Line (" ");
            --
            --             return True;
            --         end if;
            --     end Regletenir;
            --
            Reglecaser:
                --  (classe => robot, tache => deposer, case => <c>)
                --  (classe => brique, lieu => pince)
                ------------------------------------------------------
                declare
                    Rb : Tuple.Object;
                    Unebrique, Unrobot : Reference;

                    function Match (R, B : Reference) return Boolean is
                    begin
                        return Peutdeposer (R) and then Danspince (B);
                    end Match;

                    function Robotcaser is new Tuplecollection.Join2 (Match);

                begin
                    Rb := Tuplecollection.First
                             (Robotcaser (Lesrobots, Lesbriques));
                    if Tuple.Isnotnull (Rb) then
                        Unrobot := Tuple.First (Rb);
                        Unebrique := Tuple.Second (Rb);
                        Brique.Modifierlieu (Unebrique, Boite);
                        Robot.Modifiertache (Unrobot, Prendre);
                        Robot.Modifierboite (Unrobot, Robot.Derniereboite);
                        Brique.Modifierboite (Unebrique,
                                              Robot.Numeroboite (Unrobot));

                        Put ("RegleCaser : Le ");
                        Put (Robot.Nom (Unrobot));
                        Put (" depose la brique dans la case");
                        Put (Integer (Robot.Numeroboite (Unrobot)));
                        Put_Line (" ");

                        Robot.Modifierpince (Unrobot, False);
                        return True;
                    end if;
                end Reglecaser;

            Reglearreter:
                --  (classe => robot, tache => prendre)
                -- !(classe => brique, lieu => tas)
                -----------------------------------------
                declare
                    Rb : Tuple.Object;
                    Unrobot : Reference;

                    function Match (R, B : Reference) return Boolean is
                    begin
                        return Peutprendre (R) and then not Surtas (B);
                    end Match;

                    function Robotarreter is new Tuplecollection.Join2 (Match);

                begin
                    Rb := Tuplecollection.First
                             (Robotarreter (Lesrobots, Lesbriques));

                    if not Tuple.Isnull (Rb) then
                        Unrobot := Tuple.First (Rb);

                        Put ("RegleArreter : Le ");
                        Put (Robot.Nom (Unrobot));
                        Put_Line (" se suicide (plus de briques)");

                        Robot.Sesuicide (Unrobot);
                        return True;
                    end if;
                end Reglearreter;
            return False;
        end Peutmettreenboite;

        procedure Mettreenboite is
        begin
            loop
                exit when not Peutmettreenboite;
            end loop;
        end Mettreenboite;

        procedure Miseenboite is
        begin
            Robot.Creer;
            Brique.Creer;
            loop
                Mettreenboite;
                -- autres contextes a traiter
                exit;
            end loop;
        end Miseenboite;

    end Robotetbrique;


begin
    Robotetbrique.Miseenboite;
end Mise_En_Casier_1;

E3 Meta Data

    nblk1=b
    nid=7
    hdr6=14
        [0x00] rec0=1e rec1=00 rec2=01 rec3=074
        [0x01] rec0=00 rec1=00 rec2=0b rec3=004
        [0x02] rec0=14 rec1=00 rec2=05 rec3=042
        [0x03] rec0=17 rec1=00 rec2=02 rec3=014
        [0x04] rec0=16 rec1=00 rec2=06 rec3=04a
        [0x05] rec0=01 rec1=00 rec2=03 rec3=01e
        [0x06] rec0=15 rec1=00 rec2=08 rec3=030
        [0x07] rec0=18 rec1=00 rec2=04 rec3=03a
        [0x08] rec0=1e rec1=00 rec2=0a rec3=018
        [0x09] rec0=11 rec1=00 rec2=09 rec3=000
        [0x0a] rec0=28 rec1=00 rec2=00 rec3=010
    tail 0x2170df0fe82466d04f815 0x42a00088462060003
Free Block Chain:
  0x7: 0000  00 00 00 17 80 14 65 6e 74 62 72 69 71 75 65 20  ┆      entbrique ┆