# Compaq OpenVMS
Extended File Specifications の手引き

前へ | 次へ | 目次 | 索引

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

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

- FIB$V_NAMES_8BIT フラグおよび _16BIT フラグをクリアしたままにしている。

- 新しい FIB$B_NAME_FORMAT_IN フィールドおよび FIB$B_NAME_FORMAT_OUT フィールドが含まれていない FIB を指定している。

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

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

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

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

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

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

表 B-12 変更された属性コード
属性名 | 最大サイズ (バイト単位) | 意味
--- | --- | ---
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 によって提供されるサービスを利用して，パスのファイル指定やコンポーネントをエスケープ形式に変換します。6

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

パスのエスケープ形式がその属性のバッファで対応できる長さより長すぎる場合には，パスの中の 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 によってエンコードされるファイル指定のコンポーネントの長さの最大値は，以下のとおりです。

- ファイル名: 15 文字 (10 バイト)

- ファイル・タイプ: 6 文字 (4 バイト)

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

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

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

# 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$ 実行時ライブラリのいくつかのルーチンが変更されています。以下のルーチンが変更されました。

- LIB$CREATE_DIR

- LIB$DELETE_FILE

- LIB$FILE_SCAN

- LIB$FIND_FILE

- LIB$RENAME_FILE

- LIB$FID_TO_NAME

## B.5.1 LIB$CREATE_DIR

引数 device_directory_spec の最大サイズは現在， VAX 上では 255 文字，Alpha 上では 4095 文字です。

## B.5.2 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.3 LIB$FILE_SCAN

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

## B.5.4 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』を参照してください。

前へ | 次へ | 目次 | 索引