#include typedef enum { LAMP_OFF = 1, LAMP_ON } state_t; typedef enum { TOGGLE_ON = 1, TOGGLE_OFF } event_t; state_t state; void statemachine(event_t ev){ printf("State: %u, event: %u\n", state, ev); // @STATEMACHINE(lamp) switch(state){ case LAMP_OFF: switch(ev){ case TOGGLE_ON: // @ACTION(Turning lamp on) printf("Turning lamp on\n"); state = LAMP_ON; break; case TOGGLE_OFF: // @ACTION(Ignoring toggle off) printf("Ignoring toggle off\n"); break; } break; case LAMP_ON: switch(ev){ case TOGGLE_ON: // @ACTION(Ignoring toggle on) printf("Ignoring toggle on\n"); break; case TOGGLE_OFF: // @ACTION(Turning lamp off) printf("Turning lamp off\n"); state = LAMP_OFF; break; } } } int main(void){ state = LAMP_OFF; statemachine( TOGGLE_ON ); statemachine( TOGGLE_ON ); statemachine( TOGGLE_OFF ); }