#pragma once typedef struct state State; typedef struct state_machine StateMachine; typedef State *(StateFunc)(StateMachine *sm, void *event_data); typedef void NoEventData; struct state { StateFunc *state_func; }; struct state_machine { State *current_state; }; void sm_run(StateMachine *sm, void *event_data);