My First NSBasic


2. 晴れているから NSBasic で「Hello, World!」を作ってみようかと思う

Basic という言語は至るところで見かけます。VisualBasic に始まり、VisualBasic for Application(VBA ってやつですね)、RealBasic など数えきれないほどの異母兄弟があり、Web を探すとフリーの Basic もたくさんあります。NSBasic は VisualBasic のサブセットのような使い勝手で、フォームにレイアウトしたボタンなどのオブジェクトをダブルクリックして、イベントに対応したコードを書いていけばよく、コードは Basic の文法なので割と簡単です。ただし PalmOS に対応したコマンドや function があるので、リファレンスは一通り目を通しておいた方がよいと思います。そんなにページ数が多くないので簡単に読めます。また、直接 PalmOS の API を呼ぶこともできるので、NSBasic だけでは難しい動作などは、こちらの方法で実現することも可能だそうです。さらに対応していない API を呼ぶ場合は C で実現できるので、誰かに書いてもらいましょう(え?誰にって、それは C のプログラマにですよ)。

NSBasic そのものについては http://nsbasic.com/palm/Japanese/ を参照してもらうとして、インストールもセットアップに従っていけば簡単に済みます。また本体のインストールと同時に、「Programming Tutorial #1」および「Programming Tutorial #2」という簡単なチュートリアルがインストールされますが英語です。読むのが面倒な場合は、NSBasic のホームページに訳したものが公開されていますが直訳です。

まあ、とりあえずおきまりの「Hello, World!」を作ってみましょう。千里の道も一歩から、と。 ところが「文法」のところで、はたと困ってしまいました。NSBasic のマニュアルは簡単な説明が載っているだけの、『文字通り』HandBook なので、ちょっと心もとないところがあります。Basic 自体はよく知られているのですが、最近は書店を覗いてみても標準の「Basic」について書かれたものはほとんどなく、「VisualBasic」が大半を占めています。ASCII の『アスキー ラーニング システム』の『BASIC 入門』というのがありますが、内容が昔のままみたいです。ANCI C の本はたくさんあるのにね。探すならば、フリーの Basic コンパイラやインタプリタに添付されている、マニュアルの方がよいかもしれません。そういう時代なんでしょうね。ま、いいか。

「Hello, Wolrd!」を表示させる PalmWare を 4 パターン作ってみます。まずはよくあるやつです。チュートリアルにもサンプルがあるし、NSBasic を説明されている他のサイトにもありますが、なんとなく気分的にここから始めます。


・ボタンをタップすると、"Hello, World!" の文字が書かれたダイアログが表示されます
1) NSBasic を立ち上げ、新規プロジェクトを作成します
2) ツールボックスから「ボタン」を選び、フォームに配置します
3) 「ボタン」オブジェクトをダブルクリックしてコード ウィンドウを開きます
4)


Sub object1004()
End Sub

の間に、

MsgBox "Hello, World!"

と、コードを書きます

# 「object1004()」というのは、NSBasic が勝手に割り振ってくれます

5) 「実行」メニューから「コンパイル」を選びます
6) プログラムがコンパイルされ、NSBasic の設定にもよりますが、そのまま POSE にダウンロードされます
7) POSE の画面でダウンロードされたプログラム(多分 Project1 でしょう)のボタンをタップすると、メッセージ ボックスが表示されて「Hello, World!」と表示されます




簡単です。あっけないというか、同じことを CodeWarrior で「いきなり」やろうとすると丸一日かかります。でもこれは VisualBasic なんかの本によくありますよね。では次。


・ボタンをタップすると、"Hello, World!" の文字が画面のフィールドに表示されます
今の Project1 を使いましょう。
1) NSBasic を立ち上げ、「既存」の中から「Project1」を開きます
2) ツールボックスから「フィールド」を選び、フォームに配置します
3) フォームの「プロパティ ウィンドウ」を見るとフィールドの名前が適当な ID になっているので、これを「Field1」に書き換えます
4) さきほどのボタン オブジェクトをダブルクリックして、コード ウィンドウを開きます
5) 書いたコードを次のように直します


(修正前)

MsgBox "Hello, World!"

(修正後)

Field1.text = "Hello, World!"

