第7回: 小物に仕立て上げてみよう

ここまでくれば、BTRONネイティブなアプリケーションを書くのに必要な知識はおおよそ揃っている状況かと思います。開いた仮身とか印刷とか、そういったものはちょっと難しいのでこの入門ではたぶん取り扱いませんが、これから知っておくとプログラミングの幅が広がる内容として、

などが残っています。これらを優先度の高い順に、私のやる気次第でぼちぼち書いていきたいと思います。(もうここまでくれば田崎さんの入門を読んだ方が良いと思います。ここではごく簡単に導入部分しか触れませんし…。)

1. BTRONアプリケーション起動の仕組み

1.1. 小物アプリケーションと原紙アプリケーション

ここを読んでいる方の多くは、おそらく小物・原紙アプリケーションの違いをよくご存じだと思います。原紙箱の中に入っているアプリケーションが原紙アプリケーション、小物箱の中に入っているのが小物アプリケーションです。

実はそのほかにもアプリケーションの種類というのは存在して、例えばコンソールアプリケーションなどはその一例です。今まで作ってきた ******.out 形式のファイル名のものは、基本的にコンソールアプリケーションです。

ところで、小物や原紙アプリケーションとコンソールアプリケーションでは、起動の仕組みがやや異なっています。また、機能付箋・実行機能付箋など、コンソールアプリケーションにはない特性を持っています。それらを順に説明していきましょう。

1.2. 小物・原紙アプリケーションのMAIN関数

今まで説明してきたコンソールアプリケーションでは、スタート時の関数は、

W main(W argc, TC* argv[]);

でした。ところが、原紙・小物アプリケーションの起動は、たとえば付箋や仮身をダブルクリックしたり、ということなので、基本的にコマンドライン引数をとることはありませんから、argc, argvは不要、ということになります。また、原紙アプリケーションでは、どの仮身がダブルクリックされたか、というのが非常に重要になります。それをアプリケーションが知ることができないと、どの実身に内容を保存していいかわからず、困ってしまうわけです。

したがって、main関数ではちょっと不便なので、小物・原紙アプリケーションを書くときには、代わりにMAIN関数という別のスタートアップ関数を記述します。そのプロトタイプは以下のようになっています。

W MAIN(MESSAGE *msg);

MESSAGE型は、一般的にはプロセス間のメッセージ通信に使われる構造体ですが、起動時に使うときには、M_EXECREQ, M_TADREQなどの個別の「起動メッセージ」に対応する型にキャストして中身を見ます。そうすることで、ダブルクリックされた仮身やプログラム実身へのリンクなど、必要な情報を取り出すことが出来ます。

実身の場合は特にこの情報が重要ですが、小物の場合は、それほどmsgの中に入った情報を必要としないので、単に無視しても特に弊害はないです。必要な時に具体的な内容は調べてください。

2. BTRONファイルを作る

なんだか抽象的な話が続きますね。次の章からは実際に作ってみる作業をしますが、その前に基礎をある程度知っておくとよいので、頑張って読んでください。

2.1. マルチレコード構成

ご存じのかたもいらっしゃるかもしれませんが、BTRONのファイルは、Unix系のファイルとは違って、マルチレコードな仕組みを持っています。ファイルを例えば1枚の音楽CDにたとえると、レコードというのはCDの中の"トラック"に相当するもの、と考えて差し支えないでしょう。マルチレコードなファイル方式を持っていると、一つのファイルの中のそれぞれのレコードに対して独立に読み書きが出来ます。

一方、WindowsやUnix系のOSではマルチレコードではなく、一つのファイルが一つのレコードに対応しています。つまり、複数のレコードを一つのファイルの中に入れることが出来ません。こちらは"音楽レコード"に例えることが出来ますね。

ところで、BTRONのソフトウェアを開発しているのは基本的にUnix系の環境のはずです、…ということは、つまり、Unix系の開発環境では、レコードを複数持ったソフトウェアを作ることが出来ない、ということになりそうですね。これは実は大問題で、小物・原紙アプリが作れないということになってしまいます。

したがって、Unix系の開発環境で作ったプログラムを超漢字側に持っていく場合は、複数のレコードを一つのレコードに固めた「書庫」ファイルのようなものにいったん変形する必要があります。これが実は *.bz という拡張子のファイルです。

