[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ]


3 プログラマ向けリリース・ノート

この章は,プログラマ向けのリリース・ノートです。

3.1 日本語DECwindows Motif for OpenVMSソフトウェア固有のプログラミング関連リリース・ ノート

この章のリリース・ノートは,日本語DECwindows Motifバージョン1.0を対象にしたものですが, バージョン1.2-5にも適用されます。

3.2 日本語DECwindows Motif for OpenVMSツールキットのバージョン

V1.2-5

日本語DECwindows Motifバージョン1.2-5は,CDE Motif 1.0ツールキット(OSF/Motif リリース1.2.5)およびX11リリース5をベースにしています。

V1.2-4

日本語DECwindows Motifバージョン1.2-4は,CDE Motif 1.0ツールキット(OSF/Motif リリース1.2.5)およびX11リリース5をベースにしています。

V1.2-3

日本語DECwindows Motifバージョン1.2-3は,OSF/Motifリリース1.2.3ツールキットおよびX11 リリース5 (R5)をベースにしています。

V1.2

日本語DECwindows Motifバージョン1.2は,OSF/Motifリリース1.2.2ツールキットおよびMIT X11 リリース5 (R5)をベースにしています。

V1.1

日本語DECwindows Motifバージョン1.1は,OSF/Motifリリース1.1.3ツールキットおよびMIT X11 リリース4 (R4)をベースにしています。

V1.0

日本語DECwindows Motifバージョン1.0は,OSF/Motifリリース1.1.1ツールキットおよびMIT X11 リリース4 (R4)をベースにしています。

3.3 ランタイムおよびプログラミング環境

V1.2-4

DECwindows Motif for OpenVMSでは,次のランタイムおよびプログラミング環境を提供します。

3.4 DECW$WML_TOKENS.DATを現在のディレクトリで検索するDECW$WML.EXE

SYS$SYSTEM:DECW$WML.EXEを使用して,UILファイルのオペランド解析をカスタマイズすることができます。DECW$WML.EXE は,DECW$WML_TOKENS.DAT ファイルからトークン・リストを読み込みますが,DECwindows Motif の以前のバージョンでは,このトークン・ファイルは常にSYS$LIBRARY から読み込まれていました。日本語DECwindows Motif V1.2-4では, DECW$WML.EXEがまず最初に現在ディレクトリ内でこのファイルを検索してから,SYS$LIBRARY ディレクトリ内を検索します。これによりカスタマイズ化したトークン・ ファイルを使用することができます。

3.5 DECW$COMPARE_VERSIONSコマンド・ファイルの問題

DECW$COMPARE_VERSIONSコマンド・ファイルは,2桁年数を使用してバージョン識別子を比較しています。 したがって,2000年より前に生成されたイメージのバージョン識別子と2000 年以降に生成されたイメージのバージョン識別子を正常に比較することができません。

3.6 OSF/Motifツールキットの互換性

V1.2-3

日本語DECwindows Motifバージョン1.2あるいは1.2-3のインクルード・ ファイルを使用してアプリケーションのコーディングおよびコンパイルを行うことはできません。 また,その結果得られたオブジェクト・ファイルを, 日本語DECwindows Motifバージョン1.1ソフトウェアが稼動しているシステムに移植することともできません。 また,日本語DECwindows Motif バージョン1.1に対してそのオブジェクト・ファイルをリンクすることもできません。 また,実行可能イメージ(.EXE)の動作を期待することもできません。.h ファイルで定義された構造体の違いによりオフセットを正しく揃えられず, 意味を持つ実行可能イメージを作成することができません。

V1.2

日本語DECwindows Motifバージョン1.1および1.2レイヤード製品のベースであるOSF/Motif リリース1.1.3および1.2.2ツールキットは,互換性がありません。 ただし,OSF/Motifリリース1.1.3ツールキットでビルドされたアプリケーションは, 日本語DECwindows Motifバージョン1.2 for OpenVMSを修正することなく継続して動作します。OSF/Motifリリース1.1.3 ツールキットの共有可能ライブラリは日本語DECwindows Motifバージョン1.2 for OpenVMS レイヤード製品で継続して提供され,システム上の既存のDECwindows アプリケーションで使用することができます。

日本語DECwindows Motifバージョン1.1のアプリケーションは,日本語DECwindows Motif バージョン1.2 for OpenVMSを修正することなく継続して動作します。 しかし,OSF/Motifリリース1.2.2ツールキットでビルドされたアプリケーションだけがドラッグ・ ドロップ機能および「テア・オフ」メニューなどのバージョン1.2 の新しい機能を使用できることに注意してください。

ほとんどの場合,簡単なアプリケーション(たとえば,個人ツールキット・ ルーチンあるいはユーザ定義ウィジェットを含まないアプリケーション) は,OSF/Motifリリース1.2.2ツールキットで再コンパイルおよび再リンクして, バージョン1.2の新しい機能を含むようにすることができます。 ただし,DECwindows Motifバージョン1.1アプリケーションで以前に特定できなかった問題点が, 新しいOSF/Motifリリース1.2.2ツールキットで再リンクすることにより明らかになる可能性があります。 また,リリース1.2.2 ツールキットでの動作およびウィジェット・レイアウトが変化するため, アプリケーションの修正が必要となる場合もあります。

より複雑なアプリケーションで日本語DECwindows Motifバージョン1.2 for OpenVMSツールキットが提供しているマクロおよび機能を使用する場合は, より本質的な修正を必要とする可能性があります。

ディスプレイ構造体フィールドへの参照によりコード生成時にエラーが発生する場合は,X11 R5 互換構造体アクセス用に定数XLIB_ILLEGAL_ACCESS を定義してください。

次の例のように定義します。

     $ CC/DEFINE=XLIB_ILLEGAL_ACCESS DECBURGER.C

3.6.1 _Xmルーチン

V1.2

OSF/Motifツールキットは,多くの「内部専用」ルーチンで実現されています。 これらのルーチンは_Xmで始まり,標準Motifウィジェットだけが使用するようになっています。API(Application Programing Interface) については文書化されておらず,OSF ではこれらのルーチンをサポートしていません。OSF 社はAPIを変更して新しい_Xmルーチンを追加し,現在の_Xm ルーチンを削除し,あらゆる_Xmの機能性の変更を警告や予告なしに行う権利を保有しています。


警告
弊社では,_Xmルーチンを複写して,OSF/Motif リリース1.2.2ツールキットの共有可能イメージ転送ベクトルに置くことによって,_Xm ルーチンへアクセスできるようにしています。 弊社では,これらのルーチンについて,その使用,ドキュメント,またはサポートを保証していません。 これらの機能を使用するユーザは,ご自分の責任で行ってください。

3.6.2 OSF/Motifリリース1.2.2とX11 R5の共有可能ライブラリ

V1.2

OSF/Motifリリース1.2.2ツールキットとOSF/Motifリリース1.1.3ツールキットの間にはバイナリ互換性がありません。 アプリケーションはどちらか別々のツールキットでリンクする必要があります。OSF/Motif リリース1.2.2 のアプリケーションのリンクには,OSF/Motif 1.2.2およびX11 R5をベースとする共有可能ライブラリしか使用できません。 また,OSF/Motif リリース1.1.3のアプリケーションのリンクには,OSF/Motif 1.1.3およびX11 R4 をベースにする共有可能ライブラリしか使用できません。

OSF/Motifリリース1.2.2をベースにする共有ライブラリとOSF/Motifリリース1.1.3 をベースにする共有可能ライブラリの両方のライブラリを提供するために, リリース1.1.3をベースにするライブラリにはDECwindows Motifバージョン1.1と同じファイル名が,リリース1.2.2をベースにするライブラリには後ろに"R5" または"12"の付くファイル名が使用されています。

OSF/Motifリリース1.1.3ツールキットまたはOSF/Motifリリース1.2.2ツールキットとともに使用される共有可能ライブラリのファイル名には, 接尾辞は付きません。 このようなライブラリには,次のものがあります。

Xtツールキットリリース5 (R5)とリンクされた共有可能ライブラリには, "R5"の接尾辞が付きます。XUIツールキットをベースにするライブラリにはR5 に相当するライブラリがなく,X11 R5またはOSF/Motifリリース1.2.2 をベースにしたリンカ・オプション・ファイルに含めることはできません。 これらのファイル名については表 3-1 を参照してください。


注意
DECW$XLIBSHR.EXEファイルはXlib のMITリリース5バージョンであり,MITリリース4バージョンのXlibではありません。

表 3-1 R5をベースにする共有可能ライブラリの名称

R4準拠ファイル名 R5準拠ファイル名
DECW$AILSHR.EXE DECW$AILSHRR5.EXE
DECW$DWTLIBSHR.EXE (なし)
DECW$DWTSHR.EXE (なし)
DECW$XMULIBSHR.EXE DECW$XMULIBSHRR5.EXE
DECW$XTRAPLIBSHR.EXE DECW$XTRAPLIBSHRR5.EXE
DECW$XTSHR.EXE DECW$XTLIBSHRR5.EXE

リリース5ではDECW$DWTLIBSHR.EXEまたはDECW$DWTSHR.EXEに相当するファイルは用意されていません。 リリース5用に作成されたアプリケーションは, これらのファイルとリンクすることはできません。

OSF/Motifリリース1.2.2とリンクされた共有可能ライブラリには,"12"の接尾辞が付きます。 これらのファイルはR5およびOSF/Motifリリース1.2.2 と互換性のあるライブラリだけにリンクされる必要があります。これらのファイル名については, 表 3-2の一覧を参照してください。

表 3-2 OSF/Motifリリース1.2.2準拠の共有可能ライブラリ名

リリース1.1.3準拠ファイル名 リリース1.2.2 準拠ファイル名
DDIF$VIEWSHR.EXE DDIF$VIEWSHR12.EXE
DECW$BKRSHR.EXE DECW$BKRSHR12.EXE
DECW$DXMLIBSHR.EXE DECW$DXMLIBSHR12.EXE
DECW$MAILSHR.EXE (なし)
(なし) DECW$MRMLIBSHR12.EXE
DECW$PRINTWGTSHR.EXE (なし)
DECW$TERMINALSHR.EXE DECW$TERMINALSHR12.EXE
DECW$XMLIBSHR.EXE DECW$XMLIBSHR12.EXE
DGIT$LIBSHR.EXE DGIT$LIBSHR12.EXE
IMG$SHRLIB.EXE IMG$SHRLIB12.EXE
LWK$DXMSHR.EXE LWK$DXMSHR12.EXE
XNL$SHR.EXE XNL$SHR12.EXE

DECW$PRINTWGTSHR12.EXEファイルはありません。プリント・ウィジェットはDECW$DXMLIBSHR12.EXE ファイルの一部です。

DECW$MRMLIBSHR12.EXEファイルは,以前にはDECW$XMLIBSHR.EXEの一部であったMotif Resource Manager (Mrm) ルーチンを含む新しいイメージです。OSF/Motif リリース1.2.2をベースにして,.UIDファイルにアクセスするためにMrm ルーチンを呼び出すプログラムはすべて,このライブラリとリンクする必要があります。

たとえば,OSF/Motifリリース1.1.3をベースにする典型的なリンカ・オプション・ ファイルは,次のようなものです。

     SYS$SHARE:DECW$XLIBSHR/SHARE
     SYS$SHARE:DECW$XTSHR/SHARE
     SYS$SHARE:DECW$DWTLIBSHR/SHARE
     SYS$SHARE:DECW$XMLIBSHR/SHARE
     SYS$SHARE:DECW$DXMLIBSHR/SHARE

