● サンプルプログラム - sc_basic ステートメントリファレンス
@externalcode
外部の BASIC コードを実行します。
@externalcode "ファイル名"
このステートメントは、指定されている sc_basic のファイルを読み込み、環境を変えずに実行します(サブルーチンの呼び出しをファイルにしたような処理)。外部コード内で使用した変数は、@delete で削除処理しない限り、プログラムが終了するまで残り続けます。
外部コードが終了すると、次の単一変数が登録されます。同名の変数が使用されていた場合は、消去してから登録されます。
変数名 | 意味 |
extbas_retcode | 終了時の状態コード |
extbas_lineno | エラー時の行位置 |
extbas_scret | extbas_retcode が位置を示すコードだった場合の StrCalc 状態コード |
sc_basic ではカレントフォルダが実行中の BASIC プログラムがある場所になりますので、それ以外の場所を指定する場合はファイル名をフルパスで指定してください。
このステートメントはサブルーチンの処理に似ていますが、BASIC のソースコード上からは見えない部分で、サブルーチンの時よりも多くの処理が実行されていますので、速さを追及するプログラムには向きません。
規模が小さく、あまり複雑でないプログラムの場合は、gosub 、return によるサブルーチンを使用した方が高速で、よりコンパクトにまとめる事ができます。
|
BASIC プログラム全体の繰り返し
StrCalc BASIC は、全体の基本機能を翻訳した後で実行に移ります(参考:「5.BASIC プログラムが処理される手順」)。大抵のプログラムはループを持つので、翻訳を一度で済ませる事によりループを持つ BASIC プログラムを有利にするよう構成されています。
ループが一つもなく、且つ、必ずしも通るとは限らないルートが複数ある BASIC プログラムを繰り返し実行する場合、翻訳の時間が相対的に大きくなるため効率性が落ちます。
(呼び出されるプログラム側)
on n goto $logic_1, $logic_2, $logic_3, $logic_4, $logic_5
$logic_1
処理A
end
$logic_2
処理B
end
$logic_3
処理C
end
$logic_4
処理D
end
$logic_5
処理E
end
一回の実行で通るルートは1本だけ
残り4本は翻訳されても通らない
ソースコードを複数に分けても構わない場合は、それぞれのルートを単独で用意し、呼び出し側で実行するソースを選択する形にすると、余計な翻訳時間を削減する事ができます。
(呼び出し側)
on n goto $logic_1, $logic_2, $logic_3, $logic_4, $logic_5
# 処理A 〜 処理E をそれぞれ logic_module_A.txt 〜 logic_module_E.txt に分けておきます
$logic_1
@externalcode "logic_module_A.txt"
goto $jmp
$logic_2
@externalcode "logic_module_B.txt"
goto $jmp
$logic_3
@externalcode "logic_module_C.txt"
goto $jmp
$logic_4
@externalcode "logic_module_D.txt"
goto $jmp
$logic_5
@externalcode "logic_module_E.txt"
$jmp
アプリケーション側で BASIC プログラムを繰り返し実行する場合も、同様の考え方を適用できます。