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

⟦0412cccdb⟧ Ada Source

    Length: 10240 (0x2800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Base, seg_05c2ed

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 Bd_Jeu;
with Services;  
with Gen;
use Gen;
with Solide;
with Maitre;
package body Base is

    Nb : Integer := 0;
    type T_Base;
    type A_Base is access T_Base;
    type Internal is
        record
            Mon_Solide : Solide.Objet;
            T : A_Base;
        end record;
    package Bd_Base is new Bd_Jeu (Solide => Objet, No_Solide => null);

    task type T_Base is
        entry Creer (Mon_Solide : in Solide.Objet);
        entry Collision (Tiers : in Gen.Tgenre; Fin : out Boolean);
        entry Top (Fin : out Boolean;
                   Tiers : out Gen.Tgenre;
                   Position : out Gen.Tposition);
        entry Detruire;
    end T_Base;
    task body T_Base is
        Moi : Solide.Objet;  
        Loc_Tiers : Gen.Tgenre := Gen.Non_Objet;
        Loc_Fin, En_Vie : Boolean := True;
        Changement : Integer := 3;

        procedure Traiter_Collision
                     (Tiers : in Gen.Tgenre; Fin : out Boolean) is
        begin
            case Tiers is
                when Gen.Tir | Gen.Asteroide =>
                    Fin := True;
                when Gen.Vaisseau =>
                    Solide.Vider (Le_Solide => Moi,
                                  Energie => Maitre.Energie_Ravitaillement);
                    if Solide.Vide (Le_Solide => Moi) then
                        Fin := True;
                    else
                        Fin := False;
                    end if;
                when Gen.Base | Gen.Non_Objet =>
                    Fin := False;
            end case;
        end Traiter_Collision;

    begin
        accept Creer (Mon_Solide : in Solide.Objet) do
            Moi := Mon_Solide;
        end Creer;
        while En_Vie loop  
            if Changement > 0 then
                Solide.Afficher (Le_Solide => Moi);
                Changement := Changement - 1;
            end if;  
            select  
                accept Collision (Tiers : in Gen.Tgenre; Fin : out Boolean) do
                    Traiter_Collision (Tiers => Tiers, Fin => Loc_Fin);
                    Fin := Loc_Fin;
                    Changement := 3;
                end Collision;
            or
                accept Top (Fin : out Boolean;
                            Tiers : out Gen.Tgenre;
                            Position : out Gen.Tposition) do
                    Position := Gen.Position_Nulle;
                    Tiers := Gen.Non_Objet;
                    Fin := False;
                end Top;
            or
                accept Detruire do
                    Solide.Detruire (Le_Solide => Moi);
                    En_Vie := False;
                end Detruire;  
            end select;
        end loop;
    end T_Base;

    function Creer (Position : in Gen.Tposition; Energie : in Gen.Tenergie)
                   return Objet is
        Loc_Base : Objet := new Internal;
    begin  
        Nb := Nb + 1;
        Loc_Base.Mon_Solide := Solide.Creer (Un_Solide => Loc_Base,
                                             Position => Position,
                                             Energie => Energie,
                                             Figure => 'B');
        Loc_Base.T := new T_Base;
        Bd_Base.Inserer (Le_Solide => Loc_Base, No => Nb);
        Loc_Base.T.Creer (Mon_Solide => Loc_Base.Mon_Solide);
        return Loc_Base;
    end Creer;

    procedure Top (La_Base : in Objet;
                   Fin : out Boolean;
                   Tiers : out Gen.Tgenre;
                   Position : out Gen.Tposition) is
    begin
        La_Base.T.Top (Fin => Fin, Tiers => Tiers, Position => Position);
    end Top;

    procedure Collision (La_Base : in Objet;
                         Tiers : in Gen.Tgenre;
                         Fin : out Boolean) is
    begin
        La_Base.T.Collision (Tiers => Tiers, Fin => Fin);
    end Collision;

    procedure Detruire (La_Base : in out Objet) is
    begin
        Bd_Base.Retirer (Le_Solide => La_Base);
        La_Base.T.Detruire;
        La_Base := null;
    end Detruire;

    procedure Initialiser is
        Une_Base : Objet;  
        Position : Gen.Tposition;
    begin
        Position.X := 1;
        Position.Y := Maitre.Last_Y - 1;
        Une_Base := Creer (Position => Position,
                           Energie => Maitre.Energie_Base);
    end Initialiser;

    procedure Traiter is
    begin
        null;
    end Traiter;

    procedure Terminer is  
        Une_Base : Objet;
    begin
        Bd_Base.Init;
        Une_Base := Bd_Base.Prendre;
        while Une_Base /= null loop
            Base.Detruire (La_Base => Une_Base);
            Une_Base := Bd_Base.Prendre;
        end loop;
    end Terminer;

end Base;

E3 Meta Data

    nblk1=9
    nid=5
    hdr6=c
        [0x00] rec0=23 rec1=00 rec2=01 rec3=068
        [0x01] rec0=1c rec1=00 rec2=07 rec3=020
        [0x02] rec0=19 rec1=00 rec2=06 rec3=016
        [0x03] rec0=14 rec1=00 rec2=08 rec3=048
        [0x04] rec0=23 rec1=00 rec2=04 rec3=060
        [0x05] rec0=06 rec1=00 rec2=02 rec3=000
        [0x06] rec0=23 rec1=00 rec2=04 rec3=004
        [0x07] rec0=0c rec1=00 rec2=05 rec3=000
        [0x08] rec0=39 rec1=8f rec2=00 rec3=008
    tail 0x2176b9af0895c81d99e68 0x42a00088462060003
Free Block Chain:
  0x5: 0000  00 03 01 06 80 0e 20 20 65 6e 64 20 50 72 65 6e  ┆        end Pren┆
  0x3: 0000  00 09 00 3e 80 11 69 6f 6e 20 3d 3e 20 50 6f 73  ┆   >  ion => Pos┆
  0x9: 0000  00 00 00 09 80 06 6f 6e 5f 54 69 72 06 00 1d 20  ┆      on_Tir    ┆