制御

CALL 〈手続き名〉【(〈引数式〉…)】

〈手続き名〉のスクリプトを逐次実行します。〈手続き名〉の実行がすべて終了するまで待ちます。いわゆる手続き呼び出しに相当します。〈手続き名〉の手続きは、FUNC文を使って定義します。

〈引数式〉は最大256個まで可能です。CALL先では、定義された“引数名”を使って参照することができます。

CALL文で呼び出した手続きが戻す値は無視されます。

プログラム例

VERSION 3
PROLOGUE
CALL テスト(1,2,3)
END
FUNC テスト(X:B,Y:B,Z:B)
MESG "%d %d %d",X,Y,Z
END

出力
1 2 3

EXECUTE 〈手続き名〉…【(〈引数式〉…)】【:〈変数名〉】

〈手続き名〉の手続きを並行起動します。自分の手続きの実行はそのまま継続します。〈手続き名〉の手続きは、ACTION文MACTION文を使って定義します。

〈手続き名〉がすでに起動されているとき、〈手続き名〉がMACTION文で定義されている手続きであれば、多重起動されます。

ACTION文で定義された手続きは多重起動できないため、無視されます。

〈引数式〉は最大256個まで可能です。EXECUTE先では、定義された“引数名”を使って参照することができます。

複数の〈手続き名〉を指定した場合は、最後に指定した手続きにのみ引数を指定することができます。

〈変数名〉を指定した場合は、最後に指定した手続きに対する手続き番号が格納されます。手続き番号は手続きの実行に際して割り当てられる一意的な番号で、実行中の手続きを区別するために使います。

システム変数$TIDで、自分の手続き番号が判ります。

手続き名の代わりに手続き番号を使って、手続きの状態が得られます。

EXIT 【〈式〉】

自分の手続きの実行を終了します。

CALL元に戻す手続きの値は、EXIT文で指定します。手続きを終了して〈式〉の値を手続きの値として戻します。〈式〉を省略したときや、手続きがENDで終了した場合は、手続きの値は0となります。

例:
FUNC mul(a,b)
EXIT a*b # “a*b”の結果が戻される

プログラム例

# 1+2+3+....の結果が100を超える点を求める
VERSION 3
VARIABLE I:I,S:I
PROLOGUE
CALL 累積計算(100)
MESG "合計=%d I=%d",S,I
END
ACTION 累積計算(上限)
SET I=1
SET S=0
REPEAT
SET S=S+I
IF S>上限
EXIT
ENDIF
SET I=I+1
ENDREPEAT
END

出力
合計=105 I=14

FINISH

すべてのスクリプトの実行を終了して、ウィンドウを閉じます。[終了]メニューを選ぶ操作や、ウィンドウのピクトグラムをダブルクリックする操作と同じ意味です。

閉じる直前に、EPILOGUE手続きを実行します。

PROCESS文で実行したプロセスは、そのまま残ります。

そのウィンドウからVOPEN文によって開いていた子ウィンドウは、閉じられずにそのまま残ります。子ウィンドウを閉じるには、明示的にVCLOSE文を実行する必要があります。EPILOGUEにパラメータなしのVCLOSE文を入れておくことによりすべての子ウィンドウを閉じることができます

TERMINATE 【〈手続き名〉…】

〈手続き名〉のスクリプトの実行を強制終了します。〈手続き名〉を省略したときは自分以外の実行中のすべてスクリプトの実行を強制終了します。

〈手続き名〉の代わりに 〈手続き番号式〉を指定することができます。

BREAK 【〈手続き名〉…】

〈手続き名〉のスクリプトがREPEAT、WHILEのループにある場合、そのループを1段強制的に抜けます。

SLEEP文・WAIT文・VWAIT文RSWAIT文により待ち状態にある場合、その待ち状態を強制的に終了します。

〈手続き名〉を省略したときは自分のREPEAT、WHILEのループを1段抜けます。また、SWITCH文内の各CASEの処理を終了します。

〈手続き名〉の代わりに 〈手続き番号式〉を指定することができます。

∇CALL文によって呼ばれている手続きをBREAKする時の注意

〈手続き名〉に、CALL文によって呼ばれている手続きを指定しても効果がありません。CALL文で呼ばれた手続きは、呼び出し側の一部として動作しているからです。呼び出し側の手続きをBREAKの引数として与える必要があります。

プログラム例

#セグメントSをクリックすると、座標値の表示を中止する
VERSION 3
PROLOGUE
EXECUTE P
END
ACTION P
CALL Q
END
ACTION Q
REPEAT
MESG "%d %d",$PDX,$PDY
ENDREPEAT
END
ACTION A CLICK S
BREAK P #BREAK Qではない!
END

SUSPEND 【〈手続き名〉…】【:〈タイムアウト式〉】

〈手続き名〉のスクリプトの実行が終了するまで待ちます。複数指定した場合はすべてが終了するまで待ちます。また、〈手続き名〉が多重起動されている場合にも、すべてが終了するまで待ちます。

〈手続き名〉の代わりに〈手続き番号式〉を指定することができます。〈手続き名〉を省略したときは、自分以外のすべてのスクリプトが対象となります。

〈タイムアウト式〉は秒単位で指定します。0~86400(24時間)の範囲です。

〈タイムアウト式〉を指定すると、手続きが終了する前でも、〈タイムアウト式〉の時間が経てば戻ります。タイムアウトで終了したのか、条件を満たして終了したのかは、システム変数$ERRで判断できます。

SLEEP 〈時間式〉

〈時間式〉の間だけ待ちます。

時間はミリ秒単位(1000ミリ秒=1秒)で指定します。0~86400000(24時間)の範囲です。

実際の時間の分解能はシステムに依存します。

WAIT 〈条件式〉【:〈タイムアウト式〉】

〈条件式〉の値が0以外になるまで待ちます。

〈タイムアウト式〉は秒単位で指定します。0~86400(24時間)の範囲です。

〈タイムアウト式〉を省略した場合は永久に待ちます。〈タイムアウト式〉が0の場合はすぐ戻ります。タイムアウトで終了したのか、条件を満たして終了したのかは、システム変数$ERRで判断できます。

プログラム例

#ウィンドウの左上4分の1のエリアにポインタ(ポインタ)が入ったらビープ音を鳴らす。
VERSION 3
PROLOGUE
EXECUTE ポインタチェック #EXECUTE文
END
ACTION ポインタチェック
REPEAT
WAIT ($PDX<$WDW/2)&&($PDY<$WDH/2)
BEEP #BEEP文
ENDREPEAT
END

前のページへ代入・条件判断・繰り返し 次のページへウィンドウ/表示操作

ページの先頭へ戻る

HOME > サポート情報 > 取扱説明書 > 制御