このプログラムをOSF/Motifリリース1.2.2とリンクするには,リンカ・オプション・ ファイルを次のように変更します。

     SYS$SHARE:DECW$XLIBSHR/SHARE
     SYS$SHARE:DECW$XTLIBSHRR5/SHARE
     SYS$SHARE:DECW$XMLIBSHR12/SHARE
     SYS$SHARE:DECW$MRMLIBSHR12/SHARE
     SYS$SHARE:DECW$DXMLIBSHR12/SHARE

このように変更することで,XUIツールキット(DECW$DWTLIBSHR.EXE)を参照せず, また,Motifリソース・マネージャ(DECW$MRMLIBSHR12.EXE)とリンクします。

3.7 言語バインディング

V1.2-3

次のDECwindows構成要素の開発用に,Fortran,Pascal,C,C++言語バインディングが用意されています。

3.7.1 OSF/Motifリリース1.1.3 Adaバインディング

V1.2

日本語DECwindows Motif for OpenVMS V1.2の本リリースには,OSF/Motifリリース1.1.3ツールキット用にも,OSF/Motif リリース1.2.2ツールキット用にも,Adaバインディングは含まれていません。 どちらのツールキットについても, Strongly Typedバインディングは,DEC Adaバージョン3.0A言語製品の一部です。

日本語DECwindows Motif for OpenVMS V1.2がDECwindows Motif for OpenVMSバージョン1.1にインストールされている場合,DECW$INCLUDE ディレクトリに入っているOSF/Motif リリース1.1.3 Adaバインディングは,削除されたり移動されたりすることはありません。

3.8 OSF/Motifリリース1.1.3プログラミング・サポートとXUI

制限事項

V1.2

日本語DECwindows Motif for OpenVMS V1.2ソフトウェアに付いてくるXウィンドウとOSF/Motif ライブラリは,以前のバージョンで配布されたものとは互換性がありません。 ランタイムの互換性は維持されていますが,プログラミング環境には互換性はありません。

DECwindows Motifの旧バージョンで提供されていたXUIあるいはMotif リリース1.1.3のプログラミング環境は,日本語DECwindows Motif for OpenVMS V1.2 ではサポートされていません。 しかし,インストレーションの際にすでに使用しているシステムに入っているプログラミング・ ファイルを保管するオプションがあります。 既存のプログラミング・ファイルの保管を選択する場合,これらのファイルはサブディレクトリに移され, プログラミングを行う際にアクセスすることができます。 具体的にいうと,インストレーションの過程で, 表 3-3の表に記載された各ディレクトリに[.DECW$113] というサブディレクトリが作成されて,既存のファイルをこの新しいサブディレクトリに移動します。

既存のプログラミング・ファイルの保管についての詳細は,『日本語DECwindows Motif for OpenVMSインストレーション・ガイド』を参照してください。

表 3-3 XUI,Motif旧バージョンのプログラミング環境用ディレクトリ

ディレクトリ 内容 新しい位置
DECW$INCLUDE Cヘッダ・ ファイル SYS$SYSROOT:[DECW$INCLUDE.DECW$113]
SYS$SYSTEM UILコンパイラ SYS$SYSROOT:[SYSEXE.DECW$113]
SYS$LIBRARY 非C言語バインディング SYS$SYSROOT:[SYSLIB.DECW$113]

これらのファイルを使用してプログラミングを行うには,新しい[.DECW$113] サブディレクトリを各論理名の検索パスに含めます。 次の例を参照してください。

今回のリリースで更新されたファイルには,[.DECW$113]サブディレクトリに移されたファイルと同じ名前を持っているものも多くあります。 したがって, まず検索リストに新しいサブディレクトリ[.DECW$113]を入れます。 これによって[.DECW$113]の中のファイルをソフトウェア開発用に使用することができます。

SYS$MANAGER:DECW$PRIVATE_APPS_SETUP.COMのコマンド・プロシージャでDECW$INCLUDE が再定義された場合は,それに従って上記の指示を変更してください。

XUIまたはOSF/Motifリリース1.1.3でUILコンパイラを使用するには,次のようにします。

  1. SYS$SYSROOT:[SYSEXE.DECW$113]DECW$UILCOMPILER.CLDというファイル名で, 次のテキストを含むファイルを作成します。
         define type trace_keywords
          keyword tokens
          keyword symbols
    
         define type warning_keywords
          keyword nowarnings
          keyword noinformationals
    
         define type version_keywords
          keyword V1, syntax=xui_uil
          keyword V2, syntax=xui_uil, default
          keyword MOTIF11, syntax=motif_uil
    
         define syntax xui_uil
          image decw$uilcompiler
    
         define syntax motif_uil
          image decw$uilmotif
    
         define verb uil
          image decw$uilcompiler
          parameter p1, label=source_file,
           prompt="File", value(required,noconcatenate,type=$infile)
          qualifier trace, label=trace_qual,
           value(list,noconcatenate,type=trace_keywords), nonnegatable
          qualifier warnings, label=warnings_qual,
           value(list,noconcatenate,type=warning_keywords)
          qualifier list, label=listing_file,
           batch, value(type=$outfile)
          qualifier machine, label=machine_qual,
          qualifier output, label=resource_file,
           default, value(type=$outfile)
          qualifier version, label=version_qual, default,
           value(type=version_keywords),
           nonnegatable
          qualifier XUI, default, nonnegatable, syntax=xui_uil
          qualifier MOTIF, nonnegatable, syntax=motif_uil
    
          qualifier widget_meta_description, label=widget_qual,
           value(required, noconcatenate, type=$infile)
    
          disallow XUI and MOTIF
    

  2. 次のように,DCLコマンド・テーブルをXUI UILコンパイラ用に設定します。
         $ SET COMMAND SYS$SYSROOT:[SYSEXE.DECW$113]DECW$UILCOMPILER.CLD
    

注意
UILコマンドの定義を前の状態に戻すには, 次のコマンドを実行します。
     $ SET COMMAND SYS$LIBRARY:DECW$UILCOMPILER.CLD

3.9 OpenVMS POSIXサポートのDECwindowsトランスポートへの追加

V1.1

DECwindows特有のトランスポートは,OpenVMS POSIXのfork()の要求をサポートするためにコード変更が必要です。 独自のトランスポートを作成していて,OpenVMS POSIX サポートを実現する予定がある場合は,トランスポート・ ソース・コードを変更する必要があります。ここでは必要な変更について説明します。

3.9.1 POSIX fork()ルーチン

V1.1

POSIX fork()ルーチンは,P1とP0スペースを完全に複写して,現在実行中のプロセスのコピーを作成します。 オリジナル(親)のプロセスと新しい( 子)プロセスの両方ともこの時点から同じパスで動作します。

POSIX fork()ルーチンを使用すると,次の理由によりデータは複製されません。

以上のような制限があるため,OpenVMS用POSIXを実行するには, DECwindows特有のトランスポートを含む保護共有可能イメージには, ある一定のことが要求されています。

特定のトランスポートは,(クライアント側で)forkできることを確認する必要があります。 第3.9.2項で説明しているSYS$POSIX_FORK_CONTROL システム・サービスがこの目的に使用できます。

特定トランスポートは,クリーンアップ作業を行う必要はありません。

3.9.2 SYS$POSIX_FORK_CONTROLシステム・ サービス

V1.1

新しいSYS$POSIX_FORK_CONTROLシステム・サービスがVMSバージョン5.5に加えられており, これはforkできる保護共有可能イメージを登録し,またfork コールバックにアドレスとパラメータを登録するものです。

POSIX fork()ルーチンは,アプリケーションが,SYS$POSIX_FORK_ CONTROLを呼び出さなかった保護共有可能イメージとリンクしたか, またはこれをアクティブにした場合は失敗します。

このため特定トランスポートのオープン・ルーチンに,次のようなSYS$POSIX_FORK_CONTROL システム・サービスへの呼び出しを追加します。

     $ POSIX_FORK_CONTROL(CNTRL = POSIX$C_SETUP_CALLBACK,
       WHEN = POSIX$M_CALL_IN_CHILD,HANDLER = posix_fork_cb);

この例ではCNTRLパラメータは,イメージがforkできるようコールバックをセットアップすることを表しており,WHEN パラメータはいつforkコールバックを呼び出すかを表しており, またHANDLERパラメータはforkコールバックのアドレスを与えています。

この例で使用されていない他のパラメータによって,パラメータをコールバック・ ルーチンに渡して,アクセス・モードを指定(呼び出し側モードに合わせて最大化) できるようになります。

3.10 変換イメージ・サポート(Alphaのみ)

この節では,変換イメージ・サポートの制約および一般的な情報について説明します。

3.10.1 OpenVMSシステムでの変換イメージの実行

V1.2-3

バージョン1.5より前のOpenVMS Alphaシステムでは,OpenVMS Alphaシステムへ移行したユーザ向けに次の問題に対処する変換サポートが用意されていました。

OpenVMS VAXバージョンを現在開発中のプログラミング言語については, ネイティブのAlphaバージョンがOpenVMS Alphaバージョン6.1オペレーティング・ システムで提供されています。VMSバージョン5.5-2のリリース時点で利用可能な言語機能をサポートするため, 変換イメージ環境が維持されています。

同様に,システム・サービスとランタイム・ライブラリ・エントリ・ポイントの使用が,VMS バージョン5.5-2オペレーティング・システム上に存在していたイメージに制限されているイメージについて, 変換のサポートがあります。

VMSバージョン5.5-2のリリース以降にレイヤード製品をシステムにインストールしている場合, 変換をサポートするためイメージを作成し直す必要があるかもしれません。 たとえば,DECwindows Motif for OpenVMS VAXソフトウェア同梱のアプリケーションの場合,OSF Motif リリース1.2.3ではなく,OSF Motif リリース1.1.3ライブラリ,またはDECwindows XUIライブラリでイメージを作成しなければなりません。

DECwindows Motif V1.2-5 for OpenVMSリリースには,DECwindows Motif V1.2 for OpenVMS Alphaリリースで提供されているものと同じ変換イメージ・ サポート・ファイルが含まれています。

DECwindows Motif V1.2 for OpenVMS Alphaには,OpenVMS Alphaシステム上のDECwindows Motif V1.1 for OpenVMS VAX イメージのサポートが含まれています。

V1.2

日本語DECwindows Motifバージョン1.2 for OpenVMS Alphaのリリースでは, 日本語DECwindows Motifバージョン1.2 for OpenVMS VAXの変換イメージを日本語OpenVMS Alpha システム上で実行することはサポートされていません。

OpenVMS Alphaシステム上のDECwindows Motifバージョン1.2の共有可能イメージを使用してアプリケーションを実行しようとする場合は, アプリケーションをOpenVMS Alpha システム上で構築(コンパイルおよびリンク) しなければなりません。アプリケーションをOpenVMS VAXシステム上のDECwindows Motif バージョン1.2の共有可能イメージに対して構築して, そのイメージ・ファイルをOpenVMS Alphaシステムに複写し,さらに(DECmigrate を使用して)変換しても,バージョン1.2の変換イメージを得ることはできません。

OpenVMS Alphaシステム上にアプリケーションを構築できず,DECmigrate を使用して変換イメージを得なければならない場合は,そのアプリケーションを日本語OpenVMS VAX DECwindows Motif バージョン1.1製品で提供されているOSF/Motif リリース1.1.3のプログラミング環境に対して構築するようにします( 日本語OpenVMS VAX DECwindows Motifバージョン1.2にアップグレードする際には,OSF/Motif リリース1.1.3のプログラミング環境を保管するオプションがあることに注意してください) 。OSF/Motifリリース1.1.3 のプログラミング環境に対して構築されたVAXイメージは,OpenVMS Alphaシステムへ複写および変換して,実行することが可能です。

