FrontPage  Index  Search  Changes  RSS  wikifarm  Login

int21h,AX=6507h

カテゴリ

DOS

対応 DOS バージョン

4.0+

機能

拡張国別情報(DBCS ベクタ)を取得します。

設定

レジスタ内容
AH65h
AL07h
BXコードページ
FFFFh 現行コードページ
CXバッファのサイズ
(AX=6507h の場合は、5)
DX国別コード
FFFFh 現行国
ES:DIバッファの先頭アドレス

戻り値

レジスタ内容
AXエラーコード(エラー発生時)
CXバッファにコピーしたデータのバイト数

ES:DI のバッファに以下の内容がセットされる。

オフセット内容
0byte7
1dwordDBCS ベクタへの FAR ポインタ
(下位ワードがオフセット、上位ワードがセグメント)

DBCS ベクタの内容

日本語(シフトJIS)が利用可能な場合、DBCS ベクタは以下のような内容になります。

オフセット内容
0word6
2byte81h
3byte9Fh
4byteE0h
5byteFCh
6byte00h
7byte00h
(以下不定)

シングルバイト文字(英語など)モードの場合は以下のようになります。

オフセット内容
0word0
2byte00h
3byte00h
(以下不定)

説明

DOS 内部で2バイト文字が利用可能な場合、このファンクションコールで2バイト文字の先頭バイトを判定するためのテーブルを取得できます。

大部分の DOS/V アプリケーション/システムプログラムは、日本語/英語モードの判定に DBCS ベクタの内容を利用しています。

本ファンクションコールは、バージョン 4.0 もしくはそれ以降の DOS でれなくサポートされています。

ES:DI のバッファに設定される DBCS ベクタと int21h,AX=6300h で取得できるアドレスとの違いは、先頭オフセットに DBCS リードバイトテーブルの要素数を示すワード値がついているか否かのみです。 実際、MS-DOS や PC DOS で両方のファンクションコールを実行した場合、両者のポインタは先頭ワードの2バイト分ずれているだけです。*1
DR-DOS 以外の互換DOS では int21h,AX=6300h で得られる DBCS ベクタのアドレスが正しくない場合があるため、こちらのファンクションコールを使ったほうが「安全」ではあるかもしれません。

*1 コードページが現行コードページの場合。
現行コードページでない場合(たとえば日本語モード時にコードページ 437 の DBCS ベクタを取得しようとした場合)、本ファンクションコールで得られる DBCS ベクタは NLSFUNC 内の保存領域を指すことになります(当然ながら NLSFUNC.EXE が常駐していないとエラーになります)。