---------------------------------
-- D. Mathieu                  --
--                             --
-- fichier Essai10F.adb        --
--                             --
-- créé le 13/12/98            --
--                             --
---------------------------------
-- Programme de gestion des exceptions levées dans des tâches
-- filles. VI - exceptions levées au cours de l'exécution
-- d'une tâche créée dynamiquement dans la partie déclarative
-- de la tâche cadre.
--
-- Le programme provoque l'édition suivante :
--
-- t_tsklesautres( 1)_02465D18 : commence
-- t_tsklesautres( 1)_02465D18 : continue !!
-- Debut de la tache cadre
-- t_tsklesvilaines( 1)_0240188 : division par zero
-- t_tsklesautres( 1)_02465D18 : continue !!
--
-- => L'exception levée dans le corps de la classe fille, même créée
--    dynamiquement dans la partie déclarative, est interceptée par le
--    traitant d'exception de la tâche cadre.
--
with Ada.Text_IO, P_Tsk_BAO;
use  Ada.Text_IO, P_Tsk_BAO;

procedure Essai10F is

    I : Integer := 0;
 
    task type T_TskLesVilaines;
    task type T_TskLesAutres;
 
    task body T_TskLesVilaines is
 
        J : Integer;
 
    begin -- T_TskLesVilaines
 
        J := 3 / I;
        Put_Line (S_Identifier & " : commence");
 
    exception
        when others =>
             Put_Line (S_Identifier & " : division par zero");
 
    end T_TskLesVilaines;
 
    task body T_TskLesAutres is
 
    begin -- T_TskLesAutres
 
        Put_Line (S_Identifier & " : commence");
        for I in 1..2 loop
            Put_Line (S_Identifier & " : continue !!");
            delay 1.0;
        end loop;
 
    end T_TskLesAutres;
 
    type T_PtrTskLesVilaines is access T_TskLesVilaines;
    type T_PtrTskLesAutres   is access T_TskLesAutres;
 
    PtrLesAutres   : T_PtrTskLesAutres   := new T_TskLesAutres;
    PtrLesVilaines : T_PtrTskLesVilaines := new T_TskLesVilaines;
 
begin -- Essai10F
 
    Put_Line ("Debut de la tache cadre");
--    PtrLesAutres   := new T_TskLesAutres;
--    PtrLesVilaines := new T_TskLesVilaines;
 
  exception
    when Tasking_Error =>
        Put_Line ("Tache cadre : Tasking_Error");
    when others =>
        Put_Line ("Tache cadre : exception inattendue");
 
end Essai10F;