// Szablon programu obslugi sygnalow (ANSI)

#include <unistd.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define	BLAD	"Blad\n"

char z=0;

// Procedura przechwycenia sygnalu
void Przechwycenie_Sygnalu1(int sygnal)
{
	char x[256];
	sprintf(x,"Ogrodnik %d\n",getpid(),sygnal);
	write(STDERR_FILENO,x,strlen(x));
}

void Przechwycenie_Sygnalu2(int sygnal)
{
	if (z==0)
	{
		signal(SIGINT,SIG_IGN);
		z=1;
	}
	else
	{
		signal(SIGINT,Przechwycenie_Sygnalu1);	
		z=0;
	}
	//signal(SIGCONT,z);
	
}

void Przechwycenie_Sygnalu3(int sygnal)
{
        char y[256];
        sprintf(y,"Koniec: Ogrodnik %d\n",getpid(),sygnal); 
        write(STDERR_FILENO,y,strlen(y));
        kill(getpid(),SIGKILL);
                        
}

int main(int arg, char **arc)
{


//	Instalowanie procedury obslugi sygnalu (SIGINT)

    if (signal(SIGINT,Przechwycenie_Sygnalu1) == SIG_ERR) {	
	write(STDERR_FILENO,BLAD,strlen(BLAD));
	return(1);  }

//	Wlaczenie ignorowania sygnalu (SIGINT)
	//signal(SIGINT,SIG_IGN); 
    //if (signal(SIGCONT

//	Wysylanie sygnalu (SIGINT do procesu macierzystego)
	//kill(getppid(), SIGINT);
	
//	Dodanie sygnalu (SIGINT i SIGUSR1) do wykazy sygnalow blokowanych
	//sigblock( sigmask(SIGINT | SIGUSR1));
	
	/* 
	 if (z==1)
	 {
	 	signal(SIGINT,Przechwycenie_Sygnalu2);
	 }
	 */
	 
	signal (SIGINT, Przechwycenie_Sygnalu1);
	signal (SIGCONT, Przechwycenie_Sygnalu2);
	signal (SIGUSR1,Przechwycenie_Sygnalu3);
	while (1)
	{
	};

}   


