既存のソースコードをCarbon APIに対応させ、Mac OS X環境でも起動できるアプリケーションを完成させるのには、いくつもの工程が存在します。
(1)必要のないAPIの削除
(2)MacOS 8/9で導入された新APIの利用
(3)WinodwPtrとGrafPtrを明確に区別
(4)アクセッサーファンクションの利用
(5)Print Manager関連のAPIを変更
(6)Scrap Manager関連のAPIを変更
(7)Mac OS Xメニューモデルへの変更
(8)新しいイベントモデルへの変更
(9)Mac OS Xに対する最適化
これらの工程は、今後Apple社から発表される技術内容(Mac OS Xβ版とか...)によっても変化する可能性があります。また、Carbon化するアプリケーションのタイプによっては省略できる工程もあります。例えば、プリントアウトの必要ないアプリケーションの場合には、(5)の工程を行う必要はありません。加えて、Mac OS 8/9環境のみで動作するCarbonアプリケーション(意味があるかどうかは別にして...)の開発には、(7)から(9)の工程は必要ありません。
ただし、どのアプリケーションに関しても最低限(1)から(4)までの工程は必要です。また、それらの工程はそれぞれが相互に関係していますので、4つの工程を同時進行で進めても良いと思います。ひとつのソースファイルをコンパイルし、表示されたシンタックス以外のエラー(APIや定数が定義されていないとか...)を調査して順次対処していきます。この時の参考となるが、Apple社が提供している各Managerに対するドキュメント(PDF)ですが、それ以上に、エラー箇所に関係するManagerのヘッダーファイルが手助けとなります。例えば、Window Manager関連のAPIについてコンパイルエラーが表示された場合には、MacWindows.hを参照してみます。そのソースコードの中で、
#if CALL_NOT_IN_CARBON
と
#endif /* CALL_NOT_IN_CARBON */
ではさまれた箇所に記載されているAPI、定数、構造体は、Carbon環境では一切使用できませんので注意してください。また、コメントとして...
/* Routines available in Mac OS 8.5 and later*/
とか
/* Routines available in Carbon and later*/
などと記載されている箇所は、Mac OS 8.5以降の環境やCarbon環境のみで利用できるAPI、定数、構造体であることを示しています。
では、各工程を一つ一つ検証していくことにします。
(1)必要のないAPIの削除
今まで特定の箇所に実装してきたAPIのうち、Carbon環境では実装する必要がない物があります。例ば、一番最初(多分、main()ルーチン)に実行していたInitGraf()やInItFonts()、InitWindows()、InitMenus()、TEInit()、InitDialogs()といった各Manager初期化ルーチンは、すべて実装する必要はありません。メニュー関連ですと、アップルメニューに項目を加えるAppendResMenu()とか、そのメニュー項目を起動させるOpenDeskAcc()なども必要ありません。Carbon環境では、これらはすべてOS側が自動的に行います。
同様にイベント関連のSystemtask()や、Text Servic ManagerのTSMEvent() やTSMMenuSelect()といったAPIも実装する必要はありません。それから、Carbon環境ではQuickDraw 3DのAPIは一切サポートされていませんので、もしアプリケーションがそれらを利用していると、OpenGLルーチンか独自のルーチンに切り換える必要があります。QuickDraw 3Dファンへの朗報として、「Quesa」というOpenGL上のQuickDraw 3Dコンパチブル・ライブラリが開発されつつあるようです。興味ある方は以下のサイトを覗いてみてください。
http://www.quesa.org/
(2)MacOS 8/9で導入された新APIの利用
例えば、未だにソースファイルにMac OS 7用コードが多数含まれている場合には、最低限Mac OS 8で導入されたAPIへ、最善策としてはMac OS 9で導入されたAPIへ切り替えておく必要があります。Mac OS 7からMac OS 8へ切り替わった時、ヘッダーファイルに定義されているAPIや定数の名称も大きく変更されました。例えば、Mac OS 7ではGetDItem()という名称がでしたが、Mac OS 8ではGetDialogItem()とう名称に変わっています。こうした名称変更は、Control Manager、Menu Manager、Dialog Mnager、Resource Mangerなどに多数存在します。ソースコードがMac OS 8対応になったら、続いてMac OS 8.5、Mac OS 8.6、Mac OS 9.0で新規に追加されたAPIを勉強してみてください。Apple社のデベロッパーサイトからドキュメントをダウンロードして読むと、最近のOSバージョンの変遷で、いかに多くのAPIが追加されてたのかに驚かされるかもしれません。
ちなみに、古いAPIでもCarbon環境で利用できるものは、そのまま利用していても構いません。例えばウィンドウ作成するAPIとしては古くからNewCWindow()がありますが、これを最新のCreateNewWindow()に置き換えることが可能です。かといって、Carbon環境でNewCWindow()が使えないわけではありません。ただし、将来的にMac OS X対応アプリケーションとするならば、CreateNewWindow()に切り換えられることをお薦めします。また例外的に、旧APIの使用がまったくダメな物もあります。それはStandard File Packgeです。CarbonLibではStandardPutFile()やStandardGetFile()といったお馴染みのAPIは利用できません。これらは、Navigation ServiceのNavGetFile()やNavPutFile()に必ず切り換える必要があります。
(3)以降の工程については、次回に詳しくお話しする予定です。
copyright 2000 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact Us: koike@ottimo.co.jp