MSX-DOS2 FCS 03 52

From Z80 Machines Wiki
Jump to: navigation, search

3.52ファイルハンドルからの読み込み(48H)

パラメータ:C = 48H(_READ)

B =ファイルハンドル

DE =バッファアドレス

HL =読み込むバイト数

結果:A =エラー

HL =実際に読み取られたバイト数

指定されたバイト数が現在のファイルポインタ位置でファイルから読み込まれ、レジスタDEで指定されたバッファアドレスにコピーされます。その後、ファイルポインタは次の順次バイトに更新されます。 "no read"アクセスビットが設定された状態でファイルハンドルが開かれた場合、 ".ACCV"エラーが返されます。

読み取られたバイト数はさまざまな理由で要求された数より少なくなる可能性があり、エラーがない場合は読み取られた数がレジスタHLに返されます。一般に、要求されたより少ない数が読み取られる場合、これはエラー状態として扱われるべきではありませんが、 ".EOF"エラーが返されるまで、次の部分を読み取るために別の読み取りが行われるべきです。 ".EOF"エラーは、部分的な読み込みに対しては決して返されません。読み込みが0バイトの読み込みに対してのみです。この方法でファイルを読むことはデバイスファイルハンドルが正しく働くことを確実にします(下記参照)。

ディスクファイルの場合、ファイルの終わりに達した場合、読み取られるバイト数は要求された数より少なくなり、この場合、次の読み取り操作はゼロバイトを読み取り、".EOF"エラーを返します。デバイスファイルハンドルから読み込むとき(例えば、標準ファイルは0から4までを扱う)、振る舞いは特定のデバイスと、それがASCIIまたはバイナリモードのどちらで読み込まれているかによって異なります(下記の関数4Bhを参照)。 "CON"デバイスは、最も一般的に使用される装置であるので一例として説明されるが、他の装置も同様に動作する。

バイナリモードで "CON"デバイスから読み込むときは、文字は解釈されずに画面またはプリンタにエコーバックされることなく、キーボードから読み込まれます。要求された正確な文字数が常に読み取られ、ファイルの終わり状態はありません。ファイルの終わりの指示がないため、バイナリモードでデバイスから読み取るときには細心の注意を払う必要があります。

ASCIIモード(デフォルトモードおよび通常は標準入力チャネルに適用されるモード)での "CON"デバイスへのread関数呼び出しは、1行の入力だけを読み込みます。ユーザーが利用できる通常の行編集機能を使用して入力行がキーボードから読み取られ、Ctrl-Pが有効になっている場合は、入力された文字が画面およびプリンターにエコーされます。特別な制御文字 "Ctrl-P"、 "Ctrl-N"、 "Ctrl-S"、 "Ctrl-C"がテストされ、コンソールステータス機能0Bhとまったく同じように扱われます。

ユーザーがキャリッジリターンを入力すると、その行はCR-LFシーケンスで終了する読み取りバッファにコピーされ、読み取り関数は適切なバイト数で戻ります。次の読み出しは別のバッファライン入力操作を開始します。読み取りで要求されたバイト数が行入力の長さより小さかった場合、要求された数の文字が返され、次のread関数呼び出しは、すべて読み取られるまで、行の次の部分とともに直ちに戻ります。 。

ユーザーが "Ctrl-Z"文字で始まる行を入力すると、これはファイルの終わりを示すものとして解釈されます。行は破棄され、read関数呼び出しはゼロバイトを読み込み、 ".EOF"エラーを返します。これ以降の読み取りは通常に戻り、別の行入力を開始します。したがって、ファイルの終わり状態は永続的なものではありません。