Vim で Shift_JIS 以外の日本語が文字化けする件だが、別のファイルで試してみたところ、文字化けは発生しなかった。文字化けしたファイルは、サイズが 450kB 以上もあるかなり大きなテキストファイルだったのだが、もしかしてこのサイズが問題だったのだろうか?
昨日届いたメールはすべてが spam だった。ひどいものだ。(20040530.txt)
ck で日本語入力しようとしたが、確定前の文字が表示されない。ついでに ATOK パレットも表示されない。ATOK の問題かと思い、MS-IME を使ってみたところ、確定前の文字は表示されたが、IME ツールバーは同様に表示されない。ソースをいろいろといじくり回した結果、2行書き換えれば ATOK でも正常に表示されるようになることが分かった。
Cygwin 用 a2ps 日本語対応版のバイナリパッケージを Cygwin のインストーラからインストールできるようにする方法を調べてみた。適当に setup.ini を書いてみたところ、ローカルからインストールすることはできた。インターネットから直接インストールするようにできるかは不明だ。
久しぶりに、INCM 用のプラグインを2つばかり書いてみた。2つとも cm_supertank.pl を元に書いたのだが、何をやっているのかを思い出すまで結構時間が掛かった。
gcc 用の Shift_JIS メッセージファイルを作ってみた。コマンドラインから以下のように入力すればよい。
$ msgunfmt /usr/share/locale/ja/LC_MESSAGES/gcc.mo | sed -e 's/charset=EUC-JP/charset=Shift_JIS/' | nkf -s | msgfmt -o /usr/share/locale/ja_JP.SJIS/LC_MESSAGES/gcc.mo -
簡単に説明すると、msgunfmt で .mo ファイルから .po ファイルを逆生成し、sed で EUC-JP を Shift_JIS に置換、nkf で文字コードを変換し、msgfmt で Shift_JIS の .mo ファイルを生成している。
Cygwin の Vim で EUC のファイルを編集しようとしたら文字化けが発生した。iconv はインストールされているし、設定も問題ないはずなのだが・・・。なぜだ。
a2ps の日付の出力が気に入らなかったので直してみることにした。/etc/a2ps.cfg でタイトルやフッターを変更できる。--left-title, --left-footer, --right-footer の 3カ所を以下のように変更した。
Options: --left-title='#?2||$D{%Y/%m/%d %H:%M:%S}|' Options: --left-footer=#?l!%D{%Y/%m/%d}!#?v|%D{%Y/%m/%d}|%s./%s#|! Options: --right-footer=#?l!%s./%s#!#?v|%s./%s#|%D{%Y/%m/%d}|!
これによって、日付が 2004/05/28 12:34:56 という形式で出力されるようになる。これらの書式の説明は、info a2ps の Available Escapes:: のページに書かれている。個人的に設定を変更したい場合は、
$ cp /etc/a2ps.cfg ~/.a2ps/a2psrc $ cp /etc/a2ps-site.cfg ~/.a2ps/
としておいて、~/.a2ps/a2psrc, ~/.a2ps/a2ps-site.cfg を編集すればよい。
なんだ、Cygwin の msgfmt は Shift_JIS にも対応していたのか。ja.po ファイルの先頭付近に、
"Content-Type: text/plain; charset=EUC-JP\n"
と書かれた行があるので、それを
"Content-Type: text/plain; charset=Shift_JIS\n"
に書き換えれば、Shift_JIS の .po ファイルでもエラーは出なかった。
Cygwin の msgfmt が Shift_JIS に対応していることが分かったので、a2ps 用の Shift_JIS のメッセージファイルを作った。これを組み込んで、また a2ps-4.13-kt.patch をバージョンアップしておいた。今回の改変で、LANG=ja_JP.SJIS を指定されたときには、コンソールに出力される文字列は Shift_JIS、PS ファイル内に出力される文字列は EUC-JP になるようになったはずである。
これで Cygwin 用日本語対応 a2ps 4.13b の諸々の問題点はほぼ解消したように思えるので、バイナリパッケージを作ってみることにした。
$ ./a2ps-4.13-1.sh prep $ patch -p0 < a2ps-4.13-ja_nls.patch $ patch -p0 < a2ps-4.13-kt.patch $ ./a2ps-4.13-1.sh build $ ./a2ps-4.13-1.sh install $ ./a2ps-4.13-1.sh strip $ ./a2ps-4.13-1.sh pkg
これで a2ps-4.13-1.tar.bz2 ができあがった。しかし、よく調べてみると、オリジナルの a2ps-4.13-1.tar.bz2 には、usr/share/emacs/site-lisp/ に 4つファイルが含まれているのだが、自分で作ったパッケージにはこれらのファイルが含まれていなかった。名前からして、emacs をインストールしていないとこれらのファイルが生成されないのかもしれない。これだけのために、emacs をインストールするのはばからしいので、これらのファイルをオリジナルのパッケージから取り出して自分で作ったパッケージに放り込んでおいた。できたバイナリパッケージは、
$ tar xvjf a2ps-4.13-1.tar.bz2 -C /
として、ルートディレクトリに解凍してしまえばインストールすることは可能なのだが、これでは Cygwin のインストーラからアンインストールすることができない。バイナリパッケージの公開は止めておこう。
gettext に関しては、「gettext による日本語対応について」 にいろいろと書いてあった。
a2ps の色の設定を変更してみた。予想通り、/usr/share/a2ps/ps/color.pro を書き換えたところ、色が変わった。コメントの色を緑色に、文字列の色を紫色に変更し、さらに文字列のフォントを Times-Roman から Courier に変更してみた。プログラムリストを印刷するのが主な使い道なので、文字列だけが他と違ってプロポーショナルフォントというのはかなり違和感があった。color2.pro がこれらの変更を加えた設定ファイルである。これを /usr/share/a2ps/ps/ (あるいは ~/.a2ps/) に放り込み、a2ps --prologue=color2 とすることで、これらの設定が有効になる。ちなみにタブ幅を 4 にするときは -T 4、すべての行に行番号を表示するには --line-numbers=1 オプションを指定すればよい。
相変わらず、a2ps が出力した PS ファイルを Distiller で PDF に変換できるようにする方法が分からない。
a2ps で半角カタカナを含むファイルを印刷する方法。
$ nkf -e filename | a2ps -o output.ps - --stdin=filename
nkf で EUC に変換してから印刷すればよい。--stdin オプションでファイル名を指定すれば、ファイル名に合わせたスタイルシートを読み込んで、タイトルにもそのファイル名が使われる。印刷するファイルのタイムスタンプまでは設定できないようだが、これは仕方あるまい。(半角カタカナは全角に変換されてしまうのでレイアウトは崩れてしまう場合がある。)
a2ps の日本語メッセージを Shift_JIS に変更してみようと思った。
$ cd /usr/src/a2ps-4.13/po $ nkf -s < ja.po > ja_JP.SJIS.po $ msgfmt -o ja_JP.SJIS.gmo ja_JP.SJIS.po
としたところ、msgfmt で大量のエラーが発生した。msgfmt は Shift_JIS 文字列を扱えないらしい。(もしかして Shift_JIS 文字列を扱えるようにするオプションがあるのかもしれないが。) そこで、Shift_JIS 文字列を 16進数表記に書き換えるスクリプトを書いて、その結果を msgfmt に与えたところ、今度は gmo ファイルが正しく生成された。
$ cp ja_JP.SJIS.gmo /usr/share/local/ja_JP.SJIS/LC_MESSAGES/a2ps.mo
としてから、LANG=ja_JP.SJIS とした状態で a2ps を実行したところ、コンソールには見事に Shift_JIS でメッセージが表示されたのだが、出力の PS ファイルの中の文字も Shift_JIS になってしまい、文字化けを起こしていた。
どうやら、Shift_JIS で出力する必要のあるメッセージのみを ja_JP.SJIS.po に記述し、PS ファイル内に出力されるメッセージに関しては、ja_JP.SJIS.po には記述しないで、ja.po のメッセージを使うようにすれば、コンソールでも PS ファイル内でも文字化けは起こらないようである。コンソールに出力されるメッセージなのか PS ファイル内に書き込まれるメッセージなのかを判別するのはかなり面倒だろうが。
a2ps 日本語対応パッチ内の、日本語メッセージファイル (./po/ja.po) に、脱字を発見したので修正した。これに合わせて、自作パッチも更新しておいた。コンパイル手順は昨日の方法のままでよい。
a2ps でカラー出力する際の色の設定は、どうやら /usr/share/a2ps/ps/color.pro で設定しているようだ。PostScript の文法は知らないが、RGB を 0 から 1 までの範囲の小数で指定しているらしき場所があるので、その値を書き換えれば好きな色にできそうである。
a2ps のコンパイルで勘違いしていることがあった。./a2ps-4.13-1.sh install を実行しても実際にはインストールはされないのである。./a2ps-4.13/.inst/ というディレクトリが作成され、この中にインストール後と同じディレクトリ構造でファイルがコピーされるだけだったのである。これはおそらくインストール用の .tar.bz2 パッケージを作成するためにこのようになっているものと思われる。インストールするには ./a2ps-4.13/ に移って、make install とすれば良かった。また、/usr/bin/file が見つからない件に関しては、Cygwin のインストーラから、file パッケージをインストールしておけば良かったようだ。さらに、Cygwin 版の a2ps 4.13 は C# のスタイルシートが追加されているのだが、インストールスクリプトの不備により、これがインストールされない。そこでこれもインストールするように a2ps-4.13-kt.patch をバージョンアップしておいた。
再度コンパイル・インストール方法を整理すると以下のようになる。
ここ数日 LSI C-86 用の 64bit 整数演算ライブラリを作成している。だいたいできあがったが、まだ符号なし整数しか扱えない。インラインアセンブラを使っているのだが、まだ最適化も十分ではない。ICC を BigDrive に対応させるには、48bit 整数を扱う必要があるためこのようなことをしているのだが、大きく寄り道しているような気がする。
Cygwin 用のターミナルエミュレータで ck というものがある。文字コードを自動判別して日本語を正しく表示してくれるのが実に良い。普通の Cygwin のコンソールや、rxvt で LANG=ja_JP.SJIS とすると、SJIS を指定しているにもかかわらず、文字を EUC で出力するために文字化けしてしまうソフトが実に多い。ck を使えば EUC で出力されても文字化けしない。
a2ps を再度コンパイルしてみた。今回は、自作の(手抜きの) .asm 用のスタイルシートも一緒に入れてみた。さらにつじつま合わせの touch も patch でやってしまうようにしてみた。
a2ps で生成した .ps ファイルを Acrobat Distiller で PDF に変換しようとするとエラーが出る。(下記参照) なぜだろう。現在は .ps を GSview で開いて閲覧・印刷している。
fHelvetica not found, using Courier. fHelvetica-Bold not found, using Courier. fTimes-Bold not found, using Courier. fTimes-Roman not found, using Courier. %%[ Error: undefined; OffendingCommand: euc-jpdict ]%% Stack: /fTimes-Bold /fHelvetica-Bold /fHelvetica /euc-jpdict %%[ Flushing: rest of job (to end-of-file) will be ignored ]%% %%[ Warning: PostScript error. No PDF file produced. ] %%
日本語対応 a2ps で Shift_JIS で書かれたファイルを PS ファイルに変換したら、一部文字化けが発生していた。よく見ると、半角カタカナ部分で文字化けが起きていた。一応 EUC でも半角カタカナを扱う方法はあるわけだから、何とかならないものだろうか。
カラーの PS に変換したときの、色の設定も変更したいのだが、やり方が分からない。具体的には、例えばコメント部分が赤色で表示されるのだが、それを緑色にしたいと思っている。
RealVNC では変換等のキーが使えない。そこで VNC 日本語版を入れてみた。PC-98 の Win98 をサーバーにした場合は、日本語版でも漢字キーが使えなかった。(Win2k だと問題なし。) Win98 の場合は他にもいくつか細かい問題があるようだった。
怪しげなスクリーンショット。
ずいぶん前に注文していた CF-R2C の外部ディスプレイ接続ケーブルが届いたとの連絡があったので取りに行った。こんなものが \4,200 もするとは・・・。ちょうど新製品の CF-R3D が並んでいたので見てきた。カーソルキーが他のキーと離れていて打ちやすそうだったが(CF-R2C では、↑を入力しようとして、] を押してしまうといったことが時々ある)、カーソルキーのキータッチがちゃちな感じがした。デザインも変更されて、白を基調とした色になっていたのだが、なんだか安っぽい感じがした。
RealVNC を使ってみた。非常に簡単に他のマシンをリモート操作でき、なかなかおもしろい。
a2ps のアセンブラ用のスタイルシート(キーワードの強調等の各種装飾を定義したファイル)を書いてみた。スタイルシートは /usr/share/a2ps/sheets/ の中に拡張子 ssh で置いておき、どの拡張子のファイルにどのスタイルシートを適用するかを sheets.map で指定する。
a2ps 4.13b 日本語対応版の Cygwin 上でのコンパイルをもう一度やってみた。msgfmt の実行と /etc/a2ps-site.cfg の編集は今回は必要なかった。
ICC を BigDrive に対応させるべく、現在研究中。とりあえず、最大容量の取得はできた。
Win32 用の逆アセンブラに関して少し調べてみた。まず、dispe がバージョンアップしていた。それから、diswin にはちょっとしたバグがあるらしく、パッチが公開されていた。diswin にこのパッチを適用してから、コンパイルしようとしたが、Makefile に問題があって Cygwin の Mingw でコンパイルできなかった。そこで Cygwin の Mingw でコンパイルできるように変更したパッチ(上記パッチも統合済み)を作ってみた。diswin19.zip を解凍したディレクトリに、diswin19.patch を一緒に置いて、
$ mkdir src $ tar xvzf dissrc.tgz -C src $ patch -p0 < diswin19.patch $ cd src $ make CC='gcc -mno-cygwin'
とすればコンパイルできる。
「Win32サブルーチンズ」の著者のサイトを発見した。この本、最近書店で見かけないと思っていたら、やはり絶版になっていたようだ。代わりにすべてが Web 上で公開されている。ダイレクトディスクアクセスの方法などいろいろと興味深い内容が多い。
http://wiki.osdev.info/ − OS 製作に関する情報を集めた Wiki である。なかなかおもしろい。http://wiki.osdev.info/index.php?%B6%BD%CC%A3%BF%BC%A4%A4 にはおもしろそうなサイトへのリンクが多くある。
Mozilla 1.7 RC2 をインストールした。F7 でのキャレットブラウズモードをまた試してみた。PgUp / PgDn でスクロールできるようになっていた。1.7 RC1 のバグだったようだ。Space / Shift+Space / BackSpace によるスクロールは使えなかった。こちらは仕様なのだろうが、やはりこれが使えないのでは使いにくい。
この前買った 160GB HDD をようやくつないで使ってみた。Win2k SP4 は BigDrive に対応しているはずなのに、128GB しか認識していない。調べてみるとレジストリを書き換える必要があるようだ。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi\Parameters] "EnableBigLba"=dword:00000001
Win2k/XP ではマウスポインタに影が表示されるが、あれは個人的には大嫌いだ。ユーザー毎にマウスポインタの影を表示しないようにすることはコントロールパネルから簡単に設定できるが、ログイン画面で影を表示しないようにする方法が分からない。そこでそれを調べるために、Sysinternals の Regmon というツールを使って、ユーザー毎のマウスポインタの影の表示・非表示の設定がどこに記録されているかを調べてみた。
マウスポインタの影を有りから無しに変更したところ、レジストリの
[HKEY_CURRENT_USER\Control Panel\Desktop] "UserPreferencesMask"=hex:b0,20,00,80
が
[HKEY_CURRENT_USER\Control Panel\Desktop] "UserPreferencesMask"=hex:b0,00,00,80
に変更されることが判明した。UserPreferencesMask の 2バイト目の第5ビット目が 0 ならば影が表示されないということである。そこでこれを元に、
[HKEY_USERS\.DEFAULT\Control Panel\Desktop] "UserPreferencesMask"=hex:be,3e,00,80
を
[HKEY_USERS\.DEFAULT\Control Panel\Desktop] "UserPreferencesMask"=hex:be,1e,00,80
に変更したところ、見事ログイン画面でも影が表示されないようになった。
ログイン画面でマウスカーソルの影を非表示にする方法を解説しているページがないかググって見ると、ひびき つくねの「Windows 豆知識」 というページが見つかった。
Win2k に VS6 SP6 をインストールしても、mfc42.dll, mfc42u.dll, atl.dll, expsrv.dll の 4つのファイルが更新されないことが分かった。まったく M$ は何をやっているのだか。
プログラムリストを印刷するのに何かいいソフトがないかと調べてみた。今までは、無料版の WinLPrt/32 を使っていたのだが、カラー印刷できないのが不満である。シェアウェア版ならカラー印刷もできるのかもしれないが、シェアウェアはあまり使う気にはなれない。前の研究室の Linux マシンではプログラムリストを印刷には a2ps を使っていたのだが、Cygwin でも a2ps が使えないか調べてみることにした。
Cygwin にも a2ps 4.13b は含まれていたが、日本語には対応していなかった。また、Cygwin JE には a2ps の日本語版は含まれていないようだった。仕方がないので、自分で日本語対応 a2ps をコンパイルしてみることにした。
まず Cygwin のインストーラから a2ps のソースをインストールした。/usr/src/ にソースがインストールされるので、解凍し、Cygwin 用のパッチを当てた。次に、日本語対応パッチを「GNU a2psの日本語NLSデータを作ろう」から取ってきて、これを当てた。configure してからコンパイルしたところ、途中でエラーが発生した。調べると、gettext-devel がインストールされていなかったのが原因のようで、これを Cygwin のインストーラからインストールした。しかし、これでもなぜかうまくいかなかった。/usr/src/a2ps-4.13/po/ で
$ msgfmt -o ja.gmo ja.po
と実行しておいてから再度コンパイルしたところようやく実行ファイルはできあがった。しかし、マニュアルのコンパイルでエラーが発生した。このエラーは無視してとりあえずインストールすることにした。
インストールが終わって a2ps を実行してみると、エラーが発生して PS ファイルが出力されなかった。/etc/a2ps.cfg に
FileCommand:
と書かれた行があったので、それを元の Cygwin 版 a2ps の設定に合わせて、
FileCommand: /usr/bin/file -L
に直したところ、"/usr/bin/file: not found" というエラーは出るものの、とりあえず PS ファイルが出力されるようになった。実際 /usr/bin/file というファイルは存在していないのだが、日本語に対応させる前の a2ps ではこの設定でもエラーは表示されないというのが謎である。
PS ファイルが出力されたと思ってほっとしていたが、よく見ると日本語がまだ文字化けしている。なぜかエンコードの設定が日本語になっていなかった。/etc/a2ps-site.cfg の
Options: --encoding=latin1
と書かれた行を
Options: --encoding=euc-jp
に書き直してようやく日本語が正しく出力されるようになった。
ちなみにカラーで出力するには、a2ps --prologue=color とすればよい。このオプションを省略しても必ずカラーで出力したいときには、/etc/a2ps-site.cfg の Options: で --prologue=color を指定しておけば良いはず。
Hotfix 適用 CD を使って Win2k インストール実験。Qfecheck.exe を使って Hotfix が正しく適用されているかチェックしたところ、2つほど正しく適用されていないものが検出された。面倒になって、Hotfix 適用 CD の作成は諦めた。
Intel Graphics Driverを入れた時に右クリックが重くなる現象を直すというページを見つけた。CF-R2C でデスクトップで右クリックしたときに、メニューが表示されるのが妙に遅いのが気になっていたのだが、これですぐにメニューが表示されるようになった。
Hotfix 適用 CD の作成方法についてもう少し調べていた。複数の Windows Update または修正プログラムを同時にインストールし、再起動を 1 回で済ませる方法も参考になりそうである。
HGST HDS722516VLAT20 (160GB) を \9,280 で購入。ずいぶん安くなったものだ。今回の購入目的は実験用である。近いうちに ICC を BigDrive に対応させたい。需要があるのか不明だが・・・。
どるこむかどこかの掲示板のログで、ICC を 160GB の HDD に適用したら、容量が元に戻らなくなってしまったという書き込みを見つけた。少なくとも需要はゼロではないということか・・・。
Hotfix適応CDを作ろう(←たぶん適用の間違いだよな)というページを見つけた。SP 適用済みの Win2k セットアップ CD を作成する方法を紹介したページはよくあるが、セキュリティーパッチまで適用した CD を作成するというのは初めて見た。
バルクの GSA-4082B を \9,399 で購入。カートリッジ入りの DVD-RAM は使えないものの、この値段で DVD±R, DVD±RW, DVD-RAM が使えるのはかなり驚きだ。しかしこれだけ安いとなるとやはり製造は韓国だろうか。品質が多少心配だ。
先月の spam メールの集計結果。着信拒否になった spam が少なくとも 3428通。着信拒否にならなかった spam が 779通。そのうち Spam Mail Killer で削除できた spam は 762通(97.8%)。先月もウィルスがやたら多かった。spam の総数は3月より 1400通近く増えた。うんざりだ。