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

B 技術情報

この付録では,本書の他の章で登場した技術情報を,まとめて示しています。

B.1 システム・サービスの変更点

この節では,以下のシステム・サービスについて説明します。

B.1.1 $SET_PROCESS_PROPERTIESWシステム・サービス(Alpha システムのみ)

$SET_PROCESS_PROPERTIESWシステム・サービスは,プロセスに関連付けられる単純な値を設定します。

形式

   $SET_PROCESS_PROPERTIESW mbz1 ,mbz2 ,mbz3 ,property ,value, prev_
   value

Cプロトタイプ

     int sys$set_process_properties(
             unsigned int mbz1,
             unsigned int mbz2,
             unsigned int mbz3,
             unsigned int property,
             unsigned __int64 value,
             unsigned __int64 *prev_value);

引数


     mbz1,mbz2,mbz3

Compaqで将来使用するために予約されています。0が指定されていなければなりません。


     property
     OpenVMS usage: integer
     type:          longword (unsigned)
     access:        read only
     mechanism:     by value

設定するプロパティを選択する定数。

プロパティの有効な値は,$PPROPDEFマクロによって次のように定義されています。

プロパティ・コード 説明
PPROP$C_PARSE_STYLE_TEMP: 使用するコマンド解析のタイプ。 この値は,イメージの存在期間に限って設定される。 イメージが存在しなくなると,この値は恒久的なスタイルに戻る。 有効な値は,PARSE_STYLE$C_TRADITIONALおよびPARSE_ STYLE$C_EXTENDED。
PPROP$C_PARSE_STYLE_ PERM: 使用するコマンド解析のタイプ。この値は, スタイルが再び設定されない限り,プロセスの存在期間中は有効である。 有効な値は,PARSE_STYLE$C_TRADITIONALおよびPARSE_STYLE$C_ EXTENDED。


     value
     OpenVMS usage: integer
     type:          quadword (unsigned)
     access:        read
     mechanism:     by value

プロパティを設定するためのクォドワード値。


     prev_value
     OpenVMS usage: access_mode
     type:          quadword (unsigned) address of a quadword value
     access:        write
     mechanism:     by reference

プロパティの以前の値を受け取るクォドワードのアドレス。

必要なアクセスまたは特権

なし。

必要な制限値

なし。

関連サービス

$GETJPI

返される条件値

     SS$NORMAL       The service completed successfully.
     SS$ACCVIO       Access violation.

B.1.2 $CVT_FILENAMEシステム・サービス(Alphaシステムのみ)

文字列を,RMS形式からファイル・システム(ACP-QIO)形式に,またはファイル・ システム(ACP-QIO)形式からRMS形式に変換します。

形式

   SYS$CVT_FILENAME cvttyp ,srcstr ,inflags ,outbuf ,outlen ,outflags

Cプロトタイプ

     int sys$cvt_filename (unsigned int cvttyp,
                           void *srcstr,
                           unsigned int inflags,
                           void *outbuf,
                           unsigned short int *outlen,
                           unsigned int *outflags);

引数


     cvttyp
     OpenVMS usage: unsigned_longword
     type:          longword (unsigned)
     access:        read only
     mechanism:     by value

RMS形式からACP-QIO形式への変換を行うのか,またはその逆を行うのかを示すロングワード値。

このパラメータで有効な値は,シンボルCVTFNM$C_ACPQIO_TO_RMSおよびCVTFNM$C_RMS_TO_ACPQIO で表される2つです。これらのシンボルは,$CVTFNMDEF マクロによって定義されます。


     srcstr
     OpenVMS usage: string of bytes or words
     type:          string of bytes or words
     access:        read only
     mechanism:     by 32-bit descriptor--fixed length string descriptor

このサービスによって変換される文字列。

RMS形式からACP-QIO形式への変換を行う場合,srcstrはISO Latin-1文字列またはVTF-7 でエンコードされた文字列です。ACP-QIO形式からRMS形式への変換を行う場合,srcstr はバイト幅またはワード幅の文字から成る文字列です。

記述子長フィールドは,入力文字列がバイト幅とワード幅のどちらであっても, その入力文字列の長さをバイト数で表します。

srcstr引数は,この文字列をポイントする記述子の32ビット・アドレスです。


     inflags
     OpenVMS usage: mask_longword
     type:          longword (unsigned)
     access:        read only
     mechanism:     by value

入力文字列の特性を示すロングワードのフラグ・マスク。

RMS形式からACP-QIO形式に変換する場合,CVTFNM$V_NO_DELIMITERSフラグだけが有効です。

ACP-QIO形式からRMS形式に変換する場合,有効なフラグはCVTFNM$V_WORD_ CHARSおよびCVTFNM$V_NO_DELIMITERS ($CVTFNMDEFマクロによって定義される) です。

フラグ 説明
CVTFNM$V_WORD_CHARS 入力ソース文字列には, ワード幅のUCS-2文字が含まれている(ACPQIO_TO_RMS)。
CVTFNM$V_NO_DELIMITERS 入力ソース文字列は, タイプ区切り文字やバージョン区切り文字としてピリオドやセミコロンが含まれている( または含まれていなければならない)ファイル名として扱うのではなく, 任意の文字列(サブディレクトリなど)として扱わなければならない。


     outbuf
     OpenVMS usage: string of bytes or words
     type:          string of bytes or words
     access:        write only
     mechanism:     by 32-bit descriptor--fixed-length string descriptor

変換された文字列が書き込まれるバッファ。

RMS形式からACP-QIO形式に変換を行う場合,ソース文字列に含まれている文字によっては, 文字列を,バイト幅のISO Latin-1文字またはワード幅のUCS-2 文字から構成することができます(ソース文字列内のいずれかの文字で表現するために1 ワードを必要とする場合には,その出力バッファ内のすべての文字はワード幅になります) 。

ACP-QIO形式からRMS形式に変換を行う場合,出力文字は,RMSの正規表現のISO Latin-1 およびVTF-7文字から構成されています( 『Guide to OpenVMS File Applications』を参照してください)。

ACPQIO_TO_RMS変換の場合,出力文字列がワード幅文字から構成されている場合には,outflags フラグ・マスク内のCVTFNM$V_WORD_CHARSフラグが設定されます。

outbuf引数は,呼び出し元のモードで書き込み可能なバッファをポイントする32 ビット・アドレスです。


     outlen
     OpenVMS usage: word_unsigned
     type:          word (unsigned)
     access:        write only
     mechanism:     by 32-bit reference

outlen引数は,呼び出し元のモードで書き込み可能な(16ビットの)ワードの32 ビット・アドレスです。


     outflags
     OpenVMS usage: mask_longword
     type:          longword (unsigned)
     access:        write only
     mechanism:     by 32-bit reference

出力文字列の特性を示すために,サービスが設定したりクリアするロングワードのフラグ・ マスクです。

RMS_TO_ACPQIO変換で,変換された文字列内の文字が(1バイト幅ではなく) 1 ワード幅の場合,SYS$CVT_FILENAMEは,CVTFNM$V_WORD_CHARS ($CVTFNMDEFマクロによって定義されます)に対応するビットを設定します。 変換された文字列内の文字が1バイト幅の場合,サービスはCVTFNM$V_ WORD_CHARSビットをクリアします。他のすべてのビットは,RMS_TO_ ACPQIO変換によってクリアされます。

outflags引数は,呼び出し元のモードで書き込み可能な32ビットのフラグ・ マスクの32ビット・アドレスです。

説明

