---------------------------------
-- D. Mathieu                  --
--                             --
-- fichier P_Tsk_BAO.ads       --
--                             --
-- créé    le 13/12/98         --
-- modifié le 28/12/98         --
--                             --
---------------------------------
--
-- Paquetage permettant de créer une chaîne contenant le délai
-- (en secondes) écoulé depuis le temps passé en paramètre.
-- Permet de créer des chronogrammes.
-- Permet de créer une chaîne identifiant la tache appelante
--
-- type objet protégé T_SemN, sémaphore n-aire
-- type objet protégé T_RDV,  réalise les rendez-vous de N tâches
--                            (N = discriminant)
-- type objet protégé T_BAL,  boîte aux lettres génériques

-- Modif. du 29/12/98 :
--    Ajout du type  ajout type T_BAL

with Calendar;

package P_Tsk_BAO is

    ------------------------------------------
    -- Sous-programmes de traçage de tâches --
    ------------------------------------------
    function Estampiller   (Debut : in Calendar.Time) return String;

    function S_Identifier  return String;

    ----------------------------------
    --  Tâche d'affichage de chaîne --
    ----------------------------------

    task type T_TskAffiche is

        entry JAffiche (Ligne : in String);

    end T_TskAffiche;

    type T_PtrTskAffiche is access T_TskAffiche;

    --------------------------------------------------
    --     Type objet protégé de rendez-vous        --
    --------------------------------------------------

    protected type T_RDV (N : Positive) is
        entry Arrive;
    private
        NbreArrivés  : Natural := 0;
        NbreRepartis : Natural := 0;
        entry Attendre;
    end T_RDV;

    ---------------------------------------------
    --  Type objet protégé  : sémaphore n-aire --
    ---------------------------------------------

    protected type T_SemN (C0 : Natural := 1) is
        entry     P;
        procedure V;
        function  Count return Natural;
    private
        C : Natural := C0;
    end T_SemN;

    ------------------------------------------------------
    -- Type objet protégé générique : Boîte Aux Lettres --
    ------------------------------------------------------

    generic
        type T_Message is private;
    package P_BAL is
        protected type T_BAL is
            entry Deposer (LeMessage : in  T_Message);
            entry Retirer (LeMessage : out T_Message);
        private
            Plein        : Boolean := False;
            MessageLocal : T_Message;
        end T_BAL;
    end P_BAL;

end P_Tsk_BAO;