[Front] [Prev Chapter] [Next Chapter] [in English]

DR-DOS のシステムコール


本セクションは 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 セグメントのアドレスを入れておかねばなりません。

NOTE:

本ファンクションコールは新しい(訳注 : 要するに 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 レジスタに返します。

補助デバイス出力 (04h)
Auxiliary Output
標準補助デバイスに 1 バイト書き込み
入力パラメータ
AH 04h
DL 出力値
戻り値
なし

DL レジスタの内容を標準補助デバイスに書き込みます。

プリンタ出力 (05h)
Printer Output
標準プリンタデバイスに 1 文字出力
入力パラメータ
AH 05h
DL ASCII 文字
戻り値
なし

DL レジスタの内容を標準プリンタデバイスに書き込みます。

直接コンソール入出力 (06h)
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) 参照)

エコーなし直接コンソール入力 (07h)
Direct Console Input Without Echo
標準入力デバイスからエコーなしで直接コンソール入力
入力パラメータ
AH 07h
戻り値
AL ASCII 文字もしくは 00h(拡張 ASCII コードの先頭バイト)

呼び出し元プロセスの標準入力デバイスから 1 文字読み取り、AL レジスタに返します。 入力デバイスに文字がない場合、呼び出しプロセスに戻る前に文字入力を待ちます。

呼び出し元プロセスが拡張 ASCII コード文字を読み出したいときは、本ファンクションを2回呼び出さねばなりません。 AL レジスタに 00h を返した場合は、それに続くファンクションコールが拡張アスキーコード文字を返すことを示しています。 (訳注 : キーボード入力 (01h) 参照)

エコーなし直接コンソール入力ファンクションは、コンソールからの Ctrl-Break や Ctrl-PrtSc をチェックしません。

エコーなしコンソール入力 (08h)
Console Input Without Echo
標準入力デバイスからのエコーなし文字入力
入力パラメータ
AH 08h
戻り値
AL ASCII 文字もしくは 00h(拡張 ASCII コードの先頭バイト)

呼び出し元プロセスの標準入力から 1 文字読み取り、AL レジスタに返します。 文字が読みだし状態にない場合は、元プロセスに戻る前に文字を待ちます。

Ctrl-Break を検出した場合、INT 23h を実行します。 呼び出し元プロセスが拡張 ASCII コード文字を読み出したいときは、本ファンクションを2回呼び出さねばなりません。 AL レジスタに 00h を返した場合は、それに続くファンクションコールが拡張アスキーコード文字を返すことを示しています。 (訳注 : キーボード入力 (01h) 参照)

文字列出力 (09h)
Print String
標準出力デバイスへの文字列送信
入力パラメータ
AH 09h
DS 文字列のセグメントアドレス
DX 文字列のオフセットアドレス
戻り値
なし

DS:DX で始まり、$ 文字 (24h) で終わる ASCII 文字列を標準出力デバイスに送ります。 文字列がバックスペース文字 (08h) を含む場合、カーソルを左にひとつ分移動させます。 (訳注 : コンソールドライバ側の仕様に依存します。コンソール出力 (02h) 参照)

ユーザが Ctrl-Break を入力した場合、文字列をコンソールに出力後に INT 23h を実行します。

(訳注 : $ 文字そのものは出力できません。もし $ 文字を表示したい場合には、別のファンクションを使う必要があります)

バッファコンソール入力 (0Ah)
Buffered Console Input
標準入力デバイスから入力バッファに文字読み込み
入力パラメータ
AH 0Ah
DS バッファのセグメントアドレス
DX バッファのオフセットアドレス
戻り値
なし

呼び出し元プロセスの標準入力デバイスから文字を読み取り、DS:DX レジスタで始まるアドレスの入力バッファに書き込みます。 Figure 4-1 に入力バッファのフォーマットを示します

Figure 4 1
コンソールバッファのフォーマット
オフセット 内容
00h MAX (バッファ内の最大文字数)
01h NCHARS (入力された文字数)
02h 文字列
MAX - 1 ODh

先頭バイト (MAX) は、バッファが保持できる最大文字数を指定します。 DR-DOS は受け取った文字数を 2 番目のバイト (NCHARS) にセットします。 NCHARS にはキャリッジリターン終端文字 (0Dh) は含まれていません。 入力デバイスから読み取られた文字は 3 番目のバイト(オフセット 02h)以降に書き込まれます。 キャリッジリターン (0Dh) を読み込んだとき、ファンクションはバッファへの書き込みを中止します。

入力バッファが MAX - 1 の文字で詰まったとき、キャリッジリターンが読み込まれるまで追加入力は無視され、ベル音を鳴らします。

Note: 文字入力時には DR-DOS の編集キーとコマンドラインヒストリが使えます。

標準入力ステータス検査 (0Bh)
Check Standard Input Status
標準入力デバイスのステータス取得
入力パラメータ
AH 0Bh
戻り値
AL FFh
もしくは 00h(文字がない場合)

標準入力デバイスに文字が用意されているときは、AL レジスタに FFh を返します。 00h を返す場合は、文字が用意されていません。 Ctrl-Break を検出したときは INT 23h を実行します。

バッファを空にして文字入力 (0Ch)
Character Input with Buffer Flush
先行入力バッファをフラッシュし、標準入力から文字読み込み
入力パラメータ
AH 0Ch
AL ファンクション番号
戻り値
AL 00h(入力ファンクションが実行されなかった場合)

標準入力デバイスの先行入力を破棄し、AL レジスタに書かれた番号のファンクションコールを呼び出します。 以下の番号のシステムコールに処理を渡すことができます。

01H - キーボード入力

06H - 直接コンソール入出力

07H - エコーなし直接コンソール入力

08H - エコーなしコンソール入力

0AH - バッファコンソール入力

ディスクリセット (0Dh)
Disk Reset
全ファイルバッファのフラッシュ
入力パラメータ
AH 0Dh
戻り値
AX エラーコード

変更があったバッファの内容をすべてディスクに書き込んで、全ファイルバッファをフラッシュします。 オープンしたままで、なおかつ長さが変更されているファイルのディレクトリ情報は更新しません。 (更新するにはファイルクローズ、もしくはファイルのコミット (68h) を使わねばなりません)

定義されたエラーコードは Chapter 5 を参照してください。

ディスク選択 (0Eh)
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: までの全ドライブが有効であるとは必ずしもいえないわけです)

FCB でファイルオープン (0Fh)
Open File
入出力操作のためのファイルオープン
入力パラメータ
AH 0Fh
DS オープンされていない FCB のセグメント
DX オープンされていない FCB のオフセット
戻り値
AL 00h -- 成功
FFh -- 失敗

