ようこそ!NS Basic/Palm Ver.3.0.0

2002-10-15.

NS Basic/Palm Ver.3.0.0がついに登場しました。
Ver.1.からVer.2.への進化は、開発効率向上を目指してIDEの再構築を中心に機能強化が図られました。
そして、今回のVer.3は、ズバリ「実行スピードのアップ」を目指して改良されたバージョンです。

   

と言っても、画面の構成は Ver.2.xxと変りません。ちょっと拍子抜けするかもしれませんね。

では、その速さを実感するために、3D迷路を歩くだけの『AMP』で比べてみましょう。

   AMP!

こちらから、Ver.2.xで作成したAMP(Ver.0.1)がダウンロードできます。
最初、起動してから、画面が表示されるまで、ちょっと時間がかかりますが、とりあえず、新しい迷路を作って遊んでみてください。

そして、操作に慣れた頃に、ここから、Ver.3.0でコンパイルしたAMP(Ver.0.1a)と、新しいランタイムをダウンロードして下さい。
解凍したら、そのままインストールして下さい。
アプリケーション名、ランタイム名は同じですから、上書きでHotSyncでOKです。
如何でしょう?迷路の描画速度や、移動速度、こんなアプリでも向上しているのが実感できるでしょうか?

これだけでも価値あるバージョンアップですが、幾つかのプログラミングが簡単になる仕組みも用意されています。
大きな変更点は、各スクリーンオブジェクトの取扱い方法です。
VBでは、オブジェクト型の変数などを用意して、色々なオブジェクトを変数に代入して扱う事が可能です。
NS Basic Ver.3では、これに類する方法が今回はサポートされました。
例えば、通常、あるFieldオブジェクトのTextプロパティに文字列を代入する場合、


      Field1004.Text="mizuno-ami"

としますね。
しかし、今回は、


      Dim strObjName as String

      strObjName="Field1004"
      strObjName.Text="mizuno-ami"

こんな芸当が出来てしまいます。
オブジェクト型の変数が用意された訳ではありませんが、文字列変数に名前を代入して、それをオリジナルのオブジェクトと同等に扱える機能です。
これを見たときは、ちょっと驚きましたが、慣れてくれば色々と便利に使えるんじゃないでしょうか。

もう1つ、VBで言うところの、コントロール配列、もサポートされました。
正確には、予め用意されたコントロールしか扱えませんから『組み込みコントロール配列』とでも言うモノになります。


      Dim i as Integer

      i=Field1004.Index 
      Controls(i).Text="mizuno-ami"

上記のサンプルで、Controls()と言うのが組み込みのコントロール配列です。
これは、スクリーン上のオブジェクトを一括に表す事が出来るオブジェクトで、このように添え字を使って表現できるようになりました。
もちろん、オブジェクトに新しく『Index』というプロパティが導入されたので、各オブジェクトのIndex番号はいつでも取得することが出来ます。
ちなみに、Controls(0)は、フォームのタイトルを表します。

その他、そのオブジェクトの種類を表すプロパティとして『Type』が導入されました。その表す意味は、次のとおりです。


     0=Field control
     2=List control
     4=Bitmap control
     8=Label control
     9=form Title
     10=Popup control
     11=Graffiti Shift Indicator
     12=Gadget control
     13=ScrollBar control
     20=button
     21=choicebox
     22=checkbox
     23=popup trigger
     24=selector
     25=repeater

これらのオブジェクトに追加された新しいプロパティは、フォームオブジェクトに導入された新しいプロパティと組み合わせると便利です。
まず、フォーム上にあるオブジェクトの数を表す『Count』というプロパティが追加されました。
これらと組み合わせれば、例えば、フォーム上にある、全てのフィールドだけに特定の文字列を代入する事が可能です。


      Dim i as integer
      Dim n as integer

      n=Form1003.Count

      For i=0 to n-1
            If Controls(i).Type=0 Then  'もし、Fieldコントロールだったら 
                  Controls(i).Text="mizuno-ami"
            End if 
      Next

簡単でしょ?
Countプロパティはオブジェクトの数を取得できますが、フォームのタイトルバーがIndex=0 として存在していますから、実際に指定できるのは、0 〜 (n-1) の範囲になります。
今までだったら、フィールドが20個もあれば大変でしたが、これで簡単に初期化などが出来ます。
この機能を使えば、買物メモソフトのA.S.M.がとっても楽になりますね(笑)



      Dim i as integer
      Dim n as integer

      n=Form1003.Count

      For i=1 to n-1
            If Controls(i).Type=0 Then 
                  Controls(i).Text=""    '←これで初期化
            End if 
      Next

