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

API の使用

DR-DOS システムコールパラメータ

システムコールのエラー戻り値

FCB 指向のファイル管理

システムコール一覧


このセクションでは、アプリケーションプログラムから Caldera DR-DOS のファンクションコールと割り込みを使うために必要な情報を示します。

2.1 DR-DOS システムコールパラメータ

DR-DOS では、AH レジスタにファンクション番号を代入し、必要に応じて追加情報をその他のレジスタに入れ、しかる後 INT 21h を発行することによって、プロセスがファンクションを呼び出します。 DR-DOS が制御を得ると、スタックが DR-DOS 内部スタックに切りかわります。 個別の要求に応じて情報が返されない限り、AX 以外のレジスタは保持されます。 システムの割り込みを考慮し、ユーザのスタックサイズをユーザプログラム内部の必要量より 128 バイト以上多くしておくべきでしょう。

2.1.1 ASCIZ 入力文字列

Table 2-1 のシステムコールは、入力パラメータとして、DS:DX レジスタに ASCIZ 文字列のアドレスが必要です。 ASCIZ 文字列は、任意のドライブ文字とディレクトリパスを含めた ASCII 文字の並びです。 場合によっては、文字列にファイル名も含まれます。 ASCIZ 文字列はゼロ、もしくはヌルバイト (0h) で区切られています。 パス名はバックスラッシュ、もしくは円記号 (\) で区切られています。

Table 2 1
ASCIZ 文字列を必要とするシステムコール
番号(16進数) システムコール
39 サブディレクトリ作成 Create a Subdirectory
3A サブディレクトリ削除 Reemove a Subdirectory
3B カレントディレクトリ変更 Change Current Directory
3C ファイル作成 Create a File
3D ファイルオープン Open a File
41 ファイル削除 Erase a File from Directory
43 ファイルモード変更 Change File Mode
4B プログラムのロードと実行 Load or Execute a Program
4E 最初のファイル検索 Find First
56 ファイルリネーム Rename a File
5A 一時ファイル作成 Create Unique File
5B ファイル新規作成 Create New File

 

2.1.2 ファイルとデバイスハンドル

ファイル作成 (3Ch)、ファイルオープン (3Dh)、ファイルハンドル複製 (45h)、ファイル新規作成 (45h) といったファンクションでは、AX レジスタに 16 ビットの識別値を返します。 これを「ハンドル」と呼びます。 ハンドルはそれ以降、そのハンドルを返したシステムコールよって作成されるか開かれるかしたファイル、もしくはデバイスの識別に使われます。 Table 2-2 は標準デバイスに対応してあらかじめ定義されているハンドルの一覧です。 これらのハンドルは事前にデバイスを開いて割り付けることなく、プログラムで使用できます。

Table 2 2
標準デバイスハンドル
ハンドル デバイス
0000 標準入力
0001 標準出力
0002 標準エラー出力
0003 補助デバイス
0004 プリンタ

 

2.2 システムコールのエラー戻り値

DR-DOS の呼び出しが成功した場合、ほとんどの呼び出しでキャリーフラグをクリアします。 エラーがある場合、キャリーフラグがセットされ、AX レジスタにエラーコードが返されます。 Chapter 5 に、AX レジスタに返されるエラーコードの一覧があります。

2.3 FCB 指向のファイル管理

2.3.1 標準 DR-DOS ファイルコントロールブロック (FCB)

Fugure 2-1 は標準ファイルコントロールブロック (FCB) を図示しています。 Table 2-3 は標準 FCB フィールドを定義しています。 オフセット 10h から 1Fh までのフィールド (FILESIZE, DATA そして RESERVED) は DR-DOS によって設定され、ユーザプログラムによる変更をしてはなりません。 標準 FCB の残りのフィールドはすべてユーザプログラムが設定しなければなりません。

WORD 形式のフィールドはすべて、最下位バイトを先頭にして格納されています(DWORD も)。