(未訳)

FCB でファイルクローズ (10h)
Close File
読み/書き処理後のファイルクローズ
入力パラメータ
AH 10h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
戻り値
AL 00h -- 成功
FFh -- ディレクトリが更新されていない

(未訳)

最初のエントリ検索 (11h)
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 を含んでいます。

Table 4-1
ファイルアトリビュートバイト値
ビット アトリビュート
0 リードオンリー Read/Only
1 ヒドン(隠し)ファイル Hidden
2 システムファイル System
3 ボリュームラベル Volume Label
4 サブディレクトリ Subdirectory
5 アーカイブ(保存)ファイル Archive

アトリビュートバイトがゼロの場合、アトリビュートが何も設定されていない、もしくはリードオンリー、あるいはアーカイブ属性のセットされた、普通のファイルエントリのみを検索します。 ボリュームラベル、サブディレクトリ、ヒドン、システムファイルのエントリは返しません。

アトリビュートバイトがヒドン(ビット 1 をセット)、システムファイル(ビット 2 をセット)、サブディレクトリ(ビット 4 をセット)にセットされた場合、普通のファイルすべてに加え、指定した(複数ビット指定可)アトリビュートにマッチするエントリすべてを検索します。 ボリュームラベルを除くすべてのディレクトリエントリを見るには、アトリビュートバイトのビット 1,2,4 をセットします。

ビット 3 がセットされた場合、ディレクトリエントリのみを検索します。

次のエントリ検索 (12h)
Search for Next Entry
以前の検索で指定した FCB にマッチする、次のファイルを検索
入力パラメータ
AH 12h
DS オープンされていない FCB のセグメント
DX オープンされていない FCB のオフセット
戻り値
AL 00h -- マッチしたファイルを発見
FFh -- マッチしたファイルは見つからない

最初のエントリ検索ファンクションがあいまいファイル名のマッチを発見したあと、次のマッチを本ファンクションで検索できます。 あいまいファイル名は疑問符 ('?') を含むファイル名です。 入力パラメータと戻り値は最初のエントリ検索 (11h) ファンクションと同じです。

マッチするファイルを発見しなかった場合、AL には FFh が返されます。 実際のエラー状況を判別するには、拡張エラーコード取得 (59h) ファンクションを使用してください。

最初のエントリ検索と本ファンクションの間、もしくは本ファンクションを二度実行するその間には、いかなるディスク処理も実行しないでください。 これは DR-DOS が検索 FCB の予約領域に、検索続行に必要な情報を格納しているためです。 検索ファンクションを二度実行する間に入り込んだディスク処理が、この情報を上書きしてしまうでしょう。

FCB でファイル削除 (13h)
Delete File
ディスクファイルの削除
入力パラメータ
AH 13h
DS オープンされていない FCB のセグメント
DX オープンされていない FCB のオフセット
戻り値
AL 00h -- ファイルは削除された
FFh -- マッチするディレクトリエントリがない

(未訳)

FCB でシーケンシャルリード (14h)
Sequential Read
ディスクファイルからレコードを逐次読み込み
入力パラメータ
AH 14h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
戻り値
AL 00h -- 成功
01h -- ファイルの終わり (EOF) に遭遇。 データがレコードにない。
02h -- 1 レコードの読み取りに DTA の大きさが不十分。 DTA が小さすぎる。
03h -- ファイルの終わり (EOF) に遭遇。 レコードは部分的に読み込まれ、残りはゼロで埋められた。

(未訳)

FCB でシーケンシャルライト (15h)
Sequential Write
ディスクファイルへレコードを逐次書き込み
入力パラメータ
AH 15h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
戻り値
AL 00h -- 成功
01h -- ディスクフル。 処理はキャンセル。
02h -- DTA の大きさが不十分。 処理はキャンセル。

(未訳)

FCB でファイル作成 (16h)
Create File
ディスクファイルの作成
入力パラメータ
AH 16h
DS オープンされていない FCB のセグメント
DX オープンされていない FCB のオフセット
戻り値
AL 00h -- オープン
FFh -- 使用可能なディレクトリエントリがない。

(未訳)

FCB でファイルリネーム (17h)
Rename File
ディスクファイルのリネーム
入力パラメータ
AH 17h
DS 変更した FCB のセグメント
DX 変更した FCB のオフセット
戻り値
AL 00h -- ファイルはリネームされた
FFh -- ファイルがない、もしくはすでに同名のファイルが存在。

(未訳)

カレントディスク取得 (19h)
Current Disk
カレントデフォルトドライブ番号取得
入力パラメータ
AH 19h
戻り値
AL カレントドライブ番号

現在省略ドライブの番号を返し、ドライブ番号は 0 が A、1 が B、以下同様です。

ディスク転送アドレス (DTA) 設定 (1Ah)
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 セグメント終端を越えた、あるいはセグメントの開始位置をまたいだデータのリードやライトは行いません。

FAT 情報 (1Bh)
Allocation Table Address
デフォルトドライブの情報取得
入力パラメータ
AH 1Bh
戻り値
DS FAT-ID アドレスのセグメント
BX FAT-ID アドレスのオフセット
DX クラスタ数
AL クラスタあたりのセクタ数
CX 物理セクタの大きさ

デフォルトドライブについての情報を返します。 ファンクション終了時、DS:BX はデフォルトドライブのファイルアロケーションテーブル (FAT) 識別バイトを指しています。 DX はドライブのクラスタ数を格納しています。 AL はクラスタあたりのセクタ数を格納し、CX は物理セクタのサイズ(バイト数)を格納しています。

指定ドライブの FAT 情報 (1Ch)
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 で「クラスタ」なのにこっちで「アロケーションユニット」になっているのだろう。原文でそうなっているので一応こうしときますが。うーん)

デフォルトドライブのドライブパラメータブロック (DPB) 取得 (1Fh)
Get Drive Parameter Block for Default Drive
カレントドライブのディスクパラメータ取得
入力パラメータ
AH 1Fh
戻り値
AL 00h -- 成功
FFh -- 無効なドライブ
DS DPB アドレスのセグメント(成功時)
BX DPB アドレスのオフセット(成功時)

ファンクション 32h も参照してください。 このファンクションで DOS DPB のフォーマットを示しています。

FCB でランダムリード (21h)
Random Read
ディスクファイルからレコードのランダム読み込み
入力パラメータ
AH 21h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
戻り値
AL 00h -- 成功
01h -- ファイルの終わり (EOF) に遭遇。 データ無効。
02h -- DTA の大きさが不十分。 処理はキャンセル。
03h -- ファイルの終わり (EOF) に遭遇、一部を読み込み、残りはゼロで埋められた。

