サンプルXFCN IntRoot



ここですること:
 ・日本語環境でフィールドが文字化けする問題を解決する
 ・CompileIt! の編集メニューが日本語環境で使えなくなる問題を解決する
 ・スクリプト入力とコンパイルの基本手順を覚える




(1)まずは下準備

 CompileIt! は HyperCard 1.2 のフォーマットのスタックとして配布されています。2.x の HyperCard でこれを使うにはフォーマットの変換が必要になるので、まずこれを行いましょう。
 CompileIt! をダブルクリックで開くと、メニューにカギのマークが現れます。これはスタックがロックされているシルシですが、1.x フォーマットのスタックを 2.x で開いた場合にも現れます。
これを解消するために、ファイルメニューから「スタック変換」を実行します。

 ごくごく基本的なことですが、CompileIt! はオリジナルを使わずに、コピーを使うようにして下さい。ToolBox プログラミングでは、ファイルを壊すこともままあります。CompileIt! 本体はもちろん、出来た XCMD をインストールするスタックも、オリジナルではなくコピーを使用するようにして下さい。

 表紙の右側に並んでいるオプションは、上から
  □ Always Use SANE  --しばらく必要ありません
  □ DebugIt!      --必ずチェックを「外して」おいて下さい!
  ■ HyperCard 2    --チェックします
としておきます。

 表紙のカード中央にあるボタンは「 CompileIt! ボタン」をインストールするボタンです。これをクリックしてインストールしたいスタックを選択すれば、「 CompileIt! ボタン」をそのスタックにコピー出来ます。

 スタック上で迷子になったら CompileIt メニューを利用しましょう。



(2)とにかく文字化けをなんとかする

 コンパイルの手順に入る前に、 CompileIt! をちょっとだけ使い易くします。
 まず CompileIt! のコピーを取ってから、その表紙にボタンをひとつ作って、下のスクリプトを入力して下さい。
-- change all field font to geneva
on mouseUp
  repeat with B = 1 to the number of backgrounds
    go first card of bg B
    repeat with BF = 1 to the number of bg fields
      put "B=" && b && "BF=" && bf
      if the textFont of bg field BF is "Osaka" then
        set the textFont of bg field BF to "Geneva"
      end if
    end repeat
  end repeat
  repeat with C = 1 to the number of cards of this stack
    go card C
    repeat with CF = 1 to the number of cd fields
      put "C=" && c && "CF=" && cf
      if the textFont of cd field CF is "Osaka" then
        set the textFont of cd field CF to "Geneva"
      end if
    end repeat
  end repeat
  put empty
  hide msg
  beep
end mouseUp
 見ての通り、CompileIt! 内の全てのフィールドを Geneva に変えるものです。これをやっておかないと Analysis カードで ハハハハ と笑われてしまうのです(^^;)
 他にも日本語版ハイパカで使うと不都合の出る部分が何カ所かありますが、それは順次説明していきます。このボタンは不要になったら消して下さい。

 script カードのフィールドは、好みのフォントに変えて大丈夫です。私は Geneva で使っていますが、Osaka にすれば日本語の注釈が文字化けしなくなります。



(3)スクリプトを入力する

 コンパイルするためのスクリプトを用意します。まずここではマニュアルに従って、"Demo" スタックにある intRoot をコンパイルしてみましょう。
 CompileIt! のディスク中に "Demo" というスタックがあるので、これをコピーしてください。このスタックのカードスクリプトには以下のスクリプトが書かれています。
-- calculate (/y) by subtracting odd numbers
function squareroot x
  put x into y
  put 0 into ans
  put 1 into oddint
  repeat while y >= 0
    subtract oddint from y
    add 1 to ans
    add 2 to oddint
  end repeat
  return ans-1
end squareroot
 これはある数値から奇数を順に引いていって、ルートの整数部分を返すスクリプトです。例えばメッセージボックスに put squareroot( 1000 ) と打ち込むと、31 が返ってきます。大きな数値を入れてみて、どれくらい時間がかかるか見ておいて下さい。


 このスクリプトを CompileIt! に入力するには、いくつかの方法があります。 CompileIt! の表紙の左側に並んでいる4つのボタンに注目。上から、

  クリップボード上のスクリプトを入力
  クリップボード上のスクリプトを入力してコンパイル
  新規のスクリプトを入力(スクリプトカードを白紙にするだけ)
  現在のスクリプトを編集(スクリプトカードに移動するだけ)

です。どれでもお好きなものをどうぞ。結果として script カードの大きなフィールドにこのスクリプトが入ればOKです。
 script カードへは CompileIt! メニューからも移動できます。

 スクリプトを入力したら、script カード右上の symbols ボタンをクリックしてみましょう。ちょいと時間がかかりますが、スクリプトのシンボル(予約語)がボールドに変わっていきます。でもそれだけです(^^;) 私はこのボタンは滅多に使いません。



(4)コンパイルする!

 さあ、コンパイルです。テスト用の "Demo" スタックと、CompileIt! を両方開いておいて下さい。(その方が便利だから)

 script カードの左下にある Compile It ボタンをクリックします。
インストール先を尋ねてきますので、テスト用の "Demo" スタックを指定します。
これでコンパイルがスタートします。

 エラーが起きたらそこを修正して、再度コンパイルして下さい。
 ただこの時日本語版ハイパカを使っていると、ハイパカの「編集」メニューがおかしくなって、まともにコピー/ペーストが出来なくなることがあります。
 原因はどうやら CompileIt! 自身が使っているXの中にありそうなので、簡単には修正が効きません。根本的な解決は無理ですが、対症療法をひとつ紹介しておきます。

 script カードの上部には「ボタンを配置して下さい」と言わんばかりのスペースがありますので、ここにボタンをひとつ作って、以下のスクリプトを書き込みます。
-- initMenu button script
on mouseUp
  reset menubar
  openStack
end mouseUp
 これで編集メニューが元に戻ります。いつかもっと大がかりなカスタマイズを紹介する予定です。



(5)XFCN をテストする

 コンパイルが終了すると自動的に "Demo" スタックに移動して、メッセージボックスに "put squareroot (" という文字が現れます。
 さあ、Xは作られ、インストールされました。好きな数字を打ち込んで、さっきとスピードを比べて下さい。

 え? さっきと全く同じ? ははは、そうですね。これはカードスクリプトにある squareroot ハンドラがまだ生きているからです。これをコメントアウトしましょう。( squareroot ハンドラの部分を全て選択して command + [-]キー)(ちなみに戻す時は command + [=]キー)

 もう一度 put squareroot ( 1000 ) と打ち込んで、実行してみましょう。おお!速い速い!作ったばかりの squareroot XFCN が活躍しております。スタックを ResEdit で覗くと squareroot という名前の XFCN があります。カンドーの一瞬ですね(^^)

 参考までに、Analysis カードに移動して、どんなものが表示されているか見ておいて下さい。このカードについてはまた触れます。

inserted by FC2 system
Next



CompileIt! Lab.

UDI's HomePage