Figure 2 1
標準 FCB
オフセット 形式 フィールド名
00h byte DRIVE
01h 8 bytes FILENAME
09h 3 bytes FILE EXTENSION
0Ch word CURRENT BLOCK
0Eh word RECORD SIZE
10h dword FILESIZE
14h word DATE
16h word RESERVED (TIME)
18h 8 bytes RESERVED
20h byte CURREC
21h dword RANDREC
Table 2 3
標準 FCB フィールド
フィールド名 説明
DRIVE ドライブはゼロから順に番号付けされています。 ファイルが開く前は、0 はデフォルトのドライブを、1 がドライブ A を、2 がドライブ B を、といった具合に指定します。 ファイルを開いた後は、0 が 現在のドライブ番号に番号に置きかわります。
FILENAME このフィールドはファイル名もしくは予約されたデバイス名のいずれかを格納しています。 ファイル名は左詰めして、その後ろを空白 (20h) で埋めねばなりません。 デバイス名がこのフィールドに置かれる場合には、デバイス名にコロン (:) は含みません。
FILE EXTENSION ファイルの拡張子。 左詰めして空白で埋めるか、すべて空白で埋めねばなりません。
CURRENT BLOCK ファイルの先頭から数えた現在のブロック番号で、ゼロから始まる。 FCB によるファイルオープンコールはこのフィールドに 0 をセットする。 1 ブロックが 128 レコード。 レコードのサイズは以下のフィールドで決定されます。 現在のブロック番号 (CUREENT BLOCK) はシーケンシャルリードおよびライトのために、CURREC フィールドと共に使われます。
RECORD SIZE 論理レコードのバイト単位での大きさ。 FCB によるファイルオープンコールはこのフィールドに 80h をセットします。 レコード長が 80h でない場合は、自分のファイル用にしかるべき値をセットしなければなりません(訳注:ファイルオープン後に)。 DR-DOS はディスクリードおよびライトの際、ファイル上の位置を決定するためにこのフィールドを使用しています。
FILE SIZE バイト単位でのファイルの長さ。
DATE ファイル作成もしくは最終更新日付。 年、月、日が以下のようにフィールド内に割り振られています。
15141312111098 76543210
yyyyyyymmmmddddd
yy は 0 から 119 (1980 - 2099)
mm は 1 から 12
dd は 1 から 31
TIME (訳注 : この項追加)
ファイル作成もしくは最終更新時刻。 時、分、秒が以下のようにフィールド内に割り振られています。
15141312111098 76543210
HHHHHMMMMMMSSSSS
hh は 0 から 23
mm は 0 から 59
ss は 0 から 29
秒はファイル更新秒を2で割ったものです。
RESERVED DR-DOS のための予約。
CURREC 現在のブロック(CURRENT BLOCK 参照)内にある、0 から 127 の範囲の現在のレコード番号。 シーケンシャルリードもしくはライトを行う前にこのフィールドを設定しておかねばなりません。 ファイルの先頭レコードを読み出すには CURREC に 0 を設定します。 FCB によるファイルオープンコール (0Fh) はこのフィールドを初期化しません。
RANDREC

ファイルの先頭から数えたレコード番号で、ゼロから始まる。 ランダムリード/ライト操作の前に、このフィールドをセットする必要があります。 レコードサイズが 64 バイト未満の場合はこのフィールド全体が使われ、そうでない場合は最初の 3 バイトのみが使用されます。 FCB によるファイルオープンコールはこのフィールドを初期化しません。

プログラムセグメントプレフィクス (PSP) 内のオフセット 5Ch にある FCB を使用している場合、RANDREC フィールドの最終バイトは、PSP の整形されていない引数エリアの先頭バイトと重なります。

オープンされていない FCB は、FCB プレフィクス(拡張 FCB)、ドライブ番号、ファイル名、拡張子で構成されています。 FCB によるファイル作成、もしくは FCB によるファイルオープンコールによって、オープンされた FCB の残りのフィールドが埋められます。

2.3.2 拡張 FCB

拡張 FCB を使い、特別な属性を持つファイルの作成、もしくは検索をすることができます。

拡張 FCB は通常の FCB の前方に 7 バイトの前置(プレフィクス)が付加されます。 Figure 2-2 では FCB プレフィクスのフォーマットを示していますが、その位置は通常の FCB の先頭からのオフセット値になっています。

Table 2 4
拡張 FCB フィールド
フィールド 内容
FLAG 拡張 FCB であることを示すための FFh
RESERVED DR-DOS のために予約
ATTR アトリビュート(属性)バイト。 アトリビュートバイトは、セクション 2.3.3 にて記述します。
Figure 2 2
拡張 FCB
オフセット 形式 フィールド名
-07h byte FLAG
-06h 5 bytes RESERVED
-01h byte ATTR
00h〜 以降は標準 FCB と同じ

2.3.3 ファイルアトリビュートバイト