(未訳)

FCB でランダムライト (22h)
Random Write
レコードをディスクファイルへランダム書き込み
入力パラメータ
AH 22h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
戻り値
AL 00h -- 成功
01h -- ディスクフル、書き込みキャンセル。
02h -- DTA の大きさが不十分、処理はキャンセル

(未訳)

FCB でファイルサイズ取得 (23h)
File Size
ファイルサイズ取得
入力パラメータ
AH 23h
DS オープンされていない FCB のセグメント
DX オープンされていない FCB のオフセット
戻り値
AL 00h -- 成功
FFh -- マッチするエントリが見つからない

(未訳)

FCB のランダムレコード (RANDREC) 設定 (24h)
Set Random Record Field
ランダムレコードフィールドのファイル位置を設定
入力パラメータ
AH 24h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
戻り値
なし

(未訳)

割り込みベクタ設定 (25h)
Set Vector
割り込みベクタテーブル設定
入力パラメータ
AH 25h
DS 割り込みルーチンのセグメント
DX 割り込みルーチンのオフセット
AL 割り込み番号(16 進)
戻り値
なし

呼び出し元プロセスが渡す、割り込み番号 AL の割り込みベクタテーブルを、DS:DX のアドレスにセットします。 割り込みベクタ取得 (35h) の呼び出しによって、割り込みベクタテーブルの内容を調査できます。

新規 PSP 作成 (26h)
Create New Program Segment Prefix
入力パラメータ
AH 26h
DX セグメント番号
戻り値
なし

(未訳)

FCB でランダムブロックリード (27h)
Random Block Read
ディスクファイルから複数レコードのランダム読み込み
入力パラメータ
AH 27h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
CX レコード数
戻り値
AL 00h -- 成功
01h -- ファイルの終わり (EOF) に遭遇。 データ無効。
02h -- DTA の大きさが不十分。 処理はキャンセル。
03h -- ファイルの終わり (EOF) に遭遇、一部を読み込み、残りはゼロで埋められた。
CX 読み込んだレコード数

(未訳)

FCB でランダムブロックライト (28h)
Random Block Write
ディスクファイルへ複数レコードをランダム書き込み
入力パラメータ
AH 28h
DS オープンされている FCB のセグメント
DX オープンされている FCB のオフセット
CX レコード数
戻り値
AL 00h -- 成功
01h -- ディスクフル、書き込みキャンセル。
02h -- DTA の大きさが不十分、処理はキャンセル
CX 書き込まれたレコード数

(未訳)

ファイル名解析 (29h)
Parse Filename
指定ファイル名を解析し FCB を初期化
入力パラメータ
AH 29h
DS コマンドラインポインタのセグメント
SI コマンドラインポインタのオフセット
ES オープンされていない FCB のセグメント
DI オープンされていない FCB のオフセット
AL ビットのマップ
戻り値
DS 解析済ファイル名の次にくる文字のセグメント
SI 解析済ファイル名の次にくる文字のオフセット
ES 値を設定された FCB のセグメント
DI 値を設定された FCB のオフセット
AL 00h -- ワイルドカード文字 ('?', '*') は未使用
01h -- ファイル名もしくは拡張子にワイルドカード使用
FFh -- 無効なドライブ指定

(未訳)

日付取得 (2Ah)
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 までの数で、該当月の日数と指定年がうるう年かどうかを考慮したものです。

日付クロックが次の日に進むと、日付は自動的に修正されます。

日付設定 (2Bh)
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 までの数で、該当月の日数と指定年がうるう年かどうかを考慮したものです。

時刻取得 (2Ch)
Get Time
現在のシステム時刻取得
入力パラメータ
AH 2Ch
戻り値
CH 時 (0-23)
CL 分 (0-59)
DH 秒 (0-59)
DL 100 分の 1 秒 (0-99)

時、分、秒、100 分の 1 秒のシステム時刻を24時間時計で返します。 4 つの 8 ビット量で時刻を返します。 本ファンクションの戻り値を、プリント可能な書式へ容易に変換、もしくはプログラムがどれだけの間動いているか算出するといった計算目的で使用できます。

時刻設定 (2Dh)
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 を返します。

ベリファイフラグの設定 (2Eh)
Set/Reset Verify Switch
ディスク書き込み処理のベリファイフラグのセット/リセット
入力パラメータ
AH 2Eh
DL 00h
AL 00h -- ベリファイ OFF
01h -- ベリファイ ON
戻り値
なし

ベリファイが ON のとき、DR-DOS は現行アプリケーションが行うディスク書き込みをベリファイ(照合)します。 ベリファイフラグの状態取得にはファンクション 54h を使用してください。

ディスク転送アドレス (DTA) 取得 (2Fh)
Get Disk Transfer Address
ディスク転送エリア (DTA) アドレス取得
入力パラメータ
AH 2Fh
戻り値
ES 現在の DTA セグメント
BX 現在の DTA オフセット

ES:BX に現在のディスク転送エリア (DTA) アドレスを返します。 ディスク転送アドレス (DTA) 設定 (1Ah) ファンクションの呼び出しによって DTA アドレスを設定できます。 DTA についての記述は、2.3.4 ディスク転送エリア (DTA) 中にあります。

バージョン番号取得 (30h)
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) ファンクションを使用してください)

キーププロセス(常駐終了) (31h)
Keep Process
現在実行中プロセスの(常駐)終了
入力パラメータ
AH 31h
AL 終了コード
DX パラグラフ(16 バイト)単位でのメモリ量
戻り値
なし

呼び出し元プロセスを終了しますが、DX で示されるパラグラフ数のメモリを残します。 メモリは現在の PSP の先頭から保持されます。

プロセスによってオープンされたファイルは、本ファンクション実行時にはクローズされません。

AL レジスタに渡された二進数のエラーコード(あるいは終了コード)は、子プロセスの終了コード取得 (4Dh) ファンクションを通じて取り出すことができます。

ドライブパラメータブロック (DPB) 取得 (32h)
Get DOS Drive Parameter Block
指定ドライブのディスクパラメータの詳細を取得
入力パラメータ
AH 32h
DL ドライブ番号 (00h = デフォルト、01h = A:、以下略)
戻り値
AL 00h -- 成功
FFh -- 無効なドライブ
DS DPB のセグメント(成功時)
BX DPB のオフセット(成功時)

以下の表は DOS ドライブパラメータブロック (DPB) のフォーマットの記述です。

Table 4-2
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 チェック状態設定/取得 (33h)
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 レジスタに渡される値によって設定されます。

