式神SDKの使い方

目次

  1. 式神SDKでは、何ができるか
  2. チュートリアル
  3. GUIフロント・エンドの詳細
  4. PC上での式神環境の起動

1. 式神SDKでは、何ができるか

式神SDKでは、以下のことができます。

  1. PC上で式神環境を実行させることができます。(現バージョンではPDA向 けのみ)
  2. 式神用のGUIをGUIを使って作成することができます。(glade/式神)
  3. 式神用のアプリケーションをPC上で作成し、実行、デバッグできます。
  4. PC上で式神用アプリケーションをiPAQ(ARM CPU)用にクロス・コンパイルすることが できます。
  5. 以上の作業を補助するGUIのフロント・エンドが存在します。
  6. ネットワークを使ってiPAQ上で式神用アプリケーションをセルフ・コン パイルすることができます。

このドキュメントでは、セルフ開発環境に関しては、説明しませ ん。他のドキュメントを参照して下さい。

2. チュートリアル

ここでは、簡単なエディタを作成しながら、式神SDKの使い方の概略を説明し ます。

2.1 フロント・エンドの起動

まず、開発用のディレクトリを作成し、移動します。名前は、仮に/home/sho/sgse とします。sgseはSikiGami Simple Editorの略です。

mkdir sgse

次に式神SDKフロント・エンドを起動します。

/sgsdk/bin/sikigamisdk

式神フロント・エンドは、最初に起動した時には、まず次の設定ダイアログが表示されま す。

これは、設定の規定値を表示しています。ここで変更しておくと、ユーザ のホームディレクトリの.gnome/sgsdkにユーザ毎の設定として保存されます。 あとで、メニューからもこのダイアログを出すことができます。変更の必要は ないので、「OK」ボタンをクリックします。

2.2 GUIフロント・エンドの画面

設定ダイアログで「OK」をクリックした場合および2回目以降の起 動では、次の画面が表示されます。

2.3 プロジェクト毎の設定の保存

設定ダイアログで設定した値は、ユーザ毎の設定として保存されますが、プロ ジェクト毎に変更して、ファイルに保存することもできます。

  1. まず「ファイル」メニューから「新規」を選択します。
  2. 設定を変更する場合は、 「設定」メニューから「設定」を選択して、設定ダイアログを表示して変更し ます。
  3. 「ファイル」メニューの「名前をつけて保存」を選択して、ファイル名 を指定して保存します。ここでは、sgse.projとします。

次回からは、sikigamisdkの引数にこのファイルを指定するか、起動が「ファ イル」メニューの「開く」を選択すれば、保存した設定にできます。

2.4 gladeの利用

次にGUIを指定してプログラムのテンプレートを作成するために、gladeを 利用します。gladeの使い方の詳細ついては、gladeのドキュメントを参照して 下さい。

  1. gladeの起動

    「作成」メニューからgladeを選択して下さい。すると、つぎのようにウィ ンドウが3個表示されます。

    これらは、メイン、パレット、プロパティのウィンドウです。

  2. 新規プロジェクトの作成

    gladeのファイル・メニューから「新規プロジェクト」を選択して、プロ ジェクトを作成します。

  3. GUIの作成

    パレットのGNOMEからGNOMEアプリケーション・ウィンドウを選択します。 すると次のウィンドウが現れます。これがアプリケーションのメインのウィン ドウになります。

    このウィンドウの下半分部分に、テキスト・ボックスを入れることにしま す。そのためには、パレットのGTK+ Basicのテキスト・ボックスを選択した後、 入れたい場所をクリックします。すると、次のようになります。

    テキスト・ボックスの属性を編集可能にするのを忘れないようにします。

    ファイル名を尋ねるファイル・ダイアログも必要です。パレットのGNOME ダイアログ・ボックス、垂直ボックス、ラベル、GNOMEファイル・エントリを 組み合わせて作成します。ただし、「適用」ボタンは、削除しておきます。結 果として次のようなダイアログができます。

  4. gladeプロジェクトの保存

    gladeのツールバーの「保存」をクリックして、プロジェクトを保存します。ディ レクトリ名、プロジェクト名、ファイル名を聞かれるので、それぞれ、 /home/sho/sgse、sgse、sgse.gladeとします。

  5. テンプレートの作成

    gladeのツールバーの「作成」をクリックして、テンプレート・ファイルを作成し ます。これによって、プログラムのソースファイルだけでなく、 Makefileやconfigureファイルなどのファイルも作成されます。

  6. gladeの終了

    一旦gladeを終了します。そのためgladeの「ファイル」メニューから「終了」を選 択します。