おっと、忘れていました。フォーム上のフィールドを初期化をするのに、上記のような面倒な事をする必要はありません。
フォームに『Clear』メソッドが追加されましたから、


      Form1003.Clear

で初期化可能です。
これは、NextFormにもオプション指定して使えますので、


      NextForm "Form1006",Clear

とすれば、呼び出されたフォームの初期化も簡単に行うことができます。
いかがですか?
オブジェクトの取扱いの自由度が増しましたので、最初のうちは、むしろ混乱するかもしれませんが、慣れてくれば、魅力的な機能アップになっていることが実感できるのではないでしょうか。
その他に、16ビットイメージへの対応や、独自パターンを指定できるRectangle、様々なバグ対応がされており、かなり完成度が高いバージョンであると思います。
もちろん、以前のプログラムと互換性があります。
ソースのレベルであれば、ほとんど完全にそのまま読み込む事が出来ます。
(※仕様的には、完全に読み込めるはずです。ただ、この先、どうなるかわからないので「ほとんど」としました。)
また、以前のバージョンでコンパイルしたプログラムは、Ver.3.のランタイム上で問題なく動作させる事が可能です。
しかし、ランタイムを変えただけでは、スピードアップの効果は得られません。
既存のソースをVer.3.で再コンパイルすることで、スピードアップの効果が得られるようです。
一方、Ver.3.でコンパイルしたプログラムは、Ver.2.11などの以前のランタイムでは動作しませんので、注意して下さい。

忘れてはいけませんでした。
今回のバージョンアップにより、Ver.2.11の時よりも、PalmOS Ver.5への対応がキチンとなされたようです。
現段階では、実機による確認はできませんが、PalmOS 5 マシンを予約してしまった人には朗報かと思われます。
そして、新しいライブラリ、NSBVFSVLib、が同梱されました。
これにより、NS Basicから外部メモリーカードへのアクセスが可能になり、本体メモリの壁を超えて、大きなデータを扱う事が可能になりました。

気になる既存ユーザーへのアップグレード情報です。
まず、2002年8月15日以降の登録ユーザーは、無償でアップグレードができます。
該当する方は、自分のシリアル番号を添えて、support@nsbasic.comまでメールを送って下さいとのことです。
それ以前のユーザーは、有償になりますが、3つの方法が選択できます。
1つは、サイトからダウンロードして使う方法で、ほとんどの関数類は同じですから、新しいハンドブックが不要な方向けの方法です。これは、$34.95です。
もう1つは、ハンドブックとCD−ROMのセットで、ほとんどパッケージと言っても良い組合せです。
こちらは、$64.90ですが、スペシャルセール(?)で、$49.95になっています。
3つ目は、パッケージにMicahel氏によるNS Basicプログラミングハンドブックをつけたセットです。
こちらは、通常$99.85を$69.95で購入できますが、英文の書籍なのであまり日本の方は購入しないでしょう。
これらの通常価格は、11月15日までの限定ということです。
ただし、現時点でマニュアル類はまだ印刷中であることと、日本語版のマニュアルは遅れて登場する予定ですので、ダウンロード以外の方法でアップグレードしようとしている方は注意して下さい。

        NS Basic/Palmサイト
        アップグレードフォーム
mizuno-ami.


主な変更点・改良点


1.Palm OS 5.0のデバイスに対応しました。

2.処理速度が2倍ほどに向上しました。
  ただし、その効果を生かすには、Ver.3.xで再コンパイルする必要があります。

3.新しい関数
  数値変数をダイナミックエリアにストア出来るようになりました。
  この方法を使うと、通常の変数に比べて、速くアクセスできるようになります。
 1つの変数毎に22バイトのエリアを使用し、使用した順に埋っていきます。
 スタートアップコードで、使用している数値変数の数を指定するのがベターです。

  SysInfoSet("HeapVariableCount",n)

4.VFSライブラリを同梱
  NSBVFSVLibによって外部メモリーカードなどへのアクセスが可能になりました。

5.DEFINEコマンド不要
  コンパイラのチェック方法が変更になったため、従来使用する必要があったDEFINEコマンドが不要になりました。

6.新しい関数   DateDiff(date1,date2)
  2つの日付間の日数計算を行います

7.新しい関数   TimeDiff(time1,time2)
  2つの時刻間の秒数計算を行います

8.新しいフォームのメソッド   フォームのクリア
  フォーム上の全てのフィールドの値をクリアします。

      frmName.Clear