ファイル作成時に、ファイルに対してひとつ以上のアトリビュート(属性)を設定することができます。 ディレクトリエントリや拡張 FCB プレフィクス内に現れるアトリビュートバイトは、Table 2-5 の一覧にある値をとります。

Table 2 5
アトリビュートバイトの値
意味
00h 通常ファイルを示します。 特別な属性は何もなく、いかなるディレクトリサーチからも除外されません。
01h ファイルがリードオンリー(読み出し専用)であることを示します。 リードオンリーファイルへの出力を意図したファイルオープンコール (3Dh) を行った場合、エラーを返します。
02h ヒドン(隠し)ファイルであることを示します。 このアトリビュートを持つファイルは、通常のディレクトリサーチからは除外されます。
04h システムファイルであることを示します。 このアトリビュートを持つファイルは、通常のディレクトリサーチからは除外されます。
08h ファイル名と拡張子のフィールドに、ボリュームラベルが格納されていることを示します。 アトリビュートがこの値のときは、そのエントリはルートディレクトリにのみ存在でき、他の有用な情報を含みません。
10h サブディレクトリであることを示します。 通常のディレクトリサーチからは、このエントリは除外されます。
20h アーカイブ(保存)ファイル。 以前に書き込まれ、クローズされたファイルであることを示します。 BACKUP, RESTORE その他のファイル転送ユーティリティは、ファイルが最後にバックアップされた後で変更されたかどうか決定するために、この値を調べています。

ファイルモード変更 (43h) コールを用いて、リードオンリー、ヒドン、システム、アーカイブのアトリビュートを変更することができます。 ファイルはこれら4つのいくつか、もしくはすべてを組み合わせたアトリビュートを持つことができます。 ファイルモード変更コールでボリュームラベルとサブディレクトリのアトリビュートを変更することはできません。

ファイル検索でのアトリビュートバイトの用法説明は、Chapter 4 にある最初のエントリ検索 (11h) の記述中に含まれています。

2.3.4 ディスク転送エリア (DTA)

DR-DOS では、すべての FCB でのファイルリードおよびライトでデータ格納のために、そしてその他の FCB 指向でないファンクションコールのいくつかのために、ディスク転送エリア (DTA) を使用しています。 DTA を使用するファンクションには、以下のものが含まれます。

最初のエントリ検索 (11h) Search First Entry

次のエントリ検索 (12h) Search Next Entry

FCB シーケンシャルリード (14h) Sequentical Read

FCB シーケンシャルライト (15h) Sequentical Write

FCB ランダムリード (21h) Random Read

FCB ランダムライト (22h) Random Write

FCB ランダムブロックリード (27h) Random Block Read

FCB ランダムブロックライト (28h) Random Block Write

DOS プログラムに制御を与えたとき、DR-DOS は、デフォルトの DTA をプログラム中の PSP のオフセット 80h に設置します。 プログラムのロードと実行 (4Bh) コール中にある PSP の記述を参照のこと。

DTA の大きさはデフォルトで 128 バイトです。 デフォルト DTA を変更、もしくは新しい DTA を設置するには、ディスク転送アドレスのセット (1Ah) コールを使用します。 DR-DOS はメモリ中のどの位置にでも DTA の配置を認めていますが、64 キロバイトの(セグメントの)境界をまたぐことはできません。

いちど DTA が設置されると、その後で DTA のセットが起こるまで、DR-DOS はすべてのディスク操作でそのエリアを使い続けます。 ディスク転送アドレスの取得 (2Fh) コールで現在の DTA アドレスを取得することができます。

システムコール一覧

Table 2-6 は DR-DOS によってサポートされるシステムファンクションの一覧です。 システムコールは以下のカテゴリに分類されています。

