[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mail/ja-mh package



三河と申します。こんにちは。

vmh のパッチを作ってみました。
NetBSD curses を使ったものと、ncurses を使ったものの両方添付しています。
pkgsrc/mail/ja-mh-curses が NetBSD curses、
pkgsrc/mail/ja-mh-ncurses が ncurses を使ったものです。
(h/mh.h のパッチが無かったためコンパイルに失敗していましたので、patch-at
も足しています。)
NetBSD-2.0G, ncurses-5.4, kterm, kinput2 で確認しています。
日本語関係以外の curses/ncurses の確認に、wscons の vt100 エミュレート
(termcap の vt100 と vt100-nav) も使っています。

> A. 実は、wscanw(3)を使って書き換えできる。

構造体メンバの参照については、winch(3) を使って書き換えています。
mvwinnstr(3) でも書き換えられますが、NetBSD-1.6 あたりが必要なようでした
ので winch() にしています。(CVSWeb の src/lib/libcurses/curses.h を見たと
ころ、mvwinnstr() は revision 1.52 で追加されていました。)

> B. ncursesを使う; 日本語表示に問題はあるのか、ないのか?

ncurses の場合も、隠蔽されている WINDOW 構造体のメンバにアクセスしていま
した。こちらは mvwinnstr() で書き換えています。ncurses 固有の日本語表示問
題は特になさそうです。

他、vmh 自体に以下の問題と思える箇所がありました。

  i. 日本語入力できない。
 ii. スクロール等でスクリーンに上書きする際に、元の文字列を消去していない
     ため文字化けする。
iii. コマンド入力バッファが固定長なので、(termcap co >= BUFSIZ) の場合、
     バッファオーバーフローする可能性がある。
 iv. EUC-JP のコードセット2/3 に対応していない。
  v. (ncurses のみ) devel/ncurses/buildlink3.mk をインクルードすると、
     mh-6.8.4-JP-3.03/uip 以下のプログラムのリンクに失敗する。(以下のエラ
     ーメッセージ)
 vi. コマンド入力時に、画面端で折り返し等の処理を行っていない。
vii. X 上のターミナル等、リサイズ可能なターミナルを考慮に入れていない。

[snip]
gcc -L../sbr -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -Xlinker -rpath -Xlinker /usr/pkg/lib -o xali ali.o aliasbr.o ../config/config.o  -lmh ../mts/libmts.a  ../zotnet/libzot.a ../config/version.o 
../sbr/libmh.so: warning: getwd() possibly used unsafely, consider using getcwd()
../sbr/libmh.so: warning: mktemp() possibly used unsafely, use mkstemp() or mkdtemp()
../sbr/libmh.so: undefined reference to `dparsetime'
../sbr/libmh.so: undefined reference to `set_dotw'
../sbr/libmh.so: undefined reference to `getadrx'
../sbr/libmh.so: undefined reference to `dtimezone'
../sbr/libmh.so: undefined reference to `tw_moty'
../sbr/libmh.so: undefined reference to `dlocaltime'
../sbr/libmh.so: undefined reference to `tw_dotw'
../sbr/libmh.so: undefined reference to `twclock'
../sbr/libmh.so: undefined reference to `dgmtime'
../sbr/libmh.so: undefined reference to `dasctime'
../sbr/libmh.so: undefined reference to `legal_person'
../sbr/libmh.so: undefined reference to `tw_ldotw'
*** Error code 1 (continuing)
[snip]

元の問題も含め、vii. 以外は直してるつもりです。iv. はちょっと中途半端です
が (WINputc() のことです)。
vi. については画面端まで入力された後、入力を切り捨てるようにしてます。折
り返すかスクロールする方が望ましいと思うのですが、vii. と一緒に直そうかと
思い手を付けていません。
NetBSD 以外のことも考えると ncurses の方が良いような気がしますが、どちら
か決めて頂ければこの辺も直したいと思います。

ja-mh.tgz