#include "mask.h"


/**********************************************************************************************************
***********************************************************************************************************
*  EXCLUSION MUTUELLE PAR MASQUAGE   
***********************************************************************************************************
***********************************************************************************************************/
#include <signal.h>

/*! \ingroup Gmsk
\brief Masque d'inhibition des interruptions
*/

sigset_t ALL_BLOCKED ; /* pour masquer tous les signaux */

/*! \ingroup Gmsk
\brief Masque d'autorisation des interruptions
*/
sigset_t NO_BLOCKED;   /* ............ aucun signal     */

/*************************************************************
*    Masquage  
**************************************************************/

/*! \ingroup Gmsk
\brief Début d'exclusion mutuelle par masquage des interruptions

\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\b Implantation
L'implantation UNIX est très simple. Il suffit de changer le masque des signaux à la valeur définissant les signaux à bloquer.
*/

void FredMaskOn()
{
	sigprocmask(SIG_SETMASK, &ALL_BLOCKED, (sigset_t *)0);
}
/*************************************************************
*    Demasquage  
**************************************************************/
/*! \ingroup Gmsk
\brief Fin d'exclusion mutuelle par démasquage des interruptions

\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\b Implantation
L'implantation UNIX est très simple. Il suffit de changer le masque des signaux à la valeur définissant les signaux à laisser passer.
*/

void FredMaskOff()
{
	sigprocmask(SIG_SETMASK, &NO_BLOCKED, (sigset_t *)0);
}

/*************************************************************
*    Initialisation des masques
**************************************************************/
/*! \ingroup Gmsk
\brief Initialisation des masques de validation/inhibition des interruptions

\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\htmlonly <hr WIDTH="100%"> \endhtmlonly 
\b Implantation
L'implantation UNIX est très simple. Il suffit de définir le vecteur binaire autorisant/interdisant chacune des interruption. On garde la possibilité  de tuer le process  UNIX  en cas de programme en boucle infinie masquée en laissant passer le signal SIGINT 
*/

void FredMasksInit()
{ 
	sigfillset(&ALL_BLOCKED); /* on masque toutes les interruptions */
	sigdelset (&ALL_BLOCKED,SIGINT ); /* sauf   SIGINT  */
  sigemptyset(&NO_BLOCKED); /* on demasque toutes les interruptions */
}

