新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
RE:34. プログラム・コール・スタックの検索サンプルPGMについて black さん [ 3月5日(水) 12時57分 ]

    質問の意図を読み取って頂けなかったようですので、詳細に書きます。

    プログラムA,B,Cがあり、それぞれがA,B,Cを呼び出す場合、自分より上位に位置するプログラムがス
    タックに存在する場合、再帰呼び出しでエラーになります。
    そのため、スタックを検索し、
    1)該当のプログラムがスタック中に存在するかどうかを調べ
    2)存在する場合、スタック中の位置を返す
    というサブプログラムを作り、これから実行しようとするプログラムを調べ、
    スタックに存在する場合は、CALLせずに終了して上位に戻そうと考えました。

    しかし、ILEの場合、プログラムとプロシジャと複数出来てしまうので、全てカウントしてしまうと
    位置情報が正しくなくなるのです。

    スタックが以下の時、
    OPM
    PGMa
    PGMb
    PGMc

    ILE
    PGMa
    PGMa(プロシジャ)
    PGMb
    PGMb(プロシジャ)
    PGMc
    PGMc(プロシジャ)

    PGMcからPGMaを呼び出す時、既にスタックに居るのでCallできません。
    よって、PGMc→PGMb→PGMaと戻らなければなりません。
    各プログラムのパラメータにリターンコードを設け、ゼロ以外が戻された
    場合、戻りたい階層を示すようにしました。
    呼出し後、リターンコードを-1しても整数の場合、自分より上位に戻りたいことが解かります。
    スタックを検索して、PGMaは3番目である事を戻したいのですが、OPMなら
    正しいですが、ILEの場合、6になってしまいます。

    スタックを検索する時に、モジュールをカウントさせたくないのですが、
    ILEのプログラムとモジュールを区別するには、APIの戻り値上、どこを見て
    判断したらよいでしょうか?

    RPGではTFRCTLできないので、上記のような仕組みにしようとしています。

お名前
パスワード
e-mailアドレス
タイトル
ホームページ
アドレス