● 状態コード

StrCalc 、StrCalc BASIC で使用する戻り値です(一部の関数を除く)。これらは sc39.h 内で定義されています。
正常終了は STATUS_NORMAL(ゼロ)で、それ以外の値は STATUS_NORMAL 未満の値(負の値)となります。

注意

StrCalc の状態コード


コード意味
STATUS_ERROR構文エラー。主に計算式の誤りを意味します。
STATUS_DIVIDEBYZERO除数ゼロの除算・剰余計算が行われました。
STATUS_ILLEGAL_POWERべき乗の使用方法に誤りがあります。
STATUS_ILLEGALPARENTHESIS括弧の個数や順序が不当です。
STATUS_PARENTHESIS_OVERNEST括弧のネストが深過ぎます。
STATUS_MEMERROR変数の登録に失敗したか、変数情報の取得に失敗しました。
変数名が正しくない場合や、既に同名の変数が登録されている場合、キーワードを変数名にした場合、メモリ確保に失敗した場合に返されます。
STATUS_TOOMANYITEM項数が多過ぎます。
STATUS_INVALIDARGS配列変数のインデックスや、関数の引数がカンマで区切られていません。インデックスの数、または引数の数が不足しているのかもしれません。
STATUS_ILLEGALFUNCTIONCALL関数の使用方法に誤りがあります。
STATUS_RANGEOVER数値変換中、または計算中にオーバーフローが発生しました。
STATUS_TOOLONGNUM数値が長過ぎます。
STATUS_OP_ERROR項と演算子の個数が合いません。
STATUS_ILLEGALNUM_BIN文字列は2進数値と認識されましたが、変換に失敗しました。数値に変換できない文字が入っているかもしれません。
STATUS_ILLEGALNUM_OCT文字列は8進数値と認識されましたが、変換に失敗しました。数値に変換できない文字が入っているかもしれません。
STATUS_ILLEGALNUM_DEC文字列は10進数値(基数指定による整数値)と認識されましたが、変換に失敗しました。数値に変換できない文字が入っているかもしれません。
STATUS_ILLEGALNUM_HEX文字列は16進数値と認識されましたが、変換に失敗しました。数値に変換できない文字が入っているかもしれません。
STATUS_ONLY_PERIOD小数点だけの記述は許されていません。
STATUS_INVALID_RADIXB 、O 、D 、H (b 、o 、d 、h) 以外の基数指定文字が使用されているか、基数指定文字がありません。
STATUS_ILLEGALNUM_FP文字列は実数値、または浮動小数点値として認識されましたが、変換に失敗しました。数値に変換できない文字が入っているかもしれません。
STATUS_PARAM_RANGEOVER配列変数のインデックスが有効範囲を超えています。
STATUS_ILLEGALNUM_STR文字列は英字を含む数値として認識されましたが、変換に失敗しました。
STATUS_NEED_START_PAREN開始括弧 ( が必要です。
STATUS_NEED_LAST_PAREN終了括弧 ) が必要です。
STATUS_CONSTCHR_SYNTAXERROR文字定数の書式に誤りがあります。
STATUS_CONSTCHR_NEED_SQ文字定数はシングルクォート ' で括られている必要があります。
STATUS_SCMEMORY_NOTREADYこのアプリケーションでは single character memory を使用する事ができません。または、(single character memory を使うつもりでなかったのであれば)計算式に不正な文字が含まれています。
STATUS_SCMEMORY_RANGEOVER指定の single character memory は、アプリケーションが定めている使用可能範囲を超えています。
STATUS_BROKEN_PARAMETER_INFO変数属性が異常です。収集された情報と変数属性に矛盾が生じている時に発生します。
変数の管理情報に異常がある場合や、StrCalc にバグがある場合、アプリケーション側が関数StrCalc_init で初期化を行わなかった場合等に発生する可能性があります。
STATUS_ILLEGAL_PARAMNAME変数名が正しくありません。
単一変数や定数に配列のインデックスを付けた場合も、このエラーが返されます。
STATUS_DUPLICATE_DEFINITION配列変数登録に、既に使われている変数名を使おうとしました。
STATUS_NEED_EQUALイコール = が必要です。
STATUS_SUBST_SYNTAXERROR代入式としての記述に誤りがあります。
行の先頭側にある文字列が、ステートメントのキーワードに一致しなかった場合、その行は代入式として処理されるので、エラー箇所に代入式を記述したつもりではない場合は、キーワードを書き損じているか、不当な文字列が行の先頭に存在する可能性があります。


StrCalc BASIC の状態コード