起動ドライブ取得 (3305h)
Get Boot Drive
システム起動ドライブの判別
入力パラメータ
AX 3305h
戻り値
DL 起動ドライブ (1 = A: ...)

本ファンクションは DOS の内部スタックをまったく使用しませんので、いつでも呼び出すことができます。

真のバージョン番号取得 (3306h)
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 で変更可能です。

割り込みベクタ取得 (35h)
Get Vector
指定した割り込みベクタのアドレス取得
入力パラメータ
AH 35h
AL 割り込み番号(16 進数)
戻り値
ES 割り込みルーチンアドレスのセグメント
BX 割り込みルーチンアドレスのオフセット

AL で指定される割り込み番号の、割り込みルーチンアドレスの CS:IP を ES:BX に返します。 割り込みベクタの設定には割り込みベクタ設定 (25h) ファンクションを使用してください。

ディスク残量取得 (36h)
Get Disk Free Space
ディスク残量情報の取得
入力パラメータ
AH 36h
DL ドライブ番号
戻り値
AX 1 クラスタ当たりのセクタ数
FFFFh -- 無効なドライブ番号
BX 使用可能なクラスタ残量
DX ドライブの総クラスタ数
CX 1 セクタ当たりのバイト数

指定ドライブの空き容量に関する情報を返します。 DL にはドライブ番号を格納し、ドライブ番号は 0 が現在のドライブ、1 が A:、2 が B:、以下同様です。 利用可能なクラスタの数を BX に、ドライブの総クラスタ数を DX に、セクタ当たりのバイト数を CX に、クラスタ当たりのセクタ数を AX に返します。

国別情報設定 (38h)
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

国別情報取得 (38h)
Get Country Dependent Information
国別情報の取得
入力パラメータ
AH 38h
AL FFh
BX 情報を取得する国コード
DS バッファのセグメント
DX バッファのオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

DS:DX で指定されるメモリブロックに、Figure 4-2 で示される国別情報を返します。 BX レジスタは要求する国を指定します。 国番号 0 は現在の国別情報を返します。

Figure 4-2
国別データの返されるブロック
オフセット 形式 内容
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 を参照してください。

サブディレクトリ作成 (39h)
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 を参照してください。

サブディレクトリ削除 (3Ah)
Remove a Subdirectory
指定パスの最深サブディレクトリ削除 (RMDIR)
入力パラメータ
AH 3Ah
DS ASCIZ 文字列のセグメント
DX ASCIZ 文字列のオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

DS:DX レジスタで示される ASCIZ 文字列のディレクトリを、ディレクトリ構造から削除します。 カレントディレクトリは削除できません。

削除されるディレクトリが空でない、もしくはいずれかのプロセスによるアクセス状態である場合はエラーコード 5 を返します。 ASCIZ 文字列が無効なパスを指定している場合はエラーコード 3 を返します。

カレントディレクトリ変更 (3Bh)
Change Current Directory
指定 ASCIZ 文字列にカレントディレクトリ設定 (CHDIR)
入力パラメータ
AH 3Bh
DS ASCIZ 文字列のセグメント
DX ASCIZ 文字列のオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

DS:DX で示される ASCIZ 文字列に、カレントディレクトリを設定します。 指定パスのディレクトリが存在しない場合、キャリーフラグをセットし、エラーコード 3(パスが見つからない)を AX レジスタに返します。

ファイル作成 (3Ch)
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) が使えることに注目してください。

ファイルオープン (3Dh)
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 あたりで調べてください)

ファイル共有には、関係する全プロセス間での厳密な協調操作が要求されます。 もしいずれかのプロセスが何らかのアクセスレベルを拒否するモードでファイルをオープンした場合、他のプロセスによるそれ以降の、そのアクセスレベルを必要とするファイルオープン要求は失敗します。 そのうえ、すでに他のプロセスでうまくいっているシェアリングモードでファイルをオープンしようとしても、必ず失敗してしまいます。

シェアリングモードつきでファイルをオープンすることの影響を肝に銘じておくべきでしょう。 特に、ファンクションが失敗する原因となる以下のような状況に注意してください。

拒否なしシェアリングモードは他プロセスへの制限をまったくかけません。

NOTE : ATTRIB コマンドを使ってリードオンリーに設定したファイルはいくつのプロセスからでも、コンパチビリティモード(リードアクセス)、拒否なし(リードアクセス)、あるいはライト拒否(リードアクセス)でオープンできます。 コンパチビリティモードでのオープンがファイルシェアリングコンフリクトのために失敗した場合、致命的エラーが生成されます。 エラーコードは「ドライブの準備ができていない (02h)」で、ファンクション 59h は「ファイルシェアリングコンフリクト (20h)」を返します。

(訳注 : ファイルシェアリングモードについての説明が個人的にいまいちわからなかったので、MS-DOS 方面のマニュアルだのを見てみると、だいたい以下のような感じでした。

自分で実際に確認してないので、どの程度に正しいのかはよくわかりません。 すまんす。 )

ファイルクローズ (3Eh)
Close a File Handle
指定されたファイルハンドルのクローズ
入力パラメータ
AH 3Eh
BX オープン、もしくは作成されたファイルのハンドル
戻り値
AX キャリーフラグがセットされている場合、エラーコード

指定されたファイルハンドルをクローズし、そのファイルに関連する内部バッファの内容をディスクに書き出し、ディレクトリを更新します。 キャリーフラグがセットされている場合、無効なファイルハンドルが指定されていることを示すエラーコード 6 を AX レジスタに返します。

NOTE : 使いおわったファイルは必ずクローズするようにしてください。

ファイルリード (3Fh)
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 か(もしくはエラーか)どうか調べる必要があるでしょう。 もっとも、ファイル相手でもそうした方がいいような気もしますが… )

ファイルライト (40h)
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) も参照のこと)

ファイル削除 (41h)
Erase a File from Directory
指定ファイルをディレクトリから削除
入力パラメータ
AH 41h
DS ASCIZ 文字列のセグメント
DX ASCIZ 文字列のオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

ファイル名に結び付いたディレクトリエントリを削除します。 DS:DX で示される ASCIZ 文字列のいかなる部分にも、疑問符 ('?') とアスタリスク ('*') のワイルドカード文字は使えません。

リードオンリーファイルは削除できません。 リードオンリーファイルを削除するには、まずファイルモード変更 (43h) ファンクションを使用してファイルアトリビュートを変更しなければなりません。

リターン時、キャリーフラグがセットされている場合、ファイルが見つからない、もしくはアクセス拒否を示すエラーコード 2 もしくは 5 を AX に返します。

ファイルポインタ移動(シーク) (42h)
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) から、指定されたオフセットを加えた位置へ、ポインタを動かす
この方法は、ファイルサイズの判定に使用することができます

