Listing 3: Test harness for the Keyboard FSM

 1: int main() {
 2:    Keyboard k;
 3:    KeyboardCtor(&k);
 4:    FsmInit((Fsm *)&k, 0);
 5:    for (;;) {
 6:       KeyboardEvt ke;
 7:       printf("\nSignal<-");
 8:       ke.code = getc(stdin); 
 9:       getc(stdin);                      /* discard '\n' */
10:       switch (ke.code) {
11:       case '^': ke.super_.sig = SHIFT_DEPRESSED_SIG; break;
12:       case '6': ke.super_.sig = SHIFT_RELEASED_SIG; break;
13:       case '.': return 0;          /* terminate the test */
14:       default: ke.super_.sig = ANY_KEY_SIG; break;
15:       }
16:       FsmDispatch((Fsm *)&k, (Event *)&ke);  /* dispatch */
17:    }
18:    return 0;
19: }