Ejemplo n.º 1
0
void
fsa_sig_handler( int event )
{
	Transition	*transition;

	transition = CurFSA->find_transition( event );

	if (transition != CurFSA->no_print_tr) {
		dprintf( D_ALWAYS, "\t*FSM* Got asynchronous event \"%s\"\n",
				EventNames.get_name(event) );
	}

	if( transition->func ) {
		if (transition != CurFSA->no_print_tr) {
			dprintf( D_ALWAYS,
					"\t*FSM* Executing transition function \"%s\"\n",
					TransFuncNames.get_name((long)transition->func) );
		}
		if ( transition->func() == -2 ) {
			dprintf( D_ALWAYS,"\t*FSM* Aborting transition function \"%s\"\n",
					TransFuncNames.get_name((long)transition->func) );
			return;
		}
	}
	if( transition->to ) {
		siglongjmp( JmpBuf, transition->to );
	}
	return;
}