Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
struct
{
enum{ fsm_BEGIN, fsm_WAIT, fsm_NEXT} state;
char input, output;
} fsm_data;
int fsm_init()
{
fsm_data.state = S_BEGIN;
return 0;
}
int fsm_step()
{
int e=0, f=0, r;
if(fsm_data.input == 'R')
{ r=1;}
else{
r=0;}
switch(fsm_data.state){
case fsm_BEGIN:
fsm_data.output = ' . ' ;
if(fsm_data.input == 'I') { fsm_data.state = fsm_OK; f= f+1; }
if(fsm_data.input != 'H' && fsm_data.input != 'I') {
fsm_data.state= fsm_BEGIN; f=f+1;
}
break;
case fsm_OK:
fsm_data.output = 'H' ;
fsm_data.state = fsm_NEXT;
break;
case fsm_NEXT:
fsm_data.output = 'I';
if(fsm_data.input == 'H') { fsm_data.state = fsm_WAIT; f= f+1; }
if(fsm_data.input != 'H' ) { fsm_data.state = fsm_BEGIN; f= f+1; }
break;
default:
e= -1;
}/* switch*/
if(f >1) { e=f; }
if( r== 1) { fsm_data.state = fsm_BEGIN; }
return e;
}/* fsm_step */
int main() {
int errcod, quit;
fsm_init();
quit =0;
ercod = 0;
while( errcod == 0 && quit ==0 ) {
fsm_data.input = read_input();
if(fsm_data.input == 'Q' ) {
quit = 1;
}
if(quit == 0) {
errcod = fsm_step();
write_output( fsm_data.output);
}/* if not quitting */
}/* while */
return errcod;
}/* main*/