Misc Change Log

`OpenBSD で scheme のアプリ開発' みたいなことをやってます。

2005-07-31

ogginfo が日本語タイトルで常に ### に化ける

mp3, vorbis プレイヤーとして、gqmpeg を愛用しているのだが、 vorbis でエンコードしたファイルの曲名がいつも '#' で埋められているのでおかしいなあ、と。

gqmpeg のソースを読んでみると、 ogginfo の出力をパイプで読んでいるだけのようだ。 そこで、

$ ogginfo foo.ogg

とすると、タイトルが '#' で埋められている。

で、vorbis ファイルを直接読んでみると、 やっぱり '#' で埋められてる。

vorbis のファイルは abcde エンコードしており、こいつは内部で oggenc を使っているので、 結局のところ vorbis-tools のロケールまわりに問題があるらしい。

ざっとコードを見るに、 文字コードの変換は share/utf8.c で行っているんだけど、 config.h をインクルードしてないのが原因だった。 share/iconvert.c も同じく。

というわけで、以下のファイルを ports/audio/vorbis-tools/patches 以下に投入。

patch-share_iconvert_c and patch-share_utf8_c

Citrus なしの OpenBSD の場合、環境変数 CHARSET を設定すべし(EUC-JP とか)。 Citrus 環境下では nl_langinfo(CODESET); されるのでロケールから自動設定される。

というわけで解決。

てか、config.h が無かったら、 utf8.c も iconvert.c も何もしないコードしか出力されないんだけど。 誰もテストしてないのかよ!なんだかなあ。

ところで、FreeBSDNetBSD も対策をしてないようなので、 このパッチは有効みたい。未確認。

Posted at 18:36 | Permalink | Category | Comments
2005-07-12

pccts 入門その 2

LL(1) で解決: ch3-03p2.g

expressions
    : expr ("="^ expr )* "\n"
    | "\n"
;

のようにすればよい。この場合、左辺を確定した後で右辺のマッチに入るので曖昧にならない。 ただし、この場合は、

1+1=3

も文法的に正しくなる。ので、木を評価するときに左辺をチェックする。 今回はそのまま出力するだけなので、上の式だと '3' を印字する。

そういえば、一部のパターンマッチの機構を持つ言語だと確かに上の文法もアリだ。 なるほどなるほど。

Posted at 17:42 | Permalink | Category | Comments
2005-07-11

pccts 入門

LL(k) parser generator の pccts について少しだけ。

私が教えてあげるわけじゃなくって、私が入門。 つうか教えてくれ。

lexer/parser と聞いてピンとこない人は、

http://www.okisoft.co.jp/esc/whitepaper.html こちらの「開発」はおもしろおかしくディープなこと書いていらっしゃるし、書籍なら、

Nutshell の Lex & Yacc

あたりを読めば、lexer と parser でどんなことができるのか、 ひととおりは分かるようになるんじゃないかなあ (ちなみに yacc は LALR parser generator)。 って、日本語訳版は絶版になってるのか。 知らなかった。

続きを読む ...

Posted at 15:30 | Permalink | Category | Comments
2005-05-02

xipmsg-8088 のパッチとか

xipmsg のパッチをやっつけで書いた。

ipmsg もいろいろあるけど、結局これに戻ってしまうなあ。

Posted at 23:36 | Permalink | Category | Comments
2005-04-25

日本語で abcde を使う

http://d.hatena.ne.jp/...

押し売りをしてしまったので、責任を取ってまとめ。

abcde とはコンソールベースの CD リッパー、エンコーダ。 非常に手軽に使えるので(ほとんど Enter 押すだけ)、 HDD の肥やしの大量生成を可能にしてくれる素敵なソフトである。

で、もちろん日本語での細かい事情なんて知らないので、 そのままだと日本語タイトルの CD のエンコーディングはうまくいかない。

abcde 自体はシェルスクリプトなのでまあ問題はない(SJIS なファイル名とかでなければ)。 OpenBSD だと e?grep がマルチバイトを通さないので、

# cd /usr/ports/audio/abcde
# make extract
# cd w-abcde-2.2.0/abcde-2.2.0
# perl -i -p -e "s/grep/grep -a/" abcde cddb-tool

-a オプションで無理矢理対応。

次は日本語 EUC で返す CDDB を ~/.abcde.conf にセット。

CDDBURL="http://freedbtest.dyndns.org/~cddb/cddbeuc.cgi"

あとは id3 の SJIS 強制変換パッチを作成したので当てる: (id3-0.12-id3.c.diff)。

これで EUC のファイル名、id3tag が SJIS の mp3 ファイルが作成されるはず。

余談だけど、id3 はジャンルに Japan Rock が存在しないので Jpop あたりで編集し直さないといかん。ううむ。

Posted at 01:21 | Permalink | Category | Comments