低レベルなヒトの覚え書き

●Another HTML-lintとPerl for Win32の話。ていうか、DOSマシンでも使えました


8. DJGPP版のPerlを使って、昔ながらのDOS環境で、Another HTML-lintを動かす

(1) 長いファイル名の問題

周知のとおり、従来のDOSのファイル名には、いわゆる「8.3」の制限があります。 この枠に収まらないような名前を使うことは、原則として不可能です。
ただ、この点に関するDOSの挙動には、ちょっと面白い性質もあって、ファイル名として長すぎる文字列を示された場合、その全体を無効とするのではなく、「8.3」の枠からはみ出た部分だけを無視します。 たとえば、「type 123465789.1234」というDOSコマンドは、実際には「type 12345678.123」と解釈されます。
こうしたDOSの性質は、Another HTML-lintのように、長いファイル名が使えることをあてにして書かれたPerlのスクリプトをDOS上で動かすとき、ユーザーにとって有利に働く可能性があります。 「AutoLoader.pmを呼べ」が「AUTOLOAD.PMを呼べ」と同じ意味になるので、スクリプトを書き換える必要がないからです。
呼び出される側の「AUTOLOAD.PM」は、「AutoLoader.pm」が入っている書庫ファイルをDOS上で展開すれば、簡単に用意できます。
唯一の問題は、「8.3」の部分だけでは識別できない名前があることです(たとえば、「12345678a.1」と「12345678b.1」)。 最悪の場合は、スクリプトの大幅な改造が必要になるかもしれません。

(3) DJGPP版のPerlのインストール

基本的なことは、Win32の場合と同様です。 長いファイル名の問題に関する、特別な配慮も必要ありません。
長い名前そのものは、標準ライブラリのファイルを中心に、けっこう多用されているのですが、うまい具合に、どれをとっても「8.3」の範囲で識別可能だからです(ある意味、ユニバーサルデザイン)。
パッケージの展開をDOS上で行なえば、長い名前を切り揃える手間もかかりません。
ちなみに、デュアルブートのマシンとか、リムーバブルディスクにインストールする場合は、短い名前のファイルに加えて、長い名前のファイルも入れておくと、DOSとWindowsの両方で同じPerlを使うことができます(たとえば、「AUTOLOAD.PM」と「AutoLoader.pm」を併存させる)。

[追記1]
上の説明は、バージョン5.005_03までのDJGPP版Perlを念頭に置いたものです。 バージョン5.6.1の場合は、いくらか事情が異なります。 後者の標準ライブラリには、「8.3」の範囲内では識別できない名前のファイルが、8組19個ほど含まれているからです(たとえば、「cjkcompatibility.pl」と「cjkcompatibilityforms.pl」と「cjkcompatibilityideographs.pl」)。
ただ、幸いなことに、それらはいずれもunicode関係のライブラリなので、Another HTML-lintの動作にはまったく関係がありません(たぶん)。
なお、CPANで紹介されているDJGPP版Perlの一覧については、こちら (v-hlin4.htm#hlin4-8) を参照してください。

[追記2]
上の追記で述べたバージョン5.6.1に関する注意事項と同様のことは、おそらくバージョン5.8.8についても当てはまるものと思われます。

(3) CWSDPMIのインストール

DJGPP版のPerlを動かすためには、DPMIのメモリが不可欠であり、従来のDOS環境でDPMIのメモリを確保するには、それなりのメモリ管理ソフトが必要です。
5.005_03のパッケージには、CWSDPMI.EXEの「V0.90+ (r4)」が同梱されていますが、5.004_02のほうには、特に何も同梱されていません。 したがって、後者のPerlを使う場合は、自分で適当なソフトウェアを用意する必要があります。
CWSDPMI.EXEの使用法は、基本的には、DJGPP版のPerl.exeと同じ場所(もしくは、PATHが通じているディレクトリ)に置いておくだけです。 スワップファイルを作成する場所(デフォルトでは「C:\」)の設定方法など、詳しいことはマニュアルを参照してください。

[URL]

(4) Jcode.pmのインストール

基本的なことは、Win32の場合と同様です。
長いファイル名の問題については、DOS上でPerlをインストールする場合と同様です。

(5) Another HTML-lintのインストール

DJGPP版のPerlと違って、「8.3」の部分だけでは識別できない名前のファイルが、いくつかあります。 それらを書庫ファイルから取り出すときは、名前を指定して個別に展開しないと、何度やっても同じファイルしか出てこないので、注意が必要です。
実際の手順としては、書庫ファイルの内容一覧をもとに、バッチで処理してしまうのが楽だと思います(デュアルブートのマシンとかなら、Windows上で展開したほうが早いかもしれません)。
「8.3」では識別不能なファイルのうち、Another HTML-lintの動作に直接関係がありそうなのは、次の2組の規則ファイルです。
1組目は、「html401-frameset.rul」と「html401-strict.rul」と「html401-transitional.rul」。
2組目は、「imode-xhtml.rul」と「imode-xhtml11.rul」です。
これらのファイルに関しては、普段は適当な名前にしておいて、必要なときだけ相応の名前にリネーム(あるいは、相応の名前のファイルにコピー)することにします。
たとえば、「HTML 4.01 Strict」でチェックするときは、「html401s.rul」を「html401-.rul」にして、「同 Transitional」のときは、「html401t.rul」を「html401-.rul」とするわけです。
筆者の場合は、もっぱら「HTML 4.01 Transitional」しか使わないので、これで十分間に合ってます(こういう姑息なやり方が嫌いな人は、htmllint.pmを改造してください)。
このほかの基本的なことは、htmllint.envやhtmllintの件も含めて、Win32の場合と同様です。 Perlの場合と同様、DOSとWindowsで同じファイルを使うこともできます。

→トップ , →前(hlin7) , →次(hlin9)


R.11: 2008/03/18
Copyright (C) 2005-2008 A.Satoshi