ファイルモード変更 (43h)
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 を参照してください。

デバイス入出力制御 (IOCTL) (44h)
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) 中にあります。

ジェネリック IOCTL 照会(キャラクタデバイス) (4410h)
Query Generic IOCTL
キャラクタデバイスがジェネリック IOCTL をサポートしているか判別
入力パラメータ
AX 4410h
BX デバイスハンドル
CH カテゴリコード
CL ファンクションコード
戻り値
AX キャリーフラグがクリアされている場合、ファンクションは成功
AX = 000h ならば IOCTL サポート
キャリーフラグがセットされている場合、エラー
AL = 01h ならば IOCTL は使用不能

ジェネリック IOCTL 照会(ブロックデバイス) (4411h)
Query Generic IOCTL
ブロックデバイスがジェネリック IOCTL をサポートしているか判別
入力パラメータ
AX 4411h
BL ドライブ番号 (訳注 : 0 = デフォルト、1 = A:、2 = B: ...)
CH カテゴリコード
CL ファンクションコード
戻り値
AX キャリーフラグがクリアされている場合、ファンクションは成功
AX = 000h ならば IOCTL サポート
キャリーフラグがセットされている場合、エラー
AL = 01h ならば IOCTL は使用不能

ファイルハンドル複製 (45h)
Duplicate a File Handle
すでに存在するファイルハンドルを複製
入力パラメータ
AH 45h
BX ファイルハンドル
戻り値
AX キャリーフラグがセットされていない場合、新しいファイルハンドル

入力時に BX に格納されたファイルハンドルの複写を返します。 複写したハンドルを使って、クローズと再オープンのオーバヘッドなしにファイルのディレクトリエントリを更新できます。 一例として、複写したハンドルのファイルクローズ (3Eh) はバッファフラッシュとディレクトリエントリ更新を発生させ、その一方で元のファイルハンドルは読み書きオープン状態を維持しています。 複写ハンドルは同じディレクトリの、同じファイルに連動しています。 どちらかのハンドルのリード/ライトポインタをファイルリード (3Fh)、ファイルライト (40h)、ファイルポインタ移動(シーク) (42h) で動かした場合、もう一方のファイルハンドルのポインタも移動します。

リターン時、キャリーフラグがセットされていた場合、AX にエラーコード 4 もしくは 6 を返します。 エラーコード 4(ファイルハンドル不足)はオープンされているファイル数がシステムの制限を超えたことを示します。 エラーコード 6 は無効なファイルハンドルを示します。

ファイルハンドル強制二重化 (46h)
Force a Duplicate of a Handle
二重のファイルハンドルを、強制的にすでにあるファイルハンドルの同一入力として使用
入力パラメータ
AH 46h
BX すでに存在するファイルハンドル
CX 第二ファイルハンドル
戻り値
AX キャリーフラグがセットされている場合、エラーコード

CX のファイルハンドルを、BX に格納されるハンドルと同じファイルに強制的に関連付けます。 CX に渡された、すでに存在するファイルハンドルがオープンしたファイルに関連付けられている場合、本ンファンクションは強制二重化を行う前にそのファイルをクローズします。 どちらかのハンドルのリード/ライトポインタをファイルリード (3Fh)、ファイルライト (40h)、ファイルポインタ移動(シーク) (42h) で動かした場合、もう一方のファイルハンドルのポインタも移動します。

本ファンクションは入出力のリダイレクトに使用できます。

(訳注 : なんかいまいちうまく訳せなかったので、罪滅ぼしもかねて、標準出力をリダイレクトする手順を例として書いてみます。

  1. リダイレクト先のファイルをオープン、もしくは作成。
  2. 標準出力のハンドル (1) を複製し、複製したハンドルを保存しておく。
  3. BX にリダイレクト先ファイルの、CX に標準出力の (1) ハンドルを入れ、強制二重化ファンクション実行
  4. この時点で標準出力はリダイレクトされている。 標準出力ハンドルへの書き込みはリダイレクト先ファイルに出力される。
  5. リダイレクトの必要がなくなったら標準入力を元に戻す。 BX に 2. で保存しておいたハンドル、CX に標準出力 (1) のハンドルを入れ、強制二重化ファンクション実行。
  6. リダイレクト先のファイルハンドルと、2. で保存しておいたハンドルをクローズ。
C言語のライブラリで言えば、ファイルハンドル複製 (45h) が dup に、ファイルハンドル強制二重化 (46h) が dup2 に相当します)

カレントディレクトリ取得 (47h)
Get Current Directory
指定ドライブのカレントディレクトリのフルパス名取得
入力パラメータ
AH 47h
DL ドライブ番号 (0 = デフォルト、1 = A:、2 = B:、以下同様)
DS パス名のセグメント
SI パス名のオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

DL で指定されたドライブのカレントディレクトリのフルパス名を、DS:SI で示される 64 バイトのユーザメモリに書き込みます。 パス名には、ドライブ名や先頭のバックスラッシュ(円記号)を含まず、00h で終わります。

DL が正しいドライブ番号を含まない場合、キャリーフラグをセットし、エラーコード 15(無効なドライブ指定)を AX レジスタに返します。

メモリ割当 (48h)
Allocate Memory
指定パラグラフ数のメモリを呼び出し元プロセスに割り当て
入力パラメータ
AH 48h
BX パラグラフ数
戻り値
AX 割り当てたメモリブロックのセグメント
キャリーフラグがセットされている場合はエラーコード
BX 使用可能なメモリブロックの(訳注 : パラグラフ単位での)最大サイズ (エラー時)

要求されたパラグラフ(16 バイト)数のメモリを割り当てます。 BX は要求パラグラフ数を格納します。

リターン時、ファンクションコールが成功した場合、AX は割り当てたメモリブロックのポインタを格納しています。 失敗した場合、AX はエラーコード 7 もしくは 8 を格納し、BX は使用可能なメモリの最大サイズをパラグラフ単位で格納します。

エラーコードの定義については Chapter 5 を参照してください。

割当メモリ解放 (49h)
Free Allocated Memory
指定メモリを開放して、再び割り当てらてるようにする
入力パラメータ
AH 49h
ES メモリブロックのセグメント
戻り値
AX キャリーフラグがセットされている場合、エラーコード

指定メモリを開放して、再割り当てできるようにします。 入力時、ES は開放しようとするメモリブロックのセグメントアドレスを格納します。

戻り値はありません。 キャリーフラグがセットされている場合、エラーコード 7 もしくは 9 を AX に返します。 エラーコードの定義については Chapter 5 を参照してください。

