付録9 ユーザインタフェース言語へのアクセス
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.

OSF/Motifは、プレゼンテーション記述言語UILを含んでいます。widgetの階層構造、リソース値、コールバックから成る静的なユーザインタフェースは、この言語を使って指定することができます。記述内容はコンパイルされ、ユーザインタフェースを構築するために、アプリケーションによって実行時に読み込まれます。UILファイルを読み込み、widgetを生成する実行部分をMotifリソースマネージャ(MRM)と呼びます。

UILではある程度高レベルでプログラミングができるので、Cを使ってユーザインタフェースを構築しようとしているプログラマには、このメカニズムが有効です。しかしOSF/Motifインタフェースを使うPrologのプログラマには、あまり重要ではありません。OSF/Motifインタフェースでは、すでに多くのリソース型(たとえば色やフォントなど)に対して高レベルの表現を使用しているからです。しかも、UILほど静的な制約はありません。

OSF/MotifへのIF/Prologインタフェースでは、コンパイルされたUILファイルにアクセスできます。IF/Prologのプログラマは、Cのプログラマが使うのと同じメカニズムをより少ない制限で使用できます。UILへのアクセスは、C関数と同様の働きをする述語を使って行います。

制限:

UILで指定されている一定数のコールバックに対してのみ、Prolog述語を付加することができます。現在30個のコールバックがサポートされており、これでほとんどの用途に対応できます。

xmFetchWidgetOverride/5は、widget名のみを無効にします。多くの場合、後続の明示的なxtSetValues/2の呼びだしによって引数を変更することができます。

現在PrologアプリケーションからUILの識別子に与えることのできる値は、整数と文字列値に制限されています。これは、インタフェースの設計者がこの機能をあまり重視しなかったためです。しかし、新しいリリースでは改善される可能性があります。

アプリケーションから取り出されたエクスポートされたinteger_tableは、リストの第1要素中の長さを示さなければなりません (たとえばinteger_table(4,1,2,3,4))

mrmCloseHierarchy(+HierarchyId)

MrmCloseHierarchy()と同様の働きをします。

MRM-階層構造 HierarchyIdを閉じます。

HierarchyIdは、mrmOpenHierarchy/1によって返された隠蔽された値です。

mrmFetchColorLiteral(+WidgetName, +HierarchyId, +UILName, ?Value)

MrmFetchColorLiteral()と同様の働きをします。

エクスポートされたUIL色 UILNameの値を取り出します。Valueは、後続のxtSetValues/2の呼び出しに使用されます。

注意: 返されたValueは、正しい色の名前ではありません。これは単なる内部表現であり、たとえばIF/Prologプロセスの終了後は有効ではなくなります。

この述語は、色の名前(literal)が見つからない場合に失敗します。

HierarchyIdは、mrmOpenHierarchy/1によって返された隠蔽された値です。

mrmFetchIconLiteral(+WidgetName, +HierarchyId, +UILName, +Foreground, +Background, ?Value)

MrmFetchIconLiteral()と同様の働きをします。

MRMを初期化します。

ForegroundとBackgroundの色を使って、UILのアイコン UILNameから生成したピックスマップ Valueを返します。

注意: 返されたValueは、正しいPrologのピックス名ではありません。これは単なる内部表現であり、たとえばIF/Prologプロセスの終了後は有効ではなくなります。

この述語は、色の名前(literal)が見つからない場合に失敗します。

HierarchyIdは、mrmOpenHierarchy/1によって返された隠蔽された値です。

mrmFetchLiteral(+WidgetName, +HierarchyId, +UILName, ?Value)

MrmFetchLiteral()と同様の働きをします。

UILの変数の値 Valueを取り出します。この値は、Prolog表現に変換されます。

注意: 返されたfont, font_table, translation_table, Valueは、通常のProlog表現ではなく単なる内部表現です。これは後続のxtSetValues/2の呼び出しに使われ、たとえばIF/Prologプロセスの終了後は有効ではなくなります。

この述語は、色の名前(literal)が見つからない場合に失敗します。

HierarchyIdは、mrmOpenHierarchy/1によって返された隠蔽された値です。

以下のUIL型を取り出すことができます。 (integer_tableについては、上記の制限を参照して下さい)

UIL型 Prolog型

integer 整数 boolean アトム、trueあるいはfalse float 浮動小数 string アトム compound_string 複合文字列コンポーネントのリスト asciz_table アトムのリスト integer_table 整数のリスト string_table 複合文字列コンポーネントから成る リストのリスト font アトム(隠蔽された、上記参照) font_table アトム(隠蔽された、上記参照) reason アトム translation_table アトム(隠蔽された、上記参照)

