Listing 2

extern int disp_state();
extern int inc_channel();
extern int dec_channel();

/* State Table */

static S_TABLE s_table[ ] =
{
/* State      Event           Next_State          F_list */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   S_OFF,     E_POWER,        S_POWER,       disp_state,0,0,0,0,
   S_OFF,     E_TAPE_IN,      S_READY,       disp_state,0,0,0,0,
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   S_POWER,   E_POWER,        S_OFF,         disp_state,0,0,0,0, 
   S_POWER,   E_CHAN_UP,      S_POWER,       inc_channel,0,0,0,0,
   S_POWER,   E_CHAN_DOWN,    S_POWER,       dec_channel,0,0,0,0,
   S_POWER,   E_TAPE_IN,      S_READY,       disp_state,0,0,0,0, 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   S_READY,   E POWER,        S_OFF,         disp_state,0,0,0,0, 
   S_READY,   E_CHAN_UP,      S_READY,       inc_channel,0,0,0,0,
   S_READY,   E_CHAN_DOWN,    S_READY,       dec_channel,0,0,0,0,
   S_READY,   E_TAPE_EJECT,   S_POWER,       disp_state,0,0,0,0, 
   S_READY,   E_PLAY,         S_PLAY,        disp_state,0,0,0,0, 
   S_READY,   E_RECORD,       S_RECORD,      disp_state,0,0,0,0, 
   S_READY,   E_FAST_F,       S_FAST_F,      disp_state,0,0,0,0, 
   S_READY,   E_REWIND,       S_REWIND,      disp_state,0,0,0,0, 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   S_PLAY,    E_STOP,         S_READY,       disp_state,0,0,0,0, 
   S_PLAY,    E_CHAN_UP,      S_PLAY,        inc_channel,0,0,0,0,
   S_PLAY,    E_CHAN_DOWN,    S_PLAY,        dec_channel,0,0,0,0,
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   S_FAST_F,  E_STOP,         S_READY,       disp_state,0,0,0,0,
   S_FAST_F,  E_CHAN_UP,      S_PLAY,        inc_channel,0,0,0,0,
   S_FAST_F,  E_CHAN_DOWN,    S_PLAY,        dec_channel,0,0,0,0,
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   S_REWIND,  E_STOP,         S_READY,       disp_state,0,0,0,0,
   S_REWIND,  E_CHAN_UP,      S_PLAY,        inc_channel,0,0,0,0,
   S_REWIND,  E_CHAN_DOWN,    S_PLAY,        dec_channel,0,0,0,0,
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   S_RECORD,  E_STOP,         S_READY,       disp_state,0,0,0,0,
   S_RECORD,  E_CHAN_UP,      S_PLAY,        inc_channel,0,0,0,0,
   S_RECORD,  E_CHAN_DOWN,    S_PLAY,        dec_channel,0,0,0,0,
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   END,       END,            END,           0,0,0,0,0,
};