割当メモリサイズ変更 (4Ah)
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 などと異なり、メモリブロックの起点は移動されません。 したがって、たとえばサイズ変更するメモリブロックの直後のメモリがすでに割り当てられている場合、他の位置に空きメモリがどれだけあってもサイズ増加は失敗します。 )

プログラムのロードと実行 (4Bh)
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)

入力時に AL が 00h の場合、プログラムセグメントのオフセット 0 に PSP を作成し、それに続いて、終了アドレスフィールドと Ctrl-Break アドレスフィールドのセットを司令します。 そして、プログラムセグメントのオフセット 100h に ASCIZ 文字列で示されるプログラムをロードし、制御を移します。 リターン時、全レジスタは変更されています。 スタックセグメント、スタックレジスタ、そして値の保存が必要なその他のレジスタを復元しなければなりません。

Figure 4-3
LPB -- プログラムのロードと実行

オフセット 内容
00h word 環境セグメント
02h dword コマンドラインアドレス
06h dword 第1 FCB アドレス
0Ah dword 第2 FCB アドレス

プログラムは、以下の 5 つのうちのひとつの方法で戻ることができます。

本ファンクションを呼び出したプロセスが制御を取り戻したとき、割り込みベクタ 22h, 23h, 24h は、子プロセス PSP の終了アドレス、Ctrl-Break アドレス、致命的エラーフィールドの値から戻されます。

親プロセスがインヘリタンスビットをゼロにしてオープンしたファイルハンドルはすべて、本ファンクションが作成した子プロセスのために複製されます。 (訳注 : ファイルオープンの説明参照) 新プロセスは、標準入力、標準出力、プリンタ、補助デバイスを呼び出し元プロセスから受けつぎます。 子プロセスはまた、呼び出し元プロセスのテキスト文字列、もしくは「環境」も受けつぎます。 LPB 中の環境セグメントフィールド(オフセット 00h)の値が 0000h の場合、子プロセスは環境をそのまま受けつぎます。 環境がいつでもパラグラフ(16 バイト)境界で配置されることに注意してください。

Table 4-3
LPB フィールド
フィールド 説明
環境セグメント PSP に渡す環境のセグメント
コマンドラインアドレス PSP のオフセット 80h に置かれるコマンドラインのアドレス
(訳注 : コマンドライン文字列は 128 バイト未満で、改行コード、つまり ODh で終了している必要があります)
第1 FCB アドレス PSP のオフセット 5Ch に置かれる FCB のアドレス
第2 FCB アドレス PSP のオフセット 6Ch に置かれる FCB のアドレス

Figure 4-4 は環境文字列のフォーマットを図示しています。

Figure 4-4
環境文字列のフォーマット
ASCIZ 文字列
ASCIZ 文字列 その2
ASCIZ 文字列 その n
00h

※合計 32k バイト以内

(訳注 : 最後の 00h の直後に、01h、00h の2バイトが続き、さらにその後にプログラムのパス名が ASCIZ 文字列で格納されています。 C言語で言うところの argv[0] に相当します。 )

オーバレイのロード (AL = 03h)

入力時に呼び出し元プロセスが AL に 03h を渡した場合、DR-DOS は ASCIZ 文字列で示されるプログラムをロードしますが、PSP の設定やプログラムの実行開始を行いません。 Figure 4-5 の記述にある LPB によって指定されたセグメントに、プログラムをロードします。 プログラムのオーバレイ(上書き)ロードにはこのファンクションを使用してください。 (訳注 : ファンクション 4B00h と異なり、オーバレイロードは、割当済みメモリへのロードを前提にしています。 したがって、ロードするプログラムの使用メモリサイズを正しく把握しておく必要があります。 ロードしたプログラムが、あらかじめ割り当てておいたサイズ以上のメモリを使用した場合、システム破壊の恐れがあります。 ) Figure 4-6 は PSP を図示しています。

Figure 4-5
LPB -- オーバレイのロード
オフセット 内容
00h word オーバレイセグメント
02h word リロケーションファクタ

Table 4-3 は LPB フィールドの定義です。

Table 4-4
LPB フィールド -- オーバレイのロード
フィールド 定義
オーバレイセグメント ファイルをロードする位置のセグメント
リロケーションファクタ ロードするプログラムイメージに当てはまるセグメント補正値

(訳注 : オーバレイロードするファイルが、たとえば .COM ファイルのようなベタのバイナリの場合、ファイルがオーバレイセグメントの位置からそのまま読み込まれ、セグメントリロケーションの補正は行われないので、リロケーションファクタは 0000h でかまいません。 ファイルが EXE 形式の場合、EXE ファイルのリロケーションテーブル中にあるセグメントアドレスを、実際にロードしたアドレスにあわせて補正します。 基本的には、リロケーションファクタにオーバレイセグメントと同じ値を設定します。 )

Figure 4-6
プログラムセグメントプレフィクス (PSP)
オフセット +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 コマンドパラメータ (つづき)

プログラムのロード (4B01h)
Load Program
プログラムをメモリへロード
入力パラメータ
AH 4Bh
AL 01h
ES ロードパラメータブロック (LPB) のセグメント
BX ロードパラメータブロック (LPB) のオフセット
DS ASCIZ 文字列のセグメント
DX ASCIZ 文字列のセグメント
戻り値
AX キャリーフラグがセットされている場合、エラーコード

プログラムをメモリにロードし、新しい PSP を作成しますが、新しいプログラムに制御を移しません。

(訳注 : LPB は Table 4-3 と同じ)

実行ステート設定 (4B05h)
Set Execution State
新規プログラムの実行準備
入力パラメータ
AX 4B05h
DS 実行ステートストラクチャのセグメント
DX 実行ステートストラクチャのオフセット
戻り値
AX キャリーフラグがクリアされている場合、成功 -- AX = 000h
キャリーフラグがセットされている場合、エラー -- AX = エラーコード

新規プログラムの実行準備をします。 これには SETVER コマンドで指定される DR-DOS バージョン番号の設定が含まれます。

本ファンクションは、ファンクション 4B00h を横取りするプログラムで必要とされます。 リターン時、呼び出し元プログラムは可能な限り早く新規プログラムに制御を移さねばなりません。 新規プログラム起動の前に、DOS、BIOS その他のいかなるソフトウェア割り込みも呼び出してはなりません。

DR-DOS が HMA で動作している場合、A20 ラインは HMA をアクセス不可にするため OFF にされます。

Table 4-5
実行ステートストラクチャ
オフセット サイズ 説明
00h WORD 予約 (0000h)
02h WORD 型フラグ
bit 0 : プログラムは EXE
bit 1 : プログラムはオーバレイ
04h DWORD プログラムファイルの ASCIZ 名へのポインタ
08h WORD 新規プログラムの PSP セグメント
0Ah DWORD 新規プログラムの実行開始アドレス
0Eh DWORD PSP を含めたプログラムサイズ

