« Rogue | Main | Rogue »

Rogue


ソースをメッセージ分離版rogueに変更。これでMacでもLeafRogueができたりするわけさ。ところで、メッセージ分離版は起動時にコマンドラインでデータファイルを指定する事になっているが、当然Macにはコマンドラインがないので、他の方法を取らなければならない。最初はrogue本体と同じディレクトリにデフォルトのメッセージファイルを置いておいて、とりあえずそれを読ませ、初期設定ダイアログで変更可能にするというインターフェースで作ってみたが、これだと、もしアプリケーションだけを別の場所に移動したりすると起動すらできないことになる。また、初期設定ファイルにメッセージファイルのエイリアスを保存させるようにしたので、間違って関係ないテキストファイルを指定してしまった場合、エラーで落ちて、初期設定ファイルを削除しないと二度と動かないということになる。色々悩んだ挙げ句、デフォルトのメッセージファイルをアプリケーションのリソースフォークに格納して、指定したメッセージファイルに問題があったらデフォルトメッセージを読み込んで起動するように改造。
前に書いたセーブファイルのIDの件、Macの機能で実現は可能なのだが、問題はボリュームを超えての「ファイルの移動」ができないこと、およびHFS系のファイルシステムでないとファイルIDが有効でないということ。最初に保存したディスクと別のボリュームにセーブファイルを動かすと、コピーを作った事になり、そのファイルから起動できなくなってしまう(同じボリューム内での移動はOK)。セーブファイルの厳しさをそこまでつくりこまなくてもいいと思い、やはりやめることにする。ところで、UNIXでは例えばmvコマンドでボリューム跨いでもきちんと移動になるが、この際、rogueのセーブファイルはきちんと同一のファイルとして扱われるのだろうか。確かUNIX用の処理では、inode番号を使っていたが。

調子にのって、rogueをCarbonアプリケーションにしてみる。いろいろ書き換えなければならない所も多いが、なんとか動作する。しかし、どうも根本的な問題がある。
CarbonはMacOS APIをMacOS Xで使えるようにするものだ。これに添ってアプリケーションを作れば、MacOS Xのメモリ保護、プリエンプティブマルチタスクなどの恩恵を受ける事ができる。おまけに、MacOSでもMacOS Xでも一つのバイナリで動作するアプリケーションができる。ただし、CarbonがサポートするのはMacOS APIのみであり、ANSI Cの標準ライブラリなどは含まれない。もともとMacOS X にはBSD互換レイヤーがあり、ネイティブに標準ライブラリが使用できる。MacOSの場合には、OSにStdCLibという標準ライブラリが組み込まれていて、これに動的にリンクすることで、不完全ながら標準関数が使える。当然、rogueみたいな移植モノではStdCLibに依存した移植を行うわけで、アプリケーションからStdCLibへのリンクは外せない。
MacOSでCarbonアプリケーションを開発する時は、CarbonLibを動的にリンクする。この共有ライブラリは、MacOS上でCarbonアプリケーションを動かすためのモノだが、これを使う場合、クラシックなMacOS アプリケーションを作る時にリンクする基本的な共有ライブラリ(InterfaceLibなど)の機能をCarbonLibが内蔵しているので、それらはリンクせずCarbonLibだけをリンクする事になる。この段階で、MacOS XのBSD/POSIX互換レイヤーを呼び出すライブラリをリンクする事はできない。もし、そのためのstubファイルが用意されていても、それではMacOS上では実行できないOS X専用バイナリになってしまうだろう。可能なのはStdCLibをリンクする事だが、これはMacOS組み込みなので、MacOS Xでは使用できない。おそらく起動しようとすれば共有ライブラリのロードに失敗してエラーを出すだろう。
バイナリ互換を保ちながらMacOS/MacOS Xでの標準ライブラリを使用するには、共有ライブラリそのものであるStdCLibをアプリケーションと同じフォルダに入れて、一緒に配付するという方法が考えられる。現在、静的ライブラリのStdCLibは配付されておらず、共有ライブラリ版のみであるため、通常のPPCLinkでアプリケーションに直接組み込む事はできないが、Carbon環境がClassicと同様、アプリケーション直下などの共有ライブラリを自動的にサーチして使用する仕組みであるなら、これは動作する可能性が高い。アプリケーションとライブラリという、分割ファイルになるのが気に入らないが、これはOS X御得意のパッケージにしてしまうという手もある。
もっとも、このStdCLib共有ライブラリについては、Carbon互換ではないので使うなとドキュメントされているという凄い問題があるのだが………

|

« Rogue | Main | Rogue »

「パソコン・インターネット」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/10254/53227

Listed below are links to weblogs that reference Rogue:

« Rogue | Main | Rogue »