このサービスは,ファイル名(1)またはサブディレクトリ名(2)をRMS形式(RMS インタフェース上で表示される)と ACP-QIO形式(ディスク上に保存される) との間で変換することを目的としています。バージョン7.2 以前では,これらの形式の表現は同じでしたが,拡張(ODS-5)ファイル名では, 必ずしも同じとは限りません(ODS-5ファイル指定の詳細については, 『Guide to OpenVMS File Applications』を参照してください)。

  1. ファイル名は,ファイル名,ファイル・タイプ,およびファイル・ バージョンから構成される。

  2. サブディレクトリ名は,後ろに".DIR;1"を追加して,ディスク上の格納するためのディレクトリ・ ファイル名を作成する文字列である。

cvttypの値に応じて,このサービスはRMS形式からACP-QIO形式へ,またはACP-QIO 形式からRMS形式へ,文字列の変換を行います。

ソース文字列はsrcstr引数によって記述され,出力バッファはoutbuf引数によって記述され, 結果の文字列の長さはoutlen引数に書き込まれます。

ソース文字列のいずれかが出力バッファのアドレス範囲と重なる場合,出力文字列は予測不可能な値になります。

RMSからACPQIOへの変換:

srcstr記述子引数によって記述される文字列が,ISO Latin-1またはUCS-2 文字列に変換されます。このとき,個々の文字は,$QIOサービスを経由してACP-QIO に渡すことができる形式で表現されます。

CVTFNM$V_NO_DELIMITERS入力フラグがクリアされている場合,ソース文字列はスキャンされ, 必要に応じて,$PARSEが省略時の名前,タイプ,およびバージョン・ フィールドの指定なしに実行された場合と同じように, ピリオドおよびセミコロンが挿入または追加されます。スキャンによって名前(FID なし),タイプ,またはバージョン以外のフィールドがあることを示す区切り文字を検出した場合, 構文エラーが返されます。

CVTFNM$V_NO_DELIMITERS入力フラグが設定されている場合,個々の文字が評価され, ディスク上の形式に変換されます。ただし,タイプおよびバージョンの区切り文字があるかどうかを判断するためのスキャンは行われず, 区切り文字の追加も行われません。

エスケープ文字のサーカンフレックス(^)が前に付いていないパーセント記号(%) は,疑問符に変換されます。サーカンフレックス(^)が前に付いているISO Latin-1 文字は,対応するISO Latin-1文字に変換されます。サーカンフレックス(^) が前に付いているVTF-7文字(^U1234など)は,UCS-2文字(0x1234 など)に変換されます。

いずれかの文字でUCS-2 (ワード幅の文字)による表現が必要な場合,出力文字列中のすべての文字はUCS-2 で表現されます。どの文字でもワード幅の文字による表現が必要でない場合, 出力文字列中のすべての文字はISO Latin-1 (バイト幅)文字で表現されます。

使用できる文字は,RMSファイル名(ファイル名,ファイル・タイプ,ファイル・ バージョン)またはRMSサブディレクトリ名の中で有効な文字です。 たとえば,ディレクトリ区切り文字"["および"]"は,サーカンフレックス(^) が前に付いている場合を除いて無効です。

ACPQIOからRMSへの変換:

srcstr記述子引数によって記述される文字列が,その文字列のRMS正規表現に変換されます。

CVTFNM$V_NO_DELIMITERS入力フラグがクリアされている場合,ソース文字列には少なくとも1 つのセミコロンが含まれていなければならず,さらにそのセミコロンの左側には少なくとも1 つのピリオドが含まれていなければなりません。 このようになっていない場合,RMS$_SYN (構文エラー)が返されます。 出力文字列では,これらの2つの場合を除くすべてのピリオドおよびセミコロンの前には,RMS のエスケープ文字(^)が付きます。

CVTFNM$V_NO_DELIMITERS入力フラグが設定されている場合,出力文字列内のすべてのピリオドまたはセミコロンの前には,RMS のエスケープ文字(^) が付きます。

inflags引数のCVTFNM$V_WORD_CHARSフラグは,入力文字列にバイト幅(ISO Latin-1)文字またはワード幅(UCS-2)文字のどちらが含まれているように解釈するかを示します。 この引数によってワード幅が含まれていることが示されているにもかかわらず入力の長さの値が奇数になっている場合には, 構文エラーが返されます。

疑問符はパーセント記号に変換され,パーセント記号の前にはサーカンフレックス(^) が付きます。UCS-2文字は,VTF-7文字に変換されます。すべての文字は,RMS 正規表現で表現されます。

必要なアクセスまたは特権

なし。

必要な制限値

なし。

関連サービス

なし。

返される条件値

     SS$NORMAL           The service completed successfully.
     SS$_BADPARAM        Unrecognized conversion type, extraneous input
                         flags set, or zero-length input string.
     SS$_INSFARG         Not enough arguments provided.
     SS$_TOO_MANY_ARGS   Too many arguments provided.
     RMS$_SYN            The service could not translate one or more
                         characters in the strings described by the
                         srcstr argument, the input string has word-width
                         characters but odd byte-length (ACPQIO_TO_RMS
                         only), or the CVTFNM$V_NO_DELIMITERS input flag
                         was clear and the input string did not contain
                         both type and version delimiters.
     SS$_BUFFEROVF       The output buffer was not large enough
                         to accommodate the converted string.

B.1.3 $GETJPIシステム・サービス

このシステム・サービスには,以下に示す2つの新しい項目コードがあります。

JPI$_PARSE_STYLE_PERM JPI$_PARSE_STYLE_IMAGE

これらの項目コードにより,$SET_PROCESS_PROPERTIESで設定された値PARSE_STYLE$C_TRADITIONAL またはPARSE_STYLE$C_EXTENDEDが返されます。 戻り値の長さはそれぞれ1バイトです。

B.1.4 $CREPRCシステム・サービス

stsflgパラメータでは新しいフラグを指定することができます。

PRC$M_PARSE_EXPANDED

これにより,EXPANDEDへの新しいプロセスにPARSE_STYLE_PERMプロパティおよびPARSE_STYLE_IMAGE プロパティが設定されます。

B.1.5 $SETDDIRシステム・サービス

このシステム・サービスについては,次の情報が追加されました。

結果の省略時のディレクトリが255バイトを超える場合,Alphaシステムでは,Set Default Directory サービスが省略時のディレクトリ文字列をDID に置き換えようとします。この場合,通常の構文チェックに加えて,その指定に対するパス全体が, デバイスを含めてチェックされます。呼び出しが成功するには, このパスが存在していなければなりません。

B.2 レコード管理サービス(RMS)の変更点

OpenVMSのレコード管理サービス(RMS)は,Extended File Specifications をサポートするように変更されています。この後の項では,構文および意味の変更点と,RMS データ構造の変更点について説明します。

B.2.1 レコード管理サービスの変更点の概要

Extended File Specificationsをサポートするために,レコード管理サービス(RMS) は,既存のインタフェースを使用して以下のような機能を提供するように強化されました。

B.2.1.1 Extended File Specificationのサポート

ODS-5ボリュームでは,RMSが操作できるのは,8ビットまたは16ビットで255 文字までの長さのファイル名およびサブディレクトリ指定です。RMS は,合計で8ビットまたは16ビットで512文字までの長さのパス名を処理できます。

OpenVMS Alphaバージョン7.2以前は,NAMブロック・インタフェースが渡すことのできるファイル指定は, それぞれ(結果のファイル指定の場合も) 最大で255バイトまででした。この後の項では,より長いファイル指定を渡すための変更点と, このリリース以前のNAMブロック・インタフェースを使用したアプリケーションに対して提供する互換性について説明します。

B.2.1.2 追加された文字

ODS-5ボリューム上では,RMSは,任意の数の8ビット文字が含まれている名前を持つファイルおよびディレクトリへのアクセスをサポートしています。 ただし,C0制御セット(16進数で00〜1F)および以下の文字は例外です。