2.4 ファイルの編集

次に、ソース・ファイルを編集してプログラムの機能部分を加えます。

エディタについては、ユーザの好みが非常に強く出るツールであることも あり、現バージョンの式神SDKでは、標準的なものは用意していません。好み のものを利用して下さい。

  1. 端末エミュレータの起動

    ツール・バーの「作成用端末」をクリックして、開発用の端末エミュレー タを起動します。

  2. ソース・ファイル

    端末エミュレータ上で"ls"を実行すると以下のファイルが作成されている ことが分かります。
    AUTHORS      NEWS        autogen.sh    po              sgse.proj
    ChangeLog    README      configure.in  sgse.glade      src
    Makefile.am  acconfig.h  macros        sgse.glade.bak  stamp-h.in
    

    プログラムのソース・ファイルはsrcディレクトリの下にありますので、そこ へ移動します。

    cd src
    ls
    
    Makefile.am  callbacks.h  interface.h  support.c
    callbacks.c  interface.c  main.c       support.h
    
  3. main.cの変更

    main.cでmain関数は以下の様に定義されています。

    int
    main (int argc, char *argv[])
    {
      GtkWidget *app1;
      GtkWidget *dialog1;
    
    #ifdef ENABLE_NLS
      bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
      textdomain (PACKAGE);
    #endif
    
      gnome_init ("sgse", VERSION, argc, argv);
    
      /*
       * The following code was added by Glade to create one of each component
       * (except popup menus), just so that you see something after building
       * the project. Delete any components that you don't want shown initially.
       */
      app1 = create_app1 ();
      gtk_widget_show (app1);
      dialog1 = create_dialog1 ();
      gtk_widget_show (dialog1);
    
      gtk_main ();
      return 0;
    }
    

    dialog1は、最初に表示する必要がないので、関係した文を削除します。 app1は、他のファイルから参照したいので大域変数に変更します。その結果以 下のようになります。

    GtkWidget *app1;
    
    int
    main (int argc, char *argv[])
    {
    #ifdef ENABLE_NLS
      bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
      textdomain (PACKAGE);
    #endif
    
      gnome_init ("sgse", VERSION, argc, argv);
    
      /*
       * The following code was added by Glade to create one of each component
       * (except popup menus), just so that you see something after building
       * the project. Delete any components that you don't want shown initially.
       */
      app1 = create_app1 ();
      gtk_widget_show (app1);
    
      gtk_main ();
      return 0;
    }
    
  4. callbacks.cの変更

    今回は、簡単化のためcallbacks.cにプログラムの本体を書くことにします。 callbacks.cの最初の部分に以下のコードを書き加えます。

    extern GtkWidget *app1;
    static char *filename = NULL;
    
    static void cleanText(void)
    {
        GtkWidget *textArea;
        
        textArea = lookup_widget(app1,"text1");
        gtk_editable_delete_text(GTK_EDITABLE(textArea),0,-1);
        if (filename != NULL) {
    	filename = NULL;
    	g_free(filename);
        }
    }
    
    static void read_file(char *fn)
    {
        FILE *fp;
        char buf[1024];
        GtkWidget *textArea;
        int pos;
        int n;
    
        if ((fp = fopen(fn,"r")) == NULL) {
    	GtkWidget *msg;
    
    	msg = gnome_error_dialog(_("Can't open file\n"));
    	gnome_dialog_run_and_close(GNOME_DIALOG(msg));
    	return;
        }
    
        cleanText();
        textArea = lookup_widget(app1,"text1");
        pos = 0;
        while ((n = fread(buf,1,1024,fp)) > 0) {
    	gtk_editable_insert_text(GTK_EDITABLE(textArea),buf,n,&pos);
        }
        fclose(fp);
        filename = g_strdup(fn);
    }
    
    static char *getFileName(void)
    {
        int bid;
        GtkWidget *dialog;
        GtkWidget *fe;
        char *fn = NULL;
    
        dialog = create_dialog1();
        fe = lookup_widget(dialog,"fileentry1");
        bid = gnome_dialog_run(GNOME_DIALOG(dialog));
        if (bid == 0) {
    	fn = gnome_file_entry_get_full_path(GNOME_FILE_ENTRY(fe),FALSE);
        }
        gnome_dialog_close(GNOME_DIALOG(dialog));
        return fn;
    }
    
    static void save_file(void)
    {
        FILE *fp;
        GtkWidget *textArea;
        char *p;
    
        if (filename == NULL) {
    	filename = getFileName();
    	if (filename == NULL) return;
        }
        if ((fp = fopen(filename,"w")) == NULL) {
    	GtkWidget *msg;
    
    	msg = gnome_error_dialog(_("Can't open file\n"));
    	gnome_dialog_run_and_close(GNOME_DIALOG(msg));
    	return;
        }
    
        textArea = lookup_widget(app1,"text1");
        p = gtk_editable_get_chars(GTK_EDITABLE(textArea),0,-1);
        if (p != NULL) {
    	fwrite(p,1,strlen(p),fp);
    	g_free(p);
        }
        fclose(fp);
    }
    

    次に、gladeが作成したcallback関数の中身を書き加えます。ここでは、 「ファイル」メニューの「終了」、「開く」、「保存」、「名前をつけて保存」 に対応する以下の関数を書き変えることにします。他の関数は、後でみなさん で変更してみて下さい。

    void
    on_new_file1_activate                  (GtkMenuItem     *menuitem,
                                            gpointer         user_data)
    {
        cleanText();
    }
    
    
    void
    on_open1_activate                      (GtkMenuItem     *menuitem,
                                            gpointer         user_data)
    {
        char *fn;
    
        fn = getFileName();
        if (fn != NULL) {
    	read_file(fn);
    	g_free(fn);
        }
    }
    
    
    void
    on_save1_activate                      (GtkMenuItem     *menuitem,
                                            gpointer         user_data)
    {
        save_file();
    }
    
    
    void
    on_save_as1_activate                   (GtkMenuItem     *menuitem,
                                            gpointer         user_data)
    {
        char *fn;
    
        fn = getFileName();
        if (fn != NULL) {
    	if (filename != NULL) {
    	    g_free(filename);
    	}
    	filename = fn;
    	save_file();
        }
    }
    
    
    void
    on_exit1_activate                      (GtkMenuItem     *menuitem,
                                            gpointer         user_data)
    {
        gtk_main_quit();
    }
    

