● サンプルプログラム - sc_basic ステートメントリファレンス

@externalcode

外部の BASIC コードを実行します。

    @externalcode  "ファイル名"

このステートメントは、指定されている sc_basic のファイルを読み込み、環境を変えずに実行します(サブルーチンの呼び出しをファイルにしたような処理)。外部コード内で使用した変数は、@delete で削除処理しない限り、プログラムが終了するまで残り続けます。

外部コードが終了すると、次の単一変数が登録されます。同名の変数が使用されていた場合は、消去してから登録されます。

変数名意味
extbas_retcode終了時の状態コード
extbas_linenoエラー時の行位置
extbas_scretextbas_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 プログラムを繰り返し実行する場合も、同様の考え方を適用できます。