CALL
(ステートメント)

プログラムを呼び出し、実行します。

CALL <プログラム名> [(<引数>[,<引数>…])]

CALLステートメントは、<プログラム名>で指定したプログラムを呼び出し、制御を移します。
CALLされたプログラム内のEND文は、サブルーチン内のRETURN文と同じ意味を持ち、その呼び出し元へ制御を戻します。
<引数>は、<プログラム名>で指定したプログラムへ渡す引数を指定します。
<引数>は、定数または式を用いる「値による呼び出し」と、変数を渡す「参照による呼び出し」の、いずれかで渡すことができます。詳しくは、「8.16 値による呼び出しと参照による呼び出し」を参照してください。
1. 値による呼び出し
定数と数式と文字式は値で渡します。変数もカッコ( )で囲めば式とみなされ、値で渡すことができます。
番号付き変数のうち整数型、単精度実数型、倍精度実数型、文字列型変数はカッコ( )で囲めば、値で渡すことができます。
例:プログラム PROGRAM SUB1(AA#)を呼び出す方法
-
変数を値で渡す場合 CALL SUB1((D1))
-
定数を渡す場合 CALL SUB1(10#)
-
数式を渡す場合 CALL SUB1(D1 + D2)

数式を渡す場合、式の結果の型に注意します。呼び出される側のプログラムの引数の型と同じ型にならなければいけません。
2. 参照による呼び出し
参照による呼び出しでは、変数を引数として渡すことができます。
<引数>として配列全体を指定したいときは、配列名にカッコ( )を付けます。
グローバル変数、ローカル配列の1要素は、参照で渡すことはできません。
グローバル変数、ローカル配列の1要素を参照で渡したい場合は、いったんローカル変数に値を代入し、そのローカル変数を介して参照呼び出しを行なってください。
参照による呼び出しで渡した変数は、呼び出された側のプログラムの中で、その内容を変更されると、元のプログラムに戻った場合でも、その変更は有効となります。
例1:プログラム PROGRAM SUB1(AA#)を呼び出す場合
-
ローカル変数を渡す場合1 CALL SUB1(DD#)
-
ローカル変数を渡す場合2 CALL SUB1(DA)
(DEFDBLでDAが宣言済みのとき)

ローカル変数はあらかじめ、値を代入しておく必要があります。
例2:プログラム PROGRAM SUB2(BB%(10))を呼び出す場合
-
配列全体を渡す場合 CALL SUB2(AB%())
(DIMでAB%(10)が宣言済みのとき)

-
変数に値が代入されていない場合は、実行時エラーとなります。
-
プログラム名が、PRO<数字>の場合は、引数を渡すことはできません。
-
呼び出す側と呼び出される側の引数の数を合わせてください。

DEFDBL ld1, ld2
|
|
CALL SUB1((ld1))
|
'変数を値で渡す場合。
|
CALL SUB1(10#)
|
'定数を渡す場合。
|
CALL SUB1(ld1 + ld2)
|
'数式を渡す場合。
|