式神SDKでは、以下のことができます。
このドキュメントでは、セルフ開発環境に関しては、説明しませ ん。他のドキュメントを参照して下さい。
ここでは、簡単なエディタを作成しながら、式神SDKの使い方の概略を説明し ます。
まず、開発用のディレクトリを作成し、移動します。名前は、仮に/home/sho/sgse とします。sgseはSikiGami Simple Editorの略です。
mkdir sgse |
次に式神SDKフロント・エンドを起動します。
/sgsdk/bin/sikigamisdk |
式神フロント・エンドは、最初に起動した時には、まず次の設定ダイアログが表示されま す。
これは、設定の規定値を表示しています。ここで変更しておくと、ユーザ のホームディレクトリの.gnome/sgsdkにユーザ毎の設定として保存されます。 あとで、メニューからもこのダイアログを出すことができます。変更の必要は ないので、「OK」ボタンをクリックします。
設定ダイアログで「OK」をクリックした場合および2回目以降の起 動では、次の画面が表示されます。
設定ダイアログで設定した値は、ユーザ毎の設定として保存されますが、プロ ジェクト毎に変更して、ファイルに保存することもできます。
次回からは、sikigamisdkの引数にこのファイルを指定するか、起動が「ファ イル」メニューの「開く」を選択すれば、保存した設定にできます。
次にGUIを指定してプログラムのテンプレートを作成するために、gladeを 利用します。gladeの使い方の詳細ついては、gladeのドキュメントを参照して 下さい。
「作成」メニューからgladeを選択して下さい。すると、つぎのようにウィ ンドウが3個表示されます。
これらは、メイン、パレット、プロパティのウィンドウです。
gladeのファイル・メニューから「新規プロジェクト」を選択して、プロ ジェクトを作成します。
パレットのGNOMEからGNOMEアプリケーション・ウィンドウを選択します。 すると次のウィンドウが現れます。これがアプリケーションのメインのウィン ドウになります。
このウィンドウの下半分部分に、テキスト・ボックスを入れることにしま す。そのためには、パレットのGTK+ Basicのテキスト・ボックスを選択した後、 入れたい場所をクリックします。すると、次のようになります。
テキスト・ボックスの属性を編集可能にするのを忘れないようにします。
ファイル名を尋ねるファイル・ダイアログも必要です。パレットのGNOME ダイアログ・ボックス、垂直ボックス、ラベル、GNOMEファイル・エントリを 組み合わせて作成します。ただし、「適用」ボタンは、削除しておきます。結 果として次のようなダイアログができます。
gladeのツールバーの「保存」をクリックして、プロジェクトを保存します。ディ レクトリ名、プロジェクト名、ファイル名を聞かれるので、それぞれ、 /home/sho/sgse、sgse、sgse.gladeとします。
gladeのツールバーの「作成」をクリックして、テンプレート・ファイルを作成し ます。これによって、プログラムのソースファイルだけでなく、 Makefileやconfigureファイルなどのファイルも作成されます。
一旦gladeを終了します。そのためgladeの「ファイル」メニューから「終了」を選 択します。
次に、ソース・ファイルを編集してプログラムの機能部分を加えます。
エディタについては、ユーザの好みが非常に強く出るツールであることも あり、現バージョンの式神SDKでは、標準的なものは用意していません。好み のものを利用して下さい。
ツール・バーの「作成用端末」をクリックして、開発用の端末エミュレー タを起動します。
端末エミュレータ上で"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 |
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; } |
今回は、簡単化のため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(); } |
ソース・ファイルの変更が終ったので、autoge.shスクリプトを実行して、 Makefileを生成します。
次にmakeを実行して、PC上で動作するバイナリを作成します。
作成したプログラムをテストするために、式神環境を起動します。ホーム ・ディレクトリの下にsgsdkというディレクトリが作成されて、式神環境での ホーム・ディレクトリとして利用されます。
作成したプログラムを式神環境の元に実行します。
式神環境を終了する場合は、利用しているウィンドウ・マネージャのやり 方で強制終了させて下さい。
PC上で動作が確認できたら、iPAQ用にクロス・コンパイルします。
以前のバイナリを削除するために、「作成」メニューから「Make clean」 を選択します。
make cleanが終了したら、クロスコンパイル用にautogen.shを実行します。 そのためには、「クロス開発」メニューから「XAutogen」を選択します。 インストール先は、規定値(/usr/local)になっています。
autogen.shが終了したら、makeを実行します。そのためには、ツール・バー の「XMake」をクリックします。makeが終了したらバイナリの完成です。
作成したバイナリをiPAQにインストールするためのtarファイルを作成します。
完成したバイナリを、iPAQにインストールします。
cd /usr/local tar xvfz /tmp/bindist.tar.gz |
インストールしたsgseを実行してみます。
以上で、簡単エディタsgseの完成です。
ここでは、GUIフロント・エンドの機能を網羅的に説明します
最初に起動した時および設定メニューから表示される設定ダイアログは、 設定を変更するためのものです。
変更した設定は、ファイルに保存されます。 最初は、ホーム・ディレクトリの下の.gnome/sgsdkに保存されます。
「ファイル」メニューから「名前をつけて保存」を行なうと、現在の設定は指定 したファイルに保存され、以後の変更もこのファイルに保存されます。「ファ イル」メニューの「新規」を選択すると、以後の設定の変更はどこにも 保存されない状態になります。
「基本」、「実行」、「作成」、「クロス開発」の4個のタブが存在します。 各タブの意味は以下の通りです。
すべての環境に共通の設定項目で、以下の項目が存在します。
式神SDKのバイナリのルート・ディレクトリです。現バージョンでは、 /sgsdkで、変更してはいけません。
各環境で作業するための端末エミュレータ・プログラムです。規定値は、 ktermです。実行するプログラム行が後に続く形で起動されるので、"-e"など のオプションが必要となります。注意して下さい。
式神用のアプリケーションをPC上で実行する際に関係する項目です。式神環境 自体の実行にも関係します。以下の項目が存在します。
この環境で実行するプログラムは、実際のユーザのホーム・ディレクトリで はなく、この項目で指定されるディレクトリをホーム・ディレクトリとして実 行します。gtkやgnomeの設定や布目のユーザ辞書等は、このディレクトリの下 に保存されます。存在しない場合は、自動的に作成されます。
式神環境を実行するためのXnestのディスプレイ番号を指定します。この番 号を引数としてXnestを起動します。
式神用プログラムをPC上で動作するようにコンパイルする際に関係する項 目です。以下の項目が存在します。
configureスクリプトを実行する場合の引数を指定します。規定値では、 /sgsdkの下のライブラリやプログラムを使用するようになっています。また、インストー ル先も/sgsdkの下になっています。autoge.shスクリプトの実行の際もこの項 目の値が引数として指定されます。
PC上でiPAQ(ARM CPU)用のバイナリをクロス・コンパイルする際に関係す る項目です。以下の項目が存在します。
ターゲット・マシンのアーキテクチャです。現バージョンでは、arm-linux 以外は指定できません。
クロス開発ツールが存在するトップ・ディレクトリです。現バージョンで は/skiff/local以外は指定してはいけません。
configureスクリプトを実行する場合の引数を指定します。規定値では、 /skiff/local以下のクロス開発ツールのプログラム、ライブラリを使用するよ うになっています。インストール先は、指定していませんので必要に応じて追 加して下さい。autoge.shスクリプトの実行の際もこの項目の値が引数として 指定されます。
メインのウィンドウは、以下のようになっています。
ウィンドウは、6個の部分からなり、上から「メニュー・バー」「ツール・ バー」「カレント・ディレクトリ入力」「カレント・ディレクトリ表示」「コ マンド出力表示エリア」「ステータス・バー」です。
各部分の機能は以下の通りです。
メニューがならんでいる部分です。詳細は、後ほど説明します。
機能アイコンがならんでいる部分です。詳細は、後ほど説明します。
SDKフロント・エンドのカレント・ディレクトリを変更するための入力場 所です。ディレクトリ名を入力後、Enterを押すことでカレント・ディレクト リが変更されます。
autogen.shやconfigureスクリプト、Makefile等はカレント・ディレクトリ のものを使います。
カレント・ディレクトリを表示しています。
フロント・エンドから起動したmakeやconfigureおよびアプリケーションの 標準出力、標準エラー出力の内容がここに表示されます。
メニュー・バーには、「ファイル」、「表示」、「実行」、「作成」、 「クロス開発」、「配付」、「設定」、「ヘルプ」の8個のメニューが存在し ます。以下で、各メニューの説明を行ないます。
ファイル関係等のメニューです。以下の項目が存在します。
新規のプロジェクトを開始します。以後の設定の変更はどこにも保存され なくなります。
指定したファイルから設定を読み込みます。以後の設定の変更は指定した ファイルに保存されます。
指定したファイルに現在の設定を保存します。以後の設定の変更は指定した ファイルに保存されます。
SDKフロント・エンドを終了します。
表示関係のメニューです。以下の項目が存在します。
コマンド出力表示エリアをクリアします。
式神環境での実行に関係するメニューです。以下の項目が存在します。
式神環境を起動します。
アプリケーションを実行します。ウィンドウは、式神環境に表示されるよ うにDISPLAY環境変数が設定されます。先に式神環境が起動されている必要が あります。
端末エミュレータを適切な環境変数の設定で起動します。このエミュレー タ中から起動されたアプリケーションのウィンドウは、式神環境に表示されま す。
適切な設定の元にxxgdbを起動します。この中で実行されるプログラムの ウィンドウは、式神環境に表示されます。
選択すると次のようなダイアログが表示されます。
デバッグしたいプログラムのパス名を入力して下さい。
フロントエンドから起動したスクリプト・コマンドやアプリケーションな どを強制終了させるためのものです。
選択すると次のダイアログが表示されます。
リストの行は、前半がプロセスID、後半がコマンド行を示しています。
リストから終了させたいプログラムを選択して「OK」ボタンをクリックす ると、選択したプログラムにTERMシグナルが送られて終了します。複数のプロ グラムを選択しても構いません。
PC上でプログラムを作成するのに関係するメニューです。以下の項目が存在します。
適切な環境変数で、設定で指定されている引数を指定してautogen.shを起 動します。
適切な環境変数で、設定で指定されている引数を指定してconfigureを起 動します。
適切な環境変数で、makeを起動します。
適切な環境変数で、make installを起動します。
規定値でconfigureを実行している場合は、/sgsdkの下にインストールされ ます。
適切な環境変数で、make cleanを起動します。
端末エミュレータを適切な環境変数の設定で起動します。
適切な環境変数で、gladeを起動します。
クロス・コンパイルに関係するメニューです。以下の項目が存在します。
適切な環境変数で、設定で指定されている引数を指定してautogen.shを起 動します。
configure.inやMakefile.amがクロスコンパイル用に正しく書かれている 必要があります。
適切な環境変数で、設定で指定されている引数を指定してconfigureを起 動します。
configure.inやMakefile.amがクロスコンパイル用に正しく書かれている 必要があります。
適切な環境変数で、makeを起動します。
適切な環境変数で、make cleanを起動します。
端末エミュレータを適切な環境変数の設定で起動します。
配付やインストールに使うtarファイルを作成するメニューです。 以下の項目が存在します。
適切な環境変数で、make distを起動します。
適切にMakefile.am等が書かれていれば、ソース配付用のtarファイルが作 成されます。
適切な環境変数で、make bindistを起動します。
適切にMakefile.am等が書かれていれば、バイナリ配付用のtarファイルが作 成されます。
設定に関するメニューです。以下の項目が存在します。
設定ダイアログを表示します。
ヘルプに関するメニューです。以下の項目が存在します。
フロントエンド・プログラムの著作権情報等を表示します。
ツール・バーは、クリックすることで起動できるアイコンを保持します。 各アイコンは、メニューの項目に対応しており、対応したメニュー項目を選択 したのと同じ効果があります。以下のアイコンが存在します。
アイコン | 対応するメニュー項目 |
---|---|
アプリの実行 | 「実行」メニューの「アプリの実行」 |
実行用端末 | 「実行」メニューの「実行用端末」 |
Make | 「作成」メニューの「Make」 |
作成用端末 | 「作成」メニューの「作成用端末」 |
XMake | 「クロス開発」メニューの「XMake」 |
クロス開発用端末 | 「クロス開発」メニューの「クロス開発用 端末」 |
ここでは、式神環境をPC上で見てみたい方のために、式神環境の起動の方 法に絞って説明します。
まず、式神SDKフロント・エンドを起動します。
/sgsdk/bin/sikigamisdk |
式神フロント・エンドは、最初に起動した時には、まず次の設定ダイアログが表示されま す。
ここでは、「OK」ボタンをクリックします。
すると、次の画面が表示されます。
このウィンドウの「実行」メニューから「式神」を選択します。 次のように、320x200の大きさのウィンドウが表示されて、その中に 式神環境が起動されます。
終了する場合は、利用しているウィンドウ・マネージャのやり方で強制終了させて下 さい。