以下の構造体はFlipCal APIで使用します。
TVMXModuleInfo構造体
TVMXConstant構造体
TVMXFunction構造体
TVMXValue構造体
以下の関数は拡張モジュールで実装するAPI関数です。
Init関数
GetModuleInfo関数
GetConstantsNum関数
GetConstants関数
GetFunctionsNum関数
GetFunctions関数
FunctionDispatcher関数
SetStdout関数
以下の関数は拡張モジュールから呼び出すことのできるFlipCal APIです。
TVMXModuleInfo構造体は拡張モジュールの情報を保持するために使用します。
typedef struct {
DWORD Size;
char far * Name;
char far * Comment;
char far * ModuleType;
char far * Level;
char far * Version;
char far * Author;
char far * Copyright;
} TVMXModuleInfo;
Size |
この構造体の大きさをバイト数で指定します。 |
Name |
拡張モジュールの正式名称を表す文字列の先頭アドレスを指定します。この文字列はFlipCalの設定ダイアログのモジュール一覧に拡張モジュールの名称として表示されます。 |
Comment |
拡張モジュールに対するコメントの文字列の先頭アドレスを指定します。 |
ModuleType |
拡張モジュールのタイプを表す文字列の先頭アドレスを指定します。 |
Level |
拡張モジュールのサポートするFlipCalインタプリタのレベルを表す文字列の先頭アドレスを指定します。 |
Version |
拡張モジュール自身のバージョン情報を表す文字列の先頭アドレスを指定します。 |
Author |
拡張モジュール自身の作者情報を表す文字列の先頭アドレスを指定します。 |
Copyright |
拡張モジュール自身の著作権情報を表す文字列の先頭アドレスを指定します。 |
この構造体は拡張モジュールがGetModuleInfo関数の戻り値としてFilpCalに送る情報を保持します。
アドレスには必ずNULL以外の有効なアドレスを指定してください。また、いくつかの項目についてはFlipCalインタプリタ・レベル1では必ず以下の値を指定してください。
Size |
必ず32を指定してください。この値は、構造体を1バイトのバイト境界で定義したときのsizeof(TVMXModuleInfo)の値と等価です。 |
ModuleType |
必ず"Func&Const"を指定してください(大文字小文字を区別します)。この文字列は拡張モジュールが関数・定数を提供することを意味します。これは、将来のバージョンアップのために用意されています。 |
Level |
必ず"1"を指定してください。この値は、FlipCalインタプリタ・レベル1のインタプリタ・レベルと等価です。 |
TVMXConstant構造体は拡張モジュールが提供する定数を保持します。
typedef struct {
DWORD Size;
char far * Name;
char far * Comment;
TVMXValue Value;
} TVMXConstant;
Size |
この構造体の大きさをバイト数で指定します。 |
Name |
定数の名称を表す文字列の先頭アドレスを指定します。この名称は定数の識別子として使用されます。 |
Comment |
定数に対するコメントの文字列の先頭アドレスを指定します。 |
Value |
定数の値をTVMXValue構造体で指定します。 |
この構造体は拡張モジュールがGetConstants関数の戻り値としてFilpCalに送る情報を保持します。
Sizeには必ず44を指定してください。この値は、構造体を1バイトのバイト境界で定義したときのsizeof(TVMXConstant)の値と等価です。
TVMXFunction構造体は拡張モジュールが提供する関数の情報を保持します。
typedef struct {
DWORD Size;
char far * Name;
char far * Comment;
INT ParamNum;
} TVMXFunction;
Size |
この構造体の大きさをバイト数で指定します。 |
Name |
関数の名称を表す文字列の先頭アドレスを指定します。この名称は関数の識別子として使用されます。 |
Comment |
関数に対するコメントの文字列の先頭アドレスを指定します。 |
ParamNum |
関数の引数の数を指定します。 |
この構造体は拡張モジュールがGetFunctions関数の戻り値としてFilpCalに送る情報を保持します。
Sizeには必ず16を指定してください。この値は、構造体を1バイトのバイト境界で定義したときのsizeof(TVMXFunction)の値と等価です。
TVMXValue構造体はFlipCalインタプリタ内で使用される値をFlipCal APIにて使用するための基本的な構造体です。
typedef struct {
DWORD ValueType;
union {
int iValue;
double aValue;
char Reserved[28];
};
} TVMXValue;
ValueType |
値の属性を指定します。以下の定数値が使用できます。
|
||||||
iValue |
ValueTypeがVMX_TYPE_INTEGER の場合の値を指定します。 |
||||||
aValue |
ValueTypeがVMX_TYPE_REAL の場合の値を指定します。 |
||||||
Reserved |
未使用の予約済み領域です。 |
この構造体はFlipCalインタプリタが使用する値を拡張モジュール、FilpCal間で受け渡す際に使用します。拡張モジュールの関数呼び出しを行うFunctionDispacher関数の引数情報や、定数情報を保持するTVMXConstant構造体などで使用します。
Init関数は拡張モジュールの初期化を行います。
INT Init(void);
引数はありません。
処理が成功するとVMX_RET_SUCCESS
(0) を、処理が失敗した場合にはVMX_RET_ERROR
(-1) を返します。
FlipCalインタプリタは起動時に拡張モジュールをロードしたあと一度だけInit関数を呼び出し、拡張モジュールに初期化処理を要求します。Init関数は必須ではありません。Init関数を持たない拡張モジュールに対してはInit関数を呼び出すことはありません。
Init関数がVMX_RET_ERROR
を戻した拡張モジュールは直ちにアンロードされます。
GetModuleInfo関数は拡張モジュールの情報を返します。
(TVMXModuleInfo far *) GetModuleInfo(void);
引数はありません。
TVMXModuleInfo構造体へのポインタを返します。
この関数の実装は必須です。GetModuleInfo関数を持たない拡張モジュールはアンロードされます。
FlipCalインタプリタはGetModuleInfo関数を呼び出すことで拡張モジュールのバージョンをチェックします。FlipCalインタプリタは戻されたTVMXModuleInfo構造体の各項目の内容を検査し、拡張モジュールが現行レベルのFlipCalインタプリタがサポートしていない形式の場合には、直ちにアンロードします。
詳細はTVMXModuleInfo構造体の項を参照してください。
GetConstantsNum関数は拡張モジュールが提供する定数の数を返します。
INT GetConstantsNum(void);
引数はありません。
拡張モジュールが提供する定数の数をINT
型で返します。
この関数の実装は必須ではありません。
ただし、GetConstantsNum関数を実装する拡張モジュールは、同時にGetConstants関数も実装しなければなりません。
GetConstants関数は拡張モジュールが提供する定数の情報を返します。
(TVMXConstant far *) GetConstants(void);
引数はありません。
拡張モジュールが提供する定数情報が格納してあるTVMXConstant構造体の配列の、先頭のアドレスを返します。
この関数の実装は必須ではありません。
ただし、GetConstants関数を実装する拡張モジュールは、同時にGetConstantsNum関数も実装しなければなりません。
GetFunctionsNum関数は拡張モジュールが提供する関数の数を返します。
INT GetFunctionsNum(void);
引数はありません。
拡張モジュールが提供する関数の数をINT
型で返します。
この関数の実装は必須ではありません。
ただし、GetFunctionsNum関数を実装する拡張モジュールは、同時にGetFunctions関数とFunctionDispatcher関数も実装しなければなりません。
GetFunctions関数は拡張モジュールが提供する関数の情報を返します。
(TVMXFunction far *) GetFunctions(void);
引数はありません。
拡張モジュールが提供する関数情報が格納してあるTVMXFunction構造体の配列の、先頭のアドレスを返します。
この関数の実装は必須ではありません。
ただし、GetFunctions関数を実装する拡張モジュールは、同時にGetFunctionsNum関数とFunctionDispatcher関数も実装しなければなりません。
FunctionDispatcher関数は拡張モジュールが提供する関数を実行し結果を返します。
INT FunctionDispatcher(
char far * pName,
PTVMXValue pResult,
PTVMXValue pParams,
INT iParamNum
);
pName |
呼び出す関数名を格納した文字列の先頭アドレスを指定します。 |
pResult |
関数の戻り値を格納するTVMXValue構造体のアドレスを指定します。 |
pParams |
関数に渡す引数を格納したTVMXValue構造体の配列の先頭アドレスを指定します。 |
iParamNum |
関数に渡す引数の数を指定します。 |
関数の実行結果にしたがって以下の応答コードを返します。
VMX_RET_SUCCESS |
0 | 関数呼び出しは成功しました。 |
VMX_RET_NOTFOUND |
101 | pNameに指定された名前の関数が拡張モジュール内に見つかりませんでした。 |
VMX_RET_ILLEGALCALL |
102 | 不正な関数呼び出しです。 |
VMX_RET_INTERNALERROR |
103 | 拡張モジュールの内部エラーにより呼び出しに失敗しました。 |
VMX_RET_INVALIDPARAMNUM |
104 | 引数の数が正しくないため呼び出しに失敗しました。 |
VMX_RET_INVALIDPARAMTYPE |
105 | 引数の属性が正しくないため呼び出しに失敗しました。 |
FlipCalインタプリタによる拡張モジュール関数の呼び出しは、このFunctionDispatcher関数をエントリーポイントとします。
FlipCalインタプリタは英文字の大文字小文字を区別しません。pNameに指定する関数名は全て大文字で指定されます。
関数の実行中にエラーが発生した場合は、エラー内容にしたがって上記応答コードの一つを選択して返します。上記応答コードのどれにも一致しないようなエラーの場合には、原因が拡張モジュール内部にある場合にはVMX_RET_INTERNALERROR
を、呼び出し元にある場合にはVMX_RET_ILLEGALCALL
を使用します。
VMX_RET_INTERNALERROR
またはVMX_RET_ILLEGALCALL
を返す場合には、Stdout関数にてエラーの詳細をユーザーに明示することを推奨します。
FunctionDispatcher関数の実装は必須ではありませんが、この関数を実装する拡張モジュールは、同時にGetFunctionsNum関数とGetFunctions関数も実装しなければなりません。
SetStdio関数は拡張モジュールに標準出力関数を提供します。
(PTVMXStdout) SetStdout(PTVMXStdout pNewStdout);
新しいStdout関数のアドレスを指定します。
以前に設定されていたStdout関数のアドレスを返します。設定されてない場合にはNULLを返します。
FlipCalインタプリタはSetStdout関数を呼び出すことで、拡張モジュールに標準出力インターフェイスを提供します。標準出力を使用する拡張モジュールは、pNewStdoutで指定されたアドレスをStdout関数のアドレスとして使用することができます。
この関数の実装と標準出力のサポートは必須ではありませんが、サポートすることを推奨します。
Stdout関数はFlipCalインタプリタの標準出力に一行出力します。
BOOL Stdout(char far *pStr, DWORD iLen);
pStr |
出力する文字列の先頭アドレスを指定します。 |
iLen |
出力する文字列の長さを指定します。 |
呼び出しが成功するとTRUEを、失敗するとFALSEを返します。
Stdout関数は、拡張モジュールからFlipCalインタプリタの標準出力へ文字列の出力を行いたい場合に使用します。この関数を使用したい場合はSetStdout関数を実装して、FlipCalインタプリタからStdout関数のアドレスを受け取らなければなりません。SetStdout関数の呼び出しがなされてない場合にはStdout関数は使用できません。
FlipCalインタプリタ・レベル1では標準出力はFlipCalのメインウィンドウのログ出力です。