CodeWarriorで簡単? Palmプログラミング

更新日 2001/5/27

[HOME] / [Java] / [Perl5] / [Oracle8] / [Palm(GCC)] / [EJB] / [本の紹介]


 1. はじめに
 Palmの開発環境としてはフリーのGCCが有名ですが、CodeWarriorの方も評価版CodeWarrior Lite for Palm Computing Platformが公開されていたりして、私のようなビンボー人にはいい世の中です。そういえばこのHPも安上がりに仕上がっていて、Windowsマシンとインターネットさえあればたいていのことは実験できる状況に驚くばかりです。さて、このページでは、GCC編も中途半端で止まっていることも百も承知で、新しいものは1度は使ってみようという性格に負けて始めるものですが、できればTCP/IP通信を使ってセンタマシンと情報のやりとりができるようなものの実現を目標にしたいと思っています。
 作成にあたり、いくつかの書籍を参考にさせていただいていますが、何か問題がありましたら、メールにて指摘いただけたら幸いです。

    Windows2000では上手く行かないところがありますので、95/98かNT4.0で実施されることをお勧めします。

 以下に、参考になる文献を紹介しておきます

 2. 準備(インストール)
 3. まずは動くものを
 4. 通信の試み(メールの送信)
 5. POP3によるメールの受信
  2. 準備(インストール)   ↑top
 CodeWarrior for Palm Computing Platformは、「GCCで挑戦! Palmプログラミング」の方でも紹介していましたが、Metrowerks社が提供する開発ツールで、Windows、Macintoshの双方で動作する標準的な開発環境です。IKE SHOP さんで、\39,800 で扱われていますが、最近Palm社のページで評価版(CodeWarrior Lite for Palm Computing Platform) がダウンロードできることが分かりましたので、さっそくこれをインストールしてみましょう。
  1. Palm社のソフト開発者のためのページ Development Zone の Tools  の CodeWarrior Lite - Free Download! と書かれているところの Winndows か Mac をダウンロードします。ファイル名はcw_lite_palm_win.exe で、容量は 22MBほどでした。

  2.  
  3. そのままアイコンをダブルクリックして、インストールします。
   Windows2000では上手く行かないところがありますので、95/98かNT4.0で実施されることをお勧めします
 
  3. まずは動くものを  ↑top
 今回使う評価版は、機能的には本物と同じということで、いろいろ試すことができるようです。これで作ったPalmwareを起動すると、英語で、商用として配布することはできないようなことが表示されますが、Freeであればいいんでしょうかね。でも、満足できるものが出来るところまでいったら、4万円も高くないでしょうから、そのときは本物を買った方がいいかも知れません。

 ここでは、まず動くことを確認するために、簡単に使ってみましょう。

  1.  まずは、CodeWarrior IDEを使ってプロジェクトを作ってみます
  2.  
      C:\test\test.mcp
      C:\test\stationary Read Me.txt

      C:\test\Src\Starter.c
      C:\test\Src\StaterRsc.c
      C:\test\Src\StarterRsc.h

      C:\test\Rsc\Starter.rsrc
      C:\test\Rsc\Resource.frk\Starter.rsrc
      C:\test\test_Data\CWSettingsWindows.stg
      C:\test\test_Data\Starter\TargetDataWindows.tdt
     

  3. このとき左上に test.mcp と書かれた画面が表示されているはずですが、それぞれ内容を見ていきます
  4. ここでは、何もいじらずに Make して実行ファイルを作成してみましょう

  5. Project の中の Make、または先程の画面の5つのアイコンの真ん中を押すと、何やら動き始めて、以下のエラーを残して終わってしまいます

      Link Error : Could not open file: C:\test\RESOURCE.FRK\Starter.tmp

    フォルダを見ると、確かに Starter.tmp なんてファイルはありません。Make時の設定を見るために、Edit の Starter Settings... あるいは test.mcp の画面の一番左のアイコンをクリックして、Starter Settings という画面を表示させ、確認していきます。

    Target の中の 68K Target のファイル名として、「test」 が設定されており、フォルダにも「test」というファイルは存在します。
    一方、Linkerの中のPalmRez Post Linker を見ると、この1行目にあるLinkerの Input File(Mac Resource Files) が「Start.tmp」と設定されており、連携がとれていません。
    この対処としては、2つ考えられます。1つは、68K Target を「Starter.tmp」に書き換えることで、Palm Magazine Vol.1でも紹介されています。
    もう1つは、PalmRez Post Linker の方の Input File(Mac Resource Files) を「test」にしてしまうことです。どちらにしても、右下の Save をクリックしたのち、再度Makeしてやると、問題なく実行ファイル(Starter.prc)が作成されます。

    何のためにこんな設定がされているか知りませんが、初心者はこういうことであきらめてしまいがちなので、何とかしてもらいものです。
     

  6. この実行ファイルを HotSync を使って Palm本体に入れると、アイコン表示のない怪しげなアプリが1つ増えています。

  7. これを起動すると画面だけが表示されます。タイトルは StarterApp になっているはずです。
 確かにこれで動作は確認できましたが、あまりにも画面がさびしいので、いろいろ追加してみましょう。
  1. それでは、テキストフィールドとチェックボックス、ボタンを配置してみましょう

  2. FormsのMainをダブルクリックするとレイアウト画面が出てきます。さらに、Window の Catalog をクリックすると UI (画面の部品)の一覧が出てきます。部品のうち FieldCheckboxButton の3つをドラッグしてレイアウト画面に持っていって見ます。このとき番号が出ますが、じゃまなときは LayoutのHide Object IDsで消すことができます。
    最後に、File の中の Saveで保存します。このときStarter_res.hが自動的に編集されます。
     
  3. IDE で Make すると Starter.prc が更新されます

  4. これをPalm本体で見ると、テキストフィールドとチェックボックス、ボタンが表示されます。テキストフィールドは字が書き込めますし、チェックボックスはuntitledで表示されますが、チェック部分をトグル(ついたり消えたり)できます。ボタンはOKと表示され、押せますが何も起こりません。
 今度は、このOKボタンが押されたときに終了するようにしてみます。
  1. ソースファイルを編集します

  2. AppSource の+を押してStarter.cをダブルクリックするとソースファイルが編集できるようになります。
    以下に、ソースの変更箇所を示します。ctlSelectEvent はコントロールボタンを押して離したときに発生しますが、これを検出して終了のイベントをキューに送ることで実現しています。
         static Boolean MainFormHandleEvent(EventPtr eventP)
         {
             Boolean handled = false;
             FormPtr frmP;

             /* 以下の行を追加 */
             EventType newEvent;

           switch (eventP->eType)
            {
              case menuEvent:
                return MainFormDoCommand(eventP->data.menu.itemID);

              case frmOpenEvent:
                frmP = FrmGetActiveForm();
                MainFormInit( frmP);
                FrmDrawForm ( frmP);
                handled = true;
                break;

              /* ここから追加 */
              case ctlSelectEvent:
                  MemSet(&newEvent, sizeof(EventType), 0);
                  newEvent.eType = appStopEvent;
                  EvtAddEventToQueue(&newEvent);
                handled = true;
                break;
              /* ここまで */

              default:
                 break;

            }
           return handled;
         }
     

  3. Makeして、Palm本体で動作を確認してみてください
  4. 通信の試み(メールの送信)  ↑top
 ここでは、オライリージャパン出版「Palmプログラミング」の9章 通信機能のサンプルプログラムを使って、メール送信の実験を行います。また、情報管理出版の「Perl徹底活用インターネットダイレクトアクセス」という本にPOP3プロトコルが書かれていますので、これを参考に単純なメールソフトを組んでみたいと思います。
  1. ダイアルアップ接続の実現

  2. ダイアルアップ接続の方法がよく分かっていなかったので、以下のような実験を実施しました。何のことはなくプログラムの中で、NetLibOpenを実行するだけで接続されてしまいます。
       
    「3.まずは動くものを」で使った Startrer.cに以下を加えてみます。緑の部分が、さらに追加したところです.

      #include <NetMgr.h>
      extern Word AppNetRefnum;
      Err errno;

      static Boolean MainFormHandleEvent(EventPtr eventP) {
         .....
        EventType newEvent;
        Word interfaceError;
        Err error;
        Word AppNetRefnum;
        .....

      /* ここから追加 */
       case ctlSelectEvent:
       SysLibFind("Net.lib", &AppNetRefnum);
       error = NetLibOpen(AppNetRefnum, &interfaceError); /* 接続して */
       NetLibClose(AppNetRefnum, true);                            /* 切断する */
        MemSet(&newEvent, sizeof(EventType), 0);
        newEvent.eType = appStopEvent;
         EvtAddEventToQueue(&newEvent);
         handled = true;
         break;
       /* ここまで */

       
    Makeして実行してみると、ちゃんとダイアルアップ接続した後、切断します。接続先は、Palm本体のNetwork設定に従います。
     
     
  3. サンプルプログラムを参考に、メールの送信をやってみましょう

  4. 以前は、Windows2000でやっていてなかなか上手くいきませんでしたが、NT4.0にしたら問題なく動きました。

    まず、ダウンロードしましょう。ここをクリックしてください。オライリ社のサイトで、下の方のNov. 1, 2000のところのDownload CW R6 projects (Mac/Windows)です。

    ここで注意が必要なのは、インクルードファイルの一部を修正しないとコンパイルできないことです。以下を直してください。

    Program Files\Netrowerks\Incs\System\Unix\unix_stdio.h
    #include <stdarg.h>   ->  #include <unix_stdarg.h>

    Program Files\Netrowerks\Incs\System\Unix\unix_string.h
    #include <StdArg.h> ->  #include <unix_stdarg.h>

    さきほどダウンロードしたファイルを解凍し、cwr6projs\PalmProg\Sendmail (chapter 9)\Sendmail (R6)をダブルクリックします。このとき3つほどメッセージが出ますが、無視します。
    このまま、Makeをクリックすると、実行型が出来上がります。Palmデバイスに入れて動かしてみるとちゃんとメール送信できました。
     
     

  5. CWを使ってのmakeや画面の構成を確認してみましょう。
    切り出して書いてみましたので、ここを参照してください。

  6.  

     

  7. それでは、プログラムの中身を見てみましょう。

  8. ソースは2つのファイルで構成されています。これらのファイルとその中に定義されている関数の構成を以下に示します。

  9.  

     
     
     

  5. POP3によるメールの受信  ↑top
 前節では、サンプルプログラムを使ってメール送信を行いましたが、これを元にして今度はメールの受信に挑戦してみます。情報管理出版の「Perl徹底活用インターネットダイレクトアクセス」という本にPOP3プロトコルが書かれていますので、これを参考に組み込んでみます。
 以下に標準の流れを示します。
私が入っているリムネットのメールサーバに対してアクセスしてみます。ダイアルアップの接続を済ませたあとで、コマンドプロンプトから telnet を使って入り込みます。青色のところを入力しますが、エコーバックされないため、ちゃんと入っているか?てな感じです。

C:\>telnet mail.cc.rim.or.jp 110    (110 は pop3 のポート番号です)

Server: +OK QPOP (version 2.53) at mail3.cc starting.
Client : USER egami3
Server: +OK Password required for egami3.
Client : PASS *******              (******* はパスワードです)
Server: +OK egami3 has 1 message (915 octets).
Client : STAT
Server: +OK 2 1540
Client : LIST
Server: +OK 2 messages (1540 octets)
Server: 1 915
Server: 2 625
Server: .      (ピリオドです)
Client : RETR 1
Server: +OK 915 octets
Server: Received: from serio.al.rim.or.jp (serio [202.247.191.123])
        by mx1.rim.or.jp (8.9.3+Sun/3.7W) with ESMTP id AAA15944
        for <egami3@cc.rim.or.jp>; Thu, 26 Apr 2001 00:00:25 +0900 (JST)
    ・・・・・・・・・・・・・・・
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit
X-UIDL: 5a73b5519fa77475d7dff22f563c27c8

@%F%9%H$G$9B (本文ですが、日本語が化けちゃいました)

Server: .       (ピリオドです)
Client : DELE 1
Server: +OK Message 1 has been deleted.
Server: +OK Pop server at mail3.cc signing off.
Client : QUIT

ホストとの接続が切断されました。

C:\>

  このやり取りをプログラムで実現すればいいわけです。なんかできそうな気になってきましたね。
 
 
 


[HOME] / [Java] / [Perl5] / [Oracle8] / [Palm(GCC)] / [EJB] / [本の紹介]

このページにご意見のある方は、egami3@cc.rim.or.jp までお願い致します。