Squirrel/monasqの使い方


Squirrel/monasq

このページは何か?(by okayu)

MonaSq の使い方の簡単な説明をしています。

MonaSq とはなんですか

プログラム言語 Squirrel を MonaOS 上で実行するプログラムです。

Squirrelとはなんですか

Squirrel は C 言語に似た構文を持ち Lua 言語の影響を受けた、 いわゆる LightWeight な組み込み用スクリプト言語です。

オブジェクト指向、例外、ガベージコレクション、クロージャ、マイクロスレッドなどを サポートしています。

Squirrel は『スクイレル』または『スクイール』と読み、英語でリスを意味します。 ソースファイル拡張子は ".nut" (木の実の意。".sq"ではないことに注意)です。


詳しくは、以下のURLを参照してください。

Squirrel 公式ページ(英語) http://squirrel-lang.org/

Squirrel 2.1 リファレンスマニュアル(日本語) http://muffin.cias.osakafu-u.ac.jp/~matumoto/cgi-bin/xt.cgi?prog/squirrel_lang

ためしに遊んでみる

プログラムを実行する

MonaSqを起動すると、次のようなウインドウが表示されます。
いくつかのボタンと、入力エリアと、出力エリアで構成されています。
入力エリアには、最初から簡単なサンプルプログラムが書き込まれています。

monasq01.gif


サンプルプログラムは、画面に「Hello, World.」と表示するだけのプログラムです。
『実行』ボタンを押して、実行してみてください。
出力エリアに、「Hello, World.」と表示されるはずです。

monasq02.gif


自分でプログラムを打ち込んで、実行してみましょう。
『入力欄クリア』ボタンを押して、入力エリアの内容を消去してください。
※ちなみに、消去したプログラムは『↑』ボタンで履歴をさかのぼるともう一度実行したり書き直したりできます。

monasq03.gif


「1+1」の結果を表示する、簡単なプログラムを書いてみました。

print( 1 + 1 + "\n" );

最後の「"\n"」というのは、なくてもかまいません(出力エリアに改行を出力するためのものです)。

monasq04.gif


書き終えたら、『実行』ボタンをクリックします。
書き間違えがなければ、出力エリアに「2」と表示されます(書き間違えがあると、エラーメッセージが表示されます)。

monasq05.gif

1行実行


1+1のような簡単な計算式は、わざわざプログラムとして書かなくても結果が確認できる「1行実行」機能があります。
別の行に「1+1」と入力して、その行のどこかにカーソルを合わせたまま「Ctrl+Enterキー」(Ctrlキーを押しながらEnterキー)を押してみてください。

monasq06.gif


出力エリアに、「2」と表示されるはずです。

monasq07.gif


ところで、次世代ゲーム機PS3の日本での価格は4万9980円で、アメリカでの価格は499ドルだそうです。
さっき見たところ1円=0.008475ドル、1ドル=117.99円なので、この値をかけて円からドル、ドルから円になおしてみます。
掛け算を打ち込んだら、さきほどと同じように「Ctrl+Enterキー」を入力します。

monasq08.gif

日本価格は、ドル換算で423.581ドル。
アメリカ価格は、日本円換算で58877円になりました。
日本のPS3は値下げ宣言してしまったので、アメリカで買うよりだいぶ安くなってますね。

1行実行は式ならなんでもよいので、もちろん関数も使えます。
sin 30度を計算してみます。

sin( 30.0 / 180 * PI )

と打ち込んでCtrl+Enterキーを押します。
※360度法からラジアンに変換するために180で割ってPIを掛けてます(大変高度な数学を駆使しているので、よく分からなくても大丈夫です)。
 また、30.0、と小数点を付けないと、整数として計算されるので結果は0になってしまいます。

monasq09.gif

結果は1/2でした。ふーん。

MonAPIの呼び出し


MonaSq では、MonaOSのAPI(MonAPI)を呼び出すことができます。
ディレクトリ内のファイル一覧を読み出すAPIを1行実行して、どんな結果が返ってくるか見てみます。

monapi.monapi_file_read_directory("/", 0)

と打ち込んで、Ctrl+Enterキーを押します。
※"/" というのは、ルートディレクトリ("/")の情報を読んできてよ、という意味です。
 それと MonAPI 関数を呼び出す時は、必ず頭に「monapi.」と付けます。お約束です。

monasq10.gif

なんかずらーっと出ました。
これはルートディレクトリにあるファイルの情報です。
うちだと17個ファイルが置いてあって、17個目は「MONITOR.CFG」って名前のファイルで、サイズはマイナス・・・?よく分からないですが、一応ファイル一覧は取得できたみたいです。

baygui を使ってウインドウを表示してみる


baygui とは、MonaOSのGUIライブラリです。
次のコードは、MonaSqから baygui を利用してウインドウを表示するプログラムです。

local frame = Frame("Hello");
frame.setBounds(10, 10, 100, 100);
frame.run();

入力エリアをクリアしてプログラムを打ち込んだら、実行ボタンを押します。

monasq11.gif

ウインドウが表示されました。

monasq12.gif

1行目から見てみます。

local frame = Frame("Hello");