二重引用符(")
アスタリスク(*)
バックスラッシュ(\)
Colon (:)
左山括弧および右山括弧(< >)
スラッシュ(/)
疑問符(?)
縦線(|)

この中には,C1文字セット(16進数の80〜9F)の他,9F〜FFまでのグラフィック文字およびその他の文字も明示的に含まれることに注意してください。 これにより,すべてのISO Latin-1文字セットおよび定義済みのUnicode 文字を使用することができます(すでに示されているとおり7ビット文字は例外です) 。

B.2.1.3 深くネストされたディレクトリのサポート

Alphaシステム上のExtended File Specificationsでは,RMSは最大で255 レベルまでのディレクトリの深いネストをサポートしています。ただし, 合計のディレクトリ指定が8ビットまたは16ビットで512文字を超えてはならないという制約があります。 ディレクトリの深いネストは,ODS-2ディスクでもサポートされています。

B.2.2 構文および意味の変更点

この後の項では,新しいRMSのファイル指定構文および意味の機能について説明します。Extended File Specifications の環境でRMSを使用する方法の詳細については, 『Guide to OpenVMS File Applications』を参照してください。

B.2.2.1 ファイル名の最初の文字としてのハイフンの使用

OpenVMSバージョン7.2以前のRMSドキュメントでは,ハイフン(マイナス記号) で始まるファイル名を作成しないように推奨されていました。

Alphaシステムでは,Extended File SpecificationsによりRMSに変更が追加され, ファイル名またはディレクトリ名のどの位置にもハイフンを使用できるようになりました。 ハイフンが含まれているディレクトリ名があいまいである, つまり,親ディレクトリを参照するように解釈される可能性がある場合, そのハイフンにエスケープ文字のサーカンフレックス(^)を付けてファイルまたはディレクトリを正しく指定しなければなりません。

B.2.2.2 直接受け付けられる文字

ファイル指定の中で(特殊なエスケープ文字なしで) RMSインタフェースから使用できる文字セットは, 次のリストのように拡張されています。 これらの文字の前には,エスケープ文字のサーカンフレックス( ^ )を使用できないことに注意してください。

B.2.2.3 エスケープ文字を必要とする文字


[1]エスケープ文字は,ディレクトリ名の中のピリオドの前には必須ですが, ファイル名の中のピリオドの前には付けても付けなくても構いません。 ただし,ファイル・タイプを区切るピリオドとしては使用できません。 ピリオドは,ファイル・タイプの中で使用できません。

B.2.2.4 エスケープ文字を付けることができる文字

以下の文字の前には,RMSまたはDCLへの入力の際にエスケープ文字(^)を付けることができますが, 必須ではありません。


ドル記号($)
負記号(-)
チルダ(~)[2]
ピリオド(.)[1]


[2]ファイル名またはディレクトリの中で先頭の文字としてチルダを使用する場合, エスケープ文字が必要なことがあります。「◆チルダ(~)をファイル名の最初の文字と して使用しない」を参照してください。

B.2.2.5 予約済みのエスケープ・シーケンス

これまでの項で説明されていない文字が後に続くエスケープ文字から成るシーケンスは, 予約されています。

B.2.2.6 ファイル指定の正規表現

同じ文字を表現する方法が複数存在することがあります。たとえば,^20 ,^,および^_はすべて等価です。RMSがファイル指定を(結果の名前などとして) 出力するときには,以下の規則に従って使用する規則を決定します。

B.2.2.7 DIDによる短縮

拡張ファイル名を使用すると,長いディレクトリのレベルが多すぎたり, 長いファイル名にエスケープ文字が含まれていることが原因で,有効な名前であっても変更されていないRMS アプリケーションやDCLにとっては長すぎて処理できない場合があります。 従来の(またはバージョン7.2以前の) インタフェースを使用しているアプリケーションとの互換性を保つために,RMS がアプリケーションに出力したり,アプリケーションが従来のインタフェースを使用してRMS に入力できる短い名前が生成されます。

ファイル指定の長さが255バイトを超える場合には,RMSはまずDIDによる短縮を使用して名前を作成します。RMS は,ディレクトリをそのディレクトリID (DID) に短縮することによって,適切な短い名前を生成しようとします。 次に例を示します。

             DKA100:[5953,9,0]FOO.TXT;1.

DIDによる短縮の制約

従来の(バージョン7.2以前の)短い出力バッファに納まらないファイル指定を処理するときに,RMS はルートまたはディレクトリのコンポーネントを, そのコンポーネント内の最も下のレベルのサブディレクトリのディレクトリID に置き換えて短縮しようとすることがあります。

RMSがDIDによって短縮されたルートまたはディレクトリのコンポーネントを生成できない場合もあります。 たとえば,最も下のレベルのサブディレクトリにワイルドカードが含まれている場合には,RMS が使用できる特定のディレクトリID はありません(RMSはルートまたはディレクトリのコンポーネントの一部をDID に置き換えることもしません)。

RMSがDIDによって短縮されたルートまたはディレクトリを生成することによって, ファイル指定を適切に短縮できない場合には,次のステップであるFID による短縮に進みます。

B.2.2.8 FIDによる短縮

DIDによる短縮を実行してもまだファイル指定が長すぎる場合,RMSは次に, ファイル名フィールドの中でファイルをそのファイルID (コンマで区切られた10 進数の文字列のシーケンスを大括弧で囲んだもの)に短縮することによって, 適切な短い名前を生成しようとします。

拡張フィールドが通常どおり表示されている場合,スペースに余裕があるかどうかによって, 生成された名前には完全な拡張子が含まれるか,または拡張子が( ピリオド(.)も共に)省略されます。

バージョン番号が通常どおり表示されている場合,FIDによって短縮されたファイル名にはバージョン番号が含まれます。 ファイルを認識しやすくするために,FID による短縮が生成されると,名前フィールドには実際のファイル名の先頭部分のサブセットも含まれます。 このサブセットには, ファイル名の最初の(エスケープ文字も文字として認識される) 38文字と, 後に続くチルダ(~)から構成されます。ファイル名の最初の38文字以降だけが異なるファイルがある場合でも, ファイルの曖昧さは解決されません。

次にFIDによる短縮の例を示します。

             LookAtWhatWeHave^!ThisIsAVery_long^.fi~[7254,30,0].txt;1

FIDおよびDIDによる短縮の制約

FIDによって短縮されたファイル名は,RMSへの入力に使用できますが, RMSへの入力の際に有意義なのはFIDによる短縮だけです。この時に使用するサブセットのファイル名, タイプ・フィールド,およびバージョン番号はすべて, 入力の際には無視されます。

ファイルを作成するときに,FIDをCREATEコマンド(または他のファイル作成コマンドまたはAPI) への入力として使用することはできません。DIDを使用してディレクトリを作成することはできません。 ファイル指定にFID を使用すると,そのファイル指定には最初からデバイスおよびディレクトリが含まれているか, またはRMSで処理される省略時の値からデバイスおよびディレクトリを取得します。 指定されたFIDを持つファイルが既にボリューム上に存在する場合には, 指定されたディレクトリ内に存在していなければなりません。 そうでない場合,RMSはあたかもそのファイルが見つからなかったかのように動作します。

B.2.3 RMSのデータ構造の変更点(Alphaシステムのみ)

この項では,名前(NAM)ブロックの変更点を示します。また,長さが255バイトを超えるファイル指定を指定するために使用する新しい名前(NAML) ブロックについても説明します。

B.2.3.1 NAMブロック

ファイル名ブロック・オプション・フィールドNAM$B_NOPには,以下の新しいフラグがあります。

フラグ 意味
NAM$V_NO_SHORT_UPCASE ユーザによって設定され,NAM$L_ESA バッファにあるディレクトリおよびファイル指定を大文字に変換しないようにRMS に指示する。

ファイル名状態ビット・フィールドNAM$L_FNBには,以下の新しいフラグがあります。

フラグ 意味
NAM$V_DIR_LVLS_G7 ディレクトリ・レベルの数が7 を超えることを示す。このフラグが設定されている場合,NAM$V_ DIR_LVLSは7に設定される。
NAM$V_WILD_ SFDG7 7を超えるレベルにあるサブディレクトリに,ワイルドカード文字が含まれていることを示す。 このフィールド・オフセットは,NAM$V_WILDCARD フィールド・オフセットに要約される。

NAMには,NAM$B_NMC,NAM$W_FIRST_WILD_DIR,およびNAM$W_LONG_DIR_ LEVELSという3つのフィールドがあります。NAM$B_NMCフィールドは,以下のフラグを返します。

フラグ 意味
NAM$V_DID 入力ディレクトリのルートまたはディレクトリ名のコンポーネントの中にDID によって短縮されたディレクトリが見つかると,RMS によって設定される。
NAM$V_FID 入力ファイル指定の中にFIDによって短縮されたファイル名が見つかると,RMS によって設定される。
NAM$V_RES_DID 短い結果または拡張バッファの中にDID によって短縮されたディレクトリがあると,RMSによって設定される。
NAM$V_RES_FID 短い結果または拡張バッファの中にFIDによって短縮された名前があると,RMS によって設定される。
NAM$V_ RES_ESCAPE 短い結果または拡張バッファの中にエスケープ文字(^) があると,RMSによって設定される。
NAM$V_RES_UNICODE 短い結果バッファまたは拡張バッファの中に1 つまたは複数の^Uシーケンスがあると,RMSによって設定される。

B.2.3.2 NAMLブロック

NAMLは,オプションでNAMブロックの代わりに使用できる新しいブロックです。NAML には,NAMのすべてのフィールドの他に,255バイトを超える長さのファイル指定を指定できるようにするための新しいフィールドが含まれています。

以下にNAMLの新しいフィールドを示します。

拡張フィールド名 サイズ
(バイト)
意味
NAML$L_FILESYS_NAME 4 ユーザが指定するファイル・システム名バッファのアドレス。RMS がNAML$V_FILESYS_NAME_UCS2出力フラグを設定すると, 出力ファイル名は2バイト文字になり,ファイル名の中のASCII文字および区切り文字を含むすべての文字が2 バイト文字になる。それ以外の場合は, すべて1バイト文字になる。
NAML$L_ FILESYS_NAME_ALLOC 4 ユーザが指定するファイル・ システム名バッファの割り当てサイズ。
NAML$L_FILESYS_NAME_SIZE 4 RMSによって返されるファイル・システム名の長さ。
NAML$L_LONG_DEFNAME_SIZE 4 入力として指定される省略時のファイル指定文字列の長さ(long)。 FAB$B_DNSと等価(入力のみ)。FAB$L_DNAが-1に設定され,FAB$B_DNSが0 に設定されている場合に限って使用される。
NAML$L_LONG_DEFNAME 4 入力として指定される省略時のファイル指定文字列のアドレス(long) 。FAB$L_DNA と等価(入力のみ)。FAB$L_DNAが-1に設定され,FAB$B_DNSが0に設定されている場合に限って使用される。
NAML$L_ LONG_FILENAME_SIZE 4 ファイル指定文字列のサイズ(long) 。FAB$B_FNSと等価(入力のみ)。FAB$L_FNAが-1 に設定され,FAB$B_FNSが0に設定されている場合に限って使用される。
NAML$L_LONG_FILENAME 4 ファイル指定文字列のアドレス(long)。FAB$L_ FNAと等価(入力のみ)。FAB$L_FNAが-1に設定され,FAB$B_FNSが0に設定されている場合に限って使用される。
NAML$L_LONG_NODE_SIZE 4 ノード名文字列の長さ(long) 。
NAML$L_LONG_ NODE 4 ノード名文字列のアドレス(long) 。
NAML$L_LONG_DEV_SIZE 4 デバイス文字列の長さ(long)。
NAML$L_LONG_DEV 4 デバイス文字列のアドレス(long)。
NAML$L_LONG_DIR_SIZE 4 ディレクトリ文字列の長さ(long) 。
NAML$L_ LONG_DIR 4 ディレクトリ文字列のアドレス(long) 。
NAML$L_LONG_NAME_ SIZE 4 ファイル名文字列の長さ(long) 。
NAML$L_LONG_NAME 4 ファイル名文字列のアドレス(long)。
NAML$L_LONG_TYPE_SIZE 4 ファイル・タイプ文字列の長さ(long)。
NAML$L_LONG_TYPE 4 ファイル・ タイプ文字列のアドレス(long)。
NAML$L_ LONG_VER_SIZE 4 ファイル・バージョン文字列の長さ(long) 。
NAML$L_LONG_ VER 4 ファイル・バージョン文字列のアドレス(long) 。
NAML$L_LONG_EXPAND_ ALLOC 4 拡張文字列領域のサイズ(long) 。拡張バッファのサイズ(long)を指定するために,呼び出し元によって設定される。
NAML$L_LONG_EXPAND_ SIZE 4 拡張文字列の長さ(long)。拡張文字列の長さ(long) を表すために,RMSによって設定される。
NAML$L_LONG_EXPAND 4 拡張文字列領域のアドレス(long)。拡張バッファ(long)をポイントするために, 呼び出し元によって設定される。
NAML$L_LONG_RESULT_ALLOC 4 結果文字列領域のサイズ(long)。結果バッファのサイズ(long)を指定するために, 呼び出し元によって設定される。
NAML$L_LONG_RESULT_SIZE 4 結果文字列の長さ(long)。結果文字列の長さ(long)を表すために,RMS によって設定される。
NAML$L_ LONG RESULT 4 結果文字列領域のアドレス(long) 。結果バッファ(long)をポイントするために,呼び出し元によって設定される。
NAML$L_INPUT_ FLAGS 4 この後の表で定義されているNAML$V_NO_SHORT_OUTPUT など,RMSへの入力として指定されるその他のフラグ。
NAML$L_OUTPUT_FLAGS 4 この後の表で定義されているNAML$V_LONG_RESULT_ ESCAPEおよびNAML$V_FILESYS_NAME_UCS2など,RMSによる出力として渡されるその他の状態ビット。
NAML$Q_USER_ CONTEXT 8 呼び出し元は,このフィールドをどのような目的にでも使用できる。RMS によって読み込まれたり変更されることはない。

RMSは,NAML$L_INPUT_FLAGSフィールドから以下のフラグを読み込みます。

フラグ 意味
NAML$V_NO_SHORT_OUTPUT RMSがNAM$L_ESAまたはNAM$L_RSA バッファに入力を行わないようにするために,ユーザによって設定される。

RMSは,NAML$L_OUTPUT_FLAGSフィールドに以下のフラグを書き込みます。

フラグ 意味
NAML$V_FILESYS_NAME_UCS2 NAML$L_FILESYS_NAME によってポイントされる名前が2バイトのUnicode文字6個から構成されている場合に,RMS によって設定される。
NAML$V_LONG_RESULT_DID longの結果バッファまたは拡張バッファの中にDID によって短縮されたディレクトリがある場合に,RMS によって設定される。
NAML$V_ LONG_RESULT_ESCAPE longの結果バッファまたは拡張バッファの中にエスケープ文字(^) がある場合に,RMSによって設定される。
NAML$V_LONG_RESULT_FID longの結果バッファまたは拡張バッファの中にFIDによって短縮された名前がある場合に,RMS によって設定される。
NAML$V_LONG_RESULT_UNICODE longの結果バッファまたは拡張バッファの中に,1 つまたは複数の^Uシーケンスがある場合に,RMS によって設定される。

B.2.3.2.1 NAMLブロックの有効性の確認

RMSに渡された名前(FAB$L_NAMを参照)にNAML$C_BIDに等しいブロック識別子(NAML$B_BID を参照)が含まれている場合,RMSは以下の有効性チェックを行います。

  1. NAML$B_BLNフィールドがNAML$C_BLNと正確に一致している。

  2. NAML$L_LONG_RESULT_ALLOCおよびNAML$L_LONG_EXPAND_ALLOCの合計が,NAML$C_MAXRSS 以下である。

  3. すべての未使用フィールド(MBZが含まれたシンボリック名を持つ) に0 (ゼロ)が含まれている。フィールドを初期化する前に全体の構造をクリアすると, この条件を満たすことができる。

これらの有効性チェックのうちいずれかが失敗すると,RMS$_NAMLエラー状態が返されます。

B.2.3.2.2 NAMおよびNAMLブロックの使用

NAMLには,すべてのNAMフィールドと等価なフィールドに加えて,より長いファイル指定に対応するために28 個の新しいフィールドが含まれています。NAML フィールドにはFDL属性はありません。

NAMLの新しいフィールドの多くはNAMフィールドに対応していますが, より長い名前を使用できるフィールドです。たとえば,NAML$L_LONG_ EXPAND,NAML$L_LONG_EXPAND_ALLOC,およびNAML$L_LONG_EXPAND_SIZEというフィールドは,NAM$L_ESA ,NAM$B_ESS,およびNAM$B_ESLに対応していますが,255 バイトを超えるより長い名前を使用できます。このような対応関係にあるフィールドがある場合には, 元のフィールドは「短いフィールド」と呼ばれ, 対応するフィールドは「長いフィールド」と呼ばれます。

RMSが,長いバージョンと短いバージョンの両方を持つNAMLのフィールドに情報を書き込むときには,RMS は通常,等しい情報を両方のフィールドに書き込みます。 短いフィールドまたは長いフィールドのいずれか一方が小さすぎて情報を格納できない場合には,RMS はまず短いフィールドに納まるようにファイル指定を短縮しようとしますが, エラーを返します。RMS が短いフィールドに書き込まないように指示するフラグNAML$V_NO_SHORT_OUTPUT を指定すると,短いフィールドでのこのようなエラーの発生を防ぐことができます。 ただし,NAMLを使用している場合には,RMS は常に長いフィールドを使用します。RMSが長いフィールドを使用しないようにするには,NAML ではなくNAMを使用しなければなりません。

RMSが,長いバージョンと短いバージョンの両方を持つNAMLのフィールドから情報を読み込むときには,RMS は通常,長いフィールドから読み込みます。RMS が短いフィールドから読み込むようにするには,NAMLではなくNAM を使用します。RMSがこれらのフィールドから読み込むもっとも一般的なタイミングは,PARSE の後の$SEARCHの実行中で,NAMLの場合はNAML$L_LONG_EXPAND によってポイントされているバッファ,NAMの場合はNAM$L_ESA によってポイントされているバッファからRMSが読み込みを実行するときです。 さらに,NAMまたはNAMLが関連する名前ブロックとして使用されている場合,RMS は,NAMLの場合はNAML$L_LONG_RESULTによってポイントされているバッファ,NAM の場合はNAM$L_RSAによってポイントされているバッファから情報を読み込みます。

RMSがNAMおよびNAMLを処理する方法にはこのような違いがあるため,NAML に接触する可能性のあるコードは,それがNAMではなくNAMLであることを認識できることが重要です。NAM でルーチンが実行する可能性のある処理の中には,NAML では期待どおりに動作しないものがあります。たとえば, あるルーチンがNAMLのコピーを作成する一方でコピーする長さとしてNAM$C_BLN 定数を使用した場合,結果は無効なNAMLになります。また,別のあるルーチンが, 呼び出し元のルーチンに影響を与えることなくNAMを使用できると想定してNAM$L_ESA およびNAM$L_RSAによってポイントされたバッファを置き換えると,NAML$L_LONG_EXPAND およびNAML$L_LONG_RESULT によってポイントされたバッファが失われます。

このため,OpenVMSで提供されるAPIが以前のバージョンのNAMを(直接,またはFAB を使用して間接的に)返していた場合,そのAPIは,呼び出し元による明示的なアクション( 通常はフラグ・ビットを設定すること)がない限り,NAML を返さないという規則に従うことになっています。他のAPIも同じ規則を使用することを推奨します。 さらに,NAMLを認識するアプリケーションがNAML をAPIに渡す場合には,そのAPIがNAMセクションだけを使用する( たとえば,NAML$V_NO_SHORT_OUTPUTビットを設定しない)ように注意しなければなりません。

NAMまたはNAMLのいずれかを受け付けるルーチンを作成している場合には,NAM またはNAMLのどちらがあるのかを判断する必要があります。NAML があり,RMSがNAMLの中に残した情報を読み込む場合には,長いフィールドの情報を参照します。 さらに,NAMブロックまたはNAMLブロックを他の場所にコピーする場合は, 十分注意して構造自体に格納されている長さを使用してコピーできる量を判断しなければなりません。NAM$B_BLN にはその構造の実際の長さが含まれているため,NAM$C_BLN 定数ではなく,実際にコピーしている構造にあるNAM$B_BLN フィールドを使用する必要があります。NAM の長さであるシンボルNAM$C_BLNを使用すると,NAMLの場合には短かすぎます。

B.2.3.2.3 返される条件値

表 B-1は,NAMLブロックを使用するときにそれぞれのRMS サービスに返される条件値を示しています。

表 B-1 NAMLブロックを使用したときに返されるRMS 条件値

RMSサービス 返される条件値
$CREATE RMS$_NAML
RMS$_NAMLESS
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
RMS$_NAMLRSS
$DISPLAY RMS$_NAMLESS
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
$ENTER RMS$_NAML
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
RMS$_NAMLRSS
$ERASE RMS$_ NAML
RMS$_NAMLESS
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
RMS$_NAMLRSS
$OPEN RMS$_ NAML
RMS$_NAMLESS
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
RMS$_NAMLRSS
$PARSE RMS$_ NAML
RMS$_NAMLESS
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
$REMOVE RMS$_NAML
RMS$_NALFSINV
RMS$_NAMLFSSIZ
RMS$_NAMLRSS
$RENAME RMS$_NAML
RMS$_NAMLESS
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
RMS$_NAMLRSS
$SEARCH RMS$_NAML
RMS$_NAMLFSINV
RMS$_NAMLFSSIZ
RMS$_NAMLRSS

B.3 Files-11 XQPの変更点


注意
この項に含まれているファイル・ システムに関する情報は,現在このドキュメントでのみ扱われています。

Files-11 Extended QIO Processor (XQP)ファイル・システムは,$QIOインタフェースを使用して拡張ファイル名をサポートするように強化されました。XQP ファイル形式の規則は,RMSによって提供されているような,ファイル名を受け付ける他のシステム・ サービスに適用される規則とは異なる場合があることに注意してください。RMS で使用される新しい構文およびセマンティックの詳細については, 第B.2.2項を参照してください。

機能強化されたXQPでは,以下のExtended File Specifications機能をサポートしています。

第B.3節のこの後の項では,Files-11 XQP ファイル・ システムおよび$QIOインタフェースに追加された変更点についてより詳しく説明します。

B.3.1 ファイルの命名および形式の変更点

OpenVMSバージョン7.2以前では,Files-11 XQPでサポートされる有効なファイル名は, ファイル名およびファイル・タイプが共に39文字以内で,合計で85 個のASCII文字[2]に制限されていました。拡張ファイル名をサポートするために, このような制約が緩和され,以下の内容がサポートされるようになりました。

これらの変更点は,Files-11 ODS-5形式に初期化または変換されたボリュームに関してのみ適用されます。 現在ODS-2ボリュームで使用されているセマンティックおよび動作に依存しているアプリケーションは, 引き続きこれまでと同様に機能します。


[2]ファイル名の39文字,区切り文字の1文字(.),ファイル・タイプの39 文字,区切り文字の1文字(;),バージョン番号の5文字を合わせて85 文字。

[3]ファイル名の236文字,区切り文字(.),ファイル・タイプ, 区切り文字の1文字(;),バージョン番号の5文字を合わせて242文字。

[4]ファイル名の118文字,区切り文字(.),ファイル・タイプ, 区切り文字の1文字(;),バージョン番号の5文字を合わせて124文字。

B.3.1.1 入力ファイル名の形式の指定

ファイル指定は,QIO P2パラメータを使用し,ディスクリプタによってファイル・ システムに渡されます。ディスクリプタには,ファイル指定のテキストへのポインタと, ファイル指定の長さの合計をバイト単位で表した長さのフィールドが含まれています。

ファイル指定の形式は,新しいFIB$B_NAME_FORMAT_INフィールドで識別することができます。 この形式は,表 B-2で示されている値のいずれかを取ります。

表 B-2 ファイル形式のFIB定数

形式の値 形式のタイプ
FIB$C_ODS2 ODS-2形式
FIB$C_ISO_LATIN ISO Latin-1形式
FIB$C_UCS2 Unicode (UCS-2)形式

指定された形式がファイル・システムで認識される形式でない場合には, SS$_BADPARAMエラーが返されます。それ以外の場合には,ファイル・システムは, 指定された形式で定義された規則に従って,ファイル指定を解析しようとします。 ファイル名の解析に失敗すると,SS$_BADFILENAMEエラーまたはSS$_BADFILEVER エラーが返されます。

ファイル・システムに渡されたFIBにFIB$B_NAME_FORMAT_INフィールドが含まれていない場合, ファイル・システムは,指定されたファイル指定がODS-2 形式であると想定します。これは,変更されていないプログラムとの互換性を保つために行われます。

ファイル・システムは,ファイル指定をボリュームに格納する前に,ファイル指定を最も単純な互換形式に変換します。 たとえば,0x00FFより大きい文字の値が含まれていないUnicode (UCS-2) 形式で指定されたファイル指定は, ボリュームに格納される前に,ISO Latin-1形式に変換されます。

B.3.1.2 返されるファイル名の形式の制御

ファイル・システムは,ファイル指定を返すときにファイル形式を新しいFIB$B_NAME_FORMAT_OUT フィールドに書き込みます。表 B-2 に示されているいずれかの値が使用されます。

ただし,すべてのプログラムがすべての利用可能な命名形式を処理できるとは限りません。QIO システム・サービスの呼び出し元が,表 B-3 に示されている新しいFIB$W_NMCTLフラグを使用して, 返される形式を選択することができます。

表 B-3 新しいFIB$W_NMCTLフラグ

フラグ名 解釈
FIB$V_NAMES_8BIT 呼び出し元は(8ビットの) ODS-2 形式およびISO Latin-1形式を受け付けることができる。
FIB$V_NAMES_16BIT 呼び出し元は(16ビットの) Unicode (UCS-2) 形式を受け付けることができる。

これらの新しいフラグは,返されるファイル指定を以下のように制御します。

B.3.1.3 ワイルドカードの検索と疑似名

ファイル・システム操作によって返されるファイル指定は,通常は呼び出し元のプログラムが理解できる形式になっています。 しかし,入力指定にワイルドカードが含まれている操作の場合にはこのようになりません。 たとえば, 以下のODS-2準拠のファイル指定の中にあるワイルドカードが, この場合に相当します。

             A*.DOC

これは,ISO Latin-1ファイル指定に対応している可能性があります。

             A sample name with periods.and.other;punctuation#in the name.doc;1

返されるファイル指定には区切り文字としてのピリオドが1つしか含まれていないと想定するアプリケーションは, 正しく動作しない可能性があります。 ファイル・システムは,呼び出しもとのプログラムがエラーになるようなファイル指定を返すのではなく, 代わりに疑似名を返します。実際に返される疑似名は, 以下の表に示すように,疑似名が表現する名前のタイプによって異なります。

ファイル形式 疑似名の例
ISO Latin-1 (FIB$C_ISL1) \pISO_ LATIN\.???
Unicode (FIB$C_ UCS2) \pUNICODE\.???

ファイル・システムは,呼び出し元のプログラムがどの形式を理解できるかを,FIB$V_NAMES_8BIT およびFIB$V_NAMES_16BITフラグの設定から判断します。 これらのフラグは,表 B-4で示すように, 返される名前の形式を制御します。

表 B-4 FIBフラグの設定とそれに従って返される名前の形式

FIBフラグの設定 ファイル形式
8ビット 16ビット ODS- 2 ISO Latin-1 Unicode
false false ODS- 2 疑似名 疑似名
true false ODS- 2 ISO Latin-1 疑似名
false true UCS- 2 UCS-2 UCS-2
true true ODS-2 ISO Latin-1 UCS-2

ファイル・システムが疑似名を返すとき,ユーザまたは呼び出し元のアプリケーションに, 直接のファイル・アクセスを許可せずに疑似名を返す対象となるファイルについて通知します。 このため,疑似名には,入力ファイル指定としては 有効でない文字が含まれています。疑似名を使用してファイルを操作しようとすると,SYSTEM-F-BADFILENAME エラーが返されます。

バッファ・サイズ

表 B-5は,すべての返される可能性のあるファイル指定を格納するために, 各バッファで必要な最小サイズを示しています。

表 B-5 各ファイルの安全なバッファ・サイズ(バイト単位)

ファイル形式 QIOの最小値 XQPの最小値
ODS-2 86 86
ISO Latin- 1 264 243
Unicode 538 486

個々のアプリケーションでの上限は,そのアプリケーションがサポートしている形式によって異なります。XQP の最小値は,QIOインタフェースを使用する他のファイル・ システムの通常の最小値よりも小さいことに注意してください。 これは,XQPによって課せられる,ファイル指定に関する236 バイトのサイズ制限のためです。

ファイル指定が用意されたバッファよりも長い場合,ファイル・システムは, エラーを生成せずに返されたファイル指定の長さを切り捨てます。ファイル指定が用意されたバッファよりも短い場合, ファイル指定の最後からバッファの最後までの間の空きスペースには0 ( ゼロ)が埋め込まれます。

B.3.1.4 変更されていないアプリケーションとの互換性

インタフェースの新しい機能を利用するように変更されていないアプリケーションは, 省略時の設定では,以下の条件のいずれか一方が満たされていれば,ODS-2 準拠のファイル指定または疑似名だけを受け取ります。

小文字だけが含まれているファイル指定は,ODS-2では有効なはずですが, 返される前に大文字に変換されます。

変更されていないアプリケーションによって入力パラメータとして指定されたファイル指定は,8 ビットのODS-2対応の名前として解釈されます。この名前の有効性は, 既存のODS-2解析規則を使用してチェックされます。 ODS-5ボリューム上では,このファイル指定はディスクに保存される前に大文字に変換されません。 前に説明したような変換が実行されるため,変更されていないアプリケーションは, このファイル指定を大文字によるファイル指定として認識するためです。 ただし,新しいFIBフラグのうちいずれかを設定したアプリケーションは, このファイル指定を大文字と小文字が混在したファイル指定として認識します。

B.3.2 ファイル属性の変更点

この後の項では,ODS-5で導入された新しいファイル属性と,既存の属性のセマンティックの変更点について説明します。

B.3.2.1 変更されたファイル属性

表 B-6は,ODS-5ボリューム上のファイルについて, 変更または制約された属性を示しています。

表 B-6 変更された属性コード

属性名 最大サイズ(バイト単位) 意味
ATR$C_ASCNAME 252 ファイル・ヘッダに格納されているファイル指定
ATR$C_FILE_SPEC 4098 デバイス,最適トライ・パス,およびファイル指定
ATR$C_FILNAM 10 Radix-50のファイル名
ATR$C_FILTYP 4 Radix-50のファイル・ タイプ
ATR$C_FILVER 2 Radix-50のファイル・バージョン

ATR$C_ASCNAME

ATR$C_ASCNAME属性を使用すると,ファイルの1次ヘッダに格納されているファイル指定の読み書きができるようになります。

ATR$C_ASCNAME属性の読み込み

ODS-2ボリュームでは,ASCNAME属性は以前と同様に返されます。ODS-5ボリュームでは, ファイル指定は用意されたバッファに返され,名前の形式は新しいFIB$B_ASCNAME_FORMAT セルに返されます。

名前が返される形式は,出力ファイル指定のパラメータと同様に,FIB$V_ NAMES_8BITフラグおよびFIB$V_NAMES_16BITフラグの設定によって制御されます。 名前が返される形式が,呼び出し元のプログラムで受け入れられる形式でない場合は, 実際のファイル指定の代わりに疑似名が返されることがあります。

出力ファイル指定パラメータの場合とは異なり,ASCNAME属性に含まれているファイル指定の長さは, 明示的には返されません。このファイル指定の長さを判断するには, 呼び出し元のプログラムは,属性バッファの中で最初に現れるパディング文字を検索しなければなりません。FIB$V_NAMES_ 8BITフラグもFIB$V_NAMES_16BITフラグも設定されていない場合には,バッファにはスペースがパディングされます ( この場合には,ODS-2形式の名前だけが返されることに注意してください) 。1つまたは複数のフラグが設定されている場合には, 属性バッファには0 (ゼロ)がパディングされます。


注意
ファイル・システムは,属性バッファについては, 長さの最小値を制限しません。ファイル指定が属性バッファより長い場合, 返される値はエラーを通知または警告せずに長さが切り捨てられます。

これとは対照的に,ファイル・システムは属性バッファについては, 長さの最大値を制限します。この最大値よりも大きいバッファを指定すると,BADPARAM エラーが返されます。


ATR$C_ASCNAME属性の書き込み

ASCNAME属性は,FIB$V_NAMES_8BITフラグおよびFIB$V_NAMES_16BITフラグがクリアされている場合に限って,ODS-2 ボリュームまたはODS-5ボリューム上のファイルについてのみ書き込むことができます。

この属性を書き込む機能は,この機能を持つ既存のアプリケーションとの互換性を保つためにだけ提供されています。 新しいプログラムや変更されたプログラムは, この属性を書き込むべきではありません。この属性の値を変更すると, ファイルを永久的に削除できなくなることがあります。

属性を書き込むことが可能な場合には,属性バッファの内容(最大で252バイトまで) は,ファイル・ヘッダの中のファイル名フィールドにコピーされます。ODS-5 ヘッダの場合,形式はODS-2に設定され,ファイル名の長さは, 最初のスペース文字のオフセットに設定されます。この値は,252バイトまたは用意されたバッファの長さのいずれか小さい方の値になります。

ATR$C_FILE_SPEC

FILE_SPEC属性は,物理ファイル指定を以下の形式で返す,読み込み専用の属性です。

             DDnn:[DIR1.DIR2_DIRn]name.type;1

返されるファイル名はファイル名に含まれているため,ディレクトリの中のファイル名とは異なっていることがあります。 パスにあるいずれかのディレクトリのファイル・ ヘッダを読み込むときにエラーが発生すると,このファイル指定は, 不完全になることがあります。

ODS-5ボリューム上のファイルの場合,パスには3つの名前形式のうちいずれかの形式のファイル名が含まれていることがあります。 このため,たとえばディレクトリ名の中にピリオドが含まれているため, 返されるパス指定が曖昧になるというような問題が多数発生する可能性があります。 このような問題が発生することを避けるために, ファイル・システムは,RMS によって提供されるサービスを利用して,パスのファイル指定やコンポーネントをエスケープ形式に変換します。 [5]

パスのエスケープ形式がその属性のバッファで対応できる長さより長すぎる場合には, パスの中の1つまたは複数のディレクトリが,最も右のディレクトリのDID に置き換えられることがあります。この処理は,RMSによって実行される処理とまったく同じもので, 第B.2 節で詳しく説明しています。DIDによる短縮を実行した後でも,ファイル指定がバッファで対応できる長さより長すぎる場合, そのファイル名は切り捨てられます。 ユーザ・バッファに返されるファイル指定文字列には,2 バイトのカウント接頭辞が付いています。このカウント接頭辞には, 切り捨てられなかったファイル指定のバイト数が含まれています。このカウントがユーザ・ バッファのサイズ(カウントが含まれているバイト数から2 バイトを減じた値)より大きい場合,ユーザは返されたファイル指定が切り捨てられたと判断することができます。

ATR$C_FILNAM,ATR$C_FILTYP,およびATR$C_FILVER

これら3つの属性のうち最初の2つを使用すると,Radix-50によるエンコードを使用してファイル名およびファイル・ タイプを読み書きすることができます。 このエンコード方式を使用すると,3つの文字を16ビットの1ワードにパックすることができます。Radix-50 の名前に使用することができるのは,ODS-2 形式セットでは38文字だけですが,ダッシュ(-)とアンダスコア(_) は例外で,使用することはできません。

Radix-50によってエンコードされるファイル指定のコンポーネントの長さの最大値は, 以下のとおりです。

このような文字数および長さの制約があるため,Radix-50によるエンコードで表現できるのは, 有効なODS-2形式のファイル名のサブセットだけになります。

ヘッダの中の既存のファイル名の形式がODS-2の場合,ファイル・システムは, これら3つの属性だけを読み書きしようとします。それ以外の場合は,NORAD50 エラーが返されます。既存のファイル名がODS- 2形式である場合でも,Radix-50によるエンコードに対応していないか, またはRadix-50ファイル名の長さの制限に対応していない場合は, BADFILENAMEエラーが返されます。

ATR$C_FILVER属性を使用すると,ファイル・ヘッダの中のファイル・バージョン番号を2 バイトの整数として読み書きすることができます。既存のファイル名をRadix-50 ファイル名に変換する必要がある場合は,これらの制約はこの属性にも適用されます。


[5] ODS-5ボリューム上のファイルに複合アーキテクチャのOpenVMS システムのVAXシステムからアクセスすると,エスケープ形式は返されません。ODS-2 ファイル形式またはISO Latin-1ファイル形式の場合, ファイル・ヘッダに格納されている名前が返されます。UCS-2ファイル形式の場合, 疑似名の後に識別子が括弧で囲まれて続いたものが返されます。 次にファイル形式の例を示します。

DKA100:[ABC]\pUNICODE\.??? (10095,5,0)

B.4 プログラミング・ユーティリティの変更点

この後の項では,OpenVMSプログラミング・ユーティリティおよびそのルーチンに固有の,Extended File Specifications をサポートするための変更点について説明します。

B.4.1 ファイル定義言語(FDL)ルーチン

Alphaシステム対応のOpenVMSバージョン7.2では,ファイル定義言語(FDL) ルーチンがExtended File Specificationsをサポートするように機能強化されています。 以下のルーチンのflags引数には,新しいフラグFDL$V_LONG_NAMES が追加されました。


FDL$CREATE
FDL$GENERATE
FDL$PARSE
FDL$RELEASE

この後の項では,それぞれのFDLルーチンでのFDL$V_LONG_NAMESフラグの機能について説明します。

B.4.1.1 FDL$CREATEルーチン(Alphaシステムのみ)

flags引数に,以下の新しいフラグが追加されました。

フラグ 機能
FDL$V_LONG_NAMES 長い名前アクセス・ブロック(NAML) の長い結果名を使用してRESULT_NAMEを返す。省略時の設定では, RESULT_NAMEは名前アクセス・ブロック(NAM)の短いフィールドから返されるため, 生成された指定が含まれていることがある。

このフラグは,OpenVMS Alphaシステムでのみ有効である。

B.4.1.2 FDL$GENERATE Routine (Alpha システムのみ)

flags引数に,以下の新しいフラグが追加されました。

フラグ 機能
FDL$V_LONG_NAMES 長い名前アクセス・ブロック(NAML) の長い結果名を使用してFDL_FILE_RESNAMを返す。省略時の設定では,FDL_FILE_RESNAM は名前アクセス・ブロック(NAM)の短いフィールドから返されるため, 生成された指定が含まれていることがある。

このフラグは,OpenVMS Alphaシステムでのみ有効である。

B.4.1.3 FDL$PARSEルーチン(Alphaシステムのみ)

flags引数に,以下の新しいフラグが追加されました。

フラグ 機能
FDL$V_LONG_NAMES 返されるRMSファイル・アクセス・ ブロック(FAB)にリンクされた長い名前アクセス・ブロックを割り当てて返す。NAML ブロックの長いファイル名フィールドが使用されるように,NAML ブロックとFABブロックには適切な値が設定される。

省略時の設定では,名前ブロックは割り当てられず,FABのファイル名フィールドが使用される。

FDL$V_LONG_NAMESフラグが設定されている場合には,NAMLブロックに割り当てられたメモリが適切に割り当て解除されるように,FDL$RELEASE ルーチンの flags引数にもFDL$V_LONG_NAMESビットが設定されていなければならない。

このフラグは,OpenVMS Alphaシステムでのみ有効である。

B.4.1.4 FDL$RELEASEルーチン(Alphaシステムのみ)

flags引数に,以下の新しいフラグが追加されました。

フラグ 機能
FDL$V_LONG_NAMES FDL$PARSEルーチンによって作成された長い名前アクセス・ ブロック(NAML)で使用する仮想メモリがあれば, これを割り当て解除する。

このフラグは,OpenVMS Alphaシステムでのみ有効である

B.5 実行時ライブラリの変更点

拡張ファイル名を使用できるようにするために,オプションでNAMブロックではなくNAML ブロックを受け付けたり返すことができるように,LIB$実行時ライブラリのいくつかのルーチンが変更されています。 以下のルーチンが変更されました。

B.5.1 LIB$DELETE_FILE

LIB$DELETE_FILEの形式は,以下のようになりました。

     LIB$DELETE_FILE     filespec [,default-filespec] [,related-filespec]
                         [,user-success-procedure] [,user-error-procedure]
                         [,user-confirm-procedure] [,user-specified-argument]
                         [,resultant-name] [,file-scan-context] [,flags])

