How to Create REALbasic Plugins with MPW


MPWを用いたREALbasic (2.x)用プラグインの作り方

[Japanese][English]

この文書ではMPWを用いてREALbasic 2.x用のプラグインを作成する方法を説明します。筆者は68kやx86(Win32)で利用できるプラグインの作成経験がありませんので、この文書の内容はPPC用のプラグインにのみ適用されます。

  1. 準備
  2. Makefileの作成
  3. ビルド
  4. リンク

準備

まず、なるべく新しいバージョンのMPWを入手する必要があります。MPWは米国Apple社のWeb(http://developer.apple.com/tools/mpw-tools/)から入手できます。MPWを入手したら以下の準備を行ないます。

  1. 最新版の REALbasic Plugin SDK を入手する
  2. いくつかのファイルの修正
  3. 自前のプラグイン用のソースファイルを書く

REALbasic Plugin SDK は REAL software社の web サイトから入手できます(この文書執筆前に私は 2.1.1a4 を入手しました)。入手したアーカイブを展開すると、いくつかのファイルとサブフォルダが得られます。以下のものがあればとりあえずの用は足ります。

必要であれば、ドキュメント類も読むと良いと思います。

上記二つのフォルダを、これから作ろうとしているプラグインファイルができる場所にコピーしてください。以後このコピーに変更を加えます。

:Includes:REALplugin.h
Search for and append some lines after it.最初の方に "#define REALPLUGIN_H"と書かれた行がありますので、そのあとを以下のように変更します。
#ifndef REALPLUGIN_H
#define REALPLUGIN_H
#if defined(MPW_CPLUS) || defined(MPW_C)
	#include	<types.h>
	#include	<mactypes.h>
	#include	<qdoffscreen.h>
	#include	<events.h>
	#include	<files.h>
	#include	<appleevents.h>
	#include	<controls.h>
	#include	<movies.h>
#endif
:Glue Codes:PluginMain.cpp
"Glue Codes" フォルダの "PluginMain.cpp"には、そのままでは MPW の MrCPP C++ コンパイラでのコンパイルエラーの原因となる行が何行か含まれているので、それらを無効化するために以下の変更を行ないます。
#include "REALplugin.h"
#ifndef WIN32
 #if !CARBON	// May 03 2000 -- GCC (1)
	#if !defined(MPW_CPLUS) && !defined(MPW_C)
 	#include	<a4stuff.h>
 	#include	<setupa4.h>
 	#endif
 #endif			// May 03 2000 -- GCC (1)
#endif
(中略)
#ifdef powerc
#if !defined(MPW_CPLUS) && !defined(MPW_C)
extern "C" {
void __sinit(void);	/*	(generated by linker)	*/
}
#endif
#endif

(注意: これらのファイルは read-only でチェックアウトされているので、そのままでは MPW のエディタ(あるいはProjector の状態を認識する他のエディタ)を使って編集することができません。このような read-only のファイルを修正可能なものに変更する方法を知りませんので、筆者は他のエディタを用いて変更しました。読み書き可能なファイルにするなんらかの方法はあるはずだと思うので、どなたかご存じの方はぜひお知らせください。)

(注意2: その後、MPW 関連のドキュメント("Building and Managing Programms in MPW 2nd. edition," Chapter 16 Managing Project with Projector)を読んでいて分かったことですが、Porjector あるいは VOODOO 等の Projector 互換のバージョン管理システムは、chid というリソースを使って、バージョンの管理を行なっているようです。なので、chid リソースをソースコードから削除することで MPW のエディタでも変更可能なファイルになると思います。)

(注意3: Projector がファイルに付ける情報を無効にする(取り去る)方法を見つけました。MPW の OrphanFiles コマンド(ツール)を使えばいいのです。つまり、'OrphanFiles :includes:REALplugin.h' と 'OrphanFiles ":Glue Codes:PluginMain.cpp"' を実行すればいいわけです。)

あとは、自分の Plugin のためのコードを書いてファイルに保存します。

Makefileの作成

必要な準備ができましたので、次に plugin をビルドするための Makefile を作成する必要があります。

Makefileは以下のようのいくつかの方法で作成することができます。

いくつかのコマンドとたくさんのオプションを一つのミスもなくタイプすることができれば(必要なファイルを全部コンパイルしてリンクしてコードリソースをつくって……)もちろん Makefile は必要ありません。筆者の場合は十分な技量がないので (Commando インタフェースを使う使わないに関らず)CreateMake コマンドが非常に役に立ちます。

自分で書いたプラグインのソースファイル(YOUR_PLUGIN.cpp)があるフォルダ(YOUR_PLUGIN_FOLDER)にあるとして、まず Directory メニューの Set Directory メニューアイテムや、MPW の Worksheet で directory コマンドを使ってカレントディレクトリを YOUR_PLUGIN_FOLDER に変更しておきます。"Glue files"フォルダと "Includes" フォルダが同じフォルダ中にあるとすると以下のような CreateMake コマンドを使って Makefile を作成することができます("(continue to next line)"を除くすべてを一行で記述してください)。

CreateMake YOUR_PLUGIN YOUR_PLUGIN.cpp ":Glue files:PluginMain.cpp"   (continue to next line) 
      -cr -powerpc -i ":Includes" -m main -rt PLPC=128 -procinfo 193 -t RBPl -c RBv2

Makefile は YOUR_PLUGIN.makeという名前で同じフォルダにできます。

(注意: 筆者は MPW version 3.5(Version コマンドで表示されるもの) で CreateMake 4.6 を利用しています。Commando インタフェースを使うと -i オプションに適切な引数が与えられないことがあります。その場合には、出来上がった Makefile(YOUR_PLUGIN.make)で、「-i Includes」となっているところを「-i ":Includes"」となるように変更してください。)

ビルド

あとは、BuildProgram YOUR_PLUGIN をWorkSheet で実行して(あるいは Buildメニューの Build... を選択して) Plugin を作ります。運がよければ YOUR_PLUGIN が同じフォルダに現れるでしょう。

もし、他のリソースをマージする必要があるならば、少し余計な手間がかかります。ここでもやり方は一つではありません。筆者に思い浮かぶのはは以下のような二通りの方法です。

リソースファイルを一度derezしてからrezするのは、いかにも無駄なようですが、筆者は単にリソースをマージするためには他にどうすればいいのかを知りません。ご存じの方はぜひ教えてください。

リンク


rok@mac.com