変換イメージ・サポートはDECwindows Motifのインストレーションの過程で,インストールすることができます。 方法については『DECwindows Motif V1.2-4 for OpenVMS Installation Guide』を参照してください。

変換イメージとともに使用されるOSF/Motif リリース1.1.3の共有可能イメージは, ネイティブ・イメージに使用される共有可能イメージとは異なっており, 互換性もありません。このためイメージには次の制約があります。

変換イメージのサポートについての詳細は,『DECmigrate for OpenVMS AXP System Translating Images』を参照してください。

3.10.2 DECwindows Motifツールキットの機能(Alphaのみ)

V1.1

OpenVMS Alphaシステムでは,DECwindows Motifツールキットの機能に次のような使用上の制約があります。DECwindows Motif 製品では,Cモジュールは,最大の性能を引き出すためにC コンパイラの省略時の設定であるMEMBER_ALIGNMENTスイッチを使用してコンパイルされます。 コンパイル時にNOMEMBER_ALIGNMENT スイッチを使用しないでください。

Cで作成したツールキット・アプリケーションを移植する場合は,『OpenVMS Alpha AXP Version 1.0 Release Notes』のVAX Cランタイム・ライブラリ(RTL)関連リリース・ ノートを参照してください。

3.11 DECW$INCLUDE:INTRINSIC.Hファイル使用上の問題

V1.2-5

DECwindowsのヘッダ・ファイルDECW$INCLUDE:INTRINSIC.Hは, /STANDARD=VAXCコンパイラ・スイッチが指定されているときでも,DEC C コンパイラ使用時にglobalrefマクロをexternとして再定義します。これは, ユーザ・アプリケーションに広範な影響を与える可能性があります。

INTRINSIC.Hにこの再定義が要求されるのは,ユーザの作成したアプリケーションがDECwindows 共有イメージにあるデータを参照するとき,必ず共有イメージのコンパイル時に使用したものと同じ外部モデルを使用するように,DECwindows 側で保証する必要があるためです。

この問題を解決するため,アプリケーションでは変数にglobalrefとglobaldef を使用しないで,次のプリプロセッサ命令を使用してください。

     #pragma extern_model strict_refdef

この解決策には,厳密にANSIに適合するという利点があります。このpragma 命令は,『OpenVMSシステム用DEC Cユーザーズ・ガイド』の「プリプロセッサ命令」の章に説明されています。

3.12 Cで作成したアプリケーションのコンパイル

V1.0

VAX Cレイヤード製品のインストレーション・プロシージャでは,VAX C定義ファ ファイル)を抽出するか,または.hファイルをテキスト・ライブラリに残しておくかのいずれかを選択することができます。 定義ファイルを抽出すると, 次のフォーマットの#include制御行を使用することができます。

     #include <filename.h>

DECwindowsヘッダ・ファイルは,.hファイルが抽出されていることを前提としています。 ヘッダ・ファイルには,組み込まれたファイルの#include <module_name.h>記述が含まれています。また,DECwindowsプログラミング関連マニュアルでも同じことを前提としています。

このため,VAX Cをインストールするには,ライブラリ・モジュール抽出を選ぶ必要があります。

すでにVAX Cをインストールしていて,.hファイルを抽出しなかった場合は,DECwindows サンプルCプログラムは動作しません。この問題に対処するには,VAX C を再度インストールして.hファイルを抽出してください。

DEC Cでは,DECC$TEXT_LIBRARYの論理名を次のように定義すれば,ヘッダ・ ファイルをテキスト・ライブラリから抽出する必要はありません。

     $ DEFINE DECC$TEXT_LIBRARY SYS$LIBRARY:DECC$RTLDEF.TLB

3.13 Fortranで作成したアプリケーションのコンパイル(Alpha のみ)

V1.1

OpenVMS Alphaシステムで,DECW$MOTIF.FORファイルなどのDECwindows MotifアプリケーションをFortranで作成するために使用するインクルード・ ファイルには,使用するコンパイラ・スイッチに応じてメモリ・レイアウトを変化させる構造体定義が含まれています。

次の処置のいずれかを行うことができます。

3.14 CDAアプリケーション

この節では,CDAアプリケーションに関するプログラミング情報を説明します。

3.14.1 CDAのドラッグ・ドロップ機能の実現

V1.2

ウィジェットとウィジェットの間で情報の移動と複写ができるドラッグ・ ドロップ機能が,表 3-4に記載された各ウィジェットで実現されています。

表 3-4 ドラッグ・ドロップをサポートするウィジェット

ウィジェット ドラッグ操作 ドロップ操作
XmText 複写と移動 複写と移動
XmTextField 複写と移動 複写と移動
XmLabel 複写
XmPushButton 複写
XmToggleButton 複写
XmList 複写

アプリケーションにドラッグ・ドロップの追加機能を組み込む方法,およびドラッグ・ ドロップ・プログラムの例については,『OSF/Motifプログラマーズ・ ガイド,リリース1.2』を参照してください。

3.14.2 CDAランタイム・サービスの新しい機能

V1.2

この節では,本バージョンのCDAランタイム・サービスの新機能について説明します。 新しいユーザ機能については第1 章を参照してください。

3.14.2.1 バージョン番号

V1.2-4

日本語DECwindows Motif for OpenVMSソフトウェアには,CDAバージョン1.8 製品で提供されなかった問題の解決が含まれています。

CDAバージョン1.6は日本語DECwindows Motifバージョン1.1 for OpenVMS リリースの一部です。日本語DECwindows Motifバージョン1.2 for OpenVMSリリース以降,DECwindows MotifはCDAバージョン1.8のCDAランタイム・ サービス・コンポーネントを提供しています。日本語DECwindows Motifバージョン1.2-4 for OpenVMSリリースの時点では,DECwindows Motiはバージョン1.8Aを含んでいます。

3.14.2.2 CDAのプログラミング・インタフェースの変更

V1.2

この節では,本バージョンのCDAランタイム・サービスのプログラミング・ インタフェースの変更について説明します。

本バージョンでは,ポータブルな命名規則を使用して,CDAの定数,タイプ, ルーチン名を定義する一連の新しいヘッダ・ファイルを提供しています。 これらの新しい命名規則の使用によって,より多種のCコンパイラの使用が可能となり,CDA アプリケーションでのシステム特有のコードの量を最小限にすることができます。

これらの新しい一連のヘッダ・ファイルの名前は,ドル記号($)が除かれた以外は, 以前のヘッダ・ファイルの名前と同じです。たとえば, cda$msg.h組み込みファイルは,現在ではcdamsg.hとなっています。この他にも, たとえばDDIF$K_DSC_MAJOR_VERSIONシンボルは,現在ではDDIF_K_DSC_MAJOR_VERSION と宣言され,またCDA$_NORMAL状態値は現在では,CDA_NORMAL と定義されます。

以前のヘッダ・ファイルもこのバージョンに含まれていますが,これらのファイルは更新されないことになっています。DECwindows Motif バージョン1.1 のリリース以降に導入された変更(たとえば,オーディオ・サポート用の新しい定義) は,新しいヘッダ・ファイルでのみ利用できます。新しいCDA 機能を使用するには,ソース・コードのファイル名を変更してください。

新しいヘッダ・ファイルは,古いヘッダ・ファイルを補うものです。CDA 定義やCDAツールキット呼び出しを使用してANSI準拠のアプリケーションを作成する場合, 新しい組み込みファイルを使用してください。ただし非ANSI コンパイル・モードを選択する場合は,シンボルを定義しているドル記号が入ったヘッダ・ ファイルを引き続き使用することもできます。

旧ヘッダ・ファイルを使用して,旧命名規則を使用する既存ソース・コードを構築することにも問題はありません。

表 3-5は新しいヘッダ・ファイル名の一覧です。

表 3-5 新しいヘッダ・ファイル名

以前の名前 新しい名前
cda$def.h cdadef.h
cda$msg.h cdamsg.h
ddif$def.h ddifdef.h
dtif$def.h dtifdef.h
cda$ptp.h cdaptp.h
cda$typ.h cdatyp.h
dvr$msg.h dvrmsg.h
dvr$cc_def.h dvrccdef.h
dvr$cc_ptp.h dvrccptp.h
dvr$decw_def.h dvrwdef.h
dvr$decw_ptp.h dvrwptp.h

3.14.2.3 外部参照処理の変更

V1.2

CDAランタイム・サービスは,外部参照ファイル指定に対して相対ファイル指定をサポートしています。 相対参照もサポートされています。相対参照とは, 完全なディレクトリ・パスを指定するものではなく,親ドキュメントに対する相対ディレクトリ・ パスのことです。

3.14.2.4 スタイル・ガイドのフォールバックの新しいメッセージ

V1.2

ローカルのスタイル・ガイドが見つからない場合は,次のメッセージが表示されます。

STYGDEFBK Fallback to nonlocale-specific style guide: file- spec

レベル: 通知

説明: ロケール特有のスタイル・ ガイドが発見できなかったため,ロケール特有ではないバージョンのスタイル・ ガイドが代わりに使用されました。

3.14.2.5 CONVERTコマンドでの論理名の使用

V1.2

ドキュメント変換中に,論理名を使用して1次ドキュメントのディレクトリを指定し, ドキュメント・ファイルの拡張子を省略すると,相対ファイル指定を含む外部参照が変換の失敗の原因となります。

これは,フロントエンド・コンバータが入力ファイルをオープンするにもかかわらず, バックエンド・コンバータがコンバータ処理オプションを調べるために発生します。 コンバータ・ソフトウェアは,フロントエンド・ コンバータが適用する省略時のファイル拡張子を予測できないため, OpenVMSファイル・サービスを使用して論理名を分解し,実際のファイル指定を発見する必要があります。 こうすれば,ディレクトリのオペランド解析ができ, 相対指定で拡張することができます。

変換が失敗するのは,外部参照が次のようなフォーマットになっている場合だけです。

     sys$login:mydoc

この場合参照は分解されません。次の例のように,これ以外の場合は,参照はすべて分解されます。

     sys$login:mydoc.doc
     disk$:[smith]mydoc
     disk$:[smith]mydoc.doc

3.14.2.6 共有可能イメージの構造変更

V1.2

DECwindowsをインストールしていないシステムへのインストレーションを可能とするために,CDA ビューアの構造が変更され,2つの新しい共有可能イメージが導入されています。

DECwindows Motif Version 1.2 for OpenVMSソフトウェアでは,Xサービスを利用する共有可能イメージの名称が変更されました。 各種バージョンのCDAの共有可能イメージの一覧が 表 3-6に掲載されています。

表 3-6 共有可能イメージ名

CDAバージョン イメージ名 説明
V1.6 CDA$ACCESS CDAランタイム・サービスの共有可能イメージ
DDIF$VIEWSHR 呼び出し可能なビューア・ ウィジェット
V1.7 CDA$ACCESS TBS
DDIF$VIEWSHR DDIF$DECW_VIEWSHR DDIF$CC_VIEWSHR DDIF$DECW_VIEWSHRウィジェットは, 呼び出し可能なビューア・ウィジェットで,LIB$FIND_IMAGE_SYMBOL ルーチンを使用して,DDIF$DECW_VIEWSHR (DECwindowsインタフェース) およびDDIF$CC_VIEWSHR (文字セル・インタフェース)ウィジェットを呼び出します。
V1.8 CDA$ACCESS CDAランタイム・サービスの共有可能イメージ
DDIF$VIEWSHR12 DDIF$VIEWSHR12ウィジェットは,呼び出し可能なビューア・ ウィジェットで,LIB$FIND_IMAGE_SYMBOLを使用して,DDIF$DECW_ VIEWSHR12 (DECwindowsインタフェース)およびDDIF$CC_VIEWSHR(文字セル・ インタフェース)ウィジェットを呼び出します。