flags引数は新しい引数で,形式は以下のようになっています。


      flags 
      OpenVMS usage:   mask_longword
      type:            longword (unsigned)
      access:          read only
      mechanism:        by reference

ユーザ・フラグ。flags引数は,ユーザ・フラグが含まれている符号なしロング・ ワードのアドレスです。

次の表に,フラグ・ビットおよびそれらに対応するシンボルを示します。

ビット シンボル 説明
0
Compaqで使用するために予約済み。
1
Compaqで使用するために予約済み。
2 LIB$M_FIL_ LONG_NAMES (Alphaシステムのみ) これが設定されている場合,LIB$DELETE_FILE は,最大長がNAML$C_MAXRSSのファイル名を処理することができる。 これがクリアされている場合,LIB$DELETE_FILEは, 最大長が255バイト(省略時の値)のファイル指定を処理することができる。

Alphaシステムでは,LIB$DELETE_FILEへの呼び出しで引数user-confirm- procedureを指定し,LIB$M_FIL_LONG_NAMESフラグが設定されている場合,confirm-procedure ルーチンのfab引数によって参照されるFABは, NAMブロックではなくNAMLブロックを参照します。NAMLブロックでは,最大長がNAML$C_MAXRSS の長いファイル名がサポートされています。NAMLブロックの詳細については, 『OpenVMS Record Management Services Reference Manual』を参照してください。