コード意味
STATUS_NOTENOUGHMEM内部処理用のメモリ確保に失敗しました。
STATUS_GOSUB_STACKOVERFLOWgosub 、return のためのスタックでオーバーフローが発生しました(サブルーチンのネストが深過ぎる)。
STATUS_IF_WITHOUT_THENif に対する then がありません。
STATUS_IFBLOCK_STACKOVERFLOWif 〜 endif ブロックのためのスタックでオーバーフローが発生しました(ネストが深過ぎる)。
STATUS_LABEL_SYNTAXERRORラベル名が規則通りではありません。
STATUS_ELSE_WITHOUT_IFif ブロックが使われていないのに else が使用されました。
STATUS_ELSE_SYNTAXERRORelse の後ろに不要な文字があります。
STATUS_ENDIF_WITHOUT_IFif ブロックが使われていないのに endif が使用されました。
STATUS_ENDIF_SYNTAXERRORendif の後ろに不要な文字があります。
STATUS_THEN_SYNTAXERRORthen の直後には else や endif を置く事ができません。
STATUS_CONTINUE_WITHOUT_FORfor が使われていないのに continue が使用されました。
STATUS_BREAK_WITHOUT_FORfor が使われていないのに break が使用されました。
STATUS_NEXT_WITHOUT_FORfor が使われていないのに next が使用されました。
STATUS_FOR_WITHOUT_TOfor に対する to がありません。
STATUS_FORLOOP_STACKOVERFLOWfor 〜 next ループのためのスタックでオーバーフローが発生しました(ネストが深過ぎる)。
STATUS_NEXT_SYNTAXERRORnext の後ろに不要な文字があります。
STATUS_ON_WITHOUT_GOTOon に対する goto または gosub がありません。
STATUS_UNDEFINED_USERSTATEMENT未定義のユーザステートメントが呼び出されました。
STATUS_IF_WITHOUT_ENDIFif に対する endif がありません。
STATUS_FOR_WITHOUT_NEXTfor に対する next がありません。
STATUS_UNDEFINED_LABELジャンプ先に未定義のラベルが指定されました。
ジャンプ先をまったく指定しなかった場合も、このエラーが返されます。
STATUS_RETURN_WITHOUT_GOSUBgosub が使用されていないのに return で戻ろうとしました。
STATUS_GOSUB_WITHOUT_RETURNgosub が使用された回数分、return で戻っていません。
STATUS_ILLEGAL_FORLOOPfor ループで使用される変数情報が、まだ構成されていません。
一度も for を実行していない状態で continue や next を実行した場合に発生します(goto 等で for ループに飛び込んだ場合)。または、for ループ中にアプリケーションが変数を削除した場合にも発生します。
STATUS_FORSTACK_INITERRfor ループのスタック数は 1 以上である必要があります。
STATUS_IFSTACK_INITERRif ブロックのスタック数は 1 以上である必要があります。
STATUS_GOSUBSTACK_INITERRgosub のスタック数は 1 以上である必要があります。
STATUS_USERSTATEMENT_INITERR規則通りでないユーザステートメント名がテーブル内にあります。
STATUS_DUPLICATE_LABEL同名のラベルが既に存在します。
STATUS_INVALID_NULLTERMINATIONソースコードが指定の長さではありません(ヌル文字が指定位置にありません)。
STATUS_UNDEFINED_PARAM未定義の変数が指定されました。指定する変数は登録されている必要があります。
STATUS_OUTOFDATAread ステートメントが読み込めるデータが足りないか、read ステートメントが過剰に呼び出されました。
skip ステートメントでデータ範囲を超える移動を行った場合も、このエラーになります。
STATUS_UNDEFINED_DATALABEL指定ラベル以降に data ステートメントが無いか、指定したラベル自体がありません。
STATUS_USERABORTアプリケーション、またはユーザから中断命令が出されました。


位置を示す状態コード


このコードはエラーの位置を示します。

コード意味
STATUS_IF_CMP_ERRORif の条件式で StrCalc のエラーが発生しました。
STATUS_BREAK_CMP_ERRORbreak の条件式で StrCalc のエラーが発生しました。
STATUS_FOR_INIT_ERRORfor の変数初期化で StrCalc のエラーが発生しました。
STATUS_FOR_CMP_ERRORfor の終了条件で StrCalc のエラーが発生しました。
STATUS_FOR_STEP_ERRORfor の増分で StrCalc のエラーが発生しました。
STATUS_CONTINUE_CMP_ERRORcontinue の条件式で StrCalc のエラーが発生しました。
STATUS_ONGOTO_INDEX_ERRORon goto 、on gosub のインデックスで StrCalc のエラーが発生しました。
STATUS_SUBST_ERROR代入式で StrCalc のエラーが発生しました。
STATUS_DIM_ERRORdim で StrCalc のエラーが発生しました。
STATUS_RETURN_CMP_ERRORreturn の条件式で StrCalc のエラーが発生しました。
STATUS_END_CMP_ERRORend の条件式で StrCalc のエラーが発生しました。
STATUS_READ_ERRORread で StrCalc のエラーが発生しました。
STATUS_SKIP_ERRORskip で StrCalc のエラーが発生しました。

理由となるコードは BASICPARAM 構造体のメンバ sc_ret に返します。通常は StrCalc の状態コードが返されます。