● 構造体

BASICPARAM 構造体

typedef struct {
    char            *psource;
    unsigned long   src_size;

    unsigned        random_seed;
    int             stackcnt_if;
    int             stackcnt_for;
    int             stackcnt_gosub;
    int             b_localparam;
    int             b_ignore_subcnt;
    int             b_remark_colontype;
    int             b_remark_ignorestr;
    int             b_check_dup_label;
    int             b_naked_us;
    int             b_us_check;
    int             b_removespace;
    int             b_srand;

    unsigned long   reserved[11];

    APPPROC         fprologue;
    APPPROC         fevery;
    APPPROC         fepilogue;
    void            *proc_exparam;

    PUSERSTATEMENT  pus;
    int             uscnt;

    SUBSTHOOK       psubst;
    void            *subst_exparam;

    unsigned long   stop_lineno;
    int             sc_ret;
} BASICPARAM,*PBASICPARAM;

StrCalc BASIC の設定情報や、実行結果の一部を格納する構造体です。

メンバ内容
psourceStrCalc BASIC のソースコードを格納するバッファの先頭アドレスをセットします。バッファの内容は末尾がヌルである必要があります。
src_sizeソースコードのサイズをセットします(末尾ヌル分は含まず)。
psource [src_size ] == 0 でないと STATUS_INVALID_NULLTERMINATION を返します。
random_seed乱数の初期値をセットします。b_srand が 0 の場合は無視されます。
stackcnt_ifif 〜 then ステートメントのネスト限界数を 1 以上でセットします。
stackcnt_forfor 〜 next ステートメントのネスト限界数を 1 以上でセットします。
stackcnt_gosubサブルーチンのネスト限界数(gosub を return で戻らずに連続して呼び出せる回数)を 1 以上でセットします。
b_localparam1 の場合、BASIC 内で登録された変数にテンポラリ属性が付加され、0 の場合は付加されません。
関数StrCalc_delete_tempparam を使用すると、テンポラリ属性の変数だけ全削除する事ができます。
b_ignore_subcnt終了時に、gosub を実行した回数と return で戻る回数をチェックするか指示します。
1 の場合、サブルーチン内からプログラムを終了しても正常終了します。0 の場合は STATUS_GOSUB_WITHOUT_RETURN を返します。
b_remark_colontype注釈内のコロンの扱いを指定します。
1 の場合は改行と見なし、0 の場合は注釈の一部と見なします。
b_remark_ignorestr注釈内の、ダブルクォートで括られているコロン・改行文字の扱いを指定します。
1 の場合は、括られている範囲内にあるコロン・改行文字を無視します(括られている範囲の文字列を無視する)。0 の場合は無条件で有効になります。
なお、有効なコロンについては b_remark_colontype の指定に従います。
b_check_dup_labelラベルの重複チェックを行うか指示します。
1 の場合はラベルが出現する毎にチェックを行い、重複を発見したら STATUS_DUPLICATE_LABEL を返します。0 の場合はチェックを行いません。
使用ラベルが多い時にチェックを行うと、プログラムを開始するまでの時間が長くなる場合があります。
b_naked_us1 の場合、ユーザステートメント先頭のアットマーク @ の記述を禁止します。逆に 0 の場合は付ける事を必須事項とします(「ユーザステートメントの @ を取る」参照の事)。
b_us_checkpususcnt が有効である時、このメンバが 1 の場合は、メンバ pus が指すテーブルの正当性をチェックします(ステートメント名の正当性チェック)。0 の場合はチェックを行いません。
b_removespace1 の場合、以下の構文内で使用される計算式から、シングルクォートやダブルクォートで括られていない半角空白、タブ文字を翻訳時に削除します。
  • break
  • continue
  • data
  • end
  • for
  • if 〜 then
  • on 〜 goto 、on 〜 gosub
  • return
  • skip
  • 代入式
0 の場合は編集しません。
空白が多い式を繰り返し計算する場合は、1 にするとパフォーマンスが若干改善します。
b_srand1 の場合は StrCalc BASIC が内部で関数srand を実行します。
0 の場合はアプリケーションが StrCalc_srand を実行します(または乱数初期化を必要としない)。
reserved(予約)
fprologueコールバック関数APPPROC のアドレスをセットします。ここで指定した関数は、BASIC のプログラムが開始する直前に呼び出されます。
コールバックを使用しない場合は NULL を指定する事ができます。
feveryコールバック関数APPPROC のアドレスをセットします。ここで指定した関数は、各ステートメントが実行される直前に呼び出されます。
コールバックを使用しない場合は NULL を指定する事ができます。
fepilogueコールバック関数APPPROC のアドレスをセットします。ここで指定した関数は、BASIC のプログラムが正常終了する時に呼び出されます。
コールバックを使用しない場合は NULL を指定する事ができます。
proc_exparamfprologuefeveryfepilogue で指定したコールバック関数に引数として渡されます。
pusUSERSTATEMENT 構造体 のテーブルの先頭アドレスをセットします。
このメンバが NULL の時にユーザステートメントが実行されると STATUS_UNDEFINED_USERSTATEMENT を返します。
uscntpusで指定したテーブルの要素数をセットします。
このメンバが 0 以下の時にユーザステートメントが実行されると STATUS_UNDEFINED_USERSTATEMENT を返します。
psubstコールバック関数SUBSTHOOK のアドレスをセットします。この関数は、BASIC 内の代入式が実行される度に呼び出されます。
コールバックを使用しない場合は NULL を指定する事ができます。
subst_exparampsubst で指定したコールバック関数に引数として渡されます。
stop_linenoBASIC プログラムがエラーの場合、且つ処理行を特定できる場合は、このメンバに行位置が返されます。
行が特定できない処理でエラーになった場合は 4294967295(0xffffffff)が返されます。64 bit 版は 18446744073709551615(0xffffffffffffffff)を返します。
sc_retエラーが STATUS_IF_CMP_ERROR 〜 STATUS_SKIP_ERROR の場合、このメンバにエラー理由が返されます(「状態コード」参照の事)。
通常は StrCalc の状態コードが渡されますが、代入式のフック関数が返したコードもこのメンバにセットされますので、アプリケーションによってはコードの範囲が広くなる場合があります。