LIB$DELETE_FILEには,返される新しい条件値が1つあります。LIB$INVARG は,flags引数に指定されていないビットが設定されたことを示します。

B.5.2 LIB$FILE_SCAN

LIB$FILE_SCANのfab引数は,NAMブロックまたはNAMLブロックのいずれかを参照できるようになりました。

B.5.3 LIB$FIND_FILE

LIB$FIND_FILEのflags引数には,以下の新しいビットが追加されています。

ビット シンボル 説明
2 LIB$M_FIL_LONG_ NAMES (Alphaシステムのみ) これが設定されている場合,LIB$FIND_FILE は,最大長がNAML$C_MAXRSSのファイル名を処理することができる。 これがクリアされている場合,LIB$FIND_FILEは, 最大長が255バイト(省略時の値)のファイル指定を処理することができる。

Alphaシステムでは,flags引数にLIB$M_FIL_LONG_NAMESフラグが設定されている場合に限って,255 バイトより長いファイル指定がサポートされます。 このフラグが設定されている場合,NAMLブロック(NAMブロックではない) がコンテキストの一部になり,ファイル指定の長さを最大でNAML$C_MAXRSS にすることができます。NAMLブロックの詳細については, 『OpenVMS Record Management Services Reference Manual』を参照してください。

B.5.4 LIB$RENAME_FILE

