できた!TTC2TTF on .NET!!

なんか変なことを書いてしまいました。.NETさんごめんなさい。
逆順をちゃんと逆順として解釈してくれているようです。
ですけど、TTCは正しい順番なんで、さらに逆にしなくちゃいけないのは確かなようです。
このあたりはスマートな方法とオブジェクト指向な方法を今後編み出すとします。
ですけど元のCのソースをほぼそのまま移植はできました。
ほとんどmain関数で展開してるのでわかりにくいけど。
/fdiary/img/ttc2ttf.lzh
これでとりあえずWindowsでまともに動く分解ができます。
あとはsbit32のフロントエンドがあれば簡単にできますね。
どっちかというとそっちのほうが簡単かもね。
てか熱中しすぎた、寝な体にこたえる。


ついでにもういっちょ、 SBIT32 EBDT削除フロントエンド、sbitfront完成。
/fdiary/img/sbitfront.lzh
中に説明も書いておきましたけど、Vistaでも当然のように動いてくれます。
ためしにVistaのMS PゴシックをTTC2TTF on .NET・SBIT32.EXE×EBDT削除フロントエンド・ttfname3でやるときれいにできました。
ふむふむ、これならいままでのデザインを壊さないうえに非常に美しい。
まぁこれは実に単純なもんです。よくあるプログラムのように書いてあります。
非常に快適ですね。
ライセンス的にも改造は許してるそうなので。試すだけならタダです。どうぞー。
(Date: 2007/03/02(Fri) 18:06)


TTC2TTF on .NETもずいぶんとそれらしくなった。
適当にオブジェクトにしてやった。個々は把握しやすくなったな。
まぁそれがオブジェクトを使う意義であるわけで。
それとBitConverterに依存しない方法でByte[]とuint・ulongの変換をさせてます。
まぁ…正直BigEndianな環境はないからわからないけど、多分これでいいはず。

            uint res  = (uint)bu[p] << 24;
res += (uint)bu[p + 1] << 16;
res += (uint)bu[p + 2] << 8;
res += (uint)bu[p + 3];
return res;

これでbyte[]からuintに変換してる。ビットシフトは<<なら数式で言えば×の方向のようだ。
a << 8はa×28という風なことをコンピューターらしく書いてある。
まぁ4倍するのにわざわざa << 2とかするのは嫌いだけど、今回はむしろビット単位の話なのでむしろ大歓迎。

            byte[] tmp = new byte[4];
tmp[3] = (byte)src;
tmp[2] = (byte)(src >> 8);
tmp[1] = (byte)(src >> 16);
tmp[0] = (byte)(src >> 24);
return rmp;

これはそれの逆。uintをbyteに落とすと下の8ビット分だけになるので
0x66637474という内容のuint型の変数をbyteのキャストすると0x74になるみたい。
そんな調子でsrc >> 8とかで割り算の方向にシフトしてと。ちなみに切り捨て。
多分これでいいんだと思うけど。動いてるしいいんだろう。
(Date: 2007/03/02(Fri) 19:26)