2.5 autogen.shの実行

ソース・ファイルの変更が終ったので、autoge.shスクリプトを実行して、 Makefileを生成します。

  1. 「作成」メニューから「Autogen」を選択します。
  2. autogenが必要な引数で実行されて、その出力がウィンドウの下半 分部分に表示されます。
  3. 終了すると、次の画面のように、下半分のウィンドウに "---- Done ...: sh autogen.sh ..."と表示されます。

2.6 makeの実行

次にmakeを実行して、PC上で動作するバイナリを作成します。

  1. ツール・バーの「Make」をクリックします。
  2. makeが実行されて、その出力がウィンドウの下半分部分に表示されます。
  3. エラーが出た場合は、エディタを利用してファイルを修正後、再びmake を実行します。
  4. エラーなしに終了すれば、バイナリが出来ています。

2.7 式神環境の起動

作成したプログラムをテストするために、式神環境を起動します。ホーム ・ディレクトリの下にsgsdkというディレクトリが作成されて、式神環境での ホーム・ディレクトリとして利用されます。

  1. 「実行」メニューから「式神」を選択します。
  2. 次のように、320x200の大きさのウィンドウが表示されて、その中に 式神環境が起動されます。

2.8 プログラムの起動

作成したプログラムを式神環境の元に実行します。

  1. ツール・バーの「アプリの実行」をクリックします。
  2. 次のようなダイアログが表示されるので、src/sgseと入力し、「OK」ボ タンをクリックします。

  3. sgseが実行されて、先ほど起動した式神環境の中にウィンドウが表示さ れ、以下のようになります。

  4. sgseを操作して、意図した通り動作することを確認します。

