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

⟦e2a0ff598⟧ Ada Source

    Length: 11264 (0x2c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Robotetbrique, procedure Ne_Mise_En_Casier, seg_00e33e

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 Ne_Robot, Ne_Brique;
use Ne_Robot, Ne_Brique;
procedure Ne_Mise_En_Casier is
    package Robotetbrique is
        procedure Miseenboite;
    end Robotetbrique;

    package body Robotetbrique is

        A_Brick, A_Robot : Expertsystem.Reference;
        function Peutmettreenboite return Boolean is
        begin
            Reglesaisir:
                declare

                    function Robot_Match (R : Reference) return Boolean is
                    begin
                        return Peutprendre (R) and then not Tientbrique (R);
                    end Robot_Match;

                    function Brick_Match (B : Reference) return Boolean is
                    begin
                        return Surtas (B) and then Laplusgrandedutas (B);
                    end Brick_Match;

                    function Robot_Ok is
                       new Expertsystem.Collection.Findone (Robot_Match);
                    function Brick_Ok is
                       new Expertsystem.Collection.Findone (Brick_Match);


                begin  
                    A_Brick := Brick_Ok (Ne_Brique.All_Bricks);
                    A_Robot := Robot_Ok (Ne_Robot.All_Robots);

                    if Expertsystem.Collection.Isnotnull (A_Robot) and
                       Expertsystem.Collection.Isnotnull (A_Brick) then
                        Ne_Robot.Modifierpince (A_Robot, True);
                        Ne_Brique.Modifierlieu (A_Brick, Pince);
                        Put ("Le ");
                        Put (Ne_Robot.Nom (A_Robot));
                        Put (" prend la plus grande brique (taille=");
                        Put (Integer (Ne_Brique.Taille (A_Brick)));
                        Put_Line (") du tas dans sa pince ");

                        return True;
                    end if;
                end Reglesaisir;
            ---------------------

            Regletenir:
                declare

                    function Robot_Match (R : Reference) return Boolean is
                    begin
                        return Peutprendre (R) and then Tientbrique (R) and then
                                  Un_Plus_Ancien_Robot (R);
                    end Robot_Match;
                    function Brick_Match (B : Reference) return Boolean is
                    begin
                        return Danspince (B);
                    end Brick_Match;


                    function Robot_Ok is
                       new Expertsystem.Collection.Findone (Robot_Match);
                    function Brick_Ok is
                       new Expertsystem.Collection.Findone (Brick_Match);




                begin
                    A_Brick := Brick_Ok (Ne_Brique.All_Bricks);
                    A_Robot := Robot_Ok (Ne_Robot.All_Robots);

                    if Expertsystem.Collection.Isnotnull (A_Robot) and
                       Expertsystem.Collection.Isnotnull (A_Brick) then
                        Ne_Robot.Modifiertache (A_Robot, Deposer);
                        Ne_Robot.Modifieranc (A_Robot, Ne_Robot.Anciennete);
                        Put ("Le ");
                        Put (Ne_Robot.Nom (A_Robot));
                        Put_Line (" va deposer la brique");
                        return True;
                    end if;
                end Regletenir;
            ---------------------------------
            Reglecaser:
                declare
                    Rb                 : Tuple.Object;
                    Unebrique, Unrobot : Reference;

                    function Robot_Match (R : Reference) return Boolean is
                    begin
                        return Peutdeposer (R) and then  
                                  Un_Plus_Ancien_Robot (R);
                    end Robot_Match;

                    function Brick_Match (B : Reference) return Boolean is
                    begin
                        return Danspince (B);
                    end Brick_Match;

                    function Robot_Ok is
                       new Expertsystem.Collection.Findone (Robot_Match);
                    function Brick_Ok is
                       new Expertsystem.Collection.Findone (Brick_Match);
                begin
                    A_Brick := Brick_Ok (Ne_Brique.All_Bricks);
                    A_Robot := Robot_Ok (Ne_Robot.All_Robots);
                    if Expertsystem.Collection.Isnotnull (A_Robot) and
                       Expertsystem.Collection.Isnotnull (A_Brick) then
                        Ne_Brique.Modifierlieu (A_Brick, Boite);
                        Ne_Robot.Modifiertache (A_Robot, Prendre);
                        Ne_Robot.Modifierboite (A_Robot,
                                                Ne_Robot.Derniereboite);
                        Ne_Brique.Modifierboite
                           (A_Brick, Ne_Robot.Numeroboite (A_Robot));
                        Ne_Robot.Modifieranc (A_Robot, Ne_Robot.Anciennete);


                        Put ("Le ");
                        Put (Ne_Robot.Nom (A_Robot));
                        Put (" depose la brique dans la case");
                        Put (Integer (Ne_Robot.Numeroboite (A_Robot)));
                        Put_Line ("");

                        Ne_Robot.Modifierpince (A_Robot, False);
                        return True;
                    end if;
                end Reglecaser;
            ------------------------------------
            Reglearreter:
                declare
                    Rb      : Tuple.Object;
                    Unrobot : Reference;

                    function Robot_Match (R : Reference) return Boolean is
                    begin
                        return Peutprendre (R) and then not Tientbrique (R);
                    end Robot_Match;

                    function Brick_Match (B : Reference) return Boolean is
                    begin
                        return not Surtas (B);
                    end Brick_Match;

                    function Robot_Ok is
                       new Expertsystem.Collection.Findone (Robot_Match);
                    function Brick_Ok is
                       new Expertsystem.Collection.Findone (Brick_Match);
                begin
                    A_Brick := Brick_Ok (Ne_Brique.All_Bricks);
                    A_Robot := Robot_Ok (Ne_Robot.All_Robots);
                    if Expertsystem.Collection.Isnotnull (A_Robot) and
                       Expertsystem.Collection.Isnotnull (A_Brick) then

                        Put ("Le ");
                        Put (Ne_Robot.Nom (A_Robot));
                        Put_Line (" se suicide (plus de briques)");

                        Ne_Robot.Sesuicide (A_Robot);
                        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
            Ne_Robot.Creer;
            Ne_Brique.Creer;
            loop
                Mettreenboite;
                -- autres contextes a traiter
                exit;
            end loop;
        end Miseenboite;

    end Robotetbrique;


begin
    Robotetbrique.Miseenboite;

end Ne_Mise_En_Casier;


E3 Meta Data

    nblk1=a
    nid=0
    hdr6=14
        [0x00] rec0=1f rec1=00 rec2=01 rec3=048
        [0x01] rec0=16 rec1=00 rec2=02 rec3=006
        [0x02] rec0=1c rec1=00 rec2=03 rec3=03e
        [0x03] rec0=16 rec1=00 rec2=04 rec3=014
        [0x04] rec0=00 rec1=00 rec2=0a rec3=020
        [0x05] rec0=12 rec1=00 rec2=05 rec3=04c
        [0x06] rec0=18 rec1=00 rec2=06 rec3=024
        [0x07] rec0=00 rec1=00 rec2=09 rec3=00a
        [0x08] rec0=16 rec1=00 rec2=07 rec3=046
        [0x09] rec0=22 rec1=00 rec2=08 rec3=000
    tail 0x2170afb26821d7ac275c3 0x42a00088462063c03