第10回 コードリソースを書くための参考書

Macintoshのアプリケーションプログラムならば、だいたい作れるようになってきたので、機能拡張(System Extension のこと、以下INITと略)やコントロールパネル(cdevと略)を自分で作ってみようと思い立ちました。
ところがいざ実際にとりかかってみると、これがなかなかむずかしい。

Macプログラミングの参考書にも、トラップに2〜3行程度のパッチをあてるINITの例が書いてあります。例題どおりにcodingしてcompile、そしてmakeすればINITができあがります。これをシステムフォルダにドラッグ&ドロップして、Macintoshを再起動すると、本にかいてある機能が実現します。なんだか簡単だったので、自分で考えたpatchを入れてみようと思いました。

ところがすぐに挫折してしまいました。本に書いていないことを実現しようとすると、どうしていいのかわからないのです。sample codeなどをみながら、みようみまねでcodingしてみるのですが、本質的なところがなかなか理解できません。おかげで、着想してからこれを実現するのに10ヵ月以上の月日が流れてしまいました。

あとから振り返ってみると、ずいぶんと回り道をしたようです。INITやコントロールパネルを作る時に、あとに続く人が迷わないように、役に立った資料や参考書などを紹介するのが、本稿の目的です。


コードリソースというぐらいですので、リソースの概念がしっかり頭に入っていないといけません。Inside Macintoshでいえば、Resource Managerの章で説明してある考え方をしっかり理解して下さい。とくにDetachResource()とかGet1Resource()等の働きをよく理解しましょう。

つぎに読むべきは、INITについてのInside Macintoshの説明です。私はこれがどこにあるのか最近までわからず、結局INITができあがってから、おさらいの意味で読むはめになってしまいました。皆さんはこんなことのないよう、場所をお知らせしましょう。Operating System Utilitiesの第9章Start Managerの中に説明があります。必要なのは前半の18ページまでで、後半の説明は読む必要はありません。それから第8章Trap Managerで説明している事項も、patchをあてるときに必要です。

Inside Macintoshの話題が出たついでに、コントロールパネルの解説の場所もお知らせしますと、More Macintosh Toolbox の第8章Control Panelsがそれです。なおこの章の後半はMonitors Control Panelの説明ですので、モニタ用のコントロールパネルを書く人以外は読む必要ありません。
またOperating System Utilitiesの第5章にもControl Panel Extensions という項目がありますが、これはコントロールパネルの表示をpop-upメニューを使って画面を切り替えるのための説明ですので、Apple標準のサウンド・コントロールパネルのような複雑なインターフェースを作るひと以外は読む必要はありません。

コードリソースを表題にした参考書もあるようですが、絶版になったりしてなかなか手に入りません。最近で入手しやすいものは、次の2冊でしょう。
(1)Macintoshプロフェッショナルプログラミング、デーブ・マーク著、トッパン、ISBN4-8101-8941-4(1995)の第5章
(2)Macintosh C プログラミング II、デーブ・マーク著、トッパン、ISBN4-8101-8031-X(1993)の第3章

私の場合は(1)の本をお手本(Template)にして、開発をしました。はじめは本屋で立ち読みをしただけで、CWPro1のCD-ROMにあるcodeをみればすぐにわかるとタカをくくっていたのですが、実際にやってみるといきづまり、解説を読むため結局は買うはめになってしまいました。安くない値段の上に、INITやコントロールパネルの解説は本の1/10ぐらいのページしかなかったのが、買うのをためらった理由でした。しかし読んでみると、この章はJorg BrownというTHINK C、Now Utilities、RAM Doublerを開発した人が執筆しただけあって、内容はさすがにしっかりしています。何度も目を開かされる思いがしました。INITやcdevを作りたいなら、買っても損はありません。


CWProのCD-ROMにはsample code として、次のようなものが収録されています。
(1)Ultimate Mac Programmingの中のBeep.INITやBeep.cdev
これは前述の(1)の本の最新版codeです。
(2)A Fragment of Your Imaginationの中のMenuScript INIT folderやMenuScript cdev folder
これは同名の本のサンプルコードです。DEPOTのカタログによれば、本の値段は$35.96でした。
(3)CWオリジナル(?)のものとして、MacOS Examples/Code Resource Examplesの中にEditCDev.prjやWarrior INIT folderなどがあります。

これ以外にWebで入手できるsample codeは、
(4)MacTech Magazineの中には過去のサンプルコードや解説記事がたくさんあります。検索サービスをうまく使って見つけて下さい。例えばVolume Number:5 /Issue Number:10 の"Writing INITs in THINK C " By J. Peter Hoddie(いま書いていて気がついたけど、この人QuickTimeの開発者ですよね)はたいへん参考になりました。
(5)松原卓二さんのサイトにもたくさんあります。最近のものでは、No.53 DefaultApplicationChooserが参考になりました。


Code Warrior Pro でコードリソース用のプロジェクトを作る場合、アプリケーションのプロジェクトとは少し違うので注意が必要です。簡単なものであれば、前述のTemplateを使えばいいでしょう。いろんなライブラリを自分で付け加えたいときなどは、「Targeting Mac OS マニュアル」の第6章を読んで参考にしてください。

デバッグをするにはMacsBugを使うしかないようです。code中にDebugger()を埋め込んで、stepやstep overコマンドで追いかけていくことになります。ここではどうしてもアセンブラの知識が必要になります。詳しくは前回の雑談を参考にして下さい。

INITとして本質的な部分のデバッグには前述の方法しかありませんが、普通のアプリケーションの一部として使えるようなモジュールにはうまい方法があります。あらかじめINITをシミュレートするようなアプリケーション・プロジェクトを並行して作っておきます。モジュールのデバッグはこのアプリケーションの一部として、通常のCWのデバッガで行えれば非常に効率的です。モジュールの完成を確認してからINITの方に埋め戻せば、MacsBugを使う必要はありません。


このような経過で開発してきた、私のコントロール・パネルSkipPrintもようやく完成しました。現在、有志の方にお願いして、ベーターテストをしてもらっています。近日公開予定!

記1998年2月24日


目次に戻る