6) ふたたび「実行」から「コンパイル」を選び、POSE でテストします



これも簡単。

すると、フィールドを 2 つ作っておいて、それぞれに入力した数の合計をメッセージ ボックスに表示する、ということができそうです。ちょっと試してみます。
「Field1」の下に「Field2」を作って、ボタンのコードを変更します。


MsgBox Field1.Text + Field2.Text

コンパイルしようとすると「エラー...定義されていないコマンド:+'.」となりました。メッセージ ボックスの使い方が悪かったようですね。それではこれでどうだ。

result = Field1.Text + Field2.Text
MsgBox result

「エラー...シンタックス エラー」だめですね。よぉく考えてみよう。
フィールドの中にあるのは文字だから足してもだめなのか。計算する時は、一旦数値に変換して計算しなればいけないんだ。「Val」というのがありました。数値から文字に変換する「Str」というのも用意されています。そして、変数は最初に宣言しないとだめなんですね。よし。


Dim result as Integer
result = Val(Field1.Text) + Val(Field2.Text)
MsgBox Str(result)

コンパイルできました。POSE でフィールドに文字を入力してボタンをタップすると、見事結果が表示されます。



HandBook を見ていて「Display」というのを見つけました。指定した画面の位置に、変数を表示するというものです。ちょっと試してみます。

Dim result as Integer
result = Val(Field1.Text) + Val(Field2.Text)
Cursor 10,10
Display result
MsgBox Str(result)



ちょっと分かりにくいかもしれませんが、「Form」の文字に重なって、左上に「5」が表示されています。変数の中身が予定通りになっているのかどうか確認するにはいいですね。

続けていきましょう。Project1 を使いますので、「Field2」と計算のコードは消してしまいましょう。もったいないと思ったら、コメントアウトしておけば無視されます。コメントアウトには「'(シングル クォーテーション)」を行頭につけます。こんな感じです。


'Dim result as Integer
'result = Val(Field1.Text) + Val(Field2.Text)
'Cursor 10,10
'Display result
'MsgBox Str(result)
Field1.Text = "Hello, World!"


・ボタンをタップすると、グラフィックス ウィンドウに文字を表示します
1) NSBasic を立ち上げて Project1 を開きます
2) ボタンをダブルクリックして、コードを追加します
3)追加するのは次のコードで、場所は「Field1.text = "Hello, World!"」の前でも後でも構いません
(追加するコード)


DrawChars "Hello, World!",80,80

4) 「実行」から「コンパイル」で動作を確認します



前のふたつは、メッセージボックスとフィールドに「Hello, World!」を「テキスト」として表示していますが、ここで使っているコマンド「DrawChar」は、「Hello, World!」を文字としてではなくグラフィックとして表示しています。

最後です。

・Palm らしく、ボタンではなく画面をタップして文字を表示します
さきほどの Project1 を立ち上げます。コードを追加するのはフォームのイベントに、です。
1) NSBasic を立ち上げて Project1 を開きます
2) フォームを右クリックするとメニューが現れますので「Events code を表示」を選びます
3) 次のコードを追加します


Dim lastX as Integer
Dim lastY as Integer
Dim penStatus as Integer

Getpen lastX, lastY, penStatus
DrawChars "Hello, World!",lastX,lastY

(なんとなく大文字と小文字を使ってますが、NSBasic は区別しませんので。気持ちの問題です)
4) 「Getpen」はタップされたペンの座標を取り出す関数で、lastX に X 座標、lastY に Y 座標を入れて戻してくれますので、その位置に文字を表示します
5) penStatus はここでは使ってませんが、ペンの状態が得られます
6) コンパイルします




なんか文字だらけの画面になってしまいましたが、多分、表示した文字を消すコードを書いてないからでしょう。Getpen を使うと、ボタンをクリックしても、その座標まで取り出すので、ボタンは動作するし、タップしたボタンの座標に文字を上書きで表示するしで、うるさいものになりました。文字の表示、といっても文字として表示するのかグラフィックとして表示するのかでは、意味が違います。一旦グラフィックにしたテキストは文字としては使えません。当たり前か。
これで表示した文字を消す方法を覚えれば、何かに使えそうな感じがします。


copyright(C)2002 Hacker Dude-san all rights reserved.