第2回: 最小のBTRONプログラムを書く

はじめですから、まずは基本的なところからはじめてみたいと思います。自分が理解でき自由にアレンジできる最小構成からはじめること、これは鉄則です。

もっと大きなプログラムを作りたい、という欲求も出てくるでしょうが、まだまだ辛抱が必要です。(長い辛抱になりますので、厳しそうであればマイクロスクリプトのほうを極めるのも一つの手だと思います。)

今回のプログラム全体を固めたものはこちらです: lecture1.tar.gz

1. 下ごしらえから

それではまず、開発環境側で以下のような作業をしてください。ここでは、標準的なディレクトリ(/usr/local/brightv/)にインストールされているものとして話を進めます。そうでない場合は、各自読み替える必要があります。

$ cd /usr/local/brightv/appl/
$ mkdir lecture1
$ mkdir lecture1/pcat
$ mkdir lecture1/src

そこまでいったら、このMakefileを/usr/local/brightv/appl/lecture1/src/の中に保存してください。続いて、

$ cd lecture1/pcat/
$ ln -s ../src/Makefile

としましょう。ここまで行けば下ごしらえは出来たといえます。

ここで使っているMakefileは、〜.outという名前の実行形式ファイルを出力するように作ってあります。bzアーカイブは生成しません。練習段階では*.bzアーカイブを作る手間は時間的にもったいないのでそのような形をとります。小物・原紙などのアプリケーションを作る際には別のMakefileが必要です。

2. プログラムを書く

2.1. main.CCを書く

それでは、やっとプログラムが書ける下地が整いました。早速簡単なものを書いてみましょう。名前はmain.CCとしてください。テキストエディタでeuc-jp/lfな文字コードで保存する必要があることにも注意しましょう。(例えばXEmacsなら以下のようにします。)

xemacs ../src/main.CC &

打ち込むべきコードは以下の通りです。ダウンロードも出来るようにはしますが、自分で打ち込んでみることを強くおすすめします。

#include <basic.h>
#include <btron/proctask.h>
#include <btron/hmi.h>

extern "C" W main(W argc, TC* argv[])
{
  TC text[] = {L"Hello, World!"};
  pdsp_msg(text);
  ext_prc(0);
}

2.2. Makefileを書き換える

ここではいじる必要がないのですが、今後のために知っておいた方が良いMakefileのいじり方を書いておきます。知っている方は結構ですが、飛ばさずに読んでください。

ここで取り上げるのは2箇所だけです。本当は$(MKBTF)の行とかも説明すべきですが、それは*.bzアーカイブを作る時になったら追々説明します。

# 作成対象
TARGET = lecture1

この行はプログラム名です。lecture1となっていますから、実行ファイルはlecture1.outという名前になります。

# ソースファイル
SRC = main.CC

この行はソースファイルの名前を指定するためのものです。複数ある場合は、

SRC = foo.CC bar.CC baz.CC

のように、間にスペースを挟みつつ、単純に並べて書いてください。

第2回以降は、第1回のMakefileをコピーして、以上の部分を修正しながら使っていけばOKです。自分でオリジナルのプログラムを作るときも同じようにしてください。

2.3. コンパイルする

あとはコンパイル・実行するだけです。コンパイルは/usr/local/brightv/appl/lecture1/pcatの中で、

$ make

とするだけです。何やら長いコマンドが出力されますが、エラーメッセージが表示されていなければコンパイルに成功しています。

2.4. 実行する

実行ですが、作った第1回で用意したrunをインストールしている方は、デバッグコンソールかシステムコンソールで、

% cd /SYS/WORK
% run lecture1

としてください。runはファイルの転送・実行の両方を一度に行うためのものです。

ここで、run lecture1の実行の際に、システムメッセージパネルを見てください。システムメッセージパネルに"Hello, World!"が表示されましたか? 表示されていれば、ここまでの手順で正しくBTRONプログラムが書けて実行できている、といえます。

3. プログラムの解説

どのようにして、"Hello, World!"という文字列が表示されたのか、プログラムを見てみましょう。

プログラムの実行に関係しているのは、main()関数の内部、つまりたったの3行です。

3.1. 一行目から

まず、一行目の、

TC text[] = {L"Hello, World!"};

です。これは、textというTC型の配列変数に"Hello, World!"という文字列を代入しています。TC型はTRONコード文字一文字分を表す変数だと考えてください。それの配列だから文字列になります。

L"..."となっているのは、wch2hexというプログラムにより、EUCで書かれたL"..."内部をTRONコードに変換するよう指示するためです。

ASCIIコード(つまり普通の文字)とTC文字列には、本質的には仕組み上の違いはありません。以下に比較のための表を書いておきます。(現段階で完璧に理解している必要はありません。)

文字列の終端 一文字分のサイズ 多文字の表現
ASCII文字列 '\0' (=0, 1バイト, NULL文字) sizeof(char) = 1バイト
マルチバイト文字は例外的
ISO-2022, EUC-JPなど様々な方式
TC文字列 TNULL (=0, 2バイト) sizeof(TC) = 2バイト 文字コード切り替え方式(ISO-2022に類似)

従って、要はASCII文字の時に char text[] = "Hello, World!"; としている事のTCバージョンだと考えれば大丈夫です。

3.2. 次は二行目

pdsp_msg(text);

次に、2行目のpdsp_msgです。これは、与えられたTC文字列をシステムメッセージパネルに表示する、というそのままな命令です。1行目でtextにはTC文字列の"Hello, World!"を代入していますから、2行目に来た時点でそのようにシステムメッセージパネルに表示されるわけです。

3.3. 最後に三行目を

ext_prc(0);

3行目のext_prcは自プロセスを終了する、という命令です。プロセスはプログラムという意味で解釈してもらって大丈夫です。cre_prc(別のプロセスを起動する)などをしていない場合は、単にext_prcで自プロセス(=プログラム自身)を終了できます。引数には返り値を与えます。正常終了の場合には0を返すのが一般的な習慣です。

…いかがでしたか? 3行分の短いプログラムでしたが、しっかり理解できましたでしょうか?

4. 演習問題

オプショナルですが、ぜひ試してみてください。これらが分かれば次に進んで大丈夫です。

  1. $ make cleanを実行してから、main.CCをfoo.CCと名前変更してください。(Unix系OSではmvコマンドを使用します。) これをコンパイルできるようにMakefileを書き換えてください。
  2. システムメッセージパネルに、"Hello, World!"のかわりに"こんにちはBTRON!"と表示してください。
  3. メッセージの表示とともに、ブザーを鳴らしてください。(ヒント: sig_buz命令を使用します。仕様書で調べる技術も重要です! )

[ 戻る ]

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