[Front] [Prev Chapter] [Next Chapter] | [in English] |
本セクションは DR-DOS システムファンクションの詳解を与えます。 本セクションでは利用の便をはかり、ファンクション仕様は番号順に整理されています。 システムファンクションのカテゴリ別の紹介は 2.4 のシステムコール一覧に示されています。
いくつかのシステムコールはエラー情報を返し、システムコール記述中でそれについて言及があるかもしれません。 システムコールで返されるエラー情報の種別について、より広範な情報が Chapter 5 で提供されており、それを読んでエラーコードの全容を把握することをおすすめします。
(訳注 : このドキュメントでは残念ながら、DR-DOS が実装しているファンクションコールのすべてを説明しているわけではありません。 つまり文字どおりの意味で "Undocumented" なファンクションが存在します。 もっともカーネルソースは公開されているので、それを読めばわかるのですが、しかし… )
●プログラム終了 (00h) Program Terminate |
||
終了アドレスに制御を移します。 | ||
入力パラメータ | ||
AH | 00h | |
戻り値 | ||
なし |
PSP に保存されたプログラム終了アドレス、Ctrl-Break アドレス、致命的エラーアドレスを元に戻します。 これらの値はエントリー時、プログラム終了のために保存されています。
プログラムのロードと実行 (4Bh) コールの PSP 制御ブロック説明図 (Figure 4-6) を参照してください。
すべてのバッファをフラッシュし、終了アドレスに制御を移します。 ファイル長を変更し、クローズしていないファイルのディレクトリ情報を、DR-DOS が正しく記録しないことに注意してください。 本ファンクション呼び出しの前に、CS レジスタには、呼び出し元プログラムの PSP セグメントのアドレスを入れておかねばなりません。
本ファンクションコールは新しい(訳注 : 要するに DOS 2.0 以降)プログラムで使うべきではありません。 既存の(訳注 : 要するに DOS 1.x)プログラムのためのみにサポートされています。 プロセス終了 (4Ch) が、この機能のためのより妥当なファンクションコールです。
●キーボード入力 (01h) Keyboard Input |
||
標準入力デバイスから文字入力。 | ||
AH | 01h | |
戻り値 | ||
AL | ASCII 文字、もしくは 00h(拡張 ASCII コードの先頭バイト) |
呼び出し元の標準入力デバイスから一文字読み取り、その文字を標準入力に書き込み(エコー)、それから AL レジスタに返します。 文字が読み取り状態でない場合は、呼び出し元プロセスに戻る前にキーボード入力を待ちます。
キーボード入力が Ctrl-Break を読み取ったときは、INT 23h を実行します。 呼び出し元プロセスが拡張 ASCII コード文字を読み出したいときは、キーボード入力ファンクションを2回呼び出さねばなりません。 キーボード入力が AL レジスタに 00h を返した場合は、それに続くファンクションコールが拡張アスキーコード文字を返すことを示しています。
(訳注 : 拡張アスキーコード云々は PC/AT 互換機系の独自情報だと思う。というか AT の INT 16h キーボード BIOS がそういう仕様になっている。もっとも日本語とかの2バイト文字を読み取る場合は、やっぱり文字コードを判別して2度呼びしないといけないのですが…)
●コンソール出力 (02h) Console Output |
||
標準出力デバイスへの文字出力 | ||
AH | 02h | |
DL | ASCII 文字 | |
戻り値 | ||
なし |
呼び出し元プロセスの標準出力デバイスに文字を出力します。 DL がバックスペース文字 (08h) の場合、コンソール出力ファンクションはカーソルを左にひとつ分移動させます。 (訳注 : コンソールドライバ側の仕様に依存します。たとえば標準出力がファイルにリダイレクトされている場合、ファイルにはバックスペースの文字コードがそのまま出力されるだけです)
Ctrl-Break を検出すると、文字出力完了後に INT 23h を実行します。
●補助デバイス入力 (03h) Auxiliary Input |
||
標準補助デバイスから 1 バイト読み込み | ||
AH | 03h | |
戻り値 | ||
AL | 入力された値 |
標準補助デバイスから次のバイトを読み取り、AL レジスタに返します。
Auxiliary Output |
||
標準補助デバイスに 1 バイト書き込み | ||
AH | 04h | |
DL | 出力値 | |
戻り値 | ||
なし |
DL レジスタの内容を標準補助デバイスに書き込みます。
Printer Output |
||
標準プリンタデバイスに 1 文字出力 | ||
AH | 05h | |
DL | ASCII 文字 | |
戻り値 | ||
なし |
DL レジスタの内容を標準プリンタデバイスに書き込みます。
Direct Console I/O |
||
標準入力/出力デバイスに対する直接コンソール入出力 | ||
AH | 06h | |
DL |
FFh(入力) ASCII 文字(出力) |
|
戻り値 | ||
AL | 入力パラメータの DL が FFh の場合、ASCII 文字もしくは 00h(拡張 ASCII コードの先頭バイト) |
DL レジスタの内容が FFh のとき、本ファンクションは標準入力から文字を読み取り、ゼロフラグをクリア、そして AL レジスタに文字を返します。 入力デバイスに文字がない場合にはゼロフラグをセットし、AL レジスタに 00h を返します。
DL レジスタに FFh 以外の値が入っている場合、DL の内容は標準出力に書き込まれる文字とみなされます。 直接コンソール入出力ファンクションは、コンソールからの Ctrl-Break や Ctrl-PrtSc をチェックしません。
呼び出し元プロセスが拡張 ASCII コード文字を読み出したいときは、直接コンソール入出力ファンクションを2回呼び出さねばなりません。 直接コンソール入出力が AL レジスタに 00h を返した場合は、それに続くファンクションコールが拡張アスキーコード文字を返すことを示しています。 (訳注 : キーボード入力 (01h) 参照)
Direct Console Input Without Echo |
||
標準入力デバイスからエコーなしで直接コンソール入力 | ||
AH | 07h | |
戻り値 | ||
AL | ASCII 文字もしくは 00h(拡張 ASCII コードの先頭バイト) |
呼び出し元プロセスの標準入力デバイスから 1 文字読み取り、AL レジスタに返します。 入力デバイスに文字がない場合、呼び出しプロセスに戻る前に文字入力を待ちます。
呼び出し元プロセスが拡張 ASCII コード文字を読み出したいときは、本ファンクションを2回呼び出さねばなりません。 AL レジスタに 00h を返した場合は、それに続くファンクションコールが拡張アスキーコード文字を返すことを示しています。 (訳注 : キーボード入力 (01h) 参照)
エコーなし直接コンソール入力ファンクションは、コンソールからの Ctrl-Break や Ctrl-PrtSc をチェックしません。
Console Input Without Echo |
||
標準入力デバイスからのエコーなし文字入力 | ||
AH | 08h | |
戻り値 | ||
AL | ASCII 文字もしくは 00h(拡張 ASCII コードの先頭バイト) |
呼び出し元プロセスの標準入力から 1 文字読み取り、AL レジスタに返します。 文字が読みだし状態にない場合は、元プロセスに戻る前に文字を待ちます。
Ctrl-Break を検出した場合、INT 23h を実行します。 呼び出し元プロセスが拡張 ASCII コード文字を読み出したいときは、本ファンクションを2回呼び出さねばなりません。 AL レジスタに 00h を返した場合は、それに続くファンクションコールが拡張アスキーコード文字を返すことを示しています。 (訳注 : キーボード入力 (01h) 参照)
Print String |
||
標準出力デバイスへの文字列送信 | ||
AH | 09h | |
DS | 文字列のセグメントアドレス | |
DX | 文字列のオフセットアドレス | |
戻り値 | ||
なし |
DS:DX で始まり、$ 文字 (24h) で終わる ASCII 文字列を標準出力デバイスに送ります。 文字列がバックスペース文字 (08h) を含む場合、カーソルを左にひとつ分移動させます。 (訳注 : コンソールドライバ側の仕様に依存します。コンソール出力 (02h) 参照)
ユーザが Ctrl-Break を入力した場合、文字列をコンソールに出力後に INT 23h を実行します。
(訳注 : $ 文字そのものは出力できません。もし $ 文字を表示したい場合には、別のファンクションを使う必要があります)
Buffered Console Input |
||
標準入力デバイスから入力バッファに文字読み込み | ||
AH | 0Ah | |
DS | バッファのセグメントアドレス | |
DX | バッファのオフセットアドレス | |
戻り値 | ||
なし |
呼び出し元プロセスの標準入力デバイスから文字を読み取り、DS:DX レジスタで始まるアドレスの入力バッファに書き込みます。 Figure 4-1 に入力バッファのフォーマットを示します
オフセット | 内容 |
---|---|
00h | MAX (バッファ内の最大文字数) |
01h | NCHARS (入力された文字数) |
02h | 文字列 |
MAX - 1 | ODh |
先頭バイト (MAX) は、バッファが保持できる最大文字数を指定します。 DR-DOS は受け取った文字数を 2 番目のバイト (NCHARS) にセットします。 NCHARS にはキャリッジリターン終端文字 (0Dh) は含まれていません。 入力デバイスから読み取られた文字は 3 番目のバイト(オフセット 02h)以降に書き込まれます。 キャリッジリターン (0Dh) を読み込んだとき、ファンクションはバッファへの書き込みを中止します。
入力バッファが MAX - 1 の文字で詰まったとき、キャリッジリターンが読み込まれるまで追加入力は無視され、ベル音を鳴らします。
Check Standard Input Status |
||
標準入力デバイスのステータス取得 | ||
AH | 0Bh | |
戻り値 | ||
AL |
FFh もしくは 00h(文字がない場合) |
標準入力デバイスに文字が用意されているときは、AL レジスタに FFh を返します。 00h を返す場合は、文字が用意されていません。 Ctrl-Break を検出したときは INT 23h を実行します。
Character Input with Buffer Flush |
||
先行入力バッファをフラッシュし、標準入力から文字読み込み | ||
AH | 0Ch | |
AL | ファンクション番号 | |
戻り値 | ||
AL | 00h(入力ファンクションが実行されなかった場合) |
標準入力デバイスの先行入力を破棄し、AL レジスタに書かれた番号のファンクションコールを呼び出します。 以下の番号のシステムコールに処理を渡すことができます。
01H - キーボード入力
06H - 直接コンソール入出力
07H - エコーなし直接コンソール入力
08H - エコーなしコンソール入力
0AH - バッファコンソール入力
Disk Reset |
||
全ファイルバッファのフラッシュ | ||
AH | 0Dh | |
戻り値 | ||
AX | エラーコード |
変更があったバッファの内容をすべてディスクに書き込んで、全ファイルバッファをフラッシュします。 オープンしたままで、なおかつ長さが変更されているファイルのディレクトリ情報は更新しません。 (更新するにはファイルクローズ、もしくはファイルのコミット (68h) を使わねばなりません)
定義されたエラーコードは Chapter 5 を参照してください。
Select Disk |
||
デフォルトドライブとするディスクの選択 | ||
AH | 0Eh | |
DL | ドライブ | |
戻り値 | ||
AL | 最終ドライブの番号 |
本ファンクションは、DL で指定されたドライブが有効かまず判別し、それからデフォルトドライブとして選択します。 ドライブ番号はゼロから始まり、0 が A、1 が B、以下同様です。
AL はシステムの最終ドライブ番号を返します。 たとえば、AL = 5 の場合、最終ドライブは E: です。 COFIG.SYS ファイル中に LASTDRIVE= ステートメントが含まれ、そこで最終物理ドライブより大きい値が指定されていない場合、AL の値は、初期化の際に発見された最後の物理ドライブ番号です。 (訳注 : たとえば CONFIG.SYS 中に LASTDRIVE=Z の指定がある場合、AL には 1Ah (26) が返されます。しかし A: から Z: までの全ドライブが有効であるとは必ずしもいえないわけです)
Open File |
||
入出力操作のためのファイルオープン | ||
AH | 0Fh | |
DS | オープンされていない FCB のセグメント | |
DX | オープンされていない FCB のオフセット | |
戻り値 | ||
AL |
00h -- 成功 FFh -- 失敗 |
(未訳)
Close File |
||
読み/書き処理後のファイルクローズ | ||
AH | 10h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
戻り値 | ||
AL |
00h -- 成功 FFh -- ディレクトリが更新されていない |
(未訳)
Search for First Entry |
||
指定された FCB にマッチする最初のファイルを検索 | ||
AH | 11h | |
DS | オープンされていない FCB のセグメント | |
DX | オープンされていない FCB のオフセット | |
戻り値 | ||
AL |
00h -- マッチしたファイルを発見 FFh -- マッチしたファイルは見つからない |
DS:DX で指定される未オープン FCB にマッチする最初のファイル名を、カレントディレクトリで検索します。 ファイル名には疑問符 ('?') を含めることができ、疑問符はその位置にあるすべての文字とマッチします。 呼び出し元プログラムが拡張 FCB を指定している場合、FCB プレフィクス中にあるアトリビュートバイトの内容を元にして検索を行います。 (拡張 FCB については、2.3.2 拡張 FCB を参照してください) Table 4-1 はアトリビュートバイト値の一覧です。 (訳注 : 2.3.2 ファイルアトリビュートバイトも参照のこと)
マッチするファイルを発見しなかった場合、AL には FFh が返されます。 実際のエラー状況を判別するには、拡張エラーコード取得 (59h) ファンクションを使用してください。
マッチするファイルを発見した場合、AL には 00h が返され、呼び出し元プログラムのディスク転送アドレス (DTA) に情報が置かれます。 この情報は、普通の FCB と 拡張 FCB のどちらが指定されているかによって異なります。
検索 FCB が普通の FCB である場合、呼び出し元 DTA の先頭バイトにマッチする FCB のドライブ番号をセットし、ドライブ番号は A が 1、B が 2、以下同様です。 DR-DOS は、DTA 中の続く 32 バイトに、マッチファイルのディレクトリエントリをコピーします。
検索 FCB が拡張 FCB の場合、呼び出し元 DTA の先頭バイトには FFh がセットされます。 続く 5 バイトはゼロ、そしてアトリビュートとドライブ番号が続く 2 バイトへ、検索 FCB からコピーされます。 そして続く 32 バイトにマッチファイルのディレクトリエントリがコピーされます。 リターン時、呼び出し元 DTA は、検索 FCB と同じアトリビュートを持つ未オープンの拡張 FCB を含んでいます。
ビット | アトリビュート |
---|---|
0 | リードオンリー Read/Only |
1 | ヒドン(隠し)ファイル Hidden |
2 | システムファイル System |
3 | ボリュームラベル Volume Label |
4 | サブディレクトリ Subdirectory |
5 | アーカイブ(保存)ファイル Archive |
アトリビュートバイトがゼロの場合、アトリビュートが何も設定されていない、もしくはリードオンリー、あるいはアーカイブ属性のセットされた、普通のファイルエントリのみを検索します。 ボリュームラベル、サブディレクトリ、ヒドン、システムファイルのエントリは返しません。
アトリビュートバイトがヒドン(ビット 1 をセット)、システムファイル(ビット 2 をセット)、サブディレクトリ(ビット 4 をセット)にセットされた場合、普通のファイルすべてに加え、指定した(複数ビット指定可)アトリビュートにマッチするエントリすべてを検索します。 ボリュームラベルを除くすべてのディレクトリエントリを見るには、アトリビュートバイトのビット 1,2,4 をセットします。
ビット 3 がセットされた場合、ディレクトリエントリのみを検索します。
Search for Next Entry |
||
以前の検索で指定した FCB にマッチする、次のファイルを検索 | ||
AH | 12h | |
DS | オープンされていない FCB のセグメント | |
DX | オープンされていない FCB のオフセット | |
戻り値 | ||
AL |
00h -- マッチしたファイルを発見 FFh -- マッチしたファイルは見つからない |
最初のエントリ検索ファンクションがあいまいファイル名のマッチを発見したあと、次のマッチを本ファンクションで検索できます。 あいまいファイル名は疑問符 ('?') を含むファイル名です。 入力パラメータと戻り値は最初のエントリ検索 (11h) ファンクションと同じです。
マッチするファイルを発見しなかった場合、AL には FFh が返されます。 実際のエラー状況を判別するには、拡張エラーコード取得 (59h) ファンクションを使用してください。
最初のエントリ検索と本ファンクションの間、もしくは本ファンクションを二度実行するその間には、いかなるディスク処理も実行しないでください。 これは DR-DOS が検索 FCB の予約領域に、検索続行に必要な情報を格納しているためです。 検索ファンクションを二度実行する間に入り込んだディスク処理が、この情報を上書きしてしまうでしょう。
Delete File |
||
ディスクファイルの削除 | ||
AH | 13h | |
DS | オープンされていない FCB のセグメント | |
DX | オープンされていない FCB のオフセット | |
戻り値 | ||
AL |
00h -- ファイルは削除された FFh -- マッチするディレクトリエントリがない |
(未訳)
Sequential Read |
||
ディスクファイルからレコードを逐次読み込み | ||
AH | 14h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
戻り値 | ||
AL |
00h -- 成功 01h -- ファイルの終わり (EOF) に遭遇。 データがレコードにない。 02h -- 1 レコードの読み取りに DTA の大きさが不十分。 DTA が小さすぎる。 03h -- ファイルの終わり (EOF) に遭遇。 レコードは部分的に読み込まれ、残りはゼロで埋められた。 |
(未訳)
Sequential Write |
||
ディスクファイルへレコードを逐次書き込み | ||
AH | 15h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
戻り値 | ||
AL |
00h -- 成功 01h -- ディスクフル。 処理はキャンセル。 02h -- DTA の大きさが不十分。 処理はキャンセル。 |
(未訳)
Create File |
||
ディスクファイルの作成 | ||
AH | 16h | |
DS | オープンされていない FCB のセグメント | |
DX | オープンされていない FCB のオフセット | |
戻り値 | ||
AL |
00h -- オープン FFh -- 使用可能なディレクトリエントリがない。 |
(未訳)
Rename File |
||
ディスクファイルのリネーム | ||
AH | 17h | |
DS | 変更した FCB のセグメント | |
DX | 変更した FCB のオフセット | |
戻り値 | ||
AL |
00h -- ファイルはリネームされた FFh -- ファイルがない、もしくはすでに同名のファイルが存在。 |
(未訳)
Current Disk |
||
カレントデフォルトドライブ番号取得 | ||
AH | 19h | |
戻り値 | ||
AL | カレントドライブ番号 |
現在省略ドライブの番号を返し、ドライブ番号は 0 が A、1 が B、以下同様です。
Set Disk Transfer Address |
||
ディスク転送エリア (DTA) アドレスの設定 | ||
AH | 1Ah | |
DS | DTA のセグメント | |
DX | DTA のオフセット | |
戻り値 | ||
なし |
ディスク転送エリア (DTA) のアドレスを DS:DX で指定されるアドレスにセットします。 DTA をセットしない場合、DR-DOS は、PSP のオフセット 80h に位置した標準 DTA を使います。 (訳注 : この位置にはプログラム起動時のコマンドライン文字列が格納されていますので、標準 DTA を使用した場合、コマンドライン文字列は失われます)
指定したオフセットと DTA セグメント終端の間の領域は、プログラムが利用する最大長のレコードを収納するための、そして DR-DOS がディスク転送を確実に行えるための十分な大きさがあるべきです。 DR-DOS の FCB リードそしてライトのファンクションコール (14h, 15h, 21h, 22h, 27h, 28h) は、DTA セグメント終端を越えた、あるいはセグメントの開始位置をまたいだデータのリードやライトは行いません。
Allocation Table Address |
||
デフォルトドライブの情報取得 | ||
AH | 1Bh | |
戻り値 | ||
DS | FAT-ID アドレスのセグメント | |
BX | FAT-ID アドレスのオフセット | |
DX | クラスタ数 | |
AL | クラスタあたりのセクタ数 | |
CX | 物理セクタの大きさ |
デフォルトドライブについての情報を返します。 ファンクション終了時、DS:BX はデフォルトドライブのファイルアロケーションテーブル (FAT) 識別バイトを指しています。 DX はドライブのクラスタ数を格納しています。 AL はクラスタあたりのセクタ数を格納し、CX は物理セクタのサイズ(バイト数)を格納しています。
Allocation Table for Specific Drive |
||
指定ドライブの情報取得 | ||
AH | 1Ch | |
DL | ドライブ番号 | |
戻り値 | ||
DS | FAT-ID アドレスのセグメント | |
BX | FAT-ID アドレスのオフセット | |
DX | アロケーションユニット数 | |
AL | アロケーションユニットあたりのセクタ数 | |
CX | 物理セクタの大きさ |
DL にドライブ番号が指定されることをのぞいて、ファンクション 1Bh と同じです。 ドライブ番号はゼロで始まり、0 がデフォルトドライブ、1 が A、2 が B、以下同様です。 (訳注 : 手元にある NEC の MS-DOS プログラマーズリファレンスには、AL に FFh が返された場合はエラーだと書いてありました)
(おまけの訳注 : なんでファンクション 1Bh で「クラスタ」なのにこっちで「アロケーションユニット」になっているのだろう。原文でそうなっているので一応こうしときますが。うーん)
Get Drive Parameter Block for Default Drive |
||
カレントドライブのディスクパラメータ取得 | ||
AH | 1Fh | |
戻り値 | ||
AL |
00h -- 成功 FFh -- 無効なドライブ |
|
DS | DPB アドレスのセグメント(成功時) | |
BX | DPB アドレスのオフセット(成功時) |
ファンクション 32h も参照してください。 このファンクションで DOS DPB のフォーマットを示しています。
Random Read |
||
ディスクファイルからレコードのランダム読み込み | ||
AH | 21h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
戻り値 | ||
AL |
00h -- 成功 01h -- ファイルの終わり (EOF) に遭遇。 データ無効。 02h -- DTA の大きさが不十分。 処理はキャンセル。 03h -- ファイルの終わり (EOF) に遭遇、一部を読み込み、残りはゼロで埋められた。 |
(未訳)
Random Write |
||
レコードをディスクファイルへランダム書き込み | ||
AH | 22h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
戻り値 | ||
AL |
00h -- 成功 01h -- ディスクフル、書き込みキャンセル。 02h -- DTA の大きさが不十分、処理はキャンセル |
(未訳)
File Size |
||
ファイルサイズ取得 | ||
AH | 23h | |
DS | オープンされていない FCB のセグメント | |
DX | オープンされていない FCB のオフセット | |
戻り値 | ||
AL |
00h -- 成功 FFh -- マッチするエントリが見つからない |
(未訳)
Set Random Record Field |
||
ランダムレコードフィールドのファイル位置を設定 | ||
AH | 24h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
戻り値 | ||
なし |
(未訳)
Set Vector |
||
割り込みベクタテーブル設定 | ||
AH | 25h | |
DS | 割り込みルーチンのセグメント | |
DX | 割り込みルーチンのオフセット | |
AL | 割り込み番号(16 進) | |
戻り値 | ||
なし |
呼び出し元プロセスが渡す、割り込み番号 AL の割り込みベクタテーブルを、DS:DX のアドレスにセットします。 割り込みベクタ取得 (35h) の呼び出しによって、割り込みベクタテーブルの内容を調査できます。
Create New Program Segment Prefix |
||
AH | 26h | |
DX | セグメント番号 | |
戻り値 | ||
なし |
(未訳)
Random Block Read |
||
ディスクファイルから複数レコードのランダム読み込み | ||
AH | 27h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
CX | レコード数 | |
戻り値 | ||
AL |
00h -- 成功 01h -- ファイルの終わり (EOF) に遭遇。 データ無効。 02h -- DTA の大きさが不十分。 処理はキャンセル。 03h -- ファイルの終わり (EOF) に遭遇、一部を読み込み、残りはゼロで埋められた。 |
|
CX | 読み込んだレコード数 |
(未訳)
Random Block Write |
||
ディスクファイルへ複数レコードをランダム書き込み | ||
AH | 28h | |
DS | オープンされている FCB のセグメント | |
DX | オープンされている FCB のオフセット | |
CX | レコード数 | |
戻り値 | ||
AL |
00h -- 成功 01h -- ディスクフル、書き込みキャンセル。 02h -- DTA の大きさが不十分、処理はキャンセル |
|
CX | 書き込まれたレコード数 |
(未訳)
Parse Filename |
||
指定ファイル名を解析し FCB を初期化 | ||
AH | 29h | |
DS | コマンドラインポインタのセグメント | |
SI | コマンドラインポインタのオフセット | |
ES | オープンされていない FCB のセグメント | |
DI | オープンされていない FCB のオフセット | |
AL | ビットのマップ | |
戻り値 | ||
DS | 解析済ファイル名の次にくる文字のセグメント | |
SI | 解析済ファイル名の次にくる文字のオフセット | |
ES | 値を設定された FCB のセグメント | |
DI | 値を設定された FCB のオフセット | |
AL |
00h -- ワイルドカード文字 ('?', '*') は未使用 01h -- ファイル名もしくは拡張子にワイルドカード使用 FFh -- 無効なドライブ指定 |
(未訳)
Get Date |
||
現在のシステム日付取得 | ||
AH | 2Ah | |
戻り値 | ||
AL | 曜日 (0-6) | |
CX | 年 (1980-2099) | |
DH | 月 (1-12) | |
DL | 日 (1-31) |
システムクロックに記録された曜日、年、月、日を返します。 年を CX に、月を DH に、日 を DL に返します。 すべての戻り値は 2 進数です。 日付計算の際、DR-DOS は月の日数とうるう年かどうかを考慮します。
曜日は 0 から 6 までの番号付けをとっており、日曜日から始まります。 有効年は 1980 年から 2099 年までです。 有効月は 1 から 31 までの数で、該当月の日数と指定年がうるう年かどうかを考慮したものです。
日付クロックが次の日に進むと、日付は自動的に修正されます。
Set Date |
||
システム日付の設定 | ||
AH | 2Bh | |
CX | 年 (1980-2099) | |
DH | 月 (1-12) | |
DL | 日 (1-31) | |
戻り値 | ||
AL |
00h -- 日付有効 FFh -- 日付無効 |
システムの日付を設定します。 入力時、CX には有効な年が、DH には有効な月が、DL には有効な日が入っていなければなりません。
日付の設定に成功した場合は AL に 00h を返し、指定した日付が無効の場合は FFh を返します。
有効年は 1980 年から 2099 年までです。 有効月は 1 から 31 までの数で、該当月の日数と指定年がうるう年かどうかを考慮したものです。
Get Time |
||
現在のシステム時刻取得 | ||
AH | 2Ch | |
戻り値 | ||
CH | 時 (0-23) | |
CL | 分 (0-59) | |
DH | 秒 (0-59) | |
DL | 100 分の 1 秒 (0-99) |
時、分、秒、100 分の 1 秒のシステム時刻を24時間時計で返します。 4 つの 8 ビット量で時刻を返します。 本ファンクションの戻り値を、プリント可能な書式へ容易に変換、もしくはプログラムがどれだけの間動いているか算出するといった計算目的で使用できます。
Set Time |
||
システム時刻設定 | ||
AH | 2Dh | |
CH | 時 (0-23) | |
CL | 分 (0-59) | |
DH | 秒 (0-59) | |
DL | 100 分の 1 秒 (0-99) | |
戻り値 | ||
AL |
00h -- 時刻は有効 FFh -- 時刻は無効 |
24時間時計でシステム時刻を設定します。 入力時、CH は時、CL は分、DH は秒、DL は 100 分の 1 秒を格納します。 時刻要素に有効でないものがある場合、ファンクション処理は終了し、AL に FFh を返します。 時刻要素が有効で、時刻が正しく設定された場合、AL に 00h を返します。
Set/Reset Verify Switch |
||
ディスク書き込み処理のベリファイフラグのセット/リセット | ||
AH | 2Eh | |
DL | 00h | |
AL |
00h -- ベリファイ OFF 01h -- ベリファイ ON |
|
戻り値 | ||
なし |
ベリファイが ON のとき、DR-DOS は現行アプリケーションが行うディスク書き込みをベリファイ(照合)します。 ベリファイフラグの状態取得にはファンクション 54h を使用してください。
Get Disk Transfer Address |
||
ディスク転送エリア (DTA) アドレス取得 | ||
AH | 2Fh | |
戻り値 | ||
ES | 現在の DTA セグメント | |
BX | 現在の DTA オフセット |
ES:BX に現在のディスク転送エリア (DTA) アドレスを返します。 ディスク転送アドレス (DTA) 設定 (1Ah) ファンクションの呼び出しによって DTA アドレスを設定できます。 DTA についての記述は、2.3.4 ディスク転送エリア (DTA) 中にあります。
Get Version Number |
||
DR-DOS バージョン番号取得 | ||
AH | 30h | |
戻り値 | ||
AL | メジャーバージョン番号 | |
AH | マイナーバージョン番号 | |
BX | 00h | |
CX | 00h |
AL レジスタに DR-DOS バージョン番号の上位部分が、AH レジスタに下位部分が返されます。 BX と CX は 00h に設定されます。 現行バージョンの DR-DOS で返される値は、AL に 03h、AH に 1Fh です。 (訳注 : この項の記述は古いバージョンのもののようです。以下の訳注参照)
(訳注 : この説明を信ずるならば、DR-DOS はバージョンとして 3.31 を返すことになります。 DR-DOS 6 の時代には確かにそうでした。 現行の DR-DOS 7.0 はバージョン番号として AL に 06h、AH に 00h の値を返すはずです。 このファンクションが返す値は SETVER コマンドによりプログラム毎に設定可能です。 SETVER に左右されない真のバージョン番号の取得には真のバージョン番号取得 (3306h) ファンクションを使用してください)
Keep Process |
||
現在実行中プロセスの(常駐)終了 | ||
AH | 31h | |
AL | 終了コード | |
DX | パラグラフ(16 バイト)単位でのメモリ量 | |
戻り値 | ||
なし |
呼び出し元プロセスを終了しますが、DX で示されるパラグラフ数のメモリを残します。 メモリは現在の PSP の先頭から保持されます。
プロセスによってオープンされたファイルは、本ファンクション実行時にはクローズされません。
AL レジスタに渡された二進数のエラーコード(あるいは終了コード)は、子プロセスの終了コード取得 (4Dh) ファンクションを通じて取り出すことができます。
Get DOS Drive Parameter Block |
||
指定ドライブのディスクパラメータの詳細を取得 | ||
AH | 32h | |
DL | ドライブ番号 (00h = デフォルト、01h = A:、以下略) | |
戻り値 | ||
AL |
00h -- 成功 FFh -- 無効なドライブ |
|
DS | DPB のセグメント(成功時) | |
BX | DPB のオフセット(成功時) |
以下の表は DOS ドライブパラメータブロック (DPB) のフォーマットの記述です。
オフセット | サイズ | 説明 |
---|---|---|
00h | BYTE | ドライブ番号(例 00h=A:, 01h=B:) |
01h | BYTE | デバイスドライバ内でのユニット番号 |
02h | WORD | セクタ当たりのバイト数 |
04h | BYTE | 1 クラスタ内で使われる最大セクタ番号 |
05h | BYTE | クラスタ番号をセクタ番号に変換するためのシフト回数 |
06h | WORD | ドライブ先頭の予約セクタ数 |
08h | BYTE | FAT の数 |
09h | WORD | ルートディレクトリエントリの数 |
0Bh | WORD | ユーザデータの含まれる最初のセクタ番号 |
0Dh | WORD | 最大クラスタ番号(データクラスタ数 + 1) |
0Fh | WORD | FAT 当たりのセクタ数 |
11h | WORD | 最初のディレクトリセクタ番号 |
13h | DWORD | デバイスドライバヘッダのアドレス |
17h | BYTE | メディア ID バイト |
18h | BYTE | ドライブにアクセスされたら 00h、されてなければ FFh |
19h | DWORD | 次の DPB へのポインタ |
1Dh | WORD | 書き込み時、空き領域を探しはじめるクラスタ |
1Fh | WORD | ドライブの空きクラスタ数。 FFFFh = 不明。 |
Ctrl-Break Check |
||
Ctrk-Break チェック機構の状態取得/設定 | ||
AH | 33h | |
AL |
00h -- Ctrl-Break 状態取得 00h -- Ctrl-Break 状態設定 |
|
DL |
00h -- Ctrl-Break チェック を OFF に設定 01h -- Ctrl-Break チェック を ON に設定 |
|
戻り値 | ||
DL |
00h -- Ctrl-Break チェックは OFF である 01h -- Ctrl-Break チェックは ON である |
現在の Ctrl-Break チェックの状態を設定もしくは取得できます。 AL レジスタが 00h の場合、Ctrl-Break チェック機構の現在の状態を DL レジスタに返します。 AL に 01h が格納されている場合、Ctrl-Break チェックは DL レジスタに渡される値によって設定されます。
Get Boot Drive |
||
システム起動ドライブの判別 | ||
AX | 3305h | |
戻り値 | ||
DL | 起動ドライブ (1 = A: ...) |
本ファンクションは DOS の内部スタックをまったく使用しませんので、いつでも呼び出すことができます。
Get DR-DOS Version |
||
DR-DOS の(真の)バージョン番号取得 | ||
AX | 3306h | |
戻り値 | ||
BL | メジャーバージョン番号 | |
BH | マイナーバージョン番号 | |
DL | 下位 3 ビットにリビジョン番号。 その他のビットは予約済みでゼロがセットされる。 | |
DH |
以下の値を組み合わせた DR-DOS バージョンフラグ DOSINROM (08h) -- DR-DOS は ROM 内にある。 この値がない場合は RAM にある。 DOSINHMA (10h) -- DR-DOS はハイメモリ (HMA) 内にある。 この値がない場合は基本メモリ内にある。 |
本ファンクションは、SETVER コマンドによって設定されたのではない、実際のバージョン番号を返します。 ファンクション 30h を使った場合はそうでなく、戻り値は SETVER で変更可能です。
Get Vector |
||
指定した割り込みベクタのアドレス取得 | ||
AH | 35h | |
AL | 割り込み番号(16 進数) | |
戻り値 | ||
ES | 割り込みルーチンアドレスのセグメント | |
BX | 割り込みルーチンアドレスのオフセット |
AL で指定される割り込み番号の、割り込みルーチンアドレスの CS:IP を ES:BX に返します。 割り込みベクタの設定には割り込みベクタ設定 (25h) ファンクションを使用してください。
Get Disk Free Space |
||
ディスク残量情報の取得 | ||
AH | 36h | |
DL | ドライブ番号 | |
戻り値 | ||
AX |
1 クラスタ当たりのセクタ数 FFFFh -- 無効なドライブ番号 |
|
BX | 使用可能なクラスタ残量 | |
DX | ドライブの総クラスタ数 | |
CX | 1 セクタ当たりのバイト数 |
指定ドライブの空き容量に関する情報を返します。 DL にはドライブ番号を格納し、ドライブ番号は 0 が現在のドライブ、1 が A:、2 が B:、以下同様です。 利用可能なクラスタの数を BX に、ドライブの総クラスタ数を DX に、セクタ当たりのバイト数を CX に、クラスタ当たりのセクタ数を AX に返します。
Set Country Dependent Information |
||
国コードの設定 | ||
AH | 38h | |
AL | FFh | |
DX | FFFFh | |
BX | 国コード | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
現在の国コードを、BX レジスタで指定される国コードに変更します。 有効な国コードは以下の通りです。
001 アメリカ合衆国 U.S.A | 045 デンマーク Denmark |
002 カナダ(仏語) Canada (French) | 046 スウェーデン Sweden |
003 南米 S.America | 047 ノルウェー Norway |
007 ロシア Russia | 049 ドイツ Germany |
031 オランダ Netherlands | 061 オーストラリア Australia |
032 ベルギー Belgium | 081 日本 Japan |
033 フランス France | 082 韓国 Korea |
034 スペイン Spain | 090 トルコ Turkey |
036 ハンガリー Hungary | 351 ポルトガル Portugal |
039 イタリア Italy | 358 フィンランド Finland |
041 スイス Switzerland | 785 中近東 Middle East |
043 オーストリア Austria | 972 イスラエル Israel |
044 イギリス UK |
Get Country Dependent Information |
||
国別情報の取得 | ||
AH | 38h | |
AL | FFh | |
BX | 情報を取得する国コード | |
DS | バッファのセグメント | |
DX | バッファのオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
DS:DX で指定されるメモリブロックに、Figure 4-2 で示される国別情報を返します。 BX レジスタは要求する国を指定します。 国番号 0 は現在の国別情報を返します。
オフセット | 形式 | 内容 |
---|---|---|
00h | word | 日付フォーマット |
02h | 5 bytes | 通貨記号 |
07h | 2 bytes | 3桁 (1000) 単位のセパレータ記号 |
09h | 2 bytes | 小数点 |
0Bh | 2 bytes | 日付セパレータ記号 |
0Dh | 2 bytes | 時刻セパレータ記号 |
0Fh | byte | 通貨形式 |
10h | byte | 通貨表示桁 |
11h | byte | 時刻形式 |
12h | dword | 大文字変換呼び出しアドレス |
16h | 2 bytes | データリストセパレータ記号 |
18h | 10 bytes | (予約済) |
日付フォーマットは以下の通り。
0 | M D Y - 米国標準 |
1 | D M Y - ヨーロッパ標準 |
2 | Y M D - 日本標準 |
通貨形式は以下の通り。
Bit 0 | 通貨記号が値より前にある場合、0 |
通貨記号が値の後ろにある場合、1 | |
Bit 1 | 通貨記号と値の間に空白がない場合、0 |
通貨記号と値の間に空白がひとつある場合、1 |
時刻形式は以下の通り。
Bit 0 | 12 時間時計の場合、0 |
24 時間時計の場合、1 |
大文字変換呼び出しでは AL レジスタを以下のように利用します。
入力時の AL | 大文字に変換する 80h 以上の ASCII コード |
出力時の AL | 大文字に変換された ASCII コード |
キャリーフラグがセットされている場合、AX レジスタはリターン時のエラーコードを格納しています。 エラーコードの定義については Chapter 5 を参照してください。
Create a Subdirectory |
||
指定パスの最深サブディレクトリ作成 (MKDIR) | ||
AH | 39h | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
DS:DX で示される ASCIZ 文字列でドライブとパス名を指定します。 指定したパスの最深部に新しいディレクトリを作成し、呼び出し元プロセスに戻ります。 指定したパスのディレクトリが存在しない場合、ディレクトリ構造に新しいディレクトリを作成はしません。 (訳注 : つまり、たとえば C:\foo\bar というディレクトリを作成する時に C:\foo ディレクトリが存在しない場合、本ファンクションは失敗します。このような場合、まず C:\foo ディレクトリを作成し、次に C:\foo\bar を作成、というようにファンクションを二度にわけて実行することになります) 本ファンクションは AX レジスタにエラーコード 3 もしくは 5 を返します。 エラーコードの定義については Chapter 5 を参照してください。
Remove a Subdirectory |
||
指定パスの最深サブディレクトリ削除 (RMDIR) | ||
AH | 3Ah | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
DS:DX レジスタで示される ASCIZ 文字列のディレクトリを、ディレクトリ構造から削除します。 カレントディレクトリは削除できません。
削除されるディレクトリが空でない、もしくはいずれかのプロセスによるアクセス状態である場合はエラーコード 5 を返します。 ASCIZ 文字列が無効なパスを指定している場合はエラーコード 3 を返します。
Change Current Directory |
||
指定 ASCIZ 文字列にカレントディレクトリ設定 (CHDIR) | ||
AH | 3Bh | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
DS:DX で示される ASCIZ 文字列に、カレントディレクトリを設定します。 指定パスのディレクトリが存在しない場合、キャリーフラグをセットし、エラーコード 3(パスが見つからない)を AX レジスタに返します。
Create a File |
||
ファイル(ハンドル)作成 | ||
AH | 3Ch | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
CX | ファイルアトリビュート(属性) | |
戻り値 | ||
AX | キャリーフラグがクリアされている場合、16 ビットのファイルハンドル |
新しいファイルを作成します。 指定された名前のファイルがすでにある場合、書き込み処理以前にファイル長は 0 に切り詰められます。 ファイルが存在しない場合、ASCIZ 文字列で指示されるディレクトリにファイルを作成し、ファイル属性を与えます(2.3.3 ファイルアトリビュートバイトを参照)。 AX レジスタにファイルのハンドルを返します。
キャリーフラグがセットされている場合、本ファンクションは AX レジスタにエラーコード 3, 4, もしくは 5 を返します。 エラーコード 5 アクセス拒否 (Access Denied) は指定ディレクトリが満杯、もしくは同じ名前のファイルが存在し、そのファイルにリードオンリー指定がされていることを示しています。 エラーコードの定義に関しては Chapter 5 を参照してください。 ファイルアトリビュートの変更にファイルモード変更 (43h) が使えることに注目してください。
Open a File Handle |
||
指定 ASCIZ 文字列にマッチするファイル(ハンドル)をオープン | ||
AH | 3Dh | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
AL | アクセスコード | |
戻り値 | ||
AX | ハンドル、もしくはエラーコード(キャリーフラグがセットされている場合) |
ASCIZ で指定されたディレクトリと名前を持つファイルを開きます。 通常ファイルもヒドン(隠し)ファイルも開くことができます。 デバイス名はコロン (':') で終了しません。
入力時、DS:DX はオープンするファイルのドライブ、パス、ファイル名を含む ASCIZ 文字列を指定します。 AL レジスタはファイルがオープンされるモードを定義します。
リターン時、キャリーフラグがセットされていない場合、以降のリード/ライト処理に使うことになる 16 ビットのファイルハンドルが返されます。 キャリーフラグがセットされている場合、AX に拡張エラーコードが返され、ファンクションコールの失敗理由が示されます。 拡張エラーコードは以下のいずれかひとつです。
ファンクションが成功した場合、ファイルのリード/ライトポインタをファイル先頭バイトにセットし、ファイルのレコードサイズを 1 バイトにセットします。 ファイルポインタ移動(シーク) (42h) でポインタを移動できます。 ファイルモード変更 (43h) でファイルアトリビュートの取得や設定ができます。 ファイルアトリビュートは 2.3.3 ファイルアトリビュートバイトにて説明しています。
入力時、AL レジスタに与えられるコンビネーション値によって、ファイルアクセスの広範な制御を行います。 アクセスコードは AL 内で 4 つのフィールドにわけて定義されています。 インヘリタンス(継承)フラグ(1 ビット)、シェアリング(共有)モード(3 ビット)、予約フィールド(1 ビット)、そしてアクセスフィールド(3 ビット)です。
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
内容 | I | S | R | A |
インヘリタンスフラグ (I : bit 7) は、ファイル(ハンドル)がプライベート (I=1) かどうか、もしくは子プロセスにも引き継がれる (I=0) かどうかを指示します。
アクセスフィールド (A : bit 2-0) は、ファイルに行われうる操作を、以下の3つのうちのひとつの指定通りに制限します。
シェアリングモード制御 (S : bit 6-4) は、ファイルがオープンしている間、他のプロセスが所持するそのファイルへのアクセス権を制御し、以下の 5 つのうちのひとつに従います。
上記の 3 ビットを使えるようにするには SHARE がロードされていなければならないことに注意してください。 (やや無責任な訳注 : SHARE.EXE が常駐しているかどうかは INT 2Fh, AX=1000h で調べることができます。AX に 1000h を入れて INT 2Fh を実行し、AL に FFh が返ってきた場合、SHARE がインストールされています。詳しいことは Interrupt List あたりで調べてください)
ファイル共有には、関係する全プロセス間での厳密な協調操作が要求されます。 もしいずれかのプロセスが何らかのアクセスレベルを拒否するモードでファイルをオープンした場合、他のプロセスによるそれ以降の、そのアクセスレベルを必要とするファイルオープン要求は失敗します。 そのうえ、すでに他のプロセスでうまくいっているシェアリングモードでファイルをオープンしようとしても、必ず失敗してしまいます。
シェアリングモードつきでファイルをオープンすることの影響を肝に銘じておくべきでしょう。 特に、ファンクションが失敗する原因となる以下のような状況に注意してください。
拒否なしシェアリングモードは他プロセスへの制限をまったくかけません。
(訳注 : ファイルシェアリングモードについての説明が個人的にいまいちわからなかったので、MS-DOS 方面のマニュアルだのを見てみると、だいたい以下のような感じでした。
自分で実際に確認してないので、どの程度に正しいのかはよくわかりません。
すまんす。
)
Close a File Handle |
||
指定されたファイルハンドルのクローズ | ||
AH | 3Eh | |
BX | オープン、もしくは作成されたファイルのハンドル | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
指定されたファイルハンドルをクローズし、そのファイルに関連する内部バッファの内容をディスクに書き出し、ディレクトリを更新します。 キャリーフラグがセットされている場合、無効なファイルハンドルが指定されていることを示すエラーコード 6 を AX レジスタに返します。
Read from a File or Device |
||
ファイルハンドルから、指定バイト数をバッファにリード | ||
AH | 3Fh | |
BX | ファイルハンドル | |
DS | バッファアドレスのセグメント | |
DX | バッファアドレスのオフセット | |
CX | 読み込むバイト数 | |
戻り値 | ||
AX | キャリーフラグがセットされていない場合、読み込んだバイト数 |
CX で指定されるバイト数を、ファイルから、DS;DX で示されるバッファに転送します。 リターン時、キャリーフラグがセットされている場合、AX はエラーコード 5 もしくは 6 を格納しています。 エラーコードの定義は Chapter 5 を参照してください。
ファンクションコールが成功した場合、キャリーフラグはセットされず、AX はファイルもしくはデバイスから読み込んだバイト数を格納しています。 ファンクションコールがデバイスからの読み込みに使われた場合、CX で指定されるより少ないバイト数が読み込まれるように、デバイスの能力に制限がかけられます。
ファイルからの読み込みの時、AX の値が CX で指定された値より小さい場合は、プログラムがファイルの終端 (EOF) まで読み上げたことを示しています。 値 0 はファイル終端から読みはじめようとしたことを示しています。
(念のための訳注 : つまりエラーなしでファンクションが終了し、AX < CX の場合、もし読み込んでいたのが正しくファイルからなら、ファイルの終わりまで読み込んだことになります。 しかし、たとえば標準入力などのキャラクタデバイスからだった場合、必ずしも入力がそこで全部終わったとは限りません。 たとえばキーボード入力を読み込む場合、改行入力があった時点でファンクションは終了し、AX にはその時点までの文字数が返されることになります。 継続入力が本当にないか調べるには、たぶんもう一度ファイルリードを発行し、AX が 0 か(もしくはエラーか)どうか調べる必要があるでしょう。 もっとも、ファイル相手でもそうした方がいいような気もしますが… )
Write to a File or Device |
||
バッファから、指定したバイト数をファイルハンドルにライト | ||
AH | 40h | |
BX | ファイルハンドル | |
DS | バッファアドレスのセグメント | |
DX | バッファアドレスのオフセット | |
CX | 書き込むバイト数 | |
戻り値 | ||
AX | キャリーフラグがセットされていない場合、書き込んだバイト数 |
DS:DX で示されるバッファから、CX で指定されるバイト数を、BX で示されるファイルハンドルに転送します。
リターン時、キャリーフラグがセットされていた場合、AX にエラーコード 5 もしくは 6 を返します。 エラーコード 5 はアクセス拒否を示し、エラーコード 6 は無効なファイルハンドルを示します。 キャリーフラグがセットされていない場合、実際に書き込んだバイト数を AX に返します。 (訳注 : AX と CX の値が異なる場合、ディスクフルの可能性があります。 MS-DOS 方面の文献によると、ディスクフル時にキャリーフラグはセットされません。 DR-DOS でもおそらくそうなんでしょう) CX レジスタが 0 の場合、ファイルは、現在のファイルポインタの位置に切り詰められます。 (訳注 : ファイルポインタがファイル終端よりも後方にある時に CX = 0 でファイルライトを行った場合、ファイルサイズがその地点まで伸ばされます。 ファイルポインタ移動 (42h) も参照のこと)
Erase a File from Directory |
||
指定ファイルをディレクトリから削除 | ||
AH | 41h | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
ファイル名に結び付いたディレクトリエントリを削除します。 DS:DX で示される ASCIZ 文字列のいかなる部分にも、疑問符 ('?') とアスタリスク ('*') のワイルドカード文字は使えません。
リードオンリーファイルは削除できません。 リードオンリーファイルを削除するには、まずファイルモード変更 (43h) ファンクションを使用してファイルアトリビュートを変更しなければなりません。
リターン時、キャリーフラグがセットされている場合、ファイルが見つからない、もしくはアクセス拒否を示すエラーコード 2 もしくは 5 を AX に返します。
Move File Read/Write Pointer |
||
ファイルリード/ライトポインタ移動 | ||
AH | 42h | |
CX | バイト単位での移動オフセット(上位) | |
DX | バイト単位での移動オフセット(下位) | |
AL |
移動起点 0 -- ファイル先頭から 1 -- 現在位置から 2 -- ファイル終端 (EOF) から |
|
BX | ファイルハンドル | |
戻り値 | ||
DX | キャリーフラグがセットされていない場合、新しいポインタ位置(上位) | |
AX |
キャリーフラグがセットされていない場合、新しいポインタ位置(下位) キャリーフラグがセットされている場合、エラーコード |
AL に渡された値で指定した方法により、リード/ライトポインタを移動します。 入力時、CX:DX にはポインタの移動距離を格納します。 リターン時にキャリーフラグがセットされていない場合、DX:AX は新しいポインタ位置を格納しています。 DX が値の上位部分を格納しています。 キャリーフラグがセットされている場合、AX にエラーコード 1 もしくは 6 を返します。 エラーコードの定義は Chapter 5 を参照してください。
AL レジスタには以下の値のうちひとつをセットしてください。
0 | ファイルの先頭から、CX:DX に格納されるバイト数ぶん、ポインタを動かす |
1 | 現在位置から、CX:DX のオフセットを加えた位置へ、ポインタを動かす |
2 |
ファイル終端 (EOF) から、指定されたオフセットを加えた位置へ、ポインタを動かす この方法は、ファイルサイズの判定に使用することができます |
Change File Mode |
||
ファイルアトリビュートもしくはパスワード変更 | ||
AH | 43h | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
CX |
ファイルアトリビュート (AL = 1) パスワードモード (AL = 3) |
|
AL |
0 -- アトリビュート取得 1 -- アトリビュート設定 2 -- パスワードモード取得 3 -- パスワードモード設定 |
|
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
CX |
キャリーフラグがセットされていない場合、 入力時の AL が 0 だったなら、ファイルの現在のアトリビュート、 入力時の AL が 2 だったなら、パスワードモード |
本ファンクションは:
入力時に AL が 1 の場合、ファイルアトリビュートを CX で指定されるものに変更します。 リターン時、AL に 0 が格納され、なおかつキャリーフラグがセットされていない場合、現在のファイルアトリビュートが CX に返されます。 DOS のファイルアトリビュートバイトは 2.3.3 ファイルアトリビュートバイトにて記述されています。
Notes:
リードオンリー (01h)、ヒドン (02h)、システム (04h)、アーカイブ (20h) ビットのみが変更可能です。 ボリューム、サブディレクトリ属性は本ファンクションコールで変更できません。
入力時に AL が 3(パスワードモード設定)の場合、ファイルのパスワードモードが変更され、これは任意ですが、新規のパスワードが割り当てられます。 CX 中の以下のビットがパスワード制御に使用されます。
ビット | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
内容 | PW | 0 | 0 | 0 | R | W | E | D | R | W | E | D | R | W | E | D |
区分 | World | Group | Owner |
PW が 1 の場合、そのファイルもしくはディレクトリに、新規のパスワードが割り当てられます。 パスワードは現行 DTA アドレスの先頭 8 バイトが使われます(訳注 : 原文は "the current DMA address" になってました。たぶん DTA のことだと思う…)。 ビット R、W、E、D は、ファイルのリード(R)、ライト(W)、実行(E)、削除(D)アクセスをパスワードで制御するかどうかを指定します。 ビット E は FlexOS との互換性のためにサポートされ、ビット R と連動して扱われます。 DR-DOS の以前のリリースではオーナー ID とグループ ID はサポートされておらず、そのためパスワードモード設定の際は、(world, group, owner の)3つすべてのビットフィールドに同じアクセス制限値を設定すべきです。
R, W, D のビットは、ファイルやディレクトリに対し、三段階のパスワード保護を提供します。
R | 保護の最高レベルであり、パスワード発行までは誰からのファイルリードも禁じる。 |
W | その次の保護レベル。 ファイルは表示可能だが、パスワードなしには変更できない。 編集、コピー、リネーム、削除を制限する。 |
D | 保護の最下レベル。 ファイルは表示、変更可能だが、削除もしくはリネームにはパスワードが必要。 |
キャリーフラグがセットされている場合、AX に 2、3、もしくは 5 を返します。 エラーコードの定義に関しては Chapter 5 を参照してください。
Device I/O Control
キャラクタデバイスやブロックデバイスからの入出力情報を取得、もしくは設定します。 行われる処理は、入力時に AL レジスタに与えられる内容に依存します。
AL の値 | 処理内容 |
---|---|
00h | デバイス情報取得 |
01h | デバイス情報設定 |
02h | キャラクタデバイスからコントロール文字列受信 |
03h | キャラクタデバイスへコントロール文字列送信 |
04h | ブロックデバイスからコントロール文字列受信 |
05h | ブロックデバイスへコントロール文字列送信 |
06h | デバイスが入力準備をできているかどうか、直接チェックすることをアプリケーションに許可 |
07h | デバイスが出力準備をできているかどうか、直接チェックすることをアプリケーションに許可 |
08h | ブロックデバイス上のメディアがリムーバブル(交換可能)かどうかチェック |
09h | デバイスがネットワーク接続かどうか判別 |
0Ah | ファイルハンドルがローカルデバイスを参照しているか、それともネットワークデバイスを参照しているかチェック |
0Bh | シェアリング・リトライとロックリソースコンクリフトの制御 |
0Ch | キャラクタデバイスへのジェネリック IOCTL -- コードページ切り替えのサポート |
0Dh | ブロックデバイスへのジェネリック IOCTL -- デバイスドライバにブロックデバイスのファンクション実行を要求することをアプリケーションに許可 |
0Eh | 論理ドライブマップ取得 -- ひとつのブロックデバイスに複数の論理ドライブが割り当てられているか、使用される最終ドライブはどれかのチェック |
0Fh | 論理ドライブマップ設定 -- ブロックデバイス上で使う次の論理ドライブ番号を設定 |
10h | デバイスドライバが、指定した IOCTL ファンクションをサポートしているかどうか判別 |
11h | 与えられたドライブが、指定した IOCTL ファンクションをサポートしているかどうか判別 |
各処理の入力および戻り値の完全な記述は Appendix A. デバイス入出力制御(IOCTL) 中にあります。
Query Generic IOCTL |
||
キャラクタデバイスがジェネリック IOCTL をサポートしているか判別 | ||
AX | 4410h | |
BX | デバイスハンドル | |
CH | カテゴリコード | |
CL | ファンクションコード | |
戻り値 | ||
AX |
キャリーフラグがクリアされている場合、ファンクションは成功 AX = 000h ならば IOCTL サポート キャリーフラグがセットされている場合、エラー AL = 01h ならば IOCTL は使用不能 |
Query Generic IOCTL |
||
ブロックデバイスがジェネリック IOCTL をサポートしているか判別 | ||
AX | 4411h | |
BL | ドライブ番号 (訳注 : 0 = デフォルト、1 = A:、2 = B: ...) | |
CH | カテゴリコード | |
CL | ファンクションコード | |
戻り値 | ||
AX |
キャリーフラグがクリアされている場合、ファンクションは成功 AX = 000h ならば IOCTL サポート キャリーフラグがセットされている場合、エラー AL = 01h ならば IOCTL は使用不能 |
Duplicate a File Handle |
||
すでに存在するファイルハンドルを複製 | ||
AH | 45h | |
BX | ファイルハンドル | |
戻り値 | ||
AX | キャリーフラグがセットされていない場合、新しいファイルハンドル |
入力時に BX に格納されたファイルハンドルの複写を返します。 複写したハンドルを使って、クローズと再オープンのオーバヘッドなしにファイルのディレクトリエントリを更新できます。 一例として、複写したハンドルのファイルクローズ (3Eh) はバッファフラッシュとディレクトリエントリ更新を発生させ、その一方で元のファイルハンドルは読み書きオープン状態を維持しています。 複写ハンドルは同じディレクトリの、同じファイルに連動しています。 どちらかのハンドルのリード/ライトポインタをファイルリード (3Fh)、ファイルライト (40h)、ファイルポインタ移動(シーク) (42h) で動かした場合、もう一方のファイルハンドルのポインタも移動します。
リターン時、キャリーフラグがセットされていた場合、AX にエラーコード 4 もしくは 6 を返します。 エラーコード 4(ファイルハンドル不足)はオープンされているファイル数がシステムの制限を超えたことを示します。 エラーコード 6 は無効なファイルハンドルを示します。
Force a Duplicate of a Handle |
||
二重のファイルハンドルを、強制的にすでにあるファイルハンドルの同一入力として使用 | ||
AH | 46h | |
BX | すでに存在するファイルハンドル | |
CX | 第二ファイルハンドル | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
CX のファイルハンドルを、BX に格納されるハンドルと同じファイルに強制的に関連付けます。 CX に渡された、すでに存在するファイルハンドルがオープンしたファイルに関連付けられている場合、本ンファンクションは強制二重化を行う前にそのファイルをクローズします。 どちらかのハンドルのリード/ライトポインタをファイルリード (3Fh)、ファイルライト (40h)、ファイルポインタ移動(シーク) (42h) で動かした場合、もう一方のファイルハンドルのポインタも移動します。
本ファンクションは入出力のリダイレクトに使用できます。
(訳注 : なんかいまいちうまく訳せなかったので、罪滅ぼしもかねて、標準出力をリダイレクトする手順を例として書いてみます。
C言語のライブラリで言えば、ファイルハンドル複製 (45h) が dup に、ファイルハンドル強制二重化 (46h) が dup2 に相当します)
Get Current Directory |
||
指定ドライブのカレントディレクトリのフルパス名取得 | ||
AH | 47h | |
DL | ドライブ番号 (0 = デフォルト、1 = A:、2 = B:、以下同様) | |
DS | パス名のセグメント | |
SI | パス名のオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
DL で指定されたドライブのカレントディレクトリのフルパス名を、DS:SI で示される 64 バイトのユーザメモリに書き込みます。 パス名には、ドライブ名や先頭のバックスラッシュ(円記号)を含まず、00h で終わります。
DL が正しいドライブ番号を含まない場合、キャリーフラグをセットし、エラーコード 15(無効なドライブ指定)を AX レジスタに返します。
Allocate Memory |
||
指定パラグラフ数のメモリを呼び出し元プロセスに割り当て | ||
AH | 48h | |
BX | パラグラフ数 | |
戻り値 | ||
AX |
割り当てたメモリブロックのセグメント キャリーフラグがセットされている場合はエラーコード |
|
BX | 使用可能なメモリブロックの(訳注 : パラグラフ単位での)最大サイズ (エラー時) |
要求されたパラグラフ(16 バイト)数のメモリを割り当てます。 BX は要求パラグラフ数を格納します。
リターン時、ファンクションコールが成功した場合、AX は割り当てたメモリブロックのポインタを格納しています。 失敗した場合、AX はエラーコード 7 もしくは 8 を格納し、BX は使用可能なメモリの最大サイズをパラグラフ単位で格納します。
エラーコードの定義については Chapter 5 を参照してください。
Free Allocated Memory |
||
指定メモリを開放して、再び割り当てらてるようにする | ||
AH | 49h | |
ES | メモリブロックのセグメント | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
指定メモリを開放して、再割り当てできるようにします。 入力時、ES は開放しようとするメモリブロックのセグメントアドレスを格納します。
戻り値はありません。 キャリーフラグがセットされている場合、エラーコード 7 もしくは 9 を AX に返します。 エラーコードの定義については Chapter 5 を参照してください。
Modify Allocated Memory Blocks |
||
AH | 4Ah | |
BX | パラグラフ数 | |
ES | メモリブロックのセグメント | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
BX | 使用可能なメモリブロックの最大サイズ (エラー時) |
メモリブロック配置を、指定のサイズに変更します。 入力時、ES は割当済みメモリブロックのセグメントアドレスを格納し、BX は要求するメモリブロックサイズをパラグラフ(16 バイト)単位で格納します。 DR-DOS は BX の内容にしたがい、割り当て済みメモリブロックのサイズを増加、もしくは減少させます。
DR-DOS が割当済みブロックのサイズを大きくできない場合、サイズ変更可能な最大ブロックサイズを BX に返します。 キャリーフラグがセットされている場合、エラーコード 7, 8 もしくは 9 を AX に返します。 エラーコードの定義については Chapter 5 を参照してください。
(訳注 : BX のパラグラフ数だけ増減するのではなく、BX のパラグラフ数そのものに変更する、という点に注意してください。 また、C言語ライブラリの realloc などと異なり、メモリブロックの起点は移動されません。 したがって、たとえばサイズ変更するメモリブロックの直後のメモリがすでに割り当てられている場合、他の位置に空きメモリがどれだけあってもサイズ増加は失敗します。 )
Load and Execute |
||
プログラムをメモリにロード | ||
AH | 4Bh | |
AL | サブコード | |
ES | ロードパラメータブロック (LPB) のセグメント | |
BX | ロードパラメータブロック (LPB) のオフセット | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のセグメント | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
DS:DX で示される ASCIZ 文字列は、ロードするファイルの名前とファイル型(訳注 : たぶん拡張子のことだと思う)を含んでいなければなりません。 ドライブとパスは任意です。 (訳注 : 環境変数 PATH によるファイルサーチは行いませんので、カレントディレクトリ以外のプログラムを実行する場合はパスを指定する必要があるでしょう)
DR-DOS は使用可能なメモリをすべて現在のプログラムに割り当ててしまっているため、ファイルのロードにじゅうぶんなだけのメモリを開放しなければなりません。 本ファンクション実行の前に、割当メモリサイズ変更 (4Ah) ファンクションを使用して、割り当てメモリを現行プログラムの最低要求量に減らしてください。
ES:BX で指定されるロードパラメータブロック (LPB) のフォーマットは、それを使うファンクションの型に依存します。 Figure 4-3 と 4-5 を参照してください。
キャリーフラグをセットして処理を戻した場合、AX レジスタは以下の値 1, 2, 7, 8, 10 もしくは 11 を格納しています。 エラーコードの定義については Chapter 5 を参照してください。
入力時に AL が 00h の場合、プログラムセグメントのオフセット 0 に PSP を作成し、それに続いて、終了アドレスフィールドと Ctrl-Break アドレスフィールドのセットを司令します。 そして、プログラムセグメントのオフセット 100h に ASCIZ 文字列で示されるプログラムをロードし、制御を移します。 リターン時、全レジスタは変更されています。 スタックセグメント、スタックレジスタ、そして値の保存が必要なその他のレジスタを復元しなければなりません。
オフセット | 型 | 内容 |
---|---|---|
00h | word | 環境セグメント |
02h | dword | コマンドラインアドレス |
06h | dword | 第1 FCB アドレス |
0Ah | dword | 第2 FCB アドレス |
プログラムは、以下の 5 つのうちのひとつの方法で戻ることができます。
本ファンクションを呼び出したプロセスが制御を取り戻したとき、割り込みベクタ 22h, 23h, 24h は、子プロセス PSP の終了アドレス、Ctrl-Break アドレス、致命的エラーフィールドの値から戻されます。
親プロセスがインヘリタンスビットをゼロにしてオープンしたファイルハンドルはすべて、本ファンクションが作成した子プロセスのために複製されます。 (訳注 : ファイルオープンの説明参照) 新プロセスは、標準入力、標準出力、プリンタ、補助デバイスを呼び出し元プロセスから受けつぎます。 子プロセスはまた、呼び出し元プロセスのテキスト文字列、もしくは「環境」も受けつぎます。 LPB 中の環境セグメントフィールド(オフセット 00h)の値が 0000h の場合、子プロセスは環境をそのまま受けつぎます。 環境がいつでもパラグラフ(16 バイト)境界で配置されることに注意してください。
フィールド | 説明 |
---|---|
環境セグメント | PSP に渡す環境のセグメント |
コマンドラインアドレス |
PSP のオフセット 80h に置かれるコマンドラインのアドレス (訳注 : コマンドライン文字列は 128 バイト未満で、改行コード、つまり ODh で終了している必要があります) |
第1 FCB アドレス | PSP のオフセット 5Ch に置かれる FCB のアドレス |
第2 FCB アドレス | PSP のオフセット 6Ch に置かれる FCB のアドレス |
Figure 4-4 は環境文字列のフォーマットを図示しています。
ASCIZ 文字列 |
ASCIZ 文字列 その2 |
… |
ASCIZ 文字列 その n |
00h |
(訳注 : 最後の 00h の直後に、01h、00h の2バイトが続き、さらにその後にプログラムのパス名が ASCIZ 文字列で格納されています。 C言語で言うところの argv[0] に相当します。 )
入力時に呼び出し元プロセスが AL に 03h を渡した場合、DR-DOS は ASCIZ 文字列で示されるプログラムをロードしますが、PSP の設定やプログラムの実行開始を行いません。 Figure 4-5 の記述にある LPB によって指定されたセグメントに、プログラムをロードします。 プログラムのオーバレイ(上書き)ロードにはこのファンクションを使用してください。 (訳注 : ファンクション 4B00h と異なり、オーバレイロードは、割当済みメモリへのロードを前提にしています。 したがって、ロードするプログラムの使用メモリサイズを正しく把握しておく必要があります。 ロードしたプログラムが、あらかじめ割り当てておいたサイズ以上のメモリを使用した場合、システム破壊の恐れがあります。 ) Figure 4-6 は PSP を図示しています。
オフセット | 型 | 内容 |
---|---|---|
00h | word | オーバレイセグメント |
02h | word | リロケーションファクタ |
Table 4-3 は LPB フィールドの定義です。
フィールド | 定義 |
---|---|
オーバレイセグメント | ファイルをロードする位置のセグメント |
リロケーションファクタ | ロードするプログラムイメージに当てはまるセグメント補正値 |
(訳注 : オーバレイロードするファイルが、たとえば .COM ファイルのようなベタのバイナリの場合、ファイルがオーバレイセグメントの位置からそのまま読み込まれ、セグメントリロケーションの補正は行われないので、リロケーションファクタは 0000h でかまいません。 ファイルが EXE 形式の場合、EXE ファイルのリロケーションテーブル中にあるセグメントアドレスを、実際にロードしたアドレスにあわせて補正します。 基本的には、リロケーションファクタにオーバレイセグメントと同じ値を設定します。 )
オフセット | +00h | +01h | +02h | +03h | +04h | +05h | +06h | +07h |
---|---|---|---|---|---|---|---|---|
00h | INT 20h | メモリセグメント最上位 | 予約 | ディスパッチコード | ディスパッチオフセット | |||
08h | ディスパッチセグメント | 終了アドレス オフセット | 終了アドレス セグメント | Ctrk-Break アドレス オフセット | ||||
10h | Ctrk-Break アドレス セグメント | 致命的エラー オフセット | 致命的エラー セグメント | 予約 | ||||
18h | 予約 | |||||||
20h | 予約 | |||||||
28h | 予約 | 環境セグメント | 予約 | |||||
30h 〜 48h | 予約 | |||||||
50h | INT 21h | RETF | 予約 | |||||
58h | 予約 | 第1 FCB | ||||||
60h | 第1 FCB (つづき) | |||||||
68h | 第1 FCB (つづき) | 第2 FCB | ||||||
70h | 第2 FCB (つづき) | |||||||
78h | 第2 FCB (つづき) | 予約 | ||||||
80h | パラメータ長 | コマンドパラメータ | ||||||
88h 〜 F8h | コマンドパラメータ (つづき) |
Load Program |
||
プログラムをメモリへロード | ||
AH | 4Bh | |
AL | 01h | |
ES | ロードパラメータブロック (LPB) のセグメント | |
BX | ロードパラメータブロック (LPB) のオフセット | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のセグメント | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
プログラムをメモリにロードし、新しい PSP を作成しますが、新しいプログラムに制御を移しません。
(訳注 : LPB は Table 4-3 と同じ)
Set Execution State |
||
新規プログラムの実行準備 | ||
AX | 4B05h | |
DS | 実行ステートストラクチャのセグメント | |
DX | 実行ステートストラクチャのオフセット | |
戻り値 | ||
AX |
キャリーフラグがクリアされている場合、成功 -- AX = 000h キャリーフラグがセットされている場合、エラー -- AX = エラーコード |
新規プログラムの実行準備をします。 これには SETVER コマンドで指定される DR-DOS バージョン番号の設定が含まれます。
本ファンクションは、ファンクション 4B00h を横取りするプログラムで必要とされます。 リターン時、呼び出し元プログラムは可能な限り早く新規プログラムに制御を移さねばなりません。 新規プログラム起動の前に、DOS、BIOS その他のいかなるソフトウェア割り込みも呼び出してはなりません。
DR-DOS が HMA で動作している場合、A20 ラインは HMA をアクセス不可にするため OFF にされます。
オフセット | サイズ | 説明 |
---|---|---|
00h | WORD | 予約 (0000h) |
02h | WORD |
型フラグ bit 0 : プログラムは EXE bit 1 : プログラムはオーバレイ |
04h | DWORD | プログラムファイルの ASCIZ 名へのポインタ |
08h | WORD | 新規プログラムの PSP セグメント |
0Ah | DWORD | 新規プログラムの実行開始アドレス |
0Eh | DWORD | PSP を含めたプログラムサイズ |
Terminate a Process |
||
現行プロセスを終了し、呼び出し元プロセスに制御を戻す | ||
AH | 4Ch | |
AL | 終了コード | |
戻り値 | ||
なし |
現在のプロセスを終了し、プログラムのロードと実行 (4Bh) ファンクションを呼び出したプロセスに制御を戻します。 現在のプロセスがオープンしたファイルハンドルはすべてクローズします。 本ファンクションを呼び出すプロセスは、ファンクション実行の前に、AL レジスタに二進数の終了コードを渡すことができます。 そのとき親プロセスは、子プロセスの終了コード取得 (4Dh) ファンクションを通じて、終了コードを取り出すことができます。
Get Subprocess Return Code |
||
呼び出し元プロセスに完了コードを返す | ||
AH | 4Dh | |
戻り値 | ||
AX | 終了コード |
別プロセスのキーププロセス (31h) もしくはプロセス終了 (4Ch) で指定された二進数の終了コード、もしくは完了コードを返します。 AX レジスタの下位バイトはプロセスの終了によって指定された終了コードを格納します。 上位バイトは以下の値のうちのひとつを返します。
Find First Matching File |
||
指定 ASCIZ 文字列にマッチする最初のファイル名を検索 | ||
AH | 4Eh | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
CX | ファイルアトリビュート | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
入力時に DS:DX が指す ASCIZ 文字列で指定されたファイル名にマッチする、最初のファイルを探します。 ASCIZ 文字列はマッチさせるドライブ、パス、ファイル名を格納します。 ASCIZ 文字列のファイル名の位置には疑問符 ('?') を含めることもでき、疑問符はファイル名の同位置にあるどの文字ともマッチします。 (訳注 : アスタリスク * も使えます。)
CX レジスタは、検索に含めるファイルを指定するファイルアトリビュートを格納します。 検索時のファイルアトリビュートバイトの用法は最初のエントリ検索 (11h) 中で説明しています。 マッチするファイルが見つかった場合、呼び出し元プログラムの DTA に以下の情報を置きます。
オフセット | サイズ | 説明 |
---|---|---|
00h | 21 bytes | この次の、次のファイル検索で使うために予約 |
15h | byte | マッチファイルのアトリビュート |
16h | word | マッチファイル作成時刻 (訳注 : 2.3.1 標準 FCB の TIME フィールドに関する説明を参照) |
18h | word | マッチファイル作成日 (訳注 : 2.3.1 標準 FCB の DATE フィールドに関する説明を参照) |
1Ah | dword | マッチファイルのサイズ |
1Eh | 13 bytes | マッチファイルの名前と拡張子、その後に 00h (訳注 : ファイル名と拡張子は左づめされます) |
リターン時、キャリーフラグがセットされている場合、AX はエラーコード 2 もしくは 18 を格納しています。 エラーコード 2 はファイルが見つからないことを示します。 エラーコード 18 は、疑問符 ('?') を使用したときにマッチするファイルが見つからなかったことを示します。
Find Next Matching File |
||
次にマッチするファイルを検索 | ||
AH | 4Fh | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
それ以前の最初のファイル検索 (4Eh) もしくは 次のファイル検索 (4Fh) ファンクションで指定されたファイル名にマッチする、次のファイルを探します。 入力時、DTA は以前の最初のファイル検索 (4Eh) ファンクションが供給した情報を格納していなければなりません。
マッチするファイルが見つかった場合、呼び出し元プログラムの DTA を最初のファイル検索で上述したように設定します。 さらなるマッチファイルが見つからない場合、エラーコード 18(マッチするファイルがもうない)を AX に返します。
Get Verify State |
||
ベリファイステートの現行値を取得 | ||
AH | 54h | |
戻り値 | ||
AL |
00h -- ベリファイ OFF 01h -- ベリファイ ON |
ベリファイフラグの値を返します。 ベリファイが ON の場合 AL に 01h を、ベリファイが OFF の場合 00h を返します。
Rename a File |
||
AH | 56h | |
DS | 変更前ファイルパス名を表す ASCIZ 文字列のセグメント | |
DX | 変更前ファイルパス名を表す ASCIZ 文字列のオフセット | |
ES | 変更後ファイルパス名を表す ASCIZ 文字列のセグメント | |
DI | 変更後ファイルパス名を表す ASCIZ 文字列のオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
DS:DX が指す ASCIZ 文字列を使うことによって指定されるファイルをリネームし、文字列にはドライブ、パス、ファイル名を格納します。 ES:DI で渡される文字列は、パスと新しいファイル名を格納します。 二番目の (ES:DI) ASCIZ 文字列でドライブが指定されている場合、最初の (DS:DX) 文字列中で指定したものと同じでなければなりません。 リターン時にキャリーフラグがセットされている場合、AX はエラーコード 3, 5 もしくは 17 を格納しています。 エラーコードの定義は Chapter 5 を参照してください。
(念のための訳注 : 変更前のディレクトリと変更後のディレクトリが異なり、変更後のディレクトリがすでに存在する場合、ファイルは変更後のディレクトリに移動します。 つまり本ファンクションは、ファイルの名前変更とファイル移動を一度に行うことができます。 物理ドライブが異なる場合は自力でコピーしないといけないのですが… )
Get/Set Time and Date Stamps |
||
ファイル作成日時の取得/設定 | ||
AH | 57h | |
AL |
00h -- 日時取得 01h -- 日時設定 |
|
BX | ファイルハンドル | |
CX | 設定時刻(日時設定のみ) | |
DX | 設定日付(日時設定のみ) | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
CX | ファイルの時刻(日時取得のみ) | |
DX | ファイルの日付(日時取得のみ) |
ファイルが最後に変更された日付と時刻を取得、もしくは設定します。 入力時に AL が 01h を格納している場合、ファイルの時刻と日付を CX と DX に格納された値に設定します。 入力時に AL が 00h を格納している場合、ファイルの時刻と日付を CX と DX に返します。 日付と時刻のフォーマットは DOS ディレクトリエントリのためのフォーマットと同じものです。 (訳注 : このあとにフォーマットの説明があるのですが、ようするに標準 FCB で説明されている TIME フィールドや DATE フィールドと同じなので省略。 スマンス)
リターン時にキャリーフラグがセットされている場合、AX はエラーコード 1 もしくは 6 を格納しています。 エラーコードの定義に関しては Chapter 5 を参照してください。
Get Memory Allocation Strategy |
|||||||||||||||||||||
DR-DOS のメモリ割り当て法取得 | |||||||||||||||||||||
AH | 58h | ||||||||||||||||||||
AL | 00h | ||||||||||||||||||||
戻り値 | |||||||||||||||||||||
AX |
エラー時、キャリーフラグはセット AX = エラーコード 成功の場合、キャリーフラグはクリア AX = 現在のアロケーションストラテジ
|
(訳注 : うーん、いちおう訳注かましておいたほうがいいんでしょうか。
まあいいや。
アロケーションストラテジというのは要するに、メモリ割り当て要求が DOS に対して出されたとき、どういう方法で DOS が空きメモリを探すのかという方法です。
例として 00h から 02h までを説明すれば、
こんな感じでしょうか。
値
ストラテジ
説明
00h
first fit
メモリの空き領域を、コンベンショナル(基本)メモリの下位から上位の順で探し、要求されたサイズよりも大きい空き領域があった時点で、そこを確保する。
01h
best fit
基本メモリ中の空き領域をすべて調べ、要求されたメモリサイズにもっとも近い(そして大きい)空き領域を確保する。
02h
last fit
要求されたサイズよりも大きい基本メモリ中の空き領域のうち、もっとも上位のアドレスにメモリブロックを確保する。
ストラテジの値が 40h〜42h の場合、UMB 内部のみを調べます。
80h〜82h の場合、まず UMB 内部を調べ、UMB 内部にメモリ割り当てができないときは基本メモリ内を調べます。
)
Set Memory Allocation Strategy |
||
DR-DOS のメモリ割り当て法設定 | ||
AH | 58h | |
AL | 01h | |
BX | 新規アロケーションストラテジ (前述のファンクション参照) | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
Get Upper Memory Link State |
||
上位メモリブロック (UMB) とコンベンショナル(基本)メモリとの接続状態取得 | ||
AH | 58h | |
AL | 02h | |
戻り値 | ||
AL |
00h -- UMB が DR-DOS メモリチェインの一部ではない。 01h -- UMB は DR-DOS メモリチェインに含まれる。 |
Set Upper Memory Link State |
||
上位メモリブロック (UMB) とコンベンショナル(基本)メモリとの接続状態設定 | ||
AH | 58h | |
AL | 03h | |
BX |
0000h -- DR-DOS のメモリチェインから UMB を取りのぞく。 0001h -- UMB をメモリチェインに追加。 |
|
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
Get Extended Error |
||
拡張エラー情報を取得 | ||
AH | 59h | |
BX | 0000h | |
戻り値 | ||
AX | 拡張エラーコード | |
BH | エラークラス | |
BL | レスポンス(対応) | |
CH | リソース(エラー発生箇所) |
キャリーフラグをセットしてエラーを返す INT 21h ファンクションコール、INT 24h エラーハンドラ、そして AL レジスタに FFh を返す FCB ファンクションコールから、さらに多くのエラー情報を得るために、本ファンクションを呼び出すことができます。 DX, SI, DI, ES, CL, DS レジスタの内容はリターン時に破壊されます。
BH レジスタの内容は、エラータイプの詳細を示します。
値 | 説明 |
---|---|
1 |
資源不足
Out of Resource (ディスク、メモリ)容量、I/O チャンネル、その他もろもろが不十分。 |
2 |
一時的状況
Temporary Situation 特定の回復措置なしで解決する一時的エラー。 (訳注 : よくわからんのですが、たとえばファイルがロックされているといった状況らしい) |
3 |
権限
Authorization アクセス許可にまつわる問題。 |
4 |
内部
Internal システムソフトウェアのエラー。 ユーザの問題やシステムの障害ではなく、システムソフトウェアのバグの疑いがある。 |
5 |
ハードウェア障害
Hardware Failure 主要な問題。 ユーザプログラムの誤りではない。 |
6 |
システム障害
System Failure システムソフトウェアの重大な障害で、おそらくは構成ファイルに伴ってのもの。 |
7 |
アプリケーションプログラムのエラー
Application Program Error たとえば複数のプロセスが同じファイルをオープンしようとしているといったような。 |
8 |
ファイルもしくはアイテムが見つからない
Not Found ファイルもしくはアイテムが見当たらない。 |
9 |
誤ったフォーマット
Bad Format 型が無効、フォーマットが無効、もしくは他の何かしらが無効もしくは不適切。 |
10 |
ロック
Locked ファイルもしくはアイテムがロックされている。 |
11 |
メディア
Media メディアの問題。 間違ったディスクを入れた。 ディスクに不良箇所がある。 |
12 |
すでに存在
Already Exist すでに存在するアイテムを使おうとした。 |
13 |
不明
Unknown 分類不能、もしくは分類不適当。 |
エラー状況に対する推奨対応は、BL に以下のように示されます。
値 | 説明 |
---|---|
1 |
リトライ
Retry 何度かリトライし、プログラムを続行するか中断するかユーザに決定させるプロンプトを出す。 |
2 |
遅延リトライ
Delay Retry そのつど休止しながら何度かリトライし、プログラムを続行するか中断するかユーザに決定させるプロンプトを出す。 |
3 |
ユーザ
User ユーザに再度入力をうながす。 システムコール中で使われるパラメータをユーザがミスタイプし、再入力を要求されるべき状態。 DR-DOS は、プログラムによって直接供給される値のためにはリトライを要求しない。 |
4 |
アボート(中止)
Abort きちんと後始末をしてアプリケーションを終了する。 アプリケーションは続行できないが、システムは整然と終了する。 |
5 |
即時中止
Immediate Exit 後始末なしにアプリケーション中断。 ファイルクローズやインデクス更新なしに、ただちにアプリケーションは放棄される。 |
6 |
黙殺
Ignore 無視。 |
7 |
ユーザ介入後にリトライ
Retry After User Intervention 操作をリトライする前に、プリンタがオンラインであることをチェックする(訳注 : あるいはディスクを入れ替える)、といった処置をユーザが行わねばならない。 |
以下の値は CH に格納され、エラーの要因となった物理リソースの詳細を示します。
値 | 説明 |
---|---|
1 |
不明
不特定。 不適当。 |
2 |
ブロックデバイス
大容量ランダムアクセスストレージに関連 |
3 |
ネット
ネットワークに関連 |
4 |
シリアルデバイス
シリアル(キャラクタ)デバイスに関連 |
5 |
メモリ
メモリ (RAM) に関連 |
Create Unique File |
||
固有のファイル名でファイル作成 | ||
AH | 5Ah | |
CX | アトリビュート | |
DS | 円記号で終わる ASCIZ パスのセグメント | |
DX | 円記号で終わる ASCIZ パスのオフセット | |
戻り値 | ||
AX |
キャリーフラグがセットされている場合、エラーコード セットされていない場合、ファイルハンドル |
|
DS | ASCIZ パスに追加された、一時ファイル名のセグメント | |
DX | ASCIZ パスに追加された、一時ファイル名のオフセット |
与えられたパスの最後に固有のファイル名を追加し、そのファイル作成を作成します。 そのファイルがすでに存在する場合、新しいファイル名が作成され、処理が繰り返されます。 ファイルはリード/ライトアクセスのコンパチビリティモードでオープンされます。 ファイルは、プログラム終了時に自動的に削除されません。
(訳注 : 入力時に DS:DX で、一時ファイルを作成するパスを ASCIZ 文字列で指定します。 このとき ASCIZ 文字列にファイル名は含まず、円記号 ('\')、00h で終わらせます。 ファンクションが成功した場合、DS:DX で指定したパスの後ろに、DOS が作成したファイル名が追加されます。 したがって、入力時の DS:DX で指定される ASCIZ パスの後方には、ファイル名を格納する空き領域が必要です。 MS-DOS のリファレンスによると、ASCIZ パス終端の 00h の後ろに、さらに 13 バイトの領域が必要だそうです。 )
Create New File |
||
新しいファイルを作成 | ||
AH | 5Bh | |
DS | ASCIZ 文字列のセグメント | |
DX | ASCIZ 文字列のオフセット | |
CX | ファイルアトリビュート(属性) | |
戻り値 | ||
AX |
キャリーフラグがセットされている場合、エラーコード セットされていない場合、ファイルハンドル |
ファイル名がすでに存在する場合に失敗することを除いて、ファイル作成 (3Ch) と同じです。 ファイルはリード/ライトアクセスのコンパチビリティモードでオープンされます。
Lock/Unlock File Access |
||
オープンファイルの領域をロック/ロック解除 | ||
AH | 5Ch | |
AL |
00h -- ロック 01h -- ロック解除(アンロック) |
|
BX | ファイルハンドル | |
CX | ロック領域のオフセット(上位) | |
DX | ロック領域のオフセット(下位) | |
SI | ロック領域の長さ(上位) | |
DI | ロック領域の長さ(下位) | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
本ファンクションはリード拒否、もしくは拒否なしシェアリングモードでのみ使用されます。 限られた時間、他のプロセスがファイル領域にリード/ライトアクセスすることを拒否する、簡単な方法を提供します。 領域はファイルのどの地点にも設定できますが、本ファンクションが短時間のあいだに渡ってのみ使用されることを推奨します。 (訳注 : 要するに、ロックした領域はなるたけ早めにアンロックしなさい、ということらしいです。 )
Set Extended Error Information |
||
拡張エラーコード取得 (59h) で返される拡張エラーコードの設定 | ||
AX | 5D0Ah | |
DS | パラメータリストのセグメント | |
DX | パラメータリストのオフセット | |
戻り値 | ||
なし | (この後の拡張エラーコード取得 (59h) ファンクションで、パラメータリストのそれぞれのレジスタに対応する値が返される) |
オフセット | サイズ | 内容 |
---|---|---|
00h | WORD | AX |
02h | WORD | BX |
04h | WORD | CX |
06h | WORD | DX |
08h | WORD | SI |
0Ah | WORD | DI |
0Ch | WORD | DS |
0Eh | WORD | ES |
10h | WORD | 予約 (0000h) |
12h | WORD | コンピュータ ID (0000h = 現在のシステム) |
14h | WORD | プロセス ID (指定コンピュータの PSP セグメント) |
Get Machine Name |
||
マシン名を取得 | ||
AX | 5E00h | |
DS | マシン名を返すバッファ(16 バイトの ASCIZ 文字列)のセグメント | |
DX | マシン名を返すバッファのオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
CH |
マシン名の有効性 00h -- マシン名/番号は未定義 他 -- 定義されている |
|
CL | マシン名の NETBIOS 番号 |
(未訳)
Set Printer Setup |
||
プリンタファイル用のプリンタセットアップ文字列を設定 | ||
AX | 5E02h | |
BX | リダイレクションリストのインデクス番号 | |
CX | プリンタセットアップ文字列の長さ (最大 64 バイト) | |
DS | プリンタセットアップ文字列のセグメント | |
SI | プリンタセットアップ文字列のオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
(未訳)
Get Printer Setup |
||
プリンタファイル用のプリンタセットアップ文字列を取得 | ||
AX | 5E03h | |
BX | リダイレクションリストのインデクス番号 | |
ES | プリンタセットアップ文字列を受け取るバッファのセグメント | |
DI | プリンタセットアップ文字列を受け取るバッファのオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
CX | プリンタセットアップ文字列の長さ | |
ES:DI | プリンタセットアップ文字列 |
(未訳)
Get Redirection List Entry |
||
ネットワークリダイレクションのリストを取得 | ||
AX | 5F02h | |
BX | リダイレクションインデクス (最初が 0) | |
DS | ローカルデバイス名用バッファ(128 バイト)のセグメント | |
SI | ローカルデバイス名用バッファのオフセット | |
ES | ネットワーク名用バッファ(128 バイト)のセグメント | |
DI | ネットワーク名用バッファのオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
BH |
デバイスステータス Bit0 = 0 -- デバイス有効 Bit0 = 1 -- デバイス無効 Bit1〜7 予約 |
|
BL |
デバイスタイプ 03h -- プリンタ 04h -- ファイル |
|
CX | ユーザパラメータ | |
DX | 内容は破壊される | |
BP | 内容は破壊される | |
DS:SI | ローカル名 | |
ES:DI | ネットワーク名 |
(未訳)
Redirect Device |
||
リダイレクションリストのエントリ設定 | ||
AX | 5F03h | |
BL |
デバイスタイプ 03h -- プリンタ 04h -- ファイル |
|
CX | 呼び出し元の保存値(ユーザパラメータ) | |
DS | ローカルデバイス名のセグメント | |
SI | ローカルデバイス名のオフセット | |
ES | ネットワークパスとパスワードのセグメント | |
DI | ネットワークパスとパスワードのオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
(未訳)
Cancel Redirection |
||
リダイレクションを取消 | ||
AX | 5F04h | |
DS | デバイス名もしくはパスのセグメント | |
SI | デバイス名もしくはパスのオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
(未訳)
Get Program Segment Prefix Address |
||
現行 PSP アドレス取得 | ||
AH | 62h | |
戻り値 | ||
BX | 現行 PSP のセグメントアドレス |
Get Extended Country Information |
||
国コードに関する、より多くの情報を取得 | ||
AH | 65h | |
AL | 1, 2, 4, 5, 6, 7 のいずれか、求める情報による | |
BX | 対象コードページ (-1 = アクティブな CON デバイス) | |
DX | 対象国コード (-1 = デフォルト) | |
CX | 返される情報量 (最小値 : 5) | |
ES | 情報を返されるバッファのセグメント | |
DI | 情報を返されるバッファのオフセット | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
ES:DI | 拡張国別情報テーブル |
国コードとコードページは、正しい組み合わせでなければなりません。 そうでない場合は AX レジスタにエラーコード 2(ファイルが見つからない)が返されます。 CX で要求された分よりも多くの情報が提供される場合、エラーが出ることはなく、情報は切り詰められます。 AL の値は、提供する情報を確定します。
デフォルトの国コードとコードページの情報以外のものを取得するには NLSFUNC のロードが必要なことに注意してください。
Figure 4-9 は、AL が 01h のときの国別情報テーブルの格納結果を図示しています。
AL が 02h のとき、結果は、1 バイトのファンクション ID (01h)、それに続いて大文字テーブルを指す 4 バイトダブルワードポインタです。 大文字テーブルは、テーブル長を表す 2 バイトのフィールド、それに続いて ASCII 文字を大文字化した値を格納した 128 バイトのテーブルです。
AL が 04h のとき、結果は、1 バイトのファンクション ID (04h)、それに続いてファイル名大文字テーブルを指す 4 バイトダブルワードポインタです。 ファイル名大文字テーブルは、テーブル長を表す 2 バイトのフィールド、それに続いて ASCII 文字を大文字化した値を格納した 128 バイトのテーブルです。
AL が 05h のとき、その国コードとコードページのためのファイル文字テーブルのアドレスを返します。
AL が 06h のとき、結果は、1 バイトのファンクション ID (06h)、それに続いて照合順列テーブルを指す 4 バイトのダブルワードポインタです。 照合順列テーブルは、テーブル長を表す 2 バイトのフィールド、それに続いて(訳注 : ソートの)順番に置かれた 256 個の ASCII 値テーブルです。
AL が 07h のとき、結果は、ダブルバイト文字セット (DBCS) テーブルを指す 4 バイトのダブルワードポインタです。 DBCS テーブルのフォーマットは Figure 4-10 に図示しています。 テーブルの各エントリはダブルバイト文字の先頭バイトになりうる文字コードの範囲を示しています。
オフセット | 型 | 内容 |
---|---|---|
00h | byte | 01h |
01h | word | バッファサイズ (オフセット 03h からの) |
03h | word | 国コード |
05h | word | コードページ |
07h | word | 日付フォーマット |
09h | 5 bytes | 通貨記号 |
0Eh | 2 bytes | 3桁 (1000) 単位のセパレータ記号 |
10h | 2 bytes | 小数点 |
12h | 2 bytes | 日付セパレータ記号 |
14h | 2 bytes | 時刻セパレータ記号 |
16h | byte | 通貨形式 |
17h | byte | 通貨表示桁 |
18h | byte | 時刻形式 |
19h | dword | 大文字変換呼び出しアドレス |
1Dh | 2 bytes | データリストセパレータ記号 |
1Fh | 10 bytes | (予約済) |
オフセット | 型 | 内容 |
---|---|---|
00h | word | テーブル長 (オフセット 02h からの) |
02h | byte | START_0 |
03h | byte | END_0 |
04h | byte | START_1 |
05h | byte | END_1 |
… | ||
(n+1) * 2 | byte | START_n |
(n+1) * 2 + 1 | byte | END_n |
(n+2) * 2 | byte | 00h |
(n+2) * 2 + 1 | byte | 00h |
たとえば、コードページ 932、国コード 81(日本)の DBCS テーブルは以下のようになります。
オフセット | 型 | 内容 |
---|---|---|
00h | word | 06h |
02h | byte | 81h |
03h | byte | 9Fh |
04h | byte | E0h |
05h | byte | FCh |
06h | byte | 00h |
07h | byte | 00h |
81h から 9Fh の中に含まれる、もしくは E0h から FCh の中に含まれる値は、有効な漢字先導バイト (lead byte) であり、それは、DBCS 文字の先頭バイトです。
Character Capitalization |
||
国別情報に依存した大文字化 | ||
AH | 65h | |
AL |
サブコード
(20h〜22h) 20h -- 1文字だけ大文字化 21h -- 指定文字数を大文字化 22h -- ASCIZ 文字列を大文字化 |
|
DL | 大文字化する文字 (AL = 20h の場合) | |
DS | 文字列のセグメント (AL = 21h, 22h) | |
DX | 文字列のセグメント (AL = 21h, 22h) | |
CX | 文字数 (AL = 21h) | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
DL | 大文字化された文字 (AL = 20h の場合) |
Get/Set Global Code Page |
||
現行国のコードページを設定/取得 | ||
AH | 66h | |
AL |
サブコード 01h -- グローバルコードページの取得 02h -- グローバルコードページの設定 |
|
BX | 設定するコードページ (AL = 02h の場合) | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード | |
BX | グローバルコードページ (AL = 01h の場合) | |
DX | DOS システムのデフォルトコードページ (AL = 01h の場合) |
本ファンクションは、グローバルコードページ設定時、正しいコードページデータを COUNTRY.SYS から読み出し、国情報データ領域に配置します。 新コードページの SELECT コマンド(訳注 : Appendix A 参照。ってまだ訳してないけど)はそのとき、コードページ切り替えをサポートするすべてのデバイス(ドライバ)で実行されます。 デバイスは CONFIG.SYS 中での定義によって決定されます。
デバイスが SELECT コマンドの実行に失敗した場合、AX にエラーコード 65h を返し、キャリーフラグがセットされます。
コードページが現在の国コードで有効ではない場合、もしくは COUNTRY.SYS ファイルがオープンできない、読み込めない場合、AX にエラーコード 02h を返し、キャリーフラグがセットされます。
Set Handle Count |
||
プロセスに 20 をこえるファイルのオープンを認める | ||
AH | 67h | |
BX | オープンを許可するハンドル数 | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
プロセスがオープンを許可するファイルハンドルの最大数を変更するために用いられます。 拡張されたハンドルリストを格納するため、割当メモリサイズ変更 (4Ah) ファンクションを使用して、余分なメモリを開放しておかねばなりません。
ハンドル要求数が 20 未満の場合、要求数は 20 に切り上げられます。
Commit File |
||
ファイルのバッファドデータをデバイスに書き込む | ||
AH | 68h | |
BX | ファイルハンドル | |
戻り値 | ||
AX | キャリーフラグがセットされている場合、エラーコード |
オープンされているファイルのディレクトリエントリを更新し、そのファイルに関連するデータバッファと FAT バッファをフラッシュします。 ファイルをクローズして再オープンするのと同様の効果がありますが、本ファンクションは、たとえばマルチユーザ・ネットワーク環境での、より確実なファイル変更法を提供します。
Extended Open/Create |
||
以前よりある、ファイルオープン/作成ファンクションを一体化 | ||
AH | 6Ch | |
BL | アクセスコード (ファイル作成 での AL と同じ) | |
BH |
フラグ bit6 -- ライト毎に自動コミット bit5 -- エラー時に INT 24h を実行せず、エラーを返す |
|
CX | アトリビュート | |
DL |
bit7-4 ファイル非存在時の動作 0000 -- ファンクション失敗 0001 -- 作成 bit3-0 ファイル存在時の動作 0000 -- ファンクション失敗 0001 -- オープン 0010 -- ファイルリプレース/オープン |
|
DH | 予約 (00h) | |
DS | ASCIZ ファイル名のセグメント | |
SI | ASCIZ ファイル名のセグメント | |
戻り値 | ||
AX |
キャリーフラグがセットされている場合、エラーコード セットされていない場合、ファイルハンドル |
|
CX |
キャリーフラグがセットされていない場合、ステータス 01h -- ファイルがオープンされた 02h -- ファイルは作成された 03h -- ファイルはリプレースされた |