※ ちなみに、いままで作ってきた *.out 形式のプログラムは1つしかレコードを持たないプログラムです。そのため何もせずに転送して、そのまま実行できました。

2.3. レコードを見てみる

「ディスク集め」のシステムディスクを開いてすぐのところに、testという文書ファイルを作って置いて保存してある状況を仮定します。BTRONのコンソール上で以下のようなコマンドを実行してみてください。

[/SYS]% fs /SYS/test
test:
 0:   8      0 : 128
 1:   8      0 : 114
 2:   1      0 : 258
--- End of Record ---
[/SYS]% 

上のような結果になったと思います。これは0〜2番のレコード(つまり合計3つのレコード)が存在し、それぞれのレコードタイプ(レコードの種類)が8番(実行機能付箋レコード)・1番(TAD主レコード)に相当することを示しています。3列目の値はサブタイプです。詳しくは、"? fsを実行すると見ることが出来ます。

2.4. *.bzアーカイブファイルを作ってみる

前節で見た実身"test"をレコードごとに分割したファイルを用意しました。(test_0.bin / test_1.bin / test_2.bin) 以下、これを再び合体して*.bzアーカイブファイルを作ってみましょう。

※ ちなみに、レコードを分割したファイル群は、ファイル変換の際に「無変換(詳細)」を選択することで作ることが出来ます。

開発マシンのtest_?.binを保存したディレクトリの中で、以下のようなコマンドを実行してみてください。

$ /usr/local/brightv/etc/mkbtf -a1 -c -ttest -otest.bz 8.0.test_0.bin 8.0.test_1.bin 1.0.test_2.bin

大体想像はつくと思いますが、test.bzというファイル名で*.bzアーカイブを出力します。その後に続くのが、(レコードタイプ番号).(サブタイプ番号).(ファイル名)の連続です。つまり例えば、test_0.binはレコードタイプ8番・サブタイプ0番のレコードタイプとして、test.bzの中に含める、ということです。-ttestはBTRON側の実身名がtestであること、-a1はアプリケーションタイプ(ピクトグラムの種類に相当します)が1番であることを示しています。

このようにして作ったtest.bzを超漢字側に持っていって、展開してみましょう。超漢字4では、ファイル変換の際に「アーカイブ」形式を選択すればOKです。実際にやってみると、testファイルが復元できるはずです。

※ 詳しいmkbtfコマンドの使い方は、mkbtfコマンドを無引数で実行すると見ることが出来ます。また、レコードの結合をBTRON環境で自然に行うコマンドとしてapdコマンドがあります。

3. 小物を作ってみる

前章で大まかなBTRONファイルの作り方が分かったのではないかと思います。そこで、この章では、実際にマルチレコードからなる小物ファイルを作ってみたいと思います。

まず、前回のソースコードをベースに使用することにします。お手元のソースをコピーしてもらってもかまいませんし、ダウンロード・展開して使っていただいてもOKです。例えば以下のような感じで作業することになるでしょう。

$ cd /usr/local/brightv/appl
$ tar xvzf lecture6-2.tar.gz
$ cd lecture6-2/pcat
$ ln -s ../src/Makefile

今までの*.out形式のアプリケーションとは違って、小物・原紙アプリケーションは*.bz形式になっています。機能付箋レコード・データボックスレコードを持たせるのが一般的(前者は必須)だからです。また、「システム環境設定」のバージョンタブに放り込むためには、インストールスクリプトへのリンクがついている必要があります。

そこで、2つの新しいソースファイルを付け加えます。lecture6-2.flecture6-2.dです。*.f, *.dファイルは、それぞれ機能付箋レコード・データボックスレコードの中身部分に相当しています。いずれもsrc/の中に入れてください。また、*.f, *.dの * 部分は、いずれも Makefile の中の TARGET = .... で示される、....の部分に相当する文字列でなければいけません。

次に、今までの作成対象は *.out のような、シングルレコードのアプリケーションになっていました。作成対象を *.bz に変えるためには、

#all: $(ALL)
all: $(TARGET)$(EXT)

のようになっているところを、

all: $(ALL)
#all: $(TARGET)$(EXT)