LIB$FIND_IMAGE_SYMBOLルーチンを使用して,DDIF$DECW_VIEWSHR, DDIF$DECW_VIEWSHR12,DDIF$CC_VIEWSHRの各イメージへのエントリ・ ポイントを参照することにより,アプリケーションが与えられた環境で実行できるかどうかを動的に決定することができます。DDIF$VIEW.EXE アプリケーションがこれを行うようになりました。

以前のDDIF$VIEWSHR.EXE共有可能イメージが,それに対してリンクされるアプリケーションとの互換性を保つために依然含まれています。 ただし新しいアプリケーションでは( また以前のアプリケーションで新しい機能を利用するものは) 新しい共有可能イメージを使用してください。

3.15 漢字端末エミュレータのプログラミング

この節では,漢字端末エミュレータのプログラミングに関する情報を説明します。

3.15.1 ページ移動エスケープ・シーケンス

V1.2

漢字端末エミュレータでは,次のページ移動用エスケープ・シーケンスを実行することができます。

         NP          Next Page (次ページへ)
         PP          Previous Page (前ページへ)
         PPA         Page Position Absolute (ページ位置絶対)
         PPB         Page Position Backward (ページ位置逆方向)
         PPR         Page Position Relative (ページ位置相対)

"Pn"は移動するページ数ですが,PPAの場合は実際のページ番号であることに注意してください。


注意
漢字端末エミュレータではカーソル・ カップリングをサポートしていません。カーソルは常に現在のページ( 表示ページ)に拘束されます。

3.15.2 DECCRAシーケンス

V1.2

漢字端末エミュレータでは,DECCRA (Copy Rectangular Area -方形領域複写) シーケンスに対するサポートには制限があります。一度に複写できるのはページ全体だけで, 複写下のページも複写先のべーじも現在のページでなければなりません( たとえば,画面外のページを別のページに複写することはできません) 。

3.15.3 DECLFKCシーケンス

V1.2

漢字端末エミュレータにはF5 (Break)キーを再定義するためのユーザ・ インタフェース機能がありません。したがって,変更するキーを選択するために"0" (all keys) が使用されると,DECLFKC (Local Function Key Control -ローカル・ファンクション・キー制御)シーケンスがF5キーを再定義します。

3.15.4 ReGIS入力カーソル

V1.2-3

漢字端末エミュレータは,十字,ラバーバンド線,菱形,ラバーバンド矩形という入力カーソルをサポートしています。 これらのカーソルを選択するには,S(C(In)) コマンドを使用します。表 3-7nの値を示しています。

表 3-7 ReGIS入力カーソルの形と値

カーソルの形 変数n
十字線 省略
十字線(省略時の設定) 0
菱形 1
十字線 2
ラバーバンド線 3
ラバーバンド矩形 4


注意
nが1に等しい場合の菱形以外のものについては,SYS$LIBRARY:DECW$CURSOR.H ファイル内に定義されている数値の1 つとして論理名DECW$DECTERM_REGIS_CURSORを定義してください。

3.16 DECwindows OSF/Motifツールキット

この節では,DECwindows OSF/Motifツールキットの注意,制限,チューニングなどに関する事項を説明します。

3.16.1 Motifテキスト・ウィジェットの変換

V1.0

仮想バインディングを実現するには,弊社が省略時のXmTextおよびXmTextField の変換マネージャ構文を変更する必要がありました。特に, 次の設定が削除されています。

     Shift ~Ctrl ~Meta ~Alt <Key>osfDelete:   cut-clipboard()

osfCut仮想keysymがバインドされていない仮想バインディングを使用すると, 省略時の設定で,cut-clipboard動作のキー・シーケンスはバインドされません。 この制約に対処するには,DECW$XDEFAULTS.DATファイルでXmText およびXmTextFieldのトランスレーションをオーバーライドしてください。

3.16.2 上位互換性

V1.0

DECW$DWTLIBSHR,DECW$DWTSHR,DECW$XTSHRの各共有可能イメージの組み合わせは, 以前のDECW$DWTLIBSHR共有可能イメージとの,バイナリで上位互換性があるようになっています。 例外と考えられるのは,LIB$ FIND_ IMAGE_SYMBOLを使用してイメージDECW$DWTLIBSHRを動的に起動するアプリケーションです。 動的なイメージの起動の問題は,固有のセマンティクスがX ツールキット・イントリンシック・リリース3から,MIT X11リリース4 になるときに大幅に変わっていることです。以前リンクされたXUIアプリケーションは,X ツールキット・リリース3の固有のセマンティクスを使用するXUI 転送ベクトルのエントリを通じて呼び出しを行います。ただし, そのアプリケーションが再リンクされる(または動的にDECW$DWTLIBSHRを起動する) とすぐに,MIT Xツールキット・イントリンシック・リリース4 固有のセマンティクスを使用します。

動的にDECW$DWTLIBSHRを起動するアプリケーションは,DECW$DWTLIBSHRに対して直接にリンクするように変更する必要があります。DECW$DWTLIBSHR は現在は小型薄層の共有可能イメージとなり,必要なときだけツールキットの大部分のコードを自動的に動的に起動します。 このためアプリケーションがDECW$DWTLIBSHR を動的に起動し続けることはありません。

今後弊社では,ツールキット共有可能イメージを動的に起動するアプリケーションに対するバイナリで上位互換性を保証できません。DECwindows ツールキット(XUI とMotif)は,弊社の管轄外の基準に基づいています。この基準に互換性のない変更が行われた場合は, 弊社はそれに従うようツールキットを変更します。 ただし,現在の実行可能イメージが変わらずに実行されるようにコードを追加していく意向です。

3.16.2.1 MotifウィジェットとXUIウィジェットの混合に関する制約

V1.0

MotifウィジェットとXUIのウィジェットの混合には制限があります。問題の原因は,XUI とMotifの両方がそれぞれ独自のVendor Shellウィジェット・ クラスを持っていることにあります。アプリケーションがMotifではなくXUI に対してリンクされると,XUI Vendor Shellウィジェット・クラスが,DECwindows XUI との互換性を保つために使用されます。アプリケーションがMotif に対してリンクされたときは,Motif Vendor Shellウィジェット・ クラス使用されます。MotifウィジェットはMotif Vendor Shell を必要とし,XUIウィジェットはMotif Vendor Shellとの互換性があります。 問題が発生するのは,XUI専用アプリケーションがMotifを使用する共有可能イメージを(LIB$FIND_IMAGE_SYMBOL を使用して)動的に起動したときです。 ツールキットが初期化されたときに,動的に起動された共有可能イメージでMotif ウィジェットが動かない場合は,ツールキットはXUI Vendor Shellを使用するよう決定します。

この問題に対処するには,アプリケーション・イメージ名をDECW$USE_XM_ VENDOR_SHELL論理名に加える方法があります。この論理名には,ツールキットがMotif Vendor Shell を使用するイメージ名を,コンマで区切って並べてあります。DECW$USE_XM_VENDOR_SHELL 論理名の値は省略時の設定でNOTES$MAIN となっています。さらにイメージ名をこの論理名に追加するには, 次のコマンドを入力します。

     $ DEFINE DECW$USE_XM_VENDOR_SHELL "NOTES$MAIN,-
     _$ yourimage1,yourimage2,..."

Motifを使用するアプリケーションは,すでにMotif Vendor Shellを使用しているため,DECW$USE_XM_VENDOR_SHELL の影響は受けないことに注意してください。

3.16.3 Motifヘッダ・ファイルでのコンパイル時の非互換性

V1.2-3

OSF/Motifプログラミング・サポートでMotifヘッダ・ファイルからマクロ定義がいくつか削除されています。 この変更は次のヘッダ・ファイルに影響します。

3.17 OSF/Motifのプログラム例

この節では,DECwindows Motif Version 1.2 for OpenVMSソフトウェアに含まれているOSF (Open Softoware Foundation)のプログラム例について説明します。

3.17.1 Cutpasteのプログラム例

V1.2

この例では,Motifのクリップボードの使用法が示されています。アプリケーションによって定義されたデータ・ フォーマットは,XmClipboard APIを使用してカット・アンド・ペーストを行うことができます。

2つのcutpasteのクライアント・プログラムを実行して,グラフの値をプルダウン・ メニューとポップアップ・メニューを使用して移動してください。

3.17.2 DNDDemoプログラム例

V1.2

この例では,ドラッグ・ドロップ機能の典型的な使用法が示されています。

このプログラム例の起動時には,有効なドロップ先はありません。色をドラッグして移動するためのドラッグ元を示す異なったカラーの四角形がまず表示されます。 ドロップ先は,次のようにして決めます。

描画領域の内側に作成された四角が色の有効なドロップ先です。たとえば黄色の四角からドラッグを開始して, 描画領域の内側にある四角な囲みケイの一つまでドラッグしていき, そこでMB2を放すことで,これを確認することができます。

ドラッグを開始するには,ポインタをドラッグ元の上に移動し, BTransferを押したままマウスを移動します(BTransferは省略時の設定ではMB2 になります)。カーソルがドラッグ元の四角の色と同じ色のパレットの形に変わったことを確認してください。

ドラッグ中には,次の点に注目してください。

ドロップを行うにはMB2を放します。描画領域内の四角な囲みケイの外側やルート・ ウィンドウ上でMB2を放すと,ドラッグ・アイコンは一瞬ドラッグ開始のためのポインタに変わってから, 消えます。これによって実行しようとしたドロップが失敗したことが分かります。 ポインタが描画領域内のいずれかの四角な囲みケイの内側にあるときに,MB2 を放すと,ドラッグ・ アイコンは背景に吸い込まれるように消えます。これによってドロップが成功したことが分かります。 ドロップが実行された四角な囲みケイの中は, ドラッグされた色で塗りつぶされます。

描画領域内の四角な囲みケイの中は,ドラッグ元として使用することができます。 ポインタをいずれかの四角な囲みケイの中からドラッグを開始すると, カーソルが四角形に変わります(四角形の大きさはXカーソルのサイズ制限内で, 囲みと同じ大きさか,より小さいものになります)。四角形のカーソルをドラッグして, 描画領域内の別の場所にドロップしてください。 このようにして元の四角形を新しい場所に移動することができます。

四角形を新しい場所に複写する場合は,ドラッグ中またはドロップを行うときに, 適切な変更キーを使用します(現在のところは,Ctrlキーが複写への変更キーとして設定されています) 。四角形を変更キーを押さないでドラッグした場合, またはShiftキーを押した場合には,ドラッグを開始した塗りつぶされた四角形は, 点線の囲みケイに変わります。この状態は, ドラッグを行っている間中,またはCtrlキーを押して複写モードに変更するまで継続します。Ctrl キーが押されると点線の囲みケイは,元の四角形に戻ります。


注意
ドラッグ中に取消キー(F11)を押すと, ドラッグを中止することができます。また,Helpキーを押せば, ドロップの成否や可能なドロップ操作についての情報が表示されます。

3.17.3 Dogsプログラム例

V1.1

このプログラム例では,DogウィジェットおよびSquareウィジェットを使用します。 これはユーザ定義機能を使用して新しいウィジェットをUILソースに組み込む方法を説明します。

Dogsプログラム例によって,DogNwagTimeおよびSquareNmakeSquareリソースを動的に変更できるようになります。

サウンド発生機能を持ったシステムをお持ちの場合は,吠えるコールバックをXBell() 以外のものにすることもできます。

3.17.3.1 dogウィジェット

V1.1

dogウィジェット(DogWidget)は,将来のバージョンのMotifとのバイナリ互換性を保つ基本ウィジェットをサブクラスに分ける方法を示すデモです。 これは,mResolvePartOffsets()および対応するマクロを使用して, XmResolvePartOffsetsマニュアル・ページにある勧告をすべて実行します。