9.新しいフォームのプロパティ  フォーム上のオブジェクト数の取得
  フォーム上のオブジェクトの数を返します。
  フォームがタイトルバーを持っていれば、それもカウントに含まれます。

      frmNAme.Count

10.新しいオブジェクトのプロパティ  インデックス番号
  フォーム上のインデックス番号を返します。
  フォームがタイトルを持っていれば、それが 0 になります。

      objName.Index

11.新しいオブジェクトのプロパティ  タイプ番号

  オブジェクトのタイプを取得します。

      objName.Type
  オブジェクトによって次のタイプ番号が返ります。
     0=Field control
     2=List control
     4=Bitmap control
     8=Label control
     9=form Title
     10=Popup control
     11=Graffiti Shift Indicator
     12=Gadget control
     13=ScrollBar control
     20=button
     21=choicebox
     22=checkbox
     23=popup trigger
     24=selector
     25=repeater

12.NextFormが変数を保持できるようになりました。

13.NextFormにオプションが追加されました。
   NextFormにClearオプションを付けると、フォームが初期化されて表示されます。

      NextForm stringVarName[,clear]

14.新しいオブジェクトの指定方法1
  組み込みのコントロール配列が使えます
  Controls(Index)、というオブジェクトは、フォーム上のIndex番号が同じオブジェクトと同じです。
  フォームのタイトルバーは、Index=0、つまり、Controls(0)になります。

15.新しいオブジェクトの指定方法2
  コントロール名を変数に入れて使えます。
  変数名を文字列変数に入れておけば、その変数もオブジェクトとして扱うことが出来ます。

  したがって、オブジェクトには3種類のアクセス方法を使うことが出来ます。
      1.従来の方法
            Field1004.Text="mizuo-ami"
      2.組み込みコントロール配列
            i=Field1004.Index 
            Controls(i).Text="mizuno-ami"
      3.オブジェクト名を変数として扱う
            strObj="Field1004"
            strObj.Text="mizuno-ami"

16.16ビットイメージを組み込めるようになりました。

17.IDEがスペイン語にも対応できるようになりました。

18.AppLaunch()が32768-65535という値を返すようになりました。

19.独自パターンを持った短形を描画できるようになりました。
  FillRectangleなどの短形を描画するコマンドに独自のパターン定義が可能になりました。
 
      Dim PatternStr as String
      PatternStr = &hFF808080FF080808     'Brick pattern
      SysTrapSub 548,1,PatternStr       'WinSetPattern
      FillRectangle 24,20,110,110,55,nsbCustom
      DrawRectangle 24,20,110,110,54,nsbNormal

20.関数の戻り値を指定しなくても、実行出来るようになりました。
  従来は、

    x=funcName(Param,...)

  で使っていた関数類も、戻り値が不要の場合は単純に、

    funcName(Param,...)

  と指定すればよくなりました。

21.dbPut()の仕様変更
  従来、フィールド区切りに用いられていたnullキャラクターを挿入しなくなりました。
  これは、正確にフィールド内に収められた文字列のバイト数を取得するためです。
  従来は、同じレコードに上書きすると、元のデータと同じ長さのままでnullによって調整されていましたが、
  今回からは、書かれたデータにあわせて、長さが調整されます。

22.修正:非表示になっているフィードの値を変化させても、スクロールバーが表示されなくなりました。

23.修正:MsbBox()の後で、SetFocusが使えるようになりました。

24.修正:下方向ボタンで、勝手に非表示のフィールドが表示されなくなりました。

25.修正:TestNum()関数のバグを修正。

26.修正:Val()関数のバグを修正。

27.サンプル:MenuTestサンプルを更新。

28.修正:PalmOS5上のsignatureの問題を修正。

29.変更:サンプルのタイプが「Test」だったのを「appl」にしました。

30.追加:EasyCalc.cod をサンプルに再収録しました。

31.修正:64KBを超えるリソースを含んでいても、IDEがループしなくなりました。

32.補足:全ての変数は、DIMかGLOBALで定義しなければなりません。

33.補足:コンパイル中にリテラルテーブルのオーバーフォローがチェックされます。

34.補足:メモリーリークが完全に行われるようになりました。

35.上位互換
  Ver.2.1以前のコンパイラでコンパイルしたプログラムは、修正や再コンパイルすることなくVer.3.0上で動作します。
  しかし、ランタイムが変っても速度は向上しません。
  一方、Ver.3.0でコンパイルしたプログラムは、以前のバージョンのランタイムでは動作しません。