2006年8月16日の日記を表示中

2006年 8月16日 (水)

喉が・・・

起きたら昨日より喉が痛いし(´・ω・`).

x86_64 vs Emcws-21.3 + Wnn7

どうにかビルドできたx86_64環境のEmcwsですが,Wnn7で入力しようとすると,サーバと通信し始めたところでセグって落ちます.もしかしてEmcwsってWnn7ダメなんだっけ?とググってみたら自分の日記に「できた」と書いてありました・・・.そうなのかー.あ,確かに32bit版だと動くわ.

早速gdbで見てみたところ,何やら「get_pwd」という関数でセグってます.何か引数のポインタがポインタっぽくない値(0x100000000)で,そこを読もうとして落ちてました.なんじゃこらと手繰ってみると,このまずい引数自体はEmcws側の「Fwnn_fisys_dict_add」から「jl_fi_dic_add」に渡されてる模様・・・.あれ?でもここでは定数0を渡してるよなぁ.何で0x100000000なんかになるの?ULとかつけなくても関数の型宣言見てコンパイラが適当に64bitとしてくれたりするんですよね・・・違うっけ?

とりあえずヘッダを見てみるかということで,Wnn7SDKのjllib.hを見てみると・・・

extern int jl_fi_dic_add();

extern キタ━━━(゜∀゜)━( ゜∀)━(  ゜)━(  )━(  )━(`  )━(A` )━('A`)━━━…‥ _|‾|○

えーと,つまり,Emcwsのsrc/wnnfns.cは引数の型を決め打ちで処理しているということか?ううう,何でヘッダに型を書いといてくれないわけ・・・?けちだなぁ.scim-wnnはどうしてるのかなーとソースを覗いてみたらsrc/wnnproto.h に自前のプロトタイプがいっぱい書いてありました.な,なるほど.

仕方ないので必要な関数のヘッダを自前で用意するかねぇ.jl.cやjs.cから適当にawkで抽出できるかな・・・

static int
jl_fi_dic_add_e_body(env, dic_name, hindo_name, suflag, rw, hrw, pwd_dic, pwd_hi
ndo, error_handler, message_handler)
register struct wnn_env_int *env;
char *dic_name;
char *hindo_name;
int suflag;
int rw, hrw;
char *pwd_dic, *pwd_hindo;
int  (*error_handler)(), (*message_handler)();
{

K&R キタ━━━(゜∀゜)━( ゜∀)━(  ゜)━(  )━(  )━(`  )━(A` )━('A`)━━━…‥ .というわけで自分でやるのは早々に諦め前にtkngさんがメールにちょろっと書いていたcprotoってやつを使って抽出してみました.すげ,超簡単.

作ったjs.cとjl.cの関数宣言をemcwsのsrc/wnnfns.cでincludeしてやったところ,型が合わないところがボロボロと・・・.つか引数の個数違うところとかあるし.実は32bit版もヤバいんじゃ・・・.src/wnnfns.cをいじって,jllib.hの入力予測関連の関数の半端に嘘が書いてあるexternをザックリ消したら,無事x86_64環境でもWnn7で入力できるようになりました.あー,疲れた.まあ,こんなもん未だに入れてる自分もあれですが,やっぱヘッダくらい欲しいよなぁ.つかWnn7なんかもうやめようぜ・・・.もしくは素直にななたまご使うとかさぁ.なんて自覚せずに使ってる人に伝えるのは難しいんですよねぇ.

2006年8月16日の日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2006年8月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