# CALL文

説明書の該当箇所: 6.5.5 CALL文 / 6.5.6 CANCEL文

7本あります。呼ぶ側が4本、呼ばれる側が3本です。

  呼ぶ側(実行するのはこちら)
    CALL文-パラメータの受け渡し方.cob                  → CALL_SUB1 を呼ぶ
    CALL文-INITIAL指定のないプログラムを呼ぶケース.cob  → CALL_SUB2 を呼ぶ
    CALL文-CANCELされたプログラムを呼ぶケース.cob       → CALL_SUB2 を呼ぶ
    CALL文-INITIAL指定のあるプログラムを呼ぶケース.cob  → CALL_SUB3 を呼ぶ

  呼ばれる側(単体で実行しないでください)
    CALL_SUB1.cob    パラメータを4通りで受け取る
    CALL_SUB2.cob    呼ばれた回数を自分の中に覚えている
    CALL_SUB3.cob    PROGRAM-ID ... IS INITIAL 指定

すべて Standard 版で動きます。

# ★ SIT COBOL の CALL の決まり

CALL に書いた文字列は、一般的な COBOL のように PROGRAM-ID で解決するのでは
なく、同じフォルダにある「そのファイル名.cob」として探されます。

  CALL "CALL_SUB1"    →  同じフォルダの CALL_SUB1.cob を呼ぶ

  ・sitcobol.ini への登録は要りません
  ・呼ぶ側と呼ばれる側は、同じフォルダに置いたままにしてください
  ・呼ばれる側だけを単体で実行すると、受け取るパラメータが無いため失敗します

# 何を見るサンプルか

・パラメータの受け渡し方
    BY REFERENCE / BY CONTENT / BY VALUE の3通りを1回の CALL で渡します。
    呼ばれた側で値を書き換えたとき、呼んだ側に反映されるかが違います。

      BY REFERENCE    領域を共有する   → 反映される
      BY CONTENT      写しを渡す       → 反映されない
      BY VALUE        値を渡す         → 反映されない

    ソースのコメントに、どの表示が出るはずかを書いてあります。

・INITIAL 指定の有無
    副プログラムは、2回目に呼ばれたとき前回の値を覚えているか。

      CALL_SUB2(INITIAL なし)  → 1, 2, 3 と増えていく
      CALL_SUB3(INITIAL あり)  → 呼ばれるたびに初期化されるので常に 1

・CANCEL文
    CANCEL すると、その副プログラムは初期状態に戻ります。
    CALL_SUB2 を 1, 2 と呼んだあと CANCEL し、次の呼び出しで 1 に戻ることを
    表示で確かめます。

# 出力

OK / NG の判定型ではありません。表示された値が、ソースのコメントに
書いてある「はずの値」と合っているかを見てください。
