ここに問題があります:
void DrawState(){
    char statevar[1000] = {0};
    //bla bla bla
    something = showmenu(); // or showscreen() or showinput() 
    if(something){ 
       // change state
       state = new_state;
    }else{
       // return to previous state
       state = return_state;
    }
    // draw new state here.
    DrawState();
}
状態が変化したときにこの関数を実行する必要があります。しかし、このように再帰的に記述すると、メモリを消費しすぎて、最終的にシステムがクラッシュします。これをしないと、外部から自分自身を呼び出す方法がわかりません。
誰かが何か考えがありますか?
編集:これは、プラグインのように管理ソフトウェア上で実行されるライブラリです。バックグラウンド ジョブもこの実装で動作する必要があります。多分私はいくつかのイベントでこれを実行する必要があります。