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;
メンバ | 内容 |
psource | StrCalc BASIC のソースコードを格納するバッファの先頭アドレスをセットします。バッファの内容は末尾がヌルである必要があります。 |
src_size | ソースコードのサイズをセットします(末尾ヌル分は含まず)。 psource [src_size ] == 0 でないと STATUS_INVALID_NULLTERMINATION を返します。 |
random_seed | 乱数の初期値をセットします。b_srand が 0 の場合は無視されます。 |
stackcnt_if | if 〜 then ステートメントのネスト限界数を 1 以上でセットします。 |
stackcnt_for | for 〜 next ステートメントのネスト限界数を 1 以上でセットします。 |
stackcnt_gosub | サブルーチンのネスト限界数(gosub を return で戻らずに連続して呼び出せる回数)を 1 以上でセットします。 |
b_localparam | 1 の場合、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_us | 1 の場合、ユーザステートメント先頭のアットマーク @ の記述を禁止します。逆に 0 の場合は付ける事を必須事項とします(「ユーザステートメントの @ を取る」参照の事)。 |
b_us_check | pus 、uscnt が有効である時、このメンバが 1 の場合は、メンバ pus が指すテーブルの正当性をチェックします(ステートメント名の正当性チェック)。0 の場合はチェックを行いません。 |
b_removespace | 1 の場合、以下の構文内で使用される計算式から、シングルクォートやダブルクォートで括られていない半角空白、タブ文字を翻訳時に削除します。
空白が多い式を繰り返し計算する場合は、1 にするとパフォーマンスが若干改善します。 |
b_srand | 1 の場合は StrCalc BASIC が内部で関数srand を実行します。 0 の場合はアプリケーションが StrCalc_srand を実行します(または乱数初期化を必要としない)。 |
reserved | (予約) |
fprologue | コールバック関数APPPROC のアドレスをセットします。ここで指定した関数は、BASIC のプログラムが開始する直前に呼び出されます。 コールバックを使用しない場合は NULL を指定する事ができます。 |
fevery | コールバック関数APPPROC のアドレスをセットします。ここで指定した関数は、各ステートメントが実行される直前に呼び出されます。 コールバックを使用しない場合は NULL を指定する事ができます。 |
fepilogue | コールバック関数APPPROC のアドレスをセットします。ここで指定した関数は、BASIC のプログラムが正常終了する時に呼び出されます。 コールバックを使用しない場合は NULL を指定する事ができます。 |
proc_exparam | fprologue 、fevery 、fepilogue で指定したコールバック関数に引数として渡されます。 |
pus | USERSTATEMENT 構造体 のテーブルの先頭アドレスをセットします。 このメンバが NULL の時にユーザステートメントが実行されると STATUS_UNDEFINED_USERSTATEMENT を返します。 |
uscnt | pusで指定したテーブルの要素数をセットします。 このメンバが 0 以下の時にユーザステートメントが実行されると STATUS_UNDEFINED_USERSTATEMENT を返します。 |
psubst | コールバック関数SUBSTHOOK のアドレスをセットします。この関数は、BASIC 内の代入式が実行される度に呼び出されます。 コールバックを使用しない場合は NULL を指定する事ができます。 |
subst_exparam | psubst で指定したコールバック関数に引数として渡されます。 |
stop_lineno | BASIC プログラムがエラーの場合、且つ処理行を特定できる場合は、このメンバに行位置が返されます。 行が特定できない処理でエラーになった場合は 4294967295(0xffffffff)が返されます。64 bit 版は 18446744073709551615(0xffffffffffffffff)を返します。 |
sc_ret | エラーが STATUS_IF_CMP_ERROR 〜 STATUS_SKIP_ERROR の場合、このメンバにエラー理由が返されます(「状態コード」参照の事)。 通常は StrCalc の状態コードが渡されますが、代入式のフック関数が返したコードもこのメンバにセットされますので、アプリケーションによってはコードの範囲が広くなる場合があります。 |