/* ECP: FILEname=fig13_22.c */ /* 1*/ #include /* 2*/ #include /* 3*/ #include /* 4*/ #include /* 5*/ static sigjmp_buf RestartLoop; /* 6*/ static void /* 7*/ IntrHandler( int SigNum ) /* 8*/ { /* 9*/ static int NumCalls = 0; /*10*/ if( ++NumCalls == 3 ) /* Allow Three Per Program */ /*11*/ { /*12*/ fprintf( stderr, "Quitting...\n" ); /*13*/ exit( 0 ); /*14*/ } /*15*/ fprintf( stderr, "Caught an interrupt: resetting\n" ); /*16*/ siglongjmp( RestartLoop, NumCalls ); /*17*/ } /*18*/ main( void ) /*19*/ { /*20*/ sigsetjmp( RestartLoop, 1 ); /*21*/ signal( SIGINT, IntrHandler ); /*22*/ for( ; ; ) /*23*/ DoCommands( ); /*24*/ return 0; /*25*/ }