● 関数リファレンス

コールバック関数USFUNC

int __stdcall       function(PSTRCALC_PARAM prm,char *arg,int len,void *param)
{

    return 状態コード;
}

引数

引数名意味
prmSTRCALC_PARAM 構造体の実体アドレス
argステートメント名の後ろに続く文字列を格納したバッファの先頭アドレス
lenarg 内に格納されている文字列の長さ
param追加パラメータ。USERSTATEMENT 構造体のメンバparam の内容がそのまま渡されます。

説明

BASICPARAM 構造体のメンバ pus に指定するコールバック関数です。関数ポインタの型は sc39.h 内で定義されています。

    typedef int         (__stdcall *USFUNC)(PSTRCALC_PARAM ,char *,int ,void *);

このコールバック関数は、ユーザステートメントとして BASIC プログラム内から呼び出されます。名前が "user_state1" であるとすると、BASIC プログラムからは、

    @user_state1   (必要なら処理に必要な情報を記述)
                 ↑
           ステートメント名の後ろに文字列が続く場合は、
           間に空白が必要

と記述する事で呼び出されます。


BASIC からの情報

引数arg には、ステートメント名の後ろに記述されている文字列が S-JIS 対応で渡されます。範囲はステートメント名の直後から、次のコロン、または改行文字、あるいはヌル文字までです。

    @user_state1  ABCDEFG

上記のようにすると、arg には "ABCDEFG" を格納したバッファの先頭アドレスが渡され、len にはその長さ 7 が渡されます。文字列の先頭にある空白はバッファに格納されません。

文字列が格納されるバッファは、呼び出されている箇所毎に用意されます。内容はコールバックが呼び出される度にコピーされるので、arg が指すバッファの内容を変更しても、呼び出し側に影響を与える事はありません(ただし、arg [0] 〜 arg [len ] の範囲である事)。

ステートメントの後ろに何も記述しなかった場合は、len に 0 が渡されます。


シングルクォートやダブルクォートを含む引数

シングルクォートやダブルクォートで括られているコロン・改行文字は、通常の文字データと見なされます。

                  最初のダブルクォート
                  ↓
    @user_state1  "
    ABCDEFG
        abcdefg
            1234567
"
↑
対となるダブルクォート

上記のように記述すると、次のように改行を含んだ文字列が引数として扱われます。

"
    ABCDEFG
        abcdefg
            1234567
"

対になるシングルクォート・ダブルクォートは、ヌル文字が出現するまで検索されます。

終了時の戻り値

関数が正常終了した時は STATUS_NORMAL を返してください。それ以外の場合は状態コードを返してください。適当なコードが見つからなければ、アプリケーション独自のコードを作成しても問題ありませんが、その場合は STATUS_NORMAL 未満の値(負の値)を使用してください。