Приложение 1. Шабон для реализации графа переходов
#include "photon_stuff.h"
#include "dg.h"
#include "log.h"
#include "defines.h"
void A_i_( int e, dg_t *dg )
{
int y_old = dg->y_i_ ;
// Протоколирование запуска автомата
#ifdef A_i__BEGIN_LOGGING
log_begin( dg, "A_i_", y_old, e ) ;
#endif
switch( dg->y_i_ )
{
case 0:
// Вызвать вложенные автоматы
// Проверить условия на дугах и петлях,
// выполнить переход и действия на дуге или петле
break ;
...
case n:
// Вызвать вложенные автоматы
// Проверить условия на дугах и петлях,
// выполнить переход и действия на дуге или петле
break ;
default:
#ifdef A_i__ERRORS_LOGGING
log_write( LOG_GRAPH_ERROR, dg->number,
"Ошибка в автомате A_i_: неизвестный номер состояния!", 0 ) ;
#endif
} ;
// Проверка изменения текущего состояния автомата
if( y_old == dg->y_i_ ) goto A_i__end ;
{
// Протоколирование перехода в автомате
#ifdef A_i__TRANS_LOGGING
log_trans( "A_i_", y_old, dg->y_i_ ) ;
#endif
} ;
switch( dg->y_i_ )
{
case 0:
// Произвести активизацию вложенных в новое состояние автоматов
// Выполнить действия в новом состоянии
break ;
...
case n:
// Произвести активизацию вложенных в новое состояние автоматов
// Выполнить действия в новом состоянии
break ;
} ;
// Протоколирование завершения работы автомата
A_i__end: ;
#ifdef A_i__END_LOGGING
log_end( dg, "A_i_", dg->y_i_, e ) ;
#endif
} ;