DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

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 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ B T

⟦54771e342⟧ TextFile

    Length: 4022 (0xfb6)
    Types: TextFile
    Names: »B«

Derivation

└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
    └─ ⟦129cab021⟧ »DATA« 
        └─⟦this⟧ 

TextFile

with Text_Io;

package body Etape is

    package Int_Io is new Text_Io.Integer_Io (Num => Integer);



-- fonction privee : retourne l'etape suivante de l' etape courante de la liste etape

    function Etape_Suivante (E_Consultee : in P_Etape) return P_Etape is
    begin
        return E_Consultee.Suivant;
    end Etape_Suivante;


-- fonction privee : echange l'action d'une etape avec une autre action

    procedure Echange_Action (E_Modifiee : in out P_Etape;
                              Nouvelle_Action : in Action) is
    begin
        E_Modifiee.L_Action := Nouvelle_Action;
    end Echange_Action;


    -- fin des fonctions privees d'etape


-- fonction publique : creee une nouvelle cellule etape

    function Creer_Etape (Temps_E : in Temps;
                          Action_E : in Action;
                          E_Suivante : in P_Etape) return P_Etape is
        Result : P_Etape;
    begin  
        Result := new Cell_Etape;
        Result.Le_Temps := Temps_E;
        Result.L_Action := Action_E;
        Result.Suivant := E_Suivante;
        return Result;
    end Creer_Etape;



-- fonction publique : retourne le temps de l'etape

    function Temps_Etape (E_Consultee : in P_Etape) return Temps is
    begin
        return E_Consultee.Le_Temps;
    end Temps_Etape;


-- fonction publique : retourne true si l'etape est vide sinon retourne false

    function Etape_Est_Vide (E_Consultee : in P_Etape) return Boolean is
    begin
        return E_Consultee = Etape_Vide;
    end Etape_Est_Vide;



-- procedure publique : insere une etape dans la liste des etapes
--                      en classant celle-ci suivant son temps

    procedure Ajouter_Etape (E_Modifiee : in out P_Etape;
                             Temps_E : in Temps;
                             Action_E : in Action) is
        Tmp1 : P_Etape;

    begin  
        if (Etape_Est_Vide (E_Consultee => E_Modifiee)) then
            E_Modifiee := Creer_Etape (Temps_E => Temps_E,
                                       Action_E => Action_E,
                                       E_Suivante => Etape_Vide);
        else
            if (Temps_E = Temps_Etape (E_Consultee => E_Modifiee)) then  
                Echange_Action (E_Modifiee => E_Modifiee,
                                Nouvelle_Action => Action_E);
            else
                if (Temps_E > Temps_Etape (E_Consultee => E_Modifiee)) then  
                    Tmp1 := Etape_Suivante (E_Consultee => E_Modifiee);
                    Ajouter_Etape (E_Modifiee => Tmp1,
                                   Temps_E => Temps_E,
                                   Action_E => Action_E);
                    E_Modifiee.Suivant := Tmp1;
                else  
                    E_Modifiee := Creer_Etape (Temps_E => Temps_E,
                                               Action_E => Action_E,
                                               E_Suivante => E_Modifiee);
                end if;
            end if;
        end if;
    end Ajouter_Etape;



-- procedure publique : affiche l'integralite des informations contenues dans la liste etape

    procedure Affiche_Etape (E_Affichee : in P_Etape) is
        Tmp : P_Etape;
        Continu : Boolean := True;
    begin  
        Tmp := E_Affichee;
        while (Continu) loop  
            Text_Io.Put_Line ("");
            Text_Io.Put ("le temps :");
            Int_Io.Put (Tmp.Le_Temps);
            Text_Io.Put ("   l'action la valeur: ");
            Int_Io.Put (Tmp.L_Action.La_Valeur);
            if (Tmp.L_Action.La_Transition = 0) then
                Text_Io.Put ("  il n'y a pas de transition");
            else
                Text_Io.Put ("  la transition : ");
                Int_Io.Put (Tmp.L_Action.La_Transition);  
            end if;
            Tmp := Etape_Suivante (E_Consultee => Tmp);
            if (Etape_Est_Vide (E_Consultee => Tmp)) then
                Continu := False;
            end if;
        end loop;
        Text_Io.Put_Line ("");
    end Affiche_Etape;


end Etape;