プロセス終了 (4Ch)
Terminate a Process
現行プロセスを終了し、呼び出し元プロセスに制御を戻す
入力パラメータ
AH 4Ch
AL 終了コード
戻り値
なし

現在のプロセスを終了し、プログラムのロードと実行 (4Bh) ファンクションを呼び出したプロセスに制御を戻します。 現在のプロセスがオープンしたファイルハンドルはすべてクローズします。 本ファンクションを呼び出すプロセスは、ファンクション実行の前に、AL レジスタに二進数の終了コードを渡すことができます。 そのとき親プロセスは、子プロセスの終了コード取得 (4Dh) ファンクションを通じて、終了コードを取り出すことができます。

子プロセスの終了コード取得 (4Dh)
Get Subprocess Return Code
呼び出し元プロセスに完了コードを返す
入力パラメータ
AH 4Dh
戻り値
AX 終了コード

別プロセスのキーププロセス (31h) もしくはプロセス終了 (4Ch) で指定された二進数の終了コード、もしくは完了コードを返します。 AX レジスタの下位バイトはプロセスの終了によって指定された終了コードを格納します。 上位バイトは以下の値のうちのひとつを返します。

最初のファイル検索 (4Eh)
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 は、疑問符 ('?') を使用したときにマッチするファイルが見つからなかったことを示します。

次のファイル検索 (4Fh)
Find Next Matching File
次にマッチするファイルを検索
入力パラメータ
AH 4Fh
戻り値
AX キャリーフラグがセットされている場合、エラーコード

それ以前の最初のファイル検索 (4Eh) もしくは 次のファイル検索 (4Fh) ファンクションで指定されたファイル名にマッチする、次のファイルを探します。 入力時、DTA は以前の最初のファイル検索 (4Eh) ファンクションが供給した情報を格納していなければなりません。

マッチするファイルが見つかった場合、呼び出し元プログラムの DTA を最初のファイル検索で上述したように設定します。 さらなるマッチファイルが見つからない場合、エラーコード 18(マッチするファイルがもうない)を AX に返します。

ベリファイフラグ取得 (54h)
Get Verify State
ベリファイステートの現行値を取得
入力パラメータ
AH 54h
戻り値
AL 00h -- ベリファイ OFF
01h -- ベリファイ ON

ベリファイフラグの値を返します。 ベリファイが ON の場合 AL に 01h を、ベリファイが OFF の場合 00h を返します。

ファイルリネーム (56h)
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 を参照してください。

(念のための訳注 : 変更前のディレクトリと変更後のディレクトリが異なり、変更後のディレクトリがすでに存在する場合、ファイルは変更後のディレクトリに移動します。 つまり本ファンクションは、ファイルの名前変更とファイル移動を一度に行うことができます。 物理ドライブが異なる場合は自力でコピーしないといけないのですが… )

ファイルのタイムスタンプ設定/取得 (57h)
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 を参照してください。

アロケーションストラテジ取得 (58h)
Get Memory Allocation Strategy
DR-DOS のメモリ割り当て法取得
入力パラメータ
AH 58h
AL 00h
戻り値
AX エラー時、キャリーフラグはセット
AX = エラーコード
成功の場合、キャリーフラグはクリア
AX = 現在のアロケーションストラテジ
AX アロケーションストラテジ
00h 基本メモリ最下位 low memory first fit
01h 基本メモリ最小 low memory best fit
02h 基本メモリ最上位 low memory last fit
40h UMB 最下位 high memory first fit
41h UMB 最小 high memory best fit
42h UMB 最上位 high memory last fit
80h UMB、それから基本メモリ最下位 first fit, try high then low memory
81h UMB、それから基本メモリ最小 best fit, try high then low memory
82h UMB、それから基本メモリ最上位 last fit, try high then low memory

(訳注 : うーん、いちおう訳注かましておいたほうがいいんでしょうか。 まあいいや。 アロケーションストラテジというのは要するに、メモリ割り当て要求が DOS に対して出されたとき、どういう方法で DOS が空きメモリを探すのかという方法です。 例として 00h から 02h までを説明すれば、
ストラテジ 説明
00h first fit メモリの空き領域を、コンベンショナル(基本)メモリの下位から上位の順で探し、要求されたサイズよりも大きい空き領域があった時点で、そこを確保する。
01h best fit 基本メモリ中の空き領域をすべて調べ、要求されたメモリサイズにもっとも近い(そして大きい)空き領域を確保する。
02h last fit 要求されたサイズよりも大きい基本メモリ中の空き領域のうち、もっとも上位のアドレスにメモリブロックを確保する。
こんな感じでしょうか。
ストラテジの値が 40h〜42h の場合、UMB 内部のみを調べます。 80h〜82h の場合、まず UMB 内部を調べ、UMB 内部にメモリ割り当てができないときは基本メモリ内を調べます。 )

アロケーションストラテジ設定 (5801h)
Set Memory Allocation Strategy
DR-DOS のメモリ割り当て法設定
入力パラメータ
AH 58h
AL 01h
BX 新規アロケーションストラテジ (前述のファンクション参照)
戻り値
AX キャリーフラグがセットされている場合、エラーコード

UMB リンクステートの取得 (5802h)
Get Upper Memory Link State
上位メモリブロック (UMB) とコンベンショナル(基本)メモリとの接続状態取得
入力パラメータ
AH 58h
AL 02h
戻り値
AL 00h -- UMB が DR-DOS メモリチェインの一部ではない。
01h -- UMB は DR-DOS メモリチェインに含まれる。

UMB リンクステートの設定 (5803h)
Set Upper Memory Link State
上位メモリブロック (UMB) とコンベンショナル(基本)メモリとの接続状態設定
入力パラメータ
AH 58h
AL 03h
BX 0000h -- DR-DOS のメモリチェインから UMB を取りのぞく。
0001h -- UMB をメモリチェインに追加。
戻り値
AX キャリーフラグがセットされている場合、エラーコード

拡張エラーコード取得 (59h)
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) に関連

一時ファイル作成 (5Ah)
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 バイトの領域が必要だそうです。 )

新規ファイル作成 (5Bh)
Create New File
新しいファイルを作成
入力パラメータ
AH 5Bh
DS ASCIZ 文字列のセグメント
DX ASCIZ 文字列のオフセット
CX ファイルアトリビュート(属性)
戻り値
AX キャリーフラグがセットされている場合、エラーコード
セットされていない場合、ファイルハンドル