式神環境を終了する場合は、利用しているウィンドウ・マネージャのやり 方で強制終了させて下さい。

2.9 クロス・コンパイル

PC上で動作が確認できたら、iPAQ用にクロス・コンパイルします。

  1. make clean

    以前のバイナリを削除するために、「作成」メニューから「Make clean」 を選択します。

  2. autogen.sh

    make cleanが終了したら、クロスコンパイル用にautogen.shを実行します。 そのためには、「クロス開発」メニューから「XAutogen」を選択します。 インストール先は、規定値(/usr/local)になっています。

  3. make

    autogen.shが終了したら、makeを実行します。そのためには、ツール・バー の「XMake」をクリックします。makeが終了したらバイナリの完成です。

2.10 バイナリtarファイルの作成

作成したバイナリをiPAQにインストールするためのtarファイルを作成します。

  1. 「配付」メニューから「Make bindist」を選択します。
  2. 終了すると、sgseディレクトリの下に、bindist.tar.gzというファイル ができています。中身は、インストール先ディレクトリ/usr/localを省いた形 でのバイナリになっています。sgseの場合は、実行ファイルのみなので、. /bin/sgseのみが必要ファイルです。

2.11 作成したバイナリのiPAQへのインストール

完成したバイナリを、iPAQにインストールします。

  1. コンパクト・フラッシュ・メモリやネットワークなどを利用して、 bindist.tar.gzをiPAQの/tmpの下に持っていきます。
  2. rootになり、インストール先である/usr/localへ移動して、 tarファイルを展開します。
    cd /usr/local
    tar xvfz /tmp/bindist.tar.gz
    
  3. /usr/local/binの下にsgseが展開されます。

2.12 iPAQでの実行

インストールしたsgseを実行してみます。

  1. /usr/local/bin/sgseを実行します。
  2. 意図した通り動作することを確かめます。

以上で、簡単エディタsgseの完成です。

3. GUIフロント・エンドの詳細

ここでは、GUIフロント・エンドの機能を網羅的に説明します

3.1 設定ダイアログ

最初に起動した時および設定メニューから表示される設定ダイアログは、 設定を変更するためのものです。

変更した設定は、ファイルに保存されます。 最初は、ホーム・ディレクトリの下の.gnome/sgsdkに保存されます。

「ファイル」メニューから「名前をつけて保存」を行なうと、現在の設定は指定 したファイルに保存され、以後の変更もこのファイルに保存されます。「ファ イル」メニューの「新規」を選択すると、以後の設定の変更はどこにも 保存されない状態になります。

「基本」、「実行」、「作成」、「クロス開発」の4個のタブが存在します。 各タブの意味は以下の通りです。

3.1.1 基本

すべての環境に共通の設定項目で、以下の項目が存在します。

3.1.2 実行

式神用のアプリケーションをPC上で実行する際に関係する項目です。式神環境 自体の実行にも関係します。以下の項目が存在します。

