Difference between revisions of "MSX-DOS2 FCS 03 46"
(Created page with "===3.46新しいエントリを見つける(42h)=== パラメータ:C = 42H(_FNEW) DE =ドライブ/パス/ファイルASCIIZ文字列...") |
(→3.46新しいエントリを見つける(42h)) |
||
Line 1: | Line 1: | ||
− | ===3. | + | ===3.46.新しいエントリを見つける(42h)=== |
パラメータ:C = 42H(_FNEW) | パラメータ:C = 42H(_FNEW) |
Latest revision as of 11:26, 18 December 2020
3.46.新しいエントリを見つける(42h)
パラメータ:C = 42H(_FNEW)
DE =ドライブ/パス/ファイルASCIIZ文字列
またはfileinfoブロックポインタ
HL =ファイル名ASCIIZ文字列(の場合のみ)
DE =ファイル情報ポインタ)
B = b0..b6 =必須属性
b7 =新しいフラグを作成
IX =新しいファイル情報ブロックへのポインタ
テンプレートファイル名を含む
結果:A =エラー
(IX)=新規エントリーで記入
この機能は、上記の「最初のエントリの検索」機能と非常によく似ています。 HLとDEのパラメータは、ディレクトリエントリを指定するためにまったく同じ方法で使用されます。ただし、指定された名前と一致するエントリを選択したディレクトリで検索するのではなく、この名前で新しいエントリが作成されます。 IXが指すfileinfoブロックには、あたかも「最初の項目を検索」呼び出しで見つかったかのように、新しい項目に関する情報が入ります。
ファイル名にあいまいな文字( "?"または "*")がある場合、それらはIXが指す新しいfileinfoブロックのファイル名位置にある "テンプレートファイル名"の適切な文字に置き換えられます。それでも結果があいまいな場合や違法な場合は、 "。IFNM"エラーが返されます。これは、自動名前変更を行うコピー操作に役立ちます。
"find first entry"のように、ファイル名がnullの場合は、 "*。*"のように扱われます。この関数では、テンプレートのファイル名が作成する新しいファイル名として使用されます。
ルートディレクトリに空きがない場合は ".DRFUL"エラーが返され、サブディレクトリを拡張する必要がありディスクがすでにいっぱいになっている場合は ".DKFUL"が返されます。
レジスターBに渡される属性バイトは、新しい項目が与えられる属性です。ボリューム名ビットが設定されていると、ボリューム名がルートディレクトリに作成されます。ディレクトリビットが設定されている場合、作成されたエントリはサブディレクトリ用になり、それ以外の場合はファイル用になります。隠しビットと読み取り専用ビットをファイルに、隠しビットをサブディレクトリに設定できます。ファイルは常にアーカイブ属性ビットが設定された状態で作成されます。
ファイルは現在の日付と時刻で長さ0として作成されます。サブディレクトリには、単一のクラスタと「。」が割り当てられます。そして ".."エントリは適切に初期化されます。
指定された名前を持つエントリがディレクトリ内にすでに存在する場合、その動作は "create new"フラグ(レジスタBのビット7)とエントリの型にも依存します。 "create new"フラグが設定されていると、 ".FILEX"エラーが常に返されます。したがって、このフラグを設定すると、既存のファイルは削除されません。
エントリがすでに存在し、「新規作成」フラグが設定されていない場合は、既存のエントリのタイプを調べて、新規ファイル用のスペースを空けるためにそれを削除できるかどうかを確認します。エントリが読み取り専用ファイル( ".FILRO"エラー)、システムファイル( ".SYSX"エラー)、またはサブディレクトリ( ".DIRX"エラー)の場合、またはファイルハンドルがすでに存在する場合は、エラーが返されます。このファイルを開く( ".FOPEN"エラー)。サブディレクトリを作成しようとしている場合は、通常のファイルでも削除されません( ".FILEX"エラー)。
これらすべてのエラーコード( ".FILEX"、 ".FILRO"、 ".SYSX"、 "。DIRX"、 ".FOPEN")については、fileinfoブロックに既存のエントリの詳細とこの詳細が表示されます。 fileinfoブロックは、 "find first"関数から返された場合とまったく同じように使用できます。