text: #include <stdio.h>
  
  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 );
  }
  