LIB$RENAME_FILEのflags引数には,以下の新しいビットが追加されています。

ビット シンボル 説明
2 LIB$M_FIL_LONG_ NAMES (Alphaシステムのみ)長さが255バイトを超えるファイル指定を受け付けるかどうかを制御する。

これが設定されている場合,LIB$RENAME_FILEは,最大長がNAML$C_MAXRSS のファイル名を処理することができる。これがクリアされている場合, LIB$RENAME_FILEは,最大長が255バイト(省略時の値)のファイル指定を処理することができる。

Alphaシステムでは,LIB$RENAME_FILEへの呼び出しでuser-confirm- procedureを指定し,LIB$M_FIL_LONG_NAMESフラグが設定されている場合,confirm-procedure ルーチンのfab引数によって参照されるFABは, NAMブロックではなくNAMLブロックを参照します。NAMLブロックでは,最大長がNAML$C_MAXRSS の長いファイル名がサポートされています。NAMLブロックの詳細については, 『OpenVMS Record Management Services Reference Manual』を参照してください。

B.5.5 LIB$FID_TO_NAME

ファイル指定の長さがfilespecバッファで対応できる長さを超えると,パス内のディレクトリがDID による短縮に置き換えられることがあります(第3.2.2.1項を参照)。DID による短縮が実行された後でもファイル指定の長さがバッファで対応できる長さを超えている場合は, そのファイル指定の長さが切り捨てられ,以前のバージョンの場合と同様に, 代わりの正常終了状態としてLIB$_STRTRUが返されます。動的記述子の場合には, 最大値を使用することにより,最大で4095バイトまでの文字列を返すことができます。


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