ふっと思ったのですよ。
「もしかして、なんか私の考え方が間違ってるんじゃ無かろうか?」と。
しかし、心配しても仕方ないので、あきらめて現在の状態を取得し、その状態によって条件を決める関数を作り、それを状態遷移のガードに使おう。
statemap.hに「getState」というマクロがあったので、printfで値を見てみた。
./checkstring 000
state : 40314c
state : 403134
state : 403134
The string "000" is acceptable
%xで表示させると、こんな感じ。
最初の0x40314cは、mapファイルではMap1_Startのアドレス、後はMap1_Zerosのアドレスだった。
つまり、今の状態がこれ、という変数を持ってるのでは無く、状態ごとのイベント関数群のポインタを持っているようだ。
たとえば、Map1_Startはこういう定義になっていた。
const struct AppClassState Map1_Start = {Map1_Start_EOS,Map1_Start_One,Map1_Start_Unknown,Map1_Start_Zero,Map1_Start_Default,0};
なので、ここに独自関数を追加できるようになっていれば済むのだが・・・。
今日はここまで。
あと、前回のガードを追加すると、遷移条件を満たさなかったときにDefaultの遷移をするようだ。
定義していなくて実行時エラーになっていたから、たぶんそうだろう、というところだが。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。