local キーワードは、ローカル変数を新しく定義する時に行頭に書きます。
frame というローカル変数を作成し、baygui ライブラリの Frameクラスオブジェクトを新しく生成して frame 変数に代入しています。
"Hello" は、ウインドウタイトルです。

frame.setBouns(10, 10, 100, 100);

Frame クラスのメソッド setBounds() を呼び出して、ウインドウの位置と大きさを設定します。
ここでは、画面上の座標 (10, 10) の位置で、幅100、高さ100の大きさに設定しています。

frame.run();

run() メソッド を呼び出して、Frame オブジェクトの活動を開始します。
ウインドウが表示されて、タイトルバーをドラッグするとウインドウを動かしたりできるようになりました。
run() メソッドは、一度呼び出されるとウインドウが閉じられるまでメソッドから処理を戻しません。
作成したウインドウのクローズボタンを押すとウインドウが閉じ、run() メソッドから戻って、プログラムが終了します。

描画してみる


さっきのプログラムはなんの描画処理もしていないので、ウインドウが灰色のままでした。
なんだか寂しいので背景を白くして文字を描画してみます。

function onPaint(g) {
    g.setColor(255, 255, 255);
    g.fillRect(0, 0, 100, 100);
    g.setColor(0, 0, 255);
    g.drawString("Hello, MonaOS!", 5, 30);
}

local frame = Frame("Hello");
frame.setBounds(10, 10, 100, 100);
frame.setHandler(baygui.PAINT, this, onPaint);
frame.run();

ちょっと長いです。さきほどのプログラムに7行も追加しています。
とりあえず打ち込んで実行してみます。

monasq13.gif

ウインドウ上に白地に青で「Hello, MonaOS!」と表示されました。
一行目から見てみます。

function onPaint(g) {

関数 onPaint を定義しています。ここで関数 onPaint は、g という名前の「baygui ライブラリの Graphics クラスオブジェクト」を引数として受け取ります。
Graphics クラスは、画面に描画するためのメソッドを持ったクラスです。
この関数では、実際の描画処理を書いていきます。

   g.setColor(255, 255, 255);

変数 g (Graphics クラスオブジェクト)の setColor メソッドを呼び出しています。
このメソッドは描画に使うペンの色を設定します。ここでは白色(R:255 G:255 B:255)に設定しています。

    g.fillRect(0, 0, 100, 100);

Graphics.fillRect メソッドを呼び出します。
指定された位置と大きさで、四角形の形に塗り潰すメソッドです。色は先ほど設定した白になります。
ウインドウ上の (0, 0) から、縦横が (100, 100) の大きさでウインドウを白く塗り潰しました。

    g.setColor(0, 0, 255);

今度は Graphics.setColor メソッドでペン先を青色(R:0 G:0 B:255)に設定しています。

    g.drawString("Hello, MonaOS!", 5, 30);

Graphics.drawString メソッドは、その名の通り文字列を描画するメソッドです。
ウインドウ上の位置 (5, 30) に、"Hello, MonaOS!"という字を青色で描画しました。

}

描画処理をする関数はここまでです。

local frame = Frame("Hello");
frame.setBounds(10, 10, 100, 100);

前回と同じく、ローカル変数 frame に新しく作成した Frame クラスオブジェクトを代入して、位置と大きさを設定しています。

frame.setHandler(baygui.PAINT, this, onPaint);

Frame.setHandler メソッドは、イベントハンドラを設定します。
イベントハンドラとは、ウインドウに対して何かが起きた時、何をしたらいいのかを記述しておく関数のことです。
ここでは、baygui.PAINT というイベントが起きた時、onPaint 関数を実行するように設定しています。
baygui.PAINT イベントは描画処理イベントのことで、ウインドウの描画が必要になった時に発生します。

frame.run();

ウインドウ処理を実行します。
ウインドウが表示される際に描画が必要になり、baygui.PAINT イベントが発生して onPaint 関数が呼び出され、さきほど見たように白く塗り潰したあと青い字で"Hello, MonaOS!"と描画して、あとは特にすることがないのでボーっとするところまでがプログラム実行の流れです。
クローズボタンを押してウインドウを閉じるとプログラムの実行を終了します。

※『停止』ボタンを押してもいいのですが、プログラムでウインドウを表示している場合は待っていてもなかなか停止してくれません。そういう場合は、『停止』ボタンを押したあとウインドウをマウスで触ると思い出したように終了してくれます。

MENU

now: 2

リンク


最新の20件
2020-05-22 2020-05-14 2020-05-12 2020-05-10 2020-04-27 2020-03-23
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 5233, today: 1, yesterday: 0

添付ファイル: filemonasq13.gif 472件 [詳細] filemonasq12.gif 436件 [詳細] filemonasq11.gif 523件 [詳細] filemonasq10.gif 487件 [詳細] filemonasq09.gif 410件 [詳細] filemonasq08.gif 420件 [詳細] filemonasq07.gif 427件 [詳細] filemonasq06.gif 463件 [詳細] filemonasq05.gif 474件 [詳細] filemonasq04.gif 444件 [詳細] filemonasq03.gif 438件 [詳細] filemonasq02.gif 535件 [詳細] filemonasq01.gif 559件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:00 (4442d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.047 sec.