佐伯と申します。
いつも、FreeBSDで快適なPC-UNIX環境を提供して
下さり、アメリカや日本など、世界中の
The FreeBSD Projectの皆様には感謝の念で
いっぱいです。

さて、手許の
Dell XPS NoteBook L501X

FreeBSD/amd64 8.2-RELEASE-p2
ja-skk-9.6_3
ja-skk-jisyo-201102
ja-skkserv-9.6_2

の環境で、skkservが起動しません。
foo@bar~% dmesg -a | lv
で、

Starting skkserv.
/etc/rc: WARNING: failed to start skkserv

となります。

NEC PC-9821 Xa/C10w
NEC PC-9821 Xa12/C8
でかつて稼動していた
FreeBSD(98) 3.5.1-RELEASE
FreeBSD(98) 4.1-RELEASE
FreeBSD(98) 4.7-RELEASE
FreeBSD(98) 4.9-RELEASE
FreeBSD(98) 4.11-RELEASE-p26

では、
skkserv が正しく起動し、emacsで日本語入力も
行なえていました。しかし、今は、いずれの98も
ディスク=クラッシュや電源断のため、skkserv
などのバージョンは確認できません。

SONY VAIO PCV-LX51/BP
で現在も稼働中の
FreeBSD/i386 6.4-RELEASE-p11
ja-skk-9.6_2
ja-skk-jisyo-200707
ja-skkserv-9.6

では、
emacs-21.3_12
で今でも快適に日本語入力ができております。

ところが、
Lenovo (旧 IBM) ThinkPad R40e
FreeBSD/i386 8.1-RELEASE
でも、
8.2-RELEASEと同じ、skkservが起動できない
エラーが起っていました。
FreeBSD/i386 8.0-RELEASE
のときから、既にこのエラーは出ておりました。

このThinkPad R40eも、現在はディスク=クラッシュ
のため、skkservのバージョンは確認できません。

FreeBSD/amd64 でも、
FreeBSD/amd64 8.1-RELEASE-p4
の頃からエラーが出ていました。

話を纏めると、
2000-2009年のskkservは起動できた。
2010-2011年のskkservは起動できない。
ということになります。


foo@bar/usr/ports/japanese/skkserv# make patch
foo@bar/usr/ports/japanese/skkserv/work/skk-9.6/skkserv# lv README
を読むと、


3. skkserv の起動
=================

skkserv の起動時のオプションで、辞書名の変更、ディバッグ・モードの指定
などができます。

skkserv はスーパーユーザが起動する必要はありません。


skkserv [-d] [-p nnnn] [jisho]

-d              ディバッグモードです。
-p nnnn         通信用のポート番号として nnnn を使います。
jisho           jisho を辞書ファイルとして利用します。


とあるので、

foo@bar~# skkserv -d

とすると、

file descriptor for initsock is 4
skkserv: format error; new-style dictionary should have two parts

と返って来ます。

foo@bar~# skkserv -d /usr/local/share/skk/SKK-JISYO.L
としても、同じメッセージが返って来ます。


ja-rskkserv-2.95.4
ならば、問題なく辞書サーバーが起動できます。辞書ファイルが壊れてい
る訳でもないようです。rskksevでサーバーを起動すれば、skkが
emacs-23.3_1,2
から問題なく起動できます。このメールの下書きも、emacs+skkで
書いています。

上記のskkserv -dのエラー=メッセージは、
FreeBSD/i386 8.0-RELEASE
FreeBSD/i386 8.1-RELEASE
でも確認できました。

foo@bar/usr/ports/japanese/skkserv/work/skk-9.6/skkserv#
jless -N ./skkserv.c

で見てみると、


    427   if (target != STRMARK)
    428     err("format error; new-style dictionary should have two parts");
    429   while (code >= KANA_START - 1) {
    430     *pjtab++ = ftell(jisho) - 2;
    431     code --;
    432   }


辺りが関係ありそうです。しかし、小生は、C プログラミングは入門書
を一冊、独学した程度なので、自力ではパッチが書けそうもありません。

本来、オープンソースではこういう問題を発見した人が
メーリングリストにパッチを投げて貢献するものだと思いますが、
それができないのが腑甲斐ない次第であります。

どなたか、この問題の解決にご助力くださいます方はいらっしゃいません
でしょうか。ご協力を平にお願い致します。
小生以外の環境でも、この問題は起っていると思います。


*****************************************************
      佐伯 浩 (Hiroshi Saeki)

      h-sa...@wmail.plala.or.jp


             http://rick-deckard.cocolog-nifty.com/
             http://joutarou-kujo.spaces.live.com/

Web          http://www9.plala.or.jp/rick-deckard/


twitter      http://twitter.com/Joutrou_Kujo            

******************************************************

メールによる返信