2020年8月23日日曜日

いまさらの電子辞書#1

何故?
先日、CDを整理していたら、Stingの"Ten Summoner's Tales"のCDの中から、電子辞書のCDが出てきた。
宮崎生まれの私にとっては、Stingは SEAGAIA のこけら落としに来てくれた特別なアーチストだ。

十数年前はネット上に電子辞書は少なかったし、PCもネットも遅く、広告の表示がひどい足かせとなり、実用的ではなかった。紙の辞書も使っていたが、電子辞書も売られるようになっていたので、それを使うようになった。
しかし...、何故StingのCDのケースに入っていたのだろう?

その当時、Linuxで、この辞書CDを使うのは一苦労だった事を、だんだん思い出した。
今は、ネット上に電子辞書がたくさんある。それどころか、電子翻訳も発達している。さらに、電子辞書はスマホアプリが中心となり、電子辞書CDや、専用電子辞書は下火になっている。
そういう時代だからこそ、もう一度この辞書CDを扱えるようにしてみよう。
無駄なのは解っている。しかし、遊びとはそういうものだ。実用性や採算性を追求するのは「仕事」だ。

CDの表面にはEPWINGと書かれているので、EPWING形式なのだろうが、どういうわけかCATALOGSファイルが無い。
壊れているのだろうか?
ネット上で見ても、そんなCDの話はない。さらにいろいろ探しているとCATALOGSファイルの作り方が見つかった。
1999年(20世紀末!)ごろ太田純氏により開発されたcatdumpというアプリを使うらしい。
Debian系では、epwutilというパッケージに入っている。このパッケージはDebian Jessieを最後に、以降のDebianでは無くなっている。
しょうがないので、Jessie の epwutil のソースをダウンロードしてきた(以下の3ファイル)。
http://deb.debian.org/debian/pool/main/e/epwutil/epwutil_1.1-8.1.dsc.
http://deb.debian.org/debian/pool/main/e/epwutil/epwutil_1.1.orig.tar.gz
http://deb.debian.org/debian/pool/main/e/epwutil/epwutil_1.1-8.1.debian.tar.gz

dchでローカルでバージョンを上げておいて(存在しないので必要ないかも)、Ubuntu 18.04でビルドしようとするが、やはりそのままでは通らない。
こんな感じでエラーになる。
 : (省略)
dh_clean: Compatibility levels before 5 are no longer supported (level 4 requested)
debian/rules:27: recipe for target 'clean' failed
make: *** [clean] Error 25
dpkg-buildpackage: error: fakeroot debian/rules clean subprocess returned exit status 2
debian/compatの値が4になっているためだ。このへんを見ると、最近では10が普通らしい。
Lennyの頃から組み込みでdebianを使っていたが、たしかJessieの頃にMulti-arch対応等でパッケージ管理システムが大きく変わり後方互換を完全には維持できなくなった(と記憶している)。それ以降、どのような変更があったのかは見ていなかったが、古いものとの互換性を維持するために手間をかけるよりも、より良い形に変えていくために手間をかけたほうが良い。以降も色々あったのだろう。
epwutilは単純なMakefile形式だし、.dscを読んでもビルド依存物はdevhelperだけだ。
単純に数字を大きくしても、ビルドできるだろう。とりあえず、10 にする。

この状態で、"dpkg-buildpackage -us -uc" を行うと、Warningがでるが一応ビルドできた。
とはいえ、日本語文字コードがEUC-JPになっており、ビルドされたバイナリのエラーメッセージやヘルプがバケバケだ。20年以上前のものなのでしょうがない。
現代なら、UTF-8にするべきだろう。以下のようにして、UTF-8に置き換える。
$ nkf -w80 -Lu -x --in-place=.BAK *.c *.h *.man
ついでに、Warningを直しておこう。以下を行う。
  • catdump.c と squeeze.cで、unistd.h を #include する。
  • bookinfo.cの、126行付近、「情報所在ブロック」の書式化文字列の"%d"を"%ld"にする。
  • bookinfo.cの、ローカル関数hex()のプロトタイプが無いので、プロトタイプを書く。(他と合わせて、昔の書き方にしたほうが良いだろう)
  • squeeze.c内のlog()がビルドイン関数と名前がかぶっているので、wrlog()に置き換える。
    "sed -e 's/\<log(/wrlog(/g' -i.BAK squeeze.c"
この状態で、そのままビルドしようとしても、以下のようなエラーになる。
 : (省略)
dpkg-source: info: you can integrate the local changes with dpkg-source --commit
dpkg-source: error: aborting due to unexpected upstream changes, see /tmp/epwutil_1.1-8.1ubuntu1.diff.HodWKA
dpkg-buildpackage: error: dpkg-source -b epwutil-1.1 subprocess returned exit status 2
書かれているように、"dpkg-source --commit"を実行する。
言われるがままパッチ名を付けたり、サマリや説明を書いたりする。

この状態で、"dpkg-buildpackage -us -uc"をすると、新しいバイナリパッケージやソースパッケージができる。
 : (省略)
dpkg-deb: building package 'epwutil' in '../epwutil_1.1-8.1ubuntu1_amd64.deb'.
dpkg-deb: building package 'epwutil-dbgsym' in 'debian/.debhelper/scratch-space/build-epwutil/epwutil-dbgsym_1.1-8.1ubuntu1_amd64.deb'.
	Renaming epwutil-dbgsym_1.1-8.1ubuntu1_amd64.deb to epwutil-dbgsym_1.1-8.1ubuntu1_amd64.ddeb
 dpkg-genbuildinfo
 dpkg-genchanges  >../epwutil_1.1-8.1ubuntu1_amd64.changes
dpkg-genchanges: info: not including original source code in upload
 dpkg-source --after-build epwutil-1.1
dpkg-buildpackage: info: binary and diff upload (original source NOT included)

$ ls ../
epwutil-1.1
epwutil-dbgsym_1.1-8.1ubuntu1_amd64.ddeb
epwutil_1.1-8.1.debian.tar.gz
epwutil_1.1-8.1.dsc
epwutil_1.1-8.1ubuntu1.debian.tar.xz
epwutil_1.1-8.1ubuntu1.dsc
epwutil_1.1-8.1ubuntu1_amd64.buildinfo
epwutil_1.1-8.1ubuntu1_amd64.changes
epwutil_1.1-8.1ubuntu1_amd64.deb
epwutil_1.1.orig.tar.gz

このepwutil_1.1-8.1ubuntu1_amd64.debをインストールする。
sudo dpkg -i ../epwutil_1.1-8.1ubuntu1_amd64.deb

"catdump -h" を実行すると以下のように表示される。
$ catdump -h
電子ブック/EPWING カタログ/テキスト変換 Ver.1.1 (1999/01/13)
    Written by Junn Ohta (ohta@src.ricoh.co.jp), Public Domain.

使用法: catdump [-g] [-d] [-u <テキストファイル>] <カタログファイル>

オプション:
    -g: EBG 専用モードにする
    -d: カタログファイルを標準出力にダンプする
    -u: テキストファイルをカタログファイルに変換する
ギリギリ入手できたけど、こういうアプリは無くなっていくのだろうな…。

とりあえず、epwutilのビルドまで。
次は、実際にCATALOGSファイルを作成する。
つづく。

0 件のコメント:

コメントを投稿