dogウィジェットは,XmPrimitiveのサブクラスで,吠えたり尾を振ったりできます。 もっと面白いしかけが欲しいときは,サブクラスに分けるか, またはup.bm,down.bm,bark.bmをより高度なビットマップに置き換えてください。

dogウィジェットには,次のリソースがあります。

dogウィジェットには次のような変換があります。

3.17.3.2 squareウィジェット

V1.1

squareウィジェット(SquareWidget)は,将来のバージョンのMotifとのバイナリ互換性を保つ制約ウィジェットをサブクラスに分ける方法を示すデモです。 これは,XmResolveAllPartOffsets()および対応するマクロを使用して,XmResolveAllPartOffsets マニュアル・ページにある勧告をすべて実行します。

squareウィジェットはXmBulletinBoardのサブクラスで,制約リソースを使用して強制的に子をsquare( 正方形)にします。

squareウィジェットにはSquareNmajorDimensionというリソースがあります。 このリソースは,子の新しいサイズに使用する寸法を決定します。値は,SquareWIDTH またはSquareHEIGHTです。

squareウィジェットにはSquareNmakeSquareという制約リソースがあります。 このリソースは,子を強制的に正方形にするか,好きな形に設定するか決定します。

3.17.4 Hellointプログラム例

V1.2

このプログラム例は,1つのラベルと1つの押しボタンとから成る簡単なUIL/Xm プログラムです。

本バージョンでは,実行時にkanji(日本語),hebrew(ヘブライ語), french(フランス語),english (英語)のインタフェースを選択することができます。

このプログラムでは,言語特有のインタフェースについてはすべてLOCALSTRINGS.UID ファイルを使用します。言語を変更するには,LOCALSTRINGS_*.UID の各ファイルをDECW$USER_ DEFAULTS:LOCALSTRINGS.UIDに複写します。続いて,DECW$USER_LANG あるいはxnlLanguageリソースを使用してロケールを設定します。 LOCALSTRINGS接頭辞およびロケール名には次のもののいずれかを設定してください。

ロケール インタフェース・タイプ
Japan 漢字
Hebrew ヘブライ語
French フランス語
English 標準英語

xnlLanguageリソースを定義するには,DECW$XDEFAULTS.DATファイルに次の行を追加してください。

     *xnlLanguage:locale

hellointプログラム例には次のフォントが必要です。

Locale Font Name
French -adobe-helvetica-medium-r- normal-12-120-75-75-p-67-iso8859-1
English -adobe-times-medium-r-normal-14-100- 100-100-p-74-iso8859-1
Hebrew -Misc-Fixed-Medium-R-Normal-13-120-75-75-C-80-ISO8859- 8
Japan -*- JISX0208.1983-1
-*- JISX0201.1976-0

上記のフォントがシステムにインストールされていない場合は,他のフォントを参照するようにUIL ファイルを変更するか,DECW$EXAMPLES ディレクトリに入っている*.DECW$BDFフォントをインストールしてください。 新しいフォントをインストールする方法については,『日本語DECwindows Motif for OpenVMS環境設定の手引き』を参照してください。

3.17.5 Hellomotifプログラム例

V1.2

このプログラム例は,1つのラベルと1つの押しボタンとから成る簡単なUIL/Xm プログラムです。

3.17.6 Motifanimプログラム例

V1.1

Motifanimプログラムは,OSF/Motifの次の機能を示すプログラム例です。

Motifanimでは,Xウィンドウでピクスマップを動画表示できます。ピクスマップは,motifanim によって固定されるのではなく,起動時に既存のUID ファイルから読み込まれます。

すべてのanimation.uidファイルの構文は,motifanimを使用して動画表示するピクスマップを簡単に追加することができます。 動画データ・ファイルのいくつかのツリーの例には次のようなものがあります。

dog.uil
plane.uil

省略時の動画はdogです。他の動画のデモを実行するには次のコマンドを使用してください。

     $ SET DEFAULT DECW$EXAMPLES
     $ motifanim := "$DECW$EXAMPLES:motifanim"
     $ motifanim -anim plane

motiflogo.uil,motifanim.uil,motifanim.cの各ファイルは,プログラムの中核となる構成要素です。

3.17.7 MOTIFGIFおよびPICT表示プログラム

V1.2

次の.gifファイルが提供されています。

V1.1

motifgifおよびpictはともに作動して,.gifフォーマットされた絵を表示するプログラムです。motifgif プログラムはMotif構造内で.gifファイルを表示します。motifgif プログラムは現在のディレクトリで.gifファイルを探します。

motifgifには次の3つの重要な構成要素があります。

motifgifには次のような問題があります。

3.17.8 Motifshellプログラム例

V1.2

motifshellプログラムは,Motifを使用して作成された環境を示す一例です。 プログラム例の目的は,Motifをスタンドアロンの環境で使用する場合, どのように他のプログラムやユーティリティをタスク指名するかを示すことです。

motifshellプログラムはCコードで書かれています。UILは参照しません。


注意
ファイルの一覧や処理状態を表示するのは, 多少時間がかかります。これらの操作は,SPAWNによりDCL コマンドを起動し,出力をファイルに保管してから,そのファイルを読むことで行われます。

省略時のフォントはプロポーショナル・スペースが使用されています。一覧表の中には, クーリエのような固定スペースを使ったほうが読みやすい場合もあります。 別のフォントを選択するには,フォント・オプションを使用します。


3.17.9 Periodicプログラム例

V1.2

periodicプログラムには,Motifの表示可能なウィジェットの例が示されています。 このプログラムによりMotifのウィジェットを周期チャート形式で表示します。

3.17.10 Texteditプログラム例

V1.2

texteditプログラムは,XmNsourceリソース・ファイルを使用するMotif XmTextウィジェットに基づく,基本的なテキスト・エディタで,重なっている同一テキストを複数表示することができます。

表 3-8の表で,使用可能な表示メニューのオプションを説明します。

表 3-8 表示メニューのオプション

オプション 説明
Split Pane テキストの独立したスクロールが可能な新しい表示画面を追加します。
Remove Pane 指定画面を消去します。
One Pane 指定画面以外の画面をすべて消去します。

指定画面は次のようにして決定します。

編集メニューでペーストを選択した場合に,クリップボードの内容のペーストが行われるのも指定画面です。

texteditのソース・ファイルは独立した層として別れています。textedit に含まれるソース・ファイルは表 3-9に一覧が掲載されています。

表 3-9 Texteditソース・ファイル

ファイル名 説明
tfile.c ファイルの読み込み,書き込み,削除のためのコード。 オペレーティング・システムまたはファイル・システムに対する依存を隠します。
app.c tfile.cを使用してファイル操作およびこれに関連するバッファのためのあらゆるコードを提供します。 このファイルはツールキットに依存します。
tk.c Xmツールキットへの依存を切り離します。

このファイルの前半では,ユーティリティのルーチンおよびツールキットから独立した( しかし特定のアプリケーションに限定された)インタフェースを提供します。 このインタフェースは,アプリケーションのツールキットに依存しないダイアログ層を使用することができます。

ファイルの後半では,すべてのコールバック・ルーチンを定義しています。 コールバック・ルーチンの多くは,この層内部の状態更新に使われ, 残りが追加動作を行います。これらの動作は,ファイルの前半で定義された特定のツールキットの動作ルーチンとの間に明白に関連しています。 明白ではない場合,行うべき動作を決定するために,ツールキットに依存しないダイアログ・ 層に対してアップコールが行われます。

dlg.c ユーザとの対話を管理するためにtk.c を使用します。このコードはツールキットに依存しません。
textedit.c アプリケーションを初期化し, ウィジェットの階層の実例を示します。このコードによりUIL およびMrmの使用を他のアプリケーションから隠します。


注意
ファイルの移動と削除の手段は, 現在のところ用意されていません。

3.17.10.1 追加のトランスレーション

V1.2

