Prologの引数リストをtoolkitの引数リストに変換する場合には、IFXtSetArgs()を使用して下さい。...
Move to
=> <=
Darueber Spitze
See also
Widgetの名前の変換
C言語のクラスパラメータ
引数リストの変換
IF Computer > IF/Prolog > Manuals > IF/Prolog V4.1 マニュアル > IF/Prolog Interfaces > OSF/Motifインタフェースマニュアル > Motif IF/Prologの拡張 > Motif IF/PrologへのWidgetsの追加 > 新しいwidgetを追加するための作業 > 外部関数の述語としての実現 > 引数リストの変換

引数リストの変換

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.

Prologの引数リストをtoolkitの引数リストに変換する場合には、IFXtSetArgs()を使用して下さい。

この手続きはPrologのリストを第1引数とし、widgetを第2引数として呼び出されます。widgetがすでに存在している場合には、第3引数はNULLで第4引数はArgSetValuesになります。widgetが引数リストを使って生成される場合には、第2引数はその親で、第3引数はそのクラス、第4引数はArgCreateでなければなりません。

返される値は整数で、引数の数を表します。変換が失敗した場合には、-1になります。この場合、Prologに対する例外処理はすでに生成されているので、単に失敗して終了すればそれが起動されます。

変換の結果はグローバルな引数リストIFXtArgsに代入されます。

例題: XtCreateWidgetの実現のCパート

static int IFXtCreateWidget() { Widget NewWidget, Parent; WidgetClass class; char *resname, *class_name; TERM pro_name; unsigned int *counter; extern int WidgetToProlog(); extern char *IFXtCvtError; extern WidgetClass IFXtPCCvtWidgetClass();

if ( !XChk(IsVar(IFArg(1)) || IsAt(IFArg(1)), "variable_or_atom_expected") || !XChk(IsVar(IFArg(2)) || IsAt(IFArg(2)), "variable_or_atom_expected") || !XChk(IsAt(IFArg(3)), IF_EXC_atom_exp) || !XChk(IsWidget(IFArg(4),&Parent),IF_EXC_widget_exp) || !XChk(IsListOrNil(IFArg(5)), IF_EXC_list_exp)) return 0;

class = IFXtPCCvtWidgetClass( IFArg( 3), &counter); if ( class == NULL) EXCEPTION( "illegal_widget_class"); IFXtCvtError = NULL; class_name = XtNewString( class->core_class.class_name); class_name 0 = tolower( class_name 0 ); pro_name = IFCGetNewWidgetName( IFArg( 1), class_name, counter); XtFree( class_name); if ( IFXtCvtError) EXCEPTION( IFXtCvtError); UnifyArg( 1, pro_name); if ( !IsAt( IFArg( 2))) EXCEPTION( IF_EXC_atom_exp); resname = AtStr(IFArg(2));

if( IFXtSetArgs( IFArg(5), Parent, class, ArgCreate) < 0) return 0;

NewWidget = XtCreateWidget( resname, class, Parent, IFXtArgs, (Cardinal) IFXtnof_args); IFXtFreeArgsAfterUsage(); /* I actually call this to register the new widget */ WidgetToProlog( NewWidget, pro_name); return 1; }

read on...
IF/Prolog by Siemens
Sprache
English
Japanese
German
Server
USA
Japan
Site Access
Local Index
Local Contents
Site Contents
Site Index
Printer Friendly
For imode
For PDA
Search
document: http://www.ifcomputer.co.jp/IFProlog/Manuals/v4.1/advanced_feature/osf_motif/motifext/adwidget/incneww/impextf/convargl/home_de.html
published 2008/10/6 update 1995/11/6 (c) 1996-2006 IF Computer Japan
IF Computer 5-28-2 Sendagi, Bunkyo-ku Tel +81-3-5814-3352 start (AT) ifcomputer.com
Customer Support Tokyo 113-0022 Japan   http://www.ifcomputer.com
scroll to top managed with ubiCMS