[Front] [Prev Chapter] [Next Chapter] | [in English] |
このセクションでは、アプリケーションプログラムから Caldera DR-DOS のファンクションコールと割り込みを使うために必要な情報を示します。
DR-DOS では、AH レジスタにファンクション番号を代入し、必要に応じて追加情報をその他のレジスタに入れ、しかる後 INT 21h を発行することによって、プロセスがファンクションを呼び出します。 DR-DOS が制御を得ると、スタックが DR-DOS 内部スタックに切りかわります。 個別の要求に応じて情報が返されない限り、AX 以外のレジスタは保持されます。 システムの割り込みを考慮し、ユーザのスタックサイズをユーザプログラム内部の必要量より 128 バイト以上多くしておくべきでしょう。
Table 2-1 のシステムコールは、入力パラメータとして、DS:DX レジスタに ASCIZ 文字列のアドレスが必要です。 ASCIZ 文字列は、任意のドライブ文字とディレクトリパスを含めた ASCII 文字の並びです。 場合によっては、文字列にファイル名も含まれます。 ASCIZ 文字列はゼロ、もしくはヌルバイト (0h) で区切られています。 パス名はバックスラッシュ、もしくは円記号 (\) で区切られています。
番号(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 |
ファイル作成 (3Ch)、ファイルオープン (3Dh)、ファイルハンドル複製 (45h)、ファイル新規作成 (45h) といったファンクションでは、AX レジスタに 16 ビットの識別値を返します。 これを「ハンドル」と呼びます。 ハンドルはそれ以降、そのハンドルを返したシステムコールよって作成されるか開かれるかしたファイル、もしくはデバイスの識別に使われます。 Table 2-2 は標準デバイスに対応してあらかじめ定義されているハンドルの一覧です。 これらのハンドルは事前にデバイスを開いて割り付けることなく、プログラムで使用できます。
ハンドル | デバイス |
---|---|
0000 | 標準入力 |
0001 | 標準出力 |
0002 | 標準エラー出力 |
0003 | 補助デバイス |
0004 | プリンタ |
DR-DOS の呼び出しが成功した場合、ほとんどの呼び出しでキャリーフラグをクリアします。 エラーがある場合、キャリーフラグがセットされ、AX レジスタにエラーコードが返されます。 Chapter 5 に、AX レジスタに返されるエラーコードの一覧があります。
Fugure 2-1 は標準ファイルコントロールブロック (FCB) を図示しています。 Table 2-3 は標準 FCB フィールドを定義しています。 オフセット 10h から 1Fh までのフィールド (FILESIZE, DATA そして RESERVED) は DR-DOS によって設定され、ユーザプログラムによる変更をしてはなりません。 標準 FCB の残りのフィールドはすべてユーザプログラムが設定しなければなりません。
WORD 形式のフィールドはすべて、最下位バイトを先頭にして格納されています(DWORD も)。
オフセット | 形式 | フィールド名 |
---|---|---|
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 |
拡張 FCB を使い、特別な属性を持つファイルの作成、もしくは検索をすることができます。
拡張 FCB は通常の FCB の前方に 7 バイトの前置(プレフィクス)が付加されます。 Figure 2-2 では FCB プレフィクスのフォーマットを示していますが、その位置は通常の FCB の先頭からのオフセット値になっています。
フィールド | 内容 |
---|---|
FLAG | 拡張 FCB であることを示すための FFh |
RESERVED | DR-DOS のために予約 |
ATTR | アトリビュート(属性)バイト。 アトリビュートバイトは、セクション 2.3.3 にて記述します。 |
オフセット | 形式 | フィールド名 |
---|---|---|
-07h | byte | FLAG |
-06h | 5 bytes | RESERVED |
-01h | byte | ATTR |
00h〜 | 以降は標準 FCB と同じ |
ファイル作成時に、ファイルに対してひとつ以上のアトリビュート(属性)を設定することができます。 ディレクトリエントリや拡張 FCB プレフィクス内に現れるアトリビュートバイトは、Table 2-5 の一覧にある値をとります。
値 | 意味 |
---|---|
00h | 通常ファイルを示します。 特別な属性は何もなく、いかなるディレクトリサーチからも除外されません。 |
01h | ファイルがリードオンリー(読み出し専用)であることを示します。 リードオンリーファイルへの出力を意図したファイルオープンコール (3Dh) を行った場合、エラーを返します。 |
02h | ヒドン(隠し)ファイルであることを示します。 このアトリビュートを持つファイルは、通常のディレクトリサーチからは除外されます。 |
04h | システムファイルであることを示します。 このアトリビュートを持つファイルは、通常のディレクトリサーチからは除外されます。 |
08h | ファイル名と拡張子のフィールドに、ボリュームラベルが格納されていることを示します。 アトリビュートがこの値のときは、そのエントリはルートディレクトリにのみ存在でき、他の有用な情報を含みません。 |
10h | サブディレクトリであることを示します。 通常のディレクトリサーチからは、このエントリは除外されます。 |
20h | アーカイブ(保存)ファイル。 以前に書き込まれ、クローズされたファイルであることを示します。 BACKUP, RESTORE その他のファイル転送ユーティリティは、ファイルが最後にバックアップされた後で変更されたかどうか決定するために、この値を調べています。 |
ファイルモード変更 (43h) コールを用いて、リードオンリー、ヒドン、システム、アーカイブのアトリビュートを変更することができます。 ファイルはこれら4つのいくつか、もしくはすべてを組み合わせたアトリビュートを持つことができます。 ファイルモード変更コールでボリュームラベルとサブディレクトリのアトリビュートを変更することはできません。
ファイル検索でのアトリビュートバイトの用法説明は、Chapter 4 にある最初のエントリ検索 (11h) の記述中に含まれています。
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 によってサポートされるシステムファンクションの一覧です。 システムコールは以下のカテゴリに分類されています。
番号 (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 |