と書き換えます。

基本的にはこれでOKのはずです。試しにmakeしてみてください。lecture6-2.bzが無事に作成できたら、これをファイル変換(無変換・基本)で超漢字側に持っていき、「システム環境設定」のバージョンタブに放り込んでみてください。無事に小物箱から起動できていれば大成功です。

4. 小物のアプリケーション情報を変えてみる

小物のバージョンや小物の名前など、*.bzを作る際にはいろいろな情報をつけなければなりません。それらの設定を説明します。(抜けがあったりしたら教えてください)

4.1. アプリケーションID

もっとも重要なのが、この「アプリケーションID」です。詳しくはこのページを参照してください。要点をまとめると、アプリケーションIDというのはソフトウェアの識別子である、ということです。2つのアプリケーションが異なるソフトであれば、アプリケーションIDは異なっていなければなりません。

従って、BTRONアプリケーションの持つアプリケーションIDは重複のないように定められています。たとえばこのような感じです。ですから、皆さんがソフトを書く場合にも、固有のIDを使う必要があります。

その固有のIDの割り当ては、現在パーソナル・メディア社が担当しています。IDをもらうためには、そのためには、「アプリケーションID」のページの下の方にある、"個人向けアプリケーションIDの申請方法"の項目を読んで、所定の手続きを踏む必要があります。

ただし、個人的な環境で使うだけのテスト用のアプリケーションであれば、以下のIDの範囲は自由に使って良いとされています。ちょうど、IPアドレスのプライベートアドレスに相当するものですね。この範囲内でIDを割り当てたソフトを外部に公開することは混乱を招きますのでやめましょう。割り当て済みのIDを用いることも当然同様です。(もちろんプログラミングのサンプル等なら許されます。)

個人用のアプリケーションIDの範囲

小物
8000.C000.XXXX (XXXXは0xBF00〜0xBFFFの範囲内)
原紙
8000.YYYY.ZZZZ (YYYYは0xC001〜0xFFFFの範囲、ZZZZは0xBF00〜0xBFFFの範囲)
※ 例外的に、8000.C001.BF00 は「プログラミング言語T」で使用されているため、重ならないように注意してください。

ところで、アプリケーションIDの設定は、*.fファイル(今回はlecture6-2.fです)の中の、

        0x8000  0xc000  0xbf00                  -- appl ID

のようになっている行をいじればOKです。上の例ではアプリケーションIDは 8000.C000.BF00 になっています。

4.2. その他

たくさんあるので、どんどん列挙していきましょう。(念のためアプリケーションIDも再掲します。)

アプリケーションID
*.f ファイルの -- appl ID の欄
アプリケーション名(原紙箱・小物箱で表示される名前)
*.f ファイルの -- name の欄
アプリケーションタイプ名
*.f ファイルの -- type の欄
バージョン番号
Makefile の version = ... となっている行
アーカイブファイル名(*.bzの*の部分)
Makefile の target = ... となっている行
アプリケーションタイプ(ピクトグラムの種類に対応)
$(TARGET).form: $(TARGET).fsn
        $(MKBTF) -o$@ -a2 -tbslide \
                8.0.$(TARGET).fsn
の、-a2の部分
$$PROGRAM.BOX中での展開時の実身名
上の -tbslide に対応する部分
ソースコード
Makefile の SRC = ... の行に列挙

だいたいこんなところだと思います。本当はGNU Makeに関する知識をもとにきちんと理解したほうが良いのですが、それも大変なので、とりあえずは上のように把握しておいてください。

演習問題

アプリケーション開発からは少し離れた抽象的な事項になりますが、BTRONファイルシステムについて理解するには良い機会だと思うので、必須ではないですがぜひ試してみてください。

  1. 作った小物アプリケーションの*.bzファイルを、ファイル変換(アーカイブ形式)を用いて超漢字上で展開し、fsコマンドで中身を確認し、マルチレコードなファイルになっていることを確かめてください。
  2. BTRONのコンソールコマンドにapdコマンドという、mkbtfの作業を圧縮アーカイブを経由せず、直接行うためのコマンドがあります。使い方を調べてみましょう。

[ 戻る ]

Last modified: Sun Oct 3 16:39:20 2010
Valid XHTML 1.0!