nkf

http://sourceforge.jp/projects/nkf/
DOS 版のバイナリ http://hp.vector.co.jp/authors/VA007219/

作業

2.0.7 の正式版がリリースされました。 ということで以下の作業はほぼ旧弊化しました。 わはー。
(自力で 16bit 版バイナリを作成したい場合は、nkfdos16.txt の説明が多少は役に立つかもしれません)

2.0.7 正式版の OS/2 バイナリを公開しました → os2.jp での案内

2.0.7 (2006-05-06)

ようやく test.pl のテストが 16bit バイナリでも通るようになったヨ…

16bit バイナリ(DOS, OS/2 1.x) : nkf207b1-20060506-dos16-20060520.zip
バイナリ同梱の readme っぽいやつ : nkfdos16.txt
cvs 版に対するパッチ : nkf207b1-20060506-dos16-20060520.zip

2.0.7beta1

OS/2, djgpp 対応パッチ(2.0.7b1 用): nkf207b1-os2-diff-20060505.zip
OS/2 と DOS 用のバイナリ : nkf207b1os2-20060505.zip

2.0.6a

OpenWatcom で 16bit DOS 版のバイナリを作れるようにするパッチ(2.0.6a): nkf206-dos16-diff-20060501.zip

備忘

  • OS/2 だとバイナリモード設定に freopen 使ってるけど、こうなってることには何か経緯があるのだろうか。 ほかと同じく setmode とか、あるいは fsetmode とかじゃダメだったとか?
  • (→ vector にある OS/2 版のバイナリは IBM の VAC++ でコンパイルされている気配)
  • 現在の設定だとたぶん OS/2 では --overwrite できない。 ファイルの扱いは MSDOS と同じにしたほうがいいかと。
  • CVS から取ってきたやつのほうが素直にいじれそう?
  • (→そのままだと 16 ビットターゲットが死亡)
  • (2006-05-05) なんか 2.0.7_beta1 とかいうのが出ていた。 正直 16bit 対応は無理ぽな感じ。 いや DOS 用のバイナリはあるんですが…Unicode ⇔ 非 Unicode 変換がいろいろ厳しい感じです。テスト全然通んねえ。
  • (2006-05-20) 2.0.7 beta(2006-05-06) を 16bit 対応させてみた。 しかし Borland C++ だとまともなバイナリが作れませんな。 OpenWatcom か VC++ 1.x でよろしこ。

自分で作ってみる (2.06)

OpenWatcom : 16bit DOS

utf8tbl がとってもでかくて、ふつうにコンパイルするとセグメントに収まりきらない。

コンパイル時に -zt オプション(ボーランドでいうところの -Ff=n、MS-C でいうところの /Gtn だろうか…)を使って、データをこまめに別セグメント化する。

wcl -bt=dos -ml -zt128 -DINT_IS_SHORT -fe=nkf.exe nkf.c utf8tbl.c -l=dos

しかし(ライブラリがスタティックリンクされてるとはいえ)、バイナリサイズが MinGW 版よりでかい(そして遅い)のでかなり萎える。

djgpp : 32bit DOS

unistd.h を include するようにして utime 方面を適当に補正。 あとは、make nkf "CC=gcc" とかやっとけば適当に作れる。

致命的な問題として、入出力がファイルにリダイレクトされていない場合、Windows のコマンドプロンプト上で動かすと固まることがある。 リダイレクトされていないデバイスに setmode をかますと、djgpp のランタイムはデバイスに IOCTL を発行してデバイスの RAW/COOKED モードを切り替える(ついでに BREAK もオフにする)が、どうもそれがうまく動いてくれてない感じですよ…。