ファイル名がすでに存在する場合に失敗することを除いて、ファイル作成 (3Ch) と同じです。 ファイルはリード/ライトアクセスのコンパチビリティモードでオープンされます。

ファイルアクセスのロック/ロック解除 (5Ch)
Lock/Unlock File Access
オープンファイルの領域をロック/ロック解除
入力パラメータ
AH 5Ch
AL 00h -- ロック
01h -- ロック解除(アンロック)
BX ファイルハンドル
CX ロック領域のオフセット(上位)
DX ロック領域のオフセット(下位)
SI ロック領域の長さ(上位)
DI ロック領域の長さ(下位)
戻り値
AX キャリーフラグがセットされている場合、エラーコード

本ファンクションはリード拒否、もしくは拒否なしシェアリングモードでのみ使用されます。 限られた時間、他のプロセスがファイル領域にリード/ライトアクセスすることを拒否する、簡単な方法を提供します。 領域はファイルのどの地点にも設定できますが、本ファンクションが短時間のあいだに渡ってのみ使用されることを推奨します。 (訳注 : 要するに、ロックした領域はなるたけ早めにアンロックしなさい、ということらしいです。 )

Note : SHARE がロードされていない場合、エラー 1(無効なファンクションコール)が返されます。

拡張エラー情報設定 (5D0Ah)
Set Extended Error Information
拡張エラーコード取得 (59h) で返される拡張エラーコードの設定
入力パラメータ
AX 5D0Ah
DS パラメータリストのセグメント
DX パラメータリストのオフセット
戻り値
なし (この後の拡張エラーコード取得 (59h) ファンクションで、パラメータリストのそれぞれのレジスタに対応する値が返される)
Table 4-6
DR-DOS パラメータリスト
オフセット サイズ  内容 
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 セグメント)

マシン名取得 (5E00h)
Get Machine Name
マシン名を取得
入力パラメータ
AX 5E00h
DS マシン名を返すバッファ(16 バイトの ASCIZ 文字列)のセグメント
DX マシン名を返すバッファのオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード
CH マシン名の有効性
00h -- マシン名/番号は未定義
他 -- 定義されている
CL マシン名の NETBIOS 番号

(未訳)

Note : 本ファンクションコールは、ネットワークプログラムがロードされている場合のみサポートされます。

プリンタセットアップ (5E02h)
Set Printer Setup
プリンタファイル用のプリンタセットアップ文字列を設定
入力パラメータ
AX 5E02h
BX リダイレクションリストのインデクス番号
CX プリンタセットアップ文字列の長さ (最大 64 バイト)
DS プリンタセットアップ文字列のセグメント
SI プリンタセットアップ文字列のオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

(未訳)

Note : 本ファンクションコールは、ネットワークプログラムがロードされている場合のみサポートされます。

プリンタセットアップ文字列取得 (5E03h)
Get Printer Setup
プリンタファイル用のプリンタセットアップ文字列を取得
入力パラメータ
AX 5E03h
BX リダイレクションリストのインデクス番号
ES プリンタセットアップ文字列を受け取るバッファのセグメント
DI プリンタセットアップ文字列を受け取るバッファのオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード
CX プリンタセットアップ文字列の長さ
ES:DI プリンタセットアップ文字列

(未訳)

Note : 本ファンクションコールは、ネットワークプログラムがロードされている場合のみサポートされます。

リダイレクションリストのエントリ取得 (5F02h)
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 ネットワーク名

(未訳)

Note : 本ファンクションコールは、ネットワークプログラムがロードされている場合のみサポートされます。

リダイレクションリストのエントリ設定 (5F03h)
Redirect Device
リダイレクションリストのエントリ設定
入力パラメータ
AX 5F03h
BL デバイスタイプ
03h -- プリンタ
04h -- ファイル
CX 呼び出し元の保存値(ユーザパラメータ)
DS ローカルデバイス名のセグメント
SI ローカルデバイス名のオフセット
ES ネットワークパスとパスワードのセグメント
DI ネットワークパスとパスワードのオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

(未訳)

Note : 本ファンクションコールは、ネットワークプログラムがロードされている場合のみサポートされます。

リダイレクションのキャンセル (5F04h)
Cancel Redirection
リダイレクションを取消
入力パラメータ
AX 5F04h
DS デバイス名もしくはパスのセグメント
SI デバイス名もしくはパスのオフセット
戻り値
AX キャリーフラグがセットされている場合、エラーコード

(未訳)

Note : 本ファンクションコールは、ネットワークプログラムがロードされている場合のみサポートされます。

PSP 取得 (62h)
Get Program Segment Prefix Address
現行 PSP アドレス取得
入力パラメータ
AH 62h
戻り値
BX 現行 PSP のセグメントアドレス

拡張国別情報取得 (65h)
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 に図示しています。 テーブルの各エントリはダブルバイト文字の先頭バイトになりうる文字コードの範囲を示しています。

Figure 4-9
拡張国別情報 (AL = 01h)
オフセット 内容
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 (予約済)

Figure 4-10
DBCS テーブル
オフセット 内容
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 文字の先頭バイトです。

大文字化 (6520h-6522h)
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 の場合)

グローバルコードページ設定/取得 (66h)
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 を返し、キャリーフラグがセットされます。

Note : グローバルコードページの変更するには、NLSFUNC がロードされていなければなりません。

ファイルハンドル数設定 (67h)
Set Handle Count
プロセスに 20 をこえるファイルのオープンを認める
入力パラメータ
AH 67h
BX オープンを許可するハンドル数
戻り値
AX キャリーフラグがセットされている場合、エラーコード

プロセスがオープンを許可するファイルハンドルの最大数を変更するために用いられます。 拡張されたハンドルリストを格納するため、割当メモリサイズ変更 (4Ah) ファンクションを使用して、余分なメモリを開放しておかねばなりません。

ハンドル要求数が 20 未満の場合、要求数は 20 に切り上げられます。

ファイルのコミット (68h)
Commit File
ファイルのバッファドデータをデバイスに書き込む
入力パラメータ
AH 68h
BX ファイルハンドル
戻り値
AX キャリーフラグがセットされている場合、エラーコード

オープンされているファイルのディレクトリエントリを更新し、そのファイルに関連するデータバッファと FAT バッファをフラッシュします。 ファイルをクローズして再オープンするのと同様の効果がありますが、本ファンクションは、たとえばマルチユーザ・ネットワーク環境での、より確実なファイル変更法を提供します。

拡張オープン/作成 (6Ch)
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 -- ファイルはリプレースされた


Copyright (c) 1993, 1997 Caldera, Inc All rights reserved.