mrmFetchSetValues(+HierarchyId, +WidgetName, +ArgList)

MrmFetchSetValues()と同様の働きをします。

ArgListに従って、widget WidgetNameのリソース値を設定します。これはxtSetValues/2に渡されるリストと同様ですが、値の代わりにUIL名を用います。

HierarchyIdは、mrmOpenHierarchy/1によって返された隠蔽された値です。

mrmFetchWidget(+HierarchyId, +UILName, +ParentName, ?WidgetName)

MrmFetchWidget()と同様の働きをします。

widget ParentNameの子として、UILのwidget UILNameを取り出します。返されたwidgetはPrologで使用できるように自動的に登録され、特定のPrologのwidget名が割り当てられます。サブwidgetはPrologに登録されません。これらのwidgetは、それらに対する最初のコールバックが呼び出された時点でPrologに登録されます。

この述語は、指定された名前(literal)が見つからない場合に失敗します。

HierarchyIdは、mrmOpenHierarchy/1によって返された隠蔽された値です。

mrmFetchWidgetOverride(+HierarchyId, +UILName, +ParentName, +ToolkitName, ?WidgetName)

MrmFetchWidgetOverride()と同様の働きをします。

widget ParentNameの子として、UILのwidget UILNameを取り出し、それにtoolkit名 ToolkitNameを与えます。返されたwidgetはPrologで使用できるように自動的に登録され、特定のPrologのwidget名が割り当てられます。サブwidgetはPrologに登録されません。これらのwidgetは、それらに対する最初のコールバックが呼び出された時点でPrologに登録されます。

実現上の問題があるため、対応するC関数の引数リストのパラメータはありません。これは、後続のxtSetValues/2の呼び出しに使用することができます。

この述語は、widgetが見つからない場合に失敗します。

HierarchyIdは、mrmOpenHierarchy/1によって返された隠蔽された値です。

mrmInitialize

MrmInitialize()と同様の働きをします。

MRMを初期化します。

mrmOpenHierarchy(+FileList, -HierarchyId)

MrmOpenHierarchy()と同様の働きをします。

コンパイルされたUILファイルであるFileListからファイルを開きます。

この述語は、ファイルが見つからない場合に失敗します。

HierarchyIdは、UILユーザインタフェースにアクセスするすべての述語で使用できるように返された隠蔽された値です。

mrmRegisterIdentifierNames(+ValueList)

MrmRegisterNames()と同様の働きをします。

指定されたUIL識別子に値を登録します。

ValueListは、[ UILName, IdValue ]. のリストです。

値 IdValue(アトムあるいは整数)がUILの変数 UILNameに割り当てられます(上記の制限の部分を参照して下さい)。

mrmRegisterProcedureNames(+CallbackPredicateList)

MrmRegisterNames()と同様の働きをします。

指定されたUILコールバック名に対応するコールバック述語を登録します。

CallbackPredicateListは、以下のように3つのアトムから成るリストのリストです。

[ UILName, Predicate/3, TagType ].

Predicate/3は、対応するアトム TagTypeに変換されたUILコールバックのタグ(コールバックに対するクライアントデータ)によって呼び出されます。現在Motifリソースマネージャは、すべてのUIL型をサポートしているわけではありません。

正しいタグの型(TagType)は、以下のようになります。

TagType クライアントデータに対するProlog型

none _ integer 整数 float 浮動小数 boolean アトム、trueあるいはfalse string アトム compound_string 複合文字列コンポーネントのリスト font アトム (隠蔽された、mrmFetchLiteralを参照) font_table アトム (隠蔽された、mrmFetchLiteralを参照) color アトム (隠蔽された、mrmFetchLiteralを参照) translation_table アトム (隠蔽された、mrmFetchLiteralを参照) integer_table 整数のリスト(制限の部分を参照)

internal_hierarchy_id_expected HierarchyIdが正しくない、mrmOpenHierarchyを参照 atom_expected パラメータは、アトムでなければならない widget_expected パラメータは、widgetでなければならない mrm_function_failed MRM C関数が失敗した mrm_bad_hierarchy HierarchyIDが正しくない mrm_partial_success 少なくとも1つのliteralが正しく 取り出された。 illegal_pixel_resource 色の変換が失敗した wrong_literal_type literal型が正しくない conversion_for_data_type_not_implemented literal型が正しくない list_expected パラメータは、リストでなければならない too_many_arguments ArgListが長すぎる illegal_arglist_element ArgListの要素が正しくない too_many_procedures_registered コールバック手続きは、30個まで登録できる two_elements_expected ValueListが正しくない atom_or_int_expected ValueListの要素が正しくない illegal_tag_type_found 発生してはならない illegal_tag_type タグの型が正しくない


Darueber read on...