NetBSD/pc98(based on NetBSD 1.3.1) 日本語対応MSDOSFSガイド 最終更新 1998年 3月 19日 このドキュメントは、NetBSD/pc98 で拡張されたMSDOSFSの日本語対応 の注意点などについて説明しています。 1. MSDOSFSとは? MSDOSFSはMS-DOSのファイルシステムを直接マウントして利用する為の ファイルシステムで、NetBSD/pc98のベースとなったNetBSD/i386において は以下のような機能を持っています。 1) MS-DOS/PC-DOS のFAT12/FAT16/FAT32ファイルシステムへのサポート 2) WindowsNT3.51やWindows95で採用された長いファイル名(いわゆる long file name)の実現等を可能にするための、VFAT形式で作られた ファイルシステムのサポート しかしNetBSD/i386は主に(いわゆる)1バイト文字圏の人々によって書か れている為に、Multi-Byted な文字をもつファイル/ディレクトリ名に対し ては、全くと言っていいほど考慮されていません。ところがPC98やAT互換機 等ににセットアップした日本語Windows95などでは、カナ漢字混じりの ファイル名を平気で作ってしまいます。これらを何とか扱う様にする為に、 NetBSD/pc98 (based on NetBSD 1.2)以降では以下の拡張を行っています。 1) 従来のFATファイルシステム上に作成されたファイルに関しては、 ファイル名をSJISまたはEUCコードに変換する(JISX0201にも対応)。 2) VFAT上に作られた長いファイル/ディレクトリ名に関しては、 ・ASCII文字のみで構成された名前に関しては、VFATに対応。 ・カナ(1バイトカナを含む)や漢字を含んだファイルに関しては 従来のFAT形式の名前で扱う。 これらはカーネルのconfigファイル中でMSDOSFSオプションに値をセット する事によって以下のような対応となります。 options MSDOSFS=1 (ファイル名を日本語EUCコードに変換) options MSDOSFS=2 (ファイル名をSJISコードに変換) ※ JISコードへの変換は対応していません。 この対応によってMSDOSFS上に作られた日本語ファイルの扱いがかなり 楽になったのですが、Windows95では長いファイル名を沢山使います。 それらの中には似た名前のファイルも多く、「ほげほげ~1.DOC」と 「ほげほげ~2.DOC」を区別する様なケースが発生してしまいます。 これをなんとかすべく、patch-95にて更なる拡張を行いました。 VFAT上のファイル名/ディレクトリ名を長いファイル名も含め、 日本語EUCコードに変換する。 この機能を利用する場合は、カーネルのconfigファイル中で以下の様に オプションを設定します。 options ENABLE_UNICODE=1 ( 1: VFAT 上のファイル名を日本語EUCコードに変換 ) ※ 日本語EUCコード以外への変換は対応していません。 一応NetBSD/"pc98"ということもあり、Unicodeのうちでも日本語部分 のみを変換する事にしました。また"(株)"とか"II"とかの様な機種依存 文字についてもかなり対応しています。 現状では幾つかの制限事項がありますが、それなりには使える状態に なっている筈です(少なくともNetBSD/i386の状態よりいいはずです)。 2. 制限事項 日本語を扱えるように拡張したMSDOSFSですが、まだ幾つかの制限事項 があります。 1) Windows95 OSR2で追加されたFAT32ファイルシステムでの動作は 未確認。 2) (日本語)VFAT未対応版において、JISへの変換機能がない。 3) VFAT対応版において、JIS/SJISへの変換機能がない。 4) VFAT対応版において、ファイルの書き込み時に既に同じ従来型の ファイルが存在する場合、エラーとなる。 (例) 既に"漢字のファイル名.TXT"が存在する場合には、そこに "漢字のファイル名2.TXT"を書けない。 5) VFAT対応版において、機種依存文字の全てを完全に網羅している 訳ではない。◯数字や、ローマ数字や、"cm"等の単位等について はほぼ対応している筈ですが、JIXS0208にない漢字等については 殆んど対応していないと思います。また日本語環境以外に関して は、今のところ考慮していません。 6) (これは日本語MSDOSFSには問題がないのですが、)ファイル名に 日本語が含まれている場合に、うまく表示されない場合がある。 ・NetBSDは、C locale以外のja_JP.EUC等に関しては、実装され ていません。NetBSD/pc98では、ja_JP.EUC と ja_JP.SJIS に 対応する為のパッチを配布しています。このパッチを当てて libcをmakeする必要があります。 ・配布状態のlsコマンドは、localeを考慮していません。これ についても、NetBSD/pc98ではパッチを配布していますので、 lsコマンドをmakeする必要があります。 ・以上の2点を実行しても、一部の機種依存文字に関しては正 しく扱えません。多分localeファイルの問題だと思われます が、それを厳密にする為の労力を割けるだけの余裕はありま せん。 こうして見ていると制限事項が非常に多い様ですが少なくともReadOnly で使用する場合には、殆んど問題ない状態だと思います。但し書き込み に(VFATへの日本語ファイル名)関しては、α版レベルだと思いますので あまり(特に重要な)ファイルの操作は行わないで下さい。 3. 技術的なこととFAQ (日本語)VFATへの拡張において変更した内容について、簡単に説明し ておきます。ある程度力のある方ならば、幾つかの問題点に自力で解決 できるようになると思います。 Q) 日本語のファイル/ディレクトリ名がうまく変換されない。 A) コード変換テーブルに載っていない漢字コードが使われている 可能性が高いと思われます。コード変換テーブルは /usr/src/sys/locale/lc_ctype/uni2eucjp.h にあります。例えば"(株)"を追加する場合には、最初にそのEUC コードとUNICODEを調べます。この場合、EUC:ADEA と UNI:3231 ですから、上記ファイル中に e2u[0xADEA] = 0x3231 (EUCコードからUnicodeへの変換) u2e[0x3231] = 0xADEA (UnicodeからEUCコードへの変換) となる対応を追加します。 Q) ある漢字(特殊記号)のEUCコードとUNICODEの値を求めるには? A) JISX0201, JISX208, JISX212 に関しては対応表がでていたので すが、98依存文字等については見付ける事が出来ませんでした。 しかしながら98依存文字をWin95上で扱う事は出来ていますので、 非常に泥臭い方法ですが、Win95上で求める漢字を含むファイル を作成してSJISコードとUNICODEを調査して、それを元に対応を 調査しました。この方法ですと以下の2つのファイルがあれば 変換未対応な文字への対応も可能です。 1) その文字を先頭〜6バイト目までに含んだ長いファイル名 を作成し、そこで dir > file1.txt で取得したファイル(file1.txt)。 2) そのディレクトリを含む領域をマウントし、 cat そのディレクトリ > file2.txt で取得したファイル(file2.txt)。 もっとエレガントな方法もある事と思いますが、今まではこの 方法で実装しました。もし良い方法があればぜひ教えて下さい。 Q) 普段SJIS localeで使用しているので、日本語VFATをSJISへ変換 したいのですが? A) 現在、EUCコードへの変換のみをサポートしています。また最初 の配布状態においても、SJISの場合には実装を行っただけです。 申し訳ありませんが、テストは一切行ってません。デバッグや 実装を行いたい人がいれば、多分協力は出来ると思います。 日本語VFATのSJIS対応については、それ用のコード変換テーブル を用意して、EUC対応版で変更された /usr/src/sys/msdosfs/msdosfs_conv.c /usr/src/sys/msdosfs/msdosfs_vnops.c /usr/src/sys/msdosfs/msdosfs_lookup.c 辺りを同様に変更すれば実現できると思われます。 Q) 日本語以外の文字コードに対応できないのでしょうか? A) NetBSD/pc98では、PC98という日本独特のアーキテクチャという 事もあり日本語以外のUnicodeについては考慮していません。 他の言語のEUCコードとの対応についても実装は可能だと思いま すが、現在は対応していません。 なお複数の言語のEUCコードへの変換(日本語と中国語等)を同時 に両立させる事は、Unicodeの性格上出来ません。 Q) カーネル内のスタック上に大きなワーク用の変数が使用されて いる様ですが? A) 各ファイル名を一括して変換する為にワーク領域に生のUnicode のファイル名を入れています。オリジナルの実装ではこの様な 操作は行っていないのですが、2バイト文字が混じったファイル 名の変換にはオリジナルの実装では(VFATの構造上)無理がありま す。うまい方法を考えるつもりですが、まだ実現していません。 Q) 書き込みを含めた、完全な日本語対応の予定はいつですか? A) 申し訳ありませんが、未定です。 NetBSD/pc98 core team 連絡先 E-Mail:netbsd-98@njk.co.jp