#include	<signal.h>
#include	<stdio.h>
#include	<unistd.h>
//#include	<sys/siginfo.h>
#include	<sys/time.h>
#include	"printBlocked.h"

// Signal handler demonstration.  Handles SIGINT, SIGWINCH (window resize) in same handler.

static void
signal_handler( int signo )
{
	switch ( signo )
	{
		case SIGINT:
			printf( "Signal handler invoked.  Delivered signal is %s.\n", _sys_siglist[signo] );
			printBlocked( "signal handler" );
			_exit( 0 );
			break;
		case SIGWINCH:
			printf( "Signal handler invoked.  Window size changed.\n" );
			printBlocked( "signal handler" );
			break;
		default:
			printf( "Signal handler invoked.  unknown signal delivered is %s.\n", _sys_siglist[signo] );
			printBlocked( "signal handler" );
			break;
	}
}

int
main()
{
	struct sigaction	action;

	printf( "main() invoked in process %d.\n", getpid() );
	printBlocked( "main()" );

	action.sa_flags = SA_RESTART;
	action.sa_handler = signal_handler;	/* short form */
	sigemptyset( &action.sa_mask );		/* no additional signals blocked */
	sigaction( SIGINT, &action, 0 );
	sigaction( SIGWINCH, &action, 0 );

	while( pause() == -1 );			/* wait for a signal.  any signal. */
	printBlocked( "back in main()" );
	printf( "Normal end.\n" );
	return 0;
}
