« August 2000 | Main | November 2000 »

jrogue for MacOS X!


jrogueアイコンjrogueをCarbon化してみた。以前からソースにはCarbon化のための処理を入れてあるし、実際コンパイルし直すだけで理論上Carbon対応が可能なはずなのだが、少々難儀な問題がある。もともとrogueはUNIX生まれで、僕が元にしたソースはそれをDOSに対応させたものだ、というわけで、当然ながらCの標準ライブラリを大量に使用している。MacOS X Carbon対応のために一番問題になるのは実はこの標準ライブラリ絡みの部分なのだ。
従来のMacアプリケーション用APIはCarbonがうまくやってくれるが、標準CライブラリはCarbonには含まれていない。現在のMacOS 9では、標準ライブラリがOSに含まれており (もともと、すべてのPowerMacのROM内に標準ライブラリが含まれている。OSのバージョンが上がって、標準ライブラリも改良されて来ているので、最近はROMではなくSystemファイルに含まれているものが起動時にロードされて使われる)、これへのインターフェイスはStdCLibというstubを通して行うのだが、Carbon porting guideではこれを使うなと言う事になっている。最終的には使えるようになるようだが、現在のパブリックベータでは、Carbonアプリ用のStdCLib(CFMアプリケーションからUNIXレイヤーの該当機能にアクセスするバイパスのようなものらしい)はまだ完全ではなく、OS 9用にMPWで作成したStdCLib使用アプリケーションは使えないようだ。
意外に思われるかも知れないが、この事はあまりMacデベロッパの間で問題にはなっていない。もともとMacのAPIはPascalベースだし、Cっぽい作法を嫌う所が多い。コンソールの概念がないので、文字列表示も基本的にグラフィックだし、文字列操作もC文字列とか使ってしまうと、どっかでPascal文字列に変換しなければならなかったりしてめんどくさい。メモリ操作については、最近はそうでもないが、もともとメモリが少なかったのでリロケータブルブロックを二重ポインタで操作する専用のAPIがガンガンつかわれていた。ファイル操作にいたっては独自の属性やデュアルフォークシステムを標準ライブラリの機能ではまるでサポートできない。というわけで、Macのソフトではmalloc()もprintf()もstrcat()もfopen()もほとんど使われてこなかったのだ。
で、MPWからCodeWarriorにソースを写し、StdCLibの代わりにMSLを使うようにしてみた。CWのMSL実装は、OS内蔵の関数を使うのではなく、独自に標準関数をインプリメントしているので、OSの対応を待たなくても使えるのだ。しかし、CWのCarbon対応も、間もなく出るCW6(米国ではすでに発売されている)で正式に使えるようになるもので、うちにあるCW5ではプレリリース版のCarbon版MSLがあるだけだ。このプレリリース版が出た後も、AppleのCarbon仕様や、ヘッダファイルの仕様が変わっており、現在のCarbon1.0.4SDKの環境ではMSL自体がコンパイルエラーを出してしまう。幸い機械的に2,3箇所ソースをいじるだけでOKだったのでとりあえずMacOS 9のCarbonLib上で動くものがコンパイルできた。

さて、問題はうちにはMacOS X パブリックベータがないことだ。まだ日本で発売されていないので、年間500$のデベロッパ契約をしている人、米国に知人がいる人など以外はなかなか入手できないのである(英語版のMacOS X PBはアップルストア直販のみで、日本からは買えない)。というわけで、自分では動作チェックが出来ない。ついでに言うと、以前のDeveloper Preview版と違い、PB版は未サポート機種へのインストールオプションが無くなっているらしく、うちのPowerMac7600にはインストールすら出来ない可能性がある。こうなると、そもそも自作アプリのCarbon化も意味がない気がしてくるね。ともかくだれか試してみて下さい(一部、動作したという報告がありました)。

(http://www.win.ne.jp/~juan/misc/roguelike.html)
今回の方法は、標準ライブラリの機能をアプリケーション自体に持たせたわけで、BSDレイヤーを持つOS Xにこの方法を用いるのはかなり無駄っぽい。あきらかに容量増えてるしな。まあ、容量増えた原因はそれだけじゃなくて、OS X用の巨大なアイコンデータを持たせたという事もあるのだけど(なにしろ32bitカラーで128*128ピクセルなんだもん、昔ならnetでやり取りするのもはばかられるサイズだよな)。

OS X用のアイコン、Cocoaなどで.icnsファイルにするのはわかるけど、従来のCFMアプリであるCarbonで、どういうフォーマットで持たせるのかっていう説明が見つからなかったのだけど、どうやるのが正しいのでしょうね。BNDL,FREFと関連づけたicnsリソースを用意すればいいっぽいのだけど、なにしろきちんとしたドキュメントがみつかならいんで、巷に出回りつつあるcarbon対応のシェア/フリーウエアを解析してみた、ところが、ほとんどの場合、OS X用のサムネールアイコン(そう、あの特大サイズのアイコンはサムネールというのだ)は内蔵していないのだった。もちろん、OS 9 以前の32ピクセルサイズのアイコン(ちなみにこれは伝統的にラージアイコンと呼ばれる。16ピクセルのがスモールアイコン)だけでも動作に支障はないのだけど、あれが「ぐわっ」とドックなどで拡大されるとみっともないような気がする。

OS Xのアイコンは、精密で写真っぽい質感が要求される。Appleの出して来た標準のアイコンと違和感がないようにデザインしようとすると、かなり面倒な事になるだろう。従来ResEditのICONエディタでポチポチドット打っていた段階でも、プログラマはともすればコードが仕上がっているのに、アイコンでザインで四苦八苦し、「これに一番時間がかかる」などと冗談まじりにぼやいたものだが、今後はおそらく3DソフトやPhotoshopを駆使したアイコンデザインが主流になるだろう。アイコン制作受注と言う仕事がより注目を浴びるのではないだろうか。

| | Comments (2) | TrackBack (0)

« August 2000 | Main | November 2000 »