DBCS ベクタに関するチラシの裏
DOS 内部の2バイトコード対応状況はアクティブコードページ(func 6601h/6602h)と func6300h(あるいは func6507h)の DBCS ベクタを調べればある程度わかるわけなんですが、このへんのファンクションが確実に使用可能だといえるのはバージョン 4.0 以上なわけで、たとえば PC-9801 や FM-R/TOWNS あたりの日本語 DOS 3.1 なんかだと DBCS ベクタさえ存在しないわけです。
で、このあたりの古い DOS(DOS じたい新しくないってのはまあおいとくとして)が多バイトコードに対応してるかどうかをなるたけ簡便かつ汎用的な方法で判定できないもんか…とかつらつら考えた結果、(DBCS ベクタの取れない環境では)国別コードから適当に割り出したらどうかと思った。つまりファンクション 38h で取得した現行国コードが 81(日本)だったらシフト JIS が使える、とみなしてもそんなに困らないだろうと。
ついでなんで、日本以外の国/コードページ/DBCSベクタの関係をすこし調べてみた。
Country ID | Codepage | DBCS vector value in COUNTRY.SYS | ||||
---|---|---|---|---|---|---|
MS-DOS 6.2/V Japan | PC DOS 7.0 Japan | PC DOS 7.0 Taiwan | PC DOS 7.0 China | Windows95 Japan | ||
81 (Japan) | 932 | 81h-9Fh, E0h-FCh | ||||
82 (Korea) | 934 | 81h-FEh | 81h-BFh | |||
949 | 81h-FEh | |||||
86 (China) | 936 | 81h-FCh | A1h-FEh | |||
1381 | 8Ch-FEh | |||||
88 (Taiwan) | 938 | 81h-FDh | 81h-FCh | 81h-FDh | 81h-FEh | |
950 | 81h-FEh | 81h-FEh |
注:
- PC DOS 7.0 China と Taiwan の country.sys は、以前 IBM のサイトで公開されていた IBM 2000 年問題 BIOS 検査ツールから取得。
- config.sys 内の country 文、および command.com 内部コマンドの CHCP では 1000 以上のコードページを設定できない。DOS ファンクションそのものにはこの制限はない。
…日本以外はけっこうブレがありますな。歴史的経緯がわかんないとちょっとダメかも。