spComponent チュートリアル

Mac OS 8・9

ここでは,Mac OS 8・9でのコンパイル方法を説明します. ただし,Mac OS 8・9の開発環境としてデファクトスタンダードになっていた CodeWarriorを用いたものではなく,MPWを用いたコンパイルの方法です. MPWは,Appleのサイトから無料でダウンロードできるようになっていましたが, 現在は,すでにリンクは消えているようです.
  1. メニューから,`Directory'->`Set Directory...'を選択し,ソースのあるフォルダを指定. 例えば,`HD:home:src:spComponent:example'を指定します.
  2. メニューから,`Build'->`Create Build Commands...'を選択し, メイクファイルを作成するためのダイアログを開きます.
  3. ダイアログの`Program Name'の入力フィールドにプログラム名を入力します. 例えば,`hello-ppc'とします.
  4. ダイアログの`Program Type'のラジオボタンから`Application'を選択します.
  5. ダイアログの`Target'のラジオボタンから`PowerPC Only'を選択します. 以前はspComponentも68k Macもサポートしていましたが,現在はサポートしていません.
  6. ダイアログの`PowerPC Model'のラジオボタンから`Classic'を選択します. `Carbon'はMac OS X用のプログラムを作成する場合に選択しますが, 現在spComponentではMac OS X用のプログラムは作成できません. なお,MPWの古いバージョンではこのラジオボタンはありません.
  7. 右端のボタン群から,`Source Files...'をクリックし, 必要なソースファイルを登録します.例えば,`hello.c'を選択します. リソースを使用する必要がある場合は(ドラッグ&ドロップに対応する場合やツールバーを使用する場合など), ここで登録しておきます. ファイルダイアログを使用する場合や,カーソルの変更を行う場合には, spComponent用のリソースファイル`spComponent.rsrc'を使用する必要があるので,これも登録します.
  8. この時点で,ダイアログの`CreateMake'が押せるようになっていると思います. 他にも様々なオプションが指定できますが, いずれにせよメイクファイルを手動で書き換えなければいけないので, ここで`CreateMake'を押してメイクファイルを作成します. メイクファイルの名前は`プログラム名.make'となります. ここでは`hello-ppc.make'となります.
  9. hello-ppc.makeをエディターで開きます.MPWで開いても良いでしょう.
  10. まず,spBaseのインクルードファイルがあるフォルダ,spComponentのインクルードファイルがあるフォルダ, それらのライブラリがあるフォルダを確認し,それらを変数に格納します. 例えば,以下のように記述します. これらの記述は`Includes'変数よりも上になければいけません.
      
    SpBaseDir  	= :::spBase:
    SpComponentDir  = ::
    SpLibDir  	= :::lib:
    
  11. `Includes'変数にspBaseのインクルードファイルがあるフォルダ, spComponentのインクルードファイルがあるフォルダを追加します.
      
    Includes        =  カ
    				  -i {SpComponentDir} カ
    				  -i {SpBaseDir}
    
  12. `PPCOptions'に`-includes unix -enum int -j0'のオプションを追加します. これは,インクルードファイルのパス形式にUNIX形式を使うようにし, enum変数をint型にし,日本語をサポートする,というオプションを意味します.
      
    PPCCOptions     = {Includes} {Sym-PPC} -includes unix -enum int -j0
    
    ドラッグ&ドロップへの対応を行う場合には,さらに`-d HIGH_LEVEL_EVENT'オプションが必要になります.
  13. 必要なライブラリを`LibFiles-PPC'に追加します. spBase,spComponentのライブラリと, 動的ライブラリの中からスレッド関連,コントロール関連,ウィンドウ関連, アピアランス関連のものを追加します.
      
    LibFiles-PPC    =  カ
    				  "{SpLibDir}spComponent-ppc.o" カ
    				  "{SpLibDir}spBase-ppc.o" カ
    				  "{SharedLibraries}ThreadsLib" カ
    				  "{SharedLibraries}ControlsLib" カ
    				  "{SharedLibraries}WindowsLib" カ
        				  "{SharedLibraries}AppearanceLib" カ
    				  "{SharedLibraries}InterfaceLib" カ
    				  "{SharedLibraries}StdCLib" カ
    				  "{SharedLibraries}MathLib" カ
    				  "{PPCLibraries}StdCRuntime.o" カ
    				  "{PPCLibraries}PPCCRuntime.o" カ
    				  "{PPCLibraries}PPCToolLibs.o"
    
  14. 様々なバージョンのMac OSで動作させるために,`-weaklib'オプションを用いてウィークリンクを行います. これを行うと,動的ライブラリが実行時に見つからなくてもエラーが出ません. Mac OS 9などであれば,これを行わなくてもプログラムの実行はできますが,Mac OS 7や8などで動作しなくなります.
    hello-ppc  トト  {ObjFiles-PPC} {LibFiles-PPC} {・MondoBuild・}
    	PPCLink カ
    		-o {Targ} カ
    		{ObjFiles-PPC} カ
    		{LibFiles-PPC} カ
    		{Sym-PPC} -weaklib ControlsLib,WindowsLib,AppearanceLib カ
    		-mf -d カ
    		-t 'APPL' カ
    		-c '????'
    
    ただし,MPWの古いバージョンでは`-weak'を併用しなくてはいけない場合があります(どのバージョンかは未確認です). `-weak'オプションなしでコンパイルした場合にMac OS 7や8で動作しなかった場合に,この方法を試してみて下さい. この場合は,以下のように,内部で使用する関数を`-weak'の後に列挙します.
      
    -weak HandleControlClick,HandleControlKey,SetControlAction,GetControlAction,MenuEvent,SetMenuItemModifiers,StandardAlert,SetControlData,DrawThemePlacard,DrawThemeSecondaryGroup,DrawThemePrimaryGroup,DrawThemeFocusRect,DrawThemeEditTextFrame,AutoEmbedControl,GetRootControl,CreateRootControl,SetBevelButtonContentInfo,SetThemeWindowBackground,SetControlViewSize,GetControlViewSize,TransitionWindow
    
  15. これでコンパイルを行う準備ができました. メニューから`Build'->`Build...'を選択するとコンパイルするプログラム名を入力 するダイアログが開くので,プログラム名を入力してOKを押します. ここでは`hello-ppc'と入力します.
  16. エラーが出なければこれでコンパイルは完了です. MPWにコマンド名が表示されていると思うので,enterキーを押してプログラムを実行してみて下さい. ただし,少し大きなプログラムではデフォルトのメモリー割り当てでは足りないことが多いため, 増やしておいた方が良いでしょう. 割り当てられたメモリーが足りない場合は動作がおかしくなることがあるので注意して下さい.

ドラッグ&ドロップへの対応などを行うには,BNDLリソースを設定したり, アイコンリソースを作成したりする必要がありますが, それについてはMacintoshプログラミングに関するホームページや書籍を参考にして下さい.

以上の手順で作成したメイクファイルを以下に示します. 変な文字が含まれていますが,これはMPWの制御用の文字です.

#   File:       hello-ppc.make
#   Target:     hello-ppc
#   Created:    Monday, August 7, 2000 01:35:33 AM


MAKEFILE        = hello-ppc.make
・MondoBuild・    = {MAKEFILE}  # Make blank to avoid rebuilds when makefile is modified

SpBaseDir  	= :::spBase:
SpComponentDir  = ::
SpLibDir  	= :::lib:

ObjDir          = :
Includes        =  カ
				  -i {SpComponentDir} カ
				  -i {SpBaseDir}

Sym-PPC         = -sym off

PPCCOptions     = {Includes} {Sym-PPC} -includes unix -enum int -j0


### Source Files ###

SrcFiles        =  カ
				  hello.c


### Object Files ###

ObjFiles-PPC    =  カ
				  "{ObjDir}hello.c.x"


### Libraries ###

LibFiles-PPC    =  カ
				  "{SpLibDir}spComponent-ppc.o" カ
				  "{SpLibDir}spBase-ppc.o" カ
				  "{SharedLibraries}ThreadsLib" カ
				  "{SharedLibraries}ControlsLib" カ
				  "{SharedLibraries}WindowsLib" カ
    				  "{SharedLibraries}AppearanceLib" カ
				  "{SharedLibraries}InterfaceLib" カ
				  "{SharedLibraries}StdCLib" カ
				  "{SharedLibraries}MathLib" カ
				  "{PPCLibraries}StdCRuntime.o" カ
				  "{PPCLibraries}PPCCRuntime.o" カ
				  "{PPCLibraries}PPCToolLibs.o"


### Default Rules ###

.c.x  ト  .c  {・MondoBuild・}
	{PPCC} {depDir}{default}.c -o {targDir}{default}.c.x {PPCCOptions}


### Build Rules ###

hello-ppc  トト  {ObjFiles-PPC} {LibFiles-PPC} {・MondoBuild・}
	PPCLink カ
		-o {Targ} カ
		{ObjFiles-PPC} カ
		{LibFiles-PPC} カ
		{Sym-PPC} -weaklib ControlsLib,WindowsLib,AppearanceLib カ
		-mf -d カ
		-t 'APPL' カ
		-c '????'



### Required Dependencies ###

"{ObjDir}hello.c.x"  ト  hello.c


### Optional Dependencies ###
### Build this target to generate "include file" dependencies. ###

Dependencies  ト  $OutOfDate
	MakeDepend カ
		-append {MAKEFILE} カ
		-ignore "{CIncludes}" カ
		-objdir "{ObjDir}" カ
		-objext .x カ
		{Includes} カ
		{SrcFiles}

Last modified: "2012-08-22 14:12:21 hideki"