プログラム講座 上級編7
- Pascal Converterを使う -
上級編7です。今回は「Pascal Converterを使う」を使ってFuture BASIC IIで標準では使用できないツールボックスを呼び出してみます。今回は主に変換の方法について説明します。
◆Pascal Converterとは?
普通、MacOSがバージョンアップされた場合、新しく追加された呼び出しについては、アプリケーションのバージョンアップを待たなければなりません。Future BASICはマイナーなので(笑)、FB 1.0.xまでのように標準の呼び出ししか駄目となると最新のToolboxにアクセスできず困ってしまいます。これを簡単に解決するものがPascal Converter (パスカルコンバーター)です。要するに常に最新のToolbox呼び出しが可能になってしまうという優れものです。これによりFuture BASICのバージョンアップを待たなくてもOKです。ついでにいうとPascal ConverterがあればFB 1.0.xでも最新のToolboxを使用できます。今回はそれを実証するために(?)1.0.2でコンパイルしてあります。
◆実際の変換方法
変換する場合、以下のような方法になります。
- http://gemma.apple.com/dev/sdk.htmlから変換するファイルをダウンロード。Pascal Converterで変換。
- Code Warriorに入っているヘッダーを使用。(MacOS Support/Interfaces/MW Universal Interfaces/)Pascal Converterで変換。
- この講座のトップページからダウンロード。変換不要。
一番最後が一番手軽でしょう。ただし、全てのヘッダーを変換したわけではなくユニバーサルヘッダーのみ変換していますのでGame Sprocket等のヘッダーファイルはありません。ヘッダーファイルはC言語のものではなくPascalで書かれたものでなければ駄目です。この場合ファイルの末尾(拡張子)が「.p」となっているので多分見ればわかると思います。
ヘッダーファイルをダウンロードした場合、以下のようにして変換します。ここではmenu.pを変換してみました。
パスカルコンバーターをダブルクリックして起動させます。
起動画面が表示されます。
変換ウィンドウが表示されるので「Source」ボタンを押します。
変換するファイル(パスカルヘッダー)を選択します。ファイルの拡張子が.pになっていないと警告が出ます。「Out Incle」「Out Glbl」ボタンを押して、インクルードファイルとグローバルファイルの保存先を指定します。
「convert」ボタンを押すと変換が開始されます。無事に変換が終了すると「Done!」という表示になります。終了したい場合は「Done」ボタンを押します。続けて変換する場合は再度Sourceボタンを押して同様の手順を繰り返します。
◆メニューバーの高さを求める
不思議(?)な事にFuture BASICにはメニューバーの高さを返すToolboxの呼び出しがありません。そこでmenu.pをパスカルコンバーターで変換し「GetMBarHeight」というToolboxが呼び出せるようにします。
変換されたものは以下のように関数になります。
LOCAL FN GetMBarHeight
'---------------------------------------
` CLR.W -(SP)
` DC.W $3EB8,$0BAA
` MOVE.W (SP)+,D0
` EXT.L D0
END FN = REGISTER(D0) 'INTEGER
使用する場合、H% = FN GetMBarHeightのようにします。戻り値はINTEGER、つまり整数で返されるとコメントされています。あとは、この関数をプログラム内に埋め込めば問題なく使用できます。FB 1.0.2でも使用可能です。簡単なサンプルプログラムを用意しましたので参考にしてください。本当は最新の呼び出しを・・・と思ったのですが、よく知らないのでf(^^;;;;
◆終わりに
パスカルコンバーターを使えばFuture BASICで可能な事が広がります。パスカルコンバーターのおかげで、ソフトのバージョンアップを待つことなく最新のToolboxにアクセスできる、サポートされていないToolboxにアクセスできるのは非常に素晴らしいと思います。
来年になればFuture BASIC 3が出てくるでしょう。powerPC対応となりますし、その他の部分も今までより便利になりそうです。
次回は・・・未定ですf(^^b
◆今回のプログラムリスト
'=========================================
' Function:GetMBarHeight
' "メニューバーの高さを求める"
'=========================================
LOCAL MODE
LOCAL FN GetMBarHeight
'---------------------------------------
` CLR.W -(SP)
` DC.W $3EB8,$0BAA
` MOVE.W (SP)+,D0
` EXT.L D0
END FN = REGISTER(D0) 'INTEGER
CLS
TEXT _applFont,12
PRINT
PRINT "メニューバーの高さ:";FN GetMBarHeight;"ピクセル"
BEEP
WHILE INKEY$="":WEND