
state = STATE_1;                                // Initialize state variable
while (1) {                                     // Run forever
    event = GetNextEvent();
    switch (state) {
        case STATE_1:                           // STATE_1
            switch (event) {
                case EVENT_1:
                    DoSomething();
                    state = STATE_1;
                    break;
                case EVENT_2:
                    DoSomethingElse();
                    state = STATE_2;
                    break;
                case EVENT_3:
                    DoNothing();
                    state = STATE_3;
                    break;
                }
            break;                              // End STATE_1
        case STATE_2:                           // STATE_2
            switch (event) {
                case EVENT_1:
                    DoSomethingExotic();
                    state = STATE_3;
                    break;
                case EVENT_2:
                    DoSomethingEsoterik();
                    state = STATE_3;
                    break;
                case EVENT_3:
                    EatDirtAndDie();
                    state = STATE_1;
                    break;
                }
            break;                              // End STATE_2
        case STATE_3:                           // STATE_3
            switch (event) {
                case EVENT_1:
                    Etc();
                    state = STATE_1;
                    break;
                case EVENT_2:
                    EtcEtc();
                    state = STATE_1;
                    break;
                case EVENT_3:
                    EtcEtcEtc();
                    state = STATE_2;
                    break;
                }
            break;                              // End STATE_3
        }
    }                                           // End 'run forever'