次のトランスレーションをDECW$XDEFAULTS.DATファイルに追加しておくと,emacs を使い慣れたユーザには便利です。

     *XmText.translations:     Mod1<Btn3Down>: scroll-cursor-vertically()\n\
       Mod1<Btn3Motion>: scroll-cursor-vertically()\n\
      Ctrl<key>a: beginning-of-line()\n\
      Ctrl<key>b: backward-character()\n\
      Ctrl<key>d: delete-next-character()\n\
      Ctrl<key>e: end-of-line()\n\
      Ctrl<key>f: forward-character()\n\
      Ctrl<key>g: beep()\n\
      Ctrl<key>h: delete-previous-character()\n\
      Ctrl<key>i: cut-primary()\n\
      Ctrl<key>j: newline-and-indent()\n\
      Ctrl<key>k: set-anchor() end-of-line() key-select() cut-clipboard()\n\
      Ctrl<key>l: redraw-display()\n\
      Ctrl<key>m: newline()\n\
      Ctrl<key>n: next-line()\n\
      Ctrl<key>o: newline-and-backup()\n\
      Ctrl<key>p: previous-line()\n\
      Ctrl<key>v: next-page()\n\
      Ctrl<key>w: cut-clipboard()\n\
      Ctrl<key>y: paste-clipboard()\n\
      Ctrl<key>z: scroll-one-line-up()\n\
      Mod1<key>b: backward-word()\n\
      Mod1<key>d: delete-next-word()\n\
      Mod1<key>f: forward-word()\n\
      Mod1<key>h: delete-previous-word()\n\
      Mod1<key>i: copy-primary()\n\
      Mod1<key>k: delete-to-end-of-line()\n\
      Mod1<key>v: previous-page()\n\
      Mod1<key>w: copy-clipboard()\n\
      Mod1<key>z: scroll-one-line-down()\n\
      Mod1 Shift<key>greater: end-of-file()\n\
      Mod1<key>less: beginning-of-file()\n\
      Mod1<key>]: forward-paragraph()\n\
      Mod1<key>[: backward-paragraph()

3.17.11 Viewプログラム例

V1.2

viewプログラムは,Motifの国際化サポートを使用したDCLコマンドのTYPE/PAGE と似ています。このプログラムによって,ファイルを数カ国語で表示することができます。

用意されているコマンド・ファイルDECW$EXAMPLES:FILEVIEW.COMを使用して, 各国の言語を選ぶことができます。有効な言語は,フランス語,英語, およびドイツ語です。言語を選択するには,次のコマンドを実行してください。

     $ SET DEFAULT DECW$USER_DEFAULTS
     $ @DECW$EXAMPLES:FILEVIEW language

このコマンド・ファイルでは,.UIDおよび.DATの各ファイルを現在のディレクトリに複写するとともに, 適切なロケールを設定し,ファイル表示のためのview プログラム例を実行します。

アプリケーションが起動されると,1次の最上位のシェルが作成されます。1 次の最上位のシェルから,2次シェルを作成することができます。

各最上位のシェルはメイン・ウィンドウの親に当たります。メイン・ウインドウの作業領域がPanedWindow です。

メニュー・バーには,次のエントリがあります。

ファイル・メニュー

ファイル・メニューには次のオプションが含まれています。

表示メニュー

表示メニューには,次のオプションが含まれています。

1つのウィンドウ内でもう1つ別のファイルを開こうとすると,アプリケーションは突然終了します。 この場合,表示メニューは正常に作動しません。

3.17.12 Xmpianoプログラム例

V1.2

xmpianoプログラムはMIDI (Motif Interface to Dumb Instruments)アプリケーションの書き込み方法を示します。 譜表は,楽譜を書くためにも, キーボードのためにも使用することができます。

ウィンドウの下部には,譜表上で使用するための音符のセットがあります。 音符ボタンの1つを選択すると,それに従って使用される音符が変わります。 選択した音符は,マウスのカーソルとして表示されます。

選択できる音符の種類は制限されたものですが,自然音階のほかに,シャープも選択可能です。 プログラムのインタフェースは,フラットの音階をサポートしていません。 譜表は,音符が書き加えられて右端を超えると自動的に延長されます。 右端を超えたところにある音符は,必要に応じて楽譜のウィンドウをスクロールすることで表示できます。

このアプリケーションを使用するには,表示された譜表の上でマウスの右ボタンを押します。 これによって次のメニュー項目が表示されます。

本バージョンでは,音符を操作して編曲することはできません。編曲するには, 譜表を消去して再度入力するか,保管ファイルからデータを読み込みます。

音符の色を設定するには,アプリケーションの前景色を変更します。このためにはコマンド・ ラインで-fgオプションを使用します。次の例を参照してください。

     $ xmpiano :== $DECW$EXAMPLES:xmpiano
     $ xmpiano -fg blue

3.17.13 Motifサンプル・プログラム

V1.2

表 3-10の表には,Motifツールキットのさまざまな機能の一覧が掲載されています。

表 3-10 Motifサンプル・プログラム

ファイル名 説明
xmdialogs.c ダイアログ・サンプラ
xmfonts.c フォント検索用
xmeditor.c テキスト・エディタ
xmlist.c 例の一覧表示用
xmprotocol.c ウィンドウ・ マネージャ・プロトコルの例
xmter.c 図形とアニメーションの例
xmform.c フォーム・アタッチメントの例
xmforc.c フォーム・ アタッチメントと行・列の例
xmmap.c 描画領域とスクロールされたウィンドウの例
xmgetres.c リソース取り出しの例
xmapdef.c appの定義によるスクロールされたウィンドウの例

これらのサンプル・プログラムには,次の項目が適用されます。

  1. xmfontsプログラムは,省略時の設定では字数が10文字以下のフォント名だけを表示します。 システムによっては,フォント・パスには長いXLFD フォント名しか含まれていないものもあります。したがって,XMFONTS*maxLen のリソースをより大きな数字(80)に設定するか,numColumns のリソースを1に指定する必要があります。

  2. xmterプログラムをMotifウィンドウ・マネージャ以外のウィンドウ・ マネージャで実行する場合,そのウィンドウ・マネージャは( たとえばマットのような)ウィンドウの装飾をすべて削除する必要があります。xmter プログラムからMotifウィンドウ・マネージャに対して, ウインドウの装飾を削除するように指示が出されます。

  3. xmformプログラムでは,Formに組み込まれたMotifウィジェットで構成された文字列を表示できます。 このためには次のコマンドを使用してください。
         $ xmform :== $DECW$EXAMPLES:xmform
         $ xmform string
    

    stringの変数はオプションです。stringを指定する場合に使用できる文字は,F,I,M,O,T です。使用する文字列は必ず大文字で, 引用符(" ")で囲まなければなりません。 stringが省略された場合,xmformは"MOTIF"に戻ります。

  4. xmgetresプログラムは,XmGetSecondaryResourceDataの使用法を示す例です。xmgetres を起動するには次のコマンドを使用します。
         $ xmgetres :== $DECW$EXAMPLES:xmgetres
         $ xmgetres WidgetClass
    

    WidgetClassの変数はオプションです。 WidgetClassが省略された場合,"Widget"という省略時のクラスに戻ります。"All" のクラスも使用できます。この設定ではXt とMotifのすべてのウィジェットに対するリソースが表示されます。

3.17.14 Xmtravelプログラム例

V1.2

xmtravelプログラムは,旅行代理店関係やフライト・データベース向けのプログラム例です。 このプログラムによって,『OSF/Motifスタイル・ガイドリリース1.2 』に準拠した様々なユーザ・インタフェースの設計概念を知ることができます。

このプログラムはほんの一例に過ぎず,装備されていない機能も多く,使用を目的とした定義済設定も行われていません。

3.17.15 プログラム例のリソース・ファイル

V1.2

プログラム例の多くには,それらの表示属性を定義する関連リソース・ ファイルがあります。これらのリソース・ファイルを使用するには,DECW$EXAMPLES ディレクトリからユーザのDECW$USER_DEFAULTS ディレクトリに複写を行うか,あるいはファイルの内容をユーザのDECW$XDEFAULTS.DAT ファイルに追加します。

プログラム例ファイルおよびその関連リソース・ファイルの一覧を次の表に示します。

プログラム例 リソース・ファイル
DECW$CDPLAYER.EXE DECW$CDPLAYER.DAT
FILEVIEW.EXE FILEVIEW.DAT
PERIODIC.EXE PERIODIC.DAT
MOTIFANM.EXE MOTIFANIM.DAT
XMAPDEF.EXE XMDEMOS.DAT
XMDIALOGS.EXE XMDEMOS.DAT
XMEDITOR.EXE XMDEMOS.DAT
XMFONTS.EXE XMDEMOS.DAT
XMFORC.EXE XMDEMOS.DAT
XMFORM.EXE XMDEMOS.DAT
XMGETRES.EXE XMDEMOS.DAT
XMLIST.EXE XMDEMOS.DAT
XMMAP.EXE XMDEMOS.DAT
XMPROTOCOL.EXE XMDEMOS.DAT
XMTER.EXE XMDEMOS.DAT
XMTRAVEL.EXE XMTRAVEL.DAT

リソース・ファイルが見つからない場合には,プログラム例は実行されますが, 正しく表示されないこともあります。

3.17.16 プログラム例用UIDファイル

V1.2

プログラム例が使用するUIDファイルは,現在のディレクトリまたはユーザのDECW$USER_DEFAULTS ディレクトリに入れておかなければなりません。 UIDファイルが見つからない場合,アプリケーションは正常に起動することができません。UID ファイルはDECW$EXAMPLESディレクトリから複写することができます。

3.18 Motifに対するDECwindowsの拡張

この節では,DECによるMotifツールキットの拡張に関する情報を説明します。

3.18.1 DXmCSText入力方式のサポート

V1.2

X11 R5の入力方式サポートがDXmCSTextウィジェットに追加されました。 ベンダ・シェルのXmNinputMethodリソース・ファイルを使用して, 入力方式を指定します。しかしながら,旧バージョンとの互換性を維持するために, 既存の入力方式のリソースDXmNinputMethodおよびDXmNinputMethodType も残されています。

3.18.2 横のライブ・スクロールをサポートしていないSVN

V1.0

横のライブ・スクロールは,SVN(Structured Visual Navigation)ウィジェットではまだサポートされていません。

3.18.3 SVN水平分離ライン

V1.1

OpenWindowsバージョン2を実行しているSunシステムでSVNウィジェットを使用するアプリケーションを表示すると,OpenWindows サーバの問題によりSVN ウィジェットの水平分離ラインが表示されないことがあります。 OpenWindowsバージョン3ではこの問題はありません。

3.18.4 DXmFormSpaceButtonsEquallyの制限

V1.1

ウィジェットやガジェットがXmLabelまたはXmLabelGadgetのいずれかのサブクラスを持っている場合は,DXmFormSpaceButtonsEqually( 便宜ルーチン) がすべて平等にそのサイズとスペースを決定します。しかし,ウィジェットやカジェットがXmLabel またはXmLabelGadgetのサブクラスではない場合は, 結果は不確定です。

3.19 ディスプレイ・サーバの拡張

この節ではディスプレイ・サーバの拡張に関する情報を説明します。

3.19.1 Xイメージ拡張

V1.1

Xイメージ拡張(XIE)により,Xクライアント・サーバ・モデルのサーバ側のリソースを使用してのイメージ表示処理を行うことができます。XIE により, イメージ・データをクライアントからサーバに繰り返し転送する必要がなくなり, またデータを圧縮した形で転送できるため,ネットワークの負荷を軽減します。

日本語DECwindows Motif for OpenVMSバージョン1.1には,XIEのクライアント側共有可能ライブラリ(XIE$SHRLIB.EXE) ,およびC言語ヘッダ・ファイルが含まれています。 これにより,アプリケーションはXIE拡張をサポートするすべてのX11 サーバと交信することができます。

XIEプログラムはXIEImageという構造を使用して,クライアント側でイメージ・ データを表現します。この一般的なメカニズムは,表示先サーバが処理できないデータを表現します。 どのデータ・タイプやサイズがサポートされているかに関してはサーバ関連のマニュアルを参照してください。 マニュアルで別の制限が指定されていないかぎり,サーバは符号なしのバイト(UdpK_DTypeBU) ,位置未調整ビット・フィールド(UdpK_DTypeVU), 位置調整済ビット・フィールド(UdpK_DTypeV)データを,各構成要素につきピクセル当り8 ビットの最大深度で処理できます。XIEクライアント・ ライブラリは,これらのデータ・タイプとともに,符号なしのワード(UdpK_DTypeWU) ,そして各構成要素についてピクセル当り最大16ビットの深度もサポートしています。

XIEプロトコルおよびプログラミング・インタフェースは,現在X Consortium内で標準化が進められており,XIEを使用するプログラムはおそらく変更が必要となるでしょう。DECimage Application Services for VMSのIDS (Image Display Services)構成要素を,XIEライブラリ・インタフェースの代わりに使用することもできます。IDS では,よりレベルの高いモデルのイメージ表示が用意されており,XIE が利用できかつそれが適切であれば自動的にXIE を使用します。

XIEについては,『DECimage Application Services for VMS X Image Extension Programmer's Reference Manual』に記載されています。

3.19.2 クライアント側拡張ライブラリ

V1.1

バージョン1.1以降,Xlibはクライアント側ライブラリを追加しました。 これにより,VMSクライアントは,Shape,XInput,Multibuffer,共有メモリの各拡張要求を, このような機能を提供しているサーバに対して発行することができます( たとえば,日本語OpenVMS VAX DECwindows X11 ディスプレイ・サーバは,Shape拡張をサポートしていませんが,日本語OpenVMS AXP ではサポートしています)。このライブラリの名前は, DECW$XEXTLIBSHR.EXEです。

Shape,XInput,Multibuffer,共有メモリのいずれかの拡張要求を行うクライアント・ アプリケーション用に,SYS$LIBRARY:DECW$XEXTLIBSHR.EXE のXlib拡張共有可能イメージとリンクできるよう,リンク・ファイルのオプションを変更しなければなりません。 リンク・オプション・ファイルに次の行を追加してください。

     SYS$LIBRARY:DECW$XEXTLIBSHR/SHARE

Shape,XInput,Multibufferの拡張についての詳細は,SYS$HELPにある下記のテキスト・ ファイルを参照してください。

DECW$SHAPE.TXT
DECW$XINPUT.TXT
DECW$MULTIBUFFER.TXT

3.19.3 共有メモリ拡張サポート(Alphaのみ)

V1.2

OpenVMS Alphaシステムでは,共有メモリ拡張サポートで,メモリ上のXImage を共有することが可能になります。XImageインタフェースのこのバージョンでは, 実際のイメージデータは共有メモリ・セグメントに保管されます。 この結果,イメージはXlibのプロセス間通信チャネルを移動する必要がなくなります。 大きなイメージでは,この拡張の使用により動作性能を格段に向上させることが可能です。

pixmapに対する共有メモリのサポートも提供されています。共有メモリ上のpixmap は,共有メモリ・セグメント内のXサーバ指定のフォーマットによる2 次元のピクセル配列で,イメージ・データはここに保管されます。 共有メモリ上のpixmapの使用によって,これらのpixmapの内容をXlibのルーチンを使用することなく変更することができます。

Xlibのルーチンは,クライアント側の拡張ライブラリに含まれています。 このライブラリとのリンクについての詳細は,第3.19.2項を参照してください。

3.19.3.1 共有メモリの拡張の使用法

共有メモリ拡張を使用するコードには,次のヘッダ・ファイルが含まれていなければなりません。

     # include "DECW$INCLUDE:Xlib.h"
     # include "DECW$INCLUDE:shm.h"
     # include "DECW$INCLUDE:XShm.h"

共有メモリ拡張を使用するコードはすべて,まず最初にそのサーバが拡張を提供しているか確認します。 ネットワーク間で実行する場合など,ときには正常に拡張できないこともあります。

共有メモリ拡張が使用可能かどうかを確認するには,次のルーチンのいずれかを呼び出します。

     Status XShmQueryExtension (display)
            Display *display
     Status XShmQueryVersion (display, major, minor, pixmaps)
            Display *display;
            int *major, *minor;
            Bool *pixmaps

次の一覧表はそれぞれの引数およびその説明です。

引数 説明
display 現在のディスプレイ。

共有メモリ拡張が使用できる場合,各関数からの戻り値はTrueです。 それ以外の場合は,そのプログラムは通常のXlibの呼び出しを使用して実行します。

major 拡張実施の主なバージョン番号。XShmQueryVersionによって返されます。
minor 拡張実施の低位のバージョン番号。XShmQueryVersion によって返されます。
pixmap 共有メモリ上のpixmap の場合は,Trueです。

3.19.3.2 共有メモリ上のXImageの使用

共有メモリ上のXImageの作成法とその使用法の手順を次に説明します。

  1. 共有メモリ上にXImage構造体を作成します。

  2. イメージ・データを保管する共有メモリ・セグメントを作成します。

  3. 共有メモリ・セグメントを接続します。

  4. サーバに対して共有メモリ・セグメントについて通知します。

  5. 共有メモリ上のXImageを使用します。

以降の節では,この操作について順を追って説明します。

ステップ1 -共有メモリ上でのXImage構造体の作成

共有メモリ上にXImageを作成するには,次のフォーマットを持つXShmCreateImage ルーチンを使用します。

     XImage *XShmCreateImage (display, visual, depth, format, data,
                 shminfo, width, height)
            Display *display;
            Visual *visual;
            unsigned int depth, width, height;
            int format;
            char *data;
            XShmSegmentInfo *shminfo;

引数の多くはXCreateImageの場合と同じです( XCreateImageに関する説明は『X Window System 』を参照してください) 。これらの数値はサーバによって設定され,ユーザ側のコードはこれに従う必要があります。 すでに割り当てられた共有メモリ・セグメントがある場合( ステップ2を参照)を除いて,dataポインタにはNULL を引き渡します。

引数shminfoはXShmSegmentInfoタイプの構造に対するポインタです。 この構造体は,共有メモリXImage使用中はアロケートされている必要があります。 この構造体はXShmCreateImageを呼び出す前に初期設定をする必要はありません。

正常に終了した場合は,XImage構造体が返されて,次のステップに進むことができます。

ステップ2 -共有メモリ・セグメントの作成

XImageはどの程度のメモリを割り当てるべきか指示する情報を返します。 したがって,共有メモリ・セグメントの作成は,XImageを作成した後で行います。

このセグメントの作成方法は,次の例で示します。

     shminfo.shmid = shmget (IPC_PRIVATE,
             image->bytes_per_line * image->height, IPC_CREAT|0777);

この例は,共有メモリ上のXImage構造体が作成されていることを前提としています。 戻り値が0の場合は共有メモリの割り当てが失敗したことを表します。XImage の作成に使用したwidthではなく,bytes_per_ lineフィールドを使用してください(これらの値は異なる場合もあります) 。

システムが返す共有メモリIDは,shminfo構造体に保管されることに注意してください。 サーバが共有メモリ・セグメントに接続するには,このID を必要とします。

ステップ3 -共有メモリ・セグメントの接続

次の例に示すようにして,共有メモリ・セグメントをプロセスに接続します。

     shminfo.shmaddr = image->data = shmat (shminfo.shmid, 0, 0);

shmatが返したアドレスは,XImage構造体とshminfo構造体の両方に保管されます。

共有メモリ・セグメントに対するサーバの接続形態を決め, shminfo.readOnlyフィールドを次のように設定して,shminfo 構造体に対する引数の設定が完了します。

     shminfo.readOnly = False;

構造体をTrueに設定すると,サーバはこのセグメントを読むことができず,XShmGetImage の呼び出しは失敗します。


注意
DECwindows Motifでは,共有メモリ・ セグメントのルーチンを提供しています。グローバル・セクションを使用したこれらのルーチンは,UNIX システムの共有メモリのルーチンをエミュレートします。

Step 4 -サーバへの共有メモリ・セグメントについての通知

次の例に示すように,作成した共有メモリ・セグメントに接続することをサーバに通知します。

     Status XShmAttach (display, shminfo);

正常に終了した場合は0以外の状態値が返されて,作成したXImageが使用可能となります。

Step 5 -共有メモリ上のXImageの使用

共有メモリ上のXImageをX drawableに書き込むには,XShmPutImageルーチンを使用します。XShmPutImage ルーチンは次のフォーマットを使用します。

     XShmPutImage (display, d, gc, image, src_x, src_y,
                          dest_x, dest_y, width, height, send_event)
            Display *display;
            Drawable d;
            GC gc;
            XImage *image;
            int src_x, src_y, dest_x, dest_y;
            unsigned int width, height;
            Bool send_event;

このインタフェースは,send_eventというパラメータが追加されていること以外は,XPutImage ルーチン(『X Window System』を参照)と同じです。send_eventパラメータがTrue として渡されると,サーバはイメージ書き込みが完了した時点で, 完了イベントを生成します。これによってプログラムは,共有メモリ・ セグメントの操作を再開しても安全となるタイミングを知ることができます。

この完了イベントのタイプは,次のように定義されるXShmCompletionEvent です。

          typedef struct {
              inttype;              /* of event */
              unsigned long serial; /* # of last request processed */
              Bool send_event;      /* true if came from a SendEvent request */
              Display *display;     /* Display the event was read from */
              Drawable drawable;    /* drawable of request */
              int major_code;       /* ShmReqCode */
              int minor_code;       /* X_ShmPutImage */
              ShmSeg shmseg;        /* the ShmSeg used in the request */
              unsigned long offset; /* the offset into ShmSeg used */
          } XShmCompletionEvent;

実行時にイベント・タイプの値を調べるには,次の例で示すXShmGetEventBase ルーチンを使用します。

          int CompletionType = XShmGetEventBase (display) + ShmCompletion;

注意
完了イベントの到着前に共有メモリ・ セグメントを変更すると,結果が一定しない場合があります。

イメージ・データを共有メモリ上のXImageに読み込むには,XShmGetImage ルーチンを使用します。このルーチンには次のフォーマットが使用されています。

     Status XShmGetImage (display, d, image, x, y, plane_mask)
            Display *display;
            Drawable d;
            XImage *image;
            int x, y;
            unsigned long plane_mask;

引数の一覧とその説明を次の表にまとめます。

引数 説明
display interestの表示。
d drawableのソース。
image XImageのリンク先。
x drawableのソース内のX- offset。
y drawableのソース内のY-offset。
plane_mask 読み込まれるプレーン。

共有メモリ上のXImageを破壊するには,最初に共有メモリを切り離すことをサーバに指示した後で, 共有メモリ・セグメントそのものを破壊します。 次の例が,共有メモリ上のXImageを破壊する方法です。

     XShmDetach (display, shminfo);
     XDestroyImage (image);
     shmdt (shminfo.shmaddr);
     shmctl (shminfo.shmid, IPC_RMID, 0);

3.19.3.3 共有メモリ上のpixmapの使用法

どんなイメージ・フォーマットでも使用可能なX imageとは異なり,共有メモリ拡張がサポートしている, 共有メモリ上のpixmap (XYPixmapまたはZPixmap) の保管データには,1つのフォーマットしかありません。このフォーマットはイメージの深度および画面から独立しています(1 bit のpixmap にはフォーマットは関係しません)。

共有メモリ上のpixmapのフォーマットは,XShmPixmapFormatルーチンによりサーバに返されます。XShmPixmapFormat ルーチンは,次のようなフォーマットです。

     int XShmPixmapFormat (display)
            Display *display;

アプリケーションが使用できる共有メモリ上のpixmapは, XShmPixmapFormatルーチンが返すフォーマット(ピクセル当たりビット数を含む) でのみ使用することができます。共有メモリ上のpixmapは, 次のように作成します。

3.19.4 拡張includeファイルの使用法

V1.2

拡張includeファイルを含むプログラムを正しくコンパイルするためには,C include ディレクトリ検索リストにDECW$INCLUDEの論理名を追加してください。

この論理名を追加するには,VAX Cでは次のコマンドを入力します。

     $ DEFINE C$INCLUDE DECW$INCLUDE

この論理名を追加するには,DEC Cでは次のコマンドを入力します。

     $ DEFINE DECC$USER_INCLUDE DECW$INCLUDE

3.20 国際化対応の拡張

V1.2-3

ユーザがアジア言語文字を格納するファイルを表示,変換することができるように, 国際化対応サポートが追加されています。

以降の節では,CDAビューア・アプリケーションの国際化対応サポートについて次の情報を提供します。

3.20.1 CDAビューアによるアジア言語文字の表示

V1.2-3

CDAビューアを使用してアジア文字を格納するファイルを表示するには2つの方法があります。

CDAビューアの使用法についての詳細は,『DECwindows Motif for OpenVMSアプリケーション・ガイド』を参照してください。

3.20.1.1 オプション・ファイルの指定

V1.2-3

オプション・ファイルを指定するには,次の形式で1行のエントリをファイルに挿入します。

     TEXT TEXT_ENCODING text_encoding_value

表 3-11に,言語,コードセット, テキスト・ エンコード値を示します。

表 3-11 オプション・ファイル用のアジア言語コード

言語 コードセット テキスト・ エンコーディング
日本語 DEC Kanji DEC_KANJI
日本語 Super DEC Kanji SDECKANJI
中国語(旧字) DEC Hanyu DEC_HANYU
中国語(簡略字) DEC Hanzi DEC_HANZI
韓国語 DEC Korean DEC_HANGUL

次の表は,1行エントリの例です。

オプション・ファイル 1行エントリ
HANYU.CDA$OPTIONS TEXT TEXT_ENCODING DEC_HANYU
HANZI.CDA$OPTIONS TEXT TEXT_ENCODING DEC_HANZI
HANGUL.CDA$OPTIONS TEXT TEXT_ENCODING DEC_HANGUL

DEC Kanjiの日本語テキストの入ったEXAMPLES_CUSTOMERS.TXTファイルを表示するには, エディタを使用してKANJI.CDA$OPTIONSという名前のオプション・ ファイルを作成します。次の1行エントリをファイルに追加します。

     TEXT TEXT_ENCODING DEC_KANJI

CDAビューアを使用して[オプション・ファイル]ダイアログ・ボックス経由でファイルにアクセスすると,DEC Kanji コードセット(日本語)でEXAMPLES_CUSTOMERS.TXT ファイルを表示することができます。

3.20.1.2 論理名の定義

V1.2-3

アジア言語のファイルを表示できるようにするもう1つのオプションとして, 次の2つの論理名を定義して,テキスト・ファイルとエンコーディング値を指定する方法があります。

表 3-12に,論理名と対応するエンコーディング値を示します。

表 3-12 テキスト・エンコーディング指定用の論理名

DDIF$READ_TEXT_GL DDIF$READ_TEXT_ GR エンコーディング値
LATIN1 MCS MCS
LATIN1 LATIN1 ISO Latin-1
LATIN1 KATAKANA ASCII-Kana
LATIN1 KANJI DEC Kanji
ROMAN MCS Roman-MCS
ROMAN LATIN1 Roman
ROMAN KANJI Roman-Kanji
ROMAN KATAKANA Roman-Kana
LATIN1 HANZI DEC Hanzi
LATIN1 HANGUL DEC Hangul
LATIN1 HANYU DEC Hanyu

DCLコマンド・ラインまたはLOGIN.COMファイルで論理名を定義することができます。 次に例を示します。

     $ DEFINE DDIF$READ_TEXT_GL LATIN1
     $ DEFINE DDIF$READ_TEXT_GR KANJI

この例は,DEC Kanji用のテキスト・エンコーディングを定義します(表 3-12 を参照してください)。

3.20.2 アジア言語文字格納ファイルの変換

V1.2-3

オプション・ファイルを指定するか,第3.20.1.1 項第3.20.1.2項で説明した論理名DDIF$READ_TEXT_GL とDDIF$READ_TEXT_GRを定義して,アジア言語テキスト・ ファイルを別の形式に変換することができます。

TEXTから別形式へドキュメントを変換するときの変換形式は次のとおりです。

     $ CONVERT/DOCUMENT/OPTION=language.CDA$OPTIONS filename.TXT/FORMAT=TEXT -
     _$ filename.output_extension/FORMAT=output_format

たとえば,中国語(旧字)テキスト・ファイルをDDIFファイルに変換するときは, 次のコマンド・ラインを入力します。

     $ CONVERT/DOCUMENT/OPTION=HANYU.CDA$OPTIONS -
     _$ GUIDELINES_PERSONNEL.TXT/FORMAT=TEXT  GUIDELINES_PERSONNEL.DDIF

DDIFが省略時の値であるため,このコマンド・ラインには,/FORMAT=DDIF 修飾子が含まれていません。

出力ファイル,GUIDELINES_PERSONNEL.DDIFに言語データが格納されます。

DDIF,DTIF,またはテキスト(ASCII)ファイルからアジア言語PostScript ファイルを作成することもできます。たとえば,DDIFファイルをPostScript(.PS) ファイルに変換するには,次のコマンドを入力します。

     $ CONVERT/DOCUMENT filename.DDIF filename.PS/FORMAT=PS

注意
言語データの入ったDDIFおよびDTIF ファイルのみを,アジア言語PostScript形式に変換するようにしてください。

アジア言語PostScriptファイルをPostScriptプリンタで出力するときは, プリンタ側で必要な言語フォントを使用できることを確認してください。 使用できなければ,省略時の設定で基本フォント・セットが使用されます。 基本フォント・セットが存在しない場合,PostScriptファイルではCourier フォントが省略時のフォントになります。表 3-13 に,言語と基本フォントの対応を示します。

表 3-13 言語と基本フォントの対応

言語 基本フォント
Japanese Ryumin-Light-EUC-HあるいはRyumin-Light-Hankaku
Hanyu Sung-Light-CNS11643,Sung-Light-DTSCS
Hangul Munjo
Hanzi XiSong-GB2312-80


注意
CDAコンバータでは縦書きはサポートされていません。 縦書きテキストもすべて横書きに表示されます。

3.21 XNLライブラリの問題

この節では,XNLライブラリについて説明します。

3.21.1 xnl_parsedatetime

V1.2-5

xnl_parsedatetime (およびそのVAXバインディング,XNL$PARSE_DATE_ TIME)は,入力の引数XmString s (構文解析される日付時刻)に2桁または4 桁の年数を受け付けます。2桁形式での有効な年数の値は70〜99の範囲で,1970 〜1999年を意味します。値00〜69は無効です。2000年以降は4桁形式が必須です。

3.21.2 xnl_langinfo

V1.2-5

xnl_langinfo (およびそのVAXバインディング,XNL$LANGINFO)は,item引数にD_FMT またはD_T_FMTを指定すると,日付時刻フォーマッティング用の文字列を返します。 下記のロケールで,この関数は%yを含むフォーマッティング文字列を返します。%y は2桁年数形式を意味するので,このフォーマッティング文字列は2000 年以降は慎重に使用する必要があります。

3.22 Xlibの問題

この節では,Xlibに関する情報を説明します。

3.22.1 コマンド・プロシージャが.PENファイルを作成

V1.0

PascalプログラムがXlib用とMotif用の環境ファイルを利用できるように,SYS$LIBRARY:DECW$PEN_BUILD.COM コマンド・プロシージャを実行する必要があります。 このコマンド・プロシージャは,DECW $XLIBDEF.PENファイルとDECW$MOTIF.PEN ファイルを生成します。Pascalプログラムへのコンパイルには, 提供されている.PASファイルよりも.PENファイルの方が高速となります。

3.22.2 パラメータ/プロトコルのデータ・サイズの不適合

V1.0

いくつかのXlibルーチンはロングワードのパラメータを受け付けますが, Xプロトコル・メッセージにはその全体は送出されません。それぞれの場合で,Xlib ルーチンは,パラメータ値の最下位16ビットのみを送出します。 これは,Xプロトコル・メッセージ内のフィールド・サイズにより受ける制約です。 表 3-14は,ルーチン名および16 ビット値としてのみ送出されるロングワードの引数リストです。

表 3-14 ルーチンの引数

ルーチン名 引数
XAllocColorCells/ALLOC_COLOR_CELLS nplanes,npixels
XDrawArc/DRAW_ARC x,y,width,height, angle1,angle2
XDrawLine/DRAW_ LINE x1,x2,x3,x4
XDrawPoint/DRAW_POINT x,y
XDrawRectangle/DRAW_RECTANGLE x,y,width,height
XDrawString/DRAW_ STRING x,y
XDrawString16 /DRAW_STRING16 x,y
XDrawText/DRAW_TEXT x,y
XDrawText16/DRAW_TEXT16 x,y
XFillArc/FILL_ARC x,y,width, height,angle1,angle2
XFillRectangle /FILL_RECTANGLE x,y,width,height

3.22.3 XtAppMainLoopルーチン

V1.2-5

従来,ディスプレイを開いていないで,あるいは(XtAppAddTimeoutまたはXtAppAddInput を呼び出して)プログラムが待機するタイマまたはイベント・ フラグを指定していないでプログラムが(たとえば,XtAppMainLoopを呼び出して) イベント・ループに入ると,Xlibは次のエラー・メッセージを表示してプログラムを終了していました。

             X Toolkit Error: Error in XMultiplexInput

DECwindows Motif V1.2-5 for OpenVMSからは,待機するものがなにもない場合でも,Xlib はエラー状態で終了する代わりに,入力待ちのまま停止します。

このあとXlibがイベントを処理できるようにするには,アプリケーション側でXtAppAddInput を呼び出してイベント・フラグを指定するなど,制御を回復するなんらかの手段を提供する必要があります。

3.22.4 XSelectAsyncEventルーチンとXSelectAsyncInput ルーチン

V1.1

XSelectAsyncEventルーチンとXSelectAsyncInputルーチンは,AST引き渡し情報記憶用メモリを割り当てます。 この記憶は次のいくつかの方法で解除されます。

サブウィンドウ用のAST引き渡し情報は,XDestroyWindowによっては解除されません。

所定のウィンドウ内のすべてのイベント・タイプのAST通知を解除し,AST 引き渡し情報も解除したいときには,クライアント・アプリケーションは, event_mask引数を-1に(全ビット・セット) ,ast_routine引数を0にしてXSelectAsyncEventルーチンあるいはXSelectAsyncInput ルーチンを呼び出してください。

3.22.5 Xlibの国際化

V1.2

X Window System Version 11 Release 5 (X11 R5)では,国際化されたXアプリケーション作成をサポートするためにいくつかのサービスを定義しています。X の国際化は,ロケールのコンセプトに基づいています。ロケールによってプログラム実行時の動作が, 国や地域に対応したものになります。 特定のロケールはXlibの次の機能に影響を与えます。

Xウィンドウ・システムでは,Xでのプログラミングを標準化するために, 一般的方法論とアプリケーション・プログラム・インタフェース(API)を定義していますが, これらの国際化機能を実装するための標準は確立していません。 現行では,X11 R5の配布によって,Xlib国際化サポートの2つのサンプル実装(Xsi とXimp)が提供されています。さらに弊社では,Xi18n という実装を提供しており,これらの中から好みの実装を選択・使用することができます( ただし,XsiはDECwindows Motifでは提供していません) 。これらの実装は,同じAPIと同じ機能を提供しますが,その実装方法が異なっています。

3.22.5.1 VendorPluggable層

V1.2

弊社は,vendorpluggable層と呼ばれる汎用的なメカニズムを用意しています。 これによって特定の国際化実装を選択することができます。異なった実装をスタンドアロン共有可能ライブラリとして構築することができ, DECW$XVENDORLAYER論理名で選択することができます。

この論理名が定義されていない場合,このメカニズムは次の順序で国際化ライブラリを検索します。

DECW$XI18NLIBSHR (Xi18n)
DECW$XSILIBSHR (Xsi)
DECW$XIMPLIBSHR (Ximp)

共有可能ライブラリが見つからない場合,すでにXlibにリンクされているXi18n が省略時の設定となります。

次の関数は,Xlibと国際化共有可能ライブラリとの間のインタフェースとして動作します。

XDefaultString
XwcFreeStringList
XwcTextListToTextProperty
XmbTextListToTextProperty
XwcTextPropertyToTextList
XmbTextPropertyToTextList
_XrmInitParseInfo
_XlcDefaultLoader

XsiあるいはXimp共有可能ライブラリを作成する場合,Xlibで定義されているインタフェース名を知る必要があります。 コンパイル中に次のコンパイル・ フラグを追加することにより,関数の名前を変更することを推奨します。

     /define=(-
         "XDefaultString"="_XDefaultString",-
         "XwcFreeStringList"="_XwcFreeStringList",-
         "XwcTextListToTextProperty"="_XwcTextListToTextProperty",-
         "XmbTextListToTextProperty"="_XmbTextListToTextProperty",-
         "XwcTextPropertyToTextList"="_XwcTextPropertyToTextList",-
         "XmbTextPropertyToTextList"="_XmbTextPropertyToTextList",-
         "_XrmInitParseInfo"="__XrmInitParseInfo",-
         "_XlcDefaultLoader"="__XlcDefaultLoader")

3.22.5.2 弊社のXlib国際化実装

V1.2

弊社固有の実装(Xi18n)は機能拡張され,安定した国際化環境を提供しています。X 配布によるXsiやXimpの環境に比べて次の利点があります。

3.22.5.3 OpenVMSシステムのロケール

V1.2-4

DECwindows Motif for OpenVMSソフトウェアは,ANSI Cライブラリに準拠するロケール環境に依存しています。OpenVMS V6.2 よりも前のバージョンのシステムでは,DEC C ランタイム・ライブラリのロケール・サポートが非常に制限されたものであったため,Xlib は最小限のロケール・サポート環境を提供していました。OpenVMS V6.2 以降のシステムでは,XlibはDEC Cランタイム・ライブラリが提供するロケール環境を使用しています。

DECwindows Motif V1.2-4 for OpenVMSで提供されるロケール・サポートは,DEC C ランタイム・ライブラリでのロケール・サポートとの互換性を持つように修正されました。 この修正により,DECwindows Motif V1.2 for OpenVMSから発生するようになった問題を解決しました。この問題は,OpenVMS V6.2 のリリース・ノートに記述されています。

このロケール環境で,これらの機能を使用して国際化アプリケーションを作成する場合は, 次の手順に従ってください。


[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ]