DOS と DBCS ベクタと2バイト文字を含むファイル名に関する…
そのうちもすこしちゃんとまとめたい気もしますがとりあえずここに書いておく。
- DOS ファンクション int 21h, AX=6300h や int 21h, AX=6507h で、正しくない(MS-DOS や PC DOS と異なる)アドレスを返す互換 DOS がけっこうある。というか、完全に MS/PC DOS と互換性のある値を返す DOS クローンは DR-DOS だけかもしれない。
- MS-DOS や PC DOS のカーネルは世界共通ではない。というか少なくとも英語版では2バイト文字のファイル名を正しく扱うことができない。これらの DOS でも config.sys に "country=81,932,country.sys" とでも書いておけば DBCS ベクタにそれらしい値が設定されるので擬似 DOS/V 化にはほとんど支障はないが、2バイト文字固有の処理がされないのでたとえば "ハバネロ.txt" というファイルを作ろうとすると "クグキロ.txt" というファイルが作成されてしまう(2バイト目が大文字化されちゃってるんですね)。
- ためしにいろんな DOS で試してみたけど、DR-DOS 7.03 と Datalight ROM-DOS 7.1 はちゃんと "ハバネロ.txt" が作成できたのでちょっと驚いた。そういえばこのふたつは日本語市場がそれなりに考慮されていた(DR-DOS はかつて DR-DOS 6/V というまっとうな日本語ローカライズ版が存在したし、ROM-DOS はどっかのツールが起動ディスクに使ってたっけ)
- (DOS とは直接関係ないけど)まじめな実装の mblen は -1 を返すこともある。
- (DOS とは直接関係ないけど)ショボイ実装の mblen は文字列の終端を突き抜ける文字数を返すこともある。