---------------------------------
-- D. Mathieu                  --
--                             --
-- fichier Essai10B.adb        --
--                             --
-- créé le 13/12/98            --
--                             --
---------------------------------
--
-- Programme de gestion des exceptions levées dans des tâches
-- filles. II - exceptions levées dans le corps des tâches
--
-- Le programme provoque l'édition suivante :
--
-- tsklesvilaines( 1)_0245D3A0 : commence
-- tsklesvilaines( 2)_02460168 : commence
-- tsklesvilaines( 3)_02462F30 : commence
-- tsklesautres( 1)_02465D18 : commence
-- tsklesautres( 1)_02465D18 : continue !!
-- tsklesautres( 2)_02468AE0 : commence
-- tsklesautres( 2)_02468AE0 : continue !!
-- tsklesautres( 3)_0246B8A8 : commence
-- tsklesautres( 3)_0246B8A8 : continue !!
-- tsklesautres( 1)_02465D18 : continue !!
-- tsklesautres( 2)_02468AE0 : continue !!
-- tsklesautres( 3)_0246B8A8 : continue !!
--
-- => Les exceptions levées lors de l'exécution du corps des tâches
--    NE SONT PAS PROPAGEES A LA TACHE CADRE si elles ne sont pas
--    interceptées localement.
--
with Ada.Text_IO, P_Tsk_BAO;
use  Ada.Text_IO, P_Tsk_BAO;

procedure Essai10B is

    I : Integer := 0;
 
    task type T_TskLesVilaines;
    task type T_TskLesAutres;
 
    task body T_TskLesVilaines is
 
        J : Integer;
 
    begin -- T_TskLesVilaines
 
        Put_Line (S_Identifier & " : commence");
        J := 3 / I;
 
--    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;
 
    TskLesVilaines : array (1..3) of T_TskLesVilaines;
    TskLesAutres   : array (1..3) of T_TskLesAutres;
 
begin -- Essai10B
 
    null;
 
  exception
    when Tasking_Error =>
        Put_Line ("Tache cadre : Tasking_Error");
    when others =>
        Put_Line ("Tache cadre : exception inattendue");
 
end Essai10B;