Table 2 6
システムコールのカテゴリとコール
番号 (16進) システムコール
キャラクタデバイス入出力 Character Device I/O
01 キーボード入力 Keyboard Input
02 コンソール出力 Console Output
03 補助デバイス入力 Auxiliary Input
04 補助デバイス出力 Auxiliary Output
05 プリンタ出力 Printer Output
06 直接コンソール入出力 Direct Console I/O
07 エコーなし直接コンソール入力 Direct Console Input
08 エコーなしコンソール入力 Console Input without Echo
09 文字列出力 Print String
0A バッファコンソール入力 Buffered Keyboard Input
0B 標準入力のステータス検査 Check Console Status
0C バッファを空にして文字入力 Character Input with Buffer Flush
33 Ctrl-Break チェック状態設定/取得 Ctrl-Break Check
ファイル管理 File Management
0D ディスクリセット Disk Reset
0E ディスク選択 Select Disk
0F FCB でファイルオープン Open File
10 FCB でファイルクローズ Close File
11 最初のエントリ検索 Search for First Entry
12 次のエントリ検索 Search for Next Entry
13 FCB でファイル削除 Delete File
14 FCB でシーケンシャルリード Sequential Read
15 FCB でシーケンシャルライト Sequential Write
16 FCB でファイル作成 Create File
17 FCB でファイルリネーム Rename File
19 カレントディスク取得 Current Disk
1A ディスク転送アドレス (DTA) 設定 Set Disk Transfer Address
1B FAT 情報 Allocation Table Address
1C 指定ドライブの FAT 情報 Allocation Table for Specific Drive
21 FCB でランダムリード Random Read
22 FCB でランダムライト Random Write
23 FCB でファイルサイズ取得 File Size
24 FCB のランダムレコード (RANDREC) 設定 Set Random Record Field
27 FCB でランダムブロックリード Random Block Read
28 FCB でランダムブロックライト Random Block Write
29 ファイル名解析 Parse File Name
2E ベリファイフラグの設定 Set/Reset Verify Switch
2F ディスク転送アドレス (DTA) 取得 Get Disk Transfer Address
36 ディスク残量取得 Get Disk Free Space
54 ベリファイフラグ取得 Get Verify State
拡張ファイル管理 Extended File Management
3C ファイル作成 Create a File
3D ファイルオープン Open a File Handle
3E ファイルクローズ Close a File Handle
3F ファイルリード Read from a File or Device
40 ファイルライト Write to a File or Device
41 ファイル削除 Erase a File from Directory
42 ファイルポインタ移動(シーク) Move File Read/Write Pointer
43 ファイルモード変更 Change File Mode
44 デバイス入出力制御 (IOCTL) Device I/O Control
45 ファイルハンドル複製 Duplicate a File Handle
46 ファイルハンドル強制複製 Force a Duplicate of a File Handle
4E 最初のファイル検索 Find First
4F 次のファイル検索 Find Next
56 ファイルリネーム Rename a File
57 ファイルのタイムスタンプ設定/取得 Get/Set File Time and Date Stamps
59 拡張エラーコード取得 Get Extended Error
5A 一時ファイル作成 Create Unique File
5B 新規ファイル作成 Create New File
5C ファイルアクセスのロック/ロック解除 Lock/Unlock File Access
67 ファイルハンドル数設定 Set Handle Count
68 ファイルのコミット Commit File
ディレクトリ管理 Directory Management
39 サブディレクトリ作成 Create a Subdirectory
3A サブディレクトリ削除 Remove a Subdirectory
3B カレントディレクトリ変更 Change Current Directory
47 カレントディレクトリ取得 Get Current Directory
もろもろ Miscellaneous
25 割り込みベクタ設定 Set Vector
30 バージョン番号取得 Get DR-DOS Version Number
35 割り込みベクタ取得 Get Vector
プログラム制御 Program Control
00 プログラム終了 Program Terminate
26 新規 PSP 作成 Create a New Program Segment Prefix
31 キーププロセス(常駐終了) Keep Process
4B プログラムのロードと実行 Execute a Program
4C プロセス終了 Terminate a Process
4D 子プロセスの終了コード取得 Get Subprocess Return Code
62 PSP 取得 Get Program Segment Prefix Address
メモリ管理 Memory Management
48 メモリ割り当て Allocate Memory
49 割り当てメモリ解放 Free Allocated Memory
4A 割り当てメモリサイズ変更 Modify Allocated Memory Blocks
時刻 Time
2A 日付取得 Get Date
2B 日付設定 Set Date
2C 時刻取得 Get Time
2D 時刻設定 Set Time
国別情報 Country Information
38 国別情報取得/設定 Get/Set Country Dependent Information
65 拡張国別情報取得 Get Extended Country Information
66 グローバルコードページ設定/取得 Get/Set Global Code Page
ネットワーク Networking
5E00 マシン名取得 Get Machine Name
5E02 プリンタセットアップ Set Printer Setup
5E03 プリンタセットアップ文字列取得 Get Printer Setup
5F02 リダイレクションリストのエントリ取得 Get Redirection List Entry
5F03 リダイレクションリストのエントリ設定 Redirect Device
5F04 リダイレクションのキャンセル Cancel Redirection

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