3.1.3 作成

式神用プログラムをPC上で動作するようにコンパイルする際に関係する項 目です。以下の項目が存在します。

3.1.4 クロス開発

PC上でiPAQ(ARM CPU)用のバイナリをクロス・コンパイルする際に関係す る項目です。以下の項目が存在します。

3.2 メイン・ウィンドウ

メインのウィンドウは、以下のようになっています。

ウィンドウは、6個の部分からなり、上から「メニュー・バー」「ツール・ バー」「カレント・ディレクトリ入力」「カレント・ディレクトリ表示」「コ マンド出力表示エリア」「ステータス・バー」です。

各部分の機能は以下の通りです。

  1. メニュー・バー

    メニューがならんでいる部分です。詳細は、後ほど説明します。

  2. ツール・バー

    機能アイコンがならんでいる部分です。詳細は、後ほど説明します。

  3. カレント・ディレクトリ入力

    SDKフロント・エンドのカレント・ディレクトリを変更するための入力場 所です。ディレクトリ名を入力後、Enterを押すことでカレント・ディレクト リが変更されます。

    autogen.shやconfigureスクリプト、Makefile等はカレント・ディレクトリ のものを使います。

  4. カレント・ディレクトリ表示

    カレント・ディレクトリを表示しています。

  5. コマンド出力表示エリア

    フロント・エンドから起動したmakeやconfigureおよびアプリケーションの 標準出力、標準エラー出力の内容がここに表示されます。

3.3 メニュー・バー

メニュー・バーには、「ファイル」、「表示」、「実行」、「作成」、 「クロス開発」、「配付」、「設定」、「ヘルプ」の8個のメニューが存在し ます。以下で、各メニューの説明を行ないます。

3.3.1 「ファイル」メニュー

ファイル関係等のメニューです。以下の項目が存在します。

3.3.2 「表示」メニュー

表示関係のメニューです。以下の項目が存在します。

3.3.3 「実行」メニュー

式神環境での実行に関係するメニューです。以下の項目が存在します。

3.3.4 「作成」メニュー

PC上でプログラムを作成するのに関係するメニューです。以下の項目が存在します。

3.3.5 「クロス開発」メニュー

クロス・コンパイルに関係するメニューです。以下の項目が存在します。

3.3.6 「配付」メニュー

配付やインストールに使うtarファイルを作成するメニューです。 以下の項目が存在します。

3.3.7 「設定」メニュー

設定に関するメニューです。以下の項目が存在します。

3.3.8 「ヘルプ」メニュー

ヘルプに関するメニューです。以下の項目が存在します。

3.4 ツール・バー

ツール・バーは、クリックすることで起動できるアイコンを保持します。 各アイコンは、メニューの項目に対応しており、対応したメニュー項目を選択 したのと同じ効果があります。以下のアイコンが存在します。

アイコン対応するメニュー項目
アプリの実行 「実行」メニューの「アプリの実行」
実行用端末 「実行」メニューの「実行用端末」
Make 「作成」メニューの「Make」
作成用端末 「作成」メニューの「作成用端末」
XMake 「クロス開発」メニューの「XMake」
クロス開発用端末 「クロス開発」メニューの「クロス開発用 端末」

4. PC上での式神環境の起動

ここでは、式神環境をPC上で見てみたい方のために、式神環境の起動の方 法に絞って説明します。

まず、式神SDKフロント・エンドを起動します。

/sgsdk/bin/sikigamisdk

式神フロント・エンドは、最初に起動した時には、まず次の設定ダイアログが表示されま す。

ここでは、「OK」ボタンをクリックします。

すると、次の画面が表示されます。

このウィンドウの「実行」メニューから「式神」を選択します。 次のように、320x200の大きさのウィンドウが表示されて、その中に 式神環境が起動されます。

終了する場合は、利用しているウィンドウ・マネージャのやり方で強制終了させて下 さい。