MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
For current customers, we continue to provide
professional support for IF/Prolog until Dec 31, 2008.
Xtoolkit側では、リソ−ス値はXtSetValues()のようなXtル−チンによって取り扱われた時に特別な型(XtArgVal)にキャスト(変換)されます。IF/Prologからリソ−スを設定する場合にも同様の変換が必要になります。PrologからXtoolkitへの変換を行うコンバ−タは、IF/PrologのTERMを入力として受け取り、変換したリソ−ス値をXtArgValとして返します。
void FromPrologToToolkitConverter(term, arg_val)
TERM term;
XtArgVal *arg_val;
コンバ−タが呼び出された時点で、termのProlog型はリソ−ステ−ブルIFXtResourceTable[]を参照して決定されます(対応するリソ−スの4番目の項目)。以下のうちのいずれかになります。
ArgInteger Prologの整数
ArgFloat Prologの倍精度浮動小数
ArgList Prologのリスト
ArgAny Prologの項
変換手続きでは、引き渡されたProlog表現に対応するリソ−ス値を計算してそれをXtArgVal()にキャストし、それを出力パラメ−タarg_valに渡さなければなりません。
リソ−スの計算は、PrologからCへの変換、メモリの割り当て、Xlib関数の呼び出しによるXリソ−スの作成などのアクションから成っています。
変換が失敗した場合には、グロ−バル変数IFXtErrorがエラ−を表示する文字列、通常は "illegal__resources"に設定されなければなりません。変換ル−チンがすでに呼び出された後にIFXtErrorが設定された場合には、そのエラ−文字列とともに例外処理が引き起こされます。
例題:型"Dimension"のリソ−スに対するコンバ−タ
void IFXtPTCvtDimension(value, arg_val)
TERM value;
XtArgVal *arg_val;
{
*arg_val = (XtArgVal) IntPC(value);
}
|